import assert from 'node:assert/strict' import fs from 'node:fs' import path from 'node:path' import { buildProjectTimeBatchPayload, mapCopiedProjectItems, mapPersistedProjectItems, shouldSyncPersistedProjectTimes } from '../src/views/review/meeting/meetingEditHelpers' const baseProject = { id: 101, seqNo: 1, startTime: '09:00', endTime: '09:15', agendaCategory: '项目申报论证', projectTitle: '项目A', reporter: '张三', reporterUnit: '软件学院', reviewDate: '2026-04-01' } const persistedProjects = mapPersistedProjectItems([baseProject]) assert.equal( persistedProjects[0].sourceProjectId, undefined, '编辑已有会议时,不应该把现有项目 id 回填到 sourceProjectId' ) const copiedProjects = mapCopiedProjectItems([baseProject]) assert.equal(copiedProjects[0].sourceProjectId, 101, '复制会议时,应该保留源项目 id 用于首次复制资料') assert.equal( shouldSyncPersistedProjectTimes({ isEdit: true, isProjectsModified: false, originalMeetingStart: 1711942800000, currentMeetingStart: 1711944600000, projects: [baseProject] }), true, '编辑已有会议且仅修改会议开始时间时,应该同步已落库项目时间' ) assert.deepEqual(buildProjectTimeBatchPayload([baseProject]), { items: [ { id: 101, startTime: '09:00', endTime: '09:15' } ] }) const meetingEditSource = fs.readFileSync( path.resolve(process.cwd(), 'src/views/review/meeting/MeetingEdit.vue'), 'utf8' ) assert.match( meetingEditSource, /mapPersistedProjectItems/, 'MeetingEdit.vue 应该接入编辑态项目映射,避免把现有项目 id 回填到 sourceProjectId' ) assert.match( meetingEditSource, /mapCopiedProjectItems/, 'MeetingEdit.vue 应该接入复制态项目映射,保留首次复制资料所需的 sourceProjectId' ) assert.match( meetingEditSource, /updateReviewProjectTimeBatch/, 'MeetingEdit.vue 应该在会议起始时间变化后同步已落库项目时间' ) console.log('reviewMeetingEditHelpers checks passed')