<template>
  <div>
    <div class="addchild_group" v-if="step == 2">
      <img class="bg" src="@/assets/home/bg2.png" alt="" />
      <p class="title">学校激活认证</p>
      <p class="des">认证通过后，学生研学记录可同步到学校！</p>
      <div class="phone_content">
        <template v-if="cardAuth">
          <div class="item">
            <p class="phone_title">姓名</p>
            <input class="code" type="text" v-model="cardName" placeholder="请输入证件姓名" />
          </div>
          <div class="item">
            <p class="phone_title">身份证号码</p>
            <input class="code" type="text" v-model="cardId" placeholder="请输入身份证号码" />
          </div>
          <button class="submit" @click="checkCard">完成</button>
          <p class="change-btn" @click="cardAuth = false">使用手机号码认证</p>
        </template>
        <template v-else>
          <div class="item">
            <p class="phone_title">手机号</p>
            <div class="flex">
              <input class="code phone" type="tel" maxlength="11" v-model="phone" placeholder="请输入家校联系预留手机号" />
              <span class="getcode" @click="getCode">{{ codeText }}</span>
            </div>
          </div>
          <div class="item">
            <p class="phone_title">验证码</p>
            <input class="code" type="text" v-model="code" placeholder="请输入验证码" />
          </div>
          <button class="submit" @click="checkPhoneAndCode">完成</button>
          <p class="change-btn" @click="cardAuth = true">使用身份证件认证</p>
        </template>
      </div>
    </div>
    <div class="addchild_group" v-if="step == 1">
      <img class="bg" src="@/assets/home/bg2.png" alt="" />
      <p class="title">添加学生信息</p>
      <p class="des">完善相关信息可帮助获得最佳使用体验</p>
      <div class="content">
        <div class="name">学生信息</div>
        <div class="item" style="width:48%;display:inline-flex;margin-right:4%;">
          <input type="text" placeholder="请输入学生姓名" v-model="studentName" />
        </div>
        <div class="item" @click="handleYear" style="width:48%;display:inline-flex;">
          <p :class="!year || yearDisable ? 'nodata' : ''">{{ year ? year : '入学年份' }}</p>
          <img src="@/assets/more.png" alt="" />
        </div>
        <div class="item" @click="showUserTypeSelect = true" style="width:48%;display:inline-flex;margin-right:4%;">
          <p :class="!userType ? 'nodata' : ''">{{ userType ? userType : '当前阶段' }}</p>
          <img src="@/assets/more.png" alt="" />
        </div>
        <div class="item" @click="showUserClassSelect = true" style="width:48%;display:inline-flex;">
          <p :class="!classType ? 'nodata' : ''">{{ classType ? classType : '班级' }}</p>
          <img src="@/assets/more.png" alt="" />
        </div>

        <div class="item" @click="handleSelectArea">
          <p :class="!area ? 'nodata' : ''">{{ area ? area : '请选择地区' }}</p>
          <img src="@/assets/more.png" alt="" />
        </div>
        <div class="item">
          <input type="text" placeholder="请选择学校" readonly v-model="school" />
          <button type="info" class="btn" @click="chooseSchool">选择学校</button>
        </div>
        <button class="submit" @click="submit">完成</button>
      </div>
    </div>
    <van-popup v-model="showUserTypeSelect" round position="bottom" get-container="body" :safe-area-inset-bottom="true">
      <van-picker
        title="当前阶段"
        show-toolbar
        :columns="userTypeArr"
        value-key="label"
        @cancel="showUserTypeSelect = false"
        @confirm="selectUserTypeOver"
      />
    </van-popup>
    <van-popup v-model="showYearSelect" round position="bottom" get-container="body" :safe-area-inset-bottom="true">
      <van-picker
        title="入学年份"
        show-toolbar
        :columns="yearArr"
        value-key="label"
        @cancel="showYearSelect = false"
        @confirm="selectYearOver"
      />
    </van-popup>
    <van-popup v-model="showAreaSelect" round position="bottom" get-container="body" :safe-area-inset-bottom="true">
      <van-cascader
        v-model="area"
        title="请选择所在地区"
        :options="areaList"
        :field-names="fieldNames"
        @close="showAreaSelect = false"
        @finish="selectAreaOver"
      />
    </van-popup>
    <van-popup v-model="showUserClassSelect" round position="bottom" get-container="body" :safe-area-inset-bottom="true">
      <van-picker
        title="班级"
        show-toolbar
        :columns="classTypeArr"
        value-key="label"
        @cancel="showUserClassSelect = false"
        @confirm="selectClassTypeOver"
      />
    </van-popup>

    <van-popup v-model="chooseSchoolisShow" round get-container="body" :safe-area-inset-bottom="true">
      <div v-if="chooseSchoolisShow">
        <chooseSchool v-model="chooseSchoolisShow" @schoolData="schoolData"></chooseSchool>
      </div>
    </van-popup>
  </div>
