Files
klp-oa/klp-ui/src/components/KLPService/Renderer/CoilNo.vue
砂糖 dd4ca3d380 fix: 统一长度单位显示为米并优化CoilInfo组件
将多处长度单位从毫米(mm)改为米(m),保持单位统一
重构CoilInfo组件为动态字段配置模式,提升可维护性
移除未使用的CoilInfoRender组件引用
2026-04-27 10:26:13 +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 && coil.currentCoilNo)"
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 }}m</span>
</div>
<div class="info-item" v-if="actualLength">
<span class="label">实测长度</span>
<span class="value">{{ actualLength }}m</span>
</div>
<div class="info-item" v-if="actualLength">
<span class="label">实测厚度</span>
<span class="value">{{ actualThickness }}mm</span>
</div>
<div class="info-item" v-if="actualWidth">
<span class="label">实测宽度</span>
<span class="value">{{ actualWidth }}mm</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 || this.coilInfo?.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>