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