tagging-positions.ts 2.1 KB

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