feat: 合并 admin/manager 重复页 + 公示意向 + 劳务签署

页合并 (admin/manager 共用, route.path 角色感知):
- expert: Experts.vue + ExpertNew.vue (list/new/edit/view 一套)
- sponsor-orgs: SponsorOrgs.vue
- sponsor-people: SponsorPeople.vue + SponsorPersonNew.vue + SponsorPersonDetail.vue
- executor-orgs: ExecutorOrgs.vue
- executor-people: ExecutorPeople.vue + ExecutorPersonNew.vue + ExecutorPersonDetail.vue
- 给 SponsorPeople / ExecutorPeople op 列补上 查看/编辑 按钮 (潜在 bug 修复)
- 详情弹窗统一用 el-descriptions 风格 (替代 admin 旧版 ElMessageBox.alert)

后端:
- BizSignController + BizSignServiceImpl + PdfService (劳务签署 PDF 流程)
- BizPublicityIntentController (公示意向: 支持/执行)
- BizPublicitySupportIntent / BizPublicityExecutionIntent ExportVo
- BizMeetingAttendee 字段合并 (bank_region 替代 bankProvince/bankCity)
- BizExpert 字段合并 (id_card_attachments CSV, bank_region)
- Excel 导入模板精简 (开户行 1 列)

前端:
- doctor/SignFill + SignContract + SignSuccess (劳务签署 3 页流程)
- ImportResultDialog 通用组件
- IdCardUploader 重构 (单 v-model:idCardAttachments, CSV 格式)
- AreaCascader 调整
- Login.vue + AdminLayout.vue + PortalShell.vue + Home.vue 适配

DB: 字段合并 (id_card_front/back → id_card_attachments, bank_province/city → bank_region)
This commit is contained in:
郭庆泰
2026-08-20 21:02:56 +08:00
parent 3198c408b7
commit 1e86865a40
68 changed files with 3034 additions and 2617 deletions
@@ -147,6 +147,24 @@ public interface SysUserMapper
*/
public SysUser checkPhoneUnique(String phonenumber);
/**
* 按手机号列表批量查询 (IN clause), 用于批量导入专家时识别已存在的 sys_user
* caller 控制单批 ≤1000, MySQL max_allowed_packet 默认安全范围
*
* @param phones 手机号列表
* @return SysUser 列表 (含 userId/phonenumber), 无匹配返回空列表
*/
public List<SysUser> selectByPhoneList(@Param("phones") List<String> phones);
/**
* 批量插入 sys_user (foreach, caller 控制 ≤100/批)
* ⚠️ useGeneratedKeys 在 foreach 内不可靠, 不依赖返回 userId, 应插完后再 IN 查回
*
* @param list SysUser 列表 (password 须已 encrypt)
* @return 影响行数
*/
public int batchInsertUsers(@Param("list") List<SysUser> list);
/**
* 校验email是否唯一
*
@@ -183,7 +183,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} and del_flag = '0' limit 1
</select>
<!-- 按手机号列表 IN 查询, 识别批量导入时已存在的 sys_user -->
<select id="selectByPhoneList" resultMap="SysUserResult">
select user_id, phonenumber from sys_user
where phonenumber in
<foreach collection="phones" item="p" open="(" separator="," close=")">
#{p}
</foreach>
and del_flag = '0'
</select>
<!-- 批量插入 sys_user (caller 控制单批 ≤100). 不依赖 useGeneratedKeys 返回 userId, 由 service 层插完再 IN 查回 -->
<insert id="batchInsertUsers" parameterType="list">
insert into sys_user(user_name, nick_name, phonenumber, password, status, del_flag, role_type, create_by, create_time)
values
<foreach collection="list" item="u" separator=",">
(#{u.userName}, #{u.nickName}, #{u.phonenumber},
#{u.password}, #{u.status}, #{u.delFlag}, #{u.roleType},
#{u.createBy}, sysdate())
</foreach>
</insert>
<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
</select>