This commit is contained in:
hero920103 committed 2026-11-03 11:13:59 +08:00
1 parent 012f8edf8b
commit 36ff960fbd
33 files changed
+1644 -344

No files matched your search

@@ -0,0 +1,49 @@
-- =============================================================
-- yz_system_menu 增加「是否必须登录」字段 require_login
--
-- 用途:免登录控制从模块级下沉到菜单级——Platform 菜单管理逐条配置
-- 某菜单(功能入口)是否允许移动端游客(持游客令牌)免登录使用。
-- 1 = 必须登录(默认,保持既有行为)
-- 0 = 可免登录使用(进入 nav 公开菜单 /api/menus/public)
--
-- 关联:yz_system_modules.require_login 保留但移动端不再作为判定依据,
-- 以菜单级开关为准(模块宫格是否可点 = 该模块下存在免登录菜单)。
--
-- 幂等:MySQL 的 ALTER TABLE ADD COLUMN 不支持 IF NOT EXISTS,
-- 重复执行会报 1060 Duplicate column name。这里用 information_schema
-- 判断列是否存在,缺失才拼 ADD COLUMN,再通过 PREPARE 执行。
-- 约定:本脚本在 mysql 客户端手动执行(同一会话保持 PREPARE 生效)。
-- =============================================================
SET @sql := CONCAT(
'ALTER TABLE `yz_system_menu` ',
IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'yz_system_menu'
AND COLUMN_NAME = 'require_login') = 0,
'ADD COLUMN `require_login` TINYINT NOT NULL DEFAULT 1 COMMENT ''1=必须登录 0=可免登录使用'' AFTER `is_visible`',
''
)
);
-- 列已存在时 @sql 仅剩 'ALTER TABLE `yz_system_menu` ',替换为无害语句
SET @sql := IF(RIGHT(TRIM(@sql), 1) = '`', 'SELECT 1 AS column_already_exists', @sql);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- =============================================================
-- 初始放开「便捷工具」的三个免登录功能(确认菜单标题后再执行):
--
-- SELECT id, title, path FROM `yz_system_menu`
-- WHERE title IN ('记事本', '日程提醒', '账号管理') AND delete_time IS NULL;
--
-- UPDATE `yz_system_menu`
-- SET `require_login` = 0
-- WHERE title IN ('记事本', '日程提醒', '账号管理');
--
-- 说明:父级目录菜单如需游客可见,也要一并置 0;
-- 后续新模块按需放开,全部走 Platform 菜单管理界面配置。
-- =============================================================
@@ -0,0 +1,46 @@
-- =============================================================
-- yz_system_modules 增加「是否必须登录」字段 require_login
--
-- 用途:Platform 模块管理可配置某业务模块是否允许移动端免登录访问。
-- 1 = 必须登录(默认,保持既有行为)
-- 0 = 可免登录使用
--
-- 幂等:MySQL 的 ALTER TABLE ADD COLUMN 不支持 IF NOT EXISTS,
-- 重复执行会报 1060 Duplicate column name。这里用 information_schema
-- 判断列是否存在,缺失才拼 ADD COLUMN,再通过 PREPARE 执行。
-- 约定:本脚本在 mysql 客户端手动执行(同一会话保持 PREPARE 生效)。
-- =============================================================
SET @sql := CONCAT(
'ALTER TABLE `yz_system_modules` ',
IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'yz_system_modules'
AND COLUMN_NAME = 'require_login') = 0,
'ADD COLUMN `require_login` TINYINT NOT NULL DEFAULT 1 COMMENT ''1=必须登录 0=可免登录使用'' AFTER `is_show`',
''
)
);
-- 列已存在时 @sql 仅剩 'ALTER TABLE `yz_system_modules` ',替换为无害语句
SET @sql := IF(RIGHT(TRIM(@sql), 1) = '`', 'SELECT 1 AS column_already_exists', @sql);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- =============================================================
-- 方案 B(兜底):不支持会话变量 / PREPARE 的执行器(工单系统等),
-- 改用下面的纯静态语句。注意:本条不幂等,列已存在会报
-- 1060 Duplicate column,执行前先用 information_schema 自查:
--
-- SELECT COUNT(*) FROM information_schema.COLUMNS
-- WHERE TABLE_SCHEMA = DATABASE()
-- AND TABLE_NAME = 'yz_system_modules'
-- AND COLUMN_NAME = 'require_login'; -- 返回 0 才执行 ALTER
--
-- ALTER TABLE `yz_system_modules`
-- ADD COLUMN `require_login` TINYINT NOT NULL DEFAULT 1
-- COMMENT '1=必须登录 0=可免登录使用' AFTER `is_show`;
-- =============================================================
+33
View File
@@ -0,0 +1,33 @@
-- =============================================================
-- 游客(免登录模块)身份与通用数据表
-- 对应代码:models.GuestUser / models.GuestData、services/gueststore
-- 幂等:CREATE TABLE IF NOT EXISTS,可重复执行
-- 用途:小程序用手机号授权换取“游客轻身份”,免登录模块产生的数据
-- 按 guest_id + module 存入 yz_guest_data(文档式,永久保留不清理);
-- 正式登录后按手机号把数据合并进正式账号(merged_uid 标记,行置 is_deleted=2)。
-- =============================================================
CREATE TABLE IF NOT EXISTS `yz_guest_user` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`phone` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '微信验证手机号(游客唯一标识)',
`openid` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '小程序 openid(可选溯源)',
`unionid` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'unionid(可为空)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '首次授权时间',
`last_active_time` DATETIME NULL COMMENT '最近一次签发/活动时间',
`merged_uid` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '转正并入的 AuthIdentity.ID,0=未合并',
`merged_time` DATETIME NULL COMMENT '合并时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_phone` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='游客轻身份(微信手机号授权签发)';
CREATE TABLE IF NOT EXISTS `yz_guest_data` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`guest_id` BIGINT UNSIGNED NOT NULL COMMENT 'yz_guest_user.id',
`module` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '所属业务模块:notebook / schedule / passwordStore / …',
`payload` TEXT NOT NULL COMMENT '业务条目 JSON 序列化(结构由各模块自定义)',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '0正常 1已删除(保留不清理) 2已合并进正式账号',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME NULL,
PRIMARY KEY (`id`),
KEY `idx_guest_module` (`guest_id`, `module`, `is_deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='游客通用数据(按模块文档式存储,永久保留)';