This commit is contained in:
wzp 2024-04-13 19:34:09 +08:00
parent 8af8f4ffc4
commit d130f9f6e4
31 changed files with 237 additions and 7280 deletions

View File

@ -1,13 +1,13 @@
package cn.wzpmc.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.*;
import top.xinsin.enums.MessageTypes;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* @author wzp
@ -23,42 +23,15 @@ public class Message {
private String content;
private String sender;
private int recall;
private String sendtime;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date sendtime;
private String base64;
private MessageTypes type;
public Message(int id){
this.id = id;
}
public Message(int id, String content, String sender, int recall, String sendtime, String type, String base64){
this.content = content;
this.sender = sender;
this.id = id;
this.recall = recall;
this.type = MessageTypes.valueOf(type);
this.sendtime = sendtime;
this.base64 = base64;
}
public Message(String content, String sender,String type){
this.content = content;
this.sender = sender;
this.type = MessageTypes.valueOf(type);
Calendar calendar= Calendar.getInstance();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss");
this.sendtime = dateFormat.format(calendar.getTime());
}
public Message(String content, String sender,String type,String sendtime){
this.content = content;
this.sender = sender;
this.type = MessageTypes.valueOf(type);
this.sendtime = sendtime;
}
public Message(int id,String content,String sender,int recall,String type,String sendtime){
this.content = content;
this.sender = sender;
this.id = id;
this.recall = recall;
this.type = MessageTypes.valueOf(type);
this.sendtime = sendtime;
this.sendtime = new Date();
}
}

1
web/.env.build Normal file
View File

@ -0,0 +1 @@
VITE_URL = 'AUTO'

1
web/.env.run Normal file
View File

@ -0,0 +1 @@
VITE_URL = 'https://wzp.moyijiangnan.cn'

View File

@ -1,5 +0,0 @@
// Generated by 'unplugin-auto-import'
export {}
declare global {
}

Binary file not shown.

18
web/components.d.ts vendored
View File

