增加ai办公,考勤管理
This commit is contained in:
1 parent
eb9b7beff5
commit
31ae07175d
46 files changed
+9250
-296
No files matched your search
@@ -0,0 +1,160 @@
|
||||
-- ============================================================
|
||||
-- OA 考勤管理 —— 菜单配置(yz_system_menu)
|
||||
-- 幂等脚本:按 path 判重,重复执行不会产生重复菜单
|
||||
-- 执行:mysql -h <host> -P <port> -u <user> -p <db> < oa_attendance_menus.sql
|
||||
--
|
||||
-- 挂载位置:OA → 办公(个人办公),直接是页面,不再套「排班考勤」目录
|
||||
-- OA
|
||||
-- └─ 办公(/apps/oa/personal,找不到时回落到 OA 根)
|
||||
-- ├─ 工作排班(Web,/apps/oa/scheduling/board)
|
||||
-- ├─ 考勤管理(Web,/apps/oa/attendance) ← 本脚本
|
||||
-- └─ 考勤打卡(App,/apps/oa/attendance/clock) ← 本脚本
|
||||
--
|
||||
-- 页面:
|
||||
-- backend/src/views/apps/oa/attendance/index.vue 考勤管理(考勤汇总 + 考勤明细)
|
||||
-- uniapp/pages/oa/attendance/index.vue 考勤打卡(移动端)
|
||||
--
|
||||
-- 说明:
|
||||
-- 1. 「考勤管理」是直接页面(type=2),点菜单即打开,不再有子菜单;
|
||||
-- 2. 打卡动作在移动端完成,Web 端只做考勤汇总 / 明细 / 缺卡名单 / 备注,
|
||||
-- 因此「考勤管理」platforms 为 ["web"];
|
||||
-- 3. 「考勤打卡」platforms 为 ["app"],通过 uniapp 菜单跳转原生页面
|
||||
-- (uniapp/utils/nav.js 的 NATIVE_RULES 按「考勤」匹配);
|
||||
-- 4. 历史版本创建的「排班考勤」目录不再使用,脚本会把它隐藏(保留数据);
|
||||
-- 其下的「工作排班」直接上移到「办公」;
|
||||
-- 5. 租户端角色(cid=2)的 rights 是显式菜单 ID 列表,只插菜单不授权
|
||||
-- 会被过滤掉,因此本脚本把菜单 ID 追加到角色 rights。
|
||||
-- ============================================================
|
||||
|
||||
SET @oa_id := (
|
||||
SELECT id FROM yz_system_menu
|
||||
WHERE path = '/apps/oa' AND delete_time IS NULL
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
-- 「办公」目录:优先同名菜单,其次 /apps/oa/personal;都没有则回落 OA 根
|
||||
SET @office_id := (
|
||||
SELECT id FROM yz_system_menu
|
||||
WHERE delete_time IS NULL
|
||||
AND type = 1
|
||||
AND (title = '办公' OR title = '个人办公' OR path = '/apps/oa/personal')
|
||||
ORDER BY (title = '办公') DESC, (path = '/apps/oa/personal') DESC, sort, id
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
SET @parent_id := IFNULL(@office_id, @oa_id);
|
||||
|
||||
-- ---------- 考勤管理(Web 页面,直接挂在办公下) ----------
|
||||
INSERT INTO yz_system_menu
|
||||
(pid, title, path, component_path, icon, sort, status, is_visible, views, platforms, type, creater, remark)
|
||||
SELECT @parent_id, '考勤管理', '/apps/oa/attendance', '/apps/oa/attendance/index.vue',
|
||||
'Stopwatch', 89, 1, 1, '[2]', '["web"]', 2, 'system',
|
||||
'移动端签到签退数据,支持月/季/年日历汇总、全员考勤卡、缺卡名单与备注'
|
||||
FROM DUAL
|
||||
WHERE @parent_id IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/apps/oa/attendance' AND delete_time IS NULL) x);
|
||||
|
||||
-- 已存在则纠正为「直接页面」:改名、上移、确保是页面与 Web 端可见
|
||||
UPDATE yz_system_menu
|
||||
SET title = '考勤管理',
|
||||
pid = IFNULL(@parent_id, pid),
|
||||
sort = 89,
|
||||
type = 2,
|
||||
component_path = '/apps/oa/attendance/index.vue',
|
||||
platforms = '["web"]',
|
||||
is_visible = 1
|
||||
WHERE path = '/apps/oa/attendance' AND delete_time IS NULL;
|
||||
|
||||
SET @records_id := (
|
||||
SELECT id FROM yz_system_menu
|
||||
WHERE path = '/apps/oa/attendance' 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 @parent_id, '考勤打卡', '/apps/oa/attendance/clock', NULL,
|
||||
'AlarmClock', 90, 1, 1, '[2]', '["app"]', 2, 'system',
|
||||
'小程序签到/签退,联动工作排班;未匹配排班时提醒但允许打卡'
|
||||
FROM DUAL
|
||||
WHERE @parent_id IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/apps/oa/attendance/clock' AND delete_time IS NULL) x);
|
||||
|
||||
UPDATE yz_system_menu
|
||||
SET pid = IFNULL(@parent_id, pid),
|
||||
sort = 90,
|
||||
platforms = '["app"]',
|
||||
is_visible = 1
|
||||
WHERE path = '/apps/oa/attendance/clock' AND delete_time IS NULL;
|
||||
|
||||
SET @clock_id := (
|
||||
SELECT id FROM yz_system_menu
|
||||
WHERE path = '/apps/oa/attendance/clock' AND delete_time IS NULL
|
||||
LIMIT 1
|
||||
);
|
||||
|
||||
-- ---------- 工作排班上移:不再保留「排班考勤」目录 ----------
|
||||
UPDATE yz_system_menu
|
||||
SET pid = IFNULL(@parent_id, pid), sort = 88
|
||||
WHERE path = '/apps/oa/scheduling/board'
|
||||
AND delete_time IS NULL
|
||||
AND @parent_id IS NOT NULL
|
||||
AND (pid IS NULL OR pid <> @parent_id);
|
||||
|
||||
-- 历史的「排班考勤」目录:不再使用,隐藏(保留数据,避免影响已有角色授权)
|
||||
-- 仅当目录下已无可见子菜单时才隐藏,避免误伤租户自行添加的子菜单
|
||||
UPDATE yz_system_menu
|
||||
SET is_visible = 0
|
||||
WHERE path = '/apps/oa/scheduling'
|
||||
AND type = 1
|
||||
AND delete_time IS NULL
|
||||
AND id NOT IN (
|
||||
SELECT pid FROM (
|
||||
SELECT pid FROM yz_system_menu
|
||||
WHERE delete_time IS NULL AND is_visible = 1 AND pid > 0
|
||||
) child
|
||||
);
|
||||
|
||||
SET @board_id := (
|
||||
SELECT id FROM yz_system_menu
|
||||
WHERE path = '/apps/oa/scheduling/board' 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), '$', @records_id) AS CHAR)
|
||||
WHERE cid = 2
|
||||
AND rights IS NOT NULL AND TRIM(rights) <> '' AND JSON_VALID(rights)
|
||||
AND @records_id IS NOT NULL
|
||||
AND NOT JSON_CONTAINS(CAST(rights AS JSON), CAST(@records_id AS JSON));
|
||||
|
||||
UPDATE yz_system_admin_role
|
||||
SET rights = CAST(JSON_ARRAY_APPEND(CAST(rights AS JSON), '$', @clock_id) AS CHAR)
|
||||
WHERE cid = 2
|
||||
AND rights IS NOT NULL AND TRIM(rights) <> '' AND JSON_VALID(rights)
|
||||
AND @clock_id IS NOT NULL
|
||||
AND NOT JSON_CONTAINS(CAST(rights AS JSON), CAST(@clock_id AS JSON));
|
||||
|
||||
UPDATE yz_system_admin_role
|
||||
SET rights = CAST(JSON_ARRAY_APPEND(CAST(rights AS JSON), '$', @board_id) AS CHAR)
|
||||
WHERE cid = 2
|
||||
AND rights IS NOT NULL AND TRIM(rights) <> '' AND JSON_VALID(rights)
|
||||
AND @board_id IS NOT NULL
|
||||
AND NOT JSON_CONTAINS(CAST(rights AS JSON), CAST(@board_id AS JSON));
|
||||
|
||||
-- ---------- 结果校验 ----------
|
||||
SELECT id, pid, title, path, component_path, platforms, type, sort, is_visible
|
||||
FROM yz_system_menu
|
||||
WHERE delete_time IS NULL
|
||||
AND (path LIKE '/apps/oa/attendance%' OR path LIKE '/apps/oa/scheduling%')
|
||||
ORDER BY pid, sort;
|
||||
|
||||
SELECT id, name, tenant_id,
|
||||
JSON_CONTAINS(CAST(rights AS JSON), CAST(@records_id AS JSON)) AS has_attendance,
|
||||
JSON_CONTAINS(CAST(rights AS JSON), CAST(@clock_id AS JSON)) AS has_clock
|
||||
FROM yz_system_admin_role
|
||||
WHERE cid = 2 AND rights IS NOT NULL AND TRIM(rights) <> ''
|
||||
ORDER BY tenant_id, id;
|
||||
Reference in new issue
Block a user