批量优化

This commit is contained in:
hero920103 committed 2026-10-03 23:46:55 +08:00
1 parent e3db229f41
commit aa92ca40a2
79 files changed
+7495 -1104

No files matched your search

+89
View File
@@ -0,0 +1,89 @@
-- =============================================================
-- 模块 / 菜单「展示端(platforms)」
--
-- 需求:后台管理模块层面需要能判断一个模块(及其菜单)
-- 是 Web 端显示、小程序显示,还是两端都显示。
--
-- 与已有的 views 字段是两个独立维度,不要混淆:
-- views —— [1]平台端 / [2]租户端(决定出现在哪个后台)
-- platforms —— ["web"] / ["app"] / ["web","app"](决定 Web 还是移动端可见)
--
-- 取值约定:
-- ["web"] 仅 Web 端(租户管理后台)可见
-- ["app"] 仅移动端(uniapp APP / 微信小程序)可见
-- ["web","app"] 两端都可见
-- '' 或 NULL 全端可见(默认,保证历史数据行为不变)
--
-- 继承规则:
-- 菜单自身配置了 platforms → 以自身为准
-- 菜单未配置 → 继承所属模块的 platforms(按 path 前缀归属)
-- 两者都未配置 → 全端可见
--
-- 本脚本可重复执行:MySQL 不支持 ADD COLUMN IF NOT EXISTS,
-- 故先用 information_schema 判断,再由动态 SQL 决定加不加列。
-- 若已存在则只更新注释,不会报 1060 Duplicate column name。
-- =============================================================
-- ---------- yz_system_modules ----------
SET @db := DATABASE();
SET @tbl := 'yz_system_modules';
SET @col := 'platforms';
SET @exists := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = @tbl AND COLUMN_NAME = @col
);
SET @sql := IF(@exists = 0,
CONCAT('ALTER TABLE `', @tbl, '` ADD COLUMN `', @col,
'` VARCHAR(64) NULL DEFAULT NULL COMMENT ''展示端:web/app JSON数组;空或NULL=全端'' AFTER `is_show`'),
CONCAT('ALTER TABLE `', @tbl, '` MODIFY COLUMN `', @col,
'` VARCHAR(64) NULL DEFAULT NULL COMMENT ''展示端:web/app JSON数组;空或NULL=全端''')
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------- yz_system_menu ----------
SET @tbl := 'yz_system_menu';
SET @exists := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = @tbl AND COLUMN_NAME = @col
);
SET @sql := IF(@exists = 0,
CONCAT('ALTER TABLE `', @tbl, '` ADD COLUMN `', @col,
'` VARCHAR(64) NULL DEFAULT NULL COMMENT ''展示端:web/app JSON数组;空或NULL=继承所属模块'' AFTER `views`'),
CONCAT('ALTER TABLE `', @tbl, '` MODIFY COLUMN `', @col,
'` VARCHAR(64) NULL DEFAULT NULL COMMENT ''展示端:web/app JSON数组;空或NULL=继承所属模块''')
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------- 校验 ----------
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND COLUMN_NAME = 'platforms'
AND TABLE_NAME IN ('yz_system_modules', 'yz_system_menu');
-- =============================================================
-- 使用示例(按需执行)
-- 注意:MySQL 5.7+ 可直接用 JSON_ARRAY('web') 生成 '["web"]',
-- 比手写转义双引号更省事。
-- =============================================================
-- 例1:把「客户关系管理」设为仅 Web 端可见(移动端不显示该子系统卡片)
-- UPDATE yz_system_modules SET platforms = JSON_ARRAY('web') WHERE code = 'crm';
-- 例2:把「便捷工具」设为仅移动端可见(Web 端后台不再展示)
-- UPDATE yz_system_modules SET platforms = JSON_ARRAY('app') WHERE code = 'bianjiegongju';
-- 例3:某功能两端都要
-- UPDATE yz_system_modules SET platforms = JSON_ARRAY('web','app') WHERE code = 'cms';
-- 例4:某个具体功能只在小程序上用(如扫码打卡),单独给菜单配置
-- UPDATE yz_system_menu SET platforms = JSON_ARRAY('app') WHERE path = '/tools/notebook';
-- 例5:恢复全端可见(清空即可,NULL 与 '' 都表示全端)
-- UPDATE yz_system_modules SET platforms = NULL WHERE code = 'crm';
-- UPDATE yz_system_modules SET platforms = NULL; -- 全部恢复
-- =============================================================
-- 回滚
-- =============================================================
-- ALTER TABLE yz_system_modules DROP COLUMN platforms;
-- ALTER TABLE yz_system_menu DROP COLUMN platforms;
@@ -0,0 +1,13 @@
CREATE TABLE IF NOT EXISTS `yz_auth_app_login_ticket` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`ticket` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '一次性登录票据',
`identity_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '认证中心身份ID',
`tid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '租户ID(0=待选企业)',
`client_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '兑换方应用ID,默认 yz-backend',
`expire_at` DATETIME NOT NULL COMMENT '过期时间',
`used_at` DATETIME NULL DEFAULT NULL COMMENT '核销时间(一次性)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_ticket` (`ticket`),
KEY `idx_expire_at` (`expire_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='统一认证-移动端免登录票据';
+1
View File
@@ -254,5 +254,6 @@ INSERT INTO `yz_auth_client`
VALUES
('yz-backend', 'backend', '租户管理后台', 2, 'authorization_code,refresh_token', 'openid,profile,tenant', 1800, 2592000, 'tenant'),
('yz-uniapp', 'uniapp', '移动端APP', 3, 'authorization_code,refresh_token', 'openid,profile,tenant', 1800, 2592000, 'tenant'),
('yz-miniapp', 'miniapp', '微信小程序', 4, 'authorization_code,refresh_token', 'openid,profile,tenant', 1800, 2592000, 'tenant'),
('yz-website', 'website', '企业官网', 2, 'authorization_code,refresh_token', 'openid,profile,tenant', 1800, 2592000, 'tenant')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
+42
View File
@@ -0,0 +1,42 @@
-- =============================================================
-- 微信小程序配置(统一认证 · 小程序一键登录)
--
-- 小程序与公众号是两套独立应用,AppID / AppSecret 不可混用,
-- 因此单独建表。app_secret 以 AES-256-GCM 密文存储(YZW1: 前缀)。
--
-- 关联链路:
-- uniapp 小程序 → wx.login / getPhoneNumber
-- → POST /auth/wechat/miniapp/login
-- → jscode2session 换 openid → 按手机号定位 yz_auth_identity
-- → 写入 yz_auth_identity_third(provider='wechat_mini')
-- → 复用统一认证的会话与令牌(yz_auth_session / yz_auth_refresh_token)
-- =============================================================
CREATE TABLE IF NOT EXISTS `yz_platform_wechat_mini_config` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`app_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '小程序 AppID',
`app_secret` VARCHAR(512) NOT NULL DEFAULT '' COMMENT '小程序 AppSecret(AES 密文,不回显)',
`enabled` TINYINT NOT NULL DEFAULT 0 COMMENT '是否启用小程序登录:0否 1是',
`auto_bind` TINYINT NOT NULL DEFAULT 1 COMMENT '手机号验证通过后是否自动绑定小程序:0否 1是',
`remark` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '备注',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信小程序配置';
-- -------------------------------------------------------------
-- 接入应用:微信小程序(app_type=4)
-- 小程序不走浏览器跳转,只用 POST /auth/wechat/miniapp/login 换令牌,
-- 因此无需登记 redirect_uris。
-- -------------------------------------------------------------
INSERT INTO `yz_auth_client`
(`client_id`, `app_code`, `name`, `app_type`, `grant_types`, `scope`, `access_ttl`, `refresh_ttl`, `realm`)
VALUES
('yz-miniapp', 'miniapp', '微信小程序', 4, 'authorization_code,refresh_token', 'openid,profile,tenant', 1800, 2592000, 'tenant')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- -------------------------------------------------------------
-- 第三方身份源:允许 yz_auth_identity_third.provider 出现 'wechat_mini'
-- (表结构本身为 varchar,无需 DDL;此处仅作说明)
-- provider = 'wechat_mini',open_id = 小程序 openid,union_id = 小程序 unionid
-- -------------------------------------------------------------