feat(退火模块): 新增退火报表页面并优化现有功能
新增退火报表页面,支持按时间、炉号等条件查询统计信息 优化退火计划和性能页面,增加当前钢卷号和逻辑库区筛选 改进KLPTable浮层组件,支持嵌套属性访问和更智能的定位 重构退火计划控制页面布局和交互,提升用户体验
This commit is contained in:
@@ -21,6 +21,12 @@
|
||||
<el-form-item label="入场钢卷号" prop="enterCoilNo">
|
||||
<el-input v-model="queryParams.enterCoilNo" placeholder="请输入入场钢卷号" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="当前钢卷号" prop="currentCoilNo">
|
||||
<el-input v-model="queryParams.currentCoilNo" placeholder="请输入当前钢卷号" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="逻辑库区" prop="warehouseId">
|
||||
<WarehouseSelect v-model="queryParams.warehouseId" placeholder="请选择" clearable filterable />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">查询</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
@@ -57,16 +63,31 @@
|
||||
<el-table-column label="入场钢卷号" prop="enterCoilNo" align="center" />
|
||||
<el-table-column label="当前钢卷号" prop="currentCoilNo" align="center" />
|
||||
<el-table-column label="重量(t)" prop="netWeight" align="center" />
|
||||
<el-table-column label="操作" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="danger" icon="el-icon-alarm-clock" :plain="scope.row.abnormalCount == 0" size="mini"
|
||||
@click="handleAddAbnormal(scope.row)" :loading="buttonLoading">
|
||||
缺陷明细
|
||||
<span v-if="scope.row.abnormalCount > 0">({{ scope.row.abnormalCount }})</span>
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-dialog title="异常管理" :visible.sync="exceptionDialogVisible" fullscreen>
|
||||
<exception-manager :coilId="currentCoilId"></exception-manager>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getAnnealPerformance } from "@/api/wms/annealPerformance";
|
||||
import { listAnnealFurnace } from "@/api/wms/annealFurnace";
|
||||
import ProductInfo from "@/components/KLPService/Renderer/ProductInfo";
|
||||
import RawMaterialInfo from "@/components/KLPService/Renderer/RawMaterialInfo";
|
||||
import CoilNo from "@/components/KLPService/Renderer/CoilNo.vue";
|
||||
import { getAnnealPerformance } from "@/api/wms/annealPerformance"
|
||||
import { listAnnealFurnace } from "@/api/wms/annealFurnace"
|
||||
import ProductInfo from "@/components/KLPService/Renderer/ProductInfo"
|
||||
import RawMaterialInfo from "@/components/KLPService/Renderer/RawMaterialInfo"
|
||||
import CoilNo from "@/components/KLPService/Renderer/CoilNo.vue"
|
||||
import ExceptionManager from "@/views/wms/coil/components/ExceptionManager";
|
||||
import WarehouseSelect from "@/components/KLPService/WarehouseSelect/index.vue"
|
||||
|
||||
export default {
|
||||
name: "AnnealPerformance",
|
||||
@@ -83,12 +104,17 @@ export default {
|
||||
summary: {},
|
||||
detailList: [],
|
||||
furnaceOptions: [],
|
||||
buttonLoading: false,
|
||||
exceptionDialogVisible: false,
|
||||
currentCoilId: null,
|
||||
};
|
||||
},
|
||||
components: {
|
||||
ProductInfo,
|
||||
RawMaterialInfo,
|
||||
CoilNo,
|
||||
ExceptionManager,
|
||||
WarehouseSelect,
|
||||
},
|
||||
created() {
|
||||
this.loadFurnaces();
|
||||
@@ -100,6 +126,15 @@ export default {
|
||||
this.furnaceOptions = response.rows || [];
|
||||
});
|
||||
},
|
||||
handleAddAbnormal(row) {
|
||||
this.currentCoilId = row.coilId;
|
||||
if (!row.coilId) {
|
||||
this.$message.error('请先选择钢卷');
|
||||
return;
|
||||
}
|
||||
// 显示弹窗
|
||||
this.exceptionDialogVisible = true;
|
||||
},
|
||||
handleQuery() {
|
||||
this.loading = true;
|
||||
getAnnealPerformance(this.queryParams).then(response => {
|
||||
|
||||
147
klp-ui/src/views/wms/anneal/performance/report.vue
Normal file
147
klp-ui/src/views/wms/anneal/performance/report.vue
Normal file
@@ -0,0 +1,147 @@
|
||||
<template>
|
||||
<div class="app-container" v-loading="loading">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="90px">
|
||||
<el-form-item label="开始时间" prop="startTime">
|
||||
<el-date-picker v-model="queryParams.startTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
|
||||
placeholder="选择开始时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="结束时间" prop="endTime">
|
||||
<el-date-picker v-model="queryParams.endTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
|
||||
placeholder="选择结束时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="目标炉" prop="targetFurnaceId">
|
||||
<el-select v-model="queryParams.targetFurnaceId" placeholder="请选择" clearable filterable>
|
||||
<el-option v-for="item in furnaceOptions" :key="item.furnaceId" :label="item.furnaceName"
|
||||
:value="item.furnaceId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="计划号" prop="planNo">
|
||||
<el-input v-model="queryParams.planNo" placeholder="请输入计划号" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="入场钢卷号" prop="enterCoilNo">
|
||||
<el-input v-model="queryParams.enterCoilNo" placeholder="请输入入场钢卷号" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="当前钢卷号" prop="currentCoilNo">
|
||||
<el-input v-model="queryParams.currentCoilNo" placeholder="请输入当前钢卷号" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="逻辑库区" prop="warehouseId">
|
||||
<WarehouseSelect v-model="queryParams.warehouseId" placeholder="请选择" clearable filterable />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">查询</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
<el-button icon="el-icon-download" size="mini" @click="exportData">导出</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-descriptions title="统计信息" :column="3" class="summary-block" border>
|
||||
<el-descriptions-item label="计划数量">{{ summary.planCount || 0 }}</el-descriptions-item>
|
||||
<el-descriptions-item label="钢卷数量">{{ summary.coilCount || 0 }}</el-descriptions-item>
|
||||
<el-descriptions-item label="总重量">{{ summary.totalWeight || 0 }} t</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<el-table :data="detailList" border height="calc(100vh - 330px)">
|
||||
<el-table-column label="计划号" prop="planNo" align="center" />
|
||||
<el-table-column label="目标炉" prop="targetFurnaceName" align="center" />
|
||||
<el-table-column label="开始时间" prop="actualStartTime" align="center" width="160">
|
||||
<template slot-scope="scope">
|
||||
{{ parseTime(scope.row.actualStartTime, '{y}-{m}-{d} {h}:{i}') }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="结束时间" prop="endTime" align="center" width="160">
|
||||
<template slot-scope="scope">
|
||||
{{ parseTime(scope.row.endTime, '{y}-{m}-{d} {h}:{i}') }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="产品类型" align="center" width="250">
|
||||
<template slot-scope="scope">
|
||||
<ProductInfo v-if="scope.row.itemType == 'product'" :product="scope.row" />
|
||||
<RawMaterialInfo v-else-if="scope.row.itemType === 'raw_material'" :material="scope.row" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="逻辑库区" prop="warehouseName" align="center" />
|
||||
<el-table-column label="入场钢卷号" prop="enterCoilNo" align="center" />
|
||||
<el-table-column label="当前钢卷号" prop="currentCoilNo" align="center" />
|
||||
<el-table-column label="重量(t)" prop="netWeight" align="center" />
|
||||
</el-table>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getAnnealPerformance } from "@/api/wms/annealPerformance";
|
||||
import { listAnnealFurnace } from "@/api/wms/annealFurnace";
|
||||
import ProductInfo from "@/components/KLPService/Renderer/ProductInfo";
|
||||
import RawMaterialInfo from "@/components/KLPService/Renderer/RawMaterialInfo";
|
||||
import CoilNo from "@/components/KLPService/Renderer/CoilNo.vue";
|
||||
import WarehouseSelect from "@/components/KLPService/WarehouseSelect/index.vue";
|
||||
|
||||
export default {
|
||||
name: "AnnealPerformance",
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
queryParams: {
|
||||
startTime: undefined,
|
||||
endTime: undefined,
|
||||
targetFurnaceId: undefined,
|
||||
planNo: undefined,
|
||||
enterCoilNo: undefined,
|
||||
},
|
||||
summary: {},
|
||||
detailList: [],
|
||||
furnaceOptions: [],
|
||||
};
|
||||
},
|
||||
components: {
|
||||
ProductInfo,
|
||||
RawMaterialInfo,
|
||||
CoilNo,
|
||||
WarehouseSelect,
|
||||
},
|
||||
created() {
|
||||
this.loadFurnaces();
|
||||
this.handleQuery();
|
||||
},
|
||||
methods: {
|
||||
loadFurnaces() {
|
||||
listAnnealFurnace({ pageNum: 1, pageSize: 999, status: 1 }).then(response => {
|
||||
this.furnaceOptions = response.rows || [];
|
||||
});
|
||||
},
|
||||
handleQuery() {
|
||||
this.loading = true;
|
||||
getAnnealPerformance(this.queryParams).then(response => {
|
||||
const data = response.data || {};
|
||||
this.summary = data.summary || {};
|
||||
this.detailList = data.details.map(item => {
|
||||
return item.coils?.map(coil => {
|
||||
return {
|
||||
...item,
|
||||
...coil,
|
||||
}
|
||||
}) || []
|
||||
}).flat();
|
||||
console.log(this.detailList);
|
||||
this.loading = false;
|
||||
}).catch(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
exportData() {
|
||||
this.download('/wms/materialCoil/exportAnneal', {
|
||||
coilIds: this.detailList.map(item => item.coilId).join(','),
|
||||
}, `annealPerformance_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.summary-block {
|
||||
margin: 12px 0 16px;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user