| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- import { ref } from 'vue'
- import { fuseModels, getFuseModel, getFuseModelShowVariable } from './fuse-model'
- import { createTemploraryID, autoSetModeCallback } from './sys'
- import { custom } from '@/env'
- import {
- addStoreItem,
- deepIsRevise,
- deleteStoreItem,
- fetchStoreItems,
- recoverStoreItems,
- saveStoreItems,
- updateStoreItem
- } from '@/utils'
- import {
- MeasureType,
- fetchMeasures,
- postAddMeasure,
- postUpdateMeasure,
- postDeleteMeasure
- } from '@/api'
- import type { Measure as SMeasure } from '@/api'
- import { Message } from 'bill/index'
- export type Measure<T extends MeasureType = MeasureType> = SMeasure<T> & { selected?: boolean }
- export type Measures = Measure[]
- export const MeasureTypeMeta = {
- [MeasureType.area]: { icon: 'h-r', desc: '面积', unitDesc: '面积', unit: 'm²' },
- [MeasureType.free]: { icon: 'f-l', desc: '自由', unitDesc: '长度', unit: 'm' },
- [MeasureType.vertical]: { icon: 'v-l', desc: '垂直', unitDesc: '长度', unit: 'm' }
- }
- export const measures = ref<Measures>([])
- export const getMeasureIsShow = (measure: Measure) =>
- measure.positions.every(({modelId}) => {
- const model = getFuseModel(modelId)
- return custom.showMeasures && model && model.loaded && getFuseModelShowVariable(model).value
- })
- export const createMeasure = (measure: Partial<Measure> = {}): Measure => ({
- id: createTemploraryID(),
- fusionId: fuseModels.value[0].fusionId,
- title: MeasureTypeMeta[measure.type || MeasureType.free].unitDesc,
- positions: [],
- desc: '',
- type: MeasureType.free,
- ...measure
- })
- let bcMeasures: Measures = []
- export const getBackupMeasures = () => bcMeasures
- export const backupMeasures = () => {
- bcMeasures = measures.value.map(measure => ({...measure, positions: [...measure.positions]}))
- }
- export const recoverMeasures = recoverStoreItems(measures, getBackupMeasures)
- export const initialMeasures = fetchStoreItems(measures, async () => {
- return fuseModels.value.length ? await fetchMeasures(fuseModels.value[0].fusionId) : []
- }, backupMeasures)
- export const addMeasure = addStoreItem(measures, postAddMeasure)
- export const updateMeasure = updateStoreItem(measures, postUpdateMeasure)
- export const deleteMeasure = deleteStoreItem(measures, measure => postDeleteMeasure(measure.id))
- export const saveMeasures = saveStoreItems(
- measures,
- getBackupMeasures,
- {
- add: addMeasure,
- delete: deleteMeasure,
- update: updateMeasure
- }
- )
- export const autoSaveMeasures = autoSetModeCallback(measures, {
- isUpdate: (newMeasure) => {
- console.log(newMeasure, getBackupMeasures())
- return deepIsRevise(
- newMeasure.map(item => ({...item, selected: false})),
- getBackupMeasures().map(item => ({...item, selected: false}))
- )
- },
- backup: backupMeasures,
- recovery: recoverMeasures,
- save: async () => {
- if (!measures.value.every(record => record.title)) {
- Message.warning('测量名称不可为空')
- throw '测量名称不可为空'
- }
- await saveMeasures()
- }
- })
- export type { MeasurePosition } from '@/api'
- export { MeasureType, }
|