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 @@
-->
-