| | |
| | | <template> |
| | | <div class="UI-dynamic" :id="'UI-dynamic-'+areasName+componentVO.oid"> |
| | | <div v-if="isError" style="color: #F56C6C">这个自定义页面的地址格式不正确。推荐使用bs=?type=xxx&context=yyy&pparam=zzz这种形式</div> |
| | | <el-alert |
| | | class="alert" |
| | | v-if="isError" |
| | | title="自定义组件配置信息错误!" |
| | | type="error" |
| | | show-icon |
| | | description="这个自定义页面的地址格式不正确。推荐使用bs=组件name?type=xxx&context=yyy&pparam=zzz这种形式"> |
| | | </el-alert> |
| | | <component v-else :is="currentComponent" |
| | | :btmType="btmType" |
| | | :content="content" |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import {queryStringToObject} from '@/util/util' |
| | | export default { |
| | | name: "dynamic-custom", |
| | | components:{ |
| | | 'UI':()=>import('@/views/base/UIContentViewerInDialog'), |
| | | 'test':()=>import('@/views/custom-ui/test'), |
| | | 'test2':()=>import('@/views/custom-ui/test2'), |
| | | components: { |
| | | 'UI': () => import('@/views/base/UIContentViewerInDialog'), |
| | | 'test': () => import('@/views/custom-ui/test'), |
| | | 'test2': () => import('@/views/custom-ui/test2'), |
| | | }, |
| | | props:{ |
| | | componentVO:{ |
| | | type:Object, |
| | | props: { |
| | | componentVO: { |
| | | type: Object, |
| | | default: {} |
| | | }, |
| | | inDialog: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | areasName:{ |
| | | type:String, |
| | | default:'' |
| | | areasName: { |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | sourceData:{ |
| | | sourceData: { |
| | | //所属区域的上一区域选中数据 |
| | | type:Object, |
| | | type: Object, |
| | | default: {} |
| | | }, |
| | | dataStore:{ |
| | | dataStore: { |
| | | //弹窗时按钮所属区域选中数据 |
| | | type:Array, |
| | | type: Array, |
| | | default: [] |
| | | }, |
| | | paramVOS:{ |
| | | type:Object, |
| | | paramVOS: { |
| | | type: Object, |
| | | default: {} |
| | | }, |
| | | isShow: { |
| | |
| | | }, |
| | | data() { |
| | | return { |
| | | btmType:'', |
| | | content:'', |
| | | urlParams:{}, |
| | | height:'300px', |
| | | customClass:this.componentVO.customClass, //bs=?type=xxx&context=yyy¶m=zzz 或者 bs=组件name?type=xxx&context=yyy¶m=zzz |
| | | isError:false, //路径解析失败 |
| | | btmType: '', |
| | | content: '', |
| | | urlParams: {}, |
| | | height: '300px', |
| | | customClass: this.componentVO.customClass, //bs=?type=xxx&context=yyy¶m=zzz 或者 bs=组件name?type=xxx&context=yyy¶m=zzz |
| | | isError: false, //路径解析失败 |
| | | currentComponent: 'UI',//组件name |
| | | } |
| | | }, |
| | | watch:{ |
| | | sourceData:{ |
| | | watch: { |
| | | sourceData: { |
| | | handler(newval) { |
| | | //源数据有变化时变更当前区域数据 |
| | | console.log(this.areasName); |
| | |
| | | } |
| | | } |
| | | }, |
| | | computed:{ |
| | | }, |
| | | computed: {}, |
| | | created() { |
| | | |
| | | }, |
| | | mounted() { |
| | | if(this.customClass.indexOf("bs=") <0){ |
| | | this.isError=true; |
| | | return ; |
| | | if (this.customClass.indexOf("bs=") < 0) { |
| | | this.isError = true; |
| | | return; |
| | | } |
| | | 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 ; |
| | | 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]; |
| | | 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='' |
| | | 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]; |
| | | } |
| | | }) |
| | | let urlParams = queryStringToObject(this.customClass); |
| | | let btmType = urlParams.type; |
| | | let content = urlParams.context; |
| | | |
| | | |
| | | this.btmType=btmType, |
| | | this.content=content, |
| | | this.urlParams=Object.assign(this.paramVOS,urlParams) |
| | | this.btmType = btmType; |
| | | this.content = content; |
| | | this.urlParams = Object.assign(this.paramVOS, urlParams) |
| | | |
| | | //this.getHeight(this.$parent); |
| | | }, |
| | | methods:{ |
| | | getHeight(el){ |
| | | if(el.$el.clientHeight>50){ |
| | | this.height=el.$el.clientHeight+'px'; |
| | | }else { |
| | | }, |
| | | methods: { |
| | | getHeight(el) { |
| | | if (el.$el.clientHeight > 50) { |
| | | this.height = el.$el.clientHeight + 'px'; |
| | | } else { |
| | | this.getHeight(el.$parent); |
| | | } |
| | | } |
| | |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | <style scoped lang="scss"> |
| | | |
| | | </style> |