<template>
|
<view class="full-page">
|
<view class="content">
|
<up-form labelPosition="left" :model="userInfo" :rules="rules" ref="form1" labelWidth='90'>
|
<up-form-item label="身份证正面" prop="userInfo.sex" required borderBottom @click="uploadIdCard('FRONT')"
|
ref="item1">
|
<fui-upload immediate :url="`${apiBaseUrl}api/UpFile/UploadIdCord?PageName=FRONT`" ref="uploadF"
|
max='1' background='#fff' @success="success" @error="error" @complete="complete" width="300"
|
height="150">
|
<image src="/static/positive.png" mode="widthFix" style="width: 300rpx;height: 150rpx;"></image>
|
</fui-upload>
|
<!-- <template #right>
|
<up-icon name="arrow-right"></up-icon>
|
</template> -->
|
</up-form-item>
|
<up-form-item label="身份证反面" prop="userInfo.sex" required borderBottom ref="item1">
|
<fui-upload immediate :url="`${apiBaseUrl}api/UpFile/UploadIdCord?PageName=Back`" ref="uploadB"
|
max='1' background='#fff' @success="success" @error="error" @complete="complete" width="300"
|
height="150">
|
<image src="/static/negative.png" mode="widthFix" style="width: 300rpx;height: 150rpx;"></image>
|
</fui-upload>
|
</up-form-item>
|
<up-form-item label="姓名" required prop="userInfo.name" borderBottom ref="item1">
|
<up-input v-model="state.model1.userInfo.name" border="none" placeholder="请输入姓名"></up-input>
|
</up-form-item>
|
<up-form-item label="性别" required prop="Gender" borderBottom ref="item2">
|
<up-radio-group v-model="userInfo.Gender">
|
<up-radio :customStyle="{marginRight: '16px'}" v-for="(item, index) in radiolist1" :key="index"
|
:label="item.name" :name="item.name">
|
</up-radio>
|
</up-radio-group>
|
</up-form-item>
|
<up-form-item label="联系电话" required prop="userInfo.name" borderBottom ref="item1">
|
<up-input v-model="state.model1.userInfo.name" border="none" placeholder="请输入联系电话"></up-input>
|
</up-form-item>
|
<up-form-item label="身份证号" required prop="userInfo.name" borderBottom ref="item1">
|
<up-input v-model="state.model1.userInfo.name" border="none" placeholder="请输入身份证号"></up-input>
|
</up-form-item>
|
<up-form-item label="简历描述" required prop="userInfo.name" borderBottom ref="item1">
|
<up-textarea v-model="state.model1.userInfo.name" placeholder="请输入简历描述"></up-textarea>
|
</up-form-item>
|
<cameraBufferJpg/>
|
<view class="text-area">
|
<camera device-position="front" style="width: 100%; height: 600rpx;"></camera>
|
</view>
|
<view class="tabbtns">
|
<up-button color='#fece01' class="text-69" text="人脸识别" @click='IaiAddPerso'></up-button>
|
</view>
|
|
|
<!-- <up-popup :show="show" @close="close" @open="open"> -->
|
<!-- <tem-session/> -->
|
<!-- </up-popup> -->
|
<!-- <view class="tabbtns">
|
<up-button color='#fece01' class="text-69" text="保存"></up-button>
|
</view> -->
|
</up-form>
|
</view>
|
|
</view>
|
</template>
|
|
<script setup>
|
import {
|
onLoad,
|
onShow
|
} from "@dcloudio/uni-app";
|
|
import {
|
apiBaseUrl
|
} from '@/common/setting/constVarsHelper.js';
|
import {
|
getCurrentInstance
|
} from 'vue'
|
const {
|
$upload,
|
$api
|
} = getCurrentInstance().appContext.config.globalProperties
|
import {
|
ref,
|
reactive
|
} from 'vue';
|
let webgl = ref()
|
onLoad(() => {
|
let cameraEngine = wx.createCameraContext()
|
// 3、获取 Camera 实时帧数据
|
const listener = cameraEngine.onCameraFrame((frame) => {
|
// console.log(frame)
|
if (!status.value) {
|
return
|
}
|
jiance(frame)
|
})
|
// 5、开始监听帧数据
|
listener.start()
|
})
|
let status = ref(false)
|
let radiolist1 = [{
|
name: '男',
|
},
|
{
|
name: '女',
|
}
|
]
|
const userInfo = reactive({
|
CordId: '430621198204264616',
|
Name: '邹大志',
|
Gender: 1
|
})
|
// 使用 reactive 创建响应式状态
|
const state = reactive({
|
showSex: false,
|
model1: {
|
userInfo: {
|
name: '',
|
sex: '',
|
},
|
},
|
actions: [{
|
name: '男'
|
},
|
{
|
name: '女'
|
},
|
{
|
name: '保密'
|
},
|
],
|
|
radio: '',
|
switchVal: false,
|
});
|
|
// 使用 ref 创建响应式引用
|
const formRef = ref(null);
|
|
|
|
const IaiAddPerso = (e) => {
|
status.value = !status.value
|
// wx.startFacialRecognitionVerify()
|
// const session = wx.createVKSession({
|
// track: {
|
// face: {
|
// mode: 1
|
// } // mode: 1 - 使用摄像头;2 - 手动传入图像
|
// },
|
// })
|
// // 静态图片检测模式下,每调一次 detectFace 接口就会触发一次 updateAnchors 事件
|
// session.on('updateAnchors', anchors => {
|
// anchors.forEach(anchor => {
|
// console.log('anchor.points', anchor.points)
|
// console.log('anchor.origin', anchor.origin)
|
// console.log('anchor.size', anchor.size)
|
// console.log('anchor.angle', anchor.angle)
|
// })
|
// })
|
|
// // 需要调用一次 start 以启动
|
// session.start(errno => {
|
// if (errno) {
|
// console.log(errno)
|
// // 如果失败,将返回 errno
|
// } else {
|
// // 否则,返回null,表示成功
|
// session.detectFace({
|
// frameBuffer, // 图片 ArrayBuffer 数据。人脸图像像素点数据,每四项表示一个像素点的 RGBA
|
// width, // 图像宽度
|
// height, // 图像高度
|
// scoreThreshold: 0.5, // 评分阈值
|
// sourceType: 1,
|
// modelMode: 1,
|
// })
|
// }
|
// })
|
// wx.chooseMedia({
|
// count:1,
|
// sourceType: ['camera'],
|
// mediaType: ['image'],
|
// maxDuration: 60,
|
// camera: 'front',
|
// success(res) {
|
// for (let i = 0; i < res.tempFiles.length; i++) {
|
// console.log("===111===" + res.tempFiles[i].tempFilePath)
|
// console.log("===222===" + res.tempFiles[i].size)
|
// }
|
// }
|
// })
|
// $api.IaiAddPerso({}, userInfo).then(res => {
|
// console.log(res, '人脸识别');
|
// })
|
}
|
// 定义方法
|
function sexSelect(e) {
|
state.model1.userInfo.sex = e.name;
|
if (formRef.value) {
|
formRef.value.validateField('userInfo.sex');
|
}
|
}
|
|
//上传图片Base64
|
const uploadFilesFByBase64s = (el) => {
|
$api.UpdateFileBase64({
|
fileBase64: el
|
}).then(res => {
|
|
// if (res.code == 1) {
|
|
uni.hideLoading();
|
console.log(res.data.src);
|
// } else {
|
|
// }
|
});
|
}
|
const uploadIdCard = (msg, event) => {
|
|
// getBase64(msg.file.url).then(res => {
|
// console.log(res);
|
// // uploadFilesFByBase64s(res)
|
// })
|
// $api.UpdateFileBase64().then(res=>{
|
// console.log(res,'UpdateFileBase64');
|
// })
|
$api.UploadIdCord(msg.file.url, {
|
PageName: 'Back'
|
}).then(res => {
|
console.log(res);
|
})
|
uni.showLoading({
|
title: '上传中...'
|
});
|
// uni.getFileSystemManager().readFile({
|
// filePath: msg.file.url, // 替换为你的文件路径
|
// encoding: 'base64',
|
// success: res => {
|
// uploadFilesFByBase64s(res.data)
|
// console.log('文件内容的base64:', res.data);
|
// },
|
// fail: err => {
|
// console.error('读取文件失败:', err);
|
// }
|
// });
|
|
}
|
//上传成功时触发
|
const success = (e) => {
|
console.log(e)
|
//e.res 为服务器返回数据
|
//上传成功回调,处理服务器返回数据【此处根据实际返回数据进行处理】
|
let res = JSON.parse(e.res.data.replace(/\ufeff/g, "") || "{}")
|
|
if (res.data.url) {
|
userInfo.CordId = res.data.info.idNum
|
userInfo.name = res.data.info.name
|
userInfo.Gender = res.data.info.sex
|
//处理结果返回给组件
|
//res.data.url为上传成功后返回的图片地址
|
//e.index为图片索引值
|
// this.$refs.upload.result(res.data.url, e.index)
|
}
|
}
|
//上传失败时触发
|
const error = (e) => {}
|
//选择图片或上传完成时触发
|
const complete = (e) => {
|
if (e.action == 'delete') {
|
// 删除处理
|
}
|
console.log(e, '删除')
|
|
}
|
const jiance = (imgbuffer) => {
|
// var frameBuffer =
|
const session = wx.createVKSession({
|
track: {
|
face: {
|
mode: 2
|
} // mode: 1 - 使用摄像头;2 - 手动传入图像
|
},
|
version: 'v1'
|
|
})
|
const onFrame = timestamp => {
|
console.log(webgl,'webgl');
|
const frame = session.getVKFrame(webgl.width, webgl.height)
|
if (frame) {
|
console.log(frame);
|
// renderFrame(frame)
|
}
|
|
session.requestAnimationFrame(onFrame)
|
}
|
session.start(errno => {
|
if (errno) {
|
// 如果失败,将返回 errno
|
} else {
|
// 否则,返回null,表示成功
|
session.detectFace({
|
frameBuffer: imgbuffer.data, // 图片 ArrayBuffer 数据。人脸图像像素点数据,每四项表示一个像素点的 RGBA
|
width: imgbuffer.width, // 图像宽度
|
height: imgbuffer.height,
|
scoreThreshold: 0.8, // 评分阈值
|
sourceType: 1,
|
modelMode: 0,
|
})
|
}
|
|
session.requestAnimationFrame(onFrame)
|
})
|
|
session.on('updateAnchors', anchors => {
|
console.log("检测到人脸", anchors)
|
|
anchors.forEach(anchor => {
|
console.log('anchor.points', anchor.points)
|
console.log('anchor.origin', anchor.origin)
|
console.log('anchor.size', anchor.size)
|
console.log('anchor.angle', anchor.angle)
|
})
|
})
|
session.on('removeAnchors', () => {
|
console.log("人脸消失", "removeAnchors")
|
})
|
}
|
</script>
|
|
<style>
|
.content {
|
background-color: #fff;
|
padding: 0 20rpx;
|
}
|
|
.fui-upload__item {
|
margin-top: 20rpx !important;
|
}
|
</style>
|