Files
yunzerwebsiteallinone/go/docs/sql/oa_job_rank_menus.sql
T

69 lines
2.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- OA 职级管理 —— 菜单配置(yz_system_menu)
--
-- 幂等脚本:按 path 判重,重复执行不会产生重复菜单
-- 执行:mysql -h <host> -P <port> -u <user> -p <db> < oa_job_rank_menus.sql
--
-- 挂载位置:OA → 基础设置(目录,path = '/apps/oa/normalsetting')
-- OA
-- └─ 基础设置
-- ├─ 组织架构 /basic-settings/organization
-- ├─ 人员管理 /basic-settings/employee
-- ├─ 职位管理 /basic-settings/position
-- └─ 职级管理 /basic-settings/jobrank ← 本脚本新增
--
-- 对应页面:backend/src/views/basicSettings/jobRank/index.vue
--
-- 说明:
-- 1. views = [2](租户端),与同级的组织架构/人员管理/职位管理保持一致;
-- platforms 留空(= 全端),移动端可通过 webview 容器打开同一页面。
-- 2. 租户端角色(cid=2)的 rights 是显式菜单 ID 列表,菜单接口会按
-- rights 过滤。只插菜单不授权,会出现「目录可见但页面被过滤」,
-- 因此本脚本同时把菜单 ID 追加到角色 rights。
-- ============================================================
SET @basic_id := (
SELECT id FROM yz_system_menu
WHERE path = '/apps/oa/normalsetting' AND delete_time IS NULL
LIMIT 1
);
-- ---------- 职级管理(页面) ----------
INSERT INTO yz_system_menu
(pid, title, path, component_path, icon, sort, status, is_visible, views, platforms, type, creater, remark)
SELECT @basic_id, '职级管理', '/basic-settings/jobrank', '/basicSettings/jobRank/index.vue',
'Sort', 4, 1, 1, '[2]', NULL, 2, 'system',
'按部门设置职位等级,供薪酬管理与权限分级使用'
FROM DUAL
WHERE @basic_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/basic-settings/jobrank' AND delete_time IS NULL) x);
SET @jobrank_id := (
SELECT id FROM yz_system_menu
WHERE path = '/basic-settings/jobrank' AND delete_time IS NULL
LIMIT 1
);
-- ---------- 角色授权:把菜单追加到所有租户端角色的 rights ----------
-- 只处理 rights 非空(显式授权)的角色;rights 为空表示全权限,无需追加。
UPDATE yz_system_admin_role
SET rights = CAST(JSON_ARRAY_APPEND(CAST(rights AS JSON), '$', @jobrank_id) AS CHAR)
WHERE cid = 2
AND rights IS NOT NULL
AND TRIM(rights) <> ''
AND JSON_VALID(rights)
AND @jobrank_id IS NOT NULL
AND NOT JSON_CONTAINS(CAST(rights AS JSON), CAST(@jobrank_id AS JSON));
-- ---------- 结果校验 ----------
SELECT id, pid, title, path, component_path, views, platforms, type, sort
FROM yz_system_menu
WHERE delete_time IS NULL AND path = '/basic-settings/jobrank';
SELECT id, name, tenant_id,
JSON_CONTAINS(CAST(rights AS JSON), CAST(@jobrank_id AS JSON)) AS has_jobrank
FROM yz_system_admin_role
WHERE cid = 2 AND rights IS NOT NULL AND TRIM(rights) <> ''
ORDER BY tenant_id, id;