refactor(doctor/submissions): 合并到 biz_project_plan + 删除 biz_submission 死代码

- /doctor/submissions 改走 biz_project_plan,与 /manager/plans 字段/组件/状态字典完全对齐
- BizProjectPlan 加 submitter_id (BIGINT) + submitter_name (LEFT JOIN 查询字段)
- mapper 改 LEFT JOIN biz_person + sys_user,COALESCE(bp.name, u.user_name) 兜底
- biz_person.user_id 加 UNIQUE 索引 (1:1 LEFT JOIN 无笛卡尔积)
- controller 加 doctor 角色自动过滤: list 按 submitter_id, add/edit 强制 submitter_id
- 删除 7 个 BizSubmission 死代码 (Controller/Service/Mapper/Domain/XML/Enum) + 1 utils
- 路由参数 :subId → :planId (路径名 submission 保留产品文案)
- 新增 migration_submission_to_projectPlan_2026_08_18.sql
This commit is contained in:
郭庆泰
2026-08-18 00:28:40 +08:00
parent b41cf77cac
commit c9fc6ebdb8
17 changed files with 245 additions and 562 deletions
+9 -9
View File
@@ -37,12 +37,12 @@
<a class="more" @click.prevent="$router.push('/doctor/submissions')">更多 </a>
</h2>
<ul class="simple-list">
<li class="simple-item" v-for="s in pendingAgreements" :key="s.subId">
<li class="simple-item" v-for="s in pendingAgreements" :key="s.planId">
<div class="item-main">
<span class="item-title">{{ s.title }}</span>
<span class="item-title">{{ s.planName }}</span>
</div>
<span class="item-status" :class="{ done: s.status === 'done' }">
{{ s.status === 'done' ? '已完成' : '待签署' }}
<span class="item-status" :class="{ done: s.status === '2' }">
{{ s.status === '2' ? '已通过' : (s.status === '3' ? '已退回' : (s.status === '1' ? '审核中' : '待提交')) }}
</span>
</li>
<li v-if="!pendingAgreements.length" class="empty">暂无待签协议</li>
@@ -109,13 +109,13 @@ async function load() {
upcomingMeetings.value = (data?.rows || []).slice(0, 5)
} catch (e) { upcomingMeetings.value = [] }
// 待签署协议
// 待签署协议 (改走 biz_project_plan, 后端 doctor 角色已自动按当前用户过滤)
try {
const { data } = await bizList('submission', { pageNum: 1, pageSize: 5 })
const { data } = await bizList('projectPlan', { pageNum: 1, pageSize: 5 })
pendingAgreements.value = (data?.rows || []).slice(0, 5).map(s => ({
subId: s.subId,
title: s.title,
status: s.status === '审核通过' ? 'done' : 'pending'
planId: s.planId,
planName: s.planName,
status: s.status
}))
} catch (e) { pendingAgreements.value = [] }