|
@@ -1,55 +1,17 @@ |
|
|
import axios from "@/utils/request"; |
|
|
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 = { |
|
|
const state = { |
|
|
copilot: { |
|
|
copilot: { |
|
|
/* 产量驾驶舱 */ |
|
|
/* 产量驾驶舱 */ |
|
|
yield: {}, |
|
|
|
|
|
|
|
|
yield: { |
|
|
|
|
|
ftoInvest: null, |
|
|
|
|
|
chipInvest: null, |
|
|
|
|
|
chipOutput: null, |
|
|
|
|
|
stdOutput: null, |
|
|
|
|
|
bipvOutput: null, |
|
|
|
|
|
}, |
|
|
/* 能源驾驶舱 */ |
|
|
/* 能源驾驶舱 */ |
|
|
energy: {}, |
|
|
energy: {}, |
|
|
/* 效率驾驶舱 */ |
|
|
/* 效率驾驶舱 */ |
|
@@ -72,10 +34,14 @@ const mutations = { |
|
|
state.home.stdOutput = payload.stdOutput; |
|
|
state.home.stdOutput = payload.stdOutput; |
|
|
state.home.bipvOutput = payload.bipvOutput; |
|
|
state.home.bipvOutput = payload.bipvOutput; |
|
|
}, |
|
|
}, |
|
|
SET_COPILOT_INFO: (state, payload) => { |
|
|
|
|
|
switch (payload.type) { |
|
|
|
|
|
|
|
|
SET_COPILOT_INFO: (state, { type, payload }) => { |
|
|
|
|
|
switch (type) { |
|
|
case "yield": |
|
|
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; |
|
|
break; |
|
|
case "energy": |
|
|
case "energy": |
|
|
state.copilot.energy = payload.data; |
|
|
state.copilot.energy = payload.data; |
|
@@ -92,165 +58,20 @@ const actions = { |
|
|
async initHome({ commit }) { |
|
|
async initHome({ commit }) { |
|
|
const dataArr = await getHomeInfo(); |
|
|
const dataArr = await getHomeInfo(); |
|
|
const targetArr = await getHomeTarget(); |
|
|
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, |
|
|
mutations, |
|
|
actions, |
|
|
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" }; |
|
|
|
|
|
} |