From c3a605e1eca1af17ea88ad279834fb2258b2e6ef Mon Sep 17 00:00:00 2001 From: yaojn Date: Wed, 11 Jun 2025 12:06:27 +0800 Subject: [PATCH] =?UTF-8?q?-=20[=E5=8A=9F=E8=83=BD]=E6=96=B0=E5=A2=9Estate?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=8A=B6=E6=80=81=E7=9A=84=E6=96=B9=E6=B3=95?= =?UTF-8?q?=20=20=20-=20[=E5=85=B3=E8=81=94]#[1436324391780352]=E6=96=B0?= =?UTF-8?q?=E5=A2=9Estate=E7=AE=A1=E7=90=86=E7=8A=B6=E6=80=81=E7=9A=84?= =?UTF-8?q?=E6=96=B9=E6=B3=95=20http://192.168.0.96:8090/demo/rdm.html#/st?= =?UTF-8?q?ory-detail/939050947543040/939050947543042/1436324391780352?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/resources/assets/js/state.js | 55 +++++++++++++++++++ src/views/pages/autoexec/autoexec.js | 2 + src/views/pages/cmdb/cmdb.js | 2 + src/views/pages/dashboard/dashboard.js | 2 + src/views/pages/deploy/deploy.js | 2 + .../pages/documentonline/documentonline.js | 2 + src/views/pages/framework/framework.js | 2 + src/views/pages/inspect/inspect.js | 2 + src/views/pages/knowledge/knowledge.js | 2 + src/views/pages/pbc/pbc.js | 2 + src/views/pages/process/process.js | 2 + src/views/pages/rdm/rdm.js | 2 + src/views/pages/report/report.js | 2 + 13 files changed, 79 insertions(+) create mode 100644 src/resources/assets/js/state.js diff --git a/src/resources/assets/js/state.js b/src/resources/assets/js/state.js new file mode 100644 index 00000000..7a933684 --- /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 432580f6..2dfc6b50 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 2a113130..0abe676c 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 636c6b00..6381e982 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 664beb8b..27153d9b 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 5b60debb..afea239e 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 3a181855..0c56b6b9 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 ba24b3ef..aed3ca42 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 a0846cee..d4047e0a 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 dba2438c..bcba3900 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 7188dc0d..aff80178 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 cd5ca014..280c81b4 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 6701013a..c66681f5 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, -- Gitee