Forráskód Böngészése

修复出入管理bug

凉纪 1 éve
szülő
commit
4b1bb012cf

+ 3 - 2
src/components/NavBar/index.vue

@@ -18,7 +18,8 @@ export default {
       default: ()=>(
         {
           type:'go', //参数:go push replace
-          path:-1
+          path:-1,
+          obj:null
         }
       )
     }
@@ -31,7 +32,7 @@ export default {
   methods:{
     goBack(){
       console.log(this.go,'go')
-      this.$router[this.go.type](this.go.path);
+      this.$router[this.go.type](this.go.obj||this.go.path);
     },
   }
 }

+ 25 - 7
src/views/menu/visitCheck/detail.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="intro-add">
-    <nav-bar></nav-bar>
+    <nav-bar :go="go"></nav-bar>
     <div class="page-container">
       <!--   基本信息   -->
       <div class="card">
@@ -20,17 +20,16 @@
             <van-cell title="出入事由" :value="visitInfo.reasons"></van-cell>
             <van-cell title="访问日期" :value="visitInfo.startTimeStr"></van-cell>
             <van-cell title="结束日期" :value="visitInfo.endTimeStr"></van-cell>
-            <div class="upload-box">
+            <div class="upload-box" v-if="visitInfo.letterFile">
               <span>介绍信文件</span>
-              <van-cell v-if="visitInfo.letterFile">
+              <van-cell >
                 <div
                   class="nfc-img van-hairline--surround"
                   v-for="(v, i) in visitInfo.letterFile"
                   :key="v.url"
-                  @click="preView(v.url)">
-                  <img :src="imgUrl(v.url)" alt="" />
+                  @click="preView(v.imgPath)">
+                  <img :src="imgUrl(v.imgPath)" alt="" />
                 </div>
-                <!--                      <img class="nfc-img" v-for="v in item.imgData" :src="imgUrl(v.imgPath)" alt="" :key="v.id">-->
               </van-cell>
             </div>
             <van-cell v-if="visitInfo.description" title="备注信息" :value="visitInfo.description"></van-cell>
@@ -85,6 +84,14 @@ export default {
   components: {Uploader, DateCell},
   data(){
     return {
+      go:{
+        type:'replace', //参数:go push replace
+        obj:{
+          name:'visitCheck',
+          path:'/visitCheck',
+          params:{event:'refresh'},
+        }
+      },
       visitId:null,
       approveStatus:null,
       approveRemark:null,
@@ -119,7 +126,9 @@ export default {
         visitCheck(data).then(res=>{
           this.$toast('操作成功');
           this.$router.replace({
+            name:'visitCheck',
             path:'/visitCheck',
+            params:{event:'refresh'}
           });
         })
       }
@@ -134,7 +143,9 @@ export default {
       visitCheck(data).then(res=>{
         this.$toast('操作成功');
         this.$router.replace({
+          name:'visitCheck',
           path:'/visitCheck',
+          params:{event:'refresh'}
         });
       })
     },
@@ -171,7 +182,14 @@ export default {
       })
     },
     preView(val) {
-      ImagePreview(val);
+      if(Array.isArray(val)){
+        let arr = val.map(v=>{
+          return imgUrl(v);
+        })
+        ImagePreview(arr);
+      }else {
+        ImagePreview([imgUrl(val)]);
+      }
     },
   }
 }

+ 8 - 1
src/views/menu/visitCheck/index.vue

@@ -96,6 +96,13 @@ export default {
       dicts:['out_in_approve_status','out_in_type']
     }
   },
+  beforeRouteEnter(to,from,next){
+    next(vm=>{
+      if(to.params.event === 'refresh'){
+        vm.refreshData();
+      }
+    })
+  },
   mounted() {
     this.initData();
   },
