Browse Source

角色权限

ZaiZai 1 năm trước cách đây
mục cha
commit
c9bd2edeac

+ 4 - 4
package.json

@@ -21,13 +21,13 @@
         "dayjs": "^1.11.10",
         "echarts": "^5.5.0",
         "element-plus": "2.5.6",
-        "hc-vue3-ui": "^3.1.8",
+        "hc-vue3-ui": "^3.1.9",
         "js-base64": "^3.7.7",
         "js-fast-way": "^0.4.6",
         "js-md5": "^0.8.3",
         "nprogress": "^0.2.0",
         "pinia": "^2.1.7",
-        "vue": "3.4.20",
+        "vue": "3.4.21",
         "vue-router": "^4.3.0",
         "vuedraggable": "^4.1.0"
     },
@@ -36,8 +36,8 @@
         "@iconify-json/ri": "^1.1.20",
         "@unocss/eslint-config": "^0.58.5",
         "@vitejs/plugin-vue": "^5.0.4",
-        "@vue/compiler-sfc": "^3.4.20",
-        "archiver": "^6.0.2",
+        "@vue/compiler-sfc": "^3.4.21",
+        "archiver": "^7.0.0",
         "bignumber.js": "^9.1.2",
         "eslint": "^8.57.0",
         "eslint-plugin-vue": "^9.22.0",

+ 49 - 0
src/api/modules/authority/api.js

@@ -0,0 +1,49 @@
+import { HcApi } from '../../request/index'
+
+export default {
+    //分页
+    async page(form) {
+        return HcApi({
+            url: '/api/blade-resource/oss/list',
+            method: 'get',
+            params: form,
+        }, false)
+    },
+    //详情
+    async detail(id) {
+        return HcApi({
+            url: '/api/blade-resource/oss/detail',
+            method: 'get',
+            params: {
+                id,
+            },
+        }, false)
+    },
+    //新增和编辑
+    async submit(form) {
+        return HcApi({
+            url: '/api/blade-resource/oss/submit',
+            method: 'post',
+            data: form,
+        }, false)
+    },
+    //删除
+    async del(ids) {
+        return HcApi({
+            url: '/api/blade-resource/oss/remove',
+            method: 'post',
+            params: {
+                ids,
+            },
+        }, false)
+    },
+    async enable(id) {
+        return HcApi({
+            url: '/api/blade-resource/oss/enable',
+            method: 'post',
+            params: {
+                id,
+            },
+        }, false)
+    },
+}

+ 49 - 0
src/api/modules/authority/data.js

@@ -0,0 +1,49 @@
+import { HcApi } from '../../request/index'
+
+export default {
+    //分页
+    async page(form) {
+        return HcApi({
+            url: '/api/blade-resource/oss/list',
+            method: 'get',
+            params: form,
+        }, false)
+    },
+    //详情
+    async detail(id) {
+        return HcApi({
+            url: '/api/blade-resource/oss/detail',
+            method: 'get',
+            params: {
+                id,
+            },
+        }, false)
+    },
+    //新增和编辑
+    async submit(form) {
+        return HcApi({
+            url: '/api/blade-resource/oss/submit',
+            method: 'post',
+            data: form,
+        }, false)
+    },
+    //删除
+    async del(ids) {
+        return HcApi({
+            url: '/api/blade-resource/oss/remove',
+            method: 'post',
+            params: {
+                ids,
+            },
+        }, false)
+    },
+    async enable(id) {
+        return HcApi({
+            url: '/api/blade-resource/oss/enable',
+            method: 'post',
+            params: {
+                id,
+            },
+        }, false)
+    },
+}

+ 99 - 0
src/api/modules/authority/role.js

@@ -0,0 +1,99 @@
+import { HcApi } from '../../request/index'
+
+export default {
+    //分页
+    async page(form) {
+        return HcApi({
+            url: '/api/blade-system/role/list',
+            method: 'get',
+            params: {
+                form,
+                current: 1,
+                size: 200,
+            },
+        }, false)
+    },
+    //新增和编辑
+    async submit(form) {
+        return HcApi({
+            url: '/api/blade-system/role/submit',
+            method: 'post',
+            data: form,
+        }, false)
+    },
+    //删除
+    async del(ids) {
+        return HcApi({
+            url: '/api/blade-system/role/remove',
+            method: 'post',
+            params: {
+                ids,
+            },
+        }, false)
+    },
+    async grant(form) {
+        return HcApi({
+            url: '/api/blade-system/role/grant',
+            method: 'post',
+            data: form,
+        }, false)
+    },
+    async grantTree() {
+        return HcApi({
+            url: '/api/blade-system/menu/grant-tree',
+            method: 'get',
+        }, false)
+    },
+    async getRole(roleIds) {
+        return HcApi({
+            url: '/api/blade-system/menu/role-tree-keys',
+            method: 'get',
+            params: {
+                roleIds,
+            },
+        }, false)
+    },
+    async roleTree() {
+        return HcApi({
+            url: '/api/blade-system/role/tree',
+            method: 'get',
+            params: {
+                tenantId: '',
+            },
+        }, false)
+    },
+    async getRoleTreeById(roleId) {
+        return HcApi({
+            url: '/api/blade-system/role/tree-by-id',
+            method: 'get',
+            params: {
+                roleId,
+            },
+        }, false)
+    },
+    async treeUser(roleId) {
+        return HcApi({
+            url: '/api/blade-system/role/treeTow',
+            method: 'get',
+            params: {
+                roleId,
+            },
+        }, false)
+    },
+    // 编辑加载项目合同段信息
+    async findProjectAndContractList(form) {
+        return HcApi({
+            url: '/api/blade-manager/projectInfo/get-project-contract-list',
+            method: 'get',
+            params: form ?? {},
+        }, false)
+    },
+    // 编辑新增项目合同段信息
+    async saveUserInfoByProjectTow(form) {
+        return HcApi({
+            url: '/api/blade-manager/contractInfo/save-userInfo-by-project-tow',
+            method: 'post',
+            data: form ?? {},
+        }, false)
+    },
+}

