tagging-positions.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { ref } from 'vue'
  2. import { autoSetModeCallback, createTemploraryID } from './sys'
  3. import { getFuseModel, getFuseModelShowVariable } from './fuse-model'
  4. import { custom } from '@/env'
  5. import {
  6. fetchTaggingPositions,
  7. postAddTaggingPosition,
  8. postDeleteTaggingPosition,
  9. postUpdateTaggingPosition,
  10. } from '@/api'
  11. import {
  12. deleteStoreItem,
  13. addStoreItem,
  14. updateStoreItem,
  15. saveStoreItems,
  16. recoverStoreItems
  17. } from '@/utils'
  18. import type { TaggingPosition, TaggingPositions } from '@/api'
  19. import type { Tagging } from './tagging'
  20. export type { TaggingPosition, TaggingPositions }
  21. export const taggingPositions = ref<TaggingPositions>([])
  22. export const createTaggingPosition = (position: Partial<TaggingPosition> = {}): TaggingPosition => ({
  23. id: createTemploraryID(),
  24. taggingId: '',
  25. modelId: '',
  26. localPos: { x: 0, y: 0, z: 0 },
  27. ...position
  28. })
  29. export const getTaggingPositions = (tagging: Tagging) =>
  30. taggingPositions.value.filter(position => position.taggingId === tagging.id) || []
  31. export const getTaggingPositionIsShow = (position: TaggingPosition) => {
  32. const model = getFuseModel(position.modelId)
  33. return custom.showTaggings && model && model.loaded && getFuseModelShowVariable(model).value
  34. }
  35. let bcPositions: TaggingPositions = []
  36. export const getBackupTaggingPositions = () => bcPositions
  37. export const backupTaggingPositions = () => {
  38. bcPositions = taggingPositions.value.map(position => ({
  39. ...position,
  40. localPos: { ...position.localPos },
  41. }))
  42. }
  43. export const initTaggingPositionsByTagging = async (tagging: Tagging) => {
  44. const positions = await fetchTaggingPositions(tagging.id)
  45. taggingPositions.value = taggingPositions.value
  46. .filter(position => position.taggingId !== tagging.id)
  47. .concat(positions)
  48. backupTaggingPositions()
  49. }
  50. export const recoverTaggingPositions = recoverStoreItems(taggingPositions, getBackupTaggingPositions)
  51. export const addTaggingPosition = addStoreItem(taggingPositions, postAddTaggingPosition)
  52. export const updateTaggingPosition = updateStoreItem(taggingPositions, postUpdateTaggingPosition)
  53. export const deleteTaggingPosition = deleteStoreItem(taggingPositions, postDeleteTaggingPosition)
  54. export const saveTaggingPositions = saveStoreItems(
  55. taggingPositions,
  56. getBackupTaggingPositions,
  57. {
  58. add: addTaggingPosition,
  59. update: updateTaggingPosition,
  60. delete: deleteTaggingPosition,
  61. }
  62. )
  63. export const autoSaveTaggingPositions = autoSetModeCallback(taggingPositions, {
  64. backup: backupTaggingPositions,
  65. recovery: recoverTaggingPositions,
  66. save: saveTaggingPositions,
  67. })