feat: 新增钢卷相关字段并优化页面功能

1.  在可选列配置中新增合同号、原料厚度字段,调整原料材质字段位置
2.  优化库存预警页面操作按钮权限逻辑,移除多余的状态判断
3.  新增钢卷异常管理弹窗组件,重构异常页面结构
4.  优化报表页面的分页加载和数据展示逻辑
5.  调整表单布局和代码格式,优化用户体验
This commit is contained in:
2026-06-23 09:57:29 +08:00
parent 29d99a4f8d
commit 2d008f64ea
9 changed files with 195 additions and 936 deletions

View File

@@ -189,7 +189,6 @@ export const optionalColumns = [
{ label: '实际库区', value: 'actualWarehouseName' },
{ label: '质量状态', value: 'qualityStatus' },
{ label: '切边要求', value: 'trimmingRequirement' },
{ label: '原料材质', value: 'packingStatus' },
{ label: '包装要求', value: 'packagingRequirement' },
{ label: '产品类型', value: 'itemId' },
{ label: '品名', value: 'itemName' },
@@ -225,4 +224,7 @@ export const optionalColumns = [
{ label: '发货配卷时间', value: 'bindDeliveryTime' },
{ label: '发货时间', value: 'exportTime' },
{ label: '业务员', value: 'saleName' },
{ label: '合同号', value: 'contractNo' },
{ label: '原料材质', value: 'packingStatus' },
{ label: '原料厚度', value: 'rawMaterialThickness' }
]

View File

@@ -1,337 +0,0 @@
<template>
<div class="app-container">
<el-row :gutter="10">
<el-col :span="6" v-loading="coilLoading">
<div>
<div style="display: flex; align-items: center; gap: 8px;">
<el-input v-model="coilQuery.currentCoilNo" placeholder="请输入钢卷号" @change="getCoilList"></el-input>
<el-button @click="handleAdd" icon="el-icon-plus"></el-button>
</div>
<div>
<CoilList :coilList="coilList" @click="handleCoilClick" />
</div>
<pagination v-show="coilTotal > 0" :total="coilTotal" :page.sync="coilQuery.pageNum"
:limit.sync="coilQuery.pageSize" @pagination="getCoilList" />
</div>
<!-- 左侧为有异常的钢卷列表 -->
<!-- <el-table :data="coilList" border stripe @row-click="handleCoilClick">
<el-table-column label="入场卷号" prop="entryCoilNo" />
<el-table-column label="钢卷号" prop="currentCoilNo" />
<el-table-column label="逻辑库区" prop="warehouseName" />
</el-table> -->
</el-col>
<el-col :span="18" v-if="currentCoilId">
<!-- 右侧为钢卷异常明细 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
label-width="68px">
<el-form-item label="位置" prop="position">
<el-select v-model="queryParams.position" placeholder="请选择位置" clearable>
<el-option v-for="dict in dict.type.coil_abnormal_position" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="缺陷代码" prop="defectCode">
<el-select v-model="queryParams.defectCode" placeholder="请选择缺陷代码" clearable>
<el-option v-for="dict in dict.type.coil_abnormal_code" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="程度" prop="degree">
<el-select v-model="queryParams.degree" placeholder="请选择程度" clearable>
<el-option v-for="dict in dict.type.coil_abnormal_degree" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</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 type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddWithCoil">新增</el-button>
</el-form-item>
</el-form>
<abnormal-table ref="abnormalTable" :list="coilAbnormalList"
:editable="true" :show-coil="false" :coil-info="currentCoil"
@delete="handleDelete" @update="handleUpdate">
</abnormal-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" @pagination="getList" />
</el-col>
<el-col :span="18" v-else>
<el-empty description="请选择钢卷后查看异常明细" />
</el-col>
</el-row>
<!-- 添加或修改钢卷异常信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<abnormal-form ref="abnormalForm" v-model="form" :show-coil-selector="showCoilSelector"></abnormal-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 异常判级对话框 -->
<el-dialog :title="title" :visible.sync="judgeOpen" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="判级" prop="judgeLevel">
<el-radio-group v-model="form.judgeLevel">
<el-radio-button v-for="dict in dict.type.coil_abnormal_level" :key="dict.value" :label="dict.value">{{
dict.label }}</el-radio-button>
</el-radio-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitJudge"> </el-button>
<el-button @click="judgeOpen = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listCoilAbnormal, getCoilAbnormal, delCoilAbnormal, addCoilAbnormal, updateCoilAbnormal, judgeAbnormalLevel } from "@/api/wms/coilAbnormal";
import { listMaterialCoil } from "@/api/wms/coil";
import CoilSelector from '@/components/CoilSelector'
import CoilNo from '@/components/KLPService/Renderer/CoilNo'
import CoilList from "../components/CoilList.vue";
import AbnormalForm from '../components/AbnormalForm';
import AbnormalTable from '../components/AbnormalTable';
export default {
name: "CoilAbnormal",
dicts: ['coil_abnormal_code', 'coil_abnormal_position', 'coil_abnormal_degree', 'coil_abnormal_level'],
components: {
CoilSelector,
CoilNo,
CoilList,
AbnormalForm,
AbnormalTable
},
data() {
return {
coilList: [],
currentCoil: {},
showCoilSelector: true,
coilQuery: {
dataType: 1,
// 筛选异常数量大于等于1的
minAbnormalCount: 1,
pageNum: 1,
pageSize: 10,
currentCoilNo: undefined,
},
coilTotal: 0,
coilLoading: false,
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 钢卷异常信息表格数据
coilAbnormalList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
coilId: undefined,
position: undefined,
lengthCoord: undefined,
defectCode: undefined,
degree: undefined,
judgeLevel: undefined,
judgeBy: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
},
judgeOpen: false,
};
},
computed: {
currentCoilId() {
return this.currentCoil?.coilId || undefined
}
},
mounted() {
this.getCoilList();
},
methods: {
/** 查询钢卷异常信息列表 */
getList() {
this.loading = true;
listCoilAbnormal(this.queryParams).then(response => {
this.coilAbnormalList = response.rows;
this.total = response.total;
this.loading = false;
});
},
/** 查询钢卷列表 */
getCoilList() {
this.coilLoading = true;
listMaterialCoil(this.coilQuery).then(response => {
this.coilList = response.rows;
this.coilTotal = response.total;
this.coilLoading = false;
});
},
/** 点击钢卷列表行 */
handleCoilClick(row) {
this.currentCoil = row;
this.queryParams.coilId = row.coilId;
this.handleQuery();
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
abnormalId: undefined,
coilId: this.$route.query.coilId,
position: undefined,
lengthCoord: undefined,
defectCode: undefined,
degree: undefined,
judgeLevel: undefined,
judgeBy: undefined,
judgeTime: undefined,
remark: undefined,
delFlag: undefined,
createTime: undefined,
createBy: undefined,
updateTime: undefined,
updateBy: undefined
};
if (this.$refs.abnormalForm) {
this.$refs.abnormalForm.resetFields();
}
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.abnormalId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.showCoilSelector = true;
this.title = "添加钢卷异常信息";
},
handleAddWithCoil() {
this.reset();
this.open = true;
this.form.coilId = this.currentCoilId;
this.showCoilSelector = false;
this.title = "添加钢卷异常信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const abnormalId = row.abnormalId || this.ids
getCoilAbnormal(abnormalId).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改钢卷异常信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["abnormalForm"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.abnormalId != null) {
updateCoilAbnormal({ ...this.form, length: this.form.endPosition - this.form.startPosition }).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addCoilAbnormal({ ...this.form, length: this.form.endPosition - this.form.startPosition }).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const abnormalIds = row.abnormalId || this.ids;
this.$modal.confirm('是否确认删除钢卷异常信息编号为"' + abnormalIds + '"的数据项?').then(() => {
this.loading = true;
return delCoilAbnormal(abnormalIds);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('wms/coilAbnormal/export', {
...this.queryParams
}, `coilAbnormal_${new Date().getTime()}.xlsx`)
},
/** 异常判级按钮操作 */
handleJudge(row) {
this.reset();
this.form = row
this.judgeOpen = true;
this.title = "异常判级";
},
/** 提交异常判级按钮操作 */
submitJudge() {
this.buttonLoading = true;
judgeAbnormalLevel(this.form).then(response => {
this.$modal.msgSuccess("判级成功");
this.judgeOpen = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
};
</script>

View File

@@ -1,337 +0,0 @@
<template>
<div class="app-container">
<el-row :gutter="10">
<el-col :span="6" v-loading="coilLoading">
<div>
<div style="display: flex; align-items: center; gap: 8px;">
<el-input v-model="coilQuery.currentCoilNo" placeholder="请输入钢卷号" @change="getCoilList"></el-input>
<el-button @click="handleAdd" icon="el-icon-plus"></el-button>
</div>
<div>
<CoilList :coilList="coilList" @click="handleCoilClick" />
</div>
<pagination v-show="coilTotal > 0" :total="coilTotal" :page.sync="coilQuery.pageNum"
:limit.sync="coilQuery.pageSize" @pagination="getCoilList" />
</div>
<!-- 左侧为有异常的钢卷列表 -->
<!-- <el-table :data="coilList" border stripe @row-click="handleCoilClick">
<el-table-column label="入场卷号" prop="entryCoilNo" />
<el-table-column label="钢卷号" prop="currentCoilNo" />
<el-table-column label="逻辑库区" prop="warehouseName" />
</el-table> -->
</el-col>
<el-col :span="18" v-if="currentCoilId">
<!-- 右侧为钢卷异常明细 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
label-width="68px">
<el-form-item label="位置" prop="position">
<el-select v-model="queryParams.position" placeholder="请选择位置" clearable>
<el-option v-for="dict in dict.type.coil_abnormal_position" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="缺陷代码" prop="defectCode">
<el-select v-model="queryParams.defectCode" placeholder="请选择缺陷代码" clearable>
<el-option v-for="dict in dict.type.coil_abnormal_code" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="程度" prop="degree">
<el-select v-model="queryParams.degree" placeholder="请选择程度" clearable>
<el-option v-for="dict in dict.type.coil_abnormal_degree" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</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 type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddWithCoil">新增</el-button>
</el-form-item>
</el-form>
<abnormal-table ref="abnormalTable" :list="coilAbnormalList"
:editable="true" :show-coil="false" :coil-info="currentCoil"
@delete="handleDelete" @update="handleUpdate">
</abnormal-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" @pagination="getList" />
</el-col>
<el-col :span="18" v-else>
<el-empty description="请选择钢卷后查看异常明细" />
</el-col>
</el-row>
<!-- 添加或修改钢卷异常信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<abnormal-form ref="abnormalForm" v-model="form" :show-coil-selector="showCoilSelector"></abnormal-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 异常判级对话框 -->
<el-dialog :title="title" :visible.sync="judgeOpen" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="判级" prop="judgeLevel">
<el-radio-group v-model="form.judgeLevel">
<el-radio-button v-for="dict in dict.type.coil_abnormal_level" :key="dict.value" :label="dict.value">{{
dict.label }}</el-radio-button>
</el-radio-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitJudge"> </el-button>
<el-button @click="judgeOpen = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listCoilAbnormal, getCoilAbnormal, delCoilAbnormal, addCoilAbnormal, updateCoilAbnormal, judgeAbnormalLevel } from "@/api/wms/coilAbnormal";
import { listMaterialCoil } from "@/api/wms/coil";
import CoilSelector from '@/components/CoilSelector'
import CoilNo from '@/components/KLPService/Renderer/CoilNo'
import CoilList from "./components/CoilList.vue";
import AbnormalForm from './components/AbnormalForm';
import AbnormalTable from './components/AbnormalTable';
export default {
name: "CoilAbnormal",
dicts: ['coil_abnormal_code', 'coil_abnormal_position', 'coil_abnormal_degree', 'coil_abnormal_level'],
components: {
CoilSelector,
CoilNo,
CoilList,
AbnormalForm,
AbnormalTable
},
data() {
return {
coilList: [],
currentCoil: {},
showCoilSelector: true,
coilQuery: {
dataType: 1,
// 筛选异常数量大于等于1的
minAbnormalCount: 1,
pageNum: 1,
pageSize: 10,
currentCoilNo: undefined,
},
coilTotal: 0,
coilLoading: false,
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 钢卷异常信息表格数据
coilAbnormalList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
coilId: undefined,
position: undefined,
lengthCoord: undefined,
defectCode: undefined,
degree: undefined,
judgeLevel: undefined,
judgeBy: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
},
judgeOpen: false,
};
},
computed: {
currentCoilId() {
return this.currentCoil?.coilId || undefined
}
},
mounted() {
this.getCoilList();
},
methods: {
/** 查询钢卷异常信息列表 */
getList() {
this.loading = true;
listCoilAbnormal(this.queryParams).then(response => {
this.coilAbnormalList = response.rows;
this.total = response.total;
this.loading = false;
});
},
/** 查询钢卷列表 */
getCoilList() {
this.coilLoading = true;
listMaterialCoil(this.coilQuery).then(response => {
this.coilList = response.rows;
this.coilTotal = response.total;
this.coilLoading = false;
});
},
/** 点击钢卷列表行 */
handleCoilClick(row) {
this.currentCoil = row;
this.queryParams.coilId = row.coilId;
this.handleQuery();
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
abnormalId: undefined,
coilId: this.$route.query.coilId,
position: undefined,
lengthCoord: undefined,
defectCode: undefined,
degree: undefined,
judgeLevel: undefined,
judgeBy: undefined,
judgeTime: undefined,
remark: undefined,
delFlag: undefined,
createTime: undefined,
createBy: undefined,
updateTime: undefined,
updateBy: undefined
};
if (this.$refs.abnormalForm) {
this.$refs.abnormalForm.resetFields();
}
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.abnormalId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.showCoilSelector = true;
this.title = "添加钢卷异常信息";
},
handleAddWithCoil() {
this.reset();
this.open = true;
this.form.coilId = this.currentCoilId;
this.showCoilSelector = false;
this.title = "添加钢卷异常信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const abnormalId = row.abnormalId || this.ids
getCoilAbnormal(abnormalId).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改钢卷异常信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["abnormalForm"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.abnormalId != null) {
updateCoilAbnormal({ ...this.form, length: this.form.endPosition - this.form.startPosition }).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addCoilAbnormal({ ...this.form, length: this.form.endPosition - this.form.startPosition }).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const abnormalIds = row.abnormalId || this.ids;
this.$modal.confirm('是否确认删除钢卷异常信息编号为"' + abnormalIds + '"的数据项?').then(() => {
this.loading = true;
return delCoilAbnormal(abnormalIds);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('wms/coilAbnormal/export', {
...this.queryParams
}, `coilAbnormal_${new Date().getTime()}.xlsx`)
},
/** 异常判级按钮操作 */
handleJudge(row) {
this.reset();
this.form = row
this.judgeOpen = true;
this.title = "异常判级";
},
/** 提交异常判级按钮操作 */
submitJudge() {
this.buttonLoading = true;
judgeAbnormalLevel(this.form).then(response => {
this.$modal.msgSuccess("判级成功");
this.judgeOpen = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
};
</script>

View File

@@ -1,196 +0,0 @@
<template>
<div class="coil-list-container">
<!-- 列表空状态提示 -->
<div v-if="coilList.length === 0" class="empty-tip">暂无钢卷数据</div>
<!-- 钢卷列表 -->
<div
v-else
class="coil-list"
>
<!-- v-for 循环渲染列表项 -->
<div
v-for="(coil, index) in coilList"
:key="index"
:class="['coil-item', { 'coil-item--active': currentCoil.coilId === coil.coilId }]"
@click="handleCoilClick(coil)"
>
<!-- 主信息区域 - 突出展示核心字段 -->
<div class="main-info">
<div class="coil-no-wrapper">
<span class="label">钢卷号</span>
<span class="value primary">{{ coil.currentCoilNo || '未知' }}</span>
</div>
<div class="entry-no-wrapper">
<span class="label">入场卷号</span>
<span class="value">{{ coil.enterCoilNo || '未知' }}</span>
</div>
</div>
<!-- 次信息区域 - 次要字段 -->
<div class="secondary-info">
<div class="warehouse-wrapper">
<span class="label">逻辑库区</span>
<span class="value">{{ coil.warehouseName || '未知' }}</span>
</div>
<!-- 钢卷信息 - 动态渲染组件 -->
<div class="coil-detail-wrapper">
<span class="label">钢卷信息</span>
<div class="detail-content">
<ProductInfo
v-if="coil.itemType == 'product'"
:product="coil"
/>
<RawMaterialInfo
v-else-if="coil.itemType === 'raw_material'"
:material="coil"
/>
<span v-else class="empty-text">暂无钢卷信息</span>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import ProductInfo from "@/components/KLPService/Renderer/ProductInfo";
import RawMaterialInfo from "@/components/KLPService/Renderer/RawMaterialInfo";
export default {
name: "CoilList",
props: {
coilList: {
type: Array,
default: () => []
}
},
components: {
ProductInfo,
RawMaterialInfo
},
data() {
return {
currentCoil: {}
};
},
methods: {
handleCoilClick(coil) {
this.currentCoil = coil;
this.$emit('click', coil);
}
}
};
</script>
<style scoped>
/* 容器样式 */
.coil-list-container {
width: 100%;
padding: 6px;
box-sizing: border-box;
/* background-color: #f9fafb; */
border-radius: 8px;
}
/* 空状态提示 */
.empty-tip {
text-align: center;
padding: 40px 0;
color: #999;
font-size: 14px;
}
/* 列表容器 */
.coil-list {
display: flex;
flex-direction: column;
gap: 12px;
}
/* 列表项样式 */
.coil-item {
background-color: #fff;
border-radius: 6px;
padding: 16px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
cursor: pointer;
transition: all 0.2s ease;
/* 默认上边框(透明),保证布局一致 */
border-top: 3px solid transparent;
}
/* 核心新增:选中状态的样式 */
.coil-item--active {
/* 特殊上边框 - 可自定义颜色/样式 */
border-top: 3px solid #1989fa;
/* 可选:增加背景色/阴影强化选中效果 */
background-color: #f0f7ff;
box-shadow: 0 1px 5px rgba(25, 137, 250, 0.15);
}
/* 列表项 hover 效果 */
.coil-item:hover {
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
/* 主信息区域 - 突出展示 */
.main-info {
display: flex;
align-items: center;
gap: 24px;
padding-bottom: 12px;
margin-bottom: 12px;
border-bottom: 1px solid #f0f0f0;
}
.main-info .coil-no-wrapper .value.primary {
font-size: 18px;
font-weight: 600;
color: #1989fa; /* 主色调突出钢卷号 */
}
/* 次信息区域 */
.secondary-info {
display: flex;
flex-direction: column;
gap: 8px;
}
/* 通用标签样式 */
.label {
font-size: 14px;
color: #666;
margin-right: 4px;
}
/* 通用值样式 */
.value {
font-size: 14px;
color: #333;
}
/* 钢卷信息内容容器 */
.detail-content {
display: inline-block;
vertical-align: middle;
}
/* 空文本样式 */
.empty-text {
color: #999;
font-size: 13px;
}
/* 响应式适配 */
@media (max-width: 768px) {
.main-info {
flex-direction: column;
gap: 8px;
align-items: flex-start;
}
}
</style>

View File

@@ -143,8 +143,8 @@
<!-- <el-table-column label="备注" align="center" prop="remark" /> -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-if="scope.row.warningStatus == 0" size="mini" type="text" icon="el-icon-edit" @click="handleHandle(scope.row)">处理</el-button>
<el-button v-if="scope.row.warningStatus == 0" size="mini" type="text" icon="el-icon-edit" @click="handleIgnore(scope.row)">忽略</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleHandle(scope.row)">处理</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleIgnore(scope.row)">忽略</el-button>
<el-button size="mini" type="text" icon="el-icon-view" @click="showDetail(scope.row)">详情</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
</template>

View File

@@ -79,8 +79,7 @@
</el-form-item>
<el-form-item label="备注">
<el-input v-model="queryParams.remark" placeholder="请输入备注" clearable
@keyup.enter.native="handleQuery" />
<el-input v-model="queryParams.remark" placeholder="请输入备注" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="业务员" prop="saleName">
@@ -123,20 +122,9 @@
<el-button type="danger" v-if="showWaybill" plain icon="el-icon-close" size="mini" :disabled="multiple"
:loading="buttonLoading" @click="handleBatchRemoveFromWaybill">批量移出发货单</el-button>
</el-form-item>
<!-- <el-form-item style="float: right;" v-if="showWaybill" v-loading="loading">
<el-descriptions :column="2" border>
<el-descriptions-item label="已发货数量">{{ shippedCount }}</el-descriptions-item>
<el-descriptions-item label="未发货数量">{{ unshippedCount }}</el-descriptions-item>
</el-descriptions>
</el-form-item> -->
</el-form>
<el-row :gutter="10" class="mb8" v-if="showControl">
<!-- <el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single"
@click="handleCheck">修正</el-button>
</el-col> -->
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExportAll">导出当前</el-button>
</el-col>
@@ -144,11 +132,6 @@
<el-button type="info" plain icon="el-icon-download" size="mini" @click="handleExportAllProps">导出全部</el-button>
</el-col>
<!-- <el-col :span="2" v-if="canExportAll">
<el-button type="info" plain icon="el-icon-printer" size="mini" :disabled="multiple"
@click="handleBatchPrintLabel">批量打印标签</el-button>
</el-col> -->
<el-col :span="1.5" v-if="showOrderBy">
<el-checkbox v-model="queryParams.orderBy" v-loading="loading" @change="getList"
label="orderBy">按实际库区排序</el-checkbox>
@@ -230,12 +213,21 @@
<el-table-column v-if="moreColumn" label="材质" prop="material"></el-table-column>
<el-table-column v-if="moreColumn" label="厂家" prop="manufacturer"></el-table-column>
<el-table-column v-if="moreColumn" label="表面处理" prop="surfaceTreatmentDesc"></el-table-column>
<el-table-column label="品质" prop="qualityStatus"></el-table-column>
<el-table-column label="品质" prop="qualityStatus" width="80">
<template slot-scope="scope">
<div @click.stop="handleQualityStatusClick(scope.row)"
style="cursor: pointer; background-color: #f5f7fa; display: flex; align-items: center; justify-content: center;">
<dict-tag v-if="scope.row.qualityStatus" :options="dict.type.coil_quality_status"
:value="scope.row.qualityStatus"></dict-tag>
<span v-else>暂未判级</span>
</div>
</template>
</el-table-column>
<el-table-column v-if="moreColumn" label="备注" prop="remark" show-overflow-tooltip></el-table-column>
<el-table-column v-if="moreColumn" label="切边" prop="trimmingRequirement"></el-table-column>
<el-table-column v-if="moreColumn" label="包装" prop="packagingRequirement"></el-table-column>
<el-table-column v-if="moreColumn" label="镀层质量" prop="zincLayer"></el-table-column>
<el-table-column v-if="hasTransferType" label="调拨类型" align="center" prop="transferType" />
<el-table-column v-if="hasTransferType" label="改判原因" align="center" prop="rejudgeInfo.rejudgeReason" />
@@ -266,13 +258,15 @@
</template>
</el-table-column>
<el-table-column label="发货计划" align="center" prop="nextWarehouseId" v-if="showWaybill || (isShipView && shipViewModel.status == 'has')" width="150">
<el-table-column label="发货计划" align="center" prop="nextWarehouseId"
v-if="showWaybill || (isShipView && shipViewModel.status == 'has')" width="150">
<template slot-scope="scope">
{{ scope.row.bindPlanName || '-' }}
</template>
</el-table-column>
<el-table-column label="发货单据" align="center" prop="nextWarehouseId" v-if="showWaybill || (isShipView && shipViewModel.status == 'has')" width="150">
<el-table-column label="发货单据" align="center" prop="nextWarehouseId"
v-if="showWaybill || (isShipView && shipViewModel.status == 'has')" width="150">
<template slot-scope="scope">
<el-popover placement="top" width="400" trigger="hover">
<div>
@@ -563,7 +557,8 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="钢卷表面处理" prop="coilSurfaceTreatment">
<MemoInput storageKey="surfaceTreatmentDesc" v-model="form.coilSurfaceTreatment" placeholder="请输入钢卷表面处理" />
<MemoInput storageKey="surfaceTreatmentDesc" v-model="form.coilSurfaceTreatment"
placeholder="请输入钢卷表面处理" />
</el-form-item>
</el-col>
<el-col :span="12">
@@ -581,7 +576,8 @@
</el-col>
<el-col :span="12">
<el-form-item label="生产结束时间" prop="productionEndTime">
<TimeInput v-model="form.productionEndTime" @input="calculateFormProductionDuration" :show-now-button="true" />
<TimeInput v-model="form.productionEndTime" @input="calculateFormProductionDuration"
:show-now-button="true" />
</el-form-item>
</el-col>
</el-row>
@@ -607,7 +603,8 @@
<el-col :span="12">
<el-form-item label="创建人" prop="createBy">
<el-select v-model="form.createBy" placeholder="请选择创建人" style="width: 100%;" clearable filterable>
<el-option v-for="item in userList" :key="item.userName" :label="item.nickName" :value="item.userName" />
<el-option v-for="item in userList" :key="item.userName" :label="item.nickName"
:value="item.userName" />
</el-select>
</el-form-item>
</el-col>
@@ -684,8 +681,6 @@
</div>
</el-dialog>
<abnormal-list v-if="showAbnormal && currentCoilId" :coil-id="currentCoilId"></abnormal-list>
<log-table v-if="showWareLog && currentCoilId" :coil-id="currentCoilId"></log-table>
<DragResizeBox v-if="editNext && showProcessFlow" storageKey="coil-process-flow" @size-change="resizeChart">
@@ -914,6 +909,10 @@
</el-table-column>
</el-table>
</el-dialog>
<el-dialog title="钢卷异常信息" :visible.sync="abmornal.visible" fullscreen>
<exception-manager :coilId="currentCoilId" :show-inherit-button="true"/>
</el-dialog>
</div>
</template>
@@ -969,6 +968,7 @@ import { listDeliveryWaybillDetail, delDeliveryWaybillDetail } from "@/api/wms/d
import { listDeliveryPlan } from "@/api/wms/deliveryPlan";
import { addCoilQualityRejudge } from "@/api/wms/coilQualityRejudge";
import { listCoilContractRel, addCoilContractRel, updateCoilContractRel } from "@/api/wms/coilContractRel";
import ExceptionManager from '../components/ExceptionManager'
export default {
name: "MaterialCoil",
@@ -994,6 +994,7 @@ export default {
WarehouseTree,
TimeInput,
ContractSelect,
ExceptionManager,
},
dicts: ['product_coil_status', 'coil_material', 'coil_itemname', 'coil_manufacturer', 'coil_quality_status', 'wms_next_warehouse', 'coil_business_purpose'],
props: {
@@ -1124,6 +1125,12 @@ export default {
hasCount: 0,
noneCount: 0,
},
abmornal: {
visible: false,
data: {},
loading: false,
currentCoil: {},
},
// 按钮loading
buttonLoading: false,
contractLoading: false,
@@ -1435,6 +1442,11 @@ export default {
this.selectedCoilsVisible = true;
},
handleQualityStatusClick(row) {
this.abmornal.visible = true
this.currentCoilId = row.coilId;
},
// 编辑单据名称
editOrderName(order) {
this.$prompt('请输入新的单据名称', '编辑单据名称', {

View File

@@ -142,7 +142,6 @@ export default {
{ label: '质量状态', value: 'qualityStatus' },
{ label: '切边要求', value: 'trimmingRequirement' },
{ label: '原料材质', value: 'packingStatus' },
{ label: '包装要求', value: 'packagingRequirement' },
{ label: '产品类型', value: 'itemId' },
@@ -187,6 +186,10 @@ export default {
{ label: '发货配卷时间', value: 'bindDeliveryTime' },
{ label: '发货时间', value: 'exportTime' },
{ label: '业务员', value: 'saleName' },
{ label: '合同号', value: 'contractNo' },
{ label: '原料材质', value: 'packingStatus' },
{ label: '原料厚度', value: 'rawMaterialThickness' }
],
}
},

View File

@@ -163,10 +163,10 @@ export default {
'钢卷号': ['enterCoilNo', 'supplierCoilNo', 'currentCoilNo'],
'时间': ['createTime', 'exportTime', 'exportBy'],
'物理属性': ['netWeight', 'length', 'specification', 'actualThickness', 'theoreticalThickness', 'theoreticalLength'],
'材质属性': ['material', 'manufacturer', 'surfaceTreatmentDesc', 'zincLayer', 'packingStatus', 'temperGrade', 'coatingType', 'chromePlateCoilNo'],
'材质属性': ['material', 'manufacturer', 'surfaceTreatmentDesc', 'zincLayer', 'packingStatus', 'temperGrade', 'coatingType', 'chromePlateCoilNo', 'rawMaterialThickness'],
'用途': ['purpose', 'businessPurpose'],
'状态': ['qualityStatus', 'statusDesc', 'isRelatedToOrderText'],
'其他': ['itemName', 'itemId', 'packagingRequirement', 'trimmingRequirement', 'transferType', 'saleName', 'remark', 'team'],
'其他': ['itemName', 'itemId', 'packagingRequirement', 'trimmingRequirement', 'transferType', 'contractNo' ,'saleName', 'remark', 'team'],
},
list: [],
defaultStartTime: startTime,

View File

@@ -1,5 +1,5 @@
<template>
<div class="app-container" v-loading="loading">
<div class="app-container" v-loading="statsLoading || loading">
<!-- all 类型视图选择器 -->
<div v-if="reportType === 'all'" style="margin-bottom: 10px;">
<el-radio-group v-model="viewType" @change="handleViewTypeChange">
@@ -387,10 +387,14 @@
</el-descriptions>
<el-tabs v-model="activeTab">
<el-tab-pane label="产出钢卷" name="output">
<coil-table :columns="outputColumns" :data="outList" :highlight-config="{ rows: commonCoilIds }"></coil-table>
<coil-table :columns="outputColumns" :data="outTableList" :total="outTableTotal" :page-num="outPageNum"
:page-size="tablePageSize" :loading="tableLoading" :highlight-config="{ rows: commonCoilIds }"
@size-change="handleOutSizeChange" @current-change="handleOutPageChange"></coil-table>
</el-tab-pane>
<el-tab-pane label="投入钢卷" name="loss">
<coil-table :columns="lossColumns" :data="lossList" :highlight-config="{ rows: commonCoilIds }"></coil-table>
<coil-table :columns="lossColumns" :data="lossTableList" :total="lossTableTotal" :page-num="lossPageNum"
:page-size="tablePageSize" :loading="tableLoading" :highlight-config="{ rows: commonCoilIds }"
@size-change="handleLossSizeChange" @current-change="handleLossPageChange"></coil-table>
</el-tab-pane>
</el-tabs>
</template>
@@ -399,17 +403,25 @@
</el-descriptions>
<el-tabs v-model="activeTab">
<el-tab-pane label="投入钢卷" name="loss">
<coil-table :data="lossList" :columns="lossColumns" :loading="loading" height="calc(100vh - 360px)" />
<coil-table :data="lossTableList" :total="lossTableTotal" :page-num="lossPageNum" :page-size="tablePageSize"
:columns="lossColumns" v-loading="tableLoading" height="calc(100vh - 360px)"
@size-change="handleLossSizeChange" @current-change="handleLossPageChange" />
</el-tab-pane>
<el-tab-pane label="产出钢卷" name="output">
<coil-table :data="outList" :columns="outputColumns" :loading="loading" height="calc(100vh - 360px)" />
<coil-table :data="outTableList" :total="outTableTotal" :page-num="outPageNum" :page-size="tablePageSize"
:columns="outputColumns" v-loading="tableLoading" height="calc(100vh - 360px)"
@size-change="handleOutSizeChange" @current-change="handleOutPageChange" />
</el-tab-pane>
</el-tabs>
</template>
<!-- out 类型只显示产出钢卷 -->
<coil-table v-else-if="reportType === 'out'" :columns="outputColumns" :data="outList"></coil-table>
<coil-table v-else-if="reportType === 'out'" :columns="outputColumns" :data="outTableList" :total="outTableTotal"
:page-num="outPageNum" :page-size="tablePageSize" :loading="tableLoading"
@size-change="handleOutSizeChange" @current-change="handleOutPageChange"></coil-table>
<!-- loss 类型只显示投入钢卷 -->
<coil-table v-else-if="reportType === 'loss'" :columns="lossColumns" :data="lossList"></coil-table>
<coil-table v-else-if="reportType === 'loss'" :columns="lossColumns" :data="lossTableList" :total="lossTableTotal"
:page-num="lossPageNum" :page-size="tablePageSize" :loading="tableLoading"
@size-change="handleLossSizeChange" @current-change="handleLossPageChange"></coil-table>
<el-dialog title="列设置" :visible.sync="settingVisible" width="50%">
<el-radio-group v-model="activeColumnConfig">
@@ -425,7 +437,7 @@
</template>
<script>
import { listCoilWithIds } from "@/api/wms/coil";
import { listLightCoil, listCoilWithIds } from "@/api/wms/coil";
import {
listLightPendingAction,
} from '@/api/wms/pendingAction';
@@ -532,6 +544,7 @@ export default {
activeColumnConfig: 'coil-report-loss',
settingVisible: false,
loading: false,
statsLoading: false,
dayDate: currentDay,
monthDate: currentMonth,
yearDate: currentYear,
@@ -550,7 +563,7 @@ export default {
'钢卷号': ['enterCoilNo', 'supplierCoilNo', 'currentCoilNo'],
'时间': ['createTime', 'exportTime', 'exportBy'],
'物理属性': ['netWeight', 'length', 'specification', 'actualThickness', 'theoreticalThickness', 'theoreticalLength', 'scheduleThickness'],
'材质属性': ['material', 'manufacturer', 'surfaceTreatmentDesc', 'zincLayer', 'packingStatus', 'temperGrade', 'coatingType', 'chromePlateCoilNo'],
'材质属性': ['material', 'manufacturer', 'surfaceTreatmentDesc', 'zincLayer', 'packingStatus', 'temperGrade', 'coatingType', 'chromePlateCoilNo', 'rawMaterialThickness'],
'用途': ['purpose', 'businessPurpose'],
'状态': ['qualityStatus', 'statusDesc', 'isRelatedToOrderText'],
'其他': ['itemName', 'itemId', 'packagingRequirement', 'trimmingRequirement', 'transferType', 'contractNo', 'saleName', 'remark', 'team'],
@@ -582,6 +595,15 @@ export default {
lossColumns: [],
outputColumns: [],
actionIds: '',
outCoilIds: '',
outTableList: [],
lossTableList: [],
outTableTotal: 0,
lossTableTotal: 0,
outPageNum: 1,
lossPageNum: 1,
tablePageSize: 20,
tableLoading: false,
lengthThreshold: 0,
thicknessThreshold: 0
}
@@ -690,6 +712,9 @@ export default {
}
},
immediate: true
},
activeTab() {
this.loadTableData()
}
},
created() {
@@ -792,13 +817,15 @@ export default {
}
},
handleQuery() {
this.outPageNum = 1
this.lossPageNum = 1
this.getList()
},
async getList() {
this.loading = true;
this.statsLoading = true;
this.loading = false;
if (this.reportType === 'all') {
// all 类型使用 comprehensive 方式查询
const res = await listLightPendingAction({
enterCoilNo: this.queryParams.enterCoilNo,
startTime: this.queryParams.startTime,
@@ -806,27 +833,27 @@ export default {
actionTypes: this.actionType,
actionStatus: 2
});
const lossIds = res.data.filter(item => item.coilId).map(item => item.coilId);
const lossActionIds = res.data.filter(item => item.actionId).map(item => item.actionId);
this.actionIds = lossActionIds.join(',')
const outIds = [...new Set(res.data.filter(item => item.processedCoilIds).map(item => item.processedCoilIds))];
this.outCoilIds = outIds.join(',')
if (lossIds.length === 0 || outIds.length === 0) {
if (lossActionIds.length === 0 || outIds.length === 0) {
this.$message({ message: '查询结果为空', type: 'warning' })
this.loading = false;
this.statsLoading = false;
return
}
const [lossRes, outRes] = await Promise.all([
listCoilWithIds({ ...this.queryParams, actionIds: lossActionIds.join(',') || '', startTime: '', endTime: '', selectType: 'raw_material' }),
listCoilWithIds({ ...this.queryParams, coilIds: outIds.join(',') || '', startTime: '', endTime: '', byCreateTimeStart: this.queryParams.startTime, byCreateTimeEnd: this.queryParams.endTime, selectType: 'product' }),
listLightCoil({ ...this.queryParams, actionIds: this.actionIds, startTime: '', endTime: '', selectType: 'raw_material' }),
listLightCoil({ ...this.queryParams, coilIds: this.outCoilIds, startTime: '', endTime: '', byCreateTimeStart: this.queryParams.startTime, byCreateTimeEnd: this.queryParams.endTime, selectType: 'product' }),
]);
this.lossList = lossRes.rows.map(item => {
this.lossList = lossRes.map(item => {
const [thickness, width] = item.specification?.split('*') || []
return { ...item, computedThickness: parseFloat(thickness), computedWidth: parseFloat(width) }
});
this.outList = outRes.rows.map(item => {
this.outList = outRes.map(item => {
const [thickness, width] = item.specification?.split('*') || []
return { ...item, computedThickness: parseFloat(thickness), computedWidth: parseFloat(width) }
});
@@ -839,7 +866,8 @@ export default {
this.initMonthChart()
})
}
this.loading = false;
this.statsLoading = false;
this.loadTableData()
return
}
@@ -850,40 +878,40 @@ export default {
actionTypes: this.actionType,
actionStatus: 2
});
const lossIds = res.data.filter(item => item.coilId).map(item => item.coilId);
const lossActionIds = res.data.filter(item => item.actionId).map(item => item.actionId);
this.actionIds = lossActionIds.join(',')
const outIds = [...new Set(res.data.filter(item => item.processedCoilIds).map(item => item.processedCoilIds))];
this.outCoilIds = outIds.join(',')
if (lossIds.length === 0 || outIds.length === 0) {
if (lossActionIds.length === 0 || outIds.length === 0) {
this.$message({ message: '查询结果为空', type: 'warning' })
this.loading = false;
this.statsLoading = false;
return
}
const [lossRes, outRes] = await Promise.all([
listCoilWithIds({ ...this.queryParams, actionIds: lossActionIds.join(',') || '', startTime: '', endTime: '', selectType: 'raw_material' }),
listCoilWithIds({ ...this.queryParams, coilIds: outIds.join(',') || '', startTime: '', endTime: '', byCreateTimeStart: this.queryParams.startTime, byCreateTimeEnd: this.queryParams.endTime, selectType: 'product' }),
listLightCoil({ ...this.queryParams, actionIds: this.actionIds, startTime: '', endTime: '', selectType: 'raw_material' }),
listLightCoil({ ...this.queryParams, coilIds: this.outCoilIds, startTime: '', endTime: '', byCreateTimeStart: this.queryParams.startTime, byCreateTimeEnd: this.queryParams.endTime, selectType: 'product' }),
]);
if (this.reportType === 'out') {
this.outList = outRes.rows.map(item => {
this.outList = outRes.map(item => {
const [thickness, width] = item.specification?.split('*') || []
return { ...item, computedThickness: parseFloat(thickness), computedWidth: parseFloat(width) }
});
this.lossList = [];
} else if (this.reportType === 'loss') {
this.lossList = lossRes.rows.map(item => {
this.lossList = lossRes.map(item => {
const [thickness, width] = item.specification?.split('*') || []
return { ...item, computedThickness: parseFloat(thickness), computedWidth: parseFloat(width) }
});
this.outList = [];
} else {
this.lossList = lossRes.rows.map(item => {
this.lossList = lossRes.map(item => {
const [thickness, width] = item.specification?.split('*') || []
return { ...item, computedThickness: parseFloat(thickness), computedWidth: parseFloat(width) }
});
this.outList = outRes.rows.map(item => {
this.outList = outRes.map(item => {
const [thickness, width] = item.specification?.split('*') || []
return { ...item, computedThickness: parseFloat(thickness), computedWidth: parseFloat(width) }
});
@@ -900,7 +928,8 @@ export default {
})
}
this.loading = false;
this.statsLoading = false;
this.loadTableData()
},
// all 类型:获取昨日数据(逻辑同 getList时间向前推一天
async getYesterdayData() {
@@ -931,15 +960,15 @@ export default {
}
const [lossRes, outRes] = await Promise.all([
listCoilWithIds({ ...yesterdayParams, actionIds: lossActionIds.join(',') || '', startTime: '', endTime: '', selectType: 'raw_material' }),
listCoilWithIds({ ...yesterdayParams, coilIds: outIds.join(',') || '', startTime: '', endTime: '', byCreateTimeStart: start, byCreateTimeEnd: end, selectType: 'product' }),
listLightCoil({ ...yesterdayParams, actionIds: lossActionIds.join(',') || '', startTime: '', endTime: '', selectType: 'raw_material' }),
listLightCoil({ ...yesterdayParams, coilIds: outIds.join(',') || '', startTime: '', endTime: '', byCreateTimeStart: start, byCreateTimeEnd: end, selectType: 'product' }),
])
const yesterdayLossList = lossRes.rows.map(item => {
const yesterdayLossList = lossRes.map(item => {
const [thickness, width] = item.specification?.split('*') || []
return { ...item, computedThickness: parseFloat(thickness), computedWidth: parseFloat(width) }
})
const yesterdayOutList = outRes.rows.map(item => {
const yesterdayOutList = outRes.map(item => {
const [thickness, width] = item.specification?.split('*') || []
return { ...item, computedThickness: parseFloat(thickness), computedWidth: parseFloat(width) }
})
@@ -1181,6 +1210,89 @@ export default {
loadColumns() {
this.lossColumns = JSON.parse(localStorage.getItem('preference-tableColumns-coil-report-loss') || '[]') || []
this.outputColumns = JSON.parse(localStorage.getItem('preference-tableColumns-coil-report-output') || '[]') || []
},
loadTableData() {
if (this.reportType === 'out') {
this.loadOutTableData()
} else if (this.reportType === 'loss') {
this.loadLossTableData()
} else {
if (this.activeTab === 'output') {
this.loadOutTableData()
} else {
this.loadLossTableData()
}
}
},
async loadOutTableData() {
if (!this.outCoilIds) {
this.outTableList = []
this.outTableTotal = 0
return
}
this.tableLoading = true
try {
const res = await listCoilWithIds({
...this.queryParams,
coilIds: this.outCoilIds,
startTime: '', endTime: '',
byCreateTimeStart: this.queryParams.startTime,
byCreateTimeEnd: this.queryParams.endTime,
selectType: 'product',
pageSize: this.tablePageSize,
pageNum: this.outPageNum,
})
this.outTableList = (res.rows || []).map(item => {
const [thickness, width] = item.specification?.split('*') || []
return { ...item, computedThickness: parseFloat(thickness), computedWidth: parseFloat(width) }
})
this.outTableTotal = res.total || 0
} finally {
this.tableLoading = false
}
},
async loadLossTableData() {
if (!this.actionIds) {
this.lossTableList = []
this.lossTableTotal = 0
return
}
this.tableLoading = true
try {
const res = await listCoilWithIds({
...this.queryParams,
actionIds: this.actionIds,
startTime: '', endTime: '',
selectType: 'raw_material',
pageSize: this.tablePageSize,
pageNum: this.lossPageNum,
})
this.lossTableList = (res.rows || []).map(item => {
const [thickness, width] = item.specification?.split('*') || []
return { ...item, computedThickness: parseFloat(thickness), computedWidth: parseFloat(width) }
})
this.lossTableTotal = res.total || 0
} finally {
this.tableLoading = false
}
},
handleOutSizeChange(size) {
this.tablePageSize = size
this.outPageNum = 1
this.loadOutTableData()
},
handleOutPageChange(page) {
this.outPageNum = page
this.loadOutTableData()
},
handleLossSizeChange(size) {
this.tablePageSize = size
this.lossPageNum = 1
this.loadLossTableData()
},
handleLossPageChange(page) {
this.lossPageNum = page
this.loadLossTableData()
}
}
}