Browse Source

第一次提交

龙三郎 1 year ago
commit
e50de3161d
100 changed files with 2358 additions and 0 deletions
  1. 1 0
      .env
  2. 23 0
      .gitignore
  3. 3 0
      .vscode/extensions.json
  4. 18 0
      README.md
  5. 1 0
      dist/assets/404-80c9a04b.js
  6. 1 0
      dist/assets/404-legacy-a2d57c64.js
  7. 1 0
      dist/assets/BasicLayout-2d41931e.css
  8. 0 0
      dist/assets/BasicLayout-fe39a6a5.js
  9. 0 0
      dist/assets/BasicLayout-legacy-715ccccf.js
  10. 1 0
      dist/assets/CusNavigation-0a2cb184.js
  11. 1 0
      dist/assets/CusNavigation-80bfff8f.css
  12. 1 0
      dist/assets/CusNavigation-legacy-868eec01.js
  13. 0 0
      dist/assets/CusNavigation.vue_vue_type_style_index_0_scoped_5e63f475_lang-c9f54a72.js
  14. 0 0
      dist/assets/CusNavigation.vue_vue_type_style_index_0_scoped_5e63f475_lang-legacy-aeac0d75.js
  15. 0 0
      dist/assets/Index-02a6ddee.js
  16. 1 0
      dist/assets/Index-07c1d2b0.css
  17. 1 0
      dist/assets/Index-11ebd19e.css
  18. 1 0
      dist/assets/Index-154fd69d.css
  19. 0 0
      dist/assets/Index-1b56237e.js
  20. 1 0
      dist/assets/Index-27dcd7b7.css
  21. 1 0
      dist/assets/Index-328fb3cd.css
  22. 1 0
      dist/assets/Index-3a0ecd66.css
  23. 0 0
      dist/assets/Index-3d769d87.js
  24. 1 0
      dist/assets/Index-42442670.css
  25. 1 0
      dist/assets/Index-5a84175d.css
  26. 0 0
      dist/assets/Index-5e70ec02.js
  27. 1 0
      dist/assets/Index-5eecf131.css
  28. 1 0
      dist/assets/Index-65580522.css
  29. 0 0
      dist/assets/Index-712b769a.js
  30. 1 0
      dist/assets/Index-881b9730.css
  31. 0 0
      dist/assets/Index-928e3754.js
  32. 0 0
      dist/assets/Index-9c91d6dd.js
  33. 1 0
      dist/assets/Index-a91ceb4b.css
  34. 0 0
      dist/assets/Index-ae60efaf.js
  35. 0 0
      dist/assets/Index-b19da82e.js
  36. 13 0
      dist/assets/Index-b386e8b8.js
  37. 0 0
      dist/assets/Index-cfb7cf0a.js
  38. 0 0
      dist/assets/Index-d39833e0.js
  39. 1 0
      dist/assets/Index-d9b1fdbd.css
  40. 0 0
      dist/assets/Index-dfd29d1b.js
  41. 1 0
      dist/assets/Index-e6063e89.js
  42. 0 0
      dist/assets/Index-e6c57f15.js
  43. 0 0
      dist/assets/Index-e951d49b.js
  44. 0 0
      dist/assets/Index-ed077df2.js
  45. 0 0
      dist/assets/Index-fc6d257b.js
  46. 0 0
      dist/assets/Index-legacy-0aea74db.js
  47. 0 0
      dist/assets/Index-legacy-15227177.js
  48. 0 0
      dist/assets/Index-legacy-244409d2.js
  49. 0 0
      dist/assets/Index-legacy-639e01f8.js
  50. 14 0
      dist/assets/Index-legacy-66cd97a0.js
  51. 0 0
      dist/assets/Index-legacy-828a1b2e.js
  52. 0 0
      dist/assets/Index-legacy-8a429b23.js
  53. 1 0
      dist/assets/Index-legacy-8a667505.js
  54. 0 0
      dist/assets/Index-legacy-90af1bac.js
  55. 0 0
      dist/assets/Index-legacy-93d17a38.js
  56. 0 0
      dist/assets/Index-legacy-9e61c413.js
  57. 0 0
      dist/assets/Index-legacy-9efa2701.js
  58. 0 0
      dist/assets/Index-legacy-ba23eca9.js
  59. 0 0
      dist/assets/Index-legacy-bc4f7b0b.js
  60. 0 0
      dist/assets/Index-legacy-d3be6646.js
  61. 0 0
      dist/assets/Index-legacy-e7fd1d21.js
  62. 0 0
      dist/assets/Index-legacy-ed33afb0.js
  63. 0 0
      dist/assets/Index-legacy-f4f6360d.js
  64. 1 0
      dist/assets/Index1-346bff09.js
  65. 0 0
      dist/assets/Index1-legacy-8c4c28bc.js
  66. 1 0
      dist/assets/ReloadOutlined-79e30c0a.js
  67. 1 0
      dist/assets/ReloadOutlined-legacy-dace4f0f.js
  68. 0 0
      dist/assets/index-3b8b93f4.js
  69. 0 0
      dist/assets/index-519a55fb.js
  70. 9 0
      dist/assets/index-ce998711.css
  71. 0 0
      dist/assets/index-legacy-db54d967.js
  72. 0 0
      dist/assets/index-legacy-f44ab23b.js
  73. 0 0
      dist/assets/polyfills-legacy-4a50e7d0.js
  74. 21 0
      dist/index.html
  75. 0 0
      dist/static/1.js
  76. BIN
      dist/static/images/login_bg.png
  77. BIN
      dist/static/images/logo.png
  78. BIN
      dist/static/images/logo2.png
  79. BIN
      dist/static/images/logo3.png
  80. 1 0
      dist/vite.svg
  81. 14 0
      index.html
  82. 1486 0
      package-lock.json
  83. 32 0
      package.json
  84. 0 0
      public/static/1.js
  85. BIN
      public/static/images/login_bg.png
  86. BIN
      public/static/images/logo.png
  87. BIN
      public/static/images/logo2.png
  88. BIN
      public/static/images/logo3.png
  89. 1 0
      public/vite.svg
  90. 12 0
      src/App.vue
  91. 6 0
      src/api/index.ts
  92. 223 0
      src/api/model/index.ts
  93. 1 0
      src/assets/vue.svg
  94. 66 0
      src/components/CusNavigation.vue
  95. 7 0
      src/components/icon/IconFont.ts
  96. 10 0
      src/components/index.ts
  97. 24 0
      src/components/modal/Index.vue
  98. 96 0
      src/layouts/BasicLayout.vue
  99. 77 0
      src/layouts/custom/CusHeader.vue
  100. 176 0
      src/layouts/custom/CusMenu.vue

+ 1 - 0
.env

@@ -0,0 +1 @@
+# VITE_APP_DEV = 123456

+ 23 - 0
.gitignore

@@ -0,0 +1,23 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 3 - 0
.vscode/extensions.json

@@ -0,0 +1,3 @@
+{
+  "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
+}

+ 18 - 0
README.md

@@ -0,0 +1,18 @@
+# Vue 3 + TypeScript + Vite
+
+This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
+
+## Recommended IDE Setup
+
+- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
+
+## Type Support For `.vue` Imports in TS
+
+TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
+
+If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
+
+1. Disable the built-in TypeScript Extension
+   1. Run `Extensions: Show Built-in Extensions` from VSCode's command palette
+   2. Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
+2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.

+ 1 - 0
dist/assets/404-80c9a04b.js

@@ -0,0 +1 @@
+import{d as e,r as o,o as s,b as a,w as n}from"./index-3b8b93f4.js";const l=e({__name:"404",setup(r){return(_,c)=>{const t=o("a-result");return s(),a(t,{status:"404",title:"404","sub-title":"对不起,您访问的页面不存在!"},{extra:n(()=>[]),_:1})}}});export{l as default};

+ 1 - 0
dist/assets/404-legacy-a2d57c64.js

@@ -0,0 +1 @@
+System.register(["./index-legacy-f44ab23b.js"],(function(t,e){"use strict";var n,r,u,s,i;return{setters:[function(t){n=t.d,r=t.r,u=t.o,s=t.b,i=t.w}],execute:function(){t("default",n({__name:"404",setup:function(t){return function(t,e){var n=r("a-result");return u(),s(n,{status:"404",title:"404","sub-title":"对不起,您访问的页面不存在!"},{extra:i((function(){return[]})),_:1})}}}))}}}));

+ 1 - 0
dist/assets/BasicLayout-2d41931e.css

