Browse Source

新主题,先不要发版

ZaiZai 1 year ago
parent
commit
8fb981754e

+ 51 - 52
src/global/components/hc-report-modal/index.vue

@@ -1,16 +1,16 @@
 <template>
-    <el-dialog v-model="isShow" :title="title" :width="widths" class="hc-modal-border" draggable destroy-on-close append-to-body @closed="cancelReportClick">
+    <hc-new-dialog v-model="isShow" :title="title" :widths="widths" @close="cancelReportClick">
         <el-form ref="formRef" :model="formModel" :rules="formRules" label-width="auto" size="large">
             <el-form-item label="任务名称" prop="taskName">
-                <el-input v-model="formModel.taskName" disabled/>
+                <el-input v-model="formModel.taskName" disabled />
             </el-form-item>
             <el-form-item label="验收日期" prop="date">
-                <el-date-picker type="date" v-model="formModel.date" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                <el-date-picker v-model="formModel.date" type="date" class="block" value-format="YYYY-MM-DD" :clearable="false" />
             </el-form-item>
-            <el-form-item label="申请内容" v-if="isDatas && reportDatas.length > 0">
+            <el-form-item v-if="isDatas && reportDatas.length > 0" label="申请内容">
                 <div class="task-tag-data-box">
-                    <template v-for="(item,index) in reportDatas" :key="item.id">
-                        <el-tag type="info" size="default" closable @close="taskTagClose(index)">{{item.name}}</el-tag>
+                    <template v-for="(item, index) in reportDatas" :key="item.id">
+                        <el-tag type="info" size="default" closable @close="taskTagClose(index)">{{ item.name }}</el-tag>
                     </template>
                 </div>
             </el-form-item>
@@ -18,94 +18,95 @@
                 <HcFormItemUpload
                     v-model="formModel.pdfUrl"
                     accept="application/pdf,.doc,.docx,application/msword"
-                    formatTip="PDF、Word格式文件"
+                    format-tip="PDF、Word格式文件"
                 />
             </el-form-item>
             <el-form-item label="验收专家信息" prop="experts">
-                <HcReportExperts v-model="formModel.experts"/>
+                <HcReportExperts v-model="formModel.experts" />
             </el-form-item>
             <el-form-item label="申请说明">
-                <el-input type="textarea" v-model="formModel.taskContent" placeholder="请输入申请说明" :autosize="{ minRows: 3, maxRows: 5 }"/>
+                <el-input v-model="formModel.taskContent" type="textarea" placeholder="请输入申请说明" :autosize="{ minRows: 3, maxRows: 5 }" />
             </el-form-item>
             <el-form-item label="任务流程" prop="fixedFlowId">
                 <el-select v-model="formModel.fixedFlowId" block @change="handleProcessValue">
-                    <el-option v-for="item in processData" :label="item.fixedFlowName" :disabled="item.disabled" :value="item.id"/>
+                    <el-option v-for="item in processData" :label="item.fixedFlowName" :disabled="item.disabled" :value="item.id" />
                 </el-select>
             </el-form-item>
-            <el-form-item label="任务人" prop="userTasks" v-if="diyProcessUser">
-                <HcTasksUser ui="w-full" :projectId="projectId" :contractId="contractId" @change="diyProcessUserChange"/>
+            <el-form-item v-if="diyProcessUser" label="任务人" prop="userTasks">
+                <HcTasksUser ui="w-full" :project-id="projectId" :contract-id="contractId" @change="diyProcessUserChange" />
             </el-form-item>
-            <el-form-item label="任务人" v-else>
-                <div class="form-item-div">{{linkUserJoinString}}</div>
+            <el-form-item v-else label="任务人">
+                <div class="form-item-div">{{ linkUserJoinString }}</div>
             </el-form-item>
         </el-form>
         <template #footer>
             <div class="dialog-footer">
                 <el-button size="large" @click="cancelReportClick">
-                    <HcIcon name="close"/>
+                    <HcIcon name="close" />
                     <span>取消</span>
                 </el-button>
                 <el-button type="primary" hc-btn :loading="formReportLoading" @click="formReportClick">
-                    <HcIcon name="check"/>
+                    <HcIcon name="check" />
                     <span>提交</span>
                 </el-button>
             </div>
         </template>
-    </el-dialog>
+    </hc-new-dialog>
 </template>
 
 <script setup>
-import {ref,watch,onMounted} from "vue";
-import tasksFlowApi from '~api/tasks/flow';
-import {formValidate, getArrValue, arrIndex} from "js-fast-way"
+import { onMounted, ref, watch } from 'vue'
+import tasksFlowApi from '~api/tasks/flow'
+import { arrIndex, formValidate, getArrValue } from 'js-fast-way'
 
 const props = defineProps({
     show: {
         type: Boolean,
-        default: false
+        default: false,
     },
     title: {
         type: String,
-        default: '上报审批'
+        default: '上报审批',
     },
     widths: {
         type: String,
-        default: '47rem'
+        default: '47rem',
     },
     taskName: {
         type: String,
-        default: ''
+        default: '',
     },
     ids: {
         type: String,
-        default: null
+        default: null,
     },
     projectId: {
-        type: [String,Number],
-        default: ''
+        type: [String, Number],
+        default: '',
     },
     contractId: {
-        type: [String,Number],
-        default: ''
+        type: [String, Number],
+        default: '',
     },
     url: {
-        type: [String,Number],
-        default: ''
+        type: [String, Number],
+        default: '',
     },
     datas: {
         type: Array,
-        default: () => ([])
+        default: () => ([]),
     },
     isDatas: {
         type: Boolean,
-        default: false
+        default: false,
     },
     addition: {
         type: Object,
-        default: () => ({})
+        default: () => ({}),
     },
 })
 
+const emit = defineEmits(['hide', 'finish', 'tagClose'])
 //变量
 const isShow = ref(props.show)
 const projectId = ref(props.projectId)
@@ -118,29 +119,29 @@ const formRef = ref(null)
 const processData = ref([])
 const formModel = ref({
     projectId: projectId.value, contractId: contractId.value, ids: props.ids, experts: [],
-    userTasks: null, taskName: props.taskName, fixedFlowId: '', ...props.addition
+    userTasks: null, taskName: props.taskName, fixedFlowId: '', ...props.addition,
 })
 const formRules = ref({
     date: {
         required: true,
-        trigger: "blur",
-        message: "请选择验收日期"
+        trigger: 'blur',
+        message: '请选择验收日期',
     },
     experts: {
         required: true,
-        trigger: "blur",
-        message: "请完善专家信息"
+        trigger: 'blur',
+        message: '请完善专家信息',
     },
     fixedFlowId: {
         required: true,
-        trigger: "blur",
-        message: "请选择任务流程"
+        trigger: 'blur',
+        message: '请选择任务流程',
     },
     userTasks: {
         required: true,
-        trigger: "blur",
-        message: "请选择任务人"
-    }
+        trigger: 'blur',
+        message: '请选择任务人',
+    },
 })
 
 //监听
