SelectContact.vue 6.47 KB
<template>
  <div id="selectContact">
    <div class="control">
      <div class="add_btn" @click="showAddChildPopupGroup=true">
        <van-icon name="add-o" />
        新增学生
      </div>
      <div class="add_btn" @click="addContact">
        <van-icon name="add-o" />
        新增家长
      </div>
    </div>
    <div class="box">
      <template v-for="(item,index) in contactList">
        <div class="contact_item" v-if="!hideParent&&item.userType!=1||item.userType==1" :key="index">
          <van-checkbox class="checkbox" v-model="item.checked" shape="square"></van-checkbox>
          <div class="info">
            <p class="name">{{item.travelerName}}<span v-if="!item.travelerIdCard||!item.gender">需完善</span></p>
            <p class="des">{{item.userType==1?'学生':'家长'}}·{{item.travelerMobile}}</p>
          </div>
          <van-icon class="edit" name="edit" @click="editContact(index)" />
        </div>
      </template>

    </div>
    <van-button class="btn" type="primary" @click="selectContact">确定</van-button>
    <van-popup style="background: transparent;" get-container="body" v-model="showAddChildPopupGroup">
      <AddChildPopupGroup @complete="complete" step='1'></AddChildPopupGroup>
    </van-popup>
  </div>
</template>
<script>
import AddChildPopupGroup from '@/views/Home/component/AddChildPopupGroup'
export default {
  data () {
    return {
      limit: '',
      hideParent: false,
      contactList: [],
      showAddChildPopupGroup: false
    }
  },
  mounted () {
    this.limit = this.$route.query.limit;
    this.hideParent = this.$route.query.hideParent ? true : false;
    console.log(this.hideParent)
    this.getContactList()
  },
  methods: {
    // 获取联系人列表
    getContactList () {
      this.$toast.loading({
        message: '加载中...',
        duration: 0,
        forbidClick: true
      })
      const userInfo = JSON.parse(localStorage.getItem('userInfo'))
      this.yxAxios.get(`${this.baseUrl}/prod/user/info/getPortalUserByNum?userNum=${userInfo.centerNo}`).then((res) => {
        this.$toast.clear()
        if (res.data.code == 200) {
          let userInfo = res.data.data.userInfo;
          let contactList = userInfo.subUsers
          // 把家长添加到列表
          contactList.unshift({
            travelerMobile: userInfo?.phone,
            travelerNum: userInfo?.centerNo,
            travelerIdCard: userInfo?.idCard,
            userType: 2,
            travelerName: userInfo?.nickName,
            gender: userInfo?.gender,
          })
          this.contactList = contactList
        }
      })
    },
    // 修改联系人
    editContact (index) {
      let contactItem = this.contactList[index]
      let editContact = {
        travelerMobile: contactItem.travelerMobile,
        userType: contactItem.userType,
        travelerIdCard: contactItem.travelerIdCard,
        travelerNum: contactItem.travelerNum,
        travelerName: contactItem.travelerName,
        gender: contactItem.gender,
      }
      localStorage.setItem('editContact', JSON.stringify(editContact))
      this.$router.push({ name: 'EditContact' })
    },
    // 添加家长
    addContact () {
      this.$router.push({ name: 'EditContact', query: { add: 1 } })
    },
    complete () {
      this.showAddChildPopupGroup = false;
      this.getContactList()
    },
    // 选择联系人完成
    selectContact () {
      let contactList = this.contactList;
      let selectedArr = [];
      for (let i in contactList) {
        if (contactList[i]?.checked) {
          if ((!contactList[i].travelerIdCard || !contactList[i].gender) && !this.hideParent) {
            this.$toast('请先完善您选择的出行人信息')
            return;
          } else {
            selectedArr.push({
              travelerName: contactList[i].travelerName,
              travelerMobile: contactList[i].travelerMobile,
              travelerNum: contactList[i].travelerNum,
              userType: contactList[i].userType,
            })
          }
        }
      }
      console.log(this.limit, selectedArr.length)
      if (this.limit && this.limit != selectedArr.length) {
        this.$toast(`请选择${this.limit}位出行人`)
        return;
      }
      // 判断是否选择学生
      let hasStudent = false;
      for (let i in selectedArr) {
        if (selectedArr[i].userType == 1) {
          hasStudent = true
        }
      }
      if (!hasStudent) {
        this.$dialog.alert({
          title: '温馨提示',
          message: '活动参与主体为学生本人,请选择出行学生!未绑定学生,请新增出行学生进行添加。',
          confirmButtonColor: '#3385FF'
        })
        return;
      }
      // console.log(selectedArr)
      localStorage.setItem('selectedContactArr', JSON.stringify(selectedArr))
      this.$router.back()
    }
  },
  components: {
    AddChildPopupGroup
  }

}
</script>
<style lang="scss" scoped>
#selectContact {
  min-height: 100vh;
  box-sizing: border-box;
  padding: 16px 0;
  background: #f6f7fa;
  .control {
    width: 702px;
    margin: 0 auto;
    padding: 0 24px;
    box-sizing: border-box;
    background: #fff;
    border-radius: 16px;
    margin-bottom: 24px;
    .add_btn {
      display: inline-block;
      width: 50%;
      line-height: 104px;
      font-size: 28px;
      color: #4092ff;
      text-align: center;
    }
  }
  .box {
    width: 702px;
    margin: 0 auto;
    padding: 0 24px;
    padding-bottom: 200px;
    box-sizing: border-box;
    background: #fff;
    border-radius: 16px;

    .contact_item {
      display: flex;
      align-items: center;
      justify-content: space-between;
      .edit {
        padding: 20px 0px 20px 20px;
        font-size: 40px;
        color: #4092ff;
      }
      .info {
        width: 500px;
        padding: 28px 0;
        .name {
          display: flex;
          align-items: center;
          font-size: 30px;
          span {
            display: inline-block;
            padding: 2px 8px;
            margin-left: 16px;
            font-size: 20px;
            color: #fe3b3b;
            background: #ffeeee;
            border-radius: 4px;
          }
        }
        .des {
          font-size: 26px;
          color: #999;
        }
      }
      .checkbox {
        padding: 20px 20px 20px 0px;
      }
    }
  }
  .btn {
    position: fixed;
    bottom: 100px;
    left: 24px;
    width: 702px;
    height: 90px;
    background: #4092ff;
    border: 1px solid #4092ff;
    box-shadow: 0px 10px 40px 0px #a0c9ff;
    border-radius: 45px;
  }
}
</style>