<template> <div class="app-container"> <div class="filter-container"> <el-input :placeholder="'搜素'" v-model="listQuery.filter.value" style="width: 180px;" class="filter-item" @keyup.enter.native="handleFilter"/> <el-select v-model="listQuery.filter.key" :placeholder="'搜索字段'" clearable class="filter-item" style="width: 110px"> <el-option v-for="item in SearchTypeOptions" :key="item.key" :label="item.display_name" :value="item.key"/> </el-select> <el-select v-model="listQuery.filter.is_online" :placeholder="'是否在线'" clearable class="filter-item" style="width: 110px"> <el-option v-for="item in OnlineTypeOptions" :key="item.key" :label="item.display_name" :value="item.key"/> </el-select> <el-select v-model="listQuery.filter.is_recommend" :placeholder="'是否推荐'" clearable class="filter-item" style="width: 110px"> <el-option v-for="item in recommendTypeOptions" :key="item.key" :label="item.display_name" :value="item.key"/> </el-select> <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">搜索</el-button> <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="handleCreate">创建</el-button> <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="handleOfflineOrOnline('offline')">下线</el-button> <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="handleOfflineOrOnline('online')">上线</el-button> <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="handleOfflineOrOnline('is_recommend')">推荐</el-button> </div> <el-table v-loading="listLoading" :data="list" border fit highlight-current-row style="width: 100%" ref="multipleTable" @selection-change="handleSelectionChange"> <el-table-column type="selection" align="center"></el-table-column> <el-table-column align="center" label="小组ID "> <template slot-scope="scope"> <router-link :to="'/group/edit/'+scope.row.id" class="link-type"> <span>{{ scope.row.id }}</span> </router-link> </template> </el-table-column> <el-table-column align="center" label="小组名称"> <template slot-scope="scope"> <span>{{ scope.row.name }}</span> </template> </el-table-column> <el-table-column align="center" label="小组简介"> <template slot-scope="scope"> <span>{{ scope.row.description }}</span> </template> </el-table-column> <el-table-column align="center" label="明星数"> <template slot-scope="scope"> <span>{{ scope.row.star_nums }}</span> </template> </el-table-column> <el-table-column align="center" label="用户数"> <template slot-scope="scope"> <router-link :to="{path: '/user/list/', query: {group_id: scope.row.id}}" class="link-type"> <span>{{ scope.row.user_nums }}</span> </router-link> </template> </el-table-column> <el-table-column align="center" label="帖子数"> <template slot-scope="scope"> <router-link :to="{path: '/topic/list/', query: {group_id: scope.row.id}}" class="link-type"> <span>{{ scope.row.topic_nums }}</span> </router-link> </template> </el-table-column> <el-table-column align="center" label="组长"> <template slot-scope="scope"> <span>{{ scope.row.creator.name }}</span> </template> </el-table-column> <el-table-column align="center" label="是否在线"> <template slot-scope="scope"> <el-tag :type="scope.row.is_online | isOnlineFilter">{{ scope.row.is_online==1 ? '是' : '否' }}</el-tag> </template> </el-table-column> <el-table-column align="center" label="是否推荐"> <template slot-scope="scope"> <el-tag :type="scope.row.is_recommend | isOnlineFilter">{{ scope.row.is_recommend==1 ? '是' : '否' }}</el-tag> </template> </el-table-column> </el-table> <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" style="margin-left: 150px;" @pagination="getList" /> </div> </template> <script> import { fetchList, OffLineOrOnLine } from '@/api/group' import Pagination from '@/components/Pagination' // Secondary package based on el-pagination import waves from '@/directive/waves' export default { name: 'GroupList', components: { Pagination }, directives: { waves }, filters: { isOnlineFilter(status) { const statusMap = { 1: 'success', 0: 'info', } return statusMap[status] } }, data() { return { list: null, total: 0, listLoading: true, multipleSelection: [], del_list: [], listQuery: { page: 0, limit: 10, filter: { value: '', key: '', is_online: '', is_recommend: '', }, }, SearchTypeOptions:[ {'key': 'id', 'display_name': '小组ID'}, {'key': 'name', 'display_name': '小组名称'}, ], OnlineTypeOptions: [ {'key': 0, 'display_name': '否'}, {'key': 1, 'display_name': '是'}, ], recommendTypeOptions: [ {'key': 0, 'display_name': '否'}, {'key': 1, 'display_name': '是'}, ], } }, created() { this.getList() }, methods: { getList() { this.listLoading = true this.listQuery.star_id = this.$route.query.star_id || '' this.listQuery.user_id = this.$route.query.user_id || '' fetchList(this.listQuery).then(response => { this.list = response.data.data.data this.total = response.data.data.total this.listLoading = false }) }, handleSelectionChange(val) { this.multipleSelection = val; }, handleSizeChange(val) { this.listQuery.limit = val this.getList() }, handleCurrentChange(val) { this.listQuery.page = val this.getList() }, handleFilter() { this.listQuery.page = 1 this.getList() }, handleCreate() { this.$router.push('/group/create') }, handleOfflineOrOnline(val){ const length = this.multipleSelection.length; var ids = [] var updates = {} this.del_list = this.del_list.concat(this.multipleSelection); for (let i = 0; i < length; i++) { if (val === 'offline'){ this.multipleSelection[i].is_online = 0 updates['is_online'] = 0 }else if (val == 'is_recommend'){ this.multipleSelection[i].is_recommend = 1 updates['is_recommend'] = 1 } else{ this.multipleSelection[i].is_online = 1 updates['is_online'] = 1 } ids.push(this.multipleSelection[i].id) } OffLineOrOnLine({updates: JSON.stringify(updates), ids: JSON.stringify(ids)}).then(response => { this.multipleSelection = []; this.$message.success(response.data.data.message); setTimeout(() => { this.$router.go(0) }, 1000) }) }, } } </script> <style scoped> .edit-input { padding-right: 100px; } .cancel-btn { position: absolute; right: 15px; top: 10px; } </style>