ZaiZai 1 жил өмнө
parent
commit
11c47d69de

+ 9 - 9
package.json

@@ -17,11 +17,11 @@
         "crypto-js": "^4.1.1",
         "dayjs": "^1.11.9",
         "echarts": "^5.4.2",
-        "element-plus": "^2.3.7",
-        "hc-vue3-ui": "^1.6.0",
+        "element-plus": "^2.3.8",
+        "hc-vue3-ui": "^1.7.6",
         "js-base64": "^3.7.5",
         "js-cookie": "^3.0.5",
-        "js-fast-way": "^0.2.1",
+        "js-fast-way": "^0.2.5",
         "js-md5": "^0.7.3",
         "js-web-screen-shot": "^1.9.8",
         "nprogress": "^0.2.0",
@@ -30,7 +30,7 @@
         "sortablejs": "^1.15.0",
         "split.js": "^1.6.5",
         "vue": "^3.3.4",
-        "vue-router": "^4.2.3",
+        "vue-router": "^4.2.4",
         "vuedraggable": "^4.1.0"
     },
     "devDependencies": {
@@ -40,12 +40,12 @@
         "archiver": "^5.3.1",
         "autoprefixer": "^10.4.14",
         "cssnano": "^6.0.1",
-        "eslint": "^8.44.0",
+        "eslint": "^8.45.0",
         "eslint-plugin-vue": "^9.15.1",
         "mitt": "^3.0.1",
-        "postcss": "^8.4.24",
-        "sass": "^1.63.6",
-        "tailwindcss": "3.3.2",
-        "vite": "^4.3.9"
+        "postcss": "^8.4.27",
+        "sass": "^1.64.1",
+        "tailwindcss": "3.3.3",
+        "vite": "^4.4.6"
     }
 }

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
public/plugins/element-plus/index.css


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
public/plugins/element-plus/theme-chalk/el-checkbox.css


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
public/plugins/element-plus/theme-chalk/el-form.css


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
public/plugins/element-plus/theme-chalk/el-input.css


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
public/plugins/element-plus/theme-chalk/el-table.css


+ 1 - 1
public/plugins/element-plus/theme-chalk/el-tree-select.css

