Appearance
小程序记账「写操作」扩展说明
Web 过账弹窗实现约定见
.cursor/skills/frontend-acc-posting-dialog/SKILL.md;Agent 总索引见仓库根AGENTS.md。
目标:在 与 Web 同一套 acc HTTP 接口 的前提下,逐步支持手机端 录入 / 改单,并与现有 RBAC + 站点范围 校验一致。
一、已实现(M1)
| 能力 | 小程序页面 | 后端接口 | 说明 |
|---|---|---|---|
| 新建原料入库 | pages/recorder/inbound-create | POST /acc/inbound/post | 合格/次品分行;包装件数按商品 packRules 换算合格数量;保存即过账。 |
- 入口:入库单列表 FAB、工作台
role-menus、种子mobile_recorder_inbound_create。 - 详情冲红:
POST /acc/inbound/void(须btn_acc_inbound_write);出库详情冲红另须btn_acc_production_wip_correct。 - 入库明细子页
inbound-line-form:合格/次品、包装件数(acc-pack-spec)。
二、已实现(M2 出库)
| 能力 | 小程序页面 | 后端接口 | 说明 |
|---|---|---|---|
| 新建成品出库 | pages/recorder/outbound-create | POST /acc/outbound/post | 客户 → 成品 → 可选批次 → 数量/单价弹窗;同一批次不可重复;行金额三位小数;列表展示合计。 |
- 入口:出库单列表 FAB、种子
mobile_recorder_outbound_create。 - 与 Web 对齐:
POST /acc/production/available-batches、productionOutputId、可出量校验。 - 弹层:
InboundSearchPickPopup(客户/成品/批次)、OutboundLineQtyPricePopup(数量/单价)。 - 部分退货:
outbound-detail→ 部分退货 →outbound-return;POST /acc/outbound/return/post(须btn_acc_outbound_write,不需生产负责人角色)。 - 详情展示每行已退/可退及退货记录;冲红按钮仅在
orderStatus=normal且具备冲红权限时显示(已修正原posted误判)。
三、生产单新建 / 在制(M3,部分已有)
范围定稿(产品 / 实施必读):miniapp-wip-scope.md — 小程序支持在制 开单 + 登记审核 + 现场报工 + 关账;冲红 以 Web 为准。
| 能力 | 小程序页面 | 说明 |
|---|---|---|
| 一次过账生产 | pages/recorder/production-create | 与 Web 同一 POST /acc/production/post |
| 在制开单 | production-wip-open | POST /acc/production/wip/open |
| 在制关账 | production-wip-close | POST /acc/production/wip/close |
| 现场报工 | production-wip-op-add | POST /acc/production/wip/op/add |
| 在制报工(登记链路) | 工人 labor-submission-*;审核 labor-submission-review* | 有审核时优先;见范围文档 §3 |
已做:生产详情(Web / 小程序)可带 productionOutputId 跳转出库;小程序详情展示工序报工子表;production-create 配方/工序加载已抽 useProductionCreateCatalog。
子页门禁(已接 useMiniappPageGate):inbound-create、outbound-create、production-create、production-wip-open、production-wip-close、production-wip-op-add、labour-view、labor-submission-review、settlement-create、经理结算/发放/报表、工人记工/工资条列表。
| 接口 | 用途 |
|---|---|
POST /acc/production/post | 一次过账生产单(原料 + 成品产出 + 记工)。 |
POST /acc/production/wip/open 等 | 在制多阶段报工、关账、冲红等。 |
复杂度:记工与 成品工序 强相关。建议先做 极简一次过账 或 在制报工 单场景。
出库预填:Web 生产详情产出行点「出库」打开过账弹窗;小程序生产详情点「去出库」进入 outbound-create?goodsId=&productionOutputId=&qty=。
三.1、经理端 — 新建工资结算(M4)
| 能力 | 小程序页面 | 后端接口 | 说明 |
|---|---|---|---|
| 新建结算单 | pages/manager/settlement-create | POST /acc/settlement/post | 与 Web SettlementPostDialog 一致:labor-pending/page 勾选记工 + 可选出库筛选 + 加减项 |
- 入口:结算列表 FAB(须
btn_acc_settlement_write)、经理菜单「新建结算」、PagePath.manager.settlementCreate。 - 待结算记工:
POST /acc/settlement/labor-pending/page;可选出库:POST /acc/outbound/page+pendingLaborWorkerId。 - 逻辑:
composables/manager/useSettlementCreate.ts。 - 列表:
settlement.vue支持状态 Tab、工人下拉、结算日期区间筛选(与 WebAccSettlementListView一致);FAB 新建。
M4 验收
- 自动化:发版前根目录
pnpm run check:release-acceptance(含预发 STRICT 校验 + 月结 SQL;须本地 DB)。 - 手工用例表:见 acc-release-acceptance.md §4(签字存档,非仅文档勾选)。
三.2、经理报表与月结巡检
| 能力 | 页面 | 说明 |
|---|---|---|
| 站点概览 | pages/manager/reports(Tab,默认) | POST /acc/home/summary:本月入/出库单数、商品/往来、近 N 天出库销售与毛利(柱图)、成品产出(柱图)、记工/结算概况、原料/成品库存摘要 |
| 记工汇总 | 同上 Tab | 按员工、近 12 个月、工种汇总待结算/已进结算单金额 |
| 月结巡检 | 同上 Tab(ADMIN) | POST /acc/ops/month-close-integrity;与 Web /acc/ops、脚本 check:month-close 同语义 |
- 站点概览读权限:
menu_acc_home或mobile_manager_reports/ 结算·出库菜单(见assert-acc-home-read.ts)。 - 工人选择:
InboundSearchPickPopup+settlement-worker-search(keyword,非size:500)。 - 非 ADMIN 仅见「记工汇总」「站点概览」Tab。
写操作补齐(入/出库)
| 能力 | 页面 | 说明 |
|---|---|---|
| 新建过账 | inbound-create / outbound-create | M1 / M2 |
| 单据冲红 | inbound-detail / outbound-detail | 与 Web 同一 void 接口;须对应 btn_acc_*_write |
| 生产冲红 | — | 仍在 Web(btn_acc_production_wip_correct),见 miniapp-wip-scope.md |
列表页提示已改为「详情可冲红」;生产整单/报工冲红仍以 Web 为准。
四、权限与入口
- API 错误文案:业务页
catch统一getMiniappApiErrorMessage(err, fallback)(miniapp/src/utils/api-error.ts);网关 403PERMISSION_DENIED会附带requiredPermissions说明。http.ts在 reject 前已formatGatewayErrorMessage,勿再手写e instanceof Error ? e.message。 - 过账须
btn_acc_inbound_write/btn_acc_outbound_write/btn_acc_production_write/btn_acc_settlement_write(ADMIN放行)。 - 入库/出库冲红与过账共用对应模块写权限。
- 矩阵与种子:见 permission-matrix.md、permission-code-conventions.md。
- 子页:
useMiniappPageGate+miniapp/src/utils/acc-permissions.ts(miniRole仍用于 tab,不能替代btn_*/mobile_*)。 - 改 seed / 角色后用户须 重新登录。
五、测试清单
M1 入库
- [x] 无站点 / 未登录不可进
inbound-create。 - [x] 选品仅原料;误入成品应被后端拒绝。
- [x] 多行金额与 Web 过账一致;明细区展示进货合计。
- [x] 详情页冲红(具备写权限且单状态为已过账)。
M2 出库
- [x] 无站点不可进
outbound-create。 - [x] 同一
productionOutputId不可添加两行。 - [x] 数量不超过批次可出量;单价三位小数;销售金额合计。
- [x] 详情页冲红(写权限 + 生产冲红按钮)。
- [x] 会话过期:
consumeSessionExpiredAndRelaunch正常。 - [x] 记录员生产开单/过账:原料、配方加载失败时
getMiniappApiErrorMessage+ Toast(含PERMISSION_DENIED)。 - [x] 权限按钮态:
useAccPermissions经POST /sys/me/auth-claims刷新;App.onShow合并最新permissionCodes。
六、个人收支(首页「常用」)
与 站点记账(Acc) 不同:个人账本走 POST /sys/bookkeeping/*,按 sys_users.id 隔离。
| 首页入口 | 路径与参数 |
|---|---|
| 记一笔 | pages/bookkeeping/home?mode=record |
| 账本管理 | pages/bookkeeping/home?mode=manage |
| 周 / 月 / 年统计 | pages/bookkeeping/stats?period=week / month / year |
入口:miniapp/src/constants/mobile-shell-local.ts。