|
|
e0a5a572cc
|
feat: 扫码页双模式 — 看板跳转显示任务全景(无摄像头), 直接访问保留扫码
|
2026-08-12 14:51:36 +08:00 |
|
|
|
c90b77801d
|
feat: 扫码页支持URL参数自动查询 — /scan?sn=xxx 直接展示流转树
|
2026-08-12 14:50:44 +08:00 |
|
|
|
ddc34182dd
|
fix: 在制品点击改为应用内跳转扫码详情页(流转树)
|
2026-08-12 14:45:09 +08:00 |
|
|
|
729de138cd
|
feat: 在制品附加信息补全 — 设备名称|规格型号|序列号|身份证
后端: WipTask 新增 spec_model, 查询关联 Product.spec_model
前端: 第二行格式改为 物料|规格|序列号:xxx|身份证:xxx
|
2026-08-12 14:43:20 +08:00 |
|
|
|
f608f6bf81
|
fix: SLA阈值调整 — <24h绿 24-48h橙 >48h红
|
2026-08-12 14:35:07 +08:00 |
|
|
|
9460a8492a
|
feat: 在制品列表信息层级重构 + SLA预警色 + 点击跳转
1. 信息层级重构:
主信息: [状态Tag] 任务名 | 负责人: 张三 ⏰3h
附加信息: 物料名 SN:25022 ...A1B2C3 08-12 10:00
新增后端 material_name 字段, 前端卡片式布局
2. SLA滞留预警色:
<12h → 绿色(正常) | 12-24h → 橙色(警告) | >24h → 红色加粗(危险)
3. 交互: 点击卡片新窗口打开对应产品扫码详情页
|
2026-08-12 14:33:56 +08:00 |
|
|
|
42544d7485
|
fix: get_wip_tasks 解包错误 — 新增 external_serial 后 rows 变3列但解包仍是2变量
|
2026-08-12 14:28:00 +08:00 |
|
|
|
079b65e761
|
feat: 在制品加业务序列号 + 追溯码改名为身份证
1. 在制品行: 显示 external_serial(业务序列号)
优先 external_serial → 兜底 product_sn
旧: 装配 A1B2C3D4 张三
新: 装配 25022 张三
2. 留言板: 追溯码 → 身份证
旧: 追溯码: 000000000000000D
新: 身份证: 000000000000000D
3. 后端: WipTask 新增 external_serial 字段
关联查询 Product.external_serial
|
2026-08-12 14:23:23 +08:00 |
|
|
|
ff7c791d49
|
fix: 留言板区分业务序列号与系统追溯码
语义修正:
Product.serial_number = 16位HEX系统追溯码(如000000000000000D)
Product.external_serial = 业务产品序列号(如25022)
后端:
- ProductMessageItem 新增 external_serial 字段
- search_product_messages 关联查询 Product.external_serial
- 关键词搜索也支持按 external_serial 匹配
前端显示:
样品升降台V1J · 序列号: 25022 ← 醒目
追溯码: 000000000000000D ← 10px浅灰小字
|
2026-08-12 14:20:38 +08:00 |
|
|
|
c14bbeb891
|
fix: 3个逻辑/UI Bug修复
Bug1 — 任务总数与进度条不匹配:
tasks_total 从全库历史总数改为 PENDING+WIP+COMPLETED(时段)+REJECTED(时段)
确保进度条4段之和 = 显示的总数, 不再出现11≠9的缺口
Bug2 — 在制品排序混乱:
移除DB层order_by, 改为Python统一按duration_hours降序
无视status, 纯数值排序, 滞留最久排最前
取limit*2条后在Python中排序再截断
Bug3 — 留言板产品显示割裂:
[Tag:SN] 物料名 → 物料名 (SN: A1B2C3D4...)
物料名加粗, SN等宽灰色, 阅读更顺畅
|
2026-08-12 14:13:26 +08:00 |
|
|
|
7906b8834a
|
style: 留言板SN标签改用等宽字体更醒目
|
2026-08-12 14:05:46 +08:00 |
|
|
|
eb9028dcc6
|
fix: 任务进度条补全驳回段 + 在制品名称旁显示SN
1. 任务进度条: 3段→4段 (PENDING|WIP|COMPLETED|REJECTED)
解决总数11但进度条只覆盖9的视觉缺口
驳回以红色段显示, 拼图完整
2. 在制品行: 产品SN从第二行移到任务名旁边
旧: 装配 张三 → 新: 装配 A1B2C3D4 张三
一行看清: 做什么工序+哪台设备+谁在做
|
2026-08-12 14:04:14 +08:00 |
|
|
|
32c234fea1
|
fix: 在制品按滞留时间降序 + 留言抽屉UI美化
1. 在制品排序: nulls_first → nulls_last
已接收任务按receipt_at升序(最早=滞留最久)排最前
未接收任务(null)排最后
2. 留言抽屉UI重设计:
- 卡片式布局: 彩色头像圆+边框阴影+hover效果
- 头像颜色按姓名首字自动分配7色
- Input.Search替代普通Input+Search图标
- 灰色背景区分卡片, 时间格式改为YYYY-MM-DD HH:mm
- 手动分页按钮替代Antd分页器
|
2026-08-12 13:59:39 +08:00 |
|
|
|
ca195192b6
|
fix: 协同留言时间改为北京时间
根因: ProductMessage.created_at 使用 datetime.utcnow (UTC),
与其他所有模型使用的 get_beijing_time 不一致。
看板留言抽屉显示的时间比实际晚8小时。
修复:
1. message.py: DateTime → DateTime(timezone=True)
default 从 datetime.utcnow → get_beijing_time
2. dashboard_service.py: 兜底转换已有数据
naive UTC → replace(tzinfo=UTC) → astimezone(Beijing)
|
2026-08-12 13:55:33 +08:00 |
|
|
|
3b53db03c1
|
feat: 看板全局时间筛选 + 协同留言抽屉
任务1 — 后端时间快照逻辑:
get_dashboard_stats 新增 since/until 参数
PENDING/WIP/总数 → 永远实时快照(忽略时间筛选)
COMPLETED/REJECTED → 严格按时段过滤
完成率基于过滤后的COMPLETED计算
任务2 — 前端时间筛选器:
Radio.Button: 今天 | 近7天 | 近30天 | 自定义
DatePicker.RangePicker 自定义区间
切换时重新拉取 /dashboard/stats
任务3 — 协同留言抽屉:
后端: GET /dashboard/messages(上帝视角全厂数据)
JOIN Product → serial_number + material_name
支持 keyword 搜: SN/物料名/留言人/内容
按 created_at 倒序
前端: Drawer + Input.Search + List
点击"留言"数字打开抽屉
分页展示: 留言人/内容/SN标签/物料名/时间
|
2026-08-12 13:50:56 +08:00 |
|
|
|
39377ae5e4
|
feat: 看板重构 — 在制品看板 + 留言未读数
核心理念转变:
旧: 最近操作历史(谁做了什么)
新: 当前在制品状态(谁的活卡了多久)
后端:
- DashboardStats 新增 unread_messages(协同留言总数)
- 新增 GET /dashboard/wip-tasks(在制品端点)
- 按滞留时间升序排列,PENDING/WIP 任务倒计时
- 自动计算 duration_hours(已滞留小时数)
前端:
- 品质卡片: 新增留言未读数(紫色)
- 在制品看板: 替换原最近动态
每行显示: 状态徽标 | 任务名+负责人+身份证 | 滞留时长
- 滞留颜色: 48h+红 | 24h+橙 | 8h+黄 | <8h灰
- 系统通知可点击跳转
|
2026-08-12 13:40:08 +08:00 |
|
|
|
00fae01eed
|
fix: 看板4项体验修复 — 时间/身份证/日期筛选/通知跳转
1. 完整16位产品身份证号显示(不再截断)
2. 日期筛选栏: 今天 | 近7天 | 近30天 | 全部
- 后端 recent-activity 支持 since/until ISO参数
- 默认展示今天动态,可按时间范围切换
3. 操作人兜底: TaskLog无operator_id时用任务assignee_id
4. 未读通知可点击跳转通知页面 + 快捷入口增加通知中心
|
2026-08-12 13:35:23 +08:00 |
|
|
|
c3f3a5e291
|
fix: 看板动态时间改为北京时间 + 操作人显示中文姓名
1. 时区修复:
- database.py: PG连接池会话级设置 TimeZone=Asia/Shanghai
- dashboard_service.py: 格式化时间显式 astimezone(BEIJING_TZ)
- 兜底: tzinfo为None时默认当作北京时间处理
2. 操作人中文姓名:
- 收集所有operator_id → 调用mom_cache批量翻译
- 优先中文姓名 → 英文用户名兜底
- operator_id为None时不再显示"系统",留空
|
2026-08-12 13:28:38 +08:00 |
|
|
|
658fc28b9b
|
feat: 管理看板全面改版 — 增强可读性 + 填充空白区域
后端增强:
- DashboardStats 新增 tasks_rejected, tasks_rework, unread_notifications
- 新增 GET /dashboard/recent-activity 最近动态端点
- 关联 Task + Product 表返回完整动态信息
前端改版 (AdminDashboard.tsx):
- 4 张概览卡片: 产品流转 | 任务状态 | 品质通知 | 完成率
- 每张卡片含进度条(百分比标注) + 中文说明
- SVG 环形图展示任务完成率
- 最近流转动态时间线 (8条)
- 快捷入口: 创建产品/任务管理/打印配置/扫码干活
- 底部说明卡片解释"产品 vs 任务"的区别
- 响应式网格填满全屏, 无空白区域
|
2026-08-12 13:25:49 +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 |
|
|
|
7604c353fb
|
chore: .gitignore忽略部署产物(*.tar.gz, *.sql.gz)
|
2026-08-12 12:05:06 +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 |
|
|
|
d59f732a0e
|
fix: 数据库会话事务安全兜底
get_db() 依赖注入增加 try/except/rollback/finally:
- 请求处理中发生异常时自动 rollback
- 无论成功或异常,finally 中确保 close 释放连接
- 防止异常导致连接泄漏或脏事务残留
|
2026-08-12 12:04:45 +08:00 |
|
|
|
3a6ab7d756
|
security: 补全剩余端点鉴权 + 移除硬编码管理员后门
1. 鉴权补全
- orders.py: create_order 补全 Depends(get_current_user)
- print.py: print_execute 和 update_printer_config 补全鉴权
- records.py: update_record 和 delete_record 补全鉴权
2. 安全加固
- auth_service.py: 移除硬编码超级管理员(IRIS/123321)后门
- 所有用户统一通过MOM sys_user scrypt密码验证登录
|
2026-08-12 12:04:40 +08:00 |
|
|
|
8c54a38f55
|
security: API鉴权补全 + SQL拼接隐患消除
1. materials.py
- get_material_groups和get_material_items补全Depends(get_current_user)
- 移除TYPE_FILTER="1=1"死代码及4处f-string SQL拼接
- 全部SQL改为纯参数化text()查询
2. notifications.py
- list_notifications废弃user_id查询参数(越权漏洞)
- user_id强制从JWT Token解析,防止篡改参数偷看他人通知
- mark_notification_read补全鉴权
|
2026-08-12 12:03:12 +08:00 |
|
|
|
69f3e35d14
|
fix: Dashboard统计数据修复 + 生产环境SECRET_KEY强制校验
1. Dashboard统计Bug修复
- Task统计改用TASK_STATUS_PENDING/WIP/COMPLETED大写常量
- 旧代码使用小写"pending"/"in_progress"永远匹配不到数据
- 修复后tasks_pending/tasks_in_progress/tasks_completed返回真实值
2. 生产环境SECRET_KEY强制校验
- 新增model_validator:DEBUG=False且SECRET_KEY为默认值时抛出ValueError
- 阻止使用默认密钥部署到生产环境
|
2026-08-12 12:03:07 +08:00 |
|
|
|
cc199081f9
|
perf: CTE任务树加载器 + MOM跨库查询缓存
消除两个核心N+1性能瓶颈:
1. CTE任务树加载器 (task_tree_loader.py)
- PostgreSQL Recursive CTE一次性加载完整任务树
- 无论树深度多大,仅2条SQL(CTE + records selectinload)
- set_committed_value安全注入,避免Session脏数据
- 修复add_task_record双重加载问题
- 移除get_all_tasks中冗余的selectinload(child_tasks)
2. MOM跨库查询缓存 (mom_cache.py)
- 零依赖TTL内存缓存(threading.RLock + time.monotonic)
- 参数化ANY(:user_ids)替代OR拼接LIKE(防注入)
- get_all_products中3次调用共享缓存,2h TTL内零跨库查询
|
2026-08-12 12:03:02 +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 |
|
|
|
b97dfaa95d
|
fix(backend): 宏观状态权限校验 — 根除 current_user 空值绕过漏洞
Bug: if current_user: 在 Python 中 None/空dict均为falsy,
一旦 current_user 为空则整个权限块被跳过直接放行。
修复:
1. if not current_user → 直接 raise 401
2. 反转 SUPER_ADMIN 判断: if user_role != 'SUPER_ADMIN' 进入校验
(避免 if/else/pass 空分支带来的逻辑歧义)
3. main_task is not None 显式判断 (替代隐式 truthy)
|
2026-08-11 17:39:30 +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 |
|
|
|
0e3eb6a35a
|
fix(frontend): 根治双重渲染 — 侧翼过滤主线,主轴归主轴
回滚此前错误的 allMains 根级过滤,恢复所有 TRANSFER/RECOVERY
任务进入中央垂直主轴。
真正修复:directChildren 加 .filter(c => !isMain(c))
→ 左右翼严格排除主线任务,仅保留 SPAWN 协助分支
原理: 主线→中央垂直时间线, 分支→左右翼, 各行其道不再重复
|
2026-08-11 15:40:43 +08:00 |
|
|
|
974f4b9d01
|
fix(frontend): TaskFlowView 根治双重渲染 — allMains 仅含根级节点
生产数据问题:16个任务中15个TRANSFER子节点全部挂在同一个root下,
isMain() 将它们同时放入 allMains 和 childMap,导致每个子节点渲染2次。
修复:
1. allMains 改为仅收集 parent_task_id IS NULL 的根级主干
- TRANSFER 子节点仅通过 childMap → renderBranch 递归渲染
- 彻底杜绝同一任务在时间线 + 分支中双重出现
2. 统一焦点/全景为同一套垂直时间线 JSX 布局
- 删除旧焦点模式的独立 flex-row 排版
- visibleMains useMemo 负责数据过滤 (active() 过滤)
3. 清理死代码: getRootMainId() / rootMainMap / srm / flatMap
|
2026-08-11 15:37:04 +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 |
|
|
|
88dc7381f6
|
fix(backend): 权限漏洞修复 + 业务逻辑审查修复
1. 宏观状态越权修复 (products.py + product_service.py):
- update_overall_status 增加权限校验:仅 SUPER_ADMIN 或当前操作该产品主线任务的人可修改,否则 403
2. 任务撤回越权修复 (task_service.py + tasks.py):
- recall_task 增加校验:操作人必须等于上游任务负责人(谁发出的谁撤回),否则 403
- 管理员 (SUPER_ADMIN/SUPERVISOR) 直接放行
3. 驳回上游溯源修复 (task_service.py - reject_task):
- 将 TaskLog (action_type=create) 提升为优先溯源方式,解决协助分支转交后驳回找不到正确发起人的 Bug
- 保留 parent_task.assignee_id + task.assignee_id 两级兜底
4. complete_task 父节点继承修复:
- 修复 task_type == 'MAIN' 永不匹配的 Bug(模型无此值)
- 改为 not parent_task_id or task_type in (TRANSFER, RECOVERY)
|
2026-08-11 15:05:30 +08:00 |
|
|
|
d40a8d480e
|
fix(backend): end_task 和 complete_task 补齐权限校验
- end_task 新增 operator_role 参数 + _check_permission 调用
- complete_task 新增 operator_role 参数 + _check_permission 调用
- 两个端点均注入 current_user Depends(get_current_user)
- 非任务负责人且非管理员/主管调用时返回 403
|
2026-08-11 10:13:40 +08:00 |
|
|
|
de47d27cfb
|
fix(backend): _recalc_product_location 修复 func.or_() → or_()
func 是 SQL 函数调用(如 func.now()),不能替代 WHERE 条件中的 or_ 运算符。
这会导致结束协助分支时 SQL 抛错 500。
|
2026-08-11 10:05:13 +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 |
|
|
|
d3def15bb3
|
feat(web): TaskFlowView 递归渲染重构
- 废弃拍平算法,构建全局childMap保留真实树结构
- 新增renderBranch递归渲染函数,子子孙孙向外延伸
- 焦点/全景模式统一应用递归算法,连线从真实父节点引出
|
2026-08-11 10:02:06 +08:00 |
|
|
|
718e205f53
|
feat(backend): 完工转交智能父节点继承算法
- complete_task: MAIN转交保持平级(parent_task_id),SPAWN转交认当前为父(task.id)
- 基因严格继承: task_type不会篡位成MAIN
|
2026-08-11 10:02:01 +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 |
|
|
|
6373dca4f6
|
refactor: Web 端十字星流转树 — 3层嵌套协助降维渲染
- isMain() 移除危险的 parent.status 兜底判定,仅凭基因字段
- 新增 getRootMainId() 寻根算法,向上攀爬找视觉主干
- subsByRootMain 虚拟扁平化:孙子协助挂在顶级主干下
- 层级排序:直接子节点 → 孙子按父链收集
- SlimCard 新增嵌套协助标识:协助: {真实parent.assignee_id}
|
2026-08-10 17:37:30 +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 |
|