import { readFileSync } from 'node:fs' import { resolve } from 'node:path' import { describe, expect, it } from 'vitest' const page = (name: string) => readFileSync(resolve(process.cwd(), 'src/modules/overseas-warehouse/pages', name), 'utf8') const component = (name: string) => readFileSync(resolve(process.cwd(), 'src/modules/overseas-warehouse/components', name), 'utf8') describe('overseas warehouse 1920px layout acceptance', () => { it('keeps action columns first and wide enough for every visible action', () => { const widths: Record = { 'LastMileOrdersView.vue': 330, 'InboundOrdersView.vue': 300, // Three compact RowActions plus the overflow menu; long business numbers use the saved space. 'DispatchesView.vue': 260, 'OutboundsView.vue': 180, 'DeliveryOrdersView.vue': 300, 'RelabelOrdersView.vue': 180, 'PalletsView.vue': 180, 'InventoryView.vue': 110, } for (const [name, width] of Object.entries(widths)) { const source = page(name) const columns = source.slice(source.indexOf('const columns'), source.indexOf('async function', source.indexOf('const columns'))) expect(columns).toMatch(new RegExp(`key: 'actions',[\\s\\S]*?label: '操作',[\\s\\S]*?width: ${width},[\\s\\S]*?fixed: 'left'`)) expect(columns.indexOf("key: 'actions'")).toBeLessThan(columns.indexOf("label:", columns.indexOf("key: 'actions'") + 20)) } }) it('keeps all inbound-order row actions on one line', () => { const source = page('InboundOrdersView.vue') expect(source).toContain('