@@ -246,7 +253,7 @@ export default {
   justify-content: space-between;
   font-size: 26px;
   .item-label{
-    flex:.25;
+    flex:.27;
     text-align: left;
     color:#333;
   }

+ 20 - 10
src/views/menu/visitRecord/add.vue

@@ -35,7 +35,7 @@
                   class="nfc-img van-hairline--surround"
                   v-for="(v, i) in selectedUser.imgFile"
                   :key="v"
-                  @click="preView(v)">
+                  @click="preView(selectedUser.imgFile)">
                   <img :src="imgUrl(v)" alt="" />
                 </div>
               </van-cell>
@@ -49,8 +49,8 @@
                   class="nfc-img van-hairline--surround"
                   v-for="(v, i) in selectedUser.letterFile"
                   :key="v.url"
-                  @click="preView(v.url)">
-                  <img :src="imgUrl(v.url)" alt="" />
+                  @click="preView(v.imgPath)">
+                  <img :src="imgUrl(v.imgPath)" alt="" />
                 </div>
               </van-cell>
             </div>
@@ -135,7 +135,7 @@ export default {
         return
       }
       if(!this.formData.arrivalTime){
-        this.$toast('请选择到访时间');
+        this.$toast('请选择到时间');
         return
       }
       let data = {
@@ -145,11 +145,13 @@ export default {
         letterUserId:this.selectedUser.id,
         orgId:this.orgId,
       }
-      alert(JSON.stringify(data))
+      //alert(JSON.stringify(data))
       userRegister(data).then(res=>{
         this.$toast.success('提交成功');
         this.$router.replace({
+          name:'visitRecord',
           path:'/visitRecord',
+          params:{event:'refresh'},
         });
       })
     },
@@ -164,16 +166,24 @@ export default {
       userList(data).then(res=>{
         this.userList = res.data.map(v=>{
           v.imgFile = v.imgFile.split(',');
-          v.letterFile = v.letterFile.map(str=>{
-            return JSON.parse(str)
-          })
+          if(v.letterFile && v.letterFile.length >0){
+            v.letterFile = v.letterFile.map(str=>{
+              return JSON.parse(str)
+            })
+          }
           return v
         })
-        console.log(this.userList,'list')
       })
     },
     preView(val) {
-      ImagePreview(imgUrl(val));
+      if(Array.isArray(val)){
+        let arr = val.map(v=>{
+          return imgUrl(v);
+        })
+        ImagePreview(arr);
+      }else {
+        ImagePreview([imgUrl(val)]);
+      }
     },
   }
 }

+ 27 - 17
src/views/menu/visitRecord/detail.vue

@@ -18,7 +18,7 @@
                   class="nfc-img van-hairline--surround"
                   v-for="(v, i) in selectedUser.imgFile"
                   :key="v"
-                  @click="preView(v)">
+                  @click="preView(selectedUser.imgFile)">
                   <img :src="imgUrl(v)" alt="" />
                 </div>
               </van-cell>
@@ -32,8 +32,8 @@
                   class="nfc-img van-hairline--surround"
                   v-for="(v, i) in selectedUser.letterFile"
                   :key="v.url"
-                  @click="preView(v.url)">
-                  <img :src="imgUrl(v.url)" alt="" />
+                  @click="preView(v.imgPath)">
+                  <img :src="imgUrl(v.imgPath)" alt="" />
                 </div>
               </van-cell>
             </div>
@@ -46,13 +46,15 @@
                 class="nfc-img van-hairline--surround"
                 v-for="(v, i) in selectedUser.checkImage"
                 :key="v"
-                @click="preView(v)">
+                @click="preView(selectedUser.checkImage)">
                 <img :src="imgUrl(v)" alt="" />
               </div>
               </van-cell>
             </div>
