index.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. import browser from "@/utils/browser"
  4. import { deepClone } from "@/utils/other.js";
  5. Vue.use(Vuex)
  6. const store = new Vuex.Store({
  7. state: {
  8. userAvatar: '',
  9. userNickName: '',
  10. info: '',
  11. // todo: 新版本开发完毕后就不需要这个了
  12. backupInfo: '',
  13. showInfo: '',
  14. hotspot: '',
  15. backupHotSpot: '',
  16. initScene: '',
  17. tablist: [],
  18. temptablist: [],
  19. vrlist: [],
  20. allVrlist: [],
  21. sceneList: [],
  22. activeItem: '',
  23. isEditing: false,
  24. isShow: false,
  25. uploadStatusListAudio: [],
  26. uploadStatusListImage: [],
  27. uploadStatusListPano: [],
  28. uploadStatusListVideo: [],
  29. // 编辑器-导航-场景导航中,拖拽时要用到
  30. editorNavDragInfo: {
  31. type: '', // 'topologyGroupLevel1': 拓扑结构中一级分组;'topologyGroupLevel2': 拓扑结构中二级分组;'scene': 场景(全景图和三维场景)
  32. node: {},
  33. }
  34. },
  35. getters: {
  36. userAvatar: state => state.userAvatar,
  37. userNickName: state => state.userNickName,
  38. isEditing: state => state.isEditing,
  39. info: state => state.info,
  40. catalogTopology: (state) => {
  41. console.log('触发计算catalogTopology');
  42. if (!state.info) {
  43. return
  44. }
  45. //四层:root,level1(一级分类),level2(二级分类或直属于一级分类的场景), level3(场景)
  46. let root = deepClone(state.info.catalogRoot)
  47. // 对于每个一级分类
  48. for (const itemLevel1 of root) {
  49. // 指定每个一级分类的下级
  50. itemLevel1.childrenTemp = []
  51. for (const itemLevel2Id of itemLevel1.children) {
  52. for (const catalogsItem of state.info.catalogs) {
  53. if (itemLevel2Id === catalogsItem.id) {
  54. itemLevel1.childrenTemp.push(deepClone(catalogsItem))
  55. // 对于该二级分类
  56. const itemLevel2 = itemLevel1.childrenTemp[itemLevel1.childrenTemp.length - 1]
  57. itemLevel2.children = []
  58. // 对于每个三级元素
  59. for (const itemLevel3 of state.info.scenes) {
  60. // 如果属于上述二级分类
  61. if (itemLevel2.id === itemLevel3.category /* 注意拼写!!! */) {
  62. itemLevel2.children.push(deepClone(itemLevel3))
  63. }
  64. }
  65. // 按weight排序
  66. itemLevel2.children.sort((a, b) => {
  67. if (a.weight === undefined && b.weight === undefined) {
  68. return 0
  69. } else if (a.weight !== undefined && b.weight === undefined) {
  70. return -1
  71. } else if (a.weight === undefined && b.weight !== undefined) {
  72. return 1
  73. } else {
  74. return a.weight - b.weight
  75. }
  76. })
  77. break
  78. }
  79. }
  80. }
  81. itemLevel1.children = itemLevel1.childrenTemp
  82. delete itemLevel1.childrenTemp
  83. }
  84. return root
  85. },
  86. showInfo: state => state.showInfo,
  87. backupInfo: state => state.backupInfo,
  88. hotspot: state => state.hotspot,
  89. backupHotSpot: state => state.backupHotSpot,
  90. initScene: state => state.initScene,
  91. activeItem: state => state.activeItem,
  92. vrlist: state => state.vrlist,
  93. tablist: state => state.tablist,
  94. temptablist: state => state.temptablist,
  95. sceneList: state => state.sceneList,
  96. isShow: state => state.isShow,
  97. allVrlist: state => state.allVrlist,
  98. uploadStatusListAudio: state => state.uploadStatusListAudio,
  99. uploadStatusListImage: state => state.uploadStatusListImage,
  100. uploadStatusListPano: state => state.uploadStatusListPano,
  101. uploadStatusListVideo: state => state.uploadStatusListVideo,
  102. editorNavDragInfo: state => state.editorNavDragInfo,
  103. },
  104. mutations: {
  105. SetUserAvatar(state, avatar) {
  106. if (typeof avatar === 'string') {
  107. state.userAvatar = avatar
  108. }
  109. },
  110. SetUserNickName(state, nickName) {
  111. if (typeof nickName === 'string') {
  112. state.userNickName = nickName
  113. }
  114. },
  115. SetTabList(state, list) {
  116. state.tablist = list
  117. },
  118. SetTempTabList(state, list) {
  119. state.temptablist = list
  120. },
  121. SetVrList(state, list) {
  122. state.vrlist = list
  123. },
  124. SetSceneList(state, list) {
  125. state.sceneList = list
  126. },
  127. UpdateIsShowState(state, isShow) {
  128. state.isShow = isShow
  129. },
  130. UpdateIsEditingState(state, isShow) {
  131. state.isEditing = isShow
  132. },
  133. SetAllVrlist(state, list) {
  134. state.allVrlist = list
  135. },
  136. SetInitScene(state, scene) {
  137. state.initScene = scene
  138. },
  139. SetActiveItem(state, scene) {
  140. state.activeItem = scene
  141. },
  142. SetShowInfo(state, data) {
  143. state.showInfo = data
  144. },
  145. SetInfo(state, data) {
  146. state.info = data
  147. this.commit("BackupInfo", browser.CloneObject(data))
  148. },
  149. BackupInfo(state, data) {
  150. state.backupInfo = data
  151. },
  152. SetHotspot(state, data) {
  153. state.hotspot = data
  154. this.commit("BackupHotSpot", browser.CloneObject(data))
  155. },
  156. BackupHotSpot(state, data) {
  157. state.backupHotSpot = data
  158. },
  159. setEditorNavDragType(state, data) {
  160. if (!['topologyGroupLevel1', 'topologyGroupLevel2', 'scene'].includes(data)) {
  161. throw("拖拽类型必须是'topologyGroupLevel1', 'topologyGroupLevel2', 'scene'之一!")
  162. }
  163. state.editorNavDragInfo.type = data
  164. },
  165. setEditorNavDragNode(state, data) {
  166. state.editorNavDragInfo.node = data
  167. },
  168. clearEditorNavDragInfo(state) {
  169. console.log('clear drag info...');
  170. state.editorNavDragInfo.type = ''
  171. state.editorNavDragInfo.node = {}
  172. }
  173. },
  174. actions: {
  175. refreshUserInfo(context) {
  176. try {
  177. const userInfo = JSON.parse(localStorage.getItem('info'))
  178. context.commit('SetUserAvatar', userInfo.head)
  179. context.commit('SetUserNickName', userInfo.nickName)
  180. } catch (error) {
  181. console.log('从storage没有读取到有意义的info,store里用户信息置空。')
  182. context.commit('SetUserAvatar', '')
  183. context.commit('SetUserNickName', '')
  184. }
  185. },
  186. },
  187. modules: {
  188. }
  189. })
  190. export default store