feat: 增加一次合格率表格导出

This commit is contained in:
XingCheng3
2026-05-31 16:36:14 +08:00
parent a7ed5f86ac
commit df8c0da645

View File

@@ -60,8 +60,11 @@
<div class="panel table-panel"> <div class="panel table-panel">
<div class="panel-title-row"> <div class="panel-title-row">
<div class="panel-title">今日产品列表</div> <div class="panel-title">今日产品列表</div>
<div class="panel-actions">
<el-button :loading="exportLoading" :disabled="exportLoading" type="warning" plain size="mini" icon="el-icon-download" @click="exportLineProductList(line)">导出</el-button>
<el-checkbox v-model="lineDataMap[line.key].onlyNG" size="mini" @change="$forceUpdate()">只看不合格</el-checkbox> <el-checkbox v-model="lineDataMap[line.key].onlyNG" size="mini" @change="$forceUpdate()">只看不合格</el-checkbox>
</div> </div>
</div>
<div class="panel-subtitle"> <div class="panel-subtitle">
合格 <span class="count-ok">{{ getPassCount(line.key) }}</span> 合格 <span class="count-ok">{{ getPassCount(line.key) }}</span>
&nbsp;/&nbsp; &nbsp;/&nbsp;
@@ -151,8 +154,11 @@
<div class="panel table-panel"> <div class="panel table-panel">
<div class="panel-title-row"> <div class="panel-title-row">
<div class="panel-title">产品明细</div> <div class="panel-title">产品明细</div>
<div class="panel-actions">
<el-button :loading="exportLoading" :disabled="exportLoading" type="warning" plain size="mini" icon="el-icon-download" @click="exportStationProductList">导出</el-button>
<el-checkbox v-model="stationOnlyNG" size="mini">只看不合格</el-checkbox> <el-checkbox v-model="stationOnlyNG" size="mini">只看不合格</el-checkbox>
</div> </div>
</div>
<el-table <el-table
:data="filteredStationProductList" :data="filteredStationProductList"
:header-cell-style="{ background: '#f6f8fb', color: '#314257' }" :header-cell-style="{ background: '#f6f8fb', color: '#314257' }"
@@ -200,6 +206,7 @@ export default {
activeTab: 'line', activeTab: 'line',
queryDate: '', queryDate: '',
loading: false, loading: false,
exportLoading: false,
pendingCount: 0, pendingCount: 0,
// 整线Tab // 整线Tab
lineConfigs: [ lineConfigs: [
@@ -361,6 +368,18 @@ export default {
} }
return list return list
}, },
exportLineProductList(line) {
if (this.getFilteredProductList(line.key).length === 0) {
this.$message.warning('暂无数据')
return
}
const param = [['查询日期', this.queryDate], ['SearchType', line.searchType]]
const exportData = JSON.parse(this.CreateData('2005', '一次合格率_产品列表', param))
exportData.exportFileName = `${line.title}一次合格率产品列表_`
exportData.exportColumns = '发动机号=产品编号,产品型号=型号,上线时间,下线时间'
const Data = JSON.stringify(exportData)
this.runExcelExport(Data, 'exportLoading')
},
formatTime(val) { formatTime(val) {
if (!val) return '' if (!val) return ''
const d = new Date(val) const d = new Date(val)
@@ -405,6 +424,23 @@ export default {
this.stationData = { total: 0, pass: 0, fail: 0, rate: 0, productList: [] } this.stationData = { total: 0, pass: 0, fail: 0, rate: 0, productList: [] }
}).finally(() => { this.loading = false }) }).finally(() => { this.loading = false })
}, },
exportStationProductList() {
const stationList = this.buildStationList()
if (!this.startStation || !this.endStation || !stationList) {
this.$message.warning('请选择有效的工位范围')
return
}
if (this.filteredStationProductList.length === 0) {
this.$message.warning('暂无数据')
return
}
const param = [['查询日期', this.queryDate], ['工位号列表', stationList]]
const exportData = JSON.parse(this.CreateData('2005', '一次合格率_工位合格率', param))
exportData.exportFileName = '工位一次合格率产品明细_'
exportData.exportColumns = '发动机号=产品编号,产品型号=型号,上线时间,下线时间'
const Data = JSON.stringify(exportData)
this.runExcelExport(Data, 'exportLoading')
},
// ========== 不合格详情 ========== // ========== 不合格详情 ==========
handleExpandChange(row, expandedRows) { handleExpandChange(row, expandedRows) {
@@ -707,6 +743,7 @@ export default {
} }
.panel-title { font-size: 15px; font-weight: 700; color: #233445; } .panel-title { font-size: 15px; font-weight: 700; color: #233445; }
.panel-title-row { display: flex; justify-content: space-between; align-items: center; } .panel-title-row { display: flex; justify-content: space-between; align-items: center; }
.panel-actions { display: flex; align-items: center; gap: 10px; }
.panel-subtitle { margin-top: 4px; margin-bottom: 10px; font-size: 12px; color: #6f7f8f; } .panel-subtitle { margin-top: 4px; margin-bottom: 10px; font-size: 12px; color: #6f7f8f; }
.bar-canvas { width: 100%; min-height: 250px; } .bar-canvas { width: 100%; min-height: 250px; }