请问如何在antdesignvue表格组件实现表头对标签进行筛选?

请问如何在antdesignvue表格组件实现表头对标签进行筛选?
如图,想要实现在表头就能筛选出某个标签的项目

按ant design vue模板写有点问题,我的pState传过来的是tinyint类型,我是需要对他进行判断后才展示“进行中”“已结束”的标签,请问该怎么修正呢?请赐教,不胜感激。

<template>

<layout>

<div id="layout-inner">

<a-breadcrumb style="margin:0;margin-top:10px;margin-left:16px;text-align: left">

<a-divider type="vertical" style="background-color: #FF944B;width: 3px;border-radius: 8px"/>

<a-breadcrumb-item>项目管理</a-breadcrumb-item>

</a-breadcrumb>

<a-layout-content

:style="{ margin: '13px 16px', background: '#fff', minHeight: '520px' }"

>

<div id="content">

<div id="contentHeader">

<img src="../../../icons/fileIcon.jpg" alt="请问如何在antdesignvue表格组件实现表头对标签进行筛选?" class="cardIcon">

<span class="cardTitle">全部项目</span>

<a-row :gutter="16">

<a-col :span="8" >

<a-card title="正在进行中的项目" :bordered="false" :style="cardBg">

<span>{{ this.OngoingProjects }}个</span>

</a-card>

</a-col>

<a-col :span="8" >

<a-card title="已结束的项目" :bordered="false" :style="cardBg2">

<span>{{ this.FinishedProjects }}个</span>

</a-card>

</a-col>

</a-row>

</div>

<div id="formContent">

<!-- <div class="search">-->

<!-- <a-input-search placeholder="请输入搜索内容" enter-button @search="onSearch" :style="search" />-->

<!-- </div>-->

<div class="projectTable">

<template>

<a-table :columns="columns"

:data-source="projectList"

:pagination="pagination"

:rowKey="record=>record.pId"

@change="onChange"

:style="{padding:'10px 0px',margin:'0px'}"

>

<div

slot="filterDropdown"

slot-scope="{ setSelectedKeys, selectedKeys, confirm, clearFilters, column }"

style="padding: 8px"

>

<a-input

v-ant-ref="c => (searchInput = c)"

:placeholder="`Search ${column.dataIndex}`"

:value="selectedKeys[0]"

style="width: 188px; margin-bottom: 8px; display: block;"

@change="e => setSelectedKeys(e.target.value ? [e.target.value] : [])"

@pressEnter="() => handleSearch(selectedKeys, confirm, column.dataIndex)"

/>

<a-button

type="primary"

icon="search"

size="small"

style="width: 90px; margin-right: 8px"

@click="() => handleSearch(selectedKeys, confirm, column.dataIndex)"

>

Search

</a-button>

<a-button size="small" style="width: 90px" @click="() => handleReset(clearFilters)">

Reset

</a-button>

</div>

<a-icon

slot="filterIcon"

slot-scope="filtered"

type="search"

:style="{ color: filtered ? '#108ee9' : undefined }"

/>

<template slot="pRace" slot-scope="text, record, index, column">

<span v-if="searchText && searchedColumn === column.dataIndex">

<template

v-for="(fragment, i) in text

.toString()

.split(new RegExp(`(?<=${searchText})|(?=${searchText})`, 'i'))"

>

<mark

v-if="fragment.toLowerCase() === searchText.toLowerCase()"

:key="i"

class="highlight"

>{{ fragment }}</mark

>

<template v-else>{{ fragment }}</template>

</template>

</span>

<template v-else>

{{ text }}

</template>

</template>

<template slot="Id" slot-scope="text, record,index">

<span>{{ ((current-1)*5)+(index+1)}}</span>

</template>

<template slot="pState" slot-scope="text, record">

<div>

<a-tag v-if="record.pState===0" color="green">进行中</a-tag>

<a-tag v-if="record.pState===1" color="red">已结束</a-tag>

</div>

</template>

<template slot="pStart" slot-scope="text,record">

<span>{{ record.pStart | formatDate}}</span>

</template>

<template slot="pEnd" slot-scope="text,record">

<span>{{ record.pEnd | formatDate}}</span>

</template>

<template slot="action" slot-scope="text, record">

<a-button type="primary"

@click="projectDetail(record.pId)"

:style="{padding: '4px',fontSize: '10px'}">

查看详情

</a-button>

</template>

</a-table>

</template>

</div>

</div>

</div>

</a-layout-content>

</div>

</layout>

</template>

<script>

import layout from "@/layout/index"

import {getAllProjectsByPages} from '@/api/project'

import {formatDate} from "@/utils/date";

import {countOngoingProjects} from "@/api/project"

import {countFinishedProjects} from "@/api/project"

