2026-08-17 13:24:55 +08:00
|
|
|
import { readFileSync } from 'node:fs'
|
|
|
|
|
import { resolve } from 'node:path'
|
|
|
|
|
import { describe, expect, it } from 'vitest'
|
|
|
|
|
|
|
|
|
|
const source = readFileSync(resolve(process.cwd(), 'src/modules/finance/pages/FinanceFormalSettlementPage.vue'), 'utf8')
|
|
|
|
|
|
|
|
|
|
describe('Finance formal settlement desktop presentation', () => {
|
|
|
|
|
it('keeps settlement totals and list actions in one compact toolbar', () => {
|
|
|
|
|
expect(source).toContain('<section class="settlement-list-toolbar" aria-label="结算汇总与列表操作">')
|
|
|
|
|
expect(source).toContain('<div class="settlement-summary" aria-label="结算汇总">')
|
|
|
|
|
expect(source).toContain('<div class="settlement-list-actions">')
|
|
|
|
|
expect(source).toContain('.settlement-list-toolbar { display: flex; min-height: 54px;')
|
|
|
|
|
expect(source).not.toContain('<template #toolbar-actions>')
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('uses a continuous detail layout with locally scrollable wide tables', () => {
|
|
|
|
|
expect(source).toContain('<DetailPageLayout v-else-if="detailMode" class="settlement-detail-page surface-panel"')
|
|
|
|
|
expect(source).toContain('class="settlement-detail-content"')
|
|
|
|
|
expect(source).toContain('class="detail-table-scroll"')
|
|
|
|
|
expect(source).toContain(':deep(.detail-table-scroll .el-table) { min-width: 920px; }')
|
|
|
|
|
expect(source).not.toContain('class="settlement-detail-card"')
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('presents fee sources and revisions as finance business labels', () => {
|
|
|
|
|
expect(source).toContain('financeSourceTypeLabel(scope.row.sourceType)')
|
|
|
|
|
expect(source).not.toContain('prop="sourceVersion" label="来源版本"')
|
|
|
|
|
expect(source).toContain("VOID: '作废'")
|
|
|
|
|
expect(source).toContain("REOPEN: '重开'")
|
|
|
|
|
expect(source).toContain("RECEIPT: '收款登记'")
|
|
|
|
|
expect(source).toContain("PAYMENT: '付款登记'")
|
|
|
|
|
expect(source).toContain('settlementRevisionActionLabel(scope.row.action)')
|
2026-08-17 16:45:46 +08:00
|
|
|
expect(source).toContain('operatorDisplayName(scope.row.createdByName)')
|
|
|
|
|
expect(source).toContain('operatorDisplayName(scope.row.operatorName)')
|
|
|
|
|
expect(source).toContain("'名称数据缺失'")
|
2026-08-17 13:24:55 +08:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('keeps receipt and payment dialogs readable at desktop width', () => {
|
|
|
|
|
expect(source.match(/width="min\(760px, 94vw\)"/g)).toHaveLength(2)
|
|
|
|
|
expect(source).toContain('.partial-summary { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr));')
|
|
|
|
|
expect(source).toContain('.settlement-operation-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));')
|
|
|
|
|
expect(source).toContain('<el-alert v-if="receiptValidationError"')
|
|
|
|
|
expect(source).toContain('<el-alert v-if="receiptError"')
|
|
|
|
|
})
|
|
|
|
|
})
|