From 1d6d5056c496fdb15b2722bf034de633bf268c93 Mon Sep 17 00:00:00 2001
From: wangting <675591594@qq.com>
Date: 星期五, 29 三月 2024 15:55:38 +0800
Subject: [PATCH] UI上下文展示引擎

---
 Source/ProjectWeb/src/views/base/UIContentViewerInDialog.vue           |   38 +++++++-----
 Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue |   60 ++++++++-----------
 Source/ProjectWeb/src/views/base/uiDefineVO.js                         |    4 
 Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue   |    2 
 Source/ProjectWeb/src/views/base/UIContentViewer.vue                   |   75 ++++++++++--------------
 5 files changed, 83 insertions(+), 96 deletions(-)

diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue
index a64f2ae..e2e0d21 100644
--- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue
+++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue
@@ -1,15 +1,16 @@
 <template>
   <div class="UI-dynamic" :id="'UI-dynamic-'+areasName+componentVO.oid">
-    <div v-if="isError" style="color: #F56C6C">杩欎釜鑷畾涔夐〉闈㈢殑鍦板潃鏍煎紡涓嶆纭�傛帹鑽愪娇鐢║I:type#content?param=xxx杩欑褰㈠紡</div>
+    <div v-if="isError" style="color: #F56C6C">杩欎釜鑷畾涔夐〉闈㈢殑鍦板潃鏍煎紡涓嶆纭�傛帹鑽愪娇鐢╞s=?type=xxx&context=yyy&pparam=zzz杩欑褰㈠紡</div>
     <component v-else :is="currentComponent"
-               :customOptions="customOptions"
+               :btmType="customOptions.btmType"
+               :content="customOptions.content"
                :inDialog="true"
                :key="areasName+'customCom-'+componentVO.oid"
                :componentVO="componentVO"
                :sourceData="sourceData"
                :dataStore="dataStore"
                :areasName="areasName"
-               :paramVOS="paramVOS"></component>
+               :paramVOS="customOptions.paramVOS"></component>
   </div>
 </template>
 
@@ -35,7 +36,7 @@
       default:''
     },
     sourceData:{
-      //鑿滃崟婧愭暟鎹垨鑰呭脊绐楁椂鎸夐挳鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁
+      //鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁
       type:Object,
       default: {}
     },
@@ -57,7 +58,7 @@
   data() {
     return {
       height:'300px',
-      customClass:this.componentVO.customClass, //UI:type#content?param=xxx鎴栬�� 缁勪欢name:type#content?param=xxx
+      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
     }
@@ -73,45 +74,36 @@
   },
   computed:{
     customOptions() {
-      if(this.customClass.indexOf(":") <0){
+      if(this.customClass.indexOf("bs=") <0){
         this.isError=true;
         return ;
       }
-
-      if(this.customClass.split(':')[0]!='UI' && this.customClass.split(':')[0]!='ui'){
-        this.currentComponent=this.customClass.split(':')[0];
+      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];
+      }
+      this.customClass=this.componentVO.customClass.split("?")[1].split('&');
       let urlParams={};
       let btmType=''
       let content=''
-      if(this.customClass.split(':')[1].indexOf("?") <0){
-        btmType=this.customClass.split(':')[1].split('#')[0];
-        content=this.customClass.split(':')[1].split('#')[1];
-      }else {
-        let split1 = this.customClass.split(':')[1].split('?')[0];
-        let split2 = this.customClass.split(':')[1].split('?')[1];
-        btmType=split1.split('#')[0];
-        content=split1.split('#')[1];
-        let paramsArray = split2.split("&");
-        paramsArray.forEach(item=>{
-          var preParam =item.split("=");
-          if(preParam[0]=='btmname'){
-            urlParams['btmType']=preParam[1];
-          }else if(preParam[0]=='imagetype'){
-            urlParams['imageType']=preParam[1];
-            if(preParam[1]=='fileobject'){
-
-            }
-          }else{
-            urlParams[preParam[0]] = preParam[1];
-          }
-        })
-      }
-
+      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];
+        }
+      })
       return {
         btmType:btmType,
         content:content,
-        urlParams: urlParams
+        paramVOS:Object.assign(this.paramVOS,urlParams)
       }
     }
   },
diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue
index f7373e3..1e0f31f 100644
--- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue
+++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue
@@ -60,7 +60,7 @@
       default: ''
     },
     sourceData:{
-      //鑿滃崟婧愭暟鎹垨鑰呭脊绐楁椂鎸夐挳鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁
+      //鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁
       type:Object,
       default: {}
     },
