From 686ec04e5ea19d8930b40bfa1c823e900d7b7d6c Mon Sep 17 00:00:00 2001
From: wangting <675591594@qq.com>
Date: 星期四, 30 十一月 2023 10:56:10 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
Source/UBCS-WEB/dist/src/router/avue-router.js | 199 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 199 insertions(+), 0 deletions(-)
diff --git a/Source/UBCS-WEB/dist/src/router/avue-router.js b/Source/UBCS-WEB/dist/src/router/avue-router.js
new file mode 100644
index 0000000..0e68bda
--- /dev/null
+++ b/Source/UBCS-WEB/dist/src/router/avue-router.js
@@ -0,0 +1,199 @@
+let RouterPlugin = function () {
+ this.$router = null;
+ this.$store = null;
+
+};
+RouterPlugin.install = function (vue, option = {}) {
+ this.$router = option.router;
+ this.$store = option.store;
+ this.$vue = new vue({ i18n: option.i18n });
+
+ // 杩欎釜鐨勪綔鐢ㄦ槸 涓轰簡妫�鏌ュ嚭缃戦〉閾炬帴锛屽洜涓烘湰椤圭洰鐢ㄥ埌浜� iframe
+ function isURL(s) {
+ if (s.includes('html')) return true;
+ return /^http[s]?:\/\/.*/.test(s)
+ }
+
+ // 灏嗗弬鏁板鐞嗕负鍙傛暟鐨勫舰寮忔嫾鎺�
+ function objToform(obj) {
+ let result = [];
+ Object.keys(obj).forEach(ele => {
+ result.push(`${ele}=${obj[ele]}`);
+ })
+ return result.join('&');
+ }
+
+ this.$router.$avueRouter = {
+ //鍏ㄥ眬閰嶇疆
+ $website: this.$store.getters.website,
+ group: '',
+ meta: {},
+ safe: this,
+ // 璁剧疆鏍囬
+ setTitle: (title) => {
+ const defaultTitle = this.$vue.$t('title');
+ title = title ? `${title}-${defaultTitle}` : defaultTitle;
+ document.title = title;
+ },
+ closeTag: (value) => {
+ let tag = value || this.$store.getters.tag;
+ if (typeof value === 'string') {
+ tag = this.$store.getters.tagList.filter(ele => ele.value === value)[0]
+ }
+ this.$store.commit('DEL_TAG', tag)
+ },
+ generateTitle: (title, key) => {
+ if (!key) return title;
+ const hasKey = this.$vue.$te('route.' + key)
+ if (hasKey) {
+ // $t :this method from vue-i18n, inject in @/lang/index.js
+ const translatedTitle = this.$vue.$t('route.' + key)
+
+ return translatedTitle
+ }
+ return title
+ },
+ //澶勭悊璺敱
+ getPath: function (params) {
+ let {src} = params;
+ let result = src || '/';
+ if (isURL(src)) {
+ result = `/myiframe/urlPath?${objToform(params)}`;
+ }
+ return result;
+ },
+ //姝e垯澶勭悊璺敱
+ vaildPath: function (list, path) {
+ let result = false;
+ list.forEach(ele => {
+ if (new RegExp("^" + ele + ".*", "g").test(path)) {
+ result = true
+ }
+
+ })
+ return result;
+ },
+ //璁剧疆璺敱鍊�
+ getValue: function (route) {
+ let value = "";
+ if (route.query.src) {
+ value = route.query.src;
+ } else {
+ value = route.path;
+ }
+ return value;
+ },
+ //鍔ㄦ�佽矾鐢�
+ // 璺敱鏄笓闂ㄧ殑涓�涓帴鍙h幏鍙�
+ /**
+ * aMenu: 鎺ュ彈鍒扮殑鍔ㄦ�佽矾鐢辨暟鎹� menu鐨勭粨鏋勫灞傛湁鐖剁骇path 閲岄潰鏈変竴涓猚hilden 璁板綍椤甸潰鐨勮矾鐢�
+ * first: 涓轰簡鍖哄垎澶栫晫 璋冪敤formatRoutes 鍜� 褰撳墠鏂囦欢璋冪敤 formatRoutes
+ */
+ formatRoutes: function (aMenu = [], first) {
+ // window.console.log('aMenu')
+ // window.console.log(aMenu)
+ const aRouter = []
+ // 鑾峰彇鍒板叏灞�閰嶇疆涓殑 props
+ const propsConfig = this.$website.menu.props;
+ // 璁剧疆 props榛樿鍊� 浣滅敤灏辨槸灏嗗瓧娈佃缃垚閰嶇疆鐨�
+ const propsDefault = {
+ label: propsConfig.label || 'name',
+ path: propsConfig.path || 'path',
+ icon: propsConfig.icon || 'icon',
+ children: propsConfig.children || 'children',
+ meta: propsConfig.meta || 'meta',
+ }
+ // 濡傛灉娌℃湁鏉冮檺鑿滃崟灏辩粨鏉�
+ if (aMenu.length === 0) return;
+ // 寮�濮嬪鐞唌enu
+ for (let i = 0; i < aMenu.length; i++) {
+ // 鍙栧埌褰撳墠瑕佸鐞嗙殑涓�椤�
+ const oMenu = aMenu[i];
+ // 杩欎竴鍧楃殑璧嬪�� 涔熷氨鏄彇鍒拌繑鍥炵殑鍊�
+ let path = (() => {
+ if (first) {
+ // 灏� '/index' 鏇挎崲涓� ''
+ return oMenu[propsDefault.path].replace('/index', '')
+ } else {
+ return oMenu[propsDefault.path]
+ }
+ })(),
+ //鐗规畩澶勭悊缁勪欢 鎵ц瀹岃繖涓� component 涔熷氨鏄簿纭埌鍏蜂綋鐨勬枃浠朵簡 views鏂囦欢澶逛笅闈㈠氨鏄叿浣撶殑椤甸潰浠g爜
+ component = 'views' + oMenu.path,
+ name = oMenu[propsDefault.label],
+ icon = oMenu[propsDefault.icon],
+ children = oMenu[propsDefault.children],
+ meta = oMenu[propsDefault.meta] || {};
+ // meta涓� keepalive 鐨勫鐞�
+ meta = Object.assign(meta, (function () {
+ if (option.keepAlive === true) {
+ return {
+ keepAlive: true
+ }
+ }
+ })());
+ //鏄惁鏈夊瓙璺敱
+ const isChild = children.length !== 0;
+ const oRouter = {
+ path: path,
+ component(resolve) {
+ // 鍒ゆ柇鏄惁涓洪璺敱
+ if (first) {
+ require(['../page/index'], resolve)
+ return
+ // 鍒ゆ柇鏄惁涓哄灞傝矾鐢�
+ } else if (isChild && !first) {
+ require(['../page/index/layout'], resolve)
+ return
+ // 鍒ゆ柇鏄惁涓烘渶缁堢殑椤甸潰瑙嗗浘
+ } else {
+ require([`../${component}.vue`], resolve)
+ }
+ },
+ name: name,
+ icon: icon,
+ meta: meta,
+ redirect: (() => {
+ // 绗竴娆¤繘鏉ヤ絾鏄病鏈夊瓙璺敱鐨� 闇�瑕佹坊鍔爎edirect
+ if (!isChild && first && !isURL(path)) return `${path}/index`
+ else return '';
+ })(),
+ // 鏁寸悊瀛愯矾鐢辩殑route 閰嶇疆
+ // 澶勭悊鏄惁涓轰竴绾ц矾鐢�
+ children: !isChild ? (() => {
+ if (first) {
+ // 杩欓噷鐨刬sURL鍒ゆ柇锛屽洜涓鸿繖涓綉绔欐湁浣跨敤 iframe銆傛墍浠ラ渶瑕佸垽鏂槸鍚︿负缃戦〉閾炬帴
+ if (!isURL(path)) oMenu[propsDefault.path] = `${path}/index`;
+ return [{
+ component(resolve) {
+ require([`../${component}.vue`], resolve)
+ },
+ icon: icon,
+ name: name,
+ meta: meta,
+ path: 'index'
+ }]
+ }
+ return [];
+ })() : (() => {
+ /**
+ * 杩欓噷鏄噸鐐癸紝褰撴湁瀛愯矾鐢辩殑鏃跺�� 浼氬啀鍘绘墽琛� formatRoutes 鏂规硶锛岀劧鍚庡張浼氭湁涓�涓柊鐨� aMenu for寰幆銆�
+ * 鏈�鍚庤繑鍥炵殑鏄竴涓暟缁� aRouter 杩欎釜鏁扮粍灏变細浣滀负 childen鐨勫�艰 return
+ */
+ return this.formatRoutes(children, false)
+ })()
+ }
+ aRouter.push(oRouter)
+ }
+ // for寰幆缁撴潫
+ // 杩欎釜first 鍗$殑鍏跺疄灏辨槸棣栬矾鐢�
+ if (first) {
+ this.safe.$router.addRoutes(aRouter)
+ } else {
+ // 杩欓噷杩斿洖鐨勬槸瀛愮粍浠�
+ return aRouter
+ }
+ }
+ }
+}
+export default RouterPlugin;
--
Gitblit v1.9.3