• 赵茹林's avatar
    新增 导出完课用户 · 4622dd7a
    赵茹林 authored
    新增 数据管理更新时间
    新增 设备移交原因
    新增 用户转移
    更新 期数名称3个
    优化 选择用户样式
    4622dd7a
index.vue 11.4 KB
<template>
  <div class="user" v-loading="loading">
    <el-form ref="searchFrom" :model="searchFrom" label-width="80px" inline>
      <el-form-item label="ID">
        <el-input v-model="searchFrom.userId"></el-input>
      </el-form-item>
      <el-form-item label="昵称">
        <el-input v-model="searchFrom.nickName"></el-input>
      </el-form-item>
      <el-form-item label="电话">
        <el-input v-model="searchFrom.mobile"></el-input>
      </el-form-item>
      <el-form-item label="等级">
        <el-input v-model="searchFrom.level"></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>
    <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>
          <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.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 => {
          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>