@@ -0,0 +1 @@
+[data-v-4cc272fc] .ant-menu-inline .ant-menu-item-selected:after{opacity:0}[data-v-4cc272fc] .ant-menu-inline .ant-menu-item-selected:before{content:"";position:absolute;top:0;left:0;bottom:0;border-right:3px solid #0058FF}[data-v-4cc272fc] .ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#eef1ff}[data-v-4cc272fc] .ant-menu-inline .ant-menu-item-selected{color:#0058ff}[data-v-4cc272fc] .ant-menu-inline .ant-menu-item{padding:0 20px!important;margin:0;font-family:PingFangSC,PingFang SC}#components-layout .trigger[data-v-5c801f26]{font-size:18px;line-height:64px;padding:0 24px;cursor:pointer;transition:color .3s}#components-layout .trigger[data-v-5c801f26]:hover{color:#1890ff}.site-layout .site-layout-background[data-v-5c801f26]{background:#fff}.tr-content[data-v-5c801f26]::-webkit-scrollbar{width:2px;height:8px;background-color:#61b6eb}.tr-content[data-v-5c801f26]::-webkit-scrollbar-track{background:#eee}.tr-content[data-v-5c801f26]::-webkit-scrollbar-thumb{background:#61B6EB;border-radius:100px}.tr-content[data-v-5c801f26]::-webkit-scrollbar-thumb:hover{background:#61B6EB}.tr-content[data-v-5c801f26]::-webkit-scrollbar-corner{background:#61B6EB}[data-v-5c801f26] .ant-breadcrumb{font-size:12px}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/BasicLayout-fe39a6a5.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/BasicLayout-legacy-715ccccf.js


+ 1 - 0
dist/assets/CusNavigation-0a2cb184.js

@@ -0,0 +1 @@
+import{d as c,a as l,o,s as a,c as r,f as p,H as f,e as n,t as g,_ as d}from"./index-3b8b93f4.js";import{I as u}from"./CusNavigation.vue_vue_type_style_index_0_scoped_5e63f475_lang-c9f54a72.js";const m={style:{padding:"0px 0px 0px 0px",display:"flex","align-items":"center",height:"30px","margin-bottom":"20px"}},x={style:{"font-family":"PingFangSC, PingFang SC","font-weight":"600","font-size":"20px",color:"#191A1A","line-height":"30px","text-align":"justify","font-style":"normal"}},_=c({__name:"CusNavigation",props:{title:{type:String,default:"未知"},gobackabled:{type:Boolean,default:!1}},setup(e){const s=l(),i=t=>{console.log(t),s.go(-1)};return(t,y)=>(o(),a("div",m,[e.gobackabled?(o(),a("div",{key:0,class:"cus-goback",onClick:i},[r(p(u),{type:"icon-fanhui",style:{"font-size":"22px"}})])):f("",!0),n("div",x,[n("span",null,g(e.title),1)])]))}}),C=d(_,[["__scopeId","data-v-5e63f475"]]);export{C};

+ 1 - 0
dist/assets/CusNavigation-80bfff8f.css

@@ -0,0 +1 @@
+.cus-goback[data-v-5e63f475]{margin-right:3px}.cus-goback[data-v-5e63f475]:hover{cursor:pointer}

+ 1 - 0
dist/assets/CusNavigation-legacy-868eec01.js

@@ -0,0 +1 @@
+System.register(["./index-legacy-f44ab23b.js","./CusNavigation.vue_vue_type_style_index_0_scoped_5e63f475_lang-legacy-aeac0d75.js"],(function(e,t){"use strict";var n,i,a,o,s,l,c,g,u,f,p;return{setters:[function(e){n=e.d,i=e.a,a=e.o,o=e.s,s=e.c,l=e.f,c=e.H,g=e.e,u=e.t,f=e._},function(e){p=e.I}],execute:function(){var t={style:{padding:"0px 0px 0px 0px",display:"flex","align-items":"center",height:"30px","margin-bottom":"20px"}},r={style:{"font-family":"PingFangSC, PingFang SC","font-weight":"600","font-size":"20px",color:"#191A1A","line-height":"30px","text-align":"justify","font-style":"normal"}},d=n({__name:"CusNavigation",props:{title:{type:String,default:"未知"},gobackabled:{type:Boolean,default:!1}},setup:function(e){var n=i(),f=function(e){console.log(e),n.go(-1)};return function(n,i){return a(),o("div",t,[e.gobackabled?(a(),o("div",{key:0,class:"cus-goback",onClick:f},[s(l(p),{type:"icon-fanhui",style:{"font-size":"22px"}})])):c("",!0),g("div",r,[g("span",null,u(e.title),1)])])}}});e("C",f(d,[["__scopeId","data-v-5e63f475"]]))}}}));

File diff suppressed because it is too large
+ 0 - 0
dist/assets/CusNavigation.vue_vue_type_style_index_0_scoped_5e63f475_lang-c9f54a72.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/CusNavigation.vue_vue_type_style_index_0_scoped_5e63f475_lang-legacy-aeac0d75.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-02a6ddee.js


+ 1 - 0
dist/assets/Index-07c1d2b0.css

@@ -0,0 +1 @@
+[data-v-08b25017] .ant-table-wrapper{height:0px;flex-grow:1}[data-v-08b25017] .ant-spin-nested-loading{height:100%}[data-v-08b25017] .ant-spin-container{height:100%;display:flex;flex-direction:column}[data-v-08b25017] .ant-table{flex-grow:1;height:0px}[data-v-08b25017] .ant-table-container{height:100%;display:flex;flex-direction:column}[data-v-08b25017] .ant-table-body{overflow-y:auto!important;flex-grow:1;border-bottom:1px solid #eee;border-right:1px solid #eee}[data-v-08b25017] .ant-table-body::-webkit-scrollbar{width:1px;height:8px;background:#0058FF}[data-v-08b25017] .ant-table-body::-webkit-scrollbar-track{width:1px;background:#eee}[data-v-08b25017] .ant-table-body::-webkit-scrollbar-thumb{width:1px;background:#0058FF}[data-v-08b25017] .ant-table-body::-webkit-scrollbar-thumb:hover{background:#0058FF}[data-v-08b25017] .ant-table-body::-webkit-scrollbar-corner{width:1px;background:#eee}.cus-forbidden[data-v-08b25017]:hover{cursor:not-allowed}

+ 1 - 0
dist/assets/Index-11ebd19e.css

@@ -0,0 +1 @@
+[data-v-4b90fa19] .ant-table-wrapper{height:0px;flex-grow:1}[data-v-4b90fa19] .ant-spin-nested-loading{height:100%}[data-v-4b90fa19] .ant-spin-container{height:100%;display:flex;flex-direction:column}[data-v-4b90fa19] .ant-table{flex-grow:1;height:0px}[data-v-4b90fa19] .ant-table-container{height:100%}[data-v-4b90fa19] .ant-table-body{overflow-y:auto!important;height:100%;border-bottom:1px solid #eee;border-right:1px solid #eee}[data-v-4b90fa19] .ant-table-body::-webkit-scrollbar{width:1px;height:8px;background:#0058FF}[data-v-4b90fa19] .ant-table-body::-webkit-scrollbar-track{width:1px;background:#eee}[data-v-4b90fa19] .ant-table-body::-webkit-scrollbar-thumb{width:1px;background:#0058FF}[data-v-4b90fa19] .ant-table-body::-webkit-scrollbar-thumb:hover{background:#0058FF}[data-v-4b90fa19] .ant-table-body::-webkit-scrollbar-corner{width:1px;background:#eee}.cus-forbidden[data-v-4b90fa19]:hover{cursor:not-allowed}

+ 1 - 0
dist/assets/Index-154fd69d.css

@@ -0,0 +1 @@
+[data-v-9280ee8a] .ant-table-wrapper{height:0px;flex-grow:1}[data-v-9280ee8a] .ant-spin-nested-loading{height:100%}[data-v-9280ee8a] .ant-spin-container{height:100%;display:flex;flex-direction:column}[data-v-9280ee8a] .ant-table{flex-grow:1;height:0px}[data-v-9280ee8a] .ant-table-container{height:100%;display:flex;flex-direction:column}[data-v-9280ee8a] .ant-table-body{overflow-y:auto!important;flex-grow:1;border-bottom:1px solid #eee;border-right:1px solid #eee}[data-v-9280ee8a] .ant-table-body::-webkit-scrollbar{width:1px;height:8px;background:#0058FF}[data-v-9280ee8a] .ant-table-body::-webkit-scrollbar-track{width:1px;background:#eee}[data-v-9280ee8a] .ant-table-body::-webkit-scrollbar-thumb{width:1px;background:#0058FF}[data-v-9280ee8a] .ant-table-body::-webkit-scrollbar-thumb:hover{background:#0058FF}[data-v-9280ee8a] .ant-table-body::-webkit-scrollbar-corner{width:1px;background:#eee}.cus-forbidden[data-v-9280ee8a]:hover{cursor:not-allowed}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-1b56237e.js


+ 1 - 0
dist/assets/Index-27dcd7b7.css

@@ -0,0 +1 @@
+[data-v-f9b2cff5] .ant-table-wrapper{height:0px;flex-grow:1}[data-v-f9b2cff5] .ant-spin-nested-loading{height:100%}[data-v-f9b2cff5] .ant-spin-container{height:100%;display:flex;flex-direction:column}[data-v-f9b2cff5] .ant-table{flex-grow:1;height:0px}[data-v-f9b2cff5] .ant-table-container{height:100%}[data-v-f9b2cff5] .ant-table-body{overflow-y:auto!important;height:100%;border-bottom:1px solid #eee;border-right:1px solid #eee}[data-v-f9b2cff5] .ant-table-body::-webkit-scrollbar{width:1px;height:8px;background:#0058FF}[data-v-f9b2cff5] .ant-table-body::-webkit-scrollbar-track{width:1px;background:#eee}[data-v-f9b2cff5] .ant-table-body::-webkit-scrollbar-thumb{width:1px;background:#0058FF}[data-v-f9b2cff5] .ant-table-body::-webkit-scrollbar-thumb:hover{background:#0058FF}[data-v-f9b2cff5] .ant-table-body::-webkit-scrollbar-corner{width:1px;background:#eee}.cus-forbidden[data-v-f9b2cff5]:hover{cursor:not-allowed}

+ 1 - 0
dist/assets/Index-328fb3cd.css

@@ -0,0 +1 @@
+[data-v-64d51d71] .ant-table-wrapper{height:0px;flex-grow:1}[data-v-64d51d71] .ant-spin-nested-loading{height:100%}[data-v-64d51d71] .ant-spin-container{height:100%;display:flex;flex-direction:column}[data-v-64d51d71] .ant-table{flex-grow:1;height:0px}[data-v-64d51d71] .ant-table-container{height:100%;display:flex;flex-direction:column}[data-v-64d51d71] .ant-table-body{overflow-y:auto!important;flex-grow:1;border-bottom:1px solid #eee;border-right:1px solid #eee}[data-v-64d51d71] .ant-table-body::-webkit-scrollbar{width:1px;height:8px;background:#0058FF}[data-v-64d51d71] .ant-table-body::-webkit-scrollbar-track{width:1px;background:#eee}[data-v-64d51d71] .ant-table-body::-webkit-scrollbar-thumb{width:1px;background:#0058FF}[data-v-64d51d71] .ant-table-body::-webkit-scrollbar-thumb:hover{background:#0058FF}[data-v-64d51d71] .ant-table-body::-webkit-scrollbar-corner{width:1px;background:#eee}.cus-forbidden[data-v-64d51d71]:hover{cursor:not-allowed}

+ 1 - 0
dist/assets/Index-3a0ecd66.css

@@ -0,0 +1 @@
+[data-v-100e9f21] .ant-input-group-addon .ant-btn-primary{background:none;border:none;padding:0}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-3d769d87.js


+ 1 - 0
dist/assets/Index-42442670.css

@@ -0,0 +1 @@
+[data-v-c42bc88f] .ant-table-wrapper{height:0px;flex-grow:1}[data-v-c42bc88f] .ant-spin-nested-loading{height:100%}[data-v-c42bc88f] .ant-spin-container{height:100%;display:flex;flex-direction:column}[data-v-c42bc88f] .ant-table{flex-grow:1;height:0px}[data-v-c42bc88f] .ant-table-container{height:100%;display:flex;flex-direction:column}[data-v-c42bc88f] .ant-table-body{overflow-y:auto!important;flex-grow:1;border-bottom:1px solid #eee;border-right:1px solid #eee}[data-v-c42bc88f] .ant-table-body::-webkit-scrollbar{width:1px;height:8px;background:#0058FF}[data-v-c42bc88f] .ant-table-body::-webkit-scrollbar-track{width:1px;background:#eee}[data-v-c42bc88f] .ant-table-body::-webkit-scrollbar-thumb{width:1px;background:#0058FF}[data-v-c42bc88f] .ant-table-body::-webkit-scrollbar-thumb:hover{background:#0058FF}[data-v-c42bc88f] .ant-table-body::-webkit-scrollbar-corner{width:1px;background:#eee}.cus-forbidden[data-v-c42bc88f]:hover{cursor:not-allowed}

+ 1 - 0
dist/assets/Index-5a84175d.css

@@ -0,0 +1 @@
+[data-v-07ce491f] .ant-table-wrapper{height:0px;flex-grow:1}[data-v-07ce491f] .ant-spin-nested-loading{height:100%}[data-v-07ce491f] .ant-spin-container{height:100%;display:flex;flex-direction:column}[data-v-07ce491f] .ant-table{flex-grow:1;height:0px}[data-v-07ce491f] .ant-table-container{height:100%;display:flex;flex-direction:column}[data-v-07ce491f] .ant-table-body{overflow-y:auto!important;flex-grow:1;border-bottom:1px solid #eee;border-right:1px solid #eee}[data-v-07ce491f] .ant-table-body::-webkit-scrollbar{width:1px;height:8px;background:#0058FF}[data-v-07ce491f] .ant-table-body::-webkit-scrollbar-track{width:1px;background:#eee}[data-v-07ce491f] .ant-table-body::-webkit-scrollbar-thumb{width:1px;background:#0058FF}[data-v-07ce491f] .ant-table-body::-webkit-scrollbar-thumb:hover{background:#0058FF}[data-v-07ce491f] .ant-table-body::-webkit-scrollbar-corner{width:1px;background:#eee}.cus-forbidden[data-v-07ce491f]:hover{cursor:not-allowed}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-5e70ec02.js


+ 1 - 0
dist/assets/Index-5eecf131.css

@@ -0,0 +1 @@
+[data-v-3ed49d7b] .ant-input-group-addon .ant-btn-primary{background:none;border:none;padding:0}[data-v-3ed49d7b] .ant-tabs>.ant-tabs-nav .ant-tabs-nav-list{flex-grow:1}[data-v-3ed49d7b] .ant-tabs-tab{flex-grow:1;justify-content:center;color:#666a78;font-size:18px}[data-v-3ed49d7b] .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{color:#0058ff}[data-v-3ed49d7b] .ant-tabs-ink-bar{background-color:#0058ff}

+ 1 - 0
dist/assets/Index-65580522.css

@@ -0,0 +1 @@
+[data-v-b0004175] .ant-table-wrapper{height:0px;flex-grow:1}[data-v-b0004175] .ant-spin-nested-loading{height:100%}[data-v-b0004175] .ant-spin-container{height:100%;display:flex;flex-direction:column}[data-v-b0004175] .ant-table{flex-grow:1;height:0px}[data-v-b0004175] .ant-table-container{height:100%}[data-v-b0004175] .ant-table-body{overflow-y:auto!important;height:100%;border-bottom:1px solid #eee;border-right:1px solid #eee}[data-v-b0004175] .ant-table-body::-webkit-scrollbar{width:1px;height:8px;background:#0058FF}[data-v-b0004175] .ant-table-body::-webkit-scrollbar-track{width:1px;background:#eee}[data-v-b0004175] .ant-table-body::-webkit-scrollbar-thumb{width:1px;background:#0058FF}[data-v-b0004175] .ant-table-body::-webkit-scrollbar-thumb:hover{background:#0058FF}[data-v-b0004175] .ant-table-body::-webkit-scrollbar-corner{width:1px;background:#eee}.cus-forbidden[data-v-b0004175]:hover{cursor:not-allowed}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-712b769a.js


+ 1 - 0
dist/assets/Index-881b9730.css

@@ -0,0 +1 @@
+[data-v-c77c9745] .ant-table-wrapper{height:0px;flex-grow:1}[data-v-c77c9745] .ant-spin-nested-loading{height:100%}[data-v-c77c9745] .ant-spin-container{height:100%;display:flex;flex-direction:column}[data-v-c77c9745] .ant-table{flex-grow:1;height:0px}[data-v-c77c9745] .ant-table-container{height:100%;display:flex;flex-direction:column}[data-v-c77c9745] .ant-table-body{overflow-y:auto!important;flex-grow:1;border-bottom:1px solid #eee;border-right:1px solid #eee}[data-v-c77c9745] .ant-table-body::-webkit-scrollbar{width:1px;height:8px;background:#0058FF}[data-v-c77c9745] .ant-table-body::-webkit-scrollbar-track{width:1px;background:#eee}[data-v-c77c9745] .ant-table-body::-webkit-scrollbar-thumb{width:1px;background:#0058FF}[data-v-c77c9745] .ant-table-body::-webkit-scrollbar-thumb:hover{background:#0058FF}[data-v-c77c9745] .ant-table-body::-webkit-scrollbar-corner{width:1px;background:#eee}.cus-forbidden[data-v-c77c9745]:hover{cursor:not-allowed}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-928e3754.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-9c91d6dd.js


+ 1 - 0
dist/assets/Index-a91ceb4b.css

@@ -0,0 +1 @@
+[data-v-e95786a4] .ant-input-group-addon .ant-btn-primary{background:none;border-color:#d9d9d9}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-ae60efaf.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-b19da82e.js


File diff suppressed because it is too large
+ 13 - 0
dist/assets/Index-b386e8b8.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-cfb7cf0a.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-d39833e0.js


+ 1 - 0
dist/assets/Index-d9b1fdbd.css

@@ -0,0 +1 @@
+[data-v-46b60fa6] .ant-table-wrapper{height:0px;flex-grow:1}[data-v-46b60fa6] .ant-spin-nested-loading{height:100%}[data-v-46b60fa6] .ant-spin-container{height:100%;display:flex;flex-direction:column}[data-v-46b60fa6] .ant-table{flex-grow:1;height:0px}[data-v-46b60fa6] .ant-table-container{height:100%;display:flex;flex-direction:column}[data-v-46b60fa6] .ant-table-body{overflow-y:auto!important;flex-grow:1;border-bottom:1px solid #eee;border-right:1px solid #eee}[data-v-46b60fa6] .ant-table-body::-webkit-scrollbar{width:1px;height:8px;background:#0058FF}[data-v-46b60fa6] .ant-table-body::-webkit-scrollbar-track{width:1px;background:#eee}[data-v-46b60fa6] .ant-table-body::-webkit-scrollbar-thumb{width:1px;background:#0058FF}[data-v-46b60fa6] .ant-table-body::-webkit-scrollbar-thumb:hover{background:#0058FF}[data-v-46b60fa6] .ant-table-body::-webkit-scrollbar-corner{width:1px;background:#eee}.cus-forbidden[data-v-46b60fa6]:hover{cursor:not-allowed}

File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-dfd29d1b.js


+ 1 - 0
dist/assets/Index-e6063e89.js

@@ -0,0 +1 @@
+import{d as e,o as n,s as o,e as s}from"./index-3b8b93f4.js";const t=s("span",null,"大屏功能正在开发中......",-1),a=[t],l=e({__name:"Index",setup(_){return(c,r)=>(n(),o("div",null,a))}});export{l as default};

File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-e6c57f15.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-e951d49b.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-ed077df2.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-fc6d257b.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-0aea74db.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-15227177.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-244409d2.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-639e01f8.js


File diff suppressed because it is too large
+ 14 - 0
dist/assets/Index-legacy-66cd97a0.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-828a1b2e.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-8a429b23.js


+ 1 - 0
dist/assets/Index-legacy-8a667505.js

@@ -0,0 +1 @@
+System.register(["./index-legacy-f44ab23b.js"],(function(e,n){"use strict";var t,u,r,s;return{setters:[function(e){t=e.d,u=e.o,r=e.s,s=e.e}],execute:function(){var n=[s("span",null,"大屏功能正在开发中......",-1)];e("default",t({__name:"Index",setup:function(e){return function(e,t){return u(),r("div",null,n)}}}))}}}));

File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-90af1bac.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-93d17a38.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-9e61c413.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-9efa2701.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-ba23eca9.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-bc4f7b0b.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-d3be6646.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-e7fd1d21.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-ed33afb0.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index-legacy-f4f6360d.js


+ 1 - 0
dist/assets/Index1-346bff09.js

@@ -0,0 +1 @@
+import{d as n,l as t,o as s,s as l}from"./index-3b8b93f4.js";const a=n({__name:"Index1",setup(c){return t(async()=>{console.log("1...");const o=new Promise(e=>{console.log("2..."),setTimeout(()=>{e(8)},3e3)}).then(e=>(setTimeout(()=>{console.log("3...",e)},3e3),Promise.reject("p"))).then(e=>(console.log("5...",e),"123456")).catch(e=>(console.log("4...",e),"q"));console.log("a",o),setTimeout(()=>{console.log("a",o)},1e4)}),(o,e)=>(s(),l("div",null,"login1"))}});export{a as default};

File diff suppressed because it is too large
+ 0 - 0
dist/assets/Index1-legacy-8c4c28bc.js


+ 1 - 0
dist/assets/ReloadOutlined-79e30c0a.js

@@ -0,0 +1 @@
+import{c as o,A as i}from"./index-3b8b93f4.js";var u={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M909.1 209.3l-56.4 44.1C775.8 155.1 656.2 92 521.9 92 290 92 102.3 279.5 102 511.5 101.7 743.7 289.8 932 521.9 932c181.3 0 335.8-115 394.6-276.1 1.5-4.2-.7-8.9-4.9-10.3l-56.7-19.5a8 8 0 00-10.1 4.8c-1.8 5-3.8 10-5.9 14.9-17.3 41-42.1 77.8-73.7 109.4A344.77 344.77 0 01655.9 829c-42.3 17.9-87.4 27-133.8 27-46.5 0-91.5-9.1-133.8-27A341.5 341.5 0 01279 755.2a342.16 342.16 0 01-73.7-109.4c-17.9-42.4-27-87.4-27-133.9s9.1-91.5 27-133.9c17.3-41 42.1-77.8 73.7-109.4 31.6-31.6 68.4-56.4 109.3-73.8 42.3-17.9 87.4-27 133.8-27 46.5 0 91.5 9.1 133.8 27a341.5 341.5 0 01109.3 73.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.6 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c-.1-6.6-7.8-10.3-13-6.2z"}}]},name:"reload",theme:"outlined"};const d=u;function c(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(t);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(t).filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable}))),n.forEach(function(a){f(r,a,t[a])})}return r}function f(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var l=function(e,t){var n=c({},e,t.attrs);return o(i,c({},n,{icon:d}),null)};l.displayName="ReloadOutlined";l.inheritAttrs=!1;const O=l;export{O as R};

+ 1 - 0
dist/assets/ReloadOutlined-legacy-dace4f0f.js

@@ -0,0 +1 @@
+System.register(["./index-legacy-f44ab23b.js"],(function(e,t){"use strict";var r,n;return{setters:[function(e){r=e.c,n=e.A}],execute:function(){var t={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M909.1 209.3l-56.4 44.1C775.8 155.1 656.2 92 521.9 92 290 92 102.3 279.5 102 511.5 101.7 743.7 289.8 932 521.9 932c181.3 0 335.8-115 394.6-276.1 1.5-4.2-.7-8.9-4.9-10.3l-56.7-19.5a8 8 0 00-10.1 4.8c-1.8 5-3.8 10-5.9 14.9-17.3 41-42.1 77.8-73.7 109.4A344.77 344.77 0 01655.9 829c-42.3 17.9-87.4 27-133.8 27-46.5 0-91.5-9.1-133.8-27A341.5 341.5 0 01279 755.2a342.16 342.16 0 01-73.7-109.4c-17.9-42.4-27-87.4-27-133.9s9.1-91.5 27-133.9c17.3-41 42.1-77.8 73.7-109.4 31.6-31.6 68.4-56.4 109.3-73.8 42.3-17.9 87.4-27 133.8-27 46.5 0 91.5 9.1 133.8 27a341.5 341.5 0 01109.3 73.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.6 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c-.1-6.6-7.8-10.3-13-6.2z"}}]},name:"reload",theme:"outlined"};function c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?Object(arguments[t]):{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){a(e,t,r[t])}))}return e}function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var o=function(e,a){var o=c({},e,a.attrs);return r(n,c({},o,{icon:t}),null)};o.displayName="ReloadOutlined",o.inheritAttrs=!1,e("R",o)}}}));

File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-3b8b93f4.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-519a55fb.js


File diff suppressed because it is too large
+ 9 - 0
dist/assets/index-ce998711.css


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-legacy-db54d967.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-legacy-f44ab23b.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/polyfills-legacy-4a50e7d0.js


+ 21 - 0
dist/index.html

@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <link rel="icon" type="image/svg+xml" href="/static/images/logo2.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>驼人物联网平台</title>
+    <script type="text/javascript" src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=r6wmhUcG2BBUmqP4OjRlxLOMbQ3F1Ptn"></script>
+    <script type="module" crossorigin src="/assets/index-3b8b93f4.js"></script>
+    <link rel="stylesheet" href="/assets/index-ce998711.css">
+    <script type="module">import.meta.url;import("_").catch(()=>1);(async function*(){})().next();if(location.protocol!="file:"){window.__vite_is_modern_browser=true}</script>
+    <script type="module">!function(){if(window.__vite_is_modern_browser)return;console.warn("vite: loading legacy chunks, syntax error above and the same error below should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}();</script>
+  </head>
+  <body>
+    <div id="app"></div>
+    
+    <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
+    <script nomodule crossorigin id="vite-legacy-polyfill" src="/assets/polyfills-legacy-4a50e7d0.js"></script>
+    <script nomodule crossorigin id="vite-legacy-entry" data-src="/assets/index-legacy-f44ab23b.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+  </body>
+</html>

+ 0 - 0
dist/static/1.js


BIN
dist/static/images/login_bg.png


BIN
dist/static/images/logo.png


BIN
dist/static/images/logo2.png


BIN
dist/static/images/logo3.png


+ 1 - 0
dist/vite.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

+ 14 - 0
index.html

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <link rel="icon" type="image/svg+xml" href="/static/images/logo2.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>驼人物联网平台</title>
+    <script type="text/javascript" src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=r6wmhUcG2BBUmqP4OjRlxLOMbQ3F1Ptn"></script>
+  </head>
+  <body>
+    <div id="app"></div>
+    <script type="module" src="/src/main.ts"></script>
+  </body>
+</html>

+ 1486 - 0
package-lock.json

@@ -0,0 +1,1486 @@
+{
+  "name": "tuoren-iot-platform-view",
+  "version": "0.0.0",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "tuoren-iot-platform-view",
+      "version": "0.0.0",
+      "dependencies": {
+        "@ant-design/icons-vue": "^6.1.0",
+        "ant-design-vue": "^3.2.20",
+        "path": "^0.12.7",
+        "vue": "^3.2.47",
+        "vue-router": "4"
+      },
+      "devDependencies": {
+        "@types/node": "^20.3.1",
+        "@vitejs/plugin-vue": "^4.1.0",
+        "typescript": "^5.0.2",
+        "vite": "^4.3.9",
+        "vue-tsc": "^1.4.2"
+      }
+    },
+    "node_modules/@ant-design/colors": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz",
+      "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@ctrl/tinycolor": "^3.4.0"
+      }
+    },
+    "node_modules/@ant-design/icons-svg": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz",
+      "integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==",
+      "license": "MIT"
+    },
+    "node_modules/@ant-design/icons-vue": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz",
+      "integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==",
+      "dependencies": {
+        "@ant-design/colors": "^6.0.0",
+        "@ant-design/icons-svg": "^4.2.1"
+      },
+      "peerDependencies": {
+        "vue": ">=3.0.3"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.22.4",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.4.tgz",
+      "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==",
+      "license": "MIT",
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/runtime": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.5.tgz",
+      "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
+      "license": "MIT",
+      "dependencies": {
+        "regenerator-runtime": "^0.13.11"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@ctrl/tinycolor": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz",
+      "integrity": "sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@esbuild/win32-x64": {
+      "version": "0.17.19",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
+      "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.4.15",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+      "license": "MIT"
+    },
+    "node_modules/@simonwep/pickr": {
+      "version": "1.8.2",
+      "resolved": "https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.8.2.tgz",
+      "integrity": "sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==",
+      "license": "MIT",
+      "dependencies": {
+        "core-js": "^3.15.1",
+        "nanopop": "^2.1.0"
+      }
+    },
+    "node_modules/@types/node": {
+      "version": "20.3.1",
+      "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.3.1.tgz",
+      "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==",
+      "dev": true
+    },
+    "node_modules/@vitejs/plugin-vue": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz",
+      "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "vite": "^4.0.0",
+        "vue": "^3.2.25"
+      }
+    },
+    "node_modules/@volar/language-core": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.4.1.tgz",
+      "integrity": "sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@volar/source-map": "1.4.1"
+      }
+    },
+    "node_modules/@volar/source-map": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.4.1.tgz",
+      "integrity": "sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "muggle-string": "^0.2.2"
+      }
+    },
+    "node_modules/@volar/typescript": {
+      "version": "1.4.1-patch.2",
+      "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.4.1-patch.2.tgz",
+      "integrity": "sha512-lPFYaGt8OdMEzNGJJChF40uYqMO4Z/7Q9fHPQC/NRVtht43KotSXLrkPandVVMf9aPbiJ059eAT+fwHGX16k4w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@volar/language-core": "1.4.1"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      }
+    },
+    "node_modules/@volar/vue-language-core": {
+      "version": "1.6.5",
+      "resolved": "https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.6.5.tgz",
+      "integrity": "sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@volar/language-core": "1.4.1",
+        "@volar/source-map": "1.4.1",
+        "@vue/compiler-dom": "^3.3.0",
+        "@vue/compiler-sfc": "^3.3.0",
+        "@vue/reactivity": "^3.3.0",
+        "@vue/shared": "^3.3.0",
+        "minimatch": "^9.0.0",
+        "muggle-string": "^0.2.2",
+        "vue-template-compiler": "^2.7.14"
+      }
+    },
+    "node_modules/@volar/vue-typescript": {
+      "version": "1.6.5",
+      "resolved": "https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.6.5.tgz",
+      "integrity": "sha512-er9rVClS4PHztMUmtPMDTl+7c7JyrxweKSAEe/o/Noeq2bQx6v3/jZHVHBe8ZNUti5ubJL/+Tg8L3bzmlalV8A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@volar/typescript": "1.4.1-patch.2",
+        "@volar/vue-language-core": "1.6.5"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      }
+    },
+    "node_modules/@vue/compiler-core": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
+      "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.21.3",
+        "@vue/shared": "3.3.4",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "node_modules/@vue/compiler-dom": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
+      "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-core": "3.3.4",
+        "@vue/shared": "3.3.4"
+      }
+    },
+    "node_modules/@vue/compiler-sfc": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
+      "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.20.15",
+        "@vue/compiler-core": "3.3.4",
+        "@vue/compiler-dom": "3.3.4",
+        "@vue/compiler-ssr": "3.3.4",
+        "@vue/reactivity-transform": "3.3.4",
+        "@vue/shared": "3.3.4",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.0",
+        "postcss": "^8.1.10",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "node_modules/@vue/compiler-ssr": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
+      "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.3.4",
+        "@vue/shared": "3.3.4"
+      }
+    },
+    "node_modules/@vue/devtools-api": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
+      "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==",
+      "license": "MIT"
+    },
+    "node_modules/@vue/reactivity": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.4.tgz",
+      "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/shared": "3.3.4"
+      }
+    },
+    "node_modules/@vue/reactivity-transform": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
+      "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.20.15",
+        "@vue/compiler-core": "3.3.4",
+        "@vue/shared": "3.3.4",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.0"
+      }
+    },
+    "node_modules/@vue/runtime-core": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz",
+      "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/reactivity": "3.3.4",
+        "@vue/shared": "3.3.4"
+      }
+    },
+    "node_modules/@vue/runtime-dom": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz",
+      "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/runtime-core": "3.3.4",
+        "@vue/shared": "3.3.4",
+        "csstype": "^3.1.1"
+      }
+    },
+    "node_modules/@vue/server-renderer": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz",
+      "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.3.4",
+        "@vue/shared": "3.3.4"
+      },
+      "peerDependencies": {
+        "vue": "3.3.4"
+      }
+    },
+    "node_modules/@vue/shared": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.4.tgz",
+      "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==",
+      "license": "MIT"
+    },
+    "node_modules/ant-design-vue": {
+      "version": "3.2.20",
+      "resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-3.2.20.tgz",
+      "integrity": "sha512-YWpMfGaGoRastIXEYfCoJiaRiDHk4chqtYhlKQM5GqPt6NfvrM1Vg2e60yHtjxlZjed91wCMm0rAmyUr7Hwzdg==",
+      "license": "MIT",
+      "dependencies": {
+        "@ant-design/colors": "^6.0.0",
+        "@ant-design/icons-vue": "^6.1.0",
+        "@babel/runtime": "^7.10.5",
+        "@ctrl/tinycolor": "^3.4.0",
+        "@simonwep/pickr": "~1.8.0",
+        "array-tree-filter": "^2.1.0",
+        "async-validator": "^4.0.0",
+        "dayjs": "^1.10.5",
+        "dom-align": "^1.12.1",
+        "dom-scroll-into-view": "^2.0.0",
+        "lodash": "^4.17.21",
+        "lodash-es": "^4.17.15",
+        "resize-observer-polyfill": "^1.5.1",
+        "scroll-into-view-if-needed": "^2.2.25",
+        "shallow-equal": "^1.0.0",
+        "vue-types": "^3.0.0",
+        "warning": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=12.22.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/ant-design-vue"
+      },
+      "peerDependencies": {
+        "vue": ">=3.2.0"
+      }
+    },
+    "node_modules/array-tree-filter": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz",
+      "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==",
+      "license": "MIT"
+    },
+    "node_modules/async-validator": {
+      "version": "4.2.5",
+      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
+      "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
+      "license": "MIT"
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/compute-scroll-into-view": {
+      "version": "1.0.20",
+      "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz",
+      "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==",
+      "license": "MIT"
+    },
+    "node_modules/core-js": {
+      "version": "3.31.0",
+      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.31.0.tgz",
+      "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
+    },
+    "node_modules/csstype": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz",
+      "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
+      "license": "MIT"
+    },
+    "node_modules/dayjs": {
+      "version": "1.11.8",
+      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.8.tgz",
+      "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==",
+      "license": "MIT"
+    },
+    "node_modules/de-indent": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz",
+      "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/dom-align": {
+      "version": "1.12.4",
+      "resolved": "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.4.tgz",
+      "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==",
+      "license": "MIT"
+    },
+    "node_modules/dom-scroll-into-view": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz",
+      "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==",
+      "license": "MIT"
+    },
+    "node_modules/esbuild": {
+      "version": "0.17.19",
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.17.19.tgz",
+      "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "optionalDependencies": {
+        "@esbuild/android-arm": "0.17.19",
+        "@esbuild/android-arm64": "0.17.19",
+        "@esbuild/android-x64": "0.17.19",
+        "@esbuild/darwin-arm64": "0.17.19",
+        "@esbuild/darwin-x64": "0.17.19",
+        "@esbuild/freebsd-arm64": "0.17.19",
+        "@esbuild/freebsd-x64": "0.17.19",
+        "@esbuild/linux-arm": "0.17.19",
+        "@esbuild/linux-arm64": "0.17.19",
+        "@esbuild/linux-ia32": "0.17.19",
+        "@esbuild/linux-loong64": "0.17.19",
+        "@esbuild/linux-mips64el": "0.17.19",
+        "@esbuild/linux-ppc64": "0.17.19",
+        "@esbuild/linux-riscv64": "0.17.19",
+        "@esbuild/linux-s390x": "0.17.19",
+        "@esbuild/linux-x64": "0.17.19",
+        "@esbuild/netbsd-x64": "0.17.19",
+        "@esbuild/openbsd-x64": "0.17.19",
+        "@esbuild/sunos-x64": "0.17.19",
+        "@esbuild/win32-arm64": "0.17.19",
+        "@esbuild/win32-ia32": "0.17.19",
+        "@esbuild/win32-x64": "0.17.19"
+      }
+    },
+    "node_modules/estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+      "license": "MIT"
+    },
+    "node_modules/he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz",
+      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "he": "bin/he"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+      "license": "ISC"
+    },
+    "node_modules/is-plain-object": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz",
+      "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "license": "MIT"
+    },
+    "node_modules/lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "license": "MIT"
+    },
+    "node_modules/lodash-es": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
+      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+      "license": "MIT"
+    },
+    "node_modules/loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "license": "MIT",
+      "dependencies": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      },
+      "bin": {
+        "loose-envify": "cli.js"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.30.0",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.0.tgz",
+      "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.4.13"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.1.tgz",
+      "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/muggle-string": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.2.2.tgz",
+      "integrity": "sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz",
+      "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/nanopop": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/nanopop/-/nanopop-2.3.0.tgz",
+      "integrity": "sha512-fzN+T2K7/Ah25XU02MJkPZ5q4Tj5FpjmIYq4rvoHX4yb16HzFdCO6JxFFn5Y/oBhQ8no8fUZavnyIv9/+xkBBw==",
+      "license": "MIT"
+    },
+    "node_modules/path": {
+      "version": "0.12.7",
+      "resolved": "https://registry.npmmirror.com/path/-/path-0.12.7.tgz",
+      "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==",
+      "license": "MIT",
+      "dependencies": {
+        "process": "^0.11.1",
+        "util": "^0.10.3"
+      }
+    },
+    "node_modules/picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "license": "ISC"
+    },
+    "node_modules/postcss": {
+      "version": "8.4.24",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.24.tgz",
+      "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "nanoid": "^3.3.6",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz",
+      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
+    "node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+      "license": "MIT"
+    },
+    "node_modules/resize-observer-polyfill": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==",
+      "license": "MIT"
+    },
+    "node_modules/rollup": {
+      "version": "3.23.1",
+      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.23.1.tgz",
+      "integrity": "sha512-ybRdFVHOoljGEFILHLd2g/qateqUdjE6YS41WXq4p3C/WwD3xtWxV4FYWETA1u9TeXQc5K8L8zHE5d/scOvrOQ==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=14.18.0",
+        "npm": ">=8.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/scroll-into-view-if-needed": {
+      "version": "2.2.31",
+      "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz",
+      "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==",
+      "license": "MIT",
+      "dependencies": {
+        "compute-scroll-into-view": "^1.0.20"
+      }
+    },
+    "node_modules/semver": {
+      "version": "7.5.1",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.1.tgz",
+      "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/shallow-equal": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz",
+      "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==",
+      "license": "MIT"
+    },
+    "node_modules/source-map-js": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/typescript": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.1.3.tgz",
+      "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=14.17"
+      }
+    },
+    "node_modules/util": {
+      "version": "0.10.4",
+      "resolved": "https://registry.npmmirror.com/util/-/util-0.10.4.tgz",
+      "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "2.0.3"
+      }
+    },
+    "node_modules/vite": {
+      "version": "4.3.9",
+      "resolved": "https://registry.npmmirror.com/vite/-/vite-4.3.9.tgz",
+      "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "esbuild": "^0.17.5",
+        "postcss": "^8.4.23",
+        "rollup": "^3.21.0"
+      },
+      "bin": {
+        "vite": "bin/vite.js"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      },
+      "peerDependencies": {
+        "@types/node": ">= 14",
+        "less": "*",
+        "sass": "*",
+        "stylus": "*",
+        "sugarss": "*",
+        "terser": "^5.4.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "terser": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.4.tgz",
+      "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.3.4",
+        "@vue/compiler-sfc": "3.3.4",
+        "@vue/runtime-dom": "3.3.4",
+        "@vue/server-renderer": "3.3.4",
+        "@vue/shared": "3.3.4"
+      }
+    },
+    "node_modules/vue-router": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.2.tgz",
+      "integrity": "sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-api": "^6.5.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/posva"
+      },
+      "peerDependencies": {
+        "vue": "^3.2.0"
+      }
+    },
+    "node_modules/vue-template-compiler": {
+      "version": "2.7.14",
+      "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz",
+      "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "de-indent": "^1.0.2",
+        "he": "^1.2.0"
+      }
+    },
+    "node_modules/vue-tsc": {
+      "version": "1.6.5",
+      "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.6.5.tgz",
+      "integrity": "sha512-Wtw3J7CC+JM2OR56huRd5iKlvFWpvDiU+fO1+rqyu4V2nMTotShz4zbOZpW5g9fUOcjnyZYfBo5q5q+D/q27JA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@volar/vue-language-core": "1.6.5",
+        "@volar/vue-typescript": "1.6.5",
+        "semver": "^7.3.8"
+      },
+      "bin": {
+        "vue-tsc": "bin/vue-tsc.js"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      }
+    },
+    "node_modules/vue-types": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/vue-types/-/vue-types-3.0.2.tgz",
+      "integrity": "sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==",
+      "license": "MIT",
+      "dependencies": {
+        "is-plain-object": "3.0.1"
+      },
+      "engines": {
+        "node": ">=10.15.0"
+      },
+      "peerDependencies": {
+        "vue": "^3.0.0"
+      }
+    },
+    "node_modules/warning": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz",
+      "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+      "license": "MIT",
+      "dependencies": {
+        "loose-envify": "^1.0.0"
+      }
+    },
+    "node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "license": "ISC"
+    }
+  },
+  "dependencies": {
+    "@ant-design/colors": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz",
+      "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==",
+      "requires": {
+        "@ctrl/tinycolor": "^3.4.0"
+      }
+    },
+    "@ant-design/icons-svg": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz",
+      "integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw=="
+    },
+    "@ant-design/icons-vue": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz",
+      "integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==",
+      "requires": {
+        "@ant-design/colors": "^6.0.0",
+        "@ant-design/icons-svg": "^4.2.1"
+      }
+    },
+    "@babel/parser": {
+      "version": "7.22.4",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.4.tgz",
+      "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA=="
+    },
+    "@babel/runtime": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.5.tgz",
+      "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
+      "requires": {
+        "regenerator-runtime": "^0.13.11"
+      }
+    },
+    "@ctrl/tinycolor": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz",
+      "integrity": "sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ=="
+    },
+    "@esbuild/win32-x64": {
+      "version": "0.17.19",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
+      "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
+      "dev": true,
+      "optional": true
+    },
+    "@jridgewell/sourcemap-codec": {
+      "version": "1.4.15",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+    },
+    "@simonwep/pickr": {
+      "version": "1.8.2",
+      "resolved": "https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.8.2.tgz",
+      "integrity": "sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==",
+      "requires": {
+        "core-js": "^3.15.1",
+        "nanopop": "^2.1.0"
+      }
+    },
+    "@types/node": {
+      "version": "20.3.1",
+      "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.3.1.tgz",
+      "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==",
+      "dev": true
+    },
+    "@vitejs/plugin-vue": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz",
+      "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==",
+      "dev": true,
+      "requires": {}
+    },
+    "@volar/language-core": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.4.1.tgz",
+      "integrity": "sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ==",
+      "dev": true,
+      "requires": {
+        "@volar/source-map": "1.4.1"
+      }
+    },
+    "@volar/source-map": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.4.1.tgz",
+      "integrity": "sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA==",
+      "dev": true,
+      "requires": {
+        "muggle-string": "^0.2.2"
+      }
+    },
+    "@volar/typescript": {
+      "version": "1.4.1-patch.2",
+      "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.4.1-patch.2.tgz",
+      "integrity": "sha512-lPFYaGt8OdMEzNGJJChF40uYqMO4Z/7Q9fHPQC/NRVtht43KotSXLrkPandVVMf9aPbiJ059eAT+fwHGX16k4w==",
+      "dev": true,
+      "requires": {
+        "@volar/language-core": "1.4.1"
+      }
+    },
+    "@volar/vue-language-core": {
+      "version": "1.6.5",
+      "resolved": "https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.6.5.tgz",
+      "integrity": "sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg==",
+      "dev": true,
+      "requires": {
+        "@volar/language-core": "1.4.1",
+        "@volar/source-map": "1.4.1",
+        "@vue/compiler-dom": "^3.3.0",
+        "@vue/compiler-sfc": "^3.3.0",
+        "@vue/reactivity": "^3.3.0",
+        "@vue/shared": "^3.3.0",
+        "minimatch": "^9.0.0",
+        "muggle-string": "^0.2.2",
+        "vue-template-compiler": "^2.7.14"
+      }
+    },
+    "@volar/vue-typescript": {
+      "version": "1.6.5",
+      "resolved": "https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.6.5.tgz",
+      "integrity": "sha512-er9rVClS4PHztMUmtPMDTl+7c7JyrxweKSAEe/o/Noeq2bQx6v3/jZHVHBe8ZNUti5ubJL/+Tg8L3bzmlalV8A==",
+      "dev": true,
+      "requires": {
+        "@volar/typescript": "1.4.1-patch.2",
+        "@volar/vue-language-core": "1.6.5"
+      }
+    },
+    "@vue/compiler-core": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
+      "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
+      "requires": {
+        "@babel/parser": "^7.21.3",
+        "@vue/shared": "3.3.4",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "@vue/compiler-dom": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
+      "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
+      "requires": {
+        "@vue/compiler-core": "3.3.4",
+        "@vue/shared": "3.3.4"
+      }
+    },
+    "@vue/compiler-sfc": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
+      "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
+      "requires": {
+        "@babel/parser": "^7.20.15",
+        "@vue/compiler-core": "3.3.4",
+        "@vue/compiler-dom": "3.3.4",
+        "@vue/compiler-ssr": "3.3.4",
+        "@vue/reactivity-transform": "3.3.4",
+        "@vue/shared": "3.3.4",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.0",
+        "postcss": "^8.1.10",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "@vue/compiler-ssr": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
+      "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
+      "requires": {
+        "@vue/compiler-dom": "3.3.4",
+        "@vue/shared": "3.3.4"
+      }
+    },
+    "@vue/devtools-api": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
+      "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
+    },
+    "@vue/reactivity": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.4.tgz",
+      "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==",
+      "requires": {
+        "@vue/shared": "3.3.4"
+      }
+    },
+    "@vue/reactivity-transform": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
+      "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
+      "requires": {
+        "@babel/parser": "^7.20.15",
+        "@vue/compiler-core": "3.3.4",
+        "@vue/shared": "3.3.4",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.0"
+      }
+    },
+    "@vue/runtime-core": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz",
+      "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==",
+      "requires": {
+        "@vue/reactivity": "3.3.4",
+        "@vue/shared": "3.3.4"
+      }
+    },
+    "@vue/runtime-dom": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz",
+      "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==",
+      "requires": {
+        "@vue/runtime-core": "3.3.4",
+        "@vue/shared": "3.3.4",
+        "csstype": "^3.1.1"
+      }
+    },
+    "@vue/server-renderer": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz",
+      "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==",
+      "requires": {
+        "@vue/compiler-ssr": "3.3.4",
+        "@vue/shared": "3.3.4"
+      }
+    },
+    "@vue/shared": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.4.tgz",
+      "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
+    },
+    "ant-design-vue": {
+      "version": "3.2.20",
+      "resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-3.2.20.tgz",
+      "integrity": "sha512-YWpMfGaGoRastIXEYfCoJiaRiDHk4chqtYhlKQM5GqPt6NfvrM1Vg2e60yHtjxlZjed91wCMm0rAmyUr7Hwzdg==",
+      "requires": {
+        "@ant-design/colors": "^6.0.0",
+        "@ant-design/icons-vue": "^6.1.0",
+        "@babel/runtime": "^7.10.5",
+        "@ctrl/tinycolor": "^3.4.0",
+        "@simonwep/pickr": "~1.8.0",
+        "array-tree-filter": "^2.1.0",
+        "async-validator": "^4.0.0",
+        "dayjs": "^1.10.5",
+        "dom-align": "^1.12.1",
+        "dom-scroll-into-view": "^2.0.0",
+        "lodash": "^4.17.21",
+        "lodash-es": "^4.17.15",
+        "resize-observer-polyfill": "^1.5.1",
+        "scroll-into-view-if-needed": "^2.2.25",
+        "shallow-equal": "^1.0.0",
+        "vue-types": "^3.0.0",
+        "warning": "^4.0.0"
+      }
+    },
+    "array-tree-filter": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz",
+      "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw=="
+    },
+    "async-validator": {
+      "version": "4.2.5",
+      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
+      "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
+    },
+    "balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "dev": true
+    },
+    "brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "requires": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "compute-scroll-into-view": {
+      "version": "1.0.20",
+      "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz",
+      "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg=="
+    },
+    "core-js": {
+      "version": "3.31.0",
+      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.31.0.tgz",
+      "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ=="
+    },
+    "csstype": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz",
+      "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+    },
+    "dayjs": {
+      "version": "1.11.8",
+      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.8.tgz",
+      "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ=="
+    },
+    "de-indent": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz",
+      "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
+      "dev": true
+    },
+    "dom-align": {
+      "version": "1.12.4",
+      "resolved": "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.4.tgz",
+      "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw=="
+    },
+    "dom-scroll-into-view": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz",
+      "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w=="
+    },
+    "esbuild": {
+      "version": "0.17.19",
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.17.19.tgz",
+      "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
+      "dev": true,
+      "requires": {
+        "@esbuild/android-arm": "0.17.19",
+        "@esbuild/android-arm64": "0.17.19",
+        "@esbuild/android-x64": "0.17.19",
+        "@esbuild/darwin-arm64": "0.17.19",
+        "@esbuild/darwin-x64": "0.17.19",
+        "@esbuild/freebsd-arm64": "0.17.19",
+        "@esbuild/freebsd-x64": "0.17.19",
+        "@esbuild/linux-arm": "0.17.19",
+        "@esbuild/linux-arm64": "0.17.19",
+        "@esbuild/linux-ia32": "0.17.19",
+        "@esbuild/linux-loong64": "0.17.19",
+        "@esbuild/linux-mips64el": "0.17.19",
+        "@esbuild/linux-ppc64": "0.17.19",
+        "@esbuild/linux-riscv64": "0.17.19",
+        "@esbuild/linux-s390x": "0.17.19",
+        "@esbuild/linux-x64": "0.17.19",
+        "@esbuild/netbsd-x64": "0.17.19",
+        "@esbuild/openbsd-x64": "0.17.19",
+        "@esbuild/sunos-x64": "0.17.19",
+        "@esbuild/win32-arm64": "0.17.19",
+        "@esbuild/win32-ia32": "0.17.19",
+        "@esbuild/win32-x64": "0.17.19"
+      }
+    },
+    "estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+    },
+    "he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz",
+      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+      "dev": true
+    },
+    "inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw=="
+    },
+    "is-plain-object": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz",
+      "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g=="
+    },
+    "js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+    },
+    "lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+    },
+    "lodash-es": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
+      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+    },
+    "loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "requires": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      }
+    },
+    "lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "requires": {
+        "yallist": "^4.0.0"
+      }
+    },
+    "magic-string": {
+      "version": "0.30.0",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.0.tgz",
+      "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==",
+      "requires": {
+        "@jridgewell/sourcemap-codec": "^1.4.13"
+      }
+    },
+    "minimatch": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.1.tgz",
+      "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
+      "dev": true,
+      "requires": {
+        "brace-expansion": "^2.0.1"
+      }
+    },
+    "muggle-string": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.2.2.tgz",
+      "integrity": "sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==",
+      "dev": true
+    },
+    "nanoid": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz",
+      "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
+    },
+    "nanopop": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/nanopop/-/nanopop-2.3.0.tgz",
+      "integrity": "sha512-fzN+T2K7/Ah25XU02MJkPZ5q4Tj5FpjmIYq4rvoHX4yb16HzFdCO6JxFFn5Y/oBhQ8no8fUZavnyIv9/+xkBBw=="
+    },
+    "path": {
+      "version": "0.12.7",
+      "resolved": "https://registry.npmmirror.com/path/-/path-0.12.7.tgz",
+      "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==",
+      "requires": {
+        "process": "^0.11.1",
+        "util": "^0.10.3"
+      }
+    },
+    "picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+    },
+    "postcss": {
+      "version": "8.4.24",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.24.tgz",
+      "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==",
+      "requires": {
+        "nanoid": "^3.3.6",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz",
+      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
+    },
+    "regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+    },
+    "resize-observer-polyfill": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
+    },
+    "rollup": {
+      "version": "3.23.1",
+      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.23.1.tgz",
+      "integrity": "sha512-ybRdFVHOoljGEFILHLd2g/qateqUdjE6YS41WXq4p3C/WwD3xtWxV4FYWETA1u9TeXQc5K8L8zHE5d/scOvrOQ==",
+      "dev": true,
+      "requires": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "scroll-into-view-if-needed": {
+      "version": "2.2.31",
+      "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz",
+      "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==",
+      "requires": {
+        "compute-scroll-into-view": "^1.0.20"
+      }
+    },
+    "semver": {
+      "version": "7.5.1",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.1.tgz",
+      "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
+      "dev": true,
+      "requires": {
+        "lru-cache": "^6.0.0"
+      }
+    },
+    "shallow-equal": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz",
+      "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="
+    },
+    "source-map-js": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+    },
+    "typescript": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.1.3.tgz",
+      "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==",
+      "dev": true
+    },
+    "util": {
+      "version": "0.10.4",
+      "resolved": "https://registry.npmmirror.com/util/-/util-0.10.4.tgz",
+      "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+      "requires": {
+        "inherits": "2.0.3"
+      }
+    },
+    "vite": {
+      "version": "4.3.9",
+      "resolved": "https://registry.npmmirror.com/vite/-/vite-4.3.9.tgz",
+      "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==",
+      "dev": true,
+      "requires": {
+        "esbuild": "^0.17.5",
+        "fsevents": "~2.3.2",
+        "postcss": "^8.4.23",
+        "rollup": "^3.21.0"
+      }
+    },
+    "vue": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.3.4.tgz",
+      "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==",
+      "requires": {
+        "@vue/compiler-dom": "3.3.4",
+        "@vue/compiler-sfc": "3.3.4",
+        "@vue/runtime-dom": "3.3.4",
+        "@vue/server-renderer": "3.3.4",
+        "@vue/shared": "3.3.4"
+      }
+    },
+    "vue-router": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.2.tgz",
+      "integrity": "sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ==",
+      "requires": {
+        "@vue/devtools-api": "^6.5.0"
+      }
+    },
+    "vue-template-compiler": {
+      "version": "2.7.14",
+      "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz",
+      "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==",
+      "dev": true,
+      "requires": {
+        "de-indent": "^1.0.2",
+        "he": "^1.2.0"
+      }
+    },
+    "vue-tsc": {
+      "version": "1.6.5",
+      "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.6.5.tgz",
+      "integrity": "sha512-Wtw3J7CC+JM2OR56huRd5iKlvFWpvDiU+fO1+rqyu4V2nMTotShz4zbOZpW5g9fUOcjnyZYfBo5q5q+D/q27JA==",
+      "dev": true,
+      "requires": {
+        "@volar/vue-language-core": "1.6.5",
+        "@volar/vue-typescript": "1.6.5",
+        "semver": "^7.3.8"
+      }
+    },
+    "vue-types": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/vue-types/-/vue-types-3.0.2.tgz",
+      "integrity": "sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==",
+      "requires": {
+        "is-plain-object": "3.0.1"
+      }
+    },
+    "warning": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz",
+      "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+      "requires": {
+        "loose-envify": "^1.0.0"
+      }
+    },
+    "yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    }
+  }
+}

