From d5d7f913589aac09957d1922c20da9d0e0681543 Mon Sep 17 00:00:00 2001
From: wangting <675591594@qq.com>
Date: 星期四, 11 四月 2024 11:24:33 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/ProjectWeb/src/views/base/UIContentArea.vue |  142 +++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 117 insertions(+), 25 deletions(-)

diff --git a/Source/ProjectWeb/src/views/base/UIContentArea.vue b/Source/ProjectWeb/src/views/base/UIContentArea.vue
index 7e11fec..10e9627 100644
--- a/Source/ProjectWeb/src/views/base/UIContentArea.vue
+++ b/Source/ProjectWeb/src/views/base/UIContentArea.vue
@@ -1,62 +1,105 @@
 <template>
-  <basic-container :cradStyle="cradStyle">
-    <el-tabs v-if="areasData.length>1" v-model="activeName" type="card" @tab-click="tabHandleClick">
-      <el-tab-pane v-for="(areaItem,index) in areasData" :key="areaItem.oid" :label="areaItem.name" :name="areasName+'-Tab-'+index">
-        <el-collapse  v-model="collapseActiveNames" v-if="areaItem.componentVOs.length>1">
+  <basic-container :cradStyle="cradStyle" cardBodyStyle="height:100%;box-sizing: border-box;padding-bottom:5px;">
+    <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">
               {{componentVO.name}}
             </template>
-            <div class="componentVO" style="height: 60%">
-              <compoent-index :key="componentVO.oid"
+            <div class="componentVO">
+              <compoent-index :key="areasName+'componentVO-'+componentVO.oid"
                               :inDialog="inDialog"
                               :componentVO="componentVO"
-                              :sourceData="sourceData"
+                              :sourceData="newSourceData"
+                              :dataStore="dataStore"
                               :areasName="areasName"
-                              :paramVOS="paramVOS"></compoent-index>
+                              :paramVOS="paramVOS"
+                              @setDataStore="setDataStore"
+                              :isShow="collapseActiveNames.indexOf(areasName+'-collapse-'+componentIndex)!=-1?true:false"></compoent-index>
             </div>
           </el-collapse-item>
         </el-collapse>
         <div v-else class="componentVO">
-          <compoent-index :key="areaItem.componentVOs[0].oid"
+          <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"></compoent-index>
+                          :paramVOS="paramVOS"
+                          @setDataStore="setDataStore"
+                          :isShow="activeName==(areasName+'-Tab-'+index)?true:false"></compoent-index>
         </div>
       </el-tab-pane>
     </el-tabs>
-    <div v-else>
-      <el-collapse  v-model="collapseActiveNames" v-if="areasData[0].componentVOs.length>1">
-        <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>
-          <div class="componentVO" style="height: 60%">
-            <compoent-index :key="componentVO.oid"
+          <div class="componentVO">
+            <compoent-index :key="areasName+'componentVO-'+componentVO.oid"
                             :inDialog="inDialog"
                             :componentVO="componentVO"
-                            :sourceData="sourceData"
+                            :sourceData="newSourceData"
+                            :dataStore="dataStore"
                             :areasName="areasName"
-                            :paramVOS="paramVOS"></compoent-index>
+                            :paramVOS="paramVOS"
+                            @setDataStore="setDataStore"
+                            :isShow="collapseActiveNames.indexOf(areasName+'-collapse-'+componentIndex)!=-1?true:false"></compoent-index>
           </div>
         </el-collapse-item>
       </el-collapse>
       <div v-else class="componentVO">
-        <compoent-index :key="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"></compoent-index>
+                        :paramVOS="paramVOS"
+                        @setDataStore="setDataStore"
+                        :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},
@@ -95,13 +138,62 @@
       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);
+    // console.log(this.areasData);
   },
   methods:{
-    tabHandleClick(tab, event) {
-      console.log(tab, event);
+    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,'')
+      if(eval('('+newDisplayExpressionStr+')')){
+        checkdisplay=true;
+      }
+      return checkdisplay;
     },
+    tabHandleClick(tab, event) {
+      // console.log(tab, event);
+    },
+    handleChange(val) {
+      //console.log(val);
+    },
+    setDataStore(value) {
+      this.$emit("setDataStore", value);
+      this.dataStore = value.dataStore;
+    }
   }
 }
 </script>

--
Gitblit v1.9.3