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¶m=zzz 鎴栬�� bs=缁勪欢name?type=xxx&context=yyy¶m=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¶m=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¶m=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¶m=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¶m=xxx", "data": null, "description": "", "extendAttr": "", -- Gitblit v1.9.3