123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- import Vue from 'vue'
- import Vuex from 'vuex'
- import browser from "@/utils/browser"
- import { deepClone } from "@/utils/other.js";
- Vue.use(Vuex)
- const store = new Vuex.Store({
- state: {
- userAvatar: '',
- userNickName: '',
- info: '',
- backupInfo: '',
- showInfo: '',
- hotspot: '',
- backupHotSpot: '',
- initScene: '',
- tablist: [],
- temptablist: [],
- vrlist: [],
- allVrlist: [],
- activeItem: '',
- isEditing: false,
- isShow: false,
- uploadStatusListAudio: [],
- uploadStatusListImage: [],
- uploadStatusListPano: [],
- uploadStatusListVideo: [],
- // 编辑器-导航-场景导航中,拖拽时要用到
- editorNavDragInfo: {
- type: '', // 'topologyGroupLevel1': 拓扑结构中一级分组;'topologyGroupLevel2': 拓扑结构中二级分组;'scene': 场景(全景图和三维场景)
- node: {},
- }
- },
- getters: {
- userAvatar: state => state.userAvatar,
- userNickName: state => state.userNickName,
- isEditing: state => state.isEditing,
- info: state => state.info,
- catalogTopology: (state) => {
- if (!state.info || !state.info.catalogRoot || !state.info.catalogs) {
- return
- }
- //四层:root,level1(一级分类),level2(二级分类或直属于一级分类的场景), level3(场景)
- let root = deepClone(state.info.catalogRoot)
- // 对于每个一级分类
- for (const itemLevel1 of root) {
- // 指定每个一级分类的下级
- itemLevel1.childrenTemp = []
- for (const itemLevel2Id of itemLevel1.children) {
- for (const catalogsItem of state.info.catalogs) {
- if (itemLevel2Id === catalogsItem.id) {
- const itemLevel2 = deepClone(catalogsItem)
- itemLevel2.parentId = itemLevel1.id // 看起来,vuex getter中的数据如果存在循环引用,在通过mutation转而再存储到vuex中时,会导致调用栈溢出,原因难道是vuex mutation在深拷贝时没有考虑循环引用的情况?所以这里不进行循环引用,只记录parent的id。
- itemLevel2.children = []
- itemLevel1.childrenTemp.push(itemLevel2)
- // 对于每个三级元素
- for (const sceneItem of state.info.scenes) {
- // 如果属于上述二级分类
- if (itemLevel2.id === sceneItem.category /* 注意拼写!!! */) {
- const itemLevel3 = deepClone(sceneItem)
- itemLevel3.parentId = itemLevel2.id // 看起来,vuex getter中的数据如果存在循环引用,在通过mutation转而再存储到vuex中时,会导致调用栈溢出,原因难道是vuex mutation在深拷贝时没有考虑循环引用的情况?所以这里不进行循环引用,只记录parent的id。
- itemLevel2.children.push(itemLevel3)
- }
- }
- // 按weight排序
- itemLevel2.children.sort((a, b) => {
- if (a.weight === undefined && b.weight === undefined) {
- return 0
- } else if (a.weight !== undefined && b.weight === undefined) {
- return -1
- } else if (a.weight === undefined && b.weight !== undefined) {
- return 1
- } else {
- return a.weight - b.weight
- }
- })
- break
- }
- }
- }
- itemLevel1.children = itemLevel1.childrenTemp
- delete itemLevel1.childrenTemp
- }
- return root
- },
- showInfo: state => state.showInfo,
- backupInfo: state => state.backupInfo,
- hotspot: state => state.hotspot,
- backupHotSpot: state => state.backupHotSpot,
- initScene: state => state.initScene,
- activeItem: state => state.activeItem,
- vrlist: state => state.vrlist,
- tablist: state => state.tablist,
- temptablist: state => state.temptablist,
- isShow: state => state.isShow,
- allVrlist: state => state.allVrlist,
- uploadStatusListAudio: state => state.uploadStatusListAudio,
- uploadStatusListImage: state => state.uploadStatusListImage,
- uploadStatusListPano: state => state.uploadStatusListPano,
- uploadStatusListVideo: state => state.uploadStatusListVideo,
- editorNavDragInfo: state => state.editorNavDragInfo,
- },
- mutations: {
- SetUserAvatar(state, avatar) {
- if (typeof avatar === 'string') {
- state.userAvatar = avatar
- }
- },
- SetUserNickName(state, nickName) {
- if (typeof nickName === 'string') {
- state.userNickName = nickName
- }
- },
- SetTabList(state, list) {
- state.tablist = list
- },
- SetTempTabList(state, list) {
- state.temptablist = list
- },
- SetVrList(state, list) {
- state.vrlist = list
- },
- UpdateIsShowState(state, isShow) {
- state.isShow = isShow
- },
- UpdateIsEditingState(state, isShow) {
- state.isEditing = isShow
- },
- SetAllVrlist(state, list) {
- state.allVrlist = list
- },
- SetInitScene(state, scene) {
- state.initScene = scene
- },
- SetActiveItem(state, scene) {
- state.activeItem = scene
- },
- SetShowInfo(state, data) {
- state.showInfo = data
- },
- SetInfo(state, data) {
- state.info = data
- this.commit("BackupInfo", browser.CloneObject(data))
- },
- BackupInfo(state, data) {
- state.backupInfo = data
- },
- SetHotspot(state, data) {
- state.hotspot = data
- this.commit("BackupHotSpot", browser.CloneObject(data))
- },
- BackupHotSpot(state, data) {
- state.backupHotSpot = data
- },
- setUploadStatusListImage(state, data) {
- state.uploadStatusListImage = data
- },
- setUploadStatusListAudio(state, data) {
- state.uploadStatusListAudio = data
- },
- setUploadStatusListVideo(state, data) {
- state.uploadStatusListVideo = data
- },
-
- setEditorNavDragType(state, data) {
- if (!['topologyGroupLevel1', 'topologyGroupLevel2', 'scene'].includes(data)) {
- throw("拖拽类型必须是'topologyGroupLevel1', 'topologyGroupLevel2', 'scene'之一!")
- }
- state.editorNavDragInfo.type = data
- },
- setEditorNavDragNode(state, data) {
- state.editorNavDragInfo.node = data
- },
- clearEditorNavDragInfo(state) {
- state.editorNavDragInfo.type = ''
- state.editorNavDragInfo.node = {}
- }
- },
- actions: {
- refreshUserInfo(context) {
- try {
- const userInfo = JSON.parse(localStorage.getItem('info'))
- context.commit('SetUserAvatar', userInfo.head)
- context.commit('SetUserNickName', userInfo.nickName)
- } catch (error) {
- console.log('从storage没有读取到有意义的info,store里用户信息置空。')
- context.commit('SetUserAvatar', '')
- context.commit('SetUserNickName', '')
- }
- },
- },
- modules: {
- }
- })
- export default store
|