x-render 是基于 Vue2
和 AntdVue 1.7
开发的可视化表单设计工具, 适用于 各种流程引擎、动态表单及常用表单项目,大大节省你的开发时间;设计器布局参考f-render项目,样式使用less作为开发语言,主要功能是能通过简单操作来生成配置表单,生成可保存的JSON数据,并能将JSON还原成表单,使表单开发更简单更快速。
XForm 表单设计器(基于可视化操作快速设计出表单页面,生成配置json或页面)
XRenderForm 表单构建器(根据设计器中获取的配置json数据,快速构建出表单页面)
XTable 表格设计器(基于可视化操作快速设计出表格页面,生成配置json或页面)
XRenderTable 表格构建器(根据设计器中获取的配置json数据,快速构建出表格页面)
// 在main.js引入
import XRender from 'x-render'
Vue.use(XRender)
<template>
<x-render-form
ref="xRenderForm"
v-model="formData"
v-bind="formConfig"
@form-submit="formSubmitHandler"
@change="formChangeHandler"
@form-change="formDataChangeHandler"
@custom-event="customEventHandler"
></x-render-form>
</template>
<script>
export default {
name: 'XRenderForm',
data() {
return {
// 表单数据
formData: {}
}
},
computed:{
formConfig:{
get(){
return '{formconfig}'
}
}
},
methods: {
/**
* 表单提交事件
* @param formData {Object} 表单数据
*/
formSubmitHandler(formData){
// todo ajax提交数据
},
/**
* 表单发生变化事件
* @param type {String} 组件类型
* @param prop {String} 组件属性
* @param value {[String|Number|Object|boolean]} 组件值
* @param attrs {Object} 组件属性集合
* @param formItem{Object} 属性集合
*/
formChangeHandler({type,prop,value,attrs,formItem}){
// todo 事件操作
// 展示/隐藏表单项 this.$refs.xRenderForm.showComponents('prop','prop1') | this.$refs.xRenderForm.hideComponents('prop','prop1')
// 启用/禁用表单项 this.$refs.xRenderForm.enabledComponents('prop','prop1') | this.$refs.xRenderForm.disabledComponents('prop','prop1')
},
/**
* 表单数据发送变化事件
* @param formData {Object} 表单数据
*/
formDataChangeHandler(formData){
// todo 事件操作
},
/**
* 自定义事件统一处理
* @param type {String} 组件类型
* @param prop {String} 组件属性
* @param value {[String|Number|Object|boolean]} 组件值
* @param attrs {Object} 组件属性集合
* @param formItem{Object} 属性集合
* @param association{Object} 关联属性集合
*/
customEventHandler({type,prop,value,attrs,formItem,association}){
// todo 自定义事件操作
}
}
}
</script>
<template>
<ant-table
ref="antTable"
:dataSource="dataSource"
:loading="loading"
v-bind="tableConfig"
@table-change="tableChangeHandler"
@table-page-change="pageChangeHandler"
@table-selected="tableRowSelectedHandler"
></ant-table>
</template>
<script>
export default {
name: 'antTable',
data() {
return {
// 数据源
dataSource: [],
// 表格加载状态
loading:false
}
},
computed:{
tableConfig:{
get(){
return {tableConfig}
}
}
},
methods: {
/**
* 表格行选中事件
* @param pagination {Object} 分页对象
* @param filters {Array} 过滤配置
* @param sorter {Array} 排序配置
* @param dataSource {Array} 数据
* @param instance {Object} table实例对象
*/
tableChangeHandler({pagination, filters, sorter, dataSource, instance}){
// todo 事件操作
},
/**
* 表格行选中事件
* @param selectedRowKeys {Array} 选中的keys
* @param selectedRows {Array} 选中的行
* @param instance {Object} table实例对象
*/
tableRowSelectedHandler({selectedRowKeys, selectedRows, instance}){
// todo 事件操作
},
/**
* 表单发生变化事件
* @param current {Number} 当前页
* @param pageSize {Number} 页大小
* @param instance {Object} table实例对象
*/
pageChangeHandler({current, pageSize, instance}){
// todo 事件操作
},
/**
* 自定义获取数据源
*/
async getDataSource(){
// 修改分页配置 current: 当前页面;pageSize:页大小;pageSizeOptions:分页配置;total:数据总数
// this.$refs.antTable.changePage({current, pageSize, pageSizeOptions, total })
// 添加选中的行的主键key
// this.$refs.antTable.addSelectedKeys([1,2,3,4])
const dataSourceUrl = '${url}'
// 使用nuxtjs/axios请求数据
// const data = await this.$axios.$get( dataSourceUrl )
const data = await this.$axios.$get( dataSourceUrl )
this.dataSource.splice(0, this.dataSource.length, ...data)
}
},
mounted(){
// 获取数据
this.getDataSource()
}
}
</script>
新增自定义组件
参考 example/components/CustomContainer
组件
attrs.js
组件属性CustomContainer.vue
组件CustomContainerDesign.vue
设计组件index.js
组件导出template.js
组件默认属性引入方式
参考 example/App.vue
<XForm
:comps="comps"
:loading="loading"
height="calc(100vh - 52px)"
@save="handleSave"
/>
// 自定义组件
import XRenderCustomContainer from './components/CustomContainer'
computed: {
comps: {
get() {
return [XRenderCustomContainer]
}
}
}
formItem
新增属性说明如果prop为 user.name的形式将转换为 userName
formItem增加新的属性 xRawProp 存储原来的 user.name
formItem增加新的属性 xPropKeys 存储原来的 ['user','name']
formItem增加新的属性 xEnhanceProp = true 表示增强处理prop
不支持数组
表单change事件是各个组件发生变化,进行触发的事件统一处理
表单change事件中各个组件传递的值各有不同,可查看各个组件,但传递的值固定属性为:
{
type: 组件类型
prop: 组件属性
value:组件值
attrs: 组件属性集合
formItem: formItem 属性集合
event: 详细事件对象
}
{
fileId: '文件主键',
name:'文件名称',
type:'文件类型,png、jpg,doc,xls,ppt'
url:'文件路径,文件预览、下载的路径'
}
import Vue from 'vue'
import XRender from 'x-render'
import axios from 'axios'
function getFileItem (item) {
const downloadUrl = ''
return {
fileId: item.fileInfoId,
name: item.fileName,
type: item.fileExtension,
url: `${downloadUrl}?fileId=${item.fileId}`
}
}
Vue.use(XRender, {
viewPdf ({ fileId }) {
const pdfUrl = ''
return axios.get(pdfUrl,{fileId},
{
responseType: 'blob'
}
)
},
removeFile ({ fileId }) {
const removeFileUrl = ''
return axios.delete(`${removeFileUrl}${fileId}`)
},
uploadFile ({ file, value }) {
const addFileUrl = ''
const formData = new FormData()
formData.append('file', file) // 添加file表单数据
formData.append('fileName', file.name) // 添加file表单数据
return new Promise((resolve) => {
axios.post(addFileUrl, formData).then((item) => {
resolve(getFileItem(item))
})
})
},
listFile ({ value }) {
return new Promise((resolve) => {
const listFileUrl = ''
axios.get(`${listFileUrl}`).then((data) => {
const arr = []
for (const item of data) {
arr.push(getFileItem(item))
}
resolve(arr)
})
})
}
})
所有组件无论嵌套的层级,都可以进行使用插槽覆写,遵循以下规则:
XRender
prop
进行确定组件,如果组件的prop
为username
,则插槽名为:XRenderUsername
layoutName
进行确定组件,如果组件的layoutName
为userCard
,则插槽名为:XRenderUserCard
<x-render-form>
<div slot="XRenderUsername">username</div>
<div slot="XRenderUserCard">userCard</div>
</x-render-form>
*详细代码查看libs/components/XRenderExtendSlot
字段 | 类型 | 空 | 默认 | 注释 |
---|---|---|---|---|
formOptions | Array | 是 | [] | 表单配置数组 |
formData | Object | 是 | {} | 表单数据 |
formProps | Object | 是 | {} | 表单全局配置 |
方法 | 说明 | 类型 |
---|---|---|
disabledComponents | 禁用组件 禁用组件的字段prop 或者 layoutName | - |
enabledComponents | 启用组件 启用组件的字段prop 或者 layoutName | - |
showComponents | 显示组件 显示组件的字段prop 或者 layoutName | - |
hideComponents | 隐藏组件 隐藏组件的字段prop 或者 layoutName | - |
clearValidate | 清除验证 prop 字段 | - |
submitForm | 提交form | - |
resetForm | 重置form | - |
事件名称 | 说明 | 类型 |
---|---|---|
form-submit | 表单提交事件 | formData {Object} 表单数据 |
form-change | 表单数据变化事件 | formData {Object} 表单数据 |
custom-event | 自定义事件统一处理 | type {String} 组件类型,prop {String} 组件属性,value {[String Number Object boolean]} 组件值,attrs {Object} 组件属性集合,formItem{Object} 属性集合,association{Object} 关联属性集合 |
change | 表单组件发生变化事件 | type {String} 组件类型,prop {String} 组件属性,value {[String Number Object boolean]} 组件值,attrs {Object} 组件属性集合,formItem{Object} 属性集合 |
字段 | 类型 | 空 | 默认 | 注释 |
---|---|---|---|---|
columns | Array | 是 | [] | 列配置 |
tableProps | Object | 是 | {} | 表格属性 |
tableBtns | Array | 是 | [] | 按钮配置 |
dataSource | Array | 是 | [] | 数据 |
loading | Boolean | 是 | false | loading |
方法 | 说明 | 类型 |
---|---|---|
changePage | 更改分页信息 | current 当前页, pageSize 一页条数,pageSizeOptions 分页参数,total 总数 |
addSelectedKeys | 添加选中的数据 | selectedKeys[Array] 选中的数据 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。