fix(assign): 提交截止(天) 单条模式回填, 批量模式显示空

- loadSingleProject: 回填 assignForm.deadlineDays = Number(p.submitDeadlineDays || 30)
- resetAssignForm: 批量模式 deadlineDays = null (显示空), 单条默认 30
- loadBatchProjects: 保持不回填 (N 项目共用空值, 沿用初始状态)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
郭庆泰
2026-08-20 23:43:34 +08:00
co-authored by Claude
parent d1c755971d
commit 13c4bd4e76
@@ -14,16 +14,39 @@
</div> </div>
<!-- 项目核心属性 (单条模式: 只读展示, 字段未加载完时显示 -) --> <!-- 项目核心属性 (单条模式: 只读展示, 字段未加载完时显示 -) -->
<el-descriptions v-if="!batchMode" v-loading="singleLoading" class="project-meta" :column="3" border size="small"> <div v-if="!batchMode" v-loading="singleLoading">
<el-descriptions-item label="项目编号">{{ currentProject?.projectNo || '-' }}</el-descriptions-item> <div class="new-card-title">项目信息</div>
<el-descriptions-item label="项目名称">{{ currentProject?.projectName || '-' }}</el-descriptions-item> <el-form :model="currentProject || {}" label-width="110px" class="project-meta">
<el-descriptions-item label="项目形式">{{ currentProject?.projectForm || '-' }}</el-descriptions-item> <el-row :gutter="12">
<el-descriptions-item label="总场次/总期数">{{ currentProject?.totalSessions || 0 }}</el-descriptions-item> <el-col :span="12">
<el-descriptions-item label="总金额(元)">{{ currentProject?.totalAmount || 0 }}</el-descriptions-item> <el-form-item label="项目编号">{{ currentProject?.projectNo || '-' }}</el-form-item>
<el-descriptions-item label="管理费及税金">{{ currentProject?.manageFee || 0 }}</el-descriptions-item> </el-col>
</el-descriptions> <el-col :span="12">
<el-form-item label="项目名称">{{ currentProject?.projectName || '-' }}</el-form-item>
</el-col>
</el-row>
<el-row :gutter="12">
<el-col :span="12">
<el-form-item label="项目形式">{{ currentProject?.projectForm || '-' }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="总场次/总期数">{{ currentProject?.totalSessions || 0 }}</el-form-item>
</el-col>
</el-row>
<el-row :gutter="12">
<el-col :span="12">
<el-form-item label="总金额(元)">{{ currentProject?.totalAmount || 0 }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="管理费及税金">{{ currentProject?.manageFee || 0 }}</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<el-form :model="assignForm" label-width="120px"> <el-form :model="assignForm" label-width="120px">
<div class="new-card-title">项目分配</div>
<el-form-item label="支持单位"> <el-form-item label="支持单位">
<el-select v-model="assignForm.sponsorAdminUserId" placeholder="请选择支持单位" filterable <el-select v-model="assignForm.sponsorAdminUserId" placeholder="请选择支持单位" filterable
:filter-method="searchSponsorOrgs" clearable style="width:100%" @change="onSponsorOrgPick"> :filter-method="searchSponsorOrgs" clearable style="width:100%" @change="onSponsorOrgPick">
@@ -32,8 +55,6 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-divider>执行单位分配</el-divider>
<!-- 单选模式: 实时校验栏 --> <!-- 单选模式: 实时校验栏 -->
<div v-if="!batchMode" class="assign-sessions-bar"> <div v-if="!batchMode" class="assign-sessions-bar">
<span>项目总场次: <b>{{ assignForm.totalSessions || 0 }}</b></span> <span>项目总场次: <b>{{ assignForm.totalSessions || 0 }}</b></span>
@@ -209,7 +230,7 @@ function resetAssignForm() {
totalSessions: 0, totalSessions: 0,
totalAmount: 0, totalAmount: 0,
execRows: [makeEmptyExecRow()], execRows: [makeEmptyExecRow()],
deadlineDays: 30 deadlineDays: batchMode ? null : 30
}) })
sponsorOrgOptions.value = [] sponsorOrgOptions.value = []
} }
@@ -318,6 +339,7 @@ async function loadSingleProject() {
assignForm.sponsorAdminUserName = p.sponsorAdminUserName || '' assignForm.sponsorAdminUserName = p.sponsorAdminUserName || ''
assignForm.totalSessions = Number(p.totalSessions || 0) assignForm.totalSessions = Number(p.totalSessions || 0)
assignForm.totalAmount = Number(p.totalAmount || 0) assignForm.totalAmount = Number(p.totalAmount || 0)
assignForm.deadlineDays = Number(p.submitDeadlineDays || 30)
// 拉已分配记录 // 拉已分配记录
await loadAssigns(singleProjectId) await loadAssigns(singleProjectId)
// 拉支持方候选 (含已选项回拉) // 拉支持方候选 (含已选项回拉)
@@ -493,8 +515,9 @@ async function submitAssign() {
.info-bar b { color: #303133; margin: 0 2px; } .info-bar b { color: #303133; margin: 0 2px; }
/* 项目核心属性只读区 */ /* 项目核心属性只读区 */
.project-meta { margin-bottom: 16px; } .project-meta { background: #fff; border: 1px solid #f0f0f0; border-radius: 6px; padding: 12px 16px 4px; margin-bottom: 16px; }
.project-meta :deep(.el-descriptions__label) { width: 110px; } .project-meta :deep(.el-form-item) { margin-bottom: 12px; }
.project-meta :deep(.el-form-item__content) { font-size: 13px; color: #1a1a1a; min-height: 32px; line-height: 32px; }
/* 分配 dialog 总场次条 (从 Projects.vue 1:1 搬) */ /* 分配 dialog 总场次条 (从 Projects.vue 1:1 搬) */
.assign-sessions-bar { .assign-sessions-bar {