assertStringContainsString('账户余额总览', $source); $this->assertStringContainsString('期初余额合计', $source); $this->assertStringContainsString('收入合计', $source); $this->assertStringContainsString('支出合计', $source); $this->assertStringContainsString('期末余额合计', $source); $this->assertStringContainsString('期初余额 + 收入合计 - 支出合计', $source); $this->assertStringContainsString('@submit.prevent="applyTimeRange"', $source); $this->assertStringContainsString('assertStringContainsString('发生时间', $source); $this->assertStringContainsString('查询中…', $source); $this->assertStringContainsString('start: this.queryRange.start', $source); $this->assertStringContainsString('end: this.queryRange.end', $source); $this->assertStringContainsString('结束日期不能早于开始日期', $source); $this->assertStringContainsString('暂不展示不完整合计', $source); $this->assertStringContainsString(':aria-busy="loading', $source); $this->assertStringContainsString('(单位:万元)', $source); $this->assertStringContainsString('value: this.moneyWan(this.summary.opening_balance)', $source); $this->assertStringContainsString('value: this.moneyWan(this.summary.income)', $source); $this->assertStringContainsString('value: this.moneyWan(this.summary.expense)', $source); $this->assertStringContainsString('value: this.moneyWan(this.summary.balance)', $source); $this->assertStringContainsString('}万`;', $source); $this->assertStringContainsString(':title="card.title"', $source); $this->assertStringContainsString('查看明细', $source); $this->assertStringContainsString('openDetails(card.key)', $source); $this->assertStringContainsString('detailTitle', $source); $this->assertStringContainsString('收入合计', $source); $this->assertStringContainsString('支出合计', $source); $this->assertStringContainsString("{ key: 'platform', label: '平台' }", $source); $this->assertStringContainsString("{ key: 'store', label: '店铺' }", $source); $this->assertStringContainsString("{ key: 'bill_item', label: '账单项目' }", $source); $this->assertStringContainsString("{ key: 'store', label: '店铺名称' }", $source); $this->assertStringContainsString('income-detail', $source); $this->assertStringContainsString('expense-detail', $source); $this->assertStringContainsString('balance-detail', $source); $this->assertStringContainsString('balance-store-detail', $source); $this->assertStringContainsString("detailFlow === 'balance'", $source); $this->assertStringContainsString('期末余额(万元)', $source); $this->assertStringContainsString("detailFlow === 'balance' ? '店铺名称' : '店铺'", $source); $this->assertStringContainsString('fetchStoreBalanceDetails', $source); $this->assertStringContainsString('该店铺缺少期初余额', $source); $this->assertStringContainsString('当前筛选合计(万元)', $source); } public function test_overview_tab_is_placed_before_taobao_alipay_navigation(): void { $navigation = file_get_contents(__DIR__ . '/../../../config/business_navigation.php'); $this->assertLessThan( strpos($navigation, "['slug' => 'taobao-alipay', 'title' => '淘系支付宝账户']"), strpos($navigation, "['slug' => 'balance-overview', 'title' => '账户余额总览']"), ); } public function test_overview_contains_four_month_closing_summary_and_comparison(): void { $source = file_get_contents( __DIR__ . '/../../../resources/assets/js/components/business/StoreReceivingBalanceOverview.vue' ); $this->assertStringContainsString('月度期末余额汇总', $source); $this->assertStringContainsString('平台账户', $source); $this->assertStringContainsString('monthly-closing-table', $source); $this->assertStringContainsString('2026 年 7-10 月', $source); $this->assertStringContainsString("'各平台'", $source); $this->assertStringContainsString('金额单位:万元', $source); $this->assertStringContainsString('monthlyBalanceWan', $source); $this->assertStringContainsString('signedMoneyWan', $source); $this->assertStringContainsString('Number(value) / 10000', $source); $this->assertStringContainsString('amount / 10000', $source); $this->assertStringContainsString('环比口径:2026年10月期末余额 − 2026年9月期末余额', $source); $this->assertStringContainsString('monthlyClosingRows', $source); $this->assertStringContainsString('fetchMonthlyClosing', $source); $this->assertStringContainsString('店铺汇总', $source); $this->assertStringContainsString('monthly-closing-view-switch', $source); $this->assertStringContainsString('selectMonthlyClosingView', $source); $this->assertStringContainsString('fetchMonthlyClosingStores', $source); $this->assertStringContainsString('monthlyStoreRows', $source); $this->assertStringContainsString('monthly-closing-store-table', $source); $this->assertStringContainsString('店铺期末余额 = 期初余额 + 收入 - 支出', $source); $this->assertStringContainsString('缺少期初时显示“—”', $source); } }