+ 27 - 0
src/router/modules/base.js

@@ -33,6 +33,33 @@ export default [
             },
         ],
     },
+    {
+        path: '/authority',
+        name: 'authority',
+        redirect: '/authority/role',
+        meta: { title: '权限管理' },
+        component: Layout,
+        children: [
+            {
+                path: '/authority/role',
+                name: 'role',
+                meta: { title: '角色管理' },
+                component: () => import('~src/views/authority/role.vue'),
+            },
+            {
+                path: '/authority/data-scope',
+                name: 'data_scope',
+                meta: { title: '数据权限' },
+                component: () => import('~src/views/authority/data.vue'),
+            },
+            {
+                path: '/authority/api-scope',
+                name: 'api_scope',
+                meta: { title: '接口权限' },
+                component: () => import('~src/views/authority/api.vue'),
+            },
+        ],
+    },
     {
         path: '/system',
         name: 'system',

+ 19 - 0
src/views/authority/api.vue

@@ -0,0 +1,19 @@
+<template>
+    <div>111</div>
+</template>
+
+<script setup>
+import { onActivated, ref } from 'vue'
+import { delMessage } from 'hc-vue3-ui'
+import { arrToId, getArrValue } from 'js-fast-way'
+import mainApi from '~api/authority/api'
+
+//激活
+onActivated(() => {
+
+})
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 19 - 0
src/views/authority/data.vue

@@ -0,0 +1,19 @@
+<template>
+    <div>111</div>
+</template>
+
+<script setup>
+import { onActivated, ref } from 'vue'
+import { delMessage } from 'hc-vue3-ui'
+import { arrToId, getArrValue } from 'js-fast-way'
+import mainApi from '~api/authority/data'
+
+//激活
+onActivated(() => {
+
+})
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 265 - 0
src/views/authority/role.vue

@@ -0,0 +1,265 @@
+<template>
+    <hc-new-card>
+        <template #header>
+            <div class="w-40">
+                <el-select v-model="searchForm.tenantId" placeholder="选择所属租户" filterable clearable block>
+                    <el-option v-for="item in tenantData" :key="item.tenantId" :label="item.name" :value="item.tenantId" />
+                </el-select>
+            </div>
+            <div class="ml-2 w-64">
+                <hc-search-input v-model="searchForm.roleName" placeholder="请输入角色名称关键词" @search="searchClick" />
+            </div>
+        </template>
+        <template #extra>
+            <el-button hc-btn type="primary" @click="addClick">新增</el-button>
+            <el-button hc-btn type="danger" @click="delClick">删除</el-button>
+        </template>
+        <hc-table
+            :column="tableColumn" :datas="tableData" :loading="tableLoading"
+            :is-index="false" is-new is-check :check-style="{ width: 29 }" is-children
+            @selection-change="tableCheckChange"
+        >
+            <template #tenantId="{ row }">{{ getTenantName(row) }}</template>
+            <template #action="{ row }">
+                <el-link type="primary">权限设置</el-link>
+                <el-link type="warning" @click="editRowClick(row)">修改</el-link>
+                <el-link type="success" @click="addRowClick(row)">添加</el-link>
+                <el-link type="danger" @click="delRowClick(row)">删除</el-link>
+            </template>
+        </hc-table>
+
+        <!-- 新增/修改 -->
+        <hc-new-dialog v-model="isDialogShow" widths="400px" is-footer-center :title="iconDialogTitle" @close="dialogClose">
+            <el-form ref="formRef" :model="formModel" :rules="formRules" label-position="top" label-width="auto">
+                <el-form-item label="角色名称:" prop="roleName">
+                    <el-input v-model="formModel.roleName" clearable />
+                </el-form-item>
+                <el-form-item label="角色别名:" prop="roleAlias">
+                    <el-input v-model="formModel.roleAlias" clearable />
+                </el-form-item>
+                <el-form-item label="上级角色:">
+                    <el-tree-select
+                        v-model="formModel.parentId" :disabled="isChildForm" :data="levelData" :props="levelDataProps"
+                        clearable filterable check-strictly block :render-after-expand="false"
+                    />
+                </el-form-item>
+                <el-form-item label="角色排序:" prop="sort">
+                    <el-input-number v-model="formModel.sort" :min="1" block controls-position="right" />
+                </el-form-item>
+            </el-form>
+            <template #footer>
+                <el-button hc-btn @click="dialogClose">取消</el-button>
+                <el-button hc-btn type="primary" :loading="submitLoading" @click="dialogSubmit">提交</el-button>
+            </template>
+        </hc-new-dialog>
+    </hc-new-card>
+</template>
+
+<script setup>
+import { nextTick, onActivated, ref } from 'vue'
+import { delMessage } from 'hc-vue3-ui'
+import { arrToId, formValidate, getArrValue, isNullES } from 'js-fast-way'
+import tenantApi from '~api/system/tenant'
+import mainApi from '~api/authority/role'
+import { reloadPage } from '~uti/tools.js'
+
+//激活
+onActivated(() => {
+    getDataApi()
+})
+
+const getDataApi = async () => {
+    await getTenantData()
+    searchClick()
+}
+
+//搜索表单
+const searchForm = ref({ tenantId: null, roleName: '' })
+
+//所属租户
+const tenantData = ref([])
+const getTenantData = async () => {
+    let newArr = []
+    const { data } = await tenantApi.getSelect()
+    const res = getArrValue(data)
+    for (let i = 0; i < res.length; i++) {
+        newArr.push({
+            id: res[i]['id'],
+            name: res[i]['tenantName'],
+            tenantId: res[i]['tenantId'],
+        })
+    }
+    tenantData.value = newArr
+}
+const getTenantName = ({ tenantId }) => {
+    if (isNullES(tenantId)) return '-'
+    const item = tenantData.value.find((item) => item.tenantId === tenantId)
+    if (isNullES(item)) return tenantId
+    return item.name ?? tenantId
+}
+
+//搜索
+const searchClick = () => {
+    getTableData()
+}
+
+//表格数据
+const tableColumn = ref([
+    { key: 'roleName', name: '角色名称' },
+    { key: 'tenantId', name: '所属租户' },
+    { key: 'roleAlias', name: '角色别名' },
+    { key: 'sort', name: '排序' },
+    { key: 'action', name: '操作', width: 200, align: 'center' },
+])
+const tableData = ref([])
+
+//获取表格数据
+const tableLoading = ref(false)
+const getTableData = async () => {
+    tableData.value = []
+    tableLoading.value = true
+    const { data } = await mainApi.page(searchForm.value)
+    tableData.value = getArrValue(data)
+    tableLoading.value = false
+}
+
+//表格被选择
+const tableCheckKeys = ref([])
+const tableCheckChange = (rows) => {
+    tableCheckKeys.value = rows
+}
+
+//上级菜单
+const levelDataProps = { label: 'title' }
+const levelData = ref([])
+const getlevelData = async () => {
+    const { data } = await mainApi.getRoleTreeById()
+    levelData.value = getArrValue(data)
+}
+
+//新增/修改 弹窗
+const isDialogShow = ref(false)
+const iconDialogTitle = ref('')
+
+//菜单表单
+const formRef = ref(null)
+const formModel = ref({})
+const formRules = {
+    roleName: {
+        required: true,
+        trigger: 'blur',
+        message: '请输入角色名称',
+    },
+    roleAlias: {
+        required: true,
+        trigger: 'blur',
+        message: '请输入角色别名',
+    },
+    sort: {
+        required: true,
+        trigger: 'blur',
+        message: '请输入菜单排序',
+    },
+}
+
+
+//新增
+const addClick = () => {
+    isChildForm.value = false
+    iconDialogTitle.value = '新增角色'
+    formModel.value = { parentId: null, sort: 1 }
+    //显示表单弹窗
+    nextTick(() => {
+        isDialogShow.value = true
+        getlevelData()
+    })
+}
+
+//修改
+const editRowClick = (row) => {
+    isChildForm.value = false
+    formModel.value = {}
+    iconDialogTitle.value = '修改角色'
+    formModel.value = { ...row }
+    //显示表单弹窗
+    nextTick(() => {
+        isDialogShow.value = true
+        getlevelData()
+    })
+}
+
+//新增子项
+const isChildForm = ref(false)
+const addRowClick = (row) => {
+    isChildForm.value = true
+    iconDialogTitle.value = '新增子项'
+    formModel.value = { parentId: row.id, sort: 1 }
+    //显示表单弹窗
+    nextTick(() => {
+        isDialogShow.value = true
+        getlevelData()
+    })
+}
+
+//提交表单
+const submitLoading = ref(false)
+const dialogSubmit = async () => {
+    const formRes = await formValidate(formRef.value)
+    if (!formRes) return false
+    submitLoading.value = true
+    //处理数据
+    const form = formModel.value
+    form.parentId = form.parentId ?? '0'
+    form.tenantId = form.tenantId ?? ''
+    //发起请求
+    const { error, code, msg } = await mainApi.submit(form)
+    if (!error && code === 200) {
+        dialogClose()
+        window?.$message?.success('操作成功')
+        reloadPage()
+    } else {
+        window?.$message?.error(msg ?? '操作失败')
+    }
+}
+
+//关闭弹窗
+const dialogClose = () => {
+    isDialogShow.value = false
+    submitLoading.value = false
+    isChildForm.value = false
+    formModel.value = {}
+}
+
+//删除
+const delRowClick = (row) => {
+    delMessage(async () => {
+        const { code, msg } = await mainApi.del(row.id)
+        if (code === 200) {
+            window.$message.success('删除成功')
+            reloadPage()
+        } else {
+            window.$message.error(msg ?? '删除失败')
+        }
+    })
+}
+
+//批量删除
+const delClick = () => {
+    const rows = tableCheckKeys.value
+    if (rows.length <= 0) {
+        window.$message.warning('请选择要删除的数据')
+        return false
+    }
+    //确认删除菜单
+    delMessage(async () => {
+        const ids = arrToId(rows)
+        const { code, msg } = await mainApi.del(ids)
+        if (code === 200) {
+            window.$message.success('删除成功')
+            reloadPage()
+        } else {
+            window.$message.error(msg ?? '删除失败')
+        }
+    })
+}
+</script>

+ 1 - 1
src/views/resource/attach.vue

@@ -48,7 +48,7 @@
 </template>
 
 <script setup>
-import { nextTick, onActivated, ref } from 'vue'
+import { onActivated, ref } from 'vue'
 import { delMessage, getHeader } from 'hc-vue3-ui'
 import { arrToId, filterSize, getArrValue } from 'js-fast-way'
 import mainApi from '~api/resource/attach'

+ 292 - 111
yarn.lock

@@ -536,6 +536,18 @@
     local-pkg "^0.5.0"
     mlly "^1.5.0"
 
+"@isaacs/cliui@^8.0.2":
+  version "8.0.2"
+  resolved "http://39.108.216.210:9000/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+  integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+  dependencies:
+    string-width "^5.1.2"
+    string-width-cjs "npm:string-width@^4.2.0"
+    strip-ansi "^7.0.1"
+    strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+    wrap-ansi "^8.1.0"
+    wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
 "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
   version "0.3.4"
   resolved "http://39.108.216.210:9000/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz#9b18145d26cf33d08576cf4c7665b28554480ed7"
@@ -589,6 +601,11 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
+"@pkgjs/parseargs@^0.11.0":
+  version "0.11.0"
+  resolved "http://39.108.216.210:9000/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+  integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
 "@pkgr/core@^0.1.0":
   version "0.1.1"
   resolved "http://39.108.216.210:9000/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31"
@@ -1026,89 +1043,89 @@
   resolved "http://39.108.216.210:9000/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz#508d6a0f2440f86945835d903fcc0d95d1bb8a37"
   integrity sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==
 
-"@vue/compiler-core@3.4.20":
-  version "3.4.20"
-  resolved "http://39.108.216.210:9000/@vue/compiler-core/-/compiler-core-3.4.20.tgz#1fc69daaff164ef804fe700896952dd2ce2ff082"
-  integrity sha512-l7M+xUuL8hrGtRLkrf+62d9zucAdgqNBTbJ/NufCOIuJQhauhfyAKH9ra/qUctCXcULwmclGAVpvmxjbBO30qg==
+"@vue/compiler-core@3.4.21":
+  version "3.4.21"
+  resolved "http://39.108.216.210:9000/@vue/compiler-core/-/compiler-core-3.4.21.tgz#868b7085378fc24e58c9aed14c8d62110a62be1a"
+  integrity sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==
   dependencies:
     "@babel/parser" "^7.23.9"
-    "@vue/shared" "3.4.20"
+    "@vue/shared" "3.4.21"
     entities "^4.5.0"
     estree-walker "^2.0.2"
     source-map-js "^1.0.2"
 
-"@vue/compiler-dom@3.4.20":
-  version "3.4.20"
-  resolved "http://39.108.216.210:9000/@vue/compiler-dom/-/compiler-dom-3.4.20.tgz#a1fd73e9c940021645679cde77caf7a0a51efaa9"
-  integrity sha512-/cSBGL79HFBYgDnqCNKErOav3bPde3n0sJwJM2Z09rXlkiowV/2SG1tgDAiWS1CatS4Cvo0o74e1vNeCK1R3RA==
+"@vue/compiler-dom@3.4.21":
+  version "3.4.21"
+  resolved "http://39.108.216.210:9000/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz#0077c355e2008207283a5a87d510330d22546803"
+  integrity sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==
   dependencies:
-    "@vue/compiler-core" "3.4.20"
-    "@vue/shared" "3.4.20"
+    "@vue/compiler-core" "3.4.21"
+    "@vue/shared" "3.4.21"
 
-"@vue/compiler-sfc@3.4.20", "@vue/compiler-sfc@^3.4.20":
-  version "3.4.20"
-  resolved "http://39.108.216.210:9000/@vue/compiler-sfc/-/compiler-sfc-3.4.20.tgz#854ea80a61645f282d4783f744b42fd3fc5bcfd0"
-  integrity sha512-nPuTZz0yxTPzjyYe+9nQQsFYImcz/57UX8N3jyhl5oIUUs2jqqAMaULsAlJwve3qNYfjQzq0bwy3pqJrN9ecZw==
+"@vue/compiler-sfc@3.4.21", "@vue/compiler-sfc@^3.4.21":
+  version "3.4.21"
+  resolved "http://39.108.216.210:9000/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz#4af920dc31ab99e1ff5d152b5fe0ad12181145b2"
+  integrity sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==
   dependencies:
     "@babel/parser" "^7.23.9"
-    "@vue/compiler-core" "3.4.20"
-    "@vue/compiler-dom" "3.4.20"
-    "@vue/compiler-ssr" "3.4.20"
-    "@vue/shared" "3.4.20"
+    "@vue/compiler-core" "3.4.21"
+    "@vue/compiler-dom" "3.4.21"
+    "@vue/compiler-ssr" "3.4.21"
+    "@vue/shared" "3.4.21"
     estree-walker "^2.0.2"
     magic-string "^0.30.7"
     postcss "^8.4.35"
     source-map-js "^1.0.2"
 
-"@vue/compiler-ssr@3.4.20":
-  version "3.4.20"
-  resolved "http://39.108.216.210:9000/@vue/compiler-ssr/-/compiler-ssr-3.4.20.tgz#3602bd176dc82c2aff3261761d04df3023ecb938"
-  integrity sha512-b3gFQPiHLvI12C56otzBPpQhZ5kgkJ5RMv/zpLjLC2BIFwX5GktDqYQ7xg0Q2grP6uFI8al3beVKvAVxFtXmIg==
+"@vue/compiler-ssr@3.4.21":
+  version "3.4.21"
+  resolved "http://39.108.216.210:9000/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz#b84ae64fb9c265df21fc67f7624587673d324fef"
+  integrity sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==
   dependencies:
-    "@vue/compiler-dom" "3.4.20"
-    "@vue/shared" "3.4.20"
+    "@vue/compiler-dom" "3.4.21"
+    "@vue/shared" "3.4.21"
 
 "@vue/devtools-api@^6.5.0", "@vue/devtools-api@^6.5.1":
   version "6.6.1"
   resolved "http://39.108.216.210:9000/@vue/devtools-api/-/devtools-api-6.6.1.tgz#7c14346383751d9f6ad4bea0963245b30220ef83"
   integrity sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==
 
-"@vue/reactivity@3.4.20":
-  version "3.4.20"
-  resolved "http://39.108.216.210:9000/@vue/reactivity/-/reactivity-3.4.20.tgz#584910882d8af382900cc77ce8166ffd87921fd2"
-  integrity sha512-P5LJcxUkG6inlHr6MHVA4AVFAmRYJQ7ONGWJILNjMjoYuEXFhYviSCb9BEMyszSG/1kWCZbtWQlKSLasFRpThw==
+"@vue/reactivity@3.4.21":
+  version "3.4.21"
+  resolved "http://39.108.216.210:9000/@vue/reactivity/-/reactivity-3.4.21.tgz#affd3415115b8ebf4927c8d2a0d6a24bccfa9f02"
+  integrity sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==
   dependencies:
-    "@vue/shared" "3.4.20"
+    "@vue/shared" "3.4.21"
 
-"@vue/runtime-core@3.4.20":
-  version "3.4.20"
-  resolved "http://39.108.216.210:9000/@vue/runtime-core/-/runtime-core-3.4.20.tgz#680630c7fdf9fee09be6b32f22cc753cecb68c34"
-  integrity sha512-MPvsQpGAxoBqLHjqopt4YPtUYBpq0K6oAWDTwIR1CTNZ3y9O/J2ZVh+i2JpxKNYwANJBiZ20O99NE20uisB7xw==
+"@vue/runtime-core@3.4.21":
+  version "3.4.21"
+  resolved "http://39.108.216.210:9000/@vue/runtime-core/-/runtime-core-3.4.21.tgz#3749c3f024a64c4c27ecd75aea4ca35634db0062"
+  integrity sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==
   dependencies:
-    "@vue/reactivity" "3.4.20"
-    "@vue/shared" "3.4.20"
+    "@vue/reactivity" "3.4.21"
+    "@vue/shared" "3.4.21"
 
-"@vue/runtime-dom@3.4.20":
-  version "3.4.20"
-  resolved "http://39.108.216.210:9000/@vue/runtime-dom/-/runtime-dom-3.4.20.tgz#3eebd867385d759cc333fb761365655987e78969"
-  integrity sha512-OkbPVP69H+8m74543zMAAx/LIkajxufYyow41gc0s5iF0uplT5uTQ4llDYu1GeJZEI8wjL5ueiPQruk4qwOMmA==
+"@vue/runtime-dom@3.4.21":
+  version "3.4.21"
+  resolved "http://39.108.216.210:9000/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz#91f867ef64eff232cac45095ab28ebc93ac74588"
+  integrity sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==
   dependencies:
-    "@vue/runtime-core" "3.4.20"
-    "@vue/shared" "3.4.20"
+    "@vue/runtime-core" "3.4.21"
+    "@vue/shared" "3.4.21"
     csstype "^3.1.3"
 
-"@vue/server-renderer@3.4.20":
-  version "3.4.20"
-  resolved "http://39.108.216.210:9000/@vue/server-renderer/-/server-renderer-3.4.20.tgz#1f59b76ba8a711cbf56ed2b004fe44c1ef861b6e"
-  integrity sha512-w3VH2GuwxQHA6pJo/HCV22OfVC8Mw4oeHQM+vKeqtRK0OPE1Wilnh+P/SDVGGxPjJsGmyfphi0dbw8UKZQJH9w==
+"@vue/server-renderer@3.4.21":
+  version "3.4.21"
+  resolved "http://39.108.216.210:9000/@vue/server-renderer/-/server-renderer-3.4.21.tgz#150751579d26661ee3ed26a28604667fa4222a97"
+  integrity sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==
   dependencies:
-    "@vue/compiler-ssr" "3.4.20"
-    "@vue/shared" "3.4.20"
+    "@vue/compiler-ssr" "3.4.21"
+    "@vue/shared" "3.4.21"
 
-"@vue/shared@3.4.20":
-  version "3.4.20"
-  resolved "http://39.108.216.210:9000/@vue/shared/-/shared-3.4.20.tgz#13b7d1e2a3752bbc032b38f53dba5c2f430eea7e"
-  integrity sha512-KTEngal0aiUvNJ6I1Chk5Ew5XqChsFsxP4GKAYXWb99zKJWjNU72p2FWEOmZWHxHcqtniOJsgnpd3zizdpfEag==
+"@vue/shared@3.4.21":
+  version "3.4.21"
+  resolved "http://39.108.216.210:9000/@vue/shared/-/shared-3.4.21.tgz#de526a9059d0a599f0b429af7037cd0c3ed7d5a1"
+  integrity sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==
 
 "@vueuse/core@^9.1.0":
   version "9.13.0"
@@ -1132,6 +1149,13 @@
   dependencies:
     vue-demi "*"
 
+abort-controller@^3.0.0:
+  version "3.0.0"
+  resolved "http://39.108.216.210:9000/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
+  integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
+  dependencies:
+    event-target-shim "^5.0.0"
+
 acorn-jsx@^5.3.2:
   version "5.3.2"
   resolved "http://39.108.216.210:9000/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
@@ -1157,6 +1181,11 @@ ansi-regex@^5.0.1:
   resolved "http://39.108.216.210:9000/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
   integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
 
+ansi-regex@^6.0.1:
+  version "6.0.1"
+  resolved "http://39.108.216.210:9000/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+  integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
 ansi-styles@^3.2.1:
   version "3.2.1"
   resolved "http://39.108.216.210:9000/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@@ -1164,13 +1193,18 @@ ansi-styles@^3.2.1:
   dependencies:
     color-convert "^1.9.0"
 
-ansi-styles@^4.1.0:
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
   version "4.3.0"
   resolved "http://39.108.216.210:9000/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
   integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
   dependencies:
     color-convert "^2.0.1"
 
+ansi-styles@^6.1.0:
+  version "6.2.1"
+  resolved "http://39.108.216.210:9000/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+  integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
 anymatch@~3.1.2:
   version "3.1.3"
   resolved "http://39.108.216.210:9000/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
@@ -1179,30 +1213,30 @@ anymatch@~3.1.2:
     normalize-path "^3.0.0"
     picomatch "^2.0.4"
 
-archiver-utils@^4.0.1:
-  version "4.0.1"
-  resolved "http://39.108.216.210:9000/archiver-utils/-/archiver-utils-4.0.1.tgz#66ad15256e69589a77f706c90c6dbcc1b2775d2a"
-  integrity sha512-Q4Q99idbvzmgCTEAAhi32BkOyq8iVI5EwdO0PmBDSGIzzjYNdcFn7Q7k3OzbLy4kLUPXfJtG6fO2RjftXbobBg==
+archiver-utils@^5.0.0:
+  version "5.0.1"
+  resolved "http://39.108.216.210:9000/archiver-utils/-/archiver-utils-5.0.1.tgz#2ddf49c8b03394cd5a6d45642069f6e924290e3d"
+  integrity sha512-MMAoLdMvT/nckofX1tCLrf7uJce4jTNkiT6smA2u57AOImc1nce7mR3EDujxL5yv6/MnILuQH4sAsPtDS8kTvg==
   dependencies:
-    glob "^8.0.0"
+    glob "^10.0.0"
     graceful-fs "^4.2.0"
     lazystream "^1.0.0"
     lodash "^4.17.15"
     normalize-path "^3.0.0"
     readable-stream "^3.6.0"
 
-archiver@^6.0.2:
-  version "6.0.2"
-  resolved "http://39.108.216.210:9000/archiver/-/archiver-6.0.2.tgz#f45e7598dfe48e834ac8c7a0c37033f826f5a639"
-  integrity sha512-UQ/2nW7NMl1G+1UnrLypQw1VdT9XZg/ECcKPq7l+STzStrSivFIXIp34D8M5zeNGW5NoOupdYCHv6VySCPNNlw==
+archiver@^7.0.0:
+  version "7.0.0"
+  resolved "http://39.108.216.210:9000/archiver/-/archiver-7.0.0.tgz#06802fffa0c00afe4628119d2752cc7b70e1e6e6"
+  integrity sha512-R9HM9egs8FfktSqUqyjlKmvF4U+CWNqm/2tlROV+lOFg79MLdT67ae1l3hU47pGy8twSXxHoiefMCh43w0BriQ==
   dependencies:
-    archiver-utils "^4.0.1"
+    archiver-utils "^5.0.0"
     async "^3.2.4"
-    buffer-crc32 "^0.2.1"
-    readable-stream "^3.6.0"
+    buffer-crc32 "^1.0.0"
+    readable-stream "^4.0.0"
     readdir-glob "^1.1.2"
     tar-stream "^3.0.0"
-    zip-stream "^5.0.1"
+    zip-stream "^6.0.0"
 
 argparse@^2.0.1:
   version "2.0.1"
@@ -1253,6 +1287,11 @@ bare-events@^2.2.0:
   resolved "http://39.108.216.210:9000/bare-events/-/bare-events-2.2.0.tgz#a7a7263c107daf8b85adf0b64f908503454ab26e"
   integrity sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==
 
+base64-js@^1.3.1:
+  version "1.5.1"
+  resolved "http://39.108.216.210:9000/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
 bignumber.js@^9.1.2:
   version "9.1.2"
   resolved "http://39.108.216.210:9000/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c"
@@ -1300,10 +1339,18 @@ browserslist@^4.22.2:
     node-releases "^2.0.14"
     update-browserslist-db "^1.0.13"
 
-buffer-crc32@^0.2.1:
-  version "0.2.13"
-  resolved "http://39.108.216.210:9000/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
-  integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
+buffer-crc32@^1.0.0:
+  version "1.0.0"
+  resolved "http://39.108.216.210:9000/buffer-crc32/-/buffer-crc32-1.0.0.tgz#a10993b9055081d55304bd9feb4a072de179f405"
+  integrity sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==
+
+buffer@^6.0.3:
+  version "6.0.3"
+  resolved "http://39.108.216.210:9000/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+  integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
+  dependencies:
+    base64-js "^1.3.1"
+    ieee754 "^1.2.1"
 
 cac@^6.7.14:
   version "6.7.14"
@@ -1388,15 +1435,15 @@ combined-stream@^1.0.8:
   dependencies:
     delayed-stream "~1.0.0"
 
-compress-commons@^5.0.1:
-  version "5.0.3"
-  resolved "http://39.108.216.210:9000/compress-commons/-/compress-commons-5.0.3.tgz#36b6572fdfc220c88c9c939b48667818806667e9"
-  integrity sha512-/UIcLWvwAQyVibgpQDPtfNM3SvqN7G9elAPAV7GM0L53EbNWwWiCsWtK8Fwed/APEbptPHXs5PuW+y8Bq8lFTA==
+compress-commons@^6.0.0:
+  version "6.0.0"
+  resolved "http://39.108.216.210:9000/compress-commons/-/compress-commons-6.0.0.tgz#9a89dfe2898f8b366cb2b715d6998dbd91f7332e"
+  integrity sha512-t6IJvJfBdf7ZvRENJeRFsNq9KaVOlUbQUwA9mlCR6fLa1NLVLbuLobXOKSNTjLZFms7PsqUFNwwRpQNu1go40Q==
   dependencies:
     crc-32 "^1.2.0"
     crc32-stream "^5.0.0"
     normalize-path "^3.0.0"
-    readable-stream "^3.6.0"
+    readable-stream "^4.0.0"
 
 concat-map@0.0.1:
   version "0.0.1"
@@ -1431,7 +1478,7 @@ crc32-stream@^5.0.0:
     crc-32 "^1.2.0"
     readable-stream "^3.4.0"
 
-cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
   version "7.0.3"
   resolved "http://39.108.216.210:9000/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
   integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -1514,6 +1561,11 @@ duplexer@^0.1.2:
   resolved "http://39.108.216.210:9000/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
   integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
 
+eastasianwidth@^0.2.0:
+  version "0.2.0"
+  resolved "http://39.108.216.210:9000/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+  integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
 echarts@^5.5.0:
   version "5.5.0"
   resolved "http://39.108.216.210:9000/echarts/-/echarts-5.5.0.tgz#c13945a7f3acdd67c134d8a9ac67e917830113ac"
@@ -1548,6 +1600,16 @@ element-plus@2.5.6:
     memoize-one "^6.0.0"
     normalize-wheel-es "^1.2.0"
 
+emoji-regex@^8.0.0:
+  version "8.0.0"
+  resolved "http://39.108.216.210:9000/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+  version "9.2.2"
+  resolved "http://39.108.216.210:9000/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+  integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
 entities@^4.5.0:
   version "4.5.0"
   resolved "http://39.108.216.210:9000/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
@@ -1710,6 +1772,16 @@ esutils@^2.0.2:
   resolved "http://39.108.216.210:9000/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
   integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
 
+event-target-shim@^5.0.0:
+  version "5.0.1"
+  resolved "http://39.108.216.210:9000/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
+  integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
+
+events@^3.3.0:
+  version "3.3.0"
+  resolved "http://39.108.216.210:9000/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
 execa@^5.1.1:
   version "5.1.1"
   resolved "http://39.108.216.210:9000/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
@@ -1804,6 +1876,14 @@ follow-redirects@^1.15.4:
   resolved "http://39.108.216.210:9000/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020"
   integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==
 
+foreground-child@^3.1.0:
+  version "3.1.1"
+  resolved "http://39.108.216.210:9000/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
+  integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+  dependencies:
+    cross-spawn "^7.0.0"
+    signal-exit "^4.0.1"
+
 form-data@^4.0.0:
   version "4.0.0"
   resolved "http://39.108.216.210:9000/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
@@ -1847,6 +1927,17 @@ glob-parent@^6.0.2:
   dependencies:
     is-glob "^4.0.3"
 
+glob@^10.0.0:
+  version "10.3.10"
+  resolved "http://39.108.216.210:9000/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
+  integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
+  dependencies:
+    foreground-child "^3.1.0"
+    jackspeak "^2.3.5"
+    minimatch "^9.0.1"
+    minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+    path-scurry "^1.10.1"
+
 glob@^7.1.3:
   version "7.2.3"
   resolved "http://39.108.216.210:9000/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
@@ -1859,17 +1950,6 @@ glob@^7.1.3:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-glob@^8.0.0:
-  version "8.1.0"
-  resolved "http://39.108.216.210:9000/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
-  integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^5.0.1"
-    once "^1.3.0"
-
 globals@^11.1.0:
   version "11.12.0"
   resolved "http://39.108.216.210:9000/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
@@ -1921,16 +2001,21 @@ has-flag@^4.0.0:
   resolved "http://39.108.216.210:9000/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
   integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
 
-hc-vue3-ui@^3.1.8:
-  version "3.1.8"
-  resolved "http://39.108.216.210:9000/hc-vue3-ui/-/hc-vue3-ui-3.1.8.tgz#07cd8c4656887ee94e3db07af6e895299fcce300"
-  integrity sha512-JUIMn4jlkaxcg2xEFp6Kq//Pe1IgUyebIAWHYMH+R6xLbUmCm1vWTtcmVy7/HzKVd0QLGWjpxHwNBcvW95VVGA==
+hc-vue3-ui@^3.1.9:
+  version "3.1.9"
+  resolved "http://39.108.216.210:9000/hc-vue3-ui/-/hc-vue3-ui-3.1.9.tgz#b7d9f6d664f84ddba4fa9aa6e77d388555b5227c"
+  integrity sha512-IZhDgk1pUsYEO5wUQ+c65DDLqhiImdK5IaMAjNifsrvu3ZlyZAQy/l5BDj+ValkguSsQOMiLzgcWRTnFFetxFw==
 
 human-signals@^2.1.0:
   version "2.1.0"
   resolved "http://39.108.216.210:9000/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
   integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
 
+ieee754@^1.2.1:
+  version "1.2.1"
+  resolved "http://39.108.216.210:9000/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
 ignore@^5.2.0:
   version "5.3.1"
   resolved "http://39.108.216.210:9000/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
@@ -1979,6 +2064,11 @@ is-extglob@^2.1.1:
   resolved "http://39.108.216.210:9000/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
   integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
 
+is-fullwidth-code-point@^3.0.0:
+  version "3.0.0"
+  resolved "http://39.108.216.210:9000/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
 is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
   version "4.0.3"
   resolved "http://39.108.216.210:9000/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
@@ -2011,6 +2101,15 @@ isexe@^2.0.0:
   resolved "http://39.108.216.210:9000/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
   integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
 
+jackspeak@^2.3.5:
+  version "2.3.6"
+  resolved "http://39.108.216.210:9000/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
+  integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
+  dependencies:
+    "@isaacs/cliui" "^8.0.2"
+  optionalDependencies:
+    "@pkgjs/parseargs" "^0.11.0"
+
 jiti@^1.20.0:
   version "1.21.0"
   resolved "http://39.108.216.210:9000/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d"
@@ -2149,6 +2248,11 @@ lru-cache@^6.0.0:
   dependencies:
     yallist "^4.0.0"
 
+"lru-cache@^9.1.1 || ^10.0.0":
+  version "10.2.0"
+  resolved "http://39.108.216.210:9000/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3"
+  integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==
+
 magic-string@^0.30.6, magic-string@^0.30.7:
   version "0.30.7"
   resolved "http://39.108.216.210:9000/magic-string/-/magic-string-0.30.7.tgz#0cecd0527d473298679da95a2d7aeb8c64048505"
@@ -2201,7 +2305,7 @@ mimic-fn@^2.1.0:
   resolved "http://39.108.216.210:9000/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
   integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
 
-minimatch@9.0.3:
+minimatch@9.0.3, minimatch@^9.0.1:
   version "9.0.3"
   resolved "http://39.108.216.210:9000/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
   integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
@@ -2215,13 +2319,18 @@ minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
   dependencies:
     brace-expansion "^1.1.7"
 
-minimatch@^5.0.1, minimatch@^5.1.0:
+minimatch@^5.1.0:
   version "5.1.6"
   resolved "http://39.108.216.210:9000/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
   integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
   dependencies:
     brace-expansion "^2.0.1"
 
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
+  version "7.0.4"
+  resolved "http://39.108.216.210:9000/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
+  integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
+
 mlly@^1.2.0, mlly@^1.4.2, mlly@^1.5.0:
   version "1.6.1"
   resolved "http://39.108.216.210:9000/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f"
@@ -2362,6 +2471,14 @@ path-key@^3.0.0, path-key@^3.1.0:
   resolved "http://39.108.216.210:9000/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
   integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
 
+path-scurry@^1.10.1:
+  version "1.10.1"
+  resolved "http://39.108.216.210:9000/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
+  integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
+  dependencies:
+    lru-cache "^9.1.1 || ^10.0.0"
+    minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
 path-type@^4.0.0:
   version "4.0.0"
   resolved "http://39.108.216.210:9000/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
@@ -2431,6 +2548,11 @@ process-nextick-args@~2.0.0:
   resolved "http://39.108.216.210:9000/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
   integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
 
+process@^0.11.10:
+  version "0.11.10"
+  resolved "http://39.108.216.210:9000/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+  integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
+
 proxy-from-env@^1.1.0:
   version "1.1.0"
   resolved "http://39.108.216.210:9000/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
@@ -2473,6 +2595,17 @@ readable-stream@^3.4.0, readable-stream@^3.6.0:
     string_decoder "^1.1.1"
     util-deprecate "^1.0.1"
 
+readable-stream@^4.0.0:
+  version "4.5.2"
+  resolved "http://39.108.216.210:9000/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09"
+  integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==
+  dependencies:
+    abort-controller "^3.0.0"
+    buffer "^6.0.3"
+    events "^3.3.0"
+    process "^0.11.10"
+    string_decoder "^1.3.0"
+
 readdir-glob@^1.1.2:
   version "1.1.3"
   resolved "http://39.108.216.210:9000/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584"
@@ -2581,6 +2714,11 @@ signal-exit@^3.0.3:
   resolved "http://39.108.216.210:9000/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
   integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
 
+signal-exit@^4.0.1:
+  version "4.1.0"
+  resolved "http://39.108.216.210:9000/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
+  integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
 sirv@^2.0.4:
   version "2.0.4"
   resolved "http://39.108.216.210:9000/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0"
@@ -2615,7 +2753,25 @@ streamx@^2.15.0:
   optionalDependencies:
     bare-events "^2.2.0"
 
-string_decoder@^1.1.1:
+"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0:
+  version "4.2.3"
+  resolved "http://39.108.216.210:9000/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
+string-width@^5.0.1, string-width@^5.1.2:
+  version "5.1.2"
+  resolved "http://39.108.216.210:9000/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+  integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+  dependencies:
+    eastasianwidth "^0.2.0"
+    emoji-regex "^9.2.2"
+    strip-ansi "^7.0.1"
+
+string_decoder@^1.1.1, string_decoder@^1.3.0:
   version "1.3.0"
   resolved "http://39.108.216.210:9000/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
   integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
@@ -2629,13 +2785,20 @@ string_decoder@~1.1.1:
   dependencies:
     safe-buffer "~5.1.0"
 
-strip-ansi@^6.0.1:
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
   version "6.0.1"
   resolved "http://39.108.216.210:9000/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
   integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
   dependencies:
     ansi-regex "^5.0.1"
 
+strip-ansi@^7.0.1:
+  version "7.1.0"
+  resolved "http://39.108.216.210:9000/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+  integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+  dependencies:
+    ansi-regex "^6.0.1"
+
 strip-final-newline@^2.0.0:
   version "2.0.0"
   resolved "http://39.108.216.210:9000/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
@@ -2835,16 +2998,16 @@ vue-router@^4.3.0:
   dependencies:
     "@vue/devtools-api" "^6.5.1"
 
-vue@3.4.20:
-  version "3.4.20"
-  resolved "http://39.108.216.210:9000/vue/-/vue-3.4.20.tgz#1d08d3ea8c5c294c15cd61aee2b78dc5f621ff7f"
-  integrity sha512-xF4zDKXp67NjgORFX/HOuaiaKYjgxkaToK0KWglFQEYlCw9AqgBlj1yu5xa6YaRek47w2IGiuvpvrGg/XuQFCw==
+vue@3.4.21:
+  version "3.4.21"
+  resolved "http://39.108.216.210:9000/vue/-/vue-3.4.21.tgz#69ec30e267d358ee3a0ce16612ba89e00aaeb731"
+  integrity sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==
   dependencies:
-    "@vue/compiler-dom" "3.4.20"
-    "@vue/compiler-sfc" "3.4.20"
-    "@vue/runtime-dom" "3.4.20"
-    "@vue/server-renderer" "3.4.20"
-    "@vue/shared" "3.4.20"
+    "@vue/compiler-dom" "3.4.21"
+    "@vue/compiler-sfc" "3.4.21"
+    "@vue/runtime-dom" "3.4.21"
+    "@vue/server-renderer" "3.4.21"
+    "@vue/shared" "3.4.21"
 
 vuedraggable@^4.1.0:
   version "4.1.0"
@@ -2860,6 +3023,24 @@ which@^2.0.1:
   dependencies:
     isexe "^2.0.0"
 
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
+  version "7.0.0"
+  resolved "http://39.108.216.210:9000/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+  dependencies:
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
+
+wrap-ansi@^8.1.0:
+  version "8.1.0"
+  resolved "http://39.108.216.210:9000/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+  integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+  dependencies:
+    ansi-styles "^6.1.0"
+    string-width "^5.0.1"
+    strip-ansi "^7.0.1"
+
 wrappy@1:
   version "1.0.2"
   resolved "http://39.108.216.210:9000/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -2885,14 +3066,14 @@ yocto-queue@^0.1.0:
   resolved "http://39.108.216.210:9000/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
   integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
 
-zip-stream@^5.0.1:
-  version "5.0.2"
-  resolved "http://39.108.216.210:9000/zip-stream/-/zip-stream-5.0.2.tgz#77b1dce7af291482d368a9203c9029f4eb52e12e"
-  integrity sha512-LfOdrUvPB8ZoXtvOBz6DlNClfvi//b5d56mSWyJi7XbH/HfhOHfUhOqxhT/rUiR7yiktlunqRo+jY6y/cWC/5g==
+zip-stream@^6.0.0:
+  version "6.0.0"
+  resolved "http://39.108.216.210:9000/zip-stream/-/zip-stream-6.0.0.tgz#b2514478a5f37b63c823bb5c3ba0f19b20e5d98b"
+  integrity sha512-X0WFquRRDtL9HR9hc1OrabOP/VKJEX7gAr2geayt3b7dLgXgSXI6ucC4CphLQP/aQt2GyHIYgmXxtC+dVdghAQ==
   dependencies:
-    archiver-utils "^4.0.1"
-    compress-commons "^5.0.1"
-    readable-stream "^3.6.0"
+    archiver-utils "^5.0.0"
+    compress-commons "^6.0.0"
+    readable-stream "^4.0.0"
 
 zrender@5.5.0:
   version "5.5.0"