zhangwei
2025-01-16 e3f6581c48b1dfb65c55e8a1a6ce1761a7dc26b4
src/pages/checkin/checkin.vue
@@ -1,33 +1,66 @@
<template>
   <view>
      <view class='chuany-flex camera-fill chuany-justify-center chuany-align-center'>
         <fui-upload immediate :url="`${apiBaseUrl}api/UpFile/UpdateFile`" ref="uploadB" max='1' @success="success"
            @error="error" @complete="complete" width="300" height="300">
            <image v-if="src" :src="src" mode="widthFix" style="width: 300rpx;height: 300rpx;"></image>
            <fui-icon v-else name="camera-fill"></fui-icon>
         </fui-upload>
         <tem-upload-fui immediate :url="`${apiBaseUrl}/api/UpFile/UpdateFile`" ref="uploadE" max='1'
            @success="success" cameraType='back' :sizeType='sizeType' :sourceType='sourceType' @error="error"
            @complete="complete" width="280" :mediaType='mediaType' height="280">
            <view class="" v-if="checkPhoto">
               <image :src="checkPhoto" mode="aspectFill" style="width: 280rpx;height: 280rpx;">
               </image>
            </view>
            <view class=" chuany-flex chuany-flex-direction chuany-align-center" v-else>
               <fui-icon name="camera-fill"></fui-icon>
               <view class="chuany-font20">拍摄环境照片</view>
            </view>
         </tem-upload-fui>
         <tem-upload-fui ref="uploadP" max='1' @error="error" @complete="completePerson" width="280" height="280"
            :sizeType='sizeType' :sourceType='sourceType' :mediaType='mediaType' :isFace='true'>
            <view class="" v-if="faceImg">
               <image :src="faceImg" mode="aspectFill" style="width: 280rpx;height: 280rpx;"></image>
            </view>
            <view class=" chuany-flex chuany-flex-direction chuany-align-center" v-else>
               <fui-icon name="addfriends-fill"></fui-icon>
               <view class="chuany-font20">拍摄人脸照片</view>
            </view>
         </tem-upload-fui>
         <!-- <view class="fui-upload__item fui-upload__noborder"
            style="width:280rpx;height:280rpx;background:#eee;" @tap.stop="openCamera">
            <view class="" v-if="faceImg">
               <image :src="faceImg" mode="aspectFill" style="width: 280rpx;height: 280rpx;"></image>
            </view>
            <view class=" chuany-flex chuany-flex-direction chuany-align-center" v-else>
               <fui-icon name="addfriends-fill"></fui-icon>
               <view class="chuany-font20">拍摄人脸照片</view>
            </view>
         </view> -->
      </view>
      <view class="c-m-30 c-p-t-20 c-p-b-20">
      <view class="c-m-20 chuany-font24">
         为了保证打卡的正确性,‌建议在公司门口或进入办公室的门口再打卡。‌同时,‌确保照片的清晰、‌明亮,‌面部可见。
      </view>
      <view class="c-p-20">
         <view class="chuany-flex chuany-justify-between c-p-t-20">
            <view class="chuany-flex chuany-flex-direction chuany-align-center textclo chuany-font24 step_item"
               v-for="(item,index) in 4">
               <up-avatar shape="square" size="38" src="https://uview-plus.jiangruyi.com/album/1.jpg"
                  @click="previewImage"></up-avatar>
               <view class="line line-active" v-if="index!==3">
      <view v-if='dakaList&&dakaList.length>0'>
         <view class="chuany-flex chuany-justify-evenly chuany-flex-wrap c-p-t-20">
            <view
               class="chuany-flex chuany-flex-direction chuany-align-center chuany-justify-around textclo chuany-font24 c-p-b-30 daka"
               :key="index" v-for="(item,index) in dakaList">
               <up-avatar shape="square" size="56" :src="item.checkPhoto"
                  @click="previewImage(item.checkPhoto)"></up-avatar>
               <view class="step_item">
                  <up-icon name="checkmark-circle-fill" :color="item.checktime?'#2979ff':'#e9e8e8'"
                     size="22"></up-icon>
                  <view class="line" :class="item.checkPhoto?'line-active':''"
                     v-if="index!==dakaList.length-1&&index%2==0">
                  </view>
               </view>
               <up-icon name="checkmark-circle-fill" color="#2979ff" size="22"></up-icon>
               <text>已打卡</text>
               <text>10:00</text>
               <text>{{item.checktime?'已打卡':'未打卡'}}</text>
               <text
                  :class="$util.formatDate(item.checktime,true)=='-'?'core-opa':''">{{$util.formatDate(item.checktime,true)}}</text>
            </view>
         </view>
      </view>
      <view class="tabbtns">
         <up-button color='#fece01' class="text-69" text="确认打卡" @click="enroll"></up-button>
         <up-button color='#fece01' class="text-69" text="确认打卡" :loading='isLoading' loadingText="打卡中"
            @click="enroll"></up-button>
      </view>
   </view>
