|
@@ -11,12 +11,12 @@
|
|
|
<div class="content-wrapper">
|
|
<div class="content-wrapper">
|
|
|
<div class="tree-container">
|
|
<div class="tree-container">
|
|
|
<div class="tree-header">
|
|
<div class="tree-header">
|
|
|
- <el-button v-hasPermi="['document:folder:add']" type="primary" icon="Plus" size="small"
|
|
|
|
|
- @click="handleAddFolder">{{ t('document.document.button.newFolder') }}</el-button>
|
|
|
|
|
|
|
+ <el-button v-hasPermi="['document:folder:add']" type="primary" icon="Plus" size="small" @click="handleAddFolder">{{
|
|
|
|
|
+ t('document.document.button.newFolder')
|
|
|
|
|
+ }}</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
<el-scrollbar class="tree-scrollbar">
|
|
<el-scrollbar class="tree-scrollbar">
|
|
|
- <el-tree v-loading="loading" :data="treeData" :props="treeProps" node-key="id" default-expand-all
|
|
|
|
|
- :expand-on-click-node="false">
|
|
|
|
|
|
|
+ <el-tree v-loading="loading" :data="treeData" :props="treeProps" node-key="id" default-expand-all :expand-on-click-node="false">
|
|
|
<template #default="{ node, data }">
|
|
<template #default="{ node, data }">
|
|
|
<span class="custom-tree-node">
|
|
<span class="custom-tree-node">
|
|
|
<el-icon>
|
|
<el-icon>
|
|
@@ -47,12 +47,10 @@
|
|
|
<ArrowRight />
|
|
<ArrowRight />
|
|
|
</el-icon>
|
|
</el-icon>
|
|
|
</li>
|
|
</li>
|
|
|
- <li class="menu-item" v-hasPermi="['document:folder:edit']"
|
|
|
|
|
- @click="handleMenuItemClick('edit', currentMenuData)">
|
|
|
|
|
|
|
+ <li class="menu-item" v-hasPermi="['document:folder:edit']" @click="handleMenuItemClick('edit', currentMenuData)">
|
|
|
<span>{{ t('document.document.menu.edit') }}</span>
|
|
<span>{{ t('document.document.menu.edit') }}</span>
|
|
|
</li>
|
|
</li>
|
|
|
- <li class="menu-item" v-hasPermi="['document:folder:remove']"
|
|
|
|
|
- @click="handleMenuItemClick('delete', currentMenuData)">
|
|
|
|
|
|
|
+ <li class="menu-item" v-hasPermi="['document:folder:remove']" @click="handleMenuItemClick('delete', currentMenuData)">
|
|
|
<span>{{ t('document.document.menu.delete') }}</span>
|
|
<span>{{ t('document.document.menu.delete') }}</span>
|
|
|
</li>
|
|
</li>
|
|
|
</ul>
|
|
</ul>
|
|
@@ -73,8 +71,7 @@
|
|
|
<li class="menu-item" @click="handleMenuItemClick('add:0', currentMenuData)">
|
|
<li class="menu-item" @click="handleMenuItemClick('add:0', currentMenuData)">
|
|
|
<span>{{ t('document.document.menu.folder') }}</span>
|
|
<span>{{ t('document.document.menu.folder') }}</span>
|
|
|
</li>
|
|
</li>
|
|
|
- <li class="menu-item" v-hasPermi="['document:document:add']"
|
|
|
|
|
- @click="handleMenuItemClick('add:document', currentMenuData)">
|
|
|
|
|
|
|
+ <li class="menu-item" v-hasPermi="['document:document:add']" @click="handleMenuItemClick('add:document', currentMenuData)">
|
|
|
<span>{{ t('document.document.menu.document') }}</span>
|
|
<span>{{ t('document.document.menu.document') }}</span>
|
|
|
</li>
|
|
</li>
|
|
|
</template>
|
|
</template>
|
|
@@ -86,16 +83,17 @@
|
|
|
<!-- 搜索栏 -->
|
|
<!-- 搜索栏 -->
|
|
|
<el-form :model="documentQueryParams" :inline="true" class="search-form">
|
|
<el-form :model="documentQueryParams" :inline="true" class="search-form">
|
|
|
<el-form-item :label="t('document.document.documentList.fileName')">
|
|
<el-form-item :label="t('document.document.documentList.fileName')">
|
|
|
- <el-input v-model="documentQueryParams.name"
|
|
|
|
|
- :placeholder="t('document.document.documentList.fileNamePlaceholder')" clearable style="width: 240px"
|
|
|
|
|
- @keyup.enter="handleDocumentQuery" />
|
|
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-model="documentQueryParams.name"
|
|
|
|
|
+ :placeholder="t('document.document.documentList.fileNamePlaceholder')"
|
|
|
|
|
+ clearable
|
|
|
|
|
+ style="width: 240px"
|
|
|
|
|
+ @keyup.enter="handleDocumentQuery"
|
|
|
|
|
+ />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
<el-form-item>
|
|
|
- <el-button type="primary" icon="Search" @click="handleDocumentQuery">{{
|
|
|
|
|
- t('document.document.button.search')
|
|
|
|
|
- }}</el-button>
|
|
|
|
|
- <el-button icon="Refresh" @click="handleDocumentReset">{{ t('document.document.button.reset')
|
|
|
|
|
- }}</el-button>
|
|
|
|
|
|
|
+ <el-button type="primary" icon="Search" @click="handleDocumentQuery">{{ t('document.document.button.search') }}</el-button>
|
|
|
|
|
+ <el-button icon="Refresh" @click="handleDocumentReset">{{ t('document.document.button.reset') }}</el-button>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-form>
|
|
</el-form>
|
|
|
|
|
|
|
@@ -106,51 +104,63 @@
|
|
|
{{ scope.row.id }}
|
|
{{ scope.row.id }}
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column prop="name" :label="t('document.document.documentList.name')" min-width="150"
|
|
|
|
|
- show-overflow-tooltip />
|
|
|
|
|
- <el-table-column prop="specification" :label="t('document.document.documentList.specification')"
|
|
|
|
|
- min-width="120" show-overflow-tooltip />
|
|
|
|
|
- <el-table-column prop="planDocumentType" :label="t('document.document.documentList.planDocumentType')"
|
|
|
|
|
- width="120" align="center">
|
|
|
|
|
|
|
+ <el-table-column prop="name" :label="t('document.document.documentList.name')" min-width="150" show-overflow-tooltip />
|
|
|
|
|
+ <el-table-column
|
|
|
|
|
+ prop="specification"
|
|
|
|
|
+ :label="t('document.document.documentList.specification')"
|
|
|
|
|
+ min-width="120"
|
|
|
|
|
+ show-overflow-tooltip
|
|
|
|
|
+ >
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
- <dict-tag v-if="scope.row.planDocumentType" :options="plan_document_type"
|
|
|
|
|
- :value="scope.row.planDocumentType" />
|
|
|
|
|
|
|
+ <dict-tag v-if="scope.row.specification"
|
|
|
|
|
+ :options="specificationDict"
|
|
|
|
|
+ :value="scope.row.specification" />
|
|
|
<span v-else>-</span>
|
|
<span v-else>-</span>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column prop="status" :label="t('document.document.documentList.status')" width="120"
|
|
|
|
|
- align="center">
|
|
|
|
|
|
|
+ <el-table-column prop="planType" :label="t('document.document.documentList.planDocumentType')" width="120" align="center">
|
|
|
|
|
+ <template #default="scope">
|
|
|
|
|
+ <dict-tag v-if="scope.row.planType" :options="plan_document_type" :value="scope.row.planType" />
|
|
|
|
|
+ <span v-else>-</span>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+ <el-table-column prop="status" :label="t('document.document.documentList.status')" width="120" align="center">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<el-tag v-if="scope.row.status === 0" size="small" type="info">{{
|
|
<el-tag v-if="scope.row.status === 0" size="small" type="info">{{
|
|
|
- t('document.document.documentList.statusOptions.unUpload') }}</el-tag>
|
|
|
|
|
|
|
+ t('document.document.documentList.statusOptions.unUpload')
|
|
|
|
|
+ }}</el-tag>
|
|
|
<el-tag v-else-if="scope.row.status === 1" size="small" type="warning">{{
|
|
<el-tag v-else-if="scope.row.status === 1" size="small" type="warning">{{
|
|
|
- t('document.document.documentList.statusOptions.unAudit') }}</el-tag>
|
|
|
|
|
|
|
+ t('document.document.documentList.statusOptions.unAudit')
|
|
|
|
|
+ }}</el-tag>
|
|
|
<el-tag v-else-if="scope.row.status === 2" size="small" type="danger">{{
|
|
<el-tag v-else-if="scope.row.status === 2" size="small" type="danger">{{
|
|
|
- t('document.document.documentList.statusOptions.auditReject') }}</el-tag>
|
|
|
|
|
|
|
+ t('document.document.documentList.statusOptions.auditReject')
|
|
|
|
|
+ }}</el-tag>
|
|
|
<el-tag v-else-if="scope.row.status === 3" size="small" type="warning">{{
|
|
<el-tag v-else-if="scope.row.status === 3" size="small" type="warning">{{
|
|
|
- t('document.document.documentList.statusOptions.unFiling') }}</el-tag>
|
|
|
|
|
|
|
+ t('document.document.documentList.statusOptions.unFiling')
|
|
|
|
|
+ }}</el-tag>
|
|
|
<el-tag v-else-if="scope.row.status === 4" size="small" type="success">{{
|
|
<el-tag v-else-if="scope.row.status === 4" size="small" type="success">{{
|
|
|
- t('document.document.documentList.statusOptions.filing') }}</el-tag>
|
|
|
|
|
|
|
+ t('document.document.documentList.statusOptions.filing')
|
|
|
|
|
+ }}</el-tag>
|
|
|
<el-tag v-else-if="scope.row.status === 5" size="small" type="warning">{{
|
|
<el-tag v-else-if="scope.row.status === 5" size="small" type="warning">{{
|
|
|
- t('document.document.documentList.statusOptions.unQualityControl') }}</el-tag>
|
|
|
|
|
|
|
+ t('document.document.documentList.statusOptions.unQualityControl')
|
|
|
|
|
+ }}</el-tag>
|
|
|
<el-tag v-else-if="scope.row.status === 6" size="small" type="success">{{
|
|
<el-tag v-else-if="scope.row.status === 6" size="small" type="success">{{
|
|
|
- t('document.document.documentList.statusOptions.qualityControlPass') }}</el-tag>
|
|
|
|
|
|
|
+ t('document.document.documentList.statusOptions.qualityControlPass')
|
|
|
|
|
+ }}</el-tag>
|
|
|
<el-tag v-else-if="scope.row.status === 7" size="small" type="danger">{{
|
|
<el-tag v-else-if="scope.row.status === 7" size="small" type="danger">{{
|
|
|
- t('document.document.documentList.statusOptions.qualityControlReject') }}</el-tag>
|
|
|
|
|
|
|
+ t('document.document.documentList.statusOptions.qualityControlReject')
|
|
|
|
|
+ }}</el-tag>
|
|
|
<el-tag v-else size="small" type="default">-</el-tag>
|
|
<el-tag v-else size="small" type="default">-</el-tag>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column prop="submitter" :label="t('document.document.documentList.submitter')" width="120"
|
|
|
|
|
- align="center" />
|
|
|
|
|
- <el-table-column prop="submitDeadline" :label="t('document.document.documentList.submitDeadline')"
|
|
|
|
|
- width="110" align="center">
|
|
|
|
|
|
|
+ <el-table-column prop="submitter" :label="t('document.document.documentList.submitter')" width="120" align="center" />
|
|
|
|
|
+ <el-table-column prop="submitDeadline" :label="t('document.document.documentList.submitDeadline')" width="110" align="center">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<span v-if="scope.row.submitDeadline">{{ parseTime(scope.row.submitDeadline, '{y}-{m}-{d}') }}</span>
|
|
<span v-if="scope.row.submitDeadline">{{ parseTime(scope.row.submitDeadline, '{y}-{m}-{d}') }}</span>
|
|
|
<span v-else>-</span>
|
|
<span v-else>-</span>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column prop="submitTime" :label="t('document.document.documentList.submitTime')" width="160"
|
|
|
|
|
- align="center">
|
|
|
|
|
|
|
+ <el-table-column prop="submitTime" :label="t('document.document.documentList.submitTime')" width="160" align="center">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<span v-if="scope.row.submitTime">{{ parseTime(scope.row.submitTime) }}</span>
|
|
<span v-if="scope.row.submitTime">{{ parseTime(scope.row.submitTime) }}</span>
|
|
|
<span v-else>-</span>
|
|
<span v-else>-</span>
|
|
@@ -165,69 +175,109 @@
|
|
|
<span v-else>-</span>
|
|
<span v-else>-</span>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column prop="note" :label="t('document.document.documentList.note')" min-width="150"
|
|
|
|
|
- show-overflow-tooltip />
|
|
|
|
|
- <el-table-column prop="createTime" :label="t('document.document.documentList.createTime')" width="160"
|
|
|
|
|
- align="center">
|
|
|
|
|
|
|
+ <el-table-column prop="note" :label="t('document.document.documentList.note')" min-width="150" show-overflow-tooltip />
|
|
|
|
|
+ <el-table-column prop="createTime" :label="t('document.document.documentList.createTime')" width="160" align="center">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<span v-if="scope.row.createTime">{{ parseTime(scope.row.createTime) }}</span>
|
|
<span v-if="scope.row.createTime">{{ parseTime(scope.row.createTime) }}</span>
|
|
|
<span v-else>-</span>
|
|
<span v-else>-</span>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column prop="updateTime" :label="t('document.document.documentList.updateTime')" width="160"
|
|
|
|
|
- align="center">
|
|
|
|
|
|
|
+ <el-table-column prop="updateTime" :label="t('document.document.documentList.updateTime')" width="160" align="center">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<span v-if="scope.row.updateTime">{{ parseTime(scope.row.updateTime) }}</span>
|
|
<span v-if="scope.row.updateTime">{{ parseTime(scope.row.updateTime) }}</span>
|
|
|
<span v-else>-</span>
|
|
<span v-else>-</span>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
<!-- 操作列 -->
|
|
<!-- 操作列 -->
|
|
|
- <el-table-column :label="t('document.document.documentList.action')" width="200" align="center"
|
|
|
|
|
- fixed="right">
|
|
|
|
|
|
|
+ <el-table-column :label="t('document.document.documentList.action')" width="200" align="center" fixed="right">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<!-- 审核按钮 -->
|
|
<!-- 审核按钮 -->
|
|
|
- <el-button v-if="scope.row.url && scope.row.status === 1" v-hasPermi="['document:document:audit']"
|
|
|
|
|
- type="primary" link :icon="Select" @click="handleAuditClick(scope.row)"
|
|
|
|
|
- :title="t('document.document.button.audit')" />
|
|
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ v-if="scope.row.url && scope.row.status === 1"
|
|
|
|
|
+ v-hasPermi="['document:document:audit']"
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ link
|
|
|
|
|
+ :icon="Select"
|
|
|
|
|
+ @click="handleAuditClick(scope.row)"
|
|
|
|
|
+ :title="t('document.document.button.audit')"
|
|
|
|
|
+ />
|
|
|
|
|
|
|
|
<!-- 递交按钮 -->
|
|
<!-- 递交按钮 -->
|
|
|
<el-button
|
|
<el-button
|
|
|
v-if="(scope.row.status === 0 || scope.row.status === 2) && scope.row.submitterId === userStore.userId"
|
|
v-if="(scope.row.status === 0 || scope.row.status === 2) && scope.row.submitterId === userStore.userId"
|
|
|
- v-hasPermi="['document:document:submit']" type="primary" link :icon="Upload"
|
|
|
|
|
- @click="handleSubmit(scope.row)" :title="t('document.document.button.submit')" />
|
|
|
|
|
|
|
+ v-hasPermi="['document:document:submit']"
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ link
|
|
|
|
|
+ :icon="Upload"
|
|
|
|
|
+ @click="handleSubmit(scope.row)"
|
|
|
|
|
+ :title="t('document.document.button.submit')"
|
|
|
|
|
+ />
|
|
|
|
|
|
|
|
<!-- 确认递交按钮 -->
|
|
<!-- 确认递交按钮 -->
|
|
|
<el-button
|
|
<el-button
|
|
|
v-if="(scope.row.status === 0 || scope.row.status === 2) && scope.row.submitterId === userStore.userId"
|
|
v-if="(scope.row.status === 0 || scope.row.status === 2) && scope.row.submitterId === userStore.userId"
|
|
|
- v-hasPermi="['document:document:confirmSubmit']" type="primary" link icon="Delete"
|
|
|
|
|
- @click="handleConfirmSubmit(scope.row)" :title="t('document.document.button.confirmSubmit')" />
|
|
|
|
|
|
|
+ v-hasPermi="['document:document:confirmSubmit']"
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ link
|
|
|
|
|
+ icon="Delete"
|
|
|
|
|
+ @click="handleConfirmSubmit(scope.row)"
|
|
|
|
|
+ :title="t('document.document.button.confirmSubmit')"
|
|
|
|
|
+ />
|
|
|
|
|
|
|
|
<!-- 原有按钮 -->
|
|
<!-- 原有按钮 -->
|
|
|
- <el-button v-hasPermi="['document:document:mark']" type="primary" link icon="Flag"
|
|
|
|
|
- @click="handleMark(scope.row)" :title="t('document.document.button.mark')" />
|
|
|
|
|
- <el-button v-if="scope.row.url" type="primary" link icon="Download" @click="handleDownload(scope.row)"
|
|
|
|
|
- :title="t('document.document.button.download')" />
|
|
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ v-hasPermi="['document:document:mark']"
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ link
|
|
|
|
|
+ icon="Flag"
|
|
|
|
|
+ @click="handleMark(scope.row)"
|
|
|
|
|
+ :title="t('document.document.button.mark')"
|
|
|
|
|
+ />
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ v-if="scope.row.url"
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ link
|
|
|
|
|
+ icon="Download"
|
|
|
|
|
+ @click="handleDownload(scope.row)"
|
|
|
|
|
+ :title="t('document.document.button.download')"
|
|
|
|
|
+ />
|
|
|
|
|
|
|
|
<!-- 查看审核记录按钮 -->
|
|
<!-- 查看审核记录按钮 -->
|
|
|
- <el-button v-hasPermi="['document:document:logAudit']" type="primary" link icon="DocumentCopy"
|
|
|
|
|
- @click="handleViewAuditLog(scope.row)" :title="t('document.document.button.viewAuditLog')" />
|
|
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ v-hasPermi="['document:document:logAudit']"
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ link
|
|
|
|
|
+ icon="DocumentCopy"
|
|
|
|
|
+ @click="handleViewAuditLog(scope.row)"
|
|
|
|
|
+ :title="t('document.document.button.viewAuditLog')"
|
|
|
|
|
+ />
|
|
|
|
|
|
|
|
<!-- 归档按钮 -->
|
|
<!-- 归档按钮 -->
|
|
|
- <el-button v-if="scope.row.status === 3" v-hasPermi="['document:document:filing']" type="primary" link
|
|
|
|
|
- icon="UploadFilled" @click="handleArchive(scope.row)"
|
|
|
|
|
- :title="t('document.document.button.archive')" />
|
|
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ v-if="scope.row.status === 3"
|
|
|
|
|
+ v-hasPermi="['document:document:filing']"
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ link
|
|
|
|
|
+ icon="UploadFilled"
|
|
|
|
|
+ @click="handleArchive(scope.row)"
|
|
|
|
|
+ :title="t('document.document.button.archive')"
|
|
|
|
|
+ />
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
</el-table>
|
|
</el-table>
|
|
|
|
|
|
|
|
<!-- 分页 -->
|
|
<!-- 分页 -->
|
|
|
- <pagination v-show="documentTotal > 0" v-model:page="documentQueryParams.pageNum"
|
|
|
|
|
- v-model:limit="documentQueryParams.pageSize" :total="documentTotal" @pagination="getDocumentList" />
|
|
|
|
|
|
|
+ <pagination
|
|
|
|
|
+ v-show="documentTotal > 0"
|
|
|
|
|
+ v-model:page="documentQueryParams.pageNum"
|
|
|
|
|
+ v-model:limit="documentQueryParams.pageSize"
|
|
|
|
|
+ :total="documentTotal"
|
|
|
|
|
+ @pagination="getDocumentList"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<!-- 空状态 -->
|
|
<!-- 空状态 -->
|
|
|
- <el-empty v-else :description="t('document.document.empty.description')">
|
|
|
|
|
- </el-empty>
|
|
|
|
|
|
|
+ <el-empty v-else :description="t('document.document.empty.description')"> </el-empty>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-card>
|
|
</el-card>
|
|
@@ -243,20 +293,22 @@
|
|
|
<el-radio :label="false">{{ t('document.document.form.noRestriction') }}</el-radio>
|
|
<el-radio :label="false">{{ t('document.document.form.noRestriction') }}</el-radio>
|
|
|
<el-radio :label="true">{{ t('document.document.form.restricted') }}</el-radio>
|
|
<el-radio :label="true">{{ t('document.document.form.restricted') }}</el-radio>
|
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
|
- <el-input-number v-if="isRestricted" v-model="restrictionLevelValue" :min="0" :max="10000"
|
|
|
|
|
- style="width: 100%; margin-top: 10px;"
|
|
|
|
|
- :placeholder="t('document.document.form.restrictionLevelPlaceholder')" />
|
|
|
|
|
|
|
+ <el-input-number
|
|
|
|
|
+ v-if="isRestricted"
|
|
|
|
|
+ v-model="restrictionLevelValue"
|
|
|
|
|
+ :min="0"
|
|
|
|
|
+ :max="10000"
|
|
|
|
|
+ style="width: 100%; margin-top: 10px"
|
|
|
|
|
+ :placeholder="t('document.document.form.restrictionLevelPlaceholder')"
|
|
|
|
|
+ />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item :label="t('document.document.form.note')" prop="note">
|
|
<el-form-item :label="t('document.document.form.note')" prop="note">
|
|
|
- <el-input v-model="form.note" type="textarea" :rows="4"
|
|
|
|
|
- :placeholder="t('document.document.form.notePlaceholder')" />
|
|
|
|
|
|
|
+ <el-input v-model="form.note" type="textarea" :rows="4" :placeholder="t('document.document.form.notePlaceholder')" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-form>
|
|
</el-form>
|
|
|
<template #footer>
|
|
<template #footer>
|
|
|
<div class="dialog-footer">
|
|
<div class="dialog-footer">
|
|
|
- <el-button :loading="buttonLoading" type="primary" @click="submitFolderForm">{{
|
|
|
|
|
- t('document.document.button.submit')
|
|
|
|
|
- }}</el-button>
|
|
|
|
|
|
|
+ <el-button :loading="buttonLoading" type="primary" @click="submitFolderForm">{{ t('document.document.button.submit') }}</el-button>
|
|
|
<el-button @click="cancel">{{ t('document.document.button.cancel') }}</el-button>
|
|
<el-button @click="cancel">{{ t('document.document.button.cancel') }}</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
@@ -267,9 +319,9 @@
|
|
|
<el-form ref="documentFormRef" :model="documentForm" :rules="documentRules" label-width="140px">
|
|
<el-form ref="documentFormRef" :model="documentForm" :rules="documentRules" label-width="140px">
|
|
|
<el-form-item
|
|
<el-form-item
|
|
|
:label="documentForm.type === 1 ? t('document.document.documentForm.planName') : t('document.document.documentForm.name')"
|
|
:label="documentForm.type === 1 ? t('document.document.documentForm.planName') : t('document.document.documentForm.name')"
|
|
|
- prop="name">
|
|
|
|
|
- <el-input v-model="documentForm.name" :placeholder="t('document.document.documentForm.namePlaceholder')"
|
|
|
|
|
- clearable />
|
|
|
|
|
|
|
+ prop="name"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-input v-model="documentForm.name" :placeholder="t('document.document.documentForm.namePlaceholder')" clearable />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item :label="t('document.document.documentForm.type')" prop="type" v-if="hasAddPlanPermission">
|
|
<el-form-item :label="t('document.document.documentForm.type')" prop="type" v-if="hasAddPlanPermission">
|
|
@@ -279,26 +331,43 @@
|
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item v-if="documentForm.type === 1" :label="t('document.document.documentForm.submitter')"
|
|
|
|
|
- prop="submitterId">
|
|
|
|
|
- <el-select v-model="documentForm.submitterId" filterable remote reserve-keyword
|
|
|
|
|
- :placeholder="t('document.document.documentForm.submitterPlaceholder')" :remote-method="searchSubmitters"
|
|
|
|
|
- :loading="submitterSearchLoading" style="width: 100%">
|
|
|
|
|
- <el-option v-for="submitter in submitterOptions" :key="submitter.id"
|
|
|
|
|
- :label="`${submitter.name} / ${submitter.dept} --- ${submitter.phoneNumber}`" :value="submitter.id" />
|
|
|
|
|
|
|
+ <el-form-item v-if="documentForm.type === 1" :label="t('document.document.documentForm.submitter')" prop="submitterId">
|
|
|
|
|
+ <el-select
|
|
|
|
|
+ v-model="documentForm.submitterId"
|
|
|
|
|
+ filterable
|
|
|
|
|
+ remote
|
|
|
|
|
+ reserve-keyword
|
|
|
|
|
+ :placeholder="t('document.document.documentForm.submitterPlaceholder')"
|
|
|
|
|
+ :remote-method="searchSubmitters"
|
|
|
|
|
+ :loading="submitterSearchLoading"
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-option
|
|
|
|
|
+ v-for="submitter in submitterOptions"
|
|
|
|
|
+ :key="submitter.id"
|
|
|
|
|
+ :label="`${submitter.name} / ${submitter.dept} --- ${submitter.phoneNumber}`"
|
|
|
|
|
+ :value="submitter.id"
|
|
|
|
|
+ />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item v-if="documentForm.type === 1" :label="t('document.document.documentForm.submitDeadline')"
|
|
|
|
|
- prop="submitDeadline">
|
|
|
|
|
- <el-date-picker v-model="documentForm.submitDeadline" type="date" value-format="YYYY-MM-DD"
|
|
|
|
|
- :placeholder="t('document.document.documentForm.submitDeadlinePlaceholder')" style="width: 100%" />
|
|
|
|
|
|
|
+ <el-form-item v-if="documentForm.type === 1" :label="t('document.document.documentForm.submitDeadline')" prop="submitDeadline">
|
|
|
|
|
+ <el-date-picker
|
|
|
|
|
+ v-model="documentForm.submitDeadline"
|
|
|
|
|
+ type="date"
|
|
|
|
|
+ value-format="YYYY-MM-DD"
|
|
|
|
|
+ :placeholder="t('document.document.documentForm.submitDeadlinePlaceholder')"
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item v-if="documentForm.type === 1" :label="t('document.document.documentForm.planType')"
|
|
|
|
|
- prop="planType">
|
|
|
|
|
- <el-select v-model="documentForm.planType"
|
|
|
|
|
- :placeholder="t('document.document.documentForm.planTypePlaceholder')" clearable style="width: 100%">
|
|
|
|
|
|
|
+ <el-form-item v-if="documentForm.type === 1" :label="t('document.document.documentForm.planType')" prop="planType">
|
|
|
|
|
+ <el-select
|
|
|
|
|
+ v-model="documentForm.planType"
|
|
|
|
|
+ :placeholder="t('document.document.documentForm.planTypePlaceholder')"
|
|
|
|
|
+ clearable
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ >
|
|
|
<el-option v-for="dict in plan_document_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
<el-option v-for="dict in plan_document_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -312,14 +381,14 @@
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item :label="t('document.document.documentForm.note')" prop="note">
|
|
<el-form-item :label="t('document.document.documentForm.note')" prop="note">
|
|
|
- <el-input v-model="documentForm.note" type="textarea" :rows="4"
|
|
|
|
|
- :placeholder="t('document.document.documentForm.notePlaceholder')" />
|
|
|
|
|
|
|
+ <el-input v-model="documentForm.note" type="textarea" :rows="4" :placeholder="t('document.document.documentForm.notePlaceholder')" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-form>
|
|
</el-form>
|
|
|
<template #footer>
|
|
<template #footer>
|
|
|
<div class="dialog-footer">
|
|
<div class="dialog-footer">
|
|
|
<el-button :loading="documentButtonLoading" type="primary" @click="submitDocumentForm">{{
|
|
<el-button :loading="documentButtonLoading" type="primary" @click="submitDocumentForm">{{
|
|
|
- t('document.document.button.submit') }}</el-button>
|
|
|
|
|
|
|
+ t('document.document.button.submit')
|
|
|
|
|
+ }}</el-button>
|
|
|
<el-button @click="cancelDocument">{{ t('document.document.button.cancel') }}</el-button>
|
|
<el-button @click="cancelDocument">{{ t('document.document.button.cancel') }}</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
@@ -329,16 +398,14 @@
|
|
|
<el-dialog v-model="markDialog.visible" :title="markDialog.title" width="500px" append-to-body>
|
|
<el-dialog v-model="markDialog.visible" :title="markDialog.title" width="500px" append-to-body>
|
|
|
<el-form ref="markFormRef" :model="markForm" :rules="markRules" label-width="120px">
|
|
<el-form ref="markFormRef" :model="markForm" :rules="markRules" label-width="120px">
|
|
|
<el-form-item :label="t('document.document.markForm.specification')" prop="type">
|
|
<el-form-item :label="t('document.document.markForm.specification')" prop="type">
|
|
|
- <el-select v-model="markForm.type" :placeholder="t('document.document.markForm.specificationPlaceholder')"
|
|
|
|
|
- clearable style="width: 100%">
|
|
|
|
|
|
|
+ <el-select v-model="markForm.type" :placeholder="t('document.document.markForm.specificationPlaceholder')" clearable style="width: 100%">
|
|
|
<el-option v-for="dict in specificationDict" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
<el-option v-for="dict in specificationDict" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-form>
|
|
</el-form>
|
|
|
<template #footer>
|
|
<template #footer>
|
|
|
<div class="dialog-footer">
|
|
<div class="dialog-footer">
|
|
|
- <el-button :loading="markButtonLoading" type="primary" @click="submitMarkForm">{{
|
|
|
|
|
- t('document.document.button.submit') }}</el-button>
|
|
|
|
|
|
|
+ <el-button :loading="markButtonLoading" type="primary" @click="submitMarkForm">{{ t('document.document.button.submit') }}</el-button>
|
|
|
<el-button @click="cancelMark">{{ t('document.document.button.cancel') }}</el-button>
|
|
<el-button @click="cancelMark">{{ t('document.document.button.cancel') }}</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
@@ -353,8 +420,7 @@
|
|
|
</el-form>
|
|
</el-form>
|
|
|
<template #footer>
|
|
<template #footer>
|
|
|
<div class="dialog-footer">
|
|
<div class="dialog-footer">
|
|
|
- <el-button :loading="submitButtonLoading" type="primary" @click="submitSubmitForm">{{
|
|
|
|
|
- t('document.document.button.submit') }}</el-button>
|
|
|
|
|
|
|
+ <el-button :loading="submitButtonLoading" type="primary" @click="submitSubmitForm">{{ t('document.document.button.submit') }}</el-button>
|
|
|
<el-button @click="cancelSubmit">{{ t('document.document.button.cancel') }}</el-button>
|
|
<el-button @click="cancelSubmit">{{ t('document.document.button.cancel') }}</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
@@ -364,12 +430,15 @@
|
|
|
<DocumentAuditLog v-model:visible="auditLogDialog.visible" :document-id="auditLogDialog.documentId" />
|
|
<DocumentAuditLog v-model:visible="auditLogDialog.visible" :document-id="auditLogDialog.documentId" />
|
|
|
|
|
|
|
|
<!-- 归档确认对话框 -->
|
|
<!-- 归档确认对话框 -->
|
|
|
- <ArchiveConfirmDialog v-model="archiveDialog.visible" :document="archiveDialog.currentDocument"
|
|
|
|
|
- @confirm="handleArchiveConfirm" />
|
|
|
|
|
|
|
+ <ArchiveConfirmDialog v-model="archiveDialog.visible" :document="archiveDialog.currentDocument" @confirm="handleArchiveConfirm" />
|
|
|
|
|
|
|
|
<!-- 审核文档对话框 -->
|
|
<!-- 审核文档对话框 -->
|
|
|
- <DocumentAuditDialog v-model="auditDialog.visible" :document="auditDialog.document"
|
|
|
|
|
- :title="t('document.document.dialog.auditDocument')" @success="getDocumentList" />
|
|
|
|
|
|
|
+ <DocumentAuditDialog
|
|
|
|
|
+ v-model="auditDialog.visible"
|
|
|
|
|
+ :document="auditDialog.document"
|
|
|
|
|
+ :title="t('document.document.dialog.auditDocument')"
|
|
|
|
|
+ @success="getDocumentList"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
@@ -378,10 +447,47 @@ import { ref, reactive, onMounted, onUnmounted, nextTick, getCurrentInstance, wa
|
|
|
import { useI18n } from 'vue-i18n';
|
|
import { useI18n } from 'vue-i18n';
|
|
|
import { listFolder, addFolder, delFolder, getFolder, updateFolder } from '@/api/document/folder';
|
|
import { listFolder, addFolder, delFolder, getFolder, updateFolder } from '@/api/document/folder';
|
|
|
import { FolderListVO, FolderForm } from '@/api/document/folder/types';
|
|
import { FolderListVO, FolderForm } from '@/api/document/folder/types';
|
|
|
-import { addDocument, listDocument, markDocument, auditDocument, submitDocument, confirmSubmit, listDocumentAuditLog, filingDocument } from '@/api/document/document';
|
|
|
|
|
-import { DocumentForm, DocumentQuery, DocumentVO, DocumentMarkForm, DocumentAuditForm, DocumentSubmitForm, DocumentAuditLogVO, DocumentAuditLogQuery } from '@/api/document/document/types'; import { queryMemberNotInCenter } from '@/api/project/management';
|
|
|
|
|
|
|
+import {
|
|
|
|
|
+ addDocument,
|
|
|
|
|
+ listDocument,
|
|
|
|
|
+ markDocument,
|
|
|
|
|
+ auditDocument,
|
|
|
|
|
+ submitDocument,
|
|
|
|
|
+ confirmSubmit,
|
|
|
|
|
+ listDocumentAuditLog,
|
|
|
|
|
+ filingDocument
|
|
|
|
|
+} from '@/api/document/document';
|
|
|
|
|
+import {
|
|
|
|
|
+ DocumentForm,
|
|
|
|
|
+ DocumentQuery,
|
|
|
|
|
+ DocumentVO,
|
|
|
|
|
+ DocumentMarkForm,
|
|
|
|
|
+ DocumentAuditForm,
|
|
|
|
|
+ DocumentSubmitForm,
|
|
|
|
|
+ DocumentAuditLogVO,
|
|
|
|
|
+ DocumentAuditLogQuery
|
|
|
|
|
+} from '@/api/document/document/types';
|
|
|
|
|
+import { queryMemberNotInCenter } from '@/api/project/management';
|
|
|
import { MemberNotInCenterVO, MemberNotInCenterQuery } from '@/api/project/management/types';
|
|
import { MemberNotInCenterVO, MemberNotInCenterQuery } from '@/api/project/management/types';
|
|
|
-import { Folder, Document, Edit, Delete, Plus, MoreFilled, Location, OfficeBuilding, ArrowRight, Download, Select, Grid, Monitor, Reading, Flag, Upload, UploadFilled } from '@element-plus/icons-vue';
|
|
|
|
|
|
|
+import {
|
|
|
|
|
+ Folder,
|
|
|
|
|
+ Document,
|
|
|
|
|
+ Edit,
|
|
|
|
|
+ Delete,
|
|
|
|
|
+ Plus,
|
|
|
|
|
+ MoreFilled,
|
|
|
|
|
+ Location,
|
|
|
|
|
+ OfficeBuilding,
|
|
|
|
|
+ ArrowRight,
|
|
|
|
|
+ Download,
|
|
|
|
|
+ Select,
|
|
|
|
|
+ Grid,
|
|
|
|
|
+ Monitor,
|
|
|
|
|
+ Reading,
|
|
|
|
|
+ Flag,
|
|
|
|
|
+ Upload,
|
|
|
|
|
+ UploadFilled
|
|
|
|
|
+} from '@element-plus/icons-vue';
|
|
|
import { ElMessage, ElMessageBox } from 'element-plus';
|
|
import { ElMessage, ElMessageBox } from 'element-plus';
|
|
|
import type { FormInstance } from 'element-plus';
|
|
import type { FormInstance } from 'element-plus';
|
|
|
import type { ComponentInternalInstance } from 'vue';
|
|
import type { ComponentInternalInstance } from 'vue';
|
|
@@ -405,7 +511,9 @@ const emit = defineEmits<{
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
const { t } = useI18n();
|
|
const { t } = useI18n();
|
|
|
const userStore = useUserStore();
|
|
const userStore = useUserStore();
|
|
|
-const { plan_document_type, center_file_specification, project_file_specification } = toRefs<any>(proxy?.useDict('plan_document_type', 'center_file_specification', 'project_file_specification'));
|
|
|
|
|
|
|
+const { plan_document_type, center_file_specification, project_file_specification } = toRefs<any>(
|
|
|
|
|
+ proxy?.useDict('plan_document_type', 'center_file_specification', 'project_file_specification')
|
|
|
|
|
+);
|
|
|
|
|
|
|
|
// 数据定义
|
|
// 数据定义
|
|
|
const loading = ref(false);
|
|
const loading = ref(false);
|
|
@@ -456,8 +564,6 @@ const markDialog = reactive({
|
|
|
const markFormRef = ref<FormInstance>();
|
|
const markFormRef = ref<FormInstance>();
|
|
|
const markButtonLoading = ref(false);
|
|
const markButtonLoading = ref(false);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
// 当前操作的节点
|
|
// 当前操作的节点
|
|
|
const currentNode = ref<FolderListVO | null>(null);
|
|
const currentNode = ref<FolderListVO | null>(null);
|
|
|
|
|
|
|
@@ -507,8 +613,6 @@ const markForm = ref<DocumentMarkForm>({
|
|
|
type: ''
|
|
type: ''
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
// 递交文档对话框
|
|
// 递交文档对话框
|
|
|
const submitDialog = reactive({
|
|
const submitDialog = reactive({
|
|
|
visible: false,
|
|
visible: false,
|
|
@@ -572,32 +676,20 @@ const documentQueryParams = reactive<DocumentQuery>({
|
|
|
|
|
|
|
|
// 表单验证规则
|
|
// 表单验证规则
|
|
|
const rules = {
|
|
const rules = {
|
|
|
- name: [
|
|
|
|
|
- { required: true, message: t('document.document.rule.nameRequired'), trigger: 'blur' }
|
|
|
|
|
- ],
|
|
|
|
|
- type: [
|
|
|
|
|
- { required: true, message: t('document.document.rule.typeRequired'), trigger: 'change' }
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ name: [{ required: true, message: t('document.document.rule.nameRequired'), trigger: 'blur' }],
|
|
|
|
|
+ type: [{ required: true, message: t('document.document.rule.typeRequired'), trigger: 'change' }]
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// 文档表单验证规则
|
|
// 文档表单验证规则
|
|
|
const documentRules = {
|
|
const documentRules = {
|
|
|
- name: [
|
|
|
|
|
- { required: true, message: t('document.document.documentRule.nameRequired'), trigger: 'blur' }
|
|
|
|
|
- ],
|
|
|
|
|
- submitterId: [
|
|
|
|
|
- { required: true, message: t('document.document.documentRule.submitterRequired'), trigger: 'change' }
|
|
|
|
|
- ],
|
|
|
|
|
- ossId: [
|
|
|
|
|
- { required: true, message: t('document.document.documentRule.fileRequired'), trigger: 'change' }
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ name: [{ required: true, message: t('document.document.documentRule.nameRequired'), trigger: 'blur' }],
|
|
|
|
|
+ submitterId: [{ required: true, message: t('document.document.documentRule.submitterRequired'), trigger: 'change' }],
|
|
|
|
|
+ ossId: [{ required: true, message: t('document.document.documentRule.fileRequired'), trigger: 'change' }]
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// 标识表单验证规则
|
|
// 标识表单验证规则
|
|
|
const markRules = {
|
|
const markRules = {
|
|
|
- type: [
|
|
|
|
|
- { required: true, message: t('document.document.markRule.typeRequired'), trigger: 'change' }
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ type: [{ required: true, message: t('document.document.markRule.typeRequired'), trigger: 'change' }]
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// 树形组件配置
|
|
// 树形组件配置
|
|
@@ -652,7 +744,7 @@ const checkIfUnderCenter = (folderId: string | number): boolean => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 检查路径中是否存在type为1或2的节点(国家或中心)
|
|
// 检查路径中是否存在type为1或2的节点(国家或中心)
|
|
|
- return path.some(node => node.type === 1 || node.type === 2);
|
|
|
|
|
|
|
+ return path.some((node) => node.type === 1 || node.type === 2);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// 获取文件夹列表
|
|
// 获取文件夹列表
|
|
@@ -754,9 +846,7 @@ const getAvailableTypes = () => {
|
|
|
];
|
|
];
|
|
|
} else {
|
|
} else {
|
|
|
// 父节点是文件夹,子节点只能是文件夹
|
|
// 父节点是文件夹,子节点只能是文件夹
|
|
|
- return [
|
|
|
|
|
- { label: t('document.document.type.folder'), value: 0 }
|
|
|
|
|
- ];
|
|
|
|
|
|
|
+ return [{ label: t('document.document.type.folder'), value: 0 }];
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -785,8 +875,14 @@ const handleAddChildWithType = (data: FolderListVO, type: number) => {
|
|
|
form.value.parentId = data.id;
|
|
form.value.parentId = data.id;
|
|
|
form.value.type = type;
|
|
form.value.type = type;
|
|
|
dialog.visible = true;
|
|
dialog.visible = true;
|
|
|
- const typeLabel = type === 0 ? t('document.document.type.folder') : type === 1 ? t('document.document.type.country') : t('document.document.type.center');
|
|
|
|
|
- dialog.title = type === 0 ? t('document.document.dialog.addFolder') : type === 1 ? t('document.document.dialog.addCountry') : t('document.document.dialog.addCenter');
|
|
|
|
|
|
|
+ const typeLabel =
|
|
|
|
|
+ type === 0 ? t('document.document.type.folder') : type === 1 ? t('document.document.type.country') : t('document.document.type.center');
|
|
|
|
|
+ dialog.title =
|
|
|
|
|
+ type === 0
|
|
|
|
|
+ ? t('document.document.dialog.addFolder')
|
|
|
|
|
+ : type === 1
|
|
|
|
|
+ ? t('document.document.dialog.addCountry')
|
|
|
|
|
+ : t('document.document.dialog.addCenter');
|
|
|
dialog.isEdit = false;
|
|
dialog.isEdit = false;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -1047,7 +1143,7 @@ const searchSubmitters = async (query: string) => {
|
|
|
watch(uploadedFileId, (newVal) => {
|
|
watch(uploadedFileId, (newVal) => {
|
|
|
if (newVal) {
|
|
if (newVal) {
|
|
|
// 解析文件ID(可能是逗号分隔的字符串)
|
|
// 解析文件ID(可能是逗号分隔的字符串)
|
|
|
- const ids = newVal.split(',').filter(id => id.trim());
|
|
|
|
|
|
|
+ const ids = newVal.split(',').filter((id) => id.trim());
|
|
|
if (ids.length > 0) {
|
|
if (ids.length > 0) {
|
|
|
documentForm.value.ossId = parseInt(ids[0]);
|
|
documentForm.value.ossId = parseInt(ids[0]);
|
|
|
// 自动设置递交时间为当前时间
|
|
// 自动设置递交时间为当前时间
|
|
@@ -1174,8 +1270,6 @@ const handleAuditClick = (row: DocumentVO) => {
|
|
|
auditDialog.visible = true;
|
|
auditDialog.visible = true;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
// 下载文档
|
|
// 下载文档
|
|
|
const handleDownload = (row: DocumentVO) => {
|
|
const handleDownload = (row: DocumentVO) => {
|
|
|
if (!row.url) {
|
|
if (!row.url) {
|
|
@@ -1242,15 +1336,11 @@ const submitSubmitForm = () => {
|
|
|
// 确认递交文档
|
|
// 确认递交文档
|
|
|
const handleConfirmSubmit = async (row: DocumentVO) => {
|
|
const handleConfirmSubmit = async (row: DocumentVO) => {
|
|
|
try {
|
|
try {
|
|
|
- await ElMessageBox.confirm(
|
|
|
|
|
- '确认该文件已成功递交?',
|
|
|
|
|
- '操作确认',
|
|
|
|
|
- {
|
|
|
|
|
- confirmButtonText: '确认',
|
|
|
|
|
- cancelButtonText: '取消',
|
|
|
|
|
- type: 'warning'
|
|
|
|
|
- }
|
|
|
|
|
- );
|
|
|
|
|
|
|
+ await ElMessageBox.confirm('确认该文件已成功递交?', '操作确认', {
|
|
|
|
|
+ confirmButtonText: '确认',
|
|
|
|
|
+ cancelButtonText: '取消',
|
|
|
|
|
+ type: 'warning'
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
await confirmSubmit(row.id);
|
|
await confirmSubmit(row.id);
|
|
|
ElMessage.success('确认递交成功');
|
|
ElMessage.success('确认递交成功');
|
|
@@ -1344,9 +1434,7 @@ const isWordFile = (fileName: string): boolean => {
|
|
|
const isExcelFile = (fileName: string): boolean => {
|
|
const isExcelFile = (fileName: string): boolean => {
|
|
|
if (!fileName) return false;
|
|
if (!fileName) return false;
|
|
|
const lowerFileName = fileName.toLowerCase();
|
|
const lowerFileName = fileName.toLowerCase();
|
|
|
- return lowerFileName.endsWith('.xls') ||
|
|
|
|
|
- lowerFileName.endsWith('.xlsx') ||
|
|
|
|
|
- lowerFileName.endsWith('.csv');
|
|
|
|
|
|
|
+ return lowerFileName.endsWith('.xls') || lowerFileName.endsWith('.xlsx') || lowerFileName.endsWith('.csv');
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// 判断是否为PPT文档
|
|
// 判断是否为PPT文档
|
|
@@ -1396,9 +1484,7 @@ const handleClickOutside = (event: Event) => {
|
|
|
const target = event.target as HTMLElement;
|
|
const target = event.target as HTMLElement;
|
|
|
|
|
|
|
|
// 检查点击是否在菜单内部或触发器上
|
|
// 检查点击是否在菜单内部或触发器上
|
|
|
- const isClickInsideMenu = target.closest('.primary-menu') ||
|
|
|
|
|
- target.closest('.secondary-menu') ||
|
|
|
|
|
- target.closest('.menu-trigger');
|
|
|
|
|
|
|
+ const isClickInsideMenu = target.closest('.primary-menu') || target.closest('.secondary-menu') || target.closest('.menu-trigger');
|
|
|
|
|
|
|
|
// 如果点击在菜单外部,立即关闭所有菜单
|
|
// 如果点击在菜单外部,立即关闭所有菜单
|
|
|
if (!isClickInsideMenu) {
|
|
if (!isClickInsideMenu) {
|
|
@@ -1528,7 +1614,9 @@ onUnmounted(() => {
|
|
|
font-size: 16px;
|
|
font-size: 16px;
|
|
|
padding: 4px;
|
|
padding: 4px;
|
|
|
border-radius: 4px;
|
|
border-radius: 4px;
|
|
|
- transition: background-color 0.3s, color 0.3s;
|
|
|
|
|
|
|
+ transition:
|
|
|
|
|
+ background-color 0.3s,
|
|
|
|
|
+ color 0.3s;
|
|
|
|
|
|
|
|
&:hover {
|
|
&:hover {
|
|
|
background-color: #f5f7fa;
|
|
background-color: #f5f7fa;
|
|
@@ -1603,7 +1691,9 @@ onUnmounted(() => {
|
|
|
cursor: pointer;
|
|
cursor: pointer;
|
|
|
font-size: 14px;
|
|
font-size: 14px;
|
|
|
color: #606266;
|
|
color: #606266;
|
|
|
- transition: background-color 0.3s, color 0.3s;
|
|
|
|
|
|
|
+ transition:
|
|
|
|
|
+ background-color 0.3s,
|
|
|
|
|
+ color 0.3s;
|
|
|
display: flex;
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
@@ -1641,7 +1731,9 @@ onUnmounted(() => {
|
|
|
cursor: pointer;
|
|
cursor: pointer;
|
|
|
font-size: 14px;
|
|
font-size: 14px;
|
|
|
color: #606266;
|
|
color: #606266;
|
|
|
- transition: background-color 0.3s, color 0.3s;
|
|
|
|
|
|
|
+ transition:
|
|
|
|
|
+ background-color 0.3s,
|
|
|
|
|
+ color 0.3s;
|
|
|
|
|
|
|
|
&:hover {
|
|
&:hover {
|
|
|
background-color: #f5f7fa;
|
|
background-color: #f5f7fa;
|