@ -1,18 +0,0 @@
// generated by unplugin-vue-components
// We suggest you to commit this file into source control
// Read more: https://github.com/vuejs/core/pull/3399
import '@vue/runtime-core'
export {}
declare module '@vue/runtime-core' {
export interface GlobalComponents {
ElButton: typeof import('element-plus/es')['ElButton']
ElDialog: typeof import('element-plus/es')['ElDialog']
Message: typeof import('./src/components/Message.vue')['default']
NotFound: typeof import('./src/components/NotFound.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
User: typeof import('./src/components/User.vue')['default']
}
}

View File

@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="UTF-8"/>
<link href="/logo.png" rel="icon"/>
<link href="/HangZhouIcon.png" rel="icon"/>
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'>
<meta content='yes' name='apple-mobile-web-app-capable'>
<meta content='black' name='apple-mobile-web-app-status-bar-style'>

3075
web/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -4,27 +4,24 @@
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vue-tsc --noEmit && vite build",
"dev": "vite --mode=run",
"build": "vue-tsc --noEmit && vite build --mode=build",
"preview": "vite preview"
},
"dependencies": {
"@element-plus/icons-vue": "^2.0.10",
"axios": "^1.1.3",
"element-plus": "^2.2.17",
"pinia": "^2.0.28",
"sass": "^1.71.1",
"axios": "^1.6.8",
"element-plus": "^2.7.0",
"pinia": "^2.1.7",
"ts-md5": "^1.3.1",
"vue": "^3.2.37",
"vue-router": "^4.1.6",
"vue3-slide-verify": "^1.1.4"
"vue": "^3.4.21",
"vue-router": "^4.3.0"
},
"devDependencies": {
"@vitejs/plugin-vue": "^3.1.0",
"typescript": "^4.6.4",
"unplugin-auto-import": "^0.11.4",
"unplugin-vue-components": "^0.22.9",
"vite": "^3.1.0",
"vue-tsc": "^0.40.4"
"@vitejs/plugin-vue": "^5.0.4",
"typescript": "^5.4.5",
"unplugin-auto-import": "^0.17.5",
"unplugin-vue-components": "^0.26.0",
"vite": "^5.2.8",
"vue-tsc": "^2.0.13"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

BIN
web/public/HangZhouIcon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

View File

@ -1,22 +1,19 @@
import axios, {AxiosRequestConfig, AxiosResponse} from "axios";
import axios, {AxiosResponse, InternalAxiosRequestConfig} from "axios";
const instance = axios.create({
baseURL: "https://wzp.moyijiangnan.cn"/*window.location.protocol + '//' + window.location.hostname + ":" + window.location.port*/
baseURL: import.meta.env.VITE_URL === 'AUTO' ? window.location.protocol + '//' + window.location.hostname + ":" + window.location.port : import.meta.env.VITE_URL
});
const responseInterceptors = (response: AxiosResponse): AxiosResponse => {
let token = response.headers.token;
if (token) {
window.localStorage.setItem("token", token);
const responseInterceptors = (response: AxiosResponse<any, any>): AxiosResponse<any, any> => {
if (response.headers){
if (response.headers['token']){
window.localStorage.setItem("token", response.headers['token']);
}
}
return response;
}
instance.interceptors.response.use(responseInterceptors,)
const requestInterceptors = (request: AxiosRequestConfig): AxiosRequestConfig => {
instance.interceptors.response.use(responseInterceptors)
const requestInterceptors = (request: InternalAxiosRequestConfig<any>): InternalAxiosRequestConfig<any> => {
let token = window.localStorage.getItem("token");
if (request.headers) {
request.headers["Access-Token"] = token;
} else {
request.headers = {"Access-Token": token}
}
request.headers.set("Access-Token",token, false);
return request;
}
instance.interceptors.request.use(requestInterceptors);

File diff suppressed because it is too large Load Diff

View File

@ -1,131 +1,93 @@
<template>
<div class="message">
<div :class="div_class">
<el-avatar class="avatar" :src='"data:image/png;base64," + props.data.base64' style="margin-top: 15px"/>
<div :class="in_div_class">
<div>
<el-tag v-if="show" :type="tag_type">{{ props.data.sender }}</el-tag>
<!-- el-tag v-if="show" :type="tag_type">发送时间 : {{ props.data.sendtime }}</el-tag -->
</div>
<div :style="message_box_style"><img v-if="self" alt="" class="angle" src="/95ec69.svg"/>
<img v-else alt="" class="angle" src="/ffffff.svg">
<div :class="message_div">
<el-popover :visible="visible" placement="top" :width="160">
<el-link type="info" @click="recall">撤回</el-link>
<template #reference>
<div style="border: 5px solid rgba(255,255,255,0%);" @click="visibleMethod">{{ props.data.content }}</div>
</template>
</el-popover>
</div>
</div>
<div :class="messageDivClassList">
<el-avatar :src="`data:image/png;base64,${props.data.base64}`" />
<div class="message-user">
<div :class="tagBoxClassList">
<el-tag :type="tagType">{{ props.data.sender }}</el-tag>
<el-tag :type="tagType">{{ props.data.sendtime }}</el-tag>
</div>
<el-popover
trigger="contextmenu"
>
<el-link type="info" @click="recall">撤回</el-link>
<template #reference>
<div :class="messageContentBoxClassList">
<div :class="arrowDivClassList"></div>
<div :class="messageBoxDivClassList">{{props.data.content}}</div>
</div>
</template>
</el-popover>
</div>
</div>
</template>
<script lang="ts" setup>
import {isSelf, MessageData} from "../entities/MessageData";
import {ref} from "vue";
import {useStore} from "../store";
const store = useStore();
const visibleMethod = () =>{
let name = null;
if (store.userinfo != null){
name = store.userinfo.username;
}
if (name === props.data.sender){
visible.value = visible.value != true;
}
}
const visible = ref(false)
import {MessageData, isSelf} from "../entities/MessageData";
import {computed} from "vue";
const props = defineProps<{data: MessageData}>()
const emit = defineEmits(["remove"])
const tag_type = ref<string>("success");
const div_class = ref<string>("message-out-div");
const in_div_class = ref<string>("message-in-div");
const message_div = ref<string>("message-div");
const message_box_style = ref<string>("display:flex; flex-direction: row;");
const show = ref<boolean>(false);
let self = isSelf(props.data);
if (self) {
tag_type.value = "danger"
div_class.value = "message-out-div self";
in_div_class.value = "message-in-div self-in";
message_div.value = "message-div message-self"
message_box_style.value = "display:flex; flex-direction: row-reverse;"
}
show.value = true;
const self = computed<boolean>(() => isSelf(props.data));
const messageDivClassList = computed<string[]>(() => ['message', self.value ? 'message-self' : '']);
const messageBoxDivClassList = computed<string[]>(() => ['message-box', self.value ? 'message-box-self' : '']);
const messageContentBoxClassList = computed<string[]>(() => ['message-content-box', self.value ? 'message-content-box-self' : '']);
const arrowDivClassList = computed<string[]>(() => ['arrow', self.value ? 'arrow-self' : '']);
const tagBoxClassList = computed<string[]>(() => ['tag-box', self.value ? 'tag-box-self' : '']);
const tagType = computed<string>(() => self.value ? 'danger' : 'success');
const recall = () => {
emit("remove", props.data.id);
visible.value = false;
}
</script>
<style scoped>
div.message-out-div {
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
margin-top: 20px;
margin-left: 5px;
align-items: flex-start;
.message {
width: 100%;
}
div.message-in-div {
display: flex;
justify-content: flex-start;
flex-direction: column;
margin-left: 7px;
align-items: flex-start;
width: 80%;
}
div.self {
flex-direction: row-reverse;
margin-left: 0;
margin-right: 7px;
}
div.self-in {
flex-direction: column;
margin-left: 0;
margin-right: 5px;
flex-direction: row;
margin-bottom: 20px;
align-items: flex-end;
}
div.message-div {
margin-top: 10px;
font-size: 2vh;
border-radius: 0 4px 4px 4px;
background-color: #FFFFFF;
word-wrap: break-word;
word-break: break-all;
overflow: hidden;
}
div.message-self {
display: flex;
.message-self {
flex-direction: row-reverse;
border-radius: 4px 0 4px 4px;
}
.message-box {
padding: 4px;
width: fit-content;
height: fit-content;
background-color: #FFFFFF;
}
.message-box-self{
background-color: #71c346;
word-wrap: break-word;
word-break: break-all;
overflow: hidden;
}
img.angle {
width: 16px;
height: 16px;
margin-top: 10px;
.arrow {
width: 10px;
height: 10px;
background-image: url("/ffffff.svg");
}
.message {
margin-bottom: 10px;
.arrow-self {
background-image: url("/95ec69.svg");
}
.avatar {
width: 52px;
height: 52px;
.message-content-box {
display: flex;
flex-direction: row;
}
.message-content-box-self {
flex-direction: row-reverse;
}
.message-user {
height: 100%;
display: flex;
flex-direction: column;
justify-content: flex-end;
}
.tag-box {
display: flex;
flex-direction: column;
}
.tag-box-self {
align-items: flex-end;
}
.tag-box > span {
margin-bottom: 5px;
width: min-content;
}
</style>

View File

@ -1,16 +0,0 @@
<template>
<img alt="" class="bg" src="../../public/404.png"/>
</template>
<script lang="ts" setup>
</script>
<style scoped>
.bg {
width: 100%;
max-width: 100%;
max-height: 100%;
height: 100%;
background-size: 100% 100%;
-moz-background-size: 100% 100%;
background-repeat: no-repeat;
}
</style>

View File

@ -3,7 +3,6 @@ export {IceServer};
const IceServer: RTCIceServer = {
"credential": "123456",
"credentialType": "password",
"urls": "turn:cloud.wzpmc.cn:3478",
"username": "wzp"
}

View File

@ -20,10 +20,10 @@ export interface MessageData {
type: MessageTypes | undefined;
}
export const isSelf = (message: MessageData): boolean => {
const store = useStore();
const {userinfo} = useStore();
let name = null;
if (store.userinfo !== null){
name = store.userinfo.username
if (userinfo !== null){
name = userinfo.username
}
return message.sender === name;
}

View File

@ -3,9 +3,7 @@ import App from './App.vue'
import 'element-plus/dist/index.css'
import router from './router'
import { createPinia, PiniaPluginContext } from 'pinia'
import ElementPlus from "element-plus";
const app = createApp(App)
const app = createApp(App);
const piniaPlugin = (context: PiniaPluginContext) => {
const { store } = context;
// $subscribe state值发生变化时会执行传入的回调

View File

@ -19,26 +19,18 @@ const router = createRouter({
meta: {
title: '注册',
},
},
{
path: '/404',
name: '404',
component: () => import(`../components/NotFound.vue`),
meta: {
title: '哎呦,页面找不到了',
}
}
]
})
// 全局路由守卫
router.beforeEach((to, from)=>{
router.beforeEach((to)=>{
// 设置网页标题
document.title = "电子职高校内交流平台-" + `${to.meta.title}`;
// 获取状态管理器
let store = useStore();
let routers = router.getRoutes();
// 判断用户是否已登陆,并且刷新页面
if (store.userinfo !== null && routers.length === 3){
if (store.userinfo !== null && routers.length === 2){
router.addRoute({path: '/home', name: 'home', component: () => import("../views/home/index.vue"), meta: {title: '首页'}});
router.addRoute("home",{path: 'chat', name:'chat', component: () => import("../views/chat/index.vue"), meta: {title: '聊天频道'}})
router.addRoute("home",{path: 'file', name:'file', component: () => import("../views/file/index.vue"), meta: {title: '文件分享'}})
@ -55,17 +47,13 @@ router.beforeEach((to, from)=>{
}
// 验证用户是否输入了正确的地址
// 如果当前路由没有该地址则跳转至404
let num = 0;
for (let i = 0; i < routers.length; i++) {
if (routers[i].name === to.name){
continue;
}else{
num++;
}
if (num === routers.length && to.name !== "404"){
return {name:'404'}
for (let route of routers) {
if (route.name === to.name){
return true;
}
}
ElMessage.warning("页面找不到,返回主页");
return {name: store.userinfo === null ? 'login' : 'home'};
})
export default router

View File

@ -1,5 +1,9 @@
<template>
<div ref="messageDiv" class="messages">
<div class="alert">
<el-alert title="右键自己的消息可以撤回" type="warning" />
<el-alert title="Alt+回车可以发送消息" type="warning" />
</div>
<Message v-for="(item,index) in messages" :key="index" :data="item" @remove="removeMessage"/>
<!--div class="new-message-counter">
TODO 新消息提醒
@ -107,16 +111,24 @@
}
}
const GetCallback = (message: Array<MessageData>) => {
message = message.sort((a,b) => Date.parse(a.sendtime!) - Date.parse(b.sendtime!))
console.log(message)
message = message.sort((a,b) => Date.parse(a.sendtime!) - Date.parse(b.sendtime!));
let scrollToBottom = false;
if (messages.value.length === 0){
scrollToBottom = true;
}
messages.value = message.concat(messages.value);
idMax.value = messages.value[0].id! - 1;
idMin.value = 0;
if(idMax.value >= 10){
idMin.value = idMax.value - 10;
}
const beforeHeight = messageDiv.value?.scrollHeight ? messageDiv.value.scrollHeight : -1;
nextTick(() => {
messageDiv.value!.scrollTop = messageDiv.value!.scrollWidth
if (scrollToBottom){
messageDiv.value?.scrollTo({top: messageDiv.value.scrollHeight});
}else {
messageDiv.value?.scrollTo({top: messageDiv.value.scrollHeight - beforeHeight});
}
})
}
const CountCallback = (count: number) => {
@ -142,6 +154,7 @@
const SendCallback = (message: MessageData) => {
messages.value.push(message);
nextTick(() => {
// noinspection JSSuspiciousNameCombination
messageDiv.value!.scrollTop = messageDiv.value!.scrollWidth
})
}
@ -230,6 +243,8 @@
scrollbar-width: thin;
overflow-y: scroll;
overflow-x: hidden;
background: rgba(250,250,250);
padding: 10px;
}
.input-area {
@ -252,4 +267,10 @@
height: 64px;
z-index: 9999;
}
.alert {
position: sticky;
top: 0;
left: 0;
width: 100%;
}
</style>

View File

@ -50,7 +50,7 @@
:before-upload="fileUploadBefore"
:on-progress="fileUploadProgress"
>
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<el-icon class="el-icon--upload"><UploadFilled /></el-icon>
<div class="el-upload__text">
将文件拖到此处或者 <em>点击来上传</em>
</div>
@ -72,8 +72,8 @@
import {onMounted, reactive, ref} from "vue";
import {fileDelete, getFiles, getShowFile} from "../../api/file";
import {useStore} from "../../store";
import {ElMessage, UploadProgressEvent} from "element-plus";
import {MessageHandler} from "element-plus/es/components/message/src/message";
import {ElMessage, UploadProgressEvent, MessageHandler} from "element-plus";
import {UploadFilled} from "@element-plus/icons-vue";
const files = ref([]);
const pageCount = ref<number>(1)

View File

@ -2,29 +2,10 @@
<el-container>
<el-header class="header">
<div class="logo">
<el-icon><img alt="" class="logo" src="/logo.png"/></el-icon>
<el-icon><img alt="" class="logo" src="/HangZhouIcon.png"/></el-icon>
</div>
<div class="weather">
电子职高校内交流平台
<!-- <span v-if="weather.city === undefined" style="color: #f56c6c">未查询到您当地的天气信息</span>
<span v-if="weather.city !== undefined">
<span style="color: #FFCC33">
{{weather.city}}
</span>
今日天气:
<span style="color: #FFFFCC">
{{weather.weather}}
</span>
温度:
<span style="color: #FFFF66">
{{weather.temperature}}
</span>
风向:
<span style="color: #9933CC">
{{weather.winddirection}}
{{weather.windpower}}
</span>
</span>-->
</div>
<div class="user">
<el-avatar :size="50" :src="headimgBase64" style="margin-right: 10px"/>
@ -92,7 +73,6 @@ import {onBeforeMount, onMounted, ref} from 'vue'
import {ElMessage} from "element-plus";
import {useStore} from "../../store";
import {useRouter} from "vue-router";
import {Weather} from "../../entities/Weather";
const maxWidth = ref<number>(200);
const active = ref<string>("/home/chat");
@ -227,5 +207,6 @@ div.user {
height: 90vh;
overflow-x: hidden;
overflow-y: hidden;
/*background: rgba(250,250,250);*/
}
</style>

View File

@ -1,184 +0,0 @@
<template>
<div class="background">
<div id="window" class="login-window">
<h1 ref="title" class="title">电子职高校内交流平台·登录</h1>
<el-input v-model="username" ref="usernameRef" placeholder="请在此输入昵称" :minlength="5" :maxlength="16" step="0" type="text" @input="verify('u')" class="input">
<template #prepend>昵称</template>
</el-input>
<el-input v-model="password" ref="passwordRef" placeholder="请在此输入密码" :minlength="5" :maxlength="64" show-password type="text" step="0" @input="verify('p')" class="input">
<template #prepend>密码</template>
</el-input>
<el-button plain size="large" style="width: 10vh" type="primary" @click="Login">登录</el-button>
</div>
<el-dialog v-model="showSlideWindow" :width="440" style="background-color: rgba(255,255,255,75%);" title="滑动验证">
<slide-verify ref="slider" :accuracy="5" :h="150" :w="400" slider-text="向右滑动验证" :imgs="imgVerify" @success="onSlideSuccess"/>
</el-dialog>
</div>
</template>
<script lang="ts" setup>
import {onMounted, ref} from "vue";
import SlideVerify, {SlideVerifyInstance} from "vue3-slide-verify";
import "vue3-slide-verify/dist/style.css";
import {login, autoLogin} from '../../api/user'
import {ElInput, ElMessage} from "element-plus";
import {useStore} from "../../store";
import {UserInfo} from "../../entities/UserInfo";
import {useRouter} from "vue-router";
const imgVerify = ref<Array<string>>(['02617ba25be35ff28689995f5821d6ae.jpg','ad7d7c80f9505796ab3e2465e00c858e.jpg','f0ddf46430d752898b2c46a340de3fd5.jpg','d6d19b44fd9b56f8a5223c605634d1da.jpg','22af7b742d345eb796ce674e6d361380.jpg','c47a5f40ee82590286671257b919731b.jpg','3816a03ec25f53d3b7a3e33154a903b2.jpg','c7b21ed210925d148e964c38849c3a4d.jpg','4270f5260dca57d79d3582dc2d5c836b.jpg','390d7533f19c5e30b25f807fe23beac9.jpg','dec0262729e957cf8ef57ba61d29a89f.jpg','f846386254ae59b5af12d86a84db0fab.jpg','360877981c0a5d9ba1d0acf472a68915.jpg','11e8042b6d8f575b96591507ab5e4a88.jpg','f9a994c3c31b5ecebc31887c6344eee7.jpg','9312caaaa8c05cb1a2fe53cfcbbad548.jpg','854a0868a7425edabb112726d511844d.jpg','233ae109c1aa5f2aaeffdf42411c01ad.jpg','c88a182c2d0850f7b96fdb36c2710905.jpg','69987215f5e25c69987c502255cc0913.jpg','dac3f67eb7f95f28b54991e0200304f4.jpg','014ab90f547e50658baa369bf025f0d2.jpg','b97ff9e2b1e1506aab69bd3f0ef7cdcc.jpg','078269643e5a54379a7d451862a0c592.jpg','9911ea72c55554eb9e1b212a40e0c669.jpg','782524b7fc595cc4bb4c39368bf7e457.jpg','07ed176ace0b52b5b0945a8377f715c3.jpg','1d211f4e950a5d3f8b2a1505abb027eb.jpg','dcdb182c378053a3be596613c68c5169.jpg','d2f841cfb89256c4af25263b84ad7f7b.jpg','ed1104e6782f5cc290b7d77db6a07c78.jpg','facf57a84191525b98d1849e0ef4da1c.jpg','8fb9d56cbc98558d9ee156cdd936d013.jpg','914cfe208dcb5244a2e0176082f27f62.jpg','a9a2d74a4c7859509f8c5b508e947466.jpg','5c9586dbf7235b7d935e3f42570a1353.jpg','c2478f2557d8564a95ee26666bc8f3c5.jpg','5388021c454c5390b811e9be5b9adc54.jpg','ac32c6127ab35dfc93e0d610caac9d66.jpg','4e624b9210765c41a1970925de52927b.jpg','9ca5c7fb2da457d28a46c32e5057005b.jpg','2cc36492d02356aebad5f7ecf077a70a.jpg','b6c25268e3525f878dfd6f7b5533b8aa.jpg','66efbada1df65bb394e9c152133b1d32.jpg','792e0ffcec85508bbb70a5caecec7f75.jpg','516fa62dbf9c583493f963ab60b2c8b5.jpg','fb11b0594fea5b7a8cf4dc17e2a5b19f.jpg','dbdfffb42755508e956d595c98047f6d.jpg','99fa72f1224454cc91d59c0075281259.jpg','70ffb1a7705358d693fc39729489f670.jpg','b3c4b61e9d9257839058696e3d7ae360.jpg','f7cc4d1aea445d9da146c322ba655ca6.jpg','0367b9092bf35dd6993b7f70a750cf3e.jpg','819d5a4e4a80553eaf95147d8fda67f8.jpg','d26dc6ba7eb45008809ebfa4cbc52443.jpg','abaa28bbd29d53d295696f0fa3a4303e.jpg','892b3074fe8251a69c1b3508820b0421.jpg','a44a83bef8ea5d439cc78160f077ee87.jpg','51dd13be04e058ae8a8c05116f938763.jpg','03c9b1640f1951b8b3a3f52e0888551e.jpg','a5f418f0a53d51828fa0eaffaa5d20d1.jpg','bb1f33c1bbc65b48a27a020fc1f1b5b1.jpg','e9875fe427aa5680a44a44fb4f9a2bc8.jpg','277eb95c7bb6550d83b1309c5c9359f1.jpg','0cbf1fd6a0a2580cbbcb18244fffc7d7.jpg','bf26bf4390eb5da5bca53f92fbf24356.jpg','d27219b949ad50e9b69d2d2e3b12bed8.jpg','248d57f0ebc35898b66390eb7b548b74.jpg','9daccf59b56d536aa8ad0411b37b7bd5.jpg','080b3e9f4f8954aca7bb6d6925536911.jpg'].map((v) => "/static/verify/" + v));
const username = ref<string>();
const password = ref<string>();
const showSlideWindow = ref<boolean>();
const slider = ref<SlideVerifyInstance>();
const title = ref<HTMLDivElement>();
// const tipPassword= ref<string>("_-~!@#$%^&*+=:><,./");
const usernameRef = ref<InstanceType<typeof ElInput>>();
const passwordRef = ref<InstanceType<typeof ElInput>>();
const store = useStore();
const router = useRouter();
//
const verify = (type:string) => {
if (type === "u"){
if (username.value){
const verifyUsername = /.{3,16}/;
if (verifyUsername.test(username.value)) {
usernameRef.value!.input!.style.color = "black"
return true;
}
}
usernameRef.value!.input!.style.color = "red"
}
if (type === "p"){
if (password.value){
const verifyPassword = /^[a-zA-Z0-9_-~!@#$%^&*+=:><,./]{5,128}$/;
if (verifyPassword.test(password.value)) {
passwordRef.value!.input!.style.color = "black"
return true;
}
}
passwordRef.value!.input!.style.color = "red"
}
return false;
}
//
const Login = () => {
if (username.value !== '' && password.value !== '') {
if (verify('u') && verify('p')){
//
showSlideWindow.value = true;
slider.value?.refresh();
}else{
ElMessage.error("请输入正确的格式")
}
} else {
ElMessage.error("请输入账号密码!")
}
}
//
const push = async (data:any) => {
// store
store.$patch({
userinfo: {
username:data.username,
headimg:data.base64,
auth:data.auth,
exclusiveColor:data.exclusiveColor,
id:data.id
} as UserInfo
})
await router.push("/home/chat");
}
onMounted(async () => {
// 退token
let token = window.localStorage.getItem("token");
if (token){
autoLogin().then(res =>{
let data = res.data.data;
if (data.status){
ElMessage.success("已为您自动登录成功,即将进行跳转");
push(data);
}else{
ElMessage.error("自动登录失败,请重新输入账号和密码进行登陆")
}
}).catch(res =>{
ElMessage.warning(res.response.data.data);
window.localStorage.clear();
store.$reset()
})
}
//
/* await getHitokoto().then(async (data) => {
title.value!.innerText = data.data.hitokoto;
});
//
document.addEventListener("keydown", ev => {
if ((ev.key) === 'Enter') {
Login()
}
})*/
})
//
const onSlideSuccess = () =>{
login(username.value as string, password.value as string).then(res => {
showSlideWindow.value = false;
let canLogin: boolean = res.data.data.canLogin;
if (canLogin) {
push(res.data.data);
ElMessage.success("登录成功!");
} else {
ElMessage.error("用户名或密码错误!");
}
})
}
</script>
<style scoped lang="scss">
.login-window {
border: 2px var(--el-border-color);
border-radius: var(--el-border-radius-round);
box-shadow: var(--el-box-shadow-dark);
background-color: rgba(255, 255, 255, 50%);
backdrop-filter: blur(6px);
display: flex;
margin: 0 auto;
width: 40vmax;
height: 40vh;
flex-direction: column;
align-items: center;
justify-content: space-evenly;
}
.input {
width: 80%;
}
/*背景图层*/
.background {
width: 100%;
height: 100vh;
background-repeat: no-repeat;
background-image: url("/img.png");
background-size: 100% 100%;
display: flex;
flex-direction: column;
justify-content: center;
}
.title {
font-size: max(26px, 2%);
}
@media screen and (max-width: 1000px) {
.background {
background-size: cover;
background-position: center;
}
}
@media screen and (max-width: 400px){
.title {
font-size: 20px;
}
}
</style>

View File

@ -4,20 +4,17 @@
<div class="container">
<div class="main">
<div class="schoolIcon">
<img src="../../../public/HangZhouIcon.png" alt="杭州电子信息技术职业学校">
<img src="/HangZhouIcon.png" alt="杭州电子信息技术职业学校">
<span>杭州电子信息技术职业学校</span>
</div>
<div id="sign-in-p" class="page active max">
<form>
<form @submit="Login">
<h2>用户名</h2>
<input class="entry" type="text" placeholder="用户名">
<input class="entry" type="text" placeholder="用户名" v-model="username">
<h2>密码</h2>
<input class="entry" type="password" placeholder="密码">
<input class="entry" type="password" placeholder="密码" v-model="password">
<input class="submit" type="submit" value="登录">
</form>
<div class="forgot">
<a href="#"><h3>忘记密码</h3></a>
</div>
</div>
</div>
</div>
@ -26,10 +23,92 @@
</template>
<script lang="ts" setup>
import {onMounted, ref} from 'vue';
import {login, autoLogin} from '../../api/user';
import {ElMessage} from 'element-plus';
import {useStore} from "../../store";
import {useRouter} from 'vue-router';
const username = ref<string>();
const password = ref<string>();
const store = useStore();
const router = useRouter();
//
const verify = () => {
let valid = true;
if (!username.value || !/^[a-zA-Z0-9_-]{3,16}$/.test(username.value)) {
ElMessage.error("用户名格式不正确应为3-16位字母或数字及下划线");
valid = false;
}
if (!password.value || !/^[a-zA-Z0-9_-~!@#$%^&*+=:><,./]{5,128}$/.test(password.value)) {
ElMessage.error("密码格式不正确应为5-128位允许的特殊字符");
valid = false;
}
return valid;
};
//
const Login = () => {
if (username.value && password.value) {
if (verify()) {
login(username.value, password.value).then(res => {
let canLogin = res.data.data.canLogin;
if (canLogin) {
//
store.$patch({
userinfo: {
username: res.data.data.username,
headimg: res.data.data.base64,
auth: res.data.data.auth,
exclusiveColor: res.data.data.exclusiveColor,
id: res.data.data.id
}
});
router.push("/home/chat");
ElMessage.success("登录成功!");
} else {
ElMessage.error("用户名或密码错误!");
}
}).catch(() => {
ElMessage.error("登录请求失败!");
});
}
} else {
ElMessage.error("请输入用户名和密码!");
}
};
onMounted(() => {
let token = window.localStorage.getItem("token");
if (token) {
autoLogin().then(res => {
let data = res.data.data;
if (data.status) {
ElMessage.success("已为您自动登录成功, 即将进行跳转");
store.$patch({
userinfo: data.userinfo
});
router.push("/home/chat");
} else {
ElMessage.error("自动登录失败,请重新输入账号和密码进行登录");
}
}).catch(() => {
window.localStorage.clear();
store.$reset();
ElMessage.error("自动登录错误,请重新登录");
});
}
});
document.addEventListener("keydown", event => {
if (event.key === 'Enter') {
Login();
}
});
</script>
<style scoped lang="scss">
<style scoped>
* {
box-sizing: border-box;
}
@ -142,7 +221,7 @@ li:after {
position: absolute;
bottom: 0;
left: 0;
width: 0%;
width: 0;
border-bottom: 2px solid #FFFFFF;
transition: 0.4s;
}
@ -179,10 +258,6 @@ li:after {
transform: translateX(100%);
}
#sign-up-p {
transform: translateX(-100%);
}
.entry {
width: 100%;
height: 2.3em;
@ -192,7 +267,6 @@ li:after {
.entry {
background-color: rgba(255, 255, 255, 0.2);
border: none;
color: white;
border: 2px solid rgba(255, 255, 255, 0);
transition: 0.6s;

View File

@ -1,4 +1,7 @@
<template>
<div class="alert">
<el-alert title="此页面为语音通话" type="warning" />
</div>
<div class="main">
<div class="audios-div">
<User ref="userComponents" v-for="(username, index) in users" :key="index" :username="username" :media-stream="localMediaStream" :web-socket="webSocketConnection" />
@ -394,12 +397,15 @@ onUnmounted(unmounted)
display: flex;
border: #63ACE5 solid 2px;
padding: 10px;
min-width: 30%;
min-width: 50%;
margin: 0 auto;
}
.control-panel-settings {
margin-right: 10px;
}
.control-panel-settings:nth-child(2){
width: 60%;
}
.control-panel-join {
display: flex;
justify-content: flex-end;

View File

@ -14,7 +14,8 @@
"ESNext",
"DOM"
],
"skipLibCheck": true
"skipLibCheck": true,
"types": ["vite/client"]
},
"include": [
"src/**/*.ts",

View File

@ -1,17 +0,0 @@
// vite.config.ts
import {defineConfig} from "vite";
import vue from "@vitejs/plugin-vue";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import {ElementPlusResolver} from "unplugin-vue-components/resolvers";
var vite_config_default = defineConfig({
plugins: [vue(), AutoImport({resolvers: [ElementPlusResolver()]}), Components({resolvers: [ElementPlusResolver()]})],
server: {
port: 8081
}
});
export {
vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwzMzU3MlxcXFxJZGVhUHJvamVjdHNcXFxcd2l0c1RhbGtcXFxcd2ViXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwzMzU3MlxcXFxJZGVhUHJvamVjdHNcXFxcd2l0c1RhbGtcXFxcd2ViXFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy8zMzU3Mi9JZGVhUHJvamVjdHMvd2l0c1RhbGsvd2ViL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHtkZWZpbmVDb25maWd9IGZyb20gJ3ZpdGUnXHJcbmltcG9ydCB2dWUgZnJvbSAnQHZpdGVqcy9wbHVnaW4tdnVlJ1xyXG5pbXBvcnQgQXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJ1xyXG5pbXBvcnQgQ29tcG9uZW50cyBmcm9tICd1bnBsdWdpbi12dWUtY29tcG9uZW50cy92aXRlJ1xyXG5pbXBvcnQge0VsZW1lbnRQbHVzUmVzb2x2ZXJ9IGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3Jlc29sdmVycydcclxuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cclxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcclxuICBwbHVnaW5zOiBbdnVlKCksIEF1dG9JbXBvcnQoe3Jlc29sdmVyczogW0VsZW1lbnRQbHVzUmVzb2x2ZXIoKV0sfSksIENvbXBvbmVudHMoe3Jlc29sdmVyczogW0VsZW1lbnRQbHVzUmVzb2x2ZXIoKV0sfSksXSxcclxuICBzZXJ2ZXI6IHtcclxuICAgIHBvcnQ6IDgwODFcclxuICB9XHJcbn0pXHJcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBc1QsU0FBUSxvQkFBbUI7QUFDalYsT0FBTyxTQUFTO0FBQ2hCLE9BQU8sZ0JBQWdCO0FBQ3ZCLE9BQU8sZ0JBQWdCO0FBQ3ZCLFNBQVEsMkJBQTBCO0FBRWxDLElBQU8sc0JBQVEsYUFBYTtBQUFBLEVBQzFCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsV0FBVyxFQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFFO0FBQUEsRUFDdEgsUUFBUTtBQUFBLElBQ04sTUFBTTtBQUFBLEVBQ1I7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogW10KfQo=

View File

@ -1,926 +0,0 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@antfu/utils@^0.6.0":
version "0.6.3"
resolved "https://registry.npmmirror.com/@antfu/utils/-/utils-0.6.3.tgz"
integrity sha512-sEYpyyKUPOew9QsXZ8feRVMzW6DWLviwOl+/ap06UQW02A8Srbc95CPHVm4eUbiBzBgD46eyIT+przv//KSSlQ==
"@babel/parser@^7.15.8", "@babel/parser@^7.16.4":
version "7.19.3"
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.19.3.tgz"
integrity sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==
"@ctrl/tinycolor@^3.4.1":
version "3.4.1"
resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz"
integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==
"@element-plus/icons-vue@^2.0.10", "@element-plus/icons-vue@^2.0.6":
version "2.0.10"
resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.0.10.tgz"
integrity sha512-ygEZ1mwPjcPo/OulhzLE7mtDrQBWI8vZzEWSNB2W/RNCRjoQGwbaK4N8lV4rid7Ts4qvySU3njMN7YCiSlSaTQ==
"@floating-ui/core@^1.0.1":
version "1.0.1"
resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-1.0.1.tgz"
integrity sha512-bO37brCPfteXQfFY0DyNDGB3+IMe4j150KFQcgJ5aBP295p9nBGeHEs/p0czrRbtlHq4Px/yoPXO/+dOCcF4uA==
"@floating-ui/dom@^1.0.1":
version "1.0.2"
resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.0.2.tgz"
integrity sha512-5X9WSvZ8/fjy3gDu8yx9HAA4KG1lazUN2P4/VnaXLxTO9Dz53HI1oYoh1OlhqFNlHgGDiwFX5WhFCc2ljbW3yA==
dependencies:
"@floating-ui/core" "^1.0.1"
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
dependencies:
"@nodelib/fs.stat" "2.0.5"
run-parallel "^1.1.9"
"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
version "2.0.5"
resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
"@nodelib/fs.walk@^1.2.3":
version "1.2.8"
resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
dependencies:
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7":
version "2.11.7"
resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz"
integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==
"@rollup/pluginutils@^5.0.2":
version "5.0.2"
resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz"
integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==
dependencies:
"@types/estree" "^1.0.0"
estree-walker "^2.0.2"
picomatch "^2.3.1"
"@types/estree@^1.0.0":
version "1.0.0"
resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.0.tgz"
integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==
"@types/lodash-es@*", "@types/lodash-es@^4.17.6":
version "4.17.6"
resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz"
integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==
dependencies:
"@types/lodash" "*"
"@types/lodash@*", "@types/lodash@^4.14.182":
version "4.14.186"
resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.186.tgz"
integrity sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==
"@types/web-bluetooth@^0.0.15":
version "0.0.15"
resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.15.tgz"
integrity sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA==
"@vitejs/plugin-vue@^3.1.0":
version "3.1.2"
resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.1.2.tgz"
integrity sha512-3zxKNlvA3oNaKDYX0NBclgxTQ1xaFdL7PzwF6zj9tGFziKwmBa3Q/6XcJQxudlT81WxDjEhHmevvIC4Orc1LhQ==
"@volar/code-gen@0.40.13":
version "0.40.13"
resolved "https://registry.npmmirror.com/@volar/code-gen/-/code-gen-0.40.13.tgz"
integrity sha512-4gShBWuMce868OVvgyA1cU5WxHbjfEme18Tw6uVMfweZCF5fB2KECG0iPrA9D54vHk3FeHarODNwgIaaFfUBlA==
dependencies:
"@volar/source-map" "0.40.13"
"@volar/source-map@0.40.13":
version "0.40.13"
resolved "https://registry.npmmirror.com/@volar/source-map/-/source-map-0.40.13.tgz"
integrity sha512-dbdkAB2Nxb0wLjAY5O64o3ywVWlAGONnBIoKAkXSf6qkGZM+nJxcizsoiI66K+RHQG0XqlyvjDizfnTxr+6PWg==
dependencies:
"@vue/reactivity" "3.2.38"
"@volar/typescript-faster@0.40.13":
version "0.40.13"
resolved "https://registry.npmmirror.com/@volar/typescript-faster/-/typescript-faster-0.40.13.tgz"
integrity sha512-uy+TlcFkKoNlKEnxA4x5acxdxLyVDIXGSc8cYDNXpPKjBKXrQaetzCzlO3kVBqu1VLMxKNGJMTKn35mo+ILQmw==
dependencies:
semver "^7.3.7"
"@volar/vue-language-core@0.40.13":
version "0.40.13"
resolved "https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-0.40.13.tgz"
integrity sha512-QkCb8msi2KUitTdM6Y4kAb7/ZlEvuLcbBFOC2PLBlFuoZwyxvSP7c/dBGmKGtJlEvMX0LdCyrg5V2aBYxD38/Q==
dependencies:
"@volar/code-gen" "0.40.13"
"@volar/source-map" "0.40.13"
"@vue/compiler-core" "^3.2.38"
"@vue/compiler-dom" "^3.2.38"
"@vue/compiler-sfc" "^3.2.38"
"@vue/reactivity" "^3.2.38"
"@vue/shared" "^3.2.38"
"@volar/vue-typescript@0.40.13":
version "0.40.13"
resolved "https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-0.40.13.tgz"
integrity sha512-o7bNztwjs8JmbQjVkrnbZUOfm7q4B8ZYssETISN1tRaBdun6cfNqgpkvDYd+VUBh1O4CdksvN+5BUNnwAz4oCQ==
dependencies:
"@volar/code-gen" "0.40.13"
"@volar/typescript-faster" "0.40.13"
"@volar/vue-language-core" "0.40.13"
"@vue/compiler-core@^3.2.38", "@vue/compiler-core@3.2.40":
version "3.2.40"
resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.40.tgz"
integrity sha512-2Dc3Stk0J/VyQ4OUr2yEC53kU28614lZS+bnrCbFSAIftBJ40g/2yQzf4mPBiFuqguMB7hyHaujdgZAQ67kZYA==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/shared" "3.2.40"
estree-walker "^2.0.2"
source-map "^0.6.1"
"@vue/compiler-dom@^3.2.38", "@vue/compiler-dom@3.2.40":
version "3.2.40"
resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.40.tgz"
integrity sha512-OZCNyYVC2LQJy4H7h0o28rtk+4v+HMQygRTpmibGoG9wZyomQiS5otU7qo3Wlq5UfHDw2RFwxb9BJgKjVpjrQw==
dependencies:
"@vue/compiler-core" "3.2.40"
"@vue/shared" "3.2.40"
"@vue/compiler-sfc@^3.2.38", "@vue/compiler-sfc@3.2.40":
version "3.2.40"
resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.40.tgz"
integrity sha512-tzqwniIN1fu1PDHC3CpqY/dPCfN/RN1thpBC+g69kJcrl7mbGiHKNwbA6kJ3XKKy8R6JLKqcpVugqN4HkeBFFg==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.40"
"@vue/compiler-dom" "3.2.40"
"@vue/compiler-ssr" "3.2.40"
"@vue/reactivity-transform" "3.2.40"
"@vue/shared" "3.2.40"
estree-walker "^2.0.2"
magic-string "^0.25.7"
postcss "^8.1.10"
source-map "^0.6.1"
"@vue/compiler-ssr@3.2.40":
version "3.2.40"
resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.40.tgz"
integrity sha512-80cQcgasKjrPPuKcxwuCx7feq+wC6oFl5YaKSee9pV3DNq+6fmCVwEEC3vvkf/E2aI76rIJSOYHsWSEIxK74oQ==
dependencies:
"@vue/compiler-dom" "3.2.40"
"@vue/shared" "3.2.40"
"@vue/devtools-api@^6.4.5":
version "6.4.5"
resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz"
integrity sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==
"@vue/reactivity-transform@3.2.40":
version "3.2.40"
resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.40.tgz"
integrity sha512-HQUCVwEaacq6fGEsg2NUuGKIhUveMCjOk8jGHqLXPI2w6zFoPrlQhwWEaINTv5kkZDXKEnCijAp+4gNEHG03yw==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.40"
"@vue/shared" "3.2.40"
estree-walker "^2.0.2"
magic-string "^0.25.7"
"@vue/reactivity@^3.2.38", "@vue/reactivity@3.2.40":
version "3.2.40"
resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.40.tgz"
integrity sha512-N9qgGLlZmtUBMHF9xDT4EkD9RdXde1Xbveb+niWMXuHVWQP5BzgRmE3SFyUBBcyayG4y1lhoz+lphGRRxxK4RA==
dependencies:
"@vue/shared" "3.2.40"
"@vue/reactivity@3.2.38":
version "3.2.38"
resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.38.tgz"
integrity sha512-6L4myYcH9HG2M25co7/BSo0skKFHpAN8PhkNPM4xRVkyGl1K5M3Jx4rp5bsYhvYze2K4+l+pioN4e6ZwFLUVtw==
dependencies:
"@vue/shared" "3.2.38"
"@vue/runtime-core@3.2.40":
version "3.2.40"
resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.40.tgz"
integrity sha512-U1+rWf0H8xK8aBUZhnrN97yoZfHbjgw/bGUzfgKPJl69/mXDuSg8CbdBYBn6VVQdR947vWneQBFzdhasyzMUKg==
dependencies:
"@vue/reactivity" "3.2.40"
"@vue/shared" "3.2.40"
"@vue/runtime-dom@3.2.40":
version "3.2.40"
resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.40.tgz"
integrity sha512-AO2HMQ+0s2+MCec8hXAhxMgWhFhOPJ/CyRXnmTJ6XIOnJFLrH5Iq3TNwvVcODGR295jy77I6dWPj+wvFoSYaww==
dependencies:
"@vue/runtime-core" "3.2.40"
"@vue/shared" "3.2.40"
csstype "^2.6.8"
"@vue/server-renderer@3.2.40":
version "3.2.40"
resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.40.tgz"
integrity sha512-gtUcpRwrXOJPJ4qyBpU3EyxQa4EkV8I4f8VrDePcGCPe4O/hd0BPS7v9OgjIQob6Ap8VDz9G+mGTKazE45/95w==
dependencies:
"@vue/compiler-ssr" "3.2.40"
"@vue/shared" "3.2.40"
"@vue/shared@^3.2.38", "@vue/shared@3.2.40":
version "3.2.40"
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.40.tgz"
integrity sha512-0PLQ6RUtZM0vO3teRfzGi4ltLUO5aO+kLgwh4Um3THSR03rpQWLTuRCkuO5A41ITzwdWeKdPHtSARuPkoo5pCQ==
"@vue/shared@3.2.38":
version "3.2.38"
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.38.tgz"
integrity sha512-dTyhTIRmGXBjxJE+skC8tTWCGLCVc4wQgRRLt8+O9p5ewBAjoBwtCAkLPrtToSr1xltoe3st21Pv953aOZ7alg==
"@vueuse/core@*", "@vueuse/core@^9.1.0":
version "9.3.0"
resolved "https://registry.npmmirror.com/@vueuse/core/-/core-9.3.0.tgz"
integrity sha512-64Rna8IQDWpdrJxgitDg7yv1yTp41ZmvV8zlLEylK4QQLWAhz1OFGZDPZ8bU4lwcGgbEJ2sGi2jrdNh4LttUSQ==
dependencies:
"@types/web-bluetooth" "^0.0.15"
"@vueuse/metadata" "9.3.0"
"@vueuse/shared" "9.3.0"
vue-demi "*"
"@vueuse/metadata@9.3.0":
version "9.3.0"
resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.3.0.tgz"
integrity sha512-GnnfjbzIPJIh9ngL9s9oGU1+Hx/h5/KFqTfJykzh/1xjaHkedV9g0MASpdmPZIP+ynNhKAcEfA6g5i8KXwtoMA==
"@vueuse/shared@9.3.0":
version "9.3.0"
resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.3.0.tgz"
integrity sha512-caGUWLY0DpPC6l31KxeUy6vPVNA0yKxx81jFYLoMpyP6cF84FG5Dkf69DfSUqL57wX8JcUkJDMnQaQIZPWFEQQ==
dependencies:
vue-demi "*"
acorn@^8.8.0:
version "8.8.1"
resolved "https://registry.npmmirror.com/acorn/-/acorn-8.8.1.tgz"
integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
anymatch@~3.1.2:
version "3.1.2"
resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz"
integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
dependencies:
normalize-path "^3.0.0"
picomatch "^2.0.4"
async-validator@^4.2.5:
version "4.2.5"
resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz"
integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz"
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
axios@^1.1.3:
version "1.1.3"
resolved "https://registry.npmmirror.com/axios/-/axios-1.1.3.tgz"
integrity sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==
dependencies:
follow-redirects "^1.15.0"
form-data "^4.0.0"
proxy-from-env "^1.1.0"
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
brace-expansion@^2.0.1:
version "2.0.1"
resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz"
integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
dependencies:
balanced-match "^1.0.0"
braces@^3.0.2, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
dependencies:
fill-range "^7.0.1"
chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0":
version "3.5.3"
resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
glob-parent "~5.1.2"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.6.0"
optionalDependencies:
fsevents "~2.3.2"
combined-stream@^1.0.8:
version "1.0.8"
resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies:
delayed-stream "~1.0.0"
csstype@^2.6.8:
version "2.6.21"
resolved "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz"
integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==
dayjs@^1.11.3:
version "1.11.5"
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.5.tgz"
integrity sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==
debug@^4.3.4:
version "4.3.4"
resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
element-plus@^2.2.17:
version "2.2.17"
resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.2.17.tgz"
integrity sha512-MGwMIE/q+FFD3kgS23x8HIe5043tmD1cTRwjhIX9o6fim1avFnUkrsfYRvybbz4CkyqSb185EheZS5AUPpXh2g==
dependencies:
"@ctrl/tinycolor" "^3.4.1"
"@element-plus/icons-vue" "^2.0.6"
"@floating-ui/dom" "^1.0.1"
"@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.7"
"@types/lodash" "^4.14.182"
"@types/lodash-es" "^4.17.6"
"@vueuse/core" "^9.1.0"
async-validator "^4.2.5"
dayjs "^1.11.3"
escape-html "^1.0.3"
lodash "^4.17.21"
lodash-es "^4.17.21"
lodash-unified "^1.0.2"
memoize-one "^6.0.0"
normalize-wheel-es "^1.2.0"
esbuild-windows-64@0.15.10:
version "0.15.10"
resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz"
integrity sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==
esbuild@^0.15.6:
version "0.15.10"
resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.15.10.tgz"
integrity sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==
optionalDependencies:
"@esbuild/android-arm" "0.15.10"
"@esbuild/linux-loong64" "0.15.10"
esbuild-android-64 "0.15.10"
esbuild-android-arm64 "0.15.10"
esbuild-darwin-64 "0.15.10"
esbuild-darwin-arm64 "0.15.10"
esbuild-freebsd-64 "0.15.10"
esbuild-freebsd-arm64 "0.15.10"
esbuild-linux-32 "0.15.10"
esbuild-linux-64 "0.15.10"
esbuild-linux-arm "0.15.10"
esbuild-linux-arm64 "0.15.10"
esbuild-linux-mips64le "0.15.10"
esbuild-linux-ppc64le "0.15.10"
esbuild-linux-riscv64 "0.15.10"
esbuild-linux-s390x "0.15.10"
esbuild-netbsd-64 "0.15.10"
esbuild-openbsd-64 "0.15.10"
esbuild-sunos-64 "0.15.10"
esbuild-windows-32 "0.15.10"
esbuild-windows-64 "0.15.10"
esbuild-windows-arm64 "0.15.10"
escape-html@^1.0.3:
version "1.0.3"
resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz"
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
escape-string-regexp@^5.0.0:
version "5.0.0"
resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz"
integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==
estree-walker@^2.0.2:
version "2.0.2"
resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz"
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
fast-glob@^3.2.12:
version "3.2.12"
resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz"
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
glob-parent "^5.1.2"
merge2 "^1.3.0"
micromatch "^4.0.4"
fastq@^1.6.0:
version "1.13.0"
resolved "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz"
integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==
dependencies:
reusify "^1.0.4"
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz"
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
dependencies:
to-regex-range "^5.0.1"
follow-redirects@^1.15.0:
version "1.15.2"
resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz"
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
form-data@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz"
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
mime-types "^2.1.12"
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
has@^1.0.3:
version "1.0.3"
resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz"
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
dependencies:
function-bind "^1.1.1"
immutable@^4.0.0:
version "4.3.5"
resolved "https://registry.npmmirror.com/immutable/-/immutable-4.3.5.tgz"
integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==
is-binary-path@~2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz"
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
dependencies:
binary-extensions "^2.0.0"
is-core-module@^2.9.0:
version "2.10.0"
resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.10.0.tgz"
integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==
dependencies:
has "^1.0.3"
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz"
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
is-glob@^4.0.1, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
dependencies:
is-extglob "^2.1.1"
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
jsonc-parser@^3.2.0:
version "3.2.0"
resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz"
integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
local-pkg@^0.4.2:
version "0.4.2"
resolved "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.2.tgz"
integrity sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==
lodash-es@*, lodash-es@^4.17.21:
version "4.17.21"
resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
lodash-unified@^1.0.2:
version "1.0.2"
resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.2.tgz"
integrity sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g==
lodash@*, lodash@^4.17.21:
version "4.17.21"
resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz"
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
dependencies:
yallist "^4.0.0"
magic-string@^0.25.7:
version "0.25.9"
resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz"
integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
dependencies:
sourcemap-codec "^1.4.8"
magic-string@^0.26.7:
version "0.26.7"
resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz"
integrity sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==
dependencies:
sourcemap-codec "^1.4.8"
memoize-one@^6.0.0:
version "6.0.0"
resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz"
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
merge2@^1.3.0:
version "1.4.1"
resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
micromatch@^4.0.4:
version "4.0.5"
resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
dependencies:
braces "^3.0.2"
picomatch "^2.3.1"
mime-db@1.52.0:
version "1.52.0"
resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
mime-types@^2.1.12:
version "2.1.35"
resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
dependencies:
mime-db "1.52.0"
minimatch@^5.1.0:
version "5.1.0"
resolved "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.0.tgz"
integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==
dependencies:
brace-expansion "^2.0.1"
mlly@^0.5.16:
version "0.5.16"
resolved "https://registry.npmmirror.com/mlly/-/mlly-0.5.16.tgz"
integrity sha512-LaJ8yuh4v0zEmge/g3c7jjFlhoCPfQn6RCjXgm9A0Qiuochq4BcuOxVfWmdnCoLTlg2MV+hqhOek+W2OhG0Lwg==
dependencies:
acorn "^8.8.0"
pathe "^0.3.8"
pkg-types "^0.3.5"
ufo "^0.8.5"
ms@2.1.2:
version "2.1.2"
resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
nanoid@^3.3.4:
version "3.3.4"
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz"
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
normalize-wheel-es@^1.2.0:
version "1.2.0"
resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz"
integrity sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==
path-parse@^1.0.7:
version "1.0.7"
resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
pathe@^0.3.8, pathe@^0.3.9:
version "0.3.9"
resolved "https://registry.npmmirror.com/pathe/-/pathe-0.3.9.tgz"
integrity sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g==
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
version "2.3.1"
resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
pinia@^2.0.28:
version "2.0.28"
resolved "https://registry.npmjs.org/pinia/-/pinia-2.0.28.tgz"
integrity sha512-YClq9DkqCblq9rlyUual7ezMu/iICWdBtfJrDt4oWU9Zxpijyz7xB2xTwx57DaBQ96UGvvTMORzALr+iO5PVMw==
dependencies:
"@vue/devtools-api" "^6.4.5"
vue-demi "*"
pkg-types@^0.3.5:
version "0.3.6"
resolved "https://registry.npmmirror.com/pkg-types/-/pkg-types-0.3.6.tgz"
integrity sha512-uQZutkkh6axl1GxDm5/+8ivVdwuJ5pyDGqJeSiIWIUWIqYiK3p9QKozN/Rv6eVvFoeSWkN1uoYeSDBwwBJBtbg==
dependencies:
jsonc-parser "^3.2.0"
mlly "^0.5.16"
pathe "^0.3.9"
postcss@^8.1.10, postcss@^8.4.16:
version "8.4.17"
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.17.tgz"
integrity sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==
dependencies:
nanoid "^3.3.4"
picocolors "^1.0.0"
source-map-js "^1.0.2"
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
readdirp@~3.6.0:
version "3.6.0"
resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz"
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
dependencies:
picomatch "^2.2.1"
resolve@^1.22.1:
version "1.22.1"
resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz"
integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
dependencies:
is-core-module "^2.9.0"
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
reusify@^1.0.4:
version "1.0.4"
resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rollup@^1.20.0||^2.0.0||^3.0.0, rollup@~2.78.0:
version "2.78.1"
resolved "https://registry.npmmirror.com/rollup/-/rollup-2.78.1.tgz"
integrity sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==
optionalDependencies:
fsevents "~2.3.2"
run-parallel@^1.1.9:
version "1.2.0"
resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz"
integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
dependencies:
queue-microtask "^1.2.2"
sass@*, sass@^1.71.1:
version "1.75.0"
resolved "https://registry.npmmirror.com/sass/-/sass-1.75.0.tgz"
integrity sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
source-map-js ">=0.6.2 <2.0.0"
scule@^0.3.2:
version "0.3.2"
resolved "https://registry.npmmirror.com/scule/-/scule-0.3.2.tgz"
integrity sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==
semver@^7.3.7:
version "7.3.7"
resolved "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz"
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
dependencies:
lru-cache "^6.0.0"
source-map-js@^1.0.2, "source-map-js@>=0.6.2 <2.0.0":
version "1.0.2"
resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
source-map@^0.6.1:
version "0.6.1"
resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
sourcemap-codec@^1.4.8:
version "1.4.8"
resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz"
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
strip-literal@^0.4.2:
version "0.4.2"
resolved "https://registry.npmmirror.com/strip-literal/-/strip-literal-0.4.2.tgz"
integrity sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==
dependencies:
acorn "^8.8.0"
supports-preserve-symlinks-flag@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz"
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
dependencies:
is-number "^7.0.0"
ts-md5@^1.3.1:
version "1.3.1"
resolved "https://registry.npmmirror.com/ts-md5/-/ts-md5-1.3.1.tgz"
integrity sha512-DiwiXfwvcTeZ5wCE0z+2A9EseZsztaiZtGrtSaY5JOD7ekPnR/GoIVD5gXZAlK9Na9Kvpo9Waz5rW64WKAWApg==
typescript@*, typescript@^4.6.4, typescript@>=4.4.4:
version "4.8.4"
resolved "https://registry.npmmirror.com/typescript/-/typescript-4.8.4.tgz"
integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==
ufo@^0.8.5:
version "0.8.6"
resolved "https://registry.npmmirror.com/ufo/-/ufo-0.8.6.tgz"
integrity sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==
unimport@^0.7.0:
version "0.7.0"
resolved "https://registry.npmmirror.com/unimport/-/unimport-0.7.0.tgz"
integrity sha512-Cr0whz4toYVid3JHlni/uThwavDVVCk6Zw0Gxnol1c7DprTA+Isr4T+asO6rDGkhkgV7r3vSdSs5Ym8F15JA+w==
dependencies:
"@rollup/pluginutils" "^5.0.2"
escape-string-regexp "^5.0.0"
fast-glob "^3.2.12"
local-pkg "^0.4.2"
magic-string "^0.26.7"
mlly "^0.5.16"
pathe "^0.3.9"
pkg-types "^0.3.5"
scule "^0.3.2"
strip-literal "^0.4.2"
unplugin "^0.10.2"
unplugin-auto-import@^0.11.4:
version "0.11.4"
resolved "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.11.4.tgz"
integrity sha512-lh/bRDRYwgnb9Cm5ur8TlTMGxA1GRZvgzCvBIf0vyuVRy7ebWcWefFElpUDpr8vLl+ZRGsPVCOGiYJ8TCR625Q==
dependencies:
"@antfu/utils" "^0.6.0"
"@rollup/pluginutils" "^5.0.2"
local-pkg "^0.4.2"
magic-string "^0.26.7"
unimport "^0.7.0"
unplugin "^0.10.2"
unplugin-vue-components@^0.22.9:
version "0.22.9"
resolved "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.22.9.tgz"
integrity sha512-qBvooq3EgpjtYicxeccRUGUBBQCCw9rJ0kHPZPOSJd8TBZViSv86vuKLTRDHPyjWtclwOIkVStZJfPdJFhYUMw==
dependencies:
"@antfu/utils" "^0.6.0"
"@rollup/pluginutils" "^5.0.2"
chokidar "^3.5.3"
debug "^4.3.4"
fast-glob "^3.2.12"
local-pkg "^0.4.2"
magic-string "^0.26.7"
minimatch "^5.1.0"
resolve "^1.22.1"
unplugin "^0.10.1"
unplugin@^0.10.1, unplugin@^0.10.2:
version "0.10.2"
resolved "https://registry.npmmirror.com/unplugin/-/unplugin-0.10.2.tgz"
integrity sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==
dependencies:
acorn "^8.8.0"
chokidar "^3.5.3"
webpack-sources "^3.2.3"
webpack-virtual-modules "^0.4.5"
vite@^3.0.0, vite@^3.1.0:
version "3.1.4"
resolved "https://registry.npmmirror.com/vite/-/vite-3.1.4.tgz"
integrity sha512-JoQI08aBjY9lycL7jcEq4p9o1xUjq5aRvdH4KWaXtkSx7e7RpAh9D3IjzDWRD4Fg44LS3oDAIOG/Kq1L+82psA==
dependencies:
esbuild "^0.15.6"
postcss "^8.4.16"
resolve "^1.22.1"
rollup "~2.78.0"
optionalDependencies:
fsevents "~2.3.2"
vue-demi@*:
version "0.13.11"
resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz"
integrity sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==
vue-router@^4.1.6:
version "4.1.6"
resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz"
integrity sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==
dependencies:
"@vue/devtools-api" "^6.4.5"
vue-tsc@^0.40.4:
version "0.40.13"
resolved "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-0.40.13.tgz"
integrity sha512-xzuN3g5PnKfJcNrLv4+mAjteMd5wLm5fRhW0034OfNJZY4WhB07vhngea/XeGn7wNYt16r7syonzvW/54dcNiA==
dependencies:
"@volar/vue-language-core" "0.40.13"
"@volar/vue-typescript" "0.40.13"
"vue@^2.6.14 || ^3.2.0", "vue@^3.0.0-0 || ^2.6.0", vue@^3.2.0, vue@^3.2.25, vue@^3.2.37, "vue@2 || 3", vue@3.2.40:
version "3.2.40"
resolved "https://registry.npmmirror.com/vue/-/vue-3.2.40.tgz"
integrity sha512-1mGHulzUbl2Nk3pfvI5aXYYyJUs1nm4kyvuz38u4xlQkLUn1i2R7nDbI4TufECmY8v1qNBHYy62bCaM+3cHP2A==
dependencies:
"@vue/compiler-dom" "3.2.40"
"@vue/compiler-sfc" "3.2.40"
"@vue/runtime-dom" "3.2.40"
"@vue/server-renderer" "3.2.40"
"@vue/shared" "3.2.40"
vue3-slide-verify@^1.1.4:
version "1.1.4"
resolved "https://registry.npmmirror.com/vue3-slide-verify/-/vue3-slide-verify-1.1.4.tgz"
integrity sha512-er2d9TSPsF5CcmoxBfP6eSkc4IHROwXu6Ytghkwf52apXpXy2ZtW3tOgHnmFWb3GHESKxZ9bsFXqSX+fJ6hjrg==
dependencies:
vue "^3.2.25"
webpack-sources@^3.2.3:
version "3.2.3"
resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz"
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
webpack-virtual-modules@^0.4.5:
version "0.4.6"
resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz"
integrity sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==