上一篇次要具体介绍了BeeGridTable 的Filter性能,接下来好好盘盘他的Custom Define性能
一、涵盖的自定义性能点有如下
- 1、自定义表格头,有Template、Render2种形式
- 2、自定义列,有Template、Render2种形式
- 3、自定义筛选,有Template形式
二、举例应用
$\color{MediumTurquoise}{2.1 自定义表格头Template写法}$
1.示例
2.上述例子中表头的$\color{Darkorange}{刷新}$和$\color{Darkorange}{新增}$ 按钮这样摆放,基本上可节俭掉业务界面操作区所占用的空间,让界面更简洁、更直观。
$\color{DodgerBlue}{Vue -Template}$
<BeeGridTable
border
height="560"
:showSummary="false"
:columns="columns"
:data="data"
>
<template slot-scope="{ column }" slot="hop">
<Button type="primary" size="small" style="margin-right: 5px"
>刷新</Button
>
<Button type="warning" size="small" @click="addPatient(column)"
>新增</Button
>
</template>
...
</BeeGridTable>
$\color{DodgerBlue}{Vue -Js}$
data() {
return {
columns: [
...
{
title: "操作",
slot: "op",
headSlot: "hop",
key: "op",
width: 150,
},
],
data: [],
...
};
},
- 下面定义了$\color{Darkorange}{template}$代码片段,其槽名称为$\color{Darkorange}{hop}$,对应column列属性$\color{Darkorange}{headSlot}$的$\color{Darkorange}{hop}$
$\color{MediumTurquoise}{2.2 自定义表格头Render写法}$
1、成果同上,区别次要在$\color{Darkorange}{template}$和$\color{Darkorange}{column}$定义上
$\color{DodgerBlue}{Vue -Template}$
<BeeGridTable
border
height="560"
:showSummary="false"
:columns="columns"
:data="data"
>
...
</BeeGridTable>
$\color{DodgerBlue}{Vue -Js}$
data() {
return {
columns: [
...
{
title: "操作",
slot: "op",
renderHeader: (h, params) => {
return h("div", [
h(
"Button",
{
props: {
type: "primary",
size: "small",
},
style: {
marginRight: "5px",
},
on: {
click: () => {
console.log(params);
},
},
},
"刷新"
),
h(
"Button",
{
props: {
type: "warning",
size: "small",
},
style: {
marginRight: "5px",
},
on: {
click: () => {
this.addUser();
},
},
},
"新增"
),
]);
},
key: "op",
width: 150,
},
],
data: [],
...
};
},
2、相较之下,render写法真是不得不让人吐槽,一个简略的性能硬是写的像拉面一样长。集体认为在惯例业务渲染需要下用$\color{Darkorange}{template}$挺好,如果呈现须要用js管制渲染的时候,思考用$\color{Darkorange}{render}$吧!
$\color{MediumTurquoise}{2.3 自定义列Template写法}$
1、示例
2、上述例子中的性别、分组、察看状态、以及最初一列都是自定义列。从成果上看,有$\color{Darkorange}{Icon}$、$\color{Darkorange}{Select}$、$\color{Darkorange}{Button}$组件。
$\color{DodgerBlue}{Vue -Template}$
<BeeGridTable
border
height="560"
:showSummary="false"
:columns="columns"
:data="data"
>
<template slot-scope="{ column }" slot="hop">
<Button type="primary" size="small" style="margin-right: 5px"
>刷新</Button
>
<Button type="warning" size="small" @click="addPatient(column)"
>新增</Button
>
</template>
<template slot-scope="{ row, index }" slot="op">
<Button type="warning" size="small" style="margin-right: 5px"
>编辑</Button
>
<Button type="error" size="small" @click="handleDelete(row, index)"
>删除</Button
>
</template>
<template slot-scope="{ row }" slot="sex">
<i
style="font-size: x-large"
class="bee-sys-icon md-man"
v-if="row.sex === 0"
></i>
<i
style="font-size: x-large; color: red"
class="bee-sys-icon md-woman"
v-else
></i>
</template>
<template slot-scope="{ row }" slot="state">
<Select v-model="row.state" style="width: 100px">
<Option
v-for="item in stateList"
:value="item.value"
:key="item.value"
>{{ item.label }}</Option
>
</Select>
</template>
<template slot-scope="{ row }" slot="group">
<Select v-model="row.groupCode" style="width: 100px">
<Option
v-for="item in groupList"
:value="item.code"
:key="item.name"
>{{ item.name }}</Option
>
</Select>
</template>
</BeeGridTable>
$\color{DodgerBlue}{Vue -Js}$
data() {
return {
columns: [
...
{ title: "性别", slot: "sex", key: "sex", width: 150, resizable: true },
...
{
title: "分组",
slot: "group",
key: "groupName",
resizable: true,
},
{
title: "察看状态",
slot: "state",
key: "state",
width: 200,
},
{
title: "操作",
slot: "op", //自定义列
headSlot: "hop", //自定义列头
key: "op",
width: 150,
},
],
data: [],
...
};
},
3、下面定义了$\color{Darkorange}{template}$代码片段,其槽名称为$\color{Darkorange}{sex}$、$\color{Darkorange}{group}$、$\color{Darkorange}{op}$,对应column列属性$\color{Darkorange}{slot}$的$\color{Darkorange}{sex}$、$\color{Darkorange}{group}$、$\color{Darkorange}{op}$。并且BeeGridTable很贴心的给出了以后slot可能会用到的行数据$\color{SkyBlue}{…slot-scope=”{ row }”…}$
$\color{MediumTurquoise}{2.4 自定义列Render写法}$
1、成果同上,区别次要在$\color{Darkorange}{template}$和$\color{Darkorange}{column}$定义上
$\color{DodgerBlue}{Vue -Template}$
<BeeGridTable
border
height="560"
:showSummary="false"
:columns="columns"
:data="data"
>
...
<template slot-scope="{ column }" slot="hop">
<Button type="primary" size="small" style="margin-right: 5px"
>刷新</Button
>
<Button type="warning" size="small" @click="addPatient(column)"
>新增</Button
>
</template>
...
</BeeGridTable>
$\color{DodgerBlue}{Vue -Js}$
data() {
return {
columns: [
...
{
title: "操作", //headSlot优先
headSlot: "hop",
render: (h, params) => {
return h("div", [
h(
"Button",
{
props: {
type: "warning",
size: "small",
},
style: {
marginRight: "5px",
},
on: {
click: () => {
console.log("edit");
},
},
},
"编辑"
),
h(
"Button",
{
props: {
type: "error",
size: "small",
},
style: {
marginRight: "5px",
},
on: {
click: () => {
console.log("delete");
},
},
},
"删除"
),
]);
},
key: "op",
width: 150,
},
],
data: [],
...
};
},
2、同样,相较之下,render写法真是不得不让人吐槽,一个简略的性能硬是写的像拉面一样长。集体认为在惯例业务渲染需要下用$\color{Darkorange}{template}$挺好,如果呈现须要用js管制渲染的时候,思考用$\color{Darkorange}{render}$吧!
$\color{MediumTurquoise}{2.5 自定义筛选Template写法}$
1、例子
2、示例中能够看到,BeeGridTable自身蕴含有$\color{Darkorange}{蕴含}$、$\color{Darkorange}{不蕴含}$、$\color{Darkorange}{以…开始}$、$\color{Darkorange}{完结于}$、$\color{Darkorange}{重置}$5个根本搜寻选项。绝大多数时候,感觉很够用了。然而如果业务上的需要往往很简单,比方简略点的通过$\color{Darkorange}{CheckBox}$或者$\color{Darkorange}{Radio}$抉择过滤、或者通过$\color{Darkorange}{Select}$下拉框进行过滤。这时候,自定义筛选就派上大用场了。正因为思考到这些问题,$\color{OrangeRed}{BeeGridTable也就没有给出自定义筛选的Render性能}$。
3、实现代码如下,具体对于筛选的剖析,能够参考上篇文章
$\color{DodgerBlue}{Vue -Template}$
<BeeGridTable
border
height="560"
:showSummary="false"
:columns="columnsCustom"
:data="data"
>
<template slot-scope="{ column }" slot="hop">
<Button type="primary" size="small" style="margin-right: 5px"
>刷新</Button
>
<Button type="warning" size="small" @click="addPatient(column)"
>新增</Button
>
</template>
<template slot-scope="{ row, index }" slot="op">
<Button type="warning" size="small" style="margin-right: 5px"
>编辑</Button
>
<Button type="error" size="small" @click="handleDelete(row, index)"
>删除</Button
>
</template>
<template slot-scope="{ row }" slot="sex">
<i
style="font-size: x-large"
class="bee-sys-icon md-man"
v-if="row.sex === 0"
></i>
<i
style="font-size: x-large; color: red"
class="bee-sys-icon md-woman"
v-else
></i>
</template>
<template slot-scope="{ column, doSortAndFilter }" slot="fsex">
<RadioGroup
v-model="column.selectedSexCode"
@on-change="sexSelected(column, doSortAndFilter)"
>
<Radio label="-1">
<i class="bee-sys-icon md-people"></i>
<span>所有</span>
</Radio>
<Radio label="0">
<i class="bee-sys-icon md-man"></i>
<span>男</span>
</Radio>
<Radio label="1">
<i style="color: red" class="bee-sys-icon md-woman"></i>
<span>女</span>
</Radio>
</RadioGroup>
</template>
<template slot-scope="{ row }" slot="state">
<Select v-model="row.state" style="width: 100px">
<Option
v-for="item in stateList"
:value="item.value"
:key="item.value"
>{{ item.label }}</Option
>
</Select>
</template>
<template slot-scope="{ row }" slot="group">
<Select v-model="row.groupCode" style="width: 100px">
<Option
v-for="item in groupList"
:value="item.code"
:key="item.name"
>{{ item.name }}</Option
>
</Select>
</template>
<template slot-scope="{ column, doSortAndFilter }" slot="hgroup">
<Select
transfer
clearable
v-model="column.selectedGroup"
@on-change="filterGroupSelectChange(column, doSortAndFilter)"
style="width: 100px"
>
<Option
v-for="item in groupList"
:value="item.code"
:key="item.name"
>{{ item.name }}</Option
>
</Select>
</template>
</BeeGridTable>
$\color{DodgerBlue}{Vue -Js}$
columnsCustom: [
{
title: "编号",
key: "code",
width: 150,
resizable: true,
},
{
title: "姓名",
key: "name",
width: 150,
},
{
title: "性别",
slot: "sex",
key: "sex",
width: 100,
selectedSexCode: -1,
headFilterSlot: "fsex",
},
{ title: "年龄", key: "age", width: 150, resizable: true },
{
title: "分组",
slot: "group",
headFilterSlot: "hgroup",
key: "groupName",
selectedGroup: null,
filterMethod(column, field, value, row) {
if (value === undefined || value === null) {
return true;
}
return value === row.groupCode;
},
resizable: true,
},
{
title: "察看状态",
slot: "state",
key: "state",
width: 200,
},
{
title: "操作",
slot: "op",
hideFilter: true,
key: "op",
width: 150,
},
],
...
methods: {
sexSelected(column, doSortAndFilter) {
column.filterValue =
column.selectedSexCode === "-1" ? null : column.selectedSexCode;
doSortAndFilter();
},
filterGroupSelectChange(column, doSortAndFilter) {
column.filterValue = column.selectedGroup;
doSortAndFilter();
},
},
三、最初
欢送大家留言探讨或者进群探讨,独特学习提高!如果你喜爱本文章请关注下方公众号二维码,会更新更多相干话题哦!
发表回复