|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
051a075e9d
|
fix: 留言板层级修复 + 人名映射防降级
- 留言板移除 currentMode 限制,产品级功能所有模式可见
- .page-container: min-height + overflow-y:auto 替代 height:100vh + overflow:hidden
- loadUsers 加 console.error 日志 + $forceUpdate 防字典空窗期
|
2026-08-10 17:56:47 +08:00 |
|
|
|
f9451b104b
|
feat: 移动端全局人名映射 + 协同留言板 UI
- detail.vue: 留言板聊天室 UI + 乐观更新 + loadUsers 填充全局字典
- WorkspaceArea.vue: 任务列表/上游/下游负责人全部走 formatUserName
- TreeCanvas.vue: 节点负责人 + 嵌套协助提示走 formatUserName
- TaskSwipeCards.vue: 卡片负责人走 formatUserName
- 留言板头像取中文名末字(formatUserAvatar)
|
2026-08-10 17:37:25 +08:00 |
|
|
|
ba060cbb5e
|
refactor(mobile): 流转树固定100%比例,移除双指缩放功能
- 移除 movable-view 的 :scale/:scale-min/:scale-max/:scale-value 属性
- 移除 onScale/zoomIn/zoomOut 方法及工具栏缩放按钮
- 移除顶部双指缩放·单指拖拽提示文字
- fitAll 简化为纯居中定位 (mvX/mvY),不再调整缩放比
- 工具栏仅保留: 返回 | 流转蓝图 | 卡片切换 | 全览
|
2026-08-10 15:25:56 +08:00 |
|
|
|
a07e43ec3a
|
fix(mobile): 修复画布空白区域无法响应拖拽缩放手势
canvas-inner 使用 position:absolute 但未设置 width/height,
导致只缩到子元素大小(几乎为0)。在卡片之外的空白区域触摸时,
事件无法穿透到 movable-view 原生组件。
修复:
- canvas-inner: 添加 width:100%; height:100% 铺满 movable-view
- tree-movable-view: 添加 width:100%; height:100% 确保触摸覆盖
|
2026-08-10 15:19:34 +08:00 |
|
|
|
f2403dd1e6
|
fix(mobile): 流转树全览居中 + 拖拽缩放性能优化
1. fitAll() 居中修复: 内容坐标系整体对齐视口中心
旧: mvX=0, mvY=0 (内容偏右下角)
新: mvX = (viewportW - canvasW * scale) / 2, mvY同理
2. movable-area 显式像素高度: 替代 flex:1
避免触摸区域计算不准确导致拖拽延迟
3. onScale 节流: rAF/setTimeout 限频 16ms
避免 @scale 每帧触发 Vue 响应式更新
4. 新增 onChange 同步手势结束后的位置
惯性动画结束后记录位置,下次 fitAll 参考使用
5. 添加 inertia+friction+damping 惯性动画参数
|
2026-08-10 15:09:06 +08:00 |
|
|
|
5271177d7a
|
fix(mobile): 修复全览按钮点击后页面卡死的响应式循环bug
treeNodes 计算属性中直接修改了 product.task_tree 原始响应式对象
(设置 x/y/_isMain/_blabel),触发 Vue 2 深度响应式的无限渲染循环。
修复方案:对所有 task 对象进行浅拷贝 { ...t },在副本上设置坐标
和标签属性,切断响应式依赖循环。
|
2026-08-10 15:00:37 +08:00 |
|
|
|
3ec244bf2d
|
feat: 全览节点无记录时Toast友好提示替代静默短路
|
2026-08-10 14:40:18 +08:00 |
|
|
|
5f12adfe2f
|
fix: 连线层加pointer-events:none防止吞掉卡片点击事件
|
2026-08-10 14:37:37 +08:00 |
|
|
|
51ca05d737
|
fix: 全览按钮z-index修复+产品ID点击弹二维码
|
2026-08-10 14:30:50 +08:00 |
|
|
|
f80da36d65
|
fix: 连线边缘到边缘防穿模+箭头像素级贴合分支卡片边缘
|
2026-08-10 13:59:22 +08:00 |
|
|
|
6d534960a7
|
refactor: 移动端TreeCanvas十字星拓扑—主干居中+分支左右发散+连线箭头+极简卡片160x80
|
2026-08-10 13:52:46 +08:00 |
|
|
|
356e3819dd
|
chore: 泳道→分支 统一命名
|
2026-08-07 16:51:00 +08:00 |
|
|
|
b834b24c24
|
fix: 已完成/已驳回/已入库/已撤回任务禁止编辑删除记录
|
2026-08-07 16:48:12 +08:00 |
|
|
|
43baa1de8e
|
feat: 移动端流转卡片组件 + 静态资源
|
2026-08-07 11:53:40 +08:00 |
|
|
|
0df7215134
|
feat: 移动端双Token队列拦截器 + 通知列表 + 登录页 + TabBar红点 + v1.0.1
|
2026-08-07 11:44:20 +08:00 |
|
|
|
6a79e21302
|
闭环修复: transfer/spawn/receive补TaskRecord + reject加task_type + branchLabel只对SPAWN编号
|
2026-08-06 13:14:26 +08:00 |
|
|
|
661e77416a
|
三雷修复: canRecall父节点校验+task_type判定主干排序/标签+确认无db.delete
|
2026-08-06 13:09:10 +08:00 |
|
|
|
0d323e8181
|
血缘锚定法: task_type字段+迁移+三大接口写入+TreeCanvas基于task_type布局
|
2026-08-06 13:03:25 +08:00 |
|
|
|
e5e2a395e7
|
撤回链式接力: CANCELED后生成WIP子任务还给操作人+TreeCanvas CANCELED视为串行换行
|
2026-08-06 12:53:23 +08:00 |
|
|
|
616638a6c8
|
撤回改为CANCELED状态标记+TaskRecord留痕+TreeCanvas灰度渲染+全部状态映射更新
|
2026-08-06 12:51:40 +08:00 |
|
|
|
58cb9a23ef
|
修复撤回: transfer新任务parent_task_id=task.id(溯源链) + canRecall放宽(兼容旧数据)
|
2026-08-06 12:38:26 +08:00 |
|
|
|
0287003e93
|
canRecall加固: PENDING+非接收人+父任务负责人匹配→显示撤回转交
|
2026-08-06 12:08:23 +08:00 |
|
|
|
df42250725
|
排序铁律: 主分支强制置顶(parent_task_id为空优先)+子分支按created_at正序
|
2026-08-06 12:06:38 +08:00 |
|
|
|
aad26b3d9e
|
2D布局回退状态判定: 父WIP→并行同Y / 父COMPLETED→串行换行(后端已限制COMPLETED后不可spawn)
|
2026-08-06 11:50:10 +08:00 |
|
|
|
c92e7bd931
|
修复2D布局: 时间戳判定串行/并行 — created_at>parent.completed_at才是串行,否则并行同Y
|
2026-08-06 11:45:56 +08:00 |
|
|
|
8f0f725e26
|
修复WBS编码: 分支1→分支1.1层级正确(prefix空字符串处理)
|
2026-08-06 11:42:52 +08:00 |
|
|
|
57884d7baa
|
撤回转交: recall接口删除子任务恢复父WIP + 前端canRecall判断 + 红色撤回按钮
|
2026-08-06 11:39:22 +08:00 |
|