-            <date-cell :disabled="selectedUser.departureTime" required title="到达时间" :max-date="maxData" :is-row="true"  v-model="selectedUser.arrivalTime" date-type="datetime" />
-            <date-cell :disabled="selectedUser.departureTime" required title="离开时间" :max-date="maxData" :is-row="true"  v-model="selectedUser.departureTime" date-type="datetime" />
+            <van-cell title="到达时间" v-if="selectedUser.arrivalTime" :value="selectedUser.arrivalTime"></van-cell>
+            <date-cell v-else required title="到达时间" :max-date="maxData" :is-row="true"  v-model="formData.arrivalTime" date-type="datetime" />
+            <van-cell title="离开时间" v-if="selectedUser.departureTime" :value="selectedUser.departureTime"></van-cell>
+            <date-cell v-else required title="离开时间" :max-date="maxData" :is-row="true"  v-model="formData.departureTime" date-type="datetime" />
           </div>
           <div v-if="!selectedUser.departureTime" class="big-btn-box" >
             <van-button  type="info" size="large" @click="onSubmit">确认登记</van-button>
@@ -102,25 +104,23 @@ export default {
   methods:{
     imgUrl,formatDate,
     onSubmit(){
-      let {arrivalTime,departureTime} = this.selectedUser;
-      if(!arrivalTime){
-        this.$toast('请选择到达时间');
-        return
-      }
+      let {departureTime} = this.formData;
       if(!departureTime){
         this.$toast('请选择离开时间');
         return
       }
       let data = {
         id:this.selectedUser.id,
-        arrivalTime,
+        arrivalTime:this.selectedUser.arrivalTime,
         departureTime,
       }
-      alert(JSON.stringify(data))
+      //alert(JSON.stringify(data))
       userDepart(data).then(res=>{
         this.$toast.success('提交成功');
         this.$router.replace({
+          name:'visitRecord',
           path:'/visitRecord',
+          params:{event:'refresh'},
         });
       })
     },
@@ -128,9 +128,12 @@ export default {
       userDetails(this.visitId).then(res=>{
         let checkImage = res.data.checkImage.split(',');
         let imgFile = res.data.imgFile.split(',');
-        let letterFile = res.data.letterFile.map(v=>{
-          return JSON.parse(v)
-        })
+        let letterFile = [];
+        if(res.data.letterFile && res.data.letterFile.length > 0){
+            letterFile = res.data.letterFile.map(v=>{
+            return JSON.parse(v)
+          })
+        }
         this.selectedUser = res.data;
         this.selectedUser.checkImage = checkImage;
         this.selectedUser.imgFile = imgFile;
@@ -138,7 +141,14 @@ export default {
       })
     },
     preView(val) {
-      ImagePreview(imgUrl(val));
+      if(Array.isArray(val)){
+        let arr = val.map(v=>{
+          return imgUrl(v);
+        })
+        ImagePreview(arr);
+      }else {
+        ImagePreview([imgUrl(val)]);
+      }
     },
   }
 }

+ 11 - 4
src/views/menu/visitRecord/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="visitRecord">
-    <NavBar />
+    <NavBar/>
     <div class="page-container">
       <van-search v-model="query.userName" class="van-hairline--bottom" placeholder="请输入人员姓名"  @change="refreshData"/>
       <div class="search-flex">
@@ -38,11 +38,11 @@
                   <div class="item-value"> {{v.userName}}</div>
                 </div>
                 <div class="info-item">
-                  <div class="item-label">证件号:</div>
+                  <div class="item-label">证件号:</div>
                   <div class="item-value">{{v.idCard}}</div>
                 </div>
                 <div class="info-item">
-                  <div class="item-label">到访时间:</div>
+                  <div class="item-label">到时间:</div>
                   <div class="item-value">
                     {{v.arrivalTime}}
                   </div>
@@ -50,7 +50,7 @@
                 <div class="info-item">
                   <div class="item-label">离开时间:</div>
                   <div class="item-value">
-                    {{v.departureTime}}
+                    {{v.departureTime || '暂无'}}
                   </div>
                 </div>
                 <div class="info-item">
@@ -103,6 +103,13 @@ export default {
       dicts:['out_in_type']
     }
   },
