This commit is contained in:
2026-10-21 13:22:42 +08:00
parent eb0b0f85d1
commit 2333bd8bab
114 changed files with 1766 additions and 526 deletions
+66 -7
View File
@@ -217,6 +217,40 @@ const cssRoot = (css: string) => {
}
describe('approved Admin density ownership', () => {
it('separates shared list filters with the same 5px radius across density themes', () => {
const declarations = (source: string, selector: string) => {
const values: Record<string, string> = {}
cssRoot(source).walkRules(rule => {
if (rule.selector === selector) rule.walkDecls(decl => { values[decl.prop] = decl.value })
})
return values
}
const foundation = declarations(read('styles/foundation.css'), ':root')
expect(foundation['--cc-list-query-radius']).toBe('5px')
expect(foundation['--cc-list-query-gap']).toBe('16px')
expect(foundation['--cc-list-table-header-bg']).toBe('#edf4ff')
expect(foundation['--cc-list-table-header-text']).toBe('#284b78')
expect(declarations(shared, ':is(.admin-density, .admin-density-dialog, .admin-density-drawer) .el-table th.el-table__cell')).toEqual({
background: 'var(--cc-list-table-header-bg)',
color: 'var(--cc-list-table-header-text)',
})
const table = parse(read('shared/components/DataTable.vue')).descriptor.styles.map(style => style.content).join('\n')
expect(declarations(table, '.data-table > .data-table__filters')).toMatchObject({
'margin-bottom': 'var(--cc-list-query-gap, 16px)',
'border-radius': 'var(--cc-list-query-radius, 5px)',
border: '1px solid var(--list-card-border, var(--cc-border))',
})
const headerSelector = '.data-table > .data-table__toolbar:has(+ .data-table__filters)'
expect(declarations(table, headerSelector)['border-bottom']).toBe('0')
const fixture = document.createElement('div')
fixture.innerHTML = '<div class="data-table"><div id="with-filters" class="data-table__toolbar"></div><div class="data-table__filters"></div></div><div class="data-table"><div id="without-filters" class="data-table__toolbar"></div><div class="el-table"></div></div>'
expect(fixture.querySelector('#with-filters')!.matches(headerSelector)).toBe(true)
expect(fixture.querySelector('#without-filters')!.matches(headerSelector)).toBe(false)
expect(declarations(shared, '.admin-density .query-toolbar')['border-radius']).toBe('var(--cc-list-query-radius, 5px)')
expect(declarations(shared, '.admin-density .surface-panel')['border-radius']).toBe('var(--admin-radius, 4px)')
const query = parse(read('shared/components/QueryToolbar.vue')).descriptor.styles.map(style => style.content).join('\n')
expect(declarations(query, '.query-toolbar')['border-radius']).toBe('var(--cc-list-query-radius, 5px)')
})
it('keeps sailing cutoff controls compact and delegates editor borders to the shared opt-in', () => {
const view = parse(read('modules/sailing-calendar/pages/SailingCalendarView.vue')).descriptor
const rules = new Map<string, Record<string, string>>()
@@ -1024,7 +1058,23 @@ describe('approved Admin density ownership', () => {
rule.walkDecls(decl => { declarations[decl.prop] = decl.value })
rules.set(rule.selector, declarations)
})
expect(rules.get('.admin-density .el-table__body tr.el-table__row--striped td.el-table__cell')?.background).toBe('var(--admin-row-stripe)')
const stripeSelector = '.admin-density .el-table__body tr.el-table__row--striped:not(:where(:hover, .hover-row, .current-row)) > td.el-table__cell:not(:where(.hover-cell))'
expect(rules.get(stripeSelector)?.background).toBe('var(--admin-row-stripe)')
const stripeFixture = document.createElement('div')
stripeFixture.innerHTML = '<div class="admin-density"><table class="el-table__body"><tbody><tr class="el-table__row--striped"><td class="el-table__cell"></td></tr></tbody></table></div>'
const row = stripeFixture.querySelector('tr')!
const cell = stripeFixture.querySelector('td')!
expect(cell.matches(stripeSelector)).toBe(true)
for (const state of ['hover-row', 'current-row']) {
row.classList.add(state)
expect(cell.matches(stripeSelector)).toBe(false)
row.classList.remove(state)
}
cell.classList.add('hover-cell')
expect(cell.matches(stripeSelector)).toBe(false)
cell.classList.remove('hover-cell')
cell.innerHTML = '<table class="el-table__body"><tbody><tr><td class="el-table__cell"></td></tr></tbody></table>'
expect(cell.querySelector('td')!.matches(stripeSelector)).toBe(false)
expect(rules.get('.admin-density-dialog .el-descriptions__label.el-descriptions__cell')?.background).toBe('var(--admin-label-bg)')
expect(rules.get('.admin-density-dialog .el-form--inline .el-form-item__label')?.['align-items']).toBe('center')
expect(rules.get('.admin-density-dialog.el-dialog.admin-density-workspace > .el-dialog__body')?.flex).toBe('1 1 auto')
@@ -1215,12 +1265,14 @@ describe('approved Admin density ownership', () => {
expect(detail).not.toContain('.fee-form-grid')
expect(read('modules/overseas-warehouse/components/WarehouseTransferReviewDialog.vue')).toContain('data-tone="source"')
})
it('keeps new dispatch settings and resources on shared continuous sections with body scrolling', () => {
it('keeps dispatch planning on shared sections and cargo selection in the three-column board', () => {
const source = read('modules/overseas-warehouse/components/SmartDispatchDialog.vue')
const board = read('modules/overseas-warehouse/components/SmartDispatchCargoBoard.vue')
const fields = read('modules/overseas-warehouse/components/DispatchResourceFields.vue')
expect(source).toContain('fullscreenable')
expect(source).toContain('density-table density-table--editable dispatch-create-table')
expect(source).toContain('<DispatchResourceFields continuous')
expect(source).not.toContain('<DispatchResourceFields')
expect(source).toContain('<SmartDispatchCargoBoard')
expect(source).toContain('label-position="left" label-width="130px"')
expect(source).toContain('class="density-dialog-section dispatch-setup"')
expect(source).toContain('class="density-dialog-section dispatch-draft-toolbar"')
@@ -1228,9 +1280,12 @@ describe('approved Admin density ownership', () => {
expect(source).not.toContain('data-tone="work"')
expect(source).not.toContain('data-tone="summary"')
expect(source).not.toContain('data-tone="source"')
expect(source).toContain('class="cargo-workspace"')
expect(source).toContain('<LineClampText')
expect(source).toContain('class="dispatch-source-group"')
expect(board).toContain('class="dispatch-cargo-board"')
expect(board).toContain('class="density-table cargo-board-table"')
expect(board).toContain('aria-label="待排订单"')
expect(board).toContain('aria-label="托盘明细"')
expect(board).toContain('aria-label="车辆装载"')
expect(board).toContain('class="cargo-board-group-details"')
expect(source).not.toContain('height="420"')
expect(source).not.toContain('class="create-grid"')
expect(fields).toContain('continuous?: boolean')
@@ -1240,6 +1295,7 @@ describe('approved Admin density ownership', () => {
})
it('keeps dispatch workflow, delivery arrangements and owned evidence on shared compact sections', () => {
const workflow = read('modules/overseas-warehouse/components/DispatchWorkflowDialog.vue')
const cargo = read('modules/overseas-warehouse/components/SmartDispatchExistingCargo.vue')
const arrangement = read('modules/overseas-warehouse/components/DispatchArrangeFields.vue')
const evidence = read('modules/overseas-warehouse/components/DispatchEvidenceFiles.vue')
expect(workflow).toContain(':fullscreenable="width !== \'560px\'"')
@@ -1247,7 +1303,10 @@ describe('approved Admin density ownership', () => {
expect(workflow).toContain('density-table density-table--editable workflow-editor-table')
expect(workflow).toContain('label-position="left" label-width="130px"')
expect(workflow).toContain(':confirm-loading="busy || uploadingEvidence"')
expect(workflow).toContain('<LineClampText')
expect(workflow).not.toContain('aria-label="候选货物分页"')
expect(cargo).toContain('class="existing-cargo density-dialog-sections"')
expect(cargo).toContain('<SmartDispatchCargoBoard')
expect(cargo).toContain('aria-label="当前排车货物"')
for (const tone of ['source', 'work']) {
expect(workflow).toContain(`data-tone="${tone}"`)
expect(arrangement).toContain(`data-tone="${tone}"`)