+ 32 - 0
package.json

@@ -0,0 +1,32 @@
+{
+  "name": "tuoren-iot-platform-view",
+  "private": true,
+  "version": "0.0.0",
+  "type": "module",
+  "scripts": {
+    "dev": "vite",
+    "build": "vue-tsc && vite build",
+    "preview": "vite preview"
+  },
+  "dependencies": {
+    "@ant-design/icons-vue": "^6.1.0",
+    "ant-design-vue": "^3.2.20",
+    "axios": "^1.4.0",
+    "axios-jsonp": "^1.0.4",
+    "echarts": "^5.5.0",
+    "path": "^0.12.7",
+    "pinia": "^2.1.7",
+    "pinia-plugin-persist": "^1.0.0",
+    "terser": "^5.28.1",
+    "vue": "^3.2.47",
+    "vue-router": "4"
+  },
+  "devDependencies": {
+    "@types/node": "^20.3.1",
+    "@vitejs/plugin-legacy": "^5.3.1",
+    "@vitejs/plugin-vue": "^4.1.0",
+    "typescript": "^5.0.2",
+    "vite": "^4.3.9",
+    "vue-tsc": "^1.4.2"
+  }
+}

+ 0 - 0
public/static/1.js


BIN
public/static/images/login_bg.png


BIN
public/static/images/logo.png


