feat: 新增钢卷相关字段并优化页面功能
1. 在可选列配置中新增合同号、原料厚度字段,调整原料材质字段位置 2. 优化库存预警页面操作按钮权限逻辑,移除多余的状态判断 3. 新增钢卷异常管理弹窗组件,重构异常页面结构 4. 优化报表页面的分页加载和数据展示逻辑 5. 调整表单布局和代码格式,优化用户体验
This commit is contained in:
@@ -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' }
|
||||
]
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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('请输入新的单据名称', '编辑单据名称', {
|
||||
|
||||
@@ -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' }
|
||||
],
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user