From 51636e9cd814bddba7a9b4ff21b5bc94e95fb6cb Mon Sep 17 00:00:00 2001
From: wangting <675591594@qq.com>
Date: 星期二, 14 五月 2024 09:21:36 +0800
Subject: [PATCH] 配置文档

---
 Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue |  188 ++++++++++++++++++++++++++++------------------
 1 files changed, 115 insertions(+), 73 deletions(-)

diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue
index 4074c3d..360191b 100644
--- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue
+++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue
@@ -1,40 +1,70 @@
 <template>
   <div class="UI-dynamic" :id="'UI-dynamic-'+areasName+componentVO.oid">
-    <div v-if="isError" style="color: #F56C6C">杩欎釜鑷畾涔夐〉闈㈢殑鍦板潃鏍煎紡涓嶆纭�傛帹鑽愪娇鐢║I:type#content?param=xxx杩欑褰㈠紡</div>
-    <component v-else :is="asyncComponent"
-               :customOptions="customOptions"
-               :inDialog="inDialog"
+    <el-alert
+      class="alert"
+      :closable="false"
+      v-if="isError"
+      title="鑷畾涔夌粍浠堕厤缃俊鎭敊璇紒"
+      type="error"
+      show-icon
+      description="杩欎釜鑷畾涔夐〉闈㈢殑鍦板潃鏍煎紡涓嶆纭�傛帹鑽愪娇鐢ㄢ�滅粍浠秐ame?param=xxx鈥濓紙鑷畾涔夌粍浠讹級鎴栬�呪��?type=xxx&context=yyy&pparam=zzz鈥濓紙UI寮曟搸锛夎繖2绉嶅舰寮�">
+    </el-alert>
+    <component v-else :is="currentComponent"
+               :btmType="btmType"
+               :context="context"
+               :inDialog="true"
                :key="areasName+'customCom-'+componentVO.oid"
                :componentVO="componentVO"
                :sourceData="sourceData"
+               :dataStore="dataStore"
                :areasName="areasName"
-               :paramVOS="paramVOS"></component>
+               :paramVOS="urlParams"></component>
   </div>
 </template>
 
 <script>