</template>
@@ -39,48 +72,90 @@
   export default {
      data() {
         return {
            src: ''
            src: '',
            apiBaseUrl,
            orderBiddingId: '', //招工明细OrderBiddingId
            checkPhoto: '', //打卡照片
            faceImg: '', //人脸图片
            dakaList: [],
            sourceType: ["camera"],
            sizeType: ['compressed'],
            mediaType: ['image'],
            isLoading: false
         }
      },
      onLoad(option) {
         let {
            orderid
         } = option
         this.$api.getDaka({
            orderId: orederid
         }).then(res => {
            console.log(res, '打卡');
         })
         this.apiBaseUrl = apiBaseUrl
         let id = option.orderid
         this.orderBiddingId = id
         this.getDaka(id)
      },
      onShow(){
         if(this.$db.get('faceImg')){
            let faceImgPath = this.$db.get('faceImg')
            this.$refs.uploadP.urls = [faceImgPath]
            this.$refs.uploadP.status = ['success']
            this.$util.pathToBase64(faceImgPath).then(res => {
               this.faceImg = res
            })
         }
      },
      onUnload(){
         this.$db.del('faceImg')
      },
      methods: {
         openCamera() {
            console.log('-----------------')
            // 拍照和相册
            uni.chooseImage({
               count: 1,
               sizeType: ["original", "compressed"],
               sourceType: ["camera"],
               success: (res) => {
                  const {
                     tempFilePaths
                  } = res;
                  console.log(tempFilePaths);
               },
            });
         getDaka(id) {
            this.$api.getDaka({
               orderId: id
            }).then(res => {
               if (res.code == 1) {
                  this.dakaList = res.data ? res.data.orderBiddingDetailCheck : []
                  if (this.dakaList.length > 6) {
                     this.dakaList.length = 6
                  }
                  if (this.dakaList.length % 2 !== 0) {
                     this.dakaList.push({})
                  }
               } else {
                  this.$util.showToast({
                     title: res.error
                  })
               }
            })
         },
         openCamera() {
            // 拍照和相册
            // uni.chooseMedia({
            //    count: 1,
            //    mediaType: ['image'],
            //    sizeType: ["compressed"],
            //    sourceType: ["camera"],
            //    camera: 'front',
            //    success: (res) => {
            //       const {
            //          tempFiles
            //       } = res;
            //       this.$util.pathToBase64(tempFiles[0].tempFilePath).then(res => {
            //          this.faceImg = res
            //       })
            //    },
            // });
         },
         success(e) {
            //e.res 为服务器返回数据
            //上传成功回调,处理服务器返回数据【此处根据实际返回数据进行处理】
            let res = JSON.parse(e.res.data.replace(/\ufeff/g, "") || "{}")
            console.log(res.data);
            if (res.data.url) {
               enterpriseInfo.businessLicense = res.data.url
               enterpriseInfo.suppliername = res.data.info.name //企业名称
               enterpriseInfo.regtime = res.data.info.setDate //注册时间
               enterpriseInfo.address = res.data.info.address //联系地址
               enterpriseInfo.suppliercode = res.data.info.regNum //企业注册号
               enterpriseInfo.contact = res.data.info.person //联系人
            if (res.data) {
               this.checkPhoto = res.data //打卡照片
               //人脸图片
               // enterpriseInfo.businessLicense = res.data.url
               // enterpriseInfo.suppliername = res.data.info.name //企业名称
               // enterpriseInfo.regtime = res.data.info.setDate //注册时间
               // enterpriseInfo.address = res.data.info.address //联系地址
               // enterpriseInfo.suppliercode = res.data.info.regNum //企业注册号
               // enterpriseInfo.contact = res.data.info.person //联系人
            }
         },
         error() {
@@ -92,9 +167,61 @@
            }
            console.log(e, '删除')
         },
         previewImage() {
         completePerson(e) {
            if (e.action == 'delete') {
               this.faceImg = ''
               this.$db.del('faceImg')
               // 删除处理
               return
            }
            this.$util.pathToBase64(e.urls[0]).then(res => {
               this.faceImg = res
            })
         },
         previewImage(url) {
            uni.previewImage({
               urls: ['https://uview-plus.jiangruyi.com/album/1.jpg']
               urls: [url]
            })
         },
         enroll() {
            if (!this.checkPhoto) {
               this.$util.showToast({
                  title: "请拍摄环境照片!",
                  icon: "error"
               })
               return
            }
            if (!this.faceImg) {
               this.$util.showToast({
                  title: "请拍摄人脸照片!",
                  icon: "error"
               })
               return
            }
            this.isLoading = true
            let obj = {
               OrderId: this.orderBiddingId, //招工明细OrderBiddingId
               checkPhoto: this.checkPhoto, //打卡照片
               faceImg: this.faceImg,
            }
            this.$api.saveDaka(obj).then(res => {
               if (res.code == 1) {
                  this.$util.showToast({
                     title: "打卡成功!",
                     icon: "success"
                  })
                  this.checkPhoto = '' //打卡照片
                  this.faceImg = ''
                  this.$db.del('faceImg')
                  this.$refs.uploadP.deleteImage()
                  this.$refs.uploadE.deleteImage()
                  this.getDaka(this.orderBiddingId)
               } else {
                  this.$util.showToast({
                     title: res.error,
                  })
               }
               this.isLoading = false
            })
         }
      }
@@ -102,11 +229,38 @@
</script>
<style lang="scss">
   .fui-upload__item {
      /* #ifndef APP-NVUE */
      display: flex;
      /* #endif */
      align-items: center;
      justify-content: center;
      margin-right: 20rpx;
      margin-bottom: 20rpx;
      /* #ifdef H5 */
      cursor: pointer;
      /* #endif */
      position: relative;
      /* #ifndef APP-NVUE */
      box-sizing: border-box;
      /* #endif */
   }
   .fui-upload__noborder {
      border-width: 0;
   }
   .camera-fill {
      width: 400rpx;
      height: 400rpx;
      // width: 400rpx;
      // height: 400rpx;
      margin: 20rpx auto;
      border-radius: 20rpx;
   }
   .daka {
      width: 260rpx;
      height: 230rpx;
   }
   .step_item {
@@ -116,12 +270,13 @@
      .line {
         position: absolute;
         top: 92rpx;
         left: 52rpx;
         top: 17rpx;
         left: 35rpx;
         content: "";
         height: 4rpx;
         width: 192rpx;
         width: 310rpx;
         background-color: #e9e8e8;
         z-index: -1;
      }
      .line-active {