sync.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import axios from '@/dbo/main'
  2. import { list } from "@/store/measure";
  3. import {baseLines} from "@/store/baseLine";
  4. import {basePoints} from "@/store/basePoint";
  5. import {fixPoints} from "@/store/fixPoint";
  6. import {photos} from "@/store/photos";
  7. import {accidentPhotos} from "@/store/accidentPhotos";
  8. import {roadPhotos} from "@/store/roadPhotos";
  9. import {debounce, getId} from '@/utils'
  10. import {watch} from "vue";
  11. import {params} from "@/hook";
  12. import router from "@/router";
  13. const global = window as any
  14. const api = import.meta.env.DEV && !global.android
  15. // const api = import.meta.env.DEV
  16. ? {
  17. async setStore(data) {
  18. return axios.post("sceneStore", data)
  19. },
  20. async getStore() {
  21. return (await axios.get("/attach/sceneStore")).data
  22. },
  23. async uploadImage(file) {
  24. return (await axios({
  25. url: "/upload",
  26. headers: { "Content-Type": "multipart/form-data" },
  27. method: 'post',
  28. data: { file }
  29. })).data.data
  30. },
  31. async downloadImage(file) {
  32. window.open(URL.createObjectURL(file))
  33. },
  34. closePage() {
  35. }
  36. }
  37. : {
  38. setStore(data) {
  39. return new Promise(resolve => {
  40. global.android.setSceneStore(params.m, data)
  41. global.setSceneStoreCallback = resolve
  42. })
  43. },
  44. getStore() {
  45. return new Promise(resolve => {
  46. global.getSceneStoreCallback = resolve
  47. global.android.getSceneStore(params.m)
  48. })
  49. },
  50. uploadImage(file) {
  51. return new Promise(resolve => {
  52. global.uploadImageCallback = resolve
  53. global.android.uploadImage(params.m, file)
  54. })
  55. },
  56. downloadImage(file) {
  57. return new Promise(resolve => {
  58. global.downloadImageCallback = resolve
  59. global.android.downloadImage(params.m, file)
  60. })
  61. },
  62. closePage() {
  63. return new Promise(resolve => {
  64. global.closeWebViewCallback = resolve
  65. global.android.closeWebView()
  66. })
  67. }
  68. }
  69. export const back = () => {
  70. if (history.state.back) {
  71. router.back()
  72. } else {
  73. api.closePage()
  74. }
  75. }
  76. const loadStore = async () => {
  77. const data: any = await api.getStore()
  78. list.value = data?.measures || []
  79. baseLines.value = data?.baseLines || []
  80. basePoints.value = data?.basePoints || []
  81. fixPoints.value = data?.fixPoints || []
  82. photos.value = data?.photos || []
  83. accidentPhotos.value = data?.accidentPhotos || []
  84. roadPhotos.value = data?.roadPhotos || []
  85. syncSceneStore()
  86. }
  87. export const updateSceneStore = debounce(api.setStore, 1000)
  88. export const uploadImage = (blob: Blob) => {
  89. const file = new File([blob], `${getId()}.jpg`)
  90. return api.uploadImage(file)
  91. }
  92. export const downloadImage = async (data: Blob | string, name: string = getId()) => {
  93. const blob: Blob = typeof data === "string"
  94. ? (await axios.get(data, { responseType: "blob" })).data
  95. : data
  96. const file = new File([blob], name, {type: "image/jpeg"})
  97. await api.downloadImage(file)
  98. }
  99. const syncSceneStore = () => {
  100. return watch(
  101. () => ({
  102. measures: list.value,
  103. baseLines: baseLines.value,
  104. basePoints: basePoints.value,
  105. fixPoints: fixPoints.value,
  106. photos: photos.value,
  107. accidentPhotos: accidentPhotos.value,
  108. roadPhotos: roadPhotos.value
  109. }),
  110. (data) => {
  111. updateSceneStore(data)
  112. },
  113. { deep: true }
  114. )
  115. }
  116. loadStore()
  117. .catch((e) => {
  118. console.error(e)
  119. alert("场景数据加载失败")
  120. })