feat(wms/coil): 新增钢卷异常管理相关页面与功能
1. 新增钢卷异常列表基础页、明细页、钢卷维度异常页和继承扩展页 2. 在异常管理表格中新增继承来源列 3. 完善异常增删改查、判级以及继承功能
This commit is contained in:
28
klp-ui/src/views/wms/coil/abnormal/base.vue
Normal file
28
klp-ui/src/views/wms/coil/abnormal/base.vue
Normal file
@@ -0,0 +1,28 @@
|
||||
<template>
|
||||
<BasePage :qrcode="qrcode" :querys="querys" :labelType="labelType" :hideType="hideType" :showAbnormal="showAbnormal" :showControl="showControl" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import BasePage from '../panels/base.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
BasePage
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
querys: {
|
||||
dataType: 1,
|
||||
orderByAbnormal: true,
|
||||
// 筛选异常数量大于等于1的
|
||||
// minAbnormalCount: 1
|
||||
},
|
||||
labelType: '2',
|
||||
qrcode: false,
|
||||
hideType: false,
|
||||
showAbnormal: true,
|
||||
showControl: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
337
klp-ui/src/views/wms/coil/abnormal/coil.vue
Normal file
337
klp-ui/src/views/wms/coil/abnormal/coil.vue
Normal file
@@ -0,0 +1,337 @@
|
||||
<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>
|
||||
264
klp-ui/src/views/wms/coil/abnormal/detail.vue
Normal file
264
klp-ui/src/views/wms/coil/abnormal/detail.vue
Normal file
@@ -0,0 +1,264 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<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-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<abnormal-table ref="abnormalTable" :list="coilAbnormalList"
|
||||
:editable="true" :show-coil="false"
|
||||
@delete="handleDelete" @update="handleUpdate">
|
||||
</abnormal-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
|
||||
<!-- 添加或修改钢卷异常信息对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
|
||||
<abnormal-form ref="abnormalForm" v-model="form" :show-coil-selector="!$route.query.coilId"></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>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listCoilAbnormal, getCoilAbnormal, delCoilAbnormal, addCoilAbnormal, updateCoilAbnormal, judgeAbnormalLevel } from "@/api/wms/coilAbnormal";
|
||||
import CoilSelector from '@/components/CoilSelector'
|
||||
import CoilNo from '@/components/KLPService/Renderer/CoilNo'
|
||||
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,
|
||||
AbnormalForm,
|
||||
AbnormalTable
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 按钮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: {},
|
||||
judgeOpen: false,
|
||||
};
|
||||
},
|
||||
// created() {
|
||||
// this.getList();
|
||||
// },
|
||||
watch: {
|
||||
'$route.query.coilId': {
|
||||
handler(newVal, oldVal) {
|
||||
// if (newVal !== oldVal) {
|
||||
this.queryParams.coilId = newVal
|
||||
this.handleQuery()
|
||||
// }
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/** 查询钢卷异常信息列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listCoilAbnormal(this.queryParams).then(response => {
|
||||
this.coilAbnormalList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
// 取消按钮
|
||||
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.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>
|
||||
404
klp-ui/src/views/wms/coil/abnormal/extend.vue
Normal file
404
klp-ui/src/views/wms/coil/abnormal/extend.vue
Normal file
@@ -0,0 +1,404 @@
|
||||
<template>
|
||||
<div class="app-container extend-container">
|
||||
<div class="top-bar">
|
||||
<div class="bar-group">
|
||||
<span class="bar-label">产线:</span>
|
||||
<el-radio-group v-model="currentLine" size="mini" @change="handleLineChange">
|
||||
<el-radio-button v-for="line in productionLines" :key="line.label" :label="line.label">
|
||||
{{ line.label }}
|
||||
</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div class="bar-group">
|
||||
<span class="bar-label">视图:</span>
|
||||
<el-radio-group v-model="viewType" size="mini" @change="handleViewChange">
|
||||
<el-radio-button label="raw_material">原料</el-radio-button>
|
||||
<el-radio-button label="product">成品</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div class="bar-group bar-search">
|
||||
<el-input v-model="queryParams.currentCoilNo" placeholder="当前卷号" size="mini" clearable
|
||||
@keyup.enter.native="handleSearch" style="width: 160px;" />
|
||||
<el-input v-model="queryParams.enterCoilNo" placeholder="入场卷号" size="mini" clearable
|
||||
@keyup.enter.native="handleSearch" style="width: 160px;" />
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleSearch">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetSearch">重置</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<KLPTable :data="coilList" v-loading="loading" border stripe style="width: 100%">
|
||||
<el-table-column label="当前钢卷号" prop="currentCoilNo" width="160" show-overflow-tooltip fixed />
|
||||
<el-table-column label="入场钢卷号" prop="enterCoilNo" width="160" show-overflow-tooltip />
|
||||
<el-table-column label="厂家卷号" prop="supplierCoilNo" width="140" show-overflow-tooltip />
|
||||
<el-table-column label="物料类型" prop="materialType" width="80" />
|
||||
<el-table-column label="品名" prop="itemName" width="120" show-overflow-tooltip />
|
||||
<el-table-column label="规格" prop="specification" width="130" show-overflow-tooltip />
|
||||
<el-table-column label="材质" prop="material" width="100" show-overflow-tooltip />
|
||||
<el-table-column label="厂家" prop="manufacturer" width="100" show-overflow-tooltip />
|
||||
<el-table-column label="毛重" prop="grossWeight" width="80" />
|
||||
<el-table-column label="净重" prop="netWeight" width="80" />
|
||||
<el-table-column label="实测厚度" prop="actualThickness" width="90" />
|
||||
<el-table-column label="实测宽度" prop="actualWidth" width="90" />
|
||||
<el-table-column label="实测长度" prop="actualLength" width="90" />
|
||||
<el-table-column label="逻辑库区" prop="warehouseName" width="120" />
|
||||
<el-table-column label="质量状态" prop="qualityStatus" width="80" />
|
||||
<el-table-column label="班组" prop="team" width="80" />
|
||||
<el-table-column label="异常数" width="70">
|
||||
<template slot-scope="scope">
|
||||
<el-tag :type="scope.row.abnormalCount > 0 ? 'danger' : 'info'" size="mini">
|
||||
{{ scope.row.abnormalCount || 0 }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="180" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" size="mini" icon="el-icon-document" @click="handleOpenException(scope.row)">
|
||||
异常管理
|
||||
</el-button>
|
||||
<el-button v-if="viewType === 'product'" type="text" size="mini" icon="el-icon-download"
|
||||
style="color: #e6a23c;" @click="handleInherit(scope.row)">
|
||||
继承
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</KLPTable>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize" @pagination="getCoilList" />
|
||||
|
||||
<el-dialog title="异常管理" :visible.sync="exceptionDialogVisible" fullscreen append-to-body>
|
||||
<exception-manager :coilId="currentCoilId" />
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog title="异常继承" :visible.sync="inheritDialogVisible" width="1200px" append-to-body top="5vh"
|
||||
:close-on-click-modal="false">
|
||||
<div v-loading="inheritLoading">
|
||||
<template v-if="parentCoils.length > 0">
|
||||
<el-alert title="以下为加工前钢卷的异常记录,请选择要继承的异常" type="info" :closable="false" show-icon style="margin-bottom: 16px;" />
|
||||
<div v-for="(parent, pIdx) in parentCoils" :key="parent.coilId" class="parent-coil-section">
|
||||
<div class="parent-header">
|
||||
<span class="parent-title">加工前钢卷 #{{ pIdx + 1 }}:{{ parent.currentCoilNo || parent.coilId }}</span>
|
||||
<el-button type="text" size="mini" @click="handleViewParentCoil(parent)">查看钢卷信息</el-button>
|
||||
</div>
|
||||
<el-table :data="parent.abnormalList" border stripe size="small" style="width: 100%">
|
||||
<el-table-column width="50">
|
||||
<template slot="header">
|
||||
<el-checkbox :indeterminate="parent.isIndeterminate"
|
||||
:value="parent.checkedAll"
|
||||
@change="val => handleParentSelectAll(parent, val)" />
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-checkbox v-model="scope.row._selected"
|
||||
@change="() => recalcParentCheckState(parent)" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="缺陷描述" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="开始位置" prop="startPosition" width="80" />
|
||||
<el-table-column label="结束位置" prop="endPosition" width="80" />
|
||||
<el-table-column label="长度" width="70">
|
||||
<template slot-scope="scope">{{ scope.row.endPosition - scope.row.startPosition }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="上下版面" prop="plateSurface" width="100" />
|
||||
<el-table-column label="断面位置" prop="position" width="160" />
|
||||
<el-table-column label="缺陷代码" prop="defectCode" width="80" />
|
||||
<el-table-column label="程度" prop="degree" width="60" />
|
||||
<el-table-column label="主缺陷" width="60">
|
||||
<template slot-scope="scope">{{ scope.row.mainMark === 1 ? '是' : '否' }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</template>
|
||||
<el-empty v-else description="未找到加工前钢卷或异常记录" />
|
||||
</div>
|
||||
<span slot="footer">
|
||||
<el-button @click="inheritDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" :loading="inheritButtonLoading" @click="confirmInherit"
|
||||
:disabled="selectedInheritCount === 0">
|
||||
确认继承 ({{ selectedInheritCount }})
|
||||
</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog title="加工前钢卷信息" :visible.sync="parentCoilDialogVisible" width="800px" append-to-body>
|
||||
<coil-info-render v-if="parentViewCoil" :coilInfo="parentViewCoil" :column="4" />
|
||||
<span slot="footer">
|
||||
<el-button @click="parentCoilDialogVisible = false">关闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listMaterialCoil, getMaterialCoil } from '@/api/wms/coil'
|
||||
import { listCoilAbnormal, addCoilAbnormal } from '@/api/wms/coilAbnormal'
|
||||
import ExceptionManager from '../components/ExceptionManager'
|
||||
|
||||
const PRODUCTION_LINES = [
|
||||
{ label: '酸连轧工序', warehouseIds: { raw_material: '1988150044862377986', product: '1988150099140866050' } },
|
||||
{ label: '镀锌工序', warehouseIds: { raw_material: '1988150263284953089', product: '1988150323162836993' } },
|
||||
{ label: '脱脂工序', warehouseIds: { raw_material: '1988150545175736322', product: '1988150586938421250' } },
|
||||
{ label: '退火工序', warehouseIds: { raw_material: '1988150648993148929', product: '1988150704496373761' } },
|
||||
{ label: '拉矫平整工序', warehouseIds: { raw_material: '1988150854442741762', product: '1988150915591499777' } },
|
||||
{ label: '双机架工序', warehouseIds: { raw_material: '1992873386047643650', product: '1992873437713080322' } },
|
||||
{ label: '镀铬工序', warehouseIds: { raw_material: '1988151076996706306', product: '1988151132361519105' } },
|
||||
]
|
||||
|
||||
export default {
|
||||
name: 'CoilAbnormalExtend',
|
||||
dicts: [],
|
||||
components: {
|
||||
ExceptionManager
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
productionLines: PRODUCTION_LINES,
|
||||
currentLine: PRODUCTION_LINES.length > 0 ? PRODUCTION_LINES[0].label : '',
|
||||
viewType: 'raw_material',
|
||||
loading: false,
|
||||
coilList: [],
|
||||
total: 0,
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 20,
|
||||
dataType: 1,
|
||||
currentCoilNo: undefined,
|
||||
enterCoilNo: undefined,
|
||||
warehouseIds: undefined,
|
||||
itemType: 'raw_material'
|
||||
},
|
||||
floatLayerConfig: {
|
||||
title: '详细信息',
|
||||
columnCount: 3,
|
||||
excludeColumns: ['action'],
|
||||
columns: [
|
||||
{ label: '入场钢卷号', prop: 'enterCoilNo' },
|
||||
{ label: '当前钢卷号', prop: 'currentCoilNo' },
|
||||
{ label: '厂家卷号', prop: 'supplierCoilNo' },
|
||||
{ label: '物料类型', prop: 'materialType' },
|
||||
{ label: '品名', prop: 'itemName' },
|
||||
{ label: '规格', prop: 'specification' },
|
||||
{ label: '材质', prop: 'material' },
|
||||
{ label: '厂家', prop: 'manufacturer' },
|
||||
{ label: '镀层质量', prop: 'zincLayer' },
|
||||
{ label: '表面处理', prop: 'surfaceTreatmentDesc' },
|
||||
{ label: '逻辑库区', prop: 'warehouseName' },
|
||||
{ label: '实际库位', prop: 'actualWarehouseName' },
|
||||
{ label: '毛重', prop: 'grossWeight' },
|
||||
{ label: '净重', prop: 'netWeight' },
|
||||
{ label: '实测厚度', prop: 'actualThickness' },
|
||||
{ label: '实测宽度', prop: 'actualWidth' },
|
||||
{ label: '实测长度', prop: 'actualLength' },
|
||||
{ label: '质量状态', prop: 'qualityStatus' },
|
||||
{ label: '班组', prop: 'team' },
|
||||
{ label: '调制度', prop: 'temperGrade' },
|
||||
{ label: '镀层种类', prop: 'coatingType' },
|
||||
{ label: '钢卷表面处理', prop: 'coilSurfaceTreatment' },
|
||||
{ label: '切边要求', prop: 'trimmingRequirement' },
|
||||
{ label: '包装要求', prop: 'packagingRequirement' },
|
||||
{ label: '创建时间', prop: 'createTime' },
|
||||
{ label: '备注', prop: 'remark' },
|
||||
]
|
||||
},
|
||||
exceptionDialogVisible: false,
|
||||
currentCoilId: null,
|
||||
inheritDialogVisible: false,
|
||||
inheritLoading: false,
|
||||
inheritButtonLoading: false,
|
||||
parentCoils: [],
|
||||
currentInheritCoil: null,
|
||||
parentCoilDialogVisible: false,
|
||||
parentViewCoil: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
selectedInheritCount() {
|
||||
let count = 0
|
||||
for (const parent of this.parentCoils) {
|
||||
for (const row of parent.abnormalList) {
|
||||
if (row._selected) count++
|
||||
}
|
||||
}
|
||||
return count
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.doSearch()
|
||||
},
|
||||
methods: {
|
||||
getWarehouseIdsByLine() {
|
||||
const line = this.productionLines.find(l => l.label === this.currentLine)
|
||||
return line?.warehouseIds?.[this.viewType]
|
||||
},
|
||||
doSearch() {
|
||||
this.queryParams.warehouseIds = this.getWarehouseIdsByLine()
|
||||
this.queryParams.pageNum = 1
|
||||
this.getCoilList()
|
||||
},
|
||||
handleLineChange() {
|
||||
this.doSearch()
|
||||
},
|
||||
handleViewChange(val) {
|
||||
this.queryParams.itemType = val
|
||||
this.doSearch()
|
||||
},
|
||||
handleSearch() {
|
||||
this.doSearch()
|
||||
},
|
||||
resetSearch() {
|
||||
this.queryParams.currentCoilNo = undefined
|
||||
this.queryParams.enterCoilNo = undefined
|
||||
this.doSearch()
|
||||
},
|
||||
getCoilList() {
|
||||
this.loading = true
|
||||
listMaterialCoil(this.queryParams).then(response => {
|
||||
this.coilList = response.rows || []
|
||||
this.total = response.total || 0
|
||||
}).finally(() => {
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
handleOpenException(row) {
|
||||
this.currentCoilId = row.coilId
|
||||
this.exceptionDialogVisible = true
|
||||
},
|
||||
handleInherit(row) {
|
||||
const parentIds = String(row.parentCoilId || '').split(',').map(id => id.trim()).filter(Boolean)
|
||||
if (parentIds.length === 0) {
|
||||
this.$message.info('该钢卷无加工前记录')
|
||||
return
|
||||
}
|
||||
this.currentInheritCoil = row
|
||||
this.inheritDialogVisible = true
|
||||
this.parentCoils = []
|
||||
this.inheritLoading = true
|
||||
const promises = parentIds.map(id =>
|
||||
getMaterialCoil(id).then(res => {
|
||||
const coil = res.data || {}
|
||||
return listCoilAbnormal({ coilId: id, pageSize: 999 }).then(res2 => {
|
||||
const list = (res2.rows || []).map(item => ({ ...item, _selected: false }))
|
||||
return { coil, abnormalList: list, checkedAll: false, isIndeterminate: false }
|
||||
})
|
||||
}).catch(() => null)
|
||||
)
|
||||
Promise.all(promises).then(results => {
|
||||
this.parentCoils = results.filter(Boolean)
|
||||
if (this.parentCoils.length === 0) {
|
||||
this.$message.info('未找到加工前钢卷或异常记录')
|
||||
}
|
||||
}).finally(() => {
|
||||
this.inheritLoading = false
|
||||
})
|
||||
},
|
||||
recalcParentCheckState(parent) {
|
||||
const selected = parent.abnormalList.filter(r => r._selected)
|
||||
const total = parent.abnormalList.length
|
||||
parent.checkedAll = selected.length === total && total > 0
|
||||
parent.isIndeterminate = selected.length > 0 && selected.length < total
|
||||
},
|
||||
handleParentSelectAll(parent, val) {
|
||||
parent.abnormalList.forEach(row => { row._selected = val })
|
||||
parent.checkedAll = val
|
||||
parent.isIndeterminate = false
|
||||
},
|
||||
handleViewParentCoil(parent) {
|
||||
this.parentViewCoil = parent.coil
|
||||
this.parentCoilDialogVisible = true
|
||||
},
|
||||
confirmInherit() {
|
||||
const selected = []
|
||||
for (const parent of this.parentCoils) {
|
||||
for (const row of parent.abnormalList) {
|
||||
if (row._selected) {
|
||||
const end = Number(row.endPosition) || 0
|
||||
const start = Number(row.startPosition) || 0
|
||||
selected.push({
|
||||
coilId: this.currentInheritCoil.coilId,
|
||||
position: row.position,
|
||||
plateSurface: row.plateSurface,
|
||||
startPosition: start,
|
||||
endPosition: end,
|
||||
length: end - start,
|
||||
defectCode: row.defectCode,
|
||||
degree: row.degree,
|
||||
mainMark: row.mainMark,
|
||||
remark: row.remark,
|
||||
attachmentFiles: row.attachmentFiles,
|
||||
productionLine: row.productionLine,
|
||||
processSource: this.currentLine,
|
||||
sourceSystem: '4',
|
||||
parentAbnormalId: row.abnormalId
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
if (selected.length === 0) {
|
||||
this.$message.info('请选择要继承的异常')
|
||||
return
|
||||
}
|
||||
this.inheritButtonLoading = true
|
||||
const requests = selected.map(data => addCoilAbnormal(data))
|
||||
Promise.all(requests).then(() => {
|
||||
this.$message.success(`成功继承 ${selected.length} 条异常记录`)
|
||||
this.inheritDialogVisible = false
|
||||
}).catch(error => {
|
||||
this.$message.error('继承异常失败: ' + (error.message || error))
|
||||
}).finally(() => {
|
||||
this.inheritButtonLoading = false
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.extend-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
overflow-x: auto;
|
||||
}
|
||||
.top-bar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
gap: 16px;
|
||||
padding: 12px 16px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.bar-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
}
|
||||
.bar-label {
|
||||
font-size: 13px;
|
||||
color: #606266;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.bar-search {
|
||||
margin-left: auto;
|
||||
}
|
||||
.parent-coil-section {
|
||||
margin-bottom: 20px;
|
||||
padding: 12px;
|
||||
background-color: #fafafa;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.parent-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 10px;
|
||||
padding-bottom: 8px;
|
||||
border-bottom: 1px solid #e4e7ed;
|
||||
}
|
||||
.parent-title {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #303133;
|
||||
}
|
||||
</style>
|
||||
@@ -82,6 +82,13 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="继承来源" prop="processSource" width="110">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.processSource" type="warning" size="mini">
|
||||
{{ scope.row.processSource }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="主缺陷" prop="mainMark" width="60">
|
||||
<template slot-scope="scope">
|
||||
<el-checkbox v-model="scope.row.mainMark" :true-label="1" :false-label="0"></el-checkbox>
|
||||
|
||||
Reference in New Issue
Block a user