Procházet zdrojové kódy

update 驾驶舱

pull/10/head
DESKTOP-FUDKNA8\znjsz před 4 měsíci
rodič
revize
752df8417d
6 změnil soubory, kde provedl 246 přidání a 226 odebrání
  1. +1
    -0
      package.json
  2. +185
    -205
      src/store/modules/home.js
  3. +2
    -2
      src/views/copilot/components/charts/StdOutput.vue
  4. +53
    -14
      src/views/copilot/components/charts/base/CityData.vue
  5. +3
    -3
      src/views/copilot/components/charts/base/DoubleRingWrapper.vue
  6. +2
    -2
      src/views/copilot/yield/index.vue

+ 1
- 0
package.json Zobrazit soubor

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


+ 185
- 205
src/store/modules/home.js Zobrazit soubor

@@ -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" };
}

+ 2
- 2
src/views/copilot/components/charts/StdOutput.vue Zobrazit soubor

@@ -6,7 +6,7 @@
-->

<template>
<DoubleRingWrapperVue :data-source="dataBundle" :period="period" />
<DoubleRingWrapperVue data-source="标准组件输出" :period="period" />
</template>

<script>
@@ -22,7 +22,7 @@ export default {
},
},
data() {
return { dataBundle: null };
return {};
},
};
</script>


+ 53
- 14
src/views/copilot/components/charts/base/CityData.vue Zobrazit soubor

@@ -11,7 +11,7 @@
<div class="inner-shadow w-1"></div>
<div class="inner-shadow flex-1 flex">
<CityName value="凯盛光伏" />
<CityValue value="32212" horizontal :period="period" />
<CityValue :value="headquarterValue" horizontal :period="period" />
</div>
<div class="inner-shadow w-1"></div>
</div>
@@ -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: {},
};


+ 3
- 3
src/views/copilot/components/charts/base/DoubleRingWrapper.vue Zobrazit soubor

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


+ 2
- 2
src/views/copilot/yield/index.vue Zobrazit soubor

@@ -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" });
},
},
};


Načítá se…
Zrušit
Uložit