├── .env.development ├── .env.pre ├── .env.production ├── .env.test ├── .gitignore ├── LICENSE ├── README.md ├── index.html ├── package.json ├── preview.png ├── public └── favicon.ico ├── src ├── App.vue ├── api │ └── demo │ │ └── index.ts ├── assets │ ├── logo.png │ └── logo.svg ├── components │ ├── ActionBar.vue │ ├── HelloWorld.vue │ ├── Pagination.vue │ └── tabsChrome │ │ ├── Tab.vue │ │ ├── TabsChromeX.vue │ │ └── tab.d.ts ├── compositionApi │ └── pagination.ts ├── config │ ├── app.ts │ ├── options.ts │ └── request.ts ├── env.d.ts ├── main.ts ├── router │ ├── index.ts │ ├── menu.ts │ ├── modules │ │ ├── common.ts │ │ ├── dashboard.ts │ │ └── sysyem.ts │ └── type.d.ts ├── stores │ ├── app.ts │ └── user.ts ├── utils │ ├── app.ts │ ├── loadComponents.ts │ ├── request.ts │ ├── routerHook.ts │ └── user.ts └── views │ ├── common │ ├── 404.vue │ └── Login.vue │ ├── dashboard │ └── Index.vue │ ├── layout │ ├── AsideMenu.vue │ ├── HeaderBar.vue │ ├── MainLayout.vue │ ├── TabsChrome.vue │ └── components │ │ ├── Breadcrumb.vue │ │ ├── Fullscreen.vue │ │ ├── RouteMenu.vue │ │ └── themeSwitch │ │ ├── Index.vue │ │ └── icons │ │ ├── Dark.vue │ │ └── Light.vue │ └── system │ └── demo │ ├── Index.vue │ └── extraAction.ts ├── tsconfig.json ├── tsconfig.node.json ├── vite.config.ts └── yarn.lock /.env.development: -------------------------------------------------------------------------------- 1 | ENV = 'development' 2 | 3 | VITE_BASE_URL = 'http://10.100.22.23:8888' 4 | -------------------------------------------------------------------------------- /.env.pre: -------------------------------------------------------------------------------- 1 | ENV = 'pre' 2 | 3 | VITE_BASE_URL = 'http://localhost' 4 | -------------------------------------------------------------------------------- /.env.production: -------------------------------------------------------------------------------- 1 | ENV = 'production' 2 | 3 | VITE_BASE_URL = 'http://localhost' 4 | -------------------------------------------------------------------------------- /.env.test: -------------------------------------------------------------------------------- 1 | ENV = 'test' 2 | 3 | VITE_BASE_URL = 'http://localhost' 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 xusenlin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vue 3(ScriptSetup) + TS + Vite + ElementPlus + Pinia + VueRouter + Axios 2 | 3 | ## 追求极简实用,杜绝花里胡哨。 4 | 5 | > 番外: [MareWood](https://github.com/xusenlin/MareWood) 是一个 Go 开发的轻量级前端部署工具,可以很灵活的配置各种打包部署环境并提供访问,特别是远程的时候,方便后端和测试使用。 6 | 7 | > react版: https://github.com/xusenlin/react-ant-ui-admin 8 | 9 | 10 | 11 | # 介绍 12 | - 干净简单职责清晰的一个后台模板,开箱即用。 13 | - 简单处理Axios以方便json、formData、文件上传的操作 14 | - 全部使用vue3 的单文件 ScriptSetup 15 | - 封装分页一把梭哈,快速接入业务 16 | 17 | # 系统一览 18 | 19 | ### Stores 20 | 21 | 使用极轻的 Pinia 约 1kb,目前有 app 和 user 两个 stores,app 目前存储侧边栏开关、黑暗模式、tabsChrome的状态和内容, 22 | user则需要你根据你的系统完善,他用来储存用户的token,权限等。 23 | 24 | ### Router 25 | 26 | 系统的路由除了提供页面之间的跳转还参与菜单的显示,菜单和路由一致,支持无限层级嵌套,并在路由配置的RouteMeta上扩展提供了描述菜单隐藏和权限等配置。 27 | 28 | 29 | ### 打包环境 30 | 目前支持测试、预发布、本地、正式环境的打包,配置好相应的请求,打包自动选择。如果使用配合使用 MareWood ,那么我只负责提交分支和代码,任何分支和环境的预览地址都可以打包。 31 | 32 | ![Repo](preview.png) 33 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | VueElementUiAdmin 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-project", 3 | "private": true, 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "vite", 7 | "build:test": "vue-tsc --noEmit && vite build --mode=test", 8 | "build:pre": "vue-tsc --noEmit && vite build --mode=pre", 9 | "build": "vue-tsc --noEmit && vite build" 10 | }, 11 | "dependencies": { 12 | "@element-plus/icons-vue": "^2.1.0", 13 | "@types/good-storage": "^1.1.0", 14 | "@vueuse/core": "^8.7.5", 15 | "axios": "^1.4.0", 16 | "element-plus": "^2.3.6", 17 | "good-storage": "^1.1.1", 18 | "jsoneditor": "^9.9.0", 19 | "lodash": "^4.17.21", 20 | "nprogress": "^0.2.0", 21 | "pinia": "^2.1.4", 22 | "vue": "^3.2.45", 23 | "vue-router": "4" 24 | }, 25 | "devDependencies": { 26 | "@vitejs/plugin-vue": "^4.1.0", 27 | "typescript": "^5.0.2", 28 | "vite": "^4.3.9", 29 | "vue-tsc": "^1.4.2", 30 | "sass": "^1.53.0" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xusenlin/vue-element-ui-admin/a50af344291dc6c6eb349c2c6d1fadd263ee0bde/preview.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xusenlin/vue-element-ui-admin/a50af344291dc6c6eb349c2c6d1fadd263ee0bde/public/favicon.ico -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 3 | 4 | 7 | 8 | 22 | -------------------------------------------------------------------------------- /src/api/demo/index.ts: -------------------------------------------------------------------------------- 1 | import r from "@/utils/request.ts" 2 | 3 | //paginationList("").then(r=>{ 4 | // r.length 5 | // }) 6 | export function paginationList(data:string) { 7 | return r.request({//r.request会做拦截,因此响应的数据就是string[] 类型 8 | url: '/medical-service/manager/v1/literature/list', 9 | method: 'post', 10 | data, 11 | }) 12 | } 13 | 14 | //save("").then(r=>{ 15 | // r.status 16 | // r.data.data.name 17 | // }) 18 | export function save(data:string) { 19 | return r.unhandledRequest<{name:string}>({//r.unhandledRequest不会拦截,因此响应的数据就是AxiosResponse>类型 20 | url: '/medical-service/manager/v1/literature/save', 21 | method: 'post', 22 | data, 23 | }) 24 | } 25 | 26 | //发起FormData请求 27 | export function deleteMaterial(data: { id:string }) { 28 | return r.request({ 29 | url: '/medical-service/manager/v1/literature/delete', 30 | method: 'post', 31 | isFormRequest:true, 32 | data, 33 | }) 34 | } 35 | 36 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xusenlin/vue-element-ui-admin/a50af344291dc6c6eb349c2c6d1fadd263ee0bde/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 15 | 21 | 26 | 27 | -------------------------------------------------------------------------------- /src/components/ActionBar.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 36 | 37 | 56 | -------------------------------------------------------------------------------- /src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 36 | 37 | 54 | -------------------------------------------------------------------------------- /src/components/Pagination.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 93 | 94 | 100 | -------------------------------------------------------------------------------- /src/components/tabsChrome/Tab.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 37 | 38 | 106 | -------------------------------------------------------------------------------- /src/components/tabsChrome/TabsChromeX.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 40 | 41 | 52 | -------------------------------------------------------------------------------- /src/components/tabsChrome/tab.d.ts: -------------------------------------------------------------------------------- 1 | export interface Tab { 2 | title: string; 3 | path: string; 4 | closable?: boolean; 5 | } 6 | -------------------------------------------------------------------------------- /src/compositionApi/pagination.ts: -------------------------------------------------------------------------------- 1 | import { ref,nextTick} from 'vue' 2 | import { resetArgs } from "@/utils/app" 3 | 4 | 5 | export default function () { 6 | const tableData = ref([]) 7 | const paginationRef = ref<{ Refresh:()=>void, QueryParams:()=>void } | null>(null); 8 | const searchParams = ref({"id":"","name":"","tags":[]}) 9 | 10 | const setTableData = (r:any) :void => { 11 | if(Array.isArray(r.records) && r.records.length!==0){ 12 | tableData.value = r.records||[] 13 | } 14 | } 15 | 16 | const refreshTable = ():void => { 17 | paginationRef.value?.Refresh() 18 | } 19 | const resetParams = async () => { 20 | searchParams.value = resetArgs(searchParams.value) 21 | await nextTick() 22 | refreshTable() 23 | } 24 | 25 | return { 26 | searchParams, 27 | tableData, 28 | paginationRef, 29 | setTableData, 30 | refreshTable, 31 | resetParams 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/config/app.ts: -------------------------------------------------------------------------------- 1 | export enum EnvModeEnum { 2 | Dev = "development",//开发环境 3 | Test = "test", 4 | Pre = "pre", 5 | Pro = "production", 6 | } 7 | 8 | export const version = "0.01" 9 | 10 | export const storagePrefixKey = "V-E-U-A:" 11 | 12 | 13 | export const tokenKey = storagePrefixKey+"token" 14 | 15 | export const userInfoKey = storagePrefixKey+"userInfo" 16 | 17 | 18 | export const appName = "VueElementUiAdmin" 19 | 20 | export const pageSizesArr = [30, 60, 100] 21 | 22 | export const envMode: EnvModeEnum = import.meta.env.MODE as EnvModeEnum 23 | 24 | export const isProduction = envMode == EnvModeEnum.Pro 25 | 26 | export const minScreenMaxWidth = 1024 //设置小屏幕最大临界值,如果是小屏幕菜单的布局会改变 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/config/options.ts: -------------------------------------------------------------------------------- 1 | //这里放本地的字典配置 2 | export type OptionType = { 3 | name:string, 4 | value:string 5 | } 6 | 7 | export type OptionsType = OptionType[] 8 | 9 | export const sex:OptionsType = [ 10 | {name:"未知",value:"0"}, 11 | {name:"男",value:"1"}, 12 | {name:"女",value:"2"}, 13 | ] 14 | -------------------------------------------------------------------------------- /src/config/request.ts: -------------------------------------------------------------------------------- 1 | export const baseURL:string = import.meta.env.VITE_BASE_URL 2 | 3 | export const timeout = 80000 4 | 5 | export const statusDesc:{[value: number]:string} = { 6 | 400: "请求错误(400)", 7 | 401: "未授权,请重新登录(401)", 8 | 403: "拒绝访问(403)", 9 | 404: "请求出错(404)", 10 | 408: "请求超时(408)", 11 | 500: "服务器错误(500)", 12 | 501: "服务未实现(501)", 13 | 502: "网络错误(502)", 14 | 503: "服务不可用(503)", 15 | 504: "网络超时(504)", 16 | 505: "HTTP版本不受支持(505)" 17 | } 18 | 19 | -------------------------------------------------------------------------------- /src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare module '*.vue' { 4 | import type { DefineComponent } from 'vue' 5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types 6 | const component: DefineComponent<{}, {}, any> 7 | export default component 8 | } 9 | 10 | 11 | 12 | 13 | declare module "nprogress" 14 | 15 | declare module "fastCrudTable" 16 | 17 | declare module "jsoneditor" 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import App from './App.vue' 2 | import {createApp} from 'vue' 3 | import {createPinia} from "pinia" 4 | import 'element-plus/dist/index.css' 5 | import ElementPlus from 'element-plus' 6 | import Router from "@/router/index" 7 | import 'element-plus/theme-chalk/dark/css-vars.css' 8 | import zhCn from 'element-plus/es/locale/lang/zh-cn' 9 | import {loadCommonComponents} from "@/utils/loadComponents" 10 | import {routerHook} from "@/utils/routerHook" 11 | 12 | const Pinia = createPinia() 13 | const app = createApp(App) 14 | 15 | 16 | loadCommonComponents(app).use(Pinia).use(routerHook(Router)).use(ElementPlus, {locale: zhCn,}).mount('#app') 17 | -------------------------------------------------------------------------------- /src/router/index.ts: -------------------------------------------------------------------------------- 1 | import {Common} from "./modules/common" 2 | import {Dashboard} from "./modules/dashboard" 3 | import {System} from "./modules/sysyem" 4 | import {createRouter, createWebHashHistory, RouteRecordRaw} from 'vue-router' 5 | 6 | //这里可以根据权限做动态路由 7 | const menuRoute: RouteRecordRaw[] = [ 8 | Dashboard, 9 | System, 10 | ] 11 | 12 | 13 | const whiteList: string[] = ['/login']//不需要登录也能查看的路由,最少需要'/login',要不然会一直重定向到login 14 | 15 | export default createRouter({ 16 | history: createWebHashHistory(), 17 | routes:[...menuRoute, ...Common] 18 | }) 19 | 20 | export {menuRoute,whiteList} 21 | -------------------------------------------------------------------------------- /src/router/menu.ts: -------------------------------------------------------------------------------- 1 | import {reactive} from "vue"; 2 | import {RouteRecordRaw} from "vue-router/dist/vue-router.d.ts"; 3 | import {menuRoute} from "@/router/index"; 4 | 5 | 6 | //处理路由让其作为菜单 7 | //当hideMenu会删除此菜单。默认当有children字段并且里面为空时不显示当前菜单,但是在此路由添加alwaysShow也会显示出来 8 | const menu = (routes: RouteRecordRaw[]): RouteRecordRaw[] => { 9 | let result: RouteRecordRaw[] = []; 10 | routes.forEach(r => { 11 | let { meta,path,redirect } = r; 12 | if(meta?.hideMenu){ 13 | return 14 | } 15 | let v: RouteRecordRaw = {meta,path,redirect} as RouteRecordRaw; 16 | 17 | let children = r.children && Array.isArray(r.children) && r.children.length !== 0 ? 18 | menu(r.children) : [] 19 | 20 | if (children.length !== 0) { 21 | result.push({...v,children}) 22 | return; 23 | } 24 | if(!r.children || meta?.alwaysShow){//如果没有children字段或者alwaysShow时 需要将当前路由加入 25 | result.push(v) 26 | } 27 | }) 28 | return result 29 | } 30 | 31 | const routeMenu:RouteRecordRaw[] = menu(menuRoute) 32 | 33 | export const menus = reactive(routeMenu) 34 | -------------------------------------------------------------------------------- /src/router/modules/common.ts: -------------------------------------------------------------------------------- 1 | import {RouteRecordRaw} from "vue-router"; 2 | 3 | export const Common: RouteRecordRaw[] = [ 4 | { 5 | path: '/login', 6 | component: () => import('@/views/common/Login.vue'), 7 | meta: {title: '登录', hideTabs: true} 8 | }, 9 | { 10 | // 找不到路由重定向到404页面 11 | path: "/:pathMatch(.*)", 12 | component: () => import('@/views/common/404.vue'), 13 | }, 14 | ] 15 | -------------------------------------------------------------------------------- /src/router/modules/dashboard.ts: -------------------------------------------------------------------------------- 1 | import {RouteRecordRaw} from "vue-router"; 2 | 3 | export const Dashboard: RouteRecordRaw = { 4 | path: '/', 5 | component: () => import('@/views/layout/MainLayout.vue'), 6 | redirect: '/dashboard', 7 | meta: {icon: 'Guide', title: "仪表盘", alwaysShow: true}, 8 | children: [ 9 | { 10 | path: 'dashboard', 11 | component: () => import('@/views/dashboard/Index.vue'), 12 | meta: {icon: 'Guide', title: "首页", hideMenu: true} 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /src/router/modules/sysyem.ts: -------------------------------------------------------------------------------- 1 | import {RouteRecordRaw} from "vue-router"; 2 | 3 | export const System: RouteRecordRaw = { 4 | path: '/system', 5 | component: () => import('@/views/layout/MainLayout.vue'), 6 | redirect: '/system/fastCrudFrom', 7 | meta: {icon: 'ElementPlus', title: "系统工具"}, 8 | children: [ 9 | { 10 | path: 'demo', 11 | component: () => import('@/views/system/demo/Index.vue'), 12 | meta: {title: "生成的demo"}, 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /src/router/type.d.ts: -------------------------------------------------------------------------------- 1 | import 'vue-router'; 2 | 3 | declare module 'vue-router' { 4 | interface RouteMeta { 5 | title:string//菜单、网页标题、面包屑的名字 6 | icon?:string//用于菜单的icon名字 7 | auth?:string//此菜单的权限K 8 | hideMenu?:boolean//隐藏此菜单 9 | alwaysShow?:boolean//必须设置在有children的节点上,当没有子菜单时是否总是显示。 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/stores/app.ts: -------------------------------------------------------------------------------- 1 | import {Ref} from "vue"; 2 | import {cloneDeep} from "lodash" 3 | import {defineStore} from "pinia" 4 | import storage from "good-storage" 5 | import {useDark} from '@vueuse/core' 6 | import {storagePrefixKey} from "@/config/app" 7 | import {Tab} from "@/components/tabsChrome/tab"; 8 | 9 | 10 | const ACK = storagePrefixKey + "Aside" 11 | const DMK = storagePrefixKey + "Dark" 12 | const TCK = storagePrefixKey + "Chrome" 13 | 14 | interface appStore { 15 | tabsChrome: Tab[], 16 | asideCollapse: boolean, 17 | isDarkMode: Ref 18 | } 19 | 20 | 21 | const initTabs: Tab[] = [{ 22 | title: '首页', 23 | path: '/dashboard', 24 | closable: false, 25 | }] 26 | 27 | export const useAppStore = defineStore("app", { 28 | state: (): appStore => { 29 | return { 30 | tabsChrome: storage.get(TCK, cloneDeep(initTabs)),//导航栏,没有值的时候需要默认打开首页 31 | asideCollapse: storage.get(ACK, false),//侧边栏 32 | isDarkMode: useDark({storageKey: DMK})//黑暗模式 33 | } 34 | }, 35 | actions: { 36 | toggleAside() { 37 | this.asideCollapse = !this.asideCollapse 38 | storage.set(ACK, this.asideCollapse) 39 | }, 40 | toggleDarkMode() { 41 | this.isDarkMode = !this.isDarkMode 42 | // useDarkToggle(this.isDarkMode) 43 | }, 44 | pushTabsChrome(t: Tab) { 45 | let hasTab = this.tabsChrome.find((r: Tab) => r.path == t.path) 46 | if (hasTab) return; 47 | this.tabsChrome.push(t) 48 | }, 49 | removeTabChrome(t: Tab): Tab | null { 50 | let index: number = -1 51 | this.tabsChrome.forEach((r, i) => { 52 | if (r.path == t.path) { 53 | index = i 54 | } 55 | }) 56 | if (index == -1) return null 57 | this.tabsChrome.splice(index, 1) 58 | return this.tabsChrome[this.tabsChrome.length - 1] 59 | }, 60 | removeAllTab() { 61 | this.tabsChrome = cloneDeep(initTabs) 62 | } 63 | } 64 | }) 65 | -------------------------------------------------------------------------------- /src/stores/user.ts: -------------------------------------------------------------------------------- 1 | import {defineStore} from "pinia" 2 | import storage from "good-storage" 3 | import {storagePrefixKey} from "@/config/app" 4 | 5 | const UIK = storagePrefixKey + "User" 6 | 7 | export type User = { 8 | name: string, 9 | token: string 10 | }//自己完善 11 | 12 | export interface UserStore { 13 | info: User, 14 | //权限之类的 15 | } 16 | 17 | 18 | 19 | export const useUserStore = defineStore("user", { 20 | state: (): UserStore => { 21 | return { 22 | info: storage.get(UIK), 23 | } 24 | }, 25 | getters: { 26 | token: (state) => state.info.token, 27 | userName: (state) => state.info.name, 28 | }, 29 | actions: { 30 | updateUserInfo(user: User) { 31 | this.info = user 32 | storage.set(UIK, user) 33 | }, 34 | loginOut(){ 35 | storage.remove(UIK) 36 | window.location.reload() 37 | } 38 | } 39 | }) 40 | 41 | //下面这些函数是从本地读取,在pinia还没有创建的时候,例如路由钩子 42 | export const getUserInfo = (): User => { 43 | return storage.get(UIK, {}) 44 | } 45 | 46 | export const getUserInfoByKey = (k: keyof User): any => { 47 | let u = getUserInfo() 48 | return u[k] 49 | } 50 | 51 | export const getToken = (): string => { 52 | let u = getUserInfo() 53 | return u["token"] 54 | } 55 | -------------------------------------------------------------------------------- /src/utils/app.ts: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * 重置一个参数对象 4 | * @param args 5 | * @param def 6 | */ 7 | export function resetArgs(args:T, def:Partial = {}):T { 8 | 9 | let val: { [k:string]:any } = {} 10 | 11 | for (let key in args) { 12 | if (def.hasOwnProperty(key)) { 13 | val[key] = def[key] 14 | } else { 15 | if (Array.isArray(args[key])) val[key] = []; 16 | if ('string' == typeof args[key]) val[key] = ''; 17 | if ('number' == typeof args[key]) val[key] = null; 18 | if ('boolean' == typeof args[key]) val[key] = false; 19 | } 20 | } 21 | return val as T 22 | } 23 | 24 | /** 25 | * 下载或者保存一个Blob 26 | * @param blob 27 | * @param fileName 28 | * @param isOpen 29 | * 接口返回数据流时,如果是pdf可以设置isOpen直接新窗口打开 30 | * export function exportReport(params: { fileCode:string }) { 31 | * return request({ 32 | * responseType:"blob", 33 | * closeResponseInterceptors:true, 34 | * url: '/customer-service/open/api/report/getReport', 35 | * method: 'get', 36 | * params 37 | * }) 38 | * } 39 | */ 40 | export function saveBlob(blob:Blob,fileName:string,isOpen = false):void{ 41 | 42 | let url = window.URL.createObjectURL(blob); 43 | if(isOpen){ 44 | window.open(url) 45 | }else { 46 | let a = document.createElement("a"); 47 | document.body.appendChild(a); 48 | a.setAttribute("display","none") 49 | a.href = url; 50 | a.download = fileName; 51 | a.click(); 52 | a.remove(); 53 | window.URL.revokeObjectURL(url); 54 | } 55 | } 56 | 57 | 58 | export const toFormData = (data:any) =>{ 59 | const formData = new FormData() 60 | for (const key in data) { 61 | formData.append(key, data[key]) 62 | } 63 | return formData 64 | } 65 | -------------------------------------------------------------------------------- /src/utils/loadComponents.ts: -------------------------------------------------------------------------------- 1 | import {App} from "vue" 2 | import ActionBar from "@/components/ActionBar.vue" 3 | import Pagination from "@/components/Pagination.vue" 4 | import * as ElementPlusIconsVue from '@element-plus/icons-vue' 5 | 6 | 7 | export const loadCommonComponents = (app: App): App => { 8 | for (const [key, component] of Object.entries(ElementPlusIconsVue)) { 9 | app.component(key, component) 10 | } 11 | app.component("ActionBar",ActionBar) 12 | app.component("Pagination",Pagination) 13 | 14 | return app 15 | } 16 | -------------------------------------------------------------------------------- /src/utils/request.ts: -------------------------------------------------------------------------------- 1 | import { getToken } from "@/utils/user.ts" 2 | import { toFormData } from "@/utils/app.ts" 3 | import axios from "axios"; 4 | import { baseURL,timeout,statusDesc } from "@/config/request.ts" 5 | import type { AxiosInstance, AxiosRequestConfig, AxiosResponse,InternalAxiosRequestConfig } from "axios"; 6 | 7 | export type ResponseResult = { 8 | code: number; 9 | msg: string; 10 | data: T; 11 | }; 12 | 13 | declare module 'axios' { 14 | export interface AxiosRequestConfig{ 15 | closeLoading?:boolean,//默认所有请求Loading,可关闭 16 | token?:string,//默认获取本地token,可针对某个请求写死或置空 17 | isFormRequest?:boolean,//将请求自动转换为表单请求 18 | closeInstance?:boolean 19 | } 20 | } 21 | 22 | export type RequestConfig = Omit 23 | 24 | export class Request { 25 | instance: AxiosInstance; 26 | constructor(config: AxiosRequestConfig) { 27 | this.instance = axios.create(config); 28 | this.instance.interceptors.request.use( 29 | (config:InternalAxiosRequestConfig) => { 30 | if ("token" in config){ 31 | config.headers.Authorization = config.token 32 | }else { 33 | config.headers.Authorization = getToken() 34 | } 35 | if (config.isFormRequest){config.transformRequest = toFormData} 36 | if(!config.closeLoading){ 37 | //Loading 38 | } 39 | return config; 40 | }, 41 | (err: any) => { 42 | // 请求错误,这里可以用全局提示框进行提示 43 | return Promise.reject(err); 44 | } 45 | ); 46 | this.instance.interceptors.response.use( 47 | (res: AxiosResponse) => { 48 | // 直接返回res,当然你也可以只返回res.data 49 | // 系统如果有自定义code也可以在这里处理 50 | return res; 51 | }, 52 | (err: any) => { 53 | let message = ""; 54 | if (statusDesc[err.response.status]){ 55 | message = statusDesc[err.response.status] 56 | }else { 57 | message = `连接出错(${err.response.status})!` 58 | } 59 | // 这里错误消息可以使用全局弹框展示出来 60 | // 比如element plus 可以使用 ElMessage 61 | // ElMessage({ 62 | // showClose: true, 63 | // message: `${message},请检查网络或联系管理员!`, 64 | // type: "error", 65 | // }); 66 | // 这里是AxiosError类型,所以一般我们只reject我们需要的响应即可 67 | console.log(message) 68 | return Promise.reject(err.response); 69 | } 70 | ); 71 | } 72 | 73 | //未拦截请求,响应原封不动返回 74 | 75 | unhandledRequest(config: RequestConfig): Promise>> { 76 | return this.instance.request({...config,closeInstance:true}); 77 | } 78 | //做了拦截处理,自动报错,只返回关心的数据 79 | request(config: RequestConfig): Promise { 80 | return this.instance.request(config); 81 | } 82 | } 83 | 84 | export default new Request({baseURL,timeout}) 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /src/utils/routerHook.ts: -------------------------------------------------------------------------------- 1 | import nprogress from "nprogress" 2 | import "nprogress/nprogress.css" 3 | import {appName} from "@/config/app" 4 | import {Router} from "vue-router" 5 | import {whiteList} from "@/router" 6 | import {getUserInfoByKey} from "@/stores/user"; 7 | 8 | 9 | nprogress.configure({ 10 | easing: 'ease', // 动画方式 11 | speed: 500, // 递增进度条的速度 12 | showSpinner: true, // 是否显示加载ico 13 | trickleSpeed: 200, // 自动递增间隔 14 | minimum: 0.3 // 初始化时的最小百分比 15 | }) 16 | 17 | export const routerHook = (router: Router): Router => { 18 | 19 | router.beforeEach((to, _from, next) => { 20 | nprogress.start(); 21 | if (getUserInfoByKey("token") || whiteList.indexOf(to.path) !== -1) { 22 | document.title = `${to.meta.title ? to.meta.title :"404"}-${appName}` 23 | next() 24 | } else { 25 | next("/login"); 26 | document.title = `${to.meta.title}-${appName}` 27 | } 28 | }); 29 | 30 | router.afterEach((to, _from) => { 31 | nprogress.done(); 32 | }); 33 | 34 | return router 35 | } 36 | -------------------------------------------------------------------------------- /src/utils/user.ts: -------------------------------------------------------------------------------- 1 | import Storage from "good-storage"; 2 | import {tokenKey, userInfoKey} from "@/config/app.ts"; 3 | import {User} from "@/store/user.ts"; 4 | 5 | 6 | export function getUserInfo():User { 7 | return Storage.get(userInfoKey, {}); 8 | } 9 | 10 | 11 | export function setUserInfo(user:User):User { 12 | Storage.set(userInfoKey, user); 13 | return user; 14 | } 15 | export function isLogin() : boolean{ 16 | return Storage.get(tokenKey,false) 17 | } 18 | 19 | export function getToken():string { 20 | return Storage.get(tokenKey); 21 | } 22 | 23 | /** 24 | * 设置Token 25 | * @param token 26 | * @returns {*|undefined} 27 | */ 28 | export function setToken(token:string) : void{ 29 | return Storage.set(tokenKey, token); 30 | } 31 | 32 | /** 33 | * 移除Token 34 | * @returns {*} 35 | */ 36 | export function removeToken():void { 37 | return Storage.remove(tokenKey); 38 | } 39 | -------------------------------------------------------------------------------- /src/views/common/404.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | 11 | 13 | -------------------------------------------------------------------------------- /src/views/common/Login.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 74 | 75 | 127 | -------------------------------------------------------------------------------- /src/views/dashboard/Index.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 9 | 10 | 27 | -------------------------------------------------------------------------------- /src/views/layout/AsideMenu.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 34 | 35 | 61 | -------------------------------------------------------------------------------- /src/views/layout/HeaderBar.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 52 | 53 | 79 | -------------------------------------------------------------------------------- /src/views/layout/MainLayout.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 44 | 45 | 63 | -------------------------------------------------------------------------------- /src/views/layout/TabsChrome.vue: -------------------------------------------------------------------------------- 1 | 49 | 76 | 77 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /src/views/layout/components/Breadcrumb.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | 18 | 21 | -------------------------------------------------------------------------------- /src/views/layout/components/Fullscreen.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | 21 | -------------------------------------------------------------------------------- /src/views/layout/components/RouteMenu.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 29 | 30 | 33 | -------------------------------------------------------------------------------- /src/views/layout/components/themeSwitch/Index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 19 | 20 | 72 | -------------------------------------------------------------------------------- /src/views/layout/components/themeSwitch/icons/Dark.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /src/views/layout/components/themeSwitch/icons/Light.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /src/views/system/demo/Index.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 54 | 55 | 62 | -------------------------------------------------------------------------------- /src/views/system/demo/extraAction.ts: -------------------------------------------------------------------------------- 1 | import {ElMessage, ElMessageBox} from 'element-plus' 2 | import {useRouter} from "vue-router"; 3 | import { deleteMaterial } from "@/api/demo" 4 | 5 | 6 | export default function (refreshTable: () => void) { 7 | const router = useRouter() 8 | 9 | const deleteRow = (row:any) => { 10 | ElMessageBox.confirm( 11 | '确认删除此记录吗?', 12 | '确认操作', 13 | { 14 | confirmButtonText: '确认', 15 | cancelButtonText: '关闭', 16 | type: 'warning', 17 | } 18 | ) 19 | .then(() => { 20 | let { id } = row; 21 | deleteMaterial({id}).then(()=>{ 22 | ElMessage({ 23 | type: 'success', 24 | message: '删除成功', 25 | }) 26 | refreshTable() 27 | }).catch(()=>{}) 28 | 29 | }) 30 | .catch(() => {}) 31 | } 32 | const details = (row:any) => { 33 | router.push({path:"/",query:{id:row.id}}) 34 | } 35 | 36 | return { 37 | details, 38 | deleteRow, 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "noEmit": true, 15 | "jsx": "preserve", 16 | "baseUrl": "./", 17 | "paths": { 18 | "@/*": [ 19 | "src/*" 20 | ] 21 | }, 22 | /* Linting */ 23 | "strict": true, 24 | "noUnusedLocals": true, 25 | "noUnusedParameters": true, 26 | "noFallthroughCasesInSwitch": true 27 | }, 28 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], 29 | "references": [{ "path": "./tsconfig.node.json" }] 30 | } 31 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import {defineConfig} from 'vite' 2 | import vue from '@vitejs/plugin-vue' 3 | 4 | 5 | 6 | 7 | // https://vitejs.dev/config/ 8 | export default defineConfig({ 9 | server: { 10 | base: "/", 11 | port: 3003, 12 | host: '0.0.0.0', 13 | open: true, 14 | }, 15 | resolve: { 16 | alias: { 17 | '@': '/src/' 18 | }, 19 | }, 20 | 21 | plugins: [vue()], 22 | }) 23 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/parser@^7.20.15", "@babel/parser@^7.21.3": 6 | version "7.22.5" 7 | resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" 8 | integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== 9 | 10 | "@ctrl/tinycolor@^3.4.1": 11 | version "3.4.1" 12 | resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32" 13 | integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw== 14 | 15 | "@element-plus/icons-vue@^2.0.6": 16 | version "2.0.6" 17 | resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.0.6.tgz#8490e7a3193c17515d10c3be0544d800afe6a228" 18 | integrity sha512-lPpG8hYkjL/Z97DH5Ei6w6o22Z4YdNglWCNYOPcB33JCF2A4wye6HFgSI7hEt9zdLyxlSpiqtgf9XcYU+m5mew== 19 | 20 | "@element-plus/icons-vue@^2.1.0": 21 | version "2.1.0" 22 | resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz#7ad90d08a8c0d5fd3af31c4f73264ca89614397a" 23 | integrity sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA== 24 | 25 | "@esbuild/android-arm64@0.17.19": 26 | version "0.17.19" 27 | resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" 28 | integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== 29 | 30 | "@esbuild/android-arm@0.17.19": 31 | version "0.17.19" 32 | resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" 33 | integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== 34 | 35 | "@esbuild/android-x64@0.17.19": 36 | version "0.17.19" 37 | resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" 38 | integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== 39 | 40 | "@esbuild/darwin-arm64@0.17.19": 41 | version "0.17.19" 42 | resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" 43 | integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== 44 | 45 | "@esbuild/darwin-x64@0.17.19": 46 | version "0.17.19" 47 | resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" 48 | integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== 49 | 50 | "@esbuild/freebsd-arm64@0.17.19": 51 | version "0.17.19" 52 | resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" 53 | integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== 54 | 55 | "@esbuild/freebsd-x64@0.17.19": 56 | version "0.17.19" 57 | resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" 58 | integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== 59 | 60 | "@esbuild/linux-arm64@0.17.19": 61 | version "0.17.19" 62 | resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" 63 | integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== 64 | 65 | "@esbuild/linux-arm@0.17.19": 66 | version "0.17.19" 67 | resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" 68 | integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== 69 | 70 | "@esbuild/linux-ia32@0.17.19": 71 | version "0.17.19" 72 | resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" 73 | integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== 74 | 75 | "@esbuild/linux-loong64@0.17.19": 76 | version "0.17.19" 77 | resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" 78 | integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== 79 | 80 | "@esbuild/linux-mips64el@0.17.19": 81 | version "0.17.19" 82 | resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" 83 | integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== 84 | 85 | "@esbuild/linux-ppc64@0.17.19": 86 | version "0.17.19" 87 | resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" 88 | integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== 89 | 90 | "@esbuild/linux-riscv64@0.17.19": 91 | version "0.17.19" 92 | resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" 93 | integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== 94 | 95 | "@esbuild/linux-s390x@0.17.19": 96 | version "0.17.19" 97 | resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" 98 | integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== 99 | 100 | "@esbuild/linux-x64@0.17.19": 101 | version "0.17.19" 102 | resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" 103 | integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== 104 | 105 | "@esbuild/netbsd-x64@0.17.19": 106 | version "0.17.19" 107 | resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" 108 | integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== 109 | 110 | "@esbuild/openbsd-x64@0.17.19": 111 | version "0.17.19" 112 | resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" 113 | integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== 114 | 115 | "@esbuild/sunos-x64@0.17.19": 116 | version "0.17.19" 117 | resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" 118 | integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== 119 | 120 | "@esbuild/win32-arm64@0.17.19": 121 | version "0.17.19" 122 | resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" 123 | integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== 124 | 125 | "@esbuild/win32-ia32@0.17.19": 126 | version "0.17.19" 127 | resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" 128 | integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== 129 | 130 | "@esbuild/win32-x64@0.17.19": 131 | version "0.17.19" 132 | resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" 133 | integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== 134 | 135 | "@floating-ui/core@^1.3.0": 136 | version "1.3.0" 137 | resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-1.3.0.tgz#113bc85fa102cf890ae801668f43ee265c547a09" 138 | integrity sha512-vX1WVAdPjZg9DkDkC+zEx/tKtnST6/qcNpwcjeBgco3XRNHz5PUA+ivi/yr6G3o0kMR60uKBJcfOdfzOFI7PMQ== 139 | 140 | "@floating-ui/dom@^1.0.1": 141 | version "1.3.0" 142 | resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.3.0.tgz#69456f2164fc3d33eb40837686eaf71537235ac9" 143 | integrity sha512-qIAwejE3r6NeA107u4ELDKkH8+VtgRKdXqtSPaKflL2S2V+doyN+Wt9s5oHKXPDo4E8TaVXaHT3+6BbagH31xw== 144 | dependencies: 145 | "@floating-ui/core" "^1.3.0" 146 | 147 | "@jridgewell/sourcemap-codec@^1.4.13": 148 | version "1.4.15" 149 | resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 150 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 151 | 152 | "@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7": 153 | version "2.11.7" 154 | resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz#a7f69e3665d3da9b115f9e71671dae1b97e13671" 155 | integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ== 156 | 157 | "@sphinxxxx/color-conversion@^2.2.2": 158 | version "2.2.2" 159 | resolved "https://registry.npmmirror.com/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz#03ecc29279e3c0c832f6185a5bfa3497858ac8ca" 160 | integrity sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw== 161 | 162 | "@types/good-storage@^1.1.0": 163 | version "1.1.0" 164 | resolved "https://registry.npmmirror.com/@types/good-storage/-/good-storage-1.1.0.tgz#4d7d37918348e5b6e5e1060d692b84997e9a5a9f" 165 | integrity sha512-N6zADalBl9mmZONn/ljfVKyFljCH1dGaIq7rSaYUCIRL8C8TypIFe1fXfFD2Z6LsdcOFcQEhXauClCJIJvoiHg== 166 | 167 | "@types/lodash-es@^4.17.6": 168 | version "4.17.6" 169 | resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" 170 | integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg== 171 | dependencies: 172 | "@types/lodash" "*" 173 | 174 | "@types/lodash@*", "@types/lodash@^4.14.182": 175 | version "4.14.182" 176 | resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" 177 | integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== 178 | 179 | "@types/web-bluetooth@^0.0.14": 180 | version "0.0.14" 181 | resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.14.tgz#94e175b53623384bff1f354cdb3197a8d63cdbe5" 182 | integrity sha512-5d2RhCard1nQUC3aHcq/gHzWYO6K0WJmAbjO7mQJgCQKtZpgXxv1rOM6O/dBDhDYYVutk1sciOgNSe+5YyfM8A== 183 | 184 | "@types/web-bluetooth@^0.0.16": 185 | version "0.0.16" 186 | resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz#1d12873a8e49567371f2a75fe3e7f7edca6662d8" 187 | integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ== 188 | 189 | "@vitejs/plugin-vue@^4.1.0": 190 | version "4.2.3" 191 | resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz#ee0b6dfcc62fe65364e6395bf38fa2ba10bb44b6" 192 | integrity sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw== 193 | 194 | "@volar/language-core@1.4.1": 195 | version "1.4.1" 196 | resolved "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.4.1.tgz#66b5758252e35c4e5e71197ca7fa0344d306442c" 197 | integrity sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ== 198 | dependencies: 199 | "@volar/source-map" "1.4.1" 200 | 201 | "@volar/source-map@1.4.1": 202 | version "1.4.1" 203 | resolved "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.4.1.tgz#e3b561775c742508e5e1f28609a4787c98056715" 204 | integrity sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA== 205 | dependencies: 206 | muggle-string "^0.2.2" 207 | 208 | "@volar/typescript@1.4.1-patch.2": 209 | version "1.4.1-patch.2" 210 | resolved "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.4.1-patch.2.tgz#89f4bd199ca81a832d86d1449b01f49f2b72137c" 211 | integrity sha512-lPFYaGt8OdMEzNGJJChF40uYqMO4Z/7Q9fHPQC/NRVtht43KotSXLrkPandVVMf9aPbiJ059eAT+fwHGX16k4w== 212 | dependencies: 213 | "@volar/language-core" "1.4.1" 214 | 215 | "@volar/vue-language-core@1.6.5": 216 | version "1.6.5" 217 | resolved "https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.6.5.tgz#db42520f1a29737c7e40fbb3e6aead8def85ba75" 218 | integrity sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg== 219 | dependencies: 220 | "@volar/language-core" "1.4.1" 221 | "@volar/source-map" "1.4.1" 222 | "@vue/compiler-dom" "^3.3.0" 223 | "@vue/compiler-sfc" "^3.3.0" 224 | "@vue/reactivity" "^3.3.0" 225 | "@vue/shared" "^3.3.0" 226 | minimatch "^9.0.0" 227 | muggle-string "^0.2.2" 228 | vue-template-compiler "^2.7.14" 229 | 230 | "@volar/vue-typescript@1.6.5": 231 | version "1.6.5" 232 | resolved "https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.6.5.tgz#6ca9bfefa5dc64ff97fcdbc74249e5e7da44e533" 233 | integrity sha512-er9rVClS4PHztMUmtPMDTl+7c7JyrxweKSAEe/o/Noeq2bQx6v3/jZHVHBe8ZNUti5ubJL/+Tg8L3bzmlalV8A== 234 | dependencies: 235 | "@volar/typescript" "1.4.1-patch.2" 236 | "@volar/vue-language-core" "1.6.5" 237 | 238 | "@vue/compiler-core@3.3.4": 239 | version "3.3.4" 240 | resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz#7fbf591c1c19e1acd28ffd284526e98b4f581128" 241 | integrity sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g== 242 | dependencies: 243 | "@babel/parser" "^7.21.3" 244 | "@vue/shared" "3.3.4" 245 | estree-walker "^2.0.2" 246 | source-map-js "^1.0.2" 247 | 248 | "@vue/compiler-dom@3.3.4", "@vue/compiler-dom@^3.3.0": 249 | version "3.3.4" 250 | resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz#f56e09b5f4d7dc350f981784de9713d823341151" 251 | integrity sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w== 252 | dependencies: 253 | "@vue/compiler-core" "3.3.4" 254 | "@vue/shared" "3.3.4" 255 | 256 | "@vue/compiler-sfc@3.3.4", "@vue/compiler-sfc@^3.3.0": 257 | version "3.3.4" 258 | resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz#b19d942c71938893535b46226d602720593001df" 259 | integrity sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ== 260 | dependencies: 261 | "@babel/parser" "^7.20.15" 262 | "@vue/compiler-core" "3.3.4" 263 | "@vue/compiler-dom" "3.3.4" 264 | "@vue/compiler-ssr" "3.3.4" 265 | "@vue/reactivity-transform" "3.3.4" 266 | "@vue/shared" "3.3.4" 267 | estree-walker "^2.0.2" 268 | magic-string "^0.30.0" 269 | postcss "^8.1.10" 270 | source-map-js "^1.0.2" 271 | 272 | "@vue/compiler-ssr@3.3.4": 273 | version "3.3.4" 274 | resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz#9d1379abffa4f2b0cd844174ceec4a9721138777" 275 | integrity sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ== 276 | dependencies: 277 | "@vue/compiler-dom" "3.3.4" 278 | "@vue/shared" "3.3.4" 279 | 280 | "@vue/devtools-api@^6.1.4": 281 | version "6.2.0" 282 | resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.2.0.tgz#e3dc98a0cce8e87292745e2d24c9ee8c274a023b" 283 | integrity sha512-pF1G4wky+hkifDiZSWn8xfuLOJI1ZXtuambpBEYaf7Xaf6zC/pM29rvAGpd3qaGXnr4BAXU1Pxz/VfvBGwexGA== 284 | 285 | "@vue/devtools-api@^6.5.0": 286 | version "6.5.0" 287 | resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07" 288 | integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q== 289 | 290 | "@vue/reactivity-transform@3.3.4": 291 | version "3.3.4" 292 | resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929" 293 | integrity sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw== 294 | dependencies: 295 | "@babel/parser" "^7.20.15" 296 | "@vue/compiler-core" "3.3.4" 297 | "@vue/shared" "3.3.4" 298 | estree-walker "^2.0.2" 299 | magic-string "^0.30.0" 300 | 301 | "@vue/reactivity@3.3.4", "@vue/reactivity@^3.3.0": 302 | version "3.3.4" 303 | resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.4.tgz#a27a29c6cd17faba5a0e99fbb86ee951653e2253" 304 | integrity sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ== 305 | dependencies: 306 | "@vue/shared" "3.3.4" 307 | 308 | "@vue/runtime-core@3.3.4": 309 | version "3.3.4" 310 | resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz#4bb33872bbb583721b340f3088888394195967d1" 311 | integrity sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA== 312 | dependencies: 313 | "@vue/reactivity" "3.3.4" 314 | "@vue/shared" "3.3.4" 315 | 316 | "@vue/runtime-dom@3.3.4": 317 | version "3.3.4" 318 | resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz#992f2579d0ed6ce961f47bbe9bfe4b6791251566" 319 | integrity sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ== 320 | dependencies: 321 | "@vue/runtime-core" "3.3.4" 322 | "@vue/shared" "3.3.4" 323 | csstype "^3.1.1" 324 | 325 | "@vue/server-renderer@3.3.4": 326 | version "3.3.4" 327 | resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz#ea46594b795d1536f29bc592dd0f6655f7ea4c4c" 328 | integrity sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ== 329 | dependencies: 330 | "@vue/compiler-ssr" "3.3.4" 331 | "@vue/shared" "3.3.4" 332 | 333 | "@vue/shared@3.3.4", "@vue/shared@^3.3.0": 334 | version "3.3.4" 335 | resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.4.tgz#06e83c5027f464eef861c329be81454bc8b70780" 336 | integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ== 337 | 338 | "@vueuse/core@^8.7.5": 339 | version "8.7.5" 340 | resolved "https://registry.npmmirror.com/@vueuse/core/-/core-8.7.5.tgz#e74a888251ea11a9d432068ce18cbdfc4f810251" 341 | integrity sha512-tqgzeZGoZcXzoit4kOGLWJibDMLp0vdm6ZO41SSUQhkhtrPhAg6dbIEPiahhUu6sZAmSYvVrZgEr5aKD51nrLA== 342 | dependencies: 343 | "@types/web-bluetooth" "^0.0.14" 344 | "@vueuse/metadata" "8.7.5" 345 | "@vueuse/shared" "8.7.5" 346 | vue-demi "*" 347 | 348 | "@vueuse/core@^9.1.0": 349 | version "9.13.0" 350 | resolved "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz#2f69e66d1905c1e4eebc249a01759cf88ea00cf4" 351 | integrity sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw== 352 | dependencies: 353 | "@types/web-bluetooth" "^0.0.16" 354 | "@vueuse/metadata" "9.13.0" 355 | "@vueuse/shared" "9.13.0" 356 | vue-demi "*" 357 | 358 | "@vueuse/metadata@8.7.5": 359 | version "8.7.5" 360 | resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-8.7.5.tgz#c7f2b21d873d1604a8860ed9c5728d8f3295f00a" 361 | integrity sha512-emJZKRQSaEnVqmlu39NpNp8iaW+bPC2kWykWoWOZMSlO/0QVEmO/rt8A5VhOEJTKLX3vwTevqbiRy9WJRwVOQg== 362 | 363 | "@vueuse/metadata@9.13.0": 364 | version "9.13.0" 365 | resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz#bc25a6cdad1b1a93c36ce30191124da6520539ff" 366 | integrity sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ== 367 | 368 | "@vueuse/shared@8.7.5": 369 | version "8.7.5" 370 | resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-8.7.5.tgz#06fb08f6f8fc9e90be9d1e033fa443de927172b0" 371 | integrity sha512-THXPvMBFmg6Gf6AwRn/EdTh2mhqwjGsB2Yfp374LNQSQVKRHtnJ0I42bsZTn7nuEliBxqUrGQm/lN6qUHmhJLw== 372 | dependencies: 373 | vue-demi "*" 374 | 375 | "@vueuse/shared@9.13.0": 376 | version "9.13.0" 377 | resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz#089ff4cc4e2e7a4015e57a8f32e4b39d096353b9" 378 | integrity sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw== 379 | dependencies: 380 | vue-demi "*" 381 | 382 | ace-builds@^1.6.0: 383 | version "1.7.1" 384 | resolved "https://registry.npmmirror.com/ace-builds/-/ace-builds-1.7.1.tgz#be796fbd98610dda5e138aed98d309cac2ab0872" 385 | integrity sha512-1mcbP5kXvr729sJ9dA/8tul0pjuvKbma0LF/ZMRwPEwjoNWNpe/x0OXpaPJo36aRpZCjRZMl5zsME3hAKTiaNw== 386 | 387 | ajv@^6.12.6: 388 | version "6.12.6" 389 | resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 390 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 391 | dependencies: 392 | fast-deep-equal "^3.1.1" 393 | fast-json-stable-stringify "^2.0.0" 394 | json-schema-traverse "^0.4.1" 395 | uri-js "^4.2.2" 396 | 397 | anymatch@~3.1.2: 398 | version "3.1.2" 399 | resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 400 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 401 | dependencies: 402 | normalize-path "^3.0.0" 403 | picomatch "^2.0.4" 404 | 405 | async-validator@^4.2.5: 406 | version "4.2.5" 407 | resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339" 408 | integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== 409 | 410 | asynckit@^0.4.0: 411 | version "0.4.0" 412 | resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 413 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 414 | 415 | axios@^1.4.0: 416 | version "1.4.0" 417 | resolved "https://registry.npmmirror.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" 418 | integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== 419 | dependencies: 420 | follow-redirects "^1.15.0" 421 | form-data "^4.0.0" 422 | proxy-from-env "^1.1.0" 423 | 424 | balanced-match@^1.0.0: 425 | version "1.0.2" 426 | resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 427 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 428 | 429 | binary-extensions@^2.0.0: 430 | version "2.2.0" 431 | resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 432 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 433 | 434 | brace-expansion@^2.0.1: 435 | version "2.0.1" 436 | resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 437 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 438 | dependencies: 439 | balanced-match "^1.0.0" 440 | 441 | braces@~3.0.2: 442 | version "3.0.2" 443 | resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 444 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 445 | dependencies: 446 | fill-range "^7.0.1" 447 | 448 | "chokidar@>=3.0.0 <4.0.0": 449 | version "3.5.3" 450 | resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 451 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 452 | dependencies: 453 | anymatch "~3.1.2" 454 | braces "~3.0.2" 455 | glob-parent "~5.1.2" 456 | is-binary-path "~2.1.0" 457 | is-glob "~4.0.1" 458 | normalize-path "~3.0.0" 459 | readdirp "~3.6.0" 460 | optionalDependencies: 461 | fsevents "~2.3.2" 462 | 463 | combined-stream@^1.0.8: 464 | version "1.0.8" 465 | resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 466 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 467 | dependencies: 468 | delayed-stream "~1.0.0" 469 | 470 | csstype@^3.1.1: 471 | version "3.1.2" 472 | resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" 473 | integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== 474 | 475 | dayjs@^1.11.3: 476 | version "1.11.3" 477 | resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.3.tgz#4754eb694a624057b9ad2224b67b15d552589258" 478 | integrity sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A== 479 | 480 | de-indent@^1.0.2: 481 | version "1.0.2" 482 | resolved "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" 483 | integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== 484 | 485 | delayed-stream@~1.0.0: 486 | version "1.0.0" 487 | resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 488 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 489 | 490 | element-plus@^2.3.6: 491 | version "2.3.6" 492 | resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.3.6.tgz#848f8834ed70adfbae8f4dec5303a9126d472d28" 493 | integrity sha512-GLz0pXUYI2zRfIgyI6W7SWmHk6dSEikP9yR++hsQUyy63+WjutoiGpA3SZD4cGPSXUzRFeKfVr8CnYhK5LqXZw== 494 | dependencies: 495 | "@ctrl/tinycolor" "^3.4.1" 496 | "@element-plus/icons-vue" "^2.0.6" 497 | "@floating-ui/dom" "^1.0.1" 498 | "@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.7" 499 | "@types/lodash" "^4.14.182" 500 | "@types/lodash-es" "^4.17.6" 501 | "@vueuse/core" "^9.1.0" 502 | async-validator "^4.2.5" 503 | dayjs "^1.11.3" 504 | escape-html "^1.0.3" 505 | lodash "^4.17.21" 506 | lodash-es "^4.17.21" 507 | lodash-unified "^1.0.2" 508 | memoize-one "^6.0.0" 509 | normalize-wheel-es "^1.2.0" 510 | 511 | esbuild@^0.17.5: 512 | version "0.17.19" 513 | resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" 514 | integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== 515 | optionalDependencies: 516 | "@esbuild/android-arm" "0.17.19" 517 | "@esbuild/android-arm64" "0.17.19" 518 | "@esbuild/android-x64" "0.17.19" 519 | "@esbuild/darwin-arm64" "0.17.19" 520 | "@esbuild/darwin-x64" "0.17.19" 521 | "@esbuild/freebsd-arm64" "0.17.19" 522 | "@esbuild/freebsd-x64" "0.17.19" 523 | "@esbuild/linux-arm" "0.17.19" 524 | "@esbuild/linux-arm64" "0.17.19" 525 | "@esbuild/linux-ia32" "0.17.19" 526 | "@esbuild/linux-loong64" "0.17.19" 527 | "@esbuild/linux-mips64el" "0.17.19" 528 | "@esbuild/linux-ppc64" "0.17.19" 529 | "@esbuild/linux-riscv64" "0.17.19" 530 | "@esbuild/linux-s390x" "0.17.19" 531 | "@esbuild/linux-x64" "0.17.19" 532 | "@esbuild/netbsd-x64" "0.17.19" 533 | "@esbuild/openbsd-x64" "0.17.19" 534 | "@esbuild/sunos-x64" "0.17.19" 535 | "@esbuild/win32-arm64" "0.17.19" 536 | "@esbuild/win32-ia32" "0.17.19" 537 | "@esbuild/win32-x64" "0.17.19" 538 | 539 | escape-html@^1.0.3: 540 | version "1.0.3" 541 | resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 542 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 543 | 544 | estree-walker@^2.0.2: 545 | version "2.0.2" 546 | resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 547 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 548 | 549 | fast-deep-equal@^3.1.1: 550 | version "3.1.3" 551 | resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 552 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 553 | 554 | fast-json-stable-stringify@^2.0.0: 555 | version "2.1.0" 556 | resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 557 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 558 | 559 | fill-range@^7.0.1: 560 | version "7.0.1" 561 | resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 562 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 563 | dependencies: 564 | to-regex-range "^5.0.1" 565 | 566 | follow-redirects@^1.15.0: 567 | version "1.15.2" 568 | resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" 569 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== 570 | 571 | form-data@^4.0.0: 572 | version "4.0.0" 573 | resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 574 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 575 | dependencies: 576 | asynckit "^0.4.0" 577 | combined-stream "^1.0.8" 578 | mime-types "^2.1.12" 579 | 580 | fsevents@~2.3.2: 581 | version "2.3.2" 582 | resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 583 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 584 | 585 | glob-parent@~5.1.2: 586 | version "5.1.2" 587 | resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 588 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 589 | dependencies: 590 | is-glob "^4.0.1" 591 | 592 | good-storage@^1.1.1: 593 | version "1.1.1" 594 | resolved "https://registry.npmmirror.com/good-storage/-/good-storage-1.1.1.tgz#081501c01607d5fee2a214f94e8f5f9cb994789f" 595 | integrity sha512-+0UEpRT03fJgEJoeTVVz41ISC5+jaQrDIWatQ4BoDQfOiBBsjNanymi9sAtLFdEAADQN0FYR8mGpeqxSCe8oXQ== 596 | 597 | he@^1.2.0: 598 | version "1.2.0" 599 | resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 600 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 601 | 602 | immutable@^4.0.0: 603 | version "4.1.0" 604 | resolved "https://registry.npmmirror.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" 605 | integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== 606 | 607 | is-binary-path@~2.1.0: 608 | version "2.1.0" 609 | resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 610 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 611 | dependencies: 612 | binary-extensions "^2.0.0" 613 | 614 | is-extglob@^2.1.1: 615 | version "2.1.1" 616 | resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 617 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 618 | 619 | is-glob@^4.0.1, is-glob@~4.0.1: 620 | version "4.0.3" 621 | resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 622 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 623 | dependencies: 624 | is-extglob "^2.1.1" 625 | 626 | is-number@^7.0.0: 627 | version "7.0.0" 628 | resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 629 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 630 | 631 | javascript-natural-sort@^0.7.1: 632 | version "0.7.1" 633 | resolved "https://registry.npmmirror.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" 634 | integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== 635 | 636 | jmespath@^0.16.0: 637 | version "0.16.0" 638 | resolved "https://registry.npmmirror.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" 639 | integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== 640 | 641 | json-schema-traverse@^0.4.1: 642 | version "0.4.1" 643 | resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 644 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 645 | 646 | json-source-map@^0.6.1: 647 | version "0.6.1" 648 | resolved "https://registry.npmmirror.com/json-source-map/-/json-source-map-0.6.1.tgz#e0b1f6f4ce13a9ad57e2ae165a24d06e62c79a0f" 649 | integrity sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg== 650 | 651 | jsoneditor@^9.9.0: 652 | version "9.9.0" 653 | resolved "https://registry.npmmirror.com/jsoneditor/-/jsoneditor-9.9.0.tgz#671e1231e23c43ebc6e1eb43fe97b2f97b156faf" 654 | integrity sha512-NHJhyaqcc5U33ah6dEcd0S9b14Auocpe9nydvC9ui7Uq/vjEFnsd7ot6O9Jqwv53B7DmHFUWq5cT4qeWh4MEoA== 655 | dependencies: 656 | ace-builds "^1.6.0" 657 | ajv "^6.12.6" 658 | javascript-natural-sort "^0.7.1" 659 | jmespath "^0.16.0" 660 | json-source-map "^0.6.1" 661 | jsonrepair "^2.2.1" 662 | mobius1-selectr "^2.4.13" 663 | picomodal "^3.0.0" 664 | vanilla-picker "^2.12.1" 665 | 666 | jsonrepair@^2.2.1: 667 | version "2.2.1" 668 | resolved "https://registry.npmmirror.com/jsonrepair/-/jsonrepair-2.2.1.tgz#7c6257c36550a310150c41ab7d5d4cab71828456" 669 | integrity sha512-o9Je8TceILo872uQC9fIBJm957j1Io7z8Ca1iWIqY6S5S65HGE9XN7XEEw7+tUviB9Vq4sygV89MVTxl+rhZyg== 670 | 671 | lodash-es@^4.17.21: 672 | version "4.17.21" 673 | resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" 674 | integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== 675 | 676 | lodash-unified@^1.0.2: 677 | version "1.0.2" 678 | resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.2.tgz#bb2694db3533781e5cce984af60cfaea318b83c1" 679 | integrity sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g== 680 | 681 | lodash@^4.17.21: 682 | version "4.17.21" 683 | resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 684 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 685 | 686 | lru-cache@^6.0.0: 687 | version "6.0.0" 688 | resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 689 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 690 | dependencies: 691 | yallist "^4.0.0" 692 | 693 | magic-string@^0.30.0: 694 | version "0.30.0" 695 | resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.0.tgz#fd58a4748c5c4547338a424e90fa5dd17f4de529" 696 | integrity sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ== 697 | dependencies: 698 | "@jridgewell/sourcemap-codec" "^1.4.13" 699 | 700 | memoize-one@^6.0.0: 701 | version "6.0.0" 702 | resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" 703 | integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== 704 | 705 | mime-db@1.52.0: 706 | version "1.52.0" 707 | resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 708 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 709 | 710 | mime-types@^2.1.12: 711 | version "2.1.35" 712 | resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 713 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 714 | dependencies: 715 | mime-db "1.52.0" 716 | 717 | minimatch@^9.0.0: 718 | version "9.0.1" 719 | resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253" 720 | integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w== 721 | dependencies: 722 | brace-expansion "^2.0.1" 723 | 724 | mobius1-selectr@^2.4.13: 725 | version "2.4.13" 726 | resolved "https://registry.npmmirror.com/mobius1-selectr/-/mobius1-selectr-2.4.13.tgz#0019dfd9f984840d6e40f70683ab3ec78ce3b5df" 727 | integrity sha512-Mk9qDrvU44UUL0EBhbAA1phfQZ7aMZPjwtL7wkpiBzGh8dETGqfsh50mWoX9EkjDlkONlErWXArHCKfoxVg0Bw== 728 | 729 | muggle-string@^0.2.2: 730 | version "0.2.2" 731 | resolved "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.2.2.tgz#786aa53fea1652c61c6a59e1f839292b262bc72a" 732 | integrity sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg== 733 | 734 | nanoid@^3.3.4: 735 | version "3.3.4" 736 | resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" 737 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== 738 | 739 | nanoid@^3.3.6: 740 | version "3.3.6" 741 | resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" 742 | integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== 743 | 744 | normalize-path@^3.0.0, normalize-path@~3.0.0: 745 | version "3.0.0" 746 | resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 747 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 748 | 749 | normalize-wheel-es@^1.2.0: 750 | version "1.2.0" 751 | resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz#0fa2593d619f7245a541652619105ab076acf09e" 752 | integrity sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw== 753 | 754 | nprogress@^0.2.0: 755 | version "0.2.0" 756 | resolved "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" 757 | integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== 758 | 759 | picocolors@^1.0.0: 760 | version "1.0.0" 761 | resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 762 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 763 | 764 | picomatch@^2.0.4, picomatch@^2.2.1: 765 | version "2.3.1" 766 | resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 767 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 768 | 769 | picomodal@^3.0.0: 770 | version "3.0.0" 771 | resolved "https://registry.npmmirror.com/picomodal/-/picomodal-3.0.0.tgz#facd30f4fbf34a809c1e04ea525f004f399c0b82" 772 | integrity sha512-FoR3TDfuLlqUvcEeK5ifpKSVVns6B4BQvc8SDF6THVMuadya6LLtji0QgUDSStw0ZR2J7I6UGi5V2V23rnPWTw== 773 | 774 | pinia@^2.1.4: 775 | version "2.1.4" 776 | resolved "https://registry.npmmirror.com/pinia/-/pinia-2.1.4.tgz#a642adfe6208e10c36d3dc16184a91064788142a" 777 | integrity sha512-vYlnDu+Y/FXxv1ABo1vhjC+IbqvzUdiUC3sfDRrRyY2CQSrqqaa+iiHmqtARFxJVqWQMCJfXx1PBvFs9aJVLXQ== 778 | dependencies: 779 | "@vue/devtools-api" "^6.5.0" 780 | vue-demi ">=0.14.5" 781 | 782 | postcss@^8.1.10: 783 | version "8.4.14" 784 | resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" 785 | integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== 786 | dependencies: 787 | nanoid "^3.3.4" 788 | picocolors "^1.0.0" 789 | source-map-js "^1.0.2" 790 | 791 | postcss@^8.4.23: 792 | version "8.4.24" 793 | resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df" 794 | integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== 795 | dependencies: 796 | nanoid "^3.3.6" 797 | picocolors "^1.0.0" 798 | source-map-js "^1.0.2" 799 | 800 | proxy-from-env@^1.1.0: 801 | version "1.1.0" 802 | resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" 803 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== 804 | 805 | punycode@^2.1.0: 806 | version "2.1.1" 807 | resolved "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 808 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 809 | 810 | readdirp@~3.6.0: 811 | version "3.6.0" 812 | resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 813 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 814 | dependencies: 815 | picomatch "^2.2.1" 816 | 817 | rollup@^3.21.0: 818 | version "3.25.1" 819 | resolved "https://registry.npmmirror.com/rollup/-/rollup-3.25.1.tgz#9fff79d22ff1a904b2b595a2fb9bc3793cb987d8" 820 | integrity sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ== 821 | optionalDependencies: 822 | fsevents "~2.3.2" 823 | 824 | sass@^1.53.0: 825 | version "1.53.0" 826 | resolved "https://registry.npmmirror.com/sass/-/sass-1.53.0.tgz#eab73a7baac045cc57ddc1d1ff501ad2659952eb" 827 | integrity sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ== 828 | dependencies: 829 | chokidar ">=3.0.0 <4.0.0" 830 | immutable "^4.0.0" 831 | source-map-js ">=0.6.2 <2.0.0" 832 | 833 | semver@^7.3.8: 834 | version "7.5.4" 835 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" 836 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 837 | dependencies: 838 | lru-cache "^6.0.0" 839 | 840 | "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: 841 | version "1.0.2" 842 | resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 843 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 844 | 845 | to-regex-range@^5.0.1: 846 | version "5.0.1" 847 | resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 848 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 849 | dependencies: 850 | is-number "^7.0.0" 851 | 852 | typescript@^5.0.2: 853 | version "5.1.3" 854 | resolved "https://registry.npmmirror.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826" 855 | integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== 856 | 857 | uri-js@^4.2.2: 858 | version "4.4.1" 859 | resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 860 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 861 | dependencies: 862 | punycode "^2.1.0" 863 | 864 | vanilla-picker@^2.12.1: 865 | version "2.12.1" 866 | resolved "https://registry.npmmirror.com/vanilla-picker/-/vanilla-picker-2.12.1.tgz#6e619eecf553891b8d2d042b745a23c91f19f34c" 867 | integrity sha512-2qrEP9VYylKXbyzXKsbu2dferBTvqnlsr29XjHwFE+/MEp0VNj6oEUESLDtKZ7DWzGdSv1x/+ujqFZF+KsO3cg== 868 | dependencies: 869 | "@sphinxxxx/color-conversion" "^2.2.2" 870 | 871 | vite@^4.3.9: 872 | version "4.3.9" 873 | resolved "https://registry.npmmirror.com/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d" 874 | integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg== 875 | dependencies: 876 | esbuild "^0.17.5" 877 | postcss "^8.4.23" 878 | rollup "^3.21.0" 879 | optionalDependencies: 880 | fsevents "~2.3.2" 881 | 882 | vue-demi@*: 883 | version "0.13.1" 884 | resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.1.tgz#7604904c88be338418a10abbc94d5b8caa14cb8c" 885 | integrity sha512-xmkJ56koG3ptpLnpgmIzk9/4nFf4CqduSJbUM0OdPoU87NwRuZ6x49OLhjSa/fC15fV+5CbEnrxU4oyE022svg== 886 | 887 | vue-demi@>=0.14.5: 888 | version "0.14.5" 889 | resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz#676d0463d1a1266d5ab5cba932e043d8f5f2fbd9" 890 | integrity sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA== 891 | 892 | vue-router@4: 893 | version "4.1.1" 894 | resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.1.1.tgz#90cc533efafdcf90d157bdc20a376760cdb59c10" 895 | integrity sha512-Wp1mEf2xCwT0ez7o9JvgpfBp9JGnVb+dPERzXDbugTatzJAJ60VWOhJKifQty85k+jOreoFHER4r5fu062PhPw== 896 | dependencies: 897 | "@vue/devtools-api" "^6.1.4" 898 | 899 | vue-template-compiler@^2.7.14: 900 | version "2.7.14" 901 | resolved "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz#4545b7dfb88090744c1577ae5ac3f964e61634b1" 902 | integrity sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ== 903 | dependencies: 904 | de-indent "^1.0.2" 905 | he "^1.2.0" 906 | 907 | vue-tsc@^1.4.2: 908 | version "1.6.5" 909 | resolved "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.6.5.tgz#cd18804b12087c300b6c9ee2a1da41a63f11103e" 910 | integrity sha512-Wtw3J7CC+JM2OR56huRd5iKlvFWpvDiU+fO1+rqyu4V2nMTotShz4zbOZpW5g9fUOcjnyZYfBo5q5q+D/q27JA== 911 | dependencies: 912 | "@volar/vue-language-core" "1.6.5" 913 | "@volar/vue-typescript" "1.6.5" 914 | semver "^7.3.8" 915 | 916 | vue@^3.2.45: 917 | version "3.3.4" 918 | resolved "https://registry.npmmirror.com/vue/-/vue-3.3.4.tgz#8ed945d3873667df1d0fcf3b2463ada028f88bd6" 919 | integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw== 920 | dependencies: 921 | "@vue/compiler-dom" "3.3.4" 922 | "@vue/compiler-sfc" "3.3.4" 923 | "@vue/runtime-dom" "3.3.4" 924 | "@vue/server-renderer" "3.3.4" 925 | "@vue/shared" "3.3.4" 926 | 927 | yallist@^4.0.0: 928 | version "4.0.0" 929 | resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 930 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 931 | --------------------------------------------------------------------------------