提交 49e463f3 作者: Hao

网站修改基础设置的接口

父级 16de3dbb
...@@ -6,10 +6,10 @@ ...@@ -6,10 +6,10 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0"> <meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>userSide</title> <title>userSide</title>
<script > <!-- <script>
this.resizeTo(800,600); this.resizeTo(800,600);
this.focus(); this.focus();
</script> </script> -->
</head> </head>
<body> <body>
......
...@@ -147,7 +147,7 @@ table { ...@@ -147,7 +147,7 @@ table {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
display: -webkit-box !important; display: -webkit-box;
white-space: normal; white-space: normal;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-line-clamp: 2; -webkit-line-clamp: 2;
......
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { useUserStore } from "../store/modules/user"; import { useUserStore } from "../store/modules/user";
let HeartbeatTime:any = null; import {
useRoute
} from 'vue-router';
const route = useRoute() || {}
const routeParams = route.query || {}
let HeartbeatTime: any = null;
let websocket: WebSocket | null = null; // 用于存储实例化后websocket let websocket: WebSocket | null = null; // 用于存储实例化后websocket
let rec: any; // 断线重连后,延迟5秒重新创建WebSocket连接 rec用来存储延迟请求的代码 let rec: any; // 断线重连后,延迟5秒重新创建WebSocket连接 rec用来存储延迟请求的代码
// 创建websocket // 创建websocket
let callBack: any = null;
const connectMsg = (fun) => {
callBack = fun
console.log(callBack)
const useUser = useUserStore()
useUser.setUserInfo({
username: routeParams.loginId || '1721217621001',
})
const wsUrl = `${import.meta.env.VITE_USER_APP_WS_API_URL}?type=yk&code=${useUser.userInfo.username
}&kf=${useUser.customerInfo.username}`
console.log(wsUrl)
initWebSocket(wsUrl)
}
function creatWebSocket(wsUrl: string) { function creatWebSocket(wsUrl: string) {
// 判断当前浏览器是否支持WebSocket // 判断当前浏览器是否支持WebSocket
if ("WebSocket" in window) { if ("WebSocket" in window) {
...@@ -25,37 +43,37 @@ function creatWebSocket(wsUrl: string) { ...@@ -25,37 +43,37 @@ function creatWebSocket(wsUrl: string) {
// 初始化websocket // 初始化websocket
function initWebSocket(wsUrl: string) { function initWebSocket(wsUrl: string) {
if (!websocket) websocket = new WebSocket(wsUrl); if (!websocket) websocket = new WebSocket(wsUrl);
websocket.onopen = function (eee) { websocket.onopen = function(eee) {
websocketOpen(); websocketOpen();
}; };
// // 接收 // // 接收
websocket.onmessage = function (e: MessageEvent<any>) { websocket.onmessage = function(e: MessageEvent<any>) {
websocketonmessage(e); websocketonmessage(e);
}; };
// 连接发生错误 // 连接发生错误
websocket.onerror = function () { websocket.onerror = function() {
// isConnect = false; // 连接断开修改标识 // isConnect = false; // 连接断开修改标识
reConnect(wsUrl); // 连接错误 需要重连 reConnect(wsUrl); // 连接错误 需要重连
}; };
websocket.onclose = function (e) { websocket.onclose = function(e) {
websocketclose(e); websocketclose(e);
}; };
} }
//调取心跳 //调取心跳
function websocketHeartbeat(){ function websocketHeartbeat() {
clearInterval(HeartbeatTime) clearInterval(HeartbeatTime)
HeartbeatTime = setInterval(()=>{ HeartbeatTime = setInterval(() => {
console.log('调取心跳') console.log('调取心跳')
websocketsend({ websocketsend({
cmd:13 cmd: 13
}); });
},10000) }, 10000)
} }
// 定义重连函数 // 定义重连函数
const reConnect = (wsUrl: string) => { const reConnect = (wsUrl: string) => {
if (useUserStore().isConnected) return; // 如果已经连上就不在重连了 if (useUserStore().isConnected) return; // 如果已经连上就不在重连了
rec && clearTimeout(rec); rec && clearTimeout(rec);
rec = setTimeout(function () { rec = setTimeout(function() {
// 延迟5秒重连 避免过多次过频繁请求重连 // 延迟5秒重连 避免过多次过频繁请求重连
creatWebSocket(wsUrl); creatWebSocket(wsUrl);
}, 5000); }, 5000);
...@@ -69,11 +87,15 @@ function websocketOpen() { ...@@ -69,11 +87,15 @@ function websocketOpen() {
// 数据接收 // 数据接收
function websocketonmessage(e: MessageEvent<any>) { function websocketonmessage(e: MessageEvent<any>) {
const res = JSON.parse(e.data); // 解析JSON格式的数据 const res = JSON.parse(e.data); // 解析JSON格式的数据
console.log(res,'res')
if (res.command == 11) { if (res.command == 11) {
console.log('收到')
//将数据放在store中 //将数据放在store中
// 下面的判断则是后台返回的接收到的数据 如何处理自己决定 // 下面的判断则是后台返回的接收到的数据 如何处理自己决定
setTimeout(() => { setTimeout(() => {
useUserStore().setUserListMessages(res.data).then(); console.log(callBack,'callBack')
callBack()
// useUserStore().setUserListMessages(res.data).then();
}, 10); }, 10);
} }
} }
...@@ -89,7 +111,6 @@ function websocketclose(e: any) { ...@@ -89,7 +111,6 @@ function websocketclose(e: any) {
function websocketsend(res: any) { function websocketsend(res: any) {
if (websocket && useUserStore().isConnected) { if (websocket && useUserStore().isConnected) {
// 检查连接状态 // 检查连接状态
console.log("发送的数据", JSON.stringify(res));
websocket.send(JSON.stringify(res)); websocket.send(JSON.stringify(res));
} else { } else {
ElMessage({ ElMessage({
...@@ -130,4 +151,4 @@ const closeWebSocket = () => { ...@@ -130,4 +151,4 @@ const closeWebSocket = () => {
} }
}; };
export { initWebSocket, sendWebSocket, creatWebSocket, closeWebSocket }; export { connectMsg, initWebSocket, sendWebSocket, creatWebSocket, closeWebSocket };
...@@ -7,24 +7,17 @@ ...@@ -7,24 +7,17 @@
</el-header> </el-header>
<el-container> <el-container>
<el-container> <el-container>
<el-main <el-main id="srollId" ref="srollId" :style="{
id="srollId"
ref="srollId"
:style="{
padding: '0px 24px', padding: '0px 24px',
height: '60vh', height: '60vh',
width: '100%', width: '100%',
}" }">
>
<div class="title-message">You have no history messages</div> <div class="title-message">You have no history messages</div>
<div class="we-connecting"> <div class="we-connecting">
We are connecting you to online customer service We are connecting you to online customer service
</div> </div>
<!-- 推荐商品 --> <!-- 推荐商品 -->
<div <div class="message-container message-container-right" v-if="productInfo.isShow">
class="message-container message-container-right"
v-if="productInfo.isShow"
>
<div class="classSendLink"> <div class="classSendLink">
<div class="classSendDiv"> <div class="classSendDiv">
<div class="classSend-img"> <div class="classSend-img">
...@@ -73,12 +66,32 @@ ...@@ -73,12 +66,32 @@
<div class="message-time" v-if="message.time == 1"> <div class="message-time" v-if="message.time == 1">
{{ message.time }} {{ message.time }}
</div> </div>
<!-- 发送的推荐商品 -->
<div <!-- 图片 -->
class="message-container message-container-right" <div v-else-if="message?.msgType == 1" class="message-container image-content"
v-if="message.msgType == 3" :class="getMessageClass(message?.isSent)">
@click.prevent="handleMessageClick($event)" <div class="message-container">
> <div class="bubble">
<div class="img-wraper">
<el-image :src="message?.content" :preview-src-list="[message?.content]" />
</div>
</div>
</div>
</div>
<!-- 视频 -->
<div v-else-if="message?.msgType == 2" class="message-container video-content"
:class="getMessageClass(message?.isSent)">
<div class="message-container">
<div class="bubble">
<div class="img-wraper">
<video :src="message?.content" controls />
</div>
</div>
</div>
</div>
<!-- rfq -->
<div class="message-container message-container-right" v-else-if="message.msgType == 3"
@click.prevent="handleMessageClick($event)">
<div class="classSendLink"> <div class="classSendLink">
<div class="classSendDiv"> <div class="classSendDiv">
<div class="classSend-img"> <div class="classSend-img">
...@@ -102,61 +115,8 @@ ...@@ -102,61 +115,8 @@
</div> --> </div> -->
</div> </div>
</div> </div>
<!-- 普通聊天 -->
<div
v-if="message?.msgType == 0"
class="message-container"
:class="getMessageClass(message?.isSent)"
>
<div v-if="message.isSent" class="message-container">
<div class="bubble">
<!--文字 -->
<div
v-if="message?.msgType == 0"
class="message"
v-html="message?.content"
@click.prevent="handleMessageClick($event)"
></div>
<div v-else class="img-wraper">
<el-image
:src="message?.content"
:preview-src-list="[message?.content]"
/>
</div>
</div>
<!-- <div class="avatar">
<img
src="../assets/shop.jpg"
alt="Avatar"
class="avatar-image"
/> -->
<!-- </div> -->
</div>
<div v-if="!message.isSent" class="message-container">
<!-- <div class="avatar">
<img :src="message?.userImg" class="avatar-image" />
</div> -->
<div class="bubble">
<div
v-if="message?.msgType == 0"
class="message"
v-html="message?.content"
@click.prevent="handleMessageClick($event)"
></div>
<div v-else class="img-wraper">
<el-image
:src="message?.content"
:preview-src-list="[message?.content]"
/>
</div>
</div>
</div>
</div>
<!-- 询价单 --> <!-- 询价单 -->
<div <div class="message-container message-container-right" v-else-if="message.msgType == 4">
class="message-container message-container-right"
v-if="message.msgType == 4"
>
<div class="inquiry-list"> <div class="inquiry-list">
<div class="inquiry-top"> <div class="inquiry-top">
<div class="product-left"> <div class="product-left">
...@@ -187,14 +147,20 @@ ...@@ -187,14 +147,20 @@
</div> </div>
</div> </div>
</div> </div>
<!-- 普通聊天 -->
<div v-else class="message-container" :class="getMessageClass(message?.isSent)">
<div class="message-container">
<div class="bubble">
<div class="message" v-html="message?.content"
@click.prevent="handleMessageClick($event)"></div>
</div>
</div>
</div>
</div> </div>
</el-main> </el-main>
<el-footer class="el-footer" :style="{ border: '1px solid #E9ECF1' }"> <el-footer class="el-footer" :style="{ border: '1px solid #E9ECF1' }">
<AutomaticPrompt <AutomaticPrompt @keydown.enter="handleButtonClick" @updateState="getState"
@keydown.enter="handleButtonClick" ref="automaticPromptRef"></AutomaticPrompt>
@updateState="getState"
ref="automaticPromptRef"
></AutomaticPrompt>
<div class="btn-send"> <div class="btn-send">
<div>[ Send shortcut key: Enter ]</div> <div>[ Send shortcut key: Enter ]</div>
<div> <div>
...@@ -205,14 +171,9 @@ ...@@ -205,14 +171,9 @@
</div> </div>
</el-footer> </el-footer>
</el-container> </el-container>
<el-aside <el-aside width="300px" class="shirnk-aside" v-shrink="{ isShrink, width: '0px' }" :style="{
width="300px"
class="shirnk-aside"
v-shrink="{ isShrink, width: '0px' }"
:style="{
height: 'calc( 100vh - 50px )', height: 'calc( 100vh - 50px )',
}" }">
>
<div class="shrink-text pointer" @click="changeiShrink"> <div class="shrink-text pointer" @click="changeiShrink">
<el-icon size="15"> <el-icon size="15">
<DArrowLeft v-if="isShrink" /> <DArrowLeft v-if="isShrink" />
...@@ -227,11 +188,7 @@ ...@@ -227,11 +188,7 @@
<div class="recentlyViewd" v-if="pageType == 1"> <div class="recentlyViewd" v-if="pageType == 1">
Recommended Products Recommended Products
</div> </div>
<div <div v-for="(item, index) in productList" :key="index" class="browse-glance">
v-for="(item, index) in productList"
:key="index"
class="browse-glance"
>
<img :src="item.productImg" class="browse-img" /> <img :src="item.productImg" class="browse-img" />
<div class="browse-glowup"> <div class="browse-glowup">
<div class="title ellipsis">{{ item.productName }}</div> <div class="title ellipsis">{{ item.productName }}</div>
...@@ -241,96 +198,49 @@ ...@@ -241,96 +198,49 @@
Send Send
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div v-else style="width: 300px;"> <div v-else style="width: 300px;">
<div class="recentlyViewd">Request for Quotation</div> <div class="recentlyViewd">Request for Quotation</div>
<div class="recently-input-box"> <div class="recently-input-box">
<el-form <el-form label-position="top" style="max-width: 600px;" label-width="auto"
label-position="top" class="demo-dynamic" ref="ruleFormRef" :rules="rules" :model="ruleForm">
style="max-width: 600px;"
label-width="auto"
class="demo-dynamic"
ref="ruleFormRef"
:rules="rules"
:model="ruleForm"
>
<el-form-item prop="ProductName" label="Product Name"> <el-form-item prop="ProductName" label="Product Name">
<el-input <el-input v-model="ruleForm.ProductName" style="height: 36px;"
v-model="ruleForm.ProductName" placeholder="Please enter" prop="Email" />
style="height: 36px;"
placeholder="Please enter"
prop="Email"
/>
</el-form-item> </el-form-item>
<el-form-item prop="Email" label="Product Category"> <el-form-item prop="Email" label="Product Category">
<el-select <el-select placeholder="Please select" prop="Email" style="height: 36px;"
placeholder="Please select" v-model="ruleForm.Email">
prop="Email"
style="height: 36px;"
v-model="ruleForm.Email"
>
<el-option label="Restaurant" value="1" /> <el-option label="Restaurant" value="1" />
<el-option label="Order No." value="2" /> <el-option label="Order No." value="2" />
<el-option label="Tel" value="3" /> <el-option label="Tel" value="3" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="unit" label="Purchase Quantity"> <el-form-item prop="unit" label="Purchase Quantity">
<el-input <el-input style="max-width: 300px; height: 36px;" placeholder="Please enter"
style="max-width: 300px; height: 36px;" v-model="ruleForm.purchaseQuantity" class="input-with-select" prop="Email">
placeholder="Please enter"
v-model="ruleForm.purchaseQuantity"
class="input-with-select"
prop="Email"
>
<template #append> <template #append>
<el-select <el-select :clearable="false" placeholder="Select" style="width: 136px;"
:clearable="false" v-model="ruleForm.unit">
placeholder="Select" <el-option v-for="item in unitList" :label="item.value"
style="width: 136px;" :value="item.value" />
v-model="ruleForm.unit"
>
<el-option
v-for="item in unitList"
:label="item.value"
:value="item.value"
/>
</el-select> </el-select>
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="Other requirements explanation" prop="otherRequirements">
label="Other requirements explanation" <el-input v-model="ruleForm.otherRequirements"
prop="otherRequirements" :autosize="{ minRows: 3, maxRows: 10 }" type="textarea"
> placeholder="Please enter" />
<el-input
v-model="ruleForm.otherRequirements"
:autosize="{ minRows: 3, maxRows: 10 }"
type="textarea"
placeholder="Please enter"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item prop="flieUrl">
<!-- <input <input type="file" ref="requireFile" style="display: none;"
class="requirements-box" @change="fileImgChange" />
v-if="!isUpload" <el-input v-model="ruleForm.flieUrl" style="display: none;" />
type="file" <div class="requirements-box pointer" v-if="!ruleForm.flieUrl"
@change="fileImgChange" @click="requireFileOk">
/> -->
<!-- accept="image/bmp,image/jpeg,image/jpg,image/png" -->
<input
type="file"
ref="requireFile"
style="display: none;"
@change="fileImgChange"
/>
<div
class="requirements-box pointer"
v-if="!ruleForm.flieUrl"
@click="requireFileOk"
>
<el-button icon="UploadFilled" class="uploadInfo" /> <el-button icon="UploadFilled" class="uploadInfo" />
<div class="upload"> <div class="upload">
<div class="click-to-upload"> <div class="click-to-upload">
...@@ -341,9 +251,15 @@ ...@@ -341,9 +251,15 @@
</div> </div>
<div class="requirements-box1" v-if="ruleForm.flieUrl"> <div class="requirements-box1" v-if="ruleForm.flieUrl">
<div class="box"> <div class="box">
<div class="upload-name">{{ ruleForm.flieName }}</div> <div class="upload-name">
<span class="flieName ellipsis"
style="-webkit-line-clamp:1;display:block">{{ruleForm.flieName.split('.')[0]}}</span>
<span>.{{ ruleForm.flieName.split('.')[1] }}</span>
</div>
<div class="upload-info"> <div class="upload-info">
<el-icon color="green"><CircleCheck /></el-icon> <el-icon color="green">
<CircleCheck />
</el-icon>
<span>{{ ruleForm.flieSize }}KB</span> <span>{{ ruleForm.flieSize }}KB</span>
</div> </div>
</div> </div>
...@@ -353,13 +269,10 @@ ...@@ -353,13 +269,10 @@
</div> </div>
</el-form-item> </el-form-item>
<el-form-item prop="EmailAddress" label="Email Address"> <el-form-item prop="EmailAddress" label="Email Address">
<el-input <el-input style="height: 36px;" placeholder="Please enter"
style="height: 36px;" v-model="ruleForm.EmailAddress" />
placeholder="Please enter"
v-model="ruleForm.EmailAddress"
/>
</el-form-item> </el-form-item>
<div class="footerSubmit pointer" @click="submitForm(ruleForm)"> <div class="footerSubmit pointer" @click="submitForm(ruleFormRef)">
Submit Submit
</div> </div>
</el-form> </el-form>
...@@ -372,27 +285,52 @@ ...@@ -372,27 +285,52 @@
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import '../assets/font/iconfont.css' import '../assets/font/iconfont.css'
import { ElMessage } from 'element-plus' import {
import moment from 'moment' ElMessage
import type { FormInstance } from 'element-plus' } from 'element-plus'
import { ref, onMounted, watch, nextTick, reactive } from 'vue' import moment from 'moment'
import { useUserStore } from '../store/modules/user' import type {
import AutomaticPrompt from '../components/AutomaticPrompt.vue' FormInstance
import ImageViewer from '@luohc92/vue3-image-viewer' } from 'element-plus'
import { sendWebSocket, initWebSocket } from '../utils/websocket' import {
import '@luohc92/vue3-image-viewer/dist/style.css' ref,
import { checkMesssages } from '../axios/model/user' onMounted,
import { require, unitList } from '@/utils/index' watch,
import { useRoute } from 'vue-router' nextTick,
import { upLoadFilesHander } from '../minxins/UploadMixin' reactive
const route = useRoute() } from 'vue'
const routeParams = route.query import {
const img = useUserStore
} from '../store/modules/user'
import AutomaticPrompt from '../components/AutomaticPrompt.vue'
import ImageViewer from '@luohc92/vue3-image-viewer'
import {
sendWebSocket,
initWebSocket,
connectMsg
} from '../utils/websocket'
import '@luohc92/vue3-image-viewer/dist/style.css'
import {
checkMesssages
} from '../axios/model/user'
import {
require,
unitList
} from '@/utils/index'
import {
useRoute
} from 'vue-router'
import {
upLoadFilesHander
} from '../minxins/UploadMixin'
const route = useRoute()
const routeParams = route.query
const img =
'https://us-east-pat.s3.amazonaws.com/test/b2b/cos/images/19d114ec-d244-4e12-a409-6a39c8c1c44c.webp' 'https://us-east-pat.s3.amazonaws.com/test/b2b/cos/images/19d114ec-d244-4e12-a409-6a39c8c1c44c.webp'
const pageType = routeParams.type || 1 const pageType = routeParams.type || 1
const requireFile = ref<any>(null) const requireFile = ref < any > (null)
const ruleForm = ref({ const ruleForm = ref({
ProductName: '', ProductName: '',
Email: '', Email: '',
purchaseQuantity: '', purchaseQuantity: '',
...@@ -403,46 +341,50 @@ const ruleForm = ref({ ...@@ -403,46 +341,50 @@ const ruleForm = ref({
flieUrl: '', flieUrl: '',
otherRequirements: '', otherRequirements: '',
EmailAddress: '', EmailAddress: '',
}) })
//进入页面直接发送请求从后端获取热点数据 //进入页面直接发送请求从后端获取热点数据
onMounted(async () => { onMounted(async () => {
connectMsg().then((res: any) => { connectMsg(getCheckMesssages)
getHistoryMessage() getCheckMesssages()
setMessage() setMessage()
// connectMsg().then((res: any) => {
// getCheckMesssages()
// setMessage()
// })
}) })
}) // const connectMsg = () => {
const connectMsg = () => { // return new Promise((resolve: any) => {
return new Promise((resolve: any) => {
const useUser = useUserStore()
useUser.setUserInfo({
username: routeParams.loginId || Date.now(),
})
const toIp = `${import.meta.env.VITE_USER_APP_WS_API_URL}?type=yk&code=${
useUser.userInfo.username
}&kf=${store.customerInfo.username}`
console.log(toIp, 'toIp')
useUser.connect()
initWebSocket(toIp)
setTimeout(() => {
resolve()
}, 800)
})
}
let isShrink = ref('') // useUser.connect()
const changeiShrink = () => { // initWebSocket(toIp)
// setTimeout(() => {
// resolve()
// }, 800)
// })
// }
let isShrink = ref('')
const changeiShrink = () => {
isShrink.value = !isShrink.value isShrink.value = !isShrink.value
} }
//收缩 //收缩
const vShrink: Directive<HTMLElement, boolean | Props> = { const vShrink: Directive < HTMLElement, boolean | Props > = {
mounted(el: any, binding: { value: any }) { mounted(el: any, binding: {
let { option } = formatCOlorOption(binding.value) value: any
}) {
let {
option
} = formatCOlorOption(binding.value)
option.isUpdate && renderStyle(el, option) option.isUpdate && renderStyle(el, option)
}, },
updated(el: HTMLElement, binding: { value: any }, vnode: any) { updated(el: HTMLElement, binding: {
value: any
}, vnode: any) {
//修改之后 //修改之后
let { option } = formatCOlorOption(binding.value) let {
option
} = formatCOlorOption(binding.value)
if (option.isShrink) { if (option.isShrink) {
renderStyle(el, option) renderStyle(el, option)
} else { } else {
...@@ -453,17 +395,47 @@ const vShrink: Directive<HTMLElement, boolean | Props> = { ...@@ -453,17 +395,47 @@ const vShrink: Directive<HTMLElement, boolean | Props> = {
renderStyle(el, obj) renderStyle(el, obj)
} }
}, },
} }
//设置style的属性值
function renderStyle(el: HTMLElement, option: { [x: string]: any }) {
function getCheckMesssages() {
const useUser = useUserStore()
let query = {
sessionId: `${store.customerInfo.username}-${ useUser.userInfo.username}`,
}
console.log(query)
checkMesssages(query).then(({
code,
result,
message
}) => {
result = result || []
result.forEach((item) => {
if ([3, 4].includes(item.msgType)) {
item.content = JSON.parse(item.content);
}
item.isSent = item.fromCode == useUser.userInfo.username
item.userImg = '/assets/img/user.png'
item.time = moment(item.createTime).format('HH:MM')
})
messages.value = result
})
}
//设置style的属性值
function renderStyle(el: HTMLElement, option: {
[x: string]: any
}) {
for (let key in option) el.style[key] = option[key] for (let key in option) el.style[key] = option[key]
} }
function fileImgChange() { function fileImgChange() {
var e: any = window.event || event var e: any = window.event || event
var oFile = e.target.files[0] var oFile = e.target.files[0]
upLoadFilesHander(oFile).then((ress) => { upLoadFilesHander(oFile).then((ress) => {
const { success, result }: any = ress const {
success,
result
}: any = ress
if (success) { if (success) {
console.log(oFile, 'oFile') console.log(oFile, 'oFile')
ruleForm.value.flieUrl = result ruleForm.value.flieUrl = result
...@@ -478,115 +450,102 @@ function fileImgChange() { ...@@ -478,115 +450,102 @@ function fileImgChange() {
spinner: 'el-icon-loading', spinner: 'el-icon-loading',
}) })
loading.close() loading.close()
} }
//合并指令传递的数据和默认配置的数据 //合并指令传递的数据和默认配置的数据
function formatCOlorOption(val: string | Props) { function formatCOlorOption(val: string | Props) {
const option = const option =
typeof val !== 'string' typeof val !== 'string' ?
? Object.assign(defaultStyle, val) Object.assign(defaultStyle, val) : {
: {
val, val,
...defaultStyle, ...defaultStyle,
} }
return { return {
option, option,
} }
} }
const deleteFlieName = (val: any) => { const deleteFlieName = (val: any) => {
console.log(isUpload.value, '打印', 'val') console.log(isUpload.value, '打印', 'val')
ruleForm.value.flieUrl = '' ruleForm.value.flieUrl = ''
} }
//过渡 //过渡
const defaultStyle: { const defaultStyle: {
transition?: string transition ? : string
} = { } = {
transition: 'all 0.6s linear', transition: 'all 0.6s linear',
} }
const requireFileOk = () => { const requireFileOk = () => {
requireFile.value.click() requireFile.value.click()
} }
const rules = reactive({ const rules = reactive({
ProductName: [ ProductName: [{
{
required: true, required: true,
message: 'Enter a specific product name', message: 'Enter a specific product name',
trigger: 'blur', trigger: 'blur',
}, }, ],
], Email: [{
Email: [
{
required: false, required: false,
message: 'Selct', message: 'Select',
trigger: 'blur', trigger: 'blur',
}, }, ],
], flieUrl: [{
explanation: [ required: true,
{ message: 'Please select',
trigger: 'blur',
}, ],
explanation: [{
required: false, required: false,
message: 'Please enter', message: 'Please enter',
trigger: 'blur', trigger: 'blur',
}, }, ],
], unit: [{
unit: [
{
required: true, required: true,
message: 'Please enter', message: 'Please enter',
trigger: 'blur', trigger: 'blur',
}, }, ],
], EmailAddress: [{
EmailAddress: [
{
required: true, required: true,
message: 'Please enter', message: 'Please enter',
trigger: 'blur', trigger: 'blur',
}, }, ],
], })
}) const ruleFormRef = ref < FormInstance > ()
const ruleFormRef = ref<FormInstance>() const customerInfo = ref({})
const customerInfo = ref({}) const messages = ref([])
const messages = ref([]) const isUpload = ref < Boolean > (true)
const isUpload = ref<Boolean>(true) const productInfo = ref({
const productInfo = ref({
productImg: img, productImg: img,
productName: 'The secret to looking glowup nowadays', productName: 'The secret to looking glowup nowadays',
price: '$1.40 - 2.50', price: '$1.40 - 2.50',
link: 'send', link: 'send',
isShow: false, isShow: false,
}) })
const productList = ref([ const productList = ref([{
{ productImg: 'https://us-east-pat.s3.amazonaws.com/test/b2b/cos/images/6829c33f-8227-4b87-8df6-f41aa7e7e50e.jpg',
productImg: productName: 'D07 Lady Ladies Wrist Smart Watch Blood Oxygen NFC IP68 Waterproof',
'https://us-east-pat.s3.amazonaws.com/test/b2b/cos/images/6829c33f-8227-4b87-8df6-f41aa7e7e50e.jpg',
productName:
'D07 Lady Ladies Wrist Smart Watch Blood Oxygen NFC IP68 Waterproof',
price: 'US$ 28 - 32', price: 'US$ 28 - 32',
link: 'Send', link: 'Send',
}, },
{ {
productImg: productImg: 'https://us-east-pat.s3.amazonaws.com/test/b2b/cos/images/c033aab2-4283-4f6f-baad-31087d21db91.jpg',
'https://us-east-pat.s3.amazonaws.com/test/b2b/cos/images/c033aab2-4283-4f6f-baad-31087d21db91.jpg', productName: 'Js8 PRO Max Ladies Smart Watch Heart Rate Blood Sports Wholease Wrist Amoled 2.1inch Big Screen',
productName:
'Js8 PRO Max Ladies Smart Watch Heart Rate Blood Sports Wholease Wrist Amoled 2.1inch Big Screen',
price: ' US$ 19.6 - 23', price: ' US$ 19.6 - 23',
link: 'Send', link: 'Send',
}, },
{ {
productImg: productImg: 'https://us-east-pat.s3.amazonaws.com/test/b2b/cos/images/af6ce6c1-dcb2-4a8e-a8f1-ed1d747480a6.webp',
'https://us-east-pat.s3.amazonaws.com/test/b2b/cos/images/af6ce6c1-dcb2-4a8e-a8f1-ed1d747480a6.webp', productName: 'HK85 Fashion Mens Smart Watch Ladies Women Wrist Sports Watch Play Music Bluetooth Call',
productName:
'HK85 Fashion Mens Smart Watch Ladies Women Wrist Sports Watch Play Music Bluetooth Call',
price: 'US$ 19.6 - 23', price: 'US$ 19.6 - 23',
link: 'Send', link: 'Send',
}, },
]) ])
const store: any = useUserStore() const store: any = useUserStore()
const automaticPromptRef = ref('') const automaticPromptRef = ref('')
let msg = '' let msg = ''
//获取历史记录 //获取历史记录
const getHistoryMessage: any = () => { const getHistoryMessage: any = () => {
const data = { const data = {
cmd: '19', cmd: '19',
type: '1', type: '1',
...@@ -595,35 +554,36 @@ const getHistoryMessage: any = () => { ...@@ -595,35 +554,36 @@ const getHistoryMessage: any = () => {
userId: store.userInfo.username, userId: store.userInfo.username,
} }
sendWebSocket(data) sendWebSocket(data)
} }
//设置message //设置message
const setMessage: any = () => { const setMessage: any = () => {
customerInfo.value = store.customerInfo customerInfo.value = store.customerInfo
messages.value = customerInfo.value.messages || [] messages.value = customerInfo.value.messages || []
} }
//获取子组件中state的值,这个好像是写多余了,可以直接使用automaticPromptRef.value.setState('');获取state值 //获取子组件中state的值,这个好像是写多余了,可以直接使用automaticPromptRef.value.setState('');获取state值
const getState = (v: string) => { const getState = (v: string) => {
msg = v msg = v
} }
//监听聊天框数据的改变 //监听聊天框数据的改变
watch( watch(
messages, messages,
(newVal, oldVal) => { (newVal, oldVal) => {
if (newVal?.length > 0) setSrollHeight() if (newVal?.length > 0) setSrollHeight()
}, {
deep: true
}, },
{ deep: true }, )
) //让聊天滑动窗口滑到底部
//让聊天滑动窗口滑到底部 const setSrollHeight = () => {
const setSrollHeight = () => {
nextTick(() => { nextTick(() => {
const div = document.getElementById('srollId') const div = document.getElementById('srollId')
if (div) div.scrollTop = div?.scrollHeight if (div) div.scrollTop = div?.scrollHeight
}) })
} }
//发送按钮 //发送按钮
const handleButtonClick = () => { const handleButtonClick = () => {
if (!msg.trim()) { if (!msg.trim()) {
return ElMessage({ return ElMessage({
message: 'Please enter content', message: 'Please enter content',
...@@ -648,15 +608,19 @@ const handleButtonClick = () => { ...@@ -648,15 +608,19 @@ const handleButtonClick = () => {
messages.value?.push(data) messages.value?.push(data)
sendWebSocket(data) sendWebSocket(data)
automaticPromptRef.value.setState('') automaticPromptRef.value.setState('')
} }
//关闭商品弹窗 //关闭商品弹窗
const toCloseLink = () => { const toCloseLink = () => {
productInfo.value.isShow = false productInfo.value.isShow = false
} }
//发布询价单 //发布询价单
const submitForm = (e: any) => { const submitForm = (formEl: any) => {
if (!formEl) return
formEl.validate((valid: boolean) => {
console.log(valid, 'valid')
if (valid) {
const data = { const data = {
content: e, content: ruleForm.value,
isSent: true, isSent: true,
cmd: '11', cmd: '11',
msgType: 4, msgType: 4,
...@@ -671,11 +635,17 @@ const submitForm = (e: any) => { ...@@ -671,11 +635,17 @@ const submitForm = (e: any) => {
messages.value?.push(data) messages.value?.push(data)
sendWebSocket(data) sendWebSocket(data)
} } else {
const openWindow = (event: any) => { return false
}
})
}
const openWindow = (event: any) => {
urlDownload(event) urlDownload(event)
} }
const handleMessageClick = (event: any) => { const handleMessageClick = (event: any) => {
const target = event.target const target = event.target
console.log(target, 'target') console.log(target, 'target')
if (target.tagName === 'A') { if (target.tagName === 'A') {
...@@ -693,12 +663,12 @@ const handleMessageClick = (event: any) => { ...@@ -693,12 +663,12 @@ const handleMessageClick = (event: any) => {
maskBgColor: 'rgba(0,0,0,0.7)', maskBgColor: 'rgba(0,0,0,0.7)',
}) })
} }
} }
const downLoad = (message: any) => { const downLoad = (message: any) => {
urlDownload(message.content.flieUrl) urlDownload(message.content.flieUrl)
} }
const urlDownload = (url: string, fileName = '下载文件') => { const urlDownload = (url: string, fileName = '下载文件') => {
// 创建隐藏的可下载链接 // 创建隐藏的可下载链接
let eleLink = document.createElement('a') let eleLink = document.createElement('a')
eleLink.download = fileName eleLink.download = fileName
...@@ -710,17 +680,20 @@ const urlDownload = (url: string, fileName = '下载文件') => { ...@@ -710,17 +680,20 @@ const urlDownload = (url: string, fileName = '下载文件') => {
// 然后移除 // 然后移除
console.log(url, '下载url') console.log(url, '下载url')
document.body.removeChild(eleLink) document.body.removeChild(eleLink)
} }
const handleLinkClick = (msg: string) => { const handleLinkClick = (msg: string) => {
messages.value.push({ content: msg, isSent: true }) messages.value.push({
} content: msg,
//消息框样式动态选择 isSent: true
const getMessageClass = (isSent: boolean) => { })
}
//消息框样式动态选择
const getMessageClass = (isSent: boolean) => {
return isSent ? 'message-container-right' : 'message-container-left' return isSent ? 'message-container-right' : 'message-container-left'
} }
//发送商品信息 //发送商品信息
const toSendLink = (e: any) => { const toSendLink = (e: any) => {
const data = { const data = {
content: e, content: e,
isSent: true, isSent: true,
...@@ -736,13 +709,15 @@ const toSendLink = (e: any) => { ...@@ -736,13 +709,15 @@ const toSendLink = (e: any) => {
} }
messages.value?.push(data) messages.value?.push(data)
sendWebSocket(data) sendWebSocket(data)
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
$primary-color: #e0493f; $primary-color: #e0493f;
.shirnk-aside {
.shirnk-aside {
position: relative; position: relative;
overflow: initial; overflow: initial;
.shrink-text { .shrink-text {
position: absolute; position: absolute;
top: 50%; top: 50%;
...@@ -757,12 +732,14 @@ $primary-color: #e0493f; ...@@ -757,12 +732,14 @@ $primary-color: #e0493f;
left: -12px; left: -12px;
font-size: 10px; font-size: 10px;
} }
.shrink-box { .shrink-box {
overflow-y: scroll; overflow-y: scroll;
height: 100%; height: 100%;
} }
} }
.inquiry-list {
.inquiry-list {
display: flex; display: flex;
width: 360px; width: 360px;
padding: 12px 12px 8px 12px; padding: 12px 12px 8px 12px;
...@@ -771,15 +748,18 @@ $primary-color: #e0493f; ...@@ -771,15 +748,18 @@ $primary-color: #e0493f;
align-items: flex-start; align-items: flex-start;
border-radius: 8px 0 8px 8px; border-radius: 8px 0 8px 8px;
border: 1px solid #e9ecf1; border: 1px solid #e9ecf1;
.inquiry-top { .inquiry-top {
margin-bottom: 8px; margin-bottom: 8px;
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.product-left { .product-left {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: space-between; justify-content: space-between;
.product-category { .product-category {
display: -webkit-box; display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
...@@ -793,6 +773,7 @@ $primary-color: #e0493f; ...@@ -793,6 +773,7 @@ $primary-color: #e0493f;
font-weight: 500; font-weight: 500;
margin-bottom: 6px; margin-bottom: 6px;
} }
.product-name { .product-name {
font-family: 'Inter'; font-family: 'Inter';
font-size: 14px; font-size: 14px;
...@@ -801,6 +782,7 @@ $primary-color: #e0493f; ...@@ -801,6 +782,7 @@ $primary-color: #e0493f;
} }
} }
} }
.design-requirements { .design-requirements {
width: 336px; width: 336px;
height: 36px; height: 36px;
...@@ -822,18 +804,21 @@ $primary-color: #e0493f; ...@@ -822,18 +804,21 @@ $primary-color: #e0493f;
font-size: 12px; font-size: 12px;
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
.img { .img {
width: 20px; width: 20px;
height: 20px; height: 20px;
line-height: 20px; line-height: 20px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
} }
} }
.we-connecting {
.we-connecting {
display: flex; display: flex;
padding: 8px; padding: 8px;
font-size: 12px; font-size: 12px;
...@@ -845,22 +830,24 @@ $primary-color: #e0493f; ...@@ -845,22 +830,24 @@ $primary-color: #e0493f;
margin: 16px auto; margin: 16px auto;
margin-top: 0px; margin-top: 0px;
color: #798494; color: #798494;
} }
.title-message {
.title-message {
color: #798494; color: #798494;
height: 56px; height: 56px;
line-height: 56px; line-height: 56px;
text-align: center; text-align: center;
font-feature-settings: 'clig' off, 'liga' off; font-feature-settings: 'clig'off, 'liga'off;
font-family: 'Helvetica Neue'; font-family: 'Helvetica Neue';
font-size: 12px; font-size: 12px;
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
} }
.message-time {
.message-time {
color: #798494; color: #798494;
text-align: center; text-align: center;
font-feature-settings: 'clig' off, 'liga' off; font-feature-settings: 'clig'off, 'liga'off;
font-family: 'Inter'; font-family: 'Inter';
font-size: 14px; font-size: 14px;
font-style: normal; font-style: normal;
...@@ -870,6 +857,7 @@ $primary-color: #e0493f; ...@@ -870,6 +857,7 @@ $primary-color: #e0493f;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
position: relative; position: relative;
&::after, &::after,
&::before { &::before {
display: flex; display: flex;
...@@ -880,16 +868,20 @@ $primary-color: #e0493f; ...@@ -880,16 +868,20 @@ $primary-color: #e0493f;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
&::after { &::after {
margin-left: 8px; margin-left: 8px;
} }
&::before { &::before {
margin-right: 8px; margin-right: 8px;
} }
} }
.class-send-box {
.class-send-box {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.send { .send {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
...@@ -903,8 +895,9 @@ $primary-color: #e0493f; ...@@ -903,8 +895,9 @@ $primary-color: #e0493f;
line-height: 20px; line-height: 20px;
text-align: center; text-align: center;
} }
} }
.class-send-title {
.class-send-title {
display: -webkit-box; display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-line-clamp: 2; -webkit-line-clamp: 2;
...@@ -917,69 +910,81 @@ $primary-color: #e0493f; ...@@ -917,69 +910,81 @@ $primary-color: #e0493f;
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
line-height: 20px; line-height: 20px;
} }
.classSend-price {
.classSend-price {
display: flex; display: flex;
flex: 1;
flex-direction: column; flex-direction: column;
justify-content: space-between; justify-content: space-between;
} }
.class-send-price {
.class-send-price {
color: #0c203d; color: #0c203d;
font-feature-settings: 'clig' off, 'liga' off; font-feature-settings: 'clig'off, 'liga'off;
font-family: 'Helvetica Neue'; font-family: 'Helvetica Neue';
font-size: 18px; font-size: 18px;
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
line-height: 24px; line-height: 24px;
letter-spacing: 0.72px; letter-spacing: 0.72px;
} }
.recentlyViewd {
.recentlyViewd {
display: flex; display: flex;
height: 44px; height: 44px;
width: 100%; width: 100%;
font-size: 14px; font-size: 14px;
padding:12px 8px; padding: 12px 8px;
font-weight: 400; font-weight: 400;
align-items: center; align-items: center;
background: #f8f8faff; background: #f8f8faff;
color: #010914; color: #010914;
font-feature-settings: 'clig' off, 'liga' off; font-feature-settings: 'clig'off, 'liga'off;
} }
.onlineCustomer {
.onlineCustomer {
color: #010914; color: #010914;
font-family: 'PingFang SC'; font-family: 'PingFang SC';
font-size: 14px; font-size: 14px;
margin-left:8px; margin-left: 8px;
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
} }
.el-header-left {
.el-header-left {
height: 76px; height: 76px;
width: 100%; width: 100%;
border: 1px solid #e6e8ed; border: 1px solid #e6e8ed;
text-align: center; text-align: center;
padding: 16px; padding: 16px;
.el-input { .el-input {
:deep(.el-input__wrapper) { :deep(.el-input__wrapper) {
background: var(--Fill-Grey-Fill-1, #f8f8fa); background: var(--Fill-Grey-Fill-1, #f8f8fa);
} }
height: 44px; height: 44px;
font-family: 'PingFang SC'; font-family: 'PingFang SC';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
width: 100%; width: 100%;
.el-input__inner { .el-input__inner {
font-size: 14px; font-size: 14px;
} }
} }
} }
.el-container-center {
.el-container-center {
background: #fff; background: #fff;
} }
.el-header {
.el-header {
padding: 0px; padding: 0px;
} }
.el-header-center {
.el-header-center {
border-top: 1px solid #e6e8ed; border-top: 1px solid #e6e8ed;
border-bottom: 1px solid #e6e8ed; border-bottom: 1px solid #e6e8ed;
border-right: 1px solid #e6e8ed; border-right: 1px solid #e6e8ed;
...@@ -989,6 +994,7 @@ $primary-color: #e0493f; ...@@ -989,6 +994,7 @@ $primary-color: #e0493f;
background: rgba(248, 248, 250, 1); background: rgba(248, 248, 250, 1);
justify-content: space-between; justify-content: space-between;
flex-direction: column; flex-direction: column;
.name { .name {
color: #010914; color: #010914;
font-family: 'Inter'; font-family: 'Inter';
...@@ -996,21 +1002,25 @@ $primary-color: #e0493f; ...@@ -996,21 +1002,25 @@ $primary-color: #e0493f;
font-style: normal; font-style: normal;
font-weight: 600; font-weight: 600;
} }
.url { .url {
color: #798494; color: #798494;
} }
} }
.el-header-right {
.el-header-right {
height: 76px; height: 76px;
width: 100%; width: 100%;
border: 1px solid #e6e8ed; border: 1px solid #e6e8ed;
display: flex; display: flex;
align-items: center; align-items: center;
img { img {
width: 15.42px; width: 15.42px;
height: 17.92px; height: 17.92px;
margin-right: 14px; margin-right: 14px;
} }
.name { .name {
color: #010914; color: #010914;
font-family: 'PingFang SC'; font-family: 'PingFang SC';
...@@ -1019,13 +1029,15 @@ $primary-color: #e0493f; ...@@ -1019,13 +1029,15 @@ $primary-color: #e0493f;
font-weight: 500; font-weight: 500;
line-height: 20px; line-height: 20px;
} }
} }
.el-footer {
.el-footer {
width: 100%; width: 100%;
border-top: 0px; border-top: 0px;
padding: 0px; padding: 0px;
height: calc(100vh - 60vh - 44px); height: calc(100vh - 60vh - 44px);
position: relative; position: relative;
.btn-send { .btn-send {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
...@@ -1035,6 +1047,7 @@ $primary-color: #e0493f; ...@@ -1035,6 +1047,7 @@ $primary-color: #e0493f;
width: 100%; width: 100%;
padding: 18px 21px; padding: 18px 21px;
padding-bottom: 0px; padding-bottom: 0px;
.send { .send {
width: 80px; width: 80px;
height: 32px; height: 32px;
...@@ -1047,6 +1060,7 @@ $primary-color: #e0493f; ...@@ -1047,6 +1060,7 @@ $primary-color: #e0493f;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
div { div {
&:nth-of-type(1) { &:nth-of-type(1) {
font-family: 'PingFang SC'; font-family: 'PingFang SC';
...@@ -1063,6 +1077,7 @@ $primary-color: #e0493f; ...@@ -1063,6 +1077,7 @@ $primary-color: #e0493f;
padding: 8px 16px; padding: 8px 16px;
height: 52px; height: 52px;
} }
.staticList { .staticList {
height: 36px; height: 36px;
border: 1px solid #e6e8ed; border: 1px solid #e6e8ed;
...@@ -1078,46 +1093,55 @@ $primary-color: #e0493f; ...@@ -1078,46 +1093,55 @@ $primary-color: #e0493f;
text-align: center; text-align: center;
margin-right: 8px; margin-right: 8px;
} }
} }
.el-menu-item {
.el-menu-item {
line-height: initial; line-height: initial;
padding: 0px !important; padding: 0px !important;
height: 86px; height: 86px;
border-left: 3px solid transparent; border-left: 3px solid transparent;
&.is-active { &.is-active {
background: #eff0f1; background: #eff0f1;
border-left: 3px solid #1890ff; border-left: 3px solid #1890ff;
} }
} }
.user-info-box {
.user-info-box {
display: flex; display: flex;
width: 100%; width: 100%;
height: 100%; height: 100%;
padding: 0px 10px; padding: 0px 10px;
box-sizing: border-box; box-sizing: border-box;
justify-content: space-between; justify-content: space-between;
.user-img-box { .user-img-box {
margin-right: 10px; margin-right: 10px;
display: flex; display: flex;
align-items: center; align-items: center;
img { img {
width: 40px; width: 40px;
height: 40px; height: 40px;
} }
} }
.user-info-right { .user-info-right {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
height: 100%; height: 100%;
width: 100%; width: 100%;
.user-box-right-nbs { .user-box-right-nbs {
width: 100%; width: 100%;
} }
.user-reply-box { .user-reply-box {
position: relative; position: relative;
display: flex; display: flex;
} }
.count { .count {
right: 16px; right: 16px;
top: 4px; top: 4px;
...@@ -1134,6 +1158,7 @@ $primary-color: #e0493f; ...@@ -1134,6 +1158,7 @@ $primary-color: #e0493f;
border-radius: var(--Radius-full, 1000px); border-radius: var(--Radius-full, 1000px);
background: red; background: red;
} }
.label { .label {
margin-left: 5px; margin-left: 5px;
color: #3875ea; color: #3875ea;
...@@ -1141,16 +1166,19 @@ $primary-color: #e0493f; ...@@ -1141,16 +1166,19 @@ $primary-color: #e0493f;
background: #d8e5ff; background: #d8e5ff;
border-radius: 2px; border-radius: 2px;
padding: 1px 5px; padding: 1px 5px;
&.pc { &.pc {
background: rgba(100, 64, 194, 0.16); background: rgba(100, 64, 194, 0.16);
color: #6440c2; color: #6440c2;
} }
} }
} }
.user-name-box { .user-name-box {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
.user-name { .user-name {
word-break: break-all; word-break: break-all;
text-overflow: ellipsis; text-overflow: ellipsis;
...@@ -1171,7 +1199,7 @@ $primary-color: #e0493f; ...@@ -1171,7 +1199,7 @@ $primary-color: #e0493f;
max-width: 80px; max-width: 80px;
overflow: hidden; overflow: hidden;
color: #798494; color: #798494;
font-feature-settings: 'clig' off, 'liga' off; font-feature-settings: 'clig'off, 'liga'off;
text-overflow: ellipsis; text-overflow: ellipsis;
font-family: 'Inter'; font-family: 'Inter';
margin-top: 3px; margin-top: 3px;
...@@ -1180,6 +1208,7 @@ $primary-color: #e0493f; ...@@ -1180,6 +1208,7 @@ $primary-color: #e0493f;
font-weight: 400; font-weight: 400;
line-height: 20px; line-height: 20px;
} }
.user-time { .user-time {
color: #999; color: #999;
font-size: 12px; font-size: 12px;
...@@ -1187,17 +1216,19 @@ $primary-color: #e0493f; ...@@ -1187,17 +1216,19 @@ $primary-color: #e0493f;
font-family: 'Inter'; font-family: 'Inter';
font-weight: 400; font-weight: 400;
} }
} }
.customer-info-right { .customer-info-right {
.customer-info-box { .customer-info-box {
display: flex; display: flex;
.avatar-box { .avatar-box {
width: 88px; width: 88px;
height: 88px; height: 88px;
border-radius: 8px; border-radius: 8px;
margin-right: 12px; margin-right: 12px;
overflow: hidden; overflow: hidden;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -1209,6 +1240,7 @@ $primary-color: #e0493f; ...@@ -1209,6 +1240,7 @@ $primary-color: #e0493f;
align-items: center; align-items: center;
margin-top: 8px; margin-top: 8px;
justify-content: space-between; justify-content: space-between;
.change { .change {
margin-right: 27px; margin-right: 27px;
color: #010914; color: #010914;
...@@ -1218,6 +1250,7 @@ $primary-color: #e0493f; ...@@ -1218,6 +1250,7 @@ $primary-color: #e0493f;
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
} }
.delete { .delete {
color: #ff6600; color: #ff6600;
text-align: right; text-align: right;
...@@ -1227,11 +1260,14 @@ $primary-color: #e0493f; ...@@ -1227,11 +1260,14 @@ $primary-color: #e0493f;
font-weight: 400; font-weight: 400;
} }
} }
.avatar-input-right { .avatar-input-right {
display: flex; display: flex;
} }
.avatar-right { .avatar-right {
flex: 1; flex: 1;
.avatar-right-name { .avatar-right-name {
display: -webkit-box; display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
...@@ -1239,7 +1275,7 @@ $primary-color: #e0493f; ...@@ -1239,7 +1275,7 @@ $primary-color: #e0493f;
flex: 1 0 0; flex: 1 0 0;
overflow: hidden; overflow: hidden;
color: #010914; color: #010914;
font-feature-settings: 'clig' off, 'liga' off; font-feature-settings: 'clig'off, 'liga'off;
text-overflow: ellipsis; text-overflow: ellipsis;
font-family: 'Inter'; font-family: 'Inter';
font-size: 14px; font-size: 14px;
...@@ -1247,19 +1283,22 @@ $primary-color: #e0493f; ...@@ -1247,19 +1283,22 @@ $primary-color: #e0493f;
font-weight: 400; font-weight: 400;
line-height: 20px; line-height: 20px;
} }
.avatar-right-price { .avatar-right-price {
display: flex; display: flex;
color: #010914; color: #010914;
font-feature-settings: 'clig' off, 'liga' off; font-feature-settings: 'clig'off, 'liga'off;
font-family: 'Inter'; font-family: 'Inter';
font-size: 16px; font-size: 16px;
font-style: normal; font-style: normal;
line-height: 24px; line-height: 24px;
div { div {
&:nth-of-type(1) { &:nth-of-type(1) {
margin-right: 4px; margin-right: 4px;
font-weight: 600; font-weight: 600;
} }
&:nth-of-type(2) { &:nth-of-type(2) {
font-weight: 400; font-weight: 400;
} }
...@@ -1267,27 +1306,29 @@ $primary-color: #e0493f; ...@@ -1267,27 +1306,29 @@ $primary-color: #e0493f;
} }
} }
} }
} }
.el-input__wrapper {
.el-input__wrapper {
width: 48px; width: 48px;
} }
.user-wrapper {
.user-wrapper {
padding: 16px; padding: 16px;
} }
.user-info { .user-info {
padding-top: 15px; padding-top: 15px;
padding-bottom: 10px; padding-bottom: 10px;
} }
.chat-bar { .chat-bar {
height: 50px; height: 50px;
width: 100%; width: 100%;
line-height: 50px; line-height: 50px;
text-align: left; text-align: left;
} }
.send-btn { .send-btn {
position: absolute; position: absolute;
right: 0; right: 0;
bottom: 10px; bottom: 10px;
...@@ -1299,43 +1340,45 @@ $primary-color: #e0493f; ...@@ -1299,43 +1340,45 @@ $primary-color: #e0493f;
justify-content: flex-end; justify-content: flex-end;
margin-top: 10px; margin-top: 10px;
margin-right: 10px; margin-right: 10px;
} }
.underline-link { .underline-link {
text-decoration: underline; text-decoration: underline;
} }
.message-container { .message-container {
display: flex; display: flex;
align-items: start; align-items: start;
margin-bottom: 10px; margin-bottom: 10px;
position: relative; position: relative;
} }
.message-container .time {
.message-container .time {
text-align: center; text-align: center;
color: #999; color: #999;
font-size: 14px; font-size: 14px;
position: absolute; position: absolute;
width: 100%; width: 100%;
} }
.avatar { .avatar {
width: 32px; width: 32px;
height: 32px; height: 32px;
border-radius: 50%; border-radius: 50%;
object-fit: cover; object-fit: cover;
margin-right: 12px; margin-right: 12px;
padding: 7px; padding: 7px;
background: #F6F9FC; background: #f6f9fc;
.avatar-image { .avatar-image {
border-radius: 50%; border-radius: 50%;
object-fit: cover; object-fit: cover;
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
.bubble {
.bubble {
background-color: #e8e8e8; background-color: #e8e8e8;
color: #000; color: #000;
padding: 10px 14px; padding: 10px 14px;
...@@ -1347,11 +1390,13 @@ $primary-color: #e0493f; ...@@ -1347,11 +1390,13 @@ $primary-color: #e0493f;
overflow: hidden; overflow: hidden;
word-break: break-all; word-break: break-all;
text-overflow: ellipsis; text-overflow: ellipsis;
.img-wraper img { .img-wraper img {
max-width: 100%; max-width: 100%;
height: auto; height: auto;
display: block; display: block;
} }
.bubble-title { .bubble-title {
font-family: 'Helvetica Neue'; font-family: 'Helvetica Neue';
font-size: 14px; font-size: 14px;
...@@ -1360,6 +1405,7 @@ $primary-color: #e0493f; ...@@ -1360,6 +1405,7 @@ $primary-color: #e0493f;
line-height: 20px; line-height: 20px;
margin-bottom: 4px; margin-bottom: 4px;
} }
.bubble-h1 { .bubble-h1 {
color: #1a65d6; color: #1a65d6;
cursor: pointer; cursor: pointer;
...@@ -1371,46 +1417,51 @@ $primary-color: #e0493f; ...@@ -1371,46 +1417,51 @@ $primary-color: #e0493f;
line-height: 20px; line-height: 20px;
letter-spacing: 0.56px; letter-spacing: 0.56px;
margin-bottom: 4px; margin-bottom: 4px;
&:nth-of-type(2){
&:nth-of-type(2) {
margin-bottom: 0px; margin-bottom: 0px;
} }
} }
} }
.official-box { .official-box {
width: 464px; width: 464px;
} }
.official-box ul li{
.official-box ul li {
position: relative; position: relative;
padding-left: 15px; padding-left: 15px;
} }
.official-box ul li::before{
content:" "; .official-box ul li::before {
content: ' ';
left: 2px; left: 2px;
position: absolute; position: absolute;
background:#1a65d6; background: #1a65d6;
width: 5px; width: 5px;
height: 5px; height: 5px;
top: 50%; top: 50%;
transform: translateY(-50%); transform: translateY(-50%);
border-radius: 50% border-radius: 50%;
} }
.message-container-right { .message-container-right {
justify-content: flex-end; justify-content: flex-end;
} }
.message-container-left { .message-container-left {
justify-content: flex-start; justify-content: flex-start;
} }
.avatar-number-input :deep(.el-input) {
.avatar-number-input :deep(.el-input) {
width: 102px !important; width: 102px !important;
} }
.avatar-number-input {
.avatar-number-input {
width: 102px !important; width: 102px !important;
} }
.add { .add {
display: flex; display: flex;
height: var(--Layout-lg, 32px); height: var(--Layout-lg, 32px);
padding: 0 var(--Spacing-lg, 12px) 0 var(--Spacing-md, 8px); padding: 0 var(--Spacing-lg, 12px) 0 var(--Spacing-md, 8px);
...@@ -1423,13 +1474,16 @@ $primary-color: #e0493f; ...@@ -1423,13 +1474,16 @@ $primary-color: #e0493f;
width: 72px; width: 72px;
height: 32px; height: 32px;
margin-top: 16px; margin-top: 16px;
img { img {
width: 20px; width: 20px;
height: 20px; height: 20px;
} }
} }
.form {
.form {
margin-top: 32px; margin-top: 32px;
:deep(.el-form-item__label) { :deep(.el-form-item__label) {
color: #010914; color: #010914;
font-family: 'PingFang SC'; font-family: 'PingFang SC';
...@@ -1438,9 +1492,11 @@ $primary-color: #e0493f; ...@@ -1438,9 +1492,11 @@ $primary-color: #e0493f;
font-weight: bolder; font-weight: bolder;
line-height: 20px; line-height: 20px;
} }
:deep(.el-input__wrapper) { :deep(.el-input__wrapper) {
padding: 0px; padding: 0px;
} }
:deep(.el-input__inner) { :deep(.el-input__inner) {
padding: 8px; padding: 8px;
display: -webkit-box; display: -webkit-box;
...@@ -1449,7 +1505,7 @@ $primary-color: #e0493f; ...@@ -1449,7 +1505,7 @@ $primary-color: #e0493f;
flex: 1 0 0; flex: 1 0 0;
overflow: hidden; overflow: hidden;
color: #798494; color: #798494;
font-feature-settings: 'clig' off, 'liga' off; font-feature-settings: 'clig'off, 'liga'off;
text-overflow: ellipsis; text-overflow: ellipsis;
font-family: 'PingFang SC'; font-family: 'PingFang SC';
font-size: 14px; font-size: 14px;
...@@ -1458,14 +1514,17 @@ $primary-color: #e0493f; ...@@ -1458,14 +1514,17 @@ $primary-color: #e0493f;
line-height: 20px; line-height: 20px;
background: #f2f3f5; background: #f2f3f5;
} }
:deep(.el-textarea__inner) { :deep(.el-textarea__inner) {
background: #f2f3f5; background: #f2f3f5;
} }
} }
#srollId {
#srollId {
border-right: 1px solid #e6e8ed; border-right: 1px solid #e6e8ed;
} }
.browse-glance {
.browse-glance {
display: flex; display: flex;
position: relative; position: relative;
padding: 16px 12px 16px 12px; padding: 16px 12px 16px 12px;
...@@ -1475,6 +1534,7 @@ $primary-color: #e0493f; ...@@ -1475,6 +1534,7 @@ $primary-color: #e0493f;
height: 64px; height: 64px;
margin-right: 12px; margin-right: 12px;
} }
&::before { &::before {
position: absolute; position: absolute;
content: ' '; content: ' ';
...@@ -1487,7 +1547,7 @@ $primary-color: #e0493f; ...@@ -1487,7 +1547,7 @@ $primary-color: #e0493f;
.units { .units {
margin-top: 8px; margin-top: 8px;
color: #0c203d; color: #0c203d;
font-feature-settings: 'clig' off, 'liga' off; font-feature-settings: 'clig'off, 'liga'off;
font-family: 'Helvetica Neue'; font-family: 'Helvetica Neue';
font-size: 12px; font-size: 12px;
font-style: normal; font-style: normal;
...@@ -1495,11 +1555,12 @@ $primary-color: #e0493f; ...@@ -1495,11 +1555,12 @@ $primary-color: #e0493f;
line-height: 16px; line-height: 16px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.price { .price {
flex: 1; flex: 1;
color: #0c203d; color: #0c203d;
font-feature-settings: 'clig' off, 'liga' off; font-feature-settings: 'clig'off, 'liga'off;
font-family: 'Helvetica Neue'; font-family: 'Helvetica Neue';
font-size: 14px; font-size: 14px;
font-style: normal; font-style: normal;
...@@ -1509,6 +1570,7 @@ $primary-color: #e0493f; ...@@ -1509,6 +1570,7 @@ $primary-color: #e0493f;
-webkit-line-clamp: 1; -webkit-line-clamp: 1;
} }
} }
.send { .send {
margin-left: 5px; margin-left: 5px;
display: flex; display: flex;
...@@ -1520,6 +1582,7 @@ $primary-color: #e0493f; ...@@ -1520,6 +1582,7 @@ $primary-color: #e0493f;
border-radius: 4px; border-radius: 4px;
border: 1px solid #c7cdd4; border: 1px solid #c7cdd4;
} }
.title { .title {
display: flex; display: flex;
justify-content: center; justify-content: center;
...@@ -1531,17 +1594,20 @@ $primary-color: #e0493f; ...@@ -1531,17 +1594,20 @@ $primary-color: #e0493f;
font-weight: 400; font-weight: 400;
margin: 0px auto; margin: 0px auto;
} }
} }
.classSendLink {
.classSendLink {
.classSend-img { .classSend-img {
width: 72px; width: 72px;
height: 72px; height: 72px;
margin-right: 12px; margin-right: 12px;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
.classSendDiv { .classSendDiv {
display: flex; display: flex;
padding-bottom: 8px; padding-bottom: 8px;
...@@ -1551,13 +1617,15 @@ $primary-color: #e0493f; ...@@ -1551,13 +1617,15 @@ $primary-color: #e0493f;
padding: 12px 12px 0px 12px; padding: 12px 12px 0px 12px;
border-radius: 8px 0 8px 8px; border-radius: 8px 0 8px 8px;
border: 1px solid #e9ecf1; border: 1px solid #e9ecf1;
} }
.sendlinkbox {
.sendlinkbox {
height: 40px; height: 40px;
line-height: 40px; line-height: 40px;
display: flex; display: flex;
justify-content: center; justify-content: center;
border-top: 1px solid #e9ecf1; border-top: 1px solid #e9ecf1;
.box-send, .box-send,
.box-close { .box-close {
color: #626d7a; color: #626d7a;
...@@ -1573,31 +1641,50 @@ $primary-color: #e0493f; ...@@ -1573,31 +1641,50 @@ $primary-color: #e0493f;
height: 16px; height: 16px;
margin-left: 8px; margin-left: 8px;
} }
display: flex; display: flex;
align-items: center; align-items: center;
color: #626d7a; color: #626d7a;
font-feature-settings: 'clig' off, 'liga' off; font-feature-settings: 'clig'off,
'liga'off;
font-family: 'Helvetica Neue'; font-family: 'Helvetica Neue';
font-size: 12px; font-size: 12px;
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
line-height: 16px; line-height: 16px;
} }
.el-image {
img {
width: 100%;
height: 100%;
}
}
.sendlinkbox { .img-wraper {
video {
width: 100%;
height: 100%;
}
}
.sendlinkbox {
div { div {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.box-send { .box-send {
width: 100%; width: 100%;
line-height: 40px; line-height: 40px;
} }
.box-close { .box-close {
width: 100%; width: 100%;
line-height: 40px; line-height: 40px;
position: relative; position: relative;
&::before { &::before {
content: ' '; content: ' ';
width: 1px; width: 1px;
...@@ -1607,48 +1694,61 @@ $primary-color: #e0493f; ...@@ -1607,48 +1694,61 @@ $primary-color: #e0493f;
left: 0px; left: 0px;
} }
} }
} }
.click-to-upload {
.click-to-upload {
color: #073a3d; color: #073a3d;
font-family: 'Inter'; font-family: 'Inter';
font-size: 14px; font-size: 14px;
font-style: normal; font-style: normal;
margin-bottom: 4px; margin-bottom: 4px;
line-height: 20px; line-height: 20px;
} }
.or-drag-and-drap {
.or-drag-and-drap {
color: #475467; color: #475467;
font-family: 'Inter'; font-family: 'Inter';
font-size: 14px; font-size: 14px;
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
} }
.recently-input-box {
.recently-input-box {
padding: 12px; padding: 12px;
} }
.requirements-box {
.requirements-box {
position: relative; position: relative;
z-index: 0; z-index: 0;
} }
input {
.image-content,
.video-content {
width: 300px;
}
input {
position: absolute; position: absolute;
top: 0px; top: 0px;
left: 0px; left: 0px;
height: 100%; height: 100%;
width: 100%; width: 100%;
background: transparent; background: transparent;
} }
.requirements-box,
.requirements-box1 { .requirements-box,
.requirements-box1 {
.box { .box {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
flex-direction: column; flex-direction: column;
.upload-info { .upload-info {
align-items: center; align-items: center;
display: flex; display: flex;
} }
} }
display: flex; display: flex;
width: 100%; width: 100%;
padding: 14px 12px; padding: 14px 12px;
...@@ -1656,15 +1756,18 @@ input { ...@@ -1656,15 +1756,18 @@ input {
box-sizing: border-box; box-sizing: border-box;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
.upload-name { .upload-name {
color: #073a3dff; color: #073a3dff;
font-family: 'Inter'; font-family: 'Inter';
display: flex;
font-size: 14px; font-size: 14px;
margin-bottom: 4px; margin-bottom: 4px;
font-style: normal; font-style: normal;
font-weight: 500; font-weight: 500;
line-height: 20px; line-height: 20px;
} }
.upload-info { .upload-info {
display: inline-block; display: inline-block;
color: #798494ff; color: #798494ff;
...@@ -1676,56 +1779,69 @@ input { ...@@ -1676,56 +1779,69 @@ input {
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
line-height: 20px; line-height: 20px;
span { span {
margin-left: 6px; margin-left: 6px;
} }
} }
} }
.requirements-box {
.requirements-box {
border: 1px solid #eaecf0; border: 1px solid #eaecf0;
padding: 12px 58px 12px 14px; padding: 12px 58px 12px 14px;
} }
.or-drag-and-drap { .or-drag-and-drap {
line-height: 20px; line-height: 20px;
} }
.requirements-box1 {
.requirements-box1 {
background: #f6f9fcff; background: #f6f9fcff;
} }
.uploadInfo {
.uploadInfo {
width: 40px; width: 40px;
height: 40px; height: 40px;
} }
:deep(.el-select) { :deep(.el-select) {
height: 36px; height: 36px;
background: #ffffffff; background: #ffffffff;
} }
:deep(.el-select__wrapper) {
:deep(.el-select__wrapper) {
height: 36px !important; height: 36px !important;
} }
:deep(.el-input__validateIcon) {
:deep(.el-input__validateIcon) {
display: none; display: none;
} }
.product-count {
.product-count {
color: #0c203dff; color: #0c203dff;
font-feature-settings: 'clig' off, 'liga' off; font-feature-settings: 'clig'off, 'liga'off;
font-family: 'Helvetica Neue'; font-family: 'Helvetica Neue';
font-size: 18px; font-size: 18px;
font-style: normal; font-style: normal;
font-weight: 700; font-weight: 700;
line-height: 24px; line-height: 24px;
letter-spacing: 0.72px; letter-spacing: 0.72px;
} }
.from-unit {
.flieName {
width: 80%;
}
.from-unit {
color: #475263ff; color: #475263ff;
font-family: 'Inter'; font-family: 'Inter';
font-size: 10px; font-size: 10px;
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
line-height: 16px; line-height: 16px;
} }
.product-info {
.product-info {
align-self: stretch; align-self: stretch;
color: #475263; color: #475263;
font-family: 'Inter'; font-family: 'Inter';
...@@ -1735,9 +1851,9 @@ input { ...@@ -1735,9 +1851,9 @@ input {
line-height: 20px; line-height: 20px;
padding-bottom: 8px; padding-bottom: 8px;
border-bottom: 1px solid #e6e8ed; border-bottom: 1px solid #e6e8ed;
} }
.footerSubmit { .footerSubmit {
width: 80px; width: 80px;
height: 32px; height: 32px;
font-size: 14px; font-size: 14px;
...@@ -1749,13 +1865,15 @@ input { ...@@ -1749,13 +1865,15 @@ input {
text-align: center; text-align: center;
color: #fff; color: #fff;
border-radius: 4px; border-radius: 4px;
} }
:deep(.el-form-item__label):before {
:deep(.el-form-item__label):before {
display: none; display: none;
} }
.is-required :deep(.el-form-item__label)::after {
.is-required :deep(.el-form-item__label)::after {
content: '*'; content: '*';
color: var(--el-color-danger); color: var(--el-color-danger);
margin-left: 4px; margin-left: 4px;
} }
</style> </style>
No preview for this file type
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -21,7 +21,7 @@ import{c as commonjsGlobal}from"./vendor.d471d1e7.js";(function(){const t=docume ...@@ -21,7 +21,7 @@ import{c as commonjsGlobal}from"./vendor.d471d1e7.js";(function(){const t=docume
* vue-router v4.3.0 * vue-router v4.3.0
* (c) 2024 Eduardo San Martin Morote * (c) 2024 Eduardo San Martin Morote
* @license MIT * @license MIT
*/const isBrowser=typeof document<"u";function isESModule(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const assign$1=Object.assign;function applyToParams(e,t){const r={};for(const a in t){const n=t[a];r[a]=isArray(n)?n.map(e):e(n)}return r}const noop$1=()=>{},isArray=Array.isArray,HASH_RE=/#/g,AMPERSAND_RE=/&/g,SLASH_RE=/\//g,EQUAL_RE=/=/g,IM_RE=/\?/g,PLUS_RE=/\+/g,ENC_BRACKET_OPEN_RE=/%5B/g,ENC_BRACKET_CLOSE_RE=/%5D/g,ENC_CARET_RE=/%5E/g,ENC_BACKTICK_RE=/%60/g,ENC_CURLY_OPEN_RE=/%7B/g,ENC_PIPE_RE=/%7C/g,ENC_CURLY_CLOSE_RE=/%7D/g,ENC_SPACE_RE=/%20/g;function commonEncode(e){return encodeURI(""+e).replace(ENC_PIPE_RE,"|").replace(ENC_BRACKET_OPEN_RE,"[").replace(ENC_BRACKET_CLOSE_RE,"]")}function encodeHash(e){return commonEncode(e).replace(ENC_CURLY_OPEN_RE,"{").replace(ENC_CURLY_CLOSE_RE,"}").replace(ENC_CARET_RE,"^")}function encodeQueryValue(e){return commonEncode(e).replace(PLUS_RE,"%2B").replace(ENC_SPACE_RE,"+").replace(HASH_RE,"%23").replace(AMPERSAND_RE,"%26").replace(ENC_BACKTICK_RE,"`").replace(ENC_CURLY_OPEN_RE,"{").replace(ENC_CURLY_CLOSE_RE,"}").replace(ENC_CARET_RE,"^")}function encodeQueryKey(e){return encodeQueryValue(e).replace(EQUAL_RE,"%3D")}function encodePath(e){return commonEncode(e).replace(HASH_RE,"%23").replace(IM_RE,"%3F")}function encodeParam(e){return e==null?"":encodePath(e).replace(SLASH_RE,"%2F")}function decode(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const TRAILING_SLASH_RE=/\/$/,removeTrailingSlash=e=>e.replace(TRAILING_SLASH_RE,"");function parseURL(e,t,r="/"){let a,n={},l="",o="";const u=t.indexOf("#");let c=t.indexOf("?");return u<c&&u>=0&&(c=-1),c>-1&&(a=t.slice(0,c),l=t.slice(c+1,u>-1?u:t.length),n=e(l)),u>-1&&(a=a||t.slice(0,u),o=t.slice(u,t.length)),a=resolveRelativePath(a!=null?a:t,r),{fullPath:a+(l&&"?")+l+o,path:a,query:n,hash:decode(o)}}function stringifyURL(e,t){const r=t.query?e(t.query):"";return t.path+(r&&"?")+r+(t.hash||"")}function stripBase(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function isSameRouteLocation(e,t,r){const a=t.matched.length-1,n=r.matched.length-1;return a>-1&&a===n&&isSameRouteRecord(t.matched[a],r.matched[n])&&isSameRouteLocationParams(t.params,r.params)&&e(t.query)===e(r.query)&&t.hash===r.hash}function isSameRouteRecord(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function isSameRouteLocationParams(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const r in e)if(!isSameRouteLocationParamsValue(e[r],t[r]))return!1;return!0}function isSameRouteLocationParamsValue(e,t){return isArray(e)?isEquivalentArray(e,t):isArray(t)?isEquivalentArray(t,e):e===t}function isEquivalentArray(e,t){return isArray(t)?e.length===t.length&&e.every((r,a)=>r===t[a]):e.length===1&&e[0]===t}function resolveRelativePath(e,t){if(e.startsWith("/"))return e;if(!e)return t;const r=t.split("/"),a=e.split("/"),n=a[a.length-1];(n===".."||n===".")&&a.push("");let l=r.length-1,o,u;for(o=0;o<a.length;o++)if(u=a[o],u!==".")if(u==="..")l>1&&l--;else break;return r.slice(0,l).join("/")+"/"+a.slice(o).join("/")}var NavigationType;(function(e){e.pop="pop",e.push="push"})(NavigationType||(NavigationType={}));var NavigationDirection;(function(e){e.back="back",e.forward="forward",e.unknown=""})(NavigationDirection||(NavigationDirection={}));function normalizeBase(e){if(!e)if(isBrowser){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),removeTrailingSlash(e)}const BEFORE_HASH_RE=/^[^#]+#/;function createHref(e,t){return e.replace(BEFORE_HASH_RE,"#")+t}function getElementPosition(e,t){const r=document.documentElement.getBoundingClientRect(),a=e.getBoundingClientRect();return{behavior:t.behavior,left:a.left-r.left-(t.left||0),top:a.top-r.top-(t.top||0)}}const computeScrollPosition=()=>({left:window.scrollX,top:window.scrollY});function scrollToPosition(e){let t;if("el"in e){const r=e.el,a=typeof r=="string"&&r.startsWith("#"),n=typeof r=="string"?a?document.getElementById(r.slice(1)):document.querySelector(r):r;if(!n)return;t=getElementPosition(n,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function getScrollKey(e,t){return(history.state?history.state.position-t:-1)+e}const scrollPositions=new Map;function saveScrollPosition(e,t){scrollPositions.set(e,t)}function getSavedScrollPosition(e){const t=scrollPositions.get(e);return scrollPositions.delete(e),t}let createBaseLocation=()=>location.protocol+"//"+location.host;function createCurrentLocation(e,t){const{pathname:r,search:a,hash:n}=t,l=e.indexOf("#");if(l>-1){let u=n.includes(e.slice(l))?e.slice(l).length:1,c=n.slice(u);return c[0]!=="/"&&(c="/"+c),stripBase(c,"")}return stripBase(r,e)+a+n}function useHistoryListeners(e,t,r,a){let n=[],l=[],o=null;const u=({state:v})=>{const x=createCurrentLocation(e,location),w=r.value,C=t.value;let k=0;if(v){if(r.value=x,t.value=v,o&&o===w){o=null;return}k=C?v.position-C.position:0}else a(x);n.forEach(V=>{V(r.value,w,{delta:k,type:NavigationType.pop,direction:k?k>0?NavigationDirection.forward:NavigationDirection.back:NavigationDirection.unknown})})};function c(){o=r.value}function _(v){n.push(v);const x=()=>{const w=n.indexOf(v);w>-1&&n.splice(w,1)};return l.push(x),x}function f(){const{history:v}=window;!v.state||v.replaceState(assign$1({},v.state,{scroll:computeScrollPosition()}),"")}function m(){for(const v of l)v();l=[],window.removeEventListener("popstate",u),window.removeEventListener("beforeunload",f)}return window.addEventListener("popstate",u),window.addEventListener("beforeunload",f,{passive:!0}),{pauseListeners:c,listen:_,destroy:m}}function buildState(e,t,r,a=!1,n=!1){return{back:e,current:t,forward:r,replaced:a,position:window.history.length,scroll:n?computeScrollPosition():null}}function useHistoryStateNavigation(e){const{history:t,location:r}=window,a={value:createCurrentLocation(e,r)},n={value:t.state};n.value||l(a.value,{back:null,current:a.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function l(c,_,f){const m=e.indexOf("#"),v=m>-1?(r.host&&document.querySelector("base")?e:e.slice(m))+c:createBaseLocation()+e+c;try{t[f?"replaceState":"pushState"](_,"",v),n.value=_}catch(x){console.error(x),r[f?"replace":"assign"](v)}}function o(c,_){const f=assign$1({},t.state,buildState(n.value.back,c,n.value.forward,!0),_,{position:n.value.position});l(c,f,!0),a.value=c}function u(c,_){const f=assign$1({},n.value,t.state,{forward:c,scroll:computeScrollPosition()});l(f.current,f,!0);const m=assign$1({},buildState(a.value,c,null),{position:f.position+1},_);l(c,m,!1),a.value=c}return{location:a,state:n,push:u,replace:o}}function createWebHistory(e){e=normalizeBase(e);const t=useHistoryStateNavigation(e),r=useHistoryListeners(e,t.state,t.location,t.replace);function a(l,o=!0){o||r.pauseListeners(),history.go(l)}const n=assign$1({location:"",base:e,go:a,createHref:createHref.bind(null,e)},t,r);return Object.defineProperty(n,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(n,"state",{enumerable:!0,get:()=>t.state.value}),n}function isRouteLocation(e){return typeof e=="string"||e&&typeof e=="object"}function isRouteName(e){return typeof e=="string"||typeof e=="symbol"}const START_LOCATION_NORMALIZED={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},NavigationFailureSymbol=Symbol("");var NavigationFailureType;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(NavigationFailureType||(NavigationFailureType={}));function createRouterError(e,t){return assign$1(new Error,{type:e,[NavigationFailureSymbol]:!0},t)}function isNavigationFailure(e,t){return e instanceof Error&&NavigationFailureSymbol in e&&(t==null||!!(e.type&t))}const BASE_PARAM_PATTERN="[^/]+?",BASE_PATH_PARSER_OPTIONS={sensitive:!1,strict:!1,start:!0,end:!0},REGEX_CHARS_RE=/[.+*?^${}()[\]/\\]/g;function tokensToParser(e,t){const r=assign$1({},BASE_PATH_PARSER_OPTIONS,t),a=[];let n=r.start?"^":"";const l=[];for(const _ of e){const f=_.length?[]:[90];r.strict&&!_.length&&(n+="/");for(let m=0;m<_.length;m++){const v=_[m];let x=40+(r.sensitive?.25:0);if(v.type===0)m||(n+="/"),n+=v.value.replace(REGEX_CHARS_RE,"\\$&"),x+=40;else if(v.type===1){const{value:w,repeatable:C,optional:k,regexp:V}=v;l.push({name:w,repeatable:C,optional:k});const O=V||BASE_PARAM_PATTERN;if(O!==BASE_PARAM_PATTERN){x+=10;try{new RegExp(`(${O})`)}catch(T){throw new Error(`Invalid custom RegExp for param "${w}" (${O}): `+T.message)}}let W=C?`((?:${O})(?:/(?:${O}))*)`:`(${O})`;m||(W=k&&_.length<2?`(?:/${W})`:"/"+W),k&&(W+="?"),n+=W,x+=20,k&&(x+=-8),C&&(x+=-20),O===".*"&&(x+=-50)}f.push(x)}a.push(f)}if(r.strict&&r.end){const _=a.length-1;a[_][a[_].length-1]+=.7000000000000001}r.strict||(n+="/?"),r.end?n+="$":r.strict&&(n+="(?:/|$)");const o=new RegExp(n,r.sensitive?"":"i");function u(_){const f=_.match(o),m={};if(!f)return null;for(let v=1;v<f.length;v++){const x=f[v]||"",w=l[v-1];m[w.name]=x&&w.repeatable?x.split("/"):x}return m}function c(_){let f="",m=!1;for(const v of e){(!m||!f.endsWith("/"))&&(f+="/"),m=!1;for(const x of v)if(x.type===0)f+=x.value;else if(x.type===1){const{value:w,repeatable:C,optional:k}=x,V=w in _?_[w]:"";if(isArray(V)&&!C)throw new Error(`Provided param "${w}" is an array but it is not repeatable (* or + modifiers)`);const O=isArray(V)?V.join("/"):V;if(!O)if(k)v.length<2&&(f.endsWith("/")?f=f.slice(0,-1):m=!0);else throw new Error(`Missing required param "${w}"`);f+=O}}return f||"/"}return{re:o,score:a,keys:l,parse:u,stringify:c}}function compareScoreArray(e,t){let r=0;for(;r<e.length&&r<t.length;){const a=t[r]-e[r];if(a)return a;r++}return e.length<t.length?e.length===1&&e[0]===40+40?-1:1:e.length>t.length?t.length===1&&t[0]===40+40?1:-1:0}function comparePathParserScore(e,t){let r=0;const a=e.score,n=t.score;for(;r<a.length&&r<n.length;){const l=compareScoreArray(a[r],n[r]);if(l)return l;r++}if(Math.abs(n.length-a.length)===1){if(isLastScoreNegative(a))return 1;if(isLastScoreNegative(n))return-1}return n.length-a.length}function isLastScoreNegative(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const ROOT_TOKEN={type:0,value:""},VALID_PARAM_RE=/[a-zA-Z0-9_]/;function tokenizePath(e){if(!e)return[[]];if(e==="/")return[[ROOT_TOKEN]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(x){throw new Error(`ERR (${r})/"${_}": ${x}`)}let r=0,a=r;const n=[];let l;function o(){l&&n.push(l),l=[]}let u=0,c,_="",f="";function m(){!_||(r===0?l.push({type:0,value:_}):r===1||r===2||r===3?(l.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${_}) must be alone in its segment. eg: '/:ids+.`),l.push({type:1,value:_,regexp:f,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),_="")}function v(){_+=c}for(;u<e.length;){if(c=e[u++],c==="\\"&&r!==2){a=r,r=4;continue}switch(r){case 0:c==="/"?(_&&m(),o()):c===":"?(m(),r=1):v();break;case 4:v(),r=a;break;case 1:c==="("?r=2:VALID_PARAM_RE.test(c)?v():(m(),r=0,c!=="*"&&c!=="?"&&c!=="+"&&u--);break;case 2:c===")"?f[f.length-1]=="\\"?f=f.slice(0,-1)+c:r=3:f+=c;break;case 3:m(),r=0,c!=="*"&&c!=="?"&&c!=="+"&&u--,f="";break;default:t("Unknown state");break}}return r===2&&t(`Unfinished custom RegExp for param "${_}"`),m(),o(),n}function createRouteRecordMatcher(e,t,r){const a=tokensToParser(tokenizePath(e.path),r),n=assign$1(a,{record:e,parent:t,children:[],alias:[]});return t&&!n.record.aliasOf==!t.record.aliasOf&&t.children.push(n),n}function createRouterMatcher(e,t){const r=[],a=new Map;t=mergeOptions({strict:!1,end:!0,sensitive:!1},t);function n(f){return a.get(f)}function l(f,m,v){const x=!v,w=normalizeRouteRecord(f);w.aliasOf=v&&v.record;const C=mergeOptions(t,f),k=[w];if("alias"in f){const W=typeof f.alias=="string"?[f.alias]:f.alias;for(const T of W)k.push(assign$1({},w,{components:v?v.record.components:w.components,path:T,aliasOf:v?v.record:w}))}let V,O;for(const W of k){const{path:T}=W;if(m&&T[0]!=="/"){const $=m.record.path,G=$[$.length-1]==="/"?"":"/";W.path=m.record.path+(T&&G+T)}if(V=createRouteRecordMatcher(W,m,C),v?v.alias.push(V):(O=O||V,O!==V&&O.alias.push(V),x&&f.name&&!isAliasRecord(V)&&o(f.name)),w.children){const $=w.children;for(let G=0;G<$.length;G++)l($[G],V,v&&v.children[G])}v=v||V,(V.record.components&&Object.keys(V.record.components).length||V.record.name||V.record.redirect)&&c(V)}return O?()=>{o(O)}:noop$1}function o(f){if(isRouteName(f)){const m=a.get(f);m&&(a.delete(f),r.splice(r.indexOf(m),1),m.children.forEach(o),m.alias.forEach(o))}else{const m=r.indexOf(f);m>-1&&(r.splice(m,1),f.record.name&&a.delete(f.record.name),f.children.forEach(o),f.alias.forEach(o))}}function u(){return r}function c(f){let m=0;for(;m<r.length&&comparePathParserScore(f,r[m])>=0&&(f.record.path!==r[m].record.path||!isRecordChildOf(f,r[m]));)m++;r.splice(m,0,f),f.record.name&&!isAliasRecord(f)&&a.set(f.record.name,f)}function _(f,m){let v,x={},w,C;if("name"in f&&f.name){if(v=a.get(f.name),!v)throw createRouterError(1,{location:f});C=v.record.name,x=assign$1(paramsFromLocation(m.params,v.keys.filter(O=>!O.optional).concat(v.parent?v.parent.keys.filter(O=>O.optional):[]).map(O=>O.name)),f.params&&paramsFromLocation(f.params,v.keys.map(O=>O.name))),w=v.stringify(x)}else if(f.path!=null)w=f.path,v=r.find(O=>O.re.test(w)),v&&(x=v.parse(w),C=v.record.name);else{if(v=m.name?a.get(m.name):r.find(O=>O.re.test(m.path)),!v)throw createRouterError(1,{location:f,currentLocation:m});C=v.record.name,x=assign$1({},m.params,f.params),w=v.stringify(x)}const k=[];let V=v;for(;V;)k.unshift(V.record),V=V.parent;return{name:C,path:w,params:x,matched:k,meta:mergeMetaFields(k)}}return e.forEach(f=>l(f)),{addRoute:l,resolve:_,removeRoute:o,getRoutes:u,getRecordMatcher:n}}function paramsFromLocation(e,t){const r={};for(const a of t)a in e&&(r[a]=e[a]);return r}function normalizeRouteRecord(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:normalizeRecordProps(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function normalizeRecordProps(e){const t={},r=e.props||!1;if("component"in e)t.default=r;else for(const a in e.components)t[a]=typeof r=="object"?r[a]:r;return t}function isAliasRecord(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function mergeMetaFields(e){return e.reduce((t,r)=>assign$1(t,r.meta),{})}function mergeOptions(e,t){const r={};for(const a in e)r[a]=a in t?t[a]:e[a];return r}function isRecordChildOf(e,t){return t.children.some(r=>r===e||isRecordChildOf(e,r))}function parseQuery(e){const t={};if(e===""||e==="?")return t;const a=(e[0]==="?"?e.slice(1):e).split("&");for(let n=0;n<a.length;++n){const l=a[n].replace(PLUS_RE," "),o=l.indexOf("="),u=decode(o<0?l:l.slice(0,o)),c=o<0?null:decode(l.slice(o+1));if(u in t){let _=t[u];isArray(_)||(_=t[u]=[_]),_.push(c)}else t[u]=c}return t}function stringifyQuery(e){let t="";for(let r in e){const a=e[r];if(r=encodeQueryKey(r),a==null){a!==void 0&&(t+=(t.length?"&":"")+r);continue}(isArray(a)?a.map(l=>l&&encodeQueryValue(l)):[a&&encodeQueryValue(a)]).forEach(l=>{l!==void 0&&(t+=(t.length?"&":"")+r,l!=null&&(t+="="+l))})}return t}function normalizeQuery(e){const t={};for(const r in e){const a=e[r];a!==void 0&&(t[r]=isArray(a)?a.map(n=>n==null?null:""+n):a==null?a:""+a)}return t}const matchedRouteKey=Symbol(""),viewDepthKey=Symbol(""),routerKey=Symbol(""),routeLocationKey=Symbol(""),routerViewLocationKey=Symbol("");function useCallbacks(){let e=[];function t(a){return e.push(a),()=>{const n=e.indexOf(a);n>-1&&e.splice(n,1)}}function r(){e=[]}return{add:t,list:()=>e.slice(),reset:r}}function guardToPromiseFn(e,t,r,a,n,l=o=>o()){const o=a&&(a.enterCallbacks[n]=a.enterCallbacks[n]||[]);return()=>new Promise((u,c)=>{const _=v=>{v===!1?c(createRouterError(4,{from:r,to:t})):v instanceof Error?c(v):isRouteLocation(v)?c(createRouterError(2,{from:t,to:v})):(o&&a.enterCallbacks[n]===o&&typeof v=="function"&&o.push(v),u())},f=l(()=>e.call(a&&a.instances[n],t,r,_));let m=Promise.resolve(f);e.length<3&&(m=m.then(_)),m.catch(v=>c(v))})}function extractComponentsGuards(e,t,r,a,n=l=>l()){const l=[];for(const o of e)for(const u in o.components){let c=o.components[u];if(!(t!=="beforeRouteEnter"&&!o.instances[u]))if(isRouteComponent(c)){const f=(c.__vccOpts||c)[t];f&&l.push(guardToPromiseFn(f,r,a,o,u,n))}else{let _=c();l.push(()=>_.then(f=>{if(!f)return Promise.reject(new Error(`Couldn't resolve component "${u}" at "${o.path}"`));const m=isESModule(f)?f.default:f;o.components[u]=m;const x=(m.__vccOpts||m)[t];return x&&guardToPromiseFn(x,r,a,o,u,n)()}))}}return l}function isRouteComponent(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function useLink(e){const t=inject(routerKey),r=inject(routeLocationKey),a=computed(()=>t.resolve(unref(e.to))),n=computed(()=>{const{matched:c}=a.value,{length:_}=c,f=c[_-1],m=r.matched;if(!f||!m.length)return-1;const v=m.findIndex(isSameRouteRecord.bind(null,f));if(v>-1)return v;const x=getOriginalPath(c[_-2]);return _>1&&getOriginalPath(f)===x&&m[m.length-1].path!==x?m.findIndex(isSameRouteRecord.bind(null,c[_-2])):v}),l=computed(()=>n.value>-1&&includesParams(r.params,a.value.params)),o=computed(()=>n.value>-1&&n.value===r.matched.length-1&&isSameRouteLocationParams(r.params,a.value.params));function u(c={}){return guardEvent(c)?t[unref(e.replace)?"replace":"push"](unref(e.to)).catch(noop$1):Promise.resolve()}return{route:a,href:computed(()=>a.value.href),isActive:l,isExactActive:o,navigate:u}}const RouterLinkImpl=defineComponent({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink,setup(e,{slots:t}){const r=reactive(useLink(e)),{options:a}=inject(routerKey),n=computed(()=>({[getLinkClass(e.activeClass,a.linkActiveClass,"router-link-active")]:r.isActive,[getLinkClass(e.exactActiveClass,a.linkExactActiveClass,"router-link-exact-active")]:r.isExactActive}));return()=>{const l=t.default&&t.default(r);return e.custom?l:h("a",{"aria-current":r.isExactActive?e.ariaCurrentValue:null,href:r.href,onClick:r.navigate,class:n.value},l)}}}),RouterLink=RouterLinkImpl;function guardEvent(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function includesParams(e,t){for(const r in t){const a=t[r],n=e[r];if(typeof a=="string"){if(a!==n)return!1}else if(!isArray(n)||n.length!==a.length||a.some((l,o)=>l!==n[o]))return!1}return!0}function getOriginalPath(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const getLinkClass=(e,t,r)=>e!=null?e:t!=null?t:r,RouterViewImpl=defineComponent({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:r}){const a=inject(routerViewLocationKey),n=computed(()=>e.route||a.value),l=inject(viewDepthKey,0),o=computed(()=>{let _=unref(l);const{matched:f}=n.value;let m;for(;(m=f[_])&&!m.components;)_++;return _}),u=computed(()=>n.value.matched[o.value]);provide(viewDepthKey,computed(()=>o.value+1)),provide(matchedRouteKey,u),provide(routerViewLocationKey,n);const c=ref();return watch(()=>[c.value,u.value,e.name],([_,f,m],[v,x,w])=>{f&&(f.instances[m]=_,x&&x!==f&&_&&_===v&&(f.leaveGuards.size||(f.leaveGuards=x.leaveGuards),f.updateGuards.size||(f.updateGuards=x.updateGuards))),_&&f&&(!x||!isSameRouteRecord(f,x)||!v)&&(f.enterCallbacks[m]||[]).forEach(C=>C(_))},{flush:"post"}),()=>{const _=n.value,f=e.name,m=u.value,v=m&&m.components[f];if(!v)return normalizeSlot(r.default,{Component:v,route:_});const x=m.props[f],w=x?x===!0?_.params:typeof x=="function"?x(_):x:null,k=h(v,assign$1({},w,t,{onVnodeUnmounted:V=>{V.component.isUnmounted&&(m.instances[f]=null)},ref:c}));return normalizeSlot(r.default,{Component:k,route:_})||k}}});function normalizeSlot(e,t){if(!e)return null;const r=e(t);return r.length===1?r[0]:r}const RouterView=RouterViewImpl;function createRouter(e){const t=createRouterMatcher(e.routes,e),r=e.parseQuery||parseQuery,a=e.stringifyQuery||stringifyQuery,n=e.history,l=useCallbacks(),o=useCallbacks(),u=useCallbacks(),c=shallowRef(START_LOCATION_NORMALIZED);let _=START_LOCATION_NORMALIZED;isBrowser&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const f=applyToParams.bind(null,N=>""+N),m=applyToParams.bind(null,encodeParam),v=applyToParams.bind(null,decode);function x(N,U){let q,J;return isRouteName(N)?(q=t.getRecordMatcher(N),J=U):J=N,t.addRoute(J,q)}function w(N){const U=t.getRecordMatcher(N);U&&t.removeRoute(U)}function C(){return t.getRoutes().map(N=>N.record)}function k(N){return!!t.getRecordMatcher(N)}function V(N,U){if(U=assign$1({},U||c.value),typeof N=="string"){const B=parseURL(r,N,U.path),E=t.resolve({path:B.path},U),R=n.createHref(B.fullPath);return assign$1(B,E,{params:v(E.params),hash:decode(B.hash),redirectedFrom:void 0,href:R})}let q;if(N.path!=null)q=assign$1({},N,{path:parseURL(r,N.path,U.path).path});else{const B=assign$1({},N.params);for(const E in B)B[E]==null&&delete B[E];q=assign$1({},N,{params:m(B)}),U.params=m(U.params)}const J=t.resolve(q,U),_e=N.hash||"";J.params=f(v(J.params));const de=stringifyURL(a,assign$1({},N,{hash:encodeHash(_e),path:J.path})),y=n.createHref(de);return assign$1({fullPath:de,hash:_e,query:a===stringifyQuery?normalizeQuery(N.query):N.query||{}},J,{redirectedFrom:void 0,href:y})}function O(N){return typeof N=="string"?parseURL(r,N,c.value.path):assign$1({},N)}function W(N,U){if(_!==N)return createRouterError(8,{from:U,to:N})}function T(N){return b(N)}function $(N){return T(assign$1(O(N),{replace:!0}))}function G(N){const U=N.matched[N.matched.length-1];if(U&&U.redirect){const{redirect:q}=U;let J=typeof q=="function"?q(N):q;return typeof J=="string"&&(J=J.includes("?")||J.includes("#")?J=O(J):{path:J},J.params={}),assign$1({query:N.query,hash:N.hash,params:J.path!=null?{}:N.params},J)}}function b(N,U){const q=_=V(N),J=c.value,_e=N.state,de=N.force,y=N.replace===!0,B=G(q);if(B)return b(assign$1(O(B),{state:typeof B=="object"?assign$1({},_e,B.state):_e,force:de,replace:y}),U||q);const E=q;E.redirectedFrom=U;let R;return!de&&isSameRouteLocation(a,J,q)&&(R=createRouterError(16,{to:E,from:J}),Ee(J,J,!0,!1)),(R?Promise.resolve(R):ee(E,J)).catch(A=>isNavigationFailure(A)?isNavigationFailure(A,2)?A:ge(A):ue(A,E,J)).then(A=>{if(A){if(isNavigationFailure(A,2))return b(assign$1({replace:y},O(A.to),{state:typeof A.to=="object"?assign$1({},_e,A.to.state):_e,force:de}),U||E)}else A=K(E,J,!0,y,_e);return H(E,J,A),A})}function S(N,U){const q=W(N,U);return q?Promise.reject(q):Promise.resolve()}function I(N){const U=Me.values().next().value;return U&&typeof U.runWithContext=="function"?U.runWithContext(N):N()}function ee(N,U){let q;const[J,_e,de]=extractChangingRecords(N,U);q=extractComponentsGuards(J.reverse(),"beforeRouteLeave",N,U);for(const B of J)B.leaveGuards.forEach(E=>{q.push(guardToPromiseFn(E,N,U))});const y=S.bind(null,N,U);return q.push(y),we(q).then(()=>{q=[];for(const B of l.list())q.push(guardToPromiseFn(B,N,U));return q.push(y),we(q)}).then(()=>{q=extractComponentsGuards(_e,"beforeRouteUpdate",N,U);for(const B of _e)B.updateGuards.forEach(E=>{q.push(guardToPromiseFn(E,N,U))});return q.push(y),we(q)}).then(()=>{q=[];for(const B of de)if(B.beforeEnter)if(isArray(B.beforeEnter))for(const E of B.beforeEnter)q.push(guardToPromiseFn(E,N,U));else q.push(guardToPromiseFn(B.beforeEnter,N,U));return q.push(y),we(q)}).then(()=>(N.matched.forEach(B=>B.enterCallbacks={}),q=extractComponentsGuards(de,"beforeRouteEnter",N,U,I),q.push(y),we(q))).then(()=>{q=[];for(const B of o.list())q.push(guardToPromiseFn(B,N,U));return q.push(y),we(q)}).catch(B=>isNavigationFailure(B,8)?B:Promise.reject(B))}function H(N,U,q){u.list().forEach(J=>I(()=>J(N,U,q)))}function K(N,U,q,J,_e){const de=W(N,U);if(de)return de;const y=U===START_LOCATION_NORMALIZED,B=isBrowser?history.state:{};q&&(J||y?n.replace(N.fullPath,assign$1({scroll:y&&B&&B.scroll},_e)):n.push(N.fullPath,_e)),c.value=N,Ee(N,U,q,y),ge()}let ne;function he(){ne||(ne=n.listen((N,U,q)=>{if(!Re.listening)return;const J=V(N),_e=G(J);if(_e){b(assign$1(_e,{replace:!0}),J).catch(noop$1);return}_=J;const de=c.value;isBrowser&&saveScrollPosition(getScrollKey(de.fullPath,q.delta),computeScrollPosition()),ee(J,de).catch(y=>isNavigationFailure(y,12)?y:isNavigationFailure(y,2)?(b(y.to,J).then(B=>{isNavigationFailure(B,20)&&!q.delta&&q.type===NavigationType.pop&&n.go(-1,!1)}).catch(noop$1),Promise.reject()):(q.delta&&n.go(-q.delta,!1),ue(y,J,de))).then(y=>{y=y||K(J,de,!1),y&&(q.delta&&!isNavigationFailure(y,8)?n.go(-q.delta,!1):q.type===NavigationType.pop&&isNavigationFailure(y,20)&&n.go(-1,!1)),H(J,de,y)}).catch(noop$1)}))}let ve=useCallbacks(),oe=useCallbacks(),ie;function ue(N,U,q){ge(N);const J=oe.list();return J.length?J.forEach(_e=>_e(N,U,q)):console.error(N),Promise.reject(N)}function ye(){return ie&&c.value!==START_LOCATION_NORMALIZED?Promise.resolve():new Promise((N,U)=>{ve.add([N,U])})}function ge(N){return ie||(ie=!N,he(),ve.list().forEach(([U,q])=>N?q(N):U()),ve.reset()),N}function Ee(N,U,q,J){const{scrollBehavior:_e}=e;if(!isBrowser||!_e)return Promise.resolve();const de=!q&&getSavedScrollPosition(getScrollKey(N.fullPath,0))||(J||!q)&&history.state&&history.state.scroll||null;return nextTick().then(()=>_e(N,U,de)).then(y=>y&&scrollToPosition(y)).catch(y=>ue(y,N,U))}const xe=N=>n.go(N);let Ve;const Me=new Set,Re={currentRoute:c,listening:!0,addRoute:x,removeRoute:w,hasRoute:k,getRoutes:C,resolve:V,options:e,push:T,replace:$,go:xe,back:()=>xe(-1),forward:()=>xe(1),beforeEach:l.add,beforeResolve:o.add,afterEach:u.add,onError:oe.add,isReady:ye,install(N){const U=this;N.component("RouterLink",RouterLink),N.component("RouterView",RouterView),N.config.globalProperties.$router=U,Object.defineProperty(N.config.globalProperties,"$route",{enumerable:!0,get:()=>unref(c)}),isBrowser&&!Ve&&c.value===START_LOCATION_NORMALIZED&&(Ve=!0,T(n.location).catch(_e=>{}));const q={};for(const _e in START_LOCATION_NORMALIZED)Object.defineProperty(q,_e,{get:()=>c.value[_e],enumerable:!0});N.provide(routerKey,U),N.provide(routeLocationKey,shallowReactive(q)),N.provide(routerViewLocationKey,c);const J=N.unmount;Me.add(N),N.unmount=function(){Me.delete(N),Me.size<1&&(_=START_LOCATION_NORMALIZED,ne&&ne(),ne=null,c.value=START_LOCATION_NORMALIZED,Ve=!1,ie=!1),J()}}};function we(N){return N.reduce((U,q)=>U.then(()=>I(q)),Promise.resolve())}return Re}function extractChangingRecords(e,t){const r=[],a=[],n=[],l=Math.max(t.matched.length,e.matched.length);for(let o=0;o<l;o++){const u=t.matched[o];u&&(e.matched.find(_=>isSameRouteRecord(_,u))?a.push(u):r.push(u));const c=e.matched[o];c&&(t.matched.find(_=>isSameRouteRecord(_,c))||n.push(c))}return[r,a,n]}function useRoute(){return inject(routeLocationKey)}const routes=[{path:"/",name:"home",component:()=>__vitePreload(()=>import("./homeView.e2f33bfb.js"),["assets/homeView.e2f33bfb.js","assets/vendor.d471d1e7.js","assets/homeView.0a17771e.css"])}],router=createRouter({history:createWebHistory(),routes});var isVue2=!1;/*! */const isBrowser=typeof document<"u";function isESModule(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const assign$1=Object.assign;function applyToParams(e,t){const r={};for(const a in t){const n=t[a];r[a]=isArray(n)?n.map(e):e(n)}return r}const noop$1=()=>{},isArray=Array.isArray,HASH_RE=/#/g,AMPERSAND_RE=/&/g,SLASH_RE=/\//g,EQUAL_RE=/=/g,IM_RE=/\?/g,PLUS_RE=/\+/g,ENC_BRACKET_OPEN_RE=/%5B/g,ENC_BRACKET_CLOSE_RE=/%5D/g,ENC_CARET_RE=/%5E/g,ENC_BACKTICK_RE=/%60/g,ENC_CURLY_OPEN_RE=/%7B/g,ENC_PIPE_RE=/%7C/g,ENC_CURLY_CLOSE_RE=/%7D/g,ENC_SPACE_RE=/%20/g;function commonEncode(e){return encodeURI(""+e).replace(ENC_PIPE_RE,"|").replace(ENC_BRACKET_OPEN_RE,"[").replace(ENC_BRACKET_CLOSE_RE,"]")}function encodeHash(e){return commonEncode(e).replace(ENC_CURLY_OPEN_RE,"{").replace(ENC_CURLY_CLOSE_RE,"}").replace(ENC_CARET_RE,"^")}function encodeQueryValue(e){return commonEncode(e).replace(PLUS_RE,"%2B").replace(ENC_SPACE_RE,"+").replace(HASH_RE,"%23").replace(AMPERSAND_RE,"%26").replace(ENC_BACKTICK_RE,"`").replace(ENC_CURLY_OPEN_RE,"{").replace(ENC_CURLY_CLOSE_RE,"}").replace(ENC_CARET_RE,"^")}function encodeQueryKey(e){return encodeQueryValue(e).replace(EQUAL_RE,"%3D")}function encodePath(e){return commonEncode(e).replace(HASH_RE,"%23").replace(IM_RE,"%3F")}function encodeParam(e){return e==null?"":encodePath(e).replace(SLASH_RE,"%2F")}function decode(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const TRAILING_SLASH_RE=/\/$/,removeTrailingSlash=e=>e.replace(TRAILING_SLASH_RE,"");function parseURL(e,t,r="/"){let a,n={},l="",o="";const u=t.indexOf("#");let c=t.indexOf("?");return u<c&&u>=0&&(c=-1),c>-1&&(a=t.slice(0,c),l=t.slice(c+1,u>-1?u:t.length),n=e(l)),u>-1&&(a=a||t.slice(0,u),o=t.slice(u,t.length)),a=resolveRelativePath(a!=null?a:t,r),{fullPath:a+(l&&"?")+l+o,path:a,query:n,hash:decode(o)}}function stringifyURL(e,t){const r=t.query?e(t.query):"";return t.path+(r&&"?")+r+(t.hash||"")}function stripBase(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function isSameRouteLocation(e,t,r){const a=t.matched.length-1,n=r.matched.length-1;return a>-1&&a===n&&isSameRouteRecord(t.matched[a],r.matched[n])&&isSameRouteLocationParams(t.params,r.params)&&e(t.query)===e(r.query)&&t.hash===r.hash}function isSameRouteRecord(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function isSameRouteLocationParams(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const r in e)if(!isSameRouteLocationParamsValue(e[r],t[r]))return!1;return!0}function isSameRouteLocationParamsValue(e,t){return isArray(e)?isEquivalentArray(e,t):isArray(t)?isEquivalentArray(t,e):e===t}function isEquivalentArray(e,t){return isArray(t)?e.length===t.length&&e.every((r,a)=>r===t[a]):e.length===1&&e[0]===t}function resolveRelativePath(e,t){if(e.startsWith("/"))return e;if(!e)return t;const r=t.split("/"),a=e.split("/"),n=a[a.length-1];(n===".."||n===".")&&a.push("");let l=r.length-1,o,u;for(o=0;o<a.length;o++)if(u=a[o],u!==".")if(u==="..")l>1&&l--;else break;return r.slice(0,l).join("/")+"/"+a.slice(o).join("/")}var NavigationType;(function(e){e.pop="pop",e.push="push"})(NavigationType||(NavigationType={}));var NavigationDirection;(function(e){e.back="back",e.forward="forward",e.unknown=""})(NavigationDirection||(NavigationDirection={}));function normalizeBase(e){if(!e)if(isBrowser){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),removeTrailingSlash(e)}const BEFORE_HASH_RE=/^[^#]+#/;function createHref(e,t){return e.replace(BEFORE_HASH_RE,"#")+t}function getElementPosition(e,t){const r=document.documentElement.getBoundingClientRect(),a=e.getBoundingClientRect();return{behavior:t.behavior,left:a.left-r.left-(t.left||0),top:a.top-r.top-(t.top||0)}}const computeScrollPosition=()=>({left:window.scrollX,top:window.scrollY});function scrollToPosition(e){let t;if("el"in e){const r=e.el,a=typeof r=="string"&&r.startsWith("#"),n=typeof r=="string"?a?document.getElementById(r.slice(1)):document.querySelector(r):r;if(!n)return;t=getElementPosition(n,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function getScrollKey(e,t){return(history.state?history.state.position-t:-1)+e}const scrollPositions=new Map;function saveScrollPosition(e,t){scrollPositions.set(e,t)}function getSavedScrollPosition(e){const t=scrollPositions.get(e);return scrollPositions.delete(e),t}let createBaseLocation=()=>location.protocol+"//"+location.host;function createCurrentLocation(e,t){const{pathname:r,search:a,hash:n}=t,l=e.indexOf("#");if(l>-1){let u=n.includes(e.slice(l))?e.slice(l).length:1,c=n.slice(u);return c[0]!=="/"&&(c="/"+c),stripBase(c,"")}return stripBase(r,e)+a+n}function useHistoryListeners(e,t,r,a){let n=[],l=[],o=null;const u=({state:v})=>{const x=createCurrentLocation(e,location),w=r.value,C=t.value;let k=0;if(v){if(r.value=x,t.value=v,o&&o===w){o=null;return}k=C?v.position-C.position:0}else a(x);n.forEach(V=>{V(r.value,w,{delta:k,type:NavigationType.pop,direction:k?k>0?NavigationDirection.forward:NavigationDirection.back:NavigationDirection.unknown})})};function c(){o=r.value}function _(v){n.push(v);const x=()=>{const w=n.indexOf(v);w>-1&&n.splice(w,1)};return l.push(x),x}function f(){const{history:v}=window;!v.state||v.replaceState(assign$1({},v.state,{scroll:computeScrollPosition()}),"")}function m(){for(const v of l)v();l=[],window.removeEventListener("popstate",u),window.removeEventListener("beforeunload",f)}return window.addEventListener("popstate",u),window.addEventListener("beforeunload",f,{passive:!0}),{pauseListeners:c,listen:_,destroy:m}}function buildState(e,t,r,a=!1,n=!1){return{back:e,current:t,forward:r,replaced:a,position:window.history.length,scroll:n?computeScrollPosition():null}}function useHistoryStateNavigation(e){const{history:t,location:r}=window,a={value:createCurrentLocation(e,r)},n={value:t.state};n.value||l(a.value,{back:null,current:a.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function l(c,_,f){const m=e.indexOf("#"),v=m>-1?(r.host&&document.querySelector("base")?e:e.slice(m))+c:createBaseLocation()+e+c;try{t[f?"replaceState":"pushState"](_,"",v),n.value=_}catch(x){console.error(x),r[f?"replace":"assign"](v)}}function o(c,_){const f=assign$1({},t.state,buildState(n.value.back,c,n.value.forward,!0),_,{position:n.value.position});l(c,f,!0),a.value=c}function u(c,_){const f=assign$1({},n.value,t.state,{forward:c,scroll:computeScrollPosition()});l(f.current,f,!0);const m=assign$1({},buildState(a.value,c,null),{position:f.position+1},_);l(c,m,!1),a.value=c}return{location:a,state:n,push:u,replace:o}}function createWebHistory(e){e=normalizeBase(e);const t=useHistoryStateNavigation(e),r=useHistoryListeners(e,t.state,t.location,t.replace);function a(l,o=!0){o||r.pauseListeners(),history.go(l)}const n=assign$1({location:"",base:e,go:a,createHref:createHref.bind(null,e)},t,r);return Object.defineProperty(n,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(n,"state",{enumerable:!0,get:()=>t.state.value}),n}function isRouteLocation(e){return typeof e=="string"||e&&typeof e=="object"}function isRouteName(e){return typeof e=="string"||typeof e=="symbol"}const START_LOCATION_NORMALIZED={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},NavigationFailureSymbol=Symbol("");var NavigationFailureType;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(NavigationFailureType||(NavigationFailureType={}));function createRouterError(e,t){return assign$1(new Error,{type:e,[NavigationFailureSymbol]:!0},t)}function isNavigationFailure(e,t){return e instanceof Error&&NavigationFailureSymbol in e&&(t==null||!!(e.type&t))}const BASE_PARAM_PATTERN="[^/]+?",BASE_PATH_PARSER_OPTIONS={sensitive:!1,strict:!1,start:!0,end:!0},REGEX_CHARS_RE=/[.+*?^${}()[\]/\\]/g;function tokensToParser(e,t){const r=assign$1({},BASE_PATH_PARSER_OPTIONS,t),a=[];let n=r.start?"^":"";const l=[];for(const _ of e){const f=_.length?[]:[90];r.strict&&!_.length&&(n+="/");for(let m=0;m<_.length;m++){const v=_[m];let x=40+(r.sensitive?.25:0);if(v.type===0)m||(n+="/"),n+=v.value.replace(REGEX_CHARS_RE,"\\$&"),x+=40;else if(v.type===1){const{value:w,repeatable:C,optional:k,regexp:V}=v;l.push({name:w,repeatable:C,optional:k});const O=V||BASE_PARAM_PATTERN;if(O!==BASE_PARAM_PATTERN){x+=10;try{new RegExp(`(${O})`)}catch(T){throw new Error(`Invalid custom RegExp for param "${w}" (${O}): `+T.message)}}let W=C?`((?:${O})(?:/(?:${O}))*)`:`(${O})`;m||(W=k&&_.length<2?`(?:/${W})`:"/"+W),k&&(W+="?"),n+=W,x+=20,k&&(x+=-8),C&&(x+=-20),O===".*"&&(x+=-50)}f.push(x)}a.push(f)}if(r.strict&&r.end){const _=a.length-1;a[_][a[_].length-1]+=.7000000000000001}r.strict||(n+="/?"),r.end?n+="$":r.strict&&(n+="(?:/|$)");const o=new RegExp(n,r.sensitive?"":"i");function u(_){const f=_.match(o),m={};if(!f)return null;for(let v=1;v<f.length;v++){const x=f[v]||"",w=l[v-1];m[w.name]=x&&w.repeatable?x.split("/"):x}return m}function c(_){let f="",m=!1;for(const v of e){(!m||!f.endsWith("/"))&&(f+="/"),m=!1;for(const x of v)if(x.type===0)f+=x.value;else if(x.type===1){const{value:w,repeatable:C,optional:k}=x,V=w in _?_[w]:"";if(isArray(V)&&!C)throw new Error(`Provided param "${w}" is an array but it is not repeatable (* or + modifiers)`);const O=isArray(V)?V.join("/"):V;if(!O)if(k)v.length<2&&(f.endsWith("/")?f=f.slice(0,-1):m=!0);else throw new Error(`Missing required param "${w}"`);f+=O}}return f||"/"}return{re:o,score:a,keys:l,parse:u,stringify:c}}function compareScoreArray(e,t){let r=0;for(;r<e.length&&r<t.length;){const a=t[r]-e[r];if(a)return a;r++}return e.length<t.length?e.length===1&&e[0]===40+40?-1:1:e.length>t.length?t.length===1&&t[0]===40+40?1:-1:0}function comparePathParserScore(e,t){let r=0;const a=e.score,n=t.score;for(;r<a.length&&r<n.length;){const l=compareScoreArray(a[r],n[r]);if(l)return l;r++}if(Math.abs(n.length-a.length)===1){if(isLastScoreNegative(a))return 1;if(isLastScoreNegative(n))return-1}return n.length-a.length}function isLastScoreNegative(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const ROOT_TOKEN={type:0,value:""},VALID_PARAM_RE=/[a-zA-Z0-9_]/;function tokenizePath(e){if(!e)return[[]];if(e==="/")return[[ROOT_TOKEN]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(x){throw new Error(`ERR (${r})/"${_}": ${x}`)}let r=0,a=r;const n=[];let l;function o(){l&&n.push(l),l=[]}let u=0,c,_="",f="";function m(){!_||(r===0?l.push({type:0,value:_}):r===1||r===2||r===3?(l.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${_}) must be alone in its segment. eg: '/:ids+.`),l.push({type:1,value:_,regexp:f,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),_="")}function v(){_+=c}for(;u<e.length;){if(c=e[u++],c==="\\"&&r!==2){a=r,r=4;continue}switch(r){case 0:c==="/"?(_&&m(),o()):c===":"?(m(),r=1):v();break;case 4:v(),r=a;break;case 1:c==="("?r=2:VALID_PARAM_RE.test(c)?v():(m(),r=0,c!=="*"&&c!=="?"&&c!=="+"&&u--);break;case 2:c===")"?f[f.length-1]=="\\"?f=f.slice(0,-1)+c:r=3:f+=c;break;case 3:m(),r=0,c!=="*"&&c!=="?"&&c!=="+"&&u--,f="";break;default:t("Unknown state");break}}return r===2&&t(`Unfinished custom RegExp for param "${_}"`),m(),o(),n}function createRouteRecordMatcher(e,t,r){const a=tokensToParser(tokenizePath(e.path),r),n=assign$1(a,{record:e,parent:t,children:[],alias:[]});return t&&!n.record.aliasOf==!t.record.aliasOf&&t.children.push(n),n}function createRouterMatcher(e,t){const r=[],a=new Map;t=mergeOptions({strict:!1,end:!0,sensitive:!1},t);function n(f){return a.get(f)}function l(f,m,v){const x=!v,w=normalizeRouteRecord(f);w.aliasOf=v&&v.record;const C=mergeOptions(t,f),k=[w];if("alias"in f){const W=typeof f.alias=="string"?[f.alias]:f.alias;for(const T of W)k.push(assign$1({},w,{components:v?v.record.components:w.components,path:T,aliasOf:v?v.record:w}))}let V,O;for(const W of k){const{path:T}=W;if(m&&T[0]!=="/"){const $=m.record.path,G=$[$.length-1]==="/"?"":"/";W.path=m.record.path+(T&&G+T)}if(V=createRouteRecordMatcher(W,m,C),v?v.alias.push(V):(O=O||V,O!==V&&O.alias.push(V),x&&f.name&&!isAliasRecord(V)&&o(f.name)),w.children){const $=w.children;for(let G=0;G<$.length;G++)l($[G],V,v&&v.children[G])}v=v||V,(V.record.components&&Object.keys(V.record.components).length||V.record.name||V.record.redirect)&&c(V)}return O?()=>{o(O)}:noop$1}function o(f){if(isRouteName(f)){const m=a.get(f);m&&(a.delete(f),r.splice(r.indexOf(m),1),m.children.forEach(o),m.alias.forEach(o))}else{const m=r.indexOf(f);m>-1&&(r.splice(m,1),f.record.name&&a.delete(f.record.name),f.children.forEach(o),f.alias.forEach(o))}}function u(){return r}function c(f){let m=0;for(;m<r.length&&comparePathParserScore(f,r[m])>=0&&(f.record.path!==r[m].record.path||!isRecordChildOf(f,r[m]));)m++;r.splice(m,0,f),f.record.name&&!isAliasRecord(f)&&a.set(f.record.name,f)}function _(f,m){let v,x={},w,C;if("name"in f&&f.name){if(v=a.get(f.name),!v)throw createRouterError(1,{location:f});C=v.record.name,x=assign$1(paramsFromLocation(m.params,v.keys.filter(O=>!O.optional).concat(v.parent?v.parent.keys.filter(O=>O.optional):[]).map(O=>O.name)),f.params&&paramsFromLocation(f.params,v.keys.map(O=>O.name))),w=v.stringify(x)}else if(f.path!=null)w=f.path,v=r.find(O=>O.re.test(w)),v&&(x=v.parse(w),C=v.record.name);else{if(v=m.name?a.get(m.name):r.find(O=>O.re.test(m.path)),!v)throw createRouterError(1,{location:f,currentLocation:m});C=v.record.name,x=assign$1({},m.params,f.params),w=v.stringify(x)}const k=[];let V=v;for(;V;)k.unshift(V.record),V=V.parent;return{name:C,path:w,params:x,matched:k,meta:mergeMetaFields(k)}}return e.forEach(f=>l(f)),{addRoute:l,resolve:_,removeRoute:o,getRoutes:u,getRecordMatcher:n}}function paramsFromLocation(e,t){const r={};for(const a of t)a in e&&(r[a]=e[a]);return r}function normalizeRouteRecord(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:normalizeRecordProps(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function normalizeRecordProps(e){const t={},r=e.props||!1;if("component"in e)t.default=r;else for(const a in e.components)t[a]=typeof r=="object"?r[a]:r;return t}function isAliasRecord(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function mergeMetaFields(e){return e.reduce((t,r)=>assign$1(t,r.meta),{})}function mergeOptions(e,t){const r={};for(const a in e)r[a]=a in t?t[a]:e[a];return r}function isRecordChildOf(e,t){return t.children.some(r=>r===e||isRecordChildOf(e,r))}function parseQuery(e){const t={};if(e===""||e==="?")return t;const a=(e[0]==="?"?e.slice(1):e).split("&");for(let n=0;n<a.length;++n){const l=a[n].replace(PLUS_RE," "),o=l.indexOf("="),u=decode(o<0?l:l.slice(0,o)),c=o<0?null:decode(l.slice(o+1));if(u in t){let _=t[u];isArray(_)||(_=t[u]=[_]),_.push(c)}else t[u]=c}return t}function stringifyQuery(e){let t="";for(let r in e){const a=e[r];if(r=encodeQueryKey(r),a==null){a!==void 0&&(t+=(t.length?"&":"")+r);continue}(isArray(a)?a.map(l=>l&&encodeQueryValue(l)):[a&&encodeQueryValue(a)]).forEach(l=>{l!==void 0&&(t+=(t.length?"&":"")+r,l!=null&&(t+="="+l))})}return t}function normalizeQuery(e){const t={};for(const r in e){const a=e[r];a!==void 0&&(t[r]=isArray(a)?a.map(n=>n==null?null:""+n):a==null?a:""+a)}return t}const matchedRouteKey=Symbol(""),viewDepthKey=Symbol(""),routerKey=Symbol(""),routeLocationKey=Symbol(""),routerViewLocationKey=Symbol("");function useCallbacks(){let e=[];function t(a){return e.push(a),()=>{const n=e.indexOf(a);n>-1&&e.splice(n,1)}}function r(){e=[]}return{add:t,list:()=>e.slice(),reset:r}}function guardToPromiseFn(e,t,r,a,n,l=o=>o()){const o=a&&(a.enterCallbacks[n]=a.enterCallbacks[n]||[]);return()=>new Promise((u,c)=>{const _=v=>{v===!1?c(createRouterError(4,{from:r,to:t})):v instanceof Error?c(v):isRouteLocation(v)?c(createRouterError(2,{from:t,to:v})):(o&&a.enterCallbacks[n]===o&&typeof v=="function"&&o.push(v),u())},f=l(()=>e.call(a&&a.instances[n],t,r,_));let m=Promise.resolve(f);e.length<3&&(m=m.then(_)),m.catch(v=>c(v))})}function extractComponentsGuards(e,t,r,a,n=l=>l()){const l=[];for(const o of e)for(const u in o.components){let c=o.components[u];if(!(t!=="beforeRouteEnter"&&!o.instances[u]))if(isRouteComponent(c)){const f=(c.__vccOpts||c)[t];f&&l.push(guardToPromiseFn(f,r,a,o,u,n))}else{let _=c();l.push(()=>_.then(f=>{if(!f)return Promise.reject(new Error(`Couldn't resolve component "${u}" at "${o.path}"`));const m=isESModule(f)?f.default:f;o.components[u]=m;const x=(m.__vccOpts||m)[t];return x&&guardToPromiseFn(x,r,a,o,u,n)()}))}}return l}function isRouteComponent(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function useLink(e){const t=inject(routerKey),r=inject(routeLocationKey),a=computed(()=>t.resolve(unref(e.to))),n=computed(()=>{const{matched:c}=a.value,{length:_}=c,f=c[_-1],m=r.matched;if(!f||!m.length)return-1;const v=m.findIndex(isSameRouteRecord.bind(null,f));if(v>-1)return v;const x=getOriginalPath(c[_-2]);return _>1&&getOriginalPath(f)===x&&m[m.length-1].path!==x?m.findIndex(isSameRouteRecord.bind(null,c[_-2])):v}),l=computed(()=>n.value>-1&&includesParams(r.params,a.value.params)),o=computed(()=>n.value>-1&&n.value===r.matched.length-1&&isSameRouteLocationParams(r.params,a.value.params));function u(c={}){return guardEvent(c)?t[unref(e.replace)?"replace":"push"](unref(e.to)).catch(noop$1):Promise.resolve()}return{route:a,href:computed(()=>a.value.href),isActive:l,isExactActive:o,navigate:u}}const RouterLinkImpl=defineComponent({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink,setup(e,{slots:t}){const r=reactive(useLink(e)),{options:a}=inject(routerKey),n=computed(()=>({[getLinkClass(e.activeClass,a.linkActiveClass,"router-link-active")]:r.isActive,[getLinkClass(e.exactActiveClass,a.linkExactActiveClass,"router-link-exact-active")]:r.isExactActive}));return()=>{const l=t.default&&t.default(r);return e.custom?l:h("a",{"aria-current":r.isExactActive?e.ariaCurrentValue:null,href:r.href,onClick:r.navigate,class:n.value},l)}}}),RouterLink=RouterLinkImpl;function guardEvent(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function includesParams(e,t){for(const r in t){const a=t[r],n=e[r];if(typeof a=="string"){if(a!==n)return!1}else if(!isArray(n)||n.length!==a.length||a.some((l,o)=>l!==n[o]))return!1}return!0}function getOriginalPath(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const getLinkClass=(e,t,r)=>e!=null?e:t!=null?t:r,RouterViewImpl=defineComponent({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:r}){const a=inject(routerViewLocationKey),n=computed(()=>e.route||a.value),l=inject(viewDepthKey,0),o=computed(()=>{let _=unref(l);const{matched:f}=n.value;let m;for(;(m=f[_])&&!m.components;)_++;return _}),u=computed(()=>n.value.matched[o.value]);provide(viewDepthKey,computed(()=>o.value+1)),provide(matchedRouteKey,u),provide(routerViewLocationKey,n);const c=ref();return watch(()=>[c.value,u.value,e.name],([_,f,m],[v,x,w])=>{f&&(f.instances[m]=_,x&&x!==f&&_&&_===v&&(f.leaveGuards.size||(f.leaveGuards=x.leaveGuards),f.updateGuards.size||(f.updateGuards=x.updateGuards))),_&&f&&(!x||!isSameRouteRecord(f,x)||!v)&&(f.enterCallbacks[m]||[]).forEach(C=>C(_))},{flush:"post"}),()=>{const _=n.value,f=e.name,m=u.value,v=m&&m.components[f];if(!v)return normalizeSlot(r.default,{Component:v,route:_});const x=m.props[f],w=x?x===!0?_.params:typeof x=="function"?x(_):x:null,k=h(v,assign$1({},w,t,{onVnodeUnmounted:V=>{V.component.isUnmounted&&(m.instances[f]=null)},ref:c}));return normalizeSlot(r.default,{Component:k,route:_})||k}}});function normalizeSlot(e,t){if(!e)return null;const r=e(t);return r.length===1?r[0]:r}const RouterView=RouterViewImpl;function createRouter(e){const t=createRouterMatcher(e.routes,e),r=e.parseQuery||parseQuery,a=e.stringifyQuery||stringifyQuery,n=e.history,l=useCallbacks(),o=useCallbacks(),u=useCallbacks(),c=shallowRef(START_LOCATION_NORMALIZED);let _=START_LOCATION_NORMALIZED;isBrowser&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const f=applyToParams.bind(null,N=>""+N),m=applyToParams.bind(null,encodeParam),v=applyToParams.bind(null,decode);function x(N,U){let q,J;return isRouteName(N)?(q=t.getRecordMatcher(N),J=U):J=N,t.addRoute(J,q)}function w(N){const U=t.getRecordMatcher(N);U&&t.removeRoute(U)}function C(){return t.getRoutes().map(N=>N.record)}function k(N){return!!t.getRecordMatcher(N)}function V(N,U){if(U=assign$1({},U||c.value),typeof N=="string"){const B=parseURL(r,N,U.path),E=t.resolve({path:B.path},U),R=n.createHref(B.fullPath);return assign$1(B,E,{params:v(E.params),hash:decode(B.hash),redirectedFrom:void 0,href:R})}let q;if(N.path!=null)q=assign$1({},N,{path:parseURL(r,N.path,U.path).path});else{const B=assign$1({},N.params);for(const E in B)B[E]==null&&delete B[E];q=assign$1({},N,{params:m(B)}),U.params=m(U.params)}const J=t.resolve(q,U),_e=N.hash||"";J.params=f(v(J.params));const de=stringifyURL(a,assign$1({},N,{hash:encodeHash(_e),path:J.path})),y=n.createHref(de);return assign$1({fullPath:de,hash:_e,query:a===stringifyQuery?normalizeQuery(N.query):N.query||{}},J,{redirectedFrom:void 0,href:y})}function O(N){return typeof N=="string"?parseURL(r,N,c.value.path):assign$1({},N)}function W(N,U){if(_!==N)return createRouterError(8,{from:U,to:N})}function T(N){return b(N)}function $(N){return T(assign$1(O(N),{replace:!0}))}function G(N){const U=N.matched[N.matched.length-1];if(U&&U.redirect){const{redirect:q}=U;let J=typeof q=="function"?q(N):q;return typeof J=="string"&&(J=J.includes("?")||J.includes("#")?J=O(J):{path:J},J.params={}),assign$1({query:N.query,hash:N.hash,params:J.path!=null?{}:N.params},J)}}function b(N,U){const q=_=V(N),J=c.value,_e=N.state,de=N.force,y=N.replace===!0,B=G(q);if(B)return b(assign$1(O(B),{state:typeof B=="object"?assign$1({},_e,B.state):_e,force:de,replace:y}),U||q);const E=q;E.redirectedFrom=U;let R;return!de&&isSameRouteLocation(a,J,q)&&(R=createRouterError(16,{to:E,from:J}),Ee(J,J,!0,!1)),(R?Promise.resolve(R):ee(E,J)).catch(A=>isNavigationFailure(A)?isNavigationFailure(A,2)?A:ge(A):ue(A,E,J)).then(A=>{if(A){if(isNavigationFailure(A,2))return b(assign$1({replace:y},O(A.to),{state:typeof A.to=="object"?assign$1({},_e,A.to.state):_e,force:de}),U||E)}else A=K(E,J,!0,y,_e);return H(E,J,A),A})}function S(N,U){const q=W(N,U);return q?Promise.reject(q):Promise.resolve()}function I(N){const U=Me.values().next().value;return U&&typeof U.runWithContext=="function"?U.runWithContext(N):N()}function ee(N,U){let q;const[J,_e,de]=extractChangingRecords(N,U);q=extractComponentsGuards(J.reverse(),"beforeRouteLeave",N,U);for(const B of J)B.leaveGuards.forEach(E=>{q.push(guardToPromiseFn(E,N,U))});const y=S.bind(null,N,U);return q.push(y),we(q).then(()=>{q=[];for(const B of l.list())q.push(guardToPromiseFn(B,N,U));return q.push(y),we(q)}).then(()=>{q=extractComponentsGuards(_e,"beforeRouteUpdate",N,U);for(const B of _e)B.updateGuards.forEach(E=>{q.push(guardToPromiseFn(E,N,U))});return q.push(y),we(q)}).then(()=>{q=[];for(const B of de)if(B.beforeEnter)if(isArray(B.beforeEnter))for(const E of B.beforeEnter)q.push(guardToPromiseFn(E,N,U));else q.push(guardToPromiseFn(B.beforeEnter,N,U));return q.push(y),we(q)}).then(()=>(N.matched.forEach(B=>B.enterCallbacks={}),q=extractComponentsGuards(de,"beforeRouteEnter",N,U,I),q.push(y),we(q))).then(()=>{q=[];for(const B of o.list())q.push(guardToPromiseFn(B,N,U));return q.push(y),we(q)}).catch(B=>isNavigationFailure(B,8)?B:Promise.reject(B))}function H(N,U,q){u.list().forEach(J=>I(()=>J(N,U,q)))}function K(N,U,q,J,_e){const de=W(N,U);if(de)return de;const y=U===START_LOCATION_NORMALIZED,B=isBrowser?history.state:{};q&&(J||y?n.replace(N.fullPath,assign$1({scroll:y&&B&&B.scroll},_e)):n.push(N.fullPath,_e)),c.value=N,Ee(N,U,q,y),ge()}let ne;function he(){ne||(ne=n.listen((N,U,q)=>{if(!Re.listening)return;const J=V(N),_e=G(J);if(_e){b(assign$1(_e,{replace:!0}),J).catch(noop$1);return}_=J;const de=c.value;isBrowser&&saveScrollPosition(getScrollKey(de.fullPath,q.delta),computeScrollPosition()),ee(J,de).catch(y=>isNavigationFailure(y,12)?y:isNavigationFailure(y,2)?(b(y.to,J).then(B=>{isNavigationFailure(B,20)&&!q.delta&&q.type===NavigationType.pop&&n.go(-1,!1)}).catch(noop$1),Promise.reject()):(q.delta&&n.go(-q.delta,!1),ue(y,J,de))).then(y=>{y=y||K(J,de,!1),y&&(q.delta&&!isNavigationFailure(y,8)?n.go(-q.delta,!1):q.type===NavigationType.pop&&isNavigationFailure(y,20)&&n.go(-1,!1)),H(J,de,y)}).catch(noop$1)}))}let ve=useCallbacks(),oe=useCallbacks(),ie;function ue(N,U,q){ge(N);const J=oe.list();return J.length?J.forEach(_e=>_e(N,U,q)):console.error(N),Promise.reject(N)}function ye(){return ie&&c.value!==START_LOCATION_NORMALIZED?Promise.resolve():new Promise((N,U)=>{ve.add([N,U])})}function ge(N){return ie||(ie=!N,he(),ve.list().forEach(([U,q])=>N?q(N):U()),ve.reset()),N}function Ee(N,U,q,J){const{scrollBehavior:_e}=e;if(!isBrowser||!_e)return Promise.resolve();const de=!q&&getSavedScrollPosition(getScrollKey(N.fullPath,0))||(J||!q)&&history.state&&history.state.scroll||null;return nextTick().then(()=>_e(N,U,de)).then(y=>y&&scrollToPosition(y)).catch(y=>ue(y,N,U))}const xe=N=>n.go(N);let Ve;const Me=new Set,Re={currentRoute:c,listening:!0,addRoute:x,removeRoute:w,hasRoute:k,getRoutes:C,resolve:V,options:e,push:T,replace:$,go:xe,back:()=>xe(-1),forward:()=>xe(1),beforeEach:l.add,beforeResolve:o.add,afterEach:u.add,onError:oe.add,isReady:ye,install(N){const U=this;N.component("RouterLink",RouterLink),N.component("RouterView",RouterView),N.config.globalProperties.$router=U,Object.defineProperty(N.config.globalProperties,"$route",{enumerable:!0,get:()=>unref(c)}),isBrowser&&!Ve&&c.value===START_LOCATION_NORMALIZED&&(Ve=!0,T(n.location).catch(_e=>{}));const q={};for(const _e in START_LOCATION_NORMALIZED)Object.defineProperty(q,_e,{get:()=>c.value[_e],enumerable:!0});N.provide(routerKey,U),N.provide(routeLocationKey,shallowReactive(q)),N.provide(routerViewLocationKey,c);const J=N.unmount;Me.add(N),N.unmount=function(){Me.delete(N),Me.size<1&&(_=START_LOCATION_NORMALIZED,ne&&ne(),ne=null,c.value=START_LOCATION_NORMALIZED,Ve=!1,ie=!1),J()}}};function we(N){return N.reduce((U,q)=>U.then(()=>I(q)),Promise.resolve())}return Re}function extractChangingRecords(e,t){const r=[],a=[],n=[],l=Math.max(t.matched.length,e.matched.length);for(let o=0;o<l;o++){const u=t.matched[o];u&&(e.matched.find(_=>isSameRouteRecord(_,u))?a.push(u):r.push(u));const c=e.matched[o];c&&(t.matched.find(_=>isSameRouteRecord(_,c))||n.push(c))}return[r,a,n]}function useRoute(){return inject(routeLocationKey)}const routes=[{path:"/",name:"home",component:()=>__vitePreload(()=>import("./homeView.5ea54932.js"),["assets/homeView.5ea54932.js","assets/vendor.d471d1e7.js","assets/homeView.eb1e7277.css"])}],router=createRouter({history:createWebHistory(),routes});var isVue2=!1;/*!
* pinia v2.1.7 * pinia v2.1.7
* (c) 2023 Eduardo San Martin Morote * (c) 2023 Eduardo San Martin Morote
* @license MIT * @license MIT
......
No preview for this file type
...@@ -6,9 +6,13 @@ ...@@ -6,9 +6,13 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0"> <meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>userSide</title> <title>userSide</title>
<script type="module" crossorigin src="/assets/index.ef2e387f.js"></script> <!-- <script>
this.resizeTo(800,600);
this.focus();
</script> -->
<script type="module" crossorigin src="/assets/index.aa30d5b2.js"></script>
<link rel="modulepreload" crossorigin href="/assets/vendor.d471d1e7.js"> <link rel="modulepreload" crossorigin href="/assets/vendor.d471d1e7.js">
<link rel="stylesheet" href="/assets/index.4140441c.css"> <link rel="stylesheet" href="/assets/index.9bcc9311.css">
</head> </head>
<body> <body>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论