|
|
ab75b9613f
|
chore: 删除 track-uniapp 根目录与 src/ 重复的陈旧副本
构建实际读取的是 track-uniapp/src/ —— @dcloudio/vite-plugin-uni 的
UNI_INPUT_DIR 默认取 path.resolve(cwd, 'src'),检测到 src/manifest.json
即以其为输入目录。根目录那套 pages.json / App.vue / main.js / manifest.json
停留在 2026-08-04,是早期 HBuilderX 布局的遗留,早已不参与构建。
危害在于「同名同结构」:IDE 搜索 pages/profile/index.vue 会命中两个结果,
改到根目录那份既不编译也不报错,表现为「代码明明改了,App 里没变化」,
排查成本极高。
- 删除 pages/(4 个 .vue)、pages.json、App.vue、main.js、manifest.json
- 根 manifest.json 版本号为 T1.0.0(字符串),src/ 已是 T1.0.8(108),
且缺 Barcode/Camera 模块与图标配置
- 保留 index.html:它是生效的 H5 入口模板,内容引用 /src/main.js,
uni-app CLI 布局中本就在项目根
- 保留 static/:src/ 下无同名目录,非重复项
|
2026-09-15 15:51:19 +08:00 |
|
|
|
6b3f14e8fd
|
fix: 移动端驳回支持传图、422 报错可读化、修复详情页图片破图
车间的驳回操作不再强制拍照(编号错误等场景无需照片),移动端同步放开。
- utils/request.js: 新增 extractErrorDetail 统一解析后端 detail 的三种形态
(字符串 / FastAPI 校验错误数组 / 对象),新增 422 拦截分支,并把
400/403/409 及兜底分支的 `res.data?.detail || x` 全部换掉 —— 原写法在
detail 是数组时会把整个数组丢给 showToast,弹出 [object Object]
- pages/scan/detail.vue: 驳回弹窗新增与「追加记录」一致的选图/传图 UI,
doReject 携带 { reason, images }(允许空数组);选图上传流程抽成通用的
pickAndUploadImages,与追加记录共用
- pages/scan/detail.vue: 新增 imageUrl() 补全后端返回的相对路径
(/api/v1/upload/files/xxx.jpg 直接给 <image> 会破图),缩略图渲染与
previewImage 预览均已接入;逻辑与 records.vue / TaskTreeNode.vue 对齐
|
2026-09-15 10:57:49 +08:00 |
|
|
|
31d085881b
|
feat: 移动端工序选项隔离与售后标签
|
2026-09-14 14:49:38 +08:00 |
|
|
|
b088d25df9
|
feat: 任务树/流转卡展示驳回原因与返工备注(网页SlimCard,移动端FlowCard/SwipeCards)
|
2026-09-09 17:29:40 +08:00 |
|
|
|
ba96937933
|
fix: 移动端产品详情锁定工作区操作栏固定底部并加内容底部占位
|
2026-09-07 11:08:52 +08:00 |
|
|
|
e194b97649
|
fix: 全状态对齐 - 已出库(OUTBOUND)覆盖所有看板
- 看板产品流转 finished_cond 加'已出库',已出库归入已完结
- WIP 矩阵区分'已出库'维度
- MyTasksPage tab 加'已出库'
- 移动端 detail/WorkspaceArea STATUS_MAP 补 OUTBOUND
|
2026-09-02 09:07:37 +08:00 |
|
|
|
6c93b98190
|
fix: 移动端全览树/卡片模式兼容 WAREHOUSE 仓储节点
- WorkspaceArea/TaskSwipeCards 的 isMainFn 与主线子任务过滤加 WAREHOUSE
- 扫码入库/出库节点回到中央主干道,不再渲染在左侧分支
- TaskSwipeCards 操作人防御性渲染:仓储任务显示 📦 MOM 仓储系统,不崩不丢
|
2026-09-01 17:42:57 +08:00 |
|
|
|
262e28b9f2
|
fix: 仓储任务节点修复(assignee=None + WAREHOUSE 类型) + 前端防御性渲染
- webhook 生成任务 assignee_id 置 None,不再填中文,避免前端解析报错跳过渲染
- task_type=WAREHOUSE,并同步 isMain 判断(后端+双端前端)使其画在中央主干道
- 前端对扫码入库/出库任务:不请求用户数据,直接显示 📦 + 'MOM 仓储系统'
|
2026-09-01 17:25:22 +08:00 |
|
|
|
3749aa766b
|
style: 移动端流转树视觉降噪与分支箭头方向修复
- 已完成卡片降透明度/浅灰底/深灰字;进行中卡片纯白+蓝色边框+外发光
- 分支箭头改为从主干道指向分支(左翼←右翼→),橙色虚线
|
2026-09-01 15:02:20 +08:00 |
|
|
|
b766e35db6
|
fix: 移动端流转树修复进行中任务消失与日志条对齐 Web
- scroll-view 补 scroll-y:多条主线垂直堆叠时底部进行中任务不再被截断
- FlowCard 补 IN_PROGRESS 状态(橙色'待收货'),与 Web 端一致
- 操作日志改为卡片底部全宽蓝色条块,删除时间右侧角标
|
2026-09-01 14:55:16 +08:00 |
|
|
|
84af09ea75
|
style: 移动端流转树主轴连线与卡片排版优化
- 中央垂直线首行从 50% 起、末行到 50% 止,不再冒出
- FlowCard 时间独占一行,操作日志独立一行靠右对齐
|
2026-09-01 14:42:59 +08:00 |
|
|
|
327f5f7829
|
refactor: 移动端流转树全面复刻 Web 端 childMap 左中右布局
- 废弃递归纵向排版(FlowTree),改用拍平 + childMap 重构
- 横向 scroll-x + 每条主线一个 Row:[左翼]-[中央]-[右翼]
- 中央绝对定位垂直线贯穿;分支按奇偶拆左右翼,横向展开
- 新建 FlowCard(节点卡片)与 FlowBranch(递归分支)
|
2026-09-01 14:37:29 +08:00 |
|
|
|
9808742f94
|
fix: 移动端流转树修复分支视觉脱节(先分支后主干道)
- 调换渲染顺序:先渲染分支(紧贴父节点),再渲染主干道(向下延伸)
- 分支容器加 ↳ 分支延伸 指示符 + 左侧虚线边框
- 主线每个子节点前恒画 ↓ 箭头(含父到长子)
|
2026-09-01 14:29:58 +08:00 |
|
|
|
a3aa012d6c
|
fix: 移动端流转树修复断条箭头与分支层级塌陷
- 父节点与第一个主线子节点之间补 ↓ 连线箭头
- 新增 isBranchContext prop:进入分支后子子孙孙强制缩进,不再回主干道
|
2026-09-01 14:25:17 +08:00 |
|
|
|
6ff3ee06de
|
fix: template v-for 的 key 移到 template 标签,修复编译报错
- Vue 要求 <template v-for> 的 key 放在 template 标签上,而非内部元素
|
2026-09-01 14:14:27 +08:00 |
|
|
|
25ad5156f8
|
style: 移动端流转树主干道对齐与连线箭头
- 主线(含 TRANSFER 子任务)左边缘对齐,消除缩进形成笔直主干道
- 主线卡片之间加向下连线箭头(↓)
- 分支(SPAWN 协助)保留缩进 + 左边线
|
2026-09-01 14:10:40 +08:00 |
|
|
|
547c113b09
|
fix: 移动端 formatUserName 挂载到 methods,修复流转树渲染报错
- Vue2 Options API 中 import 的函数不暴露给模板,需挂到 methods
- FlowTree/TaskTreeNode 补 formatUserName 方法
|
2026-09-01 13:59:56 +08:00 |
|
|
|
a04989afd3
|
fix: 修复移动端流转树全览空白,改用独立 FlowTree 递归树组件
- 修复 scroll-view 高度为 0 导致内容不可见
- 新建 FlowTree.vue 独立递归渲染(主线/分支标记、状态、转入在库、时间、记录)
- 不依赖 TaskTreeNode,展示更贴近网页端流转树
|
2026-09-01 13:57:56 +08:00 |
|
|
|
cf2609d87a
|
feat: Track 移动端状态展示与流转树全览改造
- 宏观状态栏补已入库/已出库语义色;OVERALL_OPTIONS 补已入库/已出库
- 在库任务'转入在库'显示实际操作人(assignee);补 OUTBOUND 状态色
- 流转树全览(TreeCanvas)由可移动 canvas 改为纵向递归树,复用 TaskTreeNode
|
2026-09-01 13:53:35 +08:00 |
|
|
|
beeee57b75
|
feat(移动端): 流转树在库任务显示『谁转入在库』
- TreeCanvas 全屏流转树 + TaskTreeNode 内嵌树节点,在库/入库任务显示『📥 转入在库: 创建人』
- 复用 formatUserName 中文名映射
|
2026-08-31 17:20:52 +08:00 |
|
|
|
dd14185ab4
|
feat(APP): 记录页实现编辑记录弹窗,替代占位的「返回详情页」提示
- 点击✏️直接弹出编辑弹窗:修改备注文本 + 图片预览/删除/新增上传
- 保存走 PUT /records/{id} 更新,本地列表同步刷新
- 删除图片同样走5秒倒计时双重确认
|
2026-08-28 13:02:29 +08:00 |
|
|
|
d5315cb9a1
|
fix(APP): 撤回转交也加入5秒倒计时确认
- 撤回转交与其他破坏性操作(删除/结束分支/驳回)一致,确认前需5秒等待防误触
|
2026-08-28 12:12:27 +08:00 |
|
|
|
8537bce30c
|
fix(APP): 倒计时期间确认按钮禁用虚化 + 收窄倒计时范围
- 5秒倒计时期间确认按钮虚化禁用(点不了),只有取消可用,倒计时结束按钮解锁再点击才执行
- 收窄范围:仅 删除记录/删除图片/结束分支/驳回 保留5秒等待;接收/转交/派发/保存/创建/撤回转交 恢复直接确认
|
2026-08-28 12:05:13 +08:00 |
|
|
|
d8e08497f6
|
fix(APP): 记录页删除也改为5秒倒计时双重确认
- records.vue 删除记录从 uni.showModal 改为自定义倒计时确认弹窗
- 取消逻辑由 Vue 控制,杜绝原生弹窗取消失效
|
2026-08-28 11:49:48 +08:00 |
|
|
|
5f8eeda818
|
fix(APP): 操作确认改为5秒倒计时双重确认,杜绝误触
- 接收/驳回/转交/派发/保存记录/创建首道工序 确认按钮:首次点击进入5秒倒计时,期间再点=取消反悔,倒计时结束再点才执行
- 结束分支/撤回转交/删除记录/删除图片:改为自定义倒计时确认弹窗,替换 uni.showModal(APP端原生弹窗取消行为异常)
- 修复 canDeleteImage 权限误判(严格===只比username→宽松双向比较),负责人不再看不到删图按钮
- 页面卸载清理定时器;操作失败增加错误提示消除静默
|
2026-08-28 11:49:43 +08:00 |
|
|
|
3288223a92
|
refactor(mobile): 移动端上传/展示去 IP 化,统一公网域名并支持 NODE_ENV 环境感知
|
2026-08-13 10:34:56 +08:00 |
|
|
|
997e16d9ba
|
fix: 移除manifest.json中残留的push SDK配置
|
2026-08-12 18:05:52 +08:00 |
|
|
|
d8d42e9613
|
feat: 上游显示真实发送人 — 从task_logs追溯created_by
|
2026-08-12 17:52:35 +08:00 |
|
|
|
d9c875924c
|
feat: 移动端扫码页手动输入框增加一键清除×按钮
|
2026-08-12 17:23:20 +08:00 |
|
|
|
74cb77f547
|
refactor: 扫码页简化为单页模式 — 拍照按钮+手动输入
|
2026-08-12 17:06:40 +08:00 |
|
|
|
f6ba1d1740
|
fix: 扫码页优化 — 修复黑屏+右下角相册+Webview透明+扫描框位置调整
|
2026-08-12 17:05:42 +08:00 |
|
|
|
a09d4481a3
|
feat: 扫码页双模式 — 主页+微信级全屏扫码(plus.barcode原生摄像头)
|
2026-08-12 16:59:33 +08:00 |
|
|
|
2ca382bb2c
|
refactor: 删除扫码页相册选择功能,仅保留拍照扫码+手动输入
|
2026-08-12 16:55:43 +08:00 |
|
|
|
9f3deb5b6c
|
revert: 恢复扫码页为双按钮版本(拍照+相册)
|
2026-08-12 16:53:31 +08:00 |
|
|
|
8303c8b93f
|
fix: 滑动卡片指示器联动 — _cardIdx从computed迁移到data独立管理
根因: _cardIdx存在computed lane对象中, computed重新计算时重置为0
修复: cardIndices{}独立data管理, keyed by lane._key
新增watch product重置 + getCardIdx/setCardIdx方法
|
2026-08-12 16:11:22 +08:00 |
|
|
|
1fdc607c07
|
feat: 管理员代工模式 — 前端权限放开 + 后端审计留痕
前端:
- WorkspaceArea 新增 currentUserRole prop
- isAssignee/canRecall: SUPER_ADMIN/SUPERVISOR 上帝视角直接放行
- 管理员代操作时显示黄色提示条: 正在以管理员身份代[原负责人]操作
- detail.vue: loadCurrentUser 提取并保存 user.role
后端:
- _create_task_log 新增 task_assignee_id 参数
- operator_id!=task_assignee_id 时自动拼接 [管理员xx代办操作]
- 12处调用点全部传入 task_assignee_id
- receive_task 位置赋值确认为 task.assignee_id(非 operator_id)
|
2026-08-12 15:24:50 +08:00 |
|
|
|
8e8d23010f
|
fix: 留言板未读数退出重进后重置 — lastMsgSeenAt持久化到storage
|
2026-08-12 13:16:11 +08:00 |
|
|
|
b731144a5a
|
fix: 移动端通知已读状态无法持久化
根因:
handleCardTap 中 try { await markNotificationRead(); item.is_read = true } catch {}
静默吞噬了 API 错误。PUT /notifications/{id}/read 调用失败时,本地 is_read
仍被设为 true,红点消失。下次进入页面重新拉取,服务端仍为未读状态。
修复:
- API 失败时保留 is_read = false,不更新本地状态
- 弹出Toast提示用户下拉刷新重试
- 失败时 return 阻止跳转,避免用户误以为已处理
|
2026-08-12 12:15:36 +08:00 |
|
|
|
d32a3dce49
|
chore: UniApp OTA静默更新 + 项目分析报告
1. UniApp OTA更新优化
- 移除进度条和下载中Toast(静默后台下载)
- 安装成功后3秒自动重启,无用户感知
- 失败时仅console.error,不弹窗打扰用户
2. 项目分析报告
- 新增PROJECT_ANALYSIS_REPORT.md
- 涵盖技术栈、数据模型、核心业务流程、潜在痛点和架构建议
|
2026-08-12 12:04:51 +08:00 |
|
|
|
991d713777
|
feat(backend): 新增留言通知 — add_task_record 自动推送给任务负责人
触发条件:
- 有人对任务添加流转记录(留言/备注)
- 任务有 assignee_id
- 留言人 != 任务负责人 (不给自己发通知)
通知内容:
- title: 💬 收到新留言
- content: 产品[SN]的「任务名」有新留言:{前30字摘要}
- type: COMMENT
额外:
- Notification 模型新增 NOTIFY_COMMENT 常量
- 前端 notify 页新增 COMMENT 图标(💬)和标题(收到新留言)
|
2026-08-11 18:17:52 +08:00 |
|
|
|
7e4d796ce3
|
perf(app): OTA下载进度节流 — 20%步进轻提示根治卡顿
问题: plus.nativeUI.showWaiting 每次下载回调都触发原生等待框更新,
高频调用导致主线程阻塞产生无响应/掉帧。
修复:
1. 废除 plus.nativeUI.showWaiting 全系列调用
2. 改用 uni.showToast + position:'top' 顶部轻提示
3. 核心: 节流阀 lastProgress — 每跨越20%才触发一次UI更新
整个下载过程最多5次toast (20/40/60/80/100%),根治跨端卡顿
4. 初始toast '已转入后台下载...' 给用户明确反馈
5. 安装/重启逻辑保持不变(静默安装+2s自动重启)
|
2026-08-11 18:01:17 +08:00 |
|
|
|
3cb85f28b4
|
fix(frontend): 宏观状态前端UX重构 — 非权限人员隐藏箭头+拦截点击
1. 新增 canEditOverallStatus computed:
- SUPER_ADMIN 直接放行
- 递归遍历 task_tree,仅 WIP/PENDING 主线任务负责人有权
- 严格对齐后端 update_overall_status 的 main_task 判断
2. handleOverallBarClick 增加权限拦截:
无权限点击 → Toast '仅超级管理员或当前主线负责人可修改状态'
3. overall-arrow 增加 canEditOverallStatus 条件:
无权限用户不显示 ▾ 箭头,视觉上明确不可操作
|
2026-08-11 17:48:51 +08:00 |
|
|
|
9064973a3f
|
fix(app): onShow 中增加更新检查 — 用户无需杀后台即可感知新版本
问题: checkUpdate 仅在 onLaunch 执行,App 常驻内存时永不复用。
用户部署更新后,不杀后台就永远感知不到新版本。
修复:
1. onShow 中追加 checkUpdate(),每次回到前台自动检测
2. checkUpdate 顶部加 5分钟节流,避免频繁切后台时重复弹窗
|
2026-08-11 16:56:22 +08:00 |
|
|
|
01b8601dcd
|
fix(app): OTA更新体验重构 — 废除闪烁弹窗 + 自动重启
问题:
1. uni.showLoading 每次调用都是关→开,进度回调中连续调用导致疯狂闪烁
2. 安装完成后弹窗询问重启,用户选「稍后」则必须手动杀后台
修复:
1. 替换 uni.showLoading → plus.nativeUI.showWaiting
原生等待框支持原地更新文字,下载进度平滑过渡,零闪烁
2. 安装成功后移除重启询问弹窗,改为:
plus.nativeUI.toast('新版本已就绪,即将重启...')
→ 2秒后 setTimeout → plus.runtime.restart()
用户无需任何操作,2秒后自动生效
|
2026-08-11 16:53:35 +08:00 |
|
|
|
5b5f4a6b0e
|
fix(frontend): TreeCanvas 坐标+连线三重修复 — 根治箭头悬空
1. calcSubtreeHeight: Math.max(CARD_H+GAP, totalChildrenHeight)
→ 首子与父平齐,父级高度取 max 而非无脑叠加
2. placeChildren: startY = parentNode.y (水平对齐)
→ 移除初始化 GAP,累加改为 startY += subtreeH
3. lines(): 动态追踪 Y 坐标
→ y1 = isLeft? n.y+40 : parent.y+40
→ y2 = isLeft? parent.y+40 : n.y+40
→ lineStyle 的 Math.atan2 自动画出完美对角线
|
2026-08-11 16:42:14 +08:00 |
|
|
|
0a1c2f4dcf
|
fix(frontend): 打印按钮被挤出画面 — card-header 防溢出
根因: card-header 一行塞入 4 个元素(标题+3按钮),
card-header-right 无 flex-wrap/无 flex-shrink,
窄屏上打印标签按钮溢出视口不可见。
修复:
- card-header-right: gap 8→4, 加 flex-wrap, flex-shrink:0
- 所有子元素: flex-shrink:0 + white-space:nowrap
- mode-toggle/print-label-btn: 缩小字号+padding节省空间
|
2026-08-11 16:07:19 +08:00 |
|
|
|
40a2d87345
|
fix: 消息通知页不能点进详情 — 补全 product_serial_number
问题: 点击通知卡片跳转 detail?taskId=xxx,但 detail.vue onLoad 只认 serial 参数导致空白页
修复:
1. 后端 NotificationResponse 新增 product_serial_number 字段
2. 后端 notifications API 联表 tasks+products 批量填充 serial
3. 前端 notify/index.vue handleCardTap 优先用 product_serial_number 跳转,兜底从 content 正则解析
4. 前端 detail.vue onLoad 新增 taskId 兜底 → doQueryByTask 反查 product_sn
|
2026-08-11 15:56:25 +08:00 |
|
|
|
30a48d90fc
|
fix(frontend): 流转蓝图 + 聊天室 + 卡片布局 + 打印功能修复
1. TreeCanvas.vue - Y轴坐标算法重构:
- calcSubtreeHeight 改为兄弟累加 (reduce) 替代 Math.max,彻底杜绝垂直重叠
- childNode.y = parentNode.y + CARD_H + VERTICAL_GAP 严格向下延伸
- 同级子节点按子树高度累加 startY,各占独立 Y 区域
- 加宽画布默认尺寸 (400→800, padding +300/+400)
2. detail.vue - onShow 生命周期修复:
- 新增 onShow() 钩子调用 fetchMessages(),解决聊天室退回不刷新问题
3. TaskSwipeCards.vue + detail.vue - CSS 防跳动:
- .ss-swiper-h / .ss-card-wrapper 添加 min-height: 220px
- .card 添加 min-height: 120px
4. detail.vue - 移动端打印标签:
- 新增「🖨️ 打印标签」按钮
- 双方案 ActionSheet: 网络打印机(后端API) / 蓝牙打印机(ESC/POS)
- 对接现有 /print/execute 端点
|
2026-08-11 15:05:39 +08:00 |
|
|
|
6755dfeae3
|
feat(mobile): 登录修复 + 人名字典 + 留言板FAB + 流转算法重构
- login: catch补齐toast,修复密码错误静默失败
- detail: formatUserName渲染当前位置,dictVersion驱动响应式重绘
- detail: 留言板改为悬浮按钮+底部抽屉,未读徽标逻辑
- TaskSwipeCards: lanes终极递归算法,SPAWN不限层级开辟新Tab,先序push修复Tab顺序
- TreeCanvas: 父子相对坐标延伸算法,替代旧版奇偶距离递增
|
2026-08-11 10:02:12 +08:00 |
|
|
|
567f7175da
|
fix: :key 强制子组件重建 + 拆除嵌套滚动锁
- detail.vue: 新增 dictVersion,loadUsers 后自增驱动子组件 :key 重建
- WorkspaceArea/TaskSwipeCards/TreeCanvas 绑定 :key='...-'+dictVersion
- .page-container: flex → block,让页面自然流式撑开
- .workspace-area: flex:1+overflow:hidden → height:auto
- .is-locked: 仅锁定任务模式下才 height:100vh+overflow:hidden
- .task-list: flex:1+overflow-y:auto → height:auto
|
2026-08-10 18:08:13 +08:00 |
|