merge: integrate review-meeting minutes ai notice ui

pull/874/head
Codewoc 2026-04-01 17:26:55 +08:00
commit 3bae07cd70
4 changed files with 54 additions and 4 deletions

View File

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

View File

@ -130,6 +130,17 @@
<el-text type="info" size="small">{{ formatFileSize(formData.minutesAttachmentSize) }}</el-text>
<el-button v-if="!isView" type="danger" link @click="clearMinutesAttachment"></el-button>
</div>
<div v-if="formData.minutesAttachmentUrl && formData.minutesAiStatusName" class="minutes-ai-line">
<el-tag size="small" :type="getMinutesAiTagType(formData.minutesAiStatus)">
{{ formData.minutesAiStatusName }}
</el-tag>
<el-text v-if="formData.minutesAiUpdatedTime" type="info" size="small">
最近生成{{ formData.minutesAiUpdatedTime }}
</el-text>
<el-text v-if="formData.minutesAiErrorMessage" type="danger" size="small">
{{ formData.minutesAiErrorMessage }}
</el-text>
</div>
</div>
</el-form-item>
</el-col>
@ -254,6 +265,10 @@ type FormData = ReviewMeetingSaveReqVO & {
organizationUnit?: string
meetingTimeRange?: any[]
materialViewTimeRange?: any[]
minutesAiStatus?: number
minutesAiStatusName?: string
minutesAiErrorMessage?: string
minutesAiUpdatedTime?: string
}
const formData = reactive<FormData>({
@ -272,6 +287,10 @@ const formData = reactive<FormData>({
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;

View File

@ -251,13 +251,15 @@ const PHASE_MAPPING: Record<string, Record<string, 'before' | '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'
},
项目立项: {
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',

View File

@ -246,7 +246,7 @@ const handleMinutesFileChange = async (event: Event) => {
}
try {
await uploadMinutesAttachment(pendingMinutesMeeting.value.id, file)
ElMessage.success('会议纪要上传成功')
ElMessage.success('会议纪要上传成功,整改通知后台生成中')
getList()
} finally {
input.value = ''