+import {queryStringToObject} from '@/util/util'
+import {validatenull} from "@/util/validate";
 export default {
   name: "dynamic-custom",
-  props:{
-    componentVO:{
-      type:Object,
+  props: {
+    //ui涓婁笅鏂囩殑涓氬姟绫诲瀷锛堟垨閾炬帴绫诲瀷锛�
+    uiBtmType: {
+      type: String
+    },
+    //ui涓婁笅鏂�
+    uiContext:{
+      type: String
+    },
+    componentVO: {
+      type: Object,
       default: {}
     },
     inDialog: {
       type: Boolean,
       default: false
     },
-    areasName:{
-      type:String,
-      default:''
+    canEdit:{
+      //鍐呭鏄惁鍙紪杈�
+      type:Boolean,
+      default:false
     },
-    sourceData:{
-      //鑿滃崟婧愭暟鎹垨鑰呭脊绐楁椂鎸夐挳鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁
-      type:Object,
+    areasName: {
+      type: String,
+      default: ''
+    },
+    sourceData: {
+      //鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁
+      type: Object,
       default: {}
     },
-    paramVOS:{
-      type:Object,
+    dataStore: {
+      //寮圭獥鏃舵寜閽墍灞炲尯鍩熼�変腑鏁版嵁
+      type: Array,
+      default: []
+    },
+    paramVOS: {
+      type: Object,
       default: {}
     },
     isShow: {
@@ -43,74 +73,86 @@
       default: true
     },
   },
-  components:{
-
-  },
   data() {
     return {
-      customClass:this.componentVO.customClass, //UI:type#content?param=xxx鎴栬�� 缁勪欢name:type#content?param=xxx
-      isError:false, //璺緞瑙f瀽澶辫触
-      componentPath:'@/views/base/UIContentViewer' //鑷畾涔変娇鐢ㄧ殑缁勪欢璺緞
+      btmType: '',
+      context: '',
+      urlParams: {},
+      height: '300px',
+      customClass: '', //?type=xxx&context=yyy&param=zzz  鎴栬�� 缁勪欢name?type=xxx&context=yyy&param=zzz
+      isError: false, //璺緞瑙f瀽澶辫触
+      ComponentUrl:'base/UIContentViewerInDialog',
+      currentComponent: null
     }
   },
-  computed:{
-    customOptions() {
-      let componentPath='@/views/base/UIContentViewer';
-      if(this.customClass.indexOf(":") <0){
-        this.isError=true;
-        return ;
-      }
-
-      if(this.customClass.split(':')[0]!='UI' && this.customClass.split(':')[0]!='ui'){
-        componentPath='@/views/custom/'+this.customClass.split(':')[0];
-      }
-      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.componentPath=componentPath;
-      return {
-        btmType:btmType,
-        content:content,
-        urlParams: urlParams,
-        uiComponentType: this.componentVO.uiComponentType,
-        uiComponentTypeText: this.componentVO.uiComponentTypeText,
-        uiParseClass: this.componentVO.uiParseClass
-      }
-    },
-    asyncComponent() {
-      return import(this.componentPath);
+  watch: {
+    sourceData: {
+      handler(newval) {
+        //婧愭暟鎹湁鍙樺寲鏃跺彉鏇村綋鍓嶅尯鍩熸暟鎹�
+        console.log(this.areasName);
+        console.log(newval);
+      },
+      deep: true,
+      immediate: true
     }
   },
+  computed: {},
   created() {
+    this.customClass=this.componentVO.customClass;
+    this.componentVO.customClass.split(';').forEach(item=>{
+      if(item.indexOf('web=')==0){
+        this.customClass=item.split('web=')[1];
+      }
+    })
+    let urlParams = {};
+    // 濡傛灉璺緞涓瓨鍦� '?'锛屽垯鍙栭棶鍙峰墠闈㈤儴鍒嗙粰 parts
+    if (this.customClass.includes('?')) {
+      this.ComponentUrl = this.customClass.split("?")[0];
+      urlParams = queryStringToObject(this.customClass);
+    } else {
+      this.ComponentUrl = this.customClass; // 涓嶅瓨鍦� '?' 鏁存潯璺緞灏辨槸 parts
+    }
+    if(validatenull(this.ComponentUrl) || ['ui', 'UI', 'base','bs'].includes(this.ComponentUrl)){
+      this.ComponentUrl='views/base/UIContentViewerInDialog';
+    }else if(this.ComponentUrl.indexOf('views/')===-1){
+      this.ComponentUrl='views/custom-ui/'+this.ComponentUrl;
+    }
 
+    if (this.ComponentUrl=='base/UIContentViewerInDialog' && (!urlParams.type || !urlParams.context)) {
+      this.isError = true;
+      return;
+    }
+
+    this.btmType = urlParams.type;
+    this.context = urlParams.context;
+    this.urlParams = Object.assign({},this.paramVOS, urlParams)
+    this.loadCompoent();
+  },
+  mounted() {
+    //this.getHeight(this.$parent);
+  },
+  methods: {
+    loadCompoent(){
+      // 鍔ㄦ�佸鍏ョ粍浠�
+      import(`@/${this.ComponentUrl}.vue`).then((module) => {
+        // 鎴愬姛瀵煎叆鍚庯紝灏嗙粍浠舵敞鍐屽埌Vue瀹炰緥涓�
+        this.currentComponent = module.default;
+      }).catch((error) => {
+        // 澶勭悊瀵煎叆澶辫触鐨勬儏鍐�
+        console.error('缁勪欢鍔犺浇澶辫触:', error);
+      });
+    },
+    getHeight(el) {
+      if (el.$el.clientHeight > 50) {
+        this.height = el.$el.clientHeight + 'px';
+      } else {
+        this.getHeight(el.$parent);
+      }
+    }
   }
 }
 </script>
 
-<style scoped>
+<style scoped lang="scss">
 
 </style>

--
Gitblit v1.9.3