|
@@ -1,5 +1,6 @@
|
|
|
-import { ref } from 'vue'
|
|
|
+import { computed, ref, watchPostEffect } from 'vue'
|
|
|
import { autoSetModeCallback } from './sys'
|
|
|
+import { showModelsMapStack, custom } from '@/env'
|
|
|
import {
|
|
|
fetchModels,
|
|
|
postAddModel,
|
|
@@ -15,10 +16,32 @@ import {
|
|
|
recoverStoreItems
|
|
|
} from '@/utils'
|
|
|
|
|
|
-import type { Models } from '@/api'
|
|
|
+import type { Model as SModel } from '@/api'
|
|
|
+
|
|
|
+export type Model = SModel & { loaded: boolean, progress: number }
|
|
|
+export type Models = Model[]
|
|
|
|
|
|
export const models = ref<Models>([])
|
|
|
|
|
|
+export const getModelShowVariable = (model: Model) =>
|
|
|
+ computed({
|
|
|
+ get: () => custom.showModelsChangeStore
|
|
|
+ ? model.show
|
|
|
+ : custom.showModelsMap.get(model) || false,
|
|
|
+ set: (show: boolean) => {
|
|
|
+ if (custom.showModelsChangeStore) {
|
|
|
+ model.show = show
|
|
|
+ } else {
|
|
|
+ custom.showModelsMap.set(model, show)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+export const modelsLoaded = ref(false)
|
|
|
+watchPostEffect(() => {
|
|
|
+ modelsLoaded.value = models.value.every(model => model.loaded === true)
|
|
|
+})
|
|
|
+
|
|
|
let bcModels: Models = []
|
|
|
export const getBackupModels = () => bcModels
|
|
|
export const backupModels = () => {
|
|
@@ -33,7 +56,23 @@ export const recoverModels = recoverStoreItems(models, getBackupModels)
|
|
|
export const addModel = addStoreItem(models, postAddModel)
|
|
|
export const updateModel = updateStoreItem(models, postUpdateModels)
|
|
|
export const deleteModel = deleteStoreItem(models, model => postDeleteModel(model.id))
|
|
|
-export const initialModels = fetchStoreItems(models, fetchModels, backupModels)
|
|
|
+export const initialModels = fetchStoreItems(
|
|
|
+ models,
|
|
|
+ fetchModels,
|
|
|
+ () => {
|
|
|
+ const showModelsMap = new Map<Model, boolean>()
|
|
|
+ for (const model of models.value) {
|
|
|
+ showModelsMap.set(model, model.show)
|
|
|
+ }
|
|
|
+ showModelsMapStack.push(ref(showModelsMap))
|
|
|
+ backupModels()
|
|
|
+ },
|
|
|
+ smodels => smodels.map(model => ({
|
|
|
+ ...model,
|
|
|
+ loaded: false,
|
|
|
+ progress: 0,
|
|
|
+ })),
|
|
|
+)
|
|
|
export const saveModels = saveStoreItems(
|
|
|
models,
|
|
|
getBackupModels,
|
|
@@ -43,11 +82,14 @@ export const saveModels = saveStoreItems(
|
|
|
delete: deleteModel,
|
|
|
}
|
|
|
)
|
|
|
+
|
|
|
+
|
|
|
export const autoSaveModels = autoSetModeCallback(models, {
|
|
|
backup: backupModels,
|
|
|
recovery: recoverModels,
|
|
|
save: saveModels,
|
|
|
+ isUpdate: () => modelsLoaded.value,
|
|
|
})
|
|
|
|
|
|
export { ModelType, ModelTypeDesc } from '@/api'
|
|
|
-export type { Model, Models, ModelAttrs } from '@/api'
|
|
|
+export type { ModelAttrs } from '@/api'
|