<template>
  <div class="menu">
    <div class="head clear-both">
      <el-button @click="add" plain type="success" style="float: right" v-if="!$store.state.readonly">新增来源码</el-button>
    </div>
    <el-table
      :data="sourceList"
      style="width: 100%">
      <el-table-column
        prop="title"
        label="名字">
      </el-table-column>
      <el-table-column
        prop="code"
        label="来源CODE">
        <template slot-scope="scope">
          <a href="javascript:void(0);" @click="goToOrder(scope.row.code)">{{scope.row.code}}</a>
        </template>
      </el-table-column>
      <el-table-column
        label="是否可提现">
        <template slot-scope="scope">
          {{scope.row.is_withdraw | isWithdraw}}
        </template>
      </el-table-column>
      <el-table-column
        prop="no_cash_user"
        label="不可提现用户">
        <template slot-scope="scope">
          <a href="javascript:void(0);" @click="getNoCashUser(scope.row.no_cash_user)">{{scope.row.no_cash_user}}</a>
        </template>
      </el-table-column>
      <el-table-column
        prop="desc"
        label="备注">
      </el-table-column>
      <el-table-column
        prop="created_at"
        label="创建时间" sortable>
      </el-table-column>
      <el-table-column
        label="操作"
        width="250">
        <template slot-scope="scope">
          <el-button size="mini" plain type="primary" @click="edit(scope.row)" v-if="!$store.state.readonly">
            编辑
          </el-button>
          <el-button size="mini" type="danger" plain @click="del(scope.row)" v-if="!$store.state.readonly && $store.state.deletePermission">
            删除
          </el-button>
          <el-button size="mini" plain type="primary" @click="createInviteLink(scope.row.code)">
            复制链接
          </el-button>
        </template>
      </el-table-column>
    </el-table>
    <page :nowPage="nowPage" :total="total" :limit="limit" @pageChange="onPageChange" @sizeChange="onSizeChange"/>
    <el-dialog
      :title="dialog.title"
      center
      append-to-body
      :visible.sync="dialog.show"
      width="50%">
      <el-form ref="form" :rules="dialog.rules" :model="dialog.form" label-width="120px">
        <el-form-item label="名字" prop="title">
          <el-input v-model="dialog.form.title"></el-input>
        </el-form-item>
        <el-form-item label="来源CODE" prop="code">
          <el-input v-model="dialog.form.code"></el-input>
        </el-form-item>
        <el-form-item label="是否可提现">
          <el-switch
            v-model="dialog.form.is_withdraw"
            active-color="#13ce66"
            inactive-color="#eee">
          </el-switch>
        </el-form-item>
        <el-row>
          <el-col :span="16">
            <el-form-item label="不可提现用户ID">
              <el-input v-model="dialog.form.no_cash_user"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="6" :offset="2">
            <el-button type="primary" @click="onSelectUser">选择用户</el-button>
          </el-col>
        </el-row>
        <el-form-item label="备注">
          <el-input v-model="dialog.form.desc"></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialog.show = false">取 消</el-button>
        <el-button type="primary" @click="sub">确 定</el-button>
      </span>
      <el-dialog :visible.sync="userDialog.show" append-to-body>
        <el-form label-width="90px">
          <el-row>
            <el-col :span="8">
              <el-form-item label="ID">
                <el-input v-model="searchUserFrom.userId"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
              <el-form-item label="昵称">
                <el-input v-model="searchUserFrom.nickName"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
              <el-form-item label="电话">
                <el-input v-model="searchUserFrom.mobile"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="8" :offset="16">
              <el-form-item>
                <el-button style="float: right" type="primary" plain @click="getUser">搜索</el-button>
              </el-form-item>
            </el-col>
          </el-row>
        </el-form>
        <el-table
          :data="userList"
          ref="multipleTable"
          @selection-change="handleSelectionChange"
          style="width: 100%">
          <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:5px;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>
        <user-page :total="userDialog.total" :limit="userDialog.limit" @pageChange="onUserPageChange" @sizeChange="onUserSizeChange"/>
        <span slot="footer" class="dialog-footer">
        <el-button @click="userDialog.show = false">取 消</el-button>
        <el-button type="primary" @click="onConfirm">确 定</el-button>
      </span>
      </el-dialog>
    </el-dialog>
    <el-dialog :visible.sync="noCashUserDialog.show" append-to-body>
      <el-table
        :data="noCashUserList"
        style="width: 100%">
        <el-table-column
          className="f-c"
          label="用户">
          <template slot-scope="scope">
            <img style="margin-right:5px;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>
      <span slot="footer" class="dialog-footer">
        <el-button @click="noCashUserDialog.show = false">确 定</el-button>
      </span>
    </el-dialog>
    <choose-good-dialog :dialogObj="chooseGoodDialogObj" @changeShow="changeShow"/>
  </div>
