Commit Graph

70 Commits

Author SHA1 Message Date
v6ole 1e0f77d4e6 feat: 桌面端表单必填项标记 * + 提交校验
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-12 20:30:43 +08:00
v6ole ff0a38a369 feat: 移动端表单必填项标记红色 * 号 + 提交校验
- 客户单位/日期/纪要内容/计划拜访时间 标记 *
- 缺失必填项时 ElMessage.warning 提示
- CSS: .required-star { color: var(--vermilion); }

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-12 20:28:54 +08:00
v6ole 6d1ccbb246 fix: 删除按钮移至标题栏右侧,与标题水平对齐
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-12 20:23:31 +08:00
v6ole 216406326a fix: 添加单条记录GET端点,修复移动端编辑表单数据加载
- work-plans/mini-business/key-visits 均新增 GET /{id} 端点
- 三个移动端编辑表单改用单条端点加载数据
- 修复点击卡片进入编辑时空白的 bug

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-12 20:20:07 +08:00
v6ole 33fb6a63c0 fix: 移动端列表卡片去掉编辑按钮,点击卡片直接进入编辑
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-12 20:17:03 +08:00
v6ole 637a0949a8 fix: 移动端列表页删除按钮改为编辑按钮
卡片底部按钮从 🗑 删除改为 ✏️ 编辑,编辑表单内保留删除功能

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-12 20:13:39 +08:00
v6ole aed9182dbe fix: 移动端列表页移除 v-loading 遮罩,修复卡片点击无反应
Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-12 20:12:14 +08:00
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