|
@@ -59,42 +59,48 @@
|
|
|
<span>{{ lineDataList0[0].line }}号线统计</span>
|
|
<span>{{ lineDataList0[0].line }}号线统计</span>
|
|
|
</div>
|
|
</div>
|
|
|
<el-row :gutter="10">
|
|
<el-row :gutter="10">
|
|
|
- <el-col :span="4">
|
|
|
|
|
|
|
+ <el-col :span="3">
|
|
|
<div class="stat-item">
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">产量(米)</div>
|
|
<div class="stat-label">产量(米)</div>
|
|
|
<div class="stat-value">{{ calculateTotal(lineDataList0, 'length') }}</div>
|
|
<div class="stat-value">{{ calculateTotal(lineDataList0, 'length') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="4">
|
|
|
|
|
|
|
+ <el-col :span="3">
|
|
|
<div class="stat-item">
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">电量(kW·h)</div>
|
|
<div class="stat-label">电量(kW·h)</div>
|
|
|
<div class="stat-value">{{ calculateTotal(lineDataList0, 'energy') }}</div>
|
|
<div class="stat-value">{{ calculateTotal(lineDataList0, 'energy') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="4">
|
|
|
|
|
|
|
+ <el-col :span="3">
|
|
|
<div class="stat-item">
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">电流(A)</div>
|
|
<div class="stat-label">电流(A)</div>
|
|
|
<div class="stat-value">{{ calculateAverage(lineDataList0, 'amp') }}</div>
|
|
<div class="stat-value">{{ calculateAverage(lineDataList0, 'amp') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="4">
|
|
|
|
|
|
|
+ <el-col :span="3">
|
|
|
<div class="stat-item">
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">速度(m/min)</div>
|
|
<div class="stat-label">速度(m/min)</div>
|
|
|
<div class="stat-value">{{ calculateAverage(lineDataList0, 'speed') }}</div>
|
|
<div class="stat-value">{{ calculateAverage(lineDataList0, 'speed') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="4">
|
|
|
|
|
|
|
+ <el-col :span="3">
|
|
|
<div class="stat-item">
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">定型温度(°C)</div>
|
|
<div class="stat-label">定型温度(°C)</div>
|
|
|
<div class="stat-value">{{ calculateAverage(lineDataList0, 'tmpDx') }}</div>
|
|
<div class="stat-value">{{ calculateAverage(lineDataList0, 'tmpDx') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="4">
|
|
|
|
|
|
|
+ <el-col :span="3">
|
|
|
<div class="stat-item">
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">烫光温度(°C)</div>
|
|
<div class="stat-label">烫光温度(°C)</div>
|
|
|
<div class="stat-value">{{ calculateAverage(lineDataList0, 'tmpTg') }}</div>
|
|
<div class="stat-value">{{ calculateAverage(lineDataList0, 'tmpTg') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
|
|
+ <el-col :span="3">
|
|
|
|
|
+ <div class="stat-item">
|
|
|
|
|
+ <div class="stat-label" style="white-space: nowrap;">单位成本<br>(kW·h/米)</div>
|
|
|
|
|
+ <div class="stat-value">{{ calculateUnitCost(lineDataList0) }}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </el-col>
|
|
|
</el-row>
|
|
</el-row>
|
|
|
</el-card>
|
|
</el-card>
|
|
|
</el-col>
|
|
</el-col>
|
|
@@ -106,47 +112,67 @@
|
|
|
<span>{{ lineDataList1[0].line }}号线统计</span>
|
|
<span>{{ lineDataList1[0].line }}号线统计</span>
|
|
|
</div>
|
|
</div>
|
|
|
<el-row :gutter="10">
|
|
<el-row :gutter="10">
|
|
|
- <el-col :span="4">
|
|
|
|
|
|
|
+ <el-col :span="3">
|
|
|
<div class="stat-item">
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">产量(米)</div>
|
|
<div class="stat-label">产量(米)</div>
|
|
|
<div class="stat-value">{{ calculateTotal(lineDataList1, 'length') }}</div>
|
|
<div class="stat-value">{{ calculateTotal(lineDataList1, 'length') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="4">
|
|
|
|
|
|
|
+ <el-col :span="3">
|
|
|
<div class="stat-item">
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">电量(kW·h)</div>
|
|
<div class="stat-label">电量(kW·h)</div>
|
|
|
<div class="stat-value">{{ calculateTotal(lineDataList1, 'energy') }}</div>
|
|
<div class="stat-value">{{ calculateTotal(lineDataList1, 'energy') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="4">
|
|
|
|
|
|
|
+ <el-col :span="3">
|
|
|
<div class="stat-item">
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">电流(A)</div>
|
|
<div class="stat-label">电流(A)</div>
|
|
|
<div class="stat-value">{{ calculateAverage(lineDataList1, 'amp') }}</div>
|
|
<div class="stat-value">{{ calculateAverage(lineDataList1, 'amp') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="4">
|
|
|
|
|
|
|
+ <el-col :span="3">
|
|
|
<div class="stat-item">
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">速度(m/min)</div>
|
|
<div class="stat-label">速度(m/min)</div>
|
|
|
<div class="stat-value">{{ calculateAverage(lineDataList1, 'speed') }}</div>
|
|
<div class="stat-value">{{ calculateAverage(lineDataList1, 'speed') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="4">
|
|
|
|
|
|
|
+ <el-col :span="3">
|
|
|
<div class="stat-item">
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">定型温度(°C)</div>
|
|
<div class="stat-label">定型温度(°C)</div>
|
|
|
<div class="stat-value">{{ calculateAverage(lineDataList1, 'tmpDx') }}</div>
|
|
<div class="stat-value">{{ calculateAverage(lineDataList1, 'tmpDx') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
- <el-col :span="4">
|
|
|
|
|
|
|
+ <el-col :span="3">
|
|
|
<div class="stat-item">
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">烫光温度(°C)</div>
|
|
<div class="stat-label">烫光温度(°C)</div>
|
|
|
<div class="stat-value">{{ calculateAverage(lineDataList1, 'tmpTg') }}</div>
|
|
<div class="stat-value">{{ calculateAverage(lineDataList1, 'tmpTg') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
|
|
+ <el-col :span="6">
|
|
|
|
|
+ <div class="stat-item">
|
|
|
|
|
+ <div class="stat-label" style="white-space: nowrap;">单位成本(kW·h/米)</div>
|
|
|
|
|
+ <div class="stat-value">{{ calculateUnitCost(lineDataList1) }}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </el-col>
|
|
|
</el-row>
|
|
</el-row>
|
|
|
</el-card>
|
|
</el-card>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
</el-row>
|
|
</el-row>
|
|
|
|
|
|
|
|
|
|
+ <!-- 对比分析结论 -->
|
|
|
|
|
+ <el-row :gutter="20" style="margin-bottom: 20px;" v-if="lineDataList0.length > 0 && lineDataList1.length > 0">
|
|
|
|
|
+ <el-col :span="24">
|
|
|
|
|
+ <el-card>
|
|
|
|
|
+ <div slot="header" class="clearfix">
|
|
|
|
|
+ <span style="font-weight: bold;">产线能效对比分析</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div style="padding: 10px;">
|
|
|
|
|
+ <p v-html="analysisText"></p>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </el-card>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+
|
|
|
<!-- 折线图和表格左右布局 -->
|
|
<!-- 折线图和表格左右布局 -->
|
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
|
<!-- 左侧产线图表和表格 -->
|
|
<!-- 左侧产线图表和表格 -->
|
|
@@ -448,6 +474,69 @@ function calculateAverage(dataList, field) {
|
|
|
return average.toFixed(2);
|
|
return average.toFixed(2);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// 计算单位成本 (电量/产量)
|
|
|
|
|
+function calculateUnitCost(dataList) {
|
|
|
|
|
+ if (!dataList || !Array.isArray(dataList) || dataList.length === 0) {
|
|
|
|
|
+ return '0';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const totalLength = dataList.reduce((sum, item) => {
|
|
|
|
|
+ const length = item.length;
|
|
|
|
|
+ return sum + (length !== null && length !== undefined ? parseFloat(length) : 0);
|
|
|
|
|
+ }, 0);
|
|
|
|
|
+
|
|
|
|
|
+ const totalEnergy = dataList.reduce((sum, item) => {
|
|
|
|
|
+ const energy = item.energy;
|
|
|
|
|
+ return sum + (energy !== null && energy !== undefined ? parseFloat(energy) : 0);
|
|
|
|
|
+ }, 0);
|
|
|
|
|
+
|
|
|
|
|
+ // 如果产量为0,无法计算单位成本
|
|
|
|
|
+ if (totalLength === 0) {
|
|
|
|
|
+ return '0';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 直接计算 电量/产量 的比率
|
|
|
|
|
+ const unitCost = totalEnergy / totalLength;
|
|
|
|
|
+ return unitCost.toFixed(2);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// 生成分析文本
|
|
|
|
|
+const analysisText = computed(() => {
|
|
|
|
|
+ if (lineDataList0.value.length === 0 || lineDataList1.value.length === 0) {
|
|
|
|
|
+ return '';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const line0 = lineDataList0.value[0].line;
|
|
|
|
|
+ const line1 = lineDataList1.value[0].line;
|
|
|
|
|
+
|
|
|
|
|
+ const unitCost0 = parseFloat(calculateUnitCost(lineDataList0.value));
|
|
|
|
|
+ const unitCost1 = parseFloat(calculateUnitCost(lineDataList1.value));
|
|
|
|
|
+
|
|
|
|
|
+ const totalLength0 = parseFloat(calculateTotal(lineDataList0.value, 'length'));
|
|
|
|
|
+ const totalLength1 = parseFloat(calculateTotal(lineDataList1.value, 'length'));
|
|
|
|
|
+
|
|
|
|
|
+ const totalEnergy0 = parseFloat(calculateTotal(lineDataList0.value, 'energy'));
|
|
|
|
|
+ const totalEnergy1 = parseFloat(calculateTotal(lineDataList1.value, 'energy'));
|
|
|
|
|
+
|
|
|
|
|
+ let comparison = '';
|
|
|
|
|
+ if (unitCost0 < unitCost1) {
|
|
|
|
|
+ const diffPercent = ((unitCost1 - unitCost0) / unitCost1 * 100).toFixed(2);
|
|
|
|
|
+ comparison = `${line0}号线能效更优,单位成本比${line1}号线低${diffPercent}%。`;
|
|
|
|
|
+ } else if (unitCost0 > unitCost1) {
|
|
|
|
|
+ const diffPercent = ((unitCost0 - unitCost1) / unitCost0 * 100).toFixed(2);
|
|
|
|
|
+ comparison = `${line1}号线能效更优,单位成本比${line0}号线低${diffPercent}%。`;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ comparison = `两条产线能效相当。`;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const efficiency0 = totalLength0 > 0 ? (totalEnergy0 / totalLength0).toFixed(2) : '0';
|
|
|
|
|
+ const efficiency1 = totalLength1 > 0 ? (totalEnergy1 / totalLength1).toFixed(2) : '0';
|
|
|
|
|
+
|
|
|
|
|
+ return `在 ${queryParams.value.workDay} 的生产中,${line0}号线总产量${totalLength0.toFixed(0)}米,总耗电量${totalEnergy0.toFixed(2)}kW·h,
|
|
|
|
|
+ 单位成本为${efficiency0}kW·h/米;${line1}号线总产量${totalLength1.toFixed(0)}米,总耗电量${totalEnergy1.toFixed(2)}kW·h,
|
|
|
|
|
+ 单位成本为${efficiency1}kW·h/米。${comparison}较低的单位成本意味着更高的能源利用效率,请根据实际情况合理安排生产计划。`;
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
// 按产线分组的数据
|
|
// 按产线分组的数据
|
|
|
const groupedRzLineList = computed(() => {
|
|
const groupedRzLineList = computed(() => {
|
|
|
const grouped = {};
|
|
const grouped = {};
|