From 51636e9cd814bddba7a9b4ff21b5bc94e95fb6cb Mon Sep 17 00:00:00 2001 From: wangting <675591594@qq.com> Date: 星期二, 14 五月 2024 09:21:36 +0800 Subject: [PATCH] 配置文档 --- Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue | 177 +++++++++++++++++++++++++++++++++-------------------------- 1 files changed, 99 insertions(+), 78 deletions(-) diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue index 5d85586..360191b 100644 --- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue +++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-custom.vue @@ -1,51 +1,70 @@ <template> <div class="UI-dynamic" :id="'UI-dynamic-'+areasName+componentVO.oid"> - <div v-if="isError" style="color: #F56C6C">杩欎釜鑷畾涔夐〉闈㈢殑鍦板潃鏍煎紡涓嶆纭�傛帹鑽愪娇鐢║I:type#content?param=xxx杩欑褰㈠紡</div> + <el-alert + class="alert" + :closable="false" + v-if="isError" + title="鑷畾涔夌粍浠堕厤缃俊鎭敊璇紒" + type="error" + show-icon + description="杩欎釜鑷畾涔夐〉闈㈢殑鍦板潃鏍煎紡涓嶆纭�傛帹鑽愪娇鐢ㄢ�滅粍浠秐ame?param=xxx鈥濓紙鑷畾涔夌粍浠讹級鎴栬�呪��?type=xxx&context=yyy&pparam=zzz鈥濓紙UI寮曟搸锛夎繖2绉嶅舰寮�"> + </el-alert> <component v-else :is="currentComponent" - :customOptions="customOptions" + :btmType="btmType" + :context="context" :inDialog="true" :key="areasName+'customCom-'+componentVO.oid" :componentVO="componentVO" :sourceData="sourceData" :dataStore="dataStore" :areasName="areasName" - :paramVOS="paramVOS"></component> + :paramVOS="urlParams"></component> </div> </template> <script> +import {queryStringToObject} from '@/util/util' +import {validatenull} from "@/util/validate"; export default { name: "dynamic-custom", - components:{ - 'UI':()=>import('@/views/base/UIContentViewerInDialog'), - 'test':()=>import('@/components/custom-ui/test'), - 'test2':()=>import('@/components/custom-ui/test2'), - }, - props:{ - componentVO:{ - type:Object, + props: { + //ui涓婁笅鏂囩殑涓氬姟绫诲瀷锛堟垨閾炬帴绫诲瀷锛� + uiBtmType: { + type: String + }, + //ui涓婁笅鏂� + uiContext:{ + type: String + }, + componentVO: { + type: Object, default: {} }, inDialog: { type: Boolean, default: false }, - areasName:{ - type:String, - default:'' + canEdit:{ + //鍐呭鏄惁鍙紪杈� + type:Boolean, + default:false }, - sourceData:{ - //鑿滃崟婧愭暟鎹垨鑰呭脊绐楁椂鎸夐挳鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁 - type:Object, + areasName: { + type: String, + default: '' + }, + sourceData: { + //鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁 + type: Object, default: {} }, - dataStore:{ + dataStore: { //寮圭獥鏃舵寜閽墍灞炲尯鍩熼�変腑鏁版嵁 - type:Array, + type: Array, default: [] }, - paramVOS:{ - type:Object, + paramVOS: { + type: Object, default: {} }, isShow: { @@ -56,75 +75,77 @@ }, data() { return { - height:'300px', - customClass:this.componentVO.customClass, //UI:type#content?param=xxx鎴栬�� 缁勪欢name:type#content?param=xxx - isError:false, //璺緞瑙f瀽澶辫触 - currentComponent: 'UI',//缁勪欢name + btmType: '', + context: '', + urlParams: {}, + height: '300px', + customClass: '', //?type=xxx&context=yyy¶m=zzz 鎴栬�� 缁勪欢name?type=xxx&context=yyy¶m=zzz + isError: false, //璺緞瑙f瀽澶辫触 + ComponentUrl:'base/UIContentViewerInDialog', + currentComponent: null } }, - watch:{ - sourceData:{ + watch: { + sourceData: { handler(newval) { + //婧愭暟鎹湁鍙樺寲鏃跺彉鏇村綋鍓嶅尯鍩熸暟鎹� console.log(this.areasName); console.log(newval); - } + }, + deep: true, + immediate: true } }, - computed:{ - customOptions() { - if(this.customClass.indexOf(":") <0){ - this.isError=true; - return ; - } - - if(this.customClass.split(':')[0]!='UI' && this.customClass.split(':')[0]!='ui'){ - this.currentComponent=this.customClass.split(':')[0]; - } - 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]; - } - }) - } - - return { - btmType:btmType, - content:content, - urlParams: urlParams - } - } - }, + computed: {}, created() { + this.customClass=this.componentVO.customClass; + this.componentVO.customClass.split(';').forEach(item=>{ + if(item.indexOf('web=')==0){ + this.customClass=item.split('web=')[1]; + } + }) + let urlParams = {}; + // 濡傛灉璺緞涓瓨鍦� '?'锛屽垯鍙栭棶鍙峰墠闈㈤儴鍒嗙粰 parts + if (this.customClass.includes('?')) { + this.ComponentUrl = this.customClass.split("?")[0]; + urlParams = queryStringToObject(this.customClass); + } else { + this.ComponentUrl = this.customClass; // 涓嶅瓨鍦� '?' 鏁存潯璺緞灏辨槸 parts + } + if(validatenull(this.ComponentUrl) || ['ui', 'UI', 'base','bs'].includes(this.ComponentUrl)){ + this.ComponentUrl='views/base/UIContentViewerInDialog'; + }else if(this.ComponentUrl.indexOf('views/')===-1){ + this.ComponentUrl='views/custom-ui/'+this.ComponentUrl; + } + if (this.ComponentUrl=='base/UIContentViewerInDialog' && (!urlParams.type || !urlParams.context)) { + this.isError = true; + return; + } + + this.btmType = urlParams.type; + this.context = urlParams.context; + this.urlParams = Object.assign({},this.paramVOS, urlParams) + this.loadCompoent(); }, mounted() { //this.getHeight(this.$parent); }, - methods:{ - getHeight(el){ - if(el.$el.clientHeight>50){ - this.height=el.$el.clientHeight+'px'; - }else { + methods: { + loadCompoent(){ + // 鍔ㄦ�佸鍏ョ粍浠� + import(`@/${this.ComponentUrl}.vue`).then((module) => { + // 鎴愬姛瀵煎叆鍚庯紝灏嗙粍浠舵敞鍐屽埌Vue瀹炰緥涓� + this.currentComponent = module.default; + }).catch((error) => { + // 澶勭悊瀵煎叆澶辫触鐨勬儏鍐� + console.error('缁勪欢鍔犺浇澶辫触:', error); + }); + }, + getHeight(el) { + if (el.$el.clientHeight > 50) { + this.height = el.$el.clientHeight + 'px'; + } else { this.getHeight(el.$parent); } } @@ -132,6 +153,6 @@ } </script> -<style scoped> +<style scoped lang="scss"> </style> -- Gitblit v1.9.3