BIN
public/static/images/logo2.png


BIN
public/static/images/logo3.png


+ 1 - 0
public/vite.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

+ 12 - 0
src/App.vue

@@ -0,0 +1,12 @@
+<template>
+  <router-view></router-view>
+</template>
+
+<script setup lang="ts">
+
+</script>
+
+
+<!-- <style scoped>
+
+</style> -->

+ 6 - 0
src/api/index.ts

@@ -0,0 +1,6 @@
+import {LoginParams} from './model/index'
+
+
+export type {
+  LoginParams
+}

+ 223 - 0
src/api/model/index.ts

@@ -0,0 +1,223 @@
+// 登录参数
+export interface LoginParams{
+  username: string;
+  password: string;
+  captchaCode: string;
+  captchaKey: string;
+  isRememberMe: boolean;
+}
+
+// 注册参数
+export interface RegisterParams{
+  mobile: string;
+  username: string;
+  password: string;
+  veryfyCode: string;
+  isAgree: boolean;
+}
+
+
+
+// 设备
+export interface DeviceEntity{
+  id?: string;
+  address?: string;
+  createtime?: string;
+  description?: string;
+  latitude?: number;
+  longitude?: number;
+  mac?: string;
+  modifytime?: string;
+  name?: string;
+  open?: number;
+  tenantId?: string;
+  type?: string;
+  data?: any;
+  [x: string]: any;
+}
+// 设备查询参数
+export interface SearchDeviceParams{
+  size: number; // 每页数
+  page: number; // 页码
+  sort: string; // 排序字段
+  order: string; // 排序方式
+  keyWord: string; // 关键字
+  mac: string;
+}
+// 添加设备参数
+export interface AddDeviceParams{
+  id?: string;
+  mac: string;
+  name: string;
+  productId: string;
+  description?: string;
+}
+
+// 删除参数
+export interface DeleteParams{
+  id: string
+}
+
+
+// 产品
+export interface ProductEntity{
+  id?: string;
+  secret?: string;
+  createtime?: string;
+  description?: string;
+  latitude?: number;
+  longitude?: number;
+  code?: string;
+  modifytime?: string;
+  name?: string;
+  open?: number;
+  tenantId?: string;
+  type?: string;
+  data?: string;
+  [x: string]: any;
+}
+// 产品查询参数
+export interface SearchProductParams{
+  size: number; // 每页数
+  page: number; // 页码
+  sort: string; // 排序字段
+  order: string; // 排序方式
+  keyWord: string; // 关键字
+}
+// 添加产品参数
+export interface AddProductParams{
+  id?: string;
+  name: string;
+  description?: string;
+}
+
+
+
+// 产品模型
+export interface ProductModelEntity{
+  id?: string; // id
+  code: number | undefined; // 编号
+  productId?: string; // 产品编号
+  name: string; // 字段名称
+  title: string; // 标识
+  type: 'int' | 'float' | 'double' | 'enum' | 'string'; // 数据类型
+  define: string | {
+    isArray: boolean; // 是否为数组
+    range?: {
+      min?: number; // type为int | float
+      max?: number; // type为int | float
+      len?: number; // type为string
+      [propName: number]: string; // type为enum
+    }
+  }; // 数据定义
+  remark?: string; // 备注
+  tenantId?: string; // 租户Id
+  [propName: string]: any
+}
+// 产品模型查询参数
+export interface SearchProductModelParams{
+  size: number; // 每页数
+  page: number; // 页码
+  sort: string; // 排序字段
+  order: string; // 排序方式
+  keyWord: string; // 关键字
+  productId: string; // 产品id
+}
+// 添加产品模型参数
+export interface AddProductModelParams extends ProductModelEntity{
+  
+}
+
+
+
+
+
+// 设备日志
+export interface DeviceLogEntity{
+  id: string;
+  address: string;
+  createtime: string;
+  description: string;
+  latitude: number;
+  longitude: number;
+  mac: string;
+  modifytime: string;
+  name: string;
+  open: number;
+  tenantId: string;
+  type: string;
+  data: string;
+}
+// 设备日志查询参数
+export interface SearchDeviceLogParams{
+  size: number; // 每页数
+  page: number; // 页码
+  sort: string; // 排序字段
+  order: string; // 排序方式
+  keyWord: string; // 关键字
+  mac: string;
+}
+
+
+// 用户模型
+export interface UserEntity{
+  id?: string;
+  username: string;
+  mobile?: string;
+  email?: string;
+  code?: string;
+  password?: string;
+  token?: string;
+  roles?: string[];
+  roleIds?: string[];
+  isLogin?: boolean | undefined;
+  isRememberMe?: boolean;
+  [x: string]: any;
+}
+
+// 用户模型查询参数
+export interface SearchUserParams{
+  size: number; // 每页数
+  page: number; // 页码
+  sort: string; // 排序字段
+  order: string; // 排序方式
+  keyWord: string; // 关键字
+  [propName: string]: any
+}
+// 添加用户模型参数
+export interface AddUserParams{
+  id?: string;
+  username: string;
+  mobile?: string;
+  email?: string;
+  code?: string;
+  password?: string;
+  roles?: string[];
+  roleIds?: string[];
+}
+
+
+
+
+// 角色模型
+export interface RoleEntity{
+  id?: string;
+  name: string;
+  description: string;
+  [x: string]: any;
+}
+
+// 用户模型查询参数
+export interface SearchRoleParams{
+  size: number; // 每页数
+  page: number; // 页码
+  sort: string; // 排序字段
+  order: string; // 排序方式
+  keyWord: string; // 关键字
+  [propName: string]: any
+}
+// 添加用户模型参数
+export interface AddRoleParams extends RoleEntity{
+  
+}
+

