Files
hfb_sys/backend/migrations/000084_cs_manual_entry.sql
yml2213 cca40940d5 feat(admin): 新增客服手动录单功能与仪表盘今日录单统计
- 做了什么:
  - 新增客服手动录单数据库迁移 000084 及对应模型,支持编号唯一校验、客服快照绑定与 CRUD 操作;
  - 后端提供 csmanualentry 业务模块及相关 API,并在仪表盘摘要中聚合今日各客服录单数量;
  - 前端增加客服手动录单视图页面、路由与侧边栏导航,支持录单二次确认与细粒度权限控制;
  - 管理后台仪表盘增加今日客服手动录单卡片展示。
- 为什么:
  - 满足客服在后台手动登记外部业务编号需求,并便于运营按客服统计今日录单业绩和追溯对账。
- 验证方式:
  - 执行后端全量测试 go test ./... 与静态检查 go vet ./... 全部通过;
  - 执行前端代码门禁 npm run check 与 vite build 全部通过;
  - 执行 goose down/up 迁移回滚与应用测试通过,角色权限分配正确;
  - 本地 dev 联调 POST /api/admin/manual-entries 录单成功返回 201。
2026-10-12 14:52:24 +08:00

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;