fix(meetings): 还原 MeetingNew.vue 到 a081da8 模板结构 (左6+右5, 无项目形式/总期数), 保留 3 模式逻辑
This commit is contained in:
@@ -5,9 +5,9 @@
|
||||
|
||||
<!-- el-form 包裹 + label-width 110px (跟原型一致) -->
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="110px">
|
||||
<!-- 2 列布局 (跟原型 .form-grid 一致: grid-auto-flow: column 让左 6 右 7 对齐) -->
|
||||
<!-- 2 列布局 (跟原型 .form-grid 一致: grid-auto-flow: column 让左 6 右 5 对齐) -->
|
||||
<div class="form-grid">
|
||||
<!-- 左列 6 项只读快照 (来自 biz_project 派生, 来自 meeting.projectId) -->
|
||||
<!-- 左列 6 项只读快照 (来自 biz_project 派生) -->
|
||||
<el-form-item label="项目编号">
|
||||
<span class="form-value code">{{ snap.projectNo }}</span>
|
||||
</el-form-item>
|
||||
@@ -27,23 +27,12 @@
|
||||
<span class="form-value">{{ snap.createUserName }}</span>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 右列 6 项可编辑 + 备注 (跨双列): 会议名称/项目形式/期数/总期数/开始/结束/备注 -->
|
||||
<el-form-item label="会议名称" prop="meetingName">
|
||||
<el-input v-model="form.meetingName" placeholder="请输入会议名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目形式" prop="projectForm">
|
||||
<el-select v-model="form.projectForm" placeholder="请选择项目形式" style="width:100%">
|
||||
<el-option label="线上" value="线上" />
|
||||
<el-option label="线下" value="线下" />
|
||||
<el-option label="线上+线下" value="线上+线下" />
|
||||
<el-option label="其他" value="其他" />
|
||||
</el-select>
|
||||
<!-- 右列 5 项: 1 只读 (会议名称 = 项目名) + 4 输入 -->
|
||||
<el-form-item label="会议名称">
|
||||
<span class="form-value">{{ form.meetingName }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="期数" prop="periodNo">
|
||||
<el-input-number v-model="form.periodNo" :min="1" :precision="0" placeholder="请填写第几期" />
|
||||
</el-form-item>
|
||||
<el-form-item label="总期数" prop="totalPeriods">
|
||||
<el-input-number v-model="form.totalPeriods" :min="1" :precision="0" />
|
||||
<el-input v-model="form.periodNo" placeholder="请填写第几期" />
|
||||
</el-form-item>
|
||||
<el-form-item label="会议开始时间" prop="startTime">
|
||||
<el-date-picker v-model="form.startTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择开始时间" />
|
||||
@@ -51,8 +40,8 @@
|
||||
<el-form-item label="会议结束时间" prop="endTime">
|
||||
<el-date-picker v-model="form.endTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择结束时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" class="full-row" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" :rows="3" placeholder="请输入备注" />
|
||||
<el-form-item label="备注">
|
||||
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
@@ -81,7 +70,7 @@ const router = useRouter()
|
||||
// copy: ?meetingId=xxx&mode=copy → POST /business/meeting (复制)
|
||||
// 修改/复制 URL 同时带 projectId 让左列快照能立即加载 (不必先等 bizGet meeting)
|
||||
const meetingId = route.query.meetingId || ''
|
||||
const urlProjectId = route.query.projectId || '' // URL 直接带的 projectId
|
||||
const urlProjectId = route.query.projectId || ''
|
||||
const mode = computed(() => {
|
||||
if (meetingId && route.query.mode === 'copy') return 'copy'
|
||||
if (meetingId) return 'edit'
|
||||
@@ -102,27 +91,22 @@ const snap = reactive({
|
||||
createUserName: ''
|
||||
})
|
||||
|
||||
// ========== 表单 (右列 6 项可编辑 + 备注 1 项, 顺序跟 template 对齐) ==========
|
||||
// ========== 表单 (右列 5 项: meetingName 只读 + 4 输入) ==========
|
||||
const form = reactive({
|
||||
projectId: null,
|
||||
projectId: urlProjectId ? Number(urlProjectId) : null,
|
||||
projectNo: '',
|
||||
projectName: '',
|
||||
meetingName: '', // 1. 会议名称
|
||||
projectForm: '', // 2. 项目形式
|
||||
periodNo: 1, // 3. 期数
|
||||
totalPeriods: 1, // 4. 总期数
|
||||
startTime: '', // 5. 会议开始时间
|
||||
endTime: '', // 6. 会议结束时间
|
||||
remark: '' // 7. 备注 (跨双列)
|
||||
meetingName: '',
|
||||
periodNo: '',
|
||||
startTime: '',
|
||||
endTime: '',
|
||||
remark: ''
|
||||
})
|
||||
|
||||
const rules = {
|
||||
meetingName: [{ required: true, message: '请输入会议名称', trigger: 'blur' }],
|
||||
periodNo: [{ required: true, message: '请填写第几期', trigger: 'blur' }],
|
||||
projectForm: [{ required: true, message: '请选择项目形式', trigger: 'change' }],
|
||||
startTime: [{ required: true, message: '请选择会议开始时间', trigger: 'change' }],
|
||||
endTime: [{ required: true, message: '请选择会议结束时间', trigger: 'change' }],
|
||||
totalPeriods: [{ required: true, message: '请填写总期数', trigger: 'blur' }]
|
||||
endTime: [{ required: true, message: '请选择会议结束时间', trigger: 'change' }]
|
||||
}
|
||||
|
||||
// ========== 加载项目快照 ==========
|
||||
@@ -150,17 +134,14 @@ async function loadMeeting(mid) {
|
||||
form.projectNo = d.projectNo || ''
|
||||
form.projectName = d.projectName || ''
|
||||
form.meetingName = d.meetingName || ''
|
||||
form.periodNo = d.periodNo || 1
|
||||
form.projectForm = d.projectForm || ''
|
||||
form.periodNo = d.periodNo || ''
|
||||
form.startTime = d.startTime || ''
|
||||
form.endTime = d.endTime || ''
|
||||
form.totalPeriods = d.totalPeriods || 1
|
||||
form.remark = d.remark || ''
|
||||
// 左列快照 projectNo/projectName 用 meeting 冗余字段 (即使 project_id 为 NULL 也能显示)
|
||||
snap.projectNo = d.projectNo || ''
|
||||
snap.projectName = d.projectName || ''
|
||||
// 总场次/支持单位/创建时间/创建人员 优先用 URL projectId, 其次 meeting.projectId
|
||||
// (URL 带的 projectId 优先, 避免 copy 模式下 user 没传导致再读 meeting)
|
||||
const pid = urlProjectId || d.projectId
|
||||
if (pid) {
|
||||
await loadProjectSnapshot(pid)
|
||||
@@ -172,17 +153,26 @@ async function onSave() {
|
||||
try { await formRef.value.validate() } catch (e) { return }
|
||||
submitting.value = true
|
||||
try {
|
||||
const payload = { ...form }
|
||||
const payload = {
|
||||
projectId: form.projectId,
|
||||
projectNo: form.projectNo,
|
||||
projectName: form.projectName,
|
||||
meetingName: form.meetingName,
|
||||
periodNo: form.periodNo,
|
||||
startTime: form.startTime,
|
||||
endTime: form.endTime,
|
||||
remark: form.remark
|
||||
}
|
||||
if (mode.value === 'edit') {
|
||||
// 修改: 走 bizUpdate, 带 meetingId (后端 WHERE 用, 不能 delete)
|
||||
payload.meetingId = form.meetingId
|
||||
// __silentError: 拦截器不自动 toast, 错误统一由下方 catch 处理 (避免双 toast)
|
||||
await bizUpdate('meeting', payload, { __silentError: true })
|
||||
ElMessage.success('修改成功')
|
||||
} else {
|
||||
// 新建 / 复制: 走 bizAdd, 不传 meetingId (AUTO_INCREMENT)
|
||||
delete payload.meetingId
|
||||
// 新建 / 复制: 走 bizAdd
|
||||
await bizAdd('meeting', payload, { __silentError: true })
|
||||
ElMessage.success(mode.value === 'copy' ? '复制成功' : '创建成功')
|
||||
ElMessage.success(mode.value === 'copy' ? '复制成功' : '会议创建成功')
|
||||
}
|
||||
goBack()
|
||||
} catch (e) {
|
||||
@@ -193,27 +183,24 @@ async function onSave() {
|
||||
}
|
||||
|
||||
function goBack() {
|
||||
// 跳回列表 (用 name 而非 path, hash 模式 + 路由可复用)
|
||||
// 跳回列表
|
||||
router.push({ name: 'manager-meetings' })
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
if (mode.value === 'edit') {
|
||||
// 修改: 加载会议详情 (左列项目快照由 meeting.projectId 派生)
|
||||
await loadMeeting(meetingId)
|
||||
} else if (mode.value === 'copy') {
|
||||
// 复制: 加载会议详情, name 加 " 副本", periodNo reset 为 1 (用户填)
|
||||
// 复制: 加载会议详情, name 加 " 副本"
|
||||
await loadMeeting(meetingId)
|
||||
form.meetingName = (form.meetingName || '') + ' 副本'
|
||||
form.periodNo = 1 // 复制后让用户重新填期数
|
||||
} else {
|
||||
// 新建: 加载项目快照, meetingName 默认 = 项目名
|
||||
if (urlProjectId) {
|
||||
form.projectId = Number(urlProjectId) || null
|
||||
await loadProjectSnapshot(urlProjectId)
|
||||
form.projectNo = snap.projectNo
|
||||
form.projectName = snap.projectName
|
||||
form.meetingName = snap.projectName // 默认会议名 = 项目名
|
||||
form.meetingName = snap.projectName
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -233,12 +220,12 @@ onMounted(async () => {
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
/* === 2 列布局 (跟原型 .form-grid 一致, grid-auto-flow: column 让左 6 右 6 + 备注 1 项, 共 7 行) === */
|
||||
/* === 2 列布局 (跟原型 .form-grid 一致, grid-auto-flow: column 让左 6 右 5 对齐) === */
|
||||
.form-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
grid-auto-flow: column;
|
||||
grid-template-rows: repeat(7, auto);
|
||||
grid-template-rows: repeat(6, auto);
|
||||
gap: 20px 32px;
|
||||
max-width: 900px;
|
||||
}
|
||||
@@ -246,10 +233,6 @@ onMounted(async () => {
|
||||
.form-grid :deep(.el-form-item) {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
/* 备注占满整行 (跨双列), 放在 form 末尾, 视觉上独占一行 */
|
||||
.form-grid :deep(.full-row) {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
/* 只读值样式 */
|
||||
.form-value {
|
||||
|
||||
Reference in New Issue
Block a user