Bläddra i källkod

添加思倍云接口

wangtao 11 månader sedan
förälder
incheckning
c079b6837b
3 ändrade filer med 306 tillägg och 177 borttagningar
  1. 41 9
      src/api/index.js
  2. 137 152
      src/views/fillIn.vue
  3. 128 16
      src/views/validate.vue

+ 41 - 9
src/api/index.js

@@ -1,26 +1,58 @@
 import request from "@/utils/request";
 
-// 组织查询(富士)
-export function getOrganization(data) {
+// // 组织查询(富士)
+// export function getOrganization(data) {
+//     return request({
+//         url: "http://192.168.10.26:50014/api/E8/organization/get-page-list",
+//         method: "post",
+//         data
+//     });
+// }
+// // 人员查询(富士)
+// export function getCustomer(data) {
+//     return request({
+//         url: "http://192.168.10.26:50014/api/E8/customer/get-page-list",
+//         method: "post",
+//         data
+//     });
+// }
+// // 新增访客(富士)
+// export function addVisitor(data) {
+//     return request({
+//         url: "http://192.168.10.26:50014/api/E8Door/visitor-registration",
+//         method: "post",
+//         data
+//     });
+// }
+
+
+
+
+// 新增访客(思倍云)
+export function addVisitor(data) {
     return request({
-        url: "http://192.168.10.26:50014/api/E8/organization/get-page-list",
+        url: "http://218.4.219.62:8083/visitor/record",
         method: "post",
         data
     });
 }
-// 人员查询(富士)
-export function getCustomer(data) {
+
+// 查询访客(思倍云)
+export function getVisitor(data) {
     return request({
-        url: "http://192.168.10.26:50014/api/E8/customer/get-page-list",
+        url: "http://218.4.219.62:8083/visitor/query",
         method: "post",
         data
     });
 }
-// 新增访客(富士)
-export function addVisitor(data) {
+// 访客签到(思倍云)
+export function signinoutVisitor(data) {
     return request({
-        url: "http://192.168.10.26:50014/api/E8Door/visitor-registration",
+        url: "http://218.4.219.62:8083/visitor/signinout",
         method: "post",
         data
     });
 }
+
+
+

+ 137 - 152
src/views/fillIn.vue

@@ -10,98 +10,52 @@
         :rules="rules"
         label-width="15rem"
         class="fillIn-contain-form"
+        style="padding-right:30px;"
       >
         <el-row>
           <el-col :span="12">
-            <el-form-item
-              label="访客名称"
-              prop="visitorName"
-              :rules="rules.visitorName"
-            >
-              <el-input
-                placeholder="请输入访客名称"
-                v-model="form.visitorName"
-                disabled
-              ></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">            
-            <el-form-item label="性别" prop="sex">
-              <el-select v-model="form.sex" placeholder="请选择性别" style="width: 100%"  disabled>
-                <el-option
-                 
-                  v-for="item in options"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="身份证号码" prop="identityCardNo">
-              <el-input
-                placeholder="请输入身份证号码"
-                v-model="form.identityCardNo"
-                disabled
-              ></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="手机号码" prop="mobilePhone">
+            <el-form-item label="被访人姓名" :rules="rules.targetPeopleName">
               <el-input
-                placeholder="请输入手机号码"
-                v-model="form.mobilePhone"
+                placeholder="请输入被访人姓名"
+                v-model="form.targetPeopleName"
               ></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="访客公司" >
+            <el-form-item label="被访人手机号码" prop="targetPeoplePhone">
               <el-input
-                placeholder="请输入访客公司"
-                v-model="form.visitorCompany"
+                placeholder="请输入被访人手机号码"
+                v-model="form.targetPeoplePhone"
               ></el-input>
             </el-form-item>
           </el-col>
-        
           <el-col :span="12">
             <el-form-item
               class="el-form-pack-12"
-              label="随行人数"
-              prop="accompanyNum"
+              label="来访事由"
+              :rules="rules.visitorReasonCode"
             >
               <el-input
-                placeholder="请输入随行人数"
-                v-model="form.accompanyNum"
-                min="0"
+                placeholder="请输入拜访事由"
+                v-model="form.visitorReasonCode"
               ></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item
               class="el-form-pack-12"
-              label="被访部门"
-              prop="intervieweeDepartId"
+              label="来访人数"
+              :rules="rules.visitorNumber"
             >
-              <el-tree-select
-                v-model="form.intervieweeDepartId"
-                :data="departData"
-                :render-after-expand="false"
-                style="width: 100%"
-                @change="departChange"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="被访人手机号码" prop="intervieweeMobile">
               <el-input
-                placeholder="请输入被访人手机号码"
-                v-model="form.intervieweeMobile"
+                placeholder="请输入来访人数"
+                v-model="form.visitorNumber"
+                min="1"
               ></el-input>
             </el-form-item>
           </el-col>
-          <!-- <el-col :span="16">
-            <el-form-item label="到访起止时间" style="width: 100%">
+          <el-col :span="12">
+            <el-form-item label="到访起止时间" style="width: 100%" :rules="rules.dateRange">
               <el-date-picker
                 v-model="dateRange"
                 :default-time="[new Date(2000, 1, 1), new Date(2000, 2, 1)]"
@@ -112,16 +66,55 @@
                 end-placeholder="结束时间"
               ></el-date-picker>
             </el-form-item>
-          </el-col> -->
-            <el-col :span="12">
+          </el-col>
+          <el-col :span="12">
             <el-form-item
-              class="el-form-pack-12"
-              label="拜访事由"
-              prop="reason"
+              label="访客名称"
+              :rules="rules.peopleName"
             >
               <el-input
-                placeholder="请输入拜访事由"
-                v-model="form.reason"
+                placeholder="请输入访客名称"
+                v-model="form.visitorPersonList.peopleName"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item
+              label="访客手机号"
+              :rules="rules.peopleName"
+            >
+              <el-input
+                placeholder="请输入访客手机号"
+                v-model="form.visitorPersonList.peoplePhone"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">            
+            <el-form-item label="性别" prop="sex">
+              <el-select v-model="form.visitorPersonList.sex" placeholder="请选择性别" style="width: 100%" >
+                <el-option
+                 
+                  v-for="item in sex"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="身份证号码"  :rules="rules.cardId">
+              <el-input
+                placeholder="请输入身份证号码"
+                v-model="form.visitorPersonList.cardId"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="来访单位" :rules="rules.callerCorpName">
+              <el-input
+                placeholder="请输入来访单位"
+                v-model="form.visitorPersonList.callerCorpName"
               ></el-input>
             </el-form-item>
           </el-col>
@@ -153,7 +146,7 @@ import { useRouter } from "vue-router";
 /*----------------------------------组件引入-----------------------------------*/
 import layout from "@/components/layout/index.vue";
 /*----------------------------------接口引入-----------------------------------*/
-import { getOrganization, getCustomer, addVisitor } from "@/api/index";
+import {  addVisitor } from "@/api/index";
 /*----------------------------------公共变量-----------------------------------*/
 const router = useRouter();
 const { proxy } = getCurrentInstance();
@@ -164,25 +157,67 @@ const departData = ref(); //组织列表
 const phoneArray = ref([]); //人员电话号码合集
 const data = reactive({
   form: {
-    idType: 0,//证件类型(身份证)
-    visitorRegisterType: 0,//访客登记类型(现场登记)
-    reservedField1: 1,//登记来源(访客机)
-    registrationPlace:"共进大厦一楼",//登记地点
-    visitorStartTime: "",
-    vistorEndTime: "",
-    mobilePhone: "",
+    targetPeoplePhone:"",//被访人手机号
+    targetPeopleName:"",//被访人姓名 .
+    visitorReasonCode:"",//来访事由编码 .
+    visitorReasonInfo:"",//来访事由 .
+    visitorNumber:"",//来访人数 .
+    startTime:"", //开始时间 .
+    endTime:"", //结束时间 .
+    visitorPersonList:{
+      peopleName:"",//访客姓名 .
+      peoplePhone:"",//访客手机号 .
+      sex:"",//访客性别 .
+      cardId:"341282199208123456",//证件号 .
+      cardType:"2",//证件类型 .
+      plates:"2",//车牌号 .
+      callerCorpName:"",//来访单位 .
+      signInOutState:"non",//签到/离状态 .
+    } //访客信息列表 .
   },
+  visitorReasonCodeList:[
+    {label:"亲友拜访",value:"family_friends_visitor"},
+    {label:"外卖配送",value:"courier_delivery"},
+    {label:"受邀面试",value:"interview"},
+    {label:"商务洽谈",value:"business_talks"},
+    {label:"预约服务",value:"reservation_service"},
+    {label:"其他",value:"other"}  
+  ],
+  visitorReasonInfoList:[
+    {label:"亲友拜访",value:"family_friends_visitor"},    
+    {label:"外卖配送",value:"ourier_delivery"},
+    {label:"受邀面试",value:"interview"},
+    {label:"商务洽谈",value:"business_talks"},    
+    {label:"预约服务",value:"reservation_service"},
+    {label:"其他",value:"other"}
+  ],
+  sex:[
+    {label:"女",value:"man"},
+    {label:"男",value:"woman"},
+    {label:"未知",value:"unknown"},
+  ],
   rules: {
-    visitorName: [
-      { required: true, message: "请输入访客名称", trigger: "blur" },
+    targetPeopleName: [
+      { required: true, message: "请输入被访人姓名", trigger: "blur" },
     ],
-    identityCardNo: [
+    visitorReasonCode: [
+      { required: true, message: "请选择来访事由", trigger: "change" },
+    ],
+    visitorNumber: [
+      { required: true, message: "请输入来访人数", trigger: "blur" },
+    ],
+    peopleName: [
+      { required: true, message: "请输入访客姓名", trigger: "blur" },
+    ],
+    peoplePhone:proxy.regex.Phone(true, "请输入访客手机号码"),
+    sex: [
+      { required: true, message: "请选择性别", trigger: "blur" },
+    ],
+    cardId: [
       { required: true, message: "请输入访客身份证号码", trigger: "blur" },
     ],
-    mobilePhone: proxy.regex.Phone(true, "请输入手机号码"),
-
-    intervieweeMobile: proxy.regex.CheckMobile(
-      { required: true, message: "被访人手机号码不能为空" },
+    mobilePhone:proxy.regex.CheckMobile(
+      { required: true, message: "访客手机号码不能为空" },
       {
         trigger: "blur",
         validator: (rule, value, callback) =>
@@ -194,42 +229,33 @@ const data = reactive({
           ),
       }
     ),
-
-    intervieweeDepartId: [
-      { required: true, message: "请选择被访部门", trigger: "change" },
+    callerCorpName: [
+      { required: true, message: "请输入来访单位", trigger: "blur" },
     ],
+    dateRange:[{ required: true, message: "请选择到访起止时间", trigger: "blur" },]
   },
   dateRange: [],
 });
 const timer = ref(null);
-const options = [
-  {
-    value: '1',
-    label: '女',
-  },
-  {
-    value: '2',
-    label: '男',
-  }]
 const certificateData = ref({});
-const { form, rules, dateRange } = toRefs(data);
+const { form, rules, dateRange, visitorReasonCodeList, visitorReasonInfoList, sex } = toRefs(data);
 /*----------------------------------方法声明-----------------------------------*/
 
 
 /** 身份证数据读取 */
 function getData() {
-  timer.value = setInterval(() => {
-    axios
-      .get(
-        "http://127.0.0.1:24010/ZKIDROnline/ScanReadIdCardInfo?OP-DEV=1&CMD-URL=4&REPEAT=1&READTYPE=1&TIMEOUT=4"
-      )
-      .then((response) => {
-        form.value.visitorName = response.data.Certificate.Name;
-        form.value.sex = response.data.Certificate.Sex=='女'?'1':'2';
-        form.value.identityCardNo = response.data.Certificate.IDNumber;
-      })
-      .catch((error) => {});
-  }, 3000);
+  // timer.value = setInterval(() => {
+  //   axios
+  //     .get(
+  //       "http://127.0.0.1:24010/ZKIDROnline/ScanReadIdCardInfo?OP-DEV=1&CMD-URL=4&REPEAT=1&READTYPE=1&TIMEOUT=4"
+  //     )
+  //     .then((response) => {
+  //       form.value.visitorName = response.data.Certificate.Name;
+  //       form.value.sex = response.data.Certificate.Sex=='女'?'1':'2';
+  //       form.value.identityCardNo = response.data.Certificate.IDNumber;
+  //     })
+  //     .catch((error) => {});
+  // }, 3000);
 }
 
 /** 新增访客表单提交 */
@@ -273,49 +299,8 @@ function submitForm() {
   });
 }
 
-/** 获取访客部门树结构数据 */
-function getDepartData() {
-  getOrganization({
-    pageIndex: 1,
-    maxResultCount: 10,
-  }).then((request) => {
-    if (request.success == true) {
-      departData.value = JSON.parse(
-        JSON.stringify(request.result.item)
-          .replace(/name/g, "label")
-          .replace(/id/g, "value")
-      );
-    } else {
-      ElMessage.error(request.msg);
-    }
-  });
-}
-
-/**
- * @部门下拉chage事件
- */
-function departChange(val) {
-  getCustomer({
-    pageIndex: 1,
-    maxResultCount: 10,
-    queryDto: {
-      orgIds: [val],
-    },
-  }).then((request) => {
-    if (request.success == true) {
-      var dataArray = request.result.item;
-      dataArray.forEach(function (item, index) {
-      phoneArray.value.push(item.mobile1);
-    });
-    } else {
-      ElMessage.error(request.msg);
-    }
-  });
-}
-
 onMounted(() => {
   getData();
-  getDepartData();
 });
 
 onUnmounted(() => {

+ 128 - 16
src/views/validate.vue

@@ -2,15 +2,37 @@
   <div class="app-container validate">
       <div class="validate-contain">
         <div class="validate-contain-search">
-          <el-input placeholder="请输入身份证号码"  v-model="identityCardNo"  class="validate-contain-search-input"></el-input> 
+          <el-input placeholder="请输入身份证号码"  v-model="cardId"  class="validate-contain-search-input"></el-input> 
           <el-button type="primary" icon="Search" @click="handle('get')" class="validate-contain-search-button" size="large">查询</el-button>
         </div>
-        <div class="validate-contain-dh">
+        <div class="validate-contain-dh" v-if="!cardId">
           <img src="@/assets/images/dkq.png" class="validate-contain-dh-dkq">
           <img src="@/assets/images/sfz.png" class="validate-contain-dh-sfz">
         </div>
-        <p>请将身份证置于读卡器上,自动获取身份证号码</p>
-        <image style="width: 130px; height: 130px" src="@/assets/images/idcard.png" />
+        <p v-if="!cardId">请将身份证置于读卡器上,自动获取身份证号码</p>
+        <image style="width: 130px; height: 130px" src="@/assets/images/idcard.png"  v-if="!cardId" />
+        <div class="VisitorsRecord">
+          <div class="list">
+            <div class="item" v-for="(item,index) in visitorsRecord" :key="index" @click="handle('select',item)" :class="item.targetPeopleCode == active ? 'active' : ''">
+              <div>
+                <span class="p1">被访人姓名:</span><span class="p2">{{item.targetPeopleName}}</span>
+              </div>
+              <div>
+                <span class="p1">被访人身份证号:</span><span class="p2">{{item.targetPeopleName}}</span>
+              </div>
+              <div>
+                <span class="p1">被访人手机号:</span><span class="p2">{{item.targetPeopleName}}</span>
+              </div>
+              <div>
+                <span class="p1">来访事由:</span><span class="p2">{{item.targetPeopleName}}</span>
+              </div>
+              <div>
+                <span class="p1">来访时间:</span><span class="p2">{{item.targetPeopleName}}</span>
+              </div>
+            </div>
+          </div>
+        </div>  
+        <el-button type="primary" @click="handle('signIn')" class="validate-contain-search-button" size="large" v-if="active" style="width:30%;margin:10% 35% 0;"> 签 到 </el-button>
       </div>
   </div>
   <layout :data="{logoLeft:'2.1%',returnState:true}"/>
@@ -20,31 +42,85 @@
 /*----------------------------------依赖引入-----------------------------------*/
 import axios from "axios";
 import { ref } from "vue";
+import { getVisitor, signinoutVisitor } from "@/api/index";
 import 'animate.css';
 /*----------------------------------组件引入-----------------------------------*/
 import layout from "@/components/layout/index.vue";
 /*----------------------------------变量声明-----------------------------------*/
-const identityCardNo = ref()
 const timer = ref(null);
+const cardId = ref(123);
+const active = ref(null);
+const visitorsRecord = ref([
+  {
+    targetPeoplePhone:"1111",
+    targetPeopleName:"2222",
+    visitorReason:"2222",
+    startTime:"2222",
+    endTime:"2222",
+    targetPeopleCode:1,
+  },
+  {
+    targetPeoplePhone:"1111",
+    targetPeopleName:"2222",
+    visitorReason:"2222",
+    startTime:"2222",
+    endTime:"2222",
+    targetPeopleCode:2,
+  },
+  {
+    targetPeoplePhone:"1111",
+    targetPeopleName:"2222",
+    visitorReason:"2222",
+    startTime:"2222",
+    endTime:"2222",
+    targetPeopleCode:3,
+  },
+  {
+    targetPeoplePhone:"1111",
+    targetPeopleName:"2222",
+    visitorReason:"2222",
+    startTime:"2222",
+    endTime:"2222",
+    targetPeopleCode:4,
+  },
+  {
+    targetPeoplePhone:"1111",
+    targetPeopleName:"2222",
+    visitorReason:"2222",
+    startTime:"2222",
+    endTime:"2222",
+    targetPeopleCode:5,
+  },
+]);
 /*----------------------------------方法声明-----------------------------------*/
 /**
  * 公众号引导状态切换
  */
  function getData() {
-  timer.value = setInterval(() => {
-    axios
-      .get("http://127.0.0.1:24010/ZKIDROnline/ScanReadIdCardInfo?OP-DEV=1&CMD-URL=4&REPEAT=1&READTYPE=1&TIMEOUT=4")
-      .then((response) => {
-        identityCardNo.value = response.data.Certificate.IDNumber;
+  // timer.value = setInterval(() => {
+  //   axios
+  //     .get("http://127.0.0.1:24010/ZKIDROnline/ScanReadIdCardInfo?OP-DEV=1&CMD-URL=4&REPEAT=1&READTYPE=1&TIMEOUT=4")
+  //     .then((response) => {
+  //       cardId.value = response.data.Certificate.IDNumber;
 
-        // certificateData.value=response.data.Certificate
-      })
-      .catch((error) => {});
-  }, 1000);
+  //       // cardId.value=response.data.Certificate
+  //     })
+  //     .catch((error) => {});
+  // }, 1000);
+}
+function handle(type,item) {
+  if(type === 'get'){ //获取访客记录
+    getVisitor({cardId:cardId.value})
+  }
+  if(type ==='select'){ //选择访客记录
+    active.value = item.targetPeopleCode;
+  }
+  if(type ==='signIn'){
+    signinoutVisitor({recordId:active.value})
+  }
 }
-
 onMounted(() => {
-  getData();
+  // getData();
 });
 
 onUnmounted(() => {
@@ -99,6 +175,42 @@ onUnmounted(() => {
     }
   }
 }
+.VisitorsRecord{
+  width:250%;
+  margin-top:20%;
+  margin:20% 0 0 -75%;
+  .list{
+    width:100%;
+    overflow-x: scroll;
+    overflow-y: hidden;
+    background: rgba(255,255,255,.2);
+    border-radius: 5px;
+    padding:0px 0 10px;
+    .item{
+      width:23.7%;
+      padding:10px 0;
+      display: inline-block;
+      background: rgba(255,255,255,.8);
+      border-radius: 10px;
+      margin:1% 0 0 1%;
+      span{
+        margin-top:10px;
+      }
+      .p1,.p2{
+        display: inline-block;
+      }
+      .p1{
+        text-align: right;
+        width:100px;
+      }
+
+    }
+    .active{
+      background: #409eff;
+      color:#fff;
+    }
+  }
+}
 </style>
 <style>
 @-webkit-keyframes go {