Files
xgy-oa/klp-ui/src/components/KLPService/Renderer/CoilNo.vue
砂糖 499654907b feat(调拨单): 新增调拨单管理功能
- 新增调拨单主表和明细表相关API接口
- 新增调拨单主表和明细表前端页面
- 新增钢卷选择器组件和调拨明细表格组件
- 修改产品信息和原料信息渲染组件支持更多字段
- 修改产品选择和原料选择组件支持数值类型值
- 修改钢卷号渲染组件支持更多字段和外部数据
- 新增调拨单匹配物料接口
2026-03-28 14:08:27 +08:00

189 lines
4.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div :class="{'g-coil-no': isGCoilNo}">
<!-- 有coilId时显示popover无则只显示标签 -->
<el-popover
v-if="coilId && coil.enterCoilNo"
placement="left"
width="200"
trigger="hover"
>
<div class="coil-info">
<div class="info-item">
<span class="label">物料名称</span>
<span class="value">{{ itemName }}</span>
</div>
<div class="info-item">
<span class="label">材质</span>
<span class="value">{{ material }}</span>
</div>
<div class="info-item">
<span class="label">生产厂家</span>
<span class="value">{{ manufacturer }}</span>
</div>
<div class="info-item">
<span class="label">规格</span>
<span class="value">
{{ specification }}
</span>
</div>
<div class="info-item">
<span class="label">净重</span>
<span class="value">{{ netWeight }}</span>
</div>
<div class="info-item" v-if="length">
<span class="label">长度</span>
<span class="value">{{ length }}</span>
</div>
<div class="info-item" v-if="actualLength">
<span class="label">实测长度</span>
<span class="value">{{ actualLength }}</span>
</div>
<div class="info-item" v-if="actualLength">
<span class="label">实测厚度</span>
<span class="value">{{ actualThickness }}</span>
</div>
<div class="info-item" v-if="actualWidth">
<span class="label">实测宽度</span>
<span class="value">{{ actualWidth }}</span>
</div>
<div class="info-item">
<span class="label">厂家卷号</span>
<span class="value">{{ supplierCoilNo }}</span>
</div>
</div>
<el-tag type="info" size="small" slot="reference">{{ currentCoilNo }}</el-tag>
</el-popover>
<!-- 无coilId时仅显示标签 -->
<el-tag v-else type="info" size="small">{{ currentCoilNo }}</el-tag>
</div>
</template>
<script>
import { getMaterialCoil } from '@/api/wms/coil'
export default {
props: {
coilNo: {
type: String,
default: ''
},
coilId: {
type: String,
default: ''
},
coil: {
type: Object,
default: () => {}
}
},
data() { // 修正data应该是函数
return {
coilInfo: {}
}
},
computed: {
isGCoilNo() {
return this.coilNo && this.coilNo.startsWith('G');
},
specification() {
return this.coilInfo.specification || this.coil?.specification || '-'
},
itemName() {
return this.coilInfo.itemName || this.coil?.itemName || '-'
},
material() {
return this.coilInfo.material || this.coil?.material || '-'
},
manufacturer() {
return this.coilInfo.manufacturer || this.coil?.manufacturer || '-'
},
currentCoilNo() {
return this.coilNo || this.coil?.currentCoilNo || '-'
},
netWeight() {
return this.coilInfo.netWeight || this.coil?.netWeight || '-'
},
supplierCoilNo() {
return this.coilInfo.supplierCoilNo || this.coil?.supplierCoilNo || '-'
},
length() {
return this.coilInfo.length || this.coil?.length || '-'
},
actualLength() {
return this.coilInfo.actualLength || this.coil?.actualLength || '-'
},
actualWidth() {
return this.coilInfo.actualWidth || this.coil?.actualWidth || '-'
},
actualThickness() {
return this.coilInfo.actualThickness || this.coil?.actualThickness || '-'
},
},
methods: {
getCoilInfo() {
if (!this.coilId) {
return;
}
getMaterialCoil(this.coilId).then(res => {
this.coilInfo = res.data || {};
}).catch(err => {
console.error('获取钢卷信息失败:', err);
this.coilInfo = {};
})
}
},
mounted() {
// 组件挂载时获取线圈信息
this.getCoilInfo();
},
watch: {
// 监听coilId变化重新获取信息
coilId(newVal) {
if (newVal) {
this.getCoilInfo();
} else {
this.coilInfo = this.coil || {};
}
}
}
}
</script>
<style scoped>
/* 调整容器布局,让边框完整包裹标签 */
.g-coil-no {
display: inline-block; /* 让容器尺寸贴合内部el-tag */
border: 2px solid #67c23a !important;
border-radius: 4px; /* 可选和el-tag圆角保持一致更美观 */
padding: 1px; /* 调整内边距,避免边框和标签重叠 */
}
/* 弹窗信息样式 */
.coil-info {
font-size: 12px;
line-height: 1.8;
}
.coil-info .info-item {
display: flex;
margin-bottom: 4px;
}
.coil-info .info-item:last-child {
margin-bottom: 0;
}
.coil-info .label {
color: #666;
width: 70px;
flex-shrink: 0;
}
.coil-info .value {
color: #333;
flex: 1;
word-break: break-all;
}
</style>