BookingService/frontend/src/views/account/Account.vue

243 lines
6.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<page-layout title="用户">
<a-card>
<a-row>
<a-input-group class="tool">
<a-row :gutter="6">
<a-col
class="item"
v-bind="layout2">
<a-select
v-model="params.role"
style="width: 100%;"
@change="getData()">
<a-select-option value="">角色筛选</a-select-option>
<a-select-option :value="item.id" v-for="item in roleList">{{item.name}}</a-select-option>
</a-select>
</a-col>
<a-col
class="item"
v-bind="layout2">
<a-select
v-model="params.ordering"
style="width: 100%;"
@change="getData()">
<a-select-option value="">排序</a-select-option>
<a-select-option value="id">ID正排序</a-select-option>
<a-select-option value="-id">ID倒排序</a-select-option>
<a-select-option value="username">用户名正排序</a-select-option>
<a-select-option value="-username">用户名倒排序</a-select-option>
<a-select-option value="date_joined">加入时间正排序</a-select-option>
<a-select-option value="-date_joined">加入时间倒排序</a-select-option>
<a-select-option value="last_login">上次登录正排序</a-select-option>
<a-select-option value="-last_login">上次登录倒排序</a-select-option>
</a-select>
</a-col>
<a-col
class="item"
v-bind="layout2">
<a-input
v-model="params.search"
style="width: 100%;"
placeholder="ID用户名邮箱"
@keypress.enter="getData">
</a-input>
</a-col>
<a-col
class="item"
:xs="{ span: 12 }"
:sm="{ span: 8 }"
:xl="{ span: 4 }">
<a-button
style="width: 100%;"
icon="search"
@click="getData">
搜索
</a-button>
</a-col>
<a-col
class="item"
v-bind="layout2">
<a-button
style="width: 100%;"
icon="delete"
@click="handleClearParams">
重置
</a-button>
</a-col>
<a-col
class="item"
v-bind="layout2">
<a-button
type="primary"
icon="plus"
style="width: 100%;"
@click="$router.push({name: 'accountCreate'})">
新建
</a-button>
</a-col>
</a-row>
</a-input-group>
</a-row>
<a-row>
<a-col class="item">
<a-table
rowKey="id"
:loading="state.loading"
:columns="columns"
:dataSource="userList"
:pagination="false">
<template slot="role" slot-scope="text, record, index">
{{roleList.find(item=> item.id === text).name}}
</template>
<template slot="is_active" slot-scope="text, record, index">
{{text ? '有效': '无效'}}
</template>
<template slot="operation" slot-scope="text, record, index">
<a-button @click="$router.push({name: 'accountEdit', params: {id: record.id.toString()}})">编辑</a-button>
</template>
</a-table>
</a-col>
</a-row>
<a-row>
<a-col class="item">
<span style="vertical-align: -5px">共 {{count}} 条</span>
<a-pagination
v-model="params.page"
@change="handelePage"
style="float: right"
:total="count">
</a-pagination>
</a-col>
</a-row>
</a-card>
</page-layout>
</template>
<script>
const columns = [
{
title: '编号',
dataIndex: 'id',
width: '8%'
},
{
title: '用户名',
dataIndex: 'username',
width: '14%'
},
{
title: '邮箱',
dataIndex: 'email',
width: '12%'
},
{
title: '角色',
dataIndex: 'role',
width: '12%',
scopedSlots: { customRender: 'role' }
},
{
title: '积分',
dataIndex: 'point',
width: '12%'
},
{
title: '上次登陆时间',
dataIndex: 'last_login',
width: '14%'
},
{
title: '状态',
dataIndex: 'is_active',
width: '10%',
scopedSlots: { customRender: 'is_active' }
},
{
title: '操作',
dataIndex: 'operation',
scopedSlots: { customRender: 'operation' }
}
]
import PageLayout from '../../components/page/PageLayout'
import api from '../../api/account'
export default {
name: 'Account',
components: {
PageLayout
},
data () {
return {
columns,
layout1: {
xs: { span: 24 },
sm: { span: 8 },
xl: { span: 8 },
},
layout2: {
xs: { span: 12 },
sm: { span: 8 },
xl: { span: 4 },
},
params: {
search: '',
page: 1,
ordering: '-last_login',
role: '',
},
state: {
loading: false,
},
roleList: [],
count: 0,
userList: [],
setting: {}
}
},
mounted () {
api.getRoleList()
.then(data => {
this.roleList = data
this.getData()
})
},
methods: {
getData () {
this.state.loading = true
api.getUserList(this.params)
.then(data => {
this.userList = data.results
this.count = data.count
this.state.loading = false
})
.catch(() => {
this.state.loading = false
})
},
handleClearParams () {
this.params = {
search: '',
page: 1,
ordering: '-last_login',
role: '',
}
this.state = {
loading: false
}
this.getData()
},
handelePage (page) {
this.params.page = page
this.getData()
},
}
}
</script>
<style scoped lang="less">
.item {
margin: 8px 0;
}
</style>