From 7d2a2488ad5ee9e8102464e39ef206d42d1124dc Mon Sep 17 00:00:00 2001
From: wangting <675591594@qq.com>
Date: 星期一, 08 四月 2024 11:11:18 +0800
Subject: [PATCH] UI上下文展示引擎

---
 Source/ProjectWeb/src/router/avue-router.js                            |    1 
 Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue |  108 ++++++--------
 Source/ProjectWeb/src/page/index/index.vue                             |  230 ++++++++++++++++----------------
 Source/ProjectWeb/src/store/modules/user.js                            |   18 --
 Source/ProjectWeb/src/util/validate.js                                 |    8 +
 Source/ProjectWeb/src/views/base/UIContentViewer.vue                   |    2 
 Source/ProjectWeb/src/util/util.js                                     |   17 ++
 7 files changed, 190 insertions(+), 194 deletions(-)

diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue
index 4ed2338..9d7d32f 100644
--- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue
+++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue
@@ -1,6 +1,6 @@
 <template>
   <div class="UI-dynamic" :id="'UI-dynamic-'+areasName+componentVO.oid">
-    <div v-if="isError" style="color: #F56C6C">杩欎釜鑷畾涔夐〉闈㈢殑鍦板潃鏍煎紡涓嶆纭�傛帹鑽愪娇鐢╞s=?type=xxx&context=yyy&pparam=zzz杩欑褰㈠紡</div>
+    <div v-if="isError" style="color: #F56C6C">杩欎釜鑷畾涔夐〉闈㈢殑鍦板潃鏍煎紡涓嶆纭�傛帹鑽愪娇鐢╞s=缁勪欢name?type=xxx&context=yyy&pparam=zzz杩欑褰㈠紡</div>
     <component v-else :is="currentComponent"
                :btmType="btmType"
                :content="content"
@@ -15,38 +15,39 @@
 </template>
 
 <script>
