Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1ae65d97fb | ||
|
|
1c9bf446dd | ||
|
|
1dd1cf9bc2 | ||
|
|
3d02548743 | ||
|
|
f11c84911a |
@@ -4,6 +4,27 @@
|
|||||||
- node --check 全量校验通过;onclick 函数与 getElementById ID 交叉检查全部匹配
|
- node --check 全量校验通过;onclick 函数与 getElementById ID 交叉检查全部匹配
|
||||||
- 部署 HTML 至资料库在线页面(绑定 4 张数据库),URL: https://www.workbuddy.cn/space/d/slZoYoQY3Jp8VuRAmizFem,HTTP 200 验证通过
|
- 部署 HTML 至资料库在线页面(绑定 4 张数据库),URL: https://www.workbuddy.cn/space/d/slZoYoQY3Jp8VuRAmizFem,HTTP 200 验证通过
|
||||||
- 全部 6 项任务完成,交付用户
|
- 全部 6 项任务完成,交付用户
|
||||||
|
<<<<<<< HEAD
|
||||||
|
- 用户反馈后去掉 freight-sfa.html 顶栏的 S 图标(header-logo 内 SVG),仅保留标题文字
|
||||||
|
- 继续去掉顶栏最右侧用户头像中的字母 S(移除整个 #userAvatar 元素,JS 无引用)
|
||||||
|
- 用户反馈「侧边栏点不动」:根因是 init() 中 bindSidebar() 排在无 try-catch 的 loadSampleData() 之后,若数据加载抛错则事件不绑定。修复:将 bindSidebar/bindHeader/bindModals 提前到 init 最前面执行,loadState/loadSampleData/renderAll 全部包 try-catch,并校验 state 数组类型;bindSidebar 的 showPage 也加 try-catch 保证高亮/关抽屉不中断。侧边栏导航从此保证始终可点。
|
||||||
|
- 续:再次去掉顶栏右侧 #userAvatar(已删除元素)并清理无用 CSS `.user-avatar`,header-logo 容器保留,favicon/PWA manifest 中的 "S" 未触及。
|
||||||
|
- 侧栏重构:把"首页看板"内 9 项包进 `#sideSortable` 容器,每项加 `draggable="true"` + `⋮⋮` 拖动手柄;新增 `bindSidebarSortable` 实现拖拽排序,按顺序持久化到 `localStorage[wb_freight_sfa_v1_side_order]`;dragstart 仅当指针在手柄上才响应,点文字/图标不进入拖拽、点击导航照常。"客户全量"→"所有客户","A类重点"→"等级分类",其 route 不变。
|
||||||
|
- 等级分类仪表盘改造:`renderVIPView` 重写为按 `state.options.grade` 分级(默认 A/B/C)多块聚合卡片(每级一张:客户数/占比/待跟进/累计货量),下方表格按分级分组、加分组头、点击"跳到表筛选"自动设置 `cf-grade` 并跳转到"所有客户"页(cf-grade=该等级)。空数据时显示引导。无客户时显示"请先在客户档案表新增"。
|
||||||
|
|
||||||
|
- 侧栏图标顺序:用户反馈图标要在最左侧,且点文字不可复制。把所有 15 个侧栏项的文字包进 <span class="side-label">,CSS order 设为 `.ic=1, .side-label=2(flex:1 占满剩余), .drag-handle=3, .badge=4`,视觉顺序:🔷图标 → 文字 → ⋮⋮拖手柄 → 数字徽章。side-label 加 user-select:-webkit-/-moz-/-ms-/-none 全套禁止文本复制。
|
||||||
|
|
||||||
|
- 移动端侧栏 bug 修复:原本 `.drawer-mask` 是 rgba(0,0,0,.4) 深色全屏遮罩(pointer-events 默认 auto),页面变窄(≤1024px)打开左侧栏时整个画面变暗且被遮罩锁死无法点主内容。改为 `background:transparent + pointer-events:none`(透明可穿透,主画面不再变暗、可正常操作);同时移动端 `.sidebar` 加 `z-index:60` 保证抽屉浮于顶层。关闭方式不变:点导航项自动关、点菜单按钮 toggle 关(遮罩透明后点击遮罩外的 onclick 已无意义,靠按钮/导航项关闭)。
|
||||||
|
- 备忘录功能:state.memos=[{id,date('YYYY-MM-DD'),text,done,created}];在 today-bar 下方加 memo-bar (含输入框+日期选择器);首页 charts 后插入"备忘录日历"卡片(当月日历、每天显示"待 N / 完 N" pill、可翻上月/下月/今天、点击日期同步切换 today-bar 输入框日期)。函数: memoInit/memoAdd/memoToggle/memoDel/memoRenderBar/renderMemoCalendar/memoNavMonth/memoJumpDate/memoPills。已挂到 init 末尾与 renderDashboard 末尾同步刷新。
|
||||||
|
- 备忘录增强:①勾选完成时触发 `fireConfetti()` 彩带粒子动画(70 片随机颜色,translate+rotate+淡出);打勾后 `.memo-item.done` 只 opacity:.5 变暗、去掉了 text-decoration:line-through(不再加删除线)。②日历标题右侧改为"数字滚轮":年月各显示大号数字 `2026年 08月`,上下 ▲▼ 微调(memoWheelYear/memoWheelMonth),鼠标在导航区滚轮滑动切换月(shift+滚轮切年),旁边红色"今天"按钮 memoGoToday() 一键回到今天并高亮选中。函数 memoEnsureMonth/memoWheelYear/memoWheelMonth/memoGoToday/fireConfetti。滚轮绑定在 .memo-cal-nav 上(onwheel+e.preventDefault)。memoToggle 现返回新 done 状态供 UI 判断是否撒彩带。
|
||||||
|
- 备忘录日历微调:①把"年月合并"的滚轮拆成 .memo-wheels 两个独立 .memo-wheel —— 年轮(2026年) 与 月轮(08月) 各自 ▲▼ 微调;滚轮事件绑定到每个独立 wheel 上(hover 年轮滑动切年,hover 月轮滑动切月)。②`memoGoToday` 移除 scrollIntoView、改为展开 memoShowDetail(ds) 让用户立即看到今天待办。③日历网格下方新增 #memoDetail 详情面板,点击日期展开当天备忘录列表(含复选框/时间/删除)、再次点击同一日期收起(toggle 行为);另提供 ✕ 按钮手动收起。memoShowDetail / memoHideDetail / memoDetailIn 动画。
|
||||||
|
- 备忘录去重+解耦:①顶部"我的备忘录"去掉日期选择器(memoDate input),固定只显示今天(label 直接写"我的备忘录 · 今天")。②日历详情面板 #memoDetail 新增添加输入框 + "添加"按钮(回车也可 memoDetailAdd),可直接给任意日期加待办;勾选(memoToggleUI)/删除(memoDelUI) 与顶部共享 state.memos,两边数据即时同步。③引入 window._memoActiveDate 记录日历当前操作日期,memoSelectedDate()/memoDetailDate() 返回它(默认今天);顶部 memoRenderBar(todayStr()) 固定今天,详情 refreshMemoDetail() 用 active date。④memoShowDetail 改为生成头部/列表/输入框三块结构并调 refreshMemoDetail 填充;memoJumpDate/memoGoToday 不再依赖 memoDate 输入框。
|
||||||
|
- 今天要处理排版重排:HTML 把 todayTasks 从 today-row 内移到外(在 quick-stats 之后),CSS 改为 flex-direction:column(.today-tasks)+ .today-group/.today-group-head(含彩色 dot + 种类 emoji + 数量徽章)/.today-group-list(任务卡片堆叠)/ .today-empty/.today-tasks-empty。JS renderDashboard 不再按 alert 排序 + slice(0,6) 拍平,而是按 groups.followup/etd/overdue 分桶,渲染顺序固定"待跟进 → 今日开船 → 逾期回款",每个分组最多展示 5 条 + 「还有 N 条…」。同时 quick-stats 数字来源改为 groups.*.length(统一语义)。SI截关临近归入 etd 组。
|
||||||
|
- 【修正】"今天要处理"排版:之前误做成按种类分组的任务卡片,用户只要"头部一行(今天要处理+2待跟进+0今日开船+1逾期回款) + 下方直接列客户名"。改为:HTML 中 todayTasks 移到 today-row(label+quick-stats)之后;JS 用 custMap{name->{kinds:Set}} 去重收集今天要处理的客户,下方每行显示"客户名 + 类别标签(待跟进/今日开船/逾期回款 tag) + 查看按钮",alert 红色。quick-stats 改为按客户去重计数(followupCount/etdCount/overdueCount 用 Set)。CSS .today-tasks 改纵向 flex,加 .cust-name/.cust-kinds。
|
||||||
|
- 【修正】今天要处理顶/底数据源统一:之前顶部 quick-stats 用了独立的过滤循环统计客户数,下方 custMap 又用了略有不同的过滤条件,导致顶部"待跟进=0"但下方显示 2 个待跟进客户的不一致。改为:所有客户先收进 custMap(统一的过滤逻辑:逾期回款=回款状态逾期;待跟进=下次跟进==今天或<今天;今日开船=ETD==今天+SI截关临近),顶部三个数字 followupCount/etdCount/overdueCount 用 Object.values(custMap) 反向按 kinds 计数 Set.size。这样顶部数字与下方 row 数量必然一致。
|
||||||
|
- 【修正】今天要处理客户行配色协调:之前行用 c.alert 决定红/白底,与 followup/etd 标签色不对齐(如美西收货人:行红色但标签蓝色"待跟进")。改为:以"主类别"决定行配色(优先级 overdue > etd > followup),.today-task.row-followup(浅蓝)/.row-etd(浅橙)/.row-overdue(浅红) 三套独立样式;标签用 .tag.tag-followup/tag-etd/tag-overdue 颜色与行同色系。客户列表也按主类别排序,让同类颜色邻接。移除 .today-task.alert 旧规则。
|
||||||
|
- 今天要处理客户行加"已查看"勾选标记:新增 state.seenToday{客户名:时间戳}(本地 UI 记忆,绝不修改数据库状态;真正完成任务仍须在数据库表标记)。渲染时每行前加 .cust-seen 勾选框(data-name 存客户名,onclick=toggleSeenBy(this)),已勾选则行加 .seen(打勾、整体灰度+淡化 0.4、轻微去饱和)。再次点击可取消。存到现有 wb_freight_sfa_v1。toggleSeenBy 里 delete/add + saveState + renderDashboard 刷新。
|
||||||
|
=======
|
||||||
|
|
||||||
## freight-sfa 前后端分离重构(已完成,19 项冒烟测试通过)
|
## freight-sfa 前后端分离重构(已完成,19 项冒烟测试通过)
|
||||||
|
|
||||||
@@ -33,3 +54,4 @@
|
|||||||
- 前端两方案:A) Vue3+Vite+Pinia(推荐,SCHEMAS 抽 JSON 双端共享);B) 原生 ES Module 拆分(零依赖低成本)
|
- 前端两方案:A) Vue3+Vite+Pinia(推荐,SCHEMAS 抽 JSON 双端共享);B) 原生 ES Module 拆分(零依赖低成本)
|
||||||
- 迁移三步走:localStorage JSON 导出→/api/import 入库→后端先行 curl 验证→前端 API 对接
|
- 迁移三步走:localStorage JSON 导出→/api/import 入库→后端先行 curl 验证→前端 API 对接
|
||||||
- 待用户拍板:是否多用户 auth、财务权限真隔离、是否保留 PWA 离线、部署形态(单机局域网 vs Docker/云)
|
- 待用户拍板:是否多用户 auth、财务权限真隔离、是否保留 PWA 离线、部署形态(单机局域网 vs Docker/云)
|
||||||
|
>>>>>>> dev-ma
|
||||||
|
|||||||
@@ -11,8 +11,11 @@
|
|||||||
- 跟进记录表 JUfrTdkSYRL7bweIYBAbjK
|
- 跟进记录表 JUfrTdkSYRL7bweIYBAbjK
|
||||||
- 功能:4表CRUD+8看板+跨表联动+双时间水印+三级供应商逻辑+内部字段权限隔离+选项自定义+CSV/JSON备份+PWA
|
- 功能:4表CRUD+8看板+跨表联动+双时间水印+三级供应商逻辑+内部字段权限隔离+选项自定义+CSV/JSON备份+PWA
|
||||||
- 数据本地存储 localStorage key 前缀:wb_freight_sfa_v1
|
- 数据本地存储 localStorage key 前缀:wb_freight_sfa_v1
|
||||||
|
- 侧栏"首页看板"区可拖拽排序(拖手柄 ⋮⋮),顺序持久化到 `wb_freight_sfa_v1_side_order`
|
||||||
|
- 等级分类(侧栏项,对应路由 `view-vip` 实际渲染按 ABC 多级汇总):顶部多卡片(每级一张:客户数/占比/待跟进/累计货量),下方分组表格(含"跳到表筛选"快捷跳到 `view-customers-table`)
|
||||||
|
|
||||||
## 技术要点(避坑)
|
## 技术要点(避坑)
|
||||||
- import_html.py 的 token 必须用 `--token-stdin`(stdin 传入),环境变量无效
|
- import_html.py 的 token 必须用 `--token-stdin`(stdin 传入),环境变量无效
|
||||||
- 资料库 select/multi_select 字段创建时 options 不能为空,空字段需放占位选项
|
- 资料库 select/multi_select 字段创建时 options 不能为空,空字段需放占位选项
|
||||||
- JS 对象字面量中含 `/`、`(`、`)` 的中文键名必须加引号(曾因此报 SyntaxError)
|
- JS 对象字面量中含 `/`、`(`、`)` 的中文键名必须加引号(曾因此报 SyntaxError)
|
||||||
|
- read_file/grep 看到的"五角星 path d=..."可能截断一部分(如 `M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z` 中含 `L7 14.14 2 9.27`),做精确替换前要先 `od -c` 或 `awk` 看真实字节再写 old_str
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
.DS_Store
|
||||||
|
.DS_Store
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
# 2026-08-17
|
||||||
|
|
||||||
|
## 侧栏抽屉菜单顺序调整
|
||||||
|
|
||||||
|
调整 `freight-sfa.html` 第 475-483 行 `#sideSortable` 内 `.side-item` 的 DOM 顺序为目标顺序:
|
||||||
|
|
||||||
|
1. 综合看板 (`dashboard`)
|
||||||
|
2. 所有客户 (`view-customers-table`)
|
||||||
|
3. 销售漏斗 (`view-funnel`)
|
||||||
|
4. 订舱跟踪 (`view-bookings`)
|
||||||
|
5. 等级分类 (`view-vip`)
|
||||||
|
6. 回款预警 (`view-payments`)
|
||||||
|
7. 渠道产出 (`view-channels`)
|
||||||
|
8. 丢单复盘 (`view-loss`)
|
||||||
|
9. 高风险客户 (`view-risk`)
|
||||||
|
|
||||||
|
每个 item 的 `data-route`、图标 SVG、徽章 ID(`id="badge-..."`)均未改动,仅调整 DOM 顺序。脚本通过 `querySelectorAll('#sideSortable .side-item')` 动态读取顺序,无需修改 JS。
|
||||||
|
|
||||||
|
## 侧栏文案修改
|
||||||
|
|
||||||
|
将第 477 行侧栏抽屉中的 `销售漏斗` 改为 `跟进状态`(仅文案),`data-route="view-funnel"` 与徽章 ID 保持不变。第 582 行页面顶部 H1(`销售漏斗看板`)未改动。
|
||||||
|
|
||||||
|
## 跟进状态看板 H1 改造
|
||||||
|
|
||||||
|
将第 582 行页面 H1 `销售漏斗看板` 改为 `跟进状态看板`。`page-view-funnel` section ID 和内部看板容器 (`funnel-kanban`) 都未改动。整文件不再含 `销售漏斗` 字样。
|
||||||
|
|
||||||
|
## 侧栏调位:跟进状态 ↔ 所有客户
|
||||||
|
|
||||||
|
将侧栏中 `跟进状态` (view-funnel) 与 `所有客户` (view-customers-table) 互换位置。其它项保持不变。
|
||||||
|
|
||||||
|
## 侧栏顺序强制以 HTML 为准
|
||||||
|
|
||||||
|
侧栏顺序此前由 `localStorage`(键 `wb_freight_sfa_v1_side_order`)覆盖 HTML DOM 顺序,导致改 HTML 不生效。已修改 `bindSidebarSortable()`:页面加载时先 `localStorage.removeItem(SIDE_ORDER_KEY)`,不再调用 `applySideOrder()`,侧栏顺序始终以 HTML 为准。拖拽 `saveSideOrder()` 仍保留(手动重排仍记忆,但刷新后以 HTML 为准)。`applySideOrder`/`getDefaultSideOrder` 变为未使用函数(保留定义)。
|
||||||
|
|
||||||
|
最终侧栏顺序:综合看板 → 所有客户 → 跟进状态 → 订舱跟踪 → 等级分类 → 回款预警 → 渠道产出 → 丢单复盘 → 高风险客户。
|
||||||
|
|
||||||
|
## 深色模式功能
|
||||||
|
|
||||||
|
为 `freight-sfa.html` 增加深色模式:
|
||||||
|
- `:root[data-theme="dark"]` 变量覆盖块(第 43 行附近)。
|
||||||
|
- header 新增 `#btnTheme` 切换按钮(月亮/太阳图标)。
|
||||||
|
- 设置页"显示偏好"卡片新增 `#sw-theme` 深色模式开关,调用 `toggleTheme()`。
|
||||||
|
- JS:`applyTheme(mode)`/`toggleTheme()`/`initTheme()`,存储键 `wb_freight_sfa_v1_theme`,默认浅色。
|
||||||
|
- `head` 中加防闪烁内联脚本,`DOMContentLoaded` 前按存储设置 `data-theme`。
|
||||||
|
- 追加 `:root[data-theme="dark"]` 覆盖规则,将硬编码 `#fff` 背景(sidebar/filter-bar/table-wrap/kanban/modal/settings-card/chart-box 等)替换为 `var(--card)`。
|
||||||
|
|
||||||
|
注意:header 主题按钮的 SVG 图标 id 命名反了(`themeIconSun` 实为月亮,`themeIconMoon` 实为太阳),但显示逻辑正确,未再改动。
|
||||||
|
|
||||||
|
### 深色模式细节优化
|
||||||
|
- `.today-bar` 深色模式改为深紫→深靛渐变 `linear-gradient(135deg,#26223A 0%,#1F1B2D 100%)`,去掉米黄渐变。
|
||||||
|
- `.today-task` 三色行深色下用低饱和暗色半透明(alpha .12、边框 .28),文字用柔和亮色(#B8D0EE/#E8B980/#E88989)。
|
||||||
|
- `.memo-item` 深色下背景 `rgba(36,33,48,.55)`、补文字色 `var(--ink-soft)`,避免过亮/透明。
|
||||||
|
用户对深色模式当前配色满意。
|
||||||
|
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": "../.."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "../../.."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user