-- ============================================================ -- 注册企业绑定/创建申请(yz_auth_tenant_apply)+ 审核菜单 -- type=1 加入企业:注册第二步「绑定企业」,企业管理员在 backend 审批 -- type=2 创建企业:注册第二步「创建企业」,平台在 platform 审批, -- 通过后自动建租户并把申请人绑定为租户管理员(不可更改) -- 幂等脚本:重复执行不会产生重复数据。 -- 执行:mysql -h -P -u -p < 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;