From d26dfdfc13c1a6b5190b30106eff38f395227731 Mon Sep 17 00:00:00 2001 From: Codewoc <947380458@qq.com> Date: Wed, 1 Apr 2026 16:35:46 +0800 Subject: [PATCH] feat(review-meeting): show minutes ai notice status --- src/api/review/meeting.ts | 4 ++ src/views/review/meeting/MeetingEdit.vue | 46 +++++++++++++++++++++- src/views/review/meeting/ProjectDetail.vue | 6 ++- src/views/review/meeting/index.vue | 2 +- 4 files changed, 54 insertions(+), 4 deletions(-) diff --git a/src/api/review/meeting.ts b/src/api/review/meeting.ts index fe1305e4d..6ec946e63 100644 --- a/src/api/review/meeting.ts +++ b/src/api/review/meeting.ts @@ -72,6 +72,10 @@ export interface ReviewMeetingRespVO { minutesAttachmentUrl?: string minutesAttachmentType?: string minutesAttachmentSize?: number + minutesAiStatus?: number + minutesAiStatusName?: string + minutesAiErrorMessage?: string + minutesAiUpdatedTime?: string status: number // 0-草稿 1-已邀约 2-已结束 3-已取消 expertIds: number[] expertCount: number diff --git a/src/views/review/meeting/MeetingEdit.vue b/src/views/review/meeting/MeetingEdit.vue index a1ac50d35..7889ba685 100644 --- a/src/views/review/meeting/MeetingEdit.vue +++ b/src/views/review/meeting/MeetingEdit.vue @@ -130,6 +130,17 @@ {{ formatFileSize(formData.minutesAttachmentSize) }} 移除 +
+ + {{ formData.minutesAiStatusName }} + + + 最近生成:{{ formData.minutesAiUpdatedTime }} + + + {{ formData.minutesAiErrorMessage }} + +
@@ -254,6 +265,10 @@ type FormData = ReviewMeetingSaveReqVO & { organizationUnit?: string meetingTimeRange?: any[] materialViewTimeRange?: any[] + minutesAiStatus?: number + minutesAiStatusName?: string + minutesAiErrorMessage?: string + minutesAiUpdatedTime?: string } const formData = reactive({ @@ -272,6 +287,10 @@ const formData = reactive({ minutesAttachmentUrl: undefined, minutesAttachmentType: undefined, minutesAttachmentSize: undefined, + minutesAiStatus: undefined, + minutesAiStatusName: undefined, + minutesAiErrorMessage: undefined, + minutesAiUpdatedTime: undefined, materialViewStartTime: undefined, materialViewEndTime: undefined, materialViewRemark: undefined, @@ -293,6 +312,13 @@ const rules: FormRules = { const formRef = ref() +const getMinutesAiTagType = (status?: number) => { + if (status === 2) return 'success' + if (status === 3) return 'danger' + if (status === 1) return 'warning' + return 'info' +} + const mapProjectItems = (projects: any[]): ReviewProjectItemVO[] => (projects || []).map((item: any) => ({ sourceProjectId: item.sourceProjectId ?? item.id, @@ -369,6 +395,10 @@ const loadCopySource = async (id: number) => { formData.minutesAttachmentUrl = undefined formData.minutesAttachmentType = undefined formData.minutesAttachmentSize = undefined + formData.minutesAiStatus = undefined + formData.minutesAiStatusName = undefined + formData.minutesAiErrorMessage = undefined + formData.minutesAiUpdatedTime = undefined formData.expertIds = detail.expertIds || [] formData.projects = resetProjectReviewDate(mapProjectItems(projectData?.list ?? [])) isProjectsModified.value = false @@ -490,7 +520,11 @@ const handleMinutesAttachmentChange = async (uploadFile: UploadFile) => { formData.minutesAttachmentUrl = attachment.url formData.minutesAttachmentType = attachment.type formData.minutesAttachmentSize = attachment.size - ElMessage.success('会议纪要上传成功') + formData.minutesAiStatus = 1 + formData.minutesAiStatusName = '生成中' + formData.minutesAiErrorMessage = undefined + formData.minutesAiUpdatedTime = undefined + ElMessage.success('会议纪要上传成功,整改通知后台生成中') } finally { formLoading.value = false } @@ -501,6 +535,10 @@ const clearMinutesAttachment = () => { formData.minutesAttachmentUrl = undefined formData.minutesAttachmentType = undefined formData.minutesAttachmentSize = undefined + formData.minutesAiStatus = undefined + formData.minutesAiStatusName = undefined + formData.minutesAiErrorMessage = undefined + formData.minutesAiUpdatedTime = undefined } const previewAgendaAttachment = () => { @@ -728,6 +766,12 @@ const handleBack = () => { flex-wrap: wrap; font-size: 16px; } +.minutes-ai-line { + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; +} .agenda-action-row { display: flex; align-items: center; diff --git a/src/views/review/meeting/ProjectDetail.vue b/src/views/review/meeting/ProjectDetail.vue index e7320e2eb..88773ad20 100644 --- a/src/views/review/meeting/ProjectDetail.vue +++ b/src/views/review/meeting/ProjectDetail.vue @@ -251,13 +251,15 @@ const PHASE_MAPPING: Record> = { PROJECT_ARGUMENT_DOC: 'before', PROJECT_DEFENSE_PPT: 'before', PROJECT_DRAFT_EXPERT_OPINION: 'before', - PROJECT_EXPERT_OPINION_SIGNED: 'after' + PROJECT_EXPERT_OPINION_SIGNED: 'after', + PROJECT_RECTIFICATION_NOTICE: 'after' }, 项目立项: { PROJECT_ARGUMENT_DOC: 'before', PROJECT_DEFENSE_PPT: 'before', PROJECT_DRAFT_EXPERT_OPINION: 'before', - PROJECT_EXPERT_OPINION_SIGNED: 'after' + PROJECT_EXPERT_OPINION_SIGNED: 'after', + PROJECT_RECTIFICATION_NOTICE: 'after' }, 预验收: { PRE_PROJECT_CONTRACT: 'before', diff --git a/src/views/review/meeting/index.vue b/src/views/review/meeting/index.vue index 8d7a979b5..3e9ed422c 100644 --- a/src/views/review/meeting/index.vue +++ b/src/views/review/meeting/index.vue @@ -246,7 +246,7 @@ const handleMinutesFileChange = async (event: Event) => { } try { await uploadMinutesAttachment(pendingMinutesMeeting.value.id, file) - ElMessage.success('会议纪要上传成功') + ElMessage.success('会议纪要上传成功,整改通知后台生成中') getList() } finally { input.value = ''