@@ -68,9 +68,15 @@ const actions = { | |||||
energy: null, | energy: null, | ||||
efficiency: null, | efficiency: null, | ||||
}[source]; | }[source]; | ||||
// 获取产量数据 | |||||
let { data: factoryList, type } = await fetcher(period); | let { data: factoryList, type } = await fetcher(period); | ||||
const payload = splitCurrentAndPrevious(factoryList); | |||||
let targetList = null; | |||||
if (source === "yield") { | |||||
// 获取目标数据 | |||||
let { data } = await fetcher(period, true); | |||||
targetList = data; | |||||
} | |||||
const payload = splitCurrentAndPrevious(factoryList, targetList); | |||||
commit("SET_COPILOT_INFO", { type, payload }); | commit("SET_COPILOT_INFO", { type, payload }); | ||||
}, | }, | ||||
}; | }; | ||||
@@ -104,7 +110,7 @@ function splitCurrentAndPrevious(factoryListResponse, targetListResponse) { | |||||
ftoInvest.previous[fId] = factory.previousYearChipInput; | ftoInvest.previous[fId] = factory.previousYearChipInput; | ||||
// 产出数据, 0 - (玻璃)芯片产出, 1 - 标准组件产出, 2 - BIPV产出 | // 产出数据, 0 - (玻璃)芯片产出, 1 - 标准组件产出, 2 - BIPV产出 | ||||
// 因为后端写的垃圾数据,所以这里要做一下判断 | // 因为后端写的垃圾数据,所以这里要做一下判断 | ||||
if (!([0, 1, 2].includes(factory.glassType))) continue; | |||||
if (![0, 1, 2].includes(factory.glassType)) continue; | |||||
const _t = [chipOutput, stdOutput, bipvOutput][factory.glassType]; | const _t = [chipOutput, stdOutput, bipvOutput][factory.glassType]; | ||||
_t.current[fId] = factory.outputNumber; | _t.current[fId] = factory.outputNumber; | ||||
_t.previous[fId] = factory.previousYearOutputNumber; | _t.previous[fId] = factory.previousYearOutputNumber; | ||||
@@ -204,10 +210,17 @@ async function getHomeTarget() { | |||||
return null; | return null; | ||||
} | } | ||||
async function fetcher(params) { | |||||
const { code, data } = await axios.post("/ip/prod-output/query-by-date", { | |||||
...params, | |||||
}); | |||||
async function fetcher(type = "yield", params) { | |||||
const { code, data } = await axios.post( | |||||
type == "yield" | |||||
? // 产量 数据 | |||||
"/ip/prod-output/query-by-date" | |||||
: // 目标数据 | |||||
"/ip/prod-target/query-by-date", | |||||
{ | |||||
...params, | |||||
} | |||||
); | |||||
if (code == 0) { | if (code == 0) { | ||||
return data; | return data; | ||||
} | } | ||||
@@ -215,7 +228,13 @@ async function fetcher(params) { | |||||
return null; | return null; | ||||
} | } | ||||
async function getCopilotYield(period) { | |||||
/** | |||||
* | |||||
* @param {*} period 周期: 日周月年 | |||||
* @param {*} target 是否获取目标数据:默认 否 | |||||
* @returns | |||||
*/ | |||||
async function getCopilotYield(period, target = false) { | |||||
// 请求参数,直接一次性获取所有工厂 | // 请求参数,直接一次性获取所有工厂 | ||||
let queryParams = { | let queryParams = { | ||||
factorys: [], | factorys: [], | ||||
@@ -240,5 +259,8 @@ async function getCopilotYield(period) { | |||||
break; | break; | ||||
} | } | ||||
return { data: await fetcher(queryParams), type: "yield" }; | |||||
return { | |||||
data: await fetcher(target ? "target" : "yield", queryParams), | |||||
type: "yield", | |||||
}; | |||||
} | } |
@@ -54,8 +54,8 @@ export default { | |||||
}, | }, | ||||
in: { | in: { | ||||
type: String, | type: String, | ||||
default: "" | |||||
} | |||||
default: "", | |||||
}, | |||||
}, | }, | ||||
data() { | data() { | ||||
return { | return { | ||||
@@ -194,8 +194,6 @@ export default { | |||||
this.initOptions(this.actualOptions); | this.initOptions(this.actualOptions); | ||||
}, | }, | ||||
series(val) { | series(val) { | ||||
debugger; | |||||
console.log(`[BarChartBase] [${this.in}] should update component`, val); | |||||
if (!val) { | if (!val) { | ||||
this.initOptions(this.options); | this.initOptions(this.options); | ||||
return; | return; | ||||
@@ -23,7 +23,7 @@ | |||||
<script> | <script> | ||||
import chartMixin from "@/mixins/chart.js"; | import chartMixin from "@/mixins/chart.js"; | ||||
import fullscreenMixin from "@/mixins/fullscreen.js"; | import fullscreenMixin from "@/mixins/fullscreen.js"; | ||||
import options from "./double-ring-chart-options"; | |||||
import getOptions from "./double-ring-chart-options"; | |||||
export default { | export default { | ||||
name: "DoubleRingChart", | name: "DoubleRingChart", | ||||
@@ -37,6 +37,10 @@ export default { | |||||
type: String, | type: String, | ||||
default: "日", | default: "日", | ||||
}, | }, | ||||
dataSource: { | |||||
type: String, | |||||
default: null, | |||||
}, | |||||
}, | }, | ||||
data() { | data() { | ||||
return {}; | return {}; | ||||
@@ -45,9 +49,25 @@ export default { | |||||
legendItems() { | legendItems() { | ||||
return calculateItems(this.period); | return calculateItems(this.period); | ||||
}, | }, | ||||
options() { | |||||
// TODO: 此处更新数据 | |||||
let titleValue = "10%", | |||||
subtitle = "测试子标题", | |||||
previousSum = 10, | |||||
currentSum = 0, | |||||
targetSum = 100; | |||||
return getOptions({ | |||||
titleValue, | |||||
subtitle, | |||||
previousSum, | |||||
currentSum, | |||||
targetSum, | |||||
}); | |||||
}, | |||||
}, | }, | ||||
mounted() { | mounted() { | ||||
this.initOptions(options); | |||||
this.initOptions(this.options); | |||||
}, | }, | ||||
methods: { | methods: { | ||||
// fullscreen mixin 需要的回调 | // fullscreen mixin 需要的回调 | ||||
@@ -136,17 +156,17 @@ function calculateItems(period) { | |||||
} | } | ||||
.legend-item:nth-child(1) .legend-item__label::before { | .legend-item:nth-child(1) .legend-item__label::before { | ||||
background: #0f65ff; | |||||
background: #12fff5; | |||||
} | } | ||||
.legend-item:nth-child(1) .legend-item__value { | .legend-item:nth-child(1) .legend-item__value { | ||||
color: #0f65ff; | |||||
color: #12fff5; | |||||
} | } | ||||
.legend-item:nth-child(2) .legend-item__label::before { | .legend-item:nth-child(2) .legend-item__label::before { | ||||
background: #12fff5; | |||||
background: #0f65ff; | |||||
} | } | ||||
.legend-item:nth-child(2) .legend-item__value { | .legend-item:nth-child(2) .legend-item__value { | ||||
color: #12fff5; | |||||
color: #0f65ff; | |||||
} | } | ||||
.legend-item:nth-child(3) .legend-item__label::before { | .legend-item:nth-child(3) .legend-item__label::before { | ||||
@@ -13,7 +13,7 @@ | |||||
:options="cityOptions" | :options="cityOptions" | ||||
/> | /> | ||||
<div class="flex-1 stretch"> | <div class="flex-1 stretch"> | ||||
<DoubleRingChartVue :period="period" /> | |||||
<DoubleRingChartVue :data-source="dataSource" :period="period" /> | |||||
</div> | </div> | ||||
</template> | </template> | ||||
<template v-else> | <template v-else> | ||||
@@ -24,7 +24,6 @@ | |||||
<script> | <script> | ||||
import CopilotSelect from "../../select.vue"; | import CopilotSelect from "../../select.vue"; | ||||
import fetcher from "./fetcherDoubleRing"; | |||||
import DoubleRingChartVue from "./DoubleRingChart.vue"; | import DoubleRingChartVue from "./DoubleRingChart.vue"; | ||||
import CityData from "./CityData.vue"; | import CityData from "./CityData.vue"; | ||||
@@ -54,15 +53,9 @@ export default { | |||||
], | ], | ||||
}; | }; | ||||
}, | }, | ||||
computed: {}, | |||||
mounted() { | |||||
fetcher.getData().then((res) => { | |||||
console.log("getData--->", res); | |||||
}); | |||||
}, | |||||
methods: { | methods: { | ||||
handleActiveUpdate(val) { | |||||
console.log("handleActiveUpdate--->", val); | |||||
handleActiveUpdate(index) { | |||||
console.log("handleActiveUpdate--->", index); | |||||
}, | }, | ||||
}, | }, | ||||
}; | }; | ||||
@@ -1,4 +1,10 @@ | |||||
export default { | |||||
export default ({ | |||||
titleValue, | |||||
subtitle, | |||||
previousSum, | |||||
currentSum, | |||||
targetSum, | |||||
}) => ({ | |||||
grid: { | grid: { | ||||
left: 0, | left: 0, | ||||
right: 0, | right: 0, | ||||
@@ -8,16 +14,16 @@ export default { | |||||
}, | }, | ||||
tooltip: {}, | tooltip: {}, | ||||
title: { | title: { | ||||
text: "78%", | |||||
left: "50%", | |||||
top: "40%", | |||||
text: titleValue, | |||||
left: "49%", | |||||
top: "39%", | |||||
textAlign: "center", | textAlign: "center", | ||||
textStyle: { | textStyle: { | ||||
fontWeight: 600, | fontWeight: 600, | ||||
fontSize: 32, | fontSize: 32, | ||||
color: "#fffd", | color: "#fffd", | ||||
}, | }, | ||||
subtext: "\u200224年累计产出\u2002", | |||||
subtext: `\u2002${subtitle}\u2002`, | |||||
subtextStyle: { | subtextStyle: { | ||||
fontSize: 14, | fontSize: 14, | ||||
fontWeight: 100, | fontWeight: 100, | ||||
@@ -26,17 +32,17 @@ export default { | |||||
}, | }, | ||||
}, | }, | ||||
series: [ | series: [ | ||||
// 背景 series - 2024计划 | |||||
// 背景 series | |||||
{ | { | ||||
type: "pie", | type: "pie", | ||||
name: "2024目标", | |||||
name: "当前目标", | |||||
radius: ["70%", "85%"], | radius: ["70%", "85%"], | ||||
center: ["50%", "52%"], | center: ["50%", "52%"], | ||||
emptyCircleStyle: { | emptyCircleStyle: { | ||||
color: "#042c5f33", | color: "#042c5f33", | ||||
}, | }, | ||||
}, | }, | ||||
// 数据 series - 2024累计 | |||||
// 数据 series | |||||
{ | { | ||||
type: "pie", | type: "pie", | ||||
radius: ["70%", "85%"], | radius: ["70%", "85%"], | ||||
@@ -44,15 +50,14 @@ export default { | |||||
avoidLabelOvervlap: false, | avoidLabelOvervlap: false, | ||||
label: { | label: { | ||||
show: false, | show: false, | ||||
// position: "center", | |||||
}, | }, | ||||
labelLine: { | labelLine: { | ||||
show: false, | show: false, | ||||
}, | }, | ||||
data: [ | data: [ | ||||
{ | { | ||||
value: 90, | |||||
name: "2024累计产出", | |||||
value: currentSum, | |||||
name: "当前累计产出", | |||||
selected: false, | selected: false, | ||||
itemStyle: { | itemStyle: { | ||||
borderJoin: "round", | borderJoin: "round", | ||||
@@ -73,8 +78,15 @@ export default { | |||||
}, | }, | ||||
}, | }, | ||||
{ | { | ||||
value: 20, | |||||
name: "-", | |||||
value: | |||||
targetSum > currentSum | |||||
? targetSum - currentSum | |||||
: targetSum == currentSum | |||||
? currentSum == 0 | |||||
? 1 | |||||
: 0 | |||||
: 0, | |||||
name: "未达成累计", | |||||
itemStyle: { color: "transparent" }, | itemStyle: { color: "transparent" }, | ||||
label: { show: false }, | label: { show: false }, | ||||
}, | }, | ||||
@@ -94,8 +106,8 @@ export default { | |||||
}, | }, | ||||
data: [ | data: [ | ||||
{ | { | ||||
value: 90, | |||||
name: "2023累计产出", | |||||
value: previousSum, | |||||
name: "上期累计产出", | |||||
selected: false, | selected: false, | ||||
itemStyle: { | itemStyle: { | ||||
borderJoin: "round", | borderJoin: "round", | ||||
@@ -116,7 +128,7 @@ export default { | |||||
}, | }, | ||||
}, | }, | ||||
{ | { | ||||
value: 20, | |||||
value: targetSum > previousSum ? targetSum - previousSum : 0, | |||||
name: "-", | name: "-", | ||||
itemStyle: { color: "transparent" }, | itemStyle: { color: "transparent" }, | ||||
label: { show: false }, | label: { show: false }, | ||||
@@ -124,4 +136,4 @@ export default { | |||||
], | ], | ||||
}, | }, | ||||
], | ], | ||||
}; | |||||
}); |
@@ -39,7 +39,18 @@ export default { | |||||
watch: { | watch: { | ||||
currentActive: { | currentActive: { | ||||
handler(val) { | handler(val) { | ||||
this.$emit("update:active", val); | |||||
this.$emit( | |||||
"update:active", | |||||
[ | |||||
"瑞昌", | |||||
"邯郸", | |||||
"株洲", | |||||
"佳木斯", | |||||
"成都", | |||||
"凯盛光伏", | |||||
"蚌埠兴科", | |||||
].indexOf(val) | |||||
); | |||||
}, | }, | ||||
immediate: true, | immediate: true, | ||||
}, | }, | ||||