Files
yunzerwebsiteallinone/go/docs/sql/oa_dailyreport_menus.sql
T
2026-10-21 17:45:50 +08:00

65 lines
3.0 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_dailyreport_menus.sql
--
-- 挂载位置:OA → 个人办公(path = '/apps/oa/personal')
-- 页面:我的日报 + 团队日报(同一页面内 Tab,团队 Tab 由接口权限决定是否显示)
-- 说明:platforms 显式声明为 Web + APP(JSON:["web","app"]),小程序端
-- 通过 utils/nav.js 的原生规则跳转到 pages/oa/dailyreport/index。
--
-- 注意:租户端角色(cid=2)的 rights 是显式菜单 ID 列表,菜单接口会按
-- rights 过滤。只插菜单不授权,会导致「个人办公」目录可见但
-- 「工作日报」被过滤掉。因此本脚本同时把菜单 ID 追加到角色 rights。
-- ============================================================
SET @personal_id := (
SELECT id FROM yz_system_menu
WHERE path = '/apps/oa/personal' 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 @personal_id, '工作日报', '/apps/oa/dailyreport', '/apps/oa/dailyreport/index.vue',
'Notebook', 3, 1, 1, '[2]', '["web","app"]', 2, 'system',
'按日填写今日完成/明日计划/问题建议,支持附件与评论;主管可查看团队汇总'
FROM DUAL
WHERE @personal_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/apps/oa/dailyreport' AND delete_time IS NULL) x);
-- 已有菜单的组件路径统一为带前导斜杠(与个人办公下其他菜单一致)
UPDATE yz_system_menu
SET component_path = '/apps/oa/dailyreport/index.vue'
WHERE path = '/apps/oa/dailyreport'
AND delete_time IS NULL
AND component_path = 'apps/oa/dailyreport/index.vue';
SET @report_menu_id := (
SELECT id FROM yz_system_menu
WHERE path = '/apps/oa/dailyreport' 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), '$', @report_menu_id) AS CHAR)
WHERE cid = 2
AND rights IS NOT NULL
AND TRIM(rights) <> ''
AND JSON_VALID(rights)
AND @report_menu_id IS NOT NULL
AND NOT JSON_CONTAINS(CAST(rights AS JSON), CAST(@report_menu_id AS JSON));
-- ---------- 结果校验 ----------
SELECT id, pid, title, path, component_path, platforms, type, sort
FROM yz_system_menu
WHERE delete_time IS NULL AND path = '/apps/oa/dailyreport';
SELECT id, name, tenant_id,
JSON_CONTAINS(CAST(rights AS JSON), CAST(@report_menu_id AS JSON)) AS has_dailyreport
FROM yz_system_admin_role
WHERE cid = 2 AND rights IS NOT NULL AND TRIM(rights) <> ''
ORDER BY tenant_id, id;