|  | @@ -6,11 +6,12 @@
 | 
	
		
			
				|  |  |        <div class="card">
 | 
	
		
			
				|  |  |          <van-panel >
 | 
	
		
			
				|  |  |            <template #header>
 | 
	
		
			
				|  |  | -<!--            <van-cell title="申请信息"></van-cell>-->
 | 
	
		
			
				|  |  | +            <van-cell title="申请信息"></van-cell>
 | 
	
		
			
				|  |  |            </template>
 | 
	
		
			
				|  |  |            <div class="panel-box">
 | 
	
		
			
				|  |  |              <select-cell
 | 
	
		
			
				|  |  |                title="介绍信类型"
 | 
	
		
			
				|  |  | +              is-row
 | 
	
		
			
				|  |  |                :prop="prop"
 | 
	
		
			
				|  |  |                v-model="visitType"
 | 
	
		
			
				|  |  |                :data-list="typeList"
 | 
	
	
		
			
				|  | @@ -32,18 +33,35 @@
 | 
	
		
			
				|  |  |                v-model="formData.reasons"
 | 
	
		
			
				|  |  |                placeholder="请输入"
 | 
	
		
			
				|  |  |                :maxlength="200"/>
 | 
	
		
			
				|  |  | +            <date-cell
 | 
	
		
			
				|  |  | +              v-if="visitType != 3"
 | 
	
		
			
				|  |  | +              required
 | 
	
		
			
				|  |  | +              v-model="formData.date"
 | 
	
		
			
				|  |  | +              title="开具日期">
 | 
	
		
			
				|  |  | +            </date-cell>
 | 
	
		
			
				|  |  | +            <select-cell
 | 
	
		
			
				|  |  | +              required
 | 
	
		
			
				|  |  | +              v-if="visitType != 3"
 | 
	
		
			
				|  |  | +              title="有效天数"
 | 
	
		
			
				|  |  | +              is-row
 | 
	
		
			
				|  |  | +              :label="formData.date"
 | 
	
		
			
				|  |  | +              is-link
 | 
	
		
			
				|  |  | +              @click="showCalendar">
 | 
	
		
			
				|  |  | +            </select-cell>
 | 
	
		
			
				|  |  |              <van-cell
 | 
	
		
			
				|  |  |                required
 | 
	
		
			
				|  |  | -              title="有效期"
 | 
	
		
			
				|  |  | +              v-if="visitType != 2"
 | 
	
		
			
				|  |  | +              title="出入期限"
 | 
	
		
			
				|  |  |                :label="formData.date"
 | 
	
		
			
				|  |  |                is-link
 | 
	
		
			
				|  |  |                @click="showCalendar">
 | 
	
		
			
				|  |  |              </van-cell>
 | 
	
		
			
				|  |  |              <div class="upload-box" v-if="visitType != 3" >
 | 
	
		
			
				|  |  | -              <span><i>*</i> 介绍信上传</span>
 | 
	
		
			
				|  |  | +              <span><i>*</i> 上传介绍信</span>
 | 
	
		
			
				|  |  |                <uploader :maxCount="1" v-model="formData.letterFile"/>
 | 
	
		
			
				|  |  |              </div>
 | 
	
		
			
				|  |  |              <van-field
 | 
	
		
			
				|  |  | +              v-if="visitType != 3"
 | 
	
		
			
				|  |  |                v-model="formData.description"
 | 
	
		
			
				|  |  |                rows="1"
 | 
	
		
			
				|  |  |                autosize
 | 
	
	
		
			
				|  | @@ -64,11 +82,10 @@
 | 
	
		
			
				|  |  |        </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        <!--  人员列表   -->
 | 
	
		
			
				|  |  | -      <div class="card" v-for="(v,i) in pList" :key="i">
 | 
	
		
			
				|  |  | +      <div class="card" v-for="(v,i) in pList" :key="v.uuid">
 | 
	
		
			
				|  |  |          <van-swipe-cell>
 | 
	
		
			
				|  |  |            <div class="goods-card">
 | 
	
		
			
				|  |  |             <div class="card-img-box" @click="preView(v.imgFile)">
 | 
	
		
			
				|  |  | -<!--             <p>{{v.imgFile[0].imgPath}}</p>-->
 | 
	
		
			
				|  |  |               <img :src="imgUrl(v.imgFile[0].imgPath)" alt="">
 | 
	
		
			
				|  |  |             </div>
 | 
	
		
			
				|  |  |             <div class="card-cell-box">
 | 
	
	
		
			
				|  | @@ -86,36 +103,37 @@
 | 
	
		
			
				|  |  |          </van-swipe-cell>
 | 
	
		
			
				|  |  |        </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |        <!--  添加人员信息    -->
 | 
	
		
			
				|  |  |        <div class="card" v-show="checked">
 | 
	
		
			
				|  |  |          <van-cell title="人员信息">
 | 
	
		
			
				|  |  |            <template #right-icon>
 | 
	
		
			
				|  |  | -            <van-button type="info"  icon="plus" size="mini" @click="onAdd">添加</van-button>
 | 
	
		
			
				|  |  | +            <van-button type="primary" v-if="isAdd" icon="plus" size="mini" @click="onAdd">添加</van-button>
 | 
	
		
			
				|  |  | +            <van-button type="info" v-else icon="edit" size="mini" @click="onEdit">确认</van-button>
 | 
	
		
			
				|  |  |            </template>
 | 
	
		
			
				|  |  |          </van-cell>
 | 
	
		
			
				|  |  |          <div class="panel-box">
 | 
	
		
			
				|  |  |            <van-form validate-first @failed="onFailed">
 | 
	
		
			
				|  |  | -            <van-cell
 | 
	
		
			
				|  |  | -              v-if="visitType == 1"
 | 
	
		
			
				|  |  | -              title="来访机构"
 | 
	
		
			
				|  |  | -              required
 | 
	
		
			
				|  |  | -              is-link
 | 
	
		
			
				|  |  | -              @click="showOrg"
 | 
	
		
			
				|  |  | -              :label="formData.orgName">
 | 
	
		
			
				|  |  | -            </van-cell>
 | 
	
		
			
				|  |  |              <van-field
 | 
	
		
			
				|  |  |                required
 | 
	
		
			
				|  |  |                v-model="personnel.userName"
 | 
	
		
			
				|  |  |                rows="1"
 | 
	
		
			
				|  |  |                autosize
 | 
	
		
			
				|  |  |                :maxlength="20"
 | 
	
		
			
				|  |  | -              label="来访人员"
 | 
	
		
			
				|  |  | +              label="出入人员"
 | 
	
		
			
				|  |  |                :rules="[{ pattern:/^(.+)$/, message: '请输入' }]"
 | 
	
		
			
				|  |  |                placeholder="请输入"/>
 | 
	
		
			
				|  |  | +            <van-field
 | 
	
		
			
				|  |  | +              required
 | 
	
		
			
				|  |  | +              v-model="personnel.idCard"
 | 
	
		
			
				|  |  | +              rows="1"
 | 
	
		
			
				|  |  | +              autosize
 | 
	
		
			
				|  |  | +              :maxlength="20"
 | 
	
		
			
				|  |  | +              label="证件号码"
 | 
	
		
			
				|  |  | +              placeholder="请输入"/>
 | 
	
		
			
				|  |  |              <select-cell
 | 
	
		
			
				|  |  |                title="证件类型"
 | 
	
		
			
				|  |  |                :prop="prop"
 | 
	
		
			
				|  |  | +              is-row
 | 
	
		
			
				|  |  |                v-model="visitType"
 | 
	
		
			
				|  |  |                :data-list="typeList"
 | 
	
		
			
				|  |  |                required>
 | 
	
	
		
			
				|  | @@ -128,20 +146,12 @@
 | 
	
		
			
				|  |  |                :maxlength="20"
 | 
	
		
			
				|  |  |                label="证件号码"
 | 
	
		
			
				|  |  |                placeholder="请输入"/>
 | 
	
		
			
				|  |  | -            <van-field
 | 
	
		
			
				|  |  | -              required
 | 
	
		
			
				|  |  | -              v-model="personnel.companyName"
 | 
	
		
			
				|  |  | -              rows="1"
 | 
	
		
			
				|  |  | -              autosize
 | 
	
		
			
				|  |  | -              :maxlength="20"
 | 
	
		
			
				|  |  | -              label="单位"
 | 
	
		
			
				|  |  | -              :rules="[{ pattern:/^(.+)$/, message: '请输入' }]"
 | 
	
		
			
				|  |  | -              placeholder="请输入"/>
 | 
	
		
			
				|  |  |            </van-form>
 | 
	
		
			
				|  |  |            <div class="upload-box" >
 | 
	
		
			
				|  |  | -            <span><i>*</i> 证件上传</span>
 | 
	
		
			
				|  |  | +            <span><i>*</i> 上传证件照</span>
 | 
	
		
			
				|  |  |              <uploader :maxCount="2" v-model="personnel.imgFile"/>
 | 
	
		
			
				|  |  |            </div>
 | 
	
		
			
				|  |  | +          <p class="tip-text" >注:证件号码将作为唯一识别码</p>
 | 
	
		
			
				|  |  |          </div>
 | 
	
		
			
				|  |  |        </div>
 | 
	
		
			
				|  |  |        <div class="big-btn-box" >
 | 
	
	
		
			
				|  | @@ -199,6 +209,7 @@ export default {
 | 
	
		
			
				|  |  |          imgFile:[],
 | 
	
		
			
				|  |  |        },
 | 
	
		
			
				|  |  |        pList:[],
 | 
	
		
			
				|  |  | +      isAdd:true,
 | 
	
		
			
				|  |  |        showPicker:false,
 | 
	
		
			
				|  |  |        openCalendar:false,
 | 
	
		
			
				|  |  |        prop:{
 | 
	
	
		
			
				|  | @@ -237,92 +248,127 @@ export default {
 | 
	
		
			
				|  |  |        //     return;
 | 
	
		
			
				|  |  |        //   }
 | 
	
		
			
				|  |  |        // }
 | 
	
		
			
				|  |  | -      if(this.visitType ==  '2'){
 | 
	
		
			
				|  |  | -        if(!this.formData.letterNo){
 | 
	
		
			
				|  |  | -          this.$toast('请输入介绍信编号');
 | 
	
		
			
				|  |  | +      try{
 | 
	
		
			
				|  |  | +        if(this.visitType ==  '2'){
 | 
	
		
			
				|  |  | +          if(!this.formData.letterNo){
 | 
	
		
			
				|  |  | +            this.$toast('请输入介绍信编号');
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if(!this.formData.letterFile){
 | 
	
		
			
				|  |  | +            this.$toast('请上传介绍信');
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if(!this.formData.reasons){
 | 
	
		
			
				|  |  | +          this.$toast('请输入出入事由');
 | 
	
		
			
				|  |  |            return;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if(!this.formData.letterFile){
 | 
	
		
			
				|  |  | -          this.$toast('请上传介绍信');
 | 
	
		
			
				|  |  | +        if(!this.formData.range){
 | 
	
		
			
				|  |  | +          this.$toast('请选择有效期');
 | 
	
		
			
				|  |  |            return;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      if(!this.formData.reasons){
 | 
	
		
			
				|  |  | -        this.$toast('请输入出入事由');
 | 
	
		
			
				|  |  | -        return;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      if(!this.formData.range){
 | 
	
		
			
				|  |  | -        this.$toast('请选择有效期');
 | 
	
		
			
				|  |  | -        return;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      if(this.pList.length == 0){
 | 
	
		
			
				|  |  | -        this.$toast('请添加人员信息');
 | 
	
		
			
				|  |  | -        return;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      this.formData.status = 1;
 | 
	
		
			
				|  |  | -      this.formData.type = this.visitType;
 | 
	
		
			
				|  |  | -      this.formData.receptionOrgIds = [this.orgId];
 | 
	
		
			
				|  |  | -      this.formData.userInfos = this.pList;
 | 
	
		
			
				|  |  | -      let data = this.formData;
 | 
	
		
			
				|  |  | -      //alert(JSON.stringify(data))
 | 
	
		
			
				|  |  | -      if(this.visitType ==  '2'){
 | 
	
		
			
				|  |  | -        data.letterFile = this.formData.letterFile.map(v=>{
 | 
	
		
			
				|  |  | -          return JSON.stringify(v);
 | 
	
		
			
				|  |  | +        if(this.pList.length == 0){
 | 
	
		
			
				|  |  | +          this.$toast('请添加人员信息');
 | 
	
		
			
				|  |  | +          return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        this.formData.status = 1;
 | 
	
		
			
				|  |  | +        this.formData.type = this.visitType;
 | 
	
		
			
				|  |  | +        this.formData.receptionOrgIds = [this.orgId];
 | 
	
		
			
				|  |  | +        this.formData.userInfos = this.pList;
 | 
	
		
			
				|  |  | +        let data = this.formData;
 | 
	
		
			
				|  |  | +        //alert(JSON.stringify(data))
 | 
	
		
			
				|  |  | +        if(this.visitType ==  '2'){
 | 
	
		
			
				|  |  | +          data.letterFile = this.formData.letterFile.map(v=>{
 | 
	
		
			
				|  |  | +            return JSON.stringify(v);
 | 
	
		
			
				|  |  | +          })
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        data.userInfos = this.pList.map(user=>{
 | 
	
		
			
				|  |  | +          let urlArr = user.imgFile.map(v=>{
 | 
	
		
			
				|  |  | +            return v.imgPath
 | 
	
		
			
				|  |  | +          })
 | 
	
		
			
				|  |  | +          user.imgFile = urlArr.join(',');
 | 
	
		
			
				|  |  | +          return user
 | 
	
		
			
				|  |  |          })
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      data.userInfos = this.pList.map(user=>{
 | 
	
		
			
				|  |  | -        let urlArr = user.imgFile.map(v=>{
 | 
	
		
			
				|  |  | -          return v.imgPath
 | 
	
		
			
				|  |  | +        // alert(JSON.stringify(data));
 | 
	
		
			
				|  |  | +        // return;
 | 
	
		
			
				|  |  | +        visitAdd(data).then(res=>{
 | 
	
		
			
				|  |  | +          this.$toast.success('提交成功');
 | 
	
		
			
				|  |  | +          this.$router.replace({
 | 
	
		
			
				|  |  | +            name:'visitRegister',
 | 
	
		
			
				|  |  | +            path:'/visitRegister',
 | 
	
		
			
				|  |  | +            params:{event:'refresh'},
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  |          })
 | 
	
		
			
				|  |  | -        user.imgFile = urlArr.join(',');
 | 
	
		
			
				|  |  | -        return user
 | 
	
		
			
				|  |  | -      })
 | 
	
		
			
				|  |  | -      alert(JSON.stringify(data))
 | 
	
		
			
				|  |  | -      visitAdd(data).then(res=>{
 | 
	
		
			
				|  |  | -        this.$toast.success('提交成功');
 | 
	
		
			
				|  |  | -        this.$router.replace({
 | 
	
		
			
				|  |  | -          path:'/visitRegister',
 | 
	
		
			
				|  |  | -        });
 | 
	
		
			
				|  |  | -      })
 | 
	
		
			
				|  |  | +      }catch (e) {
 | 
	
		
			
				|  |  | +        alert(e)
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      onFailed(errorInfo) {
 | 
	
		
			
				|  |  |        console.log('failed', errorInfo);
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      getDate(date){
 | 
	
		
			
				|  |  | -      console.log(date,'date');
 | 
	
		
			
				|  |  |        const [start, end] = date;
 | 
	
		
			
				|  |  |        this.formData.range = date;
 | 
	
		
			
				|  |  |        this.formData.date = `${start} ~ ${end}`;
 | 
	
		
			
				|  |  | -      console.log( this.formData.date,'date');
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      showCalendar(){
 | 
	
		
			
				|  |  |        this.$refs.CalendarPicker.show = true;
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      editPerson(v,i){
 | 
	
		
			
				|  |  | -      console.log(v,'vvvvv');
 | 
	
		
			
				|  |  |        this.checked = true;
 | 
	
		
			
				|  |  | +      this.isAdd = false;
 | 
	
		
			
				|  |  |        this.personnel = JSON.parse(JSON.stringify(v));
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      deletePerson(v,i){
 | 
	
		
			
				|  |  | -      console.log(v,'vvvvv')
 | 
	
		
			
				|  |  |        this.pList.splice(i,1);
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    onAdd(){
 | 
	
		
			
				|  |  | -      // this.personnel.imgFile = [{
 | 
	
		
			
				|  |  | -      //   url:'askjdkajsdjajkdsa',
 | 
	
		
			
				|  |  | -      //   imgPath:'asjkdklaslkdasdlasld',
 | 
	
		
			
				|  |  | -      //   name:'asdasdasd'
 | 
	
		
			
				|  |  | -      // }]
 | 
	
		
			
				|  |  | +    onEdit(){
 | 
	
		
			
				|  |  |        if(!this.personnel.userName || !this.personnel.idCard || !this.personnel.companyName || !this.personnel.imgFile){
 | 
	
		
			
				|  |  |          this.$toast('请完善人员信息');
 | 
	
		
			
				|  |  |          return;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      if(this.personnel.imgFile.length < 2) {
 | 
	
		
			
				|  |  | -        this.$toast('请上传证件照正反面');
 | 
	
		
			
				|  |  | +      let strObj = JSON.parse(JSON.stringify(this.personnel));
 | 
	
		
			
				|  |  | +      let index = this.pList.findIndex(v=>{return v.uuid === strObj.uuid});
 | 
	
		
			
				|  |  | +      this.pList.splice(index,1,strObj);
 | 
	
		
			
				|  |  | +      this.personnel = {
 | 
	
		
			
				|  |  | +        userName:null,
 | 
	
		
			
				|  |  | +        idCard:null,
 | 
	
		
			
				|  |  | +        companyName:null,
 | 
	
		
			
				|  |  | +        imgFile:[],
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      this.isAdd = true;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    onAdd(){
 | 
	
		
			
				|  |  | +      //测试模拟
 | 
	
		
			
				|  |  | +      // if(!this.personnel.idCard){
 | 
	
		
			
				|  |  | +      //   this.personnel.imgFile = [{
 | 
	
		
			
				|  |  | +      //     url:'askjdkajsdjajkdsa',
 | 
	
		
			
				|  |  | +      //     imgPath:'asjkdklaslkdasdlasld',
 | 
	
		
			
				|  |  | +      //     name:'asdasdasd'
 | 
	
		
			
				|  |  | +      //   },
 | 
	
		
			
				|  |  | +      //     {
 | 
	
		
			
				|  |  | +      //       url:'asdaaskjdkajsdjajkdsa',
 | 
	
		
			
				|  |  | +      //       imgPath:'dsaasjkdklaslkdasdlasld',
 | 
	
		
			
				|  |  | +      //       name:'asdasdasd'
 | 
	
		
			
				|  |  | +      //     }
 | 
	
		
			
				|  |  | +      //   ];
 | 
	
		
			
				|  |  | +      //   this.personnel.userName = '张三';
 | 
	
		
			
				|  |  | +      //   this.personnel.idCard = '123456789012345678'
 | 
	
		
			
				|  |  | +      //   this.personnel.companyName = '测试单位';
 | 
	
		
			
				|  |  | +      // }
 | 
	
		
			
				|  |  | +      if(!this.personnel.userName || !this.personnel.idCard || !this.personnel.companyName || !this.personnel.imgFile){
 | 
	
		
			
				|  |  | +        this.$toast('请完善人员信息');
 | 
	
		
			
				|  |  |          return;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        let strObj = JSON.parse(JSON.stringify(this.personnel));
 | 
	
		
			
				|  |  | +      //判断是否已添加
 | 
	
		
			
				|  |  | +      let flag  = this.pList.some(v=> {return v.idCard === strObj.idCard});
 | 
	
		
			
				|  |  | +      if(flag) {
 | 
	
		
			
				|  |  | +        this.$toast('该人员信息已添加');
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      strObj.uuid = `${new Date().getTime()}`;
 | 
	
		
			
				|  |  |        this.pList.push(strObj);
 | 
	
		
			
				|  |  |        this.personnel = {
 | 
	
		
			
				|  |  |          userName:null,
 | 
	
	
		
			
				|  | @@ -342,10 +388,15 @@ export default {
 | 
	
		
			
				|  |  |      cancelPicker(){
 | 
	
		
			
				|  |  |        this.showPicker = false;
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    preView(imgs) {
 | 
	
		
			
				|  |  | -      let arr = imgs.map(v=>{return v.imgPath});
 | 
	
		
			
				|  |  | -      console.log(arr,'imgs')
 | 
	
		
			
				|  |  | -      ImagePreview(arr)
 | 
	
		
			
				|  |  | +    preView(val) {
 | 
	
		
			
				|  |  | +      if(Array.isArray(val)){
 | 
	
		
			
				|  |  | +        let arr = val.map(v=>{
 | 
	
		
			
				|  |  | +          return imgUrl(v.imgPath);
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        ImagePreview(arr);
 | 
	
		
			
				|  |  | +      }else {
 | 
	
		
			
				|  |  | +        ImagePreview([imgUrl(val)]);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -452,6 +503,11 @@ export default {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | +.tip-text{
 | 
	
		
			
				|  |  | +  line-height: 60px;
 | 
	
		
			
				|  |  | +  color:red;
 | 
	
		
			
				|  |  | +  background-color: #fff;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  .big-btn-box{
 | 
	
		
			
				|  |  |    padding-bottom: 20px;
 | 
	
		
			
				|  |  |  }
 |