| | |
| | | const { columns, columnChecks, data, getData, loading, scrollX } = useNaiveTable({ |
| | | api: () => fetchGetRollerSampleDataList(searchParams.value), |
| | | transform: (response: any) => response.data || [], |
| | | columns: () => ([ |
| | | { |
| | | key: 'index', |
| | | title: '序号', |
| | | align: 'center', |
| | | width: 64, |
| | | render: (_: Api.Qa.RollerData, index: number) => index + 1 |
| | | }, |
| | | { |
| | | key: 'time', |
| | | title: '时间', |
| | | align: 'center', |
| | | minWidth: 160 |
| | | }, |
| | | { |
| | | key: 'equNo', |
| | | title: '设备', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: (row: Api.Qa.RollerData) => equNoMap[row.equNo] || row.equNo |
| | | }, |
| | | { |
| | | key: 'shift', |
| | | title: '班次', |
| | | align: 'center', |
| | | minWidth: 80, |
| | | render: (row: Api.Qa.RollerData) => <NTag type="info">{shiftMap[row.shift] || row.shift}</NTag> |
| | | }, |
| | | { |
| | | key: 'qty', |
| | | title: '卷接机产量(千支)', |
| | | align: 'center', |
| | | minWidth: 100, |
| | | render: (row: Api.Qa.RollerData) => Number(row.qty ?? 0).toFixed(1) |
| | | }, |
| | | { |
| | | key: 'qtyBox', |
| | | title: '卷接机产量(箱)', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | const v = Number(row.qty ?? 0) / 50; |
| | | return v.toFixed(1); |
| | | columns: () => |
| | | [ |
| | | { |
| | | key: 'index', |
| | | title: '序号', |
| | | align: 'center', |
| | | width: 64, |
| | | render: (_: Api.Qa.RollerData, index: number) => index + 1 |
| | | }, |
| | | { |
| | | key: 'time', |
| | | title: '时间', |
| | | align: 'center', |
| | | minWidth: 160 |
| | | }, |
| | | { |
| | | key: 'equNo', |
| | | title: '设备', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: (row: Api.Qa.RollerData) => equNoMap[row.equNo] || row.equNo |
| | | }, |
| | | { |
| | | key: 'shift', |
| | | title: '班次', |
| | | align: 'center', |
| | | minWidth: 80, |
| | | render: (row: Api.Qa.RollerData) => <NTag type="info">{shiftMap[row.shift] || row.shift}</NTag> |
| | | }, |
| | | { |
| | | key: 'qty', |
| | | title: '卷接机产量(千支)', |
| | | align: 'center', |
| | | minWidth: 100, |
| | | render: (row: Api.Qa.RollerData) => Number(row.qty ?? 0).toFixed(1) |
| | | }, |
| | | { |
| | | key: 'qtyBox', |
| | | title: '卷接机产量(箱)', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | const v = Number(row.qty ?? 0) / 50; |
| | | return v.toFixed(1); |
| | | } |
| | | }, |
| | | { |
| | | key: 'tsQtyTiao', |
| | | title: '提升机产量(条)', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | if (row.tsQty === null || row.tsQty === undefined) return '-'; |
| | | return Number(row.tsQty).toFixed(1); |
| | | } |
| | | }, |
| | | { |
| | | key: 'tsQtyBox', |
| | | title: '提升机产量(箱)', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | if (row.tsQty === null || row.tsQty === undefined) return '-'; |
| | | const v = Number(row.tsQty) / 250; |
| | | return v.toFixed(1); |
| | | } |
| | | }, |
| | | { |
| | | key: 'packerQty', |
| | | title: '包装机产量(小包)', |
| | | align: 'center', |
| | | minWidth: 140, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | if (row.packerQty === null || row.packerQty === undefined) return '-'; |
| | | return Number(row.packerQty).toFixed(1); |
| | | } |
| | | }, |
| | | { |
| | | key: 'packerQtyBox', |
| | | title: '包装机产量(箱)', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | if (row.packerQty === null || row.packerQty === undefined) return '-'; |
| | | const v = Number(row.packerQty) / 10 / 250; |
| | | return v.toFixed(1); |
| | | } |
| | | }, |
| | | { |
| | | key: 'lvbangVal', |
| | | title: '滤棒消耗(支)', |
| | | align: 'center', |
| | | minWidth: 140, |
| | | render: (row: Api.Qa.RollerData) => Number(row.lvbangVal ?? 0).toFixed(1) |
| | | }, |
| | | { |
| | | key: 'lvbangWan', |
| | | title: '滤棒消耗(万支)', |
| | | align: 'center', |
| | | minWidth: 140, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | const v = Number(row.lvbangVal ?? 0) / 10000; |
| | | return v.toFixed(1); |
| | | } |
| | | }, |
| | | { |
| | | key: 'danhao', |
| | | title: '滤棒单耗(万支/箱)', |
| | | align: 'center', |
| | | minWidth: 180, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | const qtyBox = Number(row.qty ?? 0) / 50; |
| | | if (!qtyBox) return '-'; |
| | | const v = Number(row.lvbangVal ?? 0) / 10000 / qtyBox; |
| | | return v.toFixed(1); |
| | | } |
| | | } |
| | | }, |
| | | { |
| | | key: 'tsQtyTiao', |
| | | title: '提升机产量(条)', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | if (row.tsQty === null || row.tsQty === undefined) return '-'; |
| | | return Number(row.tsQty).toFixed(1); |
| | | } |
| | | }, |
| | | { |
| | | key: 'tsQtyBox', |
| | | title: '提升机产量(箱)', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | if (row.tsQty === null || row.tsQty === undefined) return '-'; |
| | | const v = Number(row.tsQty) / 250; |
| | | return v.toFixed(1); |
| | | } |
| | | }, |
| | | { |
| | | key: 'packerQty', |
| | | title: '包装机产量(小包)', |
| | | align: 'center', |
| | | minWidth: 140, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | if (row.packerQty === null || row.packerQty === undefined) return '-'; |
| | | return Number(row.packerQty).toFixed(1); |
| | | } |
| | | }, |
| | | { |
| | | key: 'packerQtyBox', |
| | | title: '包装机产量(箱)', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | if (row.packerQty === null || row.packerQty === undefined) return '-'; |
| | | const v = Number(row.packerQty) / 10 / 250; |
| | | return v.toFixed(1); |
| | | } |
| | | }, |
| | | { |
| | | key: 'lvbangVal', |
| | | title: '滤棒消耗(支)', |
| | | align: 'center', |
| | | minWidth: 140, |
| | | render: (row: Api.Qa.RollerData) => Number(row.lvbangVal ?? 0).toFixed(1) |
| | | }, |
| | | { |
| | | key: 'lvbangWan', |
| | | title: '滤棒消耗(万支)', |
| | | align: 'center', |
| | | minWidth: 140, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | const v = Number(row.lvbangVal ?? 0) / 10000; |
| | | return v.toFixed(1); |
| | | } |
| | | }, |
| | | { |
| | | key: 'danhao', |
| | | title: '滤棒单耗(万支/箱)', |
| | | align: 'center', |
| | | minWidth: 180, |
| | | render: (row: Api.Qa.RollerData) => { |
| | | const qtyBox = Number(row.qty ?? 0) / 50; |
| | | if (!qtyBox) return '-'; |
| | | const v = (Number(row.lvbangVal ?? 0) / 10000) / qtyBox; |
| | | return v.toFixed(1); |
| | | } |
| | | } |
| | | ] as any) |
| | | ] as any |
| | | }); |
| | | |
| | | async function handleExport() { |
| | |
| | | |
| | | <template> |
| | | <div class="h-full min-h-500px flex-col-stretch gap-16px overflow-hidden lt-sm:overflow-auto"> |
| | | <RollerDataSearch |
| | | v-model:model="searchParams" |
| | | @search="getData" |
| | | /> |
| | | <RollerDataSearch v-model:model="searchParams" @search="getData" /> |
| | | <NCard |
| | | v-if="!showTable" |
| | | title="卷接机分析趋势图" |
| | | :bordered="false" |
| | | size="small" |
| | | class="sm:flex-1-hidden card-wrapper flex flex-col" |
| | | content-style="flex: 1; min-height: 0; overflow: hidden;" |
| | | > |
| | | v-if="!showTable" |
| | | title="卷接机分析趋势图" |
| | | :bordered="false" |
| | | size="small" |
| | | class="flex flex-col card-wrapper sm:flex-1-hidden" |
| | | content-style="flex: 1; min-height: 0; overflow: hidden;" |
| | | > |
| | | <template #header-extra> |
| | | <NButton size="small" @click="showTable = true"> |
| | | <template #icon> |
| | |
| | | </template> |
| | | <RollerDataLineChart :data="(data as any)" class="h-full" /> |
| | | </NCard> |
| | | <NCard |
| | | v-else |
| | | title="数据详情" |
| | | :bordered="false" |
| | | size="small" |
| | | class="sm:flex-1-hidden card-wrapper" |
| | | > |
| | | <NCard v-else title="数据详情" :bordered="false" size="small" class="card-wrapper sm:flex-1-hidden"> |
| | | <template #header-extra> |
| | | <TableHeaderOperation |
| | | v-model:columns="columnChecks" |