From 13ca3ff6601c37aac0a6c1188cd00d509abba466 Mon Sep 17 00:00:00 2001
From: andy <1042025947@qq.com>
Date: Mon, 25 May 2026 15:46:29 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env.development | 13 +
.env.production | 11 +
.gitignore | 24 +
index.html | 14 +
package-lock.json | 2467 ++++++
package.json | 33 +
pnpm-lock.yaml | 1602 ++++
public/vite.svg | 3 +
src/App.vue | 344 +
src/api/auth.ts | 167 +
src/api/code.ts | 62 +
src/api/customer.ts | 51 +
src/api/gen.ts | 121 +
src/api/message.ts | 299 +
src/api/monitor.ts | 214 +
src/api/order.ts | 90 +
src/api/org.ts | 223 +
src/api/product.ts | 88 +
src/api/production.ts | 56 +
src/api/server.ts | 112 +
src/api/student.ts | 86 +
src/api/system.ts | 475 ++
src/api/system1.ts | 504 ++
src/api/user.ts | 102 +
src/api/wechat.ts | 63 +
src/assets/401_images/401.gif | Bin 0 -> 164227 bytes
src/assets/404_images/404.png | Bin 0 -> 98071 bytes
src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes
src/assets/base.css | 74 +
src/assets/icons/svg/404.svg | 1 +
.../icons/svg/alignCenterHorizontal.svg | 1 +
src/assets/icons/svg/alignCenterVertical.svg | 1 +
src/assets/icons/svg/alignEndHorizontal.svg | 1 +
src/assets/icons/svg/alignEndVertical.svg | 1 +
src/assets/icons/svg/alignStartHorizontal.svg | 1 +
src/assets/icons/svg/alignStartVertical.svg | 1 +
src/assets/icons/svg/bug.svg | 1 +
src/assets/icons/svg/build.svg | 1 +
src/assets/icons/svg/button.svg | 1 +
src/assets/icons/svg/cascader.svg | 1 +
src/assets/icons/svg/chart.svg | 1 +
src/assets/icons/svg/checkbox.svg | 1 +
src/assets/icons/svg/clipboard.svg | 1 +
src/assets/icons/svg/code.svg | 1 +
src/assets/icons/svg/color.svg | 1 +
src/assets/icons/svg/component.svg | 1 +
src/assets/icons/svg/dashboard.svg | 1 +
src/assets/icons/svg/date.svg | 1 +
src/assets/icons/svg/dateRange.svg | 1 +
src/assets/icons/svg/dict.svg | 1 +
src/assets/icons/svg/documentation.svg | 1 +
src/assets/icons/svg/download.svg | 1 +
src/assets/icons/svg/drag.svg | 1 +
src/assets/icons/svg/druid.svg | 1 +
src/assets/icons/svg/edit.svg | 1 +
src/assets/icons/svg/education.svg | 1 +
src/assets/icons/svg/email.svg | 1 +
src/assets/icons/svg/eraser.svg | 1 +
src/assets/icons/svg/example.svg | 1 +
src/assets/icons/svg/excel.svg | 1 +
src/assets/icons/svg/exitFullscreen.svg | 1 +
src/assets/icons/svg/eye.svg | 1 +
src/assets/icons/svg/eyeOpen.svg | 1 +
src/assets/icons/svg/form.svg | 1 +
src/assets/icons/svg/fullscreen.svg | 1 +
src/assets/icons/svg/github.svg | 1 +
src/assets/icons/svg/guide.svg | 1 +
src/assets/icons/svg/icon.svg | 1 +
src/assets/icons/svg/input.svg | 1 +
src/assets/icons/svg/international.svg | 1 +
src/assets/icons/svg/job.svg | 1 +
src/assets/icons/svg/language.svg | 1 +
src/assets/icons/svg/link.svg | 1 +
src/assets/icons/svg/list.svg | 1 +
src/assets/icons/svg/lock.svg | 1 +
src/assets/icons/svg/log.svg | 1 +
src/assets/icons/svg/logininfor.svg | 1 +
src/assets/icons/svg/message.svg | 1 +
src/assets/icons/svg/money.svg | 1 +
src/assets/icons/svg/monitor.svg | 2 +
src/assets/icons/svg/nested.svg | 1 +
src/assets/icons/svg/number.svg | 1 +
src/assets/icons/svg/online.svg | 1 +
src/assets/icons/svg/password.svg | 1 +
src/assets/icons/svg/pdf.svg | 1 +
src/assets/icons/svg/people.svg | 1 +
src/assets/icons/svg/peoples.svg | 1 +
src/assets/icons/svg/phone.svg | 1 +
src/assets/icons/svg/post.svg | 1 +
src/assets/icons/svg/qq.svg | 1 +
src/assets/icons/svg/question.svg | 1 +
src/assets/icons/svg/radio.svg | 1 +
src/assets/icons/svg/rate.svg | 1 +
src/assets/icons/svg/redis.svg | 1 +
src/assets/icons/svg/redisList.svg | 2 +
src/assets/icons/svg/redo.svg | 1 +
src/assets/icons/svg/row.svg | 1 +
src/assets/icons/svg/search.svg | 1 +
src/assets/icons/svg/select.svg | 1 +
src/assets/icons/svg/server.svg | 1 +
src/assets/icons/svg/shopping.svg | 1 +
src/assets/icons/svg/size.svg | 1 +
src/assets/icons/svg/skill.svg | 1 +
src/assets/icons/svg/slider.svg | 1 +
src/assets/icons/svg/star.svg | 1 +
src/assets/icons/svg/swagger.svg | 1 +
src/assets/icons/svg/switch.svg | 1 +
src/assets/icons/svg/system.svg | 2 +
src/assets/icons/svg/tab.svg | 1 +
src/assets/icons/svg/table.svg | 1 +
src/assets/icons/svg/textarea.svg | 1 +
src/assets/icons/svg/theme.svg | 1 +
src/assets/icons/svg/time.svg | 1 +
src/assets/icons/svg/timeRange.svg | 1 +
src/assets/icons/svg/tool.svg | 1 +
src/assets/icons/svg/tree.svg | 1 +
src/assets/icons/svg/treeTable.svg | 1 +
src/assets/icons/svg/undo.svg | 1 +
src/assets/icons/svg/upload.svg | 1 +
src/assets/icons/svg/user.svg | 1 +
src/assets/icons/svg/validCode.svg | 1 +
src/assets/icons/svg/wechat.svg | 1 +
src/assets/icons/svg/zip.svg | 1 +
src/assets/images/login-background.jpg | Bin 0 -> 405771 bytes
src/assets/images/nrtxc.png | Bin 0 -> 2874 bytes
src/assets/images/qiyelogo.png | Bin 0 -> 39038 bytes
src/assets/logo.svg | 1 +
src/assets/logo/logo.png | Bin 0 -> 6423 bytes
src/assets/main.css | 83 +
src/assets/styles/btn.scss | 99 +
src/assets/styles/element-ui.scss | 92 +
src/assets/styles/element-variables.scss | 31 +
src/assets/styles/index.less | 68 +
src/assets/styles/mixin.scss | 66 +
src/assets/styles/ruoyi.less | 313 +
src/assets/styles/sidebar.scss | 227 +
src/assets/styles/transition.scss | 53 +
src/assets/styles/variables.scss | 54 +
src/components/IconSelect.vue | 499 ++
src/components/ImageUpload.vue | 108 +
src/components/MessageNotification.vue | 148 +
src/components/PasswordModal.vue | 140 +
src/components/ProfileModal.vue | 133 +
src/components/TabBar.vue | 298 +
src/components/Watermark/index.vue | 114 +
src/layout/index.vue | 1580 ++++
src/main.ts | 34 +
.../resources/static/assets/404-DLQJ9FLe.css | 1 +
.../resources/static/assets/404-DkNzntH_.js | 1 +
.../static/assets/AddOutline-BFgqErtO.js | 1 +
.../assets/ArrowForwardOutline-Bj2Hrctc.js | 1 +
.../static/assets/CameraOutline-D_VIwt3g.js | 1 +
.../assets/CheckmarkOutline-BJScLDZ7.js | 1 +
.../assets/ChevronDownOutline-D41qMQyq.js | 1 +
.../static/assets/CloseOutline-DOmh30XY.js | 1 +
.../assets/CloudUploadOutline-DMPKBx4X.js | 1 +
.../assets/CodeSlashOutline-BLVV1n2e.js | 1 +
.../static/assets/CreateOutline-bgrwmVxs.js | 1 +
.../static/assets/DownloadOutline-DvUGqON3.js | 1 +
.../static/assets/EyeOutline-M3QhdWJe.js | 1 +
.../static/assets/FlashOutline-BV9Q-qpJ.js | 1 +
.../static/assets/FolderOutline-Dc4tnTvx.js | 1 +
.../static/assets/GridOutline-Dp5s-WRl.js | 1 +
.../static/assets/HappyOutline-BdIgEFQu.js | 1 +
.../static/assets/IdCardOutline-taFppdFn.js | 1 +
.../static/assets/ImageOutline-Bbn5RAt9.js | 1 +
.../static/assets/ListOutline-Bpen_e7M.js | 1 +
.../assets/LockClosedOutline-DcAJs5fx.js | 1 +
.../static/assets/MailOutline-CIM85qZi.js | 1 +
.../static/assets/PersonOutline-2Mg0SjDF.js | 1 +
.../static/assets/RefreshOutline-DXhpU5zO.js | 1 +
.../static/assets/RocketOutline-Bo50T8OA.js | 1 +
.../static/assets/SearchOutline-BKr0yDBJ.js | 1 +
.../static/assets/SettingsOutline-D8RWlQqe.js | 1 +
.../static/assets/SyncOutline-Dhe7zoas.js | 1 +
.../static/assets/TerminalOutline-CrpHdwnV.js | 1 +
.../static/assets/TrashOutline-DHG1tVXU.js | 1 +
.../assets/disable-devtool.min-C8RkkPy7.js | 2 +
.../resources/static/assets/icons-CPVJvLR4.js | 1 +
.../static/assets/iframe-C4tJpS_a.css | 1 +
.../static/assets/iframe-CJxJ-VD9.js | 1 +
.../static/assets/index-0ZAOuRaa.css | 1 +
.../resources/static/assets/index-1N5kjygt.js | 3 +
.../static/assets/index-7ZjJ-YZW.css | 1 +
.../static/assets/index-B27t1Yu4.css | 1 +
.../resources/static/assets/index-B3DiKfzm.js | 1 +
.../resources/static/assets/index-B4-C4VDo.js | 1 +
.../static/assets/index-B6vII6Uk.css | 1 +
.../static/assets/index-B8qdKmTb.css | 1 +
.../resources/static/assets/index-BEdE80JJ.js | 1 +
.../static/assets/index-BHO6w4WC.css | 1 +
.../static/assets/index-BPTC3WQn.css | 1 +
.../static/assets/index-BRSS5cNx.css | 1 +
.../resources/static/assets/index-BTjLn4jE.js | 3 +
.../resources/static/assets/index-BUSfueB_.js | 1 +
.../static/assets/index-Baqv8J9I.css | 32 +
.../static/assets/index-BcL2v22J.css | 1 +
.../static/assets/index-Bd8qopNp.css | 1 +
.../resources/static/assets/index-Bdy0axq9.js | 1 +
.../resources/static/assets/index-Bnz381Ri.js | 1 +
.../resources/static/assets/index-Bp5dJz-N.js | 1 +
.../resources/static/assets/index-BpEbiI8F.js | 1 +
.../resources/static/assets/index-ByMW5zew.js | 1 +
.../resources/static/assets/index-C1ITdZDU.js | 1 +
.../resources/static/assets/index-C3jNCT_M.js | 3 +
.../resources/static/assets/index-C4rnF_7Z.js | 61 +
.../static/assets/index-C9r6DDSB.css | 1 +
.../static/assets/index-CCuZB-NG.css | 1 +
.../resources/static/assets/index-CDduKd2r.js | 4 +
.../static/assets/index-CHaE9Ts_.css | 1 +
.../static/assets/index-CLfRwEye.css | 1 +
.../resources/static/assets/index-CM8MrzQH.js | 1 +
.../resources/static/assets/index-CPixomK1.js | 1 +
.../static/assets/index-CSRzcXH1.css | 1 +
.../resources/static/assets/index-CWCqheZD.js | 1 +
.../resources/static/assets/index-CY4MhuA3.js | 1 +
.../resources/static/assets/index-CcsLiXJi.js | 1 +
.../resources/static/assets/index-Ccu9MowY.js | 1 +
.../resources/static/assets/index-CkzfmDGw.js | 7391 +++++++++++++++++
.../static/assets/index-CqwN28z2.css | 1 +
.../resources/static/assets/index-Cui8xzTa.js | 1 +
.../static/assets/index-D1x03JMz.css | 1 +
.../resources/static/assets/index-DEZyuCyo.js | 1 +
.../resources/static/assets/index-DG6jUMCO.js | 1 +
.../static/assets/index-DRR7GWDQ.css | 1 +
.../static/assets/index-DT-8tiGM.css | 1 +
.../static/assets/index-DU4H9hPB.css | 1 +
.../resources/static/assets/index-DVzNABKk.js | 47 +
.../resources/static/assets/index-DXWRNf1M.js | 3 +
.../static/assets/index-DbZrrFNw.css | 1 +
.../resources/static/assets/index-DbksAJJx.js | 1 +
.../resources/static/assets/index-DoVe8cZf.js | 1 +
.../resources/static/assets/index-DuFzoNeo.js | 1 +
.../static/assets/index-Dxeh4cxm.css | 1 +
.../resources/static/assets/index-Dzg5bu5F.js | 3 +
.../static/assets/index-IIJYiVXu.css | 1 +
.../resources/static/assets/index-IpME-N8r.js | 1 +
.../static/assets/index-LLYxzFUk.css | 1 +
.../resources/static/assets/index-NM4zcHTT.js | 1 +
.../static/assets/index-R0He3ygV.css | 1 +
.../static/assets/index-UzHVh4f8.css | 1 +
.../resources/static/assets/index-W8_2imfK.js | 1 +
.../static/assets/index-pwJjaRz3.css | 1 +
.../resources/static/assets/index-uB2-lWdH.js | 1 +
.../static/assets/index1-DXc6dHVj.css | 1 +
.../static/assets/index1-Dc0xtdsV.js | 1 +
.../static/assets/message-DhghIGhu.js | 1 +
.../static/assets/monitor-wjQIzRk9.js | 1 +
.../static/assets/system-CZIyXjgT.js | 1 +
.../static/assets/websocket-BLDuRbEq.js | 1 +
src/main/resources/static/index.html | 15 +
src/main/resources/static/vite.svg | 3 +
src/router/index.ts | 364 +
src/stores/message.ts | 147 +
src/stores/site.ts | 71 +
src/stores/tabs.ts | 113 +
src/stores/theme.ts | 130 +
src/stores/user.ts | 97 +
src/styles/index.scss | 627 ++
src/utils/crypto.ts | 102 +
src/utils/icons.ts | 389 +
src/utils/request.ts | 197 +
src/utils/websocket.ts | 181 +
src/views/biz/code/index.vue | 364 +
src/views/biz/order/index.vue | 456 +
src/views/biz/product/index.vue | 482 ++
src/views/biz/user/index.vue | 279 +
src/views/biz/user/index1.vue | 511 ++
src/views/common/iframe.vue | 63 +
src/views/dashboard/index.vue | 699 ++
src/views/dashboard/index1.vue | 932 +++
src/views/error/404.vue | 53 +
src/views/log/loginlog/index.vue | 136 +
src/views/log/operlog/index.vue | 209 +
src/views/login/index.vue | 1387 ++++
src/views/maindata/defectitype/index.vue | 668 ++
src/views/maindata/material/index.vue | 771 ++
src/views/message/chat/inde1x.vue | 2169 +++++
src/views/message/chat/index.vue | 1 +
src/views/message/notice/index.vue | 705 ++
src/views/monitor/api-access/index.vue | 310 +
src/views/monitor/cache/index.vue | 261 +
src/views/monitor/job/index.vue | 496 ++
src/views/monitor/online/index.vue | 80 +
src/views/monitor/server-manager/index.vue | 805 ++
src/views/monitor/server/index.vue | 156 +
src/views/org/dept/index.vue | 444 +
src/views/org/post/index.vue | 403 +
src/views/production/dispatchwork/index.vue | 754 ++
src/views/production/dispatchwork/index2.vue | 3 +
src/views/production/myassigtask/index.vue | 720 ++
src/views/profile/index.vue | 473 ++
src/views/redirect/index.vue | 17 +
src/views/register/index.vue | 532 ++
src/views/system/config/index.vue | 2042 +++++
src/views/system/customer/index.vue | 290 +
src/views/system/dict/index.vue | 331 +
src/views/system/file-config/index.vue | 449 +
src/views/system/file/index.vue | 923 ++
src/views/system/menu/index.vue | 410 +
src/views/system/role/index.vue | 477 ++
src/views/system/role/index1.vue | 488 ++
src/views/system/student/index.vue | 478 ++
src/views/system/user/index.vue | 817 ++
src/views/test/test/index.vue | 11 +
src/views/tool/gen/index.vue | 954 +++
src/vite-env.d.ts | 13 +
tsconfig.json | 25 +
tsconfig.node.json | 10 +
vite.config.ts | 37 +
310 files changed, 44710 insertions(+)
create mode 100644 .env.development
create mode 100644 .env.production
create mode 100644 .gitignore
create mode 100644 index.html
create mode 100644 package-lock.json
create mode 100644 package.json
create mode 100644 pnpm-lock.yaml
create mode 100644 public/vite.svg
create mode 100644 src/App.vue
create mode 100644 src/api/auth.ts
create mode 100644 src/api/code.ts
create mode 100644 src/api/customer.ts
create mode 100644 src/api/gen.ts
create mode 100644 src/api/message.ts
create mode 100644 src/api/monitor.ts
create mode 100644 src/api/order.ts
create mode 100644 src/api/org.ts
create mode 100644 src/api/product.ts
create mode 100644 src/api/production.ts
create mode 100644 src/api/server.ts
create mode 100644 src/api/student.ts
create mode 100644 src/api/system.ts
create mode 100644 src/api/system1.ts
create mode 100644 src/api/user.ts
create mode 100644 src/api/wechat.ts
create mode 100644 src/assets/401_images/401.gif
create mode 100644 src/assets/404_images/404.png
create mode 100644 src/assets/404_images/404_cloud.png
create mode 100644 src/assets/base.css
create mode 100644 src/assets/icons/svg/404.svg
create mode 100644 src/assets/icons/svg/alignCenterHorizontal.svg
create mode 100644 src/assets/icons/svg/alignCenterVertical.svg
create mode 100644 src/assets/icons/svg/alignEndHorizontal.svg
create mode 100644 src/assets/icons/svg/alignEndVertical.svg
create mode 100644 src/assets/icons/svg/alignStartHorizontal.svg
create mode 100644 src/assets/icons/svg/alignStartVertical.svg
create mode 100644 src/assets/icons/svg/bug.svg
create mode 100644 src/assets/icons/svg/build.svg
create mode 100644 src/assets/icons/svg/button.svg
create mode 100644 src/assets/icons/svg/cascader.svg
create mode 100644 src/assets/icons/svg/chart.svg
create mode 100644 src/assets/icons/svg/checkbox.svg
create mode 100644 src/assets/icons/svg/clipboard.svg
create mode 100644 src/assets/icons/svg/code.svg
create mode 100644 src/assets/icons/svg/color.svg
create mode 100644 src/assets/icons/svg/component.svg
create mode 100644 src/assets/icons/svg/dashboard.svg
create mode 100644 src/assets/icons/svg/date.svg
create mode 100644 src/assets/icons/svg/dateRange.svg
create mode 100644 src/assets/icons/svg/dict.svg
create mode 100644 src/assets/icons/svg/documentation.svg
create mode 100644 src/assets/icons/svg/download.svg
create mode 100644 src/assets/icons/svg/drag.svg
create mode 100644 src/assets/icons/svg/druid.svg
create mode 100644 src/assets/icons/svg/edit.svg
create mode 100644 src/assets/icons/svg/education.svg
create mode 100644 src/assets/icons/svg/email.svg
create mode 100644 src/assets/icons/svg/eraser.svg
create mode 100644 src/assets/icons/svg/example.svg
create mode 100644 src/assets/icons/svg/excel.svg
create mode 100644 src/assets/icons/svg/exitFullscreen.svg
create mode 100644 src/assets/icons/svg/eye.svg
create mode 100644 src/assets/icons/svg/eyeOpen.svg
create mode 100644 src/assets/icons/svg/form.svg
create mode 100644 src/assets/icons/svg/fullscreen.svg
create mode 100644 src/assets/icons/svg/github.svg
create mode 100644 src/assets/icons/svg/guide.svg
create mode 100644 src/assets/icons/svg/icon.svg
create mode 100644 src/assets/icons/svg/input.svg
create mode 100644 src/assets/icons/svg/international.svg
create mode 100644 src/assets/icons/svg/job.svg
create mode 100644 src/assets/icons/svg/language.svg
create mode 100644 src/assets/icons/svg/link.svg
create mode 100644 src/assets/icons/svg/list.svg
create mode 100644 src/assets/icons/svg/lock.svg
create mode 100644 src/assets/icons/svg/log.svg
create mode 100644 src/assets/icons/svg/logininfor.svg
create mode 100644 src/assets/icons/svg/message.svg
create mode 100644 src/assets/icons/svg/money.svg
create mode 100644 src/assets/icons/svg/monitor.svg
create mode 100644 src/assets/icons/svg/nested.svg
create mode 100644 src/assets/icons/svg/number.svg
create mode 100644 src/assets/icons/svg/online.svg
create mode 100644 src/assets/icons/svg/password.svg
create mode 100644 src/assets/icons/svg/pdf.svg
create mode 100644 src/assets/icons/svg/people.svg
create mode 100644 src/assets/icons/svg/peoples.svg
create mode 100644 src/assets/icons/svg/phone.svg
create mode 100644 src/assets/icons/svg/post.svg
create mode 100644 src/assets/icons/svg/qq.svg
create mode 100644 src/assets/icons/svg/question.svg
create mode 100644 src/assets/icons/svg/radio.svg
create mode 100644 src/assets/icons/svg/rate.svg
create mode 100644 src/assets/icons/svg/redis.svg
create mode 100644 src/assets/icons/svg/redisList.svg
create mode 100644 src/assets/icons/svg/redo.svg
create mode 100644 src/assets/icons/svg/row.svg
create mode 100644 src/assets/icons/svg/search.svg
create mode 100644 src/assets/icons/svg/select.svg
create mode 100644 src/assets/icons/svg/server.svg
create mode 100644 src/assets/icons/svg/shopping.svg
create mode 100644 src/assets/icons/svg/size.svg
create mode 100644 src/assets/icons/svg/skill.svg
create mode 100644 src/assets/icons/svg/slider.svg
create mode 100644 src/assets/icons/svg/star.svg
create mode 100644 src/assets/icons/svg/swagger.svg
create mode 100644 src/assets/icons/svg/switch.svg
create mode 100644 src/assets/icons/svg/system.svg
create mode 100644 src/assets/icons/svg/tab.svg
create mode 100644 src/assets/icons/svg/table.svg
create mode 100644 src/assets/icons/svg/textarea.svg
create mode 100644 src/assets/icons/svg/theme.svg
create mode 100644 src/assets/icons/svg/time.svg
create mode 100644 src/assets/icons/svg/timeRange.svg
create mode 100644 src/assets/icons/svg/tool.svg
create mode 100644 src/assets/icons/svg/tree.svg
create mode 100644 src/assets/icons/svg/treeTable.svg
create mode 100644 src/assets/icons/svg/undo.svg
create mode 100644 src/assets/icons/svg/upload.svg
create mode 100644 src/assets/icons/svg/user.svg
create mode 100644 src/assets/icons/svg/validCode.svg
create mode 100644 src/assets/icons/svg/wechat.svg
create mode 100644 src/assets/icons/svg/zip.svg
create mode 100644 src/assets/images/login-background.jpg
create mode 100644 src/assets/images/nrtxc.png
create mode 100644 src/assets/images/qiyelogo.png
create mode 100644 src/assets/logo.svg
create mode 100644 src/assets/logo/logo.png
create mode 100644 src/assets/main.css
create mode 100644 src/assets/styles/btn.scss
create mode 100644 src/assets/styles/element-ui.scss
create mode 100644 src/assets/styles/element-variables.scss
create mode 100644 src/assets/styles/index.less
create mode 100644 src/assets/styles/mixin.scss
create mode 100644 src/assets/styles/ruoyi.less
create mode 100644 src/assets/styles/sidebar.scss
create mode 100644 src/assets/styles/transition.scss
create mode 100644 src/assets/styles/variables.scss
create mode 100644 src/components/IconSelect.vue
create mode 100644 src/components/ImageUpload.vue
create mode 100644 src/components/MessageNotification.vue
create mode 100644 src/components/PasswordModal.vue
create mode 100644 src/components/ProfileModal.vue
create mode 100644 src/components/TabBar.vue
create mode 100644 src/components/Watermark/index.vue
create mode 100644 src/layout/index.vue
create mode 100644 src/main.ts
create mode 100644 src/main/resources/static/assets/404-DLQJ9FLe.css
create mode 100644 src/main/resources/static/assets/404-DkNzntH_.js
create mode 100644 src/main/resources/static/assets/AddOutline-BFgqErtO.js
create mode 100644 src/main/resources/static/assets/ArrowForwardOutline-Bj2Hrctc.js
create mode 100644 src/main/resources/static/assets/CameraOutline-D_VIwt3g.js
create mode 100644 src/main/resources/static/assets/CheckmarkOutline-BJScLDZ7.js
create mode 100644 src/main/resources/static/assets/ChevronDownOutline-D41qMQyq.js
create mode 100644 src/main/resources/static/assets/CloseOutline-DOmh30XY.js
create mode 100644 src/main/resources/static/assets/CloudUploadOutline-DMPKBx4X.js
create mode 100644 src/main/resources/static/assets/CodeSlashOutline-BLVV1n2e.js
create mode 100644 src/main/resources/static/assets/CreateOutline-bgrwmVxs.js
create mode 100644 src/main/resources/static/assets/DownloadOutline-DvUGqON3.js
create mode 100644 src/main/resources/static/assets/EyeOutline-M3QhdWJe.js
create mode 100644 src/main/resources/static/assets/FlashOutline-BV9Q-qpJ.js
create mode 100644 src/main/resources/static/assets/FolderOutline-Dc4tnTvx.js
create mode 100644 src/main/resources/static/assets/GridOutline-Dp5s-WRl.js
create mode 100644 src/main/resources/static/assets/HappyOutline-BdIgEFQu.js
create mode 100644 src/main/resources/static/assets/IdCardOutline-taFppdFn.js
create mode 100644 src/main/resources/static/assets/ImageOutline-Bbn5RAt9.js
create mode 100644 src/main/resources/static/assets/ListOutline-Bpen_e7M.js
create mode 100644 src/main/resources/static/assets/LockClosedOutline-DcAJs5fx.js
create mode 100644 src/main/resources/static/assets/MailOutline-CIM85qZi.js
create mode 100644 src/main/resources/static/assets/PersonOutline-2Mg0SjDF.js
create mode 100644 src/main/resources/static/assets/RefreshOutline-DXhpU5zO.js
create mode 100644 src/main/resources/static/assets/RocketOutline-Bo50T8OA.js
create mode 100644 src/main/resources/static/assets/SearchOutline-BKr0yDBJ.js
create mode 100644 src/main/resources/static/assets/SettingsOutline-D8RWlQqe.js
create mode 100644 src/main/resources/static/assets/SyncOutline-Dhe7zoas.js
create mode 100644 src/main/resources/static/assets/TerminalOutline-CrpHdwnV.js
create mode 100644 src/main/resources/static/assets/TrashOutline-DHG1tVXU.js
create mode 100644 src/main/resources/static/assets/disable-devtool.min-C8RkkPy7.js
create mode 100644 src/main/resources/static/assets/icons-CPVJvLR4.js
create mode 100644 src/main/resources/static/assets/iframe-C4tJpS_a.css
create mode 100644 src/main/resources/static/assets/iframe-CJxJ-VD9.js
create mode 100644 src/main/resources/static/assets/index-0ZAOuRaa.css
create mode 100644 src/main/resources/static/assets/index-1N5kjygt.js
create mode 100644 src/main/resources/static/assets/index-7ZjJ-YZW.css
create mode 100644 src/main/resources/static/assets/index-B27t1Yu4.css
create mode 100644 src/main/resources/static/assets/index-B3DiKfzm.js
create mode 100644 src/main/resources/static/assets/index-B4-C4VDo.js
create mode 100644 src/main/resources/static/assets/index-B6vII6Uk.css
create mode 100644 src/main/resources/static/assets/index-B8qdKmTb.css
create mode 100644 src/main/resources/static/assets/index-BEdE80JJ.js
create mode 100644 src/main/resources/static/assets/index-BHO6w4WC.css
create mode 100644 src/main/resources/static/assets/index-BPTC3WQn.css
create mode 100644 src/main/resources/static/assets/index-BRSS5cNx.css
create mode 100644 src/main/resources/static/assets/index-BTjLn4jE.js
create mode 100644 src/main/resources/static/assets/index-BUSfueB_.js
create mode 100644 src/main/resources/static/assets/index-Baqv8J9I.css
create mode 100644 src/main/resources/static/assets/index-BcL2v22J.css
create mode 100644 src/main/resources/static/assets/index-Bd8qopNp.css
create mode 100644 src/main/resources/static/assets/index-Bdy0axq9.js
create mode 100644 src/main/resources/static/assets/index-Bnz381Ri.js
create mode 100644 src/main/resources/static/assets/index-Bp5dJz-N.js
create mode 100644 src/main/resources/static/assets/index-BpEbiI8F.js
create mode 100644 src/main/resources/static/assets/index-ByMW5zew.js
create mode 100644 src/main/resources/static/assets/index-C1ITdZDU.js
create mode 100644 src/main/resources/static/assets/index-C3jNCT_M.js
create mode 100644 src/main/resources/static/assets/index-C4rnF_7Z.js
create mode 100644 src/main/resources/static/assets/index-C9r6DDSB.css
create mode 100644 src/main/resources/static/assets/index-CCuZB-NG.css
create mode 100644 src/main/resources/static/assets/index-CDduKd2r.js
create mode 100644 src/main/resources/static/assets/index-CHaE9Ts_.css
create mode 100644 src/main/resources/static/assets/index-CLfRwEye.css
create mode 100644 src/main/resources/static/assets/index-CM8MrzQH.js
create mode 100644 src/main/resources/static/assets/index-CPixomK1.js
create mode 100644 src/main/resources/static/assets/index-CSRzcXH1.css
create mode 100644 src/main/resources/static/assets/index-CWCqheZD.js
create mode 100644 src/main/resources/static/assets/index-CY4MhuA3.js
create mode 100644 src/main/resources/static/assets/index-CcsLiXJi.js
create mode 100644 src/main/resources/static/assets/index-Ccu9MowY.js
create mode 100644 src/main/resources/static/assets/index-CkzfmDGw.js
create mode 100644 src/main/resources/static/assets/index-CqwN28z2.css
create mode 100644 src/main/resources/static/assets/index-Cui8xzTa.js
create mode 100644 src/main/resources/static/assets/index-D1x03JMz.css
create mode 100644 src/main/resources/static/assets/index-DEZyuCyo.js
create mode 100644 src/main/resources/static/assets/index-DG6jUMCO.js
create mode 100644 src/main/resources/static/assets/index-DRR7GWDQ.css
create mode 100644 src/main/resources/static/assets/index-DT-8tiGM.css
create mode 100644 src/main/resources/static/assets/index-DU4H9hPB.css
create mode 100644 src/main/resources/static/assets/index-DVzNABKk.js
create mode 100644 src/main/resources/static/assets/index-DXWRNf1M.js
create mode 100644 src/main/resources/static/assets/index-DbZrrFNw.css
create mode 100644 src/main/resources/static/assets/index-DbksAJJx.js
create mode 100644 src/main/resources/static/assets/index-DoVe8cZf.js
create mode 100644 src/main/resources/static/assets/index-DuFzoNeo.js
create mode 100644 src/main/resources/static/assets/index-Dxeh4cxm.css
create mode 100644 src/main/resources/static/assets/index-Dzg5bu5F.js
create mode 100644 src/main/resources/static/assets/index-IIJYiVXu.css
create mode 100644 src/main/resources/static/assets/index-IpME-N8r.js
create mode 100644 src/main/resources/static/assets/index-LLYxzFUk.css
create mode 100644 src/main/resources/static/assets/index-NM4zcHTT.js
create mode 100644 src/main/resources/static/assets/index-R0He3ygV.css
create mode 100644 src/main/resources/static/assets/index-UzHVh4f8.css
create mode 100644 src/main/resources/static/assets/index-W8_2imfK.js
create mode 100644 src/main/resources/static/assets/index-pwJjaRz3.css
create mode 100644 src/main/resources/static/assets/index-uB2-lWdH.js
create mode 100644 src/main/resources/static/assets/index1-DXc6dHVj.css
create mode 100644 src/main/resources/static/assets/index1-Dc0xtdsV.js
create mode 100644 src/main/resources/static/assets/message-DhghIGhu.js
create mode 100644 src/main/resources/static/assets/monitor-wjQIzRk9.js
create mode 100644 src/main/resources/static/assets/system-CZIyXjgT.js
create mode 100644 src/main/resources/static/assets/websocket-BLDuRbEq.js
create mode 100644 src/main/resources/static/index.html
create mode 100644 src/main/resources/static/vite.svg
create mode 100644 src/router/index.ts
create mode 100644 src/stores/message.ts
create mode 100644 src/stores/site.ts
create mode 100644 src/stores/tabs.ts
create mode 100644 src/stores/theme.ts
create mode 100644 src/stores/user.ts
create mode 100644 src/styles/index.scss
create mode 100644 src/utils/crypto.ts
create mode 100644 src/utils/icons.ts
create mode 100644 src/utils/request.ts
create mode 100644 src/utils/websocket.ts
create mode 100644 src/views/biz/code/index.vue
create mode 100644 src/views/biz/order/index.vue
create mode 100644 src/views/biz/product/index.vue
create mode 100644 src/views/biz/user/index.vue
create mode 100644 src/views/biz/user/index1.vue
create mode 100644 src/views/common/iframe.vue
create mode 100644 src/views/dashboard/index.vue
create mode 100644 src/views/dashboard/index1.vue
create mode 100644 src/views/error/404.vue
create mode 100644 src/views/log/loginlog/index.vue
create mode 100644 src/views/log/operlog/index.vue
create mode 100644 src/views/login/index.vue
create mode 100644 src/views/maindata/defectitype/index.vue
create mode 100644 src/views/maindata/material/index.vue
create mode 100644 src/views/message/chat/inde1x.vue
create mode 100644 src/views/message/chat/index.vue
create mode 100644 src/views/message/notice/index.vue
create mode 100644 src/views/monitor/api-access/index.vue
create mode 100644 src/views/monitor/cache/index.vue
create mode 100644 src/views/monitor/job/index.vue
create mode 100644 src/views/monitor/online/index.vue
create mode 100644 src/views/monitor/server-manager/index.vue
create mode 100644 src/views/monitor/server/index.vue
create mode 100644 src/views/org/dept/index.vue
create mode 100644 src/views/org/post/index.vue
create mode 100644 src/views/production/dispatchwork/index.vue
create mode 100644 src/views/production/dispatchwork/index2.vue
create mode 100644 src/views/production/myassigtask/index.vue
create mode 100644 src/views/profile/index.vue
create mode 100644 src/views/redirect/index.vue
create mode 100644 src/views/register/index.vue
create mode 100644 src/views/system/config/index.vue
create mode 100644 src/views/system/customer/index.vue
create mode 100644 src/views/system/dict/index.vue
create mode 100644 src/views/system/file-config/index.vue
create mode 100644 src/views/system/file/index.vue
create mode 100644 src/views/system/menu/index.vue
create mode 100644 src/views/system/role/index.vue
create mode 100644 src/views/system/role/index1.vue
create mode 100644 src/views/system/student/index.vue
create mode 100644 src/views/system/user/index.vue
create mode 100644 src/views/test/test/index.vue
create mode 100644 src/views/tool/gen/index.vue
create mode 100644 src/vite-env.d.ts
create mode 100644 tsconfig.json
create mode 100644 tsconfig.node.json
create mode 100644 vite.config.ts
diff --git a/.env.development b/.env.development
new file mode 100644
index 0000000..1b9cadc
--- /dev/null
+++ b/.env.development
@@ -0,0 +1,13 @@
+# 页面标题
+VITE_APP_TITLE = 伊特机械MES
+
+# 开发环境配置
+VITE_APP_ENV = 'development'
+
+# 开发环境
+VITE_APP_BASE_API = 'http://192.168.5.230/api'
+#VITE_APP_BASE_API = 'http://192.168.5.14:9100/gateway'
+#VITE_APP_BASE_API = '/dev-api'
+
+
+
diff --git a/.env.production b/.env.production
new file mode 100644
index 0000000..7b19521
--- /dev/null
+++ b/.env.production
@@ -0,0 +1,11 @@
+# 页面标题
+VITE_APP_TITLE = 若依管理系统
+
+# 生产环境配置
+VITE_APP_ENV = 'production'
+
+# 若依管理系统/生产环境
+#VITE_APP_BASE_API = '/prod-api'
+VITE_APP_BASE_API = 'https://api.evo-techina.com'
+# 是否在打包时开启压缩,支持 gzip 和 brotli
+VITE_BUILD_COMPRESS = gzip
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..5f6b72c
--- /dev/null
+++ b/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+ 伊特机械MES
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..bd4e620
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,2467 @@
+{
+ "name":"csy-ui",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "csy-ui",
+ "version": "1.0.0",
+ "dependencies": {
+ "@vicons/ionicons5": "^0.12.0",
+ "@xterm/addon-fit": "^0.11.0",
+ "@xterm/xterm": "^6.0.0",
+ "axios": "^1.6.5",
+ "disable-devtool": "^0.3.9",
+ "echarts": "^6.0.0",
+ "jsencrypt": "^3.3.2",
+ "naive-ui": "^2.37.3",
+ "pinia": "^2.1.7",
+ "pinia-plugin-persistedstate": "^3.2.1",
+ "vue": "^3.4.15",
+ "vue-router": "^4.2.5"
+ },
+ "devDependencies": {
+ "@types/node": "^20.11.5",
+ "@vitejs/plugin-vue": "^5.0.3",
+ "sass": "^1.70.0",
+ "typescript": "^5.3.3",
+ "vite": "^5.0.11",
+ "vue-tsc": "^1.8.27"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.6.tgz",
+ "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.6"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.6.tgz",
+ "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@css-render/plugin-bem": {
+ "version": "0.15.14",
+ "resolved": "https://registry.npmmirror.com/@css-render/plugin-bem/-/plugin-bem-0.15.14.tgz",
+ "integrity": "sha512-QK513CJ7yEQxm/P3EwsI+d+ha8kSOcjGvD6SevM41neEMxdULE+18iuQK6tEChAWMOQNQPLG/Rw3Khb69r5neg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "css-render": "~0.15.14"
+ }
+ },
+ "node_modules/@css-render/vue3-ssr": {
+ "version": "0.15.14",
+ "resolved": "https://registry.npmmirror.com/@css-render/vue3-ssr/-/vue3-ssr-0.15.14.tgz",
+ "integrity": "sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==",
+ "license": "MIT",
+ "peerDependencies": {
+ "vue": "^3.0.11"
+ }
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz",
+ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==",
+ "license": "MIT"
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "license": "MIT"
+ },
+ "node_modules/@juggle/resize-observer": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmmirror.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
+ "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/@parcel/watcher": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.6.tgz",
+ "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "detect-libc": "^2.0.3",
+ "is-glob": "^4.0.3",
+ "node-addon-api": "^7.0.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher-android-arm64": "2.5.6",
+ "@parcel/watcher-darwin-arm64": "2.5.6",
+ "@parcel/watcher-darwin-x64": "2.5.6",
+ "@parcel/watcher-freebsd-x64": "2.5.6",
+ "@parcel/watcher-linux-arm-glibc": "2.5.6",
+ "@parcel/watcher-linux-arm-musl": "2.5.6",
+ "@parcel/watcher-linux-arm64-glibc": "2.5.6",
+ "@parcel/watcher-linux-arm64-musl": "2.5.6",
+ "@parcel/watcher-linux-x64-glibc": "2.5.6",
+ "@parcel/watcher-linux-x64-musl": "2.5.6",
+ "@parcel/watcher-win32-arm64": "2.5.6",
+ "@parcel/watcher-win32-ia32": "2.5.6",
+ "@parcel/watcher-win32-x64": "2.5.6"
+ }
+ },
+ "node_modules/@parcel/watcher-android-arm64": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz",
+ "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-darwin-arm64": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz",
+ "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-darwin-x64": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz",
+ "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-freebsd-x64": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz",
+ "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm-glibc": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz",
+ "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm-musl": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz",
+ "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm64-glibc": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz",
+ "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm64-musl": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz",
+ "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-glibc": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz",
+ "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-musl": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz",
+ "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-arm64": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz",
+ "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-ia32": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz",
+ "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-x64": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz",
+ "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.0.tgz",
+ "integrity": "sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.0.tgz",
+ "integrity": "sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.0.tgz",
+ "integrity": "sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.0.tgz",
+ "integrity": "sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.0.tgz",
+ "integrity": "sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.0.tgz",
+ "integrity": "sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.0.tgz",
+ "integrity": "sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.0.tgz",
+ "integrity": "sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.0.tgz",
+ "integrity": "sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.0.tgz",
+ "integrity": "sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.0.tgz",
+ "integrity": "sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.0.tgz",
+ "integrity": "sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.0.tgz",
+ "integrity": "sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.0.tgz",
+ "integrity": "sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.0.tgz",
+ "integrity": "sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.0.tgz",
+ "integrity": "sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.0.tgz",
+ "integrity": "sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.0.tgz",
+ "integrity": "sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.0.tgz",
+ "integrity": "sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.0.tgz",
+ "integrity": "sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.0.tgz",
+ "integrity": "sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.0.tgz",
+ "integrity": "sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.0.tgz",
+ "integrity": "sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.0.tgz",
+ "integrity": "sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.0.tgz",
+ "integrity": "sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/katex": {
+ "version": "0.16.8",
+ "resolved": "https://registry.npmmirror.com/@types/katex/-/katex-0.16.8.tgz",
+ "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash-es": {
+ "version": "4.17.12",
+ "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "20.19.30",
+ "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.19.30.tgz",
+ "integrity": "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/@vicons/ionicons5": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmmirror.com/@vicons/ionicons5/-/ionicons5-0.12.0.tgz",
+ "integrity": "sha512-Iy1EUVRpX0WWxeu1VIReR1zsZLMc4fqpt223czR+Rpnrwu7pt46nbnC2ycO7ItI/uqDLJxnbcMC7FujKs9IfFA==",
+ "license": "MIT"
+ },
+ "node_modules/@vitejs/plugin-vue": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",
+ "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^5.0.0 || ^6.0.0",
+ "vue": "^3.2.25"
+ }
+ },
+ "node_modules/@volar/language-core": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.11.1.tgz",
+ "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/source-map": "1.11.1"
+ }
+ },
+ "node_modules/@volar/source-map": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.11.1.tgz",
+ "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "muggle-string": "^0.3.1"
+ }
+ },
+ "node_modules/@volar/typescript": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.11.1.tgz",
+ "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/language-core": "1.11.1",
+ "path-browserify": "^1.0.1"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.27.tgz",
+ "integrity": "sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.5",
+ "@vue/shared": "3.5.27",
+ "entities": "^7.0.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz",
+ "integrity": "sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-core": "3.5.27",
+ "@vue/shared": "3.5.27"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz",
+ "integrity": "sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.5",
+ "@vue/compiler-core": "3.5.27",
+ "@vue/compiler-dom": "3.5.27",
+ "@vue/compiler-ssr": "3.5.27",
+ "@vue/shared": "3.5.27",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.21",
+ "postcss": "^8.5.6",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz",
+ "integrity": "sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.27",
+ "@vue/shared": "3.5.27"
+ }
+ },
+ "node_modules/@vue/devtools-api": {
+ "version": "6.6.4",
+ "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
+ "license": "MIT"
+ },
+ "node_modules/@vue/language-core": {
+ "version": "1.8.27",
+ "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-1.8.27.tgz",
+ "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/language-core": "~1.11.1",
+ "@volar/source-map": "~1.11.1",
+ "@vue/compiler-dom": "^3.3.0",
+ "@vue/shared": "^3.3.0",
+ "computeds": "^0.0.1",
+ "minimatch": "^9.0.3",
+ "muggle-string": "^0.3.1",
+ "path-browserify": "^1.0.1",
+ "vue-template-compiler": "^2.7.14"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.27.tgz",
+ "integrity": "sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/shared": "3.5.27"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.27.tgz",
+ "integrity": "sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.27",
+ "@vue/shared": "3.5.27"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.27.tgz",
+ "integrity": "sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.27",
+ "@vue/runtime-core": "3.5.27",
+ "@vue/shared": "3.5.27",
+ "csstype": "^3.2.3"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.27.tgz",
+ "integrity": "sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-ssr": "3.5.27",
+ "@vue/shared": "3.5.27"
+ },
+ "peerDependencies": {
+ "vue": "3.5.27"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.27.tgz",
+ "integrity": "sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==",
+ "license": "MIT"
+ },
+ "node_modules/@xterm/addon-fit": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmmirror.com/@xterm/addon-fit/-/addon-fit-0.11.0.tgz",
+ "integrity": "sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g==",
+ "license": "MIT"
+ },
+ "node_modules/@xterm/xterm": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmmirror.com/@xterm/xterm/-/xterm-6.0.0.tgz",
+ "integrity": "sha512-TQwDdQGtwwDt+2cgKDLn0IRaSxYu1tSUjgKarSDkUM0ZNiSRXFpjxEsvc/Zgc5kq5omJ+V0a8/kIM2WD3sMOYg==",
+ "license": "MIT",
+ "workspaces": [
+ "addons/*"
+ ]
+ },
+ "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/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
+ "node_modules/axios": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmmirror.com/axios/-/axios-1.13.4.tgz",
+ "integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.4",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "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.2",
+ "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/computeds": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmmirror.com/computeds/-/computeds-0.0.1.tgz",
+ "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/css-render": {
+ "version": "0.15.14",
+ "resolved": "https://registry.npmmirror.com/css-render/-/css-render-0.15.14.tgz",
+ "integrity": "sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/hash": "~0.8.0",
+ "csstype": "~3.0.5"
+ }
+ },
+ "node_modules/css-render/node_modules/csstype": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.0.11.tgz",
+ "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==",
+ "license": "MIT"
+ },
+ "node_modules/csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "license": "MIT"
+ },
+ "node_modules/date-fns": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-4.1.0.tgz",
+ "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
+ "node_modules/date-fns-tz": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmmirror.com/date-fns-tz/-/date-fns-tz-3.2.0.tgz",
+ "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "date-fns": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "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/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/disable-devtool": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmmirror.com/disable-devtool/-/disable-devtool-0.3.9.tgz",
+ "integrity": "sha512-WHCpC8f93Cn2DnTeaq57NFLcdw4921sovh1ammnp/2o8Snb704HK/Vw1/D2D1Pihc0zc8/mVKb5nchHtoadObQ==",
+ "license": "MIT"
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/echarts": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmmirror.com/echarts/-/echarts-6.0.0.tgz",
+ "integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "2.3.0",
+ "zrender": "6.0.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz",
+ "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "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/evtd": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmmirror.com/evtd/-/evtd-0.2.4.tgz",
+ "integrity": "sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==",
+ "license": "MIT"
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.11",
+ "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz",
+ "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "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/highlight.js": {
+ "version": "11.11.1",
+ "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.11.1.tgz",
+ "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.1.4.tgz",
+ "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/jsencrypt": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmmirror.com/jsencrypt/-/jsencrypt-3.5.4.tgz",
+ "integrity": "sha512-kNjfYEMNASxrDGsmcSQh/rUTmcoRfSUkxnAz+MMywM8jtGu+fFEZ3nJjHM58zscVnwR0fYmG9sGkTDjqUdpiwA==",
+ "license": "MIT"
+ },
+ "node_modules/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
+ "license": "MIT"
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
+ "license": "MIT"
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "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.3.1",
+ "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.3.1.tgz",
+ "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/naive-ui": {
+ "version": "2.43.2",
+ "resolved": "https://registry.npmmirror.com/naive-ui/-/naive-ui-2.43.2.tgz",
+ "integrity": "sha512-YlLMnGrwGTOc+zMj90sG3ubaH5/7czsgLgGcjTLA981IUaz8r6t4WIujNt8r9PNr+dqv6XNEr0vxkARgPPjfBQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@css-render/plugin-bem": "^0.15.14",
+ "@css-render/vue3-ssr": "^0.15.14",
+ "@types/katex": "^0.16.2",
+ "@types/lodash": "^4.17.20",
+ "@types/lodash-es": "^4.17.12",
+ "async-validator": "^4.2.5",
+ "css-render": "^0.15.14",
+ "csstype": "^3.1.3",
+ "date-fns": "^4.1.0",
+ "date-fns-tz": "^3.2.0",
+ "evtd": "^0.2.4",
+ "highlight.js": "^11.8.0",
+ "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
+ "seemly": "^0.3.10",
+ "treemate": "^0.3.11",
+ "vdirs": "^0.1.8",
+ "vooks": "^0.2.12",
+ "vueuc": "^0.4.65"
+ },
+ "peerDependencies": {
+ "vue": "^3.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "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/node-addon-api": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz",
+ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/path-browserify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz",
+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pinia": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.3.1.tgz",
+ "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^6.6.3",
+ "vue-demi": "^0.14.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.4.4",
+ "vue": "^2.7.0 || ^3.5.11"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pinia-plugin-persistedstate": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.3.tgz",
+ "integrity": "sha512-Cm819WBj/s5K5DGw55EwbXDtx+EZzM0YR5AZbq9XE3u0xvXwvX2JnWoFpWIcdzISBHqy9H1UiSIUmXyXqWsQRQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "pinia": "^2.0.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "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.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "license": "MIT"
+ },
+ "node_modules/readdirp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.57.0.tgz",
+ "integrity": "sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.57.0",
+ "@rollup/rollup-android-arm64": "4.57.0",
+ "@rollup/rollup-darwin-arm64": "4.57.0",
+ "@rollup/rollup-darwin-x64": "4.57.0",
+ "@rollup/rollup-freebsd-arm64": "4.57.0",
+ "@rollup/rollup-freebsd-x64": "4.57.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.57.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.57.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.57.0",
+ "@rollup/rollup-linux-arm64-musl": "4.57.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.57.0",
+ "@rollup/rollup-linux-loong64-musl": "4.57.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.57.0",
+ "@rollup/rollup-linux-ppc64-musl": "4.57.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.57.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.57.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.57.0",
+ "@rollup/rollup-linux-x64-gnu": "4.57.0",
+ "@rollup/rollup-linux-x64-musl": "4.57.0",
+ "@rollup/rollup-openbsd-x64": "4.57.0",
+ "@rollup/rollup-openharmony-arm64": "4.57.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.57.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.57.0",
+ "@rollup/rollup-win32-x64-gnu": "4.57.0",
+ "@rollup/rollup-win32-x64-msvc": "4.57.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/sass": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmmirror.com/sass/-/sass-1.97.3.tgz",
+ "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chokidar": "^4.0.0",
+ "immutable": "^5.0.2",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher": "^2.4.1"
+ }
+ },
+ "node_modules/seemly": {
+ "version": "0.3.10",
+ "resolved": "https://registry.npmmirror.com/seemly/-/seemly-0.3.10.tgz",
+ "integrity": "sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==",
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/treemate": {
+ "version": "0.3.11",
+ "resolved": "https://registry.npmmirror.com/treemate/-/treemate-0.3.11.tgz",
+ "integrity": "sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==",
+ "license": "MIT"
+ },
+ "node_modules/tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+ "license": "0BSD"
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "devOptional": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vdirs": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmmirror.com/vdirs/-/vdirs-0.1.8.tgz",
+ "integrity": "sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==",
+ "license": "MIT",
+ "dependencies": {
+ "evtd": "^0.2.2"
+ },
+ "peerDependencies": {
+ "vue": "^3.0.11"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.4.21",
+ "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.21.tgz",
+ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vooks": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmmirror.com/vooks/-/vooks-0.2.12.tgz",
+ "integrity": "sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==",
+ "license": "MIT",
+ "dependencies": {
+ "evtd": "^0.2.2"
+ },
+ "peerDependencies": {
+ "vue": "^3.0.0"
+ }
+ },
+ "node_modules/vue": {
+ "version": "3.5.27",
+ "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.27.tgz",
+ "integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.27",
+ "@vue/compiler-sfc": "3.5.27",
+ "@vue/runtime-dom": "3.5.27",
+ "@vue/server-renderer": "3.5.27",
+ "@vue/shared": "3.5.27"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue-demi": {
+ "version": "0.14.10",
+ "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue-router": {
+ "version": "4.6.4",
+ "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.6.4.tgz",
+ "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^6.6.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "vue": "^3.5.0"
+ }
+ },
+ "node_modules/vue-template-compiler": {
+ "version": "2.7.16",
+ "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
+ "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "de-indent": "^1.0.2",
+ "he": "^1.2.0"
+ }
+ },
+ "node_modules/vue-tsc": {
+ "version": "1.8.27",
+ "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.8.27.tgz",
+ "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@volar/typescript": "~1.11.1",
+ "@vue/language-core": "1.8.27",
+ "semver": "^7.5.4"
+ },
+ "bin": {
+ "vue-tsc": "bin/vue-tsc.js"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ }
+ },
+ "node_modules/vueuc": {
+ "version": "0.4.65",
+ "resolved": "https://registry.npmmirror.com/vueuc/-/vueuc-0.4.65.tgz",
+ "integrity": "sha512-lXuMl+8gsBmruudfxnMF9HW4be8rFziylXFu1VHVNbLVhRTXXV4njvpRuJapD/8q+oFEMSfQMH16E/85VoWRyQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@css-render/vue3-ssr": "^0.15.10",
+ "@juggle/resize-observer": "^3.3.1",
+ "css-render": "^0.15.10",
+ "evtd": "^0.2.4",
+ "seemly": "^0.3.6",
+ "vdirs": "^0.1.4",
+ "vooks": "^0.2.4"
+ },
+ "peerDependencies": {
+ "vue": "^3.0.11"
+ }
+ },
+ "node_modules/zrender": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmmirror.com/zrender/-/zrender-6.0.0.tgz",
+ "integrity": "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tslib": "2.3.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..9656715
--- /dev/null
+++ b/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "mes",
+ "version": "1.0.0",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@vicons/ionicons5": "^0.12.0",
+ "@xterm/addon-fit": "^0.11.0",
+ "@xterm/xterm": "^6.0.0",
+ "axios": "^1.6.5",
+ "disable-devtool": "^0.3.9",
+ "echarts": "^6.0.0",
+ "jsencrypt": "^3.3.2",
+ "naive-ui": "^2.37.3",
+ "pinia": "^2.1.7",
+ "pinia-plugin-persistedstate": "^3.2.1",
+ "vue": "^3.4.15",
+ "vue-router": "^4.2.5"
+ },
+ "devDependencies": {
+ "@types/node": "^20.11.5",
+ "@vitejs/plugin-vue": "^5.0.3",
+ "sass": "^1.70.0",
+ "typescript": "^5.3.3",
+ "vite": "^5.0.11",
+ "vue-tsc": "^1.8.27"
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..2ba0d16
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,1602 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@vicons/ionicons5':
+ specifier: ^0.12.0
+ version: 0.12.0
+ '@xterm/addon-fit':
+ specifier: ^0.11.0
+ version: 0.11.0
+ '@xterm/xterm':
+ specifier: ^6.0.0
+ version: 6.0.0
+ axios:
+ specifier: ^1.6.5
+ version: 1.14.0
+ disable-devtool:
+ specifier: ^0.3.9
+ version: 0.3.9
+ echarts:
+ specifier: ^6.0.0
+ version: 6.0.0
+ jsencrypt:
+ specifier: ^3.3.2
+ version: 3.5.4
+ naive-ui:
+ specifier: ^2.37.3
+ version: 2.44.1(vue@3.5.31(typescript@5.9.3))
+ pinia:
+ specifier: ^2.1.7
+ version: 2.3.1(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))
+ pinia-plugin-persistedstate:
+ specifier: ^3.2.1
+ version: 3.2.3(pinia@2.3.1(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)))
+ vue:
+ specifier: ^3.4.15
+ version: 3.5.31(typescript@5.9.3)
+ vue-router:
+ specifier: ^4.2.5
+ version: 4.6.4(vue@3.5.31(typescript@5.9.3))
+ devDependencies:
+ '@types/node':
+ specifier: ^20.11.5
+ version: 20.19.37
+ '@vitejs/plugin-vue':
+ specifier: ^5.0.3
+ version: 5.2.4(vite@5.4.21(@types/node@20.19.37)(sass@1.98.0))(vue@3.5.31(typescript@5.9.3))
+ sass:
+ specifier: ^1.70.0
+ version: 1.98.0
+ typescript:
+ specifier: ^5.3.3
+ version: 5.9.3
+ vite:
+ specifier: ^5.0.11
+ version: 5.4.21(@types/node@20.19.37)(sass@1.98.0)
+ vue-tsc:
+ specifier: ^1.8.27
+ version: 1.8.27(typescript@5.9.3)
+
+packages:
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.29.2':
+ resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/types@7.29.0':
+ resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
+ engines: {node: '>=6.9.0'}
+
+ '@css-render/plugin-bem@0.15.14':
+ resolution: {integrity: sha512-QK513CJ7yEQxm/P3EwsI+d+ha8kSOcjGvD6SevM41neEMxdULE+18iuQK6tEChAWMOQNQPLG/Rw3Khb69r5neg==}
+ peerDependencies:
+ css-render: ~0.15.14
+
+ '@css-render/vue3-ssr@0.15.14':
+ resolution: {integrity: sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==}
+ peerDependencies:
+ vue: ^3.0.11
+
+ '@emotion/hash@0.8.0':
+ resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
+
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.21.5':
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.21.5':
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.21.5':
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.21.5':
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.21.5':
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.21.5':
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.21.5':
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.21.5':
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.21.5':
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.21.5':
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-x64@0.21.5':
+ resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-x64@0.21.5':
+ resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.21.5':
+ resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.21.5':
+ resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.21.5':
+ resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.21.5':
+ resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@juggle/resize-observer@3.4.0':
+ resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
+
+ '@parcel/watcher-android-arm64@2.5.6':
+ resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ '@parcel/watcher-darwin-arm64@2.5.6':
+ resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@parcel/watcher-darwin-x64@2.5.6':
+ resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@parcel/watcher-freebsd-x64@2.5.6':
+ resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
+ resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm-musl@2.5.6':
+ resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
+ resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
+ resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
+ resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@parcel/watcher-linux-x64-musl@2.5.6':
+ resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@parcel/watcher-win32-arm64@2.5.6':
+ resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@parcel/watcher-win32-ia32@2.5.6':
+ resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@parcel/watcher-win32-x64@2.5.6':
+ resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@parcel/watcher@2.5.6':
+ resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==}
+ engines: {node: '>= 10.0.0'}
+
+ '@rollup/rollup-android-arm-eabi@4.60.1':
+ resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.60.1':
+ resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.60.1':
+ resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.60.1':
+ resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.60.1':
+ resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.60.1':
+ resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.60.1':
+ resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.60.1':
+ resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.60.1':
+ resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.60.1':
+ resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-gnu@4.60.1':
+ resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-musl@4.60.1':
+ resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.60.1':
+ resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-musl@4.60.1':
+ resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.60.1':
+ resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.60.1':
+ resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.60.1':
+ resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.60.1':
+ resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.60.1':
+ resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-openbsd-x64@4.60.1':
+ resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@rollup/rollup-openharmony-arm64@4.60.1':
+ resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.60.1':
+ resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.60.1':
+ resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.60.1':
+ resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.60.1':
+ resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/lodash-es@4.17.12':
+ resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
+
+ '@types/lodash@4.17.24':
+ resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==}
+
+ '@types/node@20.19.37':
+ resolution: {integrity: sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==}
+
+ '@vicons/ionicons5@0.12.0':
+ resolution: {integrity: sha512-Iy1EUVRpX0WWxeu1VIReR1zsZLMc4fqpt223czR+Rpnrwu7pt46nbnC2ycO7ItI/uqDLJxnbcMC7FujKs9IfFA==}
+
+ '@vitejs/plugin-vue@5.2.4':
+ resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ vite: ^5.0.0 || ^6.0.0
+ vue: ^3.2.25
+
+ '@volar/language-core@1.11.1':
+ resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==}
+
+ '@volar/source-map@1.11.1':
+ resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==}
+
+ '@volar/typescript@1.11.1':
+ resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==}
+
+ '@vue/compiler-core@3.5.31':
+ resolution: {integrity: sha512-k/ueL14aNIEy5Onf0OVzR8kiqF/WThgLdFhxwa4e/KF/0qe38IwIdofoSWBTvvxQOesaz6riAFAUaYjoF9fLLQ==}
+
+ '@vue/compiler-dom@3.5.31':
+ resolution: {integrity: sha512-BMY/ozS/xxjYqRFL+tKdRpATJYDTTgWSo0+AJvJNg4ig+Hgb0dOsHPXvloHQ5hmlivUqw1Yt2pPIqp4e0v1GUw==}
+
+ '@vue/compiler-sfc@3.5.31':
+ resolution: {integrity: sha512-M8wpPgR9UJ8MiRGjppvx9uWJfLV7A/T+/rL8s/y3QG3u0c2/YZgff3d6SuimKRIhcYnWg5fTfDMlz2E6seUW8Q==}
+
+ '@vue/compiler-ssr@3.5.31':
+ resolution: {integrity: sha512-h0xIMxrt/LHOvJKMri+vdYT92BrK3HFLtDqq9Pr/lVVfE4IyKZKvWf0vJFW10Yr6nX02OR4MkJwI0c1HDa1hog==}
+
+ '@vue/devtools-api@6.6.4':
+ resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
+
+ '@vue/language-core@1.8.27':
+ resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@vue/reactivity@3.5.31':
+ resolution: {integrity: sha512-DtKXxk9E/KuVvt8VxWu+6Luc9I9ETNcqR1T1oW1gf02nXaZ1kuAx58oVu7uX9XxJR0iJCro6fqBLw9oSBELo5g==}
+
+ '@vue/runtime-core@3.5.31':
+ resolution: {integrity: sha512-AZPmIHXEAyhpkmN7aWlqjSfYynmkWlluDNPHMCZKFHH+lLtxP/30UJmoVhXmbDoP1Ng0jG0fyY2zCj1PnSSA6Q==}
+
+ '@vue/runtime-dom@3.5.31':
+ resolution: {integrity: sha512-xQJsNRmGPeDCJq/u813tyonNgWBFjzfVkBwDREdEWndBnGdHLHgkwNBQxLtg4zDrzKTEcnikUy1UUNecb3lJ6g==}
+
+ '@vue/server-renderer@3.5.31':
+ resolution: {integrity: sha512-GJuwRvMcdZX/CriUnyIIOGkx3rMV3H6sOu0JhdKbduaeCji6zb60iOGMY7tFoN24NfsUYoFBhshZtGxGpxO4iA==}
+ peerDependencies:
+ vue: 3.5.31
+
+ '@vue/shared@3.5.31':
+ resolution: {integrity: sha512-nBxuiuS9Lj5bPkPbWogPUnjxxWpkRniX7e5UBQDWl6Fsf4roq9wwV+cR7ezQ4zXswNvPIlsdj1slcLB7XCsRAw==}
+
+ '@xterm/addon-fit@0.11.0':
+ resolution: {integrity: sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g==}
+
+ '@xterm/xterm@6.0.0':
+ resolution: {integrity: sha512-TQwDdQGtwwDt+2cgKDLn0IRaSxYu1tSUjgKarSDkUM0ZNiSRXFpjxEsvc/Zgc5kq5omJ+V0a8/kIM2WD3sMOYg==}
+
+ async-validator@4.2.5:
+ resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ axios@1.14.0:
+ resolution: {integrity: sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ brace-expansion@2.0.3:
+ resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ chokidar@4.0.3:
+ resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
+ engines: {node: '>= 14.16.0'}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ computeds@0.0.1:
+ resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==}
+
+ css-render@0.15.14:
+ resolution: {integrity: sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==}
+
+ csstype@3.0.11:
+ resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==}
+
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+
+ date-fns-tz@3.2.0:
+ resolution: {integrity: sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==}
+ peerDependencies:
+ date-fns: ^3.0.0 || ^4.0.0
+
+ date-fns@4.1.0:
+ resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
+
+ de-indent@1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ disable-devtool@0.3.9:
+ resolution: {integrity: sha512-WHCpC8f93Cn2DnTeaq57NFLcdw4921sovh1ammnp/2o8Snb704HK/Vw1/D2D1Pihc0zc8/mVKb5nchHtoadObQ==}
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ echarts@6.0.0:
+ resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==}
+
+ entities@7.0.1:
+ resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
+ engines: {node: '>=0.12'}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
+ esbuild@0.21.5:
+ resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ evtd@0.2.4:
+ resolution: {integrity: sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==}
+
+ follow-redirects@1.15.11:
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ form-data@4.0.5:
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
+ engines: {node: '>= 6'}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ highlight.js@11.11.1:
+ resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
+ engines: {node: '>=12.0.0'}
+
+ immutable@5.1.5:
+ resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ jsencrypt@3.5.4:
+ resolution: {integrity: sha512-kNjfYEMNASxrDGsmcSQh/rUTmcoRfSUkxnAz+MMywM8jtGu+fFEZ3nJjHM58zscVnwR0fYmG9sGkTDjqUdpiwA==}
+
+ lodash-es@4.17.23:
+ resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==}
+
+ lodash@4.17.23:
+ resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ minimatch@9.0.9:
+ resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ muggle-string@0.3.1:
+ resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==}
+
+ naive-ui@2.44.1:
+ resolution: {integrity: sha512-reo8Esw0p58liZwbUutC7meW24Xbn3EwNv91zReWKm2W4JPu+zfgJRn/F7aO0BFmvN+h2brA2M5lRvYqLq4kuA==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ vue: ^3.0.0
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-addon-api@7.1.1:
+ resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+
+ path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@4.0.4:
+ resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
+ engines: {node: '>=12'}
+
+ pinia-plugin-persistedstate@3.2.3:
+ resolution: {integrity: sha512-Cm819WBj/s5K5DGw55EwbXDtx+EZzM0YR5AZbq9XE3u0xvXwvX2JnWoFpWIcdzISBHqy9H1UiSIUmXyXqWsQRQ==}
+ peerDependencies:
+ pinia: ^2.0.0
+
+ pinia@2.3.1:
+ resolution: {integrity: sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==}
+ peerDependencies:
+ typescript: '>=4.4.4'
+ vue: ^2.7.0 || ^3.5.11
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ postcss@8.5.8:
+ resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ proxy-from-env@2.1.0:
+ resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==}
+ engines: {node: '>=10'}
+
+ readdirp@4.1.2:
+ resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+ engines: {node: '>= 14.18.0'}
+
+ rollup@4.60.1:
+ resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ sass@1.98.0:
+ resolution: {integrity: sha512-+4N/u9dZ4PrgzGgPlKnaaRQx64RO0JBKs9sDhQ2pLgN6JQZ25uPQZKQYaBJU48Kd5BxgXoJ4e09Dq7nMcOUW3A==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ seemly@0.3.10:
+ resolution: {integrity: sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==}
+
+ semver@7.7.4:
+ resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ treemate@0.3.11:
+ resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==}
+
+ tslib@2.3.0:
+ resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
+
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ vdirs@0.1.8:
+ resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==}
+ peerDependencies:
+ vue: ^3.0.11
+
+ vite@5.4.21:
+ resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ vooks@0.2.12:
+ resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==}
+ peerDependencies:
+ vue: ^3.0.0
+
+ vue-demi@0.14.10:
+ resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+
+ vue-router@4.6.4:
+ resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==}
+ peerDependencies:
+ vue: ^3.5.0
+
+ vue-template-compiler@2.7.16:
+ resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==}
+
+ vue-tsc@1.8.27:
+ resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==}
+ hasBin: true
+ peerDependencies:
+ typescript: '*'
+
+ vue@3.5.31:
+ resolution: {integrity: sha512-iV/sU9SzOlmA/0tygSmjkEN6Jbs3nPoIPFhCMLD2STrjgOU8DX7ZtzMhg4ahVwf5Rp9KoFzcXeB1ZrVbLBp5/Q==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ vueuc@0.4.65:
+ resolution: {integrity: sha512-lXuMl+8gsBmruudfxnMF9HW4be8rFziylXFu1VHVNbLVhRTXXV4njvpRuJapD/8q+oFEMSfQMH16E/85VoWRyQ==}
+ peerDependencies:
+ vue: ^3.0.11
+
+ zrender@6.0.0:
+ resolution: {integrity: sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==}
+
+snapshots:
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/parser@7.29.2':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/types@7.29.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
+ '@css-render/plugin-bem@0.15.14(css-render@0.15.14)':
+ dependencies:
+ css-render: 0.15.14
+
+ '@css-render/vue3-ssr@0.15.14(vue@3.5.31(typescript@5.9.3))':
+ dependencies:
+ vue: 3.5.31(typescript@5.9.3)
+
+ '@emotion/hash@0.8.0': {}
+
+ '@esbuild/aix-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm@0.21.5':
+ optional: true
+
+ '@esbuild/android-x64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-x64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/linux-loong64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-s390x@0.21.5':
+ optional: true
+
+ '@esbuild/linux-x64@0.21.5':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/sunos-x64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/win32-x64@0.21.5':
+ optional: true
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@juggle/resize-observer@3.4.0': {}
+
+ '@parcel/watcher-android-arm64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-darwin-arm64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-darwin-x64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-freebsd-x64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm-musl@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-x64-musl@2.5.6':
+ optional: true
+
+ '@parcel/watcher-win32-arm64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-win32-ia32@2.5.6':
+ optional: true
+
+ '@parcel/watcher-win32-x64@2.5.6':
+ optional: true
+
+ '@parcel/watcher@2.5.6':
+ dependencies:
+ detect-libc: 2.1.2
+ is-glob: 4.0.3
+ node-addon-api: 7.1.1
+ picomatch: 4.0.4
+ optionalDependencies:
+ '@parcel/watcher-android-arm64': 2.5.6
+ '@parcel/watcher-darwin-arm64': 2.5.6
+ '@parcel/watcher-darwin-x64': 2.5.6
+ '@parcel/watcher-freebsd-x64': 2.5.6
+ '@parcel/watcher-linux-arm-glibc': 2.5.6
+ '@parcel/watcher-linux-arm-musl': 2.5.6
+ '@parcel/watcher-linux-arm64-glibc': 2.5.6
+ '@parcel/watcher-linux-arm64-musl': 2.5.6
+ '@parcel/watcher-linux-x64-glibc': 2.5.6
+ '@parcel/watcher-linux-x64-musl': 2.5.6
+ '@parcel/watcher-win32-arm64': 2.5.6
+ '@parcel/watcher-win32-ia32': 2.5.6
+ '@parcel/watcher-win32-x64': 2.5.6
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.60.1':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-musl@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-musl@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.60.1':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.60.1':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.60.1':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.60.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.60.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.60.1':
+ optional: true
+
+ '@types/estree@1.0.8': {}
+
+ '@types/lodash-es@4.17.12':
+ dependencies:
+ '@types/lodash': 4.17.24
+
+ '@types/lodash@4.17.24': {}
+
+ '@types/node@20.19.37':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@vicons/ionicons5@0.12.0': {}
+
+ '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@20.19.37)(sass@1.98.0))(vue@3.5.31(typescript@5.9.3))':
+ dependencies:
+ vite: 5.4.21(@types/node@20.19.37)(sass@1.98.0)
+ vue: 3.5.31(typescript@5.9.3)
+
+ '@volar/language-core@1.11.1':
+ dependencies:
+ '@volar/source-map': 1.11.1
+
+ '@volar/source-map@1.11.1':
+ dependencies:
+ muggle-string: 0.3.1
+
+ '@volar/typescript@1.11.1':
+ dependencies:
+ '@volar/language-core': 1.11.1
+ path-browserify: 1.0.1
+
+ '@vue/compiler-core@3.5.31':
+ dependencies:
+ '@babel/parser': 7.29.2
+ '@vue/shared': 3.5.31
+ entities: 7.0.1
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
+
+ '@vue/compiler-dom@3.5.31':
+ dependencies:
+ '@vue/compiler-core': 3.5.31
+ '@vue/shared': 3.5.31
+
+ '@vue/compiler-sfc@3.5.31':
+ dependencies:
+ '@babel/parser': 7.29.2
+ '@vue/compiler-core': 3.5.31
+ '@vue/compiler-dom': 3.5.31
+ '@vue/compiler-ssr': 3.5.31
+ '@vue/shared': 3.5.31
+ estree-walker: 2.0.2
+ magic-string: 0.30.21
+ postcss: 8.5.8
+ source-map-js: 1.2.1
+
+ '@vue/compiler-ssr@3.5.31':
+ dependencies:
+ '@vue/compiler-dom': 3.5.31
+ '@vue/shared': 3.5.31
+
+ '@vue/devtools-api@6.6.4': {}
+
+ '@vue/language-core@1.8.27(typescript@5.9.3)':
+ dependencies:
+ '@volar/language-core': 1.11.1
+ '@volar/source-map': 1.11.1
+ '@vue/compiler-dom': 3.5.31
+ '@vue/shared': 3.5.31
+ computeds: 0.0.1
+ minimatch: 9.0.9
+ muggle-string: 0.3.1
+ path-browserify: 1.0.1
+ vue-template-compiler: 2.7.16
+ optionalDependencies:
+ typescript: 5.9.3
+
+ '@vue/reactivity@3.5.31':
+ dependencies:
+ '@vue/shared': 3.5.31
+
+ '@vue/runtime-core@3.5.31':
+ dependencies:
+ '@vue/reactivity': 3.5.31
+ '@vue/shared': 3.5.31
+
+ '@vue/runtime-dom@3.5.31':
+ dependencies:
+ '@vue/reactivity': 3.5.31
+ '@vue/runtime-core': 3.5.31
+ '@vue/shared': 3.5.31
+ csstype: 3.2.3
+
+ '@vue/server-renderer@3.5.31(vue@3.5.31(typescript@5.9.3))':
+ dependencies:
+ '@vue/compiler-ssr': 3.5.31
+ '@vue/shared': 3.5.31
+ vue: 3.5.31(typescript@5.9.3)
+
+ '@vue/shared@3.5.31': {}
+
+ '@xterm/addon-fit@0.11.0': {}
+
+ '@xterm/xterm@6.0.0': {}
+
+ async-validator@4.2.5: {}
+
+ asynckit@0.4.0: {}
+
+ axios@1.14.0:
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.5
+ proxy-from-env: 2.1.0
+ transitivePeerDependencies:
+ - debug
+
+ balanced-match@1.0.2: {}
+
+ brace-expansion@2.0.3:
+ dependencies:
+ balanced-match: 1.0.2
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ chokidar@4.0.3:
+ dependencies:
+ readdirp: 4.1.2
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ computeds@0.0.1: {}
+
+ css-render@0.15.14:
+ dependencies:
+ '@emotion/hash': 0.8.0
+ csstype: 3.0.11
+
+ csstype@3.0.11: {}
+
+ csstype@3.2.3: {}
+
+ date-fns-tz@3.2.0(date-fns@4.1.0):
+ dependencies:
+ date-fns: 4.1.0
+
+ date-fns@4.1.0: {}
+
+ de-indent@1.0.2: {}
+
+ delayed-stream@1.0.0: {}
+
+ detect-libc@2.1.2:
+ optional: true
+
+ disable-devtool@0.3.9: {}
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ echarts@6.0.0:
+ dependencies:
+ tslib: 2.3.0
+ zrender: 6.0.0
+
+ entities@7.0.1: {}
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ esbuild@0.21.5:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.5
+ '@esbuild/android-arm': 0.21.5
+ '@esbuild/android-arm64': 0.21.5
+ '@esbuild/android-x64': 0.21.5
+ '@esbuild/darwin-arm64': 0.21.5
+ '@esbuild/darwin-x64': 0.21.5
+ '@esbuild/freebsd-arm64': 0.21.5
+ '@esbuild/freebsd-x64': 0.21.5
+ '@esbuild/linux-arm': 0.21.5
+ '@esbuild/linux-arm64': 0.21.5
+ '@esbuild/linux-ia32': 0.21.5
+ '@esbuild/linux-loong64': 0.21.5
+ '@esbuild/linux-mips64el': 0.21.5
+ '@esbuild/linux-ppc64': 0.21.5
+ '@esbuild/linux-riscv64': 0.21.5
+ '@esbuild/linux-s390x': 0.21.5
+ '@esbuild/linux-x64': 0.21.5
+ '@esbuild/netbsd-x64': 0.21.5
+ '@esbuild/openbsd-x64': 0.21.5
+ '@esbuild/sunos-x64': 0.21.5
+ '@esbuild/win32-arm64': 0.21.5
+ '@esbuild/win32-ia32': 0.21.5
+ '@esbuild/win32-x64': 0.21.5
+
+ estree-walker@2.0.2: {}
+
+ evtd@0.2.4: {}
+
+ follow-redirects@1.15.11: {}
+
+ form-data@4.0.5:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
+ mime-types: 2.1.35
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ get-intrinsic@1.3.0:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ gopd@1.2.0: {}
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ he@1.2.0: {}
+
+ highlight.js@11.11.1: {}
+
+ immutable@5.1.5: {}
+
+ is-extglob@2.1.1:
+ optional: true
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+ optional: true
+
+ jsencrypt@3.5.4: {}
+
+ lodash-es@4.17.23: {}
+
+ lodash@4.17.23: {}
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ math-intrinsics@1.1.0: {}
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ minimatch@9.0.9:
+ dependencies:
+ brace-expansion: 2.0.3
+
+ muggle-string@0.3.1: {}
+
+ naive-ui@2.44.1(vue@3.5.31(typescript@5.9.3)):
+ dependencies:
+ '@css-render/plugin-bem': 0.15.14(css-render@0.15.14)
+ '@css-render/vue3-ssr': 0.15.14(vue@3.5.31(typescript@5.9.3))
+ '@types/lodash': 4.17.24
+ '@types/lodash-es': 4.17.12
+ async-validator: 4.2.5
+ css-render: 0.15.14
+ csstype: 3.2.3
+ date-fns: 4.1.0
+ date-fns-tz: 3.2.0(date-fns@4.1.0)
+ evtd: 0.2.4
+ highlight.js: 11.11.1
+ lodash: 4.17.23
+ lodash-es: 4.17.23
+ seemly: 0.3.10
+ treemate: 0.3.11
+ vdirs: 0.1.8(vue@3.5.31(typescript@5.9.3))
+ vooks: 0.2.12(vue@3.5.31(typescript@5.9.3))
+ vue: 3.5.31(typescript@5.9.3)
+ vueuc: 0.4.65(vue@3.5.31(typescript@5.9.3))
+
+ nanoid@3.3.11: {}
+
+ node-addon-api@7.1.1:
+ optional: true
+
+ path-browserify@1.0.1: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@4.0.4:
+ optional: true
+
+ pinia-plugin-persistedstate@3.2.3(pinia@2.3.1(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))):
+ dependencies:
+ pinia: 2.3.1(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))
+
+ pinia@2.3.1(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)):
+ dependencies:
+ '@vue/devtools-api': 6.6.4
+ vue: 3.5.31(typescript@5.9.3)
+ vue-demi: 0.14.10(vue@3.5.31(typescript@5.9.3))
+ optionalDependencies:
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+
+ postcss@8.5.8:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ proxy-from-env@2.1.0: {}
+
+ readdirp@4.1.2: {}
+
+ rollup@4.60.1:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.60.1
+ '@rollup/rollup-android-arm64': 4.60.1
+ '@rollup/rollup-darwin-arm64': 4.60.1
+ '@rollup/rollup-darwin-x64': 4.60.1
+ '@rollup/rollup-freebsd-arm64': 4.60.1
+ '@rollup/rollup-freebsd-x64': 4.60.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.60.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.60.1
+ '@rollup/rollup-linux-arm64-gnu': 4.60.1
+ '@rollup/rollup-linux-arm64-musl': 4.60.1
+ '@rollup/rollup-linux-loong64-gnu': 4.60.1
+ '@rollup/rollup-linux-loong64-musl': 4.60.1
+ '@rollup/rollup-linux-ppc64-gnu': 4.60.1
+ '@rollup/rollup-linux-ppc64-musl': 4.60.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.60.1
+ '@rollup/rollup-linux-riscv64-musl': 4.60.1
+ '@rollup/rollup-linux-s390x-gnu': 4.60.1
+ '@rollup/rollup-linux-x64-gnu': 4.60.1
+ '@rollup/rollup-linux-x64-musl': 4.60.1
+ '@rollup/rollup-openbsd-x64': 4.60.1
+ '@rollup/rollup-openharmony-arm64': 4.60.1
+ '@rollup/rollup-win32-arm64-msvc': 4.60.1
+ '@rollup/rollup-win32-ia32-msvc': 4.60.1
+ '@rollup/rollup-win32-x64-gnu': 4.60.1
+ '@rollup/rollup-win32-x64-msvc': 4.60.1
+ fsevents: 2.3.3
+
+ sass@1.98.0:
+ dependencies:
+ chokidar: 4.0.3
+ immutable: 5.1.5
+ source-map-js: 1.2.1
+ optionalDependencies:
+ '@parcel/watcher': 2.5.6
+
+ seemly@0.3.10: {}
+
+ semver@7.7.4: {}
+
+ source-map-js@1.2.1: {}
+
+ treemate@0.3.11: {}
+
+ tslib@2.3.0: {}
+
+ typescript@5.9.3: {}
+
+ undici-types@6.21.0: {}
+
+ vdirs@0.1.8(vue@3.5.31(typescript@5.9.3)):
+ dependencies:
+ evtd: 0.2.4
+ vue: 3.5.31(typescript@5.9.3)
+
+ vite@5.4.21(@types/node@20.19.37)(sass@1.98.0):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.5.8
+ rollup: 4.60.1
+ optionalDependencies:
+ '@types/node': 20.19.37
+ fsevents: 2.3.3
+ sass: 1.98.0
+
+ vooks@0.2.12(vue@3.5.31(typescript@5.9.3)):
+ dependencies:
+ evtd: 0.2.4
+ vue: 3.5.31(typescript@5.9.3)
+
+ vue-demi@0.14.10(vue@3.5.31(typescript@5.9.3)):
+ dependencies:
+ vue: 3.5.31(typescript@5.9.3)
+
+ vue-router@4.6.4(vue@3.5.31(typescript@5.9.3)):
+ dependencies:
+ '@vue/devtools-api': 6.6.4
+ vue: 3.5.31(typescript@5.9.3)
+
+ vue-template-compiler@2.7.16:
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+
+ vue-tsc@1.8.27(typescript@5.9.3):
+ dependencies:
+ '@volar/typescript': 1.11.1
+ '@vue/language-core': 1.8.27(typescript@5.9.3)
+ semver: 7.7.4
+ typescript: 5.9.3
+
+ vue@3.5.31(typescript@5.9.3):
+ dependencies:
+ '@vue/compiler-dom': 3.5.31
+ '@vue/compiler-sfc': 3.5.31
+ '@vue/runtime-dom': 3.5.31
+ '@vue/server-renderer': 3.5.31(vue@3.5.31(typescript@5.9.3))
+ '@vue/shared': 3.5.31
+ optionalDependencies:
+ typescript: 5.9.3
+
+ vueuc@0.4.65(vue@3.5.31(typescript@5.9.3)):
+ dependencies:
+ '@css-render/vue3-ssr': 0.15.14(vue@3.5.31(typescript@5.9.3))
+ '@juggle/resize-observer': 3.4.0
+ css-render: 0.15.14
+ evtd: 0.2.4
+ seemly: 0.3.10
+ vdirs: 0.1.8(vue@3.5.31(typescript@5.9.3))
+ vooks: 0.2.12(vue@3.5.31(typescript@5.9.3))
+ vue: 3.5.31(typescript@5.9.3)
+
+ zrender@6.0.0:
+ dependencies:
+ tslib: 2.3.0
diff --git a/public/vite.svg b/public/vite.svg
new file mode 100644
index 0000000..f9c89dc
--- /dev/null
+++ b/public/vite.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..08bf875
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,344 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/api/auth.ts b/src/api/auth.ts
new file mode 100644
index 0000000..c19b1fc
--- /dev/null
+++ b/src/api/auth.ts
@@ -0,0 +1,167 @@
+import { request } from '@/utils/request'
+import { encryptPasswordFields } from '@/utils/crypto'
+
+// 类型定义
+export interface LoginParams {
+ username: string
+ password: string
+ uuid?: string
+ code?: string
+ phone?: string // 短信验证码时使用
+ rememberMe?: boolean
+}
+
+export interface RegisterParams {
+ username: string
+ password: string
+ nickname?: string
+ email?: string
+ phone?: string
+ uuid?: string
+ code?: string
+}
+
+export interface CaptchaResult {
+ uuid: string
+ img: string
+}
+
+export interface UserInfo {
+ id: number
+ username: string
+ nickname: string
+ avatar: string
+ email: string
+ phone: string
+ gender: number
+ status: number
+}
+
+export interface MenuInfo {
+ id: number
+ parentId: number
+ name: string
+ type: number
+ path: string
+ component: string
+ permission: string
+ icon: string
+ sort: number
+ visible: number
+ status: number
+ isFrame: number // 是否外链(0-否 1-是)
+ children?: MenuInfo[]
+}
+
+export interface LoginResult {
+ token: string
+ user: UserInfo
+}
+
+export interface UserInfoResult {
+ user: UserInfo
+ roles: string[]
+ permissions: string[]
+ menus: MenuInfo[]
+}
+
+// 个人信息
+export interface ProfileInfo {
+ id: number
+ username: string
+ nickname: string
+ avatar?: string
+ email?: string
+ phone?: string
+ gender?: number
+ status?: number
+ deptId?: number
+ deptName?: string
+ postNames?: string
+ remark?: string
+ userType?: string
+ createTime?: string
+}
+
+// 认证相关API
+export const authApi = {
+ // 获取验证码
+ getCaptcha(): Promise {
+ return request({
+ url: '/auth/captcha',
+ method: 'get'
+ })
+ },
+
+ // 发送短信验证码
+ sendSmsCode(phone: string): Promise {
+ return request({
+ url: '/auth/sms-code',
+ method: 'post',
+ data: { phone }
+ })
+ },
+
+ // 登录(自动加密密码)
+ async login(data: LoginParams): Promise {
+ const encryptedData = await encryptPasswordFields(data, ['password'])
+ return request({
+ url: '/auth/login',
+ method: 'post',
+ data: encryptedData
+ })
+ },
+
+ // 注册(自动加密密码)
+ async register(data: RegisterParams): Promise {
+ const encryptedData = await encryptPasswordFields(data, ['password'])
+ return request({
+ url: '/auth/register',
+ method: 'post',
+ data: encryptedData
+ })
+ },
+
+ // 退出登录
+ logout(): Promise {
+ return request({
+ url: '/auth/logout',
+ method: 'post'
+ })
+ },
+
+ // 获取用户信息
+ getInfo(): Promise {
+ return request({
+ url: '/auth/info',
+ method: 'get'
+ })
+ },
+
+ // 获取个人信息
+ getProfile(): Promise {
+ return request({
+ url: '/auth/profile',
+ method: 'get'
+ })
+ },
+
+ // 更新个人信息
+ updateProfile(data: Partial): Promise {
+ return request({
+ url: '/auth/profile',
+ method: 'put',
+ data
+ })
+ },
+
+ // 修改密码(自动加密密码)
+ async updatePassword(data: { oldPassword: string; newPassword: string }): Promise {
+ const encryptedData = await encryptPasswordFields(data, ['oldPassword', 'newPassword'])
+ return request({
+ url: '/auth/password',
+ method: 'post',
+ data: encryptedData
+ })
+ }
+}
diff --git a/src/api/code.ts b/src/api/code.ts
new file mode 100644
index 0000000..7a384e6
--- /dev/null
+++ b/src/api/code.ts
@@ -0,0 +1,62 @@
+import { request } from '@/utils/request'
+
+// 邀请码 类型定义
+export interface Code {
+ id?: number
+
+ code?: string
+
+}
+
+// 邀请码 API
+export const codeApi = {
+ // 分页查询
+ page(params: { page: number; pageSize: number; id?: number }) {
+ return request({ url: '/biz/code/page', method: 'get', params })
+ },
+
+ // 获取详情
+ detail(id: number) {
+ return request({ url: `/biz/code/${id}`, method: 'get' })
+ },
+
+ // 新增
+ create(data: Code) {
+ return request({ url: '/biz/code', method: 'post', data })
+ },
+
+ // 修改
+ update(data: Code) {
+ return request({ url: '/biz/code', method: 'put', data })
+ },
+
+ // 删除
+ delete(ids: number[]) {
+ return request({ url: `/biz/code/${ids.join(',')}`, method: 'delete' })
+ },
+
+ // 导出
+ export(params?: { ids?: number[]; id?: number }) {
+ const p: Record = {}
+ if (params?.ids?.length) p.ids = params.ids.join(',')
+ if (params?.id !== undefined && params?.id !== null) p.id = params.id
+ return request({ url: `/biz/code/export`, method: 'get', params: p, responseType: 'blob' })
+ },
+
+ // 导入
+ importData(file: File) {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request<{ success: number; fail: number; errors: string[] }>({
+ url: `/biz/code/import`,
+ method: 'post',
+ data: formData,
+ headers: { 'Content-Type': 'multipart/form-data' }
+ })
+ },
+
+ // 下载导入模板
+ downloadTemplate() {
+ return request({ url: `/biz/code/template`, method: 'get', responseType: 'blob' })
+ }
+}
diff --git a/src/api/customer.ts b/src/api/customer.ts
new file mode 100644
index 0000000..b9f25ca
--- /dev/null
+++ b/src/api/customer.ts
@@ -0,0 +1,51 @@
+import { request } from '@/utils/request'
+
+// 客户表 类型定义
+export interface Customer {
+ id?: number
+
+ name?: string
+
+ phone?: string
+
+ idCard?: string
+
+ address?: string
+
+ remark?: string
+
+ deleted?: number
+
+ createTime?: string
+
+ updateTime?: string
+
+}
+
+// 客户表 API
+export const customerApi = {
+ // 分页查询
+ page(params: { page: number; pageSize: number; id?: number; name?: string }) {
+ return request({ url: '/system/customer/page', method: 'get', params })
+ },
+
+ // 获取详情
+ detail(id: number) {
+ return request({ url: `/system/customer/${id}`, method: 'get' })
+ },
+
+ // 新增
+ create(data: Customer) {
+ return request({ url: '/system/customer', method: 'post', data })
+ },
+
+ // 修改
+ update(data: Customer) {
+ return request({ url: '/system/customer', method: 'put', data })
+ },
+
+ // 删除
+ delete(ids: number[]) {
+ return request({ url: `/system/customer/${ids.join(',')}`, method: 'delete' })
+ }
+}
diff --git a/src/api/gen.ts b/src/api/gen.ts
new file mode 100644
index 0000000..44a69c8
--- /dev/null
+++ b/src/api/gen.ts
@@ -0,0 +1,121 @@
+import { request } from '@/utils/request'
+
+// 数据库表信息
+export interface DatabaseTable {
+ tableName: string
+ tableComment: string
+ createTime: string
+ updateTime: string
+}
+
+// 代码生成表
+export interface GenTable {
+ id?: number
+ tableName: string
+ tableComment: string
+ className: string
+ packageName: string
+ moduleName: string
+ businessName: string
+ functionName: string
+ author: string
+ genType: string
+ genPath?: string
+ frontType: string
+ formLayout?: string
+ parentMenuId?: number
+ remark?: string
+ createTime?: string
+ updateTime?: string
+ columns?: GenTableColumn[]
+}
+
+// 表字段信息
+export interface GenTableColumn {
+ id?: number
+ tableId?: number
+ columnName: string
+ columnComment: string
+ columnType: string
+ javaType: string
+ javaField: string
+ isPk: number
+ isIncrement: number
+ isRequired: number
+ isInsert: number
+ isEdit: number
+ isList: number
+ isQuery: number
+ queryType: string
+ htmlType: string
+ dictType?: string
+ sort: number
+}
+
+// 代码生成 API
+export const genApi = {
+ // 分页查询数据库表列表
+ dbTableList(params: { page: number; pageSize: number; tableName?: string }) {
+ return request({ url: '/tool/gen/db/list', method: 'get', params })
+ },
+
+ // 导入表
+ importTable(tableNames: string[]): Promise {
+ return request({ url: '/tool/gen/import', method: 'post', data: tableNames })
+ },
+
+ // 分页查询已导入的表
+ page(params: { page: number; pageSize: number; tableName?: string }) {
+ return request({ url: '/tool/gen/page', method: 'get', params })
+ },
+
+ // 获取表详情
+ getTable(id: number): Promise {
+ return request({ url: `/tool/gen/${id}`, method: 'get' })
+ },
+
+ // 修改表配置
+ updateTable(data: GenTable): Promise {
+ return request({ url: '/tool/gen', method: 'put', data })
+ },
+
+ // 删除表
+ deleteTable(ids: number[]): Promise {
+ return request({ url: `/tool/gen/${ids.join(',')}`, method: 'delete' })
+ },
+
+ // 预览代码
+ previewCode(id: number): Promise> {
+ return request({ url: `/tool/gen/preview/${id}`, method: 'get' })
+ },
+
+ // 下载代码
+ downloadCode(ids: number[]): string {
+ return `/api/tool/gen/download?ids=${ids.join(',')}`
+ },
+
+ // 预览将要生成的文件
+ previewGenerateFiles(id: number): Promise {
+ return request({ url: `/tool/gen/preview-generate/${id}`, method: 'get' })
+ },
+
+ // 生成代码到项目
+ generateToProject(id: number): Promise {
+ return request({ url: `/tool/gen/generate/${id}`, method: 'post' })
+ },
+
+ // 预览将要移除的文件
+ previewRemoveFiles(id: number): Promise {
+ return request({ url: `/tool/gen/preview-remove/${id}`, method: 'get' })
+ },
+
+ // 移除已生成的代码
+ removeGeneratedCode(id: number): Promise {
+ return request({ url: `/tool/gen/remove-code/${id}`, method: 'delete' })
+ },
+
+ // 同步表结构
+ syncTable(id: number): Promise {
+ return request({ url: `/tool/gen/sync/${id}`, method: 'post' })
+ }
+}
diff --git a/src/api/message.ts b/src/api/message.ts
new file mode 100644
index 0000000..00b66ad
--- /dev/null
+++ b/src/api/message.ts
@@ -0,0 +1,299 @@
+import { request } from '@/utils/request'
+import type { PageResult } from './system'
+
+// ==================== 系统通知 ====================
+export interface SysNotice {
+ id?: number
+ title: string
+ content: string
+ noticeType: number
+ channels?: string[]
+ targetType?: number
+ targetIds?: number[]
+ status: number
+ createBy?: number
+ createName?: string
+ createTime?: string
+}
+
+export interface NoticeChannelOption {
+ code: string
+ name: string
+ enabled: boolean
+}
+
+export const noticeApi = {
+ // 分页查询(管理端)
+ page(params: { page: number; pageSize: number; title?: string; noticeType?: number; status?: number }): Promise> {
+ return request({ url: '/sys/notice/page', method: 'get', params })
+ },
+
+ // 获取当前用户通知
+ myNotices(params: { page: number; pageSize: number; isRead?: number }): Promise> {
+ return request({ url: '/sys/notice/my', method: 'get', params })
+ },
+
+ // 获取详情(含 channels、targetIds 数组)
+ detail(id: number): Promise {
+ return request({ url: `/sys/notice/${id}`, method: 'get' })
+ },
+
+ // 创建
+ create(data: SysNotice): Promise {
+ return request({ url: '/sys/notice', method: 'post', data })
+ },
+
+ // 更新
+ update(data: SysNotice): Promise {
+ return request({ url: '/sys/notice', method: 'put', data })
+ },
+
+ // 删除
+ delete(id: number): Promise {
+ return request({ url: `/sys/notice/${id}`, method: 'delete' })
+ },
+
+ // 发布
+ publish(id: number): Promise {
+ return request({ url: `/sys/notice/${id}/publish`, method: 'post' })
+ },
+
+ // 标记已读
+ markAsRead(id: number): Promise {
+ return request({ url: `/sys/notice/${id}/read`, method: 'post' })
+ },
+
+ // 标记全部已读
+ markAllAsRead(): Promise {
+ return request({ url: '/sys/notice/read-all', method: 'post' })
+ },
+
+ // 获取未读数量
+ getUnreadCount(): Promise {
+ return request({ url: '/sys/notice/unread-count', method: 'get' })
+ },
+ // 获取可用推送渠道(从 sys_config_group 读取)
+ getChannels(): Promise {
+ return request({ url: '/sys/notice/channels', method: 'get' })
+ },
+
+ // 获取通知推送记录(触达情况)
+ getSendLogs(id: number): Promise {
+ return request({ url: `/sys/notice/${id}/send-logs`, method: 'get' })
+ },
+
+ // 重试失败渠道的推送
+ retry(id: number, channel: string): Promise {
+ return request({ url: `/sys/notice/${id}/retry`, method: 'post', params: { channel } })
+ }
+}
+
+export interface NoticeSendLog {
+ id?: number
+ noticeId: number
+ channel: string
+ status: number
+ targetCount: number
+ successCount: number
+ errorMsg?: string
+ sendTime: string
+}
+
+// ==================== 即时聊天 ====================
+export interface ChatMessage {
+ id?: number
+ senderId: number
+ senderName?: string
+ senderAvatar?: string
+ receiverId: number
+ content: string
+ msgType: number
+ isRead?: number
+ sendTime?: string
+}
+
+export interface ChatUser {
+ id: number
+ username: string
+ nickname: string
+ avatar?: string
+ lastMessage?: string
+ lastMessageTime?: string
+ isBlocked?: boolean
+}
+
+export const chatApi = {
+ // 发送消息
+ send(data: { receiverId: number; content: string; msgType?: number }): Promise {
+ return request({ url: '/sys/chat/send', method: 'post', data })
+ },
+
+ // 获取聊天记录
+ getHistory(targetId: number, params: { page: number; pageSize: number }): Promise> {
+ return request({ url: `/sys/chat/history/${targetId}`, method: 'get', params })
+ },
+
+ // 获取最近联系人
+ getContacts(): Promise {
+ return request({ url: '/sys/chat/contacts', method: 'get' })
+ },
+
+ // 获取用户列表
+ getUsers(): Promise {
+ return request({ url: '/sys/chat/users', method: 'get' })
+ },
+
+ // 标记已读
+ markAsRead(senderId: number): Promise {
+ return request({ url: `/sys/chat/read/${senderId}`, method: 'post' })
+ },
+
+ // 获取未读数量
+ getUnreadCount(): Promise {
+ return request({ url: '/sys/chat/unread-count', method: 'get' })
+ },
+
+ // 检查用户是否在线
+ isOnline(userId: number): Promise {
+ return request({ url: `/sys/chat/online/${userId}`, method: 'get' })
+ },
+
+ // 清空聊天记录
+ clearHistory(targetId: number): Promise {
+ return request({ url: `/sys/chat/clear/${targetId}`, method: 'delete' })
+ },
+
+ // 拉黑用户
+ blockUser(targetId: number): Promise {
+ return request({ url: `/sys/chat/block/${targetId}`, method: 'post' })
+ },
+
+ // 取消拉黑
+ unblockUser(targetId: number): Promise {
+ return request({ url: `/sys/chat/block/${targetId}`, method: 'delete' })
+ },
+
+ // 获取黑名单列表
+ getBlacklist(): Promise {
+ return request({ url: '/sys/chat/blacklist', method: 'get' })
+ },
+
+ // 检查是否拉黑
+ isBlocked(targetId: number): Promise {
+ return request({ url: `/sys/chat/blocked/${targetId}`, method: 'get' })
+ }
+}
+
+// ==================== 群聊 ====================
+export interface ChatGroup {
+ id?: number
+ name: string
+ avatar?: string
+ ownerId: number
+ ownerName?: string
+ announcement?: string
+ maxMembers?: number
+ status?: number
+ memberCount?: number
+ members?: ChatGroupMember[]
+ createTime?: string
+ updateTime?: string
+ lastMessage?: string
+ lastMessageTime?: string
+}
+
+export interface ChatGroupMember {
+ id?: number
+ groupId: number
+ userId: number
+ nickname?: string
+ role: number // 0-普通成员 1-管理员 2-群主
+ muted?: number
+ joinTime?: string
+ username?: string
+ userNickname?: string
+ avatar?: string
+}
+
+export interface ChatGroupMessage {
+ id?: number
+ groupId: number
+ senderId: number
+ senderName?: string
+ senderAvatar?: string
+ content: string
+ msgType: number
+ sendTime?: string
+}
+
+export const groupChatApi = {
+ // 创建群聊
+ create(data: { name: string; memberIds: number[] }): Promise {
+ return request({ url: '/chat/group/create', method: 'post', data })
+ },
+
+ // 获取我的群列表
+ list(): Promise {
+ return request({ url: '/chat/group/list', method: 'get' })
+ },
+
+ // 获取群详情
+ detail(groupId: number): Promise {
+ return request({ url: `/chat/group/${groupId}`, method: 'get' })
+ },
+
+ // 更新群信息
+ update(data: ChatGroup): Promise {
+ return request({ url: '/chat/group/update', method: 'put', data })
+ },
+
+ // 解散群聊
+ dissolve(groupId: number): Promise {
+ return request({ url: `/chat/group/${groupId}`, method: 'delete' })
+ },
+
+ // 退出群聊
+ quit(groupId: number): Promise {
+ return request({ url: `/chat/group/${groupId}/quit`, method: 'post' })
+ },
+
+ // 获取群成员
+ members(groupId: number): Promise {
+ return request({ url: `/chat/group/${groupId}/members`, method: 'get' })
+ },
+
+ // 添加成员
+ addMembers(groupId: number, userIds: number[]): Promise {
+ return request({ url: `/chat/group/${groupId}/members`, method: 'post', data: { userIds } })
+ },
+
+ // 移除成员
+ removeMember(groupId: number, memberId: number): Promise {
+ return request({ url: `/chat/group/${groupId}/members/${memberId}`, method: 'delete' })
+ },
+
+ // 设置管理员
+ setAdmin(groupId: number, memberId: number, isAdmin: boolean): Promise {
+ return request({ url: `/chat/group/${groupId}/admin/${memberId}`, method: 'post', params: { isAdmin } })
+ },
+
+ // 设置禁言
+ setMuted(groupId: number, memberId: number, muted: boolean): Promise {
+ return request({ url: `/chat/group/${groupId}/mute/${memberId}`, method: 'post', params: { muted } })
+ },
+
+ // 转让群主
+ transferOwner(groupId: number, newOwnerId: number): Promise {
+ return request({ url: `/chat/group/${groupId}/transfer/${newOwnerId}`, method: 'post' })
+ },
+
+ // 发送消息
+ sendMessage(groupId: number, content: string, msgType?: number): Promise {
+ return request({ url: `/chat/group/${groupId}/message`, method: 'post', data: { content, msgType } })
+ },
+
+ // 获取消息历史
+ getMessages(groupId: number, page: number = 1, pageSize: number = 50): Promise> {
+ return request({ url: `/chat/group/${groupId}/messages`, method: 'get', params: { page, pageSize } })
+ }
+}
diff --git a/src/api/monitor.ts b/src/api/monitor.ts
new file mode 100644
index 0000000..cc2387b
--- /dev/null
+++ b/src/api/monitor.ts
@@ -0,0 +1,214 @@
+import { request } from '@/utils/request'
+import { PageResult } from './system'
+
+// ==================== 操作日志 ====================
+export interface SysOperLog {
+ id?: number
+ title: string
+ businessType: number
+ method: string
+ requestMethod: string
+ operName: string
+ operUrl: string
+ operIp: string
+ operParam: string
+ jsonResult: string
+ status: number
+ errorMsg: string
+ operTime: string
+ costTime: number
+}
+
+export const operLogApi = {
+ page(params: { page: number; pageSize: number; title?: string; operName?: string; status?: number }): Promise> {
+ return request({ url: '/monitor/operlog/page', method: 'get', params })
+ },
+ delete(id: number): Promise {
+ return request({ url: `/monitor/operlog/${id}`, method: 'delete' })
+ },
+ clean(): Promise {
+ return request({ url: '/monitor/operlog/clean', method: 'delete' })
+ }
+}
+
+// ==================== 登录日志 ====================
+export interface SysLoginLog {
+ id?: number
+ username: string
+ ipaddr: string
+ loginLocation: string
+ browser: string
+ os: string
+ status: number
+ msg: string
+ loginTime: string
+}
+
+export const loginLogApi = {
+ page(params: { page: number; pageSize: number; username?: string; status?: number }): Promise> {
+ return request({ url: '/monitor/loginlog/page', method: 'get', params })
+ },
+ delete(id: number): Promise {
+ return request({ url: `/monitor/loginlog/${id}`, method: 'delete' })
+ },
+ clean(): Promise {
+ return request({ url: '/monitor/loginlog/clean', method: 'delete' })
+ }
+}
+
+// ==================== 在线用户 ====================
+export interface OnlineUser {
+ tokenId: string
+ loginName?: string
+ deptName?: string
+ ipaddr?: string
+ loginLocation?: string
+ browser?: string
+ os?: string
+ status?: number
+ loginTime: string
+ lastAccessTime: string
+ tokenValue?: string
+}
+
+export const onlineApi = {
+ list(): Promise {
+ return request({ url: '/monitor/online/list', method: 'get' })
+ },
+ forceLogout(tokenId: string): Promise {
+ return request({ url: `/monitor/online/${tokenId}`, method: 'delete' })
+ }
+}
+
+// ==================== 定时任务 ====================
+export interface SysJob {
+ id?: number
+ jobName: string
+ jobGroup: string
+ invokeTarget: string
+ cronExpression: string
+ misfirePolicy: number
+ concurrent: number
+ status: number
+ remark?: string
+ createTime?: string
+}
+
+export interface SysJobLog {
+ id?: number
+ jobName: string
+ jobGroup: string
+ invokeTarget: string
+ jobMessage: string
+ status: number
+ exceptionInfo: string
+ startTime: string
+ stopTime: string
+}
+
+export const jobApi = {
+ page(params: { page: number; pageSize: number; jobName?: string; jobGroup?: string; status?: number }): Promise> {
+ return request({ url: '/monitor/job/page', method: 'get', params })
+ },
+ detail(id: number): Promise {
+ return request({ url: `/monitor/job/${id}`, method: 'get' })
+ },
+ create(data: SysJob): Promise {
+ return request({ url: '/monitor/job', method: 'post', data })
+ },
+ update(data: SysJob): Promise {
+ return request({ url: '/monitor/job', method: 'put', data })
+ },
+ delete(id: number): Promise {
+ return request({ url: `/monitor/job/${id}`, method: 'delete' })
+ },
+ changeStatus(id: number, status: number): Promise {
+ return request({ url: '/monitor/job/changeStatus', method: 'put', data: { id, status } })
+ },
+ run(id: number): Promise {
+ return request({ url: `/monitor/job/run/${id}`, method: 'post' })
+ },
+ logPage(params: { page: number; pageSize: number; jobName?: string; jobGroup?: string; status?: number }): Promise> {
+ return request({ url: '/monitor/job/log/page', method: 'get', params })
+ },
+ logStatistics(): Promise<{ totalCount: number; successCount: number; failCount: number; dailyStats: Array<{ exec_date: string; success_count: number; fail_count: number }> }> {
+ return request({ url: '/monitor/job/log/statistics', method: 'get' })
+ },
+ cleanLog(): Promise {
+ return request({ url: '/monitor/job/log/clean', method: 'delete' })
+ }
+}
+
+// ==================== 缓存监控 ====================
+export interface CacheStats {
+ usedMemory: number
+ maxMemory: number
+ ops: number
+ hitRate: number
+ connectedClients: number
+}
+
+export const cacheApi = {
+ info(): Promise {
+ return request({ url: '/monitor/cache/info', method: 'get' })
+ },
+ stats(): Promise {
+ return request({ url: '/monitor/cache/stats', method: 'get' })
+ },
+ keys(pattern?: string): Promise {
+ return request({ url: '/monitor/cache/keys', method: 'get', params: { pattern } })
+ },
+ delete(key: string): Promise {
+ return request({ url: '/monitor/cache', method: 'delete', params: { key } })
+ },
+ getValue(key: string): Promise {
+ return request({ url: '/monitor/cache/value', method: 'get', params: { key } })
+ }
+}
+
+// ==================== 服务监控 ====================
+export const serverApi = {
+ info(): Promise {
+ return request({ url: '/monitor/server/info', method: 'get' })
+ }
+}
+
+// ==================== API 访问统计 ====================
+export interface ApiAccessLog {
+ id?: number
+ startTime?: string
+ endTime?: string
+ apiPath?: string
+ method?: string
+ statusCode?: number
+ success?: number
+ costTime?: number
+ ip?: string
+ userId?: number
+}
+
+export interface ApiAccessStatistics {
+ totalCount: number
+ successCount: number
+ failCount: number
+ dailyStats: Record
+ topPaths: Array<{ apiPath: string; count: number }>
+ methodCount: Record
+}
+
+export const apiAccessApi = {
+ page(params: {
+ page: number
+ pageSize: number
+ apiPath?: string
+ method?: string
+ success?: number
+ startTime?: string
+ endTime?: string
+ }): Promise> {
+ return request({ url: '/monitor/api-access/page', method: 'get', params })
+ },
+ statistics(params?: { startDate?: string; endDate?: string }): Promise {
+ return request({ url: '/monitor/api-access/statistics', method: 'get', params })
+ }
+}
diff --git a/src/api/order.ts b/src/api/order.ts
new file mode 100644
index 0000000..e24932e
--- /dev/null
+++ b/src/api/order.ts
@@ -0,0 +1,90 @@
+import { request } from '@/utils/request'
+
+// 订单 类型定义
+export interface Order {
+ id?: number
+
+ orderNo?: string
+
+ userId?: number
+
+ productId?: number
+
+ quota?: number
+
+ totalPrice?: string
+
+ unitPrice?: string
+
+ createTime?: string
+
+ updateTime?: string
+
+ createBy?: number
+
+ updateBy?: number
+
+ payPhotoUrl?: string
+
+ payStatus?: number
+
+ deleted?: number
+
+}
+
+// 订单 API
+export const orderApi = {
+ // 分页查询
+ page(params: { page: number; pageSize: number; id?: number }) {
+ return request({ url: '/biz/order/page', method: 'get', params })
+ },
+
+ // 获取详情
+ detail(id: number) {
+ return request({ url: `/biz/order/${id}`, method: 'get' })
+ },
+
+ // 新增
+ create(data: Order) {
+ return request({ url: '/biz/order', method: 'post', data })
+ },
+
+ // 修改
+ update(data: Order) {
+ return request({ url: '/biz/order', method: 'put', data })
+ },
+
+ audit(data: Order) {
+ return request({ url: '/biz/order/audit', method: 'put', data })
+ },
+
+ // 删除
+ delete(ids: number[]) {
+ return request({ url: `/biz/order/${ids.join(',')}`, method: 'delete' })
+ },
+
+ // 导出
+ export(params?: { ids?: number[]; id?: number }) {
+ const p: Record = {}
+ if (params?.ids?.length) p.ids = params.ids.join(',')
+ if (params?.id !== undefined && params?.id !== null) p.id = params.id
+ return request({ url: `/biz/order/export`, method: 'get', params: p, responseType: 'blob' })
+ },
+
+ // 导入
+ importData(file: File) {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request<{ success: number; fail: number; errors: string[] }>({
+ url: `/biz/order/import`,
+ method: 'post',
+ data: formData,
+ headers: { 'Content-Type': 'multipart/form-data' }
+ })
+ },
+
+ // 下载导入模板
+ downloadTemplate() {
+ return request({ url: `/biz/order/template`, method: 'get', responseType: 'blob' })
+ }
+}
diff --git a/src/api/org.ts b/src/api/org.ts
new file mode 100644
index 0000000..ccfc127
--- /dev/null
+++ b/src/api/org.ts
@@ -0,0 +1,223 @@
+import { request } from '@/utils/request'
+import { PageResult } from './system'
+
+// ==================== 部门管理 ====================
+export interface SysDept {
+ id?: number
+ parentId: number
+ ancestors?: string
+ deptName: string
+ sort: number
+ leader?: string
+ phone?: string
+ email?: string
+ status: number
+ children?: SysDept[]
+ createTime?: string
+}
+
+export const deptApi = {
+ tree(params?: { deptName?: string; status?: number }): Promise {
+ return request({ url: '/sys/dept/tree', method: 'get', params })
+ },
+ deptTree(): Promise {
+ return request({ url: '/sys/dept/tree', method: 'get' })
+ },
+ list(): Promise {
+ return request({ url: '/sys/dept/list', method: 'get' })
+ },
+ detail(id: number): Promise {
+ return request({ url: `/sys/dept/${id}`, method: 'get' })
+ },
+ create(data: SysDept): Promise {
+ return request({ url: '/sys/dept', method: 'post', data })
+ },
+ update(data: SysDept): Promise {
+ return request({ url: '/sys/dept', method: 'put', data })
+ },
+ delete(id: number): Promise {
+ return request({ url: `/sys/dept/${id}`, method: 'delete' })
+ },
+ move(id: number, parentId: number, sort?: number): Promise {
+ return request({ url: '/sys/dept/move', method: 'put', params: { id, parentId, sort } })
+ }
+}
+
+// ==================== 岗位管理 ====================
+export interface SysPost {
+ id?: number
+ postCode: string
+ postName: string
+ sort: number
+ status: number
+ remark?: string
+ createTime?: string
+}
+
+export const postApi = {
+ page(params: { page: number; pageSize: number; postCode?: string; postName?: string; status?: number }): Promise> {
+ return request({ url: '/sys/post/page', method: 'get', params })
+ },
+ list(): Promise {
+ return request({ url: '/sys/post/list', method: 'get' })
+ },
+ detail(id: number): Promise {
+ return request({ url: `/sys/post/${id}`, method: 'get' })
+ },
+ create(data: SysPost): Promise {
+ return request({ url: '/sys/post', method: 'post', data })
+ },
+ update(data: SysPost): Promise {
+ return request({ url: '/sys/post', method: 'put', data })
+ },
+ delete(id: number): Promise {
+ return request({ url: `/sys/post/${id}`, method: 'delete' })
+ }
+}
+
+// ==================== 字典类型 ====================
+export interface SysDictType {
+ id?: number
+ dictName: string
+ dictType: string
+ status: number
+ remark?: string
+ createTime?: string
+}
+
+export const dictTypeApi = {
+ page(params: { page: number; pageSize: number; dictName?: string; dictType?: string; status?: number }): Promise> {
+ return request({ url: '/sys/dict/type/page', method: 'get', params })
+ },
+ list(): Promise {
+ return request({ url: '/sys/dict/type/list', method: 'get' })
+ },
+ detail(id: number): Promise {
+ return request({ url: `/sys/dict/type/${id}`, method: 'get' })
+ },
+ create(data: SysDictType): Promise {
+ return request({ url: '/sys/dict/type', method: 'post', data })
+ },
+ update(data: SysDictType): Promise {
+ return request({ url: '/sys/dict/type', method: 'put', data })
+ },
+ delete(id: number): Promise {
+ return request({ url: `/sys/dict/type/${id}`, method: 'delete' })
+ }
+}
+
+// ==================== 字典数据 ====================
+export interface SysDictData {
+ id?: number
+ sort: number
+ dictLabel: string
+ dictValue: string
+ dictType: string
+ cssClass?: string
+ listClass?: string
+ isDefault: number
+ status: number
+ remark?: string
+ createTime?: string
+}
+
+export const dictDataApi = {
+ page(params: { page: number; pageSize: number; dictType?: string; dictLabel?: string; status?: number }): Promise> {
+ return request({ url: '/sys/dict/data/page', method: 'get', params })
+ },
+ listByType(dictType: string): Promise {
+ return request({ url: `/sys/dict/data/type/${dictType}`, method: 'get' })
+ },
+ detail(id: number): Promise {
+ return request({ url: `/sys/dict/data/${id}`, method: 'get' })
+ },
+ create(data: SysDictData): Promise {
+ return request({ url: '/sys/dict/data', method: 'post', data })
+ },
+ update(data: SysDictData): Promise {
+ return request({ url: '/sys/dict/data', method: 'put', data })
+ },
+ delete(id: number): Promise {
+ return request({ url: `/sys/dict/data/${id}`, method: 'delete' })
+ }
+}
+
+// ==================== 系统配置分组 ====================
+export interface SysConfigGroup {
+ id?: number
+ groupCode: string
+ groupName: string
+ groupIcon?: string
+ configValue?: string
+ sort?: number
+ status?: number
+ remark?: string
+}
+
+// 短信发送记录
+export interface SmsLog {
+ id: number
+ phone: string
+ content: string
+ smsType: string
+ templateId: string
+ provider: string
+ status: number // 0-发送中 1-成功 2-失败
+ resultMsg: string
+ bizId: string
+ sendTime: string
+ userId: number
+ bizType: string
+ ip: string
+ createTime: string
+}
+
+export const configGroupApi = {
+ list(): Promise {
+ return request({ url: '/sys/config-group/list', method: 'get' })
+ },
+ getByCode(groupCode: string): Promise {
+ return request({ url: `/sys/config-group/${groupCode}`, method: 'get' })
+ },
+ save(groupCode: string, config: Record): Promise {
+ return request({ url: `/sys/config-group/${groupCode}`, method: 'post', data: config })
+ },
+ refresh(): Promise {
+ return request({ url: '/sys/config-group/refresh', method: 'post' })
+ },
+ // 获取公开配置(不需要登录)
+ getPublicConfig(): Promise<{
+ system: { siteName: string; siteDescription: string; siteLogo: string; copyright: string; icp: string }
+ login: { captchaEnabled: boolean; captchaType: string; maxRetryCount: number; rememberMe: boolean }
+ register: { enabled: boolean; verifyEmail: boolean; verifyPhone: boolean; needAudit: boolean }
+ password: { minLength: number; maxLength: number; requireUppercase: boolean; requireLowercase: boolean; requireNumber: boolean; requireSpecial: boolean }
+ storage: { maxSize: number; allowTypes: string }
+ security: { disableDevtool: boolean }
+ }> {
+ return request({ url: '/sys/config-group/public', method: 'get' })
+ },
+ // 测试支付
+ testPayment(type: 'wechat' | 'alipay'): Promise<{ orderNo: string; qrcode?: string; payUrl?: string }> {
+ return request({ url: '/sys/config-group/test-payment', method: 'post', data: { type } })
+ },
+ // 测试发送邮件
+ testEmail(to: string): Promise {
+ return request({ url: '/sys/config-group/test-email', method: 'post', data: { to } })
+ },
+ // 生成RSA密钥对
+ generateKeys(): Promise<{ publicKey: string; privateKey: string }> {
+ return request({ url: '/sys/config-group/generate-keys', method: 'post' })
+ },
+ // 测试发送短信
+ testSms(phone: string): Promise {
+ return request({ url: '/sys/config-group/test-sms', method: 'post', data: { phone } })
+ },
+ // 获取最近短信发送记录
+ getRecentSmsLogs(limit?: number): Promise {
+ return request({ url: '/sys/config-group/sms-logs/recent', method: 'get', params: { limit } })
+ },
+ // 分页查询短信发送记录
+ getSmsLogs(params: { page: number; size: number; phone?: string; status?: number }): Promise<{ records: SmsLog[]; total: number; pages: number }> {
+ return request({ url: '/sys/config-group/sms-logs', method: 'get', params })
+ }
+}
diff --git a/src/api/product.ts b/src/api/product.ts
new file mode 100644
index 0000000..121e2c2
--- /dev/null
+++ b/src/api/product.ts
@@ -0,0 +1,88 @@
+import { request } from '@/utils/request'
+
+// Product 类型定义
+export interface Product {
+ id?: number
+
+ name?: string
+
+ amount?: number
+
+ growthRate?: string
+
+ maturityPeriod?: string
+
+ paymentPeriod?: string
+
+ paymentType?: string
+
+ quota?: number
+
+ createTime?: string
+
+ updateTime?: string
+
+ createBy?: number
+
+ updateBy?: number
+
+ status?: number
+
+ deleted?: number
+
+}
+
+// Product API
+export const productApi = {
+ // 分页查询
+ page(params: { page: number; pageSize: number; id?: number; name?: string; status?: number }) {
+ return request({ url: '/biz/product/page', method: 'get', params })
+ },
+
+ // 获取详情
+ detail(id: number) {
+ return request({ url: `/biz/product/${id}`, method: 'get' })
+ },
+
+ // 新增
+ create(data: Product) {
+ return request({ url: '/biz/product', method: 'post', data })
+ },
+
+ // 修改
+ update(data: Product) {
+ return request({ url: '/biz/product', method: 'put', data })
+ },
+
+ // 删除
+ delete(ids: number[]) {
+ return request({ url: `/biz/product/${ids.join(',')}`, method: 'delete' })
+ },
+
+ // 导出
+ export(params?: { ids?: number[]; id?: number; name?: string; status?: number }) {
+ const p: Record = {}
+ if (params?.ids?.length) p.ids = params.ids.join(',')
+ if (params?.id !== undefined && params?.id !== null) p.id = params.id
+ if (params?.name !== undefined && params?.name !== null) p.name = params.name
+ if (params?.status !== undefined && params?.status !== null) p.status = params.status
+ return request({ url: `/biz/product/export`, method: 'get', params: p, responseType: 'blob' })
+ },
+
+ // 导入
+ importData(file: File) {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request<{ success: number; fail: number; errors: string[] }>({
+ url: `/biz/product/import`,
+ method: 'post',
+ data: formData,
+ headers: { 'Content-Type': 'multipart/form-data' }
+ })
+ },
+
+ // 下载导入模板
+ downloadTemplate() {
+ return request({ url: `/biz/product/template`, method: 'get', responseType: 'blob' })
+ }
+}
diff --git a/src/api/production.ts b/src/api/production.ts
new file mode 100644
index 0000000..3a1f928
--- /dev/null
+++ b/src/api/production.ts
@@ -0,0 +1,56 @@
+import { request } from '@/utils/request'
+
+//派工列表
+export function disworlist(params:any) {
+ return request({
+ url: `/mes/dispatch/list`,
+ method: 'get',
+ params
+ })
+}
+
+//修改派工
+export function editdiswor(data:any) {
+ return request({
+ url: `/mes/dispatch`,
+ method: 'put',
+ data
+ })
+}
+
+
+//改派(转移)
+export function transfer(data:any) {
+ return request({
+ url: `/mes/dispatch/transfer`,
+ method: 'put',
+ data
+ })
+}
+
+//暂停/恢复
+export function pauseresume(data:any) {
+ return request({
+ url: `/mes/dispatch/pause_resume`,
+ method: 'put',
+ data
+ })
+}
+
+//我的派工任务
+export function mytasks(params:any) {
+ return request({
+ url: `/mes/dispatch/my-tasks`,
+ method: 'get',
+ params
+ })
+}
+
+//派工数据统计
+export function workload(params:any) {
+ return request({
+ url: `/mes/dispatch/workload`,
+ method: 'get',
+ params
+ })
+}
\ No newline at end of file
diff --git a/src/api/server.ts b/src/api/server.ts
new file mode 100644
index 0000000..31c160d
--- /dev/null
+++ b/src/api/server.ts
@@ -0,0 +1,112 @@
+import request from '@/utils/request'
+
+export interface Server {
+ id?: number
+ name: string
+ host: string
+ port: number
+ username: string
+ authType: number // 1-密码 2-密钥
+ password?: string
+ privateKey?: string
+ passphrase?: string
+ description?: string
+ status: number
+ sort: number
+ lastConnectTime?: string
+ createTime?: string
+}
+
+export interface ServerPageParams {
+ page: number
+ pageSize: number
+ name?: string
+ status?: number
+}
+
+export const serverApi = {
+ // 分页查询
+ list(params: ServerPageParams) {
+ return request({
+ url: '/monitor/server-manager/list',
+ method: 'get',
+ params
+ })
+ },
+
+ // 获取所有启用的服务器
+ all() {
+ return request({
+ url: '/monitor/server-manager/all',
+ method: 'get'
+ })
+ },
+
+ // 获取详情
+ getById(id: number) {
+ return request({
+ url: `/monitor/server-manager/${id}`,
+ method: 'get'
+ })
+ },
+
+ // 新增
+ add(data: Server) {
+ return request({
+ url: '/monitor/server-manager',
+ method: 'post',
+ data
+ })
+ },
+
+ // 修改
+ update(data: Server) {
+ return request({
+ url: '/monitor/server-manager',
+ method: 'put',
+ data
+ })
+ },
+
+ // 删除
+ remove(id: number) {
+ return request({
+ url: `/monitor/server-manager/${id}`,
+ method: 'delete'
+ })
+ },
+
+ // 批量删除
+ batchRemove(ids: number[]) {
+ return request({
+ url: '/monitor/server-manager/batch',
+ method: 'delete',
+ data: ids
+ })
+ },
+
+ // 测试连接
+ testConnection(id: number) {
+ return request({
+ url: `/monitor/server-manager/test/${id}`,
+ method: 'post'
+ })
+ },
+
+ // 测试连接(通过参数)
+ testConnectionByParams(data: {
+ host: string
+ port: number
+ username: string
+ authType: number
+ password?: string
+ privateKey?: string
+ passphrase?: string
+ }) {
+ return request({
+ url: '/monitor/server-manager/test',
+ method: 'post',
+ data
+ })
+ }
+}
diff --git a/src/api/student.ts b/src/api/student.ts
new file mode 100644
index 0000000..5f92bf0
--- /dev/null
+++ b/src/api/student.ts
@@ -0,0 +1,86 @@
+import { request } from '@/utils/request'
+
+// 学生表 类型定义
+export interface Student {
+ id?: number
+
+ studentNo?: string
+
+ name?: string
+
+ gender?: number
+
+ birthday?: string
+
+ phone?: string
+
+ email?: string
+
+ address?: string
+
+ classId?: number
+
+ status?: number
+
+ deleted?: number
+
+ createTime?: string
+
+ updateTime?: string
+
+}
+
+// 学生表 API
+export const studentApi = {
+ // 分页查询
+ page(params: { page: number; pageSize: number; id?: number; name?: string; status?: number }) {
+ return request({ url: '/system/student/page', method: 'get', params })
+ },
+
+ // 获取详情
+ detail(id: number) {
+ return request({ url: `/system/student/${id}`, method: 'get' })
+ },
+
+ // 新增
+ create(data: Student) {
+ return request({ url: '/system/student', method: 'post', data })
+ },
+
+ // 修改
+ update(data: Student) {
+ return request({ url: '/system/student', method: 'put', data })
+ },
+
+ // 删除
+ delete(ids: number[]) {
+ return request({ url: `/system/student/${ids.join(',')}`, method: 'delete' })
+ },
+
+ // 导出
+ export(params?: { ids?: number[]; id?: number; name?: string; status?: number }) {
+ const p: Record = {}
+ if (params?.ids?.length) p.ids = params.ids.join(',')
+ if (params?.id !== undefined && params?.id !== null) p.id = params.id
+ if (params?.name !== undefined && params?.name !== null) p.name = params.name
+ if (params?.status !== undefined && params?.status !== null) p.status = params.status
+ return request({ url: `/system/student/export`, method: 'get', params: p, responseType: 'blob' })
+ },
+
+ // 导入
+ importData(file: File) {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request<{ success: number; fail: number; errors: string[] }>({
+ url: `/system/student/import`,
+ method: 'post',
+ data: formData,
+ headers: { 'Content-Type': 'multipart/form-data' }
+ })
+ },
+
+ // 下载导入模板
+ downloadTemplate() {
+ return request({ url: `/system/student/template`, method: 'get', responseType: 'blob' })
+ }
+}
diff --git a/src/api/system.ts b/src/api/system.ts
new file mode 100644
index 0000000..d1f97bb
--- /dev/null
+++ b/src/api/system.ts
@@ -0,0 +1,475 @@
+import { request } from '@/utils/request'
+
+// 分页结果
+export interface PageResult {
+ list: T[]
+ total: number
+ page: number
+ pageSize: number
+}
+
+// ==================== 首页统计 ====================
+export interface DashboardStats {
+ userCount: number
+ roleCount: number
+ menuCount: number
+ permissionCount: number
+}
+
+export const dashboardApi = {
+ getStats(): Promise {
+ return request({ url: '/dashboard/stats', method: 'get' })
+ }
+}
+
+// ==================== 用户管理 ====================
+export interface SysUser {
+ id?: number
+ deptId?: number | null
+ deptName?: string
+ username: string
+ password?: string
+ nickname: string
+ avatar?: string
+ email?: string
+ phone?: string
+ gender?: number
+ status: number
+ remark?: string
+ userType?: string // 用户类型: admin-后台管理员 pc-PC前台用户 app-App/小程序用户
+ openId?: string // 微信openId
+ isQuit?: number // 是否离职(0-否 1-是)
+ postNames?: string // 岗位名称列表
+ createTime?: string
+}
+
+export interface UserDetailResult {
+ user: SysUser
+ roleIds: number[]
+ postIds: number[]
+}
+
+export const userApi = {
+ page(params: { page: number; pageSize: number; username?: string; status?: number; userType?: string; deptId?: number; postId?: number }): Promise> {
+ return request({ url: '/sys/user/page', method: 'get', params })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/user/${id}`, method: 'get' })
+ },
+
+ create(data: { user: SysUser; roleIds: number[]; postIds: number[] }): Promise {
+ return request({ url: '/sys/user', method: 'post', data })
+ },
+
+ update(data: { user: SysUser; roleIds: number[]; postIds: number[] }): Promise {
+ return request({ url: '/sys/user', method: 'put', data })
+ },
+
+ delete(id: number): Promise {
+ return request({ url: `/sys/user/${id}`, method: 'delete' })
+ },
+
+ deleteBatch(ids: number[]): Promise {
+ return request({ url: '/sys/user/batch', method: 'delete', data: ids })
+ },
+
+ resetPassword(id: number): Promise {
+ return request({ url: `/sys/user/${id}/reset-password`, method: 'post' })
+ },
+
+ approve(id: number): Promise {
+ return request({ url: `/sys/user/${id}/approve`, method: 'post' })
+ },
+
+ reject(id: number): Promise {
+ return request({ url: `/sys/user/${id}/reject`, method: 'post' })
+ },
+
+ toggleQuit(id: number): Promise {
+ return request({ url: `/sys/user/${id}/quit`, method: 'post' })
+ },
+
+ // 导出用户
+ exportUsers(params?: { username?: string; status?: number; userType?: string; deptId?: number; ids?: number[] }): Promise {
+ const searchParams: Record = {}
+ if (params?.username) searchParams.username = params.username
+ if (params?.status !== undefined && params?.status !== null) searchParams.status = params.status
+ if (params?.userType) searchParams.userType = params.userType
+ if (params?.deptId) searchParams.deptId = params.deptId
+ // 数组转逗号分隔字符串
+ if (params?.ids && params.ids.length > 0) searchParams.ids = params.ids.join(',')
+ return request({
+ url: '/sys/user/export',
+ method: 'get',
+ params: searchParams,
+ responseType: 'blob'
+ })
+ },
+
+ // 导入用户
+ importUsers(file: File): Promise<{ success: number; fail: number; errors: string[] }> {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request({
+ url: '/sys/user/import',
+ method: 'post',
+ data: formData,
+ headers: { 'Content-Type': 'multipart/form-data' }
+ })
+ },
+
+ // 下载导入模板
+ downloadTemplate(): Promise {
+ return request({
+ url: '/sys/user/template',
+ method: 'get',
+ responseType: 'blob'
+ })
+ }
+}
+
+// ==================== 角色管理 ====================
+export interface SysRole {
+ id?: number
+ name: string
+ code: string
+ sort: number
+ status: number
+ dataScope?: number // 数据范围: 1-全部, 2-自定义, 3-本部门, 4-本部门及下级, 5-仅本人
+ remark?: string
+ createTime?: string
+}
+
+export interface RoleDetailResult {
+ role: SysRole
+ menuIds: number[]
+ deptIds: number[]
+}
+
+// ==================== 岗位管理 ====================
+export interface SysPost {
+ id?: number
+ parentId?: number
+ postCode: string
+ postName: string
+ sort: number
+ status: number
+ remark?: string
+ createTime?: string
+ children?: SysPost[]
+}
+
+export const postApi = {
+ page(params: { page: number; pageSize: number; postCode?: string; postName?: string; status?: number }): Promise> {
+ return request({ url: '/sys/post/page', method: 'get', params })
+ },
+
+ list(): Promise {
+ return request({ url: '/sys/post/list', method: 'get' })
+ },
+
+ tree(): Promise {
+ return request({ url: '/sys/post/tree', method: 'get' })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/post/${id}`, method: 'get' })
+ },
+
+ create(data: SysPost): Promise {
+ return request({ url: '/sys/post', method: 'post', data })
+ },
+
+ update(data: SysPost): Promise {
+ return request({ url: '/sys/post', method: 'put', data })
+ },
+
+ delete(id: number): Promise {
+ return request({ url: `/sys/post/${id}`, method: 'delete' })
+ },
+
+ move(id: number, parentId: number): Promise {
+ return request({ url: `/sys/post/${id}/move`, method: 'post', params: { parentId } })
+ }
+}
+
+// ==================== 角色管理 ====================
+export const roleApi = {
+ page(params: { page: number; pageSize: number; name?: string; status?: number }): Promise> {
+ return request({ url: '/sys/role/page', method: 'get', params })
+ },
+
+ list(): Promise {
+ return request({ url: '/sys/role/list', method: 'get' })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/role/${id}`, method: 'get' })
+ },
+
+ create(data: { role: SysRole; menuIds: number[]; deptIds?: number[] }): Promise {
+ return request({ url: '/sys/role', method: 'post', data })
+ },
+
+ update(data: { role: SysRole; menuIds: number[]; deptIds?: number[] }): Promise {
+ return request({ url: '/sys/role', method: 'put', data })
+ },
+
+ delete(id: number): Promise {
+ return request({ url: `/sys/role/${id}`, method: 'delete' })
+ }
+}
+
+// ==================== 部门管理 ====================
+export interface SysDept {
+ id?: number
+ parentId: number
+ deptName: string
+ sort: number
+ leader?: string
+ phone?: string
+ email?: string
+ status: number
+ children?: SysDept[]
+}
+
+export const deptApi = {
+ tree(): Promise {
+ return request({ url: '/sys/dept/tree', method: 'get' })
+ },
+
+ list(): Promise {
+ return request({ url: '/sys/dept/list', method: 'get' })
+ }
+}
+
+// ==================== 菜单管理 ====================
+export interface SysMenu {
+ id?: number
+ parentId: number
+ name: string
+ type: number
+ path?: string
+ component?: string
+ permission?: string
+ icon?: string
+ sort: number
+ visible: number
+ status: number
+ isFrame?: number // 是否外链(0-否 1-是)
+ children?: SysMenu[]
+}
+
+export const menuApi = {
+ tree(params?: { name?: string; status?: number }): Promise {
+ return request({ url: '/sys/menu/tree', method: 'get', params })
+ },
+
+ list(): Promise {
+ return request({ url: '/sys/menu/list', method: 'get' })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/menu/${id}`, method: 'get' })
+ },
+
+ create(data: SysMenu): Promise {
+ return request({ url: '/sys/menu', method: 'post', data })
+ },
+
+ update(data: SysMenu): Promise {
+ return request({ url: '/sys/menu', method: 'put', data })
+ },
+
+ delete(id: number): Promise {
+ return request({ url: `/sys/menu/${id}`, method: 'delete' })
+ }
+}
+
+// ==================== 文件分组管理 ====================
+export interface SysFileGroup {
+ id?: number
+ name: string
+ sort?: number
+ fileCount?: number
+ createBy?: string
+ createTime?: string
+}
+
+export interface FileGroupListResult {
+ groups: SysFileGroup[]
+ ungroupedCount: number
+}
+
+export const fileGroupApi = {
+ list(): Promise {
+ return request({ url: '/sys/file-group/list', method: 'get' })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/file-group/${id}`, method: 'get' })
+ },
+
+ create(data: SysFileGroup): Promise {
+ return request({ url: '/sys/file-group', method: 'post', data })
+ },
+
+ update(data: SysFileGroup): Promise {
+ return request({ url: '/sys/file-group', method: 'put', data })
+ },
+
+ delete(id: number): Promise {
+ return request({ url: `/sys/file-group/${id}`, method: 'delete' })
+ }
+}
+
+// ==================== 文件管理 ====================
+export interface SysFile {
+ id?: number
+ originalName: string
+ fileName: string
+ filePath: string
+ url: string
+ fileSize: number
+ fileType: string
+ fileSuffix: string
+ storageType: string
+ bucketName?: string
+ groupId?: number
+ createBy?: string
+ createTime?: string
+ remark?: string
+}
+
+export const fileApi = {
+ page(params: { page: number; pageSize: number; originalName?: string; fileType?: string }): Promise> {
+ return request({ url: '/sys/file/page', method: 'get', params })
+ },
+
+ pageByGroup(params: {
+ page: number
+ pageSize: number
+ groupId?: number | null
+ fileCategory?: string
+ originalName?: string
+ }): Promise> {
+ return request({ url: '/sys/file/page-by-group', method: 'get', params })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/file/${id}`, method: 'get' })
+ },
+
+ upload(file: File, path?: string, groupId?: number | null): Promise {
+ const formData = new FormData()
+ formData.append('file', file)
+ if (path) {
+ formData.append('path', path)
+ }
+ if (groupId !== undefined && groupId !== null && groupId > 0) {
+ formData.append('groupId', groupId.toString())
+ }
+ return request({
+ url: '/sys/file/upload',
+ method: 'post',
+ data: formData,
+ headers: { 'Content-Type': 'multipart/form-data' }
+ })
+ },
+
+ uploadImage(file: File): Promise {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request({
+ url: '/sys/file/upload/image',
+ method: 'post',
+ data: formData,
+ headers: { 'Content-Type': 'multipart/form-data' }
+ })
+ },
+
+ getDownloadUrl(id: number): string {
+ return `/api/sys/file/download/${id}`
+ },
+
+ getPreviewUrl(id: number): string {
+ return `/api/sys/file/preview/${id}`
+ },
+
+ getTextContent(id: number): Promise {
+ return request({ url: `/sys/file/text/${id}`, method: 'get' })
+ },
+
+ delete(id: number): Promise {
+ return request({ url: `/sys/file/${id}`, method: 'delete' })
+ },
+
+ deleteBatch(ids: number[]): Promise {
+ return request({ url: '/sys/file/batch', method: 'delete', data: ids })
+ },
+
+ moveToGroup(fileIds: number[], groupId: number | null): Promise {
+ return request({ url: '/sys/file/move', method: 'post', data: { fileIds, groupId } })
+ },
+
+ rename(id: number, newName: string): Promise {
+ return request({ url: `/sys/file/${id}/rename`, method: 'put', data: { newName } })
+ }
+}
+
+// ==================== 文件配置管理 ====================
+export interface SysFileConfig {
+ id?: number
+ name: string
+ storageType: string
+ master: number
+ domain: string
+ basePath?: string
+ bucketName?: string
+ accessKey?: string
+ secretKey?: string
+ endpoint?: string
+ region?: string
+ status: number
+ remark?: string
+ createTime?: string
+}
+
+export const fileConfigApi = {
+ page(params: { page: number; pageSize: number; name?: string; storageType?: string }): Promise> {
+ return request({ url: '/sys/file-config/page', method: 'get', params })
+ },
+
+ list(): Promise {
+ return request({ url: '/sys/file-config/list', method: 'get' })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/file-config/${id}`, method: 'get' })
+ },
+
+ getMaster(): Promise {
+ return request({ url: '/sys/file-config/master', method: 'get' })
+ },
+
+ create(data: SysFileConfig): Promise {
+ return request({ url: '/sys/file-config', method: 'post', data })
+ },
+
+ update(data: SysFileConfig): Promise {
+ return request({ url: '/sys/file-config', method: 'put', data })
+ },
+
+ delete(id: number): Promise {
+ return request({ url: `/sys/file-config/${id}`, method: 'delete' })
+ },
+
+ setMaster(id: number): Promise {
+ return request({ url: `/sys/file-config/master/${id}`, method: 'put' })
+ },
+
+ testConfig(data: SysFileConfig): Promise {
+ return request({ url: '/sys/file-config/test', method: 'post', data })
+ }
+}
diff --git a/src/api/system1.ts b/src/api/system1.ts
new file mode 100644
index 0000000..146412c
--- /dev/null
+++ b/src/api/system1.ts
@@ -0,0 +1,504 @@
+import { request } from '@/utils/request'
+
+// 分页结果
+export interface PageResult {
+ list: T[]
+ total: number
+ page: number
+ pageSize: number
+}
+
+// ==================== 首页统计 ====================
+export interface DashboardStats {
+ userCount: number
+ roleCount: number
+ menuCount: number
+ permissionCount: number
+}
+
+export const dashboardApi = {
+ getStats(): Promise {
+ return request({ url: '/dashboard/stats', method: 'get' })
+ }
+}
+
+// ==================== 用户管理 ====================
+export interface SysUser {
+ id?: number | null
+ deptId?: number | null
+ name?: string
+ deptName?: string
+ username: string
+ password?: string
+ nickname: string
+ avatar?: string
+ email?: string
+ phone?: string
+ gender?: number| null
+ status: number
+ assetsUrl?: string
+ assetsState: number
+ bankCard: string
+ bankOpenName: string
+
+ remark?: string
+ userType?: string // 用户类型: admin-后台管理员 pc-PC前台用户 app-App/小程序用户
+ openId?: string // 微信openId
+ isQuit?: number | null // 是否离职(0-否 1-是)
+ postNames?: string // 岗位名称列表
+ createTime?: string
+}
+
+export interface UserDetailResult {
+ user: SysUser
+ roleIds: number[]
+ postIds: number[]
+}
+
+export const userApi = {
+ page(params: { page: number; pageSize: number; username?: string; status?: number; userType?: string; deptId?: number; postId?: number }): Promise> {
+ return request({ url: '/sys/user/page', method: 'get', params })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/user/${id}`, method: 'get' })
+ },
+
+ create(data: { user: SysUser; roleIds: number[]; postIds: number[] }): Promise {
+ return request({ url: '/sys/user', method: 'post', data })
+ },
+
+ update(data: { user: SysUser; roleIds: number[]; postIds: number[] }): Promise {
+ return request({ url: '/sys/user', method: 'put', data })
+ },
+
+ update1(data: SysUser): Promise {
+ return request({ url: '/sys/user/audit', method: 'put', data })
+ },
+
+ delete(id: number): Promise {
+ return request({ url: `/sys/user/${id}`, method: 'delete' })
+ },
+
+ deleteBatch(ids: number[]): Promise {
+ return request({ url: '/sys/user/batch', method: 'delete', data: ids })
+ },
+
+ resetPassword(id: number): Promise {
+ return request({ url: `/sys/user/${id}/reset-password`, method: 'post' })
+ },
+
+ approve(id: number): Promise {
+ return request({ url: `/sys/user/${id}/approve`, method: 'post' })
+ },
+
+ reject(id: number): Promise {
+ return request({ url: `/sys/user/${id}/reject`, method: 'post' })
+ },
+
+ toggleQuit(id: number): Promise {
+ return request({ url: `/sys/user/${id}/quit`, method: 'post' })
+ },
+
+ // 导出用户
+ exportUsers(params?: { username?: string; status?: number; userType?: string; deptId?: number; ids?: number[] }): Promise {
+ const searchParams: Record = {}
+ if (params?.username) searchParams.username = params.username
+ if (params?.status !== undefined && params?.status !== null) searchParams.status = params.status
+ if (params?.userType) searchParams.userType = params.userType
+ if (params?.deptId) searchParams.deptId = params.deptId
+ // 数组转逗号分隔字符串
+ if (params?.ids && params.ids.length > 0) searchParams.ids = params.ids.join(',')
+ return request({
+ url: '/sys/user/export',
+ method: 'get',
+ params: searchParams,
+ responseType: 'blob'
+ })
+ },
+
+ // 导入用户
+ importUsers(file: File): Promise<{ success: number; fail: number; errors: string[] }> {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request({
+ url: '/sys/user/import',
+ method: 'post',
+ data: formData,
+ headers: { 'Content-Type': 'multipart/form-data' }
+ })
+ },
+
+ // 下载导入模板
+ downloadTemplate(): Promise {
+ return request({
+ url: '/sys/user/template',
+ method: 'get',
+ responseType: 'blob'
+ })
+ }
+}
+
+// ==================== 角色管理 ====================
+export interface SysRole {
+ id?: number
+ name: string
+ code: string
+ sort: number
+ status: number
+ dataScope?: number // 数据范围: 1-全部, 2-自定义, 3-本部门, 4-本部门及下级, 5-仅本人
+ remark?: string
+ createTime?: string
+}
+
+export interface RoleDetailResult {
+ role: SysRole
+ menuIds: number[]
+ deptIds: number[]
+}
+
+// ==================== 岗位管理 ====================
+export interface SysPost {
+ id?: number
+ parentId?: number
+ postCode: string
+ postName: string
+ sort: number
+ status: number
+ remark?: string
+ createTime?: string
+ children?: SysPost[]
+}
+
+export const postApi = {
+ page(params: { page: number; pageSize: number; postCode?: string; postName?: string; status?: number }): Promise> {
+ return request({ url: '/sys/post/page', method: 'get', params })
+ },
+
+ list(): Promise {
+ return request({ url: '/sys/post/list', method: 'get' })
+ },
+
+ postList(): Promise {
+ return request({ url: '/sys/post/post/list', method: 'get' })
+ },
+
+ tree(): Promise {
+ return request({ url: '/sys/post/tree', method: 'get' })
+ },
+
+ postTree(): Promise {
+ return request({ url: '/sys/post/post/tree', method: 'get' })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/post/${id}`, method: 'get' })
+ },
+
+ create(data: SysPost): Promise {
+ return request({ url: '/sys/post', method: 'post', data })
+ },
+
+ update(data: SysPost): Promise {
+ return request({ url: '/sys/post', method: 'put', data })
+ },
+
+ delete(id: number): Promise {
+ return request({ url: `/sys/post/${id}`, method: 'delete' })
+ },
+
+ move(id: number, parentId: number): Promise {
+ return request({ url: `/sys/post/${id}/move`, method: 'post', params: { parentId } })
+ }
+}
+
+// ==================== 角色管理 ====================
+export const roleApi = {
+ page(params: { page: number; pageSize: number; name?: string; status?: number }): Promise> {
+ return request({ url: '/sys/role/page', method: 'get', params })
+ },
+
+ list(): Promise {
+ return request({ url: '/sys/role/list', method: 'get' })
+ },
+
+ roleList(): Promise {
+ return request({ url: '/sys/role/role/list', method: 'get' })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/role/${id}`, method: 'get' })
+ },
+
+ create(data: { role: SysRole; menuIds: number[]; deptIds?: number[] }): Promise {
+ return request({ url: '/sys/role', method: 'post', data })
+ },
+
+ update(data: { role: SysRole; menuIds: number[]; deptIds?: number[] }): Promise {
+ return request({ url: '/sys/role', method: 'put', data })
+ },
+
+ delete(id: number): Promise {
+ return request({ url: `/sys/role/${id}`, method: 'delete' })
+ }
+}
+
+// ==================== 部门管理 ====================
+export interface SysDept {
+ id?: number
+ parentId: number
+ deptName: string
+ sort: number
+ leader?: string
+ phone?: string
+ email?: string
+ status: number
+ children?: SysDept[]
+}
+
+export const deptApi = {
+ tree(): Promise {
+ return request({ url: '/sys/dept/tree', method: 'get' })
+ },
+
+ deptTree(): Promise {
+ return request({ url: '/sys/dept/deptTree', method: 'get' })
+ },
+ list(): Promise {
+ return request({ url: '/sys/dept/list', method: 'get' })
+ }
+}
+
+// ==================== 菜单管理 ====================
+export interface SysMenu {
+ id?: number
+ parentId: number
+ name: string
+ type: number
+ path?: string
+ component?: string
+ permission?: string
+ icon?: string
+ sort: number
+ visible: number
+ status: number
+ isFrame?: number // 是否外链(0-否 1-是)
+ children?: SysMenu[]
+}
+
+export const menuApi = {
+ tree(params?: { name?: string; status?: number }): Promise {
+ return request({ url: '/sys/menu/tree', method: 'get', params })
+ },
+
+ roleTree(params?: { name?: string; status?: number }): Promise {
+ return request({ url: '/sys/menu/roleTree', method: 'get', params })
+ },
+
+ list(): Promise {
+ return request({ url: '/sys/menu/list', method: 'get' })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/menu/${id}`, method: 'get' })
+ },
+
+ create(data: SysMenu): Promise {
+ return request({ url: '/sys/menu', method: 'post', data })
+ },
+
+ update(data: SysMenu): Promise {
+ return request({ url: '/sys/menu', method: 'put', data })
+ },
+
+ delete(id: number): Promise {
+ return request({ url: `/sys/menu/${id}`, method: 'delete' })
+ }
+}
+
+// ==================== 文件分组管理 ====================
+export interface SysFileGroup {
+ id?: number
+ name: string
+ sort?: number
+ fileCount?: number
+ createBy?: string
+ createTime?: string
+}
+
+export interface FileGroupListResult {
+ groups: SysFileGroup[]
+ ungroupedCount: number
+}
+
+export const fileGroupApi = {
+ list(): Promise {
+ return request({ url: '/sys/file-group/list', method: 'get' })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/file-group/${id}`, method: 'get' })
+ },
+
+ create(data: SysFileGroup): Promise {
+ return request({ url: '/sys/file-group', method: 'post', data })
+ },
+
+ update(data: SysFileGroup): Promise {
+ return request({ url: '/sys/file-group', method: 'put', data })
+ },
+
+ delete(id: number): Promise {
+ return request({ url: `/sys/file-group/${id}`, method: 'delete' })
+ }
+}
+
+// ==================== 文件管理 ====================
+export interface SysFile {
+ id?: number
+ originalName: string
+ fileName: string
+ filePath: string
+ url: string
+ fileSize: number
+ fileType: string
+ fileSuffix: string
+ storageType: string
+ bucketName?: string
+ groupId?: number
+ createBy?: string
+ createTime?: string
+ remark?: string
+}
+
+export const fileApi = {
+ page(params: { page: number; pageSize: number; originalName?: string; fileType?: string }): Promise> {
+ return request({ url: '/sys/file/page', method: 'get', params })
+ },
+
+ pageByGroup(params: {
+ page: number
+ pageSize: number
+ groupId?: number | null
+ fileCategory?: string
+ originalName?: string
+ }): Promise> {
+ return request({ url: '/sys/file/page-by-group', method: 'get', params })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/file/${id}`, method: 'get' })
+ },
+
+ upload(file: File, path?: string, groupId?: number | null): Promise {
+ const formData = new FormData()
+ formData.append('file', file)
+ if (path) {
+ formData.append('path', path)
+ }
+ if (groupId !== undefined && groupId !== null && groupId > 0) {
+ formData.append('groupId', groupId.toString())
+ }
+ return request({
+ url: '/sys/file/upload',
+ method: 'post',
+ data: formData,
+ headers: { 'Content-Type': 'multipart/form-data' }
+ })
+ },
+
+ uploadImage(file: File): Promise {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request({
+ url: '/sys/file/upload/image',
+ method: 'post',
+ data: formData,
+ headers: { 'Content-Type': 'multipart/form-data' }
+ })
+ },
+
+ getDownloadUrl(id: number): string {
+ return `/api/sys/file/download/${id}`
+ },
+
+ getPreviewUrl(id: number): string {
+ return `/api/sys/file/preview/${id}`
+ },
+
+ getTextContent(id: number): Promise {
+ return request({ url: `/sys/file/text/${id}`, method: 'get' })
+ },
+
+ delete(id: number): Promise {
+ return request({ url: `/sys/file/${id}`, method: 'delete' })
+ },
+
+ deleteBatch(ids: number[]): Promise {
+ return request({ url: '/sys/file/batch', method: 'delete', data: ids })
+ },
+
+ moveToGroup(fileIds: number[], groupId: number | null): Promise {
+ return request({ url: '/sys/file/move', method: 'post', data: { fileIds, groupId } })
+ },
+
+ rename(id: number, newName: string): Promise {
+ return request({ url: `/sys/file/${id}/rename`, method: 'put', data: { newName } })
+ }
+}
+
+// ==================== 文件配置管理 ====================
+export interface SysFileConfig {
+ id?: number
+ name: string
+ storageType: string
+ master: number
+ domain: string
+ basePath?: string
+ bucketName?: string
+ accessKey?: string
+ secretKey?: string
+ endpoint?: string
+ region?: string
+ status: number
+ remark?: string
+ createTime?: string
+}
+
+export const fileConfigApi = {
+ page(params: { page: number; pageSize: number; name?: string; storageType?: string }): Promise> {
+ return request({ url: '/sys/file-config/page', method: 'get', params })
+ },
+
+ list(): Promise {
+ return request({ url: '/sys/file-config/list', method: 'get' })
+ },
+
+ detail(id: number): Promise {
+ return request({ url: `/sys/file-config/${id}`, method: 'get' })
+ },
+
+ getMaster(): Promise {
+ return request({ url: '/sys/file-config/master', method: 'get' })
+ },
+
+ create(data: SysFileConfig): Promise {
+ return request({ url: '/sys/file-config', method: 'post', data })
+ },
+
+ update(data: SysFileConfig): Promise {
+ return request({ url: '/sys/file-config', method: 'put', data })
+ },
+
+ delete(id: number): Promise