通用元配置文件

完整例子:





 














// /src/shared/meta/company/Department.js
module.exports = {
    entityName: 'department',    
    columnsDef: [{
            prop: 'name',
            label: '部门名称',
            width: 240,
            filter: true,
            input: { type: 'text', rule: 'required' }
        },
        {
            prop: 'memo',
            label: '备注',
            width: 150,
            input: 'text'
        }
    ]
}

格式

元配置文件其就是一个js文件,可导出的变量有:

变量名说明类型可选默认值可选值
pageAdminComponent组件名string可选table-admintable-admin
tree-admin
自定义组件名
entityName实体名(MongoDB集合名)string必填--
columnsDef列定义array[object]必填--
pageSize每页记录数int可选20-
showAdd显示新增按钮boolean可选true-
editable是否可编辑(双击)boolean可选true-
showRemove显示删除按钮boolean可选true-
showPagination显示分页栏boolean可选true-
showIndexCol显示索引列boolean可选true-
showFilter显示查询区boolean可选true-
showSummary显示表尾合计行boolean可选false-
loadDatas预加载数据object可选-
data存放loadDatas加载的数据object可选-{}
filterConditions内置数据过滤条件object{k:v}可选--
methods.filterCheck过滤条件检查(提交前)Function(filterConditions)/Object可选--
sorted默认排序object{k:v}可选--
hook前端hook函数object{k:f}可选--

columnsDef

列定义:用来定义数据表格的显示,以及新增,编辑,查询等选项

列定义:是个数组,每个成员是个对象,对象格式为

变量名说明类型可选默认值
prop属性名string必须-
label标签string必须-
hiddden是否隐藏boolean可选false
width列宽int可选-
filter是否可查询boolean可选false
index创建索引Boolean/object可选false
add可新增boolean可选true
edit可编辑boolean可选true
input输入方式string 或 object可选-
autoRef自动关联boolean可选true
formatter内容格式化Function(row, column, cellValue, index)可选-
download是否可下载(当input.type=='file'时用到)boolean可选false
serverHook后端元配置参数object可选-

serverHook

  • 如果后端元配置文件里面有只有简单函数,不会导入后端的机密配件文件,可以放入此处
  • 如果配置了文件形式的后代元配置文件,优先启用文件的,此处配置会无效

filter

定义该字段是否可在界面查询

  • filter==true,则在页面查询条件区会显示一个文本输入框
  • 如果是要显示下拉菜单,则:filter为{type:'select',optins:[{label:'启用',value:true},{label:'禁用',value:false}]}
  • 如果下拉菜单的内容来自后台,filter为{type:'select',optins:[],ajax:{详细说明}}

index

在MongoDB下,将在系统每次启动时,自动创建该字段索引,不会重复创建

  • 当字段定义了filter,最好也定一下index,否则数据量一大,查询将会很慢
  • index ==true ,相当于{sortOrder:1}的简写,定义升序索引
  • index=={options:{unique:true}},指明创建降序且唯一索引
  • index=={sortOrder:-1,options:{unique:true}},指明创建降序且唯一索引

WARNING

暂时不支持创建多个字段的组合索引

formatter

格式化单元格的内容

例子:

    formatEnable: function (row, column,cellValue) {
        return cellValue? "启用" : "禁用"
    }

input

当input为'text',相当于{type:'text'}的简写

由于内置的UI组件采用的是Element-UI,所以很多具体配置方式将连接到Element-UI文档

input如果是对象,通用变量如下表:

变量名说明类型可选可选值
type输入组件string必选详解
default默认值string可选-
placeholder输入框占位文本string可选-
rule校验规则string或object必选
onChange数据改变Function(vue,newValue,oldValue)可选-
其他根据type的不同值---

input.rule

rule 为string ,只有值:required,表示必选

rule 为 object

input.type可选值

TIP

input的所有类型都有例子,在:菜单:[样例-输入大全] ,对应配置文件:config/meta/example/Input.js

已经支持的Element-UI输入组件

可选值说明
text单行文本输入框
textarea多行文本输入框
radioGroup单选框组
select下拉单选框
checkbox多选框
checkboxGroup多选框组
file文件上传
date日期选择
time时间选择
cascader级联选择器
tree树选择器

尚不支持的Element-UI组件:

  • InputNumber 计数器
  • Switch 开关
  • Slider 滑块
  • Rate 评分
  • ColorPicker 颜色选择器
  • Transfer 穿梭框

input.type=='select'

当input.type=='select' 还有下面额外的变量配置

变量名说明类型可选可选值
multiple是否多选boolean可选false
filterable是否可搜索boolean可选false
allowCreate是否允许用户创建新条目,需配合 filterable 使用boolean可选false
clearable单选时是否可以清空选项boolean可选false
options下拉选项array[{label:'选项名',value:'选项值'}]可选-
ajaxoptions动态填充object 详解可选-

input.type=='radioGroup'

变量名说明类型可选
options选项array[{label:'选项名',value:'选项值'}]和ajax选其一
ajaxoptions动态填充object 详解和options选其一

input.type=='date'

变量名说明类型可选可选值默认值
subType类型string可选year/month/date/dates/ week/datetime/datetimerange/daterange 详解date
pickerOptions快捷选项object 详解可选
rangeSeparator选择范围时的分隔符string可选-'-'
startPlaceholder范围选择时开始日期的占位内容string可选
endPlaceholder范围选择时结束日期的占位内容string可选
format显示在输入框中的格式string可选-yyyy-MM-dd
valueFormat绑定值的格式,不指定则绑定值为 Date 对象string可选见:日期格式-
defaultValue默认显示的时间Date可选-yyyy-MM-dd
unlinkPanels在范围选择器里取消两个日期面板之间的联动boolean可选-false

