diff --git a/src/resources/assets/js/state.js b/src/resources/assets/js/state.js new file mode 100644 index 0000000000000000000000000000000000000000..7a93368492cb9204ab7a6471b68c9ce71750021a --- /dev/null +++ b/src/resources/assets/js/state.js @@ -0,0 +1,55 @@ +import Vue from 'vue'; +class State { + constructor(module) { + this.store = Vue.observable({ + /** + * Vue.observable 只有在对象初始化时定义的属性,才会被 Vue 2 的响应式系统处理。 + * 勿删data,主要目的就是让state.data是响应式,computed才可以监听其值的变化。 + */ + data: {} + }); + this.module = module; + } + /** + * 使用方法: + * computed: { + * getState() { + * return this.$state.get(key); // key为set时的key值 + * } + * }, + * watch: { + * getState(val) { + * // 处理逻辑 + * } + * } + */ + get(key, type) { + if (key) { + let finalKey = ''; + if (type) { + finalKey = `${this.module}_${type}_${key}`; + } else { + finalKey = `${this.module}_${key}`; + } + return this.store.data[finalKey]; + } + } + + /** + * 使用方法: + * this.$state.set(key, value); + */ + set(key, value, type) { + if (key && value != null && typeof value != 'undefined') { + let valueKey = ''; + if (type) { + valueKey = `${this.module}_${type}_${key}`; + } else { + valueKey = `${this.module}_${key}`; + } + Vue.set(this.store.data, valueKey, value); + } + } +} + +export default State; diff --git a/src/views/pages/autoexec/autoexec.js b/src/views/pages/autoexec/autoexec.js index 432580f688d798787e36eb09cb91a82f6ce75615..2dfc6b50defe9ad5b737e5893ac16806242287fb 100644 --- a/src/views/pages/autoexec/autoexec.js +++ b/src/views/pages/autoexec/autoexec.js @@ -8,6 +8,7 @@ import CompareUtil from '@/resources/assets/js/compareUtil.js'; import api from '@/resources/api/api.js'; import toolCatalogUtils from './utils/tools-catalog'; import LocalStore from '@/resources/assets/js/localStore.js'; +import State from '@/resources/assets/js/state.js'; //公共的全局组件、样式等 import '@/resources/base.js'; @@ -29,6 +30,7 @@ Vue.prototype.$api = api; Vue.prototype.$tsrouter = router; Vue.prototype.$toolCatalogUtils = toolCatalogUtils; Vue.prototype.$localStore = new LocalStore('autoexec', router); +Vue.prototype.$state = new State('autoexec'); //注入实例 new Vue({ diff --git a/src/views/pages/cmdb/cmdb.js b/src/views/pages/cmdb/cmdb.js index 2a11313026ec049fed83cdc199eade777f0d908a..0abe676c04720b89a27528e3b7c0e57b4e7b85d5 100644 --- a/src/views/pages/cmdb/cmdb.js +++ b/src/views/pages/cmdb/cmdb.js @@ -7,6 +7,7 @@ import VueI18n from 'vue-i18n'; import CompareUtil from '@/resources/assets/js/compareUtil.js'; import api from '@/resources/api/api.js'; import LocalStore from '@/resources/assets/js/localStore.js'; +import State from '@/resources/assets/js/state.js'; //公共的全局组件、样式等 import '@/resources/base.js'; @@ -28,6 +29,7 @@ Vue.config.productionTip = false; Vue.prototype.$api = api; Vue.prototype.$tsrouter = router; Vue.prototype.$localStore = new LocalStore('cmdb', router); +Vue.prototype.$state = new State('cmdb'); new Vue({ router, diff --git a/src/views/pages/dashboard/dashboard.js b/src/views/pages/dashboard/dashboard.js index 636c6b00edd562259ebda1c6f1ff567b0d4a48b7..6381e9827d09d0df18139190b47ba95c6adb06a4 100644 --- a/src/views/pages/dashboard/dashboard.js +++ b/src/views/pages/dashboard/dashboard.js @@ -8,6 +8,7 @@ import CompareUtil from '@/resources/assets/js/compareUtil.js'; import md5 from 'js-md5'; import api from '@/resources/api/api.js'; import LocalStore from '@/resources/assets/js/localStore.js'; +import State from '@/resources/assets/js/state.js'; //公共的全局组件、样式等 import '@/resources/base.js'; @@ -30,6 +31,7 @@ Vue.config.productionTip = false; Vue.prototype.$api = api; Vue.prototype.$md5 = md5; Vue.prototype.$localStore = new LocalStore('dashboard', router); +Vue.prototype.$state = new State('dashboard'); new Vue({ router, diff --git a/src/views/pages/deploy/deploy.js b/src/views/pages/deploy/deploy.js index 664beb8bc992d5679ac6224ee10170dacce433b6..27153d9b78ac21f678db22bade10245af6e6698a 100644 --- a/src/views/pages/deploy/deploy.js +++ b/src/views/pages/deploy/deploy.js @@ -6,6 +6,7 @@ import store from '@/resources/store'; import CompareUtil from '@/resources/assets/js/compareUtil.js'; import api from '@/resources/api/api.js'; import LocalStore from '@/resources/assets/js/localStore.js'; +import State from '@/resources/assets/js/state.js'; import VueI18n from 'vue-i18n'; import toolCatalogUtils from '@/views/pages/autoexec/utils/tools-catalog'; @@ -30,6 +31,7 @@ Vue.config.productionTip = false; Vue.prototype.$api = api; Vue.prototype.$toolCatalogUtils = toolCatalogUtils; Vue.prototype.$localStore = new LocalStore('deploy', router); +Vue.prototype.$state = new State('deploy'); new Vue({ router, diff --git a/src/views/pages/documentonline/documentonline.js b/src/views/pages/documentonline/documentonline.js index 5b60debb3a05ac9b46df4f17b3891c2ddda50c5d..afea239ec9b948bde237bdd07949b71358ec49ca 100644 --- a/src/views/pages/documentonline/documentonline.js +++ b/src/views/pages/documentonline/documentonline.js @@ -9,6 +9,7 @@ import md5 from 'js-md5'; import api from '@/resources/api/api.js'; import '@/resources/base.js'; import LocalStore from '@/resources/assets/js/localStore.js'; +import State from '@/resources/assets/js/state.js'; import {initRouter, initI18n} from '@/resources/init.js'; MODULEID = 'documentonline'; @@ -26,6 +27,7 @@ Vue.prototype.$api = api; Vue.prototype.$md5 = md5; Vue.prototype.$trosuter = router; Vue.prototype.$localStore = new LocalStore('documentonline', router); +Vue.prototype.$state = new State('documentonline'); new Vue({ router, diff --git a/src/views/pages/framework/framework.js b/src/views/pages/framework/framework.js index 3a1818557065cb95110e95f6160c17f5011f4495..0c56b6b9b1b43a49968bbc443b649e8773ba5e57 100644 --- a/src/views/pages/framework/framework.js +++ b/src/views/pages/framework/framework.js @@ -9,6 +9,7 @@ import VueI18n from 'vue-i18n'; import md5 from 'js-md5'; import frameworkUtils from '@/views/pages/framework/matrix/utils/utils'; import LocalStore from '@/resources/assets/js/localStore.js'; +import State from '@/resources/assets/js/state.js'; //公共的全局组件、样式等 import '@/resources/base.js'; @@ -32,6 +33,7 @@ Vue.prototype.$api = api; Vue.prototype.$md5 = md5; Vue.prototype.$frameworkUtils = frameworkUtils; Vue.prototype.$localStore = new LocalStore('framework', router); +Vue.prototype.$state = new State('framework'); new Vue({ router, diff --git a/src/views/pages/inspect/inspect.js b/src/views/pages/inspect/inspect.js index ba24b3efc9a8918e700454093000e9968ef736a2..aed3ca4201e67ac1a35f1d3fd183bad572ab640b 100644 --- a/src/views/pages/inspect/inspect.js +++ b/src/views/pages/inspect/inspect.js @@ -7,6 +7,7 @@ import VueI18n from 'vue-i18n'; import CompareUtil from '@/resources/assets/js/compareUtil.js'; import api from '@/resources/api/api.js'; import LocalStore from '@/resources/assets/js/localStore.js'; +import State from '@/resources/assets/js/state.js'; //公共的全局组件、样式等 import '@/resources/base.js'; @@ -30,6 +31,7 @@ Vue.config.productionTip = false; Vue.prototype.$api = api; Vue.prototype.$toolCatalogUtils = toolCatalogUtils; Vue.prototype.$localStore = new LocalStore('inspect', router); +Vue.prototype.$state = new State('inspect'); new Vue({ router, diff --git a/src/views/pages/knowledge/knowledge.js b/src/views/pages/knowledge/knowledge.js index a0846cee58a3e9f6a60c566217f39d8c4cd8f999..d4047e0a7303da27ae3dd2d8e355a82dbc2e1e0c 100644 --- a/src/views/pages/knowledge/knowledge.js +++ b/src/views/pages/knowledge/knowledge.js @@ -7,6 +7,7 @@ import store from '@/resources/store'; import CompareUtil from '@/resources/assets/js/compareUtil.js'; import api from '@/resources/api/api.js'; import LocalStore from '@/resources/assets/js/localStore.js'; +import State from '@/resources/assets/js/state.js'; import '@/resources/base.js'; import { initRouter, initI18n, $t } from '@/resources/init.js'; @@ -26,6 +27,7 @@ Vue.prototype.$tsrouter = router; Vue.config.productionTip = false; Vue.prototype.$api = api; Vue.prototype.$localStore = new LocalStore('knowledge', router); +Vue.prototype.$state = new State('knowledge'); router.beforeEach((to, from, next) => { let title = to.meta.title ? to.meta.title : to.name || to.path; document.title = $t(title); diff --git a/src/views/pages/pbc/pbc.js b/src/views/pages/pbc/pbc.js index dba2438c7e67ae6068fbccdc15dab05d72309b1e..bcba390093c29ffab111f8420f4fd75547bf5fab 100644 --- a/src/views/pages/pbc/pbc.js +++ b/src/views/pages/pbc/pbc.js @@ -7,6 +7,7 @@ import VueI18n from 'vue-i18n'; import CompareUtil from '@/resources/assets/js/compareUtil.js'; import api from '@/resources/api/api.js'; import LocalStore from '@/resources/assets/js/localStore.js'; +import State from '@/resources/assets/js/state.js'; //公共的全局组件、样式等 import '@/resources/base.js'; @@ -28,6 +29,7 @@ Vue.config.productionTip = false; Vue.prototype.$api = api; Vue.prototype.$tsrouter = router; Vue.prototype.$localStore = new LocalStore('pbc', router); +Vue.prototype.$state = new State('pbc'); new Vue({ router, diff --git a/src/views/pages/process/process.js b/src/views/pages/process/process.js index 7188dc0d9da71d43a3cc4502beeeddebdb454152..aff8017808d4d869ea8f98cb66c761a5708a0434 100644 --- a/src/views/pages/process/process.js +++ b/src/views/pages/process/process.js @@ -8,6 +8,7 @@ import VueI18n from 'vue-i18n'; import CompareUtil from '@/resources/assets/js/compareUtil.js'; import api from '@/resources/api/api.js'; import LocalStore from '@/resources/assets/js/localStore.js'; +import State from '@/resources/assets/js/state.js'; //公共的全局组件、样式等 import {initRouter, initI18n} from '@/resources/init.js'; @@ -27,6 +28,7 @@ Vue.config.productionTip = false; Vue.prototype.$api = api; Vue.prototype.$tsrouter = router; Vue.prototype.$localStore = new LocalStore('process', router); +Vue.prototype.$state = new State('process'); new Vue({ router, diff --git a/src/views/pages/rdm/rdm.js b/src/views/pages/rdm/rdm.js index cd5ca014379ca8986eed0e43546747ffda44eec1..280c81b4abc044a8e74be04e7b44115e64154db7 100644 --- a/src/views/pages/rdm/rdm.js +++ b/src/views/pages/rdm/rdm.js @@ -7,6 +7,7 @@ import VueI18n from 'vue-i18n'; import CompareUtil from '@/resources/assets/js/compareUtil.js'; import api from '@/resources/api/api.js'; import LocalStore from '@/resources/assets/js/localStore.js'; +import State from '@/resources/assets/js/state.js'; //公共的全局组件、样式等 import '@/resources/base.js'; @@ -28,6 +29,7 @@ Vue.config.productionTip = false; Vue.prototype.$api = api; Vue.prototype.$tsrouter = router; Vue.prototype.$localStore = new LocalStore('rdm', router); +Vue.prototype.$state = new State('rdm'); new Vue({ router, diff --git a/src/views/pages/report/report.js b/src/views/pages/report/report.js index 6701013a7c87ebc4d49287e8f7fdac394d8b858f..c66681f5797596b6604e938a2c071cf428db50d6 100644 --- a/src/views/pages/report/report.js +++ b/src/views/pages/report/report.js @@ -7,6 +7,7 @@ import VueI18n from 'vue-i18n'; import CompareUtil from '@/resources/assets/js/compareUtil.js'; import api from '@/resources/api/api.js'; import LocalStore from '@/resources/assets/js/localStore.js'; +import State from '@/resources/assets/js/state.js'; import md5 from 'js-md5'; @@ -42,6 +43,7 @@ Vue.prototype.$api = api; Vue.prototype.$md5 = md5; Vue.prototype.$tsrouter = router; Vue.prototype.$localStore = new LocalStore('report', router); +Vue.prototype.$state = new State('report'); new Vue({ router,