<template>
  <div class="context">
    <div class="panel">
      <h5>会员管理</h5>
      <div class="panel-body">
        <div class="panel_control">
          <el-row :gutter="1">
            <el-col :span="4" align="center">
              <em>姓名:</em>
              <el-input v-model="panel.name" placeholder="请输入姓名"/>
            </el-col>
            <el-col :span="4">
              <em>手机号:</em>
              <el-input v-model="panel.phone" placeholder="请输入手机号" type="number"></el-input>
            </el-col>
            <el-col :span="3">
              <em>会员类型:</em>
              <el-select v-model="panel.vipType">
                <el-option v-for="item in panel.vipOptions" :key="item.value" :label="item.label"
                           :value="item.value">
                </el-option>
              </el-select>
            </el-col>
            <el-col :span="3">
              <em>到期日:</em>
              <el-select v-model="panel.expDay">
                <el-option v-for="item in panel.endTypeOptions" :key="item.value" :label="item.label"
                           :value="item.value">
                </el-option>
              </el-select>
            </el-col>
            <el-col :span="2">
              <el-button size="" type="primary" @click="query" plain :disabled="serachBtnStatus">查询
              </el-button>
            </el-col>
          </el-row>
        </div>
      </div>
    </div>
    <div class="change">
      <el-button @click="addMember" v-if="userLevel != 4" type="primary" size="mini">新增会员</el-button>
      <el-button @click="delList" v-if="userLevel != 4" size="mini">删除会员</el-button>
      <el-button @click="lessonChange" v-if="userLevel != 4" size="mini">课时调整</el-button>
      <el-button @click="giftChange" v-if="userLevel != 4" size="mini">赠送课时调整</el-button>
      <el-button @click="ExpTimeChange" v-if="userLevel != 4" size="mini">有效期调整</el-button>
      <el-button @click="lessonStudenChange" v-if="userLevel != 4" size="mini">增删会员可预约课程</el-button>
      <!--            <el-button class="pull-right" icon="el-icon-position">导出</el-button>-->
    </div>
    <div class="table">
      <el-table :data="tableData" border is-horizontal-resize :default-sort="{prop: 'date', order: 'descending'}"
                element-loading-background="rgba(0, 0, 0, 0.8)" @selection-change="handleSelectionChange"
                @current-change="clickChange">
        >
        <el-table-column label="选择" width="55" fixed>
          <template slot-scope="scope">
            <el-radio v-model="tableRadio" :label="scope.row"><i></i></el-radio>
          </template>
        </el-table-column>
        <!-- <el-table-column
                type="index"
                label="序号"
                align="center"
                width="50"
        >
        </el-table-column> -->
        <el-table-column label="序号" type="index" width="50" align="center" fixed>
          <template scope="scope">
            <span>{{(start) + scope.$index + 1}}</span>
          </template>
        </el-table-column>
        <el-table-column prop="UserInfo.Name" label="会员名" width="90" fixed>
        </el-table-column>
        <el-table-column prop="UserInfo.Phone" label="手机号" width="110" sortable fixed>
        </el-table-column>
        <el-table-column prop="UserInfo.head" label="头像" width="50">
          <template slot-scope="scope">
            <div class="demo-image__preview" v-if="scope.row.UserInfo.Head">
              <el-image style="width: 25px; height: 25px" :src="scope.row.UserInfo.Head"
                        :preview-src-list="[scope.row.UserInfo.Head]">
              </el-image>
            </div>
            <img src="../assets/img/nav/head.png" alt="" v-else width="25px" height="25px">
          </template>
        </el-table-column>
        <el-table-column prop="UserInfo.VipType" label="类型" align="center" width="80px" sortable>
          <template slot-scope="scope">
            <span v-if="scope.row.UserInfo.VipType == 1">年费</span>
            <span v-if="scope.row.UserInfo.VipType == 2">充值</span>
          </template>
        </el-table-column>
        <el-table-column prop="UserInfo.ExpTime" label="会员有效期" width="115" :formatter="filterFmtDate" sortable>
        </el-table-column>
        <el-table-column prop="UserInfo.RemainNormalhour" label="剩余课时" width="105" sortable>
        </el-table-column>
        <el-table-column prop="UserInfo.RemainGifthour" label="剩余赠送" width="105" sortable>
        </el-table-column>
        <el-table-column prop="UserInfo.ConsumeNormalhour" label="消费课时" width="105" sortable>
        </el-table-column>
        <el-table-column prop="UserInfo.ConsumeGifthour" label="消费赠送" width="105" sortable>
        </el-table-column>
        <el-table-column prop="ClassInfo" label="会员课程" width="220px">
          <template slot-scope="scope">
                        <span class="lessonSpan" :style="{background:lesson.ClassColor}"
                              v-for="lesson in scope.row.ClassInfo">{{ lesson.ClassName }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="UserInfo.IsAcross" label="跨店会员" width="105" sortable>
          <template slot-scope="scope">
            <span v-if="scope.row.UserInfo.IsAcross == 0" class="green">本店用户</span>
            <span v-else class="red">跨店用户</span>
          </template>
        </el-table-column>
        <!-- <el-table-column
                prop="TakeId"
                label="Take绑定"
                width="105"
                sortable
        >
            <template slot-scope="scope">
                <span v-if="scope.row.UserInfo.TakeId == 0" class="red">未绑定</span>
                <span v-else>已绑定</span>
            </template>
        </el-table-column> -->
        <el-table-column prop="UserInfo.Memo" label="备注">
          <template slot-scope="scope">
            <el-popover placement="top" title="" width="200" trigger="hover"
                        :content="scope.row.UserInfo.Memo">
                            <span slot="reference" v-if="scope.row.UserInfo.Memo.length > 6">{{
                                scope.row.UserInfo.Memo.substr(0, 6) }} ....</span>
            </el-popover>
            <span v-if="scope.row.UserInfo.Memo.length <= 6">{{ scope.row.UserInfo.Memo }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="UserInfo.Status" label="操作" width="120px">
          <template slot-scope="scope">
            <el-button class="btn" type="default" size="mini" @click="editMember(scope.row)"
                       v-if="userLevel != 4">编辑
            </el-button>
            <el-button class="btn" type="danger" v-if="scope.row.UserInfo.Status == 1" size="mini"
                       @click="pauseRow(scope.row)">
              禁用
            </el-button>
            <el-button class="btn" type="success" v-if="scope.row.UserInfo.Status == 8" size="mini"
                       @click="runRow(scope.row)">
              启用
            </el-button>
            <!-- <el-button class="btn" type="primary" size="mini"
                       @click="addTake(scope.row)">Take绑定
            </el-button> -->
            <el-button class="btn relevance" type="default" size="mini" @click="goRelevance(scope.row)">
              关联手机号
            </el-button>
          </template>
        </el-table-column>
      </el-table>
      <br>
      <div v-if="pageshow">
        <el-pagination background :total="pageination.total" :page-size="pageination.pageItem"
                       @current-change="pageChange" :current-page.sync="cur_page"></el-pagination>
      </div>
    </div>

    <el-dialog :title="dialogTitle" :visible.sync="dialogMemberVisible"
               :width="form.btnType == 1 ?'650px':'1200px'">
      <div class="dialogContent">
        <div :class="['pull-left',{'tabwild':form.btnType == 1}]">
          <el-form ref="form" :model="form" label-width="80px">
            <el-form-item label="手机号" :required="true">
              <el-input v-model="form.phone" @blur="getUsrInfoList()"></el-input>
            </el-form-item>
            <el-form-item label="会员名" :required="true">
              <el-input v-model="form.name"></el-input>
            </el-form-item>
            <el-form-item label="会员类型" v-if="form.btnType == 0">
              <el-select v-model="form.vipType" placeholder="请选择所属门店">
                <el-option v-for="item in memberTypes" :key="item.value" :label="item.label"
                           :value="item.value"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="课时" v-if="form.btnType == 0">
              <el-input-number v-model="form.normalhour " :min="0" :max="99999" label="（天）">
              </el-input-number>
            </el-form-item>
            <el-form-item label="赠送课时" v-if="form.btnType == 0">
              <el-input-number v-model="form.gifthour " :min="0" :max="99999" label="（天）">
              </el-input-number>
            </el-form-item>
            <el-form-item label="备注">
              <el-input v-model="form.memo"></el-input>
            </el-form-item>
            <el-form-item label="身高" :required="true">
              <el-input v-model="form.height" placeholder="cm" type="number"></el-input>
            </el-form-item>
            <el-form-item label="体重" :required="true">
              <el-input v-model="form.weight" placeholder="kg" type="number"></el-input>
            </el-form-item>
            <el-form-item label="静态心率">
              <el-input v-model="form.staticHr" placeholder="请输入" type="number"></el-input>
            </el-form-item>
            <el-form-item label="性别" :required="true">
              <el-select v-model="form.sex " placeholder="">
                <el-option v-for="item in sexOptions" :key="item.value" :label="item.label"
                           :value="item.value"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="头像" :required="true">
              <!--                            <div class="upload">-->
              <!--                                <el-upload-->
              <!--                                        class="avatar-uploader"-->
              <!--                                        :action=domain-->
              <!--                                        :http-request=upqiniu-->
              <!--                                        :show-file-list="false"-->
              <!--                                        :before-upload="beforeUpload">-->
              <!--                                    &lt;!&ndash;<i v-else class="el-icon-plus avatar-uploader-icon"></i>&ndash;&gt;-->
              <!--                                </el-upload>-->
              <img v-if="imageUrl" :src="imageUrl" class="avatar">
              <cropper :width="300" :height="300" :fixed-number="[1,1]" @subUploadSucceed="getShopImages">
              </cropper>
              <!--<ImgCutter v-on:cutDown="cutDown"></ImgCutter>-->
              <!--                            </div>-->
            </el-form-item>
            <el-form-item label="出生年份" :required="true">
              <el-date-picker v-model="form.birthday" align="right" type="date" placeholder="选择日期">
              </el-date-picker>
            </el-form-item>
          </el-form>
        </div>
        <div class="pull-right" v-if="form.btnType == 0 && pullRight">
          <el-form ref="form" :model="form" label-width="10px">
            <el-form-item label="">
              <el-transfer filterable v-model="form.classlist" :data="form.dialogdata"
                           :titles="['全部课程','已选课程']"></el-transfer>
            </el-form-item>
          </el-form>
        </div>
      </div>
      <div class="dialogFooter">
        <el-button :disabled="addDisabled" type="primary" size="small" v-if="form.btnType == 0"
                   @click="confirmMember">确定
        </el-button>
        <el-button type="primary" size="small" v-if="form.btnType == 1" @click="confirmEditMember">确定
        </el-button>
        <el-button size="small" @click="dialogMemberVisible = false">取消</el-button>
      </div>
    </el-dialog>

    <el-dialog :visible.sync="dialogVisible" width="650px">
      <div class="dialogTitle">
        <h5>
          用户：
          <em class="blue">【 {{ form.rowName }}】</em>
          <br>
          <br>
          <span v-if="dialogLesson">当前课时 {{ form.normalhour }}</span>
          <span v-if="dialogGift">赠送课时 {{ form.gifthour }}</span>
          <span v-if="dialogExpTime">当前到期时间</span>
          <span v-if="dialogLessonTable">增删会员可预约课程</span>
        </h5>
      </div>
      <div v-if="dialogLesson">
        <el-input-number v-model="form.newnormalhour" :min="-9999" :max="9999" label="课时调整"></el-input-number>
      </div>
      <div v-if="dialogGift">
        <el-input-number v-model="form.newgifthour" :min="-9999" :max="9999" label="赠送课时调整"></el-input-number>
      </div>
      <div v-if="dialogExpTime">
        <el-date-picker v-model="form.expTime" type="date" placeholder="选择日期">
        </el-date-picker>
      </div>
      <div v-if="dialogLessonTable">
        <el-transfer filterable v-model="form.dialogValue" :data="form.dialogdata" :titles="['全部课程','已选课程']">
        </el-transfer>
      </div>
      <div class="dialogFooter">
        <!--课时调整-->
        <el-button type="primary" size="small" @click="confirmLesson" v-if="dialogLesson">确定</el-button>
        <!--赠送课时调整-->
        <el-button type="primary" size="small" @click="confirmGift" v-if="dialogGift">确定</el-button>
        <!--                有效期调整-->
        <el-button type="primary" size="small" @click="confirmExpTime" v-if="dialogExpTime">确定</el-button>
        <!--                课程增删-->
        <el-button type="primary" size="small" @click="confirmLessonTable" v-if="dialogLessonTable">确定
        </el-button>
        <el-button size="small" @click="dialogVisible = false">取消</el-button>
      </div>
    </el-dialog>

    <el-dialog title="Take绑定" :visible.sync="TakeVisible" width="650px">
      <div>
        <el-select v-model="Takevalue" placeholder="请选择">
          <el-option v-for="item in Takeoptions" :key="item.Id" :label="item.Name + item.PhoneNo"
                     :value="item.Id">
          </el-option>
        </el-select>
      </div>
      <div class="dialogFooter">
        <!--take绑定调整-->
        <el-button type="primary" size="small" @click="confirmTake">确定</el-button>
        <el-button size="small" @click="TakeVisible = false">取消</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import Global from '../Global.js'
import ImgCutter from 'vue-img-cutter'
import {
  VipUserListQuery,
  ClassListQuery,
  VipUserAdd,
  VipUserStatusEdit,
  VipUserEdit,
  VipUserHourEdit,
  VipUserExpEdit,
  VipUserClassEdit,
  QueryTakeCustomerByName,
  BindTakeCustomer,
  VipUserQueryByPhone,
  testTable,
  testSelect
} from "../api/getApiRes";
import cropper from '@/components/cropper.vue'

let qs = require('qs');
export default {
  data() {
    return {
      imageUrl: '',
      token: {}, // 七牛云的上传地址，根据自己所在地区选择，我这里是华南区
      domain: 'https://up-z1.qiniup.com', // 这是七牛云空间的外链默认域名
      qiniuaddr: 'xhead.beswell.com',//xhead.beswell.com 旧的 qjzpcd34v.hb-bkt.clouddn.com
      pullRight: true,//其他dialog
      addDisabled: true,//禁止添加新用户
      dialogVisible: false,//其他dialog
      TakeVisible: false,//take dialog
      dialogMemberVisible: false,//新增会员dialog
      dialogLesson: false,//课时调整
      dialogGift: false,//赠送课时调整
      dialogExpTime: false,//有效期调整
      dialogLessonTable: false,//会员课程
      dialogTitle: '新增会员',
      dialogValue: [],
      Takevalue: 0,
      Takeoptions: [],
      TakeHid: 0,
      start: 0,
      draw: 1,
      cur_page: 1,
      pageshow: true,
      sexOptions: [
        { value: 1, label: '男' },//性别 1：男， 2：女
        { value: 2, label: '女' },
      ],
      yearOptions: getyearOptions(15),
      // panel 配置项目
      panel: {
        usercode: '',
        username: '',
        compname: '',
        keyword: '',
        USERCODE: '',
        endType: '',
        taskstatus: 99,
        draw: 1,
        start: 0,
        recordsTotal: 0,
        tableData: [],
        allTableData: [],
        limit: '10',
        multipleSort: false,
        loading: false,
        fileList: [],
        multipleSelection: [],
        detectedmac: '',
        vipType: '',
        expDay: '',
        vipOptions: vipOptions(0),
        endTypeOptions: endTypeOptions(),
        time1: globalBt(),
      },
      multipleSelection: [],
      pageination: {
        pageItem: 10,
        pageoptions: pageOptions(),
        total: 10,
        pageIndex: 1,
      },
      form: {
        phone: '',
        name: '',
        userCode: '',
        shopId: '',
        Id: '',
        userId: '',
        height: '',
        weight: '',
        staticHr: '',
        head: '',
        birthday: '',
        sex: 1,
        vipType: 1,
        normalhour: 0,
        newnormalhour: 0,
        gifthour: 0,
        newgifthour: 0,
        btnType: 0,//0新建，1编辑编辑
        memo: '',
        expTime: '',
        classlist: [],
        dialogdata: [],//穿梭待选
        dialogValue: [],//穿梭已选
      },
      memberTypes: vipOptions(1),
      tableData: [],
      tableRadio: [],
      userLevel: localStorage.userLevel,
      serachBtnStatus: false
    }
  },
  mounted() {
    // 加载课程选项
    this.panelSelect();
    // 读取列表
    this.getTableQuery();
  },
  watch: {
    $route(to) {
      if (to.name == 'Member') {
        // 加载课程选项
        this.panelSelect();
        // 读取列表
        this.getTableQuery();
      }
    },
  },
  methods: {
    // 查询用户是否乃跨店用户
    // todo 逻辑
    //  1.新用户正常注册
    //  2.

    getUsrInfoList() {

      // 只有新增的时候启用当前功能
      if (this.form.btnType == 1) {
        return false
      }

      let that = this;
      let param = {
        token: localStorage.token,
        phone: this.form.phone,
      };
      let postdata = qs.stringify(param);
      VipUserQueryByPhone(postdata).then(res => {
        let json = res;
        if (json.Code == 0) {
          let Status = json.Status;
          let Info = json.Info;
          // clear info
          that.pullRight = true;
          that.addDisabled = false;
          that.pullRight = true;
          that.form.name = '';
          that.form.height = '';
          that.form.weight = '';
          that.form.birthday = '';
          that.imageUrl = '';
          that.form.head = '';
          this.form.sex = 1;
          switch (parseInt(Status)) {
            case 1:
              that.$message.error('用户已存在，手机号不能重复添加');
              that.addDisabled = true;
              break;
            case 2:
              that.$message.success('已读取到当前用户信息');
              // 关掉右侧
              that.pullRight = false;
              that.form.name = Info.UserName;
              that.form.height = Info.Height;
              that.form.weight = parseInt(Info.Weight) / 10;
              that.form.birthday = Info.Birthday;
              that.imageUrl = Info.Head;
              that.form.head = Info.Head;
              this.form.sex = Info.Sex;
              break;
            case 3:
              that.$message.error('手机号已经关联其他用户不能重复添加');
              that.addDisabled = true;
              break;
            case 4:
              // 手机号在本店不存在，在其他店也不存在，前台应允许用户填写
              break;
          }
        } else {
          that.$message.error(json.Memo);
        }
      })
    },
    // 关联手机号跳转
    goRelevance(row) {
      this.$router.push({ path: '/relevancePhone', query: { userId: row.UserInfo.Id } });
    },
    cutDown(e) {
      console.log(e);
      this.imageUrl = e.dataURL;
      this.upqiniu(e);
    },
    // 上传文件到七牛云
    upqiniu(req) {
      let that = this;
      const config = {
        headers: { 'Content-Type': 'multipart/form-data' }
      };
      let filetype = '';
      if (req.file.type === 'image/png') {
        filetype = 'png'
      } else {
        filetype = 'jpg'
      }
      // 重命名要上传的文件
      const keyname = 'GoAllOut' + new Date().valueOf() + Math.floor(Math.random() * 100) + '.' + filetype;
      // 从后端获取上传凭证token
      let param = {
        token: localStorage.token,
      };
      let postdata = qs.stringify(param);
      this.axios.post(headapi + 'v1/QiNiu/GetSimpleQiNiuToken', postdata).then(res => {
        const formdata = new FormData();
        formdata.append('file', req.file);
        formdata.append('token', res.data.QiNinToken);
        formdata.append('key', keyname);
        // 获取到凭证之后再将文件上传到七牛云空间
        this.axios.post(this.domain, formdata, config).then(res => {
          this.imageUrl = 'http://' + this.qiniuaddr + '/' + res.data.key;
          this.form.head = 'http://' + this.qiniuaddr + '/' + keyname;
        })
      })
    },
    // 验证文件合法性
    beforeUpload(file) {
      const isJPG = file.type === 'image/jpeg' || file.type === 'image/png';
      const isLt2M = file.size / 1024 / 1024 < 70;
      if (!isJPG) {
        this.$message.error('上传头像图片只能是 JPG 格式!')
      }
      if (!isLt2M) {
        this.$message.error('上传头像图片大小不能超过 70MB!')
      }
      return isJPG && isLt2M
    },
    // 打开take绑定和拉取take数据
    addTake(row) {
      let that = this;
      let param = {
        token: localStorage.token,
        userId: row.UserInfo.Id,
      };
      this.TakeHid = row.UserInfo.HId;
      let postdata = qs.stringify(param);
      QueryTakeCustomerByName(postdata).then(res => {
        let json = res;
        if (json.Code == 0) {
          if (json.Rs != '') {
            that.Takeoptions = json.Rs;
            that.Takevalue = json.Rs[0].Id;
            // 有值才能打开
            this.TakeVisible = true;
          } else {
            that.$message.error('当前用户没有可用的Take账号');
            this.TakeVisible = false;
            console.log('null');
          }
        } else {
          that.$message.error(json.Memo + ' 错误码：' + json.Code);
        }
      })
    },
    // 绑定take
    confirmTake() {
      let that = this;
      let param = {
        token: localStorage.token,
        hId: this.TakeHid,
        customerId: this.Takevalue,
        memo: '后台管理手动绑定',
      };
      let postdata = qs.stringify(param);
      BindTakeCustomer(postdata).then(res => {
        let json = res;
        if (json.Code == 0) {
          that.$message({
            showClose: true,
            message: 'Take绑定成功！',
            type: 'success'
          });
          this.TakeVisible = false;
          // 读取列表
          this.getTableQuery();
        } else {
          that.$message.error(json.Memo + ' 错误码：' + json.Code);
        }
      })
    },

    clickChange(item) {
      this.tableRadio = item
    },
    // 编辑
    editMember(row) {
      let that = this;
      this.clearForm();
      this.form.phone = row.UserInfo.Phone;
      this.form.name = row.UserInfo.Name;
      this.form.memo = row.UserInfo.Memo;
      this.imageUrl = row.UserInfo.Head;
      this.form.height = row.UserInfo.Height;
      this.form.weight = parseInt(row.UserInfo.Weight) / 10;
      this.form.staticHr = row.UserInfo.StaticHr;
      this.form.sex = row.UserInfo.Sex;
      this.form.birthday = row.UserInfo.Birthday;
      this.form.ubId = row.UserInfo.UbId;
      this.form.btnType = 1;
      this.form.shopId = row.UserInfo.ShopId;
      this.form.Id = row.UserInfo.Id;
      this.dialogMemberVisible = true;
      this.dialogTitle = '编辑会员'
    },
    // 禁用
    pauseRow(row) {
      let that = this;
      this.$confirm('是否禁用用户' + row.UserInfo.Name + '？', '禁用操作', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        let param = {
          token: localStorage.token,
          userId: row.UserInfo.Id,
          status: 8,//状态 8：禁用 1：启用 9：删除
        };
        let postdata = qs.stringify(param);
        VipUserStatusEdit(postdata).then(res => {
          let json = res;
          if (json.Code == 0) {
            that.$message({
              showClose: true,
              message: row.UserInfo.Name + '禁用成功！',
              type: 'success'
            });
            // table 重载
            that.getTableQuery();
          } else {
            that.$message.error(json.Memo + ' 错误码：' + json.Code);
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消禁用'
        });
      });
    },
    // 启用
    runRow(row) {
      let that = this;
      this.$confirm('是否启用用户' + row.UserInfo.Name + '？', '启用操作', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        let param = {
          token: localStorage.token,
          userId: row.UserInfo.Id,
          status: 1,//状态 8：禁用 1：启用 9：删除
        };
        let postdata = qs.stringify(param);
        VipUserStatusEdit(postdata).then(res => {
          let json = res;
          if (json.Code == 0) {
            that.$message({
              showClose: true,
              message: row.UserInfo.Name + '启用成功！',
              type: 'success'
            });
            // table 重载
            that.getTableQuery();
          } else {
            that.$message.error(json.Memo + ' 错误码：' + json.Code);
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消启用'
        });
      });
    },
    // 关闭所有
    allDialogClose() {
      this.dialogVisible = false;
      this.dialogGift = false;
      this.dialogLesson = false;
      this.dialogExpTime = false;
      this.dialogLessonTable = false;
    },
    // 有效期调整
    ExpTimeChange() {
      // 仅针对年费用户，使用日期格式
      this.allDialogClose();
      if (this.tableRadio.length == 0) {
        this.$message.error("请先选中一条记录");
        return false
      }
      let row = this.tableRadio;
      if (parseInt(row.UserInfo.VipType) == 2) {
        this.$message({
          showClose: true,
          message: '错了哦，充值会员不能调整有效期',
          type: 'error'
        });
        return false
      }
      this.form.rowName = row.UserInfo.Name;
      this.form.userId = row.UserInfo.Id;
      this.form.expTime = row.UserInfo.ExpTime
      this.dialogVisible = true;
      this.dialogExpTime = true;
    },
    // 课时调整
    lessonChange() {
      this.allDialogClose();
      if (this.tableRadio.length == 0) {
        this.$message.error("请先选中一条记录");
        return false
      }
      let row = this.tableRadio;
      this.form.normalhour = row.UserInfo.RemainNormalhour;
      this.form.newnormalhour = 0;
      this.form.rowName = row.UserInfo.Name;
      this.form.userId = row.UserInfo.Id;
      this.dialogVisible = true;
      this.dialogLesson = true;

    },
    // 赠送调整
    giftChange() {
      this.allDialogClose();
      if (this.tableRadio.length == 0) {
        this.$message.error("请先选中一条记录");
        return false
      }
      let row = this.tableRadio;
      this.form.gifthour = row.UserInfo.RemainGifthour;
      this.form.newgifthour = 0;
      this.form.rowName = row.UserInfo.Name;
      this.form.userId = row.UserInfo.Id;
      this.dialogVisible = true;
      this.dialogGift = true;

    },
    // 增删会员课程
    lessonStudenChange() {
      let that = this;
      this.allDialogClose();
      // 重载课程列表选项
      this.form.dialogValue = [];
      this.panelSelect();
      if (this.tableRadio.length == 0) {
        that.$message.error("请先选中一条记录");
        return false
      }
      let row = this.tableRadio;
      this.form.rowName = row.UserInfo.Name;
      this.form.userId = row.UserInfo.Id;
      if (row.ClassInfo) {
        row.ClassInfo.map(function (item) {
          that.form.dialogValue.push(item.ClassId)
        })
      }
      this.dialogVisible = true;
      this.dialogLessonTable = true;
    },
    // 确认提交新增会员
    confirmMember() {
      let that = this;
      // checkNum
      if (!that.form.phone) {
        this.$message.error('错了哦，手机号不能为空');
        return false
      }
      if (!globalCheckPhone(that.form.phone)) {
        this.$message.error('错了哦，手机号格式不正确');
        return false
      }
      if (!that.form.name) {
        this.$message.error('错了哦，会员名不能为空');
        return false
      }
      if (that.form.name.length > 8) {
        this.$message.error('错了哦，会员名字数超过8个字');
        return false
      }
      if (that.form.memo) {
        if (that.form.memo.length > 200) {
          this.$message.error('错了哦，备注字数超过200个字');
          return false
        }
      }

      if (!that.form.height) {
        this.$message.error('错了哦，身高不能为空');
        return false
      }
      if (!that.form.weight) {
        this.$message.error('错了哦，体重不能为空');
        return false
      }
      // if (!that.form.staticHr) {
      //     this.$message.error('错了哦，静态心率不能为空');
      //     return false
      // }
      if (!that.form.birthday) {
        this.$message.error('错了哦，出生年份不能为空');
        return false
      }

      // 课程添加使用字符串形式
      let curClasslist = '';
      if (that.form.classlist) {
        curClasslist = that.form.classlist.toString();
      }
      let param = {
        token: localStorage.token,
        shopId: localStorage.shopId,
        phone: that.form.phone,
        name: that.form.name,
        vipType: that.form.vipType,
        normalhour: that.form.normalhour,
        gifthour: that.form.gifthour,
        classlist: curClasslist,
        memo: that.form.memo,
        height: that.form.height,
        weight: that.form.weight,
        staticHr: that.form.staticHr,
        sex: that.form.sex,
        head: that.form.head,
        birthday: nonTfmtDatetoLength(that.form.birthday, 10),
      };
      let postdata = qs.stringify(param);
      VipUserAdd(postdata).then(res => {
        let json = res;
        if (json.Code == 0) {
          // 关闭弹窗
          that.dialogMemberVisible = false;
          // 重载列表
          that.getTableQuery();
          that.$message({
            showClose: true,
            message: '会员添加成功！',
            type: 'success'
          });
        } else {
          that.$message.error(json.Memo + ' 错误码：' + json.Code);
        }
      })
    },
    confirmEditMember() {
      let that = this;
      // checkNum
      if (!that.form.phone) {
        this.$message.error('错了哦，手机号不能为空');
        return false
      }
      if (!globalCheckPhone(that.form.phone)) {
        this.$message.error('错了哦，手机号格式不正确');
        return false
      }
      if (!that.form.name) {
        this.$message.error('错了哦，会员名不能为空');
        return false
      }
      if (that.form.name.length > 8) {
        this.$message.error('错了哦，会员名字数超过8个字');
        return false
      }
      if (that.form.memo) {
        if (that.form.memo.length > 200) {
          this.$message.error('错了哦，备注字数超过200个字');
          return false
        }
      }

      if (!that.form.height) {
        this.$message.error('错了哦，身高不能为空');
        return false
      }
      if (!that.form.weight) {
        this.$message.error('错了哦，体重不能为空');
        return false
      }
      // if (!that.form.staticHr) {
      //     this.$message.error('错了哦，静态心率不能为空');
      //     return false
      // }
      if (!that.form.birthday) {
        this.$message.error('错了哦，出生年份不能为空');
        return false
      }
      let param = {
        token: localStorage.token,
        userId: that.form.Id,
        phone: that.form.phone,
        name: that.form.name,
        memo: that.form.memo,
        head: that.form.head,
        height: that.form.height,
        weight: that.form.weight,
        staticHr: that.form.staticHr,
        sex: that.form.sex,
        birthday: nonTfmtDatetoLength(that.form.birthday, 10),
        ubId: that.form.ubId
      };
      let postdata = qs.stringify(param);
      console.log(param);
      VipUserEdit(postdata).then(res => {
        let json = res;
        if (json.Code == 0) {
          // 关闭弹窗
          that.dialogMemberVisible = false;
          // 重载列表
          that.getTableQuery();
          that.$message({
            showClose: true,
            message: '会员信息编辑成功！',
            type: 'success'
          });
        } else {
          that.$message.error(json.Memo + ' 错误码：' + json.Code);
        }
      })
    },
    // 确认提交课时
    confirmLesson() {
      let that = this;
      // checkNum
      let param = {
        token: localStorage.token,
        userId: that.form.userId,
        chgHour: that.form.newnormalhour,
        chgType: 1,//课时类型 1：普通课时 2:赠送课时
      };
      let postdata = qs.stringify(param);
      VipUserHourEdit(postdata).then(res => {
        let json = res;
        if (json.Code == 0) {
          // 关闭弹窗
          that.dialogVisible = false;
          // 重载列表
          that.getTableQuery();
          that.$message({
            showClose: true,
            message: '课时调整成功！',
            type: 'success'
          });
        } else {
          that.$message.error(json.Memo + ' 错误码：' + json.Code);
        }
      })
    },
    // 确认提交赠送
    confirmGift() {
      let that = this;
      let param = {
        token: localStorage.token,
        userId: that.form.userId,
        chgHour: that.form.newgifthour,
        chgType: 2,//课时类型 1：普通课时 2:赠送课时
      };
      let postdata = qs.stringify(param);
      VipUserHourEdit(postdata).then(res => {
        let json = res;
        if (json.Code == 0) {
          // 关闭弹窗
          that.dialogVisible = false;
          // 重载列表
          that.getTableQuery();
          that.$message({
            showClose: true,
            message: '赠送课时调整成功！',
            type: 'success'
          });
        } else {
          that.$message.error(json.Memo + ' 错误码：' + json.Code);
        }
      })
    },
    // 确认提交有效期
    confirmExpTime() {
      let that = this;
      // checkNum
      let param = {
        token: localStorage.token,
        userId: that.form.userId,
        expTime: nonTfmtDate(that.form.expTime, 16),
      };
      let postdata = qs.stringify(param);
      VipUserExpEdit(postdata).then(res => {
        let json = res;
        if (json.Code == 0) {
          // 关闭弹窗
          that.dialogVisible = false;
          // 重载列表
          that.getTableQuery();
          that.$message({
            showClose: true,
            message: '赠送课时调整成功！',
            type: 'success'
          });
        } else {
          that.$message.error(json.Memo + ' 错误码：' + json.Code);
        }
      })
    },
    // 确认提交会员课程
    confirmLessonTable() {
      let that = this;
      // checkNum
      let classList = that.form.dialogValue ? that.form.dialogValue.toString() : '';

      let param = {
        token: localStorage.token,
        userId: that.form.userId,
        classList: classList,
      };
      let postdata = qs.stringify(param);
      VipUserClassEdit(postdata).then(res => {
        let json = res;
        if (json.Code == 0) {
          // 关闭弹窗
          that.dialogVisible = false;
          // 重载列表
          that.getTableQuery();
          that.$message({
            showClose: true,
            message: '会员课程调整成功！',
            type: 'success'
          });
        } else {
          that.$message.error(json.Memo + ' 错误码：' + json.Code);
        }
      })
    },
    // 加载课程列表选项
    panelSelect() {
      let that = this;
      let param = {
        token: localStorage.token,
        vipType: '',
        classType: 1,//不显示 午饭类 课程
        start: 1,
        expDay: 0,
        tableMax: 9999,
      };
      let postdata = qs.stringify(param);
      ClassListQuery(postdata).then(res => {
        let json = res;
        if (json.Code == 0) {
          if (json.Rs == null) return false
          that.form.dialogdata = turnClassResToOption(json.Rs);
        } else {
          that.$message.error(json.Memo + ' 错误码：' + json.Code);
        }
      })
    },
    // 新增会员
    addMember() {
      this.clearForm();
      this.panelSelect();
      this.dialogMemberVisible = true;
      this.btnType = 0;
      this.form.btnType = 0;
      this.dialogTitle = '新增会员'
    },
    // 删除
    delList() {
      let that = this;
      if (this.tableRadio.length == 0) {
        that.$message.error("请先选中一条记录");
        return false
      }
      let detectorid = this.tableRadio.UserInfo.Id;

      let param = {
        token: localStorage.token,
        userId: detectorid,
        status: 9,//0禁用1启用9删除
      };
      let postdata = qs.stringify(param);

      this.$confirm('此操作将永久删除该会员, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        VipUserStatusEdit(postdata).then(res => {
          let json = res;
          if (json.Code == 0) {
            that.$message({
              showClose: true,
              message: '选中的会员已删除！',
              type: 'success'
            });
            // 重载列表
            that.getTableQuery();
          } else {
            that.$message.error(json.Memo + ' 错误码：' + json.Code);
          }
        });
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    handleSelectionChange(val) {
      this.multipleSelection = val;
    },
    // 查询按钮
    query() {
      let that = this;
      that.start = 0;
      that.cur_page = 1;
      that.serachBtnStatus = true;
      that.getTableQuery();
      this.pageshow = false;//让分页隐藏
      this.$nextTick(() => {//重新渲染分页
        this.pageshow = true;
      });
      that.$message.success('查询完毕');
      let totalTime = 2;
      let clock = window.setInterval(() => {
        totalTime--;
        if (totalTime < 0) {
          totalTime = 2;
          that.serachBtnStatus = false;
        }
      }, 1000)
    },
    clearForm() {
      // clear
      this.form.name = '';
      this.form.head = '';
      this.imageUrl = '';
      this.form.phone = '';
      this.form.memo = '';
      this.form.normalhour = 0;
      this.form.gifthour = 0;
      this.form.height = '';
      this.form.weight = '';
      this.form.staticHr = '';
      this.form.sex = 1;
      this.form.birthday = '';
      this.form.userCode = '';
      this.form.shopId = '';
      this.form.classlist = [];
    },
    // 页面数据查询
    getTableQuery() {
      let that = this;
      that.loading = true;
      let param = {
        token: localStorage.token,
        vipType: that.panel.vipType,//
        phone: that.panel.phone,//
        name: that.panel.name,//
        expDay: that.panel.expDay,//
        start: that.start,//
        tableMax: 10,//
      };
      that.allTableData = [];
      that.recordsTotal = 0;
      let postdata = qs.stringify(param);
      VipUserListQuery(postdata).then(res => {
        let json = res;
        if (json.Code == 0) {
          that.loading = false;
          if (json.Rs) {
            that.allTableData = json.Rs;
            that.recordsTotal = json.PageCount * that.pageination.pageItem;
          } else {
            that.allTableData = [];
            that.recordsTotal = 0;
          }
          // 设置分页数据
          that.setPaginations();
        } else {
          that.$message.error(json.Memo + ' 错误码：' + json.Code);
        }
      })
    },
    // 设置分页数据
    setPaginations() {
      // 分页属性
      let that = this;
      that.pageination.total = that.recordsTotal;
      // 默认分页
      that.tableData = that.allTableData.filter((item, index) => {
        return index < that.pageination.pageItem;
      });
    },
    // 每页显示数量
    handleSizeChange() {
      let that = this;
      that.tableData = that.allTableData.filter((item, index) => {
        return index < that.pageination.pageItem;
      });
      that.draw = that.pageination.pageItem;
      // that.getTableQuery();
    },
    // 翻页
    pageChange(pageIndex) {
      let that = this;
      // 获取当前页
      let index = that.pageination.pageItem * (pageIndex - 1);
      // 数据总数
      let nums = that.pageination.pageItem * pageIndex;
      // 容器
      let tables = [];
      for (var i = index; i < nums; i++) {
        if (that.allTableData[i]) {
          tables.push(that.allTableData[i])
        }
        this.tableData = tables;
      }
      that.start = index * that.draw;
      that.getTableQuery();
    },
    // 过滤时间
    filterFmtDate(value, row, column) {
      let that = this;
      if (column == "0001-01-01T08:05:43+08:05" || column == "0001-01-01T00:00:00Z") {
        return '无有效期';
      } else {
        return nonTfmtDatetoLength(column, 10);
      }
    },
    // 海报上传成功
    getShopImages(url) {
      this.imageUrl = url;
      this.form.head = url;
    }
  },
  components: {
    cropper
  }
}
</script>

<style scoped>
@import "../assets/css/panel.css";

.context {
  border-radius: 12px;
  /*  height: 770px;*/
  overflow-y: scroll;
  display: block;
  margin: 0 auto;
  background-color: #fff !important;
  padding: 30px;
  padding-bottom: 30px;
}

.panel-body {
  padding: 20px;
  background: #F0F2F5;
}

.change {
  width: 100%;
  overflow: hidden;
  display: block;
  margin: 0 auto;
  padding-top: 10px;
  padding-bottom: 10px;
}

.change button {
  float: left;
}

.change button.pull-right {
  float: right;
}

.dialogTitle {
  width: 100%;
  overflow: hidden;
  display: block;
  margin: 0 auto;
  color: #000000;
  font-size: 18px;
  text-align: center;
}

.dialogTitle em {
  float: none;
  font-style: normal;
  color: #3799FF;
  margin: 0;
}

/deep/ .el-transfer-panel__item .el-checkbox__input {
  left: 40px;
}

.dialogFooter {
  width: 90%;
  overflow: hidden;
  display: block;
  margin: 0 auto;
  margin-top: 10px;
}

.dialogFooter button {
  float: right;
  margin-left: 10px;
}

.dialogContent {
  width: 100%;
  overflow: hidden;
  display: block;
  margin: 0 auto;
}

.dialogContent .pull-left {
  width: 40%;
  float: left;
}

.dialogContent .pull-right {
  width: 60%;
  float: right;
}

.tabwild {
  width: 100% !important;
  overflow: hidden;
  display: block;
  margin: 0 auto;
}

.lessonSpan {
  width: 78px;
  height: 22px;
  border-radius: 11px;
  margin-right: 5px;
  float: left;
  margin-bottom: 3px;
  text-align: center;
  color: #000;
  font-size: 12px;
}

.btn {
  float: left !important;
  margin-right: 5px;
}

/deep/ table .el-button+.el-button {
  margin-left: 0;
  margin-right: 3px;
  /*float: left;*/
  padding: 7px 6px;
}

table {
  width: 100%;
  display: block;
  margin: 0 auto;
  overflow: scroll;

}

.pull-left /deep/ .el-form .el-form-item {
  width: 50%;
  float: left;
}

.pull-left /deep/ .el-form-item__content {
  margin-left: 20px;
}

.pull-left .el-input-number {
  width: 130px;
}

.cell img {
  overflow: hidden;
  display: block;
  margin: 0 auto;
}

.el-date-editor.el-input__inner {
  width: 156px;
}

.avatar-uploader {
  /*border: 1px solid #ccc;*/
  cursor: pointer;
  border-radius: 5px;
}

/deep/ .el-upload {
  width: 100%;
  overflow: hidden;
  display: block;
  margin: 0 auto;
}

/deep/ .el-upload img {
  width: 70px;
  height: 70px;
  float: left;
}

.relevance {
  margin-top: 10px;
}
</style>