v6ole
24fb5f8f71
feat: 移动端工作计划/商机跟单/要客拜访支持编辑和删除
...
- 三个表单均支持 create+edit 双模式(通过 route.params.id 判断)
- 编辑模式: 加载已有数据 → 修改 → PUT 更新
- 编辑模式增加删除按钮
- 列表页卡片点击跳转编辑页
- 新增 6 条编辑路由
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 20:06:47 +08:00
v6ole
bc6c7076fe
feat: 移动端导航重构 — 4 Tab + 工作中心 + 模块列表
...
- TabBar 新增「工作」标签(首页/工作/拜访/纪要)
- 新增工作中心页(/m/work),四卡片入口显示各模块记录数
- 新增三个列表页:工作计划/商机跟单/要客拜访(卡片流+删除)
- 首页精简:移除快捷 chip,入口统一到工作中心
- 路由新增: /m/work, /m/plans, /m/mini-biz, /m/key-visits
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 19:58:01 +08:00
v6ole
e06574df38
fix: 移动端相关人员提示更新为同访人周报显示说明
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 19:53:00 +08:00
v6ole
9eae965858
fix: 跟进记录日期选择器添加 value-format 避免 422 错误
...
el-date-picker 默认返回 Date 对象,JSON 序列化为 ISO 格式,
Pydantic date 字段不接受,需显式指定 value-format="YYYY-MM-DD"
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 19:04:21 +08:00
v6ole
87876f11fd
fix: MiniBusiness.vue 缺少 miniBusinessApi 导入
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 18:57:48 +08:00
v6ole
19aa9153ff
feat: PC端商机跟单新增详情弹窗+跟进时间线
...
- 点击客户名打开详情弹窗(替代直接编辑)
- 详情弹窗: 商机信息 + 跟进时间线 + 添加入口
- 跟进方式 chip: 电话/微信/上门/邮件/其他(色标区分)
- 每条跟进记录显示: 图标+日期+方式+内容+作者
- 支持添加和删除跟进记录
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 18:53:46 +08:00
v6ole
17a0218b32
feat: 商机跟单新增跟进记录子表(后端+API模块)
...
- 新增 mini_business_logs 表(business_id/log_date/method/content/created_by)
- MiniBusiness 模型添加 logs relationship(cascade delete)
- 5个端点: GET列表/POST新增/PUT编辑/DELETE删除
- 跟进方式: 电话/微信/上门/邮件/其他
- lifespan 自动建表+索引
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 18:51:04 +08:00
v6ole
03f14df244
fix: 移动端要客拜访计划时间改用日期选择器
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 18:34:25 +08:00
v6ole
3879cdc7ef
fix: 移动端工作计划/商机跟单/要客拜访新增快速新建客户
...
三个移动端表单现均支持搜索时直接新建客户(el-select #empty 插槽)
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 18:29:41 +08:00
v6ole
4453ee2ca0
feat: 支局长/分管领导可为任意客户经理代填记录
...
后端:
- 5个模块的 Create/Update schema 新增可选 manager_id 字段
- POST 端点: director/leader 可指定 manager_id,manager 角色自动用自身
- PUT 端点: director/leader 可修改 manager_id,manager 角色禁止修改
前端(移动端+桌面端共10个页面):
- 支局长/领导可见「客户经理」下拉选择框
- 创建和编辑时均可指定记录归属的客户经理
- 涵盖今日拜访、今日纪要、工作计划、商机跟单、要客拜访五个模块
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 18:19:05 +08:00
v6ole
c489a8d6fd
fix: 搜索无结果时新建按钮改为el-select的empty插槽,避免被遮挡
...
- 将「新建客户」按钮从 el-select 下方的独立 div 移入 #empty 插槽
- 搜索无匹配时,下拉面板直接显示「未找到xxx」+ 新建按钮
- 不再被原生「无数据」空状态遮挡
- 移动端+桌面端五个页面统一修复
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 18:04:45 +08:00
v6ole
5682c12085
feat: 桌面端工作页面支持搜索时直接新建客户
...
- WorkPlans/MiniBusiness/KeyVisits/ManagerWorkspace 四个页面新增快速新建客户功能
- 客户搜索框输入时,若无匹配结果,直接显示「+ 新建客户」按钮
- 点击即调用 POST /customers/quick-create 创建并自动选中
- 与移动端 VisitForm 保持一致体验
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 18:00:35 +08:00
v6ole
be26ea5588
fix: 亮灯表指标移除临期计数,精简显示
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 16:35:00 +08:00
v6ole
750ce8d8eb
feat: 亮灯表新增客户经理指标文字说明
...
每个客户经理折叠栏新增一行指标摘要:
「已拜访X · 临期X · 未拜访X · 完成率X%」
数字加粗,完成率按阈值着色(>=80%绿 >=50%金 <50%红)
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 16:25:35 +08:00
v6ole
e7c3081070
feat: AI 周报摘要提示词自定义设置
...
- system_config 新增 ai_summary_prompt 配置键
- generate_summary 从数据库加载自定义提示词,为空则使用默认 SUMMARY_SYSTEM_PROMPT
- 系统设置新增「AI 周报提示词」卡片,支持编辑和清空恢复默认
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 14:20:20 +08:00
v6ole
7dcb22f573
feat: 集成 apisbo.com 中国节假日 API 自动获取+缓存
...
- 新增 holidays.py 服务:按年获取节假日数据,缓存到 system_config
- 区分 holiday(工作日假日)和 workday(调休上班日)两种类型
- is_working_day() 支持调休判断:周末在 workdays 集合中视为工作日
- 启动时自动从 API 刷新当年+明年数据,失败则使用缓存
- 系统设置新增「从 API 刷新」按钮,支局长可手动触发
- 支持 2010-2026 年数据,API 免费免鉴权
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 14:17:31 +08:00
v6ole
a63bd6874c
feat: 仪表盘+催办在休息日跳过填报检查
...
- 新增 is_working_day() 工具函数,自动跳过周末 + 可配置法定假日
- 仪表盘填报进度新增 is_rest_day 字段,休息日显示灰「休」印章
- 催办调度改用 is_working_day() 替代原始 weekday 检查
- 系统设置新增「法定节假日」配置卡片,支局长可管理假日日期
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 14:13:32 +08:00
v6ole
dcb0b826de
fix: 桌面端编辑时客户名称显示UUID的问题
...
WorkPlans/MiniBusiness/KeyVisits/ManagerWorkspace 四个页面的
openEdit 均直接 spread item 到 form,未确保客户在 el-select
选项列表中。修复:编辑前检查并补充客户到 customers 列表。
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 13:45:06 +08:00
v6ole
e6237590c0
fix: 移动端编辑拜访记录时客户名称显示UUID的问题
...
编辑模式下,el-select 的 customers 列表可能不包含当前记录对应的客户,
导致无法匹配选项而直接显示原始 UUID 值。
修复:从 GET 响应中获取 customer_name,补充到 customers 列表。
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 13:43:21 +08:00
v6ole
f9eed82afb
fix: disable mobile zoom to prevent input auto-zoom on iOS
...
Added maximum-scale=1.0, user-scalable=no to viewport meta tag.
Prevents iOS Safari from auto-zooming when focusing inputs with font-size < 16px.
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 13:36:37 +08:00
v6ole
4debecd523
feat: add mobile leave form + list + home entry + routes
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 13:18:07 +08:00
v6ole
82bc0d9e41
feat: add mobile leave list page
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 13:16:34 +08:00
v6ole
7fd0f9b706
feat: add sidebar entry + route + dashboard leave card + on_leave status
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 13:15:50 +08:00
v6ole
709685057b
feat: add Leaves management page (PC)
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 13:12:56 +08:00
v6ole
b6105295bb
feat: add Leave API endpoints + frontend API module
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-12 13:05:49 +08:00
v6ole
e8b92a6f99
feat: 列宽拖拽 + 筛选栏 + 截图导出 + UI优化
...
- 新增 v-column-resize 指令,11 张表格均支持拖拽调整列宽
- 工作计划/商机跟单/要客拜访新增筛选栏(客户经理 + 状态)
- 汇总栏 chip 可点击筛选,支持重置与计数
- 新增截图导出功能(dom-to-image-more,像素级文字渲染)
- 截图范围从标题开始,自动隐藏操作按钮,5px白边
- 截图时页面闪烁动画反馈
- 全局 CSS 完善(列宽手柄、截图模式、捕获动画)
- 仪表盘 UI 细节优化 + 亮灯表标签调整
- 登录页 UI 改进
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-11 22:17:45 +08:00
v6ole
deeafe239f
feat: 双主题系统 — 编辑风 + 极简亮色
...
前端:
- 新增 Pinia theme store,localStorage 持久化,data-theme 切换
- App.vue: :root 新增 --font-*/--sidebar-* CSS 变量;新增 :root[data-theme=light] 完整配色(极简黑白金 + Noto Sans SC)
- DesktopLayout: 侧边栏 15 个变量化 + 顶栏主题切换按钮
- MobileLayout: 装饰色变量化
- Settings: 新增「界面主题」卡片
- 21 个组件 font-family 统一替换为 var(--font-*)
- 新增 utils/managerColor.ts — 12 色调色板 + 自适应文字色 + 后端自定义色优先
- WorkPlans/MiniBusiness/KeyVisits/CustomerManage: 客户经理标签色统一走共享工具
- UserManage: 编辑弹窗新增颜色选择器(仅 manager)
- LightBoard: 去标题星标图标
- ManagerWorkspace/WorkPlans/MiniBusiness/KeyVisits: 删除按钮改为实心红底白字
后端:
- User 模型新增 color 列 + lifespan 自动迁移
- users API 支持 color 字段读写
- UserOut schema 新增 color
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-06 16:03:13 +08:00
v6ole
336b60b3af
feat: 系统设置新增通报时间配置 + 亮灯表30天滚动窗口 + 相关人员文案统一 + 周报数据补全
...
- 亮灯表从自然月改为30天滚动窗口(30/60天阈值),解决月底覆盖断崖
- 系统设置新增「定时通报时间」选择器,支局长可配置每日企微通报时刻
- 新增 SystemConfig 键值表 + scheduler_manager APScheduler 运行时重调度
- 拜访记录/导入模板/弹窗表单统一「同访人员」→「相关人员」
- 仪表盘周报数据补全:companion_names_resolved、visitor_name/phone 等字段
- 新增 weekly_report_template.xlsx 模板文件
Co-Authored-By: Claude <noreply@anthropic.com >
2026-07-06 11:51:07 +08:00
v6ole
cd47d1aed5
feat: 亮灯表30天滚动窗口 + 相关人员文案统一 + 周报数据补全
...
- light_board.classify: 自然月 → 30/60天滚动窗口 (≤30天🟢 , 31-60天🟡 , 61+天🔴 )
- LightBoard.vue: 4处文案同步 (近30天已拜访 / 上次 / 个周期)
- dashboard.get_weekly_report: 补全 companion_names_resolved + visitor_name + visitor_phone + edit_log
- 导入/导出模板 + VisitForm + ManagerWorkspace: 同访人员 → 相关人员
2026-07-02 16:58:29 +08:00
v6ole
3285e22142
feat: 导入增强 + 客户合并 + 同伴自定义 + 性能优化
...
=== 导入系统全面增强 ===
- 5 Sheet 完整导入:拜访/计划/商机/要客/纪要
- 同访人智能解析:中英文逗号/顿号/分号 → 系统用户UUID + 外部人员TEXT
- 客户自动创建:Excel中不存在的客户自动入库
- 模糊名称匹配:去空格 + 包含关系纠错
- manager_id 修正:导入时用客户分配的经理(非Excel列/非导入人)
- 模板更新:Sheet5「客户经理」→「填报人」,同访人示例含逗号分隔
=== 客户合并功能 ===
- PUT 改名碰撞检测 → 409 + 合并预览
- GET merge-preview / POST merge 端点
- 事务级迁移:Visit/WorkPlan/MiniBusiness/KeyVisit/联系人/分配
- 去重逻辑:联系人(name+phone)、分配(manager+role)
- last_visit_date 取最大值
=== 拜访记录完善 ===
- visits 新增 companion_names TEXT[] 列
- 同访人支持自定义输入(外部人员),el-select allow-create
- 移动端 VisitForm + PC端 ManagerWorkspace 统一
- 周报「客户经理」→「相关人员」(创建人+同访人)
- 纪要「客户经理」→「填报人」
- 删除拜访后重新计算 customer.last_visit_date
=== 客户选择放开 ===
- 客户经理可看到全部客户(不再限自己分配的)
- 拜访时客户下拉返回全量
=== 前端性能优化 ===
- Element Plus 按需加载 (unplugin-vue-components + unplugin-element-plus)
- 周报照片URL并行请求 (Promise.all)
- onMounted 三路并行 (loadReport + dropdowns + AI)
- nginx Cache-Control: immutable for /assets/
- Google Fonts preconnect hints
- 图片上传前 Canvas 压缩 (max 1920px, quality 0.8)
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-29 22:25:04 +08:00
v6ole
b343970ecc
feat: 三项联动 — 计划过期提醒 + 拜访自动关闭 + 批量制定
...
1. 计划过期自动提醒:
- scheduler.py 新增 check_overdue_plans()
- 每日 9:00 检查过期计划(plan_date < today, status=计划中)
- 按经理汇总 → 企微推送提醒消息
2. 拜访后自动关闭计划:
- create_visit 后自动将匹配的计划标记为「已完成」
- 条件: customer_id 匹配 + status=计划中 + plan_date <= visit_date
3. 亮灯表批量制定:
- 红灯/黄灯卡片右上角 ☐ 复选框
- 勾选后出现「批量制定计划」按钮
- 弹窗统一设置日期+内容 → 批量 POST
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-27 12:28:36 +08:00
v6ole
0e25201ede
feat: 亮灯表重构 — 点击卡片弹窗替代跳转周报
...
后端 light_board.py:
- 每张客户卡片返回 plans[] (活跃工作计划) + recent_visits[] (最近2条)
- 计划过期检测 (plan_overdue)
前端 LightBoard.vue:
- 点击卡片 → el-dialog 弹窗 (不再跳转周报)
- 绿灯: 显示最近拜访记录
- 黄/红灯: 客户信息 + 快速制定拜访计划表单
- 卡片显示计划标签 (📅 正常 / ⚠过期闪烁)
- 弹窗底部保留「查看周报记录」链接
计划过期逻辑: plan_date < 当月首日 且 status=计划中
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-27 12:23:58 +08:00
v6ole
2bb85bf45c
fix: UserManage.vue 补充丢失的 useAuthStore 导入
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-27 12:09:04 +08:00
v6ole
015af18d3c
fix: 用户编辑弹窗修复 — footer 简化 + 删除后关闭弹窗
...
- footer 用 span 替代 flex div (避免 element-plus 兼容问题)
- 删除成功后自动关闭弹窗
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-27 12:02:04 +08:00
v6ole
7e31606b45
refine: 删除按钮移到编辑弹窗 — 统一操作入口
...
- 表格行内只保留「编辑」按钮
- 编辑弹窗左下角红色「删除用户」按钮(仅支局长可见)
- 避免表格行内误删
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-27 11:56:03 +08:00
v6ole
04aaff8851
feat: 支局长可删除用户 + 清理重复蓝浩博
...
- 新增 DELETE /api/users/{id} (require_director, 不能删自己)
- 用户管理页新增「删除」按钮(仅支局长可见)
- 删除重复的分管领导蓝浩博
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-27 11:53:11 +08:00
v6ole
447932a8e6
fix: 新建表单客户选择器 — 提高 page_size 上限
...
- 前端三个页面: page_size 100 → 500(覆盖所有客户)
- 后端 customers API: page_size 上限 100 → 1000,默认 25 → 100
支局长/分管领导新建时下拉框可加载全量客户。
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-27 11:47:00 +08:00
v6ole
e99d0aec8a
Revert "feat: 支局长/领导可指定客户经理创建记录"
...
This reverts commit a4904973bf .
2026-06-27 11:41:17 +08:00
v6ole
a4904973bf
feat: 支局长/领导可指定客户经理创建记录
...
后端 schema: WorkPlanCreate/MiniBusinessCreate/KeyVisitCreate 新增可选 manager_id
后端 API: create 端点支持 manager_id 参数(留空则默认本人)
前端: 三个页面新建弹窗新增「客户经理」下拉(仅支局长/领导可见)
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-27 11:17:54 +08:00
v6ole
576715f990
feat: 网站 favicon — 公文包图标
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-26 17:21:18 +08:00
v6ole
a580eefd14
feat: 三项改进 — require_report + 拜访联动 + 解绑移到弹窗
...
1. 用户管理页 UX 优化:
- 表格内「解绑」按钮移入编辑弹窗(clearable 输入框)
- 新增「需要填写周报」el-switch 开关
- 新增「填报」列显示是否计入统计
2. require_report 字段 (DB + API + 联动):
- users 表新增 require_report BOOLEAN DEFAULT TRUE
- 调度器/仪表盘进度/立即检查 均排除 require_report=false
- UserOut schema + UpdateUserRoleRequest 同步更新
3. 拜访联动客户 last_visit:
- customers 表新增 last_visit_date / last_visit_manager_id
- 创建拜访记录时自动更新对应客户的最后拜访信息
- 亮灯表可据此精确判断客户拜访状态
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-26 16:36:27 +08:00
v6ole
e69d962521
fix: 手动切换布局 — 仅首页首次加载自动适配
...
检测 _from.name 区分「首次加载」和「应用内导航」:
- 首次: 手机→/m, 桌面→/
- 手动点击切换按钮: 完全尊重用户选择, 不拦截
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-26 16:03:54 +08:00
v6ole
b88b29b745
fix: 手动切换布局失效 — 仅首页自动适配
...
- 只对根路径 / 做手机→/m 跳转,不再拦截桌面访问 /m
- 支持 ?view=desktop 或 ?view=mobile 强制覆盖自动检测
- 手动输入的具体路径完全不受影响
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-26 15:56:44 +08:00
v6ole
c71a2ac88e
perf: Vite 分包优化 — Element Plus / Vue 独立 chunk
...
build.rollupOptions.manualChunks:
- element-plus → ~923 kB (独立缓存,首次加载后 HIT)
- vue-vendor → ~110 kB (Vue + Router + Pinia)
- index (app code) → ~59 kB (从 ~1 MB 缩减)
首屏加载显著减少,二次访问几乎零加载。
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-26 15:40:07 +08:00
v6ole
861a4cecff
feat: 客户查重前端集成
...
- 新建客户时输入名称失焦后自动调用 /customers/check-duplicate
- 若有同名客户显示黄色警告条(含客户名+经理)
- 编辑模式不触发查重
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-26 15:37:44 +08:00
v6ole
327637f94c
feat: 移动端/桌面端自动适配
...
- utils/index.ts: 新增 isMobile() 检测 user-agent
- router: beforeEach 守卫中根据设备自动跳转
- 手机访问 / 桌面路由 → 自动跳 /m
- 桌面访问 /m 移动路由 → 自动跳 /
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-26 15:33:09 +08:00
v6ole
313b25c631
fix: WecomBind.vue — 修复 auth.user 不存在的问题
...
auth store 暴露的是独立字段 (name/userId/role) 而非 user 对象,
导致 auth.user?.name 始终为 undefined。
修复:
- auth.name 替代 auth.user?.name
- 调用 /users/me 获取 wecom_userid (store 不存储该字段)
- window.location.href 替代 router.push (企微浏览器兼容)
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-26 15:18:36 +08:00
v6ole
9d3a8ae57e
fix: 绑定页用 window.location 跳转登录 (企微浏览器兼容)
...
router.push 在企微内置浏览器可能不触发跳转,
改用 window.location.href 强制整页跳转
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-26 15:09:31 +08:00
v6ole
19ebb85209
fix: 绑定页面登录态检查 + 登录后返回原页面
...
Login.vue:
- goCasdoorLogin() 前将 redirect 参数存入 sessionStorage
- 登录成功后检查 sessionStorage 跳回原页面
- wecomLogin 流程同样支持 returnUrl
WecomBind.vue:
- onMounted 检测未登录 → 跳转 /login?redirect=/wecom-bind?token=xxx
- 登录后自动回到绑定页面,auth.user 不再为空
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-26 13:14:26 +08:00
v6ole
7264184315
feat: 企微绑定重构 — 回调事件 + 支局长手动绑定/解绑
...
绑定流程改为 rural-optical-rectify 方案:
- 企微菜单「绑定账号」发送 click 事件(而非 OAuth 跳转)
- 回调 POST 接收事件 → 生成绑定 token → 推送绑定链接
- 前端 WecomBind.vue (/wecom-bind) 确认绑定
- 新增 POST /api/wecom/bind-confirm (JWT 保护)
支局长手动管理:
- 新增 PUT /api/users/{id}/wecom 绑定/解绑端点
- UserManage.vue 编辑对话框新增企微 UserID 字段
- 表格操作列新增「解绑」按钮
- 重复绑定检测
wecom.py 新增:
- in-memory bind token store (TTL 600s)
- send_text_card() 卡片消息方法
- access_token 属性暴露
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-26 12:10:38 +08:00