From 5a00f7eec311c7b71b40df4beaded505eca5329c Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期四, 11 四月 2024 17:49:23 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/ProjectWeb/src/actions/base/AddAction.js                           |   52 ++++++++++
 Source/ProjectWeb/src/components/dynamic-components/dynamic-button.vue    |   21 +--
 Source/ProjectWeb/src/actions/base/BaseAction.js                          |   98 +++++++++++++------
 Source/ProjectWeb/src/views/base/UIContentArea.vue                        |   97 +++++++++++++++++--
 Source/ProjectWeb/src/components/dynamic-components/dynamic-TreeTable.vue |    1 
 Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue     |    8 
 Source/ProjectWeb/src/components/dynamic-components/dynamic-tree.vue      |    1 
 7 files changed, 219 insertions(+), 59 deletions(-)

diff --git a/Source/ProjectWeb/src/actions/base/AddAction.js b/Source/ProjectWeb/src/actions/base/AddAction.js
index 8d0e0e8..fc16632 100644
--- a/Source/ProjectWeb/src/actions/base/AddAction.js
+++ b/Source/ProjectWeb/src/actions/base/AddAction.js
@@ -1,4 +1,54 @@
 /**
  * 鎸夐挳澶勭悊 涓氬姟绫诲瀷鏂板
  */
-import BaseAction from './BaseAction';
+import {callPreEvent,callPostEvent} from './BaseAction';
+import {validatenull} from "@/util/validate";
+
+export const doAction = (options) => {
+  let paramVOS = Object.assign({
+    url: 'uiDataController/addSave',
+    method: 'post',
+    uploadFileUrl: 'vciFileUploadController/uploadFile'
+  }, options.paramVOS)
+  options.paramVOS = paramVOS;
+
+  callPreEvent(options, doBefore,function (options) {
+    doAdd(options, function () {
+      callPostEvent(options,doAfter, options.callback);
+    });
+  });
+};
+
+/**
+ * 鎵ц
+ * @param options 鎸夐挳鐨勯厤缃俊鎭�
+ * @param callback 鍥炶皟
+ */
+export const doAdd = (options,callback)=> {
+  this.$message.success('鎵ц澧炲姞');
+  if(callback){
+    callback(options);
+  }
+}
+/**
+ * 鍓嶇疆浜嬩欢
+ * @param options 鎸夐挳鐨勯厤缃俊鎭�
+ * @param callback 鍥炶皟
+ */
+export const doBefore = (options,callback)=> {
+  this.$message.success('鎵ц鍓嶇疆浜嬩欢');
+  if(callback){
+    callback(options);
+  }
+}
+/**
+ * 鍚庣疆浜嬩欢
+ * @param options 鎸夐挳鐨勯厤缃俊鎭�
+ * @param callback 鍥炶皟
+ */
+export const doAfter = (options,callback)=> {
+  this.$message.success('鎵ц鍚庣疆浜嬩欢');
+  if(callback){
+    callback(options);
+  }
+}
diff --git a/Source/ProjectWeb/src/actions/base/BaseAction.js b/Source/ProjectWeb/src/actions/base/BaseAction.js
index 528dbe4..e2583fe 100644
--- a/Source/ProjectWeb/src/actions/base/BaseAction.js
+++ b/Source/ProjectWeb/src/actions/base/BaseAction.js
@@ -1,9 +1,36 @@
 import {validatenull} from "@/util/validate";
-import {findArray} from "@/util/util";
 
 /**
  * 鎸夐挳鐨勫熀纭�鏈嶅姟
  */
