更新若干事项
This commit is contained in:
1 parent
68cdaf38fa
commit
9898962836
30 files changed
+7715
No files matched your search
@@ -0,0 +1,71 @@
|
||||
-- ============================================================
|
||||
-- OA 工作排班:排班方案支持「平台模板 + 周期规则」
|
||||
--
|
||||
-- 适用:已执行过 create_oa_scheduling.sql 的环境(表已存在)。
|
||||
-- 执行:在业务库(go-platform)下整段执行即可。
|
||||
--
|
||||
-- 幂等:逐列判断 information_schema,只添加缺失的列;
|
||||
-- 9 列全部存在时自动跳过一次无害查询,不会报 1060。
|
||||
--
|
||||
-- 字段说明:
|
||||
-- template_id / template_code / template_name
|
||||
-- 方案来源模板的快照。租户调用模板后,模板规则会复制进本方案,
|
||||
-- 之后模板调整或停用都不影响已保存方案(platform 模板只读,租户可改自己的)。
|
||||
-- align_mode
|
||||
-- 0 = 未使用模板(沿用 weekdays + shift_id 的按星期排班)
|
||||
-- 1 = 按自然周(双休 / 单休 / 大小周)
|
||||
-- 2 = 从 start_date 起滚动(三班倒 / 做一休一)
|
||||
-- 3 = 按自然月(月休)
|
||||
-- cycle_days 周期天数(align_mode=1/2 时等于 pattern 长度)
|
||||
-- week_offset 大小周起始周偏移:0=开始日期所在周为周期第 1 周,1=第 2 周
|
||||
-- month_rest_days 月休:每月休息天数
|
||||
-- month_rest_weekday 月休固定休息周几(1-7),0 表示不固定
|
||||
-- pattern 周期规则 JSON 快照,元素形如
|
||||
-- {"day_index":0,"day_type":1,"shift_id":12,"shift_name":"白班",
|
||||
-- "short_name":"白","color":"#409EFF","work_start":"09:00","work_end":"18:00"}
|
||||
-- ============================================================
|
||||
|
||||
-- 执行前自查:existing_cols = 9 表示字段已齐全,执行到下面会自动跳过
|
||||
SELECT COUNT(*) AS existing_cols
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'yz_backend_oa_schedule_plan'
|
||||
AND COLUMN_NAME IN ('template_id','template_code','template_name','align_mode','cycle_days','week_offset','month_rest_days','month_rest_weekday','pattern');
|
||||
|
||||
SET @sql := CONCAT('ALTER TABLE `yz_backend_oa_schedule_plan` ',
|
||||
IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_schedule_plan' AND COLUMN_NAME = 'template_id') = 0,
|
||||
'ADD COLUMN `template_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ''来源模板ID(0=未使用模板)'', ', ''),
|
||||
IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_schedule_plan' AND COLUMN_NAME = 'template_code') = 0,
|
||||
'ADD COLUMN `template_code` VARCHAR(50) NOT NULL DEFAULT '''' COMMENT ''来源模板编码快照'', ', ''),
|
||||
IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_schedule_plan' AND COLUMN_NAME = 'template_name') = 0,
|
||||
'ADD COLUMN `template_name` VARCHAR(50) NOT NULL DEFAULT '''' COMMENT ''来源模板名称快照'', ', ''),
|
||||
IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_schedule_plan' AND COLUMN_NAME = 'align_mode') = 0,
|
||||
'ADD COLUMN `align_mode` TINYINT NOT NULL DEFAULT 0 COMMENT ''0不使用模板 1按自然周 2按开始日滚动 3按自然月'', ', ''),
|
||||
IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_schedule_plan' AND COLUMN_NAME = 'cycle_days') = 0,
|
||||
'ADD COLUMN `cycle_days` SMALLINT NOT NULL DEFAULT 0 COMMENT ''周期天数'', ', ''),
|
||||
IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_schedule_plan' AND COLUMN_NAME = 'week_offset') = 0,
|
||||
'ADD COLUMN `week_offset` TINYINT NOT NULL DEFAULT 0 COMMENT ''大小周起始周偏移'', ', ''),
|
||||
IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_schedule_plan' AND COLUMN_NAME = 'month_rest_days') = 0,
|
||||
'ADD COLUMN `month_rest_days` TINYINT NOT NULL DEFAULT 0 COMMENT ''月休天数'', ', ''),
|
||||
IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_schedule_plan' AND COLUMN_NAME = 'month_rest_weekday') = 0,
|
||||
'ADD COLUMN `month_rest_weekday` TINYINT NOT NULL DEFAULT 0 COMMENT ''月休固定周几(1-7,0不固定)'', ', ''),
|
||||
IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_schedule_plan' AND COLUMN_NAME = 'pattern') = 0,
|
||||
'ADD COLUMN `pattern` TEXT NULL COMMENT ''周期规则JSON快照'', ', '')
|
||||
);
|
||||
|
||||
-- 去掉结尾多余的 ", "(两个字符),否则 ALTER 语句会因尾逗号报 1064
|
||||
SET @sql := IF(RIGHT(@sql, 2) = ', ', LEFT(@sql, CHAR_LENGTH(@sql) - 2), @sql);
|
||||
-- 没有任何缺失列时,@sql 只剩表名,替换为一条无害语句
|
||||
SET @sql := IF(RIGHT(@sql, 6) = 'TABLE ', 'SELECT 1 AS skipped_all_columns_exist', @sql);
|
||||
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 核对结果:应返回 9 行
|
||||
SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_DEFAULT, COLUMN_COMMENT
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'yz_backend_oa_schedule_plan'
|
||||
AND COLUMN_NAME IN ('template_id','template_code','template_name','align_mode','cycle_days','week_offset','month_rest_days','month_rest_weekday','pattern')
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
@@ -0,0 +1,151 @@
|
||||
-- =============================================================
|
||||
-- OA 工作排班 —— 表结构
|
||||
--
|
||||
-- 对应代码:
|
||||
-- models/oa_scheduling.go
|
||||
-- controllers/backend_oa_scheduling.go (班次管理)
|
||||
-- controllers/backend_oa_scheduling_scope.go (组织/员工范围展开)
|
||||
-- controllers/backend_oa_scheduling_plan.go (排班方案与发布)
|
||||
-- controllers/backend_oa_scheduling_board.go (看板、临时调配、变更记录)
|
||||
--
|
||||
-- 执行顺序:
|
||||
-- 1) 本脚本:创建 4 张排班表
|
||||
-- 2) oa_scheduling_menus.sql:注册「OA → 排班考勤 → 工作排班」菜单并授权角色
|
||||
--
|
||||
-- 设计要点:
|
||||
-- 1. 排班对象直接复用租户组织架构(yz_backend_organization)与员工表
|
||||
-- (yz_backend_employee),不另建“小组”表:公司、部门、小组都是组织
|
||||
-- 树上的节点,方案通过 scope_type + org_id + include_child 决定范围。
|
||||
-- 2. 方案(plan)只保存规则;发布后展开成明细(entry),一人一天一条。
|
||||
-- 看板与临时调配只操作明细,方案可重复发布(可选覆盖)。
|
||||
-- 3. 明细软删除:is_deleted=0 表示有效,删除时写入记录 ID,
|
||||
-- 使唯一键 (tid, employee_id, schedule_date, is_deleted) 在删除后
|
||||
-- 同一天重新排班时不会与历史记录冲突。
|
||||
-- 4. 变更留痕(change)只记录人、日期与新旧班次,方便追溯临时调配。
|
||||
-- =============================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ---------------- 1. 班次定义 ----------------
|
||||
CREATE TABLE IF NOT EXISTS `yz_backend_oa_shift` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||||
`name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '班次名称,如早班/晚班',
|
||||
`short_name` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '看板色块上的简称',
|
||||
`color` VARCHAR(20) NOT NULL DEFAULT '#409EFF' COMMENT '标识颜色',
|
||||
`work_start` VARCHAR(8) NOT NULL DEFAULT '' COMMENT '上班时间 HH:mm',
|
||||
`work_end` VARCHAR(8) NOT NULL DEFAULT '' COMMENT '下班时间 HH:mm(早于上班时间视为跨天)',
|
||||
`rest_start` VARCHAR(8) NOT NULL DEFAULT '' COMMENT '休息开始 HH:mm,空表示无',
|
||||
`rest_end` VARCHAR(8) NOT NULL DEFAULT '' COMMENT '休息结束 HH:mm',
|
||||
`work_hours` DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT '工时(已扣除休息)',
|
||||
`is_default` TINYINT NOT NULL DEFAULT 0 COMMENT '1=默认班次',
|
||||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1=启用 0=停用',
|
||||
`sort` INT NOT NULL DEFAULT 0 COMMENT '排序',
|
||||
`remark` VARCHAR(255) DEFAULT NULL,
|
||||
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标记',
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||
`delete_time` DATETIME DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_tid_status` (`tid`, `status`),
|
||||
KEY `idx_tid_deleted` (`tid`, `is_deleted`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA-工作排班班次';
|
||||
|
||||
-- ---------------- 2. 排班方案 ----------------
|
||||
CREATE TABLE IF NOT EXISTS `yz_backend_oa_schedule_plan` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||||
`plan_name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '方案名称',
|
||||
`plan_type` TINYINT NOT NULL DEFAULT 1 COMMENT '1=常规排班 2=临时方案',
|
||||
`scope_type` TINYINT NOT NULL DEFAULT 2 COMMENT '1=整个公司 2=部门/小组 3=指定员工',
|
||||
`org_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '范围组织ID(yz_backend_organization.id)',
|
||||
`org_name` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '范围名称快照',
|
||||
`include_child` TINYINT NOT NULL DEFAULT 1 COMMENT '1=包含全部下级组织',
|
||||
`employee_ids` TEXT COMMENT '指定员工ID JSON 数组:[1,2,3]',
|
||||
`employee_names` TEXT COMMENT '指定员工姓名快照',
|
||||
`start_date` DATE NOT NULL COMMENT '开始日期',
|
||||
`end_date` DATE NOT NULL COMMENT '结束日期',
|
||||
`weekdays` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '生效星期 JSON:[1,2,3,4,5];空=每天',
|
||||
`shift_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '班次ID',
|
||||
`shift_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '班次名称快照',
|
||||
`color` VARCHAR(20) NOT NULL DEFAULT '#409EFF' COMMENT '班次颜色快照',
|
||||
`note` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '备注',
|
||||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1=启用 0=停用',
|
||||
`publish_status` TINYINT NOT NULL DEFAULT 0 COMMENT '0=未发布 1=已发布',
|
||||
`entry_count` INT NOT NULL DEFAULT 0 COMMENT '最近一次发布生成/覆盖的条数',
|
||||
`created_by` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建人 uid',
|
||||
`created_by_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人名称快照',
|
||||
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除标记',
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||
`delete_time` DATETIME DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_tid_deleted` (`tid`, `is_deleted`),
|
||||
KEY `idx_tid_scope` (`tid`, `scope_type`, `org_id`),
|
||||
KEY `idx_tid_dates` (`tid`, `start_date`, `end_date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA-工作排班方案';
|
||||
|
||||
-- ---------------- 3. 排班明细 ----------------
|
||||
CREATE TABLE IF NOT EXISTS `yz_backend_oa_schedule_entry` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||||
`plan_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '来源方案ID,0=纯手工排班',
|
||||
`employee_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '员工ID(yz_backend_employee.id)',
|
||||
`employee_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '员工姓名快照',
|
||||
`employee_account` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '员工账号快照',
|
||||
`org_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属组织ID',
|
||||
`org_name` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '所属组织名称快照',
|
||||
`position` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '职位快照',
|
||||
`schedule_date` DATE NOT NULL COMMENT '排班日期',
|
||||
`shift_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '班次ID',
|
||||
`shift_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '班次名称快照',
|
||||
`short_name` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '班次简称快照',
|
||||
`color` VARCHAR(20) NOT NULL DEFAULT '#409EFF' COMMENT '班次颜色快照',
|
||||
`work_start` VARCHAR(8) NOT NULL DEFAULT '' COMMENT '上班时间快照',
|
||||
`work_end` VARCHAR(8) NOT NULL DEFAULT '' COMMENT '下班时间快照',
|
||||
`source` TINYINT NOT NULL DEFAULT 1 COMMENT '1=方案生成 2=临时调配',
|
||||
`note` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '备注/调配原因',
|
||||
`created_by` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '操作人 uid',
|
||||
`created_by_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '操作人名称快照',
|
||||
`is_deleted` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '软删除标记:0=有效;删除时写入记录ID',
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||
`delete_time` DATETIME DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_tid_emp_date` (`tid`, `employee_id`, `schedule_date`, `is_deleted`),
|
||||
KEY `idx_tid_date` (`tid`, `schedule_date`),
|
||||
KEY `idx_tid_plan` (`tid`, `plan_id`),
|
||||
KEY `idx_tid_emp` (`tid`, `employee_id`),
|
||||
KEY `idx_tid_org_date` (`tid`, `org_id`, `schedule_date`),
|
||||
KEY `idx_tid_shift` (`tid`, `shift_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA-工作排班明细';
|
||||
|
||||
-- ---------------- 4. 排班变更记录 ----------------
|
||||
CREATE TABLE IF NOT EXISTS `yz_backend_oa_schedule_change` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||||
`entry_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '排班明细ID',
|
||||
`employee_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '员工ID',
|
||||
`employee_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '员工姓名快照',
|
||||
`schedule_date` DATE NOT NULL COMMENT '排班日期',
|
||||
`change_type` TINYINT NOT NULL DEFAULT 1 COMMENT '1=调班 2=清除 3=手工新增 4=方案覆盖',
|
||||
`old_shift_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '原班次ID',
|
||||
`old_shift_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '原班次名称',
|
||||
`new_shift_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '新班次ID',
|
||||
`new_shift_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '新班次名称',
|
||||
`reason` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '调整原因',
|
||||
`operator_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '操作人 uid',
|
||||
`operator_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '操作人名称快照',
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_tid_date` (`tid`, `schedule_date`),
|
||||
KEY `idx_tid_emp` (`tid`, `employee_id`),
|
||||
KEY `idx_tid_entry` (`tid`, `entry_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA-工作排班变更记录';
|
||||
|
||||
-- ---------------- 校验 ----------------
|
||||
SELECT TABLE_NAME, TABLE_COMMENT
|
||||
FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME LIKE 'yz_backend_oa_schedule_%'
|
||||
OR TABLE_NAME = 'yz_backend_oa_shift';
|
||||
@@ -0,0 +1,219 @@
|
||||
-- ============================================================
|
||||
-- 平台端排班模板(全局预制模板 + 自定义模板)
|
||||
--
|
||||
-- 执行顺序:
|
||||
-- 1) 本脚本:创建 2 张模板表并写入 6 个系统预置模板
|
||||
-- 2) alter_oa_schedule_plan_template.sql:租户排班方案增加模板/周期字段
|
||||
-- 3) platform_sched_template_menu.sql:注册平台端「排班模板」菜单
|
||||
-- 4) create_oa_scheduling.sql / oa_scheduling_menus.sql(若尚未执行)
|
||||
--
|
||||
-- 说明:
|
||||
-- 1. 模板是全局数据(不按租户隔离),只有平台端可维护;
|
||||
-- 系统预置模板(is_system=1)由平台锁定:不可编辑、不可删除、不可停用。
|
||||
-- 2. 租户端只能「调用」模板:调用时把模板规则快照到自己的排班方案
|
||||
-- (yz_backend_oa_schedule_plan.pattern),之后在租户端随意修改,
|
||||
-- 模板本身的后续调整不会再影响已保存的方案。
|
||||
-- 3. align_mode:1=按自然周(双休/单休/大小周) 2=从开始日滚动(三班倒/做一休一)
|
||||
-- 3=按自然月(月休,按月计算休息日)
|
||||
-- 4. day_index 表示周期内第几天,从 0 开始;按自然周时 0=周一、6=周日。
|
||||
-- 5. 本脚本不使用会话变量 / PREPARE,可整段执行也可逐条执行,重复执行安全。
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `yz_platform_sched_tpl` (
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`code` varchar(50) NOT NULL DEFAULT '' COMMENT '模板编码(系统模板固定)',
|
||||
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '模板名称',
|
||||
`template_type` tinyint NOT NULL DEFAULT 9 COMMENT '1双休 2单休 3大小周 4月休 5三班倒 6做一休一 9自定义',
|
||||
`align_mode` tinyint NOT NULL DEFAULT 1 COMMENT '1按自然周 2按开始日滚动 3按自然月',
|
||||
`cycle_days` smallint NOT NULL DEFAULT 7 COMMENT '周期天数(按自然月时为0)',
|
||||
`week_offset` tinyint NOT NULL DEFAULT 0 COMMENT '大小周起始周偏移:0=开始周为第1周 1=第2周',
|
||||
`month_rest_days` tinyint NOT NULL DEFAULT 0 COMMENT '月休:每月休息天数',
|
||||
`month_rest_weekday` tinyint NOT NULL DEFAULT 0 COMMENT '月休固定休息周几(1-7,0=不固定)',
|
||||
`summary` varchar(255) NOT NULL DEFAULT '' COMMENT '规则摘要(列表展示)',
|
||||
`is_system` tinyint NOT NULL DEFAULT 0 COMMENT '1=系统预置(只读,禁止编辑/删除)',
|
||||
`status` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0停用',
|
||||
`sort` int NOT NULL DEFAULT 0 COMMENT '排序',
|
||||
`creater` varchar(50) NOT NULL DEFAULT '' COMMENT '创建人',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_code` (`code`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='平台端排班模板(全局)';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `yz_platform_sched_tpl_day` (
|
||||
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`template_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '模板ID',
|
||||
`day_index` smallint NOT NULL DEFAULT 0 COMMENT '周期内第几天,从0开始',
|
||||
`day_type` tinyint NOT NULL DEFAULT 1 COMMENT '1上班 2休息',
|
||||
`shift_name` varchar(50) NOT NULL DEFAULT '' COMMENT '班次名称',
|
||||
`shift_short` varchar(20) NOT NULL DEFAULT '' COMMENT '班次简称',
|
||||
`color` varchar(20) NOT NULL DEFAULT '#409EFF' COMMENT '班次颜色',
|
||||
`work_start` varchar(8) NOT NULL DEFAULT '' COMMENT '上班时间 HH:mm',
|
||||
`work_end` varchar(8) NOT NULL DEFAULT '' COMMENT '下班时间 HH:mm',
|
||||
`rest_start` varchar(8) NOT NULL DEFAULT '' COMMENT '休息开始 HH:mm',
|
||||
`rest_end` varchar(8) NOT NULL DEFAULT '' COMMENT '休息结束 HH:mm',
|
||||
`work_hours` decimal(5,2) NOT NULL DEFAULT 0.00 COMMENT '工时(小时)',
|
||||
`remark` varchar(100) NOT NULL DEFAULT '' COMMENT '备注',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_tpl_day` (`template_id`,`day_index`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='平台端排班模板-周期每日规则';
|
||||
|
||||
-- ============================================================
|
||||
-- 系统预置模板(6 个)
|
||||
-- ============================================================
|
||||
|
||||
-- 1. 双休:周一至周五上班,周六日休息
|
||||
INSERT INTO yz_platform_sched_tpl
|
||||
(code, name, template_type, align_mode, cycle_days, week_offset, month_rest_days, month_rest_weekday, summary, is_system, status, sort, creater)
|
||||
SELECT 'double_weekend', '双休', 1, 1, 7, 0, 0, 0, '周一至周五上班 09:00-18:00,周六日休息', 1, 1, 10, 'system'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_platform_sched_tpl WHERE code = 'double_weekend' AND delete_time IS NULL) t);
|
||||
|
||||
INSERT INTO yz_platform_sched_tpl_day
|
||||
(template_id, day_index, day_type, shift_name, shift_short, color, work_start, work_end, rest_start, rest_end, work_hours)
|
||||
SELECT tpl.id, d.idx, d.day_type, d.shift_name, d.shift_short, d.color, d.work_start, d.work_end, d.rest_start, d.rest_end, d.work_hours
|
||||
FROM (
|
||||
SELECT 0 AS idx, 1 AS day_type, '白班' AS shift_name, '白' AS shift_short, '#409EFF' AS color, '09:00' AS work_start, '18:00' AS work_end, '12:00' AS rest_start, '13:30' AS rest_end, 7.50 AS work_hours
|
||||
UNION ALL SELECT 1, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 2, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 3, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 4, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 5, 2, '', '', '', '', '', '', '', 0.00
|
||||
UNION ALL SELECT 6, 2, '', '', '', '', '', '', '', 0.00
|
||||
) d
|
||||
CROSS JOIN (SELECT id FROM yz_platform_sched_tpl WHERE code = 'double_weekend' AND delete_time IS NULL LIMIT 1) tpl
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM (SELECT template_id, day_index FROM yz_platform_sched_tpl_day) x
|
||||
WHERE x.template_id = tpl.id AND x.day_index = d.idx
|
||||
);
|
||||
|
||||
-- 2. 单休:周一至周六上班,周日休息
|
||||
INSERT INTO yz_platform_sched_tpl
|
||||
(code, name, template_type, align_mode, cycle_days, week_offset, month_rest_days, month_rest_weekday, summary, is_system, status, sort, creater)
|
||||
SELECT 'single_weekend', '单休', 2, 1, 7, 0, 0, 0, '周一至周六上班 09:00-18:00,周日休息', 1, 1, 20, 'system'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_platform_sched_tpl WHERE code = 'single_weekend' AND delete_time IS NULL) t);
|
||||
|
||||
INSERT INTO yz_platform_sched_tpl_day
|
||||
(template_id, day_index, day_type, shift_name, shift_short, color, work_start, work_end, rest_start, rest_end, work_hours)
|
||||
SELECT tpl.id, d.idx, d.day_type, d.shift_name, d.shift_short, d.color, d.work_start, d.work_end, d.rest_start, d.rest_end, d.work_hours
|
||||
FROM (
|
||||
SELECT 0 AS idx, 1 AS day_type, '白班' AS shift_name, '白' AS shift_short, '#409EFF' AS color, '09:00' AS work_start, '18:00' AS work_end, '12:00' AS rest_start, '13:30' AS rest_end, 7.50 AS work_hours
|
||||
UNION ALL SELECT 1, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 2, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 3, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 4, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 5, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 6, 2, '', '', '', '', '', '', '', 0.00
|
||||
) d
|
||||
CROSS JOIN (SELECT id FROM yz_platform_sched_tpl WHERE code = 'single_weekend' AND delete_time IS NULL LIMIT 1) tpl
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM (SELECT template_id, day_index FROM yz_platform_sched_tpl_day) x
|
||||
WHERE x.template_id = tpl.id AND x.day_index = d.idx
|
||||
);
|
||||
|
||||
-- 3. 大小周:第 1 周双休,第 2 周单休(周六上班),14 天一个周期
|
||||
INSERT INTO yz_platform_sched_tpl
|
||||
(code, name, template_type, align_mode, cycle_days, week_offset, month_rest_days, month_rest_weekday, summary, is_system, status, sort, creater)
|
||||
SELECT 'big_small_week', '大小周', 3, 1, 14, 0, 0, 0, '第 1 周双休、第 2 周单休(周六上班),14 天循环', 1, 1, 30, 'system'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_platform_sched_tpl WHERE code = 'big_small_week' AND delete_time IS NULL) t);
|
||||
|
||||
INSERT INTO yz_platform_sched_tpl_day
|
||||
(template_id, day_index, day_type, shift_name, shift_short, color, work_start, work_end, rest_start, rest_end, work_hours)
|
||||
SELECT tpl.id, d.idx, d.day_type, d.shift_name, d.shift_short, d.color, d.work_start, d.work_end, d.rest_start, d.rest_end, d.work_hours
|
||||
FROM (
|
||||
SELECT 0 AS idx, 1 AS day_type, '白班' AS shift_name, '白' AS shift_short, '#409EFF' AS color, '09:00' AS work_start, '18:00' AS work_end, '12:00' AS rest_start, '13:30' AS rest_end, 7.50 AS work_hours
|
||||
UNION ALL SELECT 1, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 2, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 3, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 4, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 5, 2, '', '', '', '', '', '', '', 0.00
|
||||
UNION ALL SELECT 6, 2, '', '', '', '', '', '', '', 0.00
|
||||
UNION ALL SELECT 7, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 8, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 9, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 10, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 11, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 12, 1, '白班', '白', '#409EFF', '09:00', '18:00', '12:00', '13:30', 7.50
|
||||
UNION ALL SELECT 13, 2, '', '', '', '', '', '', '', 0.00
|
||||
) d
|
||||
CROSS JOIN (SELECT id FROM yz_platform_sched_tpl WHERE code = 'big_small_week' AND delete_time IS NULL LIMIT 1) tpl
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM (SELECT template_id, day_index FROM yz_platform_sched_tpl_day) x
|
||||
WHERE x.template_id = tpl.id AND x.day_index = d.idx
|
||||
);
|
||||
|
||||
-- 4. 月休 4 天:每月固定休 4 天,优先安排在周日(周末不足时从月末补齐)
|
||||
INSERT INTO yz_platform_sched_tpl
|
||||
(code, name, template_type, align_mode, cycle_days, week_offset, month_rest_days, month_rest_weekday, summary, is_system, status, sort, creater)
|
||||
SELECT 'month_4_rest', '月休 4 天', 4, 3, 0, 0, 4, 7, '每月固定休 4 天,优先安排周日,遇 5 个周日只休前 4 个', 1, 1, 40, 'system'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_platform_sched_tpl WHERE code = 'month_4_rest' AND delete_time IS NULL) t);
|
||||
|
||||
INSERT INTO yz_platform_sched_tpl_day
|
||||
(template_id, day_index, day_type, shift_name, shift_short, color, work_start, work_end, rest_start, rest_end, work_hours)
|
||||
SELECT tpl.id, d.idx, d.day_type, d.shift_name, d.shift_short, d.color, d.work_start, d.work_end, d.rest_start, d.rest_end, d.work_hours
|
||||
FROM (
|
||||
SELECT 0 AS idx, 1 AS day_type, '白班' AS shift_name, '白' AS shift_short, '#409EFF' AS color, '09:00' AS work_start, '18:00' AS work_end, '12:00' AS rest_start, '13:30' AS rest_end, 7.50 AS work_hours
|
||||
) d
|
||||
CROSS JOIN (SELECT id FROM yz_platform_sched_tpl WHERE code = 'month_4_rest' AND delete_time IS NULL LIMIT 1) tpl
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM (SELECT template_id, day_index FROM yz_platform_sched_tpl_day) x
|
||||
WHERE x.template_id = tpl.id AND x.day_index = d.idx
|
||||
);
|
||||
|
||||
-- 5. 三班倒:早班 -> 中班 -> 夜班,各 1 天循环
|
||||
INSERT INTO yz_platform_sched_tpl
|
||||
(code, name, template_type, align_mode, cycle_days, week_offset, month_rest_days, month_rest_weekday, summary, is_system, status, sort, creater)
|
||||
SELECT 'three_shift', '三班倒', 5, 2, 3, 0, 0, 0, '早班 08:00-16:00 → 中班 16:00-24:00 → 夜班 00:00-08:00,3 天循环', 1, 1, 50, 'system'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_platform_sched_tpl WHERE code = 'three_shift' AND delete_time IS NULL) t);
|
||||
|
||||
INSERT INTO yz_platform_sched_tpl_day
|
||||
(template_id, day_index, day_type, shift_name, shift_short, color, work_start, work_end, rest_start, rest_end, work_hours)
|
||||
SELECT tpl.id, d.idx, d.day_type, d.shift_name, d.shift_short, d.color, d.work_start, d.work_end, d.rest_start, d.rest_end, d.work_hours
|
||||
FROM (
|
||||
SELECT 0 AS idx, 1 AS day_type, '早班' AS shift_name, '早' AS shift_short, '#67C23A' AS color, '08:00' AS work_start, '16:00' AS work_end, '' AS rest_start, '' AS rest_end, 8.00 AS work_hours
|
||||
UNION ALL SELECT 1, 1, '中班', '中', '#E6A23C', '16:00', '24:00', '', '', 8.00
|
||||
UNION ALL SELECT 2, 1, '夜班', '夜', '#909399', '00:00', '08:00', '', '', 8.00
|
||||
) d
|
||||
CROSS JOIN (SELECT id FROM yz_platform_sched_tpl WHERE code = 'three_shift' AND delete_time IS NULL LIMIT 1) tpl
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM (SELECT template_id, day_index FROM yz_platform_sched_tpl_day) x
|
||||
WHERE x.template_id = tpl.id AND x.day_index = d.idx
|
||||
);
|
||||
|
||||
-- 6. 做一休一:上 1 天休 1 天
|
||||
INSERT INTO yz_platform_sched_tpl
|
||||
(code, name, template_type, align_mode, cycle_days, week_offset, month_rest_days, month_rest_weekday, summary, is_system, status, sort, creater)
|
||||
SELECT 'work_one_rest_one', '做一休一', 6, 2, 2, 0, 0, 0, '上 1 天休 1 天循环(09:00-18:00)', 1, 1, 60, 'system'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_platform_sched_tpl WHERE code = 'work_one_rest_one' AND delete_time IS NULL) t);
|
||||
|
||||
INSERT INTO yz_platform_sched_tpl_day
|
||||
(template_id, day_index, day_type, shift_name, shift_short, color, work_start, work_end, rest_start, rest_end, work_hours)
|
||||
SELECT tpl.id, d.idx, d.day_type, d.shift_name, d.shift_short, d.color, d.work_start, d.work_end, d.rest_start, d.rest_end, d.work_hours
|
||||
FROM (
|
||||
SELECT 0 AS idx, 1 AS day_type, '白班' AS shift_name, '白' AS shift_short, '#409EFF' AS color, '09:00' AS work_start, '18:00' AS work_end, '12:00' AS rest_start, '13:30' AS rest_end, 7.50 AS work_hours
|
||||
UNION ALL SELECT 1, 2, '', '', '', '', '', '', '', 0.00
|
||||
) d
|
||||
CROSS JOIN (SELECT id FROM yz_platform_sched_tpl WHERE code = 'work_one_rest_one' AND delete_time IS NULL LIMIT 1) tpl
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM (SELECT template_id, day_index FROM yz_platform_sched_tpl_day) x
|
||||
WHERE x.template_id = tpl.id AND x.day_index = d.idx
|
||||
);
|
||||
|
||||
-- ============================================================
|
||||
-- 结果校验:6 行,day_count 分别为 7 / 7 / 14 / 1 / 3 / 2
|
||||
-- ============================================================
|
||||
SELECT t.id, t.code, t.name, t.template_type, t.align_mode, t.cycle_days,
|
||||
t.month_rest_days, t.month_rest_weekday, t.is_system, t.status, t.sort,
|
||||
COUNT(d.id) AS day_count
|
||||
FROM yz_platform_sched_tpl t
|
||||
LEFT JOIN yz_platform_sched_tpl_day d ON d.template_id = t.id
|
||||
WHERE t.delete_time IS NULL
|
||||
GROUP BY t.id
|
||||
ORDER BY t.sort;
|
||||
@@ -0,0 +1,94 @@
|
||||
-- ============================================================
|
||||
-- OA 工作排班 —— 菜单配置(yz_system_menu)
|
||||
-- 幂等脚本:按 path 判重,重复执行不会产生重复菜单
|
||||
-- 执行:mysql -h <host> -P <port> -u <user> -p <db> < oa_scheduling_menus.sql
|
||||
--
|
||||
-- 挂载位置:OA 应用根(path = '/apps/oa')
|
||||
-- OA
|
||||
-- └─ 排班考勤(目录,/apps/oa/scheduling)
|
||||
-- └─ 工作排班(页面,/apps/oa/scheduling/board)
|
||||
--
|
||||
-- 对应页面:backend/src/views/apps/oa/scheduling/index.vue
|
||||
-- 同一页面内完成:班次管理、排班方案(公司/部门/小组/指定员工)、
|
||||
-- 周看板、单个或批量员工的临时调配、变更记录查看。
|
||||
--
|
||||
-- 说明:
|
||||
-- 1. 排班看板是 Web 管理端功能,platforms 显式为 ["web"],
|
||||
-- 移动端菜单不出现(后续若开放员工查看排班,再补 APP 端页面)。
|
||||
-- 2. 租户端角色(cid=2)的 rights 是显式菜单 ID 列表,菜单接口会按
|
||||
-- rights 过滤。只插菜单不授权,会出现「目录可见但页面被过滤」,
|
||||
-- 因此本脚本同时把两个菜单 ID 追加到角色 rights。
|
||||
-- 目录与页面都必须授权,缺一不可。
|
||||
-- ============================================================
|
||||
|
||||
SET @oa_id := (
|
||||
SELECT id FROM yz_system_menu
|
||||
WHERE path = '/apps/oa' 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 @oa_id, '排班考勤', '/apps/oa/scheduling', NULL,
|
||||
'Calendar', 88, 1, 1, '[2]', '["web"]', 1, 'system',
|
||||
'按公司、部门、小组或指定员工制定排班方案,支持临时调配'
|
||||
FROM DUAL
|
||||
WHERE @oa_id IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/apps/oa/scheduling' AND delete_time IS NULL) x);
|
||||
|
||||
SET @scheduling_id := (
|
||||
SELECT id FROM yz_system_menu
|
||||
WHERE path = '/apps/oa/scheduling' 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 @scheduling_id, '工作排班', '/apps/oa/scheduling/board', '/apps/oa/scheduling/index.vue',
|
||||
'Clock', 1, 1, 1, '[2]', '["web"]', 2, 'system',
|
||||
'排班看板:按周查看排班,支持方案发布、单条调班与批量临时排班'
|
||||
FROM DUAL
|
||||
WHERE @scheduling_id IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/apps/oa/scheduling/board' AND delete_time IS NULL) x);
|
||||
|
||||
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), '$', @scheduling_id) AS CHAR)
|
||||
WHERE cid = 2
|
||||
AND rights IS NOT NULL
|
||||
AND TRIM(rights) <> ''
|
||||
AND JSON_VALID(rights)
|
||||
AND @scheduling_id IS NOT NULL
|
||||
AND NOT JSON_CONTAINS(CAST(rights AS JSON), CAST(@scheduling_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
|
||||
FROM yz_system_menu
|
||||
WHERE delete_time IS NULL AND path LIKE '/apps/oa/scheduling%'
|
||||
ORDER BY pid, sort;
|
||||
|
||||
SELECT id, name, tenant_id,
|
||||
JSON_CONTAINS(CAST(rights AS JSON), CAST(@scheduling_id AS JSON)) AS has_dir,
|
||||
JSON_CONTAINS(CAST(rights AS JSON), CAST(@board_id AS JSON)) AS has_board
|
||||
FROM yz_system_admin_role
|
||||
WHERE cid = 2 AND rights IS NOT NULL AND TRIM(rights) <> ''
|
||||
ORDER BY tenant_id, id;
|
||||
@@ -0,0 +1,42 @@
|
||||
-- ============================================================
|
||||
-- 排班模板 —— 平台端菜单(yz_system_menu)
|
||||
--
|
||||
-- 挂载位置:平台端「基础设置」(path = /basicSettings)下,与「字典管理」并列。
|
||||
-- 基础设置
|
||||
-- └─ 排班模板(页面,/basicSettings/schedTemplate)
|
||||
--
|
||||
-- 说明:
|
||||
-- 1. views = [1]:只在平台端出现;租户端通过 /backend/oa/scheduling/templates
|
||||
-- 读取模板(不在租户菜单里暴露模板管理入口)。
|
||||
-- 2. 平台端菜单接口(/platform/menu/:id)按 views 过滤,不按角色 rights 过滤,
|
||||
-- 因此本脚本无需追加角色授权。
|
||||
-- 3. 幂等:按 path 判重,重复执行不会产生重复菜单。
|
||||
-- 4. 本脚本不使用会话变量 / PREPARE,可整段执行也可逐条执行。
|
||||
-- ============================================================
|
||||
|
||||
-- 1) 有「基础设置」目录时,挂到该目录下
|
||||
INSERT INTO yz_system_menu
|
||||
(pid, title, path, component_path, icon, sort, status, is_visible, views, type, creater, remark)
|
||||
SELECT
|
||||
(SELECT id FROM (SELECT id FROM yz_system_menu WHERE path = '/basicSettings' AND delete_time IS NULL ORDER BY id LIMIT 1) b),
|
||||
'排班模板', '/basicSettings/schedTemplate', '/system/schedTemplate/index.vue',
|
||||
'Calendar', 90, 1, 1, '[1]', 2, 'system',
|
||||
'全局排班模板:预置双休/单休/大小周/月休/三班倒/做一休一,租户调用后存入自己的方案'
|
||||
FROM DUAL
|
||||
WHERE EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/basicSettings' AND delete_time IS NULL) b)
|
||||
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/basicSettings/schedTemplate' AND delete_time IS NULL) e);
|
||||
|
||||
-- 2) 未找到「基础设置」目录时,退化为平台端顶级菜单(pid=0)
|
||||
INSERT INTO yz_system_menu
|
||||
(pid, title, path, component_path, icon, sort, status, is_visible, views, type, creater, remark)
|
||||
SELECT 0, '排班模板', '/basicSettings/schedTemplate', '/system/schedTemplate/index.vue',
|
||||
'Calendar', 92, 1, 1, '[1]', 2, 'system',
|
||||
'全局排班模板:预置双休/单休/大小周/月休/三班倒/做一休一,租户调用后存入自己的方案'
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/basicSettings' AND delete_time IS NULL) b)
|
||||
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM yz_system_menu WHERE path = '/basicSettings/schedTemplate' AND delete_time IS NULL) e);
|
||||
|
||||
-- 结果校验:应返回 1 行
|
||||
SELECT id, pid, title, path, component_path, views, type, is_visible, status
|
||||
FROM yz_system_menu
|
||||
WHERE delete_time IS NULL AND path = '/basicSettings/schedTemplate';
|
||||
Reference in new issue
Block a user