当前位置: 首页 > news >正文

一个外国人建设的中国文字网站大邑网站建设

一个外国人建设的中国文字网站,大邑网站建设,网站优化软件排名器,ocin wordpress主题一、vxe-table的全局筛选器filters的实现 官网例子#xff1a;https://vxetable.cn/#/table/renderer/filter 进入之后#xff1a;我们可以参照例子自行实现#xff0c;也可以下载它的源码#xff0c;进行调整 下载好后并解压#xff0c;用vscode将解压后的文件打开。全局…一、vxe-table的全局筛选器filters的实现 官网例子https://vxetable.cn/#/table/renderer/filter 进入之后我们可以参照例子自行实现也可以下载它的源码进行调整 下载好后并解压用vscode将解压后的文件打开。全局检索FilterInput你工作中用的vxe-table多少版本的那就进多少版本的目录 点击进入按照这个路劲找到对应文件夹 将filter相关的vue复制到自己的项目中components文件夹下 将filter.tsx 到你的项目中去常用的FilterInput和FilterContent组件将其他的FilterExtend 和FilterComplex 相关的可以先注释掉。 打开filter.ts 这样就可以使用了使用方式按照官网的例子放到columns里即可filters的结构不允许改变他与filterRendes的组件是一一对应的 这里提供v4的相关源码代码 FilterInput.vue templatediv classmy-filter-inputvxe-input typetext v-modeldemo1.option.data placeholder支持回车筛选 keyupkeyupEvent inputchangeOptionEvent/vxe-input/div /templatescript langts import { defineComponent, PropType, reactive } from vue import { VxeInputEvents, VxeGlobalRendererHandles } from vxe-tableexport default defineComponent({name: FilterInput,props: {params: Object as PropTypeVxeGlobalRendererHandles.RenderFilterParams},setup (props) {const demo1 reactive({option: null as any})const load () {const { params } propsif (params) {const { column } paramsconst option column.filters[0]demo1.option option}}const changeOptionEvent () {const { params } propsconst { option } demo1if (params option) {const { $panel } paramsconst checked !!option.data$panel.changeOption(null, checked, option)}}const keyupEvent: VxeInputEvents.Keyup ({ $event }) {const { params } propsif (params) {const { $panel } paramsif ($event.keyCode 13) {$panel.confirmFilter($event)}}}load()return {demo1,changeOptionEvent,keyupEvent}} }) /scriptstyle scoped .my-filter-input {padding: 10px; } /style FilterContent.vue templatediv classmy-filter-contentdiv classmy-fc-searchdiv classmy-fc-search-topvxe-input v-modeldemo1.option.data.sVal placeholder搜索/vxe-input/divdiv classmy-fc-search-contenttemplate v-ifdemo1.valList.lengthul classmy-fc-search-list my-fc-search-list-headli classmy-fc-search-itemvxe-checkbox v-modeldemo1.isAll changechangeAllEvent全选/vxe-checkbox/li/ulul classmy-fc-search-list my-fc-search-list-bodyli classmy-fc-search-item v-for(item, sIndex) in demo1.valList :keysIndexvxe-checkbox v-modelitem.checked{{ item.value }}/vxe-checkbox/li/ul/templatetemplate v-elsediv classmy-fc-search-empty无匹配项/div/template/div/divdiv classmy-fc-footervxe-button statusprimary clickconfirmFilterEvent确认/vxe-buttonvxe-button clickresetFilterEvent重置/vxe-button/div/div /templatescript langts import { defineComponent, PropType, reactive } from vue import { VxeGlobalRendererHandles } from vxe-table import XEUtils from xe-utilsexport default defineComponent({name: FilterContent,props: {params: Object as PropTypeVxeGlobalRendererHandles.RenderFilterParams},setup (props) {interface ColValItem {checked: boolean;value: string;}const demo1 reactive({isAll: false,option: null as any,colValList: [] as ColValItem[],valList: [] as ColValItem[]})const load () {const { params } propsif (params) {const { $table, column } paramsconst { fullData } $table.getTableData()const option column.filters[0]const { vals } option.dataconst colValList Object.keys(XEUtils.groupBy(fullData, column.field)).map((val) {return {checked: vals.includes(val),value: val} as ColValItem})demo1.option optiondemo1.colValList colValListdemo1.valList colValList}}const searchEvent () {const { option, colValList } demo1if (option) {demo1.valList option.data.sVal ? colValList.filter((item) item.value.indexOf(option.data.sVal) -1) : colValList}}const changeAllEvent () {const { isAll } demo1demo1.valList.forEach((item) {item.checked isAll})}const confirmFilterEvent () {const { params } propsconst { option, valList } demo1if (params option) {const { data } optionconst { $panel } paramsdata.vals valList.filter((item) item.checked).map((item) item.value)$panel.changeOption(null, true, option)$panel.confirmFilter()}}const resetFilterEvent () {const { params } propsif (params) {const { $panel } params$panel.resetFilter()}}load()return {demo1,searchEvent,changeAllEvent,confirmFilterEvent,resetFilterEvent}} }) /scriptstyle .my-filter-content {padding: 10px;user-select: none; } .my-filter-content .my-fc-search .my-fc-search-top {position: relative;padding: 5px 0; } .my-filter-content .my-fc-search .my-fc-search-top input {border: 1px solid #ABABAB;padding: 0 20px 0 2px;width: 200px;height: 22px;line-height: 22px; } .my-filter-content .my-fc-search .my-fc-search-content {padding: 2px 10px; } .my-filter-content .my-fc-search-empty {text-align: center;padding: 20px 0; } .my-filter-content .my-fc-search-list {margin: 0;padding: 0;list-style: none; } .my-filter-content .my-fc-search-list-body {overflow: auto;height: 120px; } .my-filter-content .my-fc-search-list .my-fc-search-item {padding: 2px 0;display: block; } .my-filter-content .my-fc-footer {text-align: right;padding-top: 10px; } .my-filter-content .my-fc-footer button {padding: 0 15px;margin-left: 15px; } /style FilterExtend.vue templatediv classmy-filter-exceldiv classmy-fe-topul classmy-fe-menu-groupli classmy-fe-menu-linkspan升序/span/lili classmy-fe-menu-linkspan倒序/span/li/ulul classmy-fe-menu-groupli classmy-fe-menu-link clickresetFilterEventspan清除筛选/span/lili classmy-fe-menu-linki classvxe-icon-question-circle-fill my-fe-menu-link-left-icon/ispan筛选条件/spani classvxe-icon-question-circle-fill my-fe-menu-link-right-icon/idiv classmy-fe-menu-child-listul classmy-fe-child-menu-group-list v-for(cList, gIndex) in demo1.caseGroups :keygIndexli v-for(cItem, cIndex) in cList :keycIndex classmy-fe-child-menu-item clickchildMenuClickEvent(cItem)span{{ cItem.label }}/span/li/ul/div/li/ul/divdiv classmy-fe-searchdiv classmy-fe-search-topinput v-modeldemo1.option.data.sVal placeholder搜索/i classvxe-icon-question-circle-fill my-fe-search-icon/i/divul classmy-fe-search-listli classmy-fe-search-item clicksAllEventi classvxe-icon-question-circle-fill my-fe-search-item-icon/ispan(全选)/span/lili classmy-fe-search-item v-for(val, sIndex) in searchList :keysIndex clicksItemEvent(val)i :class[demo1.option.data.vals.indexOf(val) -1 ? vxe-icon-question-circle-fill my-fe-search-item-icon : vxe-icon-question-circle-fill my-fe-search-item-icon]/ispan{{ val }}/span/li/ul/divdiv classmy-fe-footervxe-button statusprimary clickconfirmFilterEvent确认/vxe-buttonvxe-button clickresetFilterEvent重置/vxe-button/div/div /templatescript langts import { defineComponent, PropType, reactive, computed } from vue import { VXETable, VxeGlobalRendererHandles } from vxe-table import XEUtils from xe-utilsexport default defineComponent({name: FilterExtend,props: {params: Object as PropTypeVxeGlobalRendererHandles.RenderFilterParams},setup (props) {interface CaseItem {label: string;value: string;}const demo1 reactive({option: null as any,colValList: [] as string[],caseGroups: [[{ value: equal, label: 等于 },{ value: ne, label: 不等于 }],[{ value: greater, label: 大于 },{ value: ge, label: 大于或等于 },{ value: less, label: 小于 },{ value: le, label: 小于或等于 }]] as CaseItem[][]})const searchList computed(() {const { option, colValList } demo1if (option) {return option.data.sVal ? colValList.filter(val val.indexOf(option.data.sVal) -1) : colValList}return []})const load () {const { params } propsif (params) {const { $table, column } paramsconst { fullData } $table.getTableData()const option column.filters[0]const colValList Object.keys(XEUtils.groupBy(fullData, column.field))demo1.option optiondemo1.colValList colValList}}const sAllEvent () {const { option } demo1if (option) {const { data } optionif (data.vals.length 0) {data.vals []} else {data.vals demo1.colValList}}}const sItemEvent (val: string) {const { option } demo1if (option) {const { data } optionconst vIndex data.vals.indexOf(val)if (vIndex -1) {data.vals.push(val)} else {data.vals.splice(vIndex, 1)}}}const confirmFilterEvent () {const { params } propsconst { option } demo1if (params option) {const { data } optionconst { $panel } paramsdata.f1 data.f2 $panel.changeOption(null, true, option)$panel.confirmFilter()}}const resetFilterEvent () {const { params } propsif (params) {const { $panel } params$panel.resetFilter()}}const childMenuClickEvent (cItem: CaseItem) {VXETable.modal.alert({ content: cItem.label })}load()return {demo1,searchList,sAllEvent,sItemEvent,confirmFilterEvent,resetFilterEvent,childMenuClickEvent}} }) /scriptstyle .my-filter-excel {user-select: none; } .my-filter-excel .my-fe-top .my-fe-menu-group {position: relative;margin: 0;padding: 0; } .my-filter-excel .my-fe-top .my-fe-menu-group:after {content: ;position: absolute;width: 190px;right: 0;bottom: 0;border-bottom: 1px solid #E2E4E7; } .my-filter-excel .my-fe-top .my-fe-menu-group .my-fe-menu-link {position: relative;padding: 4px 20px 4px 30px;cursor: pointer; } .my-filter-excel .my-fe-top .my-fe-menu-group .my-fe-menu-link:hover {background-color: #C5C5C5; } .my-filter-excel .my-fe-top .my-fe-menu-group .my-fe-menu-link-left-icon {position: absolute;left: 10px;top: 6px; } .my-filter-excel .my-fe-top .my-fe-menu-group .my-fe-menu-link-right-icon {position: absolute;right: 10px;top: 6px; } .my-filter-excel .my-fe-top .my-fe-menu-group .my-fe-menu-link:hover .my-fe-menu-child-list {display: block; } .my-filter-excel .my-fe-top .my-fe-menu-group .my-fe-menu-link .my-fe-menu-child-list {display: none;position: absolute;top: 0;right: -120px;width: 120px;background-color: #fff;border: 1px solid #DADCE0;box-shadow: 3px 3px 4px -2px rgba(0, 0, 0, 0.6); } .my-filter-excel .my-fe-top .my-fe-menu-group .my-fe-menu-link .my-fe-child-menu-group-list {position: relative;padding: 0; } .my-filter-excel .my-fe-top .my-fe-menu-group .my-fe-menu-link .my-fe-child-menu-group-list:after {content: ;position: absolute;width: 90px;right: 0;bottom: 0;border-bottom: 1px solid #E2E4E7; } .my-filter-excel .my-fe-top .my-fe-menu-group .my-fe-menu-link .my-fe-child-menu-group-list .my-fe-child-menu-item {position: relative;padding: 4px 20px 4px 30px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap; } .my-filter-excel .my-fe-top .my-fe-menu-group .my-fe-menu-link .my-fe-child-menu-group-list .my-fe-child-menu-item:hover {background-color: #C5C5C5; } .my-filter-excel .my-fe-search {padding: 0 10px 0 30px; } .my-filter-excel .my-fe-search .my-fe-search-top {position: relative;padding: 5px 0; } .my-filter-excel .my-fe-search .my-fe-search-top input {border: 1px solid #ABABAB;padding: 0 20px 0 2px;width: 200px;height: 22px;line-height: 22px; } .my-filter-excel .my-fe-search .my-fe-search-top .my-fe-search-icon {position: absolute;right: 5px;top: 10px; } .my-filter-excel .my-fe-search .my-fe-search-list {margin: 0;border: 1px solid #E2E4E7;padding: 2px 10px;overflow: auto;height: 140px; } .my-filter-excel .my-fe-search .my-fe-search-list .my-fe-search-item {cursor: pointer;padding: 2px 0; } .my-filter-excel .my-fe-search .my-fe-search-list .my-fe-search-item .my-fe-search-item-icon {width: 16px; } .my-filter-excel .my-fe-footer {text-align: right;padding: 10px 10px 10px 0; } .my-fe-popup .my-fe-popup-filter {padding-left: 30px; } .my-fe-popup .my-fe-popup-filter .my-fe-popup-filter-select {width: 120px; } .my-fe-popup .my-fe-popup-filter .my-fe-popup-filter-input {margin-left: 15px;width: 380px; } .my-fe-popup .my-fe-popup-describe {padding: 20px 0 10px 0; } .my-fe-popup .my-fe-popup-concat {padding-left: 50px; } .my-fe-popup .my-fe-popup-footer {text-align: right; } /style FilterComplex.vue templatediv classmy-filter-complexdiv classmy-fc-typevxe-radio v-modeldemo1.option.data.type namefType labelhas包含/vxe-radiovxe-radio v-modeldemo1.option.data.type namefType labeleq等于/vxe-radio/divdiv classmy-fc-namevxe-input v-modeldemo1.option.data.name typetext placeholder请输入名称 inputchangeOptionEvent()/vxe-input/divdiv classmy-fc-footervxe-button statusprimary clickconfirmEvent确认/vxe-buttonvxe-button clickresetEvent重置/vxe-button/div/div /templatescript langts import { defineComponent, PropType, reactive } from vue import { VxeGlobalRendererHandles } from vxe-tableexport default defineComponent({name: FilterComplex,props: {params: Object as PropTypeVxeGlobalRendererHandles.RenderFilterParams},setup (props) {const demo1 reactive({option: null as any})const load () {const { params } propsif (params) {const { column } paramsconst option column.filters[0]demo1.option option}}const changeOptionEvent () {const { params } propsconst { option } demo1if (params option) {const { $panel } paramsconst checked !!option.data.name$panel.changeOption(null, checked, option)}}const confirmEvent () {const { params } propsif (params) {const { $panel } params$panel.confirmFilter()}}const resetEvent () {const { params } propsif (params) {const { $panel } params$panel.resetFilter()}}load()return {demo1,changeOptionEvent,confirmEvent,resetEvent}} }) /scriptstyle scoped .my-filter-complex {width: 260px;padding: 5px 15px 10px 15px; } .my-filter-complex .my-fc-type {padding: 8px 0; } .my-filter-complex .my-fc-footer {text-align: center; } /style filter.tsx import { VXETable } from vxe-table import FilterInput from ./components/FilterInput.vue import FilterContent from ./components/FilterContent.vue import FilterComplex from ./components/FilterComplex.vue import FilterExtend from ./components/FilterExtend.vue// 创建一个简单的输入框筛选 VXETable.renderer.add(FilterInput, {// 筛选模板renderFilter (renderOpts, params) {return FilterInput params{ params }/FilterInput},// 重置数据方法filterResetMethod (params) {const { options } paramsoptions.forEach((option) {option.data })},// 重置筛选复原方法当未点击确认时该选项将被恢复为默认值filterRecoverMethod ({ option }) {option.data },// 筛选方法filterMethod (params) {const { option, row, column } paramsconst { data } optionconst cellValue row[column.field]if (cellValue) {return cellValue.indexOf(data) -1}return false} })// 创建一个条件的渲染器 VXETable.renderer.add(FilterComplex, {// 不显示底部按钮使用自定义的按钮showFilterFooter: false,// 筛选模板renderFilter (renderOpts, params) {return FilterComplex params{ params }/FilterComplex},// 重置数据方法filterResetMethod (params) {const { options } paramsoptions.forEach((option) {option.data { type: has, name: }})},// 筛选数据方法filterMethod (params) {const { option, row, column } paramsconst cellValue row[column.field]const { name } option.dataif (cellValue) {return cellValue.indexOf(name) -1}return false} })// 创建一个支持列内容的筛选 VXETable.renderer.add(FilterContent, {// 不显示底部按钮使用自定义的按钮showFilterFooter: false,// 筛选模板renderFilter (renderOpts, params) {return FilterContent params{ params }/FilterContent},// 重置数据方法filterResetMethod (params) {const { options } paramsoptions.forEach((option) {option.data { vals: [], sVal: }})},// 筛选数据方法filterMethod (params) {const { option, row, column } paramsconst { vals } option.dataconst cellValue row[column.field]return vals.includes(cellValue)} })// 创建一个复杂的筛选器 VXETable.renderer.add(FilterExtend, {// 不显示底部按钮使用自定义的按钮showFilterFooter: false,// 筛选模板renderFilter (renderOpts, params) {return FilterExtend params{ params }/FilterExtend},// 重置数据方法filterResetMethod (params) {const { options } paramsoptions.forEach((option) {option.data { vals: [], sVal: , fMenu: , f1Type: , f1Val: , fMode: and, f2Type: , f2Val: }})},// 筛选数据方法filterMethod (params) {const { option, row, column } paramsconst cellValue row[column.field]const { vals, f1Type, f1Val } option.dataif (cellValue) {if (f1Type) {return cellValue.indexOf(f1Val) -1} else if (vals.length) {// 通过指定值筛选return vals.includes(cellValue)}}return false} }) 二、自行优化filters实现支持字典的转换 通过上面的方式已经实现了过滤器但是多次使用衍生出一个问题就是如果我的列是个字典列并且字典值的转换用的是columns内的solt如FilterContent组件它将会渲染的时字典的value列表并非用户看到的中文列表用户怎么知道你过滤器的看到的123和你的数据时对应的或者时FilterInput 你输入的必须时字典code不能是中文否则将无法筛选出数据。 解决问题1 在数据库查询数据时根据该列关联字典表将中文给转换过来 解决问题2前端查询数据后在给表格赋值时将字典数据转换回来这样有些麻烦 解决问题3优化筛选组件使其支持字典的筛选。由于项目中只用到了FilterInput和FilterContent这里只提供这两个组件的优化。 1. 先说下在哪里做了调整 filtes的结构上做了些调整data里都增加了字典的数据 filterContent 参数移除sval参数同样在filterContent 组件内input筛选也将被移除只保留多选列表进行筛选 FilterInput “FilterContent.vue”,它与FilterInput不一样需要面板打开时就显示过滤列表 2. 调整后的代码 FilterContent.vue templatediv classmy-filter-contentdiv classmy-fc-searchdiv classmy-fc-search-top!-- vxe-inputv-modeldemo1.option.data.sValplaceholder搜索/vxe-input --/divdiv classmy-fc-search-contenttemplate v-ifdemo1.valList.lengthul classmy-fc-search-list my-fc-search-list-headli classmy-fc-search-itemvxe-checkbox v-modeldemo1.isAll changechangeAllEvent全选/vxe-checkbox/li/ulul classmy-fc-search-list my-fc-search-list-bodyliv-for(item, sIndex) in demo1.valList:keysIndexclassmy-fc-search-itemvxe-checkbox v-modelitem.checked{{item.label}}/vxe-checkbox/li/ul/templatetemplate v-elsediv classmy-fc-search-empty无匹配项/div/template/div/divdiv classmy-fc-footervxe-button statusprimary clickconfirmFilterEvent确认/vxe-buttonvxe-button clickresetFilterEvent重置/vxe-button/div/div /templatescript langtsimport { defineComponent, PropType, reactive } from vue;import { VxeGlobalRendererHandles } from vxe-table;import XEUtils from xe-utils;export default defineComponent({name: FilterContent,props: {params: Object as PropTypeVxeGlobalRendererHandles.RenderFilterParams,},setup(props) {interface ColValItem {checked: boolean;value: string;label: string;}const demo1 reactive({isAll: false,option: null as any,colValList: [] as ColValItem[],valList: [] as ColValItem[],});const load () {const { params } props;if (params) {const { $table, column } params;const { fullData } $table.getTableData();const option: any column.filters[0];const { vals } option.data;/** 重置数据解决bug可能由于动态渲染columns导致过滤面板勾选后点击确认按钮过滤后无法更新表格数据* 经过尝试点击重置按钮在进行过滤可正常过滤所以这里重置下data 问题得以解决*/option.data {vals: option.data.vals,// sVal: option.data.sVal,dict: option.data.dict ? option.data.dict : undefined,};if (option.data.dict option.data.dict.length 0) {const colValList Object.keys(XEUtils.groupBy(fullData, column.field)).map((val) {const value option.data.dict.filter((item) String(item.value) String(val));let label val;if (value.length 0) {label value[0].label;}return {checked: vals.includes(val),value: val,label,} as ColValItem;});demo1.option option;demo1.colValList colValList;demo1.valList colValList;} else {const colValList Object.keys(XEUtils.groupBy(fullData, column.field)).map((val) {return {checked: vals.includes(val),value: val,label: val,} as ColValItem;});demo1.option option;demo1.colValList colValList;demo1.valList colValList;}}};// const searchEvent () {// const { option, colValList } demo1;// if (option) {// demo1.valList option.data.sVal// ? colValList.filter(// (item) item.value.indexOf(option.data.sVal) -1// )// : colValList;// }// };const changeAllEvent () {const { isAll } demo1;demo1.valList.forEach((item) {item.checked isAll;});};const confirmFilterEvent () {const { params } props;const { option, valList } demo1;if (params option) {const { data } option;const { $panel } params;data.vals valList.filter((item) item.checked).map((item) item.value);$panel.changeOption(null, true, option);$panel.confirmFilter();}};const resetFilterEvent () {const { params } props;if (params) {const { $panel } params;$panel.resetFilter();}};load();return {demo1,// searchEvent,changeAllEvent,confirmFilterEvent,resetFilterEvent,};},}); /scriptstyle.my-filter-content {padding: 10px;user-select: none;}.my-filter-content .my-fc-search .my-fc-search-top {position: relative;padding: 5px 0;}.my-filter-content .my-fc-search .my-fc-search-top input {border: 1px solid #ababab;padding: 0 20px 0 2px;width: 200px;height: 22px;line-height: 22px;}.my-filter-content .my-fc-search .my-fc-search-content {padding: 2px 10px;}.my-filter-content .my-fc-search-empty {text-align: center;padding: 20px 0;}.my-filter-content .my-fc-search-list {margin: 0;padding: 0;list-style: none;}.my-filter-content .my-fc-search-list-body {overflow: auto;height: 120px;}.my-filter-content .my-fc-search-list .my-fc-search-item {padding: 2px 0;display: block;}.my-filter-content .my-fc-footer {text-align: right;padding-top: 10px;}.my-filter-content .my-fc-footer button {padding: 0 15px;margin-left: 15px;} /style FilterInput.vue templatediv classmy-filter-inputvxe-inputv-modeldemo1.option.data.sValtypetextplaceholder支持回车筛选keyupkeyupEventinputchangeOptionEvent/vxe-input/div /templatescript langtsimport { defineComponent, PropType, reactive } from vue;import { VxeInputEvents, VxeGlobalRendererHandles } from vxe-table;export default defineComponent({name: FilterInput,props: {params: Object as PropTypeVxeGlobalRendererHandles.RenderFilterParams,},setup(props) {const demo1 reactive({option: null as any,});const load () {const { params } props;if (params) {const { column } params;const option column.filters[0];option.data {sVal: option.data.sVal,dict: option.data.dict ? option.data.dict : undefined,};demo1.option option;}};const changeOptionEvent () {const { params } props;const { option } demo1;if (params option) {const { $panel } params;const checked !!option.data.sVal;$panel.changeOption(null, checked, option);}};const keyupEvent: VxeInputEvents.Keyup ({ $event }) {const { params } props;if (params) {const { $panel } params;if ($event.keyCode 13) {$panel.confirmFilter($event);}}};load();return {demo1,changeOptionEvent,keyupEvent,};},}); /scriptstyle scoped.my-filter-input {padding: 10px;} /stylefilter.tsx import { VXETable } from vxe-table; import FilterInput from /components/Filter/FilterInput.vue; import FilterContent from /components/Filter/FilterContent.vue; // import FilterComplex from ./components/FilterComplex.vue // import FilterExtend from ./components/FilterExtend.vue// 创建一个简单的输入框筛选 VXETable.renderer.add(FilterInput, {// 筛选模板renderFilter: (renderOpts, params) {return [FilterInput params{ params }/FilterInput];},// 重置数据方法filterResetMethod (params) {const { options } params;options.forEach((option) {option.data {sVal: ,dict: option.data.dict ? option.data.dict : undefined,};});},// 重置筛选复原方法当未点击确认时该选项将被恢复为默认值filterRecoverMethod ({ option }) {option.data {sVal: ,dict: option.data.dict ? option.data.dict : undefined,};},// 筛选方法filterMethod (params) {const { option, row, column } params;const { data } option;if(data.dict data.dict.length 0) {const cellValue row[column.field];const dictItem data.dict.filter((item)item.label.indexOf(data.sVal) -1).map((item) item.value);if(dictItem.length 0){return dictItem.indexOf(cellValue) -1;}} else {const cellValue row[column.field];if (cellValue) {return cellValue.indexOf(data.sVal) -1;}}return false;}, });// // 创建一个条件的渲染器 // VXETable.renderer.add(FilterComplex, { // // 不显示底部按钮使用自定义的按钮 // showFilterFooter: false, // // 筛选模板 // renderFilter (renderOpts, params) { // return FilterComplex params{ params }/FilterComplex // }, // // 重置数据方法 // filterResetMethod (params) { // const { options } params // options.forEach((option) { // option.data { type: has, name: } // }) // }, // // 筛选数据方法 // filterMethod (params) { // const { option, row, column } params // const cellValue row[column.field] // const { name } option.data // if (cellValue) { // return cellValue.indexOf(name) -1 // } // return false // } // })// 创建一个支持列内容的筛选 VXETable.renderer.add(FilterContent, {// 不显示底部按钮使用自定义的按钮showFilterFooter: false,// 筛选模板renderFilter (renderOpts, params) {return [FilterContent params{ params }/FilterContent];},// 重置数据方法filterResetMethod (params) {const { options } params;options.forEach((option) {option.data { vals: [],dict: option.data.dict ? option.data.dict : undefined};});},// 筛选数据方法filterMethod (params) {const { option, row, column } params;const { vals } option.data;const cellValue row[column.field];console.log(cellValue,vals.includes(cellValue))return vals.includes(cellValue);}, });// // 创建一个复杂的筛选器 // VXETable.renderer.add(FilterExtend, { // // 不显示底部按钮使用自定义的按钮 // showFilterFooter: false, // // 筛选模板 // renderFilter (renderOpts, params) { // return FilterExtend params{ params }/FilterExtend // }, // // 重置数据方法 // filterResetMethod (params) { // const { options } params // options.forEach((option) { // option.data { vals: [], sVal: , fMenu: , f1Type: , f1Val: , fMode: and, f2Type: , f2Val: } // }) // }, // // 筛选数据方法 // filterMethod (params) { // const { option, row, column } params // const cellValue row[column.field] // const { vals, f1Type, f1Val } option.data // if (cellValue) { // if (f1Type) { // return cellValue.indexOf(f1Val) -1 // } else if (vals.length) { // // 通过指定值筛选 // return vals.includes(cellValue) // } // } // return false // } // })
http://www.hkea.cn/news/14296474/

