fix(job-query,query-tool): align txn history column order with field_contracts

Replace dynamic Object.keys(row) column derivation with explicit display
column lists matching field_contracts.json txn_table definition, ensuring
consistent column order across job-query and query-tool transaction tables.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
egg
2026-02-23 18:16:28 +08:00
parent 80a39c6145
commit fd78c02b2d
2 changed files with 16 additions and 28 deletions

View File

@@ -52,6 +52,16 @@ function buildStatusTone(status) {
return 'neutral'; return 'neutral';
} }
const JOBS_DISPLAY_COLUMNS = Object.freeze([
'RESOURCENAME', 'JOBID', 'JOBSTATUS', 'JOBMODELNAME',
'CREATEDATE', 'COMPLETEDATE', 'CAUSECODENAME', 'REPAIRCODENAME',
]);
const TXN_DISPLAY_COLUMNS = Object.freeze([
'TXNDATE', 'FROMJOBSTATUS', 'JOBSTATUS', 'STAGENAME',
'CAUSECODENAME', 'REPAIRCODENAME', 'USER_NAME', 'COMMENTS',
]);
export function useJobQueryData() { export function useJobQueryData() {
const resources = ref([]); const resources = ref([]);
const loadingResources = ref(false); const loadingResources = ref(false);
@@ -89,13 +99,13 @@ export function useJobQueryData() {
const selectedResourceCount = computed(() => filters.resourceIds.length); const selectedResourceCount = computed(() => filters.resourceIds.length);
const jobsColumns = computed(() => { const jobsColumns = computed(() => {
const row = jobs.value[0] || {}; const available = new Set(Object.keys(jobs.value[0] || {}));
return Object.keys(row); return JOBS_DISPLAY_COLUMNS.filter((col) => available.has(col));
}); });
const txnColumns = computed(() => { const txnColumns = computed(() => {
const row = txnRows.value[0] || {}; const available = new Set(Object.keys(txnRows.value[0] || {}));
return Object.keys(row); return TXN_DISPLAY_COLUMNS.filter((col) => available.has(col));
}); });
function resetDateRangeToLast90Days() { function resetDateRangeToLast90Days() {

View File

@@ -47,24 +47,14 @@ const JOB_COLUMN_PRIORITY = Object.freeze([
]); ]);
const TXN_COLUMN_PRIORITY = Object.freeze([ const TXN_COLUMN_PRIORITY = Object.freeze([
'JOBTXNHISTORYID',
'JOBID',
'TXNDATE', 'TXNDATE',
'FROMJOBSTATUS', 'FROMJOBSTATUS',
'JOBSTATUS', 'JOBSTATUS',
'STAGENAME', 'STAGENAME',
'TOSTAGENAME',
'CAUSECODENAME', 'CAUSECODENAME',
'REPAIRCODENAME', 'REPAIRCODENAME',
'SYMPTOMCODENAME',
'USER_EMPNO',
'USER_NAME', 'USER_NAME',
'EMP_EMPNO',
'EMP_NAME',
'COMMENTS', 'COMMENTS',
'CDONAME',
'JOBMODELNAME',
'JOBORDERNAME',
]); ]);
const selectedJobId = ref(''); const selectedJobId = ref('');
@@ -73,20 +63,8 @@ const loadingTxn = ref(false);
const txnError = ref(''); const txnError = ref('');
function buildOrderedColumns(rows, preferred) { function buildOrderedColumns(rows, preferred) {
const keys = Object.keys(rows?.[0] || {}); const keys = new Set(Object.keys(rows?.[0] || {}));
if (keys.length === 0) { return preferred.filter((column) => keys.has(column));
return [...preferred];
}
const keySet = new Set(keys);
const ordered = preferred.filter((column) => keySet.has(column));
const orderedSet = new Set(ordered);
keys.forEach((column) => {
if (!orderedSet.has(column)) {
ordered.push(column);
}
});
return ordered;
} }
const sortedRows = computed(() => { const sortedRows = computed(() => {