├── .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 | 
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 |
5 |
6 |
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 |
27 |
--------------------------------------------------------------------------------
/src/components/ActionBar.vue:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
33 |
34 |
35 |
36 |
37 |
56 |
--------------------------------------------------------------------------------
/src/components/HelloWorld.vue:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 | {{ msg }}
12 |
13 |
14 | Recommended IDE setup:
15 | VS Code
16 | +
17 | Volar
18 |
19 |
20 | See README.md
for more information.
21 |
22 |
23 |
24 | Vite Docs
25 |
26 | |
27 | Vue 3 Docs
28 |
29 |
30 |
31 |
32 | Edit
33 | components/HelloWorld.vue
to test hot module replacement.
34 |
35 |
36 |
37 |
54 |
--------------------------------------------------------------------------------
/src/components/Pagination.vue:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
16 |
93 |
94 |
100 |
--------------------------------------------------------------------------------
/src/components/tabsChrome/Tab.vue:
--------------------------------------------------------------------------------
1 |
18 |
19 |
20 |
21 |
22 | {{ tab.title }}
23 |
24 |
29 |
32 |
35 |
36 |
37 |
38 |
106 |
--------------------------------------------------------------------------------
/src/components/tabsChrome/TabsChromeX.vue:
--------------------------------------------------------------------------------
1 |
29 |
30 |
31 |
32 |
38 |
39 |
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 |
6 |
7 |
404
8 |
9 |
10 |
11 |
13 |
--------------------------------------------------------------------------------
/src/views/common/Login.vue:
--------------------------------------------------------------------------------
1 |
31 |
32 |
33 |
34 |
35 |
{{ appName }}
36 |
Version {{ version }}
37 |
38 |
45 |
46 |
47 |
48 |
49 |
58 |
59 |
60 |
61 |
62 |
66 |
67 |
68 |
69 | 设置假token
70 |
71 |
72 |
73 |
74 |
75 |
127 |
--------------------------------------------------------------------------------
/src/views/dashboard/Index.vue:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 | 首页
8 |
9 |
10 |
27 |
--------------------------------------------------------------------------------
/src/views/layout/AsideMenu.vue:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 |
16 |
17 |

18 |
19 |
{{ appName }}
21 |
22 |
23 |
32 |
33 |
34 |
35 |
61 |
--------------------------------------------------------------------------------
/src/views/layout/HeaderBar.vue:
--------------------------------------------------------------------------------
1 |
23 |
24 |
25 |
51 |
52 |
53 |
79 |
--------------------------------------------------------------------------------
/src/views/layout/MainLayout.vue:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
63 |
--------------------------------------------------------------------------------
/src/views/layout/TabsChrome.vue:
--------------------------------------------------------------------------------
1 |
49 |
50 |
51 |
52 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | 关闭全部标签
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/src/views/layout/components/Breadcrumb.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
13 | {{ b.meta.title }}
14 |
15 |
16 |
17 |
18 |
21 |
--------------------------------------------------------------------------------
/src/views/layout/components/Fullscreen.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
21 |
--------------------------------------------------------------------------------
/src/views/layout/components/RouteMenu.vue:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 | {{ menu.meta.title }}
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | {{ menu.meta.title }}
27 |
28 |
29 |
30 |
33 |
--------------------------------------------------------------------------------
/src/views/layout/components/themeSwitch/Index.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
72 |
--------------------------------------------------------------------------------
/src/views/layout/components/themeSwitch/icons/Dark.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
--------------------------------------------------------------------------------
/src/views/layout/components/themeSwitch/icons/Light.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
--------------------------------------------------------------------------------
/src/views/system/demo/Index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 添加
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
21 |
22 |
23 |
24 | 编辑
25 |
26 |
27 | 删除
28 |
29 |
30 |
31 |
32 |
33 |
34 |
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 |
--------------------------------------------------------------------------------