chore: biz_org 合并 / BizProject 重构 / 各角色页面调整 (上次重构遗留)

涵盖改动范围:
- 后端 BizOrg / BizProject / BizProjectRating / BizSpecialPlan controller + domain + mapper + service
- 前端 admin (BizSpecialPlanAdmin, ProjectCategory) / executor / leader / manager / sponsor 多页调整
- api/dict.js + AdminLayout.vue 同步
This commit is contained in:
郭庆泰
2026-08-18 00:30:34 +08:00
parent c9fc6ebdb8
commit b52a334184
32 changed files with 744 additions and 454 deletions
+31 -12
View File
@@ -64,8 +64,18 @@
<el-table-column label="可用金额" width="120" align="right"><template #default="{ row }">¥{{ formatMoney(row.availableAmount) }}</template></el-table-column>
<el-table-column label="已支付劳务费" width="120" align="right"><template #default="{ row }">¥{{ formatMoney(row.paidLaborAmount) }}</template></el-table-column>
<el-table-column label="已支付会务费" width="120" align="right"><template #default="{ row }">¥{{ formatMoney(row.paidMeetingAmount) }}</template></el-table-column>
<el-table-column prop="complianceScore" label="执行单位得分(合规)" width="150" align="center" />
<el-table-column prop="ratingScore" label="执行单位评价(支持方)" width="160" align="center" />
<el-table-column prop="managerScore" label="执行单位得分(合规)" width="150" align="center">
<template #default="{ row }">
<span v-if="row.managerScore != null">{{ row.managerScore }}</span>
<span v-else style="color:#c0c4cc">-</span>
</template>
</el-table-column>
<el-table-column prop="sponsorScore" label="执行单位评价(支持方)" width="160" align="center">
<template #default="{ row }">
<span v-if="row.sponsorScore != null">{{ row.sponsorScore }}</span>
<span v-else style="color:#c0c4cc">-</span>
</template>
</el-table-column>
<el-table-column prop="orgName" label="支持公司" min-width="140" show-overflow-tooltip />
<el-table-column prop="projectForm" label="项目形式" width="100" align="center" />
<el-table-column label="是否结题" width="90" align="center">
@@ -180,7 +190,7 @@
<el-descriptions-item label="可用金额">¥{{ formatMoney(detail.availableAmount) }}</el-descriptions-item>
<el-descriptions-item label="已支付劳务费">¥{{ formatMoney(detail.paidLaborAmount) }}</el-descriptions-item>
<el-descriptions-item label="已支付会务费">¥{{ formatMoney(detail.paidMeetingAmount) }}</el-descriptions-item>
<el-descriptions-item label="执行单位得分">{{ detail.ratingScore || '-' }}</el-descriptions-item>
<el-descriptions-item label="执行单位得分">{{ detail.managerScore || '-' }}</el-descriptions-item>
<el-descriptions-item label="是否结题">
<el-tag :type="detail.isFinished === '1' ? 'success' : 'info'" disable-transitions>
{{ detail.isFinished === '1' ? '已结题' : '未结题' }}
@@ -306,21 +316,30 @@ async function submitRate() {
if (!rateForm.q1 && !rateForm.q2 && !rateForm.q3 && !rateForm.q4) {
ElMessage.warning('请至少完成一项评分'); return
}
// 计算 4 维平均 (任意维度填了就参与平均)
const scores = [rateForm.q1, rateForm.q2, rateForm.q3, rateForm.q4].map(v => Number(v))
const filled = scores.filter(v => v > 0)
const avg = filled.length ? (filled.reduce((s, v) => s + v, 0) / filled.length).toFixed(1) : null
try {
// sponsor 专属: POST /business/project/rate (BizProjectSponsor 字段)
const data = {
// 1. 写明细到 biz_project_rating (rater_role='sponsor', 后端自动填 raterId)
await request.post('/business/project/rate', {
projectId: rateForm.projectId,
projectNo: rateForm.projectNo,
projectName: rateForm.projectName,
sponsorQ1: rateForm.q1,
sponsorQ2: rateForm.q2,
sponsorQ3: rateForm.q3,
sponsorQ4: rateForm.q4,
sponsorRemark: rateForm.remark
raterRole: 'sponsor',
qualityScore: rateForm.q1,
responseScore: rateForm.q2,
cooperationScore: rateForm.q3,
complianceScore: rateForm.q4,
remark: rateForm.remark
})
// 2. 写聚合分到 biz_project.sponsor_score
if (avg != null) {
await bizUpdate('project', { projectId: rateForm.projectId, sponsorScore: Number(avg) })
}
await request.post('/business/project/rate', data)
ElMessage.success('评分已提交')
ElMessage.success(`评分已提交, 平均分:${avg ?? '-'}`)
rateOpen.value = false
load()
} catch (e) { ElMessage.error(e?.msg || '提交失败') }
}