From b5710cb685a97ef7eb15e5207d47817569259e6f Mon Sep 17 00:00:00 2001 From: wangting <675591594@qq.com> Date: 星期四, 21 三月 2024 11:38:52 +0800 Subject: [PATCH] UI上下文展示引擎 --- Source/ProjectWeb/src/components/dynamic-components/index.vue | 19 +++++++-- Source/ProjectWeb/src/views/base/UIContentArea.vue | 19 ++++++--- Source/ProjectWeb/src/App.vue | 2 Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue | 55 +++++++++++++++++++-------- 4 files changed, 66 insertions(+), 29 deletions(-) diff --git a/Source/ProjectWeb/src/App.vue b/Source/ProjectWeb/src/App.vue index 9f548bf..004c618 100644 --- a/Source/ProjectWeb/src/App.vue +++ b/Source/ProjectWeb/src/App.vue @@ -58,9 +58,9 @@ } .UI-collapse > .el-collapse-item > .el-collapse-item__wrap{ height:calc(100% - 49px); - overflow: auto; } .UI-collapse > .el-collapse-item > .el-collapse-item__wrap > .el-collapse-item__content{ + height: 100%; padding-bottom: 5px; } .UI-dynamic{ diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue index bb99f2b..60a97c6 100644 --- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue +++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue @@ -1,6 +1,7 @@ <template> <div class="UI-dynamic" :id="'UI-dynamic-'+areasName+componentVO.oid"> <avue-crud v-model="form" + ref="dataTable" :data="tableList" :option="option" :page.sync="page" @@ -45,11 +46,15 @@ paramVOS: { type: Object, default: {} - } + }, + isShow: { + //鎵�鍦ㄥ尯鍩熸槸鍚﹀凡鏄剧ず锛岄拡瀵箃ab鍜宑ollapse + type: Boolean, + default: true + }, }, data() { return { - clientHeight:0, parentHeight:'100%',//褰撳墠缁勪欢鏍硅妭鐐瑰厓绱犻珮搴� form: {}, formName: '', @@ -616,22 +621,20 @@ verify: "" }, ], - } - }, - computed: { - option() { - return { + option: { index: true, addBtn: false, editBtn: false, delBtn: false, - height: this.parentHeight, + height: '100%', calcHeight: 15, indexFixed: false, menuFixed: false, - column: this.updatedColumns, - }; - }, + column: [], + }, + } + }, + computed: { updatedColumns() { return this.componentVO.tableDefineVO.cols[0].map(item => { const typeValue = item.fieldType === 'text' || item.fieldType === 'combox' ? 'input' : item.fieldType; // 琛ㄥ崟Type绫诲瀷 @@ -649,18 +652,36 @@ }, }, watch:{ - clientHeight: { + parentHeight:{ handler(newval) { - if(newval>50){ - //鐖跺厓绱犻珮搴�-鎸夐挳楂樺害-鍒嗛〉楂樺害 - this.parentHeight=this.$el.clientHeight-this.$children[0].$children[1].$children[0].$el.clientHeight-this.$children[0].$children[2].$el.clientHeight-5; - console.log(this.parentHeight) + if(newval >50){ + this.option.height=newval; + //doLayout涓嶇敓鏁堬紝鎵嬪姩璁剧疆琛ㄦ牸楂樺害 + this.$children[0].$children[1].$children[1].$children[0].$el.style.height=newval+'px'; + /*this.$nextTick(() => { + if (this.$refs.dataTable && this.$refs.dataTable.doLayout) { + this.$refs.dataTable.doLayout(); + } + })*/ } } }, + isShow:{ + handler(newval) { + if(newval && this.$el.clientHeight>50) { + this.parentHeight = this.$el.clientHeight - this.$children[0].$children[1].$children[0].$el.clientHeight - this.$children[0].$children[2].$el.clientHeight - 5; + } + } + } + }, + created() { + this.option.column=this.updatedColumns; }, mounted() { - this.clientHeight=this.$el.clientHeight; + if(this.$el.clientHeight>50) { + //鐖跺厓绱犻珮搴�-鎸夐挳楂樺害-鍒嗛〉楂樺害 + this.parentHeight = this.$el.clientHeight - this.$children[0].$children[1].$children[0].$el.clientHeight - this.$children[0].$children[2].$el.clientHeight - 5; + } }, methods: { buttonClick(scope, item) { diff --git a/Source/ProjectWeb/src/components/dynamic-components/index.vue b/Source/ProjectWeb/src/components/dynamic-components/index.vue index c027072..313370c 100644 --- a/Source/ProjectWeb/src/components/dynamic-components/index.vue +++ b/Source/ProjectWeb/src/components/dynamic-components/index.vue @@ -5,7 +5,8 @@ :componentVO="componentVO" :sourceData="sourceData" :areasName="areasName" - :paramVOS="paramVOS"> + :paramVOS="paramVOS" + :isShow="isShow"> </dynamic-table> <dynamic-form v-else-if="componentVO.uiComponentType=='form'" @@ -14,7 +15,8 @@ :componentVO="componentVO" :sourceData="sourceData" :areasName="areasName" - :paramVOS="paramVOS"> + :paramVOS="paramVOS" + :isShow="isShow"> </dynamic-form> <dynamic-tree v-else-if="componentVO.uiComponentType=='tree'" @@ -23,7 +25,8 @@ :componentVO="componentVO" :sourceData="sourceData" :areasName="areasName" - :paramVOS="paramVOS"> + :paramVOS="paramVOS" + :isShow="isShow"> </dynamic-tree> <dynamic-custom v-else-if="componentVO.uiComponentType=='custom'" :inDialog="inDialog" @@ -31,7 +34,8 @@ :componentVO="componentVO" :sourceData="sourceData" :areasName="areasName" - :paramVOS="paramVOS"> + :paramVOS="paramVOS" + :isShow="isShow"> </dynamic-custom> </template> @@ -65,7 +69,12 @@ paramVOS:{ type:Object, default: {} - } + }, + isShow: { + //鎵�鍦ㄥ尯鍩熸槸鍚﹀凡鏄剧ず锛岄拡瀵箃ab鍜宑ollapse + type: Boolean, + default: true + }, }, } </script> diff --git a/Source/ProjectWeb/src/views/base/UIContentArea.vue b/Source/ProjectWeb/src/views/base/UIContentArea.vue index 20e49eb..705baaf 100644 --- a/Source/ProjectWeb/src/views/base/UIContentArea.vue +++ b/Source/ProjectWeb/src/views/base/UIContentArea.vue @@ -2,7 +2,7 @@ <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-collapse class="UI-collapse" v-model="collapseActiveNames" v-if="areaItem.componentVOs.length>1"> + <el-collapse class="UI-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}} @@ -13,7 +13,8 @@ :componentVO="componentVO" :sourceData="sourceData" :areasName="areasName" - :paramVOS="paramVOS"></compoent-index> + :paramVOS="paramVOS" + :isShow="collapseActiveNames.indexOf(areasName+'-collapse-'+componentIndex)!=-1?true:false"></compoent-index> </div> </el-collapse-item> </el-collapse> @@ -23,12 +24,13 @@ :componentVO="areaItem.componentVOs[0]" :sourceData="sourceData" :areasName="areasName" - :paramVOS="paramVOS"></compoent-index> + :paramVOS="paramVOS" + :isShow="activeName==(areasName+'-Tab-'+index)?true:false"></compoent-index> </div> </el-tab-pane> </el-tabs> <div v-else style="height:100%;overflow: auto"> - <el-collapse class="UI-collapse" v-model="collapseActiveNames" v-if="areasData[0].componentVOs.length>1"> + <el-collapse class="UI-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"> <template slot="title"> {{componentVO.name}} @@ -39,7 +41,8 @@ :componentVO="componentVO" :sourceData="sourceData" :areasName="areasName" - :paramVOS="paramVOS"></compoent-index> + :paramVOS="paramVOS" + :isShow="collapseActiveNames.indexOf(areasName+'-collapse-'+componentIndex)!=-1?true:false"></compoent-index> </div> </el-collapse-item> </el-collapse> @@ -49,7 +52,8 @@ :componentVO="areasData[0].componentVOs[0]" :sourceData="sourceData" :areasName="areasName" - :paramVOS="paramVOS"></compoent-index> + :paramVOS="paramVOS" + :isShow="true"></compoent-index> </div> </div> </basic-container> @@ -102,6 +106,9 @@ tabHandleClick(tab, event) { // console.log(tab, event); }, + handleChange(val) { + //console.log(val); + } } } </script> -- Gitblit v1.9.3