- 做了什么: - 新增客服手动录单数据库迁移 000084 及对应模型,支持编号唯一校验、客服快照绑定与 CRUD 操作; - 后端提供 csmanualentry 业务模块及相关 API,并在仪表盘摘要中聚合今日各客服录单数量; - 前端增加客服手动录单视图页面、路由与侧边栏导航,支持录单二次确认与细粒度权限控制; - 管理后台仪表盘增加今日客服手动录单卡片展示。 - 为什么: - 满足客服在后台手动登记外部业务编号需求,并便于运营按客服统计今日录单业绩和追溯对账。 - 验证方式: - 执行后端全量测试 go test ./... 与静态检查 go vet ./... 全部通过; - 执行前端代码门禁 npm run check 与 vite build 全部通过; - 执行 goose down/up 迁移回滚与应用测试通过,角色权限分配正确; - 本地 dev 联调 POST /api/admin/manual-entries 录单成功返回 201。
51 lines
2.3 KiB
SQL
51 lines
2.3 KiB
SQL
-- +goose Up
|
|
|
|
CREATE TABLE IF NOT EXISTS cs_manual_entries (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
entry_no VARCHAR(64) NOT NULL COMMENT '客服录入的编号',
|
|
admin_id BIGINT UNSIGNED NOT NULL COMMENT '录单客服管理员ID',
|
|
admin_name VARCHAR(64) NOT NULL DEFAULT '' COMMENT '客服昵称快照',
|
|
admin_username VARCHAR(64) NOT NULL DEFAULT '' COMMENT '客服登录名快照',
|
|
remark VARCHAR(255) NOT NULL DEFAULT '' COMMENT '备注',
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '登记时间',
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_cs_manual_entries_entry_no (entry_no),
|
|
KEY idx_cs_manual_entries_admin_created (admin_id, created_at),
|
|
KEY idx_cs_manual_entries_created_at (created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客服手动录单记录表';
|
|
|
|
INSERT INTO permissions (code, name, resource, action) VALUES
|
|
('cs_manual_entry:view', '查看客服手动录单', 'cs_manual_entry', 'view'),
|
|
('cs_manual_entry:create', '客服手动录单', 'cs_manual_entry', 'create'),
|
|
('cs_manual_entry:update', '编辑客服手动录单', 'cs_manual_entry', 'update'),
|
|
('cs_manual_entry:delete', '删除客服手动录单', 'cs_manual_entry', 'delete')
|
|
ON DUPLICATE KEY UPDATE
|
|
name = VALUES(name),
|
|
resource = VALUES(resource),
|
|
action = VALUES(action);
|
|
|
|
-- 客服/运营/超管:录单 + 查询
|
|
INSERT IGNORE INTO role_permissions (role_id, permission_id)
|
|
SELECT r.id, p.id
|
|
FROM roles r
|
|
JOIN permissions p ON p.code IN ('cs_manual_entry:view', 'cs_manual_entry:create')
|
|
WHERE r.code IN ('cs', 'ops', 'super_admin');
|
|
|
|
-- 运营/超管:全量 CRUD(编辑、删除)
|
|
INSERT IGNORE INTO role_permissions (role_id, permission_id)
|
|
SELECT r.id, p.id
|
|
FROM roles r
|
|
JOIN permissions p ON p.code IN ('cs_manual_entry:update', 'cs_manual_entry:delete')
|
|
WHERE r.code IN ('ops', 'super_admin');
|
|
|
|
-- +goose Down
|
|
|
|
DELETE rp
|
|
FROM role_permissions rp
|
|
JOIN permissions p ON p.id = rp.permission_id
|
|
WHERE p.code IN ('cs_manual_entry:view', 'cs_manual_entry:create', 'cs_manual_entry:update', 'cs_manual_entry:delete');
|
|
|
|
DELETE FROM permissions WHERE code IN ('cs_manual_entry:view', 'cs_manual_entry:create', 'cs_manual_entry:update', 'cs_manual_entry:delete');
|
|
|
|
DROP TABLE IF EXISTS cs_manual_entries;
|