相关文章:

  • 做的好的淘宝客网站企业营销型网站推广
  • 设计个网站多少钱南宁本地网站设计
  • 如何做网站站内搜索手机wap网站下载
  • 贵州建设厅网站备案人员查询开封建网站
  • 最好的手表网站WordPress全球用户量2019
  • ssl外贸网站上海市有几个区
  • 微网站开发平台wizi电商网站前端架构设计
  • 昆山规划与建设局网站国企建筑公司有哪些
  • 网站建设 销售提成网站建设如何商谈
  • 宁波学校网站建设写作网站哪个比较赚钱
  • 东莞网站推广行者seo08教务管理系统学生登录入口
  • 建站模板平台好看的网站色彩搭配
  • 网站做词织梦与wordpress
  • 公司网站做好了怎么做排名长春网站排名提升
  • 怎样用dw做 网站首页浏览器网页版免费进入
  • 宝丰网站制作效果好wordpress 滑到底部自动加载
  • 网站建设seo房产管理局信息查询入口
  • 手机网站制作app郑州短视频培训机构
  • 网站开发 项目的招标文件厦门有什么好企业网站
  • asp网站开发技术背景介绍湖北网站建设网址
  • 网站备案提交信息吗做论坛网站好吗
  • 网站域名实名认证闽清住房和城乡建设局网站
  • 佛山建网站公司python 网站开发代码
  • dede 百度网站地图南京做网站公司
  • 做好网站建设一个域名大概能卖多少钱
  • 网站设计需要什么证烟台网站建设工作
  • 企业只有建立自己的网站平台seo网络优化师就业前景
  • 国内做网站的龙头企业做外贸网站选择服务器
  • 网站开发合同注意事件有哪些页面设计文档
  • 源码网站有哪些2022年网络热点事件舆情案例