admin_new P0+P1 全批次合并 (84 commits) #2

Merged
direv merged 85 commits from develop into main 2026-08-07 11:27:17 +08:00
Showing only changes of commit 651694bb52 - Show all commits

View File

@ -137,6 +137,21 @@ async function load() {
} }
function onSearch() { page.value = 1; load() } function onSearch() { page.value = 1; load() }
function fmtDate(ts?: string | number | null) {
if (!ts) return '--'
let n: number
if (typeof ts === 'string') {
n = /^\d+$/.test(ts) ? Number(ts) : Date.parse(ts)
} else {
n = ts
}
if (!n || isNaN(n)) return String(ts)
const d = new Date(n)
if (isNaN(d.getTime())) return String(ts)
const pad = (x: number) => String(x).padStart(2, '0')
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`
}
function onReset() { function onReset() {
filters.orderNo = '' filters.orderNo = ''
filters.contractCode = '' filters.contractCode = ''
@ -208,13 +223,13 @@ onMounted(load)
{ type: 'selection', label: '', width: 50 }, { type: 'selection', label: '', width: 50 },
{ prop: 'orderNo', label: '订单号', width: 180 }, { prop: 'orderNo', label: '订单号', width: 180 },
{ prop: 'contractCode', label: '合同号', width: 160, slot: 'contractCode' }, { prop: 'contractCode', label: '合同号', width: 160, slot: 'contractCode' },
{ prop: 'enterpriseName', label: '供应商', minWidth: 180 }, { prop: 'enterpriseName', label: '供应商', minWidth: 180, slot: 'enterpriseName' },
{ prop: 'orderUserName', label: '采购方', minWidth: 160 }, { prop: 'orderUserName', label: '采购方', minWidth: 160, slot: 'orderUserName' },
{ prop: 'totalAmount', label: '金额', width: 130, align: 'right', slot: 'amount' }, { prop: 'totalAmount', label: '金额', width: 130, align: 'right', slot: 'amount' },
{ prop: 'totalNum', label: '数量', width: 80, align: 'center' }, { prop: 'totalNum', label: '数量', width: 80, align: 'center' },
{ prop: 'shippedNum', label: '已发', width: 80, align: 'center' }, { prop: 'shippedNum', label: '已发', width: 80, align: 'center' },
{ prop: 'status', label: '状态', width: 110, align: 'center', slot: 'status' }, { prop: 'status', label: '状态', width: 110, align: 'center', slot: 'status' },
{ prop: 'createDate', label: '下单时间', width: 170 }, { prop: 'createDate', label: '下单时间', width: 170, slot: 'time' },
{ label: '操作', width: 280, align: 'center', slot: 'action' } { label: '操作', width: 280, align: 'center', slot: 'action' }
]" ]"
:data="list" :data="list"
@ -235,6 +250,17 @@ onMounted(load)
<span v-if="row.contractCode">{{ row.contractCode }}</span> <span v-if="row.contractCode">{{ row.contractCode }}</span>
<span v-else class="rr-muted">--</span> <span v-else class="rr-muted">--</span>
</template> </template>
<template #enterpriseName="{ row }">
<span v-if="row.enterpriseName">{{ row.enterpriseName }}</span>
<span v-else class="rr-muted">--</span>
</template>
<template #orderUserName="{ row }">
<span v-if="row.orderUserName">{{ row.orderUserName }}</span>
<span v-else class="rr-muted">--</span>
</template>
<template #time="{ row }">
<span class="rr-time">{{ fmtDate(row.createDate) }}</span>
</template>
<template #amount="{ row }"> <template #amount="{ row }">
<span class="rr-amount">¥ {{ row.totalAmount.toLocaleString() }}</span> <span class="rr-amount">¥ {{ row.totalAmount.toLocaleString() }}</span>
</template> </template>
@ -271,4 +297,5 @@ onMounted(load)
.rr-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; } .rr-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; }
.rr-muted { color: var(--ink-3); } .rr-muted { color: var(--ink-3); }
.rr-amount { font-weight: 600; color: var(--primary); } .rr-amount { font-weight: 600; color: var(--primary); }
.rr-time { font-family: 'SF Mono', Menlo, Monaco, Consolas, monospace; font-size: 12px; color: var(--ink-2); }
</style> </style>