From 752df8417d6171c719221f4cdedf7ac8f4b1c2e6 Mon Sep 17 00:00:00 2001 From: "DESKTOP-FUDKNA8\\znjsz" Date: Thu, 25 Apr 2024 17:07:44 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E9=A9=BE=E9=A9=B6=E8=88=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/store/modules/home.js | 390 +++++++++--------- .../copilot/components/charts/StdOutput.vue | 4 +- .../components/charts/base/CityData.vue | 67 ++- .../charts/base/DoubleRingWrapper.vue | 6 +- src/views/copilot/yield/index.vue | 4 +- 6 files changed, 246 insertions(+), 226 deletions(-) diff --git a/package.json b/package.json index 0a67be3..d920609 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "highlight.js": "^11.9.0", "js-beautify": "^1.15.1", "jsencrypt": "3.3.1", + "lodash": "^4.17.21", "mockjs": "^1.1.0", "moment": "^2.30.1", "nprogress": "0.2.0", diff --git a/src/store/modules/home.js b/src/store/modules/home.js index c9342ba..ea4d46a 100644 --- a/src/store/modules/home.js +++ b/src/store/modules/home.js @@ -1,55 +1,17 @@ import axios from "@/utils/request"; - -function random_default() { - return 0; - let a = Math.floor(Math.random() * 1000); - while (a < 600) { - a = Math.floor(Math.random() * 1000); - } - return a; -} - -/* 接口 */ -async function getHomeInfo() { - const { code, data } = await axios.post("/ip/prod-output/query-by-date", { - factorys: [], - date: 4, - }); - if (code == 0) { - return data; - } - console.warn("getHomeInfo failed, code: ", code); - return null; -} - -async function getHomeTarget() { - const { code, data } = await axios.post("/ip/prod-target/query-by-date", { - factorys: [], - date: 4, - }); - if (code == 0) { - return data; - } - console.warn("getHomeTarget failed, code: ", code); - return null; -} - -async function getCopilotYield(params) { - const { code, data } = await axios.post("/ip/prod-output/query-by-date", { - ...params, - }); - if (code == 0) { - return data; - } - console.warn("getCopilotYield failed, code: ", code); - return null; -} +import { deepClone } from "../../utils"; /* 状态 */ const state = { copilot: { /* 产量驾驶舱 */ - yield: {}, + yield: { + ftoInvest: null, + chipInvest: null, + chipOutput: null, + stdOutput: null, + bipvOutput: null, + }, /* 能源驾驶舱 */ energy: {}, /* 效率驾驶舱 */ @@ -72,10 +34,14 @@ const mutations = { state.home.stdOutput = payload.stdOutput; state.home.bipvOutput = payload.bipvOutput; }, - SET_COPILOT_INFO: (state, payload) => { - switch (payload.type) { + SET_COPILOT_INFO: (state, { type, payload }) => { + switch (type) { case "yield": - state.copilot.yield = payload.data; + state.copilot.yield.ftoInvest = payload.ftoInvest; + state.copilot.yield.chipInvest = payload.chipInvest; + state.copilot.yield.chipOutput = payload.chipOutput; + state.copilot.yield.stdOutput = payload.stdOutput; + state.copilot.yield.bipvOutput = payload.bipvOutput; break; case "energy": state.copilot.energy = payload.data; @@ -92,165 +58,20 @@ const actions = { async initHome({ commit }) { const dataArr = await getHomeInfo(); const targetArr = await getHomeTarget(); - - const chipInvest = { - current: Array(7).fill(0), - previous: Array(7).fill(0), - }; // 芯片投入 - const ftoInvest = { - current: Array(7).fill(0), - previous: Array(7).fill(0), - }; // FTO投入 - const chipOutput = { - current: Array(7).fill(0), - previous: Array(7).fill(0), - target: Array(7).fill(0), - }; // 芯片产出 - const stdOutput = { - current: Array(7).fill(0), - previous: Array(7).fill(0), - target: Array(7).fill(0), - }; // 标准组件产出 - const bipvOutput = { - current: Array(7).fill(0), - previous: Array(7).fill(0), - target: Array(7).fill(0), - }; // BIPV产出 - - if (dataArr) { - for (const factory of dataArr) { - /* 工厂索引 */ - const factoryId = factory.factory; - /* 收集目标数据 */ - if (targetArr) { - const target = targetArr.find((item) => item.factory === factoryId); - if (target) { - chipOutput.target.splice(factoryId, 1, target.chipYield ?? 0); - stdOutput.target.splice(factoryId, 1, target.componentYield ?? 0); - bipvOutput.target.splice( - factoryId, - 1, - target.bipvProductOutput ?? 0 - ); - } - } - /* 收集芯片投入数据 */ - chipInvest.current.splice( - factoryId, - 1, - factory.inputNumber ?? random_default() - ); - chipInvest.previous.splice( - factoryId, - 1, - factory.previousYearInputNumber ?? random_default() - ); - /* 收集FTO投入数据 */ - ftoInvest.current.splice( - factoryId, - 1, - factory.chipInput ?? random_default() - ); - ftoInvest.previous.splice( - factoryId, - 1, - factory.previousYearChipInput ?? random_default() - ); - /* 收集产出数据 */ - switch (factory.glassType) { - case 0: - // 玻璃芯片 产出 - chipOutput.current.splice( - factoryId, - 1, - factory.outputNumber ?? random_default() - ); - chipOutput.previous.splice( - factoryId, - 1, - factory.previousYearOutputNumber ?? random_default() - ); - break; - case 1: - // 标准组件 产出 - stdOutput.current.splice( - factoryId, - 1, - factory.outputNumber ?? random_default() - ); - stdOutput.previous.splice( - factoryId, - 1, - factory.previousYearOutputNumber ?? random_default() - ); - break; - case 2: - // BIPV 产出 - bipvOutput.current.splice( - factoryId, - 1, - factory.outputNumber ?? random_default() - ); - bipvOutput.previous.splice( - factoryId, - 1, - factory.previousYearOutputNumber ?? random_default() - ); - break; - } - } - - /* 更新 state */ - commit("SET_HOME_INFO", { - ftoInvest, - chipInvest, - chipOutput, - stdOutput, - bipvOutput, - }); - } + const payload = splitCurrentAndPrevious(dataArr, targetArr); + commit("SET_HOME_INFO", payload); }, /** 初始化驾驶舱数据 */ - async initCopilot({ commit }, payload) { - const { period } = payload; - let dummyData = null; - let type = null; - // 请求参数,直接一次性获取所有工厂 - let queryParams = { - factorys: [], - date: 4, - }; + async initCopilot({ commit }, { period, source }) { + const fetcher = { + yield: getCopilotYield, + energy: null, + efficiency: null, + }[source]; + let { data: factoryList, type } = await fetcher(period); - switch (period) { - case "日": - queryParams.date = 1; - break; - case "周": - queryParams.date = 2; - break; - case "月": - queryParams.date = 3; - break; - case "年": - queryParams.date = 4; - break; - default: - queryParams.date = 1; - break; - } - - const data = await getCopilotYield(queryParams); - if (data) { - dummyData = data; - type = "yield"; - } - - console.log("[copilot yield data]: ", dummyData, type); - // commit - // commit('SET_COPILOT_INFO', { - // type, - // data: dummyData - // }) + const payload = splitCurrentAndPrevious(factoryList); + commit("SET_COPILOT_INFO", { type, payload }); }, }; @@ -260,3 +81,162 @@ export default { mutations, actions, }; + +// utils function +function splitCurrentAndPrevious(factoryListResponse, targetListResponse) { + const { chipInvest, ftoInvest, chipOutput, stdOutput, bipvOutput } = init(); + if (factoryListResponse) { + for (const factory of factoryListResponse) { + debugger; + const fId = getFactoryId(factory); + // 获取目标值 + if (targetListResponse) { + const { chipYield, componentYield, bipvProductOutput } = + getFactoryTargetValue(targetListResponse, fId); + chipOutput.target[fId] = chipYield; + stdOutput.target[fId] = componentYield; + bipvOutput.target[fId] = bipvProductOutput; + } + // 芯片投入 + chipInvest.current[fId] = factory.inputNumber; + chipInvest.previous[fId] = factory.previousYearInputNumber; + // FTO投入 + ftoInvest.current[fId] = factory.chipInput; + ftoInvest.previous[fId] = factory.previousYearChipInput; + // 产出数据, 0 - (玻璃)芯片产出, 1 - 标准组件产出, 2 - BIPV产出 + const _t = [chipOutput, stdOutput, bipvOutput][factory.glassType]; + _t.current[fId] = factory.outputNumber; + _t.previous[fId] = factory.previousYearOutputNumber; + } + + return { + chipInvest, + ftoInvest, + chipOutput, + stdOutput, + bipvOutput, + }; + } +} + +function getFactoryId(factory) { + return factory.factory; +} + +function getFactoryTargetValue(targetList, factoryId) { + const target = targetList.find((item) => item.factory === factoryId); + if (target) { + return { + // 自带模拟数据了.... random_default + chipYield: target.chipYield ?? random_default(), + componentYield: target.componentYield ?? random_default(), + bipvProductOutput: target.bipvProductOutput ?? random_default(), + }; + } + return { + chipYield: random_default(), + componentYield: random_default(), + bipvProductOutput: random_default(), + }; +} + +function init() { + const t_ = { + current: Array(7).fill(0), + previous: Array(7).fill(0), + }; + // 芯片投入 + const chipInvest = deepClone(t_); + // FTO投入 + const ftoInvest = deepClone(t_); + // 芯片产出 + const chipOutput = { + ...deepClone(t_), + target: Array(7).fill(0), + }; + // 标准组件产出 + const stdOutput = deepClone(chipOutput); + // BIPV产出 + const bipvOutput = deepClone(chipOutput); + + return { + chipInvest, + ftoInvest, + chipOutput, + stdOutput, + bipvOutput, + }; +} + +function random_default() { + return 0; + let a = Math.floor(Math.random() * 1000); + while (a < 600) { + a = Math.floor(Math.random() * 1000); + } + return a; +} + +/* 接口 */ +async function getHomeInfo() { + const { code, data } = await axios.post("/ip/prod-output/query-by-date", { + factorys: [], + date: 4, + }); + if (code == 0) { + return data; + } + console.warn("getHomeInfo failed, code: ", code); + return null; +} + +async function getHomeTarget() { + const { code, data } = await axios.post("/ip/prod-target/query-by-date", { + factorys: [], + date: 4, + }); + if (code == 0) { + return data; + } + console.warn("getHomeTarget failed, code: ", code); + return null; +} + +async function fetcher(params) { + const { code, data } = await axios.post("/ip/prod-output/query-by-date", { + ...params, + }); + if (code == 0) { + return data; + } + console.warn("getCopilotYield failed, code: ", code); + return null; +} + +async function getCopilotYield(period) { + // 请求参数,直接一次性获取所有工厂 + let queryParams = { + factorys: [], + date: 4, + }; + + switch (period) { + case "日": + queryParams.date = 1; + break; + case "周": + queryParams.date = 2; + break; + case "月": + queryParams.date = 3; + break; + case "年": + queryParams.date = 4; + break; + default: + queryParams.date = 1; + break; + } + + return { data: await fetcher(queryParams), type: "yield" }; +} diff --git a/src/views/copilot/components/charts/StdOutput.vue b/src/views/copilot/components/charts/StdOutput.vue index 97c787b..9ff5e7d 100644 --- a/src/views/copilot/components/charts/StdOutput.vue +++ b/src/views/copilot/components/charts/StdOutput.vue @@ -6,7 +6,7 @@ --> diff --git a/src/views/copilot/components/charts/base/CityData.vue b/src/views/copilot/components/charts/base/CityData.vue index f285aae..47e0dc9 100644 --- a/src/views/copilot/components/charts/base/CityData.vue +++ b/src/views/copilot/components/charts/base/CityData.vue @@ -11,7 +11,7 @@
- +
@@ -42,8 +42,8 @@ export default { }, props: { dataSource: { - type: Object, - default: () => ({}), + type: String, + default: null, }, period: { type: String, @@ -51,18 +51,57 @@ export default { }, }, data() { - return { - cities: [ - { name: "蚌埠兴科", value: 93111 }, - { name: "成都", value: 32212 }, - { name: "邯郸", value: 7732 }, - { name: "株洲", value: 71732 }, - { name: "瑞昌", value: 23421 }, - { name: "佳木斯", value: 340 }, - ], - }; + return {}; + }, + computed: { + headquarterValue() { + let getterName = ""; + switch (this.dataSource) { + case "标准组件输出": + getterName = "stdOutput"; + break; + case "芯片输出": + getterName = "chipOutput"; + break; + case "BIPV输出": + getterName = "bipvOutput"; + break; + } + return ( + "" + (this.$store.getters.copilot.yield[getterName]?.current?.[5] ?? 0) + ); + }, + cities() { + let getterName = ""; + switch (this.dataSource) { + case "标准组件输出": + getterName = "stdOutput"; + break; + case "芯片输出": + getterName = "chipOutput"; + break; + case "BIPV输出": + getterName = "bipvOutput"; + break; + } + const _cities = [ + { name: "瑞昌", value: 0 }, + { name: "邯郸", value: 0 }, + { name: "株洲", value: 0 }, + { name: "佳木斯", value: 0 }, + { name: "成都", value: 0 }, + { name: "凯盛光伏", value: 0 }, + { name: "蚌埠兴科", value: 0 }, + ]; + this.$store.getters.copilot.yield[getterName]?.current?.forEach( + (v, idx) => { + _cities[idx].value = v ?? 0; + } + ); + _cities.splice(4, 1); + return _cities; + }, }, - computed: {}, mounted() {}, methods: {}, }; diff --git a/src/views/copilot/components/charts/base/DoubleRingWrapper.vue b/src/views/copilot/components/charts/base/DoubleRingWrapper.vue index 10d3fc7..be95762 100644 --- a/src/views/copilot/components/charts/base/DoubleRingWrapper.vue +++ b/src/views/copilot/components/charts/base/DoubleRingWrapper.vue @@ -26,15 +26,15 @@ import CopilotSelect from "../../select.vue"; import fetcher from "./fetcherDoubleRing"; import DoubleRingChartVue from "./DoubleRingChart.vue"; -import CityData from './CityData.vue'; +import CityData from "./CityData.vue"; export default { name: "DoubleRingWrapper", components: { CopilotSelect, DoubleRingChartVue, CityData }, props: { dataSource: { - type: Object, - default: () => ({}), + type: String, + default: null, }, period: { type: String, diff --git a/src/views/copilot/yield/index.vue b/src/views/copilot/yield/index.vue index 40ad7b8..b35ed84 100644 --- a/src/views/copilot/yield/index.vue +++ b/src/views/copilot/yield/index.vue @@ -56,7 +56,6 @@ export default { data() { return {}; }, - computed: {}, watch: { period: { handler(val) { @@ -67,7 +66,8 @@ export default { }, methods: { fetchData(period = "日") { - this.$store.dispatch("copilot/initCopilot", { period }); + console.log(`产量驾驶舱,获取${period}数据`); + this.$store.dispatch("copilot/initCopilot", { period, source: "yield" }); }, }, };