tagging-positions.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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 = taggingPositions.value
  40. .filter(position => position.taggingId !== tagging.id)
  41. .concat(positions)
  42. backupTaggingPositions()
  43. }
  44. export const recoverTaggingPositions = recoverStoreItems(taggingPositions, getBackupTaggingPositions)
  45. export const addTaggingPosition = addStoreItem(taggingPositions, postAddTaggingPosition)
  46. export const updateTaggingPosition = updateStoreItem(taggingPositions, postUpdateTaggingPosition)
  47. export const deleteTaggingPosition = deleteStoreItem(taggingPositions, postDeleteTaggingPosition)
  48. export const saveTaggingPositions = saveStoreItems(
  49. taggingPositions,
  50. getBackupTaggingPositions,
  51. {
  52. add: addTaggingPosition,
  53. update: updateTaggingPosition,
  54. delete: deleteTaggingPosition,
  55. }
  56. )
  57. export const autoSaveTaggingPositions = autoSetModeCallback(taggingPositions, {
  58. backup: backupTaggingPositions,
  59. recovery: recoverTaggingPositions,
  60. save: saveTaggingPositions,
  61. })