我作为前端开发者对低代码平台的理解和搭建流程(二)

一、平台搭建(支持多语言)

vue admin管理后台 只包含了 Element UI & axios & iconfont & permission control & lint, 目前版本为v4.0+ 基于 vue-cli

二、组件封装(其他组件代码格式一致)

动态配置组件参数实现各种业务逻辑和各种效果

<!--elMain组件-->
<template>
    <!-- superParams[parentNode.resizeMethod] 父级方法 -->
    <div :class="parentNode.class" v-resize="superParams[parentNode.resizeMethod]">
        <component v-for="(item,index) in parentNode.childrenNode" :key="index" :parentNode="item" :is="item.componentName" />
    </div>
</template>
<script>
// 下级需用到的组件
import elContainer from '@/components/Page/elContainer';
import elForm from '@/components/Page/elForm';
import elTable from '@/components/Page/elTable';
import elPagination from '@/components/Page/elPagination';
import elDialog from '@/components/Page/elDialog';
export default{
    inject: ['superParams'], // 祖先组件向其所有子孙后代注入的一个依赖
    components:{
        elContainer,
        elForm,
        elTable,
        elPagination,
        elDialog
    },
    props:{
        // 接收组件参数
        parentNode:{
            type:Object,
            require:true
        }
    }
}
</script>
<style lang="scss" scoped>
</style>
<!--elForm组件-->
<template>
    <el-form 
        @submit.native.prevent
        :model="parentNode.model ? superParams[parentNode.model] : {}" 
        :class="parentNode.class"
        :rules="parentNode.formRule ? superParams[parentNode.formRule] : {}"
        :label-width="parentNode.labelWidth  || ''"
        :ref="parentNode.refName  || ''"
        :label-position="parentNode.labelPosition || 'right'"
    >
        <component v-for="(item,index) in parentNode.childrenNode" :key="index" :parentNode="item" :is="item.componentName"  />
    </el-form>    
</template>
<script>
import elContainer from '@/components/Page/elContainer';
import elFormItem from '@/components/Page/elFormItem';
export default{
    inject: ['superParams'],
    components:{
        elContainer,
        elFormItem
    },
    props:{
        parentNode:{
            type:Object,
            require:true
        }
    }
}
</script>

界面使用

1.界面组件引用(只需引入一个elMain组件)

<template>
    <elMain id="main" :parentNode="htmlData" />
</template>

<script>
    import elMain from '@/components/Page/elMain'
    import { htmlData } from "./index";
    export default {
      //父组件提供参数给子组件(响应式时需设置为对象)
      provide(){
        return {
          superParams:this
        }
      },
      components: {
        elMain
      },
      data(){
          return {
            htmlData:htmlData,
            searchForm:{
                deviceName:''
            }
          }
      }
      methods: {
        //监听浏览器窗口变化
        onResize() {
            
        }
      }
    }
</script>

组件目录
组件目录

界面目录
界面目录

index.js配置

多数据源配置功能,支持无限层级

export const htmlData = {
    componentName:'elMain', // 1 div
    class:['accountList','container'],
    resizeMethod:'onResize',
    childrenNode:[
        {
            componentName:'elForm', // 1-1 el-form
            class:['searchForm','searchUser'],
            childrenNode:[
                {
                    componentName:'elContainer', // 1-1-1 div
                    class:['search-left'],
                    childrenNode:[
                        {
                            componentName:'elFormItem', // 1-1-1-1 el-form-item
                            label:'form.deviceName',
                            prop:'',
                            childrenNode:[
                                {
                                    componentName:'elInput', // 1-1-1-1-1 el-input
                                    class:['queryProduct'],
                                    vModel:'searchForm.deviceName',
                                    placeholder:['placeholder.pleaseEnter','form.deviceName'],
                                    clearable:true
                                }
                            ]
                        }
                    ]
                 }
           ]
       }
      ]
  
}
                        

目前实现多数据源配置功能、通过对组件封装和组件复用实现了利用较少的代码就可以完成业务逻辑

猜你喜欢

转载自blog.csdn.net/mrliucx/article/details/128159444