这是我参与更文挑战的第6天,活动详情查看: 更文挑战
反正是vue新手,也就无所顾忌了,大家且看且评,欢迎疯狂输出!
1. 多语言的列表页
先看看一个列表页有哪些元素吧?
菜单tab的公共元素就忽略了,这里仅仅聚焦内容。
这里面对于前端的书写来说,一般新手应该问题都不大,麻烦点在于
- 搜索框定制
- 列表头定制
- 新增form单定制等
2.后端丰富的信息
由于大部分后端在设计数据库时,基本涵盖了很多信息,例如,列头、名称、类型、词典等,因此前后端结合起来,可以大大减轻前端的工作量。
这是取自数据库的信息,可以很容易的取到很多信息,当然还有一种方式是,从swagger的api文档信息里获取字段等信息,应该是同样的道理。
最笨的就是Ctrl+C、 Ctrl+V了,哎,手酸~~~~
3.配置驱动
既然我们可以获取到这么多的元数据信息,那么有必要提取出纯粹的元数据,然后按照数据驱动列表的绘制。 由于项目比较紧,我这里仅仅是粗略的提取了一下,大家将近看看。 config.js文件内容如下,我们直接利用工具生成js文件。
export default {
model:'sysDept',
name:'',
key:'id',
columns:[
{
field:'id',
name:'',
width:0,
type: 'text',
filter: '',
},
{
field:'createby',
name:'创建人',
width:0,
type: 'text',
filter: '',
},
],
forms:[
{
field:'id',
name:'',
width:0,
type: 'text',
filter: '',
},
{
field:'createby',
name:'创建人',
width:0,
type: 'text',
filter: '',
},
],
}
通过columns绘制列表,通过forms绘制表单。
资源化文件同样可以自动产生。
sysDept:{
id:'',
createby:'创建人',
createtime:'创建时间/注册时间',
modifyby:'最后更新人',
modifytime:'最后更新时间',
},
// SysDept 英文汉化
sysDept:{
id:'Id',
createby:'Createby',
createtime:'Createtime',
modifyby:'Modifyby',
modifytime:'Modifytime',
},
4.绘制列表
这里采用elementui的el-table进行绘制列表,因为已经拥有数据了,因此绘制很轻松。
这里对 过滤器做了处理,利用定制的 myEval
函数进行绘制。
<el-table :data="list" v-loading="listLoading" element-loading-text="Loading" border fit highlight-current-row>
<el-table-column
type="index"
align="center"
width="50"
label="#"
:index="table_index"
>
</el-table-column>
<el-table-column v-for="(item,index) in columns" :key="index"
:label="$t(model + '.' + item.field)"
:width="item.width==0?null:item.width">
<template slot-scope="scope">
<template v-if="item.filter.length==0">
{{scope.row[item.field]}}
</template>
<template v-else>
{{myEval(item.filter)(scope.row[item.field])}}
</template>
</template>
</el-table-column>
<el-table-column label="操作" width="360" align="center">
<template slot-scope="scope">
<el-button type="primary" size="mini" icon="el-icon-edit" @click.native="edit(scope.row)" v-permission="['/mgr/edit']">
{{$t('button.edit') }}
</el-button>
<el-button type="danger" size="mini" icon="el-icon-delete" @click.native="remove(scope.row)" v-permission="['/mgr/delete']">
{{$t('button.delete') }}
</el-button>
</template>
</el-table-column>
</el-table>
表单的绘制类似,当然我们需要对 tpye
进行扩展,可以支持非常多的表单组件。
5.小结
我是新手,希望能给你提供一个思路。仅此而已! 搜索框的后续有空再写文章,记得关注我哦。