+ 1 - 0
src/assets/vue.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>

+ 66 - 0
src/components/CusNavigation.vue

@@ -0,0 +1,66 @@
+<template>
+
+  <div style="padding: 0px 0px 0px 0px; display: flex; align-items: center; 
+      height: 30px; margin-bottom: 20px;">
+    <!-- <div style="padding: 16px 0px 0px 24px;">
+      <a-breadcrumb>
+        <a-breadcrumb-item style="font-family: PingFangSC, PingFang SC;">首页</a-breadcrumb-item>
+        <a-breadcrumb-item><a href="">Application Center</a></a-breadcrumb-item>
+        <a-breadcrumb-item><a href="">Application List</a></a-breadcrumb-item>
+        <a-breadcrumb-item>An Application</a-breadcrumb-item>
+      </a-breadcrumb>
+    </div> -->
+    <div v-if="gobackabled" class="cus-goback" @click="onGoback">
+      <IconFont type="icon-fanhui" style="font-size: 22px;"></IconFont>
+    </div>
+    <div style="font-family: PingFangSC, PingFang SC;
+      font-weight: 600;
+      font-size: 20px;
+      color: #191A1A;
+      line-height: 30px;
+      text-align: justify;
+      font-style: normal;">
+      <span>{{ title }}</span>
+    </div>
+  </div>
+  
+</template>
+
+<script setup lang="ts">
+import { Router, useRouter } from 'vue-router'
+import { IconFont } from '@/components'
+
+
+
+// 属性
+defineProps({
+  title: {
+    type: String,
+    default: '未知'
+  },
+  gobackabled: {
+    type: Boolean,
+    default: false
+  }
+})
+
+// 返回上一页
+const router:Router = useRouter();
+const onGoback = (event: any) => {
+  console.log(event);
+  router.go(-1)
+}
+
+</script>
+
+
+
+<style scoped>
+.cus-goback{
+  margin-right: 3px;
+}
+.cus-goback:hover{
+  cursor: pointer;
+}
+
+</style>