diff --git a/Source/ProjectWeb/src/views/base/UIContentViewer.vue b/Source/ProjectWeb/src/views/base/UIContentViewer.vue
index f27d9da..7eb33d1 100644
--- a/Source/ProjectWeb/src/views/base/UIContentViewer.vue
+++ b/Source/ProjectWeb/src/views/base/UIContentViewer.vue
@@ -7,7 +7,6 @@
                      :inDialog="inDialog"
                      :sourceData="sourceData"
                      :dataStore="checkedData.northArea"
-                     :paramVOS="paramVOS"
                      @setDataStore="setDataStore">
       </UIContentArea>
     </el-header>
@@ -19,7 +18,6 @@
                        :inDialog="inDialog"
                        :sourceData="sourceData"
                        :dataStore="checkedData.westArea"
-                       :paramVOS="paramVOS"
                        @setDataStore="setDataStore">
         </UIContentArea>
       </el-aside>
@@ -31,7 +29,6 @@
                          :inDialog="inDialog"
                          :sourceData="checkedData.westArea[checkedData.westArea.length-1]"
                          :dataStore="checkedData.centerArea"
-                         :paramVOS="paramVOS"
                          @setDataStore="setDataStore">
           </UIContentArea>
         </el-main>
@@ -42,7 +39,6 @@
                          :inDialog="inDialog"
                          :sourceData="checkedData.centerArea[checkedData.centerArea.length-1]"
                          :dataStore="checkedData.southArea"
-                         :paramVOS="paramVOS"
                          @setDataStore="setDataStore">
           </UIContentArea>
         </el-footer>
@@ -52,61 +48,54 @@
 </template>
 
 <script>
