dingdanquanliucheng/backend/app/services/bootstrap.py
taiyi 1053e96234 修复bootstrap数据初始化:清理重复菜单项,避免主键冲突
- 移除DEFAULT_MENUS中id 24-28的5条重复菜单项
- 修复id=29冲突(菜单编辑与业绩报表),重编号为30+
- seed_menus()插入新菜单时不再强制指定id,避免与已有记录冲突

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 09:48:22 +08:00

119 lines
12 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

DEFAULT_ROLES = [
{"id": 1, "role_name": "管理员", "role_code": "admin", "status": 1, "remark": "系统管理"},
{"id": 2, "role_name": "业务员", "role_code": "salesman", "status": 1, "remark": "录单和本人订单"},
{"id": 3, "role_name": "管理层", "role_code": "manager", "status": 1, "remark": "审批和经营数据"},
{"id": 4, "role_name": "司机", "role_code": "driver", "status": 1, "remark": "司机任务执行"},
]
DEFAULT_CONFIGS = [
{"config_key": "arrears_generate_mode", "config_value": "delivered", "config_name": "欠款生成模式", "remark": "shipped=发货后记账delivered=送达后记账", "status": 1},
{"config_key": "arrears_settlement_start_type", "config_value": "order_date", "config_name": "欠款起算节点", "remark": "order_date=订单日期delivery_date=发货日期reconciliation_date=对账日期", "status": 1},
{"config_key": "arrears_overdue_days", "config_value": "30", "config_name": "欠款超期天数", "remark": "超过该天数未结算触发欠款提醒", "status": 1},
{"config_key": "logistics_timeout_hours", "config_value": "48", "config_name": "物流超时小时数", "remark": "首个物流节点超过该小时数无流转提醒", "status": 1},
{"config_key": "inactive_customer_days", "config_value": "90", "config_name": "沉默客户周期", "remark": "超过该天数未下单触发检查", "status": 1},
{"config_key": "inactive_customer_amount_threshold", "config_value": "1000", "config_name": "沉默客户金额阈值", "remark": "低于该金额不提醒", "status": 1},
{"config_key": "reminder_method", "config_value": "system", "config_name": "提醒方式", "remark": "system=系统通知wechat=微信订阅消息sms=短信", "status": 1},
{"config_key": "profit_alert_threshold", "config_value": "0", "config_name": "利润预警阈值", "remark": "利润率低于该值时审批页面标红预警0=不预警", "status": 1},
{"config_key": "allow_cancel_statuses", "config_value": "draft,pending_approve,approved,pending_factory", "config_name": "允许取消的订单状态", "remark": "逗号分隔的状态编码列表", "status": 1},
{"config_key": "report_category_mapping", "config_value": "{}", "config_name": "报表分类映射", "remark": "按产品分类配置统计口径", "status": 1},
{"config_key": "logistics_trace_provider", "config_value": "internal", "config_name": "物流轨迹服务商", "remark": "internal=内置kdniao=快递100", "status": 1},
{"config_key": "wechat_template_order_status", "config_value": "", "config_name": "微信模板-订单状态变更", "remark": "微信小程序订阅消息模板ID", "status": 1},
{"config_key": "wechat_template_approval", "config_value": "", "config_name": "微信模板-审批通知", "remark": "微信小程序订阅消息模板ID", "status": 1},
{"config_key": "wechat_template_task_assigned", "config_value": "", "config_name": "微信模板-任务分配", "remark": "微信小程序订阅消息模板ID", "status": 1},
{"config_key": "wechat_template_logistics_timeout", "config_value": "", "config_name": "微信模板-物流超时", "remark": "微信小程序订阅消息模板ID", "status": 1},
{"config_key": "wechat_template_arrears", "config_value": "", "config_name": "微信模板-欠款提醒", "remark": "微信小程序订阅消息模板ID", "status": 1},
{"config_key": "wechat_template_inactive_customer", "config_value": "", "config_name": "微信模板-沉默客户", "remark": "微信小程序订阅消息模板ID", "status": 1},
]
DEFAULT_CATEGORIES = [
{"id": 1, "category_name": "工业品", "category_code": "industry", "sort_no": 1, "status": 1, "remark": "默认分类"},
{"id": 2, "category_name": "日用品", "category_code": "daily", "sort_no": 2, "status": 1, "remark": "默认分类"},
]
DEFAULT_MENUS = [
{"id": 1, "parent_id": 0, "menu_name": "后台首页", "menu_path": "/dashboard", "menu_type": "page", "permission_code": "dashboard:view", "icon": "dashboard", "sort_no": 1, "status": 1},
{"id": 2, "parent_id": 0, "menu_name": "审批中心", "menu_path": "/approvals", "menu_type": "page", "permission_code": "order:approve", "icon": "approval", "sort_no": 2, "status": 1},
{"id": 3, "parent_id": 0, "menu_name": "系统管理", "menu_path": "/system", "menu_type": "page", "permission_code": "system:view", "icon": "system", "sort_no": 3, "status": 1},
{"id": 4, "parent_id": 0, "menu_name": "基础资料", "menu_path": "/master-data", "menu_type": "page", "permission_code": "customer:list", "icon": "master-data", "sort_no": 4, "status": 1},
{"id": 5, "parent_id": 0, "menu_name": "业务模块", "menu_path": "/business", "menu_type": "page", "permission_code": "logistics:task:create", "icon": "business", "sort_no": 5, "status": 1},
{"id": 6, "parent_id": 0, "menu_name": "我的订单", "menu_path": "/orders", "menu_type": "page", "permission_code": "order:list", "icon": "orders", "sort_no": 6, "status": 1},
{"id": 7, "parent_id": 0, "menu_name": "新建订单", "menu_path": "/orders/create", "menu_type": "page", "permission_code": "order:create", "icon": "order-create", "sort_no": 7, "status": 1},
{"id": 8, "parent_id": 0, "menu_name": "提醒中心", "menu_path": "/reminders", "menu_type": "page", "permission_code": "reminder:list", "icon": "reminder", "sort_no": 8, "status": 1},
{"id": 9, "parent_id": 0, "menu_name": "管理层审批列表", "menu_path": "/pages/approve-list", "menu_type": "page", "permission_code": "manager:approve:list", "icon": "approve-list", "sort_no": 9, "status": 1},
{"id": 10, "parent_id": 0, "menu_name": "管理层工作台", "menu_path": "/pages/dashboard", "menu_type": "page", "permission_code": "manager:dashboard:view", "icon": "manager-dashboard", "sort_no": 10, "status": 1},
{"id": 11, "parent_id": 0, "menu_name": "管理层发厂文案", "menu_path": "/pages/supplier-text", "menu_type": "page", "permission_code": "order:supplier-text", "icon": "supplier-text", "sort_no": 11, "status": 1},
{"id": 12, "parent_id": 0, "menu_name": "管理层任务分配", "menu_path": "/pages/task-create", "menu_type": "page", "permission_code": "manager:task:create", "icon": "task-create", "sort_no": 12, "status": 1},
{"id": 13, "parent_id": 0, "menu_name": "我的任务", "menu_path": "/pages/task-list", "menu_type": "page", "permission_code": "driver:task:list", "icon": "driver-task", "sort_no": 13, "status": 1},
{"id": 14, "parent_id": 2, "menu_name": "取消审批", "menu_path": "", "menu_type": "button", "permission_code": "order:cancel-approve", "icon": "", "sort_no": 14, "status": 1},
{"id": 15, "parent_id": 6, "menu_name": "提交审核", "menu_path": "", "menu_type": "button", "permission_code": "order:submit", "icon": "", "sort_no": 15, "status": 1},
{"id": 16, "parent_id": 13, "menu_name": "司机接单", "menu_path": "", "menu_type": "button", "permission_code": "driver:task:accept", "icon": "", "sort_no": 16, "status": 1},
{"id": 17, "parent_id": 13, "menu_name": "司机揽货", "menu_path": "", "menu_type": "button", "permission_code": "driver:task:pickup", "icon": "", "sort_no": 17, "status": 1},
{"id": 18, "parent_id": 13, "menu_name": "司机送达", "menu_path": "", "menu_type": "button", "permission_code": "driver:task:deliver", "icon": "", "sort_no": 18, "status": 1},
{"id": 19, "parent_id": 3, "menu_name": "用户列表", "menu_path": "", "menu_type": "button", "permission_code": "system:user:list", "icon": "", "sort_no": 19, "status": 1},
{"id": 20, "parent_id": 3, "menu_name": "角色管理", "menu_path": "", "menu_type": "button", "permission_code": "system:role:list", "icon": "", "sort_no": 20, "status": 1},
{"id": 21, "parent_id": 3, "menu_name": "菜单管理", "menu_path": "", "menu_type": "button", "permission_code": "system:menu:list", "icon": "", "sort_no": 21, "status": 1},
{"id": 22, "parent_id": 3, "menu_name": "用户新增", "menu_path": "", "menu_type": "button", "permission_code": "system:user:create", "icon": "", "sort_no": 22, "status": 1},
{"id": 23, "parent_id": 3, "menu_name": "用户编辑", "menu_path": "", "menu_type": "button", "permission_code": "system:user:update", "icon": "", "sort_no": 23, "status": 1},
{"id": 24, "parent_id": 3, "menu_name": "用户重置密码", "menu_path": "", "menu_type": "button", "permission_code": "system:user:reset-password", "icon": "", "sort_no": 24, "status": 1},
{"id": 25, "parent_id": 3, "menu_name": "角色新增", "menu_path": "", "menu_type": "button", "permission_code": "system:role:create", "icon": "", "sort_no": 25, "status": 1},
{"id": 26, "parent_id": 3, "menu_name": "角色编辑", "menu_path": "", "menu_type": "button", "permission_code": "system:role:update", "icon": "", "sort_no": 26, "status": 1},
{"id": 27, "parent_id": 3, "menu_name": "角色授权", "menu_path": "", "menu_type": "button", "permission_code": "system:role:assign-menus", "icon": "", "sort_no": 27, "status": 1},
{"id": 28, "parent_id": 3, "menu_name": "菜单新增", "menu_path": "", "menu_type": "button", "permission_code": "system:menu:create", "icon": "", "sort_no": 28, "status": 1},
{"id": 29, "parent_id": 3, "menu_name": "菜单编辑", "menu_path": "", "menu_type": "button", "permission_code": "system:menu:update", "icon": "", "sort_no": 29, "status": 1},
{"id": 30, "parent_id": 0, "menu_name": "业绩报表", "menu_path": "/reports", "menu_type": "page", "permission_code": "report:performance:view", "icon": "report", "sort_no": 29, "status": 1},
{"id": 31, "parent_id": 30, "menu_name": "导出业绩报表", "menu_path": "", "menu_type": "button", "permission_code": "report:performance:export", "icon": "", "sort_no": 30, "status": 1},
{"id": 32, "parent_id": 0, "menu_name": "物流轨迹", "menu_path": "/logistics", "menu_type": "page", "permission_code": "logistics:trace:list", "icon": "logistics", "sort_no": 31, "status": 1},
{"id": 33, "parent_id": 32, "menu_name": "物流轨迹新增", "menu_path": "", "menu_type": "button", "permission_code": "logistics:trace:create", "icon": "", "sort_no": 32, "status": 1},
{"id": 34, "parent_id": 0, "menu_name": "AI识别", "menu_path": "/ai", "menu_type": "page", "permission_code": "ai:recognize", "icon": "ai", "sort_no": 33, "status": 1},
{"id": 35, "parent_id": 34, "menu_name": "AI结果修正", "menu_path": "", "menu_type": "button", "permission_code": "ai:correct", "icon": "", "sort_no": 34, "status": 1},
{"id": 36, "parent_id": 4, "menu_name": "定价规则查看", "menu_path": "", "menu_type": "button", "permission_code": "master-data:list", "icon": "", "sort_no": 35, "status": 1},
{"id": 37, "parent_id": 4, "menu_name": "定价规则编辑", "menu_path": "", "menu_type": "button", "permission_code": "master-data:update", "icon": "", "sort_no": 36, "status": 1},
]
DEFAULT_ADMIN_USER = {
"id": 1,
"username": "admin01",
"real_name": "系统管理员",
"mobile": "13900000001",
"role_id": 1,
"status": 1,
}
DEFAULT_ROLE_MENU_CODES = {
"admin": [item["permission_code"] for item in DEFAULT_MENUS],
"salesman": ["order:list", "order:create", "order:submit", "customer:list", "reminder:list"],
"manager": [
"order:approve",
"order:cancel-approve",
"order:supplier-text",
"manager:approve:list",
"manager:dashboard:view",
"manager:task:create",
"logistics:task:create",
"logistics:trace:list",
"logistics:trace:create",
"report:performance:view",
"report:performance:export",
"ai:recognize",
"ai:correct",
],
"driver": [
"driver:task:list",
"driver:task:accept",
"driver:task:pickup",
"driver:task:deliver",
"logistics:trace:list",
],
}
def build_bootstrap_summary() -> dict:
return {
"roles": DEFAULT_ROLES,
"configs": DEFAULT_CONFIGS,
"categories": DEFAULT_CATEGORIES,
"menus": DEFAULT_MENUS,
"role_menu_codes": DEFAULT_ROLE_MENU_CODES,
"admin_user": DEFAULT_ADMIN_USER,
}