Commit Graph

306 Commits

Author SHA1 Message Date
e62855df43 feat(效能分析): 人员视图设备过多时分页显示,解决超宽无滚动
- 每页显示20台设备,底部上一页/下一页翻页器
- 数据/图按页切片,筛选变化自动回第1页
- 图宽限制在当前页设备数,看板始终可见
2026-08-28 16:10:43 +08:00
1d4023a27c fix(效能分析): 自然天/工作日切换按钮移至各视图顶部,全选长图也能看到
- 人员视图、轨迹流转 tab 内容顶部各加切换按钮
- 全选所有人导致图很长时,按钮固定在视图顶部不被挤出屏幕
2026-08-28 15:51:53 +08:00
907473b18c feat(效能分析): 人员视图也支持自然天/工作日耗时切换
- capability 接口加 mode 参数,natural 用自然小时、workdays 用工作小时
- 人员视图柱状图随顶部按钮切换,排除休息日的耗时
- 切换按钮自动重新请求 capability 与 flow
2026-08-28 15:38:32 +08:00
4447a1f52d feat(效能分析): 轨迹流转图时间轴支持工作日/自然天切换
- flow 接口加 mode 参数,workdays 模式把时间偏移换算为排除周末/节假日的工作小时
- 轨迹流转图的横轴随顶部按钮(自然天/工作日)切换,休息日被压缩
- 按钮切换自动重新请求 flow
2026-08-28 15:34:17 +08:00
7f1858387c feat(前端): 产品卡片双生产总天数 + 效能分析设备总天数按钮切换
- 产品管理卡片同时显示「生产总天数(自然天)」和「生产总天数(工作日)」
- 效能分析页新增「设备生产总天数」统计卡片(设备数/平均/最长),顶部按钮切换 自然天/工作日
- 顺手修复 AnalyticsDashboard Tabs onChange 类型错误
2026-08-28 15:29:01 +08:00
b09187ac6e feat(backend): 生产总天数返回自然天+工作日两个口径
- ProductResponse 加 production_days(自然天)/production_days_workdays(工作日)
- get_all_products 计算:自然天自创建至今,工作日用 working_duration_hours 排除周末/节假日
- FlowDevice 加 total_days/total_workdays(设备生产总天数,自最早介入至今)
2026-08-28 15:28:56 +08:00
451e24c34c fix(workload): get_people_workload 内嵌 _to_bj 改用 to_beijing,修复 BEIJING_TZ 未定义
- 移除 import 后内嵌 _to_bj 仍引用 BEIJING_TZ 导致 NameError
2026-08-28 15:13:18 +08:00
bad0941d67 fix(时长): 所有时长计算排除非工作日 + 修复两处时区多算8小时
- get_wip_tasks/get_people_workload/get_people_history/product active_duration_hours/analytics 均改用 working_duration_hours
- 修复 get_wip_tasks 与 active_duration_hours 的 naive 时间误标北京时间 bug(DB实存UTC,原多算8小时)
- 每处读取 holidays 表排除配置的放假日期
2026-08-28 15:08:10 +08:00
ad4b55dece feat(工作日): 新增工作小时计算工具 + 节假日表与管理接口
- time_utils 新增 to_beijing(统一naive按UTC转北京时间) + working_duration_hours(排除周末/节假日)
- Holiday 模型 + alembic 迁移建 holidays 表
- GET/POST/DELETE /holidays 节假日管理接口,可随时配置放假日期
2026-08-28 15:08:05 +08:00
1a5716a1ab feat(操作统计): 抽屉内增加独立时间筛选
- 抽屉内提供 今天/近7天/近30天/自定义 时间选择,默认同步顶部当前值
- 切换时间自动刷新统计与明细,无需关闭看板调整顶部时间
2026-08-28 14:40:58 +08:00
788d7a7f78 fix(操作统计): 全不选生效——默认全选,全不选后显示空态提示
- 打开抽屉默认全选所有人(宫格高亮+显示全部)
- 点「全不选」清空选择,表格显示『未选择任何人员』空态,不再退化为全部
- 首次加载自动全选;用户操作过筛选后不覆盖
2026-08-28 13:54:43 +08:00
d0fc8cdecf feat(操作统计): 点击接收/转交/上传备注数字下钻查看明细
- 表格中接收/转交/上传备注数字改为可点击(蓝色下划线),点击打开明细抽屉
- 明细展示:任务名/备注/设备/身份证/时间,跟随顶部时间筛选
2026-08-28 13:36:28 +08:00
7205de369a feat(backend): 新增 /dashboard/user-operations/detail 操作明细下钻接口
- 按人+操作类型(receive/transfer/record)查询明细:任务/产品/备注/时间
- record 明细与该人统计口径一致(名下任务手动备注,排除系统自动)
2026-08-28 13:36:23 +08:00
554608b948 feat(操作统计): 人员筛选增加全选/全不选按钮 2026-08-28 13:33:08 +08:00
5722fe159a feat(操作统计): 人员筛选改为人名宫格多选 + 表头升降序
- 人员选择从下拉改为移动端风格的人名宫格网格,支持多选(可同时看多人),全部=清空
- 接收/转交/上传备注/总次数 表头点击升降序(三态:无→升→降→无)
- 移除不再使用的 antd Select
2026-08-28 13:31:03 +08:00
477a187fc1 fix(操作统计): 上传备注改为按任务负责人归因,历史数据可回溯
- 备注统计不用 task_logs(历史无record日志),改为 task_records 按任务 assignee 归因
- 排除系统自动生成的备注(以'['开头的接收/转交/撤回等),只计手动上传
- 移除 add_task_record 冗余的 record 日志(不再用于统计)
- 不改数据库,历史182条备注也能正确归属到人
2026-08-28 13:26:26 +08:00
41c19242cf fix(操作统计): 返回全部人员而非仅有操作的人
- get_user_operations 先取全部 IRIS 人员清单,再合并各自操作次数
- 无操作的显示 0,避免只看得到当前有操作记录的人(如只看自己)
2026-08-28 13:22:56 +08:00
9471c1b7c5 feat(全局概览): 人员操作统计改为快捷入口内入口+抽屉弹窗展示
- 位置调整:快捷入口面板内新增「人员操作统计」入口按钮(替代整行区域)
- 点击打开抽屉,展示全部人员操作次数
- 支持人员下拉选择:默认全部,可选某一人查看
- 跟随顶部时间筛选联动
2026-08-28 13:19:45 +08:00
72fbb8b501 feat(全局概览): 快捷入口下方新增人员操作统计区域
- 表格展示每人 接收/转交/上传备注/总次数,按总次数降序
- 跟随顶部时间筛选(今天/近7天/近30天/自定义)联动刷新
2026-08-28 13:14:13 +08:00
b85188e625 feat(backend): 新增 /dashboard/user-operations 人员操作统计接口
- add_task_record 补 action_type=record 日志,使上传备注可统计到人
- get_user_operations 按人聚合 接收(receive)/转交(complete)/上传备注(record) 次数,时间筛选,中文名映射
- 复用 get_display_names,不新增数据库字段
2026-08-28 13:14:09 +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
d9a70793f7 feat(产品管理): 当前人时间着色与任务全景一致
- 当前人时间按滞留时长着色:<1h 绿 / ≥1h 橙 / ≥24h 红
- 与任务全景「当前人滞留」列的配色逻辑统一
2026-08-28 11:33:57 +08:00
90f5718e68 fix(驳回/返工): 抽屉与卡片数字口径一致,同时展示已驳回+返工任务
- 根因:卡片数字含返工任务(tasks_rework 实时快照),但抽屉只列已驳回 → 点开为空
- get_rejected_tasks 扩展返回两类(kind=rejected 按时间过滤 / kind=rework 实时不过滤)
- 前端抽屉按「已驳回」「返工任务」分组展示,数字与明细一一对应
2026-08-28 11:33:54 +08:00
1e6adeb576 fix(二维码): 弹窗打开时锁定背景滚动
- 与流转树弹窗一致,二维码弹窗打开时 body overflow=hidden 防止滚动穿透
2026-08-28 11:33:49 +08:00
88f02cbdcf fix(图片): 记录弹窗图片从页面跳转改为点击放大预览
- TaskFlowView 记录图片 window.open 跳转 → antd Image.PreviewGroup 点击放大
- 与人员看板/效能分析的图片查看模式全局统一
2026-08-28 11:33:46 +08:00
1bb93e0a5f fix(流转树): 弹窗打开时锁定背景滚动,消除滚动穿透
- 通用 Modal 打开时 body overflow=hidden,关闭时恢复
- 修复流转树宽屏弹窗滚动时背景看板跟随滚动的问题
- TaskFlowView 记录弹窗同步加锁(覆盖无外层弹窗的页面内打开场景)
2026-08-28 11:24:59 +08:00
ddb1b4364b feat(任务全景): 新增列显隐控制,可勾选去掉不想要的列
- 工具栏新增「列设置」按钮,弹出 checkbox 列表控制列显示/隐藏
- 勾选=显示,取消=去掉该列(如不需要宏观状态可直接取消勾选)
- 操作列(流转树)固定显示不可隐藏,提供「全部显示」重置
- 表格列数与网格跨度按实际显示列动态计算,原有排序/筛选/拖拽保留
2026-08-28 11:21:22 +08:00
7cfaf4b04b feat(任务全景): 流转树改为宽屏弹窗并放大字体
- TaskFlowView 增加 size prop(sm默认/lg放大),弹窗模式卡片/字体/按钮全部放大
- TaskTreeViewer 通用 Modal 导出并支持 widthClass/bodyClassName 定制
- AdminTasksPage 内嵌展开改为宽屏 Modal(max-w-6xl),保留接收/转交/驳回操作
- 记录弹窗放大且 z-index 提升到 z-[60] 保证覆盖弹窗
- 修复 TaskRecordResponse 无 note 字段的类型错误,清理未使用 import
2026-08-28 11:19:08 +08:00
d92fcc4d4a feat(全局概览): 驳回/返工卡片可点击下钻明细抽屉
- 驳回/返工数字改为可点击按钮,打开明细抽屉(仿完成明细)
- RejectedRow 展示设备/被驳回工序/驳回人/返工给谁/原因/时间,行点击跳转任务全景
- 跟随顶部时间筛选(since/until)
2026-08-28 11:19:03 +08:00
7e00683a21 feat(backend): 新增 /dashboard/rejected-tasks 驳回/返工下钻接口
- RejectedTask schema: 设备/工序/驳回人/返工负责人/原因/时间
- get_rejected_tasks 批量窗口取驳回人(reject log) + 复刻 reject_task 的返工负责人追溯逻辑(create log→父任务→自身)
- 复用 get_display_names 中文名映射、BEIJING_TZ 时间转换
2026-08-28 11:18:58 +08:00
645c594ecd fix(任务状态): REJECTED 标签由「待接收」修正为「已驳回」
- constants/task.ts 的 STATUS_CONFIG 中 REJECTED 误复用 PENDING 文案
- 修复后流转树/扫码页等所有用 getStatusConfig 展示驳回任务的地方显示正确
2026-08-28 11:18:53 +08:00
91f10cf818 fix(docker): track 主库 DNS 冲突 — db 服务名被 MOM 抢占导致密码认证失败
- 修复 MOM 网络后 backend 加入 projects_default,MOM 的 inventory_db 在改网络内别名含 db
- backend 内解析 db → 172.20.0.2(MOM库),asyncpg 用 track 用户连错库 → password authentication failed
- DATABASE_URL host 由服务名 db 改为容器名 track_db(全局唯一),消除解析冲突
- 生产 prod 文件本就使用 track_db_prod,无需改动
- 实测:asyncpg 连接成功、产品接口 HTTP 200、登录链路正常
2026-08-28 10:54:23 +08:00
0bd0fbc2ec fix(docker): MOM 数据库连接超时 — 修正网络挂载与数据库地址
- mom_net 从错误的 inventory-backend_default(空孤岛) 改为 MOM 实际所在的 projects_default
- MOM_DB_HOST 从写死的错误 IP 172.20.0.3(实为 inventory_api) 改为容器名 inventory_db,利用 Docker DNS 自动解析,IP 变动不再受影响
- 重建后实测:DNS 解析正常、psycopg2 直连成功、登录接口走 MOM sys_user 验证正常
2026-08-28 10:49:42 +08:00
19c7c7bbf1 feat(任务全景): 表头排序/筛选/列拖拽 + 新增当前人滞留列
- 状态筛选 tabs 去掉「已入库」并支持多选
- 表头点击排序:身份证/序列号/当前人滞留/最新动态/创建时间,三态循环(升/降/取消)
- 表头漏斗筛选:文本列模糊过滤,枚举列(宏观状态/任务状态/当前位置)多选过滤
- 列头拖拽调整列显示顺序
- 新增「当前人滞留」列,读 active_duration_hours 按天/小时/分钟着色展示
- 修复 handleSearch 引用不存在的 setExpandedProducts(应为此前的展开状态) 导致的查询报错
2026-08-28 10:46:20 +08:00
24c124cd30 feat(产品管理): 卡片跳转 + 时间字段 + 状态筛选多选
- 点击产品卡片跳转 /admin/tasks?sn=身份证,与全局概览看板一致
- 卡片新增「当前人时间」(滞留时长) 与「生产总天数」(自创建)
- 状态筛选 tabs 去掉「已入库」(仓库已显示为已完成),改为多选
- 卡片内编辑/删除/打印按钮 stopPropagation 避免误触跳转
- 清理未使用的 import
2026-08-28 10:46:17 +08:00
d007c7b843 feat(frontend): ProductResponse 类型增加 active_duration_hours
- 与后端 ProductResponse 字段同步,供产品管理页/任务全景页展示滞留时长
2026-08-28 10:46:13 +08:00
90d615cbb0 feat(backend): 产品列表返回当前人滞留时长 active_duration_hours
- ProductResponse 增加 active_duration_hours(小时) 字段
- get_all_products 批量计算每个产品活跃任务(WIP/PENDING)最早接手时间到现在的时长
- 复用 get_people_workload 相同的北京时间口径,前端无需额外请求
2026-08-28 10:46:10 +08:00
620df5ce11 feat(analytics): 人员视图重构为 custom 居中紧凑柱状 + 原生横向滚动
- capabilityOption 改 custom 系列,居中紧凑算法消除幽灵占位
- 柱宽保底 3px(0值/极小值也有柱子)、数字标签悬浮柱顶
- X 轴四行展示:物料名/规格型号/序列号/身份证
- 原生横向滚动容器(每设备 140px)+ custom-scrollbar 样式
- tooltip appendToBody 避免被容器裁剪
2026-08-14 15:43:31 +08:00
1e374e76bf feat(analytics): CapabilityDevice 增加 material_name(X 轴展示物料名)
- 后端 CapabilityDevice 新增 material_name,get_capability_profile 查询并填充
- 前端类型同步 material_name
2026-08-14 15:43:22 +08:00
00741ae288 fix(analytics): 柱色对齐图例、刷新智能定位 tab、视图更名
- custom series 补 itemStyle.color,使柱色与 legend/tooltip 色点一致
- activeTab 根据 URL 参数智能初始化(选人→人员视图,选设备→轨迹流转)
- 视图及页头文案从「个人能力图谱/设备流转对比」改为「人员视图/轨迹流转」
2026-08-14 14:49:56 +08:00
31d9a8781a feat(analytics): 筛选器体验升级(人名网格化/规格物料名/设备卡片下拉)
- 人员选择器 4 列网格 + 两字姓名对齐 + 全选/全不选
- 规格型号 2 列网格 + 物料名展示 + 全选/全不选
- 设备输入框改为卡片式下拉器(物料名/S/N/完整身份证)
- productSn(string) 改为 productSns(string[]) 多选
2026-08-14 14:30:43 +08:00
807df56c3a feat(analytics): 规格型号带物料名 + 设备字典(/options 数据契约扩展)
- 后端新增 SpecModelOption/DeviceOption schema
- get_analytics_options 返回规格型号的物料名(同型号取首个非空名)+ 关联设备列表
- 前端同步 SpecModelOption/DeviceOption 类型
2026-08-14 14:30:35 +08:00
7d48daca0c style(analytics): 隐去设备生命周期时间轴主干背景,仅保留柱顶总计标签
- 主干 series 的 itemStyle.color 改为 transparent,去掉灰色填充与描边
- 保留 label 的 {title|总计}\n{value|...} 文本,让总时长优雅悬浮在时间轴顶端
2026-08-14 11:46:44 +08:00
99235d29e0 feat(analytics): 设备生命周期时间轴(主干居中 + 主次分支 + 上帝视角 tooltip)
- flowOption 从堆叠柱状改为 custom 区间甘特图
- 灰色主干打底居中,主线任务绝对居中、分支任务悬挂右侧(靠透明度区分并行)
- tooltip 上帝视角:开始时间/流转周期/累计工时/中间空闲时长/人员占比(色点标识)
2026-08-14 11:44:55 +08:00
2b17dde42e feat(analytics): 前端 ECharts CustomChart 注册 + 数据契约类型扩展
- BaseEChart 注册 CustomChart 支持区间渲染
- FlowInterval 类型扩为 6 位(含 isMain)
- FlowDevice 增加 lead_time/started_at
2026-08-14 11:44:48 +08:00
74d404cc11 feat(analytics): 设备流转甘特图数据底座(lead_time/started_at/task_type 主次标识)
- FlowDevice 新增 lead_time(生命周期总时长)、started_at(最早介入时间)
- FlowSeries.data 改为区间数组 [device_index, start_offset, end_offset, task_name, duration, is_main]
- get_flow_compare 按任务生成相对 T0 的偏移区间,task_type=SPAWN 标记为分支
2026-08-14 11:44:41 +08:00