@@ -1 +1 @@
-.el-tree-select{--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree-select__popper .el-tree-node__expand-icon{margin-left:8px}.el-tree-select__popper .el-tree-node.is-checked>.el-tree-node__content .el-select-dropdown__item.selected::after{content:none}.el-tree-select__popper .el-select-dropdown__item{flex:1;background:0 0!important;padding-left:0;height:20px;line-height:20px}
+.el-tree-select{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree-select__popper .el-tree-node__expand-icon{margin-left:8px}.el-tree-select__popper .el-tree-node.is-checked>.el-tree-node__content .el-select-dropdown__item.selected::after{content:none}.el-tree-select__popper .el-select-dropdown__item{flex:1;background:0 0!important;padding-left:0;height:20px;line-height:20px}

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
public/plugins/element-plus/theme-chalk/el-tree.css


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
public/plugins/element-plus/theme-chalk/index.css


+ 1 - 1
public/plugins/element-plus/theme-chalk/src/checkbox-button.scss

@@ -26,7 +26,7 @@
       map.get($button, 'bg-color')
     );
     border: getCssVar('border');
-    border-left-color:transparent;
+    border-left-color: transparent;
     color: var(
       #{getCssVarName('button-text-color')},
       map.get($button, 'text-color')

+ 6 - 2
public/plugins/element-plus/theme-chalk/src/checkbox.scss

@@ -49,7 +49,10 @@ $checkbox-bordered-input-width: map.merge(
   white-space: nowrap;
   user-select: none;
   margin-right: 30px;
-  height: map.get($checkbox-height, 'default');
+  height: getCssVarWithDefault(
+    'checkbox-height',
+    map.get($checkbox-height, 'default')
+  );
 
   @include when(disabled) {
     cursor: not-allowed;
@@ -167,6 +170,7 @@ $checkbox-bordered-input-width: map.merge(
 
         &::after {
           transform: rotate(45deg) scaleY(1);
+          border-color: getCssVar('checkbox-checked-icon-color');
         }
       }
 
@@ -226,7 +230,7 @@ $checkbox-bordered-input-width: map.merge(
     &::after {
       box-sizing: content-box;
       content: '';
-      border: 1px solid getCssVar('checkbox-checked-icon-color');
+      border: 1px solid transparent;
       border-left: 0;
       border-top: 0;
       height: 7px;

+ 1 - 0
public/plugins/element-plus/theme-chalk/src/common/var.scss

@@ -950,6 +950,7 @@ $text-font-size: map.merge(
 $tree: () !default;
 $tree: map.merge(
   (
+    'node-content-height': 26px,
     'node-hover-bg-color': getCssVar('fill-color', 'light'),
     'text-color': getCssVar('text-color-regular'),
     'expand-icon-color': getCssVar('text-color-placeholder'),

+ 0 - 7
public/plugins/element-plus/theme-chalk/src/form.scss

@@ -91,13 +91,6 @@ $form-item-label-top-margin-bottom: map.merge(
         display: block;
       }
     }
-
-    .#{$namespace}-input {
-      @include set-css-var-value(
-        'input-width',
-        getCssVar('form-inline-content-width')
-      );
-    }
   }
 
   @each $size in (large, default, small) {

+ 1 - 0
public/plugins/element-plus/theme-chalk/src/input.scss

@@ -180,6 +180,7 @@
       'input-border-radius',
       map.get($input, 'border-radius')
     );
+    cursor: text;
     transition: getCssVar('transition-box-shadow');
     transform: translate3d(0, 0, 0);
     @include inset-input-border(

+ 4 - 1
public/plugins/element-plus/theme-chalk/src/table.scss

@@ -123,7 +123,10 @@
 
   thead {
     color: getCssVar('table-header-text-color');
-    font-weight: 500;
+
+    th {
+      font-weight: 600;
+    }
 
     &.is-group {
       th.#{$namespace}-table__cell {

+ 3 - 1
public/plugins/element-plus/theme-chalk/src/tree.scss

@@ -58,9 +58,11 @@
   }
 
   @include e(content) {
+    @include css-var-from-global('checkbox-height', 'tree-node-content-height');
+
     display: flex;
     align-items: center;
-    height: 26px;
+    height: getCssVar('tree-node-content-height');
     cursor: pointer;
 
     & > .#{$namespace}-tree-node__expand-icon {

+ 0 - 0
public/plugins/element-plus/v2.3.7 → public/plugins/element-plus/v2.3.8


+ 1 - 1
public/version.json

@@ -1,3 +1,3 @@
 {
-  "value": "20230707170601"
+  "value": "20230720180517"
 }

+ 62 - 57
src/components/dialog/SortNodeDialog.vue

@@ -1,29 +1,33 @@
 <template>
-    <!--调整节点排序-->
-    <HcDialog :show="nodeSortModel" title="调整排序" widths="980px" isTable isRowFooter @close="nodeSortModalClose">
-        <el-alert title="可拖动排序,也可在后面点击图标,切换排序" type="warning" :closable="false"/>
+    <!-- 调整节点排序 -->
+    <HcDialog :show="nodeSortModel" title="调整排序" widths="80vw" is-table is-row-footer @close="nodeSortModalClose">
+        <el-alert title="可拖动排序,也可在后面点击图标,切换排序" type="warning" :closable="false" />
         <div class="hc-table-h">
-            <HcTable ui="hc-table-row-drop" :column="nodeSortTableColumn" :datas="nodeSortTableData" :loading="nodeSortTableLoading" isRowDrop @row-drop="nodeSortTableRowDrop">
-                <template #key2="{row}">
-                    <span class="text-link">{{row?.key2}}</span>
+            <HcTable
+                ui="hc-table-row-drop" is-row-drop quick-sort
+                :column="nodeSortTableColumn" :datas="nodeSortTableData" :loading="nodeSortTableLoading"
+                @row-drop="nodeSortTableRowDrop" @row-sort="nodeSortTableRowDrop"
+            >
+                <template #key2="{ row }">
+                    <span class="text-link">{{ row?.key2 }}</span>
                 </template>
-                <template #action="{index}">
-                <span class="text-link text-xl" @click="nodeUpSortClick(index)">
-                    <HcIcon name="arrow-up" fill/>
-                </span>
+                <template #action="{ index }">
+                    <span class="text-link text-xl" @click="nodeUpSortClick(index)">
+                        <HcIcon name="arrow-up" fill />
+                    </span>
                     <span class="text-link text-xl ml-2" @click="nodeDownSortClick(index)">
-                    <HcIcon name="arrow-down" fill/>
-                </span>
+                        <HcIcon name="arrow-down" fill />
+                    </span>
                 </template>
             </HcTable>
         </div>
         <template #rightRowFooter>
             <el-button hc-btn @click="nodeSortModalClose">
-                <HcIcon name="close"/>
+                <HcIcon name="close" />
                 <span>取消</span>
             </el-button>
             <el-button type="primary" hc-btn :loading="nodeSortModalLoading" @click="nodeSortModalSave">
-                <HcIcon name="check"/>
+                <HcIcon name="check" />
                 <span>确认</span>
             </el-button>
         </template>
@@ -31,33 +35,35 @@
 </template>
 
 <script setup>
-import {ref, watch, onMounted,nextTick,toRefs,computed } from "vue";
-import {submitArchiveTreeSort} from "~api/other";
+import { nextTick, ref, toRefs, watch } from 'vue'
+import { submitArchiveTreeSort } from '~api/other'
 
 //参数
 const props = defineProps({
     projectId: {
-        type: [String,Number],
-        default: ''
+        type: [String, Number],
+        default: '',
     },
     contractId: {
-        type: [String,Number],
-        default: ''
+        type: [String, Number],
+        default: '',
     },
     node: {
         type: Object,
-        default: () => ({})
+        default: () => ({}),
     },
     show:{
       type:Boolean,
-      default:false
+      default:false,
     },
 })
 
-const projectId = ref(props.projectId);
-const contractId = ref(props.contractId);
+//事件
+const emit = defineEmits(['hide'])
+const projectId = ref(props.projectId)
+const contractId = ref(props.contractId)
 // 使用toRefs结构,使其具有响应式
-const {node} = toRefs(props);
+const { node } = toRefs(props)
 
 //监听
 watch(() => [
@@ -68,23 +74,19 @@ watch(() => [
     contractId.value = UserContractId
 })
 
-watch(() => [props.show],([newShow])=>{
-    //console.log(newShow,newType)
-    if(newShow){
+watch(() => [props.show], ([newShow])=>{
+    if (newShow) {
       sortNodeMoadl()
-    }else{
-      nodeSortModalClose();
+    } else {
+      nodeSortModalClose()
     }
-});
-
-//事件
-const emit = defineEmits(['hide'])
+})
 
 //节点排序
 const nodeSortModel = ref(false)
 const nodeSortTableColumn = ref([
-    {key:'title', name: '节点名称'},
-    {key:'action', name: '排序', width: 90},
+    { key:'title', name: '节点名称' },
+    { key:'action', name: '排序', width: 90 },
 ])
 const nodeSortTableData = ref([])
 const nodeSortTableLoading = ref(false)
@@ -93,19 +95,23 @@ const nodeSortModalLoading = ref(false)
 
 const nodeSortModalClose = () =>{
     emit('hide', {})
-    nodeSortModel.value = false;
+    nodeSortModel.value = false
 }
 
 const nodeSortTableRowDrop = (rows)=>{
-    nodeSortTableData.value = rows
+    nodeSortTableData.value = [] // 先清空,否则排序会异常
+    nextTick(() => {
+        nodeSortTableData.value = rows
+    })
 }
+
 //向下
 const nodeDownSortClick = (index) => {
     const indexs = index + 1
     const data = nodeSortTableData.value
-    if(indexs !== data.length) {
-        const tmp = data.splice(indexs,1);
-        nodeSortTableData.value.splice(index,0,tmp[0]);
+    if (indexs !== data.length) {
+        const tmp = data.splice(indexs, 1)
+        nodeSortTableData.value.splice(index, 0, tmp[0])
     } else {
         window?.$message?.warning('已经处于置底,无法下移')
     }
@@ -114,35 +120,34 @@ const nodeDownSortClick = (index) => {
 //向上
 const nodeUpSortClick = (index) => {
     const data = nodeSortTableData.value || []
-    if(index !== 0) {
-        const tmp = data.splice(index - 1,1);
-        nodeSortTableData.value.splice(index,0,tmp[0]);
+    if (index !== 0) {
+        const tmp = data.splice(index - 1, 1)
+        nodeSortTableData.value.splice(index, 0, tmp[0])
     } else {
         window?.$message?.warning('已经处于置顶,无法上移')
     }
 }
 
 const sortNodeMoadl = ()=>{
-    nodeSortModel.value = true;
-    //console.log(node)
-    let list = [];
-    if(node.value.parent){
+    nodeSortModel.value = true
+    let list = []
+    if (node.value.parent) {
         node.value.parent.childNodes.forEach((element)=>{
             list.push(element.data)
         })
     }
-    nodeSortTableData.value = list;
+    nodeSortTableData.value = list
 }
 
-const nodeSortModalSave = async()=>{
-    nodeSortModalLoading.value = true;
-    const {code,data} = await submitArchiveTreeSort({"listSort":nodeSortTableData.value})
-    //console.log(res);
-    nodeSortModalLoading.value = false;
-    if (code == 200) {
+const nodeSortModalSave = async ()=>{
+    nodeSortModalLoading.value = true
+    const { code } = await submitArchiveTreeSort({
+        listSort:nodeSortTableData.value,
+    })
+    nodeSortModalLoading.value = false
+    if (code === 200) {
         window.$message?.success('修改成功')
-        window?.location?.reload()  //刷新页面
+        window?.location?.reload() //刷新页面
     }
-
 }
 </script>

+ 161 - 163
src/components/tree/hc-tree.vue

@@ -1,119 +1,122 @@
 <template>
-
-          <el-radio-group v-model="radioKeys" @change="treeRadioChange">
-            <ElTree class="hc-tree-node tree-line  el-radio-group" :class="ui" ref="ElTreeRef" :props="ElTreeProps" :load="ElTreeLoadNode" lazy highlight-current accordion node-key="id"
-                    :default-expanded-keys="defaultExpandedCids" @node-click="ElTreeClick" @node-contextmenu="ElTreeLabelContextMenu2" :indent="0" >
-                <template #default="{ node, data }">
-                    <div class="data-custom-tree-node" :id="`${idPrefix}${data['id']}`">
-                        <!--树组件,节点名称-->
-                        <div class="label level-name" v-if="node.level === 1" >
-                           <span> {{ node.label }}</span>
-                        </div>
-                        <div class="label" v-else>
-                            <el-radio class="size-xl" :label="data['id']" @click.stop="clickRadio(data)" v-if="isRadio && showRadioFun(data)">{{ node.label }}</el-radio>
-                            <span v-else>{{ node.label }}</span>
-                        </div>
-                         <div class="text-blue submit-counts" v-if="data.hasChildren">【{{ data.treeNumber ?? 0 }}】</div>
-                        <!--没有传入菜单使用默认的-->
-                        <div class="menu-icon1" :class="node.showTreeMenu?'show':''" v-if="isShowMenu">
-                            <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="ElTreeLabelContextMenu2($event,data,node)">
-                                <HcIcon name="apps" ui="text-2xl"/>
-                            </div>
+    <el-radio-group v-model="radioKeys" @change="treeRadioChange">
+        <ElTree
+            ref="ElTreeRef" class="hc-tree-node tree-line  el-radio-group" :class="ui" :props="ElTreeProps" :load="ElTreeLoadNode" lazy highlight-current accordion node-key="id"
+            :default-expanded-keys="defaultExpandedCids" :indent="0" @node-click="ElTreeClick" @node-contextmenu="ElTreeLabelContextMenu2"
+        >
+            <template #default="{ node, data }">
+                <div :id="`${idPrefix}${data.id}`" class="data-custom-tree-node">
+                    <!-- 树组件,节点名称 -->
+                    <div v-if="node.level === 1" class="label level-name">
+                        <span> {{ node.label }}</span>
+                    </div>
+                    <div v-else class="label">
+                        <el-radio v-if="isRadio && showRadioFun(data)" class="size-xl" :label="data.id" @click.stop="clickRadio(data)">
+                            {{ node.label }}
+                        </el-radio>
+                        <span v-else>{{ node.label }}</span>
+                    </div>
+                    <div v-if="data.hasChildren" class="text-blue submit-counts">
+                        【{{ data.treeNumber ?? 0 }}】
+                    </div>
+                    <!-- 没有传入菜单使用默认的 -->
+                    <div v-if="isShowMenu" class="menu-icon1" :class="node.showTreeMenu ? 'show' : ''">
+                        <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="ElTreeLabelContextMenu2($event, data, node)">
+                            <HcIcon name="apps" ui="text-2xl" />
                         </div>
-               
                     </div>
-                </template>
-            </ElTree>
-          </el-radio-group>
-
-
-
-
-    <!--右键菜单-->
-    <HcContextMenu ref="contextMenuRef" :datas="menusData" @item-click="handleMenuSelect" v-if="menusData.length > 0" @closed="handleMenuClosed">
-        <template #sort="{item}">
-            <HcIcon :name="item.icon" :line="false" class="menu-item-icon"/>
-            <span class="menu-item-name">{{item.label}}</span>
+                </div>
+            </template>
+        </ElTree>
+    </el-radio-group>
+
+    <!-- 右键菜单 -->
+    <HcContextMenu v-if="menusData.length > 0" ref="contextMenuRef" :datas="menusData" @item-click="handleMenuSelect" @closed="handleMenuClosed">
+        <template #sort="{ item }">
+            <HcIcon :name="item.icon" :line="false" class="menu-item-icon" />
+            <span class="menu-item-name">{{ item.label }}</span>
         </template>
     </HcContextMenu>
 
-    <!--没有传入菜单使用默认的-->
-    <HcContextMenu ref="contextMenuRef2" :datas="ElTreeMenu" @item-click="ElTreeMenuClick" v-if="menusData.length < 1" @closed="handleMenuClosed">
-        <template #sort="{item}">
-            <HcIcon :name="item.icon" :line="false" class="menu-item-icon"/>
-            <span class="menu-item-name">{{item.label}}</span>
+    <!-- 没有传入菜单使用默认的 -->
+    <HcContextMenu v-if="menusData.length < 1" ref="contextMenuRef2" :datas="ElTreeMenu" @item-click="ElTreeMenuClick" @closed="handleMenuClosed">
+        <template #sort="{ item }">
+            <HcIcon :name="item.icon" :line="false" class="menu-item-icon" />
+            <span class="menu-item-name">{{ item.label }}</span>
         </template>
     </HcContextMenu>
 
-    <EditNodeDialog :projectId="projectId" :node="nodeItemInfo" :show="editDialogShow" :type="editDialogType" @hide="dialogHide"></EditNodeDialog>
+    <EditNodeDialog :project-id="projectId" :node="nodeItemInfo" :show="editDialogShow" :type="editDialogType" @hide="dialogHide" />
 
-    <SortNodeDialog :node="nodeItemInfo" :show="sortDialogShow" @hide="sortDialogHide"></SortNodeDialog>
+    <SortNodeDialog :node="nodeItemInfo" :show="sortDialogShow" @hide="sortDialogHide" />
 </template>
 
 <script setup>
-import {ref,nextTick,watch} from "vue";
-import {remove,syncProjectTree} from "~api/other";
-import {getArchiveTreeLazyTree,initTree} from '~api/other';
-import {isArrItem, getArrValue, getObjValue, isNullES} from "js-fast-way"
-import EditNodeDialog from "~src/components/dialog/EditNodeDialog.vue"
-import SortNodeDialog from "~src/components/dialog/SortNodeDialog.vue"
-import {delMessage} from "~uti/tools";
+import { nextTick, ref, watch } from 'vue'
+import { remove, syncProjectTree } from '~api/other'
+import { getArchiveTreeLazyTree, initTree } from '~api/other'
+import { getArrValue, getObjValue, isArrItem, isNullES } from 'js-fast-way'
+import EditNodeDialog from '~src/components/dialog/EditNodeDialog.vue'
+import SortNodeDialog from '~src/components/dialog/SortNodeDialog.vue'
+import { delMessage } from '~uti/tools'
 
 //参数
 const props = defineProps({
     ui: {
         type: String,
-        default: ''
+        default: '',
     },
     menus: {
         type: Array,
-        default: () => ([])
+        default: () => ([]),
     },
     projectId: {
-        type: [String,Number],
-        default: ''
+        type: [String, Number],
+        default: '',
     },
     contractId: {
-        type: [String,Number],
-        default: ''
+        type: [String, Number],
+        default: '',
     },
     autoExpandKeys: {
         type: Array,
-        default: () => ([])
+        default: () => ([]),
     },
     idPrefix: {
         type: String,
-        default: 'hc-tree-'
+        default: 'hc-tree-',
     },
     isAutoKeys: {
         type: Boolean,
-        default: true
+        default: true,
     },
     isAutoClick: {
         type: Boolean,
-        default: true
+        default: true,
     },
     isRadio: {
         type: Boolean,
-        default: false
+        default: false,
     },
     radioKey: {
         type: String,
-        default: ''
+        default: '',
     },
     showRadioFun:{
         type:Function,
         default() {
-            return true;
-        }
+            return true
+        },
     },
     isShowMenu:{
         type:Boolean,
-        default:true//是否显示默认菜单
+        default:true, //是否显示默认菜单
     },
-  
+
 })
 
+//事件
+const emit = defineEmits(['menuTap', 'nodeTap', 'nodeLoading', 'radioChange', 'noderadio'])
 //变量
 const ElTreeRef = ref(null)
 const treeRefNode = ref(null)
@@ -121,15 +124,15 @@ const treeRefData = ref(null)
 const ElTreeProps = ref({
     label: 'title',
     children: 'children',
-    isLeaf: 'isLeaf'
+    isLeaf: 'isLeaf',
 })
 const menusData = ref(props.menus)
 const isAutoKeys = ref(props.isAutoKeys)
 const TreeExpandKey = ref(props.autoExpandKeys)
-const projectId = ref(props.projectId);
-const contractId = ref(props.contractId);
-const idPrefix = ref(props.idPrefix);
-const radioKeys = ref(Number(props.radioKey));
+const projectId = ref(props.projectId)
+const contractId = ref(props.contractId)
+const idPrefix = ref(props.idPrefix)
+const radioKeys = ref(Number(props.radioKey))
 
 //监听
 watch(() => [
@@ -140,7 +143,7 @@ watch(() => [
     props.contractId,
     props.idPrefix,
     props.radioKey,
-    
+
 ], ([menus, AutoKeys, expandKeys, UserProjectId, UserContractId, UserIdPrefix, radioKey]) => {
     menusData.value = menus
     isAutoKeys.value = AutoKeys
@@ -151,9 +154,6 @@ watch(() => [
     radioKeys.value = Number(radioKey)
 })
 
-//事件
-const emit = defineEmits(['menuTap','nodeTap', 'nodeLoading', 'radioChange','noderadio'])
-
 //单选框事件
 const treeRadioChange = (val) => {
     emit('radioChange', val)
@@ -162,26 +162,26 @@ const treeRadioChange = (val) => {
 //树形结构异步加载数据
 const defaultExpandedCids = ref([])
 const ElTreeLoadNode = async (node, resolve) => {
-    let parentId = 0;
+    let parentId = 0
     if (node.level !== 0) {
-        const nodeData = getObjValue(node?.data);
+        const nodeData = getObjValue(node?.data)
         parentId = nodeData?.id || ''
     }
     //获取数据
-    const {error, code, data} = await getArchiveTreeLazyTree({
+    const { error, code, data } = await getArchiveTreeLazyTree({
         parentId,
         projectId:projectId.value,
-        contractId:contractId.value
+        contractId:contractId.value,
     })
     //处理数据
     if (!error && code === 200) {
-        let clickKey = '', defaultExpandedArr = [];
+        let clickKey = '', defaultExpandedArr = []
         const keys = TreeExpandKey.value || []
         let resData = getArrValue(data)
 
         //如果是加载第一层,而且返回为空,先初始化树
-        if(parentId === 0 && resData.length === 0){
-            const {error:error2, code:code2, data:data2} = await initTree({
+        if (parentId === 0 && resData.length === 0) {
+            const { error:error2, code:code2, data:data2 } = await initTree({
                 projectId:projectId.value,
             })
             if (!error2 && code2 === 200) {
@@ -190,14 +190,14 @@ const ElTreeLoadNode = async (node, resolve) => {
         }
 
         for (let i = 0; i < resData.length; i++) {
-            const item = resData[i];
+            const item = resData[i]
             resData[i].isLeaf = !item.hasChildren
         }
         if (keys.length > 0) {
-            let lastKey = keys[keys.length-1];
+            let lastKey = keys[keys.length - 1]
             for (const item of resData) {
                 //自动展开
-                if (isArrItem(keys,item?.id)) {
+                if (isArrItem(keys, item?.id)) {
                     defaultExpandedArr.push(item?.id)
                 }
                 //最后一个,选中点击
@@ -229,14 +229,14 @@ const ElTreeLoadNode = async (node, resolve) => {
 }
 
 //节点被点击
-const ElTreeClick = async (data,node) => {
+const ElTreeClick = async (data, node) => {
     if (isAutoKeys.value) {
         let autoKeysArr = []
         await getNodeExpandKeys(node, autoKeysArr)
         const autoKeys = autoKeysArr.reverse()
-        emit('nodeTap', {node, data, keys: autoKeys})
+        emit('nodeTap', { node, data, keys: autoKeys })
     } else {
-        emit('nodeTap', {node, data, keys: []})
+        emit('nodeTap', { node, data, keys: [] })
     }
 }
 
@@ -252,33 +252,33 @@ const getNodeExpandKeys = async (node, newKeys) => {
 
 //鼠标右键事件
 const contextMenuRef = ref(null)
-const ElTreeLabelContextMenu = (e,data,node) => {
+const ElTreeLabelContextMenu = (e, data, node) => {
 
-    const rows = menusData.value || [];
+    const rows = menusData.value || []
     if (node.level !== 1 && rows.length > 0) {
-        e.preventDefault();
-        treeRefNode.value = node;
-        treeRefData.value = data;
+        e.preventDefault()
+        treeRefNode.value = node
+        treeRefData.value = data
         node.showTreeMenu = true
         //展开菜单
         contextMenuRef.value?.showMenu(e)
     }
 }
 //单选
-const clickRadio=(data)=>{
-    console.log(data,'data111');
-    
-    emit('noderadio', {data})
+const clickRadio = (data)=>{
+    console.log(data, 'data111')
+
+    emit('noderadio', { data })
 }
 //鼠标右键菜单被点击
-const handleMenuSelect = ({key}) => {
-    const node = treeRefNode.value;
-    const data = treeRefData.value;
-    emit('menuTap', {key, node, data})
+const handleMenuSelect = ({ key }) => {
+    const node = treeRefNode.value
+    const data = treeRefData.value
+    emit('menuTap', { key, node, data })
 }
 
 const handleMenuClosed = () => {
-    const node = treeRefNode.value;
+    const node = treeRefNode.value
     if (!isNullES(node)) {
         treeRefNode.value['showTreeMenu'] = false
     }
@@ -295,31 +295,31 @@ const removeElTreeNode = (key) => {
 
 //鼠标右键事件2
 const contextMenuRef2 = ref(null)
-const ElTreeLabelContextMenu2 = (e,data,node) => {
+const ElTreeLabelContextMenu2 = (e, data, node) => {
 
-    let rows = ElTreeMenu.value || [];
-    if(node.level==1){
-        rows=ElTreeMenu.value.filter((item)=>{
-            if(item.key!=='sort'){
+    let rows = ElTreeMenu.value || []
+    if (node.level == 1) {
+        rows = ElTreeMenu.value.filter((item)=>{
+            if (item.key !== 'sort') {
                 return rows
             }
         })
-        ElTreeMenu.value=rows
-        console.log(rows,'row');
-    }else{
-        ElTreeMenu.value=[
-            {icon: 'add-circle', label: '新增', key: "add"},
-            {icon: 'draft', label: '编辑', key: "edit"},
-            {icon: 'delete-bin', label: '删除', key: "del"},
-            {icon: 'refresh', label: '同步', key: "sync"},
-            {icon: 'sort-asc', label: '排序', key: "sort"}
+        ElTreeMenu.value = rows
+        console.log(rows, 'row')
+    } else {
+        ElTreeMenu.value = [
+            { icon: 'add-circle', label: '新增', key: 'add' },
+            { icon: 'draft', label: '编辑', key: 'edit' },
+            { icon: 'delete-bin', label: '删除', key: 'del' },
+            { icon: 'refresh', label: '同步', key: 'sync' },
+            { icon: 'sort-asc', label: '排序', key: 'sort' },
         ]
     }
-    
+
     if (rows.length > 0) {
-        e.preventDefault();
-        treeRefNode.value = node;
-        treeRefData.value = data;
+        e.preventDefault()
+        treeRefNode.value = node
+        treeRefData.value = data
         node.showTreeMenu = true
         //展开菜单
         contextMenuRef2.value?.showMenu(e)
@@ -328,80 +328,80 @@ const ElTreeLabelContextMenu2 = (e,data,node) => {
 
 //设置树菜单数据
 const ElTreeMenu = ref([
-    {icon: 'add-circle', label: '新增', key: "add"},
-    {icon: 'draft', label: '编辑', key: "edit"},
-    {icon: 'delete-bin', label: '删除', key: "del"},
-    {icon: 'refresh', label: '同步', key: "sync"},
-    {icon: 'sort-asc', label: '排序', key: "sort"}
+    { icon: 'add-circle', label: '新增', key: 'add' },
+    { icon: 'draft', label: '编辑', key: 'edit' },
+    { icon: 'delete-bin', label: '删除', key: 'del' },
+    { icon: 'refresh', label: '同步', key: 'sync' },
+    { icon: 'sort-asc', label: '排序', key: 'sort' },
 ])
 
 //树菜单被点击
-const nodeItemInfo = ref();
-const ElTreeMenuClick = async ({key}) => {
-    const node = treeRefNode.value;
-    const data = treeRefData.value;
+const nodeItemInfo = ref()
+const ElTreeMenuClick = async ({ key }) => {
+    const node = treeRefNode.value
+    const data = treeRefData.value
     nodeItemInfo.value = node
     // nodeDataInfo.value = data
-    setTreeMenuDataClick({key,node,data})
+    setTreeMenuDataClick({ key, node, data })
 }
 //处理菜单被点击数据
-const setTreeMenuDataClick = ({key,node,data}) => {
+const setTreeMenuDataClick = ({ key, node, data }) => {
     //console.log(node)
     switch (key) {
         case 'add':
-            addNode(node);
-            break;
+            addNode(node)
+            break
         case 'edit':
-            editNodeModal(node);
-            break;
+            editNodeModal(node)
+            break
         case 'del':
-            delNodeMoadl(node);
-            break;
+            delNodeMoadl(node)
+            break
         case 'sync':
-            syncNodeMoadl(node);
-            break;
+            syncNodeMoadl(node)
+            break
         case 'sort':
-            sortNodeMoadl(node,data);
-            break;
+            sortNodeMoadl(node, data)
+            break
     }
 }
 
 //新增编辑弹窗
-const editDialogShow = ref(false);
-const editDialogType = ref('add');
+const editDialogShow = ref(false)
+const editDialogType = ref('add')
 const addNode = ()=>{
-    editDialogType.value = 'add';
-    editDialogShow.value = true;
+    editDialogType.value = 'add'
+    editDialogShow.value = true
 }
 const editNodeModal = ()=>{
-    editDialogType.value = 'edit';
-    editDialogShow.value = true;
+    editDialogType.value = 'edit'
+    editDialogShow.value = true
 }
 const dialogHide = ()=>{
-    editDialogShow.value = false;
+    editDialogShow.value = false
 }
 
 //排序弹窗
-const sortDialogShow = ref(false);
-const sortNodeMoadl = (node,data)=>{
+const sortDialogShow = ref(false)
+const sortNodeMoadl = (node, data)=>{
     // if(data?.isStorageNode===1){
     //     sortDialogShow.value = true;
     // }else{
     //     window.$message.warning('非存储节点不允许排序')
     // }
-    sortDialogShow.value = true;
-    
+    sortDialogShow.value = true
+
 }
 const sortDialogHide = ()=>{
-    sortDialogShow.value = false;
+    sortDialogShow.value = false
 }
 
 
 //删除节点
 const delNodeMoadl = (node)=>{
-    delMessage(async() => {
-        const {code } = await remove({
-            id:node.data.id
+    delMessage(async () => {
+        const { code } = await remove({
+            id:node.data.id,
         })
         if (code == 200) {
             window.$message?.success('删除成功')
@@ -416,30 +416,28 @@ const syncNodeMoadl = (node)=>{
         showCancelButton: true,
         confirmButtonText: '确认同步',
         cancelButtonText: '取消',
-        callback: async(action) => {
+        callback: async (action) => {
             if (action === 'confirm') {
-                const {code } = await syncProjectTree({
-                    id:node.data.id
+                const { code } = await syncProjectTree({
+                    id:node.data.id,
                 })
                 if (code == 200) {
                     window.$message?.success('同步成功')
-                    window?.location?.reload()  //刷新页面
+                    window?.location?.reload() //刷新页面
                 }
             }
-        }
+        },
     })
 }
 
 // 暴露出去
 defineExpose({
     removeElTreeNode,
-    ElTreeRef
+    ElTreeRef,
 })
 </script>
 
 <style lang="scss" scoped>
-
-
 @import "../../styles/app/tree.scss";
 .el-radio-group {
     width: 100%;
@@ -492,8 +490,8 @@ defineExpose({
     }
 }
 </style>
-<style lang="scss">
 
+<style lang="scss">
 .el-tree.hc-tree-node .el-tree-node {
     white-space: nowrap;
     overflow: hidden;
@@ -504,4 +502,4 @@ defineExpose({
         text-overflow: ellipsis;
     }
 }
-</style>
+</style>

+ 12 - 5
src/views/file/collection.vue

@@ -236,10 +236,14 @@
         </HcDialog>
 
         <!-- 调整排序 -->
-        <HcDialog :show="sortModal" title="调整排序" widths="980px" is-table is-row-footer @close="sortModalClose">
+        <HcDialog :show="sortModal" title="调整排序" widths="80vw" is-table is-row-footer @close="sortModalClose">
             <el-alert title="可拖动排序,也可在后面点击图标,切换排序" type="error" :closable="false" />
             <div class="hc-table-h">
-                <HcTable ui="hc-table-row-drop" :column="sortTableColumn" :datas="sortTableData" :loading="sortTableLoading" is-row-drop @row-drop="sortTableRowDrop">
+                <HcTable
+                    ui="hc-table-row-drop" is-row-drop quick-sort
+                    :column="sortTableColumn" :datas="sortTableData" :loading="sortTableLoading"
+                    @row-drop="sortTableRowDrop" @row-sort="sortTableRowDrop"
+                >
                     <template #key2="{ row }">
                         <span class="text-link">{{ row?.key2 }}</span>
                     </template>
@@ -269,7 +273,7 @@
         </HcDialog>
 
         <!-- 新增编辑文件 -->
-        <el-dialog v-model="showUploadModal" title="上传工程文件" width="80vw" class="hc-modal-border hc-modal-table" :close-on-click-modal="false" @close="uploadModalClose">
+        <HcDialog :show="showUploadModal" title="上传工程文件" widths="90vw" is-table @close="uploadModalClose">
             <HcTable ui="hc-form-table" is-sort :column="tableUploadColumn" :datas="tableUploadData" :loading="uploadSaveLoading" @row-sort="tableUploadRowSort">
                 <template #fileNumber="{ row }">
                     <!-- <el-input v-model="row.fileNumber" :class="row['isFileNumber'] ? 'is-error' : ''" @input="tableIsInput($event, row, 'isFileNumber')"/> -->
@@ -352,7 +356,7 @@
                     </div>
                 </div>
             </template>
-        </el-dialog>
+        </HcDialog>
 
         <!-- 批量认证 -->
         <el-dialog v-model="showCertificationModal" title="批量认证" width="80vw" class="hc-modal-border hc-modal-table">
@@ -1124,7 +1128,10 @@ const getSortTableData = async () => {
 
 //拖动完成
 const sortTableRowDrop = (rows) => {
-    sortTableData.value = rows
+    sortTableData.value = [] // 先清空,否则排序会异常
+    nextTick(() => {
+        sortTableData.value = rows
+    })
 }
 
 //向下

+ 66 - 61
src/views/file/components/hc-tree.vue

@@ -1,84 +1,92 @@
 <template>
     <el-radio-group v-model="radioKeys" @change="treeRadioChange">
-        <ElTree class="hc-tree-node tree-line" :class="ui" ref="ElTreeRef" :props="ElTreeProps" :load="ElTreeLoadNode" lazy highlight-current accordion node-key="primaryKeyId"
-                :default-expanded-keys="defaultExpandedCids" @node-click="ElTreeClick" @node-contextmenu="ElTreeLabelContextMenu" :indent="0">
+        <ElTree
+            ref="ElTreeRef" class="hc-tree-node tree-line" :class="ui" :props="ElTreeProps" :load="ElTreeLoadNode" lazy highlight-current accordion node-key="primaryKeyId"
+            :default-expanded-keys="defaultExpandedCids" :indent="0" @node-click="ElTreeClick" @node-contextmenu="ElTreeLabelContextMenu"
+        >
             <template #default="{ node, data }">
-                <div class="data-custom-tree-node" :id="`${idPrefix}${data['primaryKeyId']}`">
-                    <!--树组件,节点名称-->
-                    <div class="label level-name" v-if="node.level === 1">{{ node.label }}</div>
-                    <div class="label" v-else>
-                        <el-radio class="size-xl" :label="data['primaryKeyId']" @click.stop v-if="isRadio">{{ node.label }}</el-radio>
+                <div :id="`${idPrefix}${data.primaryKeyId}`" class="data-custom-tree-node">
+                    <!-- 树组件,节点名称 -->
+                    <div v-if="node.level === 1" class="label level-name">
+                        {{ node.label }}
+                    </div>
+                    <div v-else class="label">
+                        <el-radio v-if="isRadio" class="size-xl" :label="data.primaryKeyId" @click.stop>
+                            {{ node.label }}
+                        </el-radio>
                         <span v-else>{{ node.label }}</span>
                     </div>
-                    <!--树组件,操作菜单-->
-                    <div class="menu-icon" :class="node.showTreeMenu?'show':''" v-if="node.level !== 1 && menusData.length > 0">
-                        <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="ElTreeLabelContextMenu($event,data,node)">
-                            <HcIcon name="apps" ui="text-2xl"/>
+                    <!-- 树组件,操作菜单 -->
+                    <div v-if="node.level !== 1 && menusData.length > 0" class="menu-icon" :class="node.showTreeMenu ? 'show' : ''">
+                        <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="ElTreeLabelContextMenu($event, data, node)">
+                            <HcIcon name="apps" ui="text-2xl" />
                         </div>
                     </div>
-                    <!--树组件,操作菜单 END-->
+                    <!-- 树组件,操作菜单 END -->
                 </div>
             </template>
         </ElTree>
     </el-radio-group>
-    <!--右键菜单-->
-    <HcContextMenu ref="contextMenuRef" :datas="menusData" @item-click="handleMenuSelect" v-if="menusData.length > 0" @closed="handleMenuClosed">
-        <template #sort="{item}">
-            <HcIcon :name="item.icon" :line="false" class="menu-item-icon"/>
-            <span class="menu-item-name">{{item.label}}</span>
+    <!-- 右键菜单 -->
+    <HcContextMenu v-if="menusData.length > 0" ref="contextMenuRef" :datas="menusData" @item-click="handleMenuSelect" @closed="handleMenuClosed">
+        <template #sort="{ item }">
+            <HcIcon :name="item.icon" :line="false" class="menu-item-icon" />
+            <span class="menu-item-name">{{ item.label }}</span>
         </template>
     </HcContextMenu>
 </template>
 
 <script setup>
-import {ref,nextTick,watch} from "vue";
-import dataFillQuery from '~api/data-fill/query';
-import {isArrItem, getArrValue, getObjValue, isNullES} from "js-fast-way"
+import { nextTick, ref, watch } from 'vue'
+import dataFillQuery from '~api/data-fill/query'
+import { getArrValue, getObjValue, isArrItem, isNullES } from 'js-fast-way'
 
 //参数
 const props = defineProps({
     ui: {
         type: String,
-        default: ''
+        default: '',
     },
     menus: {
         type: Array,
-        default: () => ([])
+        default: () => ([]),
     },
     projectId: {
-        type: [String,Number],
-        default: ''
+        type: [String, Number],
+        default: '',
     },
     contractId: {
-        type: [String,Number],
-        default: ''
+        type: [String, Number],
+        default: '',
     },
     autoExpandKeys: {
         type: Array,
-        default: () => ([])
+        default: () => ([]),
     },
     idPrefix: {
         type: String,
-        default: 'hc-tree-'
+        default: 'hc-tree-',
     },
     isAutoKeys: {
         type: Boolean,
-        default: true
+        default: true,
     },
     isAutoClick: {
         type: Boolean,
-        default: true
+        default: true,
     },
     isRadio: {
         type: Boolean,
-        default: false
+        default: false,
     },
     radioKey: {
         type: String,
-        default: ''
+        default: '',
     },
 })
 
+//事件
+const emit = defineEmits(['menuTap', 'nodeTap', 'nodeLoading', 'radioChange'])
 //变量
 const ElTreeRef = ref(null)
 const treeRefNode = ref(null)
@@ -86,15 +94,15 @@ const treeRefData = ref(null)
 const ElTreeProps = ref({
     label: 'title',
     children: 'children',
-    isLeaf: 'notExsitChild'
+    isLeaf: 'notExsitChild',
 })
 const menusData = ref(props.menus)
 const isAutoKeys = ref(props.isAutoKeys)
 const TreeExpandKey = ref(props.autoExpandKeys)
-const projectId = ref(props.projectId);
-const contractId = ref(props.contractId);
-const idPrefix = ref(props.idPrefix);
-const radioKeys = ref(Number(props.radioKey));
+const projectId = ref(props.projectId)
+const contractId = ref(props.contractId)
+const idPrefix = ref(props.idPrefix)
+const radioKeys = ref(Number(props.radioKey))
 
 //监听
 watch(() => [
@@ -115,9 +123,6 @@ watch(() => [
     radioKeys.value = Number(radioKey)
 })
 
-//事件
-const emit = defineEmits(['menuTap','nodeTap', 'nodeLoading', 'radioChange'])
-
 //单选框事件
 const treeRadioChange = (val) => {
     emit('radioChange', val)
@@ -127,30 +132,30 @@ const treeRadioChange = (val) => {
 const defaultExpandedCids = ref([])
 const ElTreeLoadNode = async (node, resolve) => {
     if (contractId.value) {
-        let contractIdRelation = '', parentId = '', primaryKeyId = '';
+        let contractIdRelation = '', parentId = '', primaryKeyId = ''
         if (node.level !== 0) {
-            const nodeData = getObjValue(node?.data);
+            const nodeData = getObjValue(node?.data)
             contractIdRelation = nodeData?.contractIdRelation || ''
             parentId = contractIdRelation ? nodeData?.primaryKeyId : nodeData?.id
             primaryKeyId = nodeData?.id || ''
         }
         //获取数据
-        const {error, code, data} = await dataFillQuery.queryWbsTreeData({
+        const { error, code, data } = await dataFillQuery.queryWbsTreeData({
             contractId: contractId.value || '',
             contractIdRelation,
             primaryKeyId,
-            parentId
+            parentId,
         })
         //处理数据
         if (!error && code === 200) {
-            let clickKey = '', defaultExpandedArr = [];
+            let clickKey = '', defaultExpandedArr = []
             const keys = TreeExpandKey.value || []
             const resData = getArrValue(data)
             if (keys.length > 0) {
-                let lastKey = keys[keys.length-1];
+                let lastKey = keys[keys.length - 1]
                 for (const item of resData) {
                     //自动展开
-                    if (isArrItem(keys,item?.primaryKeyId)) {
+                    if (isArrItem(keys, item?.primaryKeyId)) {
                         defaultExpandedArr.push(item?.primaryKeyId)
                     }
                     //最后一个,选中点击
@@ -186,14 +191,14 @@ const ElTreeLoadNode = async (node, resolve) => {
 }
 
 //节点被点击
-const ElTreeClick = async (data,node) => {
+const ElTreeClick = async (data, node) => {
     if (isAutoKeys.value) {
         let autoKeysArr = []
         await getNodeExpandKeys(node, autoKeysArr)
         const autoKeys = autoKeysArr.reverse()
-        emit('nodeTap', {node, data, keys: autoKeys})
+        emit('nodeTap', { node, data, keys: autoKeys })
     } else {
-        emit('nodeTap', {node, data, keys: []})
+        emit('nodeTap', { node, data, keys: [] })
     }
 }
 
@@ -209,12 +214,12 @@ const getNodeExpandKeys = async (node, newKeys) => {
 
 //鼠标右键事件
 const contextMenuRef = ref(null)
-const ElTreeLabelContextMenu = (e,data,node) => {
-    const rows = menusData.value || [];
+const ElTreeLabelContextMenu = (e, data, node) => {
+    const rows = menusData.value || []
     if (node.level !== 1 && rows.length > 0) {
-        e.preventDefault();
-        treeRefNode.value = node;
-        treeRefData.value = data;
+        e.preventDefault()
+        treeRefNode.value = node
+        treeRefData.value = data
         node.showTreeMenu = true
         //展开菜单
         contextMenuRef.value?.showMenu(e)
@@ -222,14 +227,14 @@ const ElTreeLabelContextMenu = (e,data,node) => {
 }
 
 //鼠标右键菜单被点击
-const handleMenuSelect = ({key}) => {
-    const node = treeRefNode.value;
-    const data = treeRefData.value;
-    emit('menuTap', {key, node, data})
+const handleMenuSelect = ({ key }) => {
+    const node = treeRefNode.value
+    const data = treeRefData.value
+    emit('menuTap', { key, node, data })
 }
 
 const handleMenuClosed = () => {
-    const node = treeRefNode.value;
+    const node = treeRefNode.value
     if (!isNullES(node)) {
         treeRefNode.value['showTreeMenu'] = false
     }
@@ -245,7 +250,7 @@ const removeElTreeNode = (key) => {
 
 // 暴露出去
 defineExpose({
-    removeElTreeNode
+    removeElTreeNode,
 })
 </script>
 

+ 18 - 22
src/views/file/records.vue

@@ -147,10 +147,14 @@
         </HcDialog>
 
         <!-- 调整排序 -->
-        <HcDialog :show="sortModal" title="调整排序" widths="980px" is-table is-row-footer @close="sortModalClose">
+        <HcDialog :show="sortModal" title="调整排序" widths="80vw" is-table is-row-footer @close="sortModalClose">
             <el-alert title="可拖动排序,也可在后面点击图标,切换排序" type="error" :closable="false" />
             <div class="hc-table-h">
-                <HcTable ui="hc-table-row-drop" :column="sortTableColumn" :datas="sortTableData" :loading="sortTableLoading" is-row-drop @row-drop="sortTableRowDrop">
+                <HcTable
+                    ui="hc-table-row-drop" is-row-drop quick-sort
+                    :column="sortTableColumn" :datas="sortTableData" :loading="sortTableLoading"
+                    @row-drop="sortTableRowDrop" @row-sort="sortTableRowDrop"
+                >
                     <template #key2="{ row }">
                         <span class="text-link">{{ row?.key2 }}</span>
                     </template>
@@ -180,7 +184,7 @@
         </HcDialog>
 
         <!-- 新增编辑文件 -->
-        <el-dialog v-model="showUploadModal" :title="tableUploadType === 'add' ? '上传文件' : '修改案卷基础信息'" width="80vw" class="hc-modal-border hc-modal-table" :close-on-click-modal="false" @close="uploadModalClose">
+        <HcDialog :show="showUploadModal" :title="tableUploadType === 'add' ? '上传文件' : '修改案卷基础信息'" widths="90vw" is-table @close="uploadModalClose">
             <div v-if="tableUploadType === 'add'" class="batch-set">
                 <span>批量设置</span>
                 <span class="ml-10">档号:</span>
@@ -269,19 +273,9 @@
                     </div>
                 </div>
             </template>
-        </el-dialog>
-
-        <!-- HcUploadFile ref="HcUploadFileRef"
-                      @fileProgress="HcUploadFileProgress"
-                      @fileSuccess="HcUploadFileSuccess"
-                      @filesChange="HcUploadFileChange"/ -->
-        <HcUploadFile
-            ref="HcUploadFileRef"
-            :options="UploadFileOptions"
-            @progress="HcUploadFileProgress"
-            @success="HcUploadFileSuccess"
-            @change="HcUploadFileChange"
-        />
+        </HcDialog>
+
+        <HcUploadFile ref="HcUploadFileRef" :options="UploadFileOptions" @progress="HcUploadFileProgress" @success="HcUploadFileSuccess" @change="HcUploadFileChange" />
     </div>
 </template>
 
@@ -289,8 +283,7 @@
 import { nextTick, onMounted, ref, watch } from 'vue'
 import { useAppStore } from '~src/store'
 import HcTree from '~src/components/tree/hc-tree.vue'
-import notableform from '~src/assets/view/notableform.svg'
-import { delMessage, rowsToId, rowsToIdNumArr } from '~uti/tools'
+import { delMessage, rowsToId } from '~uti/tools'
 import { arrKeySort, deepClone, downloadBlob, getArrValue, getObjVal } from 'js-fast-way'
 import { getTokenHeader } from '~src/api/request/header'
 import archiveFileApi from '~api/archiveFile/archiveFileAuto.js'
@@ -601,13 +594,13 @@ const setTableCheck = async (row, index) => {
     //console.log(row)
     if (row.ids) {
         const keys = row.ids.split(',')
-        row.list.forEach(async (item)=>{
+        for (const item of row.list) {
             if (keys.indexOf(item.id) > -1) {
                 item.checked = true
                 await nextTick()
                 sorTableRef.value[index].toggleRowSelection(item, true)
             }
-        })
+        }
     }
 }
 
@@ -758,7 +751,7 @@ const movesClick = async () => {
     treePanelLoading.value = false
     if (!error && code === 200) {
         fileDatasList.value = getArrValue(data['records'])
-      
+
     } else {
         fileDatasList.value = []
     }
@@ -895,7 +888,10 @@ const getSortTableData = async () => {
 
 //拖动完成
 const sortTableRowDrop = (rows) => {
-    sortTableData.value = rows
+    sortTableData.value = [] // 先清空,否则排序会异常
+    nextTick(() => {
+        sortTableData.value = rows
+    })
 }
 
 //向下

+ 198 - 192
yarn.lock

@@ -27,115 +27,115 @@
   resolved "http://47.110.251.215:9000/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz#7ad90d08a8c0d5fd3af31c4f73264ca89614397a"
   integrity sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==
 
-"@esbuild/android-arm64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd"
-  integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==
-
-"@esbuild/android-arm@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d"
-  integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==
-
-"@esbuild/android-x64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1"
-  integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==
-
-"@esbuild/darwin-arm64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276"
-  integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==
-
-"@esbuild/darwin-x64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb"
-  integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==
-
-"@esbuild/freebsd-arm64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2"
-  integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==
-
-"@esbuild/freebsd-x64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4"
-  integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==
-
-"@esbuild/linux-arm64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb"
-  integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==
-
-"@esbuild/linux-arm@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a"
-  integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==
-
-"@esbuild/linux-ia32@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a"
-  integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==
-
-"@esbuild/linux-loong64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72"
-  integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==
-
-"@esbuild/linux-mips64el@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289"
-  integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==
-
-"@esbuild/linux-ppc64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7"
-  integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==
-
-"@esbuild/linux-riscv64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09"
-  integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==
-
-"@esbuild/linux-s390x@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829"
-  integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==
-
-"@esbuild/linux-x64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4"
-  integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==
-
-"@esbuild/netbsd-x64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462"
-  integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==
-
-"@esbuild/openbsd-x64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691"
-  integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==
-
-"@esbuild/sunos-x64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273"
-  integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==
-
-"@esbuild/win32-arm64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f"
-  integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==
-
-"@esbuild/win32-ia32@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03"
-  integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==
-
-"@esbuild/win32-x64@0.17.19":
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061"
-  integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==
+"@esbuild/android-arm64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/android-arm64/-/android-arm64-0.18.16.tgz#34f562abc0015933aabd41b3d50d8d3359e30155"
+  integrity sha512-wsCqSPqLz+6Ov+OM4EthU43DyYVVyfn15S4j1bJzylDpc1r1jZFFfJQNfDuT8SlgwuqpmpJXK4uPlHGw6ve7eA==
+
+"@esbuild/android-arm@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/android-arm/-/android-arm-0.18.16.tgz#ef6f9aa59a79a9b9330a2e73f7eb402c6630c267"
+  integrity sha512-gCHjjQmA8L0soklKbLKA6pgsLk1byULuHe94lkZDzcO3/Ta+bbeewJioEn1Fr7kgy9NWNFy/C+MrBwC6I/WCug==
+
+"@esbuild/android-x64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/android-x64/-/android-x64-0.18.16.tgz#ed7444cb17542932c67b15e20528686853239cfd"
+  integrity sha512-ldsTXolyA3eTQ1//4DS+E15xl0H/3DTRJaRL0/0PgkqDsI0fV/FlOtD+h0u/AUJr+eOTlZv4aC9gvfppo3C4sw==
+
+"@esbuild/darwin-arm64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/darwin-arm64/-/darwin-arm64-0.18.16.tgz#3c5a083e6e08a50f478fa243939989d86be1c6bf"
+  integrity sha512-aBxruWCII+OtluORR/KvisEw0ALuw/qDQWvkoosA+c/ngC/Kwk0lLaZ+B++LLS481/VdydB2u6tYpWxUfnLAIw==
+
+"@esbuild/darwin-x64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/darwin-x64/-/darwin-x64-0.18.16.tgz#a8f3b61bee2807131cbe28eb164ad2b0333b59f5"
+  integrity sha512-6w4Dbue280+rp3LnkgmriS1icOUZDyPuZo/9VsuMUTns7SYEiOaJ7Ca1cbhu9KVObAWfmdjUl4gwy9TIgiO5eA==
+
+"@esbuild/freebsd-arm64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.16.tgz#9bdbb3f0e5f0842b21c9b8602e70c106174ac24c"
+  integrity sha512-x35fCebhe9s979DGKbVAwXUOcTmCIE32AIqB9CB1GralMIvxdnMLAw5CnID17ipEw9/3MvDsusj/cspYt2ZLNQ==
+
+"@esbuild/freebsd-x64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/freebsd-x64/-/freebsd-x64-0.18.16.tgz#24f73956436495cc7a5a4bf06be6b661aea6a2c1"
+  integrity sha512-YM98f+PeNXF3GbxIJlUsj+McUWG1irguBHkszCIwfr3BXtXZsXo0vqybjUDFfu9a8Wr7uUD/YSmHib+EeGAFlg==
+
+"@esbuild/linux-arm64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/linux-arm64/-/linux-arm64-0.18.16.tgz#244569757f9cbd912f5a595a8ad8144f8c915f13"
+  integrity sha512-XIqhNUxJiuy+zsR77+H5Z2f7s4YRlriSJKtvx99nJuG5ATuJPjmZ9n0ANgnGlPCpXGSReFpgcJ7O3SMtzIFeiQ==
+
+"@esbuild/linux-arm@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/linux-arm/-/linux-arm-0.18.16.tgz#d63923c63af534032cc5ea0b2a0b3de10f8357f5"
+  integrity sha512-b5ABb+5Ha2C9JkeZXV+b+OruR1tJ33ePmv9ZwMeETSEKlmu/WJ45XTTG+l6a2KDsQtJJ66qo/hbSGBtk0XVLHw==
+
+"@esbuild/linux-ia32@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/linux-ia32/-/linux-ia32-0.18.16.tgz#a8825ccea6309f0bccfc5d87b43163ba804c2f20"
+  integrity sha512-no+pfEpwnRvIyH+txbBAWtjxPU9grslmTBfsmDndj7bnBmr55rOo/PfQmRfz7Qg9isswt1FP5hBbWb23fRWnow==
+
+"@esbuild/linux-loong64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/linux-loong64/-/linux-loong64-0.18.16.tgz#f530e820fc3c61cf2206155b994aeab53b6d25be"
+  integrity sha512-Zbnczs9ZXjmo0oZSS0zbNlJbcwKXa/fcNhYQjahDs4Xg18UumpXG/lwM2lcSvHS3mTrRyCYZvJbmzYc4laRI1g==
+
+"@esbuild/linux-mips64el@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/linux-mips64el/-/linux-mips64el-0.18.16.tgz#2d47ace539257896865d243641bd6716684a1e82"
+  integrity sha512-YMF7hih1HVR/hQVa/ot4UVffc5ZlrzEb3k2ip0nZr1w6fnYypll9td2qcoMLvd3o8j3y6EbJM3MyIcXIVzXvQQ==
+
+"@esbuild/linux-ppc64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/linux-ppc64/-/linux-ppc64-0.18.16.tgz#d6913e7e9be9e242a6a20402800141bdbe7009f7"
+  integrity sha512-Wkz++LZ29lDwUyTSEnzDaaP5OveOgTU69q9IyIw9WqLRxM4BjTBjz9un4G6TOvehWpf/J3gYVFN96TjGHrbcNQ==
+
+"@esbuild/linux-riscv64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/linux-riscv64/-/linux-riscv64-0.18.16.tgz#8f33b627389c8234fe61f4636c134f17fb1d9b09"
+  integrity sha512-LFMKZ30tk78/mUv1ygvIP+568bwf4oN6reG/uczXnz6SvFn4e2QUFpUpZY9iSJT6Qpgstrhef/nMykIXZtZWGQ==
+
+"@esbuild/linux-s390x@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/linux-s390x/-/linux-s390x-0.18.16.tgz#4d44c030f78962cf410f604f92fcc1505e4afdde"
+  integrity sha512-3ZC0BgyYHYKfZo3AV2/66TD/I9tlSBaW7eWTEIkrQQKfJIifKMMttXl9FrAg+UT0SGYsCRLI35Gwdmm96vlOjg==
+
+"@esbuild/linux-x64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/linux-x64/-/linux-x64-0.18.16.tgz#8846d00e16b1e93eb488c8b4dd51c946adfc236f"
+  integrity sha512-xu86B3647DihHJHv/wx3NCz2Dg1gjQ8bbf9cVYZzWKY+gsvxYmn/lnVlqDRazObc3UMwoHpUhNYaZset4X8IPA==
+
+"@esbuild/netbsd-x64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/netbsd-x64/-/netbsd-x64-0.18.16.tgz#6514a86bd07744f3100d2813ea2fb6520d53e72e"
+  integrity sha512-uVAgpimx9Ffw3xowtg/7qQPwHFx94yCje+DoBx+LNm2ePDpQXHrzE+Sb0Si2VBObYz+LcRps15cq+95YM7gkUw==
+
+"@esbuild/openbsd-x64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/openbsd-x64/-/openbsd-x64-0.18.16.tgz#ae67ce766d58aab6c0e6037f1a76f15df4a2a5fe"
+  integrity sha512-6OjCQM9wf7z8/MBi6BOWaTL2AS/SZudsZtBziXMtNI8r/U41AxS9x7jn0ATOwVy08OotwkPqGRMkpPR2wcTJXA==
+
+"@esbuild/sunos-x64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/sunos-x64/-/sunos-x64-0.18.16.tgz#998efe8a58374b7351ac710455051639a6ce6a05"
+  integrity sha512-ZoNkruFYJp9d1LbUYCh8awgQDvB9uOMZqlQ+gGEZR7v6C+N6u7vPr86c+Chih8niBR81Q/bHOSKGBK3brJyvkQ==
+
+"@esbuild/win32-arm64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/win32-arm64/-/win32-arm64-0.18.16.tgz#8de33682243508eef8d4de1816df2c05adad2b21"
+  integrity sha512-+j4anzQ9hrs+iqO+/wa8UE6TVkKua1pXUb0XWFOx0FiAj6R9INJ+WE//1/Xo6FG1vB5EpH3ko+XcgwiDXTxcdw==
+
+"@esbuild/win32-ia32@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/win32-ia32/-/win32-ia32-0.18.16.tgz#95c9f4274fb3ef9e449d464ffe3e3b7fa091503b"
+  integrity sha512-5PFPmq3sSKTp9cT9dzvI67WNfRZGvEVctcZa1KGjDDu4n3H8k59Inbk0du1fz0KrAbKKNpJbdFXQMDUz7BG4rQ==
+
+"@esbuild/win32-x64@0.18.16":
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/@esbuild/win32-x64/-/win32-x64-0.18.16.tgz#5be58d31d0120c68af8e38b702e6937ce764cd68"
+  integrity sha512-sCIVrrtcWN5Ua7jYXNG1xD199IalrbfV2+0k/2Zf2OyV2FtnQnMgdzgpRAbi4AWlKJj1jkX+M+fEGPQj6BQB4w==
 
 "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.3.0":
   version "4.4.0"
@@ -849,7 +849,7 @@ csstype@^3.1.1:
   resolved "http://47.110.251.215:9000/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
   integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
 
-dayjs@^1.11.3, dayjs@^1.11.8:
+dayjs@^1.11.3:
   version "1.11.8"
   resolved "http://47.110.251.215:9000/dayjs/-/dayjs-1.11.8.tgz#4282f139c8c19dd6d0c7bd571e30c2d0ba7698ea"
   integrity sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==
@@ -924,22 +924,22 @@ domutils@^3.0.1:
     domhandler "^5.0.3"
 
 echarts@^5.4.2:
-  version "5.4.2"
-  resolved "http://47.110.251.215:9000/echarts/-/echarts-5.4.2.tgz#9f38781c9c6ae323e896956178f6956952c77a48"
-  integrity sha512-2W3vw3oI2tWJdyAz+b8DuWS0nfXtSDqlDmqgin/lfzbkB01cuMEN66KWBlmur3YMp5nEDEEt5s23pllnAzB4EA==
+  version "5.4.3"
+  resolved "http://47.110.251.215:9000/echarts/-/echarts-5.4.3.tgz#f5522ef24419164903eedcfd2b506c6fc91fb20c"
+  integrity sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==
   dependencies:
     tslib "2.3.0"
-    zrender "5.4.3"
+    zrender "5.4.4"
 
 electron-to-chromium@^1.4.431:
   version "1.4.440"
   resolved "http://47.110.251.215:9000/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz#d3b1eeb36b717eb479a240c0406ac1fa67901762"
   integrity sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw==
 
-element-plus@^2.3.7:
-  version "2.3.7"
-  resolved "http://47.110.251.215:9000/element-plus/-/element-plus-2.3.7.tgz#544a127f0e65f51715e3b24ec3ebf545c46859cd"
-  integrity sha512-h6TxclbaLUJxg/Bv5j/ZKsK+K5yadQliw5+R30HWyE69pXlqXTX24oYx+yw3pA4Dy+lqEDi5501FQ0CORk3OSA==
+element-plus@2.3.8, element-plus@^2.3.8:
+  version "2.3.8"
+  resolved "http://47.110.251.215:9000/element-plus/-/element-plus-2.3.8.tgz#46032abe1a712abfb65932f146ee19281312a9cf"
+  integrity sha512-yHQR0/tG2LvPkpGUt7Te/hPmP2XW/BytBNUbx+EFO54VnGCOE3upmQcVffNp1PLgwg9sthYDXontUWpnpmLPJw==
   dependencies:
     "@ctrl/tinycolor" "^3.4.1"
     "@element-plus/icons-vue" "^2.0.6"
@@ -969,33 +969,33 @@ entities@^4.2.0:
   resolved "http://47.110.251.215:9000/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
   integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
 
-esbuild@^0.17.5:
-  version "0.17.19"
-  resolved "http://47.110.251.215:9000/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955"
-  integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==
+esbuild@^0.18.10:
+  version "0.18.16"
+  resolved "http://47.110.251.215:9000/esbuild/-/esbuild-0.18.16.tgz#bbeb058c556152bcbff4e8168e7c93020ccf09c3"
+  integrity sha512-1xLsOXrDqwdHxyXb/x/SOyg59jpf/SH7YMvU5RNSU7z3TInaASNJWNFJ6iRvLvLETZMasF3d1DdZLg7sgRimRQ==
   optionalDependencies:
-    "@esbuild/android-arm" "0.17.19"
-    "@esbuild/android-arm64" "0.17.19"
-    "@esbuild/android-x64" "0.17.19"
-    "@esbuild/darwin-arm64" "0.17.19"
-    "@esbuild/darwin-x64" "0.17.19"
-    "@esbuild/freebsd-arm64" "0.17.19"
-    "@esbuild/freebsd-x64" "0.17.19"
-    "@esbuild/linux-arm" "0.17.19"
-    "@esbuild/linux-arm64" "0.17.19"
-    "@esbuild/linux-ia32" "0.17.19"
-    "@esbuild/linux-loong64" "0.17.19"
-    "@esbuild/linux-mips64el" "0.17.19"
-    "@esbuild/linux-ppc64" "0.17.19"
-    "@esbuild/linux-riscv64" "0.17.19"
-    "@esbuild/linux-s390x" "0.17.19"
-    "@esbuild/linux-x64" "0.17.19"
-    "@esbuild/netbsd-x64" "0.17.19"
-    "@esbuild/openbsd-x64" "0.17.19"
-    "@esbuild/sunos-x64" "0.17.19"
-    "@esbuild/win32-arm64" "0.17.19"
-    "@esbuild/win32-ia32" "0.17.19"
-    "@esbuild/win32-x64" "0.17.19"
+    "@esbuild/android-arm" "0.18.16"
+    "@esbuild/android-arm64" "0.18.16"
+    "@esbuild/android-x64" "0.18.16"
+    "@esbuild/darwin-arm64" "0.18.16"
+    "@esbuild/darwin-x64" "0.18.16"
+    "@esbuild/freebsd-arm64" "0.18.16"
+    "@esbuild/freebsd-x64" "0.18.16"
+    "@esbuild/linux-arm" "0.18.16"
+    "@esbuild/linux-arm64" "0.18.16"
+    "@esbuild/linux-ia32" "0.18.16"
+    "@esbuild/linux-loong64" "0.18.16"
+    "@esbuild/linux-mips64el" "0.18.16"
+    "@esbuild/linux-ppc64" "0.18.16"
+    "@esbuild/linux-riscv64" "0.18.16"
+    "@esbuild/linux-s390x" "0.18.16"
+    "@esbuild/linux-x64" "0.18.16"
+    "@esbuild/netbsd-x64" "0.18.16"
+    "@esbuild/openbsd-x64" "0.18.16"
+    "@esbuild/sunos-x64" "0.18.16"
+    "@esbuild/win32-arm64" "0.18.16"
+    "@esbuild/win32-ia32" "0.18.16"
+    "@esbuild/win32-x64" "0.18.16"
 
 escalade@^3.1.1:
   version "3.1.1"
@@ -1038,10 +1038,10 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1:
   resolved "http://47.110.251.215:9000/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994"
   integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
 
-eslint@^8.44.0:
-  version "8.44.0"
-  resolved "http://47.110.251.215:9000/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500"
-  integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==
+eslint@^8.45.0:
+  version "8.45.0"
+  resolved "http://47.110.251.215:9000/eslint/-/eslint-8.45.0.tgz#bab660f90d18e1364352c0a6b7c6db8edb458b78"
+  integrity sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==
   dependencies:
     "@eslint-community/eslint-utils" "^4.2.0"
     "@eslint-community/regexpp" "^4.4.0"
@@ -1068,7 +1068,6 @@ eslint@^8.44.0:
     globals "^13.19.0"
     graphemer "^1.4.0"
     ignore "^5.2.0"
-    import-fresh "^3.0.0"
     imurmurhash "^0.1.4"
     is-glob "^4.0.0"
     is-path-inside "^3.0.3"
@@ -1080,7 +1079,6 @@ eslint@^8.44.0:
     natural-compare "^1.4.0"
     optionator "^0.9.3"
     strip-ansi "^6.0.1"
-    strip-json-comments "^3.1.0"
     text-table "^0.2.0"
 
 espree@^9.3.1, espree@^9.6.0:
@@ -1295,15 +1293,15 @@ has@^1.0.3:
   dependencies:
     function-bind "^1.1.1"
 
-hc-vue3-ui@^1.6.0:
-  version "1.6.0"
-  resolved "http://47.110.251.215:9000/hc-vue3-ui/-/hc-vue3-ui-1.6.0.tgz#c2ecaa00dab1cfe42a11d5ba0cb20e94bcd38c66"
-  integrity sha512-zfrpCchAyVN0sJOPuLng/4sEg4YOYBSTfjk6HdG9fCaIwVoZK8/t4jxaNm+xv+gmVOoYp/Ax4s0SWbpr5JG1rg==
+hc-vue3-ui@^1.7.6:
+  version "1.7.6"
+  resolved "http://47.110.251.215:9000/hc-vue3-ui/-/hc-vue3-ui-1.7.6.tgz#eab314a0fb75a274d29e3b08e0c02d095b2e5815"
+  integrity sha512-ZFYEwgb54zmwVV3gIw5QDnQN4UWgX9o3H49Dke+Jzzvh5mVDiXOvZ4pP3h6EsRan3aSZ2Vum9nUeA6f3J1Wfug==
   dependencies:
     axios "^1.4.0"
-    dayjs "^1.11.8"
-    element-plus "^2.3.7"
-    js-fast-way "^0.2.1"
+    dayjs "^1.11.9"
+    element-plus "2.3.8"
+    js-fast-way "^0.2.5"
     js-md5 "^0.7.3"
     simple-uploader.js "^0.6.0"
     sortablejs "^1.15.0"
@@ -1333,7 +1331,7 @@ immutable@^4.0.0:
   resolved "http://47.110.251.215:9000/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be"
   integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==
 
-import-fresh@^3.0.0, import-fresh@^3.2.1:
+import-fresh@^3.2.1:
   version "3.3.0"
   resolved "http://47.110.251.215:9000/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
   integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
@@ -1420,10 +1418,10 @@ js-cookie@^3.0.5:
   resolved "http://47.110.251.215:9000/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc"
   integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==
 
-js-fast-way@^0.2.1:
-  version "0.2.1"
-  resolved "http://47.110.251.215:9000/js-fast-way/-/js-fast-way-0.2.1.tgz#ca099b8fdc304739dd65583d0eb9fa09052eaec0"
-  integrity sha512-QYLYuavyDb/0V5YSSNynAvkm2EcbWPJxxi+frXiL1gKO6y827Z1Z/zJl1WgeRZiVNQCWlsZT7OKZDDWC+Mw2xQ==
+js-fast-way@^0.2.5:
+  version "0.2.5"
+  resolved "http://47.110.251.215:9000/js-fast-way/-/js-fast-way-0.2.5.tgz#4164309cef256181fff2faee2fb8537b8dc39ecf"
+  integrity sha512-INJw+vq1F32yvoA1nyIDybLCSyhf5ErxlrRNF2nDJ8wgNtZncWpXDzYeNZL75awmAMfM66XpGYttqJo7crjPsA==
 
 js-md5@^0.7.3:
   version "0.7.3"
@@ -2008,7 +2006,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
   resolved "http://47.110.251.215:9000/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
   integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
 
-postcss@^8.1.10, postcss@^8.4.23, postcss@^8.4.24:
+postcss@^8.1.10, postcss@^8.4.23:
   version "8.4.24"
   resolved "http://47.110.251.215:9000/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df"
   integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==
@@ -2017,6 +2015,15 @@ postcss@^8.1.10, postcss@^8.4.23, postcss@^8.4.24:
     picocolors "^1.0.0"
     source-map-js "^1.0.2"
 
+postcss@^8.4.26, postcss@^8.4.27:
+  version "8.4.27"
+  resolved "http://47.110.251.215:9000/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057"
+  integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==
+  dependencies:
+    nanoid "^3.3.6"
+    picocolors "^1.0.0"
+    source-map-js "^1.0.2"
+
 prelude-ls@^1.2.1:
   version "1.2.1"
   resolved "http://47.110.251.215:9000/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
@@ -2116,10 +2123,10 @@ rimraf@^3.0.2:
   dependencies:
     glob "^7.1.3"
 
-rollup@^3.21.0:
-  version "3.25.2"
-  resolved "http://47.110.251.215:9000/rollup/-/rollup-3.25.2.tgz#3479d72955a83da9019f926d4ba285d630b7656b"
-  integrity sha512-VLnkxZMDr3jpxgtmS8pQZ0UvhslmF4ADq/9w4erkctbgjCqLW9oa89fJuXEs4ZmgyoF7Dm8rMDKSS5b5u2hHUg==
+rollup@^3.25.2:
+  version "3.26.3"
+  resolved "http://47.110.251.215:9000/rollup/-/rollup-3.26.3.tgz#bbc8818cadd0aebca348dbb3d68d296d220967b8"
+  integrity sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==
   optionalDependencies:
     fsevents "~2.3.2"
 
@@ -2140,10 +2147,10 @@ safe-buffer@~5.2.0:
   resolved "http://47.110.251.215:9000/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
   integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
 
-sass@^1.63.6:
-  version "1.63.6"
-  resolved "http://47.110.251.215:9000/sass/-/sass-1.63.6.tgz#481610e612902e0c31c46b46cf2dad66943283ea"
-  integrity sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==
+sass@^1.64.1:
+  version "1.64.1"
+  resolved "http://47.110.251.215:9000/sass/-/sass-1.64.1.tgz#6a46f6d68e0fa5ad90aa59ce025673ddaa8441cf"
+  integrity sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==
   dependencies:
     chokidar ">=3.0.0 <4.0.0"
     immutable "^4.0.0"
@@ -2219,7 +2226,7 @@ strip-ansi@^6.0.1:
   dependencies:
     ansi-regex "^5.0.1"
 
-strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+strip-json-comments@^3.1.1:
   version "3.1.1"
   resolved "http://47.110.251.215:9000/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
   integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
@@ -2269,10 +2276,10 @@ svgo@^3.0.2:
     csso "^5.0.5"
     picocolors "^1.0.0"
 
-tailwindcss@3.3.2:
-  version "3.3.2"
-  resolved "http://47.110.251.215:9000/tailwindcss/-/tailwindcss-3.3.2.tgz#2f9e35d715fdf0bbf674d90147a0684d7054a2d3"
-  integrity sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==
+tailwindcss@3.3.3:
+  version "3.3.3"
+  resolved "http://47.110.251.215:9000/tailwindcss/-/tailwindcss-3.3.3.tgz#90da807393a2859189e48e9e7000e6880a736daf"
+  integrity sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==
   dependencies:
     "@alloc/quick-lru" "^5.2.0"
     arg "^5.0.2"
@@ -2294,7 +2301,6 @@ tailwindcss@3.3.2:
     postcss-load-config "^4.0.1"
     postcss-nested "^6.0.1"
     postcss-selector-parser "^6.0.11"
-    postcss-value-parser "^4.2.0"
     resolve "^1.22.2"
     sucrase "^3.32.0"
 
@@ -2391,14 +2397,14 @@ utrie@^1.0.2:
   dependencies:
     base64-arraybuffer "^1.0.2"
 
-vite@^4.3.9:
-  version "4.3.9"
-  resolved "http://47.110.251.215:9000/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d"
-  integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==
+vite@^4.4.6:
+  version "4.4.6"
+  resolved "http://47.110.251.215:9000/vite/-/vite-4.4.6.tgz#97a0a43868ec773fd88980d7c323c80233521cf1"
+  integrity sha512-EY6Mm8vJ++S3D4tNAckaZfw3JwG3wa794Vt70M6cNJ6NxT87yhq7EC8Rcap3ahyHdo8AhCmV9PTk+vG1HiYn1A==
   dependencies:
-    esbuild "^0.17.5"
-    postcss "^8.4.23"
-    rollup "^3.21.0"
+    esbuild "^0.18.10"
+    postcss "^8.4.26"
+    rollup "^3.25.2"
   optionalDependencies:
     fsevents "~2.3.2"
 
@@ -2420,10 +2426,10 @@ vue-eslint-parser@^9.3.0:
     lodash "^4.17.21"
     semver "^7.3.6"
 
-vue-router@^4.2.3:
-  version "4.2.3"
-  resolved "http://47.110.251.215:9000/vue-router/-/vue-router-4.2.3.tgz#b1680efaea1bf8c45094bd504f4db49ef5b6e8b4"
-  integrity sha512-ynQ/edCZNUC/9koONOSgxGJbEBXZ1nUA0lKI3xTiOd3Ywe4QRCf2q8pGCG1v5ovdzPggoq3M09FxNCZTM9pZfw==
+vue-router@^4.2.4:
+  version "4.2.4"
+  resolved "http://47.110.251.215:9000/vue-router/-/vue-router-4.2.4.tgz#382467a7e2923e6a85f015d081e1508052c191b9"
+  integrity sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==
   dependencies:
     "@vue/devtools-api" "^6.5.0"
 
@@ -2493,9 +2499,9 @@ zip-stream@^4.1.0:
     compress-commons "^4.1.0"
     readable-stream "^3.6.0"
 
-zrender@5.4.3:
-  version "5.4.3"
-  resolved "http://47.110.251.215:9000/zrender/-/zrender-5.4.3.tgz#41ffaf835f3a3210224abd9d6964b48ff01e79f5"
-  integrity sha512-DRUM4ZLnoaT0PBVvGBDO9oWIDBKFdAVieNWxWwK0niYzJCMwGchRk21/hsE+RKkIveH3XHCyvXcJDkgLVvfizQ==
+zrender@5.4.4:
+  version "5.4.4"
+  resolved "http://47.110.251.215:9000/zrender/-/zrender-5.4.4.tgz#8854f1d95ecc82cf8912f5a11f86657cb8c9e261"
+  integrity sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==
   dependencies:
     tslib "2.3.0"

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно