diff --git a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizAuthController.java b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizAuthController.java index 7f22f6e..8cc578f 100644 --- a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizAuthController.java +++ b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/controller/BizAuthController.java @@ -11,9 +11,12 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.ruoyi.business.domain.BizOrg; +import com.ruoyi.business.domain.BizPerson; import com.ruoyi.business.dto.SmsValidForm; +import com.ruoyi.business.mapper.BizPersonMapper; import com.ruoyi.business.service.IBizOrgService; import com.ruoyi.business.service.SysSmsService; +import com.ruoyi.common.utils.id.SnowflakeId; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -37,7 +40,8 @@ import com.ruoyi.system.service.ISysUserService; * 3. 加密密码 * 4. 插入 sys_user (用户名=前端传入, sys_user.role_type 写入 executor/sponsor, 主账号) * 5. 插入 biz_org (对应类型, business_nature/contact_phone 从表单) - * 注: 主账号不建 biz_person + * 6. 插入 biz_person (主账号同步建自己=管理员, 让自己在"人员管理"可见) + * 注: 主账号同步建 biz_person (自己=管理员) * * 2026-08-16 重构: 删 biz_user_role_bind, 统一用 sys_user.role_type (见迁移脚本) * @@ -58,6 +62,9 @@ public class BizAuthController extends BaseController { @Autowired private IBizOrgService bizOrgService; + @Autowired + private BizPersonMapper bizPersonMapper; + @Autowired private BCryptPasswordEncoder passwordEncoder; @@ -294,6 +301,24 @@ public class BizAuthController extends BaseController { bizOrgService.insert(org); Long orgId = org.getOrgId(); + // 6. 同步建 biz_person (主账号自己 = 管理员, 让"人员管理"能看到自己) + // 注意: 不能走 IBizPersonService.insert(BizPerson, Long), 那个方法是创建 SUB 子账号的 + // (强制 accountType='SUB' + 需 loginUsername, 主账号自己不需要). + // sys_user 已在 step 4 建好, 这里只需把 biz_person 关联到主账号自己. + BizPerson self = new BizPerson(); + SnowflakeId.injectIfEmpty(self, "personId"); + self.setName(unitName); + self.setPhone(phone); + self.setOrgId(orgId); + self.setDepartment("管理部"); + self.setPosition("总负责人"); + self.setRole("admin"); // 主账号 = 管理员 (与子账号的监察员区分) + self.setUnitType("sponsor"); + self.setUserId(userId); + self.setCreateBy(username); + self.setUpdateBy(username); + bizPersonMapper.insert(self); + return success("注册成功, 请等待审核").put("userId", userId).put("orgId", orgId); } } diff --git a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizPersonMapper.java b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizPersonMapper.java index 61ad0fb..d7dba34 100644 --- a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizPersonMapper.java +++ b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/mapper/BizPersonMapper.java @@ -1,5 +1,6 @@ package com.ruoyi.business.mapper; import java.util.List; +import org.apache.ibatis.annotations.Param; import com.ruoyi.business.domain.BizPerson; /** @@ -19,4 +20,6 @@ public interface BizPersonMapper int deleteByPrimaryKeys(String[] personIds); /** 联动: person 逻辑删除后, 把对应 sys_user 子账号也逻辑删除 */ int softDeleteSysUserByPersonIds(String[] personIds); + /** 校验某 org 下是否已有 admin 角色 (注册时兜底, 保证一公司一管理员) */ + int countAdminByOrgId(@Param("orgId") Long orgId); } \ No newline at end of file diff --git a/ry-api/ruoyi-business/src/main/resources/mapper/business/BizPersonMapper.xml b/ry-api/ruoyi-business/src/main/resources/mapper/business/BizPersonMapper.xml index 8991c61..e612c4e 100644 --- a/ry-api/ruoyi-business/src/main/resources/mapper/business/BizPersonMapper.xml +++ b/ry-api/ruoyi-business/src/main/resources/mapper/business/BizPersonMapper.xml @@ -47,9 +47,10 @@ u.del_flag = '0' and p.unit_type = #{unitType} - and p.name = #{name} + and p.name like concat('%', #{name}, '%') and p.phone = #{phone} and p.org_id = #{orgId} + and o.org_name like concat('%', #{orgName}, '%') and o.org_type = #{orgType} and p.department = #{department} and p.position = #{position} @@ -144,16 +145,18 @@ - + + + + diff --git a/ry-vue3/src/utils/roleMap.js b/ry-vue3/src/utils/roleMap.js index 0439f0b..fd7081a 100644 --- a/ry-vue3/src/utils/roleMap.js +++ b/ry-vue3/src/utils/roleMap.js @@ -9,7 +9,8 @@ */ export const PERSON_ROLE_LABEL = { meetingExecutor: '会议执行', - supervisor: '监察员' + supervisor: '监察员', + admin: '管理员' } /** diff --git a/ry-vue3/src/views/auth/Login.vue b/ry-vue3/src/views/auth/Login.vue index 2af0f01..b0c681a 100644 --- a/ry-vue3/src/views/auth/Login.vue +++ b/ry-vue3/src/views/auth/Login.vue @@ -204,7 +204,7 @@ let smsSmsTimer = null const registerTypes = [ { value: 'expert', name: '项目参与专家', desc: '负责项目方案设计与评审' }, { value: 'executor', name: '项目执行单位(供应商)', desc: '承担项目执行,需走入库流程' }, - { value: 'sponsor', name: '项目支持单位', desc: '注册后默认为监察员角色' } + { value: 'sponsor', name: '项目支持单位', desc: '注册后默认为管理员角色, 可建监察员子账号' } ] const userTypes = [ diff --git a/ry-vue3/src/views/portal/Home.vue b/ry-vue3/src/views/portal/Home.vue index 8e266b6..a4cfc75 100644 --- a/ry-vue3/src/views/portal/Home.vue +++ b/ry-vue3/src/views/portal/Home.vue @@ -65,8 +65,8 @@
diff --git a/ry-vue3/src/views/sponsor/NewPerson.vue b/ry-vue3/src/views/sponsor/NewPerson.vue index f960a62..d968b2c 100644 --- a/ry-vue3/src/views/sponsor/NewPerson.vue +++ b/ry-vue3/src/views/sponsor/NewPerson.vue @@ -66,7 +66,10 @@ - + + + 管理员 + diff --git a/ry-vue3/src/views/sponsor/PersonDetail.vue b/ry-vue3/src/views/sponsor/PersonDetail.vue index 7d93bf6..c05633a 100644 --- a/ry-vue3/src/views/sponsor/PersonDetail.vue +++ b/ry-vue3/src/views/sponsor/PersonDetail.vue @@ -45,7 +45,11 @@ - 监察员 + + + {{ translatePersonRole(detail.role) }} + {{ display.role }} @@ -81,6 +85,7 @@ import { ref, computed, onMounted } from 'vue' import { useRoute, useRouter } from 'vue-router' import { ElMessage } from 'element-plus' import { bizGet } from '@/api/public' +import { translatePersonRole } from '@/utils/roleMap' const route = useRoute() const router = useRouter() diff --git a/ry-vue3/src/views/sponsor/SponsorPeople.vue b/ry-vue3/src/views/sponsor/SponsorPeople.vue index 869ccf2..ce3fa76 100644 --- a/ry-vue3/src/views/sponsor/SponsorPeople.vue +++ b/ry-vue3/src/views/sponsor/SponsorPeople.vue @@ -51,8 +51,10 @@ @@ -75,10 +77,12 @@ @@ -142,9 +146,12 @@ import { useRouter } from 'vue-router' import { ElMessage, ElMessageBox } from 'element-plus' import { bizUpdate, bizDelete } from '@/api/public' import { listSponsorPerson } from '@/api/business/person' +import { useUserStore } from '@/store/user' +import { translatePersonRole } from '@/utils/roleMap' import request from '@/utils/request' const router = useRouter() +const store = useUserStore() // sponsor 端只看自己团队 (主账号+子账号) 创建的人, 走专属接口 /business/person/sponsorList (后端强制隔离) const q = reactive({