feat: 多处页面改造 + 新增劳务协议模板配置

主要改动:
- biz_meeting_attendee 中间表 + doctor/expert 角色数据隔离
- biz_meeting_attendee 加 handsign/labor_protocol 字段 (劳务协议改造)
- biz_labor_protocol_template 配置表 + admin 页面 (从 HeguiConstants 迁移)
- biz_expert.expertId 改 Long + IdGenerator 生成 (去自增)
- Login.vue / PublicityDetail.vue / Home.vue 等多处 bug 修复 + UI 改进
- 新增 page-tech-review 报告 3 篇 (_self/*.md)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
郭庆泰
2026-08-19 21:06:49 +08:00
co-authored by Claude
parent ec4a8aa8f0
commit e496f34393
44 changed files with 2143 additions and 130 deletions
+10
View File
@@ -0,0 +1,10 @@
import request from '@/utils/request'
/**
* 当前登录用户的专家信息 (按 token 拿 userId 查 biz_expert)
* 返回 biz_expert 完整记录, 含 name / phone / department / title / workUnit 等
* 若当前用户不是专家 / 没注册过, 返回 null
*/
export function getMyExpertProfile() {
return request({ url: '/business/expert/profile', method: 'get' })
}
@@ -0,0 +1,30 @@
import request from '@/utils/request'
/**
* 劳务协议模板 API
* 全局共享, admin 在 /admin/labor-protocol 管理
*/
export function listLaborProtocolTemplates(params) {
return request({ url: '/business/laborProtocolTemplate/list', method: 'get', params })
}
export function getLaborProtocolTemplate(id) {
return request({ url: `/business/laborProtocolTemplate/${id}`, method: 'get' })
}
export function getDefaultLaborProtocolTemplate() {
return request({ url: '/business/laborProtocolTemplate/default', method: 'get' })
}
export function listEnabledLaborProtocolTemplates() {
return request({ url: '/business/laborProtocolTemplate/allEnabled', method: 'get' })
}
export function createLaborProtocolTemplate(data) {
return request({ url: '/business/laborProtocolTemplate', method: 'post', data })
}
export function updateLaborProtocolTemplate(data) {
return request({ url: '/business/laborProtocolTemplate', method: 'put', data })
}
export function deleteLaborProtocolTemplate(id) {
return request({ url: `/business/laborProtocolTemplate/${id}`, method: 'delete' })
}
export function setDefaultLaborProtocolTemplate(id) {
return request({ url: `/business/laborProtocolTemplate/${id}/default`, method: 'put' })
}
@@ -0,0 +1,25 @@
import request from '@/utils/request'
/**
* 当前登录用户的"待签署"会议列表 (handsign 或 labor_protocol 任一为空)
* 返回 [{id, meetingId, meetingName, startTime, ...}, ...]
*/
export function listUnsignedMeetingProtocols() {
return request({ url: '/business/meetingAttendee/unsigned', method: 'get' })
}
/**
* 更新手写签名 (Base64 字符串, 直接存 DB longtext)
* @param {number|string} id 中间表主键
* @param {string} handsign Base64 编码的签名图片
*/
export function updateHandsign(id, handsign) {
return request({ url: `/business/meetingAttendee/${id}/handsign`, method: 'put', data: { handsign } })
}
/**
* 更新劳务协议 URL (OSS 文件 URL, 由前端 OssImageUploader 上传后传入)
*/
export function updateLaborProtocol(id, laborProtocol) {
return request({ url: `/business/meetingAttendee/${id}/laborProtocol`, method: 'put', data: { laborProtocol } })
}