From f4c04a6c697ec9b7c93aa06335e7696d09f4aea9 Mon Sep 17 00:00:00 2001 From: Codewoc <947380458@qq.com> Date: Sat, 11 Apr 2026 21:33:04 +0800 Subject: [PATCH] =?UTF-8?q?feat(review-meeting):=20=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=93=8D=E4=BD=9C=E6=94=B9=E4=B8=BA=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E5=B9=B6=E8=A1=A5=E5=85=85=E8=AE=AE=E7=A8=8B=E5=88=86?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/review/project.ts | 8 ++- src/views/review/meeting/ProjectDetail.vue | 14 +++++ src/views/review/meeting/ProjectList.vue | 59 ++++++++++++++++++++-- 3 files changed, 76 insertions(+), 5 deletions(-) diff --git a/src/api/review/project.ts b/src/api/review/project.ts index 92e970aa8..d5f98dd8f 100644 --- a/src/api/review/project.ts +++ b/src/api/review/project.ts @@ -25,7 +25,13 @@ export interface ReviewMeetingProjectRespVO { aiSummaryUpdatedTime?: string } -export const REVIEW_AGENDA_CATEGORY_OPTIONS = ['项目申报论证', '预验收', '项目终验'] as const +export const REVIEW_AGENDA_CATEGORY_OPTIONS = [ + '项目申报论证', + '软件申购论证', + '软件报废论证', + '预验收', + '项目终验' +] as const export type ReviewAgendaCategory = (typeof REVIEW_AGENDA_CATEGORY_OPTIONS)[number] export interface ReviewMeetingProjectSeqUpdateReqVO { diff --git a/src/views/review/meeting/ProjectDetail.vue b/src/views/review/meeting/ProjectDetail.vue index 88773ad20..c89011fdc 100644 --- a/src/views/review/meeting/ProjectDetail.vue +++ b/src/views/review/meeting/ProjectDetail.vue @@ -254,6 +254,20 @@ const PHASE_MAPPING: Record> = { 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_RECTIFICATION_NOTICE: 'after' + }, + 软件报废论证: { + PROJECT_ARGUMENT_DOC: 'before', + PROJECT_DEFENSE_PPT: 'before', + PROJECT_DRAFT_EXPERT_OPINION: 'before', + PROJECT_EXPERT_OPINION_SIGNED: 'after', + PROJECT_RECTIFICATION_NOTICE: 'after' + }, 项目立项: { PROJECT_ARGUMENT_DOC: 'before', PROJECT_DEFENSE_PPT: 'before', diff --git a/src/views/review/meeting/ProjectList.vue b/src/views/review/meeting/ProjectList.vue index fc839d1d7..15a20d520 100644 --- a/src/views/review/meeting/ProjectList.vue +++ b/src/views/review/meeting/ProjectList.vue @@ -181,11 +181,18 @@ - + @@ -457,6 +464,16 @@ const handleDelete = async (id: number) => { getList() } +const handleActionCommand = (row: ReviewMeetingProjectRespVO, command: string) => { + if (command === 'upload') { + goToDetail(row) + return + } + if (command === 'delete') { + handleDelete(row.id) + } +} + const handleSelectionChange = (rows: ReviewMeetingProjectRespVO[]) => { selectedRows.value = rows } @@ -799,6 +816,40 @@ onBeforeUnmount(() => { justify-content: center; gap: 6px; } +.op-group.compact { + gap: 0; +} +.op-dropdown-trigger { + display: inline-flex; + align-items: center; + gap: 5px; + color: #295abc; + font-size: 14px; + font-weight: 500; + line-height: 1; + cursor: pointer; + user-select: none; +} +.op-dropdown-trigger::after { + content: ''; + width: 6px; + height: 6px; + margin-top: -3px; + border-right: 1.5px solid currentColor; + border-bottom: 1.5px solid currentColor; + transform: rotate(45deg); +} +.op-dropdown-trigger:hover { + color: #1f4ca5; + text-decoration: underline; +} +:deep(.el-dropdown-menu__item.danger-dropdown-item) { + color: #d63b42; +} +:deep(.el-dropdown-menu__item.danger-dropdown-item:not(.is-disabled):focus) { + color: #c22e35; + background-color: rgba(252, 79, 84, 0.12); +} /* ── 表格 ── */ :deep(.review-table .el-table__header-wrapper th) {