|
@@ -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>
|