diff --git a/artifacts/r100-pc-reimbursement-audit/audit.json b/artifacts/r100-pc-reimbursement-audit/audit.json new file mode 100644 index 00000000..3c6acc76 --- /dev/null +++ b/artifacts/r100-pc-reimbursement-audit/audit.json @@ -0,0 +1,492 @@ +{ + "baseURL": "https://oa.hyinda.com", + "generatedAt": "2026-05-06T13:35:34.261Z", + "login": { + "user": { + "identifier": "employee@hyinda.com", + "name": "employee" + }, + "attempts": [ + { + "user": "employee", + "url": "https://oa.hyinda.com/portal" + } + ] + }, + "pages": [ + { + "id": "pc-reimbursements-list", + "url": "https://oa.hyinda.com/reimbursements", + "title": "海音达工作台", + "textStart": "海音达工作台\n审批 报销 团队\n今日工作台\n先处理待办和团队状态,再进入具体模块。\n主导航\n优先处理今日工作与高频协同。\nhome_app_logo\nPortal\ngroups\n团队\nevent_available\n请假\nrequest_quote\n报销\ninventory_2\n资产\narticle\n周报\ncheck_circle\n待办\ncampaign\n公告\nworkspaces\n项目\n备用模块\n默认收起,不干扰主路径\n按需展开\n主导航\n\n报销\n\n你好,Employee\nsearch\n搜索\nEmployee\n我的报销\n\n草稿、审批、支付。\n\n新建报销\n导出\n当前列表\n0\n共 0 条\n当前金额\n¥0.00\n当前页\n审批中\n0\n待推进\n已支付\n0\n仅自己\n草稿\n审批中\n已通过\n已支付\n已驳回\n已取消\n单号\t状态\t金额\t报销人\t日期\t操作\n暂无数据\n第 1 / 1 页\n上一页\n下一页", + "bodyTextLength": 395, + "buttons": [ + "search搜索", + "search", + "Employee", + "新建报销", + "导出", + "草稿", + "审批中", + "已通过", + "已支付", + "已驳回", + "已取消", + "上一页", + "下一页" + ], + "links": [ + { + "text": "home_app_logoPortal", + "href": "/portal" + }, + { + "text": "groups团队", + "href": "/team" + }, + { + "text": "event_available请假", + "href": "/leave-requests" + }, + { + "text": "request_quote报销", + "href": "/reimbursements" + }, + { + "text": "inventory_2资产", + "href": "/assets" + }, + { + "text": "article周报", + "href": "/weekly-reports" + }, + { + "text": "check_circle待办", + "href": "/todos" + }, + { + "text": "campaign公告", + "href": "/announcements" + }, + { + "text": "workspaces项目", + "href": "/projects" + }, + { + "text": "shopping_cart采购申请", + "href": "/purchase-requests" + }, + { + "text": "flight差旅申请", + "href": "/travel-requests" + }, + { + "text": "receipt_long票据中心", + "href": "/invoice-pool" + } + ], + "tables": [ + { + "headers": [ + "单号", + "状态", + "金额", + "报销人", + "日期", + "操作" + ], + "firstRow": [ + "暂无数据" + ], + "rowCount": 1 + } + ], + "dialogs": [], + "longUuidLike": [], + "hasDeleteText": false, + "hasReimbursementDelete": false, + "hasInvoiceOptionalBinding": false, + "verboseFlags": { + "hasViewEditSubmit": false, + "hasInvoiceWaitOcrCopy": false, + "hasCurrentPageMetrics": true + } + }, + { + "id": "pc-invoice-pool", + "url": "https://oa.hyinda.com/invoice-pool", + "title": "海音达工作台", + "textStart": "海音达工作台\n审批 报销 团队\n今日工作台\n先处理待办和团队状态,再进入具体模块。\n主导航\n优先处理今日工作与高频协同。\nhome_app_logo\nPortal\ngroups\n团队\nevent_available\n请假\nrequest_quote\n报销\ninventory_2\n资产\narticle\n周报\ncheck_circle\n待办\ncampaign\n公告\nworkspaces\n项目\n备用模块\n默认收起,不干扰主路径\n按需展开\n工作台\n\n/invoice-pool\n\n你好,Employee\nsearch\n搜索\nEmployee\n票据中心\n\n上传、识别、绑定。\n\n导出\n添加发票\ncloud_upload\n选择文件\n上传\n票据列表\n全部状态\n识别中\n可用\n识别失败\n已绑定\n已归档\n仅看自己\n查看全部\n票据流水号\t状态\t发票号码\t识别状态\t操作\n\nc5f3e528-8622-46d0-87c5-50af3c3b5dfd\n\t可用\t26112000000938423851-26112000000938423851\t已识别\tmore_horiz\n\n3e660edf-d29a-4683-bd99-e8e13b1e614e\n\t可用\t26112000000938423851-26112000000938423851\t已识别\tmore_horiz\n\n3c0ba5ae-e01b-4a58-8a6f-0e137134d0a0\n\t可用\t26112000000938423851-26112000000938423851\t已识别\tmore_horiz\n第 1 / 1 页\n上一页\n下一页\n绑定业务单据\n选择票据\n26112000000938423851-26112000000938423851 (available)\n26112000000938423851-26112000000938423851 (available)\n26112000000938423851-26112000000938423851 (available)\n选择报销单\n绑定票据\n票据详情\n票据 ID:c5f3e528-8622-46d0-87c5-50af3c3b5dfd\n状态:available\n发票号:26112000000938423851-26112000000938423851\n销售方:北京悦海堂餐饮管理有限公司\n购买方:合肥海音达科技有限公司\n总金额:¥1,683.00\n开票日期:2026-03-11\n关联报销:-\n验真状态:未触发\n判重例外:否\n人工修正\n手工归档", + "bodyTextLength": 1080, + "buttons": [ + "search搜索", + "search", + "Employee", + "导出", + "上传", + "查看详情", + "预览", + "查看详情", + "预览", + "查看详情", + "预览", + "more_horiz", + "more_horiz", + "more_horiz", + "上一页", + "下一页", + "绑定票据", + "人工修正", + "手工归档" + ], + "links": [ + { + "text": "home_app_logoPortal", + "href": "/portal" + }, + { + "text": "groups团队", + "href": "/team" + }, + { + "text": "event_available请假", + "href": "/leave-requests" + }, + { + "text": "request_quote报销", + "href": "/reimbursements" + }, + { + "text": "inventory_2资产", + "href": "/assets" + }, + { + "text": "article周报", + "href": "/weekly-reports" + }, + { + "text": "check_circle待办", + "href": "/todos" + }, + { + "text": "campaign公告", + "href": "/announcements" + }, + { + "text": "workspaces项目", + "href": "/projects" + }, + { + "text": "shopping_cart采购申请", + "href": "/purchase-requests" + }, + { + "text": "flight差旅申请", + "href": "/travel-requests" + }, + { + "text": "receipt_long票据中心", + "href": "/invoice-pool" + } + ], + "tables": [ + { + "headers": [ + "票据流水号", + "状态", + "发票号码", + "识别状态", + "操作" + ], + "firstRow": [ + "c5f3e528-8622-46d0-87c5-50af3c3b5dfd", + "可用", + "26112000000938423851-26112000000938423851", + "已识别", + "more_horiz" + ], + "rowCount": 3 + } + ], + "dialogs": [], + "longUuidLike": [ + "c5f3e528-8622-46d0-87c5-50af3c3b5dfd", + "3e660edf-d29a-4683-bd99-e8e13b1e614e", + "3c0ba5ae-e01b-4a58-8a6f-0e137134d0a0" + ], + "hasDeleteText": false, + "hasReimbursementDelete": false, + "hasInvoiceOptionalBinding": false, + "verboseFlags": { + "hasViewEditSubmit": false, + "hasInvoiceWaitOcrCopy": false, + "hasCurrentPageMetrics": false + } + }, + { + "id": "pc-leave-requests", + "url": "https://oa.hyinda.com/leave-requests", + "title": "海音达工作台", + "textStart": "海音达工作台\n审批 报销 团队\n今日工作台\n先处理待办和团队状态,再进入具体模块。\n主导航\n优先处理今日工作与高频协同。\nhome_app_logo\nPortal\ngroups\n团队\nevent_available\n请假\nrequest_quote\n报销\ninventory_2\n资产\narticle\n周报\ncheck_circle\n待办\ncampaign\n公告\nworkspaces\n项目\n备用模块\n默认收起,不干扰主路径\n按需展开\n主导航\n\n请假\n\n你好,Employee\nsearch\n搜索\nEmployee\n请假申请\n\n支持假种选择、半天粒度请假、额度冻结与撤回释放。\n\n可用额度\n30.0\n按当前启用假种汇总\n已冻结\n0.0\n审批中申请会占用额度\n已使用\n0.0\n通过后计入已使用\n本次预估\n-\n创建草稿前可先预览天数\n新建请假草稿\n\n先填写时间段与假种,再补充附件和说明。\n\n假期类型\n请选择\n年假\n病假\n事假\n开始日期\n开始时段\n上午\n下午\n结束日期\n结束时段\n上午\n下午\n附件\n\n附件为可选项\n\n请假说明\n预计请假天数:-\n创建草稿\n额度概览\n\n假种可用额度、冻结与已使用情况按自然周期汇总。\n\n年假\n\n2026-01-01 ~ 2026-12-31\n\n启用\n\n可用\n\n15\n\n已冻结\n\n0\n\n已使用\n\n0\n\n授予额度\n\n15\n\n病假\n\n2026-01-01 ~ 2026-12-31\n\n启用\n\n可用\n\n10\n\n已冻结\n\n0\n\n已使用\n\n0\n\n授予额度\n\n10\n\n事假\n\n2026-01-01 ~ 2026-12-31\n\n启用\n\n可用\n\n5\n\n已冻结\n\n0\n\n已使用\n\n0\n\n授予额度\n\n5\n\n请假记录\n\n支持按状态和范围收敛列表,草稿与驳回单可再次提交。\n\n最近一次筛选会保留在当前页面状态中。\n全部状态\n草稿\n审批中\n已通过\n已驳回\n已取消\n刷新\n假种 / 申请人\t时间段\t天数\t状态\t附件\t更新时间\t操作\n暂无请假记录\n第 1 / 1 页\n上一页\n下一页", + "bodyTextLength": 838, + "buttons": [ + "search搜索", + "search", + "Employee", + "创建草稿", + "刷新", + "上一页", + "下一页" + ], + "links": [ + { + "text": "home_app_logoPortal", + "href": "/portal" + }, + { + "text": "groups团队", + "href": "/team" + }, + { + "text": "event_available请假", + "href": "/leave-requests" + }, + { + "text": "request_quote报销", + "href": "/reimbursements" + }, + { + "text": "inventory_2资产", + "href": "/assets" + }, + { + "text": "article周报", + "href": "/weekly-reports" + }, + { + "text": "check_circle待办", + "href": "/todos" + }, + { + "text": "campaign公告", + "href": "/announcements" + }, + { + "text": "workspaces项目", + "href": "/projects" + }, + { + "text": "shopping_cart采购申请", + "href": "/purchase-requests" + }, + { + "text": "flight差旅申请", + "href": "/travel-requests" + }, + { + "text": "receipt_long票据中心", + "href": "/invoice-pool" + } + ], + "tables": [ + { + "headers": [ + "假种 / 申请人", + "时间段", + "天数", + "状态", + "附件", + "更新时间", + "操作" + ], + "firstRow": [ + "暂无请假记录" + ], + "rowCount": 1 + } + ], + "dialogs": [], + "longUuidLike": [], + "hasDeleteText": false, + "hasReimbursementDelete": false, + "hasInvoiceOptionalBinding": false, + "verboseFlags": { + "hasViewEditSubmit": false, + "hasInvoiceWaitOcrCopy": false, + "hasCurrentPageMetrics": false + } + }, + { + "id": "pc-purchase-requests", + "url": "https://oa.hyinda.com/purchase-requests", + "title": "海音达工作台", + "textStart": "海音达工作台\n审批 报销 团队\n今日工作台\n先处理待办和团队状态,再进入具体模块。\n主导航\n优先处理今日工作与高频协同。\nhome_app_logo\nPortal\ngroups\n团队\nevent_available\n请假\nrequest_quote\n报销\ninventory_2\n资产\narticle\n周报\ncheck_circle\n待办\ncampaign\n公告\nworkspaces\n项目\n备用模块\n默认收起,不干扰主路径\n按需展开\n工作台\n\n/purchase-requests\n\n你好,Employee\nsearch\n搜索\nEmployee\n采购申请\n\n支持草稿、附件、提交、撤回与经理单步审批的轻采购流程。\n\n新建采购\n全部状态\n草稿\n审批中\n已通过\n已驳回\n已取消\n全部供应商\n全部法体\n试运行法体\n全部成本中心\n采购单列表\n共 0 条\n单据\t申请人\t状态\t金额\n暂无采购申请\n第 1 / 1 页\n上一页\n下一页\n请先在左侧选择采购单,或新建一张采购草稿。", + "bodyTextLength": 433, + "buttons": [ + "search搜索", + "search", + "Employee", + "新建采购", + "上一页", + "下一页" + ], + "links": [ + { + "text": "home_app_logoPortal", + "href": "/portal" + }, + { + "text": "groups团队", + "href": "/team" + }, + { + "text": "event_available请假", + "href": "/leave-requests" + }, + { + "text": "request_quote报销", + "href": "/reimbursements" + }, + { + "text": "inventory_2资产", + "href": "/assets" + }, + { + "text": "article周报", + "href": "/weekly-reports" + }, + { + "text": "check_circle待办", + "href": "/todos" + }, + { + "text": "campaign公告", + "href": "/announcements" + }, + { + "text": "workspaces项目", + "href": "/projects" + }, + { + "text": "shopping_cart采购申请", + "href": "/purchase-requests" + }, + { + "text": "flight差旅申请", + "href": "/travel-requests" + }, + { + "text": "receipt_long票据中心", + "href": "/invoice-pool" + } + ], + "tables": [ + { + "headers": [ + "单据", + "申请人", + "状态", + "金额" + ], + "firstRow": [ + "暂无采购申请" + ], + "rowCount": 1 + } + ], + "dialogs": [], + "longUuidLike": [], + "hasDeleteText": false, + "hasReimbursementDelete": false, + "hasInvoiceOptionalBinding": false, + "verboseFlags": { + "hasViewEditSubmit": false, + "hasInvoiceWaitOcrCopy": false, + "hasCurrentPageMetrics": false + } + }, + { + "id": "pc-travel-requests-tab-requests", + "url": "https://oa.hyinda.com/travel-requests?tab=requests", + "title": "海音达工作台", + "textStart": "海音达工作台\n审批 报销 团队\n今日工作台\n先处理待办和团队状态,再进入具体模块。\n主导航\n优先处理今日工作与高频协同。\nhome_app_logo\nPortal\ngroups\n团队\nevent_available\n请假\nrequest_quote\n报销\ninventory_2\n资产\narticle\n周报\ncheck_circle\n待办\ncampaign\n公告\nworkspaces\n项目\n备用模块\n默认收起,不干扰主路径\n按需展开\n工作台\n\n/travel-requests\n\n你好,Employee\nsearch\n搜索\nEmployee\n差旅管理\n\n差旅申请、对公支付轨道与批次对账在同一路径统一收口。\n\n新建差旅申请\n差旅申请\n状态\n全部状态\n草稿\n审批中\n已通过\n已驳回\n出差类型\n全部类型\n国内\n国际\n法体\n全部法体\n试运行法体\n成本中心\n全部成本中心\n暂无差旅申请\n\n点击右上角创建新的差旅草稿。\n\n第 1 / 1 页\n上一页\n下一页\n新建差旅申请\n\n填写主单与行程段,保存为草稿后可继续编辑并提交审批。\n\n出差目的\n出差类型\n国内\n国际\n预估金额\n开始日期\n结束日期\n法体\n请选择法体\n试运行法体\n成本中心\n请选择成本中心\n预算池\n待提交时自动解析\n行程段\n新增行程段\n\n第 1 段\n\n角色\n去程\n返程\n中转\n交通方式\n航班\n火车\n汽车\n大巴\n其他\n出发地\n目的地\n出发时间\n到达时间\n保存草稿", + "bodyTextLength": 605, + "buttons": [ + "search搜索", + "search", + "Employee", + "新建差旅申请", + "差旅申请", + "上一页", + "下一页", + "新增行程段", + "保存草稿" + ], + "links": [ + { + "text": "home_app_logoPortal", + "href": "/portal" + }, + { + "text": "groups团队", + "href": "/team" + }, + { + "text": "event_available请假", + "href": "/leave-requests" + }, + { + "text": "request_quote报销", + "href": "/reimbursements" + }, + { + "text": "inventory_2资产", + "href": "/assets" + }, + { + "text": "article周报", + "href": "/weekly-reports" + }, + { + "text": "check_circle待办", + "href": "/todos" + }, + { + "text": "campaign公告", + "href": "/announcements" + }, + { + "text": "workspaces项目", + "href": "/projects" + }, + { + "text": "shopping_cart采购申请", + "href": "/purchase-requests" + }, + { + "text": "flight差旅申请", + "href": "/travel-requests" + }, + { + "text": "receipt_long票据中心", + "href": "/invoice-pool" + } + ], + "tables": [], + "dialogs": [], + "longUuidLike": [], + "hasDeleteText": false, + "hasReimbursementDelete": false, + "hasInvoiceOptionalBinding": false, + "verboseFlags": { + "hasViewEditSubmit": false, + "hasInvoiceWaitOcrCopy": false, + "hasCurrentPageMetrics": false + } + } + ], + "errors": [ + "first detail link not visible" + ], + "consoleMessages": [] +} diff --git a/artifacts/r100-pc-reimbursement-audit/screenshots/pc-invoice-pool.png b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-invoice-pool.png new file mode 100644 index 00000000..5d56b626 Binary files /dev/null and b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-invoice-pool.png differ diff --git a/artifacts/r100-pc-reimbursement-audit/screenshots/pc-leave-requests.png b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-leave-requests.png new file mode 100644 index 00000000..4099a70d Binary files /dev/null and b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-leave-requests.png differ diff --git a/artifacts/r100-pc-reimbursement-audit/screenshots/pc-purchase-requests.png b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-purchase-requests.png new file mode 100644 index 00000000..db874df1 Binary files /dev/null and b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-purchase-requests.png differ diff --git a/artifacts/r100-pc-reimbursement-audit/screenshots/pc-reimbursement-detail-with-item.png b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-reimbursement-detail-with-item.png new file mode 100644 index 00000000..b5dddf34 Binary files /dev/null and b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-reimbursement-detail-with-item.png differ diff --git a/artifacts/r100-pc-reimbursement-audit/screenshots/pc-reimbursement-invoice-dialog-with-item.png b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-reimbursement-invoice-dialog-with-item.png new file mode 100644 index 00000000..21c446fb Binary files /dev/null and b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-reimbursement-invoice-dialog-with-item.png differ diff --git a/artifacts/r100-pc-reimbursement-audit/screenshots/pc-reimbursements-list-with-draft.png b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-reimbursements-list-with-draft.png new file mode 100644 index 00000000..e60d930a Binary files /dev/null and b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-reimbursements-list-with-draft.png differ diff --git a/artifacts/r100-pc-reimbursement-audit/screenshots/pc-reimbursements-list.png b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-reimbursements-list.png new file mode 100644 index 00000000..a76a0906 Binary files /dev/null and b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-reimbursements-list.png differ diff --git a/artifacts/r100-pc-reimbursement-audit/screenshots/pc-travel-requests-tab-requests.png b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-travel-requests-tab-requests.png new file mode 100644 index 00000000..f45f3f11 Binary files /dev/null and b/artifacts/r100-pc-reimbursement-audit/screenshots/pc-travel-requests-tab-requests.png differ diff --git a/artifacts/r100-pc-reimbursement-audit/temporary-draft-audit.json b/artifacts/r100-pc-reimbursement-audit/temporary-draft-audit.json new file mode 100644 index 00000000..3e150f87 --- /dev/null +++ b/artifacts/r100-pc-reimbursement-audit/temporary-draft-audit.json @@ -0,0 +1,394 @@ +{ + "generatedAt": "2026-05-06T13:39:43.542Z", + "temporaryData": { + "reimbursementId": "aacf9d44-0b31-4ca1-a846-198ea55f6d84", + "formNumber": null, + "itemId": "658be08d-3b30-4b20-b42f-0d277faab017", + "expenseType": "机票" + }, + "pages": [ + { + "id": "pc-reimbursements-list-with-draft", + "url": "https://oa.hyinda.com/reimbursements?status=draft", + "textStart": "海音达工作台\n审批 报销 团队\n今日工作台\n先处理待办和团队状态,再进入具体模块。\n主导航\n优先处理今日工作与高频协同。\nhome_app_logo\nPortal\ngroups\n团队\nevent_available\n请假\nrequest_quote\n报销\ninventory_2\n资产\narticle\n周报\ncheck_circle\n待办\ncampaign\n公告\nworkspaces\n项目\n备用模块\n默认收起,不干扰主路径\n按需展开\n主导航\n\n报销\n\n你好,Employee\nsearch\n搜索\nEmployee\n我的报销\n\n草稿、审批、支付。\n\n新建报销\n导出\n当前列表\n1\n共 1 条\n当前金额\n¥12.30\n当前页\n审批中\n0\n待推进\n已支付\n0\n仅自己\n草稿\n审批中\n已通过\n已支付\n已驳回\n已取消\n单号\t状态\t金额\t报销人\t日期\t操作\n\naacf9d44-0b31-4ca1-a846-198ea55f6d84\n\t草稿\t¥12.30\t\nE\nEmployee\n\t2026-05-06\t编辑\n第 1 / 1 页\n上一页\n下一页", + "buttons": [ + "search搜索", + "search", + "Employee", + "新建报销", + "导出", + "草稿", + "审批中", + "已通过", + "已支付", + "已驳回", + "已取消", + "上一页", + "下一页" + ], + "links": [ + { + "text": "home_app_logoPortal", + "href": "/portal" + }, + { + "text": "groups团队", + "href": "/team" + }, + { + "text": "event_available请假", + "href": "/leave-requests" + }, + { + "text": "request_quote报销", + "href": "/reimbursements" + }, + { + "text": "inventory_2资产", + "href": "/assets" + }, + { + "text": "article周报", + "href": "/weekly-reports" + }, + { + "text": "check_circle待办", + "href": "/todos" + }, + { + "text": "campaign公告", + "href": "/announcements" + }, + { + "text": "workspaces项目", + "href": "/projects" + }, + { + "text": "shopping_cart采购申请", + "href": "/purchase-requests" + }, + { + "text": "flight差旅申请", + "href": "/travel-requests" + }, + { + "text": "receipt_long票据中心", + "href": "/invoice-pool" + }, + { + "text": "继续编辑", + "href": "/reimbursements/aacf9d44-0b31-4ca1-a846-198ea55f6d84" + }, + { + "text": "编辑", + "href": "/reimbursements/aacf9d44-0b31-4ca1-a846-198ea55f6d84" + } + ], + "dialogs": [], + "tables": [ + { + "headers": [ + "单号", + "状态", + "金额", + "报销人", + "日期", + "操作" + ], + "firstRow": [ + "aacf9d44-0b31-4ca1-a846-198ea55f6d84", + "草稿", + "¥12.30", + "EEmployee", + "2026-05-06", + "编辑" + ], + "rowCount": 1 + } + ], + "longUuidLike": [ + "aacf9d44-0b31-4ca1-a846-198ea55f6d84" + ], + "flags": { + "hasWholeDelete": false, + "hasDetailDeleteOnly": false, + "hasRawReimbursementId": false, + "hasInvoiceOptionalBinding": false, + "hasVerboseDetailSubtitle": false, + "hasVerboseInvoiceCopy": false + } + }, + { + "id": "pc-reimbursement-detail-with-item", + "url": "https://oa.hyinda.com/reimbursements/aacf9d44-0b31-4ca1-a846-198ea55f6d84", + "textStart": "海音达工作台\n审批 报销 团队\n今日工作台\n先处理待办和团队状态,再进入具体模块。\n主导航\n优先处理今日工作与高频协同。\nhome_app_logo\nPortal\ngroups\n团队\nevent_available\n请假\nrequest_quote\n报销\ninventory_2\n资产\narticle\n周报\ncheck_circle\n待办\ncampaign\n公告\nworkspaces\n项目\n备用模块\n默认收起,不干扰主路径\n按需展开\n主导航\n\n报销详情\n\n你好,Employee\nsearch\n搜索\nEmployee\n报销详情 aacf9d44-0b31-4ca1-a846-198ea55f6d84\n\n查看、编辑、提交。\n\n草稿\n报销日期:2026-05-06\n报销人:Employee\n提交人:Employee\n金额:12.3\n打印 / PDF\n返回列表\n概览与关联\n当前状态\n草稿\n关联项目\n未关联\n明细数\n1\n关联票据\n0\n状态:draft\n报销ID:aacf9d44-0b31-4ca1-a846-198ea55f6d84\n报销日期:2026-05-06\n金额:12.3\n提交人:Employee\n报销人:Employee\n说明:R100 PC 报销体验自动化审查临时草稿\n关联项目\n\n报销可选挂到项目,用于项目执行面板汇总。\n\n不关联项目\n明细与票据\n报销明细\n\n明细变更会自动重算总金额。\n\n新增明细\n费用类型\t发生日期\t金额\t说明\t操作\n\n机票\ntravel_airfare\n\t2026-05-06\t\n12.3\n\t\nR100 临时明细\n\t\n编辑\n删除\n关联票据\n\n可在当前页面内直接绑定已有发票,或上传新发票后等待 OCR 完成。\n\n添加发票\n\n暂无关联票据\n\n风险与同步\n报销摘要\n报销编号:aacf9d44-0b31-4ca1-a846-198ea55f6d84\n报销人:Employee\n提交人:Employee\n当前审批:-\n明细数:1\n票据数:0\n关联项目:未关联\n可执行动作\n提交报销\n\n提交前需先绑定至少 1 张发票,可在“关联票据”区域添加。\n\n撤回报销\n\n撤回", + "buttons": [ + "search搜索", + "search", + "Employee", + "新增明细", + "编辑", + "删除", + "添加发票", + "提交报销", + "撤回" + ], + "links": [ + { + "text": "home_app_logoPortal", + "href": "/portal" + }, + { + "text": "groups团队", + "href": "/team" + }, + { + "text": "event_available请假", + "href": "/leave-requests" + }, + { + "text": "request_quote报销", + "href": "/reimbursements" + }, + { + "text": "inventory_2资产", + "href": "/assets" + }, + { + "text": "article周报", + "href": "/weekly-reports" + }, + { + "text": "check_circle待办", + "href": "/todos" + }, + { + "text": "campaign公告", + "href": "/announcements" + }, + { + "text": "workspaces项目", + "href": "/projects" + }, + { + "text": "shopping_cart采购申请", + "href": "/purchase-requests" + }, + { + "text": "flight差旅申请", + "href": "/travel-requests" + }, + { + "text": "receipt_long票据中心", + "href": "/invoice-pool" + }, + { + "text": "打印 / PDF", + "href": "/reimbursements/aacf9d44-0b31-4ca1-a846-198ea55f6d84/print" + }, + { + "text": "返回列表", + "href": "/reimbursements" + } + ], + "dialogs": [], + "tables": [ + { + "headers": [ + "费用类型", + "发生日期", + "金额", + "说明", + "操作" + ], + "firstRow": [ + "机票travel_airfare", + "2026-05-06", + "12.3", + "R100 临时明细", + "编辑删除" + ], + "rowCount": 1 + } + ], + "longUuidLike": [ + "aacf9d44-0b31-4ca1-a846-198ea55f6d84" + ], + "flags": { + "hasWholeDelete": false, + "hasDetailDeleteOnly": false, + "hasRawReimbursementId": true, + "hasInvoiceOptionalBinding": false, + "hasVerboseDetailSubtitle": true, + "hasVerboseInvoiceCopy": false + } + }, + { + "id": "pc-reimbursement-invoice-dialog-with-item", + "url": "https://oa.hyinda.com/reimbursements/aacf9d44-0b31-4ca1-a846-198ea55f6d84", + "textStart": "海音达工作台\n审批 报销 团队\n今日工作台\n先处理待办和团队状态,再进入具体模块。\n主导航\n优先处理今日工作与高频协同。\nhome_app_logo\nPortal\ngroups\n团队\nevent_available\n请假\nrequest_quote\n报销\ninventory_2\n资产\narticle\n周报\ncheck_circle\n待办\ncampaign\n公告\nworkspaces\n项目\n备用模块\n默认收起,不干扰主路径\n按需展开\n主导航\n\n报销详情\n\n你好,Employee\nsearch\n搜索\nEmployee\n报销详情 aacf9d44-0b31-4ca1-a846-198ea55f6d84\n\n查看、编辑、提交。\n\n草稿\n报销日期:2026-05-06\n报销人:Employee\n提交人:Employee\n金额:12.3\n打印 / PDF\n返回列表\n概览与关联\n当前状态\n草稿\n关联项目\n未关联\n明细数\n1\n关联票据\n0\n状态:draft\n报销ID:aacf9d44-0b31-4ca1-a846-198ea55f6d84\n报销日期:2026-05-06\n金额:12.3\n提交人:Employee\n报销人:Employee\n说明:R100 PC 报销体验自动化审查临时草稿\n关联项目\n\n报销可选挂到项目,用于项目执行面板汇总。\n\n不关联项目\n明细与票据\n报销明细\n\n明细变更会自动重算总金额。\n\n新增明细\n费用类型\t发生日期\t金额\t说明\t操作\n\n机票\ntravel_airfare\n\t2026-05-06\t\n12.3\n\t\nR100 临时明细\n\t\n编辑\n删除\n关联票据\n\n可在当前页面内直接绑定已有发票,或上传新发票后等待 OCR 完成。\n\n添加发票\n\n暂无关联票据\n\n风险与同步\n报销摘要\n报销编号:aacf9d44-0b31-4ca1-a846-198ea55f6d84\n报销人:Employee\n提交人:Employee\n当前审批:-\n明细数:1\n票据数:0\n关联项目:未关联\n可执行动作\n提交报销\n\n提交前需先绑定至少 1 张发票,可在“关联票据”区域添加。\n\n撤回报销\n\n撤回\n添加发票\n\n选择当前报销人可绑定的可用发票,或上传新发票等待 OCR 完成后直接绑定。\n\n刷新列表\n发票 26112000000938423851-26112000000938423851\n北京悦海堂餐饮管理有限公司 · 2026-03-11 · 金额 ¥1683\n原始文件:北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf · 上传时间 2026-05-05 15:58:28\n绑定到明细(可选)\n不绑定具体明细\n机票 · R100 临时明细\n发票 26112000000938423851-26112000000938423851\n北京悦海堂餐饮管理有限公司 · 2026-03-11 · 金额 ¥1683\n原始文件:北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf · 上传时间 2026-05-05 15:55:32\n绑定到明细(可选)\n不绑定具体明细\n机票 · R100 临时明细\n发票 26112000000938423851-26112000000938423851\n北京悦海堂餐饮管理有限公司 · 2026-03-11 · 金额 ¥1683\n原始文件:北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf · 上传时间 2026-05-05 14:37:01\n绑定到明细(可选)\n不绑定具体明细\n机票 · R100 临时明细\n已选 0 张发票\n绑定选中发票\n或者上传新发票\n\n上传后会自动使用当前报销人的 owner 信息,并等待 OCR 识别完成。\n\n选择发票文件\n上传并等待 OCR", + "buttons": [ + "search搜索", + "search", + "Employee", + "新增明细", + "编辑", + "删除", + "添加发票", + "提交报销", + "撤回", + "刷新列表", + "绑定选中发票", + "上传并等待 OCR" + ], + "links": [ + { + "text": "home_app_logoPortal", + "href": "/portal" + }, + { + "text": "groups团队", + "href": "/team" + }, + { + "text": "event_available请假", + "href": "/leave-requests" + }, + { + "text": "request_quote报销", + "href": "/reimbursements" + }, + { + "text": "inventory_2资产", + "href": "/assets" + }, + { + "text": "article周报", + "href": "/weekly-reports" + }, + { + "text": "check_circle待办", + "href": "/todos" + }, + { + "text": "campaign公告", + "href": "/announcements" + }, + { + "text": "workspaces项目", + "href": "/projects" + }, + { + "text": "shopping_cart采购申请", + "href": "/purchase-requests" + }, + { + "text": "flight差旅申请", + "href": "/travel-requests" + }, + { + "text": "receipt_long票据中心", + "href": "/invoice-pool" + }, + { + "text": "打印 / PDF", + "href": "/reimbursements/aacf9d44-0b31-4ca1-a846-198ea55f6d84/print" + }, + { + "text": "返回列表", + "href": "/reimbursements" + } + ], + "dialogs": [ + { + "text": "添加发票选择当前报销人可绑定的可用发票,或上传新发票等待 OCR 完成后直接绑定。刷新列表发票 26112000000938423851-26112000000938423851北京悦海堂餐饮管理有限公司 · 2026-03-11 · 金额 ¥1683原始文件:北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf · 上传时间 2026-05-05 15:58:28绑定到明细(可选)不绑定具体明细机票 · R100 临时明细发票 26112000000938423851-26112000000938423851北京悦海堂餐饮管理有限公司 · 2026-03-11 · 金额 ¥1683原始文件:北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf · 上传时间 2026-05-05 15:55:32绑定到明细(可选)不绑定具体明细机票 · R100 临时明细发票 26112000000938423851-26112000000938423851北京悦海堂餐饮管理有限公司 · 2026-03-11 · 金额 ¥1683原始文件:北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf · 上传时间 2026-05-05 14:37:01绑定到明细(可选)不绑定具体明细机票 · R100 临时明细已选 0 张发票绑定选中发票或者上传新发票上传后会自动使用当前报销人的 owner 信息,并等待 OCR 识别完成。选择发票文件上传并等待 OCR", + "buttons": [ + "刷新列表", + "绑定选中发票", + "上传并等待 OCR" + ], + "selects": [ + { + "value": "", + "selectedText": "不绑定具体明细", + "options": [ + { + "value": "", + "text": "不绑定具体明细" + }, + { + "value": "658be08d-3b30-4b20-b42f-0d277faab017", + "text": "机票 · R100 临时明细" + } + ] + }, + { + "value": "", + "selectedText": "不绑定具体明细", + "options": [ + { + "value": "", + "text": "不绑定具体明细" + }, + { + "value": "658be08d-3b30-4b20-b42f-0d277faab017", + "text": "机票 · R100 临时明细" + } + ] + }, + { + "value": "", + "selectedText": "不绑定具体明细", + "options": [ + { + "value": "", + "text": "不绑定具体明细" + }, + { + "value": "658be08d-3b30-4b20-b42f-0d277faab017", + "text": "机票 · R100 临时明细" + } + ] + } + ] + } + ], + "tables": [ + { + "headers": [ + "费用类型", + "发生日期", + "金额", + "说明", + "操作" + ], + "firstRow": [ + "机票travel_airfare", + "2026-05-06", + "12.3", + "R100 临时明细", + "编辑删除" + ], + "rowCount": 1 + } + ], + "longUuidLike": [ + "aacf9d44-0b31-4ca1-a846-198ea55f6d84" + ], + "flags": { + "hasWholeDelete": false, + "hasDetailDeleteOnly": false, + "hasRawReimbursementId": true, + "hasInvoiceOptionalBinding": true, + "hasVerboseDetailSubtitle": true, + "hasVerboseInvoiceCopy": true + } + } + ], + "cleanup": { + "reimbursementId": "aacf9d44-0b31-4ca1-a846-198ea55f6d84", + "outcome": "deleted", + "unboundInvoiceCount": 0 + }, + "errors": [] +} \ No newline at end of file diff --git a/artifacts/r99-mobile-feedback-audit/audit.json b/artifacts/r99-mobile-feedback-audit/audit.json new file mode 100644 index 00000000..723bd124 --- /dev/null +++ b/artifacts/r99-mobile-feedback-audit/audit.json @@ -0,0 +1,1605 @@ +{ + "generatedAt": "2026-05-06T13:04:43.868Z", + "baseUrl": "https://oa.hyinda.com", + "userAgent": "WeCom iPhone UA after real browser login storageState", + "viewport": { + "width": 390, + "height": 844 + }, + "results": [ + { + "id": "mobile-home", + "path": "/mobile", + "role": "employee", + "screenshot": "artifacts/r99-mobile-feedback-audit/screenshots/mobile-home.png", + "url": "https://oa.hyinda.com/mobile", + "viewport": { + "width": 390, + "height": 844 + }, + "documentScrollWidth": 390, + "hasHorizontalOverflow": false, + "tableCount": 0, + "offscreenControlCount": 0, + "offscreenControls": [], + "containsOralCopy": true, + "textFlags": { + "hasFirstThings": true, + "hasClean": true, + "hasVerboseReimbursementsSubtitle": false, + "hasVerboseLeaveSubtitle": false + }, + "blackish": [ + { + "tag": "body", + "testId": "", + "text": "海音达工作台审批 报销 团队今日工作台先处理待办和团队状态,再进入具体模块。主导航优先处理今日工作与高频协同。home_app_logoPortalgroups", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 844 + }, + { + "tag": "div", + "testId": "", + "text": "海音达工作台审批 报销 团队今日工作台先处理待办和团队状态,再进入具体模块。主导航优先处理今日工作与高频协同。home_app_logoPortalgroups", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 844 + }, + { + "tag": "main", + "testId": "", + "text": "移动工作台移动首页当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee今天先处理这几件事清爽传票据re", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 844 + }, + { + "tag": "div", + "testId": "", + "text": "今天先处理这几件事清爽传票据receipt_long拍照或选文件报销request_quote新建和查进度请假event_available提交申请我的pers", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 844 + }, + { + "tag": "div", + "testId": "", + "text": "今天先处理这几件事清爽传票据receipt_long拍照或选文件报销request_quote新建和查进度请假event_available提交申请我的pers", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 16, + "width": 358, + "height": 606 + }, + { + "tag": "div", + "testId": "", + "text": "今天先处理这几件事清爽传票据receipt_long拍照或选文件报销request_quote新建和查进度请假event_available提交申请我的pers", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 16, + "width": 358, + "height": 606 + }, + { + "tag": "header", + "testId": "", + "text": "今天", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 16, + "width": 358, + "height": 36 + }, + { + "tag": "div", + "testId": "", + "text": "今天", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 16, + "width": 48, + "height": 36 + }, + { + "tag": "h2", + "testId": "", + "text": "今天", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 20, + "width": 48, + "height": 32 + }, + { + "tag": "div", + "testId": "", + "text": "先处理这几件事清爽", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 33, + "top": 85, + "width": 324, + "height": 24 + }, + { + "tag": "div", + "testId": "", + "text": "先处理这几件事", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(24, 24, 27)", + "left": 33, + "top": 85, + "width": 112, + "height": 24 + }, + { + "tag": "div", + "testId": "", + "text": "传票据receipt_long拍照或选文件报销request_quote新建和查进度请假event_available提交申请我的person资料和通知", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 33, + "top": 121, + "width": 324, + "height": 200 + }, + { + "tag": "a", + "testId": "mobile-action-capture", + "text": "传票据receipt_long拍照或选文件", + "backgroundColor": "rgb(24, 24, 27)", + "color": "rgb(255, 255, 255)", + "left": 33, + "top": 121, + "width": 158, + "height": 96 + }, + { + "tag": "div", + "testId": "", + "text": "传票据receipt_long", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(255, 255, 255)", + "left": 45, + "top": 133, + "width": 134, + "height": 20 + }, + { + "tag": "span", + "testId": "", + "text": "传票据", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(255, 255, 255)", + "left": 45, + "top": 133, + "width": 42, + "height": 20 + }, + { + "tag": "span", + "testId": "", + "text": "receipt_long", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(255, 255, 255)", + "left": 159, + "top": 133, + "width": 20, + "height": 20 + }, + { + "tag": "div", + "testId": "", + "text": "拍照或选文件", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgba(255, 255, 255, 0.75)", + "left": 45, + "top": 189, + "width": 134, + "height": 16 + }, + { + "tag": "div", + "testId": "", + "text": "报销request_quote", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(24, 24, 27)", + "left": 212, + "top": 134, + "width": 132, + "height": 20 + }, + { + "tag": "span", + "testId": "", + "text": "报销", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(24, 24, 27)", + "left": 212, + "top": 134, + "width": 28, + "height": 20 + }, + { + "tag": "span", + "testId": "", + "text": "request_quote", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(24, 24, 27)", + "left": 324, + "top": 134, + "width": 20, + "height": 20 + } + ], + "actionTiles": [ + { + "testId": "mobile-action-capture", + "text": "传票据receipt_long拍照或选文件", + "backgroundColor": "rgb(24, 24, 27)", + "color": "rgb(255, 255, 255)" + }, + { + "testId": "mobile-action-reimbursements", + "text": "报销request_quote新建和查进度", + "backgroundColor": "rgb(255, 255, 255)", + "color": "rgb(24, 24, 27)" + }, + { + "testId": "mobile-action-leave", + "text": "请假event_available提交申请", + "backgroundColor": "rgb(255, 255, 255)", + "color": "rgb(24, 24, 27)" + }, + { + "testId": "mobile-action-me", + "text": "我的person资料和通知", + "backgroundColor": "rgb(255, 255, 255)", + "color": "rgb(24, 24, 27)" + } + ], + "bottomNavInfo": { + "backgroundColor": "rgba(255, 255, 255, 0.95)", + "height": 77, + "text": "home首页fact_check审批receipt_long票据person我的" + }, + "hasTopbarMenuButton": true, + "pageHeaderText": [ + "移动工作台移动首页当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee", + "今天" + ], + "visibleTextStart": "今天\n先处理这几件事\n清爽\n传票据\nreceipt_long\n拍照或选文件\n报销\nrequest_quote\n新建和查进度\n请假\nevent_available\n提交申请\n我的\nperson\n资料和通知\n打卡\n2026-05-06\n今天还没打卡\n上班打卡\n通知\n全部\n\n暂无通知。\n\nhome\n首页\nfact_check\n审批\nreceipt_long\n票据\nperson\n我的" + }, + { + "id": "mobile-me", + "path": "/mobile/me", + "role": "employee", + "screenshot": "artifacts/r99-mobile-feedback-audit/screenshots/mobile-me.png", + "url": "https://oa.hyinda.com/mobile/me", + "viewport": { + "width": 390, + "height": 844 + }, + "documentScrollWidth": 390, + "hasHorizontalOverflow": false, + "tableCount": 0, + "offscreenControlCount": 0, + "offscreenControls": [], + "containsOralCopy": false, + "textFlags": { + "hasFirstThings": false, + "hasClean": false, + "hasVerboseReimbursementsSubtitle": false, + "hasVerboseLeaveSubtitle": false + }, + "blackish": [ + { + "tag": "body", + "testId": "", + "text": "海音达工作台审批 报销 团队今日工作台先处理待办和团队状态,再进入具体模块。主导航优先处理今日工作与高频协同。home_app_logoPortalgroups", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 1490 + }, + { + "tag": "div", + "testId": "", + "text": "海音达工作台审批 报销 团队今日工作台先处理待办和团队状态,再进入具体模块。主导航优先处理今日工作与高频协同。home_app_logoPortalgroups", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 1490 + }, + { + "tag": "main", + "testId": "", + "text": "移动工作台移动我的当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee我的个人信息、常用入口和低频管理", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 1490 + }, + { + "tag": "div", + "testId": "", + "text": "我的个人信息、常用入口和低频管理操作。个人信息头像与部门信息从完整员工档案读取。SESmoke Employee管理部员工号:SMOKE002账号与绑定个人设置", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 1490 + }, + { + "tag": "div", + "testId": "", + "text": "我的个人信息、常用入口和低频管理操作。个人信息头像与部门信息从完整员工档案读取。SESmoke Employee管理部员工号:SMOKE002账号与绑定个人设置", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 16, + "width": 358, + "height": 1378 + }, + { + "tag": "div", + "testId": "", + "text": "我的个人信息、常用入口和低频管理操作。个人信息头像与部门信息从完整员工档案读取。SESmoke Employee管理部员工号:SMOKE002账号与绑定个人设置", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 16, + "width": 358, + "height": 1378 + }, + { + "tag": "header", + "testId": "", + "text": "我的个人信息、常用入口和低频管理操作。", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 16, + "width": 358, + "height": 62 + }, + { + "tag": "div", + "testId": "", + "text": "我的个人信息、常用入口和低频管理操作。", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 16, + "width": 238, + "height": 62 + }, + { + "tag": "h2", + "testId": "", + "text": "我的", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 20, + "width": 238, + "height": 32 + }, + { + "tag": "p", + "testId": "", + "text": "个人信息、常用入口和低频管理操作。", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(71, 85, 105)", + "left": 16, + "top": 58, + "width": 238, + "height": 20 + }, + { + "tag": "div", + "testId": "", + "text": "个人信息头像与部门信息从完整员工档案读取。", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 37, + "top": 115, + "width": 316, + "height": 52 + }, + { + "tag": "div", + "testId": "", + "text": "个人信息头像与部门信息从完整员工档案读取。", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 37, + "top": 115, + "width": 238, + "height": 52 + }, + { + "tag": "h3", + "testId": "", + "text": "个人信息", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 37, + "top": 115, + "width": 238, + "height": 24 + }, + { + "tag": "p", + "testId": "", + "text": "头像与部门信息从完整员工档案读取。", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(71, 85, 105)", + "left": 37, + "top": 143, + "width": 238, + "height": 24 + }, + { + "tag": "div", + "testId": "", + "text": "SESmoke Employee管理部员工号:SMOKE002", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 37, + "top": 187, + "width": 316, + "height": 96 + }, + { + "tag": "div", + "testId": "", + "text": "SESmoke Employee管理部员工号:SMOKE002", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 37, + "top": 187, + "width": 316, + "height": 96 + }, + { + "tag": "div", + "testId": "", + "text": "SE", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 37, + "top": 187, + "width": 96, + "height": 96 + }, + { + "tag": "div", + "testId": "", + "text": "SE", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(82, 82, 91)", + "left": 38, + "top": 188, + "width": 94, + "height": 94 + }, + { + "tag": "div", + "testId": "", + "text": "Smoke Employee管理部员工号:SMOKE002", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 149, + "top": 199, + "width": 173, + "height": 72 + }, + { + "tag": "div", + "testId": "", + "text": "Smoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(24, 24, 27)", + "left": 149, + "top": 199, + "width": 173, + "height": 28 + } + ], + "actionTiles": [], + "bottomNavInfo": { + "backgroundColor": "rgba(255, 255, 255, 0.95)", + "height": 77, + "text": "home首页fact_check审批receipt_long票据person我的" + }, + "hasTopbarMenuButton": true, + "pageHeaderText": [ + "移动工作台移动我的当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee", + "我的个人信息、常用入口和低频管理操作。" + ], + "visibleTextStart": "我的\n\n个人信息、常用入口和低频管理操作。\n\n个人信息\n\n头像与部门信息从完整员工档案读取。\n\nSE\nSmoke Employee\n管理部\n员工号:SMOKE002\n账号与绑定\n\n个人设置里可维护企业微信绑定、通知偏好和账号资料。\n\nmanage_accounts\n个人设置\n绑定企业微信、维护账号与通知偏好\nbadge\n完整员工档案\n办公地点、紧急联系人和完整档案\n更多入口\n\n低频模块放在这里,避免干扰移动首页。\n\nnotifications\n通知中心\n查看全部站内通知\nevent_available\n请假\n提交或查看请假申请\nrequest_quote\n报销\n提交报销和查看报销进度\ninventory_2\n资产\n查看资产台账和盘点入口\nworkspaces\n项目\n查看项目、风险和里程碑\n外部通知推送\n\n关闭后仅停止外部渠道推送,站内通知仍保留。\n\n接收外部渠道推送\n\n适用于审批待办、报销付款和资产流转提醒。关闭后不会影响站内通知或系统登录。\n\n退出登录\nhome\n首页\nfact_check\n审批\nreceipt_long\n票据\nperson\n我的" + }, + { + "id": "reimbursements", + "path": "/reimbursements", + "role": "employee", + "screenshot": "artifacts/r99-mobile-feedback-audit/screenshots/reimbursements.png", + "url": "https://oa.hyinda.com/reimbursements", + "viewport": { + "width": 390, + "height": 844 + }, + "documentScrollWidth": 390, + "hasHorizontalOverflow": false, + "tableCount": 0, + "offscreenControlCount": 0, + "offscreenControls": [], + "containsOralCopy": false, + "textFlags": { + "hasFirstThings": false, + "hasClean": false, + "hasVerboseReimbursementsSubtitle": true, + "hasVerboseLeaveSubtitle": false + }, + "blackish": [ + { + "tag": "body", + "testId": "", + "text": "海音达工作台审批 报销 团队今日工作台先处理待办和团队状态,再进入具体模块。主导航优先处理今日工作与高频协同。home_app_logoPortalgroups", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 1365 + }, + { + "tag": "div", + "testId": "", + "text": "海音达工作台审批 报销 团队今日工作台先处理待办和团队状态,再进入具体模块。主导航优先处理今日工作与高频协同。home_app_logoPortalgroups", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 1365 + }, + { + "tag": "main", + "testId": "", + "text": "主导航报销当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee我的报销草稿、审批、支付。新建报销导出当", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 1365 + }, + { + "tag": "div", + "testId": "", + "text": "主导航报销当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 229 + }, + { + "tag": "header", + "testId": "", + "text": "主导航报销当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 229 + }, + { + "tag": "div", + "testId": "", + "text": "主导航报销当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 12, + "width": 358, + "height": 204 + }, + { + "tag": "div", + "testId": "", + "text": "主导航报销当前通过企业微信进入你好,Smoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 12, + "width": 83, + "height": 204 + }, + { + "tag": "svg", + "testId": "", + "text": "", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 17, + "top": 104, + "width": 20, + "height": 20 + }, + { + "tag": "path", + "testId": "", + "text": "", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 20, + "top": 109, + "width": 13, + "height": 10 + }, + { + "tag": "div", + "testId": "", + "text": "主导航报销当前通过企业微信进入你好,Smoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 50, + "top": 12, + "width": 49, + "height": 204 + }, + { + "tag": "div", + "testId": "", + "text": "主导航", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgba(0, 57, 138, 0.7)", + "left": 50, + "top": 12, + "width": 49, + "height": 16 + }, + { + "tag": "div", + "testId": "", + "text": "报销当前通过企业微信进入", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 50, + "top": 32, + "width": 49, + "height": 120 + }, + { + "tag": "p", + "testId": "", + "text": "报销", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 50, + "top": 32, + "width": 36, + "height": 28 + }, + { + "tag": "div", + "testId": "", + "text": "你好,Smoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(71, 85, 105)", + "left": 50, + "top": 156, + "width": 49, + "height": 60 + }, + { + "tag": "div", + "testId": "", + "text": "search搜索searchSmoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 115, + "top": 92, + "width": 259, + "height": 44 + }, + { + "tag": "span", + "testId": "", + "text": "search", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 128, + "top": 105, + "width": 18, + "height": 18 + }, + { + "tag": "svg", + "testId": "", + "text": "", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 179, + "top": 104, + "width": 20, + "height": 20 + }, + { + "tag": "path", + "testId": "", + "text": "", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 182, + "top": 108, + "width": 13, + "height": 10 + }, + { + "tag": "div", + "testId": "", + "text": "我的报销草稿、审批、支付。新建报销导出当前列表1共 1 条当前金额¥0.00当前页审批中0待推进已支付0仅自己草稿审批中已通过已支付已驳回已取消19439274", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 229, + "width": 390, + "height": 1136 + }, + { + "tag": "div", + "testId": "", + "text": "我的报销草稿、审批、支付。新建报销导出当前列表1共 1 条当前金额¥0.00当前页审批中0待推进已支付0仅自己草稿审批中已通过已支付已驳回已取消19439274", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 249, + "width": 358, + "height": 1096 + } + ], + "actionTiles": [], + "bottomNavInfo": null, + "hasTopbarMenuButton": true, + "pageHeaderText": [ + "主导航报销当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee", + "我的报销草稿、审批、支付。新建报销导出" + ], + "visibleTextStart": "主导航\n\n报销\n\n当前通过企业微信进入\n你好,Smoke Employee\nsearch\nSmoke Employee\n我的报销\n\n草稿、审批、支付。\n\n新建报销\n导出\n当前列表\n1\n共 1 条\n当前金额\n¥0.00\n当前页\n审批中\n0\n待推进\n已支付\n0\n仅自己\n草稿\n审批中\n已通过\n已支付\n已驳回\n已取消\n19439274-66ff-4301-964d-fcb43c304454\n2026-05-05\n草稿\n金额\n¥0.00\n报销人\nSmoke Employee\n继续编辑\n第 1 / 1 页\n上一页\n下一页" + }, + { + "id": "leave-requests", + "path": "/leave-requests", + "role": "employee", + "screenshot": "artifacts/r99-mobile-feedback-audit/screenshots/leave-requests.png", + "url": "https://oa.hyinda.com/leave-requests", + "viewport": { + "width": 390, + "height": 844 + }, + "documentScrollWidth": 390, + "hasHorizontalOverflow": false, + "tableCount": 1, + "offscreenControlCount": 0, + "offscreenControls": [], + "containsOralCopy": false, + "textFlags": { + "hasFirstThings": false, + "hasClean": false, + "hasVerboseReimbursementsSubtitle": false, + "hasVerboseLeaveSubtitle": true + }, + "blackish": [ + { + "tag": "body", + "testId": "", + "text": "海音达工作台审批 报销 团队今日工作台先处理待办和团队状态,再进入具体模块。主导航优先处理今日工作与高频协同。home_app_logoPortalgroups", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 3222 + }, + { + "tag": "div", + "testId": "", + "text": "海音达工作台审批 报销 团队今日工作台先处理待办和团队状态,再进入具体模块。主导航优先处理今日工作与高频协同。home_app_logoPortalgroups", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 3222 + }, + { + "tag": "main", + "testId": "", + "text": "主导航请假当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee请假申请支持假种选择、半天粒度请假、额度", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 3222 + }, + { + "tag": "div", + "testId": "", + "text": "主导航请假当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 229 + }, + { + "tag": "header", + "testId": "", + "text": "主导航请假当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 229 + }, + { + "tag": "div", + "testId": "", + "text": "主导航请假当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 12, + "width": 358, + "height": 204 + }, + { + "tag": "div", + "testId": "", + "text": "主导航请假当前通过企业微信进入你好,Smoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 12, + "width": 83, + "height": 204 + }, + { + "tag": "svg", + "testId": "", + "text": "", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 17, + "top": 104, + "width": 20, + "height": 20 + }, + { + "tag": "path", + "testId": "", + "text": "", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 20, + "top": 109, + "width": 13, + "height": 10 + }, + { + "tag": "div", + "testId": "", + "text": "主导航请假当前通过企业微信进入你好,Smoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 50, + "top": 12, + "width": 49, + "height": 204 + }, + { + "tag": "div", + "testId": "", + "text": "主导航", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgba(0, 57, 138, 0.7)", + "left": 50, + "top": 12, + "width": 49, + "height": 16 + }, + { + "tag": "div", + "testId": "", + "text": "请假当前通过企业微信进入", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 50, + "top": 32, + "width": 49, + "height": 120 + }, + { + "tag": "p", + "testId": "", + "text": "请假", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 50, + "top": 32, + "width": 36, + "height": 28 + }, + { + "tag": "div", + "testId": "", + "text": "你好,Smoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(71, 85, 105)", + "left": 50, + "top": 156, + "width": 49, + "height": 60 + }, + { + "tag": "div", + "testId": "", + "text": "search搜索searchSmoke Employee", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 115, + "top": 92, + "width": 259, + "height": 44 + }, + { + "tag": "span", + "testId": "", + "text": "search", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 128, + "top": 105, + "width": 18, + "height": 18 + }, + { + "tag": "svg", + "testId": "", + "text": "", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 179, + "top": 104, + "width": 20, + "height": 20 + }, + { + "tag": "path", + "testId": "", + "text": "", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 182, + "top": 108, + "width": 13, + "height": 10 + }, + { + "tag": "div", + "testId": "", + "text": "请假申请支持假种选择、半天粒度请假、额度冻结与撤回释放。可用额度30.0按当前启用假种汇总已冻结0.0审批中申请会占用额度已使用0.0通过后计入已使用本次预估-", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 229, + "width": 390, + "height": 2993 + }, + { + "tag": "div", + "testId": "", + "text": "请假申请支持假种选择、半天粒度请假、额度冻结与撤回释放。可用额度30.0按当前启用假种汇总已冻结0.0审批中申请会占用额度已使用0.0通过后计入已使用本次预估-", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 249, + "width": 358, + "height": 2953 + } + ], + "actionTiles": [], + "bottomNavInfo": null, + "hasTopbarMenuButton": true, + "pageHeaderText": [ + "主导航请假当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee", + "请假申请支持假种选择、半天粒度请假、额度冻结与撤回释放。" + ], + "visibleTextStart": "主导航\n\n请假\n\n当前通过企业微信进入\n你好,Smoke Employee\nsearch\nSmoke Employee\n请假申请\n\n支持假种选择、半天粒度请假、额度冻结与撤回释放。\n\n可用额度\n30.0\n按当前启用假种汇总\n已冻结\n0.0\n审批中申请会占用额度\n已使用\n0.0\n通过后计入已使用\n本次预估\n-\n创建草稿前可先预览天数\n新建请假草稿\n\n先填写时间段与假种,再补充附件和说明。\n\n假期类型\n请选择\n年假\n病假\n事假\n开始日期\n开始时段\n上午\n下午\n结束日期\n结束时段\n上午\n下午\n附件\n\n附件为可选项\n\n请假说明\n预计请假天数:-\n创建草稿\n额度概览\n\n假种可用额度、冻结与已使用情况按自然周期汇总。\n\n年假\n\n2026-01-01 ~ 2026-12-31\n\n启用\n\n可用\n\n15\n\n已冻结\n\n0\n\n已使用\n\n0\n\n授予额度\n\n15\n\n病假\n\n2026-01-01 ~ 2026-12-31\n\n启用\n\n可用\n\n10\n\n已冻结\n\n0\n\n已使用\n\n0\n\n授予额度\n\n10\n\n事假\n\n2026-01-01 ~ 2026-12-31\n\n启用\n\n可用\n\n5\n\n已冻结\n\n0\n\n已使用\n\n0\n\n授予额度\n\n5\n\n请假记录\n\n支持按状态和范围收敛列表,草稿与驳回单可再次提交。\n\n最近一次筛选会保留在当前页面状态中。\n全部状态\n草稿\n审批中\n已通过\n已驳回\n已取消\n刷新\n假种 / 申请人\t时间段\t天" + }, + { + "id": "portal", + "path": "/portal", + "role": "employee", + "screenshot": "artifacts/r99-mobile-feedback-audit/screenshots/portal.png", + "url": "https://oa.hyinda.com/mobile", + "viewport": { + "width": 390, + "height": 844 + }, + "documentScrollWidth": 390, + "hasHorizontalOverflow": false, + "tableCount": 0, + "offscreenControlCount": 0, + "offscreenControls": [], + "containsOralCopy": true, + "textFlags": { + "hasFirstThings": true, + "hasClean": true, + "hasVerboseReimbursementsSubtitle": false, + "hasVerboseLeaveSubtitle": false + }, + "blackish": [ + { + "tag": "body", + "testId": "", + "text": "海音达工作台审批 报销 团队今日工作台先处理待办和团队状态,再进入具体模块。主导航优先处理今日工作与高频协同。home_app_logoPortalgroups", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 844 + }, + { + "tag": "div", + "testId": "", + "text": "海音达工作台审批 报销 团队今日工作台先处理待办和团队状态,再进入具体模块。主导航优先处理今日工作与高频协同。home_app_logoPortalgroups", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 844 + }, + { + "tag": "main", + "testId": "", + "text": "移动工作台移动首页当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee今天先处理这几件事清爽传票据re", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 844 + }, + { + "tag": "div", + "testId": "", + "text": "今天先处理这几件事清爽传票据receipt_long拍照或选文件报销request_quote新建和查进度请假event_available提交申请我的pers", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 844 + }, + { + "tag": "div", + "testId": "", + "text": "今天先处理这几件事清爽传票据receipt_long拍照或选文件报销request_quote新建和查进度请假event_available提交申请我的pers", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 16, + "width": 358, + "height": 606 + }, + { + "tag": "div", + "testId": "", + "text": "今天先处理这几件事清爽传票据receipt_long拍照或选文件报销request_quote新建和查进度请假event_available提交申请我的pers", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 16, + "width": 358, + "height": 606 + }, + { + "tag": "header", + "testId": "", + "text": "今天", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 16, + "width": 358, + "height": 36 + }, + { + "tag": "div", + "testId": "", + "text": "今天", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 16, + "width": 48, + "height": 36 + }, + { + "tag": "h2", + "testId": "", + "text": "今天", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 20, + "width": 48, + "height": 32 + }, + { + "tag": "div", + "testId": "", + "text": "先处理这几件事清爽", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 33, + "top": 85, + "width": 324, + "height": 24 + }, + { + "tag": "div", + "testId": "", + "text": "先处理这几件事", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(24, 24, 27)", + "left": 33, + "top": 85, + "width": 112, + "height": 24 + }, + { + "tag": "div", + "testId": "", + "text": "传票据receipt_long拍照或选文件报销request_quote新建和查进度请假event_available提交申请我的person资料和通知", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 33, + "top": 121, + "width": 324, + "height": 200 + }, + { + "tag": "a", + "testId": "mobile-action-capture", + "text": "传票据receipt_long拍照或选文件", + "backgroundColor": "rgb(24, 24, 27)", + "color": "rgb(255, 255, 255)", + "left": 33, + "top": 121, + "width": 158, + "height": 96 + }, + { + "tag": "div", + "testId": "", + "text": "传票据receipt_long", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(255, 255, 255)", + "left": 45, + "top": 133, + "width": 134, + "height": 20 + }, + { + "tag": "span", + "testId": "", + "text": "传票据", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(255, 255, 255)", + "left": 45, + "top": 133, + "width": 42, + "height": 20 + }, + { + "tag": "span", + "testId": "", + "text": "receipt_long", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(255, 255, 255)", + "left": 159, + "top": 133, + "width": 20, + "height": 20 + }, + { + "tag": "div", + "testId": "", + "text": "拍照或选文件", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgba(255, 255, 255, 0.75)", + "left": 45, + "top": 189, + "width": 134, + "height": 16 + }, + { + "tag": "div", + "testId": "", + "text": "报销request_quote", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(24, 24, 27)", + "left": 212, + "top": 134, + "width": 132, + "height": 20 + }, + { + "tag": "span", + "testId": "", + "text": "报销", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(24, 24, 27)", + "left": 212, + "top": 134, + "width": 28, + "height": 20 + }, + { + "tag": "span", + "testId": "", + "text": "request_quote", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(24, 24, 27)", + "left": 324, + "top": 134, + "width": 20, + "height": 20 + } + ], + "actionTiles": [ + { + "testId": "mobile-action-capture", + "text": "传票据receipt_long拍照或选文件", + "backgroundColor": "rgb(24, 24, 27)", + "color": "rgb(255, 255, 255)" + }, + { + "testId": "mobile-action-reimbursements", + "text": "报销request_quote新建和查进度", + "backgroundColor": "rgb(255, 255, 255)", + "color": "rgb(24, 24, 27)" + }, + { + "testId": "mobile-action-leave", + "text": "请假event_available提交申请", + "backgroundColor": "rgb(255, 255, 255)", + "color": "rgb(24, 24, 27)" + }, + { + "testId": "mobile-action-me", + "text": "我的person资料和通知", + "backgroundColor": "rgb(255, 255, 255)", + "color": "rgb(24, 24, 27)" + } + ], + "bottomNavInfo": { + "backgroundColor": "rgba(255, 255, 255, 0.95)", + "height": 77, + "text": "home首页fact_check审批receipt_long票据person我的" + }, + "hasTopbarMenuButton": true, + "pageHeaderText": [ + "移动工作台移动首页当前通过企业微信进入你好,Smoke Employeesearch搜索searchSmoke Employee", + "今天" + ], + "visibleTextStart": "今天\n先处理这几件事\n清爽\n传票据\nreceipt_long\n拍照或选文件\n报销\nrequest_quote\n新建和查进度\n请假\nevent_available\n提交申请\n我的\nperson\n资料和通知\n打卡\n2026-05-06\n今天还没打卡\n上班打卡\n通知\n全部\n\n暂无通知。\n\nhome\n首页\nfact_check\n审批\nreceipt_long\n票据\nperson\n我的" + }, + { + "id": "workflow-tasks", + "path": "/workflow/tasks", + "role": "admin", + "screenshot": "artifacts/r99-mobile-feedback-audit/screenshots/workflow-tasks.png", + "url": "https://oa.hyinda.com/workflow/tasks", + "viewport": { + "width": 390, + "height": 844 + }, + "documentScrollWidth": 390, + "hasHorizontalOverflow": false, + "tableCount": 0, + "offscreenControlCount": 0, + "offscreenControls": [], + "containsOralCopy": false, + "textFlags": { + "hasFirstThings": false, + "hasClean": false, + "hasVerboseReimbursementsSubtitle": false, + "hasVerboseLeaveSubtitle": false + }, + "blackish": [ + { + "tag": "body", + "testId": "", + "text": "海音达工作台审批 报销 团队今日工作台先处理待办和团队状态,再进入具体模块。主导航优先处理今日工作与高频协同。home_app_logoPortalgroups", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 844 + }, + { + "tag": "div", + "testId": "", + "text": "海音达工作台审批 报销 团队今日工作台先处理待办和团队状态,再进入具体模块。主导航优先处理今日工作与高频协同。home_app_logoPortalgroups", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 844 + }, + { + "tag": "main", + "testId": "", + "text": "备用模块审批待办当前通过企业微信进入你好,Smoke Adminsearch搜索searchSmoke Admin待我处理待处理审批。待处理已通过已驳回已取消已", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 844 + }, + { + "tag": "div", + "testId": "", + "text": "备用模块审批待办当前通过企业微信进入你好,Smoke Adminsearch搜索searchSmoke Admin", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 197 + }, + { + "tag": "header", + "testId": "", + "text": "备用模块审批待办当前通过企业微信进入你好,Smoke Adminsearch搜索searchSmoke Admin", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 0, + "width": 390, + "height": 197 + }, + { + "tag": "div", + "testId": "", + "text": "备用模块审批待办当前通过企业微信进入你好,Smoke Adminsearch搜索searchSmoke Admin", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 12, + "width": 358, + "height": 172 + }, + { + "tag": "div", + "testId": "", + "text": "备用模块审批待办当前通过企业微信进入你好,Smoke Admin", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 12, + "width": 108, + "height": 172 + }, + { + "tag": "svg", + "testId": "", + "text": "", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 17, + "top": 88, + "width": 20, + "height": 20 + }, + { + "tag": "path", + "testId": "", + "text": "", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 20, + "top": 93, + "width": 13, + "height": 10 + }, + { + "tag": "div", + "testId": "", + "text": "备用模块审批待办当前通过企业微信进入你好,Smoke Admin", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 50, + "top": 12, + "width": 74, + "height": 172 + }, + { + "tag": "div", + "testId": "", + "text": "备用模块", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgba(0, 57, 138, 0.7)", + "left": 50, + "top": 12, + "width": 74, + "height": 16 + }, + { + "tag": "div", + "testId": "", + "text": "审批待办当前通过企业微信进入", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 50, + "top": 32, + "width": 74, + "height": 88 + }, + { + "tag": "p", + "testId": "", + "text": "审批待办", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 50, + "top": 32, + "width": 72, + "height": 28 + }, + { + "tag": "div", + "testId": "", + "text": "你好,Smoke Admin", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(71, 85, 105)", + "left": 50, + "top": 124, + "width": 74, + "height": 60 + }, + { + "tag": "div", + "testId": "", + "text": "search搜索searchSmoke Admin", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 140, + "top": 76, + "width": 234, + "height": 44 + }, + { + "tag": "span", + "testId": "", + "text": "search", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 153, + "top": 89, + "width": 18, + "height": 18 + }, + { + "tag": "svg", + "testId": "", + "text": "", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 204, + "top": 88, + "width": 20, + "height": 20 + }, + { + "tag": "path", + "testId": "", + "text": "", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(51, 65, 85)", + "left": 207, + "top": 92, + "width": 13, + "height": 10 + }, + { + "tag": "div", + "testId": "", + "text": "待我处理待处理审批。待处理已通过已驳回已取消已跳过暂无数据任务业务对象状态创建时间操作暂无数据第 1 / 1 页上一页下一页", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 0, + "top": 197, + "width": 390, + "height": 647 + }, + { + "tag": "div", + "testId": "", + "text": "待我处理待处理审批。待处理已通过已驳回已取消已跳过暂无数据任务业务对象状态创建时间操作暂无数据第 1 / 1 页上一页下一页", + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgb(15, 23, 42)", + "left": 16, + "top": 217, + "width": 358, + "height": 318 + } + ], + "actionTiles": [], + "bottomNavInfo": null, + "hasTopbarMenuButton": true, + "pageHeaderText": [ + "备用模块审批待办当前通过企业微信进入你好,Smoke Adminsearch搜索searchSmoke Admin", + "待我处理待处理审批。" + ], + "visibleTextStart": "备用模块\n\n审批待办\n\n当前通过企业微信进入\n你好,Smoke Admin\nsearch\nSmoke Admin\n待我处理\n\n待处理审批。\n\n待处理\n已通过\n已驳回\n已取消\n已跳过\n暂无数据\n第 1 / 1 页\n上一页\n下一页" + } + ], + "menu": { + "opened": true, + "error": null, + "screenshot": "artifacts/r99-mobile-feedback-audit/screenshots/reimbursements-menu-open.png", + "metrics": { + "width": 320, + "height": 844, + "viewportWidth": 390, + "viewportHeight": 844, + "widthRatio": 0.82, + "textLength": 211, + "textStart": "海音达工作台审批 报销 团队✕主导航优先处理今日工作与高频协同。home_app_logoPortalgroups团队event_available请假request_quote报销inventory_2资产article周报check_circle待办campaign公告workspaces项目备用模块默认收起,不干扰主路径按需展开shopping_cart采购申请flight差旅申请receipt_long票据中心" + } + } +} \ No newline at end of file diff --git a/artifacts/r99-mobile-feedback-audit/screenshots/leave-requests.png b/artifacts/r99-mobile-feedback-audit/screenshots/leave-requests.png new file mode 100644 index 00000000..97955c12 Binary files /dev/null and b/artifacts/r99-mobile-feedback-audit/screenshots/leave-requests.png differ diff --git a/artifacts/r99-mobile-feedback-audit/screenshots/mobile-home.png b/artifacts/r99-mobile-feedback-audit/screenshots/mobile-home.png new file mode 100644 index 00000000..4ba81c2b Binary files /dev/null and b/artifacts/r99-mobile-feedback-audit/screenshots/mobile-home.png differ diff --git a/artifacts/r99-mobile-feedback-audit/screenshots/mobile-me.png b/artifacts/r99-mobile-feedback-audit/screenshots/mobile-me.png new file mode 100644 index 00000000..67e87a17 Binary files /dev/null and b/artifacts/r99-mobile-feedback-audit/screenshots/mobile-me.png differ diff --git a/artifacts/r99-mobile-feedback-audit/screenshots/portal.png b/artifacts/r99-mobile-feedback-audit/screenshots/portal.png new file mode 100644 index 00000000..4ba81c2b Binary files /dev/null and b/artifacts/r99-mobile-feedback-audit/screenshots/portal.png differ diff --git a/artifacts/r99-mobile-feedback-audit/screenshots/reimbursements-menu-open.png b/artifacts/r99-mobile-feedback-audit/screenshots/reimbursements-menu-open.png new file mode 100644 index 00000000..1a6755f6 Binary files /dev/null and b/artifacts/r99-mobile-feedback-audit/screenshots/reimbursements-menu-open.png differ diff --git a/artifacts/r99-mobile-feedback-audit/screenshots/reimbursements.png b/artifacts/r99-mobile-feedback-audit/screenshots/reimbursements.png new file mode 100644 index 00000000..95c008a2 Binary files /dev/null and b/artifacts/r99-mobile-feedback-audit/screenshots/reimbursements.png differ diff --git a/artifacts/r99-mobile-feedback-audit/screenshots/workflow-tasks.png b/artifacts/r99-mobile-feedback-audit/screenshots/workflow-tasks.png new file mode 100644 index 00000000..43ee5df3 Binary files /dev/null and b/artifacts/r99-mobile-feedback-audit/screenshots/workflow-tasks.png differ diff --git a/client/src/components/mobile/MobileBottomNav.tsx b/client/src/components/mobile/MobileBottomNav.tsx index d026b240..12c49e38 100644 --- a/client/src/components/mobile/MobileBottomNav.tsx +++ b/client/src/components/mobile/MobileBottomNav.tsx @@ -65,7 +65,9 @@ export function MobileBottomNav() { className={({ isActive }) => cn( "touch-target flex flex-col items-center justify-center gap-1 rounded-2xl px-2 py-2 text-xs font-medium transition-colors", - isActive ? "bg-zinc-900 text-white shadow-sm" : "text-zinc-500 hover:bg-zinc-50 hover:text-zinc-900", + isActive + ? "bg-primary-50 text-primary ring-1 ring-primary-100" + : "text-zinc-500 hover:bg-zinc-50 hover:text-zinc-900", ) } > @@ -77,7 +79,7 @@ export function MobileBottomNav() { {badge} diff --git a/client/src/layouts/AppShellLayout.tsx b/client/src/layouts/AppShellLayout.tsx index d1adf7a6..a228e5e6 100644 --- a/client/src/layouts/AppShellLayout.tsx +++ b/client/src/layouts/AppShellLayout.tsx @@ -26,14 +26,12 @@ export function AppShellLayout() { return (
- + {isMobileRoute ? null : } -
-
- -
+
+ {isMobileRoute ? null : } -
+
diff --git a/client/src/pages/MobileLeavePage.tsx b/client/src/pages/MobileLeavePage.tsx new file mode 100644 index 00000000..0ed3234a --- /dev/null +++ b/client/src/pages/MobileLeavePage.tsx @@ -0,0 +1,440 @@ +import { useMemo, useRef, useState } from "react"; +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { toast } from "sonner"; +import { + createLeaveRequest, + fetchLeaveBalances, + fetchLeaveRequests, + fetchLeaveTypes, + patchLeaveRequest, + submitLeaveRequest, + type LeaveRequestItem, + type LeaveRequestStatus, + type LeaveSession, +} from "../api/leave"; +import { useAuth } from "../auth/AuthContext"; +import { hasPermission } from "../auth/permissions"; +import { PageHeader } from "../components/common/PageHeader"; +import { Button } from "../components/ui/button"; +import { Tabs, TabsList, TabsTrigger } from "../components/ui/tabs"; +import { PageScaffold } from "../components/patterns/PageScaffold"; +import { resolveErrorMessage } from "../lib/resolveErrorMessage"; + +type LeaveStatusFilter = "all" | LeaveRequestStatus; + +const STATUS_TABS: Array<{ value: LeaveStatusFilter; label: string }> = [ + { value: "all", label: "全部" }, + { value: "draft", label: "草稿" }, + { value: "reviewing", label: "审批中" }, + { value: "approved", label: "已通过" }, +]; + +const STATUS_LABEL: Record = { + draft: "草稿", + reviewing: "审批中", + approved: "已通过", + rejected: "已驳回", + cancelled: "已取消", +}; + +function todayDate() { + return new Date().toISOString().slice(0, 10); +} + +function formatSession(value: LeaveSession) { + return value === "am" ? "上午" : "下午"; +} + +function formatLeaveRange(item: LeaveRequestItem) { + return `${item.startDate} ${formatSession(item.startSession)} - ${item.endDate} ${formatSession(item.endSession)}`; +} + +function LeaveRecordCard({ + item, + isSaving, + onEdit, + onSubmit, +}: { + item: LeaveRequestItem; + isSaving: boolean; + onEdit: (item: LeaveRequestItem) => void; + onSubmit: (item: LeaveRequestItem) => void; +}) { + const canEdit = item.status === "draft" || item.status === "rejected"; + const canSubmit = item.status === "draft" || item.status === "rejected"; + + return ( +
+
+
+
{item.leaveType?.name ?? "请假"}
+
{formatLeaveRange(item)}
+
+ {STATUS_LABEL[item.status]} +
+ +
+
+
天数
+
{item.requestedDays}
+
+
+
附件
+
{item.attachment?.originalName ?? "-"}
+
+
+ + {item.reason ?

{item.reason}

: null} + + {canEdit || canSubmit ? ( +
+ {canEdit ? ( + + ) : null} + {canSubmit ? ( + + ) : null} +
+ ) : null} +
+ ); +} + +export function MobileLeavePage() { + const queryClient = useQueryClient(); + const { permissions } = useAuth(); + const canCreateLeave = hasPermission(permissions, "leave.create"); + const [statusFilter, setStatusFilter] = useState("all"); + const [editingItem, setEditingItem] = useState(null); + const [leaveTypeId, setLeaveTypeId] = useState(""); + const [startDate, setStartDate] = useState(todayDate); + const [endDate, setEndDate] = useState(todayDate); + const [startSession, setStartSession] = useState("am"); + const [endSession, setEndSession] = useState("pm"); + const [reason, setReason] = useState(""); + const [attachmentFile, setAttachmentFile] = useState(null); + const attachmentInputRef = useRef(null); + + const leaveTypesQuery = useQuery({ + queryKey: ["mobile", "leave", "types"], + queryFn: () => fetchLeaveTypes({ enabled: true }), + }); + + const balancesQuery = useQuery({ + queryKey: ["mobile", "leave", "balances"], + queryFn: () => fetchLeaveBalances(), + }); + + const requestsQuery = useQuery({ + queryKey: ["mobile", "leave", "requests", statusFilter], + queryFn: () => + fetchLeaveRequests({ + status: statusFilter === "all" ? undefined : statusFilter, + scope: "own", + page: 1, + pageSize: 20, + }), + }); + + const invalidateLeaveQueries = async () => { + await Promise.all([ + queryClient.invalidateQueries({ queryKey: ["mobile", "leave"] }), + queryClient.invalidateQueries({ queryKey: ["leave"] }), + ]); + }; + + const resetForm = () => { + setEditingItem(null); + setLeaveTypeId(""); + setStartDate(todayDate()); + setEndDate(todayDate()); + setStartSession("am"); + setEndSession("pm"); + setReason(""); + setAttachmentFile(null); + if (attachmentInputRef.current) { + attachmentInputRef.current.value = ""; + } + }; + + const createMutation = useMutation({ + mutationFn: () => + createLeaveRequest({ + leaveTypeId, + startDate, + endDate, + startSession, + endSession, + reason, + file: attachmentFile, + }), + onSuccess: async () => { + toast.success("请假草稿已创建"); + resetForm(); + await invalidateLeaveQueries(); + }, + onError: (error) => { + toast.error(resolveErrorMessage(error)); + }, + }); + + const updateMutation = useMutation({ + mutationFn: () => { + if (!editingItem) { + throw new Error("未选择请假单"); + } + return patchLeaveRequest(editingItem.id, { + leaveTypeId, + startDate, + endDate, + startSession, + endSession, + reason, + file: attachmentFile, + }); + }, + onSuccess: async () => { + toast.success("请假单已保存"); + resetForm(); + await invalidateLeaveQueries(); + }, + onError: (error) => { + toast.error(resolveErrorMessage(error)); + }, + }); + + const submitMutation = useMutation({ + mutationFn: (item: LeaveRequestItem) => submitLeaveRequest(item.id), + onSuccess: async () => { + toast.success("请假单已提交"); + await invalidateLeaveQueries(); + }, + onError: (error) => { + toast.error(resolveErrorMessage(error)); + }, + }); + + const leaveTypes = leaveTypesQuery.data?.items ?? []; + const records = requestsQuery.data?.items ?? []; + const balances = balancesQuery.data?.items ?? []; + const balanceSummary = useMemo( + () => + balances.reduce( + (summary, item) => ({ + available: summary.available + item.available, + reserved: summary.reserved + item.reserved, + used: summary.used + item.used, + }), + { available: 0, reserved: 0, used: 0 }, + ), + [balances], + ); + const isSaving = createMutation.isPending || updateMutation.isPending || submitMutation.isPending; + + const startEditing = (item: LeaveRequestItem) => { + setEditingItem(item); + setLeaveTypeId(item.leaveType?.id ?? ""); + setStartDate(item.startDate); + setEndDate(item.endDate); + setStartSession(item.startSession); + setEndSession(item.endSession); + setReason(item.reason ?? ""); + setAttachmentFile(null); + window.scrollTo({ top: 0, behavior: "smooth" }); + }; + + return ( + + + +
+
+
+
可用
+
{balanceSummary.available.toFixed(1)}
+
+
+
冻结
+
{balanceSummary.reserved.toFixed(1)}
+
+
+
已用
+
{balanceSummary.used.toFixed(1)}
+
+
+
+ +
+
+

{editingItem ? "编辑请假" : "新建请假"}

+ {editingItem ? ( + + ) : null} +
+ +
+ + +
+ + +
+ +
+ + +
+ +