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

@@ -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('请输入新的单据名称', '编辑单据名称', {