制造成本分析修改
This commit is contained in:
@@ -1,42 +1,21 @@
|
||||
<template>
|
||||
<div style="flex: 1">
|
||||
<Container :name="title" icon="cockpitItemIcon" size="operatingRevenueBg" topSize="middle">
|
||||
<!-- 1. 移除 .kpi-content 的固定高度,改为自适应 -->
|
||||
<div class="kpi-content" style="padding: 14px 16px; display: flex; width: 100%;">
|
||||
<!-- 新增:topItem 专属包裹容器,统一控制样式和布局 -->
|
||||
<div class="topItem-container" style="display: flex; gap: 8px;">
|
||||
<div class="dashboard left">
|
||||
<div class="topItem-container" style="display: flex; gap: 8px">
|
||||
<div
|
||||
v-for="item in sortedIndicators"
|
||||
:key="item.key"
|
||||
class="dashboard"
|
||||
>
|
||||
<div class="title">
|
||||
双镀成本·元/㎡
|
||||
{{ item.name }}·{{ item.unit }}
|
||||
</div>
|
||||
<div class="line">
|
||||
<operatingSingleBar :detailData="{
|
||||
...(relatedMon.双镀成本 || defaultData),
|
||||
flag: getRateFlag((relatedMon.双镀成本 || defaultData).completeRate, (relatedMon.双镀成本 || defaultData).real, (relatedMon.双镀成本 || defaultData).target)
|
||||
}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="dashboard right">
|
||||
<div class="title">
|
||||
双镀均价·元/㎡
|
||||
</div>
|
||||
<div class="line">
|
||||
<operatingSingleBar :detailData="{
|
||||
...(relatedMon.双镀均价 || defaultData),
|
||||
flag: getRateFlag((relatedMon.双镀均价 || defaultData).completeRate, (relatedMon.双镀均价 || defaultData).real, (relatedMon.双镀均价 || defaultData).target)
|
||||
}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="dashboard right">
|
||||
<div class="title">
|
||||
双镀毛利·万元
|
||||
</div>
|
||||
<div class="line">
|
||||
<operatingSingleBar :detailData="{
|
||||
...(relatedMon.双镀毛利 || defaultData),
|
||||
flag: getRateFlag((relatedMon.双镀毛利 || defaultData).completeRate, (relatedMon.双镀毛利 || defaultData).real, (relatedMon.双镀毛利 || defaultData).target)
|
||||
}" />
|
||||
<div style='font-size: 16px;text-align: right;padding-right: 5px;'>
|
||||
<span>完成率:<span style='color: #0B58FF;'>{{item.detailData.completeRate}}%</span></span>
|
||||
<span style='display: inline-block;margin-left: 10px;'>差值:<span :style="{color:item.detailData.flag>0?'#30B590':'#FF9423'}" >{{item.detailData.diff}}</span></span>
|
||||
</div>
|
||||
<operatingSingleBar :detailData="item.detailData"></operatingSingleBar>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -46,8 +25,6 @@
|
||||
<script>
|
||||
import Container from './container.vue'
|
||||
import operatingSingleBar from './operatingSingleBar.vue'
|
||||
import verticalBarChart from './verticalBarChart.vue'
|
||||
|
||||
// import * as echarts from 'echarts'
|
||||
// import rawItem from './raw-Item.vue'
|
||||
|
||||
@@ -81,6 +58,55 @@ export default {
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
indicatorDefs() {
|
||||
return [
|
||||
{ key: 'financialCost', name: '双镀成本', unit: '元/㎡'},
|
||||
{ key: 'financialPrice', name: '双镀均价', unit: '元/㎡'},
|
||||
{ key: 'financialProfit', name: '双镀毛利', unit: '万元'},
|
||||
]
|
||||
},
|
||||
indicators() {
|
||||
let _this = this
|
||||
const fallback = { target: 0, real: 0, completeRate: 0, diff: 0, flag: 0 }
|
||||
const list = Object.entries(_this.relatedMon).map(([title, data]) => {
|
||||
return {
|
||||
title: title,
|
||||
target: data.target,
|
||||
real: data.real,
|
||||
completeRate: data.completeRate,
|
||||
diff: data.diff
|
||||
};
|
||||
});
|
||||
return _this.indicatorDefs.map(def => {
|
||||
const data = list.find(item => item && item.title === def.name) || fallback
|
||||
const detailData = {
|
||||
...data,
|
||||
flag: _this.getRateFlag((data || _this.defaultData).completeRate, (data || _this.defaultData).real, (data || _this.defaultData).target),
|
||||
}
|
||||
return {
|
||||
...def,
|
||||
detailData,
|
||||
sortValue: Number((data && data.real) ?? 0)
|
||||
}
|
||||
})
|
||||
},
|
||||
sortedIndicators() {
|
||||
const unitOrder = ['元/㎡','万元']
|
||||
const unitRank = (u) => {
|
||||
const idx = unitOrder.indexOf(u)
|
||||
return idx === -1 ? 999 : idx
|
||||
}
|
||||
|
||||
return this.indicators.slice().sort((a, b) => {
|
||||
const ur = unitRank(a.unit) - unitRank(b.unit)
|
||||
if (ur !== 0) return ur
|
||||
const vr = (b.sortValue ?? -Infinity) - (a.sortValue ?? -Infinity)
|
||||
if (vr !== 0) return vr
|
||||
return String(a.key).localeCompare(String(b.key))
|
||||
})
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
relatedMon: {
|
||||
handler(newValue) {
|
||||
|
||||
Reference in New Issue
Block a user