From 348ff8ad2a7e2fac8ea281ede97b0ccbe496e22a Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周日, 04 5月 2025 09:53:37 +0800
Subject: [PATCH] 222
---
PipeLineLems/web/src/libs/Store/Store.ts | 385 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 378 insertions(+), 7 deletions(-)
diff --git a/PipeLineLems/web/src/libs/Store/Store.ts b/PipeLineLems/web/src/libs/Store/Store.ts
index db8cb73..c503e99 100644
--- a/PipeLineLems/web/src/libs/Store/Store.ts
+++ b/PipeLineLems/web/src/libs/Store/Store.ts
@@ -1,27 +1,398 @@
-import { reactive, onMounted, ref, Ref } from 'vue'
+import { reactive, onMounted, ref, Ref, computed } from 'vue'
+import {
+ getEnumList,
+ getWorkSectionApi,
+ getWorkStationApi,
+ getFormDataBySettings,
+ getFlowData,
+ getMaterialTypes,
+ getMaterialTypesEnum,
+ getFeatureListData,
+} from '@/api/common-enum'
import { createGlobalState } from '@vueuse/core'
+import { FeatureItemType, FeatureType } from './Store.d'
+import sdk from 'sdk'
+interface BaseState {
+ systemConfig: Record<string, any>
+ workSectionList: Record<string, any>
+ featureList: Record<string, any>
+ featureMap: Record<string, any>
+}
+
+enum BaseKeyEnum {
+ systemConfig = 'systemConfig',
+ workSectionList = 'workSectionList',
+ featureList = 'featureList',
+ featureMap = 'featureMap',
+}
declare global {
interface Window {
__globalState: any // 瀹氫箟浣犺鏆撮湶缁� window 鐨勫彉閲忕殑绫诲瀷
- __BaseState__: {
- workSectionList: Record<string, any>
- }
+ __BaseState__: BaseState
}
}
+interface StateType<T> {
+ state: Ref<T>
+}
+const baseDataGenerate = (key?: BaseKeyEnum) => {
+ const data: BaseState = {
+ systemConfig: {
+ state: ref({}),
+ },
+ workSectionList: {
+ state: ref([]),
+ },
+ featureList: {
+ state: ref([]),
+ },
+ featureMap: {
+ state: ref({}),
+ },
+ }
+ if (key) {
+ return data[key]
+ }
+ return data
+}
+
+const getDataValue = (key: BaseKeyEnum) => {
+ const { systemConfig, workSectionList, featureList, featureMap } =
+ window.__BaseState__
+ return {
+ systemConfig: systemConfig || baseDataGenerate(BaseKeyEnum.systemConfig),
+ workSectionList:
+ workSectionList || baseDataGenerate(BaseKeyEnum.workSectionList),
+ featureList: featureList || baseDataGenerate(BaseKeyEnum.featureList),
+ featureMap: featureMap || baseDataGenerate(BaseKeyEnum.featureMap),
+ }[key]
+}
/**
* 鍏ㄥ眬鐘舵��
*/
-export const globalState = reactive<Record<string, any>>({})
+export const globalState = reactive({})
+if (window) {
+ // @ts-ignore
+ window.__BaseState__ = window.__BaseState__ || baseDataGenerate()
+}
+interface StateRef {
+ state: Ref
+}
/**
* 鍏ㄥ眬hook
* @returns
*/
-export const useGlobalState = createGlobalState(() => {
- const state = {}
+export const useGlobalState = createGlobalState<{
+ systemConfig: StateRef
+ workSectionList: StateRef
+ featureList: StateRef
+ featureMap: StateRef
+ productionLineList: StateRef
+ ProductModelList: StateRef
+ materialTypeList: StateRef
+ workStationList: StateRef
+ hasProductionLine: Ref<boolean>
+ getSystemConfig: () => Promise<any>
+ getWorkSectionList: (segmentId?: string) => Promise<any>
+ getProductModelList: () => Promise<any>
+ getFlowList: () => Promise<any>
+ getMaterialTypeList: () => Promise<any>
+ getWorkStationList: () => Promise<any>
+ getProductList: () => Promise<any>
+ // @ts-ignore
+}>(() => {
+ // if(!sessionStorage.getItem('Token')) return {}
+ /**
+ * 宸ュ簭鍒楄〃
+ */
+ const workSectionList = getDataValue(
+ BaseKeyEnum.workSectionList
+ ) as StateType<Array<any>>
+ /**
+ * 绯荤粺閰嶇疆
+ */
+ const systemConfig = getDataValue(BaseKeyEnum.systemConfig) as StateType<
+ Record<string, any>
+ >
+ /**
+ * 鐗堟湰鎺у埗
+ */
+ const featureList = getDataValue(BaseKeyEnum.featureList) as StateType<
+ Array<any>
+ >
+
+ /**
+ * 鐗堟湰鎺у埗Map
+ */
+ const featureMap = getDataValue(BaseKeyEnum.featureMap) as StateType<
+ Record<string, any>
+ >
+
+ /**
+ * 浜х嚎鍒楄〃
+ */
+ const productionLineList: StateType<Array<any>> = {
+ state: ref([]),
+ }
+ /**
+ * 浜у搧鍨嬪彿鍒楄〃
+ */
+ const ProductModelList: StateType<Array<any>> = {
+ state: ref([]),
+ }
+
+ /**
+ * 鐗╂枡鍒楄〃
+ */
+ const materialTypeList: StateType<Array<any>> = {
+ state: ref([]),
+ }
+
+ /**
+ * 宸ヤ綅鍒楄〃
+ */
+ const workStationList: StateType<Array<any>> = {
+ state: ref([]),
+ }
+
+ /**
+ * (寮傛)浜х嚎娈垫暟鎹�
+ */
+ const getProductList = async () => {
+ const res = await getEnumList('ProductionLineSegment')
+ const data = res?.map(
+ (item: { name: string; description: string; value: string }) => {
+ return {
+ ...item,
+ product: item.description,
+ }
+ }
+ )
+ productionLineList.state.value = data || []
+ return data || []
+ }
+
+ /**
+ * (寮傛)浜у搧鍨嬪彿鏁版嵁
+ */
+ const getProductModelList = async () => {
+ const res = await getEnumList('ProductModel')
+ ProductModelList.state.value = res || []
+ return res
+ }
+
+ /**
+ * (寮傛)鑾峰彇宸ュ簭
+ */
+ const getWorkSectionList = async (segmentId?: string) => {
+ const params: Record<string, any> = {
+ MaxResultCount: 999,
+ SkipCount: 0,
+ }
+ if (segmentId) {
+ params.Segment = segmentId
+ }
+ const res = await getWorkSectionApi(params)
+ const items = res.items.map((v) => {
+ return {
+ label: v.name,
+ value: v.id,
+ workSectionCode: v.code,
+ source: { ...v },
+ }
+ })
+ if (!segmentId) {
+ workSectionList.state.value = items || []
+ }
+ return items
+ }
+
+ /**
+ * (寮傛)鑾峰彇宸ヤ綅
+ */
+ const getWorkStationList = async () => {
+ const res = await getWorkStationApi({
+ MaxResultCount: 999,
+ SkipCount: 0,
+ })
+ const items = res.items.map((v) => {
+ return {
+ label: v.name,
+ value: v.id,
+ }
+ })
+ workStationList.state.value = items || []
+ return items
+ }
+
+ const config = {}
+ let systemSetTimeT: any
+ let oldSystemSetTimeT: any
+ const getSystemConfig = async (checked: boolean = false) => {
+ const fn = async () => {
+ const data = await getFormDataBySettings()
+ systemConfig.state.value = data || config
+ }
+ async function handleCheckedState() {
+ await fn()
+ await getFeatureList()
+ }
+
+ async function awaitInitLoading() {
+ return new Promise<void>((resolve) => {
+ const t = setInterval(() => {
+ if (
+ Object.keys(systemConfig.state.value).length &&
+ Object.keys(featureList.state.value).length
+ ) {
+ resolve()
+ clearInterval(t)
+ }
+ }, 100)
+ })
+ }
+ return new Promise<void>((resolve) => {
+ const getConfig = async () => {
+ const condition = systemSetTimeT !== oldSystemSetTimeT && !checked
+ oldSystemSetTimeT = systemSetTimeT
+ if (condition) {
+ await handleCheckedState()
+ resolve()
+ } else {
+ await awaitInitLoading()
+ resolve()
+ }
+
+ systemSetTimeT && clearTimeout(systemSetTimeT)
+ }
+ systemSetTimeT = setTimeout(getConfig, 100)
+ })
+ }
+ /**
+ * 鑾峰彇娴佺▼鏁版嵁
+ * @returns
+ */
+ const getFlowList = async () => {
+ const data = await getFlowData()
+ return data.items.map((item: Record<string, any>) => {
+ return {
+ label: item.name,
+ value: item.type,
+ id: item.id,
+ }
+ })
+ }
+
+ const getMaterialTypeList = async () => {
+ const res: Array<{
+ value: number
+ description: string
+ }> = await getMaterialTypesEnum()
+ const types = res.map((item) => {
+ return {
+ value: Number(item.value),
+ label: item.description,
+ }
+ })
+ materialTypeList.state.value = types
+ return types
+ // const types = []
+ // const res = await getMaterialTypes()
+ // // const
+ // await getMaterialTypesEnum()
+ // for (let key in res) {
+ // types.push({
+ // label: res[key],
+ // value: Number(key),
+ // })
+ // }
+ // materialTypeList.state.value = types
+ // return types
+ }
+
+ const getFeatureList = async () => {
+ if (
+ !featureList.state.value.length &&
+ systemConfig.state.value?.PluginEdition
+ ) {
+ const res = await getFeatureListData(
+ systemConfig.state.value?.PluginEdition
+ )
+ featureList.state.value = res.groups || []
+ res.groups.forEach((item: FeatureItemType) => {
+ item.features.forEach((feature: FeatureType) => {
+ let value: string | boolean | number = feature.value
+ const key: string = feature.name
+ if (feature.valueType.validator.name === 'BOOLEAN') {
+ value = feature.value === 'true'
+ }
+ featureMap.state.value[key] = {
+ ...feature,
+ value,
+ }
+ })
+ })
+ return res
+ }
+ return
+ }
+
+ const getVersion = (version: string) =>
+ Number(version?.split?.('.')?.join?.(''))
+ const sdkVersion = sdk.version.includes('-beta')
+ ? sdk.version.replace('-beta', '')
+ : sdk.version
+ const currentVersion = getVersion(sdkVersion)
+ const initFn = () => {
+ getProductList()
+ getProductModelList()
+ getWorkSectionList()
+ getWorkStationList()
+ getMaterialTypeList()
+ getSystemConfig()
+ }
+ /**
+ * 鏄惁鍚湁浜х嚎缁撴瀯
+ * true - 鍚湁浜х嚎缁撴瀯
+ * false - 涓嶅惈鏈変骇绾跨粨鏋�
+ */
+ const hasProductionLine = computed(() => {
+ const state: Ref<any> = systemConfig.state
+ const structure = state.value.ProductionLineStructure
+ return structure == 1
+ })
+
+ // if (import.meta.env.PROD && currentVersion >= getVersion('2.13.0')) {
+ // initFn()
+ // }
+
+ // if (import.meta.env.DEV) {
+ // initFn()
+ // }
+
+ const state = {
+ productionLineList,
+ ProductModelList,
+ workStationList,
+ materialTypeList,
+ workSectionList,
+ systemConfig,
+ featureList,
+ featureMap,
+ hasProductionLine,
+ getSystemConfig,
+ getWorkSectionList,
+ getProductModelList,
+ getFlowList,
+ getMaterialTypeList,
+ getWorkStationList,
+ getProductList,
+ }
+
+ window.__globalState = state
return state
})
--
Gitblit v1.9.3