<template> <div class="admin-refresh" v-loading="loading"> <div class="section-search"> <el-form ref="searchFrom" :model="searchFrom" label-width="80px" inline> <el-form-item> <el-input v-model="searchFrom.userId" placeholder="ID" clearable @change="getUser"></el-input> </el-form-item> <el-form-item> <el-input v-model="searchFrom.nickName" placeholder="昵称" clearable @change="getUser"></el-input> </el-form-item> <el-form-item> <el-input v-model="searchFrom.mobile" placeholder="电话" clearable @change="getUser"></el-input> </el-form-item> <el-form-item> <el-input v-model="searchFrom.level" placeholder="等级" clearable @change="getUser"></el-input> </el-form-item> <!--<el-form-item label="标签"> <el-cascader style="width: 320px" placeholder="选择标签" clearable @change="tagChange" :options="options" :props="{ multiple: true, checkStrictly: true }"></el-cascader> </el-form-item>--> <el-form-item> <div class="flexRow"> <el-button type="primary" plain @click="getUser">搜索</el-button> <!--<el-button type="success" plain @click="syncUser">同步最新数据</el-button>--> </div> </el-form-item> </el-form> </div> <el-table :data="userList" style="width: 100%"> <el-table-column className="f-c" label="用户"> <template slot-scope="scope"> <img class="avatar" :src="scope.row.avatar">{{scope.row.nickname}}<br>(ID:{{scope.row.user_id}}) </template> </el-table-column> <el-table-column prop="mobile" label="手机号" width="110px"></el-table-column> <el-table-column prop="created_at" label="注册时间" sortable></el-table-column> <el-table-column prop="last_login_at" label="最后登录" sortable></el-table-column> <!--<el-table-column prop="last_login_at" label="最后登录时间" width="120px" sortable></el-table-column>--> <el-table-column prop="baby_name" label="宝宝名称"></el-table-column> <el-table-column prop="birthday" label="宝宝生日" width="110px"></el-table-column> <el-table-column prop="sex" label="宝宝性别" width="80px" :formatter="sexFormatter"></el-table-column> <el-table-column label="操作" width="200px"> <template slot-scope="scope"> <!--<el-button size="mini" plain type="primary" @click="goToDetail(scope.row.user_id)">查看详情</el-button>--> <router-link :to="{path:'/userDetail', query:{userid: scope.row.user_id}}" target="_blank"><el-button size="mini" plain type="primary">查看详情</el-button></router-link> <el-button size="mini" v-if="!$store.state.readonly" plain type="warning" @click="userTransfer(scope.row)">用户转移</el-button> </template> </el-table-column> </el-table> <page :total="total" :limit="limit" @pageChange="onPageChange" @sizeChange="onSizeChange"/> <detail-dialog :dialogObj="dialogDetailObj" @changeShow="changeShow"/> <teacher-dialog :dialogObj="dialogObj" @reflash="getUser"></teacher-dialog> <el-dialog width="90%" top="5vh" :visible.sync="dialogDetail.show"> <div v-if="dialogDetail.show"> <user-detail :parentDetail="dialogDetail"></user-detail> </div> </el-dialog> <!--用户移交--> <el-dialog append-to-body :visible.sync="addShow" top="5vh" :title="`把 ${userObj.transfer_user_name} 转移为`"> <el-form label-width="90px" inline> <el-form-item> <el-input style="width: 160px;" placeholder="ID" @change="getTransferUser" v-model="userObj.searchFrom.userId"></el-input> </el-form-item> <el-form-item> <el-input style="width: 160px;" placeholder="昵称" @change="getTransferUser" v-model="userObj.searchFrom.nickName"></el-input> </el-form-item> <el-form-item> <el-input style="width: 160px;" placeholder="电话" @change="getTransferUser" v-model="userObj.searchFrom.mobile"></el-input> </el-form-item> <el-form-item> <el-button type="primary" plain @click="getTransferUser">搜索</el-button> </el-form-item> </el-form> <el-table border size="small" :data="userTransferList" ref="multipleTable" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55"></el-table-column> <el-table-column className="f-c" label="用户"> <template slot-scope="scope"> <img style="margin-right:8px;width: 50px;height: 50px;border-radius: 50px" :src="scope.row.avatar">{{scope.row.nickname}}(ID:{{scope.row.user_id}}) </template> </el-table-column> <el-table-column prop="mobile" label="手机号"></el-table-column> </el-table> <page :total="userObj.total" :limit="userObj.limit" :small="true" @pageChange="onPageChange3" @sizeChange="onSizeChange3"/> <span slot="footer" class="dialog-footer"> <el-button @click="addShow = false">取 消</el-button> <el-button type="primary" @click="transferSave">确 定</el-button> </span> </el-dialog> </div> </template> <script> import {getUserListApi, getSyncUserApi, postUserTransferApi} from "../../service/api"; import page from '../framework/page' import detailDialog from './detail' import teacherDialog from './dialog' import userDetail from '../userDetail/index' export default { name: "index", data() { return { addShow: false, userTransferList: [], userObj: { title: '', show: false, total: 0, limit: 10, nowPage: 1, transfer_user_id: '', transfer_user_name: '', receive_user_id: '', receive_user_name: '', searchFrom: { nickName: '', mobile: '', level: '', userId: '' }, }, multipleSelection: [], searchFrom: { nickName: '', mobile: '', level: '', userId: '' }, dialogDetail: { show: false, id: '' }, userList: [], total: 0, nowPage: 1, limit: 10, showDetail: false, showId: '', dialogObj: { show: false, title: '绑定老师', id: 0, teacher_id: 0 }, dialogDetailObj: { show: false, id: '' }, loading: false } }, components: { page, detailDialog, userDetail, teacherDialog }, mounted() { this.$route.query.id ? this.searchFrom.userId = this.$route.query.id : ''; this.getUser(); }, methods: { userTransfer(row) { this.addShow = true; this.userObj.total = 0; this.userObj.nowPage = 1; this.getTransferUser(); this.userObj.transfer_user_id = row.user_id; this.userObj.transfer_user_name = row.nickname; this.userObj.receive_user_id = ''; this.userObj.receive_user_name = ''; }, transferSave() { if (this.multipleSelection.length === 0) { this.$message({ type: 'error', message: '请选择用户!' }); return } else if (this.multipleSelection.length !== 1) { this.$message({ type: 'error', message: '只能选择一个用户!' }); return } else if (!this.userObj.transfer_user_id || !this.userObj.transfer_user_name) { return } this.$confirm(`确定将 <span style="color: red;">${this.userObj.transfer_user_name}</span> 转移为 <span style="color: red;">${this.userObj.receive_user_name}</span> ?`, '提示', { dangerouslyUseHTMLString: true, confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { let json = { transfer_user_id: this.userObj.transfer_user_id, receive_user_id: this.userObj.receive_user_id, } postUserTransferApi(json).then(res => { this.$message({ type: 'success', message: '用户转移成功!' }); this.getUser(); this.addShow = false; this.userObj.transfer_user_id = ''; this.userObj.transfer_user_name = ''; this.userObj.receive_user_id = ''; this.userObj.receive_user_name = ''; }) }).catch(() => { this.$message({ type: 'info', message: '已取消转移' }); }); }, onPageChange3(val) { this.userObj.nowPage = val this.getTransferUser() }, onSizeChange3(val) { this.userObj.limit = val; this.userObj.nowPage = 1; this.getTransferUser() }, getTransferUser() { let json = { page: this.userObj.nowPage, limit: this.userObj.limit, }; if (this.userObj.searchFrom.userId) { json.user_id = this.userObj.searchFrom.userId } if (this.userObj.searchFrom.nickName) { json.nickname = this.userObj.searchFrom.nickName } if (this.userObj.searchFrom.mobile) { json.mobile = this.userObj.searchFrom.mobile } getUserListApi(json).then(res => { this.userTransferList = res.list; this.userObj.total = res.total; }) }, handleSelectionChange(val) { this.multipleSelection = val; this.userObj.receive_user_name = val[0].nickname; this.userObj.receive_user_id = val[0].user_id; }, sexFormatter(item) { if (item.sex == 0) { return '保密' } if (item.sex == 1) { return '男' } if (item.sex == 2) { return '女' } }, onPageChange(val) { this.nowPage = val this.getUser() }, onSizeChange(val) { this.limit = val; this.nowPage = 1; this.getUser() }, getUser() { let json = { page: this.nowPage, limit: this.limit } if (this.searchFrom.userId) { json.user_id = this.searchFrom.userId } if (this.searchFrom.nickName) { json.nickname = this.searchFrom.nickName } if (this.searchFrom.mobile) { json.mobile = this.searchFrom.mobile } if (this.searchFrom.level) { json.level = this.searchFrom.level } getUserListApi(json).then(res => { // debugger this.userList = res.list; this.total = res.total }) }, detail(data) { this.dialogDetailObj = { show: true, id: data.user_id } }, changeShow(data) { this.dialogDetailObj.show = data }, bindTeacher(data) { this.dialogObj = { show: true, title: '绑定老师', id: data.user_id, teacher_id: data.teacher_id } }, goToDetail(id) { this.dialogDetail.id = id; this.dialogDetail.show = true // this.$router.push('/userDetail/'+ id); }, syncUser() { this.loading = true getSyncUserApi().then((data) => { this.loading = false this.$message({ showClose: true, message: `已更新${data}条用户数据`, type: 'success' }) }).catch(() => { this.loading = false }) } } } </script> <style lang="less"> /*@import "../../util/public";*/ .user { /*height: 100%;*/ overflow: auto; padding: 20px 0; .btn-content { text-align: center; } } .flexRow { display: flex; flex-flow: row; justify-content: flex-start; align-items: center; } </style>