# board-finance 页面数据来源排查 > 排查日期:2026-03-18 > 页面路径:pages/board-finance/board-finance > 排查人:Kiro AI > 状态:**全量内联 Mock,零 API 对接** ## 概览 | 分类 | 数量 | 说明 | |------|------|------| | Mock 数据(内联) | **120+ 个字段** | 全部财务指标写死在 `data` 对象中,无外部 mock 函数调用 | | 硬编码数据 | **19 个字段/配置** | 筛选选项、目录导航、指标解释、板块描述等 | | 已对接 API | **0 个接口** | 页面无任何 `request()` / `wx.request` 调用 | | 前端计算/派生 | **8 个字段** | UI 状态、滚动位置、配色等 | | 路由参数 | **0 个** | `onLoad` 未读取 `options` | | WXML 硬编码文案 | **3 处** | AI 洞察文案、平台服务费说明 | --- ## 一、Mock 数据(内联在 data 对象中) > 本页面 **不引用** `utils/mock-data.ts`(该文件虽定义了 `BoardFinanceData` 接口,但页面未 import)。 > 所有 mock 数据直接写死在 `Page({ data: { ... } })` 中,文件头注释标注 `TODO: 联调时替换 mock 数据为真实 API 调用`。 ### 1.1 经营一览 `overview` | 字段 | 类型 | 当前 Mock 值 | 联调替换 API | 备注 | |------|------|-------------|-------------|------| | `overview.occurrence` | string | `¥823,456` | 财务看板-经营一览 | 发生额/正价 | | `overview.occurrenceCompare` | string | `12.5%` | 同上(环比) | | | `overview.discount` | string | `-¥113,336` | 同上 | 总优惠 | | `overview.discountCompare` | string | `3.2%` | 同上(环比) | | | `overview.discountRate` | string | `13.8%` | 同上 | 优惠占比 | | `overview.discountRateCompare` | string | `1.5%` | 同上(环比) | | | `overview.confirmedRevenue` | string | `¥710,120` | 同上 | 成交/确认收入 | | `overview.confirmedCompare` | string | `8.7%` | 同上(环比) | | | `overview.cashIn` | string | `¥698,500` | 同上 | 实收/现金流入 | | `overview.cashInCompare` | string | `5.3%` | 同上(环比) | | | `overview.cashOut` | string | `¥472,300` | 同上 | 现金支出 | | `overview.cashOutCompare` | string | `2.1%` | 同上(环比) | | | `overview.cashBalance` | string | `¥226,200` | 同上 | 现金结余 | | `overview.cashBalanceCompare` | string | `15.2%` | 同上(环比) | | | `overview.balanceRate` | string | `32.4%` | 同上 | 结余率 | | `overview.balanceRateCompare` | string | `3.8%` | 同上(环比) | | ### 1.2 预收资产 `recharge` | 字段 | 类型 | 当前 Mock 值 | 联调替换 API | 备注 | |------|------|-------------|-------------|------| | `recharge.actualIncome` | string | `¥352,800` | 财务看板-预收资产 | 储值卡充值实收 | | `recharge.actualCompare` | string | `18.5%` | 同上(环比) | | | `recharge.firstCharge` | string | `¥188,500` | 同上 | 首充 | | `recharge.firstChargeCompare` | string | `12.3%` | 同上(环比) | | | `recharge.renewCharge` | string | `¥164,300` | 同上 | 续费 | | `recharge.renewChargeCompare` | string | `8.7%` | 同上(环比) | | | `recharge.consumed` | string | `¥238,200` | 同上 | 消耗 | | `recharge.consumedCompare` | string | `5.2%` | 同上(环比) | | | `recharge.cardBalance` | string | `¥642,600` | 同上 | 储值卡总余额 | | `recharge.cardBalanceCompare` | string | `11.4%` | 同上(环比) | | | `recharge.allCardBalance` | string | `¥586,500` | 同上 | 全类别会员卡余额合计 | | `recharge.allCardBalanceCompare` | string | `6.2%` | 同上(环比) | | #### 赠送卡明细 `recharge.giftRows`(3 行 × 7 字段 = 21 个值) | 行 | label | total | wine | table | coupon | 各字段均含 Compare | |----|-------|-------|------|-------|--------|-------------------| | 0 | 新增 | ¥108,600 | ¥43,200 | ¥54,100 | ¥11,300 | 9.8%/11.2%/8.5%/6.3% | | 1 | 消费 | ¥75,800 | ¥32,100 | ¥32,800 | ¥10,900 | 7.2%/8.1%/6.5%/5.8% | | 2 | 余额 | ¥243,900 | ¥118,500 | ¥109,200 | ¥16,200 | 4.5%/5.2%/3.8%/2.5% | > 联调 API:财务看板-预收资产-赠送卡统计 ### 1.3 应计收入确认 `revenue` #### 收入结构 `revenue.structureRows`(9 行 × 5~6 字段) | id | name | desc | amount | discount | booked | bookedCompare | isSub | |----|------|------|--------|----------|--------|---------------|-------| | `table` | 开台与包厢 | - | ¥358,600 | -¥45,200 | ¥313,400 | 9.2% | false | | `area-a` | A区 | - | ¥118,200 | -¥11,600 | ¥106,600 | 12.1% | true | | `area-b` | B区 | - | ¥95,800 | -¥11,200 | ¥84,600 | 8.5% | true | | `area-c` | C区 | - | ¥72,600 | -¥11,100 | ¥61,500 | 6.3% | true | | `team` | 团建区 | - | ¥48,200 | -¥6,800 | ¥41,400 | 5.8% | true | | `mahjong` | 麻将区 | - | ¥23,800 | -¥4,500 | ¥19,300 | -2.1% | true | | `coach-basic` | 助教 | 基础课 | ¥232,500 | - | ¥232,500 | 15.3% | false | | `coach-incentive` | 助教 | 激励课 | ¥112,800 | - | ¥112,800 | 8.2% | false | | `food` | 食品酒水 | - | ¥119,556 | -¥68,136 | ¥51,420 | 6.5% | false | > 联调 API:财务看板-应计收入-收入结构 #### 项目正价 `revenue.priceItems`(4 项) | name | value | compare | |------|-------|---------| | 开台消费 | ¥358,600 | 9.2% | | 酒水商品 | ¥186,420 | 18.5% | | 包厢费用 | ¥165,636 | 12.1% | | 助教服务 | ¥112,800 | 15.3% | #### 发生额合计 | 字段 | 值 | |------|-----| | `revenue.totalOccurrence` | ¥823,456 | | `revenue.totalOccurrenceCompare` | 12.5% | #### 优惠扣减 `revenue.discountItems`(4 项) | name | desc | value | compare | |------|------|-------|---------| | 团购优惠 | - | -¥56,200 | 5.2% | | 手动调整 + 大客户优惠 | - | -¥34,800 | 3.1% | | 赠送卡抵扣 | 台桌卡+酒水卡+抵用券 | -¥22,336 | 8.6% | | 其他优惠 | 免单+抹零 | -¥0 | (空) | #### 成交收入合计 | 字段 | 值 | |------|-----| | `revenue.confirmedTotal` | ¥710,120 | | `revenue.confirmedTotalCompare` | 8.7% | #### 收款渠道 `revenue.channelItems`(3 项) | name | desc | value | compare | |------|------|-------|---------| | 储值卡结算冲销 | - | ¥238,200 | 11.2% | | 现金/线上支付 | - | ¥345,800 | 7.8% | | 团购核销确认收入 | 团购成交价 | ¥126,120 | 5.3% | > 联调 API:财务看板-应计收入-损益链 ### 1.4 现金流入 `cashflow` #### 消费收入 `cashflow.consumeItems`(3 项) | name | desc | value | compare | isDown | |------|------|-------|---------|--------| | 纸币现金 | 柜台现金收款 | ¥85,600 | 12.3% | true | | 线上收款 | 微信/支付宝/刷卡 已扣除平台服务费 | ¥260,200 | 8.5% | false | | 团购平台 | 美团/抖音回款 已扣除平台服务费 | ¥126,120 | 15.2% | false | #### 充值收入 `cashflow.rechargeItems`(1 项) | name | desc | value | compare | |------|------|-------|---------| | 会员充值到账 | 首充/续费实收 | ¥352,800 | 18.5% | #### 合计 | 字段 | 值 | |------|-----| | `cashflow.total` | ¥824,720 | | `cashflow.totalCompare` | 10.2% | > 联调 API:财务看板-现金流入 ### 1.5 现金流出 `expense` #### 进货与运营 `expense.operationItems`(3 项) | name | value | compare | isDown | |------|-------|---------|--------| | 食品饮料 | ¥108,200 | 4.5% | false | | 耗材 | ¥21,850 | 2.1% | true | | 报销 | ¥10,920 | 6.8% | false | #### 固定支出 `expense.fixedItems`(4 项) | name | value | compare | isFlat | |------|-------|---------|--------| | 房租 | ¥125,000 | 持平 | true | | 水电 | ¥24,200 | 3.2% | false | | 物业 | ¥11,500 | 持平 | true | | 人员工资 | ¥112,000 | 持平 | true | #### 助教薪资 `expense.coachItems`(4 项) | name | value | compare | isDown | |------|-------|---------|--------| | 基础课分成 | ¥116,250 | 8.2% | false | | 激励课分成 | ¥23,840 | 5.6% | false | | 充值提成 | ¥12,640 | 12.3% | false | | 额外奖金 | ¥11,500 | 3.1% | true | #### 平台服务费 `expense.platformItems`(3 项) | name | value | compare | |------|-------|---------| | 汇来米 | ¥10,680 | 1.5% | | 美团 | ¥11,240 | 2.8% | | 抖音 | ¥10,580 | 3.5% | #### 合计 | 字段 | 值 | |------|-----| | `expense.total` | ¥600,400 | | `expense.totalCompare` | 2.1% | > 联调 API:财务看板-现金流出 ### 1.6 助教分析 `coachAnalysis` #### 基础课 `coachAnalysis.basic` | 字段 | 值 | 环比 | |------|-----|------| | totalPay | ¥232,500 | 15.3% | | totalShare | ¥116,250 | 15.3% | | avgHourly | ¥25/h | 4.2% | 明细行(4 行 × 7 字段): | level | pay | payCompare | share | shareCompare | hourly | hourlyCompare | 特殊标记 | |-------|-----|------------|-------|--------------|--------|---------------|----------| | 初级 | ¥68,600 | 12.5% | ¥34,300 | 12.5% | ¥20/h | 持平 | hourlyFlat | | 中级 | ¥82,400 | 18.2% | ¥41,200 | 18.2% | ¥25/h | 8.7% | | | 高级 | ¥57,800 | 14.6% | ¥28,900 | 14.6% | ¥30/h | 持平 | hourlyFlat | | 星级 | ¥23,700 | 3.2% ↓ | ¥11,850 | 3.2% ↓ | ¥35/h | 持平 | payDown, shareDown, hourlyFlat | #### 激励课 `coachAnalysis.incentive` | 字段 | 值 | 环比 | |------|-----|------| | totalPay | ¥112,800 | 8.2% | | totalShare | ¥33,840 | 8.2% | | avgHourly | ¥15/h | 2.1% | 明细行(4 行 × 7 字段): | level | pay | payCompare | share | shareCompare | hourly | hourlyCompare | 特殊标记 | |-------|-----|------------|-------|--------------|--------|---------------|----------| | 初级 | ¥32,400 | 6.8% | ¥9,720 | 6.8% | ¥12/h | 持平 | hourlyFlat | | 中级 | ¥38,600 | 10.5% | ¥11,580 | 10.5% | ¥15/h | 5.2% | | | 高级 | ¥28,200 | 7.3% | ¥8,460 | 7.3% | ¥18/h | 持平 | hourlyFlat | | 星级 | ¥13,600 | 2.1% ↓ | ¥4,080 | 2.1% ↓ | ¥22/h | 持平 | payDown, shareDown, hourlyFlat | > 联调 API:财务看板-助教分析 --- ## 二、硬编码数据 | 字段 | 当前值 | 应改为 | 风险 | 所在位置 | |------|--------|--------|------|----------| | `timeOptions` | 8 个固定选项(本月/上月/本周/上周/前3月/本季/上季/近6月) | 前端常量或后端配置 | **低** | data.timeOptions | | `areaOptions` | 7 个固定选项(全部/大厅/A区/B区/C区/麻将房/团建房) | **API 获取门店区域列表** | **高** | data.areaOptions | | `tocItems` | 6 个目录项(emoji + title + sectionId) | 前端常量(合理) | **低** | data.tocItems | | `tipContents` | 13 个指标解释(title + content) | 前端常量或后端配置 | **低** | 模块级常量 | | `_sectionDescs` | 6 条板块描述文案 | 前端常量(合理) | **低** | 实例属性 | | `selectedTime` | `'month'` | 默认值合理,但需与 API 参数对齐 | **中** | data.selectedTime | | `selectedTimeText` | `'本月'` | 同上 | **低** | data.selectedTimeText | | `selectedArea` | `'all'` | 默认值合理 | **低** | data.selectedArea | | `selectedAreaText` | `'全部区域'` | 同上 | **低** | data.selectedAreaText | | `compareEnabled` | `false` | 默认值合理 | **低** | data.compareEnabled | | `pageState` | `'normal'` | 联调后应初始为 `'loading'` | **高** | data.pageState | | Tab 导航 `data-tab` | `finance/customer/coach` 三个固定值 | 前端常量(合理) | **低** | WXML | | 导航路径 | `/pages/board-customer/board-customer` 等 | 前端常量(合理) | **低** | onTabChange | | `onPullDownRefresh` | `setTimeout 500ms` 后停止 | 联调后应触发数据刷新 | **高** | onPullDownRefresh | | AI 洞察文案 | 3 行硬编码文案(优惠率Top/差异最大/建议关注) | **API 返回或 AI 生成** | **高** | WXML 内联 | | 平台服务费说明 | "服务费在流水流入时,平台已经扣除。不产生支出流水。" | 前端常量(合理) | **低** | WXML 内联 | | 板块头描述文案 | 各板块 desc(如"快速了解收入与现金流的整体健康度") | 前端常量(合理) | **低** | WXML 内联 | | `filter-dropdown label` | `"本月"` / `"全部区域"` | 应绑定 `selectedTimeText` / `selectedAreaText` | **中** | WXML 属性 | | 激励课表格 | WXML 中只渲染了合计行,缺少明细行 `wx:for` | 需补齐明细行渲染 | **中** | WXML 板块6 | --- ## 三、已对接 API **无。** 页面当前零 API 调用。 唯一的 `import` 是 `getRandomAiColor`(纯前端工具函数,与数据无关)。 文件头注释明确标注: ``` // TODO: 联调时替换 mock 数据为真实 API 调用 ``` `onShow` 中也有注释: ``` // TODO: 联调时在此刷新看板数据 ``` --- ## 四、前端计算/派生数据 | 字段 | 计算逻辑 | 说明 | |------|----------|------| | `aiColorClass` | `getRandomAiColor().className` | onLoad 时随机选取 AI 配色 | | `stickyHeaderVisible` | 滚动方向 + scrollTop 阈值判断 | 下滑 >80px 显示,上滑隐藏 | | `stickyHeaderEmoji` / `Title` / `Desc` | 从 `tocItems[currentIdx]` + `_sectionDescs[idx]` 映射 | 吸顶头内容 | | `currentSectionIndex` | 滚动位置与 `_sectionTops` 数组比较 | 当前所在板块索引 | | `_sectionTops` | `wx.createSelectorQuery` 获取各 section 的 top | 缓存的 DOM 位置 | | `selectedTimeText` | 从 `timeOptions` 中按 `value` 查找 `text` | 筛选文案 | | `selectedAreaText` | 从 `areaOptions` 中按 `value` 查找 `text` | 筛选文案 | | `tocVisible` / `tipVisible` | 用户交互切换 | UI 状态 | --- ## 五、路由参数 **无。** `onLoad()` 未读取 `options` 参数。 --- ## 六、WXML 硬编码文案(业务数据) | 位置 | 内容 | 类型 | 处理建议 | |------|------|------|----------| | AI 洞察区域 第1行 | `优惠率Top:团购(5.2%) / 大客户(3.1%) / 赠送卡(2.5%)` | **业务数据** | 应从 API 获取 | | AI 洞察区域 第2行 | `差异最大:酒水(+18%) / 台桌(-5%) / 包厢(+12%)` | **业务数据** | 应从 API 获取 | | AI 洞察区域 第3行 | `建议关注:充值高但消耗低,会员活跃度需提升` | **业务数据** | 应从 API/AI 生成 | | 平台服务费说明 | `服务费在流水流入时,平台已经扣除。不产生支出流水。` | UI 说明文案 | 可保留为前端常量 | --- ## 七、联调 TODO ### 高优先级(P0 — 阻塞联调) - [ ] **设计并对接财务看板主 API**:一次请求返回全部板块数据(overview / recharge / revenue / cashflow / expense / coachAnalysis),或按板块拆分为 6 个接口 - [ ] **替换 `data` 中全部内联 mock**:将 120+ 个字段从 API 响应填充 - [ ] **`pageState` 初始值改为 `'loading'`**:onLoad/onShow 发起请求,成功→`'normal'`,失败→`'error'`,空数据→`'empty'` - [ ] **`onPullDownRefresh` 对接数据刷新**:替换当前的 `setTimeout 500ms` 空操作 - [ ] **`areaOptions` 从 API 获取**:当前硬编码的区域列表(大厅/A区/B区/C区/麻将房/团建房)应从门店配置接口动态获取 ### 中优先级(P1 — 影响数据准确性) - [ ] **AI 洞察文案从 API 获取**:当前 WXML 中 3 行硬编码的洞察文案应由后端计算或 AI 生成 - [ ] **`filter-dropdown` 的 `label` 属性绑定动态值**:当前硬编码 `"本月"` / `"全部区域"`,应改为 `"{{selectedTimeText}}"` / `"{{selectedAreaText}}"` - [ ] **激励课明细行补齐**:WXML 板块6 激励课部分只渲染了合计行,缺少 `wx:for="{{coachAnalysis.incentive.rows}}"` 的明细行循环 - [ ] **时间/区域筛选参数传递给 API**:`onTimeChange` / `onAreaChange` 变更后需重新请求数据 - [ ] **环比开关联动 API**:`toggleCompare` 切换后,若环比数据需要额外请求,需对接 ### 低优先级(P2 — 优化项) - [ ] **`tipContents` 指标解释考虑后端配置化**:当前 13 条解释硬编码在前端,如需动态更新可改为接口 - [ ] **`timeOptions` 考虑后端配置化**:如需支持自定义时间范围 - [ ] **加载态优化**:当前使用 toast 浮层,可考虑骨架屏 - [ ] **错误态重试**:`onRetry` 当前只是重置 `pageState`,需对接真实重新请求 ### 数据口径注意事项(参考 DWD-DOC 标杆文档) - [ ] **助教费用拆分**:API 返回的助教数据需区分 `assistant_pd_money`(陪打/基础课)和 `assistant_cx_money`(超休/激励课),禁止使用笼统的 `service_fee` - [ ] **储值卡字段命名**:API 应使用 `balance_pay`(总额)、`recharge_card_pay`(现金充值卡)、`gift_card_pay`(赠送卡),与 DWS 层一致 - [ ] **支付渠道恒等式**:`balance_amount = recharge_card_amount + gift_card_amount`,前端展示需校验 - [ ] **折扣互斥**:`discount_manual`(大客户优惠)与 `discount_other` 互斥,两者之和 = `adjust_amount` - [ ] **consume_money 禁止直接用于计算**:前端展示的发生额应使用 `items_sum` 口径