feat(sponsor/people): 主账号同步建 biz_person (admin/总负责人), 列表可见 + 操作列对本人隐藏 + 新建下拉不包含 admin
后端:
- BizAuthController.registerSponsor step 6: 为主账号同步建 biz_person
(走 BizPersonMapper 直插, 绕过 BizPersonServiceImpl 创 SUB 子账号的逻辑;
SnowflakeId 注入 personId; department=管理部, position=总负责人, role=admin,
unit_type=sponsor, user_id=主账号自己)
- BizPersonMapper.java + xml 新增 countAdminByOrgId: 校验某 org 下是否已有 admin
(注册场景下天然返回 0, 是给未来 bug 兜底, registerSponsor 暂不调用)
- BizPersonMapper.xml selectSponsorList: WHERE 加 OR u.user_id=#{sponsorOwnerUid},
让主账号自己的 biz_person (parent_user_id=NULL) 也能被自身 list 看到
前端:
- utils/roleMap.js: PERSON_ROLE_LABEL 加 admin:'管理员'
- sponsor/SponsorPeople.vue: 角色列改用 translatePersonRole, tag type 按 role 动态
(admin=warning, supervisor=primary); 操作列本人隐藏 禁用/恢复 + 删除
(v-if=row.userId !== store.user?.userId, 防主账号把自己禁用/误删)
- sponsor/NewPerson.vue: 编辑模式 role=admin 显示静态 el-tag, 新建下拉仍只含 supervisor
- sponsor/PersonDetail.vue: 角色展示同步用 translatePersonRole
- auth/Login.vue + portal/Home.vue: 文案 监察员 → 管理员 (注册即管理员, 可建监察员子账号)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -51,8 +51,10 @@
|
||||
<el-table-column prop="position" label="职务" width="120" />
|
||||
<el-table-column label="角色" width="100">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.role === 'supervisor'" type="primary" disable-transitions>监察员</el-tag>
|
||||
<span v-else style="color:#909399">—</span>
|
||||
<!-- 主账号 role=admin(管理员/总负责人), 子账号 role=supervisor(监察员), 都走 roleMap 翻译 -->
|
||||
<el-tag :type="row.role === 'admin' ? 'warning' : (row.role === 'supervisor' ? 'primary' : 'info')" disable-transitions>
|
||||
{{ translatePersonRole(row.role) || '—' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="账号类型" width="90">
|
||||
@@ -75,10 +77,12 @@
|
||||
<template #default="{ row }">
|
||||
<el-button link type="primary" @click="onView(row)">查看</el-button>
|
||||
<el-button link type="primary" @click="onEdit(row)">编辑</el-button>
|
||||
<el-button link :type="row.status === '0' ? 'warning' : 'success'" @click="onToggleStatus(row)">
|
||||
<!-- 本人不显示禁用/恢复按钮 (避免主账号把自己禁用导致登录不上) -->
|
||||
<el-button v-if="row.userId !== store.user?.userId" link :type="row.status === '0' ? 'warning' : 'success'" @click="onToggleStatus(row)">
|
||||
{{ row.status === '0' ? '禁用' : '恢复' }}
|
||||
</el-button>
|
||||
<el-button link type="danger" @click="onRemoveOne(row)">删除</el-button>
|
||||
<!-- 本人不显示删除按钮 (避免主账号误删自己的 biz_person) -->
|
||||
<el-button v-if="row.userId !== store.user?.userId" link type="danger" @click="onRemoveOne(row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user