const columns = [

{

title: '序号',

dataIndex: 'Id',

key: 'Id',

width:'8%',

scopedSlots: { customRender: 'Id' },

},

{

title: '比赛名称',

dataIndex: 'pRace',

key: 'pRace',

ellipsis: true,

width:'20%',

scopedSlots: {

filterDropdown: 'filterDropdown',

filterIcon: 'filterIcon',

customRender: 'pRace',

},

onFilter: (value, record) =>

record.name

.toString()

.toLowerCase()

.includes(value.toLowerCase()),

onFilterDropdownVisibleChange: visible => {

if (visible) {

setTimeout(() => {

this.searchInput.focus();

}, 0);

}

},

// scopedSlots: { customRender: 'competition' },需要插入另加定义的才写

},

{

title: '项目名称',

dataIndex: 'pName',

key: 'pName',

width:'15%',

// width: 200,

ellipsis: true,

// ellipsis 显示省略符号来代表被修剪的文本。

},

{

title: '负责人',

dataIndex: 'uName',

key: 'uName',

// width:90

width:'10%',

},

{

title: '项目状态',

key: 'pState',

dataIndex: 'pState',

scopedSlots: { customRender: 'pState' },

filters: [

{

text: '进行中',

value: '进行中',

},

{

text: '已结束',

value: '已结束',

}],

onFilter: (value, record) => record.pState.indexOf(value) === 0,

// indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

// sorter: (a, b) => a.name.length - b.name.length,

// sortDirections: ['descend'],

width:'10%',

},

{

title: '开始日期',

dataIndex: 'pStart',

key: 'pStart',

width:'15%',

scopedSlots: { customRender: 'pStart' },

},

{

title: '截止日期',

dataIndex: 'pEnd',

key: 'pEnd',

scopedSlots: { customRender: 'pEnd' },

width:'15%',

},

{

title: '操作',

key:'action',

dataIndex: 'action',

scopedSlots: {customRender: 'action'},

width:'10%',

},

];

export default {

name: "index",

data(){

return{

searchText: '',

searchInput: null,

searchedColumn: '',

OngoingProjects:null,

FinishedProjects:null,

// 0是团队用户,1是管理员

u_identity:this.$route.params.u_identity,

projectList:[],

columns,

current:1,

pagination: {

current:1,

onChange: page => {

console.log('现在是第几页page:',page);

this.current=page;

console.log("this.current是当前的页数:",this.current)

this.getAllProjectsByPages(page,this.pagination.pageSize)

},

pageSize: 5,

total:0,

// total所有记录总数

// pageSize: 5,一页有5行

},

//卡片样式背景

cardBg:{

backgroundImage: "url("+require("../../../assets/images/cardBg.jpg")+")",

backgroundSize: 'cover',

opacity:'0.75',

color:'white',

fontSize:'18px',

},

cardBg2:{

backgroundImage: "url("+require("../../../assets/images/cardBg2.jpg")+")",

backgroundSize: 'cover',

opacity:'0.75',

color:'white',

fontSize:'18px',

},

cardBg3:{

backgroundImage: "url("+require("../../../assets/images/cardBg3.jpg")+")",

backgroundSize: 'cover',

opacity:'0.75',

color:'white',

fontSize:'18px',

},

}

},

components:{

layout

},

filters: {

formatDate(time) {

var date = new Date(time);

return formatDate(date, 'yyyy年MM月dd日');

}

},

mounted() {

this.countOngoingProjects();

this.countFinishedProjects();

this.getAllProjectsByPages(1,this.pagination.pageSize);

},

methods:{

onChange() {

console.log('111');

},

handleSearch(selectedKeys, confirm, dataIndex) {

confirm();

this.searchText = selectedKeys[0];

this.searchedColumn = dataIndex;

},

handleReset(clearFilters) {

clearFilters();

this.searchText = '';

},

countFinishedProjects(){

countFinishedProjects().then(res=>{

console.log("res:",res)

console.log("从后端获取到的已结束的项目个数:",res.data.FinishedProjects)

this.FinishedProjects=res.data.FinishedProjects

})

},

countOngoingProjects(){

console.log("获取正在进行中的项目个数")

countOngoingProjects().then(res=>{

console.log("res:",res)

console.log("正在进行的项目个数:",res.data.OngoingProjects)

this.OngoingProjects=res.data.OngoingProjects

console.log("我要在前端展示的项目个数:",this.OngoingProjects)

})

},

// 分页获取所有项目列表

getAllProjectsByPages(page,pageSize){

return new Promise((resolve, reject) => {

getAllProjectsByPages(page, pageSize).then(res => {

console.log("我回来啦,带来了res:",res)

console.log("res.data.list:",res.data.list)

this.projectList=res.data.list

console.log('this.projectList:',this.projectList)

this.pagination.total=res.data.totalRow

console.log("现有的总数据条数this.pagination.total:",this.pagination.total)

// console.log("打算查看详情的pId:",this.projectList.index.pId)

resolve()

}).catch(err => {

reject(err)

})

})

},

projectDetail(pId){

console.log("打算查看详情的pId:",pId)

this.$router.push({name:'projectDetail',query: {pId:pId}})

},

}

};

</script>

<style scoped>

.highlight {

background-color: rgb(255, 192, 105);

padding: 0px;

}

/deep/.ant-table-thead > tr > th{

text-align: center;

font-size: 13px;

font-weight: bold;

background: rgba(246, 249, 255, 1);

}

/deep/.ant-table-tbody > tr > td {

text-align: center;

font-size: 13px;

}

div#contentHeader{

box-shadow:#BBBBBB 0px 0px 10px;

padding:10px 20px;

margin-bottom: 30px;

}

span.cardTitle{

font-size:15px;

font-weight: bold;

}

img.cardIcon{

width:30px;

height:30px;

margin:5px

}

div#formContent{

box-shadow:#BBBBBB 0px 0px 10px;

padding:10px 5px;

}

div.search{

float:right;

margin-bottom: 20px;

}

div.projectTable{

margin:10px;

margin-top:20px

}

span.cardContent{

font-size:14px;

}

div.textContent{

padding:0px 10px;

margin-bottom: 10px;

}

</style>

此为vue文件

以上是 请问如何在antdesignvue表格组件实现表头对标签进行筛选? 的全部内容, 来源链接: utcz.com/p/935840.html

回到顶部