上一篇次要具体介绍了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: [],      ...    };  },      
  1. 下面定义了$\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();    },  },      

三、最初
欢送大家留言探讨或者进群探讨,独特学习提高!如果你喜爱本文章请关注下方公众号二维码,会更新更多相干话题哦!