From 85f4ac3dd92edb00543f68925cfc473b787421f1 Mon Sep 17 00:00:00 2001 From: zhouhaibin Date: Tue, 6 May 2025 13:27:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=89=8D=E7=AB=AF=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 +- .../DocumentTaskResults/index.ts | 37 +- .../DocumentTaskResults/model.ts | 65 ++ .../DocumentTasks/DocumentTasksTable.vue | 65 +- .../DocumentTasks/ResultDetailDrawer copy.vue | 515 +++++++++++++ .../DocumentTasks/ResultDetailDrawer.vue | 674 ++++++++++++++++++ .../TenderTask/TenderTask.data.ts | 1 + .../inconsistency/TenderTask.data.ts | 151 ++++ .../inconsistency/TenderTaskModal.vue | 72 ++ .../tenderReview/inconsistency/index.vue | 181 +++++ 10 files changed, 1732 insertions(+), 32 deletions(-) create mode 100644 src/views/documentReview/DocumentTasks/ResultDetailDrawer copy.vue create mode 100644 src/views/documentReview/DocumentTasks/ResultDetailDrawer.vue create mode 100644 src/views/tenderReview/inconsistency/TenderTask.data.ts create mode 100644 src/views/tenderReview/inconsistency/TenderTaskModal.vue create mode 100644 src/views/tenderReview/inconsistency/index.vue diff --git a/package.json b/package.json index b90cb17..33e98a6 100644 --- a/package.json +++ b/package.json @@ -186,7 +186,8 @@ "md-editor-v3": "^4.9.0", "markdown-it": "^13.0.2", "markdown-it-anchor": "^8.6.7", - "markdown-it-toc-done-right": "^4.2.0" + "markdown-it-toc-done-right": "^4.2.0", + "vue-pdf-embed":"2.1.2" }, "engines": { diff --git a/src/api/documentReview/DocumentTaskResults/index.ts b/src/api/documentReview/DocumentTaskResults/index.ts index 270350a..8bb9f24 100644 --- a/src/api/documentReview/DocumentTaskResults/index.ts +++ b/src/api/documentReview/DocumentTaskResults/index.ts @@ -1,6 +1,6 @@ import { defHttp } from '@/utils/http/axios'; import { ID, IDS, commonExport } from '@/api/base'; -import { DocumentTaskResultsVO, DocumentTaskResultsForm, DocumentTaskResultsQuery } from './model'; +import { DocumentTaskResultsVO, DocumentTaskResultsForm, DocumentTaskResultsQuery, DocumentTaskResultDetailVO } from './model'; import { message } from 'ant-design-vue'; interface DownloadOptions { @@ -113,6 +113,7 @@ export function DocumentTaskResultsExport(params?: DocumentTaskResultsQuery) { export function DocumentTaskResultsInfo(id: ID) { return defHttp.get({ url: '/productManagement/DocumentTaskResults/' + id }); } + /** * 根据任务id查询文档任务结果详细 * @param id id @@ -121,6 +122,16 @@ export function DocumentTaskResultsInfo(id: ID) { export function DocumentTaskResultsInfoByTaskId(id: ID) { return defHttp.get({ url: '/productManagement/DocumentTaskResults/task/' + id }); } + +/** + * 根据任务id查询详细分类的文档任务结果 + * @param taskId 任务ID + * @returns 详细的文档任务结果列表 + */ +export function getDetailResultsByTaskId(taskId: ID) { + return defHttp.get({ url: '/productManagement/DocumentTaskResults/taskDetail/' + taskId }); +} + /** * 新增文档任务结果 * @param data @@ -147,13 +158,27 @@ export function DocumentTaskResultsUpdate(data: DocumentTaskResultsForm) { export function DocumentTaskResultsRemove(id: ID | IDS) { return defHttp.deleteWithMsg({ url: '/productManagement/DocumentTaskResults/' + id },); } - /** + +/** + * 更新文档任务结果项的状态(已读/采纳) + * @param id 结果项ID + * @param field 字段名(isRead/isAdopted) + * @param value 值(0/1) + * @returns + */ +export function updateResultItemStatus(id: ID, field: 'isRead' | 'isAdopted', value: '0' | '1') { + return defHttp.putWithMsg({ + url: `/productManagement/DocumentTaskResults/updateResultItemStatus/${id}/${field}/${value}` + }); +} + +/** * 下载文档任务结果 * @param id id * @returns */ - export function DocumentTaskResultDownload(id: ID | IDS) { - return useDownload(`/productManagement/DocumentTaskResults/downloadResult/${id}`); +export function DocumentTaskResultDownload(id: ID | IDS) { + return useDownload(`/productManagement/DocumentTaskResults/downloadResult/${id}`); - // return defHttp.get({ url: '/productManagement/DocumentTaskResults/downloadResult/' + id ,responseType: 'blob',headers: { 'Content-Type': ContentTypeEnum.FORM_URLENCODED }},); - } + // return defHttp.get({ url: '/productManagement/DocumentTaskResults/downloadResult/' + id ,responseType: 'blob',headers: { 'Content-Type': ContentTypeEnum.FORM_URLENCODED }},); +} diff --git a/src/api/documentReview/DocumentTaskResults/model.ts b/src/api/documentReview/DocumentTaskResults/model.ts index 3df957c..09301cd 100644 --- a/src/api/documentReview/DocumentTaskResults/model.ts +++ b/src/api/documentReview/DocumentTaskResults/model.ts @@ -7,6 +7,71 @@ export interface DocumentTaskResultsVO { result?: string; } +export interface DocumentTaskResultDetailVO { + /** + * 分类名称 + */ + name: string; + /** + * 结果列表 + */ + results: { + /** + * 唯一标识ID + */ + id?: string; + /** + * 序号 + */ + serialNumber?: number; + /** + * 问题点名称 + */ + issueName?: string; + /** + * 原文 + */ + originalText?: string; + /** + * 比对原文 + */ + comparedText?: string; + /** + * 修改后的内容 + */ + modifiedContent?: string; + /** + * 展示修改情况 + */ + modificationDisplay?: string; + /** + * 存在的问题 + */ + existingIssues?: string; + /** + * 审查依据 + */ + reviewBasis?: { + /** + * 审查内容 + */ + reviewContent?: string; + /** + * 审查点 + */ + reviewPoints?: string[]; + }; + /** + * 是否已读 + */ + isRead?: string; + /** + * 是否采纳 + */ + isAdopted?: string; + }[]; +} + export interface DocumentTaskResultsForm extends BaseEntity { } diff --git a/src/views/documentReview/DocumentTasks/DocumentTasksTable.vue b/src/views/documentReview/DocumentTasks/DocumentTasksTable.vue index 2ece077..14b8032 100644 --- a/src/views/documentReview/DocumentTasks/DocumentTasksTable.vue +++ b/src/views/documentReview/DocumentTasks/DocumentTasksTable.vue @@ -108,6 +108,7 @@ + + + \ No newline at end of file diff --git a/src/views/documentReview/DocumentTasks/ResultDetailDrawer.vue b/src/views/documentReview/DocumentTasks/ResultDetailDrawer.vue new file mode 100644 index 0000000..a1cd131 --- /dev/null +++ b/src/views/documentReview/DocumentTasks/ResultDetailDrawer.vue @@ -0,0 +1,674 @@ + + + + + \ No newline at end of file diff --git a/src/views/tenderReview/TenderTask/TenderTask.data.ts b/src/views/tenderReview/TenderTask/TenderTask.data.ts index 7cf62ce..f71228b 100644 --- a/src/views/tenderReview/TenderTask/TenderTask.data.ts +++ b/src/views/tenderReview/TenderTask/TenderTask.data.ts @@ -31,6 +31,7 @@ export const formSchemas: FormSchema[] = [ componentProps: { options: getDictOptions('tender_review'), mode: 'multiple', + defaultValue:"tenderSummary" }, }, { diff --git a/src/views/tenderReview/inconsistency/TenderTask.data.ts b/src/views/tenderReview/inconsistency/TenderTask.data.ts new file mode 100644 index 0000000..89067f5 --- /dev/null +++ b/src/views/tenderReview/inconsistency/TenderTask.data.ts @@ -0,0 +1,151 @@ +import { BasicColumn } from '@/components/Table'; +import { FormSchema } from '@/components/Form'; +import { getDictOptions } from '@/utils/dict'; +import { useRender } from '@/hooks/component/useRender'; +import { uploadDocument } from '@/api/documentReview/DocumentTasks'; +import { useUserStore } from '@/store/modules/user'; +import { RoleEnum } from '@/enums/roleEnum'; + +const { roleList } = useUserStore(); +export const formSchemas: FormSchema[] = [ + // { + // label: '模型所属行业', + // field: 'taskIndustry', + // component: 'Select', + // componentProps: { + // options: getDictOptions('model_industry') + // }, + // }, + // { + // label: '模型所属区域', + // field: 'taskRegion', + // component: 'Select', + // componentProps: { + // options: getDictOptions('model_region') + // }, + // }, + { + label: '任务名称', + field: 'taskNameList', + component: 'Select', + componentProps: { + options: getDictOptions('tender_review'), + mode: 'multiple', + defaultValue:"inconsistency" + }, + }, + { + label: '文档名称', + field: 'documentName', + component: 'Input', + }, + { + label: '状态', + field: 'progressStatus', + component: 'Select', + componentProps: { + options: getDictOptions('document_task_status'), + }, + }, +]; + +const { renderDict } = useRender(); +export const columns: BasicColumn[] = [ + { + title: '任务名称', + dataIndex: 'taskName', + customRender: ({ value }) => renderDict(value, 'tender_review'), + + }, + { + title: '文档名称', + dataIndex: 'documentName', + }, + { + title: '模型所属区域', + dataIndex: 'taskRegion', + customRender: ({ value }) => renderDict(value, 'model_region'), + }, + { + title: '模型所属行业', + dataIndex: 'taskIndustry', + customRender: ({ value }) => renderDict(value, 'model_industry'), + }, + { + title: '上传时间', + dataIndex: 'createTime', + }, + { + title: '提交人', + dataIndex: 'createUser', + auth: 'documentReview:DocumentTasks:tableShow', + }, + { + title: '任务耗时', + dataIndex: 'taskDuration', + }, + { + title: '状态', + dataIndex: 'progressStatus', + customRender: ({ value }) => renderDict(value, 'document_task_status'), + }, +]; + +export const modalSchemas: FormSchema[] = [ + { + label: '模型所属区域', + field: 'taskRegion', + required: true, + component: 'Select', + // componentProps: { + // options: taskRegionPermission(), + // defaultValue:"normal", + // }, + componentProps: () => { + const isSuperAdmin = roleList.includes(RoleEnum.SUPER_ADMIN); + let options = getDictOptions('model_region'); + if (!isSuperAdmin) { + // 如果不是超级管理员,移除 label 带有 '#' 的项 + options = options.filter((option) => !option.label.includes('#')); + } + return { + options: options, + defaultValue: 'normal', + }; + }, + }, + { + label: '模型所属行业', + field: 'taskIndustry', + required: true, + component: 'Select', + componentProps: { + options: getDictOptions('model_industry'), + defaultValue: 'normal', + }, + }, + { + label: '任务名称', + field: 'taskNameList', + required: true, + component: 'Select', + componentProps: { + options: getDictOptions('tender_review') , + mode: 'multiple', + }, + }, + { + label: '文档名称', + field: 'ossId', + required: true, + component: 'Upload', + componentProps: { + accept: ['.docx', '.doc', '.wps'], + maxSize: 500, + multiple: false, + resultField: 'ossId', + api: uploadDocument, + beforeUploadPrompt:"严禁在本互联网非涉密平台处理、传输国家秘密。请再次确认您上传的文件资料不涉及国家秘密。" + }, + }, +]; diff --git a/src/views/tenderReview/inconsistency/TenderTaskModal.vue b/src/views/tenderReview/inconsistency/TenderTaskModal.vue new file mode 100644 index 0000000..bd1f4f1 --- /dev/null +++ b/src/views/tenderReview/inconsistency/TenderTaskModal.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/views/tenderReview/inconsistency/index.vue b/src/views/tenderReview/inconsistency/index.vue new file mode 100644 index 0000000..866f49d --- /dev/null +++ b/src/views/tenderReview/inconsistency/index.vue @@ -0,0 +1,181 @@ + + + + +