@@ -152,8 +153,8 @@ watch(() => [
     props.ids,
     props.url,
     props.addition,
-    props.datas
-], ([val,pid,cid,name,ids,url,addition, datas]) => {
+    props.datas,
+], ([val, pid, cid, name, ids, url, addition, datas]) => {
     isShow.value = val
     projectId.value = pid
     contractId.value = cid
@@ -162,7 +163,7 @@ watch(() => [
     formModel.value = {
         projectId: pid, contractId: cid, ids: ids, taskName: name,
         taskContent: '', fixedFlowId: '', experts: [],
-        ...addition
+        ...addition,
     }
     reportDatas.value = datas
     if (val) {
@@ -175,7 +176,7 @@ onMounted(() => {
     getProcessDatasApi()
 })
 
-const processDefaultData = [{ id: 0, fixedFlowName: '自定义流程', disabled: false}]
+const processDefaultData = [{ id: 0, fixedFlowName: '自定义流程', disabled: false }]
 const getProcessDatasApi = () => {
     if (isShow.value) {
         getProcessData()
@@ -189,7 +190,7 @@ const getProcessData = async () => {
     const { error, code, data } = await tasksFlowApi.getPageData({
         projectId: projectId.value,
         contractId: contractId.value,
-        current: 1, size: 100
+        current: 1, size: 100,
     })
     if (!error && code === 200) {
         const arr = getArrValue(data['records'])
@@ -218,8 +219,6 @@ const diyProcessUserChange = (user) => {
     formModel.value.userTasks = user
 }
 
-const emit = defineEmits(['hide','finish', 'tagClose'])
-
 //审批内容的标签移除
 const taskTagClose = (index) => {
     reportDatas.value.splice(index, 1)
@@ -266,7 +265,7 @@ const batchApprovalApi = async () => {
 }
 </script>
 
-<style lang="scss" >
+<style lang="scss">
 .task-tag-data-box {
     position: relative;
     border: 1px solid #e0e0e6;

+ 15 - 0
src/styles/app/theme.scss

@@ -399,4 +399,19 @@ html.dark {
     .el-table[hc].new .el-table-fixed-column--left.el-table__cell, .el-table[hc].new .el-table-fixed-column--right.el-table__cell {
         background: transparent !important;
     }
+    //步进器
+    .hc-counter-box .counter-box {
+        color: white;
+        .counter-btn {
+            background-color: var(--el-color-primary);
+            border-color: var(--el-color-primary-light-5);
+        }
+        .counter-btn[disabled=true] {
+            background-color: var(--el-color-primary-dark-2);
+            color: #888888;
+        }
+        .counter-val {
+            border-color: var(--el-color-primary-light-5);
+        }
+    }
 }

+ 0 - 1720
src/views/file/collection_aa.vue

@@ -1,1720 +0,0 @@
-<template>
-    <div class="hc-page-layout-box hc-file-collection">
-        <div class="hc-layout-left-box" :style="`width:${leftWidth}px;`">
-            <div class="hc-project-box">
-                <div class="hc-project-icon-box">
-                    <HcIcon name="stack" />
-                </div>
-                <div class="ml-2 project-name-box">
-                    <span class="text-xl text-cut project-alias">{{ projectInfo.projectAlias }}</span>
-                    <div class="text-xs text-cut project-name">
-                        {{ projectInfo.name }}
-                    </div>
-                </div>
-            </div>
-            <div v-loading="treeLoading" class="hc-tree-box" element-loading-text="加载中...">
-                <el-scrollbar>
-                    <HcTree
-                        ref="treeRef"
-                        :project-id="projectId"
-                        :contract-id="contractId"
-                        :auto-expand-keys="treeAutoExpandKeys"
-                        :menus="ElTreeMenu"
-                        @nodeTap="projectTreeClick"
-                        @nodeLoading="treeNodeLoading"
-                        @menuTap="ElTreeMenuClick"
-                    />
-                </el-scrollbar>
-            </div>
-            <!-- 左右拖动 -->
-            <div class="horizontal-drag-line" @mousedown="onmousedown" />
-        </div>
-        <div class="hc-page-content-box">
-            <HcCard>
-                <template #header>
-                    <HcTooltip keys="file_collection_btn_upload_scanned_files">
-                        <el-button type="primary" hc-btn @click="uploadModalClick">
-                            <HcIcon name="qr-scan" />
-                            <span>上传扫描文件</span>
-                        </el-button>
-                    </HcTooltip>
-                    <HcTooltip keys="file_collection_btn_sorting">
-                        <el-button type="primary" hc-btn @click="sortingClick">
-                            <HcIcon name="archive" />
-                            <span>分盒整理</span>
-                        </el-button>
-                    </HcTooltip>
-                    <HcTooltip keys="file_collection_btn_download">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0">
-                            <HcIcon name="download" />
-                            <span>下载</span>
-                        </el-button>
-                    </HcTooltip>
-                    <HcTooltip keys="file_collection_btn_certified">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="certificationModalClick">
-                            <HcIcon name="vip-diamond" />
-                            <span>认证</span>
-                        </el-button>
-                    </HcTooltip>
-                    <HcTooltip keys="file_collection_btn_report">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="reportModalClick">
-                            <HcIcon name="send-plane-2" />
-                            <span>上报</span>
-                        </el-button>
-                    </HcTooltip>
-                    <HcTooltip keys="file_collection_btn_edit">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="batchEditClick">
-                            <HcIcon name="edit" />
-                            <span>编辑</span>
-                        </el-button>
-                    </HcTooltip>
-                    <HcTooltip keys="file_collection_btn_repeal">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="repealModalClick">
-                            <HcIcon name="delete-back-2" />
-                            <span>废除</span>
-                        </el-button>
-                    </HcTooltip>
-                    <HcTooltip keys="file_collection_btn_del">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="delModalClick">
-                            <HcIcon name="delete-bin" />
-                            <span>删除</span>
-                        </el-button>
-                    </HcTooltip>
-                </template>
-                <template #extra>
-                    <HcTooltip keys="file_collection_btn_moves">
-                        <el-button hc-btn @click="movesClick">
-                            <HcIcon type="primary" name="arrow-left-right" />
-                            <span>跨目录移动</span>
-                        </el-button>
-                    </HcTooltip>
-                </template>
-                <template #search>
-                    <div class="w-40">
-                        <el-select v-model="searchForm.isApprovalValue" placeholder="审批状态" clearable>
-                            <el-option v-for="item in approvalStatus" :key="item.value" :label="item.label" :value="item.value" />
-                        </el-select>
-                    </div>
-                    <div class="w-40 ml-2">
-                        <el-select v-model="searchForm.isCertificationValue" placeholder="认证状态" clearable>
-                            <el-option v-for="item in certifiedStatus" :key="item.value" :label="item.label" :value="item.value" />
-                        </el-select>
-                    </div>
-                    <div class="w-64 ml-2">
-                        <el-input v-model="searchForm.queryValue" placeholder="请输入名称关键词检索" clearable @keyup="keyUpEvent" />
-                    </div>
-                    <div class="ml-2">
-                        <el-button type="primary" @click="searchClick">
-                            <HcIcon name="search-2" />
-                            <span>搜索</span>
-                        </el-button>
-                    </div>
-                </template>
-                <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" is-check @selection-change="tableSelection">
-                    <template #table-column-header-num>
-                        <HcTooltip keys="file_collection_btn_sort">
-                            <span class="text-link text-lg" @click="tableSortClick">
-                                <HcIcon name="arrow-up-down" />
-                            </span>
-                        </HcTooltip>
-                    </template>
-                    <template #fileName="{ row }">
-                        <span class="text-link" @click="tableRowName(row)">{{ row?.fileName }}</span>
-                    </template>
-                    <template #sourceType="{ row }">
-                        <span>{{ row?.sourceType === 1 ? '原生' : '数字化' }}</span>
-                    </template>
-                </HcTable>
-                <template #action>
-                    <HcPages :pages="searchForm" @change="pageChange" />
-                </template>
-            </HcCard>
-        </div>
-
-        <!-- 预组卷整理 -->
-        <HcDialog :show="sortingModal" title="预组卷整理" widths="850px" is-table is-row-footer @close="sortingModalClose">
-            <div class="hc-sorting-modal-collapse">
-                <el-collapse v-model="sortingActiveKey">
-                    <template v-for="(item, index) in sortingItemData" :key="index">
-                        <el-collapse-item :id="`item-${index}`" :name="`item-${index}`" disabled>
-                            <template #title>
-                                <div class="hc-collapse-item-header">
-                                    <div class="item-index">
-                                        盒{{ index + 1 }}
-                                    </div>
-                                    <el-divider direction="vertical" />
-                                    <div class="item-input">
-                                        <el-input
-                                            v-model="item.boxName"
-                                            :class="item.isName ? 'is-error' : ''"
-                                            placeholder="请输入案卷题名"
-                                            @input="tableIsInput($event, item, 'isName')"
-                                            @change="tableIsInput($event, item, 'isName')"
-                                        />
-                                    </div>
-                                    <el-divider direction="vertical" />
-                                    <div class="item-action">
-                                        <el-button type="primary" @click="sortingSelectFile(item, index)">
-                                            选择文件
-                                        </el-button>
-                                        <el-button type="danger" @click="sortingDelData(item, index)">
-                                            删除
-                                        </el-button>
-                                    </div>
-                                </div>
-                            </template>
-                            <HcTable
-                                ref="sorTableRef" :column="sortingTableColumn" :datas="item.list" :loading="sortingTableLoading" is-check @selection-change="rows => sortingTableSelection(rows, item.list, index)"
-                                @single-select="singleCheck"
-                            >
-                                <template #name="{ row }">
-                                    <span class="text-link">{{ row?.fileName }}</span>
-                                </template>
-                            </HcTable>
-                        </el-collapse-item>
-                    </template>
-                </el-collapse>
-            </div>
-            <template #leftRowFooter>
-                <el-button type="primary" hc-btn @click="addSortingModalClick">
-                    <HcIcon name="add" />
-                    <span>添加分盒</span>
-                </el-button>
-            </template>
-            <template #rightRowFooter>
-                <el-button hc-btn @click="sortingModalClose">
-                    <HcIcon name="close" />
-                    <span>取消</span>
-                </el-button>
-                <el-button type="primary" hc-btn :loading="sortingModalLoading" @click="sortingModalSave">
-                    <HcIcon name="check" />
-                    <span>确认</span>
-                </el-button>
-            </template>
-        </HcDialog>
-
-        <!-- 预组卷整理 无数据 -->
-        <HcDialog :show="sortingNoneModal" title="预组卷整理" widths="850px" is-table is-row-footer @close="sortingNoneModalClose">
-            <div class="flex-center">
-                <i class="el-icon" data-v-029747aa="" style="font-size: 200px;color:#81b337;cursor: pointer;" @click="toSortingModal">
-                    <svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" data-v-029747aa="">
-                        <path fill="currentColor" d="M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm-38.4 409.6H326.4a38.4 38.4 0 1 0 0 76.8h147.2v147.2a38.4 38.4 0 0 0 76.8 0V550.4h147.2a38.4 38.4 0 0 0 0-76.8H550.4V326.4a38.4 38.4 0 1 0-76.8 0v147.2z" />
-                    </svg>
-                </i>
-                <span>添加分盒</span>
-            </div>
-        </HcDialog>
-
-        <!-- 跨目录移动 -->
-        <HcDialog :show="movesModal" title="跨目录移动" widths="990px" is-table :loading="movesModalLoading" @close="movesModalClose" @save="movesModalSave">
-            <div class="hc-moves-transfer-box">
-                <div class="hc-moves-transfer-panel">
-                    <div class="panel-header">
-                        <div class="panel-header-label">
-                            <el-checkbox v-model="movesCheckAll" class="size-xl space" :indeterminate="isIndeterminate" @change="handleCheckAllChange">
-                                选择需要迁移的文件
-                            </el-checkbox>
-                        </div>
-                        <div class="panel-header-extra">
-                            {{ checkedMoves.length }}/{{ fileDatasList.length }}
-                        </div>
-                    </div>
-                    <div class="panel-body">
-                        <el-scrollbar v-loading="fileDatasListLoading">
-                            <el-checkbox-group v-model="checkedMoves" @change="handleCheckedMovesChange">
-                                <!-- <div v-for="item in fileDatasList" :key="item.id" class="hc-file-checkbox">
-                                    <el-checkbox class="size-xl space" :label="item">
-                                        {{ item.fileName }}
-                                    </el-checkbox>
-                                </div> -->
-                                <recycle-scroller
-                                    class="virtual-list"
-                                    :buffer="1000"
-                                    :prerender="200"
-                                    style="height: 900px"
-                                    :item-size="110"
-                                    key-field="id"
-                                    :items="fileDatasList"
-                                >
-                                    <template #default="{ item, index }">
-                                        <div :key="index">
-                                            <el-checkbox class="size-xl space mt-5 " :label="item">
-                                                {{ item.fileName }}
-                                            </el-checkbox>
-                                        </div>
-                                    </template>
-                                </recycle-scroller>
-                            </el-checkbox-group>
-                        </el-scrollbar>
-                    </div>
-                </div>
-                <div class="hc-moves-transfer-buttons">
-                    <HcIcon type="primary" name="arrow-right-double" style="font-size: 22px;" />
-                </div>
-                <div class="hc-moves-transfer-panel">
-                    <div class="panel-header">
-                        选择移动目录
-                    </div>
-                    <div v-loading="treePanelLoading" class="panel-body">
-                        <el-scrollbar>
-                            <HcTree id-prefix="hc-tree-moves-" :project-id="projectId" :contract-id="contractId" is-radio :show-radio-fun="showRadioFun" :is-show-menu="false" @radioChange="radioChange" @nodeLoading="panelTreeLoading" />
-                        </el-scrollbar>
-                    </div>
-                </div>
-            </div>
-        </HcDialog>
-
-        <!-- 调整排序 -->
-        <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" 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>
-                    <template #action="{ index }">
-                        <span class="text-link text-xl" @click="upSortClick(index)">
-                            <HcIcon name="arrow-up" fill />
-                        </span>
-                        <span class="text-link text-xl ml-2" @click="downSortClick(index)">
-                            <HcIcon name="arrow-down" fill />
-                        </span>
-                    </template>
-                </HcTable>
-            </div>
-            <template #leftRowFooter>
-                <el-button hc-btn @click="sortModalClose">
-                    <HcIcon name="close" />
-                    <span>取消</span>
-                </el-button>
-                <el-button type="primary" hc-btn :loading="sortModalLoading" @click="sortModalSave">
-                    <HcIcon name="check" />
-                    <span>确认</span>
-                </el-button>
-            </template>
-            <template #rightRowFooter>
-                <HcPages :pages="sortSearchForm" :sizes="[10, 20, 50, 100, 200, 300, 400, 500, 600]" @change="sortPageChange" />
-            </template>
-        </HcDialog>
-
-        <!-- 新增编辑文件 -->
-        <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')"/> -->
-                    <el-input v-model="row.fileNumber" />
-                </template>
-                <template #fileName="{ row }">
-                    <el-input v-model="row.fileName" :class="row.isFileName ? 'is-error' : ''" @input="tableIsInput($event, row, 'isFileName')" />
-                </template>
-                <template #fileTime="{ row }">
-                    <el-date-picker v-model="row.fileTime" type="date" format="YYYYMMDD" value-format="YYYYMMDD" :clearable="false" />
-                    <!-- <el-input v-model="row.fileTime" :class="row['isFileTime'] ? 'is-error' : ''" @input="tableIsInput($event, row, 'isFileTime')"/> -->
-                </template>
-                <template v-if="isBuiltDrawing === 2" #sheetType="{ row }">
-                    <el-select v-model="row.sheetType">
-                        <el-option v-for="item in sheetType" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
-                    </el-select>
-                </template>
-                <template v-if="isBuiltDrawing === 2" #sheetSource="{ row }">
-                    <el-select v-model="row.sheetSource">
-                        <el-option v-for="item in sheetSourceType" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
-                    </el-select>
-                </template>
-                <template v-if="isBuiltDrawing === 2" #drawingNo="{ row }">
-                    <el-input v-model="row.drawingNo" />
-                </template>
-                <template v-if="isBuiltDrawing === 2" #citeChangeNumber="{ row }">
-                    <el-input v-model="row.citeChangeNumber" />
-                </template>
-                <template #isApproval="{ row }">
-                    <el-select v-model="row.isApproval">
-                        <el-option v-for="item in whetherData" :key="item.value" :label="item.label" :value="item.value" />
-                    </el-select>
-                </template>
-                <template #isNeedCertification="{ row }">
-                    <el-select v-model="row.isNeedCertification">
-                        <el-option v-for="item in whetherData" :key="item.value" :label="item.label" :value="item.value" />
-                    </el-select>
-                </template>
-                <template #dutyUser="{ row }">
-                    <el-input v-model="row.dutyUser" />
-                </template>
-                <template #isElement="{ row }">
-                    <el-select v-model="row.isElement">
-                        <el-option label="是" :value="1" />
-                        <el-option label="否" :value="0" />
-                    </el-select>
-                </template>
-                <template #action="{ row, index }">
-                    <!-- <HcFileUpload1 v-if="tableUploadType== 'edit'" @change="newUploadsChange($event, row)" style="display:inline-block"
-                                   @progress="newUploadsProgress($event, row)">
-                            <el-button :loading="row['newBtnLoading']" plain size="small" type="primary">替换</el-button>
-                    </HcFileUpload1> -->
-                    <HcUploadFile v-if="tableUploadType == 'edit'" ref="HcUploadFileRef" :options="UploadFileOptions" style="display:inline-block" @progress="HcUploadFileProgress" @success="newHcUploadFileSuccess($event, row)">
-                        <el-button :loading="row.newBtnLoading" plain size="small" type="primary">
-                            替换
-                        </el-button>
-                    </HcUploadFile>
-                    <el-button type="danger" plain size="small" :loading="row.delBtnLoading" class="ml-2" @click="delUploadData(row, index)">
-                        删除
-                    </el-button>
-                </template>
-            </HcTable>
-            <template #footer>
-                <div class="lr-dialog-footer">
-                    <div class="left flex items-center">
-                        <el-button v-if="tableUploadType == 'add'" type="primary" hc-btn @click="uploadFileClick">
-                            <HcIcon name="add-circle" />
-                            <span>新增上传</span>
-                        </el-button>
-                    </div>
-                    <div class="right">
-                        <el-button size="large" :disabled="uploadsLoading" @click="batchUploadCancel">
-                            <HcIcon name="close" />
-                            <span>取消</span>
-                        </el-button>
-                        <el-button type="primary" hc-btn :disabled="uploadsLoading" :loading="uploadSaveLoading" @click="batchUploadSave">
-                            <HcIcon name="save" />
-                            <span>提交保存</span>
-                        </el-button>
-                    </div>
-                </div>
-            </template>
-        </HcDialog>
-
-        <!-- 批量认证 -->
-        <el-dialog v-model="showCertificationModal" title="批量认证" width="80vw" class="hc-modal-border hc-modal-table">
-            <div class="hc-card-body-flex">
-                <div class="flex-table">
-                    <HcTable ui="hc-form-table" :column="CertColumns" :datas="CertData" @row-click="CertRowClick">
-                        <template #action="{ row, index }">
-                            <el-button type="primary" plain size="small" @click.stop="CertRowClick2(row)">
-                                预览
-                            </el-button>
-                        </template>
-                    </HcTable>
-                </div>
-                <div v-if="CertPdf" class="flex-iframe">
-                    <iframe allow="display-capture" width="100%" height="100%" frameborder="1" :src="CertPdf" />
-                </div>
-                <div v-else class="flex-iframe hc-no-table-form">
-                    <div class="table-form-no">
-                        <img :src="notableform" alt="">
-                        <div class="desc">
-                            暂无 PDF 数据
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <template #footer>
-                <div class="dialog-footer">
-                    <el-button size="large" @click="showCertificationModal = false">
-                        <HcIcon name="close" />
-                        <span>取消</span>
-                    </el-button>
-                    <el-button type="primary" hc-btn :loading="CertLoading" @click="CertClick">
-                        <HcIcon name="save" />
-                        <span>确认认证</span>
-                    </el-button>
-                </div>
-            </template>
-        </el-dialog>
-
-        <HcUploadFile ref="HcUploadFileRef" :options="UploadFileOptions" @progress="HcUploadFileProgress" @success="HcUploadFileSuccess" @finish="HcUploadFileFinish" />
-
-        <!-- 批量编辑 -->
-        <HcReport :show="isReport" :data="reportData" @finish="reportFinish" @hide="isReport = false" />
-    </div>
-</template>
-
-<script setup>
-import { useAppStore } from '~src/store'
-import { getStoreValue, setStoreValue } from '~src/utils/storage'
-import { nextTick, onMounted, ref, watch } from 'vue'
-import HcTree from '~src/components/tree/hc-tree.vue'
-import HcReport from './components/HcReport.vue'
-import notableform from '~src/assets/view/notableform.svg'
-import { rowsToId } from '~uti/tools'
-import { delMessageV2 } from '~com/message/index.js'
-import archiveFileApi from '~api/archiveFile/archiveFile'
-import tasksFlowApi from '~api/tasks/flow'
-import { arrKeySort, arrToId, deepClone, getArrValue, getObjVal } from 'js-fast-way'
-import { getTokenHeader } from '~src/api/request/header'
-import tasksApi from '~api/tasks/data'
-import ossApi from '~api/oss'
-
-//变量
-const useAppState = useAppStore()
-const projectId = ref(useAppState.getProjectId)
-const contractId = ref(useAppState.getContractId)
-const projectInfo = ref(useAppState.getProjectInfo)
-
-const isCollapse = ref(useAppState.getCollapse)
-const HcUploadFileRef = ref(null)
-
-//上传进度
-const uploadsLoading = ref(false)
-
-const treeRef = ref(null)
-
-//监听
-watch(() => [
-    useAppState.getCollapse,
-], ([Collapse]) => {
-    isCollapse.value = Collapse
-})
-
-//渲染完成
-onMounted(() => {
-    treeLoading.value = true
-    setTableColumns()
-})
-//设置树菜单数据
-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' },
-])
-//上传配置
-const UploadFileOptions = {
-    headers: getTokenHeader(),
-}
-
-const dutyUser = ref('')
-//设置责任者
-const setdutyUser = async ()=>{
-    const { error, code, data } = await archiveFileApi.getDutyUser({
-        contractId: treecontractId.value,
-        projectId:projectId.value,
-    })
-    if (!error && code === 200) {
-        if (data?.contractType === 1) {
-            dutyUser.value = data?.constructionUnitName || ''
-        } else if (data?.contractType === 2) {
-            dutyUser.value = data?.supervisionUnitName || ''
-        } else if (data?.contractType === 3) {
-            dutyUser.value = data?.contractorUnitName || ''
-        }
-    }
-}
-
-//打开文件选择框
-const uploadFileClick = () => {
-    HcUploadFileRef?.value?.cancelUpload()
-    HcUploadFileRef?.value.selectFile()
-}
-
-// 文件上传进度
-const HcUploadFileProgress = () => {
-    uploadsLoading.value = true
-}
-// 文件上传成功的回调
-const HcUploadFileSuccess = (res) => {
-    console.log('文件上传成功', res)
-    uploadsLoading.value = false
-    uploadsChange(res.id, res.resData)
-
-}
-//替换文件
-const newHcUploadFileSuccess = (res, row) => {
-    let item = res.resData
-    //更新数据
-    row.fileName = item?.originalName
-    row.ossFileName = item?.name || ''
-    row.fileUrl = item?.link || ''
-    row.pdfFileUrl = item?.pdfUrl || ''
-    row.filePage = item?.page || ''
-    row.isUpdateUrl = 1
-    uploadsLoading.value = false
-    nextTick(()=>{
-        HcUploadFileRef?.value.setModalShow(false)
-    })
-  
-
-
-}
-
-// 文件全部上传成功
-const HcUploadFileFinish = () => {
-    uploadsLoading.value = false
-    HcUploadFileRef?.value.setModalShow(false)
-}
-
-//树加载
-const treeLoading = ref(false)
-const treeNodeLoading = () => {
-    treeLoading.value = false
-}
-
-const treePanelLoading = ref(false)
-const panelTreeLoading = () => {
-    treePanelLoading.value = false
-}
-
-//审批状态
-const approvalStatus = ref([
-    { label: '未上报', value: '0' },
-    { label: '待审批', value: '1' },
-    { label: '已审批', value: '2' },
-])
-
-//认证状态
-const certifiedStatus = ref([
-    { label: '已认证', value: '1' },
-    { label: '未认证', value: '0' },
-])
-
-//搜索表单
-const searchForm = ref({
-    nodeIds:'',
-    approval: null, certified: null, queryValue: null,
-    current: 1, size: 20, total: 0,
-})
-
-//树相关的变量
-const isBuiltDrawing = ref(0)
-const isStorageNode = ref(0)
-const nodeIds = ref('')
-const treecontractId = ref('')
-//自动展开缓存
-const treeAutoExpandKeys = ref(getStoreValue('wbsTreeExpandKeys') || [])
-const projectTreeClick = ({ data, keys }) => {
-    setStoreValue('wbsTreeExpandKeys', keys)
-    treeAutoExpandKeys.value = keys || []
-    nodeIds.value = data.id || ''
-    isStorageNode.value = data['isStorageNode'] || 0
-    treecontractId.value = data?.contractId || ''
-
-    //设置搜索数据
-    searchForm.value.current = 1
-    searchForm.value.nodeIds = data.id || ''
-
-    sortSearchForm.value.nodeIds = data.id || ''
-    isBuiltDrawing.value = data.storageType
-    getTableData()
-}
-//树菜单被点击
-const ElTreeMenuClick = async ({ data, keys }) => {
-    setStoreValue('wbsTreeExpandKeys', keys)
-    treeAutoExpandKeys.value = keys || []
-    if (data?.extType === 2) {
-        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: 'refresh', label: '文件同步', key: 'fileSync' },
-            { icon: 'sort-asc', label: '排序', key: 'sort' },
-        ]
-    } 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' },
-        ]
-    }
-}
-//回车搜索
-const keyUpEvent = (e) => {
-    if (e.key === 'Enter') {
-        searchForm.value.current = 1
-        getTableData()
-    }
-}
-
-//搜索
-const searchClick = () => {
-    searchForm.value.current = 1
-    getTableData()
-}
-
-//分页被点击
-const pageChange = ({ current, size }) => {
-    searchForm.value.current = current
-    searchForm.value.size = size
-    getTableData()
-}
-
-//表格数据
-const tableRef = ref(null)
-const tableColumn = ref([])
-//设置表头
-const setTableColumns = () => {
-    if (isBuiltDrawing.value === 1) {
-        tableColumn.value = [
-            { key:'sourceType', name: '文件来源', width: 100 },
-            { key:'fileNumber', name: '文件编号', width: 100, autoWidth: true },
-            { key:'fileName', name: '文件名称' },
-            { key:'filePage', name: '文件页数', width: 120 },
-            { key:'sheetType', name: '图幅', width: 110 },
-            { key:'sheetSourceValue', name: '图表来源', width: 110 },
-            { key:'drawingNo', name: '图号', width: 110 },
-            { key:'citeChangeNumber', name: '引用变更令编号', width: 110 },
-            { key:'isCertificationValue', name: '认证状态', width: 100 },
-            { key:'isApprovalValue', name: '状态', width: 100 },
-            { key:'fileTime', name: '文件时间', width: 120, autoWidth: true },
-            { key:'dutyUser', name: '责任者', width: 140 },
-        ]
-        sheetTypeStatus()
-        sheetSourceStatus()
-    } else {
-        tableColumn.value = [
-            { key:'sourceType', name: '文件来源', width: 100 },
-            { key:'fileNumber', name: '文件编号', width: 100, autoWidth: true },
-            { key:'fileName', name: '文件名称' },
-            { key:'filePage', name: '文件页数', width: 100 },
-            { key:'isCertificationValue', name: '认证状态', width: 100 },
-            { key:'isApprovalValue', name: '状态', width: 100 },
-            { key:'fileTime', name: '文件时间', width: 120, autoWidth: true },
-            { key:'dutyUser', name: '责任者', width: 140 },
-        ]
-    }
-}
-const tableData = ref([])
-
-//获取数据
-const tableLoading = ref(false)
-const getTableData = async () => {
-    tableLoading.value = true
-    const { error, code, data } = await archiveFileApi.getarchiveFilePage({
-        ...searchForm.value,
-        projectId: projectId.value,
-        contractId: contractId.value,
-    })
-    tableLoading.value = false
-    if (!error && code === 200) {
-        tableData.value = getArrValue(data['records'])
-        searchForm.value.total = data['total'] || 0
-    } else {
-        tableData.value = []
-        searchForm.value.total = 0
-    }
-}
-
-//多选
-const tableCheckedKeys = ref([])
-const tableSelection = (rows) => {
-    tableCheckedKeys.value = rows
-}
-
-//分盒整理
-const sortingModal = ref(false)
-const sortingClick = async () => {
-    if (nodeIds.value && isStorageNode.value === 1) {
-        const { error, code, data } = await archiveFileApi.getBoxNameAndBoxNumber({
-            nodeId:nodeIds.value,
-        })
-        if (!error && code === 200) {
-            if (data.length > 0) {
-                sortingActiveKey.value = []
-                sortingModal.value = true
-                sortingItemData.value = getArrValue(data)
-                sortingOldData.value = deepClone(sortingItemData.value)
-            } else {
-                console.log(1111111)
-                sortingNoneModal.value = true
-            }
-        }
-
-    } else {
-        window?.$message?.warning('请先选择一个子节点')
-    }
-}
-
-const sortingNoneModal = ref(false)//无数据显示的弹窗
-const toSortingModal = ()=>{
-    sortingNoneModal.value = false
-    sortingActiveKey.value = []
-    sortingItemData.value = []
-    sortingModal.value = true
-}
-const sortingNoneModalClose = ()=>{
-    sortingNoneModal.value = false
-}
-
-const sortingItemData = ref([])
-const sortingOldData = ref([])//旧数据,用来对比是否修改名字
-
-//校验
-const tableIsInput = (val, row, key) => {
-    //检测是否改过案卷名字
-    if (key === 'isName') {
-        row.isChange = true
-    }
-    row[key] = !val
-}
-
-const sortingActiveKey = ref([])
-const tableIndex = ref('')
-const sortingSelectFile = (row, index) => {
-    tableIndex.value = index
-    const key = `item-${index}`
-    const indexNum = sortingActiveKey.value.indexOf(key)
-    if (indexNum > -1) {
-        sortingActiveKey.value.splice(indexNum, 1)
-    } else {
-        sortingActiveKey.value.push(key)
-        if (!(row.list && row.list.length > 0)) {
-            getSortingTableData(row, index)
-        }
-    }
-}
-
-//表格
-const sortingTableColumn = [
-    { key:'name', name: '文件名称' },
-]
-
-//获取数据
-const sortingTableLoading = ref(false)
-const getSortingTableData = async (row, index) => {
-    sortingTableLoading.value = true
-    tableindex.value = index
-    const { error, code, data } = await archiveFileApi.pageByBoxName({
-        size: 99999,
-        current: 1,
-        projectId: projectId.value,
-        contractId: contractId.value,
-        nodeIds:nodeIds.value,
-        boxName:row.boxName ? row.boxName : '',
-    })
-    sortingTableLoading.value = false
-    if (!error && code === 200) {
-        row.list = getArrValue(data['records'])
-        setTableCheck(row, index).then()
-    } else {
-        row.list = []
-    }
-}
-
-//表格ref
-const sorTableRef = ref([])
-const tableindex = ref('')
-//回显勾选
-const setTableCheck = async (row, index) => {
-    if (row.ids) {
-        const keys = row.ids.split(','), list = row.list
-        for (let i = 0; i < list.length; i++) {
-            const item = list[i]
-            if (keys.indexOf(item.id) > -1) {
-                item.checked = true
-                await nextTick()
-                console.log(sorTableRef.value[index], 'sorTableRef.value[index]')
-                sorTableRef.value[index].toggleRowSelection(item, true)
-            }
-        }
-    }
-}
-
-//多选
-const checkList = ref([])
-const arrfliter = ref([])
-const singleCheck = async ({ row })=>{
-  let isCheck = false
-    let checkrow = JSON.parse(JSON.stringify(row))
-    if (checkrow.checked === false || checkrow.checked === undefined) {
-        if ( checkList.value.length > 0) {
-            let arr = checkList.value.filter(e => e.id === checkrow.id)
-            if (arr.length > 0) {
-                window.$message.warning('多个盒子不能选择同一份文件')
-                await nextTick()
-                sorTableRef.value[tableindex.value].toggleRowSelection(row, false)
-                isCheck = true
-            } else {
-              isCheck = false
-                row.tableindex = tableindex.value
-                checkList.value.push(row)
-            }
-        } else {
-            row.tableindex = tableindex.value
-            checkList.value.push(row)
-        }
-    } else {
-        let arr = checkList.value.filter(e => e.id === checkrow.id)
-        if (isCheck === false && arr[0]?.checked === true || isCheck) {
-            arrfliter.value = checkList.value.filter(e => e.id !== checkrow.id)
-        } else {
-            arrfliter.value = checkList.value
-        }
-        let newarr = []
-        arrfliter.value.forEach((item)=>{
-            newarr.push(JSON.parse(JSON.stringify(item)))
-        })
-        checkList.value = newarr
-    }
-}
-
-const sortingTableSelection = (rows, list, index) => {
-    tableindex.value = index
-    if (list) {
-        list.forEach(element => {
-            element.checked = false
-        })
-    }
-    rows.forEach((element)=>{
-        element.checked = true
-    })
-}
-
-//删除
-const sortingDelData = (row, index) => {
-    sortingItemData.value.splice(index, 1)
-    console.log(checkList.value, 'checkList.value')
-    // checkList.value=[]
-    //过滤掉当前选择的文件
-    checkList.value = checkList.value.filter(e => e.tableindex !== index)
-    if (row.boxNumber) {
-        delMessageV2(async (action, instance, done) => {
-            if (action === 'confirm') {
-                instance.confirmButtonLoading = true
-                    const { error, code } = await archiveFileApi.removeAllocation({
-                        boxName: row.boxName,
-                        boxNumber:row.boxNumber,
-                    })
-                    if (!error && code === 200) {
-                        window.$message?.success('删除成功!')
-                        sortingClick()
-                    }
-                instance.confirmButtonLoading = false
-                done()
-            } else {
-                done()
-            }
-        })
-    }
-}
-
-//添加分盒
-const addSortingModalClick = () => {
-    console.log('添加分盒')
-    sortingItemData.value.push({
-        boxName: '',
-    })
-}
-
-//确认保存
-const sortingModalLoading = ref(false)
-const sortingModalSave = async () => {
-    sortingModalLoading.value = true
-    //检测案卷名是否重复
-    let nameRes = await checkNames()
-    //console.log(nameRes)
-    //return;
-    for (let i = 0; i < nameRes.length; i++) {
-        if (typeof nameRes[i].data == 'string') {
-            window.$message?.error(nameRes[i].data + ',案卷名重复')
-            sortingModalLoading.value = false
-            return
-        }
-    }
-
-    //组装数据
-    let rows = []
-    sortingItemData.value.forEach((item, index)=>{
-        let obj = {
-            ids:'',
-            boxName:item.boxName,
-            boxNumber:index + 1,
-        }
-        let list = []
-        if (item.list) {
-            item.list.forEach((item2)=>{
-                if (item2.checked) {
-                    list.push(item2.id)
-                }
-            })
-            obj.ids = list.join(',')
-        } else {
-            obj.ids = item.ids
-        }
-
-        rows.push(obj)
-    })
-    console.log(rows, 'rows')
-    if (rows[0]?.ids) {
-        const { error, code, data } = await archiveFileApi.allocation({
-            list: rows,
-        })
-        if (!error && code === 200) {
-            window.$message?.success('保存成功')
-            sortingModal.value = false
-        } else {
-            window.$message?.error('保存失败')
-        }
-    } else {
-        window.$message?.warning('空数据不能提交')
-
-    }
-    sortingModalLoading.value = false
-}
-
-const checkNames = () =>{
-    const arr = []
-    sortingItemData.value.forEach((item)=>{
-        if (item.boxNumber) {
-            if (item.isChange) {
-                //是否修改过
-                //对比旧的数据,是否相同
-                for (let i = 0; i < sortingOldData.value.length; i++) {
-                    if (sortingOldData.value[i].boxNumber == item.boxNumber) {
-                        if (sortingOldData.value[i].boxName != item.boxName) {
-                            arr.push(
-                                archiveFileApi.getIsBoxName({
-                                    boxName:item.boxName,
-                                }),
-                            )
-                        }
-                        return
-                    }
-                }
-            }
-        } else {
-            arr.push(
-                archiveFileApi.getIsBoxName({
-                    boxName:item.boxName,
-                }),
-            )
-        }
-    })
-    return Promise.all(arr)
-}
-
-//关闭
-const sortingModalClose = () => {
-    sortingModal.value = false
-}
-
-//删除
-const delModalClick = async () => {
-    const rows = tableCheckedKeys.value
-    if (rows.length <= 0) {
-        window.$message?.error('请选择需要删除的数据')
-    } else {
-        delMessageV2(async (action, instance, done) => {
-            if (action === 'confirm') {
-                instance.confirmButtonLoading = true
-                const keys = arrToId(rows)
-                const { error, code } = await archiveFileApi.removeFile({
-                    ids: keys,
-                })
-                if (!error && code === 200) {
-                    window.$message?.success('删除成功!')
-                    searchClick()
-                }
-                instance.confirmButtonLoading = false
-                done()
-            } else {
-                done()
-            }
-        })
-    }
-}
-//废除
-const repealModalClick = async () => {
-    const rows = tableCheckedKeys.value
-    if (rows.length <= 0) {
-        window.$message?.error('请选择需要废除的数据')
-    } else {
-        window?.$messageBox?.alert('请谨慎考虑后,确认是否需要废除?', '废除提醒', {
-            showCancelButton: true,
-            confirmButtonText: '确认废除',
-            cancelButtonText: '取消',
-            type: 'warning',
-            callback: async (action, instance, done) => {
-                if (action === 'confirm') {
-                    instance.confirmButtonLoading = true
-                    const keys = arrToId(rows)
-                    const { error, code } = await tasksFlowApi.batchRepealTaskArchive({
-                        ids: keys,
-                        type:1,
-                    })
-                    if (!error && code === 200) {
-                        window.$message?.success('废除成功!')
-                        searchClick()
-                    }
-                    instance.confirmButtonLoading = false
-                    done()
-                } else {
-                done()
-                }
-            },
-        })
-    }
-}
-
-
-//跨目录移动
-const movesModal = ref(false)
-const movesClick = async () => {
-    movesModal.value = true
-    checkedMoves.value = []
-    movesCheckAll.value = false
-    treePanelLoading.value = true
-    fileDatasListLoading.value = true
-    const { error, code, data } = await archiveFileApi.getarchiveFilePage({
-        ...searchForm.value,
-        size:9999,
-        projectId: projectId.value,
-        contractId: contractId.value,
-    })
-    fileDatasListLoading.value = false
-    if (!error && code === 200) {
-        fileDatasList.value = getArrValue(data['records'])
-    } else {
-        fileDatasList.value = []
-    }
-}
-
-//选择需要迁移的文件
-const movesCheckAll = ref(false)
-const isIndeterminate = ref(true)
-const checkedMoves = ref([])
-
-//左侧待迁移文件
-const fileDatasList = ref([])
-const fileDatasListLoading = ref(false)
-//全选
-const handleCheckAllChange = (val) => {
-    console.log(val, 'val')
-    const checked = fileDatasList.value
-    checkedMoves.value = val ? checked : []
-    isIndeterminate.value = false
-}
-
-//勾选
-const handleCheckedMovesChange = (value) => {
-    const keys = fileDatasList.value
-    const checkedCount = value.length
-    movesCheckAll.value = checkedCount === keys.length
-    isIndeterminate.value = checkedCount > 0 && checkedCount < keys.length
-}
-
-//右侧radio
-let radioNodeId = ''
-const radioChange = (id)=>{
-    //console.log(id)
-    radioNodeId = id
-}
-
-//只显示储存节点的单选
-const showRadioFun = (data)=>{
-    if (data.isStorageNode == 1) {
-        return true
-    } else {
-        return false
-    }
-}
-
-//保存
-const movesModalLoading = ref(false)
-const movesModalSave = async () => {
-    const keys = rowsToId(checkedMoves.value)
-    let ids = keys
-    if (checkedMoves.value.length < 1) {
-        window.$message?.warning('请勾选需要迁移的文件')
-        return
-    }
-    if (radioNodeId == '') {
-        window.$message?.warning('请选择要移动到的节点')
-        return
-    }
-    movesModalLoading.value = true
-    const { error, code, data } = await archiveFileApi.migrateFile({
-        ids:ids,
-        nodeId:radioNodeId,
-    })
-    movesModalLoading.value = false
-    if (!error && code === 200) {
-        window.$message?.success('保存成功')
-        movesModal.value = false
-        getTableData()
-    } else {
-        window.$message?.error('保存失败')
-    }
-
-}
-
-//关闭
-const movesModalClose = () => {
-    movesModal.value = false
-}
-
-
-//表格排序
-const sortModal = ref(false)
-//显示
-const tableSortClick = () => {
-    sortModal.value = true
-    getSortTableData()
-}
-
-//搜索表单
-const sortSearchForm = ref({
-    nodeIds:'',
-    current: 1, size: 20, total: 0,
-})
-
-//分页被点击
-const sortPageChange = ({ current, size }) => {
-    sortSearchForm.value.current = current
-    sortSearchForm.value.size = size
-    getSortTableData()
-}
-
-//表格数据
-const sortTableColumn = ref([
-    { key:'fileNumber', name: '文件编号', width: 160 },
-    { key:'fileName', name: '文件名称' },
-    { key:'action', name: '排序', width: 90 },
-])
-const sortTableData = ref([])
-
-const sortTableLoading = ref(false)
-const getSortTableData = async () => {
-    sortTableLoading.value = true
-    const { error, code, data } = await archiveFileApi.getarchiveFilePage({
-        ...sortSearchForm.value,
-        projectId: projectId.value,
-        contractId: contractId.value,
-    })
-    sortTableLoading.value = false
-    if (!error && code === 200) {
-        sortTableData.value = getArrValue(data['records'])
-        sortSearchForm.value.total = data['total'] || 0
-    } else {
-        sortTableData.value = []
-        sortSearchForm.value.total = 0
-    }
-}
-
-//拖动完成
-const sortTableRowDrop = (rows) => {
-    sortTableData.value = [] // 先清空,否则排序会异常
-    nextTick(() => {
-        sortTableData.value = rows
-    })
-}
-
-//向下
-const downSortClick = (index) => {
-    const indexs = index + 1
-    const data = sortTableData.value
-    if (indexs !== data.length) {
-        const tmp = data.splice(indexs, 1)
-        sortTableData.value.splice(index, 0, tmp[0])
-    } else {
-        window?.$message?.warning('已经处于置底,无法下移')
-    }
-}
-
-//向上
-const upSortClick = (index) => {
-    const data = sortTableData.value || []
-    if (index !== 0) {
-        const tmp = data.splice(index - 1, 1)
-        sortTableData.value.splice(index, 0, tmp[0])
-    } else {
-        window?.$message?.warning('已经处于置顶,无法上移')
-    }
-}
-
-//保存
-const sortModalLoading = ref(false)
-const sortModalSave = async () => {
-    await batchEditSaveApi(sortTableData.value)
-
-    sortModal.value = false
-}
-
-//关闭
-const sortModalClose = () => {
-    sortModal.value = false
-}
-
-
-//获取认证状态
-const certificationType = ref([])
-const certificationStatus = async () => {
-    const { error, code, data } = await tasksApi.queryTaskTypeStatus({
-        typeOrStatus: 'certification_status',
-    })
-    //处理数据
-    if (!error && code === 200) {
-        certificationType.value = getArrValue(data)
-    } else {
-        certificationType.value = []
-    }
-}
-
-//获取图幅类型
-const sheetType = ref([])
-const sheetTypeStatus = async () => {
-    console.log(1111111)
-    const { error, code, data } = await tasksApi.queryTaskTypeStatus({
-        typeOrStatus: 'sheet_type',
-    })
-    //处理数据
-    if (!error && code === 200) {
-        sheetType.value = getArrValue(data)
-    } else {
-        sheetType.value = []
-    }
-}
-
-//获取图表来源
-const sheetSourceType = ref([])
-const sheetSourceStatus = async () => {
-    const { error, code, data } = await tasksApi.queryTaskTypeStatus({
-        typeOrStatus: 'sheet_source',
-    })
-    //处理数据
-    if (!error && code === 200) {
-        sheetSourceType.value = getArrValue(data)
-    } else {
-        sheetSourceType.value = []
-    }
-}
-
-//新增文件
-const tableUploadType = ref('add')
-const showUploadModal = ref(false)
-const uploadModalClick = () => {
-    if (nodeIds.value && isStorageNode.value === 1) {
-        tableUploadType.value = 'add'
-        setTableUploadColumn()
-        uploadSaveLoading.value = false
-        tableUploadData.value = []
-        showUploadModal.value = true
-        setdutyUser()
-    } else {
-        window?.$message?.warning('请先选择一个子节点')
-    }
-}
-const uploadModalClose = ()=>{
-    batchUploadCancel()
-    //HcUploadFileRef?.value.cancel()
-    HcUploadFileRef?.value.setModalShow(false)
-}
-//设置文件表头
-const tableUploadColumn = ref([
-    { key:'fileNumber', name: '文件编号' },
-    { key:'fileName', name: '文件名称' },
-    { key:'fileTime', name: '文件时间' },
-    { key:'isApproval', name: '是否需要审批' },
-    { key:'isNeedCertification', name: '是否需要认证' },
-    { key:'dutyUser', name: '责任者' },
-    { key:'isElement', name: '是否四要素' },
-    { key:'action', name: '操作', width: 180 },
-])
-const setTableUploadColumn = () => {
-    if (isBuiltDrawing.value === 2) {
-        tableUploadColumn.value = [
-            { key:'fileNumber', name: '文件编号' },
-            { key:'fileName', name: '文件名称' },
-            { key:'fileTime', name: '文件时间' },
-            { key:'sheetType', name: '图幅' },
-            { key:'sheetSource', name: '图表来源' },
-            { key:'drawingNo', name: '图号' },
-            { key:'citeChangeNumber', name: '引用变更令编号' },
-            { key:'isApproval', name: '是否需要审批' },
-            { key:'isNeedCertification', name: '是否需要认证' },
-            { key:'dutyUser', name: '责任者' },
-            { key:'isElement', name: '是否四要素' },
-            { key:'action', name: '操作', width: 180 },
-        ]
-        sheetTypeStatus()
-        sheetSourceStatus()
-    } else {
-        tableUploadColumn.value = [
-            { key:'fileNumber', name: '文件编号' },
-            { key:'fileName', name: '文件名称' },
-            { key:'fileTime', name: '文件时间' },
-            { key:'isApproval', name: '是否需要审批' },
-            { key:'isNeedCertification', name: '是否需要认证' },
-            { key:'dutyUser', name: '责任者' },
-            { key:'isElement', name: '是否四要素' },
-            { key:'action', name: '操作', width: 180 },
-        ]
-    }
-}
-const tableUploadData = ref([])
-
-//上传的文件结果
-const uploadsChange = (fileId, item) => {
-    if (getObjVal(item)) {
-        let newArr = tableUploadData.value
-        const sheet = sheetType.value, source = sheetSourceType.value
-        let name = item['originalName'] || ''
-        let fileName = name.substring(0, name.lastIndexOf('.'))
-        newArr.push({
-            fileUploadId: fileId,
-            projectId: projectId.value,
-            contractId: contractId.value,
-            nodeId: nodeIds.value,
-            fileNumber: '',
-            fileName: fileName,
-            ossFileName: item?.name || '',
-            fileTime: null,
-            fileUrl: item?.link || '',
-            sheetType: sheet.length > 0 ? sheet[0]['dictKey'] || '' : '',
-            sheetSource: source.length > 0 ? source[0]['dictKey'] || '' : '',
-            drawingNo: '',
-            citeChangeNumber: '',
-            isApproval: 1,
-            isNeedCertification: 1,
-            dutyUser: dutyUser.value,
-            pdfFileUrl: item?.pdfUrl || '',
-            filePage: item?.page || '',
-            isElement: 0,
-            isUpdateUrl:0,
-            fileSize:item?.fileSize,
-        })
-        //tableUploadData.value = newArr
-        tableUploadData.value = arrKeySort(newArr, 'fileUploadId')
-    } else {
-        console.log(item)
-    }
-}
-
-//表单下拉数据
-const whetherData = ref([
-    { label: '不需要', value: 0 },
-    { label: '需要', value: 1 },
-])
-
-//表格数据排序
-const tableUploadRowSort = (arr) => {
-    tableUploadData.value = arr
-}
-
-//删除
-const delUploadData = async (row, index) => {
-    if (row['ossFileName']) {
-        row['delBtnLoading'] = true
-        await ossApi.removeFile({ fileName: row['ossFileName'] })
-        row['delBtnLoading'] = false
-        tableUploadData.value.splice(index, 1)
-    } else {
-        tableUploadData.value.splice(index, 1)
-    }
-}
-
-//批量上传保存
-const uploadSaveLoading = ref(false)
-const batchUploadSave = async () => {
-    const rows = tableUploadData.value
-    if (rows.length > 0) {
-        //验证表单数据
-        uploadSaveLoading.value = true
-        let isTableRows = false
-        for (let i = 0; i < rows.length; i++) {
-            // if (!rows[i]['fileNumber']) {
-            //     rows[i]['isFileNumber'] = true
-            //     isTableRows = true
-            // } else if (!rows[i]['fileName']) {
-            //     rows[i]['isFileName'] = true
-            //     isTableRows = true
-            // }
-
-            // if (!rows[i]['fileTime']) {
-            //     rows[i]['isFileTime'] = true
-            //     isTableRows = true
-            // }
-            // else
-            if (!rows[i]['fileName']) {
-                rows[i]['isFileName'] = true
-                isTableRows = true
-            }
-        }
-        //判断数据
-        if (isTableRows) {
-            uploadSaveLoading.value = false
-            window.$message?.warning('请先完善表单信息')
-        } else {
-            if (tableUploadType.value === 'add') {
-                await batchUploadSaveApi(rows)
-            } else {
-                await batchEditSaveApi(rows)
-            }
-        }
-    } else {
-        window.$message?.warning('请先上传文件')
-    }
-}
-
-//确认上传保存
-const batchUploadSaveApi = async (rows) => {
-    uploadSaveLoading.value = true
-    const { error, code } = await archiveFileApi.batchUploadSave({
-        list: rows,
-    }, false)
-    //判断状态
-    uploadSaveLoading.value = false
-    if (!error && code === 200) {
-        window.$message?.success('保存成功')
-        batchUploadCancel()
-        getTableData()
-    } else {
-        window.$message?.error('保存失败')
-    }
-}
-
-//取消上传
-const batchUploadCancel = () => {
-    tableUploadData.value = []
-    uploadSaveLoading.value = false
-    uploadsLoading.value = false
-    showUploadModal.value = false
-
-
-}
-//上传新文件
-// const newUploadsChange = ({fileList}, row) => {
-//     if (fileList.length > 0) {
-//         tableUploadType.value = 'edit'
-//         const item = fileList[0]
-//         const name = item['originalName'] || ''
-//         const fileName = name.substring(0, name.lastIndexOf("."))
-//         //更新数据
-//         row.fileName = fileName;
-//         row.ossFileName = item?.name || ''
-//         row.fileUrl = item?.link || ''
-//         row.pdfFileUrl = item?.pdfUrl || ''
-//         row.filePage = item?.page || ''
-//         row.isUpdateUrl=1
-//     }
-// }
-
-// const newUploadsProgress = (val, row) => {
-//     row.newBtnLoading = val
-// }
-//批量编辑
-const batchEditClick = () => {
-    const rows = deepClone(tableCheckedKeys.value)
-    //判断是否满足条件
-    const result = rows.every(({ status })=> {
-        return status !== 1 && status !== 2
-    })
-    //判断状态
-    if (result) {
-        tableUploadType.value = 'edit'
-        setTableUploadColumn()
-        uploadSaveLoading.value = false
-        tableUploadData.value = rows
-        showUploadModal.value = true
-    } else {
-        window.$message?.warning('已上报或已审批的文件不能编辑')
-    }
-}
-
-//确认编辑上传保存
-const batchEditSaveApi = async (rows) => {
-    uploadSaveLoading.value = true
-    const { error, code } = await archiveFileApi.batchUpdateSort({
-        list: rows,
-    }, false)
-    //判断状态
-    uploadSaveLoading.value = false
-    if (!error && code === 200) {
-        window.$message?.success('保存成功')
-        batchUploadCancel()
-        getTableData()
-    } else {
-        window.$message?.error('保存失败')
-    }
-}
-
-
-//批量认证
-const CertData = ref([])
-const CertIds = ref([])
-const CertPdf = ref('')
-const CertColumns = [
-    { key:'fileName', name: '文件名称' },
-    { key:'action', name: '操作', width: 100 },
-]
-
-//批量认证弹窗
-const showCertificationModal = ref(false)
-const certificationModalClick = () => {
-    const rows = tableCheckedKeys.value
-    CertData.value = rows
-    CertIds.value = rowsToId(rows)
-    CertPdf.value = rows[0]?.pdfFileUrl || ''
-    const result = rows.every(({ isCertification })=> {
-        return isCertification === 0
-    })
-    const result1 = rows.every(({ status })=> {
-        return status === 0 || status === 3
-    })//已上报不能认证
-    if (!result1) {
-        window.$message.warning('已上报的文件不能进行认证')
-    } else {
-        if (result) {
-            CertData.value = rows
-            CertIds.value = rowsToId(rows)
-            CertPdf.value = rows[0]?.pdfFileUrl || ''
-
-            showCertificationModal.value = true
-        } else {
-            window.$message?.warning('已认证的文件不能再认证')
-        }
-    }
-
- 
-}
-
-//认证行被点击
-const CertRowClick = ({ row }) => {
-    const pdfFileUrl = row?.pdfFileUrl || ''
-    if (CertPdf.value !== pdfFileUrl) {
-        CertPdf.value = pdfFileUrl
-    }
-}
-
-//认证预览被点击
-const CertRowClick2 = ({ pdfFileUrl }) => {
-    const pdfUrl = pdfFileUrl || ''
-    if (CertPdf.value !== pdfUrl) {
-        CertPdf.value = pdfUrl
-    }
-}
-
-//确认认证
-const CertLoading = ref(false)
-const CertClick = async () => {
-    CertLoading.value = true
-    const { error, code, msg } = await tasksFlowApi.batchCertification({
-        ids: CertIds.value,
-    }, false)
-    //判断状态
-    CertLoading.value = false
-    if (!error && code === 200) {
-        window.$message?.success('认证成功')
-        showCertificationModal.value = false
-        searchClick()
-    } else {
-        window.$message?.error(msg)
-    }
-}
-
-//名称被点击
-const tableRowName = (row) => {
-    console.log(row, 'row')
-    if (row?.isCertificationValue === '已认证' || row?.isApprovalValue === '已审批') {
-        if (row['eVisaFile']) {
-            window.open(row['eVisaFile'], '_blank')
-        } else if (row['pdfFileUrl']) {
-            window.open(row['pdfFileUrl'], '_blank')
-         
-        } else {
-            window.$message?.warning('文件不存在')
-        }
-    } else {
-        if (row['pdfFileUrl']) {
-            window.open(row['pdfFileUrl'], '_blank')
-        } else {
-            window.$message?.warning('文件不存在')
-        }
-    }
-
-  
-}
-
-//上报
-const isReport = ref(false)
-const reportData = ref([])
-const reportModalClick = () => {
-    reportData.value = []
-    const rows = tableCheckedKeys.value
-    //判断是否满足条件
-    const result = rows.every(({ status }) => {
-        return status === 0 || status === 3
-    })
-    const result1 = rows.every(({ isCertification }) => {
-        return isCertification === 1
-    })
-    if (result1) {
-        window.$message?.warning('已认证的文件不能进行上报')
-        return false
-    } else {
-        if (!result) {
-            window.$message?.warning('已上报的文件不能进行再次上报')
-            return false
-        }
-    }
-   
-    //展示上报弹窗
-    reportData.value = rows
-    isReport.value = true
-}
-
-//上报完成
-const reportFinish = () => {
-    searchClick()
-}
-
-
-//左右拖动,改变树形结构宽度
-const leftWidth = ref(382)
-const onmousedown = () => {
-    const leftNum = isCollapse.value ? 142 : 272
-    document.onmousemove = (ve) => {
-        let diffVal = ve.clientX - leftNum
-        if (diffVal >= 310 && diffVal <= 900) {
-            leftWidth.value = diffVal
-        }
-    }
-    document.onmouseup = () => {
-        document.onmousemove = null
-        document.onmouseup = null
-    }
-}
-</script>
-
-<style lang="scss" scoped>
-@import '~style/file/scoped/collection.scss';
-
-.flex-center{
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    height: 100%;
-    flex-direction: column;
-}
-</style>
-
-<style lang="scss">
-@import '~style/file/collection.scss';
-.panel-body .el-checkbox{
-    height: auto;
-
-}
-.panel-body .el-radio-group{
-    width: auto ;
-
-}
-.panel-body .el-checkbox.size-xl .el-checkbox__label, .el-radio.size-xl .el-radio__label {
-    // font-size: 16px;
-    // font-weight: 400;
-    // white-space: wrap;
-}
-.panel-body .el-checkbox.size-xl .el-checkbox__label {
-    font-size: 16px;
-    font-weight: 400;
-    white-space: wrap;
-}
-.user{
-    margin-top: 10px;
-    margin-bottom: 10px;
-}
-</style>

+ 9 - 16
src/views/file/components/HcReport.vue

@@ -1,8 +1,5 @@
 <template>
-    <el-dialog
-        v-model="isShow" title="批量上报" class="hc-modal-border" destroy-on-close draggable width="47rem"
-        append-to-body @closed="cancelReportClick"
-    >
+    <hc-new-dialog v-model="isShow" title="批量上报" widths="47rem" @close="cancelReportClick">
         <el-form ref="formRef" :model="formModel" :rules="formRules" label-width="auto" size="large">
             <el-form-item label="任务名称" prop="taskName">
                 <el-input v-model="formModel.taskName" disabled />
@@ -38,15 +35,11 @@
         </el-form>
         <template #footer>
             <div class="dialog-footer">
-                <el-button size="large" @click="cancelReportClick">
-                    取消
-                </el-button>
-                <el-button :loading="formReportLoading" hc-btn type="primary" @click="formReportClick">
-                    提交
-                </el-button>
+                <el-button @click="cancelReportClick">取消</el-button>
+                <el-button :loading="formReportLoading" hc-btn type="primary" @click="formReportClick">提交</el-button>
             </div>
         </template>
-    </el-dialog>
+    </hc-new-dialog>
 </template>
 
 <script setup>
@@ -85,9 +78,9 @@ watch(() => [
 ], ([pid, cid]) => {
     projectId.value = pid
     contractId.value = cid
-  
-  
-    
+
+
+
 })
 
 //监听
@@ -188,8 +181,8 @@ const cancelReportClick = () => {
     emit('hide', false)
     formModel.value.taskContent = ''
     formModel.value.fixedFlowId = ''
-  
-  
+
+
 }
 
 //上报