-- OA 审批(钉钉交互)增量脚本 — 2026-07-14 -- 执行前请备份;可重复执行时注意 IGNORE 语义(部分语句非幂等) -- --------------------------------------------------------------------------- -- 1. 组织字段:直属主管 / 部门负责人用户 ID -- --------------------------------------------------------------------------- ALTER TABLE sys_user ADD COLUMN supervisor_user_id VARCHAR(64) NULL COMMENT '直属主管用户ID' AFTER dept_id; ALTER TABLE sys_dept ADD COLUMN leader_user_id VARCHAR(64) NULL COMMENT '部门负责人用户ID' AFTER status; -- --------------------------------------------------------------------------- -- 2. OA 审批核心表 -- --------------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS oa_app_group ( id VARCHAR(64) NOT NULL COMMENT '主键ID', group_name VARCHAR(100) NOT NULL COMMENT '分组名称', tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号', order_num INT NULL COMMENT '排序号', remark VARCHAR(512) NULL COMMENT '备注', create_by VARCHAR(64) NULL COMMENT '创建人id', create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID', create_time DATETIME NOT NULL COMMENT '创建时间', update_by VARCHAR(64) NULL COMMENT '更新人id', update_time DATETIME NOT NULL COMMENT '更新时间', del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (id), KEY idx_oa_app_group_tenant (tenant_no, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA审批分组'; CREATE TABLE IF NOT EXISTS oa_app ( id VARCHAR(64) NOT NULL COMMENT '主键ID', group_id VARCHAR(64) NULL COMMENT '分组ID', app_name VARCHAR(50) NOT NULL COMMENT '表单/应用名称', icon_url VARCHAR(512) NULL COMMENT '图标', description VARCHAR(100) NULL COMMENT '表单说明', initiator_scope VARCHAR(32) NOT NULL DEFAULT 'all' COMMENT '发起范围 all/users', initiator_user_ids TEXT NULL COMMENT '指定发起人JSON数组', admin_scope VARCHAR(32) NOT NULL DEFAULT 'all_oa_admin' COMMENT '管理员范围', admin_user_ids TEXT NULL COMMENT '指定管理员JSON数组', status CHAR(1) NOT NULL DEFAULT '1' COMMENT '1启用 0停用', tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号', order_num INT NULL COMMENT '排序号', remark VARCHAR(512) NULL COMMENT '备注', create_by VARCHAR(64) NULL COMMENT '创建人id', create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID', create_time DATETIME NOT NULL COMMENT '创建时间', update_by VARCHAR(64) NULL COMMENT '更新人id', update_time DATETIME NOT NULL COMMENT '更新时间', del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (id), KEY idx_oa_app_tenant (tenant_no, del_flag), KEY idx_oa_app_group (group_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA审批应用'; CREATE TABLE IF NOT EXISTS oa_app_version ( id VARCHAR(64) NOT NULL COMMENT '主键ID', app_id VARCHAR(64) NOT NULL COMMENT '应用ID', version_no INT NOT NULL COMMENT '版本号', status VARCHAR(16) NOT NULL DEFAULT 'draft' COMMENT 'draft/published', is_latest_published CHAR(1) NOT NULL DEFAULT '0' COMMENT '是否最新已发布', form_schema_json LONGTEXT NULL COMMENT '表单Schema JSON', flow_tree_json LONGTEXT NULL COMMENT '流程树 JSON', advanced_settings_json TEXT NULL COMMENT '高级设置 JSON', tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号', order_num INT NULL COMMENT '排序号', remark VARCHAR(512) NULL COMMENT '备注', create_by VARCHAR(64) NULL COMMENT '创建人id', create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID', create_time DATETIME NOT NULL COMMENT '创建时间', update_by VARCHAR(64) NULL COMMENT '更新人id', update_time DATETIME NOT NULL COMMENT '更新时间', del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (id), KEY idx_oa_app_ver_app (app_id, status, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA审批应用版本'; CREATE TABLE IF NOT EXISTS oa_role ( id VARCHAR(64) NOT NULL COMMENT '主键ID', role_name VARCHAR(100) NOT NULL COMMENT '角色名称', role_code VARCHAR(64) NOT NULL COMMENT '角色编码', role_kind VARCHAR(16) NOT NULL DEFAULT 'custom' COMMENT 'custom/preset', status CHAR(1) NOT NULL DEFAULT '1' COMMENT '1启用 0停用', tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号', order_num INT NULL COMMENT '排序号', remark VARCHAR(512) NULL COMMENT '备注', create_by VARCHAR(64) NULL COMMENT '创建人id', create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID', create_time DATETIME NOT NULL COMMENT '创建时间', update_by VARCHAR(64) NULL COMMENT '更新人id', update_time DATETIME NOT NULL COMMENT '更新时间', del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (id), UNIQUE KEY uk_oa_role_tenant_code (tenant_no, role_code, del_flag), KEY idx_oa_role_tenant (tenant_no, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA工作流角色'; CREATE TABLE IF NOT EXISTS oa_role_user ( id VARCHAR(64) NOT NULL COMMENT '主键ID', oa_role_id VARCHAR(64) NOT NULL COMMENT '工作流角色ID', user_id VARCHAR(64) NOT NULL COMMENT '用户ID', tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号', order_num INT NULL COMMENT '排序号', remark VARCHAR(512) NULL COMMENT '备注', create_by VARCHAR(64) NULL COMMENT '创建人id', create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID', create_time DATETIME NOT NULL COMMENT '创建时间', update_by VARCHAR(64) NULL COMMENT '更新人id', update_time DATETIME NOT NULL COMMENT '更新时间', del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (id), KEY idx_oa_role_user_role (oa_role_id, del_flag), KEY idx_oa_role_user_user (user_id, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA工作流角色成员'; CREATE TABLE IF NOT EXISTS oa_instance ( id VARCHAR(64) NOT NULL COMMENT '主键ID', app_id VARCHAR(64) NOT NULL COMMENT '应用ID', app_version_id VARCHAR(64) NOT NULL COMMENT '锁定的已发布版本ID', title VARCHAR(200) NULL COMMENT '实例标题', initiator_user_id VARCHAR(64) NOT NULL COMMENT '发起人', initiator_dept_id VARCHAR(64) NULL COMMENT '发起人部门', form_data_json LONGTEXT NULL COMMENT '表单数据 JSON', status VARCHAR(32) NOT NULL DEFAULT 'running' COMMENT 'running/completed/rejected/cancelled', tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号', order_num INT NULL COMMENT '排序号', remark VARCHAR(512) NULL COMMENT '备注', create_by VARCHAR(64) NULL COMMENT '创建人id', create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID', create_time DATETIME NOT NULL COMMENT '创建时间', update_by VARCHAR(64) NULL COMMENT '更新人id', update_time DATETIME NOT NULL COMMENT '更新时间', del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (id), KEY idx_oa_inst_tenant (tenant_no, del_flag), KEY idx_oa_inst_initiator (initiator_user_id, status), KEY idx_oa_inst_app (app_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA审批实例'; CREATE TABLE IF NOT EXISTS oa_task ( id VARCHAR(64) NOT NULL COMMENT '主键ID', instance_id VARCHAR(64) NOT NULL COMMENT '实例ID', node_key VARCHAR(64) NULL COMMENT '节点key', node_name VARCHAR(200) NULL COMMENT '节点名称', task_type VARCHAR(16) NOT NULL DEFAULT 'approval' COMMENT 'approval/cc', assignee_user_id VARCHAR(64) NOT NULL COMMENT '处理人', status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT 'pending/approved/rejected/done', comment_text VARCHAR(512) NULL COMMENT '意见', resolve_source VARCHAR(64) NULL COMMENT '解析来源如 supervisor_fallback_dept_leader', sign_mode VARCHAR(8) NULL COMMENT 'or/and', tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号', order_num INT NULL COMMENT '排序号', remark VARCHAR(512) NULL COMMENT '备注', create_by VARCHAR(64) NULL COMMENT '创建人id', create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID', create_time DATETIME NOT NULL COMMENT '创建时间', update_by VARCHAR(64) NULL COMMENT '更新人id', update_time DATETIME NOT NULL COMMENT '更新时间', del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (id), KEY idx_oa_task_assignee (assignee_user_id, status, del_flag), KEY idx_oa_task_instance (instance_id, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA审批任务'; CREATE TABLE IF NOT EXISTS oa_relation ( id VARCHAR(64) NOT NULL COMMENT '主键ID', from_instance_id VARCHAR(64) NOT NULL COMMENT '本实例ID', to_instance_id VARCHAR(64) NOT NULL COMMENT '被关联实例ID', field_key VARCHAR(64) NULL COMMENT '表单字段key', tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号', order_num INT NULL COMMENT '排序号', remark VARCHAR(512) NULL COMMENT '备注', create_by VARCHAR(64) NULL COMMENT '创建人id', create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID', create_time DATETIME NOT NULL COMMENT '创建时间', update_by VARCHAR(64) NULL COMMENT '更新人id', update_time DATETIME NOT NULL COMMENT '更新时间', del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (id), KEY idx_oa_rel_from (from_instance_id, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA关联审批'; -- 预置工作流角色(按租户手工或应用启动 ensure;此处示例 zkxw) -- INSERT 由后端 ensure_presets 幂等完成,避免 UUID 硬编码冲突 -- --------------------------------------------------------------------------- -- 3. 菜单说明 -- --------------------------------------------------------------------------- -- 侧栏路由已写入: -- - web-admin/src/router/modules/sqxp.ts -- - backend/app/api/menu.py(STATIC_MENU_TREE) -- 角色权限用的 sys_menu 注册见: -- docs/sql/patch_2026-07-15_oa_approval_sys_menu.sql -- (含 OA审批 节点插入,以及旧「工作流管理」伪删除)