+
+/**
+ * action閫氱敤鍏ュ彛
+ */
+export const doAction = (button,options) => {
+  debugger;
+  if(button.url && button.url!='null'){
+    let buttonParse = parseEventByUrl(button.url,options,false);
+    import("../"+buttonParse.jsPath).then(module => {
+      module.doAction(options);
+    })
+  }else {
+    const handlers = {
+      add: () => {import("@/actions/base/AddAction").then(module => {
+        module.doAction(options);
+      })},
+      edit: () => {},
+      delete: () => {},
+    };
+    if(handlers[button.actionVO.id]){
+      handlers[button.actionVO.id]()
+    }else{
+      this.$message.error('鏈壘鍒板搴攁ction锛岃閲嶆柊閰嶇疆鎸夐挳锛�');
+    }
+  }
+
+};
+
 
 /**
  * 鏇挎崲鏂囨湰涓殑${xxx}
@@ -28,7 +55,7 @@
       let temp = text.substring(0, text.indexOf(reg));
       let field = text.substring(text.indexOf(reg) + reg.length, text.indexOf("}"));
       let end = text.substring(text.indexOf("}") + 1);
-      field = replaceData[field] || sourceData[field] || '';
+      field = sourceData[field] || '';
       text = temp + field + end;
     }
     reg = "sourceData.${";
@@ -36,7 +63,7 @@
       let temp = text.substring(0, text.indexOf(reg));
       let field = text.substring(text.indexOf(reg) + reg.length, text.indexOf("}"));
       let end = text.substring(text.indexOf("}") + 1);
-      field = replaceData[field] || sourceData[field] || '';
+      field = sourceData[field] || '';
       text = temp + field + end;
     }
     reg = "${";
@@ -44,7 +71,7 @@
       let temp = text.substring(0, text.indexOf(reg));
       let field = text.substring(text.indexOf(reg) + reg.length, text.indexOf("}"));
       let end = text.substring(text.indexOf("}") + 1);
-      field = replaceData[field] || sourceData[field] || '';
+      field = replaceData[field] || '';
       text = temp + field + end;
     }
   }
@@ -70,23 +97,26 @@
 /**
  * 鎵ц鍓嶇疆浜嬩欢
  * @param options 鎸夐挳鐨勯厤缃俊鎭紝鍓嶇疆浜嬩欢閲岄厤缃殑鍙傛暟浼氭浛鎹㈣繖涓噷鐨勫弬鏁扮殑淇℃伅
- * @param buttonTarget 鎸夐挳js鎵�鍦ㄧ殑瀵硅薄
+ * @param fnTarget 鎵ц鏂规硶
  * @param callback 鍥炶皟锛屽鏋滃瓨鍦ㄥ墠缃簨浠讹紝浼氬湪鎵ц瀹屾垚鍚庢墽琛屽洖璋冿紝鍚﹀垯鐩存帴鍥炶皟
  * @param preEventName 鍓嶇疆浜嬩欢鍚嶇О锛岄粯璁eforeevent
  */
