Bläddra i källkod

添加门禁人脸信息

lighter 7 månader sedan
förälder
incheckning
90a8a092a9

+ 8 - 0
src/api/inpatient-service.js

@@ -23,3 +23,11 @@ export function getPrepaidHistory(patientId) {
     params: { patientId },
   })
 }
+
+export function updateDoorFace(data) {
+  return request({
+    url: '/inpatient/updateDoorFace',
+    method: 'post',
+    data,
+  })
+}

+ 5 - 0
src/router/index.js

@@ -188,6 +188,11 @@ export const constantRoutes = [
     component: () => import('../views/hospital-service/inpatient-service/InPatientService.vue'),
     meta: { title: '住院服务' },
   },
+  {
+    path: '/uploadFaceData/:patNo/:times',
+    component: () => import('../views/hospital-service/inpatient-service/UploadFaceData.vue'),
+    meta: { title: '添加门禁人脸' },
+  },
   {
     path: '/zyFeeDetail/:inpatientNo/:admissTimes/:admissDate',
     name: 'zyFeeDetail',

+ 7 - 1
src/views/hospital-service/inpatient-service/InPatientService.vue

@@ -25,6 +25,7 @@
       <div style="height: 5px"></div>
       <van-cell title="住院费用清单" is-link @click="toZyFeeDetail"></van-cell>
       <van-cell title="住院预交金" is-link @click="toPrepaid"></van-cell>
+      <van-cell title="添加门禁人脸" is-link @click="addFaceData"></van-cell>
     </div>
   </window-size>
 </template>
@@ -32,7 +33,7 @@
 <script setup>
 import { computed, onMounted, ref } from 'vue'
 import { useRouter } from 'vue-router'
-import { getInpatientInfo } from '@/api/inpatient-service'
+import {getInpatientInfo} from "@/api/inpatient-service";
 
 const router = useRouter()
 const patientId = router.currentRoute.value.params.patientId
@@ -63,6 +64,11 @@ const toPrepaid = () => {
     },
   })
 }
+
+function addFaceData() {
+  router.push(`/uploadFaceData/${data.value.inpatientNo}/${data.value.admissTimes}`)
+}
+
 onMounted(() => {
   getInpatientInfo(patientId).then((res) => {
     data.value = res

+ 86 - 0
src/views/hospital-service/inpatient-service/UploadFaceData.vue

@@ -0,0 +1,86 @@
+<template>
+  <window-size>
+    <div style="height: 5px"></div>
+    <van-tag>请拍摄照片</van-tag>
+    <div :style="uploadHeight" id="capBox">
+      <div :style="uploadWidth">
+        <van-uploader style="width: 100%; height: 100%" v-model="fileList" :max-count="1">
+          <img style="width: 100%; height: 100%" :src="capImg"/>
+        </van-uploader>
+      </div>
+      <div class="cap-tip">
+        <van-tag type="danger">拍摄要求</van-tag>
+        <p>*&nbsp;&nbsp;光线充足</p>
+        <p>*&nbsp;&nbsp;背景底色单一</p>
+        <p>*&nbsp;&nbsp;拍摄正脸免冠照片</p>
+        <div style="margin: 20px">
+          <van-button type="primary" block :disabled="disableUpload" @click="resizeIdCard">确定上传</van-button>
+        </div>
+      </div>
+    </div>
+  </window-size>
+</template>
+
+<script setup>
+import {computed,ref} from 'vue'
+import store from '@/store'
+import capImg from '@/assets/capture-img.png'
+import {showToast} from 'vant'
+import {resize} from '@/utils/image'
+import {updateDoorFace} from "@/api/inpatient-service";
+import router from "@/router";
+
+const routeParams = router.currentRoute.value.params
+
+const screenSize = store.state.screenSize
+const uploadWidth = {
+  margin: '10px 60px',
+  width: screenSize.w - 120 + 'px',
+}
+const uploadHeight = {
+  height: ((screenSize.w - 120) / 3) * 2 + 'px',
+}
+const fileList = ref([])
+const disableUpload = computed(() => {
+  return fileList.value.length !== 1
+})
+
+const uploadFaceData = (base64) => {
+  const params = {
+    patNo: routeParams.patNo,
+    times: routeParams.times,
+    faceData: base64
+  }
+  updateDoorFace(params).then((res) => {
+    showToast({
+      message: res,
+      position: 'top',
+    });
+  })
+}
+
+const resizeIdCard = () => {
+  let content = fileList.value[0].content
+  if (content.length / 1024 < 2000) {
+    uploadFaceData(content)
+  } else {
+    resize(content, uploadFaceData)
+  }
+}
+
+</script>
+
+<style>
+#capBox .van-uploader__upload,
+#capBox .van-uploader__preview,
+#capBox .van-uploader__preview-image {
+  width: 100% !important;
+  height: 100% !important;
+}
+
+.cap-tip p {
+  font-size: 13px;
+  margin-left: 10px;
+  color: orangered;
+}
+</style>