+ 7 - 0
src/components/icon/IconFont.ts

@@ -0,0 +1,7 @@
+import { createFromIconfontCN } from '@ant-design/icons-vue';
+
+const IconFont = createFromIconfontCN({
+  scriptUrl: '//at.alicdn.com/t/c/font_4476725_1jp8cdc3rnu.js',
+});
+
+export default IconFont;

+ 10 - 0
src/components/index.ts

@@ -0,0 +1,10 @@
+import IconFont from './icon/IconFont'
+import CusNavigation from './CusNavigation.vue'
+import CusModal from './modal/Index.vue'
+
+
+export {
+  IconFont,
+  CusNavigation,
+  CusModal
+}

+ 24 - 0
src/components/modal/Index.vue

@@ -0,0 +1,24 @@
+<template>
+  <a-modal v-bind="{...props, ...$attrs}">
+    <div class="ant-modal-body">
+      <div>445566</div>
+      <slot></slot>
+    </div>
+  </a-modal>
+</template>
+
+<script setup lang="ts">
+import {ModalProps} from 'ant-design-vue'
+
+  const props = defineProps(<ModalProps | any>{
+    
+  })
+
+
+</script>
+
+
+
+<style scoped>
+
+</style>

+ 96 - 0
src/layouts/BasicLayout.vue