-export const callPreEvent = (options,buttonTarget,callback,preEventName) => {
+export const callPreEvent = (options,fnTarget,callback,preEventName) => {
   const params = paramLow(options.paramVOS);
   options.paramVOS = params;
   let beforeEvent = params[preEventName || 'beforeevent'];
   if(beforeEvent) {
     let buttonParse = parseEventByUrl(beforeEvent,options,true);
-    buttonParse.options.callback = callback;
-    if(validatenull(buttonParse)){
-      buttonTarget[buttonParse.methodName](buttonParse);
+    if(validatenull(buttonParse.jsPath)){
+      fnTarget(buttonParse,callback);
     }else{
-      layui.use(buttonParse.jsPath,function () {
-        layui[buttonParse.jsPath][buttonParse.methodName](options);
-      });
+      try {
+        import("../"+buttonParse.jsPath).then(module => {
+          module[buttonParse.methodName](options,callback);
+        })
+      } catch (error) {
+        this.$message.error('鏈壘鍒板墠缃簨浠舵墽琛宩s');
+      }
     }
   }else{
     if(callback){
@@ -95,22 +125,28 @@
   }
 };
 /**
- * 鎵ц鍚庣疆鏃堕棿
+ * 鎵ц鍚庣疆浜嬩欢
  * @param options 鎸夐挳鐨勯厤缃俊鎭紝鍚庣疆浜嬩欢閲岄厤缃殑鍙傛暟浼氭浛鎹㈣繖涓噷鐨勫弬鏁扮殑淇℃伅
- * @param buttonTarget 鎸夐挳Js鎵�鍦ㄧ殑瀵硅薄
+ * @param fnTarget 鎵ц鏂规硶
+ * @param callback 鍥炶皟锛屽鏋滃瓨鍦ㄥ悗缃簨浠讹紝浼氬湪鎵ц瀹屾垚鍚庢墽琛屽洖璋冿紝鍚﹀垯鐩存帴鍥炶皟
+ * @param preEventName 鍚庣疆浜嬩欢鍚嶇О锛岄粯璁� afterevent
  */
-export const callPostEvent = (options,buttonTarget,callback,postEventName)=>{
+export const callPostEvent = (options,fnTarget,callback,postEventName)=>{
   const params = paramLow(options.paramVOS);
   options.paramVOS = params;
-  var afterEvent = params[postEventName || 'afterevent'];
+  let afterEvent = params[postEventName || 'afterevent'];
   if(afterEvent) {
-    var buttonParse = parseEventByUrl(afterEvent,options,false);
-    if(validatenull(buttonParse)){
-      buttonTarget[buttonParse.methodName](buttonParse);
+    let buttonParse = parseEventByUrl(afterEvent,options,false);
+    if(validatenull(buttonParse.jsPath)){
+      fnTarget(buttonParse,callback);
     }else{
-      layui.use(buttonParse.jsPath,function () {
-        layui[buttonParse.jsPath][buttonParse.methodName](options);
-      });
+      try {
+        import("../"+buttonParse.jsPath).then(module => {
+          module[buttonParse.methodName](options,callback);
+        })
+      } catch (error) {
+        this.$message.error('鏈壘鍒板悗缃簨浠舵墽琛宩s');
+      }
     }
   }else{
     if(callback){
@@ -127,13 +163,13 @@
  */
 export const parseEventByUrl = (url,options,isBefore) => {
   //鏍规嵁閰嶇疆鏍煎紡鍖栦簨浠�
-  var jsPath = url;
-  var methodName = isBefore?"doBefore":"doAfter";
-  var params = {};
+  let jsPath = url;
+  let methodName = isBefore?"doBefore":"doAfter";
+  let params = {};
   if (url.indexOf("?")) {
-    var temp = url.substring(0, url.indexOf("?"));
+    let temp = url.substring(0, url.indexOf("?"));
     if (temp.indexOf("#") > -1) {
-      var array = temp.split("#");
+      let array = temp.split("#");
       if(array.length == 1){
         jsPath = array[0];
       }else{
@@ -143,17 +179,17 @@
     }else{
       jsPath = temp;
     }
-    var paramArray = url.substring(url.indexOf("?") + 1).split("&");
-    layui.each(paramArray, function (_index, _item) {
+    let paramArray = url.substring(url.indexOf("?") + 1).split("&");
+    paramArray.forEach(_item=>{
       if (_item.indexOf("=") < 0) {
         this.$message.error(isBefore?"鍓嶇疆浜嬩欢":"鍚庣疆浜嬩欢" + "鐨勫弬鏁伴厤缃敊璇紝闇�瑕佽xxx=yyy&zzz=a鐨勬柟寮�");
         return true;
       }
       params[_item.split("=")[0]] = _item.split("=")[1];
-    });
+    })
   }else{
     if (url.indexOf("#") > -1) {
-      var array = url.split("#");
+      let array = url.split("#");
       if(array.length == 1){
         jsPath = array[0];
       }else{
diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-TreeTable.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-TreeTable.vue
index b563d16..72354eb 100644
--- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-TreeTable.vue
+++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-TreeTable.vue
@@ -396,6 +396,7 @@
       this.TreeSelectList = row;
       this.$emit("setDataStore", {
         area: this.areasName,
+        type:this.componentVO.uiComponentType,
         dataStore:row
       });
     },
diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-button.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-button.vue
index 2aa8c65..7b8dee8 100644
--- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-button.vue
+++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-button.vue
@@ -56,6 +56,7 @@
 <script>
 import func from "@/util/func";
 import {validatenull} from "@/util/validate";
+import {doAction} from '@/actions/base/BaseAction';
 
 export default {
   name: "dynamic-button",
@@ -278,18 +279,14 @@
       this.$refs.dynamicForm.form = row;
     },
     buttonClick(item) {
-      // 鏍规嵁 type 鏉′欢鍔ㄦ�佸紩鍏ヤ笉鍚岀殑JS鏂囦欢锛屽苟浼犻�� item this 鍙傛暟
-      if (this.type === 'table') {
-        import('@/views/base/buttonTable').then(module => {
-          const buttonClickTable = module.default;
-          buttonClickTable.buttonClick(item,this);
-        })
-      } else if (this.type === 'form') {
-        import('@/views/base/buttonForm').then(module => {
-          const buttonClickForm = module.default;
-          buttonClickForm.buttonClick(item,this);
-        })
-      }
+      doAction(item,{
+        paramVOS: item.paramVOS,
+        dataStore: [],
+        sourceData: {},
+        callback: function (){
+
+        }
+      });
     }
   },
 }
diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue
index 5c04b55..f4495f6 100644
--- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue
+++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue
@@ -555,14 +555,14 @@
     },
     selectChange(row) {
       this.selectList = row;
-    },
-    searchChange(form,done){
-      console.log(form)
-      done()
       this.$emit("setDataStore", {
         area: this.areasName,
+        type:this.componentVO.uiComponentType,
         dataStore:row
       });
+    },
+    searchChange(form,done){
+      done();
     }
   }
 }
diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-tree.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-tree.vue
index f6b272f..4cc211c 100644
--- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-tree.vue
+++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-tree.vue
@@ -75,6 +75,7 @@
         if(newval) {
           this.$emit("setDataStore", {
             area: this.areasName,
+            type:this.componentVO.uiComponentType,
             dataStore:newval
           });
         }
diff --git a/Source/ProjectWeb/src/views/base/UIContentArea.vue b/Source/ProjectWeb/src/views/base/UIContentArea.vue
index 3a368ff..41c9ee3 100644
--- a/Source/ProjectWeb/src/views/base/UIContentArea.vue
+++ b/Source/ProjectWeb/src/views/base/UIContentArea.vue
@@ -1,7 +1,7 @@
 <template>
   <basic-container :cradStyle="cradStyle" cardBodyStyle="height:100%;box-sizing: border-box;padding-bottom:5px;">
-    <el-tabs style="height: 100%;" class="UITabs" v-if="areasData.length>1" v-model="activeName" type="card" @tab-click="tabHandleClick">
-      <el-tab-pane style="height:100%;overflow: auto" v-for="(areaItem,index) in areasData" :key="areaItem.oid" :label="areaItem.name" :name="areasName+'-Tab-'+index">
+    <el-tabs style="height: 100%;" class="UITabs" v-if="newAreasData.length>1" v-model="activeName" type="card" @tab-click="tabHandleClick">
+      <el-tab-pane style="height:100%;overflow: auto" v-for="(areaItem,index) in newAreasData" :key="areaItem.oid" :label="areaItem.name" :name="areasName+'-Tab-'+index">
         <el-collapse class="UI-collapse" :key="areaItem.oid+'-collapse'" v-model="collapseActiveNames" v-if="areaItem.componentVOs.length>1" @change="handleChange">
           <el-collapse-item v-for="(componentVO,componentIndex) in areaItem.componentVOs" :name="areasName+'-collapse-'+componentIndex">
             <template slot="title">
@@ -11,7 +11,7 @@
               <compoent-index :key="areasName+'componentVO-'+componentVO.oid"
                               :inDialog="inDialog"
                               :componentVO="componentVO"
-                              :sourceData="sourceData"
+                              :sourceData="newSourceData"
                               :dataStore="dataStore"
                               :areasName="areasName"
                               :paramVOS="paramVOS"
@@ -24,7 +24,7 @@
           <compoent-index :key="areasName+'componentVO-'+areaItem.componentVOs[0].oid"
                           :inDialog="inDialog"
                           :componentVO="areaItem.componentVOs[0]"
-                          :sourceData="sourceData"
+                          :sourceData="newSourceData"
                           :dataStore="dataStore"
                           :areasName="areasName"
                           :paramVOS="paramVOS"
@@ -33,9 +33,9 @@
         </div>
       </el-tab-pane>
     </el-tabs>
-    <div v-else style="height:100%;overflow: auto">
-      <el-collapse class="UI-collapse" :key="areasData[0].oid+'-collapse'" v-model="collapseActiveNames" v-if="areasData[0].componentVOs.length>1" @change="handleChange">
-        <el-collapse-item v-for="(componentVO,componentIndex) in areasData[0].componentVOs" :name="areasName+'-collapse-'+componentIndex">
+    <div v-else-if="newAreasData.length===1" style="height:100%;overflow: auto">
+      <el-collapse class="UI-collapse" :key="newAreasData[0].oid+'-collapse'" v-model="collapseActiveNames" v-if="newAreasData[0].componentVOs.length>1" @change="handleChange">
+        <el-collapse-item v-for="(componentVO,componentIndex) in newAreasData[0].componentVOs" :name="areasName+'-collapse-'+componentIndex">
           <template slot="title">
             {{componentVO.name}}
           </template>
@@ -43,7 +43,7 @@
             <compoent-index :key="areasName+'componentVO-'+componentVO.oid"
                             :inDialog="inDialog"
                             :componentVO="componentVO"
-                            :sourceData="sourceData"
+                            :sourceData="newSourceData"
                             :dataStore="dataStore"
                             :areasName="areasName"
                             :paramVOS="paramVOS"
@@ -53,10 +53,10 @@
         </el-collapse-item>
       </el-collapse>
       <div v-else class="componentVO">
-        <compoent-index :key="areasName+'componentVO-'+areasData[0].componentVOs[0].oid"
+        <compoent-index :key="areasName+'componentVO-'+newAreasData[0].componentVOs[0].oid"
                         :inDialog="inDialog"
-                        :componentVO="areasData[0].componentVOs[0]"
-                        :sourceData="sourceData"
+                        :componentVO="newAreasData[0].componentVOs[0]"
+                        :sourceData="newSourceData"
                         :dataStore="dataStore"
                         :areasName="areasName"
                         :paramVOS="paramVOS"
@@ -64,11 +64,42 @@
                         :isShow="true"></compoent-index>
       </div>
     </div>
+    <div v-else>
+      <el-alert
+        v-if="areasData.length==0"
+        class="alert"
+        :closable="false"
+        title="閰嶇疆閿欒"
+        type="error"
+        show-icon
+        description="璇ュ尯鍩熸病鏈夐厤缃樉绀虹殑鍐呭">
+      </el-alert>
+      <el-alert
+        v-else-if="Object.keys(newSourceData).length === 0"
+        class="alert"
+        :closable="false"
+        title="婧愭暟鎹负绌�"
+        type="error"
+        show-icon
+        description="涓嶆弧瓒虫樉绀鸿〃杈惧紡鏉′欢锛屾病鏈夊彲鏄剧ず鐨勫唴瀹�">
+      </el-alert>
+      <el-alert
+        v-else
+        class="alert"
+        :closable="false"
+        title=""
+        type="error"
+        show-icon
+        description="涓嶆弧瓒虫樉绀鸿〃杈惧紡鏉′欢锛屾病鏈夊彲鏄剧ず鐨勫唴瀹广��">
+      </el-alert>
+      {{newSourceData}}
+    </div>
   </basic-container>
 </template>
 
 <script>
 import compoentIndex from "@/components/dynamic-components/index"
+import {validatenull, verifyNotNull} from "@/util/validate";
 export default {
   name: "UIContentArea",
   components:{compoentIndex},
@@ -107,10 +138,54 @@
       collapseActiveNames:[this.areasName+'-collapse-0']
     }
   },
+  computed:{
+    newAreasData(){
+      let newAreasData = [];
+      this.areasData.forEach(areaData => {
+        //楠岃瘉鏄惧紡琛ㄨ揪寮�
+        if (!validatenull(areaData.displayExpression)) {
+          if (this.checkDisplayExpression(areaData.displayExpression)) {
+            newAreasData.push(areaData)
+          }
+        } else {
+          newAreasData.push(areaData)
+        }
+      })
+     return newAreasData;
+    },
+    newSourceData(){
+      if(this.sourceData.attributes && this.sourceData.parentId!=undefined && this.sourceData.parentId !=null){
+        //婧愭暟鎹槸鏍戣妭鐐�
+        return this.sourceData.attributes
+      }
+      return this.sourceData;
+    }
+  },
+  created() {
+
+  },
   mounted() {
     // console.log(this.areasData);
   },
   methods:{
+    checkDisplayExpression(displayExpressionStr){
+      //"${folderbusinesstype}"<>"workunit" and "${folderbusinesstype}"<>"part"  and "${folderbusinesstype}"<>"Terminology" and  "${folderbusinesstype}"<>"AssMaterial" and  "${folderbusinesstype}"<>"resourcelib" and  "${folderbusinesstype}"<>"material"  and "${folderbusinesstype}"<>"machine"
+      // "${folderbusinesstype}"="AssMaterial" or "${folderbusinesstype}"="assmaterial"
+      //"${folderbusinesstype}"="material"
+      //${folderbusinesstype}涓烘簮鏁版嵁涓殑灞炴��
+
+      let checkdisplay=false;
+      //鏇挎崲and鍜宱r
+      let newDisplayExpressionStr=displayExpressionStr.replace(/"\s*and\s*"/g,'" && "').replace(/"\s*AND\s*"/g,'" && "').replace(/"\s*or\s*"/g,'" || "').replace(/"\s*OR\s*"/g,'" || "');
+      newDisplayExpressionStr=newDisplayExpressionStr.replace(/"\s*<>\s*"/g,'" != "').replace(/"\s*=\s*"/g,'" == "');
+      newDisplayExpressionStr=newDisplayExpressionStr.replace(/"\$\{/g,'this.newSourceData.').replace(/\}"/g,'')
+
+      const sandbox = {};
+      if(eval('('+newDisplayExpressionStr+')')){
+        checkdisplay=true;
+      }
+      return checkdisplay;
+    },
     tabHandleClick(tab, event) {
       // console.log(tab, event);
     },

--
Gitblit v1.9.3