</template>

<script>
import chooseSchool from '@/views/Service/component/chooseSchool'
import areaList from '@/common/area.json'
var codeInterval
export default {
  components: { chooseSchool },
  props: ['step', 'travelerNum'],
  data() {
    return {
      phone: '',
      codeText: '获取验证码', //获取验证码按钮文字
      code: '', //验证码
      studentName: '',
      showDialog: true,

      year: '', //入学年份
      yearDisable: false,
      showYearSelect: false,
      yearArr: [],

      userType: '',
      userTypeVal: '', //所处阶段1-小学 2-初中 3-高中
      showUserTypeSelect: false,
      userTypeArr: [
        {
          label: '幼儿园',
          value: 0,
        },
        {
          label: '小学',
          value: 1,
        },
        {
          label: '初中',
          value: 2,
        },
        {
          label: '高中',
          value: 3,
        },
      ],

      classType: '',
      classTypeVal: '', //班级
      showUserClassSelect: false,
      classTypeArr: [
        {
          label: '1班',
          value: '1班',
        },
        {
          label: '2班',
          value: '2班',
        },
        {
          label: '3班',
          value: '3班',
        },
        {
          label: '4班',
          value: '4班',
        },
        {
          label: '5班',
          value: '5班',
        },
        {
          label: '6班',
          value: '6班',
        },
        {
          label: '7班',
          value: '7班',
        },
        {
          label: '8班',
          value: '8班',
        },
        {
          label: '9班',
          value: '9班',
        },
        {
          label: '10班',
          value: '10班',
        },
        {
          label: '11班',
          value: '11班',
        },
        {
          label: '12班',
          value: '12班',
        },
        {
          label: '13班',
          value: '13班',
        },
        {
          label: '14班',
          value: '14班',
        },
        {
          label: '15班',
          value: '15班',
        },
        {
          label: '16班',
          value: '16班',
        },
        {
          label: '17班',
          value: '17班',
        },
        {
          label: '18班',
          value: '18班',
        },
        {
          label: '19班',
          value: '19班',
        },
        {
          label: '20班',
          value: '20班',
        },
        {
          label: '21班',
          value: '21班',
        },
        {
          label: '22班',
          value: '22班',
        },
        {
          label: '23班',
          value: '23班',
        },
        {
          label: '24班',
          value: '24班',
        },
        {
          label: '25班',
          value: '25班',
        },
        {
          label: '26班',
          value: '26班',
        },
        {
          label: '27班',
          value: '27班',
        },
        {
          label: '28班',
          value: '28班',
        },
        {
          label: '29班',
          value: '29班',
        },
        {
          label: '30班',
          value: '30班',
        },
        {
          label: '31班',
          value: '31班',
        },
        {
          label: '32班',
          value: '32班',
        },
        {
          label: '33班',
          value: '33班',
        },
        {
          label: '34班',
          value: '34班',
        },
        {
          label: '35班',
          value: '35班',
        },
        {
          label: '36班',
          value: '36班',
        },
        {
          label: '37班',
          value: '37班',
        },
        {
          label: '38班',
          value: '38班',
        },
        {
          label: '39班',
          value: '39班',
        },
        {
          label: '40班',
          value: '40班',
        },
        {
          label: '41班',
          value: '41班',
        },
        {
          label: '42班',
          value: '42班',
        },
        {
          label: '43班',
          value: '43班',
        },
        {
          label: '44班',
          value: '44班',
        },
        {
          label: '45班',
          value: '45班',
        },
        {
          label: '46班',
          value: '46班',
        },
        {
          label: '47班',
          value: '47班',
        },
        {
          label: '48班',
          value: '48班',
        },
        {
          label: '49班',
          value: '49班',
        },
        {
          label: '50班',
          value: '50班',
        },
      ],

      area: '',
      areaCode: '',
      showAreaSelect: false,
      areaList: areaList,
      fieldNames: {
        text: 'area_name',
        value: 'area_name',
        children: 'areaList',
      },

      searchSchool: '',
      school: '',
      schoolId: '',

      chooseSchoolisShow: false,
      cardAuth: false, //是否身份证认证
      cardName: '',
      cardId: '',
    }
  },

  mounted() {
    let userInfo = localStorage.getItem('userInfo')
    this.userInfo = JSON.parse(userInfo)
    this.initYearArr()
  },
  methods: {
    // 获取验证码
    getCode() {
      if (this.codeText != '获取验证码') return
      if (!this.phone) {
        this.$toast('请输入手机号')
        return
      }
      if (!this.checkPhone(this.phone)) {
        this.$toast('请输入正确的手机号')
        return
      }
      this.$toast.loading({
        message: '加载中',
        duration: 0,
        forbidClick: true,
      })
      this.mgop({
        api: 'mgop.sz.hswsy.getMsg', // 必须
        host: 'https://mapi.zjzwfw.gov.cn/',
        dataType: 'JSON',
        type: 'POST',
        appKey: 'fuxgnukl+2001895516+edccpx', // 必须
        headers: {
          //   'isTestUrl': '1'
        },
        data: {
          phone: this.phone,
        },
        onSuccess: (res) => {
          this.$toast.clear()
          if (res.data.code == 200 || res.data.success) {
            let i = 60
            codeInterval = setInterval(() => {
              if (i == 0) {
                this.codeText = `获取验证码`
                clearInterval(codeInterval)
                return
              }
              this.codeText = `重试（${i}）`
              i--
            }, 1000)
          } else {
            this.$toast.fail(res.data?.message)
          }
        },
        onFail: (err) => {
          console.log('err', err)
        },
      })
    },
    // 获取手机号白名单信息,激活认证
    checkPhoneAndCode() {
      if (!this.phone) {
        this.$toast('请输入手机号')
        return
      }
      if (!this.checkPhone(this.phone)) {
        this.$toast('请输入正确的手机号')
        return
      }
      if (!this.code) {
        this.$toast('请输入验证码')
        return
      }
      this.$toast.loading({
        message: '加载中',
        duration: 0,
        forbidClick: true,
      })
      this.mgop({
        api: 'mgop.sz.hswsy.checkPhone', // 必须
        host: 'https://mapi.zjzwfw.gov.cn/',
        dataType: 'JSON',
        type: 'POST',
        appKey: 'fuxgnukl+2001895516+edccpx', // 必须
        headers: {
          //   'isTestUrl': '1'
        },
        data: {
          code: this.code,
          phone: this.phone,
          travelerNum: this.travelerNum,
        },
        onSuccess: (res) => {
          this.$toast.clear()
          if (res.data.code == 200) {
            this.$toast.success('认证成功')
            this.$emit('complete')
          } else {
            this.$toast.fail(res.data?.message)
          }
        },
        onFail: (err) => {
          console.log('err', err)
        },
      })
    },
    // 获取身份证认证
    checkCard() {
      if (!this.cardName) {
        this.$toast('请输入证件姓名')
        return
      }
      if (!this.cardId) {
        this.$toast('请输入身份证号')
        return
      }
      this.$toast.loading({
        message: '加载中',
        duration: 0,
        forbidClick: true,
      })
      this.mgop({
        api: 'mgop.sz.hswsy.checkIdCard', // 必须
        host: 'https://mapi.zjzwfw.gov.cn/',
        dataType: 'JSON',
        type: 'POST',
        appKey: 'fuxgnukl+2001895516+edccpx', // 必须
        headers: {
          //   'isTestUrl': '1'
        },
        data: {
          idCard: this.cardId,
          travelerNum: this.travelerNum,
        },
        onSuccess: (res) => {
          this.$toast.clear()
          if (res.data.code == 200) {
            this.$toast.success('认证成功')
            this.$emit('complete')
          } else {
            this.$toast.fail(res.data?.message)
          }
        },
        onFail: (err) => {
          console.log('err', err)
        },
      })
    },
    // 初始化入学年份选项
    initYearArr() {
      // 页面创建时执行
      let year = new Date().getFullYear(),
        Month = new Date().getMonth() + 1,
        yearArr = []
      if (Month > 8) {
        // 如果月份大于8,那么当年的学年的高考年份要+1,如果月份小于7,那么当前的年份就是今年高考的年份
        year = year
      }
      for (let index = year; index > year - 6; index--) {
        yearArr.push({ value: index, label: index })
      }
      this.yearArr = yearArr
    },
    selectYearOver(value) {
      this.year = value.label
      this.showYearSelect = false
    },
    handleYear() {
      if (!this.yearDisable) {
        this.showYearSelect = true
      }
    },
    selectUserTypeOver(value) {
      this.userType = value.label
      this.userTypeVal = value.value
      this.showUserTypeSelect = false
    },
    //班级选择
    selectClassTypeOver(value) {
      this.classType = value.label
      this.classTypeVal = value.value
      this.showUserClassSelect = false
    },
    selectAreaOver(value) {
      this.area = '浙江省,' + value.selectedOptions[0].area_name + ',' + value.selectedOptions[1].area_name
      this.showAreaSelect = false
    },

    submit() {
      if (!this.studentName) {
        this.$toast('请输入姓名')
      } else if (!this.userType) {
        this.$toast('请选择阶段')
      } else if (!this.classType) {
        this.$toast('请选择班级')
      } else if (!this.year) {
        this.$toast('请选择入学年份')
      } else if (!this.area) {
        this.$toast('请选择地区')
      } else if (!this.school) {
        this.$toast('请选择学校')
      } else {
        let postData = {
          contactsName: this.studentName,
          contactsMobile: this.userInfo?.phone,
          contactsType: 1,
          province: this.area.split(',')[0], //省份
          city: this.area.split(',')[1], //城市
          area: this.area.split(',')[2], //地区
          schoolName: this.school, //学校名称
          enrollYear: this.year, //入学年份
          travelerType: this.userTypeVal, //0 幼儿园 1-小学 2-初中 3-高中
          loginMobile: this.userInfo?.phone,
          className: this.classType, //班级
        }
        this.$toast.loading({
          message: '加载中',
          duration: 0,
          forbidClick: true,
        })
        this.mgop({
          api: 'mgop.sz.hswsy.addStudent', // 必须
          host: 'https://mapi.zjzwfw.gov.cn/',
          dataType: 'JSON',
          type: 'GET',
          appKey: 'fuxgnukl+2001895516+edccpx', // 必须
          headers: {
            //   'isTestUrl': '1'
          },
          data: postData,
          onSuccess: (res) => {
            console.log('添加学生：', res)
            this.$toast.clear()
            if (res.data.code == 200) {
              this.$toast.success('添加学生成功')
              this.$emit('complete')
            } else {
              this.$toast.fail(res.data?.message)
            }
          },
          onFail: (err) => {
            console.log('err', err)
          },
        })
      }
    },
    //选择学校
    chooseSchool() {
      // this.$router.push({name: 'chooseSchool'})
      this.chooseSchoolisShow = true
    },
    schoolData(val) {
      this.school = val.text
      this.schoolId = val.id
    },
    checkPhone(phone) {
      if (/^1[3456789]\d{9}$/.test(phone)) {
        return true
      } else {
        return false
      }
    },
  },
  destroyed() {
    clearInterval(codeInterval)
  },
}
</script>
<style lang="scss" scoped>
.addchild_group {
  width: 638px;
  height: 836px;
  background: #ffffff;
  border-radius: 24px;
  position: relative;
  .bg {
    width: 100%;
    position: absolute;
    top: 0;
    left: 0;
  }
  .title {
    position: relative;
    width: 100%;
    padding-top: 70px;
    padding-bottom: 8px;
    text-align: center;
    font-size: 34px;
    font-weight: bold;
    color: #0857ff;
  }
  .des {
    position: relative;
    width: 100%;
    box-sizing: border-box;
    text-align: center;
    font-size: 24px;
    color: #6596ff;
  }
  .content {
    width: 100%;
    box-sizing: border-box;
    padding: 0 40px;
    position: absolute;
    top: 236px;
    left: 0;
    .name {
      width: 558px;
      height: 50px;
      font-size: 28px;
      color: #000;
      padding-left: 20px;
      box-sizing: border-box;
    }
    .item {
      width: 558px;
      height: 72px;
      border-radius: 36px;
      background: #f7f7f7;
      box-sizing: border-box;
      font-size: 28px;
      padding: 0 32px;
      display: flex;
      justify-content: space-between;
      align-items: center;
      margin-bottom: 28px;
      p {
        color: #333333;
        &.nodata {
          color: #999999;
        }
      }
      img {
        width: 40px;
      }
      input {
        width: 100%;
        background: transparent;
        border: 0;
        color: #333333;
        padding: 0;
        &::-webkit-input-placeholder {
          color: #999999;
        }
      }
      .btn {
        width: 240px;
        height: 55px;
        float: right;
        font-size: 28px;
        background: linear-gradient(135deg, #cdf8cf 0%, #8af36f 100%);
        box-shadow: 0px 4px 8px 0px rgba(189, 189, 189, 0.5), 0px 8px 12px 0px rgba(89, 199, 171, 0.5);
        border-radius: 34px;
        border: transparent;
        color: #333333;
      }
    }
    .school_select {
      font-size: 28px;
      padding: 0 32px;
      margin-bottom: 28px;
    }
    .submit {
      width: 294px;
      height: 72px;
      border: 0;
      background: linear-gradient(135deg, #99c2ff 0%, #1f59ff 100%);
      box-shadow: 0px 4px 8px 0px rgba(189, 189, 189, 0.5), 0px 8px 12px 0px rgba(87, 137, 255, 0.5);
      border-radius: 34px;
      font-size: 34px;
      color: #ffffff;
      margin: 0 auto;
      display: block;
    }
  }
  .child_content {
    position: relative;
    margin-top: 40px;
    .child_box {
      height: 500px;
      overflow: auto;
      padding-left: 100px;
      .child_item {
        position: relative;
        margin-bottom: 50px;
        p {
          font-size: 28px;
          padding: 8px 0;
          span {
            display: inline-block;
            width: 140px;
            margin-right: 28px;
            color: #999;
          }
        }
        .checkbox {
          position: absolute;
          top: 115px;
          right: 20px;
        }
      }
    }
    .submit {
      width: 438px;
      height: 78px;
      background: #3385ff;
      border-radius: 37px;
      border-radius: 39px;
      border: 0;
      font-size: 34px;
      color: #ffffff;
      margin: 0 auto;
      display: block;
    }
  }
  .phone_content {
    width: 100%;
    position: absolute;
    top: 180px;
    left: 0;
    box-sizing: border-box;
    padding: 40px;
    .item {
      border-bottom: 1px solid #e2e2e2;
      margin-bottom: 30px;
    }
    .phone_title {
      font-size: 34px;
      font-weight: bold;
      margin-bottom: 28px;
    }
    .flex {
      display: flex;
      align-items: center;
      justify-content: space-between;
      margin-bottom: 22px;
    }
    .code {
      border: 0;
      background: transparent;
      font-size: 28px;
      margin-bottom: 32px;
      width: 100%;
    }
    .phone {
      margin: 0;
    }
    .getcode {
      flex-shrink: 0;
      color: #5789ff;
      font-size: 28px;
      padding: 10px;
    }
    .submit {
      width: 438px;
      height: 78px;
      background: #3385ff;
      border-radius: 37px;
      border-radius: 39px;
      border: 0;
      font-size: 34px;
      color: #ffffff;
      margin: 0 auto;
      margin-top: 80px;
      display: block;
    }
  }
  .change-btn {
    color: #5789ff;
    font-size: 28px;
    text-align: center;
    text-decoration: underline;
    margin-top: 40px;
  }
}
::v-deep .van-search {
  background: transparent;
  padding: 0;
  width: 100%;
}
::v-deep .van-search__content {
  padding: 0;
}
.schoolBoxF {
  width: 100vw;
  height: 100vh;
  position: absolute;
  top: 0;
  left: 0;
  background-color: #fff;
}
</style>