@@ -0,0 +1,96 @@
+<template>
+  <a-layout style="height: 100vh; overflow: hidden;">
+    <CusHeader></CusHeader>
+    
+
+    <a-layout id="components-layout">
+      <CusMenu :path="path"></CusMenu>
+      
+      <a-layout style="background-color: #fff;">
+        
+        <a-layout-content class="tr-content"
+          :style="{flex: '1', 'overflow-y': 'auto', 'overflow-x': 'hidden',
+          background: '#fff', }">
+          <a-config-provider :locale="zhCN">
+            <router-view v-slot="{ Component, route }">
+              <!-- <div>
+                <span>route: </span>
+                <span>{{ JSON.stringify(route) }}</span>
+              </div> -->
+              <keep-alive v-if="route.meta.keepAlive">
+                <component :is="Component" />
+              </keep-alive>
+              <component v-else :is="Component" />
+            </router-view>
+          </a-config-provider>
+        </a-layout-content>
+        <!-- <a-layout-footer :style="footerStyle">
+          Design ©2023 Created by TuoRen
+        </a-layout-footer> -->
+      </a-layout>
+    </a-layout>
+  </a-layout>
+</template>
+<script setup lang="ts">
+import { ref, onMounted, onUpdated } from 'vue'
+import { CusHeader, CusMenu } from './custom'
+import { Router, useRouter } from 'vue-router'
+import zhCN from 'ant-design-vue/es/locale/zh_CN'
+
+const router:Router = useRouter();
+
+const path = ref<string>();
+
+onMounted(() => {
+  console.log('layout mounted')
+  path.value = router.currentRoute.value.path
+})
+
+onUpdated(() => {
+  console.log('layout updated')
+  path.value = router.currentRoute.value.path
+})
+
+</script>
+<style scoped>
+#components-layout .trigger {
+  font-size: 18px;
+  line-height: 64px;
+  padding: 0 24px;
+  cursor: pointer;
+  transition: color 0.3s;
+}
+
+#components-layout .trigger:hover {
+  color: #1890ff;
+}
+
+.site-layout .site-layout-background {
+  background: #fff;
+}
+
+.tr-content::-webkit-scrollbar{
+  width:2px;
+  height:8px;
+  background-color: #61B6EB;
+}
+.tr-content::-webkit-scrollbar-track{
+  background: #eee;
+}
+.tr-content::-webkit-scrollbar-thumb{
+  background: #61B6EB;
+  border-radius:100px;
+}
+.tr-content::-webkit-scrollbar-thumb:hover{
+  background: #61B6EB;
+}
+.tr-content::-webkit-scrollbar-corner{
+  background: #61B6EB;
+}
+:deep(.ant-breadcrumb){
+  font-size: 12px;
+}
+
+
+
+</style>