+import {queryStringToObject} from '@/util/util'
 export default {
   name: "dynamic-custom",
-  components:{
-    'UI':()=>import('@/views/base/UIContentViewerInDialog'),
-    'test':()=>import('@/views/custom-ui/test'),
-    'test2':()=>import('@/views/custom-ui/test2'),
+  components: {
+    'UI': () => import('@/views/base/UIContentViewerInDialog'),
+    'test': () => import('@/views/custom-ui/test'),
+    'test2': () => import('@/views/custom-ui/test2'),
   },
-  props:{
-    componentVO:{
-      type:Object,
+  props: {
+    componentVO: {
+      type: Object,
       default: {}
     },
     inDialog: {
       type: Boolean,
       default: false
     },
-    areasName:{
-      type:String,
-      default:''
+    areasName: {
+      type: String,
+      default: ''
     },
-    sourceData:{
+    sourceData: {
       //鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁
-      type:Object,
+      type: Object,
       default: {}
     },
-    dataStore:{
+    dataStore: {
       //寮圭獥鏃舵寜閽墍灞炲尯鍩熼�変腑鏁版嵁
-      type:Array,
+      type: Array,
       default: []
     },
-    paramVOS:{
-      type:Object,
+    paramVOS: {
+      type: Object,
       default: {}
     },
     isShow: {
@@ -57,17 +58,17 @@
   },
   data() {
     return {
-      btmType:'',
-      content:'',
-      urlParams:{},
-      height:'300px',
-      customClass:this.componentVO.customClass, //bs=?type=xxx&context=yyy&param=zzz  鎴栬�� bs=缁勪欢name?type=xxx&context=yyy&param=zzz
-      isError:false, //璺緞瑙f瀽澶辫触
+      btmType: '',
+      content: '',
+      urlParams: {},
+      height: '300px',
+      customClass: this.componentVO.customClass, //bs=?type=xxx&context=yyy&param=zzz  鎴栬�� bs=缁勪欢name?type=xxx&context=yyy&param=zzz
+      isError: false, //璺緞瑙f瀽澶辫触
       currentComponent: 'UI',//缁勪欢name
     }
   },
-  watch:{
-    sourceData:{
+  watch: {
+    sourceData: {
       handler(newval) {
         //婧愭暟鎹湁鍙樺寲鏃跺彉鏇村綋鍓嶅尯鍩熸暟鎹�
         console.log(this.areasName);
@@ -75,51 +76,38 @@
       }
     }
   },
-  computed:{
-  },
+  computed: {},
   created() {
 
   },
   mounted() {
-    if(this.customClass.indexOf("bs=") <0){
-      this.isError=true;
-      return ;
+    if (this.customClass.indexOf("bs=") < 0) {
+      this.isError = true;
+      return;
     }
-    this.customClass=this.componentVO.customClass.split("bs=")[1];
-    if(this.customClass.indexOf("?") <0 || this.customClass.indexOf("type=") <0 || this.customClass.indexOf("context=") <0){
-      this.isError=true;
-      return ;
+    this.customClass = this.componentVO.customClass.split("bs=")[1];
+    if (this.customClass.indexOf("?") < 0 || this.customClass.indexOf("type=") < 0 || this.customClass.indexOf("context=") < 0) {
+      this.isError = true;
+      return;
     }
-    if(this.customClass.split('?')[0]!='' && this.customClass.split('?')[0]!='UI' && this.customClass.split('?')[0]!='ui'){
-      this.currentComponent=this.customClass.split('?')[0];
+    if (this.customClass.split('?')[0] != '' && this.customClass.split('?')[0] != 'UI' && this.customClass.split('?')[0] != 'ui') {
+      this.currentComponent = this.customClass.split('?')[0];
     }
-    this.customClass=this.componentVO.customClass.split("?")[1].split('&');
-    let urlParams={};
-    let btmType=''
-    let content=''
-    this.customClass.forEach(item=>{
-      var preParam =item.split("=");
-      if(preParam[0]=='type'){
-        btmType=preParam[1];
-      }else if(preParam[0]=='context'){
-        content=preParam[1];
-      }else{
-        urlParams[preParam[0]] = preParam[1];
-      }
-    })
+    let urlParams = queryStringToObject(this.customClass);
+    let btmType = urlParams.type;
+    let content = urlParams.context;
 
-
-      this.btmType=btmType,
-      this.content=content,
-      this.urlParams=Object.assign(this.paramVOS,urlParams)
+    this.btmType = btmType;
+    this.content = content;
+    this.urlParams = Object.assign(this.paramVOS, urlParams)
 
     //this.getHeight(this.$parent);
- },
-  methods:{
-    getHeight(el){
-      if(el.$el.clientHeight>50){
-        this.height=el.$el.clientHeight+'px';
-      }else {
+  },
+  methods: {
+    getHeight(el) {
+      if (el.$el.clientHeight > 50) {
+        this.height = el.$el.clientHeight + 'px';
+      } else {
         this.getHeight(el.$parent);
       }
     }
diff --git a/Source/ProjectWeb/src/page/index/index.vue b/Source/ProjectWeb/src/page/index/index.vue
index 1fdad95..733a9ba 100644
--- a/Source/ProjectWeb/src/page/index/index.vue
+++ b/Source/ProjectWeb/src/page/index/index.vue
@@ -29,129 +29,129 @@
 </template>
 
 <script>
-  import {mapGetters} from "vuex";
-  import tags from "./tags";
-  import search from "./search";
-  import top from "./top/";
-  import sidebar from "./sidebar/";
-  import admin from "@/util/admin";
-  import {validatenull} from "@/util/validate";
-  import {calcDate} from "@/util/date.js";
-  import {getStore} from "@/util/store.js";
+import {mapGetters} from "vuex";
+import tags from "./tags";
+import search from "./search";
+import top from "./top/";
+import sidebar from "./sidebar/";
+import admin from "@/util/admin";
+import {validatenull} from "@/util/validate";
+import {calcDate} from "@/util/date.js";
+import {getStore} from "@/util/store.js";
 
-  export default {
-    components: {
-      top,
-      tags,
-      search,
-      sidebar
+export default {
+  components: {
+    top,
+    tags,
+    search,
+    sidebar
+  },
+  name: "index",
+  provide() {
+    return {
+      index: this
+    };
+  },
+  data() {
+    return {
+      //鎼滅储鎺у埗
+      isSearch: false,
+      //鍒锋柊token閿�
+      refreshLock: false,
+      //鍒锋柊token鐨勬椂闂�
+      refreshTime: "",
+      loading:true
+    };
+  },
+
+  created() {
+    //瀹炴椂妫�娴嬪埛鏂皌oken
+    this.refreshToken();
+
+  },
+  mounted() {
+    this.init();
+    // 宸︿晶鑿滃崟鍔犺浇
+    setTimeout(()=>{
+      this.loading=false
+    },600)
+  },
+  computed: mapGetters(["isMenu", "isLock", "isCollapse", "website", "menu"]),
+  props: [],
+  methods: {
+    showCollapse() {
+      this.$store.commit("SET_COLLAPSE");
     },
-    name: "index",
-    provide() {
-      return {
-        index: this
+    // 鍒濆鍖�
+    init() {
+      this.$store.commit("SET_SCREEN", admin.getScreen());
+      window.onresize = () => {
+        setTimeout(() => {
+          this.$store.commit("SET_SCREEN", admin.getScreen());
+        }, 0);
+
       };
+      this.$store.dispatch("FlowRoutes").then(() => {
+      });
     },
-    data() {
-      return {
-        //鎼滅储鎺у埗
-        isSearch: false,
-        //鍒锋柊token閿�
-        refreshLock: false,
-        //鍒锋柊token鐨勬椂闂�
-        refreshTime: "",
-        loading:true
-      };
-    },
-
-    created() {
-      //瀹炴椂妫�娴嬪埛鏂皌oken
-      this.refreshToken();
-
-    },
-    mounted() {
-      this.init();
-      // 宸︿晶鑿滃崟鍔犺浇
-      setTimeout(()=>{
-        this.loading=false
-      },600)
-    },
-    computed: mapGetters(["isMenu", "isLock", "isCollapse", "website", "menu"]),
-    props: [],
-    methods: {
-      showCollapse() {
-        this.$store.commit("SET_COLLAPSE");
-      },
-      // 鍒濆鍖�
-      init() {
-        this.$store.commit("SET_SCREEN", admin.getScreen());
-        window.onresize = () => {
-          setTimeout(() => {
-            this.$store.commit("SET_SCREEN", admin.getScreen());
-          }, 0);
-
-        };
-        this.$store.dispatch("FlowRoutes").then(() => {
-        });
-      },
-      //鎵撳紑鑿滃崟
-      openMenu(item = {}) {
-        this.$store.dispatch("GetMenu", item.id).then(data => {
-          if (data.length !== 0) {
-            this.$router.$avueRouter.formatRoutes(data, true);
-          }
-          //褰撶偣鍑婚《閮ㄨ彍鍗曞悗榛樿鎵撳紑绗竴涓彍鍗�
-          /*if (!this.validatenull(item)) {
-            let itemActive = {},
-              childItemActive = 0;
-            if (item.path) {
-              itemActive = item;
+    //鎵撳紑鑿滃崟
+    openMenu(item = {}) {
+      this.$store.dispatch("GetMenu", item.id).then(data => {
+        if (data.length !== 0) {
+          this.$router.$avueRouter.formatRoutes(data, true);
+        }
+        //褰撶偣鍑婚《閮ㄨ彍鍗曞悗榛樿鎵撳紑绗竴涓彍鍗�
+        /*if (!this.validatenull(item)) {
+          let itemActive = {},
+            childItemActive = 0;
+          if (item.path) {
+            itemActive = item;
+          } else {
+            if (this.menu[childItemActive].length === 0) {
+              itemActive = this.menu[childItemActive];
             } else {
-              if (this.menu[childItemActive].length === 0) {
-                itemActive = this.menu[childItemActive];
-              } else {
-                itemActive = this.menu[childItemActive].children[childItemActive];
-              }
+              itemActive = this.menu[childItemActive].children[childItemActive];
             }
-            this.$store.commit('SET_MENU_ID', item);
-            this.$router.push({
-              path: this.$router.$avueRouter.getPath({
-                name: (itemActive.label || itemActive.name),
-                src: itemActive.path
-              }, itemActive.meta)
-            });
-          }*/
-
-        });
-      },
-      // 瀹氭椂妫�娴媡oken
-      refreshToken() {
-        this.refreshTime = setInterval(() => {
-          const token = getStore({
-            name: "token",
-            debug: true
-          }) || {};
-          const date = calcDate(token.datetime, new Date().getTime());
-          if (validatenull(date)) return;
-          if (date.seconds >= this.website.tokenTime && !this.refreshLock) {
-            this.refreshLock = true;
-            this.$store
-              .dispatch("refreshToken")
-              .then(() => {
-                this.refreshLock = false;
-              })
-              .catch(() => {
-                this.refreshLock = false;
-              });
           }
-        }, 10000);
-      }
+          this.$store.commit('SET_MENU_ID', item);
+          this.$router.push({
+            path: this.$router.$avueRouter.getPath({
+              name: (itemActive.label || itemActive.name),
+              src: itemActive.path
+            }, itemActive.meta)
+          });
+        }*/
+
+      });
+    },
+    // 瀹氭椂妫�娴媡oken
+    refreshToken() {
+      this.refreshTime = setInterval(() => {
+        const token = getStore({
+          name: "token",
+          debug: true
+        }) || {};
+        const date = calcDate(token.datetime, new Date().getTime());
+        if (validatenull(date)) return;
+        if (date.seconds >= this.website.tokenTime && !this.refreshLock) {
+          this.refreshLock = true;
+          this.$store
+            .dispatch("refreshToken")
+            .then(() => {
+              this.refreshLock = false;
+            })
+            .catch(() => {
+              this.refreshLock = false;
+            });
+        }
+      }, 10000);
     }
-  };
+  }
+};
 </script>
 <style lang="scss">
- #avue-view .avue-view{
-   height: 100%;
-   padding: 0 6px !important;
- }
+#avue-view > .avue-view{
+  height: 100%;
+  padding: 0 6px !important;
+}
 </style>
diff --git a/Source/ProjectWeb/src/router/avue-router.js b/Source/ProjectWeb/src/router/avue-router.js
index 9d2fc30..e8f5e4b 100644
--- a/Source/ProjectWeb/src/router/avue-router.js
+++ b/Source/ProjectWeb/src/router/avue-router.js
@@ -90,7 +90,6 @@
      * first: 涓轰簡鍖哄垎澶栫晫 璋冪敤formatRoutes 鍜� 褰撳墠鏂囦欢璋冪敤 formatRoutes
      */
     formatRoutes: function (aMenu = [], first) {
-      // debugger;
       const aRouter = []
       // 鑾峰彇鍒板叏灞�閰嶇疆涓殑 props
       const propsConfig = this.$website.menu.props;
diff --git a/Source/ProjectWeb/src/store/modules/user.js b/Source/ProjectWeb/src/store/modules/user.js
index 4f07444..a5bf964 100644
--- a/Source/ProjectWeb/src/store/modules/user.js
+++ b/Source/ProjectWeb/src/store/modules/user.js
@@ -2,7 +2,7 @@
 import {Message} from 'element-ui'
 import {setStore, getStore} from '@/util/store'
 import {isURL, validatenull} from '@/util/validate'
-import {deepClone} from '@/util/util'
+import {deepClone,queryStringToObject} from '@/util/util'
 import website from '@/config/website'
 import {loginByUsername, loginBySocial, loginBySso, getUserInfo, logout, refreshToken, getButtons} from '@/api/user'
 import {getTopMenu, getRoutes} from '@/api/system/menu'
@@ -38,25 +38,11 @@
     item.path = '/' + item.code;
     item.query = {}; // 鍒濆鍖� item.query
     item.query = queryStringToObject(item.pathValue)
-    console.log('item', item);
     if (item.children && item.children.length > 0) {
       updateCode(item.children);
     }
   });
 }
-function queryStringToObject(queryString) {
-  const index = queryString.indexOf('?');
-  if (index !== -1) {
-    queryString = queryString.substring(index + 1);
-  }
-  const params = new URLSearchParams(queryString);
-  const obj = {};
-  for (const [key, value] of params.entries()) {
-    obj[key] = value;
-  }
-  return obj;
-}
-
 
 const user = {
   state: {
@@ -77,7 +63,6 @@
         loginByUsername(userInfo.tenantId, userInfo.deptId, userInfo.roleId, userInfo.username, md5(userInfo.password), userInfo.type, userInfo.key,).then(res => {
           const data = res.data;
           if (data.success) {
-            debugger;
             commit('SET_TOKEN', data.obj.sessionInfo.token);
             commit('SET_REFRESH_TOKEN', data.obj.sessionInfo.token);
             commit('SET_TENANT_ID', data.tenant_id);
@@ -257,7 +242,6 @@
   },
   mutations: {
     SET_TOKEN: (state, token) => {
-      debugger;
       setToken(token);
       state.token = token;
       setStore({name: 'token', content: state.token})
diff --git a/Source/ProjectWeb/src/util/util.js b/Source/ProjectWeb/src/util/util.js
index 9df90d0..64fe71e 100644
--- a/Source/ProjectWeb/src/util/util.js
+++ b/Source/ProjectWeb/src/util/util.js
@@ -389,3 +389,20 @@
     window.open(URL.createObjectURL(file));
   }
 }
+
+/**
+ * 瑙f瀽鍦板潃鍙傛暟
+ * @param {String} queryString - 鍦板潃?鍚庨潰閮ㄥ垎
+ */
+export const queryStringToObject = (queryString) => {
+  const index = queryString.indexOf('?');
+  if (index !== -1) {
+    queryString = queryString.substring(index + 1);
+  }
+  const params = new URLSearchParams(queryString);
+  const obj = {};
+  for (const [key, value] of params.entries()) {
+    obj[key] = value;
+  }
+  return obj;
+}
diff --git a/Source/ProjectWeb/src/util/validate.js b/Source/ProjectWeb/src/util/validate.js
index c4e4de8..80e2d65 100644
--- a/Source/ProjectWeb/src/util/validate.js
+++ b/Source/ProjectWeb/src/util/validate.js
@@ -173,6 +173,14 @@
   else return true;
 };
 
+/**
+ * URL鍦板潃
+ * @param {*} s
+ */
+export function isURL(s) {
+  return /^http[s]?:\/\/.*/.test(s)
+}
+
 // 鐧诲綍璐﹀彿 (瀛楁瘝寮�澶达紝鍏佽5-16瀛楄妭锛屽厑璁稿瓧姣嶆暟瀛椾笅鍒掔嚎)
 export const verifyAccount = (val) => {
   const petter = /^[a-zA-Z][a-zA-Z0-9_]{4,15}$/;
diff --git a/Source/ProjectWeb/src/views/base/UIContentViewer.vue b/Source/ProjectWeb/src/views/base/UIContentViewer.vue
index 7eb33d1..60f6004 100644
--- a/Source/ProjectWeb/src/views/base/UIContentViewer.vue
+++ b/Source/ProjectWeb/src/views/base/UIContentViewer.vue
@@ -77,7 +77,7 @@
   computed: {},
   created() {
     if (verifyNull(this.$route.query.type) || (verifyNull(this.$route.query.context) && verifyNull(this.$route.query.content))) {
-      this.$message.error("閰嶇疆鐨勪俊鎭敊璇紝璇峰弬鑰僢s=?type=xxx&context=yyy&param=zzz杩欑褰㈠紡銆傚叾涓璽ype鏄笟鍔$被鍨嬶紙鎴栭摼鎺ョ被鍨嬶級锛宑ontext鏄疷I涓婁笅鏂囩殑鍚嶇О");
+      this.$message.error("閰嶇疆鐨勪俊鎭敊璇紝璇峰弬鑰僢s=缁勪欢name?type=xxx&context=yyy&param=zzz杩欑褰㈠紡銆傚叾涓璽ype鏄笟鍔$被鍨嬶紙鎴栭摼鎺ョ被鍨嬶級锛宑ontext鏄疷I涓婁笅鏂囩殑鍚嶇О");
       return false;
     }
     this.btmType=this.$route.query.type;

--
Gitblit v1.9.3