+import { verifyNull } from "@/util/validate";
 import UIContentArea from "@/views/base/UIContentArea"
 import {uiDefineVOData} from "@/views/base/uiDefineVO"
 
 export default {
   name: "UIContentViewer",
-  components:{UIContentArea},
-  props:{
-    inDialog: {
-      type: Boolean,
-      default: false
-    },
-    sourceData:{
-      //鑿滃崟婧愭暟鎹垨鑰呭脊绐楁椂鎸夐挳鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁
-      type:Object,
-      default: {}
-    },
-    paramVOS:{
-      type:Object,
-      default: {}
-    }
-  },
+  components: {UIContentArea},
   data() {
     return {
-      btmType:'',//涓氬姟绫诲瀷锛堟垨閾炬帴绫诲瀷锛�
-      content:'',//UI涓婁笅鏂囩殑鍚嶇О
-      checkedData:{
+      btmType: '',//涓氬姟绫诲瀷锛堟垨閾炬帴绫诲瀷锛�
+      content: '',//UI涓婁笅鏂囩殑鍚嶇О
+      checkedData: {
         //鍚勫尯鍩熼�変腑鏁版嵁
-        northArea:[{}],
-        westArea:[{}],
-        centerArea:[{}],
-        southArea:[{}]
+        northArea: [{}],
+        westArea: [{}],
+        centerArea: [{}],
+        southArea: [{}]
       },
-      uiDefineVO: uiDefineVOData,
-      centerHeight:'100%'
+      uiDefineVO: {},
+      centerHeight: '100%',
+      inDialog: false,
+      //鑿滃崟婧愭暟鎹�
+      sourceData: {},
     }
   },
-  watch: {
-
-  },
-  computed: {
-
-  },
+  watch: {},
+  computed: {},
   created() {
-    if (this.uiDefineVO.southAreas && this.uiDefineVO.southAreas.length > 0) {
-      this.centerHeight = 'calc(100% - 310px)';
-    } else {
-      this.centerHeight = '100%';
+    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涓婁笅鏂囩殑鍚嶇О");
+      return false;
     }
+    this.btmType=this.$route.query.type;
+    this.content=this.$route.query.context ||this.$route.query.content;
+    this.sourceData=this.$route.query;
+    this.initUI();
+    this.initContent();
   },
   methods: {
-    initUI(){
-
+    initUI() {
+      this.uiDefineVO = uiDefineVOData;
     },
-    initContent(){
-
+    initContent() {
+      if (this.uiDefineVO.southAreas && this.uiDefineVO.southAreas.length > 0) {
+        this.centerHeight = 'calc(100% - 310px)';
+      } else {
+        this.centerHeight = '100%';
+      }
     },
     setDataStore(value) {
       this.checkedData[value.area] = value.dataStore;
diff --git a/Source/ProjectWeb/src/views/base/UIContentViewerInDialog.vue b/Source/ProjectWeb/src/views/base/UIContentViewerInDialog.vue
index ad074fb..e561d73 100644
--- a/Source/ProjectWeb/src/views/base/UIContentViewerInDialog.vue
+++ b/Source/ProjectWeb/src/views/base/UIContentViewerInDialog.vue
@@ -54,17 +54,24 @@
 <script>
 import UIContentArea from "@/views/base/UIContentArea"
 import {uiDefineVOData} from "@/views/base/uiDefineVOInDialog"
+import {verifyNull} from "@/util/validate";
 
 export default {
   name: "UIContentViewerInDialog",
   components:{UIContentArea},
   props:{
+    btmType:{
+      type: String,
+    },
+    content:{
+      type: String,
+    },
     inDialog: {
       type: Boolean,
       default: false
     },
     sourceData:{
-      //鑿滃崟婧愭暟鎹垨鑰呭脊绐楁椂鎸夐挳鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁
+      //鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁
       type:Object,
       default: {}
     },
@@ -76,16 +83,10 @@
     paramVOS:{
       type:Object,
       default: {}
-    },
-    customOptions:{
-      type:Object,
-      default: {}
     }
   },
   data() {
     return {
-      btmType:this.customOptions.btmType,//涓氬姟绫诲瀷锛堟垨閾炬帴绫诲瀷锛�
-      content:this.customOptions.content,//UI涓婁笅鏂囩殑鍚嶇О
       checkedData:{
         //鍚勫尯鍩熼�変腑鏁版嵁
         northAreaInDialog:[{}],
@@ -93,7 +94,7 @@
         centerAreaInDialog:[{}],
         southAreaInDialog:[{}]
       },
-      uiDefineVO: uiDefineVOData,
+      uiDefineVO: {},
       centerHeight:'100%'
     }
   },
@@ -104,18 +105,23 @@
 
   },
   created() {
-    if (this.uiDefineVO.southAreas && this.uiDefineVO.southAreas.length > 0) {
-      this.centerHeight = 'calc(100% - 310px)';
-    } else {
-      this.centerHeight = '100%';
+    if (verifyNull(this.btmType) || verifyNull(this.content) ) {
+      this.$message.error("鑷畾涔夌粍浠堕厤缃殑淇℃伅閿欒锛岃鍙傝�僢s=name?type=xxx&context=yyy&param=zzz杩欑褰㈠紡銆傚叾涓璽ype鏄笟鍔$被鍨嬶紙鎴栭摼鎺ョ被鍨嬶級锛宑ontext鏄疷I涓婁笅鏂囩殑鍚嶇О,name涓虹粍浠跺悕绉帮紝绌哄�兼椂榛樿灞曠ずUI寮曟搸");
+      return false;
     }
+    this.initUI();
+    this.initContent();
   },
   methods: {
-    initUI(){
-
+    initUI() {
+      this.uiDefineVO = uiDefineVOData;
     },
-    initContent(){
-
+    initContent() {
+      if (this.uiDefineVO.southAreas && this.uiDefineVO.southAreas.length > 0) {
+        this.centerHeight = 'calc(100% - 310px)';
+      } else {
+        this.centerHeight = '100%';
+      }
     },
     setDataStore(value) {
       this.checkedData[value.area] = value.dataStore;
diff --git a/Source/ProjectWeb/src/views/base/uiDefineVO.js b/Source/ProjectWeb/src/views/base/uiDefineVO.js
index 7bd0e5a..a900e3e 100644
--- a/Source/ProjectWeb/src/views/base/uiDefineVO.js
+++ b/Source/ProjectWeb/src/views/base/uiDefineVO.js
@@ -1828,7 +1828,7 @@
           "copyFromVersion": null,
           "createTime": null,
           "creator": null,
-          "customClass": "test2:processreview#DepartmentProcessReview_web?param=xxx",
+          "customClass": "bs=test2?type=processreview&context=DepartmentProcessReview_web&param=xxx",
           "data": null,
           "description": "",
           "extendAttr": "",
@@ -2883,7 +2883,7 @@
           "copyFromVersion": null,
           "createTime": null,
           "creator": null,
-          "customClass": "test:processreview#DepartmentProcessReview_web?param=xxx",
+          "customClass": "bs=?type=processreview&context=DepartmentProcessReview_web&param=xxx",
           "data": null,
           "description": "",
           "extendAttr": "",

--
Gitblit v1.9.3