+ 77 - 0
src/layouts/custom/CusHeader.vue

@@ -0,0 +1,77 @@
+<template>
+  <a-layout-header style="background: #fff; padding: 0; height: 55px; line-height: normal; border-bottom: 1px solid #eee;">
+    <div style="height: 100%;display: flex; align-items: center;">
+      <!-- logo -->
+      <div style="height: 25px; padding: 0px 13px 0px 19px; width: 126px; overflow: hidden;">
+        <a-image style="max-height: 100%; width: auto;"
+          height="100%"
+          :preview="false"
+          src="/static/images/logo.png"
+        />
+      </div>
+      <!-- 标题 -->
+      <div style="font-size: 19px; font-weight: bold;font-family: 'Microsoft YaHei', '微软雅黑', sans-serif;">驼人物联网平台</div>
+      <div style="flex-grow: 1;"></div>
+      <!-- 右侧头像 -->
+      <div style="padding: 0px 16px; display: flex;height: 100%;align-items: center;">
+        <div style="margin-right: 30px;">
+          <a style="color: initial;" href="#/large-screen" target="_blank"><desktop-outlined style="font-size: 20px;"/></a>
+        </div>
+        <div style="margin-right: 40px;">
+          <bell-outlined style="font-size: 20px;" />
+        </div>
+        <div style="width: 1px; background-color: #ccc;height: 100%; margin-right: 20px;"></div>
+        <!-- 账号信息 -->
+        <div style="text-align: right; margin-right: 14px; font-family: PingFangSC, PingFang SC;">
+          <div style="font-size: 14px; color: #333333;font-weight: bold;">
+            <span>{{ userInfo.username }}</span>
+          </div>
+          <div style="font-size: 12px;color: #999999;">
+            <span>{{ userInfo.mobile }}</span>
+          </div>
+        </div>
+        <!-- 头像 -->
+        <div>
+          <a-dropdown trigger="click" placement="bottomLeft">
+            <a-avatar :size="35" style="background-color: #1890ff">
+              <template #icon><UserOutlined /></template>
+            </a-avatar>
+            <template #overlay>
+              <a-menu>
+                <a-menu-item @click="logout">
+                  <template #icon>
+                    <logout-outlined />
+                  </template>
+                  <span>退出登录</span>
+                </a-menu-item>
+              </a-menu>
+            </template>
+          </a-dropdown>
+        </div>
+      </div>
+    </div>
+  </a-layout-header>
+  
+</template>
+
+<script setup lang="ts">
+import { Router, useRouter } from 'vue-router'
+import { DesktopOutlined, LogoutOutlined, UserOutlined, BellOutlined } from '@ant-design/icons-vue'
+import { useStoreOfUserInfo } from '@/store/userInfo'
+
+const userInfo = useStoreOfUserInfo();
+
+const router:Router = useRouter();
+const logout = (event: any) => {
+  console.log(event);
+  router.push('/login');
+}
+
+
+</script>
+
+
+
+<style scoped>
+
+</style>

+ 176 - 0
src/layouts/custom/CusMenu.vue

@@ -0,0 +1,176 @@
+<template>
+  <a-layout-sider v-model:collapsed="collapsed" :trigger="null" collapsible 
+    style="background-color: #FAFAFA; border-right: 1px solid #eee;">
+    <a-menu 
+      v-model:openKeys="openKeys"
+      v-model:selectedKeys="selectedKeys"
+      mode="inline"
+      @select="selectMenu" >
+      <div style="height: 12px;"></div>
+      <a-menu-item :key="'/' + home">
+        <template #icon>
+          <home-outlined />
+        </template>
+        <span>首页</span>
+      </a-menu-item>
+
+      <div style="padding: 23px 0px 11px 20px;
+        font-family: PingFangSC, PingFang SC;
+        font-weight: 400;
+        font-size: 12px;
+        color: #939393;
+        line-height: 17px;
+        text-align: justify;
+        font-style: normal;">
+        <span>设备接入</span>
+      </div>
+      
+      <a-menu-item :key="'/' + home +'/product'">
+        <template #icon>
+          <file-done-outlined />
+        </template>
+        <span>产品</span>
+      </a-menu-item>
+      <a-menu-item :key="'/' + home +'/device'">
+        <template #icon>
+          <car-outlined />
+        </template>
+        <span>设备</span>
+      </a-menu-item>
+      <a-menu-item :key="'/' + home +'/device/log'">
+        <template #icon>
+          <file-done-outlined />
+        </template>
+        <span>设备日志</span>
+      </a-menu-item>
+      <!-- <a-menu-item key="/device/map">
+        <template #icon>
+          <TeamOutlined />
+        </template>
+        <span>设备地图</span>
+      </a-menu-item> -->
+
+      <div style="padding: 23px 0px 11px 20px;
+        font-family: PingFangSC, PingFang SC;
+        font-weight: 400;
+        font-size: 12px;
+        color: #939393;
+        line-height: 17px;
+        text-align: justify;
+        font-style: normal;">
+        <span>系统管理</span>
+      </div>
+      
+      <a-menu-item :key="'/' + home +'/user'">
+        <template #icon>
+          <user-outlined />
+        </template>
+        <span>用户管理</span>
+      </a-menu-item>
+      <a-menu-item :key="'/' + home +'/role'">
+        <template #icon>
+          <!-- <setting-outlined /> -->
+          <TeamOutlined />
+        </template>
+        <span>角色管理</span>
+      </a-menu-item>
+      <a-menu-item :key="'/' + home +'/menu'">
+        <template #icon>
+          <database-outlined />
+        </template>
+        <span>资源管理</span>
+      </a-menu-item>
+      <a-menu-item :key="'/' + home +'/operate/log'">
+        <template #icon>
+          <file-text-outlined />
+        </template>
+        <span>操作日志</span>
+      </a-menu-item>
+      <a-menu-item :key="'/' + home +'/station'">
+        <template #icon>
+          <aim-outlined />
+        </template>
+        <span>基站管理</span>
+      </a-menu-item>
+
+
+    </a-menu>
+  </a-layout-sider>
+  
+  
+</template>
+
+<script setup lang="ts">
+import { ref, watch } from 'vue'
+import { Router, useRouter } from 'vue-router'
+import {
+  TeamOutlined,
+  HomeOutlined,
+  FileDoneOutlined,
+  // FileExcelOutlined,
+  // SettingOutlined,
+  AimOutlined,
+  FileTextOutlined,
+  CarOutlined,
+  DatabaseOutlined,
+  UserOutlined
+} from '@ant-design/icons-vue'
+import { home } from '@/utils'
+
+// 属性
+const props = defineProps(['path'])
+watch(() => props.path, (newValue: any, oldValue: any) => {
+  console.log('menu watch', newValue, oldValue)
+  let menuKey = newValue
+  if(newValue.includes('/'+ home +'/device/detail')){
+    menuKey = '/'+ home +'/device'
+  }else if(newValue.includes('/'+ home +'/product/detail')){
+    menuKey = '/'+ home +'/product'
+  }else if(newValue.includes('/'+ home +'/product/common')){
+    menuKey = '/'+ home +'/product'
+  }
+  selectedKeys.value = [menuKey]
+})
+
+const router:Router = useRouter();
+const openKeys = ref<string[]>([]);
+const selectedKeys = ref<string[]>([]);
+const collapsed = ref<boolean>(false);
+const selectMenu = (event: any) => {
+  const path = event.key;
+  console.log(path)
+  router.push(path);
+}
+</script>
+
+
+
+<style scoped>
+
+:deep(.ant-menu-inline .ant-menu-item-selected::after){
+  opacity: 0;
+}
+:deep(.ant-menu-inline .ant-menu-item-selected::before){
+  content: '';
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  border-right: 3px solid #0058FF;
+}
+:deep(.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected){
+  background-color: #EEF1FF;
+}
+:deep(.ant-menu-inline .ant-menu-item-selected){
+  color: #0058FF;
+}
+:deep(.ant-menu-inline .ant-menu-item){
+  padding: 0px 20px !important;
+  margin: 0px;
+  
+  font-family: PingFangSC, PingFang SC;
+}
+
+
+
+</style>

Some files were not shown because too many files changed in this diff