整理数据库迁移文件和开发脚本

- 合并迁移文件为 000001_init.sql(表结构)和 000002_seed.sql(初始数据)
- 删除旧的迁移文件(000002_chat.sql、000002_rbac_seed.sql、000007_chat_enhancements.sql)
- 简化 dev.sh 迁移逻辑,移除对已删除文件的引用
- 添加聊天相关表(chat_quick_replies)到初始化脚本

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
yml2213
2026-05-27 06:49:58 +08:00
co-authored by Claude Opus 4.7
parent 138f0514a9
commit 0d9fec01f3
5 changed files with 133 additions and 101 deletions
+85
View File
@@ -0,0 +1,85 @@
-- ============================================
-- 初始数据脚本
-- 包含权限、角色、系统配置等基础数据
-- ============================================
SET NAMES utf8mb4;
-- -------------------------------------------
-- 权限数据
-- -------------------------------------------
INSERT INTO permissions (code, name, resource, action) VALUES
('dashboard:view', '查看仪表盘', 'dashboard', 'view'),
('user:view', '查看用户', 'user', 'view'),
('user:freeze', '冻结用户', 'user', 'freeze'),
('user:unfreeze', '解冻用户', 'user', 'unfreeze'),
('order:view', '查看订单', 'order', 'view'),
('order:close', '关闭订单', 'order', 'close'),
('order:mark_abnormal', '标记异常订单', 'order', 'mark_abnormal'),
('listing:view', '查看商品', 'listing', 'view'),
('listing:approve', '审核通过商品', 'listing', 'approve'),
('listing:reject', '审核拒绝商品', 'listing', 'reject'),
('listing:offline', '下架商品', 'listing', 'offline'),
('dispute:view', '查看纠纷', 'dispute', 'view'),
('dispute:arbitrate', '仲裁纠纷', 'dispute', 'arbitrate'),
('chat:view', '查看客服群聊', 'chat', 'view'),
('chat:send', '发送客服消息', 'chat', 'send'),
('wallet:view', '查看资金流水', 'wallet', 'view'),
('admin_user:manage', '管理员管理', 'admin_user', 'manage'),
('role:manage', '角色管理', 'role', 'manage'),
('system_config:view', '查看系统配置', 'system_config', 'view'),
('system_config:update', '修改系统配置', 'system_config', 'update'),
('audit_log:view', '查看审计日志', 'audit_log', 'view')
ON DUPLICATE KEY UPDATE name = VALUES(name);
-- -------------------------------------------
-- 角色数据
-- -------------------------------------------
INSERT INTO roles (code, name, description) VALUES
('super_admin', '超级管理员', '拥有所有权限,不可被删除'),
('cs', '客服', '处理用户咨询、群聊、纠纷仲裁'),
('ops', '运营', '管理商品审核、订单管理、用户管理'),
('finance', '财务', '查看资金流水、订单信息')
ON DUPLICATE KEY UPDATE name = VALUES(name), description = VALUES(description);
-- -------------------------------------------
-- 角色权限关联
-- -------------------------------------------
-- super_admin 拥有所有权限
INSERT IGNORE INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id FROM roles r CROSS JOIN permissions p WHERE r.code = 'super_admin';
-- cs 角色权限
INSERT IGNORE INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id FROM roles r, permissions p
WHERE r.code = 'cs' AND p.code IN ('dashboard:view', 'user:view', 'dispute:view', 'dispute:arbitrate', 'chat:view', 'chat:send', 'order:view');
-- ops 角色权限
INSERT IGNORE INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id FROM roles r, permissions p
WHERE r.code = 'ops' AND p.code IN ('dashboard:view', 'user:view', 'user:freeze', 'user:unfreeze', 'order:view', 'order:close', 'order:mark_abnormal', 'listing:view', 'listing:approve', 'listing:reject', 'listing:offline', 'dispute:view', 'audit_log:view');
-- finance 角色权限
INSERT IGNORE INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id FROM roles r, permissions p
WHERE r.code = 'finance' AND p.code IN ('dashboard:view', 'wallet:view', 'order:view');
-- -------------------------------------------
-- 系统配置
-- -------------------------------------------
INSERT INTO system_configs (`key`, `value`, description) VALUES
('order.handoff_timeout_minutes', '60', '交接超时时间(分钟)'),
('order.return_timeout_minutes', '1440', '归还超时时间(分钟)'),
('sms.rate_limit_per_minute', '1', '短信限流:每分钟最多发送次数'),
('sms.rate_limit_per_hour', '5', '短信限流:每小时最多发送次数'),
('wallet.min_deposit', '50', '最低押金金额'),
('platform.fee_ratio', '0.1', '平台抽成比例'),
('listing.review_required', 'true', '商品是否需要审核'),
('order.pending_payment_timeout_minutes', '15', '待支付超时时间(分钟)'),
('chat.default_support_admin_id', '1', '订单群聊默认接入的客服管理员 ID'),
('chat.auto_welcome_message', '欢迎加入订单群聊!如有任何问题,请随时沟通。', '建群后自动发送的欢迎话术')
ON DUPLICATE KEY UPDATE description = VALUES(description);