SelectContact.vue 6.56 KB
<template>
  <div id="selectContact">
    <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-icon class="edit" name="edit" @click="editContact(index)" />
          <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-checkbox v-if="item.userType==1" class="checkbox" v-model="item.checked" shape="square"></van-checkbox>
          <van-checkbox v-else class="checkbox" v-model="item.checked" @change="checkboxChange" shape="square"></van-checkbox>
        </div>
      </template>
      <div class="add_btn" @click="showAddChildPopupGroup=true">
        <van-icon name="add-o" />
        新增出行学生
      </div>
    </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"></AddChildPopupGroup>
    </van-popup>
  </div>
</template>
<script>
import AddChildPopupGroup from '@/views/Home/component/AddChildPopupGroup'
import { Dialog } from 'vant';
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
      })
      this.mgop({
        api: 'mgop.sz.hswsy.getPortalUserByNum', // 必须
        host: 'https://mapi.zjzwfw.gov.cn/',
        dataType: 'JSON',
        type: 'GET',
        appKey: 'fuxgnukl+2001895516+edccpx', // 必须
        headers: {
          //   'isTestUrl': '1'
        },
        data: {
          "userNum": sessionStorage.getItem('centerNo')
        },
        onSuccess: res => {
          console.log('联系人列表:', 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
          }
        },
        onFail: err => {
          console.log('err', err)
        }
      });
    },
    // 修改联系人
    editContact (index) {
      let contactItem = this.contactList[index]
      let editContact = {
        travelerMobile: contactItem.travelerMobile,
        userType: contactItem.userType,
        travelerIdCard: contactItem.travelerIdCard,
        travelerNum: contactItem.travelerNum,
        travelerName: contactItem.travelerName
      }
      sessionStorage.setItem('editContact', JSON.stringify(editContact))
      this.$router.push({ name: 'EditContact' })
    },
    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
            })
          }
        }
      }
      console.log(this.limit, selectedArr.length)
      if (this.limit && this.limit != selectedArr.length) {
        this.$toast(`请选择${this.limit}位出行人`)
        return;
      }
      // console.log(selectedArr)
      sessionStorage.setItem('selectedContactArr', JSON.stringify(selectedArr))
      this.$router.back()
    },
    checkboxChange (e) {
      if (e == true) {
        Dialog.alert({
          title: '温馨提示',
          message: '活动参与主体为学生本人,请选择出行学生!未绑定学生,请新增出行学生进行添加。',
          confirmButtonColor: '#3385FF'
        })
      }
    }
  },
  components: {
    AddChildPopupGroup
  }

}
</script>
<style lang="scss" scoped>
#selectContact {
  min-height: 100vh;
  box-sizing: border-box;
  padding: 16px 0;
  background: #f6f7fa;
  .box {
    width: 702px;
    margin: 0 auto;
    padding: 0 24px;
    padding-bottom: 200px;
    box-sizing: border-box;
    background: #fff;
    border-radius: 16px;
    .add_btn {
      line-height: 104px;
      font-size: 28px;
      color: #4092ff;
      text-align: center;
    }
    .contact_item {
      display: flex;
      align-items: center;
      justify-content: space-between;
      .edit {
        padding: 20px 20px 20px 0;
        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 0 20px 20px;
      }
    }
  }
  .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>
<style lang="scss" scoped>
.elder {
  #selectContact {
    .contact_item .info {
      .name {
        font-size: 44px;
      }
      .des {
        font-size: 40px;
      }
    }
    .box {
      .add_btn {
        font-size: 40px;
      }
    }
    .btn{
      font-size: 40px;
    }
    
  }
}
</style>