wwf
14 小时以前 4e6f18dfa08e2f2f4f02aaa1b8e8e51852b7a9a1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<template>
  <el-dialog
    v-model="dialogFlag"
    width="80%"
    style="max-width: 500px;"
    align-center
    :show-close="status!='auditing'"
    :close-on-click-modal="false"
    :close-on-press-escape="false"
  >
    <div class="p-7 pt-0" style="display: flex; flex-direction: column; align-items: center;">
      <div class="image_box" v-if="['unStart', 'auditing'].includes(status)">
        <el-image :src="base64"></el-image>
        <div v-if="status=='auditing'" class="scan-line"></div>
      </div>
      <el-row justify="center" v-else-if="['success', 'fail'].includes(status)">
        <el-image :src="$getImageUrl(`/h5/face_${status}.png`)"></el-image>
        <el-row>
          <el-text class="text-lg">人脸验证{{ status=='success'?'':'不' }}通过</el-text>
        </el-row>
        <el-row class="mt-2">
          <el-text v-if="status=='success'">系统已成功审核您的身份</el-text>
          <el-text v-else-if="status=='fail'">请重新验证您的身份</el-text>
        </el-row>
      </el-row>
      <el-row justify="center" class="mt-5" v-if="status=='auditing'">
        <el-text>正在审核中,请耐心等待...</el-text>
      </el-row>
      <el-button
        v-if="status=='unStart'"
        @click="submitAudit" 
        :loading="status=='auditing'" 
        type="primary"
        size="large" class="mt-5" 
        style="width: 100%;"
      >
        提交审核
      </el-button>
      <el-button
        v-else-if="status=='success'"
        @click="handlerSuccess"
        type="primary" 
        size="large" class="mt-5" 
        style="width: 100%;"
      >
        完成验证
      </el-button>
      <el-button
        v-else-if="status=='fail'"
        @click="dialogFlag=false"
        type="primary" 
        size="large" class="mt-5" 
        style="width: 100%;"
      >
        确定
      </el-button>
    </div>
  </el-dialog>
</template>
 
<script>
import { uploadByBase64 } from '@/utils/tool.js';
 
export default {
  components: {},
  data() {
    return {
      dialogFlag: false,
      status: '' 
    }
  },
  props: {
    modelValue: {
      type: Boolean,
      default: false
    },
    base64: {
      type: String,
      default: ''
    }
  },
  computed: {
    
  },
  created() {
    
  },
  watch: {
    modelValue(val) {
      this.dialogFlag = val
      if (val) {
        this.status = 'unStart'
      }
    },
    dialogFlag(val) {
      this.$emit('update:modelValue', val)
    }
  },
  methods: {
    async submitAudit() {
      this.status = 'auditing'
      const url = await uploadByBase64(this.base64 ,'人脸照片')
      if (!url) {
        this.status = 'fail'
        return
      }
      const params = { faceImgPath: url  }
      this.$axios.get('/system/auth/staff/checkin/face-match', { params }).then(res => {
        if (res.data.code == 0) {
          // this.status = res.data.data ? 'success' : 'fail'
          this.status = 'success'
        } else {
          this.status = 'fail'
          this.$message.error(res.data.msg || "人脸比对失败")
        }
      }).catch(() => {
        this.status = 'fail'
      })
    },
    handlerSuccess() {
      this.dialogFlag = false
      this.$emit('handlerSuccess')
    }
  }
}
</script>
<style scoped lang="scss">
.image_box {
  position: relative;
  width: 90%;
  max-width: 300px;
  aspect-ratio: 1/1;
  border-radius: 50% 50%;
  overflow: hidden;
  display: flex;
  justify-content: center;
  border: 5px solid #5693f4;
}
/* 扫描线 */
.scan-line {
  position: absolute;
  left: 0px;
  right: 0px;
  height: 50px;
  background: linear-gradient(0deg, #5693f4, transparent);
  animation: scan 2s ease-in-out infinite;
  /* 初始位置设在顶部 */
  top: -50px;
}
 
@keyframes scan {
  0% { top: -50px; }
  100% { top: 100%; } /* 移动到底部 */
}
 
</style>