Commit 8e0415a8fea1193bd166301d3bd98d03735baa0b

Authored by YunaiV
1 parent 5036971f

v3.8.0 新增tab对象简化页签操作

yudao-ui-admin/src/plugins/index.js
  1 +import tab from './tab'
1 import auth from './auth' 2 import auth from './auth'
2 import cache from './cache' 3 import cache from './cache'
3 import modal from './modal' 4 import modal from './modal'
@@ -5,6 +6,8 @@ import download from './download' @@ -5,6 +6,8 @@ import download from './download'
5 6
6 export default { 7 export default {
7 install(Vue) { 8 install(Vue) {
  9 + // 页签操作
  10 + Vue.prototype.$tab = tab
8 // 认证对象 11 // 认证对象
9 Vue.prototype.$auth = auth 12 Vue.prototype.$auth = auth
10 // 缓存对象 13 // 缓存对象
yudao-ui-admin/src/plugins/tab.js 0 → 100644
  1 +import store from '@/store'
  2 +import router from '@/router';
  3 +
  4 +export default {
  5 + // 刷新当前tab页签
  6 + refreshPage(obj) {
  7 + const { path, query, matched } = router.currentRoute;
  8 + if (obj === undefined) {
  9 + matched.forEach((m) => {
  10 + if (m.components && m.components.default && m.components.default.name) {
  11 + if (!['Layout', 'ParentView'].includes(m.components.default.name)) {
  12 + obj = { name: m.components.default.name, path: path, query: query };
  13 + }
  14 + }
  15 + });
  16 + }
  17 + return store.dispatch('tagsView/delCachedView', obj).then(() => {
  18 + const { path, query } = obj
  19 + router.replace({
  20 + path: '/redirect' + path,
  21 + query: query
  22 + })
  23 + })
  24 + },
  25 + // 关闭当前tab页签,打开新页签
  26 + closeOpenPage(obj) {
  27 + store.dispatch("tagsView/delView", router.currentRoute);
  28 + if (obj !== undefined) {
  29 + return router.push(obj);
  30 + }
  31 + },
  32 + // 关闭指定tab页签
  33 + closePage(obj) {
  34 + if (obj === undefined) {
  35 + return store.dispatch('tagsView/delView', router.currentRoute).then(({ lastPath }) => {
  36 + return router.push(lastPath || '/');
  37 + });
  38 + }
  39 + return store.dispatch('tagsView/delView', obj);
  40 + },
  41 + // 关闭所有tab页签
  42 + closeAllPage() {
  43 + return store.dispatch('tagsView/delAllViews');
  44 + },
  45 + // 关闭左侧tab页签
  46 + closeLeftPage(obj) {
  47 + return store.dispatch('tagsView/delLeftTags', obj || router.currentRoute);
  48 + },
  49 + // 关闭右侧tab页签
  50 + closeRightPage(obj) {
  51 + return store.dispatch('tagsView/delRightTags', obj || router.currentRoute);
  52 + },
  53 + // 关闭其他tab页签
  54 + closeOtherPage(obj) {
  55 + return store.dispatch('tagsView/delOthersViews', obj || router.currentRoute);
  56 + },
  57 + // 添加tab页签
  58 + openPage(title, url) {
  59 + var obj = { path: url, meta: { title: title } }
  60 + store.dispatch('tagsView/addView', obj);
  61 + return router.push(url);
  62 + },
  63 + // 修改tab页签
  64 + updatePage(obj) {
  65 + return store.dispatch('tagsView/updateVisitedView', obj);
  66 + }
  67 +}
yudao-ui-admin/src/store/modules/tagsView.js
@@ -14,7 +14,7 @@ const mutations = { @@ -14,7 +14,7 @@ const mutations = {
14 }, 14 },
15 ADD_CACHED_VIEW: (state, view) => { 15 ADD_CACHED_VIEW: (state, view) => {
16 if (state.cachedViews.includes(view.name)) return 16 if (state.cachedViews.includes(view.name)) return
17 - if (!view.meta.noCache) { 17 + if (view.meta && !view.meta.noCache) {
18 state.cachedViews.push(view.name) 18 state.cachedViews.push(view.name)
19 } 19 }
20 }, 20 },
yudao-ui-admin/src/views/bpm/form/formEditor.vue
@@ -449,8 +449,7 @@ export default { @@ -449,8 +449,7 @@ export default {
449 }, 449 },
450 /** 关闭按钮 */ 450 /** 关闭按钮 */
451 close() { 451 close() {
452 - this.$store.dispatch("tagsView/delView", this.$route);  
453 - this.$router.push({ path: "/bpm/manager/form", query: { t: Date.now()}}) 452 + this.$tab.closeOpenPage({ path: "/bpm/manager/form" });
454 }, 453 },
455 encodeFields() { 454 encodeFields() {
456 const fields = [] 455 const fields = []
yudao-ui-admin/src/views/bpm/model/modelEditor.vue
@@ -111,8 +111,7 @@ export default { @@ -111,8 +111,7 @@ export default {
111 }, 111 },
112 /** 关闭按钮 */ 112 /** 关闭按钮 */
113 close() { 113 close() {
114 - this.$store.dispatch("tagsView/delView", this.$route);  
115 - this.$router.push({ path: "/bpm/manager/model", query: { t: Date.now()}}) 114 + this.$tab.closeOpenPage({ path: "/bpm/manager/model" });
116 }, 115 },
117 } 116 }
118 }; 117 };
yudao-ui-admin/src/views/bpm/oa/leave/create.vue
@@ -66,8 +66,7 @@ export default { @@ -66,8 +66,7 @@ export default {
66 // 添加的提交 66 // 添加的提交
67 createLeave(this.form).then(response => { 67 createLeave(this.form).then(response => {
68 this.$modal.msgSuccess("发起成功"); 68 this.$modal.msgSuccess("发起成功");
69 - this.$store.dispatch("tagsView/delView", this.$route);  
70 - this.$router.push({ path: "/bpm/oa/leave"}); 69 + this.$tab.closeOpenPage({ path: "/bpm/oa/leave" });
71 }); 70 });
72 }); 71 });
73 } 72 }
yudao-ui-admin/src/views/bpm/processInstance/create.vue
@@ -146,7 +146,7 @@ export default { @@ -146,7 +146,7 @@ export default {
146 }).then(response => { 146 }).then(response => {
147 this.$modal.msgSuccess("发起流程成功"); 147 this.$modal.msgSuccess("发起流程成功");
148 // 关闭当前窗口 148 // 关闭当前窗口
149 - this.$store.dispatch("tagsView/delView", this.$route); 149 + this.$tab.closeOpenPage();
150 this.$router.go(-1); 150 this.$router.go(-1);
151 }).catch(() => { 151 }).catch(() => {
152 conf.disabled = false; // 表单开启 152 conf.disabled = false; // 表单开启
yudao-ui-admin/src/views/bpm/processInstance/detail.vue
@@ -302,7 +302,7 @@ export default { @@ -302,7 +302,7 @@ export default {
302 }).then(response => { 302 }).then(response => {
303 this.$modal.msgSuccess("发起流程成功"); 303 this.$modal.msgSuccess("发起流程成功");
304 // 关闭当前窗口 304 // 关闭当前窗口
305 - this.$store.dispatch("tagsView/delView", this.$route); 305 + this.$tab.closeOpenPage();
306 this.$router.go(-1); 306 this.$router.go(-1);
307 }).catch(() => { 307 }).catch(() => {
308 conf.disabled = false; // 表单开启 308 conf.disabled = false; // 表单开启
yudao-ui-admin/src/views/system/user/profile/resetPwd.vue
@@ -64,8 +64,7 @@ export default { @@ -64,8 +64,7 @@ export default {
64 }); 64 });
65 }, 65 },
66 close() { 66 close() {
67 - this.$store.dispatch("tagsView/delView", this.$route);  
68 - this.$router.push({ path: "/index" }); 67 + this.$tab.closePage();
69 } 68 }
70 } 69 }
71 }; 70 };
yudao-ui-admin/src/views/system/user/profile/userInfo.vue
@@ -68,8 +68,7 @@ export default { @@ -68,8 +68,7 @@ export default {
68 }); 68 });
69 }, 69 },
70 close() { 70 close() {
71 - this.$store.dispatch("tagsView/delView", this.$route);  
72 - this.$router.push({ path: "/index" }); 71 + this.$tab.closePage();
73 } 72 }
74 } 73 }
75 }; 74 };
yudao-ui-admin/src/views/system/user/profile/userSocial.vue
@@ -92,8 +92,7 @@ export default { @@ -92,8 +92,7 @@ export default {
92 }); 92 });
93 }, 93 },
94 close() { 94 close() {
95 - this.$store.dispatch("tagsView/delView", this.$route);  
96 - this.$router.push({ path: "/index" }); 95 + this.$tab.closePage();
97 } 96 }
98 } 97 }
99 }; 98 };
yudao-ui-admin/src/views/tool/codegen/editTable.vue
@@ -211,8 +211,10 @@ export default { @@ -211,8 +211,10 @@ export default {
211 }, 211 },
212 /** 关闭按钮 */ 212 /** 关闭按钮 */
213 close() { 213 close() {
214 - this.$store.dispatch("tagsView/delView", this.$route);  
215 - this.$router.push({ path: "/tool/codegen", query: { t: Date.now()}}) 214 + this.$tab.closeOpenPage({
  215 + path: "/tool/codegen",
  216 + query: { t: Date.now(), pageNum: this.$route.query.pageNum } }
  217 + );
216 } 218 }
217 }, 219 },
218 mounted() { 220 mounted() {