- 信息员预览基数改用本人销售额(原误用折算毛利润额,金额算错且口径自相矛盾) - 产品类别入参与维度值加存在性校验(拼错静默回退默认阈值 30% 会算错轨交工资) - submit 校验顺序前置查库(未注册 param_code 由 500 修正为 400) - 金额拒绝 NaN/Infinity(比较抛 InvalidOperation、计算抛溢出均穿透为 500) - version_no 并发冲突翻译为 400(对齐 user/role service 的 IntegrityError 处理) - 旧值留痕改取条目生效日时点的值(多未来批次下留痕链不再错位) - 脱敏红线:phone/mobile/id_card 键名整值抹除 + 手机号正则兼容分隔符写法 - 前端:撤回按钮与导出文件名改本地日期(UTC/本地混算)、维度行内精确「改」入口、 detailOf 补 catch、抽屉分页 size 生效、blob 错误读出真实 message - e2e 密码移除硬编码 fallback(缺失即报错退出);按钮文案同步「改」 - 全量回归:后端 406 + 集成 104 + 前端 type-check/build + e2e 7 步 全绿 Co-Authored-By: Claude Code <noreply@anthropic.com>
63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
"""全局常量。
|
||
|
||
集中定义 Redis 键模板、响应码、角色编码等跨模块共享的字面量,
|
||
避免各处硬编码字符串导致拼写漂移。
|
||
"""
|
||
|
||
# ===== 响应码(与 HTTP 状态码保持一致,见 PROJECT_STANDARDS 第 9 节)=====
|
||
CODE_SUCCESS = 200
|
||
CODE_BAD_REQUEST = 400
|
||
CODE_UNAUTHORIZED = 401
|
||
CODE_FORBIDDEN = 403
|
||
CODE_NOT_FOUND = 404
|
||
CODE_SERVER_ERROR = 500
|
||
|
||
# ===== Redis 键模板 =====
|
||
# 规范第 6 节:键格式 {项目缩写}:{业务}:{标识},项目缩写为 ys
|
||
REDIS_KEY_CAPTCHA = "ys:captcha:{captcha_id}"
|
||
REDIS_KEY_LOGIN_FAIL = "ys:login:fail:{username}"
|
||
REDIS_KEY_TOKEN_BLACKLIST = "ys:token:blacklist:{jti}"
|
||
|
||
# ===== JWT =====
|
||
JWT_ALGORITHM = "HS256"
|
||
TOKEN_TYPE_BEARER = "Bearer"
|
||
|
||
# ===== 角色编码(与 db/migration 初始化数据保持一致)=====
|
||
ROLE_ADMIN = "admin"
|
||
ROLE_USER = "user"
|
||
|
||
# ===== 密码策略 =====
|
||
# bcrypt 5.0 起对超过 72 字节的密码由「静默截断」改为「抛 ValueError」,
|
||
# 而中文一个字符占 3 字节,因此必须按字节数校验,按字符数校验是错的。
|
||
PASSWORD_MIN_BYTES = 8
|
||
PASSWORD_MAX_BYTES = 72
|
||
|
||
# ===== 验证码 =====
|
||
# 剔除易混淆字符 0/O/1/I/l,降低人工识别错误率
|
||
CAPTCHA_CHARSET = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
|
||
CAPTCHA_LENGTH = 4
|
||
|
||
# ===== 业务岗位编码(与 db/migration 种子一致,business_roles.role_code)=====
|
||
BUSINESS_ROLE_SALESPERSON = "salesperson"
|
||
BUSINESS_ROLE_SALES_MANAGER = "sales_manager"
|
||
BUSINESS_ROLE_INFO_OFFICER = "info_officer"
|
||
|
||
# ===== 产品类别码(与 param_values.dimension_value 口径一致)=====
|
||
PRODUCT_CATEGORY_MUNICIPAL_WATER = "municipal_water"
|
||
PRODUCT_CATEGORY_RAIL_TRANSIT = "rail_transit"
|
||
PRODUCT_CATEGORIES = {PRODUCT_CATEGORY_MUNICIPAL_WATER, PRODUCT_CATEGORY_RAIL_TRANSIT}
|
||
|
||
# ===== 操作日志词表(operation_logs 的 module / action 取值)=====
|
||
# 集中定义避免各处硬编码导致日志值漂移;前端筛选下拉项与此保持一致
|
||
MODULE_USER = "用户管理"
|
||
MODULE_ROLE = "角色管理"
|
||
MODULE_BUSINESS_ROLE = "岗位角色"
|
||
MODULE_PARAM = "计提参数"
|
||
|
||
ACTION_CREATE = "新增"
|
||
ACTION_UPDATE = "修改"
|
||
ACTION_DELETE = "删除"
|
||
ACTION_RESET_PASSWORD = "重置密码"
|
||
ACTION_ENABLE = "启用"
|
||
ACTION_DISABLE = "禁用"
|