input.type=='time'

变量名说明类型可选可选值默认值
isRange是否时间范围选择boolean可选-false
pickerOptions快捷选项object 详解可选
rangeSeparator选择范围时的分隔符string可选-'-'
startPlaceholder范围选择时开始日期的占位内容string可选
endPlaceholder范围选择时结束日期的占位内容string可选
format显示在输入框中的格式string可选-yyyy-MM-dd
valueFormat绑定值的格式,不指定则绑定值为 Date 对象string可选见:日期格式-
defaultValue默认显示的时间Date可选-yyyy-MM-dd

input.type=='file'

TIP

上传文件组件没有用到Element-ui的Upload组件,而是重新编写的、使用H5的FormData的上传组件,FormData的好处是:异步上传、可和其他数据一并提交

  • 要使用上传组件,首先要在项目后端配置文件里设置下数据目录dataDir
  • 如果列定义里:定了了:download=true,则在表格会显示srcName链接,单击可下载文件
变量名说明类型可选可选值默认值
savePath文件上传后保存目录(相对dataDir)string必填--
fileName生成保存文件名的函数Funcion(oldName)必选--
ext文件扩展名要求string可选--

上传的文件会保存在: dataDir/savePath/fileName生成的文件名
对应字段的数据格式是: {path:'',md5:'',size:2234,name:'',srcName:''}

  • path 文件保存路径(包括文件名),相对dataDir
  • md5 文件md5值
  • size 文件大小,单位:字节
  • name 文件名
  • srcName 原文件名(上传时的文件名)

input.type=='cascader'

变量名说明类型可选默认值
options可选项数据源请看object必填-
props配置选项请看object必填-

input.type=='tree'

变量名说明类型可选默认值
data展示数据请看object必填-
props配置选项请看object必填-
renderContent节点定制渲染请看Function可选-
nodeKey唯一标识的属性请看String必须-
checkChange选中状态发生变化时的回调请看Function必须-
expandAll是否默认展开所有节点请看boolean可选-

input.ajax

通过input.ajax或filter.ajax获取的数据会设置到input.options或filer.options

变量名说明类型可选
path数据路径(配置文件的路径)string必选
label指定option的label为对象的某个属性值string必选
value指定option的value为对象的某个属性值string必选
params过滤参数object可选
projects过滤字段object可选

例子:

        {
            prop: 'select_ajax',
            label: '选择框(数据库)',
            width: 150,
            input:{type:'select',ajax:{path:'/company/Department',label:'name',value:'_id',projects:{_id:1,name:1}}]}
        }

上面的写法,在创建组件时,会自动从:/company/Department 路径的配置文件对应的数据库表里拉取数据,假设拿到数据:

[
 {_id:'1',name:'人力资源部'}, 
 {_id:'2',name:'财务部'},
 {_id:'3',name:'市场部'}
]

会转成如下数组

[
 {label:'人力资源部',value:'1'},
 {label:'财务部',value:'2'},
 {label:'市场部',value:'3'}
]

并设置到input.options

hook

前端hook方法

函数名说明类型返回
submitCheck在新增或修改的提交数据前Function(formData,vue) vue为编辑组件的vue对象formData
onShowAdd在打开新增窗口时Function(formData,vue)
onShowEdit在打开编辑窗口时Function(formData,vue) vue为编辑组件的vue对象
queryCheck在提交查询数据前Function(query,vue)query

例子:我们要把提交的数据的字段provinces改成数组

let hook={
 submitCheck:function(formData,vue) {
  formdata.provinces=formdata.provinces.split(",")
  return formdata
}

loadDatas && data

loadDatas用于需要从后端预先加载的数据放入data,一般用于格式化时需要把_id转为名称


格式:

属性名说明类型返回
name放入data的属性名stringformData
ajax从后端加载数据,同input.ajaxobject

例如:员工 所属的部门id值转为部门名称





















































 












//  /src/shared/company/Employee.js

let methods = {
    
    formatSex: function (row, column,cellValue) {
        return cellValue? "男" : "女"
    },
    formatDepartment:function(row, column,cellValue) {
        if(data.DepartmentList) {
          for (let item of data.DepartmentList) {
            if (cellValue == item._id) return item.name;
          }
        }

    }
};

let loadDatas = [{
    name: 'DepartmentList',
    ajax: {
        path: '/company/Department',
        projects:{_id:1,name:1}
    }
}]

let data = {}


module.exports = {
    entityName: 'employee',   
    loadDatas,
    data:data,
    columnsDef: [{
            prop: 'name',
            label: '姓名',
            width: 240,
            filter: true,
            input: { type: 'text', rule: 'required' },
            index:true
        },
        {
            prop: 'sex',
            label: '性别',
            width: 150,
            input:{type:'radioGroup',options:[{label:'男',value:true},{label:'女',value:false}]},
            formatter:methods.formatSex
        },   
        {
            prop: 'department',
            label: '部门',
            width: 150,
            input:{type:'select',ajax:{path:'/company/Department',label:'name',value:'_id',projects:{_id:1,name:1}}},
            formatter:methods.formatDepartment,
            autoRef:false
        },       
        {
            prop: 'memo',
            label: '备注',
            width: 150,
            input: 'text'
        }
    ]
}