-- ---------------------------- -- 员工管理(账号)页:sys_user 扩两列 —— 职务 + 客服企微二维码 -- -- 目标库 hugray(sys_user 属系统库,与 sys_menu/sys_dict 同库; -- 带连字符的 `hugray-account` 才是 C 端会员库,两者别搞混)。 -- sys_user 表里已有数据,故用幂等过程做存在性判断,绝不 DROP;脚本可重复执行。 -- -- 【sys_user 就是「后台员工」】 -- 本项目里后台员工 = sys_user,C 端会员 = account_user,是两套用户体系。 -- 本脚本只动 sys_user,与会员表无关。 -- -- 【职务为什么新开一列,而不是复用 sys_post 岗位】 -- 库里 sys_post 有 4 条(董事长/项目经理/人力资源/普通员工)、sys_user_post 有 2 条关联, -- 编辑弹窗也有「岗位」多选;但业务口径上「职务」是该员工档案上的自由文本描述 -- (如"华东区招商负责人"),与全公司共用的岗位名单不是一回事, -- 硬塞进岗位表会把描述性文本污染成枚举项。故新开一列。 -- -- 【客服微信为什么存图片地址】 -- 存的是企微加好友二维码图片,不是微信号文本,列表里以缩略图展示、可点击放大。 -- 上传走项目既有的 /file/upload(ruoyi-file 独立服务,网关 /file/** → 9300), -- 存接口返回的绝对地址(http:///statics/...);换环境后旧值会指向老主机, -- 故给足 500(与 account_provider.license_url、account_certification.license_image 同宽)。 -- -- 【写入收口】这两列是员工档案的普通可编辑字段,**刻意**进 SysUserMapper 的 -- 通用 insert/update 动态列(编辑弹窗要能改);判定条件写成 `` -- 而非 `!= ''`,否则把二维码删掉(置空串)时会被跳过、库里删不掉。 -- 与服务商标识 provider_flag 的处置不同:那个是权限标识,进了通用动态列就等于 -- 请求体带个值即可越权提权,必须单开 UPDATE 语句(见 hugray_account_provider_20261012.sql)。 -- ---------------------------- USE `hugray`; -- ---------- 幂等辅助过程(末尾删掉,不在库里留痕) ---------- -- MySQL 的 ALTER TABLE 不支持 ADD COLUMN IF NOT EXISTS,重复执行会因 -- Duplicate column name 中断,故用临时过程做存在性判断。 DROP PROCEDURE IF EXISTS `hugray_add_column`; DELIMITER $$ CREATE PROCEDURE `hugray_add_column`(IN p_table VARCHAR(64), IN p_column VARCHAR(64), IN p_definition TEXT) BEGIN IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = p_table AND COLUMN_NAME = p_column) THEN SET @ddl = CONCAT('ALTER TABLE `', p_table, '` ADD COLUMN `', p_column, '` ', p_definition); PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt; END IF; END$$ DELIMITER ; -- ---------- 1. 职务(自由文本) ---------- -- 默认空串而非 NULL:列表里空职务显示为空,不需要前端多做一层判空; -- 与 nick_name 等既有 varchar 列的 DEFAULT '' 风格一致。 CALL `hugray_add_column`('sys_user', 'job_title', "varchar(64) DEFAULT '' COMMENT '职务(自由文本,不复用 sys_post 岗位)'"); -- ---------- 2. 客服企微二维码图片地址 ---------- -- 默认 NULL 而非 '':没有二维码与「有二维码但地址为空」在业务上是同一件事, -- 用 NULL 表达"没有",前端 v-if 一眼可判。 CALL `hugray_add_column`('sys_user', 'service_qrcode_url', "varchar(500) DEFAULT NULL COMMENT '客服企微二维码图片地址(上传接口返回的绝对地址)'"); -- ---------- 3. 收尾:删掉临时过程 ---------- DROP PROCEDURE IF EXISTS `hugray_add_column`; -- ---------- 4. 结果核对 ---------- -- 应回两行,列类型分别是 varchar(64) / varchar(500) SELECT `ordinal_position`, `column_name`, `column_type`, `is_nullable`, `column_default`, `column_comment` FROM `information_schema`.`columns` WHERE `table_schema` = 'hugray' AND `table_name` = 'sys_user' AND `column_name` IN ('job_title', 'service_qrcode_url') ORDER BY `ordinal_position`; -- 存量两行(admin/ry)无需回填:job_title 走 DEFAULT '',service_qrcode_url 走 NULL SELECT `user_id`, `user_name`, `nick_name`, `job_title`, `service_qrcode_url` FROM `sys_user`; -- 临时过程必须已经删掉,应返回 0 行 SELECT `routine_name` FROM `information_schema`.`routines` WHERE `routine_schema` = 'hugray' AND `routine_name` = 'hugray_add_column';