+  beforeRouteEnter(to,from,next){
+    next(vm=>{
+      if(to.params.event === 'refresh'){
+        vm.refreshData();
+      }
+    })
+  },
   mounted() {
     this.initData();
   },

+ 65 - 16
src/views/menu/visitRegister/add.vue

@@ -94,12 +94,12 @@
         </van-swipe-cell>
       </div>
 
-
       <!--  添加人员信息    -->
       <div class="card" v-show="checked">
         <van-cell title="人员信息">
           <template #right-icon>
-            <van-button type="primary"  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">
@@ -136,6 +136,7 @@
             <span><i>*</i> 证件上传</span>
             <uploader :maxCount="2" v-model="personnel.imgFile"/>
           </div>
+          <p class="tip-text" >注:证件号码将作为唯一识别码</p>
         </div>
       </div>
       <div class="big-btn-box" >
@@ -193,6 +194,7 @@ export default {
         imgFile:[],
       },
       pList:[],
+      isAdd:true,
       showPicker:false,
       openCalendar:false,
       prop:{
@@ -272,11 +274,13 @@ export default {
         user.imgFile = urlArr.join(',');
         return user
       })
-      alert(JSON.stringify(data))
+     // alert(JSON.stringify(data))
       visitAdd(data).then(res=>{
         this.$toast.success('提交成功');
         this.$router.replace({
+          name:'visitRegister',
           path:'/visitRegister',
+          params:{event:'refresh'},
         });
       })
     },
@@ -284,30 +288,59 @@ export default {
       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);
     },
+    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('请上传证件照正反面');
+        return;
+      }
+      let strObj = JSON.parse(JSON.stringify(this.personnel));
+      let index = this.pList.findIndex(v=>{return v.idCard === strObj.idCard});
+      this.pList.splice(index,1,strObj);
+      this.personnel = {
+        userName:null,
+        idCard:null,
+        companyName:null,
+        imgFile:[],
+      };
+      this.isAdd = true;
+    },
     onAdd(){
-      // this.personnel.imgFile = [{
-      //   url:'askjdkajsdjajkdsa',
-      //   imgPath:'asjkdklaslkdasdlasld',
-      //   name:'asdasdasd'
-      // }]
+      //测试模拟
+      // 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;
@@ -317,6 +350,12 @@ export default {
         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;
+      };
       this.pList.push(strObj);
       this.personnel = {
         userName:null,
@@ -336,10 +375,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)]);
+      }
     },
   }
 }
@@ -446,6 +490,11 @@ export default {
     }
   }
 }
+.tip-text{
+  line-height: 60px;
+  color:red;
+  background-color: #fff;
+}
 .big-btn-box{
   padding-bottom: 20px;
 }

+ 8 - 1
src/views/menu/visitRegister/detail.vue

@@ -121,7 +121,14 @@ export default {
       })
     },
     preView(val) {
-      ImagePreview(val);
+      if(Array.isArray(val)){
+       let arr = val.map(v=>{
+          return imgUrl(v);
+        })
+        ImagePreview(arr);
+      }else {
+        ImagePreview([imgUrl(val)]);
+      }
     },
   }
 }

+ 7 - 0
src/views/menu/visitRegister/index.vue

@@ -105,6 +105,13 @@ export default {
       dicts:['out_in_approve_status','out_in_type']
     }
   },
+  beforeRouteEnter(to,from,next){
+    next(vm=>{
+      if(to.params.event === 'refresh'){
+        vm.refreshData();
+      }
+    })
+  },
   mounted() {
     this.initData();
   },

+ 0 - 3
vue.config.js

@@ -119,9 +119,6 @@ module.exports = defineConfig({
       },
       '/dev': {
         target: "http://10.87.10.55:8080",
-        // target: "http://10.87.10.91:8080",
-        // target: "http://10.87.11.173:8080",
-        // target: "http://10.87.10.47:8080",
         // ws:true,
         changOrigin:true,
         pathRewrite:{