批量优化
This commit is contained in:
1 parent
e3db229f41
commit
aa92ca40a2
79 files changed
+7495
-1104
No files matched your search
@@ -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='统一认证-移动端免登录票据';
|
||||
@@ -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`);
|
||||
@@ -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
|
||||
-- -------------------------------------------------------------
|
||||
Reference in new issue
Block a user