93 lines
5.9 KiB
SQL
93 lines
5.9 KiB
SQL
-- ============================================================
|
||
-- 注册企业绑定/创建申请(yz_auth_tenant_apply)+ 审核菜单
|
||
-- type=1 加入企业:注册第二步「绑定企业」,企业管理员在 backend 审批
|
||
-- type=2 创建企业:注册第二步「创建企业」,平台在 platform 审批,
|
||
-- 通过后自动建租户并把申请人绑定为租户管理员(不可更改)
|
||
-- 幂等脚本:重复执行不会产生重复数据。
|
||
-- 执行:mysql -h <host> -P <port> -u <user> -p <db> < create_auth_tenant_apply.sql
|
||
-- ============================================================
|
||
|
||
-- ---------- 1. 申请表 ----------
|
||
CREATE TABLE IF NOT EXISTS yz_auth_tenant_apply (
|
||
id bigint unsigned NOT NULL AUTO_INCREMENT,
|
||
identity_id bigint unsigned NOT NULL COMMENT '申请人统一身份ID(yz_auth_identity)',
|
||
type tinyint NOT NULL DEFAULT 1 COMMENT '1=加入企业 2=创建企业',
|
||
tid bigint unsigned NOT NULL DEFAULT 0 COMMENT '目标企业ID(type=1 有值;type=2 审核通过后回填)',
|
||
tenant_name varchar(128) NOT NULL DEFAULT '' COMMENT '企业名称(申请时快照)',
|
||
credit_code varchar(64) NOT NULL DEFAULT '' COMMENT '统一社会信用代码(type=2)',
|
||
legal_person varchar(64) NOT NULL DEFAULT '' COMMENT '法定代表人姓名(type=2)',
|
||
license_file varchar(500) NOT NULL DEFAULT '' COMMENT '营业执照文件URL,pdf/jpg/png(type=2)',
|
||
contact_person varchar(64) NOT NULL DEFAULT '' COMMENT '联系人',
|
||
contact_phone varchar(20) NOT NULL DEFAULT '' COMMENT '联系电话',
|
||
contact_email varchar(128) NOT NULL DEFAULT '' COMMENT '电子邮箱',
|
||
address varchar(255) NOT NULL DEFAULT '' COMMENT '公司地址',
|
||
status tinyint NOT NULL DEFAULT 0 COMMENT '0=待审核 1=已通过 2=已驳回',
|
||
reject_reason varchar(255) NOT NULL DEFAULT '' COMMENT '驳回原因',
|
||
reviewer_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '审核人ID(backend=租户用户uid / platform=平台管理员id)',
|
||
reviewer_name varchar(64) NOT NULL DEFAULT '' COMMENT '审核人姓名',
|
||
review_time datetime NULL COMMENT '审核时间',
|
||
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
update_time datetime NULL COMMENT '更新时间',
|
||
delete_time datetime NULL COMMENT '软删时间',
|
||
PRIMARY KEY (id),
|
||
KEY idx_apply_identity (identity_id),
|
||
KEY idx_apply_tid (tid),
|
||
KEY idx_apply_status (status, type)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='注册时加入企业/创建企业申请';
|
||
|
||
-- ---------- 2. backend 菜单:基础设置 → 加入申请 ----------
|
||
-- 注意:用户变量在 SELECT 列表赋值后于同语句 WHERE 中引用不可靠,改用派生表
|
||
INSERT INTO yz_system_menu
|
||
(pid, title, path, component_path, icon, sort, status, is_visible, views, type, creater, remark)
|
||
SELECT bs.id, '加入申请', '/basicSettings/applies', 'basicSettings/applies/index.vue',
|
||
'Bell', 90, 1, 1, '[2]', 2, 'system', '企业管理员审批注册用户提交的「绑定企业」申请'
|
||
FROM (SELECT id FROM yz_system_menu WHERE path = '/basicSettings' AND delete_time IS NULL LIMIT 1) bs
|
||
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/basicSettings/applies' AND delete_time IS NULL) x);
|
||
|
||
-- 找不到基础设置目录时退化为 backend 顶级菜单
|
||
INSERT INTO yz_system_menu
|
||
(pid, title, path, component_path, icon, sort, status, is_visible, views, type, creater, remark)
|
||
SELECT 0, '加入申请', '/basicSettings/applies', 'basicSettings/applies/index.vue',
|
||
'Bell', 90, 1, 1, '[2]', 2, 'system', '企业管理员审批注册用户提交的「绑定企业」申请'
|
||
FROM DUAL
|
||
WHERE (SELECT id FROM yz_system_menu WHERE path = '/basicSettings' AND delete_time IS NULL LIMIT 1) IS NULL
|
||
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/basicSettings/applies' AND delete_time IS NULL) x);
|
||
|
||
-- ---------- 3. platform 菜单:企业创建审核(顶级) ----------
|
||
INSERT INTO yz_system_menu
|
||
(pid, title, path, component_path, icon, sort, status, is_visible, views, type, creater, remark)
|
||
SELECT 0, '企业创建审核', '/tenantApply', 'tenantApply/index.vue',
|
||
'OfficeBuilding', 21, 1, 1, '[1]', 2, 'system', '平台审批注册用户提交的「创建企业」申请,通过后自动建租户'
|
||
FROM DUAL
|
||
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/tenantApply' AND delete_time IS NULL) x);
|
||
|
||
-- ---------- 4. 把「加入申请」菜单加入全局「租户管理员」角色 rights ----------
|
||
-- rights 兼容 JSON 数组与逗号分隔两种格式;rights 为空表示全权限,无需处理
|
||
SET @apply_menu_id := (
|
||
SELECT id FROM yz_system_menu WHERE path = '/basicSettings/applies' AND delete_time IS NULL LIMIT 1
|
||
);
|
||
|
||
-- 逗号分隔格式:追加
|
||
UPDATE yz_system_admin_role
|
||
SET rights = CONCAT(TRIM(TRAILING ',' FROM TRIM(BOTH ' ' FROM rights)), ',', @apply_menu_id)
|
||
WHERE cid = 2 AND tenant_id = 0 AND name = '租户管理员' AND delete_time IS NULL
|
||
AND @apply_menu_id IS NOT NULL
|
||
AND rights IS NOT NULL AND TRIM(rights) <> '' AND TRIM(rights) NOT LIKE '[%'
|
||
AND NOT FIND_IN_SET(@apply_menu_id, REPLACE(REPLACE(REPLACE(rights, '[', ''), ']', ''), ' ', ''));
|
||
|
||
-- JSON 数组格式:末尾插入
|
||
UPDATE yz_system_admin_role
|
||
SET rights = CONCAT(SUBSTRING(TRIM(rights), 1, LENGTH(TRIM(rights)) - 1), ',', @apply_menu_id, ']')
|
||
WHERE cid = 2 AND tenant_id = 0 AND name = '租户管理员' AND delete_time IS NULL
|
||
AND @apply_menu_id IS NOT NULL
|
||
AND TRIM(rights) LIKE '[%' AND TRIM(rights) LIKE '%]'
|
||
AND NOT FIND_IN_SET(@apply_menu_id, REPLACE(REPLACE(REPLACE(rights, '[', ''), ']', ''), ' ', ''));
|
||
|
||
-- ---------- 结果校验 ----------
|
||
SELECT id, pid, title, path, component_path, views, type
|
||
FROM yz_system_menu
|
||
WHERE delete_time IS NULL AND path IN ('/basicSettings/applies', '/tenantApply');
|
||
|
||
SELECT id, cid, tenant_id, name, rights FROM yz_system_admin_role
|
||
WHERE cid = 2 AND tenant_id = 0 AND name = '租户管理员' AND delete_time IS NULL;
|