</template>

<script>
  import {getSourceListApi,addSourceApi,delSourceApi,updateSourceApi,getUserListApi} from "../../service/api";
  import page from '../framework/page'
  import userPage from '../framework/page'
  import chooseGoodDialog from '../teacherDetail/chooseGoodDialog'
  export default {
    components: {
      page,
      userPage,
      chooseGoodDialog
    },
    data(){
      return {
        nowPage:1,
        total:0,
        limit:10,
        sourceList:[],
        codeSelect:[{
          value:'USER',
          label:'用户'
        },{
          value:'TEACHER',
          label:'老师'
        }],
        dialog:{
          title:'新增来源码',
          show:false,
          rules: {
            title: [
              {required: true, message: '请填写来源码名字', trigger: 'change'},
            ],
            code: [
              {required: true, message: '请填写来源码类型', trigger: 'change'},
            ]
          },
          form:{
            id:'',
            title:'',
            code:'',
            is_withdraw: 0,
            desc:'',
            no_cash_user: ''
          }
        },
        userDialog: {
          total: 0,
          limit: 10,
          nowPage: 1,
          show: false
        },
        userList: [],
        searchUserFrom: {},
        multipleSelection: [],
        noCashUserDialog: {
          total: 0,
          limit: 200,
          nowPage: 1,
          show: false
        },
        noCashUserList: [],
        chooseGoodDialogObj: {
          show: false,
          code: ''
        }
      }
    },
    filters: {
      sourceType(value){
        if (value.toLowerCase() === 'user'){
           return '用户'
        } else if (value.toLowerCase() === 'teacher') {
           return '老师'
        } else {
            return value
        }
      },
      isWithdraw(value){
        if (value === 1){
          return '是'
        } else {
          return '否'
        }
      }
    },
    created(){
      this.getList()
    },
    methods:{
      getList(){
        let json = {
          limit: this.limit,
          page: this.nowPage
        }
        getSourceListApi(json).then(res=>{
          if (res) {
            this.sourceList = res.list ? res.list : [];
            this.total = res.total;
          }
        })
      },
      onPageChange(val){
        this.nowPage = val
        this.getList()
      },
      onSizeChange(val){
        this.nowPage = 1
        this.limit = val
        this.getList()
      },
      onSelectUser(){
        this.userDialog.show = true;
        if(this.dialog.form.no_cash_user) {
          this.multipleSelection =  this.dialog.form.no_cash_user.split(',');
        } else {
          this.multipleSelection = []
        }
        this.getUser();
      },
      onUserPageChange(val){
        this.userDialog.nowPage = val
        this.getUser()
      },
      onUserSizeChange(val){
        this.userDialog.nowPage = 1
        this.userDialog.limit = val
        this.getUser()
      },
      handleSelectionChange(val) {
        this.multipleSelection = val;
      },
      onConfirm(){
        let _list = this.multipleSelection;

        if(_list.length === 0) {

        } else {
          let _userIds = [];
          _list.forEach((item)=>{
            _userIds.push(item.user_id)
          })
          let _tmp = _userIds
          if (this.dialog.form.no_cash_user) {
            _tmp = _userIds.concat(this.stringToInt(this.dialog.form.no_cash_user.split(',')));
          }
          let _result = this.dedupe(_tmp);
          this.dialog.form.no_cash_user = _result.join(',');
          this.userDialog.show = false;
        }
      },
      stringToInt(list){
        let _list = list || [];
        _list = _list.map((val)=>{
          return parseInt(val, 10)
        })
        return _list;
      },
      dedupe(array){
        return Array.from(new Set(array));
      },
      getUser(){
        let json = {
          page: this.userDialog.nowPage,
          limit: this.userDialog.limit
        };
        if (this.searchUserFrom.userId) {
          json.user_id = this.searchUserFrom.userId
        }
        if (this.searchUserFrom.nickName) {
          json.nickname = this.searchUserFrom.nickName
        }
        if (this.searchUserFrom.mobile) {
          json.mobile = this.searchUserFrom.mobile
        }
        getUserListApi(json).then(res=>{
          this.userList = res.list;
          this.userDialog.total = res.total;
        })
      },
      getNoCashUser(ids){
        let json = {
          page: this.noCashUserDialog.nowPage,
          limit: this.noCashUserDialog.limit
        };
        if (ids) {
          json.user_id = ids
        }
        getUserListApi(json).then(res=>{
          this.noCashUserList = res.list;
          this.noCashUserDialog.total = res.total;
          this.noCashUserDialog.show = true;
        })
      },
      edit(data){
        this.dialog.show = true;
        this.dialog.form.id = data.id;
        this.dialog.title = '编辑来源码';
        this.dialog.form.title = data.title;
        this.dialog.form.code = data.code;
        this.dialog.form.is_withdraw = data.is_withdraw === 1;
        this.dialog.form.desc = data.desc;
        this.dialog.form.no_cash_user = data.no_cash_user;
      },
      add(){
        this.dialog.show = true;
        this.dialog.form.id = '';
        this.dialog.title = '新增来源码';
        this.dialog.form.title = '';
        this.dialog.form.code = 'USER';
        this.dialog.form.is_withdraw = false;
        this.dialog.form.desc = '';
        this.dialog.form.no_cash_user = '';
      },
      del(data){
        this.$confirm('此操作将删除该来源码?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          delSourceApi(data.id).then(res=>{
            this.$message({
              type: 'success',
              message: '删除成功!'
            });
            this.getList()
          });
        });
      },
      sub(){
        this.$refs['form'].validate((valid) => {
          if(valid){
            let dia = this.dialog;
            if(dia.form.id){
              let json = {
                title:dia.form.title,
                code:dia.form.code,
                is_withdraw:dia.form.is_withdraw ? 1 : 0,
                desc:dia.form.desc
              };
              if (dia.form.no_cash_user) {
                json.no_cash_user = dia.form.no_cash_user
              }
              this.$confirm('此操作将修改该来源码?', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning'
              }).then(() => {
                updateSourceApi(dia.form.id,json).then(()=>{
                  this.$message({
                    type: 'success',
                    message: '修改成功!'
                  });
                  dia.show = false;
                  this.getList()
                })
              })
            }else{
              let json = {
                title:dia.form.title,
                code:dia.form.code,
                no_cash_user:dia.form.no_cash_user,
                is_withdraw:dia.form.is_withdraw ? 1 : 0,
                desc:dia.form.desc
              };
              this.$confirm('此操作将添加来源码?', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning'
              }).then(() => {
                addSourceApi(json).then(()=>{
                  this.$message({
                    type: 'success',
                    message: '添加成功!'
                  });
                  dia.show = false;
                  this.getList()
                })
              })
            }
          }
        })
      },
      goToOrder(code){
        this.$router.push('/order?code='+ code);
      },
      changeShow(){
        this.chooseGoodDialogObj.show = false;
        this.chooseGoodDialogObj.code = '';
      },
      createInviteLink(code){
        this.chooseGoodDialogObj.show = true;
        this.chooseGoodDialogObj.code = `CC-${code}`;
      }
    }
  }
</script>

<style scoped lang="less">
  .menu{
  .head{
    margin-bottom: 10px;
  }
  padding: 20px 0;
  .page-div{
    text-align: center;
    padding-top: 20px
  }
  }
  .clear-both{
  &:after{
     content: '';
     display: block;
     clear: both;
   }
  }
</style>