Browse Source

fix HHLocalDevice

刘琳琳 2 weeks ago
parent
commit
d21d8fbac3

+ 18 - 0
src/api/HHLocalDevice.js

@@ -113,6 +113,24 @@ export function getPushFailedRecordTypeEnum() {
   })
 }
 
+// 成功显示人员信息下拉
+export function getSuccessShowPersonalInfoListEnum() {
+  return request({
+    url: '/api/v1/hh/local/device/getSuccessShowPersonalInfoListEnum',
+    method: 'get',
+    params: {}
+  })
+}
+
+// 设置——人员列表
+export function getSetPersonalListEnum() {
+  return request({
+    url: '/api/v1/hh/local/device/getSetPersonalListEnum',
+    method: 'get',
+    params: {}
+  })
+}
+
 // 获取设备编号(sn)列表
 export function getDeviceSNList() {
   return request({

+ 19 - 2
src/views/HHLocalDevice/add.vue

@@ -31,6 +31,8 @@
         :camera-type-list="cameraTypeList"
         :live-type-list="liveTypeList"
         :push-failed-record-type-list="pushFailedRecordTypeList"
+        :success-show-personal-info-type-list="successShowPersonalInfoTypeList"
+        :set-personal-type-list="setPersonalTypeList"
         :is-dis="false"
         @finish="back"
         @back="back"
@@ -77,7 +79,12 @@
 import EditDeviceModule from './components/EditDeviceModule'
 import {
   templateList,
-  templateDetail, getCameraTypeEnum, getLiveTypeEnum, getPushFailedRecordTypeEnum
+  templateDetail,
+  getCameraTypeEnum,
+  getLiveTypeEnum,
+  getPushFailedRecordTypeEnum,
+  getSuccessShowPersonalInfoListEnum,
+  getSetPersonalListEnum
 } from '@/api/HHLocalDevice'
 import { getIdCardReaderBrand, getQrCodeReaderBrandEnum, getReaderBrand } from '@/api/device'
 import { applicationTypeList, deviceModelList, purchaserList } from '@/api/configuration'
@@ -98,6 +105,8 @@ export default {
       cameraTypeList: [], // 摄像头类型下拉
       liveTypeList: [], // 活体检测模式下拉
       pushFailedRecordTypeList: [], // 记录类型下拉
+      successShowPersonalInfoTypeList: [], // 成功显示人员信息下拉
+      setPersonalTypeList: [], // 设置——人员列表下拉
       dialogVisible: false,
       form: {
         id: null
@@ -132,6 +141,8 @@ export default {
       const cameraTypeAxios = await getCameraTypeEnum() // 摄像头类型下拉
       const liveTypeAxios = await getLiveTypeEnum() // 活体检测模式下拉
       const pushFailedRecordTypeAxios = await getPushFailedRecordTypeEnum() // 记录类型下拉
+      const successShowPersonalInfoTypeAxios = await getSuccessShowPersonalInfoListEnum() // 成功显示人员信息下拉
+      const setPersonalTypeAxios = await getSetPersonalListEnum() // 设置——人员列表下拉
       Promise.all([
         applicationTypeAxios,
         deviceModelAxios,
@@ -142,7 +153,9 @@ export default {
         readerBrandAxios,
         cameraTypeAxios,
         liveTypeAxios,
-        pushFailedRecordTypeAxios
+        pushFailedRecordTypeAxios,
+        successShowPersonalInfoTypeAxios,
+        setPersonalTypeAxios
       ]).then(res => {
         const applicationTypeAxiosRes = res[0]
         this.applicationList = applicationTypeAxiosRes.data
@@ -164,6 +177,10 @@ export default {
         this.liveTypeList = liveTypeAxiosRes.data
         const pushFailedRecordTypeAxiosRes = res[9]
         this.pushFailedRecordTypeList = pushFailedRecordTypeAxiosRes.data
+        const successShowPersonalInfoTypeAxiosRes = res[10]
+        this.successShowPersonalInfoTypeList = successShowPersonalInfoTypeAxiosRes.data
+        const setPersonalTypeAxiosRes = res[11]
+        this.setPersonalTypeList = setPersonalTypeAxiosRes.data
       }).finally(() => {
         this.enumLoading = false
       })

+ 322 - 206
src/views/HHLocalDevice/components/EditDeviceModule.vue

@@ -532,23 +532,25 @@
             </el-form-item>
           </div>
           <div v-else class="wrap-content__item" />
-          <div class="wrap-content__item">
-            <el-form-item label="是否启用手动输入证件号" prop="manualInIdCard">
-              <el-radio-group v-model="form.manualInIdCard">
-                <el-radio :label="true">是</el-radio>
-                <el-radio :label="false">否</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </div>
-          <div v-if="form.manualInIdCard" class="wrap-content__item">
-            <el-form-item label="是否人证比对" prop="manualInUsePersonCard">
-              <el-radio-group v-model="form.manualInUsePersonCard">
-                <el-radio :label="true">是</el-radio>
-                <el-radio :label="false">否</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </div>
-          <div v-else class="wrap-content__item" />
+          <template v-if="!suspensionIsNotVerified">
+            <div class="wrap-content__item">
+              <el-form-item label="是否启用手动输入证件号" prop="manualInIdCard">
+                <el-radio-group v-model="form.manualInIdCard">
+                  <el-radio :label="true">是</el-radio>
+                  <el-radio :label="false">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </div>
+            <div v-if="form.manualInIdCard" class="wrap-content__item">
+              <el-form-item label="是否人证比对" prop="manualInUsePersonCard">
+                <el-radio-group v-model="form.manualInUsePersonCard">
+                  <el-radio :label="true">是</el-radio>
+                  <el-radio :label="false">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </div>
+            <div v-else class="wrap-content__item" />
+          </template>
           <div class="wrap-content__item">
             <el-form-item label="是否开启 1:N 刷脸能力" prop="openOneToN">
               <el-radio-group v-model="form.openOneToN">
@@ -557,6 +559,15 @@
               </el-radio-group>
             </el-form-item>
           </div>
+          <div v-if="form.openOneToN" class="wrap-content__item">
+            <el-form-item label="刷证/刷码/刷卡延时(ms)" prop="sameFaceInterval">
+              <el-input-number
+                v-model="form.sameFaceInterval"
+                size="mini"
+                :min="0"
+              />
+            </el-form-item>
+          </div>
         </div>
       </TagCard>
       <TagCard title="摄像头配置">
@@ -908,124 +919,126 @@
       </TagCard>
       <TagCard title="三方接口接入配置">
         <div class="wrap-content">
-          <div class="wrap-content__item">
-            <el-form-item label="启用核验接口" prop="useLinkage">
-              <el-radio-group
-                v-model="form.useLinkage"
-                @input="onSelectChange('useLinkage', $event)"
-              >
-                <el-radio :label="true">是</el-radio>
-                <el-radio :label="false">否</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </div>
-          <div v-if="form.useLinkage" class="wrap-content-detail" style="background: #dcdfe63d;">
-            <div class="wrap-content-detail__item">
-              <el-form-item label="核验接口地址" prop="linkageAds">
-                <el-input
-                  v-model="form.linkageAds"
-                  placeholder="请输入核验接口地址"
-                  maxlength="300"
-                />
-              </el-form-item>
-            </div>
-            <div class="wrap-content-detail__item" />
-            <div class="wrap-content-detail__item">
-              <el-form-item label="核验接口数据是否加解密" prop="checkVerifyEncryptSwitch">
+          <template v-if="!suspensionIsNotVerified">
+            <div class="wrap-content__item">
+              <el-form-item label="启用核验接口" prop="useLinkage">
                 <el-radio-group
-                  v-model="form.checkVerifyEncryptSwitch"
-                  @input="onSelectChange('checkVerifyEncryptSwitch', $event)"
+                  v-model="form.useLinkage"
+                  @input="onSelectChange('useLinkage', $event)"
                 >
                   <el-radio :label="true">是</el-radio>
                   <el-radio :label="false">否</el-radio>
                 </el-radio-group>
               </el-form-item>
             </div>
-            <div v-if="form.checkVerifyEncryptSwitch" class="wrap-content-detail">
+            <div v-if="form.useLinkage" class="wrap-content-detail" style="background: #dcdfe63d;">
               <div class="wrap-content-detail__item">
-                <el-form-item label="appKey" prop="checkVerifyEncryptAppKey">
+                <el-form-item label="核验接口地址" prop="linkageAds">
                   <el-input
-                    v-model="form.checkVerifyEncryptAppKey"
-                    placeholder="请输入appKey"
+                    v-model="form.linkageAds"
+                    placeholder="请输入核验接口地址"
+                    maxlength="300"
+                  />
+                </el-form-item>
+              </div>
+              <div class="wrap-content-detail__item" />
+              <div class="wrap-content-detail__item">
+                <el-form-item label="核验接口数据是否加解密" prop="checkVerifyEncryptSwitch">
+                  <el-radio-group
+                    v-model="form.checkVerifyEncryptSwitch"
+                    @input="onSelectChange('checkVerifyEncryptSwitch', $event)"
+                  >
+                    <el-radio :label="true">是</el-radio>
+                    <el-radio :label="false">否</el-radio>
+                  </el-radio-group>
+                </el-form-item>
+              </div>
+              <div v-if="form.checkVerifyEncryptSwitch" class="wrap-content-detail">
+                <div class="wrap-content-detail__item">
+                  <el-form-item label="appKey" prop="checkVerifyEncryptAppKey">
+                    <el-input
+                      v-model="form.checkVerifyEncryptAppKey"
+                      placeholder="请输入appKey"
+                    />
+                  </el-form-item>
+                </div>
+                <div class="wrap-content-detail__item">
+                  <el-form-item label="appSecret" prop="checkVerifyEncryptAppSecret">
+                    <el-input
+                      v-model="form.checkVerifyEncryptAppSecret"
+                      placeholder="请输入appSecret"
+                    />
+                  </el-form-item>
+                </div>
+                <div class="wrap-content-detail__item">
+                  <el-form-item label="privateKey" prop="checkVerifyEncryptPrivateKey">
+                    <el-input
+                      v-model="form.checkVerifyEncryptPrivateKey"
+                      placeholder="请输入privateKey"
+                    />
+                  </el-form-item>
+                </div>
+              </div>
+              <div v-else class="wrap-content-detail__item" />
+              <div class="wrap-content-detail__item">
+                <el-form-item label="核验接口失败重试次数(check)" prop="checkVerifyRetryTimes">
+                  <el-input-number
+                    v-model="form.checkVerifyRetryTimes"
+                    size="mini"
+                    :min="0"
                   />
                 </el-form-item>
               </div>
               <div class="wrap-content-detail__item">
-                <el-form-item label="appSecret" prop="checkVerifyEncryptAppSecret">
+                <el-form-item label="核验接口超时时间(check)(s)" prop="linkTimeout">
+                  <el-input-number
+                    v-model="form.linkTimeout"
+                    size="mini"
+                    :min="2"
+                    :max="15"
+                  />
+                </el-form-item>
+              </div>
+              <div v-if="form.linkageCheckMode == 2" class="wrap-content-detail__item">
+                <el-form-item label="核验接口失败重试次数(verify)" prop="verifyRetryTimes">
+                  <el-input-number
+                    v-model="form.verifyRetryTimes"
+                    size="mini"
+                    :min="0"
+                  />
+                </el-form-item>
+              </div>
+              <div v-if="form.linkageCheckMode == 2" class="wrap-content-detail__item">
+                <el-form-item label="核验接口超时时间 (verify)(s)" prop="verifyLinkTimeout">
+                  <el-input-number
+                    v-model="form.verifyLinkTimeout"
+                    size="mini"
+                    :min="2"
+                    :max="15"
+                  />
+                </el-form-item>
+              </div>
+              <div class="wrap-content-detail__item">
+                <el-form-item label="核验接口超时提示语" prop="checkVerifyTimeoutTips">
                   <el-input
-                    v-model="form.checkVerifyEncryptAppSecret"
-                    placeholder="请输入appSecret"
+                    v-model="form.checkVerifyTimeoutTips"
+                    placeholder="请输入核验接口超时提示语"
+                    maxlength="100"
                   />
                 </el-form-item>
               </div>
               <div class="wrap-content-detail__item">
-                <el-form-item label="privateKey" prop="checkVerifyEncryptPrivateKey">
+                <el-form-item label="核验接口失败提示语" prop="checkVerifyFailedTips">
                   <el-input
-                    v-model="form.checkVerifyEncryptPrivateKey"
-                    placeholder="请输入privateKey"
+                    v-model="form.checkVerifyFailedTips"
+                    placeholder="请输入核验接口失败提示语"
+                    maxlength="100"
                   />
                 </el-form-item>
               </div>
             </div>
-            <div v-else class="wrap-content-detail__item" />
-            <div class="wrap-content-detail__item">
-              <el-form-item label="核验接口失败重试次数(check)" prop="checkVerifyRetryTimes">
-                <el-input-number
-                  v-model="form.checkVerifyRetryTimes"
-                  size="mini"
-                  :min="0"
-                />
-              </el-form-item>
-            </div>
-            <div class="wrap-content-detail__item">
-              <el-form-item label="核验接口超时时间(check)(s)" prop="linkTimeout">
-                <el-input-number
-                  v-model="form.linkTimeout"
-                  size="mini"
-                  :min="2"
-                  :max="15"
-                />
-              </el-form-item>
-            </div>
-            <div v-if="form.linkageCheckMode == 2" class="wrap-content-detail__item">
-              <el-form-item label="核验接口失败重试次数(verify)" prop="verifyRetryTimes">
-                <el-input-number
-                  v-model="form.verifyRetryTimes"
-                  size="mini"
-                  :min="0"
-                />
-              </el-form-item>
-            </div>
-            <div v-if="form.linkageCheckMode == 2" class="wrap-content-detail__item">
-              <el-form-item label="核验接口超时时间 (verify)(s)" prop="verifyLinkTimeout">
-                <el-input-number
-                  v-model="form.verifyLinkTimeout"
-                  size="mini"
-                  :min="2"
-                  :max="15"
-                />
-              </el-form-item>
-            </div>
-            <div class="wrap-content-detail__item">
-              <el-form-item label="核验接口超时提示语" prop="checkVerifyTimeoutTips">
-                <el-input
-                  v-model="form.checkVerifyTimeoutTips"
-                  placeholder="请输入核验接口超时提示语"
-                  maxlength="100"
-                />
-              </el-form-item>
-            </div>
-            <div class="wrap-content-detail__item">
-              <el-form-item label="核验接口失败提示语" prop="checkVerifyFailedTips">
-                <el-input
-                  v-model="form.checkVerifyFailedTips"
-                  placeholder="请输入核验接口失败提示语"
-                  maxlength="100"
-                />
-              </el-form-item>
-            </div>
-          </div>
-          <div v-else class="wrap-content__item" />
+            <div v-else class="wrap-content__item" />
+          </template>
           <div class="wrap-content__item">
             <el-form-item label="启用特殊码换三要素接口" prop="specialCodeSwitch">
               <el-radio-group
@@ -1370,6 +1383,7 @@
               <el-radio-group v-model="form.resultPageTemplate">
                 <el-radio :label="1">通用</el-radio>
                 <el-radio :label="2">悬浮</el-radio>
+                <el-radio :label="3">悬浮(无核验)</el-radio>
               </el-radio-group>
             </el-form-item>
           </div>
@@ -1405,34 +1419,57 @@
               />
             </el-form-item>
           </div>
+
           <div class="wrap-content__item">
-            <el-form-item
-              label="是否根据开门次数决定显示时长"
-              prop="showDisplayTimeByOpenTimesSwitch"
-            >
-              <el-radio-group
-                v-model="form.showDisplayTimeByOpenTimesSwitch"
-                @input="onSelectChange('showDisplayTimeByOpenTimesSwitch', $event)"
+            <el-form-item label="成功显示人员信息" prop="successShowPersonalInfoList">
+              <el-select
+                v-model="form.successShowPersonalInfoList"
+                style="width: 100%"
+                multiple
+                placeholder="请选择成功显示人员信息【多选】"
               >
-                <el-radio :label="true">是</el-radio>
-                <el-radio :label="false">否</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </div>
-          <div v-if="form.showDisplayTimeByOpenTimesSwitch" class="wrap-content__item">
-            <el-form-item
-              class="overlength"
-              label="单次开门时间(s)"
-              prop="onceOpenDoorTime"
-            >
-              <el-input-number
-                v-model="form.onceOpenDoorTime"
-                size="mini"
-                :min="1"
-              />
+                <el-option
+                  v-for="(item, index) in successShowPersonalInfoTypeList"
+                  :key="index"
+                  :label="item.desc"
+                  :value="item.code"
+                />
+              </el-select>
             </el-form-item>
           </div>
-          <div v-else class="wrap-content__item" />
+          <div class="wrap-content__item" />
+
+          <template v-if="!suspensionIsNotVerified">
+            <div class="wrap-content__item">
+              <el-form-item
+                label="是否根据开门次数决定显示时长"
+                prop="showDisplayTimeByOpenTimesSwitch"
+              >
+                <el-radio-group
+                  v-model="form.showDisplayTimeByOpenTimesSwitch"
+                  @input="onSelectChange('showDisplayTimeByOpenTimesSwitch', $event)"
+                >
+                  <el-radio :label="true">是</el-radio>
+                  <el-radio :label="false">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </div>
+            <div v-if="form.showDisplayTimeByOpenTimesSwitch" class="wrap-content__item">
+              <el-form-item
+                class="overlength"
+                label="单次开门时间(s)"
+                prop="onceOpenDoorTime"
+              >
+                <el-input-number
+                  v-model="form.onceOpenDoorTime"
+                  size="mini"
+                  :min="1"
+                />
+              </el-form-item>
+            </div>
+            <div v-else class="wrap-content__item" />
+          </template>
+
           <div class="wrap-content__item">
             <el-form-item
               class="overlength"
@@ -1465,45 +1502,49 @@
               />
             </el-form-item>
           </div>
-          <div class="wrap-content__item">
-            <el-form-item
-              class="overlength"
-              label="默认单选页时长(s)"
-              prop="singlePageTime"
-            >
-              <el-input-number
-                v-model="form.singlePageTime"
-                size="mini"
-                :min="1"
-              />
-            </el-form-item>
-          </div>
-          <div class="wrap-content__item">
-            <el-form-item
-              class="overlength"
-              label="默认多选页时长(s)"
-              prop="multiPageTime"
-            >
-              <el-input-number
-                v-model="form.multiPageTime"
-                size="mini"
-                :min="1"
-              />
-            </el-form-item>
-          </div>
-          <div class="wrap-content__item">
-            <el-form-item
-              class="overlength"
-              label="默认等待页时长(s)"
-              prop="waitPageTime"
-            >
-              <el-input-number
-                v-model="form.waitPageTime"
-                size="mini"
-                :min="1"
-              />
-            </el-form-item>
-          </div>
+
+          <template v-if="!suspensionIsNotVerified">
+            <div class="wrap-content__item">
+              <el-form-item
+                class="overlength"
+                label="默认单选页时长(s)"
+                prop="singlePageTime"
+              >
+                <el-input-number
+                  v-model="form.singlePageTime"
+                  size="mini"
+                  :min="1"
+                />
+              </el-form-item>
+            </div>
+            <div class="wrap-content__item">
+              <el-form-item
+                class="overlength"
+                label="默认多选页时长(s)"
+                prop="multiPageTime"
+              >
+                <el-input-number
+                  v-model="form.multiPageTime"
+                  size="mini"
+                  :min="1"
+                />
+              </el-form-item>
+            </div>
+            <div class="wrap-content__item">
+              <el-form-item
+                class="overlength"
+                label="默认等待页时长(s)"
+                prop="waitPageTime"
+              >
+                <el-input-number
+                  v-model="form.waitPageTime"
+                  size="mini"
+                  :min="1"
+                />
+              </el-form-item>
+            </div>
+          </template>
+
           <div class="wrap-content__item">
             <el-form-item label="1:1比对是否显示提醒页面" prop="oneToOneTipsSwitch">
               <el-radio-group
@@ -1534,37 +1575,40 @@
             </div>
           </div>
           <div v-else class="wrap-content__item" />
-          <div class="wrap-content__item">
-            <el-form-item label="是否显示通行统计" prop="showTopBar">
-              <el-radio-group
-                v-model="form.showTopBar"
-                @input="onSelectChange('showTopBar', $event)"
-              >
-                <el-radio :label="true">是</el-radio>
-                <el-radio :label="false">否</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </div>
-          <div v-if="form.showTopBar" class="wrap-content-detail" style="background: #dcdfe63d;">
-            <div class="wrap-content-detail__item">
-              <el-form-item label="左侧文字" prop="leftTopBarText">
-                <el-input
-                  v-model="form.leftTopBarText"
-                  placeholder="请输入左侧文字"
-                  maxlength="50"
-                />
+
+          <template v-if="!suspensionIsNotVerified">
+            <div class="wrap-content__item">
+              <el-form-item label="是否显示通行统计" prop="showTopBar">
+                <el-radio-group
+                  v-model="form.showTopBar"
+                  @input="onSelectChange('showTopBar', $event)"
+                >
+                  <el-radio :label="true">是</el-radio>
+                  <el-radio :label="false">否</el-radio>
+                </el-radio-group>
               </el-form-item>
             </div>
-            <div class="wrap-content-detail__item">
-              <el-form-item label="右侧文字" prop="rightTopBarText">
-                <el-input
-                  v-model="form.rightTopBarText"
-                  placeholder="请输入右侧文字"
-                  maxlength="50"
-                />
-              </el-form-item>
+            <div v-if="form.showTopBar" class="wrap-content-detail" style="background: #dcdfe63d;">
+              <div class="wrap-content-detail__item">
+                <el-form-item label="左侧文字" prop="leftTopBarText">
+                  <el-input
+                    v-model="form.leftTopBarText"
+                    placeholder="请输入左侧文字"
+                    maxlength="50"
+                  />
+                </el-form-item>
+              </div>
+              <div class="wrap-content-detail__item">
+                <el-form-item label="右侧文字" prop="rightTopBarText">
+                  <el-input
+                    v-model="form.rightTopBarText"
+                    placeholder="请输入右侧文字"
+                    maxlength="50"
+                  />
+                </el-form-item>
+              </div>
             </div>
-          </div>
+          </template>
         </div>
       </TagCard>
       <TagCard title="硬件模组配置">
@@ -1579,12 +1623,12 @@
                   label="default"
                   style="margin-right: 40px"
                 >继电器</el-radio>
-                <el-radio label="RS232">RS232</el-radio>
+                <el-radio v-if="!suspensionIsNotVerified" label="RS232">RS232</el-radio>
               </el-radio-group>
             </el-form-item>
           </div>
           <div
-            v-if="form.useSerialPort === 'RS232'"
+            v-if="form.useSerialPort === 'RS232' && !suspensionIsNotVerified"
             class="wrap-content__item"
           >
             <el-form-item label="RS232开门串口地址" prop="doorSerialPort">
@@ -1894,6 +1938,21 @@
             </el-form-item>
           </div>
           <div v-else class="wrap-content__item" />
+          <div class="wrap-content__item">
+            <el-form-item label="设置——人员列表" prop="setPersonalList">
+              <el-checkbox-group v-model="form.setPersonalList">
+                <el-checkbox v-for="item in setPersonalTypeList" :key="item.code" :label="item.code">{{ item.desc }}</el-checkbox>
+              </el-checkbox-group>
+            </el-form-item>
+          </div>
+          <div class="wrap-content__item">
+            <el-form-item label="预览页是否显示人员数量" prop="showPersonalNumSwitch">
+              <el-radio-group v-model="form.showPersonalNumSwitch">
+                <el-radio :label="true">是</el-radio>
+                <el-radio :label="false">否</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </div>
           <div class="wrap-content__item">
             <el-form-item label="首页图片配置" prop="homePageUrl">
               <el-upload
@@ -2102,6 +2161,16 @@ export default {
       type: Array,
       default: () => []
     },
+    // 成功显示人员信息下拉
+    successShowPersonalInfoTypeList: {
+      type: Array,
+      default: () => []
+    },
+    // 设置——人员列表下拉
+    setPersonalTypeList: {
+      type: Array,
+      default: () => []
+    },
     isDis: {
       type: Boolean,
       default: false
@@ -2162,6 +2231,7 @@ export default {
         manualInIdCard: false, // 是否启用手动输入证件号
         manualInUsePersonCard: false, // 启用手动输入证件号=> 是否人证比对 默认值:false
         openOneToN: true, // 是否开启 1:N 刷脸能力 默认值:true
+        sameFaceInterval: 7, // 是否开启 1:N 刷脸能力=>同人脸间隔时间(s) 默认值:7
         /** 采集配置 结束 **/
 
         /** 摄像头配置 开始 **/
@@ -2252,6 +2322,7 @@ export default {
         successPageTime: 2, // 默认成功结果页时长(s) 1-100 默认值:2
         sucText: '请通行', // 成功默认标题 默认: 请通行
         sucVoice: '请通行', // 成功默认语音 默认: 请通行
+        successShowPersonalInfoList: [1, 2, 3, 4], // 成功显示人员信息 多选;默认: 照片、姓名、证件号、手机号这四项全部都选上
         showDisplayTimeByOpenTimesSwitch: false, // 是否根据开门次数决定显示时长  默认值:false
         onceOpenDoorTime: 2, // 单次开门时间(s) 默认值:2
         failPageTime: 5, // 默认失败结果页时长 1-100 默认值:5
@@ -2309,6 +2380,8 @@ export default {
         autoLaunch: false, // 应用是否自启动 默认值: false
         scheduledRestart: false, // 是否开启定时重启 默认值: false
         scheduledRestartTime: null, // 定时重启时间 HH:mm:ss 默认值:
+        setPersonalList: [], // 设置人员列表
+        showPersonalNumSwitch: true, // 预览页是否显示人员数量 默认值: true
         homePageUrl: null, // 首页图片配置
         transitionPageUrl: null, // 过渡图片配置
         previewPageUrl: null, // 预览页图片配置
@@ -2469,6 +2542,11 @@ export default {
       ]
     }
   },
+  computed: {
+    suspensionIsNotVerified() {
+      return this.form.resultPageTemplate == 3
+    }
+  },
   watch: {
     templateData() {
       console.log(this.templateData)
@@ -2602,7 +2680,7 @@ export default {
         try {
           // 以下字段根据切换条件重置为默认值
           const fieldArr = [
-            'communicationMode', 'useIdcard', 'useQrcode', 'ic14443IcCardFunction', 'ic15693IcCardFunction', 'isOpenPassport', 'manualInIdCard',
+            'resultPageTemplate', 'communicationMode', 'useIdcard', 'useQrcode', 'ic14443IcCardFunction', 'ic15693IcCardFunction', 'isOpenPassport', 'manualInIdCard',
             'qrCodeReaderCommunicationMode', 'faceFollowBoxSwitch',
             'usingBestImage', 'qualityControl', 'livingControl', 'oneToNFailShowTip',
             'useLinkage', 'checkVerifyEncryptSwitch', 'specialCodeSwitch',
@@ -2615,6 +2693,44 @@ export default {
           fieldArr.forEach(field => {
             const fieldValue = this.form[field]
             switch (field) {
+              case 'resultPageTemplate':
+                // 模板类型:悬浮(无核验)
+                if (this.suspensionIsNotVerified) {
+                  this.form = {
+                    ...this.form,
+                    manualInIdCard: false, // 是否启用手动输入证件号
+                    manualInUsePersonCard: false, // 启用手动输入证件号=> 是否人证比对 默认值:false
+
+                    useLinkage: false, // 	启用核验接口 默认值:false
+                    linkageAds: '', // 	核验接口地址
+
+                    checkVerifyEncryptSwitch: true, // 核验接口数据是否加解密 默认值:true
+                    checkVerifyEncryptAppKey: '', //
+                    checkVerifyEncryptAppSecret: '', //
+                    checkVerifyEncryptPrivateKey: '', //
+                    checkVerifyRetryTimes: 1, // 核验接口失败重试次数
+                    linkTimeout: 5, // 核验接口超时时间(s)
+                    verifyRetryTimes: 2, // 核验接口失败重试次数(verify)
+                    verifyLinkTimeout: 15, // 核验接口超时时间(s)(verify)
+                    checkVerifyTimeoutTips: '核验接口超时', // 核验接口超时提示语
+                    checkVerifyFailedTips: '核验接口失败', // 核验接口失败提示语
+
+                    showDisplayTimeByOpenTimesSwitch: false, // 是否根据开门次数决定显示时长  默认值:false
+                    onceOpenDoorTime: 2, // 单次开门时间(s) 默认值:2
+
+                    singlePageTime: 120, // 默认单选页时长(s) 默认值:120
+                    multiPageTime: 120, // 默认多选页时长(s) 默认值:120
+                    waitPageTime: 120, // 默认等待页时长(s) 默认值:120
+
+                    showTopBar: false, // 是否显示通行统计  默认值:false
+                    leftTopBarText: '已/可通行人数',
+                    rightTopBarText: '今日刷脸成功人数',
+
+                    useSerialPort: 'default', // 	开门信号: 继电器/RS232 default/RS232 默认值:default
+                    doorSerialPort: '' // RS232开门串口地址
+                  }
+                }
+                break
               // 应用通信模式
               case 'communicationMode':
                 if (fieldValue == 2) {

+ 18 - 2
src/views/HHLocalDevice/index.vue

@@ -30,6 +30,8 @@
         :camera-type-list="cameraTypeList"
         :live-type-list="liveTypeList"
         :push-failed-record-type-list="pushFailedRecordTypeList"
+        :success-show-personal-info-type-list="successShowPersonalInfoTypeList"
+        :set-personal-type-list="setPersonalTypeList"
         style="margin-left: 16px"
         @finish="back"
         @back="back"
@@ -287,7 +289,11 @@ import {
   templateList,
   templateDetail,
   getCameraTypeEnum,
-  getLiveTypeEnum, getDeviceSNList, getPushFailedRecordTypeEnum
+  getLiveTypeEnum,
+  getDeviceSNList,
+  getPushFailedRecordTypeEnum,
+  getSuccessShowPersonalInfoListEnum,
+  getSetPersonalListEnum
 } from '@/api/HHLocalDevice'
 import { getIdCardReaderBrand, getQrCodeReaderBrandEnum, getReaderBrand } from '@/api/device'
 import Pagination from '@/components/Pagination'
@@ -338,6 +344,8 @@ export default {
       liveTypeList: [], // 活体检测模式下拉
       templateDataList: [], // 模板列表
       pushFailedRecordTypeList: [], // 记录类型下拉
+      successShowPersonalInfoTypeList: [], // 成功显示人员信息下拉
+      setPersonalTypeList: [], // 设置——人员列表下拉
       dialogVisible: false,
       form: {
         id: null
@@ -370,6 +378,8 @@ export default {
       const liveTypeAxios = await getLiveTypeEnum() // 活体检测模式下拉
       const snAxios = await getDeviceSNList() // SN下拉
       const pushFailedRecordTypeAxios = await getPushFailedRecordTypeEnum() // 记录类型下拉
+      const successShowPersonalInfoTypeAxios = await getSuccessShowPersonalInfoListEnum() // 成功显示人员信息下拉
+      const setPersonalTypeAxios = await getSetPersonalListEnum() // 设置——人员列表下拉
       Promise.all([
         applicationTypeAxios,
         deviceModelAxios,
@@ -381,7 +391,9 @@ export default {
         cameraTypeAxios,
         liveTypeAxios,
         snAxios,
-        pushFailedRecordTypeAxios
+        pushFailedRecordTypeAxios,
+        successShowPersonalInfoTypeAxios,
+        setPersonalTypeAxios
       ]).then(res => {
         const applicationTypeAxiosRes = res[0]
         this.applicationList = applicationTypeAxiosRes.data
@@ -405,6 +417,10 @@ export default {
         this.snList = snAxiosRes.data
         const pushFailedRecordTypeAxiosRes = res[10]
         this.pushFailedRecordTypeList = pushFailedRecordTypeAxiosRes.data
+        const successShowPersonalInfoTypeAxiosRes = res[11]
+        this.successShowPersonalInfoTypeList = successShowPersonalInfoTypeAxiosRes.data
+        const setPersonalTypeAxiosRes = res[12]
+        this.setPersonalTypeList = setPersonalTypeAxiosRes.data
       }).finally(() => {
         this.enumLoading = false
       })

+ 19 - 2
src/views/HHLocalDeviceTemplate/add.vue

@@ -24,6 +24,8 @@
         :camera-type-list="cameraTypeList"
         :live-type-list="liveTypeList"
         :push-failed-record-type-list="pushFailedRecordTypeList"
+        :success-show-personal-info-type-list="successShowPersonalInfoTypeList"
+        :set-personal-type-list="setPersonalTypeList"
         @finish="back"
         @back="back"
       />
@@ -35,7 +37,12 @@
 import EditDeviceModule from './components/EditDeviceModule'
 import { applicationTypeList, deviceModelList } from '@/api/configuration'
 import { getIdCardReaderBrand, getQrCodeReaderBrandEnum, getReaderBrand } from '@/api/device'
-import { getCameraTypeEnum, getLiveTypeEnum, getPushFailedRecordTypeEnum } from '@/api/HHLocalDevice'
+import {
+  getCameraTypeEnum,
+  getLiveTypeEnum,
+  getPushFailedRecordTypeEnum, getSetPersonalListEnum,
+  getSuccessShowPersonalInfoListEnum
+} from '@/api/HHLocalDevice'
 
 export default {
   components: { EditDeviceModule },
@@ -50,6 +57,8 @@ export default {
       cameraTypeList: [], // 摄像头类型下拉
       liveTypeList: [], // 活体检测模式下拉
       pushFailedRecordTypeList: [], // 记录类型下拉
+      successShowPersonalInfoTypeList: [], // 成功显示人员信息下拉
+      setPersonalTypeList: [], // 设置——人员列表下拉
       obj: null
     }
   },
@@ -70,6 +79,8 @@ export default {
       const cameraTypeAxios = await getCameraTypeEnum() // 摄像头类型下拉
       const liveTypeAxios = await getLiveTypeEnum() // 活体检测模式下拉
       const pushFailedRecordTypeAxios = await getPushFailedRecordTypeEnum() // 记录类型下拉
+      const successShowPersonalInfoTypeAxios = await getSuccessShowPersonalInfoListEnum() // 成功显示人员信息下拉
+      const setPersonalTypeAxios = await getSetPersonalListEnum() // 设置——人员列表下拉
       Promise.all([
         applicationTypeAxios,
         deviceModelAxios,
@@ -78,7 +89,9 @@ export default {
         readerBrandAxios,
         cameraTypeAxios,
         liveTypeAxios,
-        pushFailedRecordTypeAxios
+        pushFailedRecordTypeAxios,
+        successShowPersonalInfoTypeAxios,
+        setPersonalTypeAxios
       ]).then(res => {
         const applicationTypeAxiosRes = res[0]
         this.applicationList = applicationTypeAxiosRes.data
@@ -96,6 +109,10 @@ export default {
         this.liveTypeList = liveTypeAxiosRes.data
         const pushFailedRecordTypeAxiosRes = res[7]
         this.pushFailedRecordTypeList = pushFailedRecordTypeAxiosRes.data
+        const successShowPersonalInfoTypeAxiosRes = res[8]
+        this.successShowPersonalInfoTypeList = successShowPersonalInfoTypeAxiosRes.data
+        const setPersonalTypeAxiosRes = res[9]
+        this.setPersonalTypeList = setPersonalTypeAxiosRes.data
       }).finally(() => {
         this.enumLoading = false
       })

+ 321 - 206
src/views/HHLocalDeviceTemplate/components/EditDeviceModule.vue

@@ -512,23 +512,25 @@
             </el-form-item>
           </div>
           <div v-else class="wrap-content__item" />
-          <div class="wrap-content__item">
-            <el-form-item label="是否启用手动输入证件号" prop="manualInIdCard">
-              <el-radio-group v-model="form.manualInIdCard">
-                <el-radio :label="true">是</el-radio>
-                <el-radio :label="false">否</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </div>
-          <div v-if="form.manualInIdCard" class="wrap-content__item">
-            <el-form-item label="是否人证比对" prop="manualInUsePersonCard">
-              <el-radio-group v-model="form.manualInUsePersonCard">
-                <el-radio :label="true">是</el-radio>
-                <el-radio :label="false">否</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </div>
-          <div v-else class="wrap-content__item" />
+          <template v-if="!suspensionIsNotVerified">
+            <div class="wrap-content__item">
+              <el-form-item label="是否启用手动输入证件号" prop="manualInIdCard">
+                <el-radio-group v-model="form.manualInIdCard">
+                  <el-radio :label="true">是</el-radio>
+                  <el-radio :label="false">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </div>
+            <div v-if="form.manualInIdCard" class="wrap-content__item">
+              <el-form-item label="是否人证比对" prop="manualInUsePersonCard">
+                <el-radio-group v-model="form.manualInUsePersonCard">
+                  <el-radio :label="true">是</el-radio>
+                  <el-radio :label="false">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </div>
+            <div v-else class="wrap-content__item" />
+          </template>
           <div class="wrap-content__item">
             <el-form-item label="是否开启 1:N 刷脸能力" prop="openOneToN">
               <el-radio-group v-model="form.openOneToN">
@@ -537,6 +539,15 @@
               </el-radio-group>
             </el-form-item>
           </div>
+          <div v-if="form.openOneToN" class="wrap-content__item">
+            <el-form-item label="刷证/刷码/刷卡延时(ms)" prop="sameFaceInterval">
+              <el-input-number
+                v-model="form.sameFaceInterval"
+                size="mini"
+                :min="0"
+              />
+            </el-form-item>
+          </div>
         </div>
       </TagCard>
       <TagCard title="摄像头配置">
@@ -888,124 +899,126 @@
       </TagCard>
       <TagCard title="三方接口接入配置">
         <div class="wrap-content">
-          <div class="wrap-content__item">
-            <el-form-item label="启用核验接口" prop="useLinkage">
-              <el-radio-group
-                v-model="form.useLinkage"
-                @input="onSelectChange('useLinkage', $event)"
-              >
-                <el-radio :label="true">是</el-radio>
-                <el-radio :label="false">否</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </div>
-          <div v-if="form.useLinkage" class="wrap-content-detail" style="background: #dcdfe63d;">
-            <div class="wrap-content-detail__item">
-              <el-form-item label="核验接口地址" prop="linkageAds">
-                <el-input
-                  v-model="form.linkageAds"
-                  placeholder="请输入核验接口地址"
-                  maxlength="300"
-                />
-              </el-form-item>
-            </div>
-            <div class="wrap-content-detail__item" />
-            <div class="wrap-content-detail__item">
-              <el-form-item label="核验接口数据是否加解密" prop="checkVerifyEncryptSwitch">
+          <template v-if="!suspensionIsNotVerified">
+            <div class="wrap-content__item">
+              <el-form-item label="启用核验接口" prop="useLinkage">
                 <el-radio-group
-                  v-model="form.checkVerifyEncryptSwitch"
-                  @input="onSelectChange('checkVerifyEncryptSwitch', $event)"
+                  v-model="form.useLinkage"
+                  @input="onSelectChange('useLinkage', $event)"
                 >
                   <el-radio :label="true">是</el-radio>
                   <el-radio :label="false">否</el-radio>
                 </el-radio-group>
               </el-form-item>
             </div>
-            <div v-if="form.checkVerifyEncryptSwitch" class="wrap-content-detail">
+            <div v-if="form.useLinkage" class="wrap-content-detail" style="background: #dcdfe63d;">
               <div class="wrap-content-detail__item">
-                <el-form-item label="appKey" prop="checkVerifyEncryptAppKey">
+                <el-form-item label="核验接口地址" prop="linkageAds">
                   <el-input
-                    v-model="form.checkVerifyEncryptAppKey"
-                    placeholder="请输入appKey"
+                    v-model="form.linkageAds"
+                    placeholder="请输入核验接口地址"
+                    maxlength="300"
+                  />
+                </el-form-item>
+              </div>
+              <div class="wrap-content-detail__item" />
+              <div class="wrap-content-detail__item">
+                <el-form-item label="核验接口数据是否加解密" prop="checkVerifyEncryptSwitch">
+                  <el-radio-group
+                    v-model="form.checkVerifyEncryptSwitch"
+                    @input="onSelectChange('checkVerifyEncryptSwitch', $event)"
+                  >
+                    <el-radio :label="true">是</el-radio>
+                    <el-radio :label="false">否</el-radio>
+                  </el-radio-group>
+                </el-form-item>
+              </div>
+              <div v-if="form.checkVerifyEncryptSwitch" class="wrap-content-detail">
+                <div class="wrap-content-detail__item">
+                  <el-form-item label="appKey" prop="checkVerifyEncryptAppKey">
+                    <el-input
+                      v-model="form.checkVerifyEncryptAppKey"
+                      placeholder="请输入appKey"
+                    />
+                  </el-form-item>
+                </div>
+                <div class="wrap-content-detail__item">
+                  <el-form-item label="appSecret" prop="checkVerifyEncryptAppSecret">
+                    <el-input
+                      v-model="form.checkVerifyEncryptAppSecret"
+                      placeholder="请输入appSecret"
+                    />
+                  </el-form-item>
+                </div>
+                <div class="wrap-content-detail__item">
+                  <el-form-item label="privateKey" prop="checkVerifyEncryptPrivateKey">
+                    <el-input
+                      v-model="form.checkVerifyEncryptPrivateKey"
+                      placeholder="请输入privateKey"
+                    />
+                  </el-form-item>
+                </div>
+              </div>
+              <div v-else class="wrap-content-detail__item" />
+              <div class="wrap-content-detail__item">
+                <el-form-item label="核验接口失败重试次数(check)" prop="checkVerifyRetryTimes">
+                  <el-input-number
+                    v-model="form.checkVerifyRetryTimes"
+                    size="mini"
+                    :min="0"
                   />
                 </el-form-item>
               </div>
               <div class="wrap-content-detail__item">
-                <el-form-item label="appSecret" prop="checkVerifyEncryptAppSecret">
+                <el-form-item label="核验接口超时时间(check)(s)" prop="linkTimeout">
+                  <el-input-number
+                    v-model="form.linkTimeout"
+                    size="mini"
+                    :min="2"
+                    :max="15"
+                  />
+                </el-form-item>
+              </div>
+              <div v-if="form.linkageCheckMode == 2" class="wrap-content-detail__item">
+                <el-form-item label="核验接口失败重试次数(verify)" prop="verifyRetryTimes">
+                  <el-input-number
+                    v-model="form.verifyRetryTimes"
+                    size="mini"
+                    :min="0"
+                  />
+                </el-form-item>
+              </div>
+              <div v-if="form.linkageCheckMode == 2" class="wrap-content-detail__item">
+                <el-form-item label="核验接口超时时间(verify)(s)" prop="verifyLinkTimeout">
+                  <el-input-number
+                    v-model="form.verifyLinkTimeout"
+                    size="mini"
+                    :min="2"
+                    :max="15"
+                  />
+                </el-form-item>
+              </div>
+              <div class="wrap-content-detail__item">
+                <el-form-item label="核验接口超时提示语" prop="checkVerifyTimeoutTips">
                   <el-input
-                    v-model="form.checkVerifyEncryptAppSecret"
-                    placeholder="请输入appSecret"
+                    v-model="form.checkVerifyTimeoutTips"
+                    placeholder="请输入核验接口超时提示语"
+                    maxlength="100"
                   />
                 </el-form-item>
               </div>
               <div class="wrap-content-detail__item">
-                <el-form-item label="privateKey" prop="checkVerifyEncryptPrivateKey">
+                <el-form-item label="核验接口失败提示语" prop="checkVerifyFailedTips">
                   <el-input
-                    v-model="form.checkVerifyEncryptPrivateKey"
-                    placeholder="请输入privateKey"
+                    v-model="form.checkVerifyFailedTips"
+                    placeholder="请输入核验接口失败提示语"
+                    maxlength="100"
                   />
                 </el-form-item>
               </div>
             </div>
-            <div v-else class="wrap-content-detail__item" />
-            <div class="wrap-content-detail__item">
-              <el-form-item label="核验接口失败重试次数(check)" prop="checkVerifyRetryTimes">
-                <el-input-number
-                  v-model="form.checkVerifyRetryTimes"
-                  size="mini"
-                  :min="0"
-                />
-              </el-form-item>
-            </div>
-            <div class="wrap-content-detail__item">
-              <el-form-item label="核验接口超时时间(check)(s)" prop="linkTimeout">
-                <el-input-number
-                  v-model="form.linkTimeout"
-                  size="mini"
-                  :min="2"
-                  :max="15"
-                />
-              </el-form-item>
-            </div>
-            <div v-if="form.linkageCheckMode == 2" class="wrap-content-detail__item">
-              <el-form-item label="核验接口失败重试次数(verify)" prop="verifyRetryTimes">
-                <el-input-number
-                  v-model="form.verifyRetryTimes"
-                  size="mini"
-                  :min="0"
-                />
-              </el-form-item>
-            </div>
-            <div v-if="form.linkageCheckMode == 2" class="wrap-content-detail__item">
-              <el-form-item label="核验接口超时时间(verify)(s)" prop="verifyLinkTimeout">
-                <el-input-number
-                  v-model="form.verifyLinkTimeout"
-                  size="mini"
-                  :min="2"
-                  :max="15"
-                />
-              </el-form-item>
-            </div>
-            <div class="wrap-content-detail__item">
-              <el-form-item label="核验接口超时提示语" prop="checkVerifyTimeoutTips">
-                <el-input
-                  v-model="form.checkVerifyTimeoutTips"
-                  placeholder="请输入核验接口超时提示语"
-                  maxlength="100"
-                />
-              </el-form-item>
-            </div>
-            <div class="wrap-content-detail__item">
-              <el-form-item label="核验接口失败提示语" prop="checkVerifyFailedTips">
-                <el-input
-                  v-model="form.checkVerifyFailedTips"
-                  placeholder="请输入核验接口失败提示语"
-                  maxlength="100"
-                />
-              </el-form-item>
-            </div>
-          </div>
-          <div v-else class="wrap-content__item" />
+            <div v-else class="wrap-content__item" />
+          </template>
           <div class="wrap-content__item">
             <el-form-item label="启用特殊码换三要素接口" prop="specialCodeSwitch">
               <el-radio-group
@@ -1326,6 +1339,7 @@
               <el-radio-group v-model="form.resultPageTemplate">
                 <el-radio :label="1">通用</el-radio>
                 <el-radio :label="2">悬浮</el-radio>
+                <el-radio :label="3">悬浮(无核验)</el-radio>
               </el-radio-group>
             </el-form-item>
           </div>
@@ -1361,34 +1375,56 @@
               />
             </el-form-item>
           </div>
+
           <div class="wrap-content__item">
-            <el-form-item
-              label="是否根据开门次数决定显示时长"
-              prop="showDisplayTimeByOpenTimesSwitch"
-            >
-              <el-radio-group
-                v-model="form.showDisplayTimeByOpenTimesSwitch"
-                @input="onSelectChange('showDisplayTimeByOpenTimesSwitch', $event)"
+            <el-form-item label="成功显示人员信息" prop="successShowPersonalInfoList">
+              <el-select
+                v-model="form.successShowPersonalInfoList"
+                style="width: 100%"
+                multiple
+                placeholder="请选择成功显示人员信息【多选】"
               >
-                <el-radio :label="true">是</el-radio>
-                <el-radio :label="false">否</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </div>
-          <div v-if="form.showDisplayTimeByOpenTimesSwitch" class="wrap-content__item">
-            <el-form-item
-              class="overlength"
-              label="单次开门时间(s)"
-              prop="onceOpenDoorTime"
-            >
-              <el-input-number
-                v-model="form.onceOpenDoorTime"
-                size="mini"
-                :min="1"
-              />
+                <el-option
+                  v-for="(item, index) in successShowPersonalInfoTypeList"
+                  :key="index"
+                  :label="item.desc"
+                  :value="item.code"
+                />
+              </el-select>
             </el-form-item>
           </div>
-          <div v-else class="wrap-content__item" />
+          <div class="wrap-content__item" />
+
+          <template v-if="!suspensionIsNotVerified">
+            <div class="wrap-content__item">
+              <el-form-item
+                label="是否根据开门次数决定显示时长"
+                prop="showDisplayTimeByOpenTimesSwitch"
+              >
+                <el-radio-group
+                  v-model="form.showDisplayTimeByOpenTimesSwitch"
+                  @input="onSelectChange('showDisplayTimeByOpenTimesSwitch', $event)"
+                >
+                  <el-radio :label="true">是</el-radio>
+                  <el-radio :label="false">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </div>
+            <div v-if="form.showDisplayTimeByOpenTimesSwitch" class="wrap-content__item">
+              <el-form-item
+                class="overlength"
+                label="单次开门时间(s)"
+                prop="onceOpenDoorTime"
+              >
+                <el-input-number
+                  v-model="form.onceOpenDoorTime"
+                  size="mini"
+                  :min="1"
+                />
+              </el-form-item>
+            </div>
+            <div v-else class="wrap-content__item" />
+          </template>
           <div class="wrap-content__item">
             <el-form-item
               class="overlength"
@@ -1421,45 +1457,49 @@
               />
             </el-form-item>
           </div>
-          <div class="wrap-content__item">
-            <el-form-item
-              class="overlength"
-              label="默认单选页时长(s)"
-              prop="singlePageTime"
-            >
-              <el-input-number
-                v-model="form.singlePageTime"
-                size="mini"
-                :min="1"
-              />
-            </el-form-item>
-          </div>
-          <div class="wrap-content__item">
-            <el-form-item
-              class="overlength"
-              label="默认多选页时长(s)"
-              prop="multiPageTime"
-            >
-              <el-input-number
-                v-model="form.multiPageTime"
-                size="mini"
-                :min="1"
-              />
-            </el-form-item>
-          </div>
-          <div class="wrap-content__item">
-            <el-form-item
-              class="overlength"
-              label="默认等待页时长(s)"
-              prop="waitPageTime"
-            >
-              <el-input-number
-                v-model="form.waitPageTime"
-                size="mini"
-                :min="1"
-              />
-            </el-form-item>
-          </div>
+
+          <template v-if="!suspensionIsNotVerified">
+            <div class="wrap-content__item">
+              <el-form-item
+                class="overlength"
+                label="默认单选页时长(s)"
+                prop="singlePageTime"
+              >
+                <el-input-number
+                  v-model="form.singlePageTime"
+                  size="mini"
+                  :min="1"
+                />
+              </el-form-item>
+            </div>
+            <div class="wrap-content__item">
+              <el-form-item
+                class="overlength"
+                label="默认多选页时长(s)"
+                prop="multiPageTime"
+              >
+                <el-input-number
+                  v-model="form.multiPageTime"
+                  size="mini"
+                  :min="1"
+                />
+              </el-form-item>
+            </div>
+            <div class="wrap-content__item">
+              <el-form-item
+                class="overlength"
+                label="默认等待页时长(s)"
+                prop="waitPageTime"
+              >
+                <el-input-number
+                  v-model="form.waitPageTime"
+                  size="mini"
+                  :min="1"
+                />
+              </el-form-item>
+            </div>
+          </template>
+
           <div class="wrap-content__item">
             <el-form-item label="1:1比对是否显示提醒页面" prop="oneToOneTipsSwitch">
               <el-radio-group
@@ -1490,37 +1530,40 @@
             </div>
           </div>
           <div v-else class="wrap-content__item" />
-          <div class="wrap-content__item">
-            <el-form-item label="是否显示通行统计" prop="showTopBar">
-              <el-radio-group
-                v-model="form.showTopBar"
-                @input="onSelectChange('showTopBar', $event)"
-              >
-                <el-radio :label="true">是</el-radio>
-                <el-radio :label="false">否</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </div>
-          <div v-if="form.showTopBar" class="wrap-content-detail" style="background: #dcdfe63d;">
-            <div class="wrap-content-detail__item">
-              <el-form-item label="左侧文字" prop="leftTopBarText">
-                <el-input
-                  v-model="form.leftTopBarText"
-                  placeholder="请输入左侧文字"
-                  maxlength="50"
-                />
+
+          <template v-if="!suspensionIsNotVerified">
+            <div class="wrap-content__item">
+              <el-form-item label="是否显示通行统计" prop="showTopBar">
+                <el-radio-group
+                  v-model="form.showTopBar"
+                  @input="onSelectChange('showTopBar', $event)"
+                >
+                  <el-radio :label="true">是</el-radio>
+                  <el-radio :label="false">否</el-radio>
+                </el-radio-group>
               </el-form-item>
             </div>
-            <div class="wrap-content-detail__item">
-              <el-form-item label="右侧文字" prop="rightTopBarText">
-                <el-input
-                  v-model="form.rightTopBarText"
-                  placeholder="请输入右侧文字"
-                  maxlength="50"
-                />
-              </el-form-item>
+            <div v-if="form.showTopBar" class="wrap-content-detail" style="background: #dcdfe63d;">
+              <div class="wrap-content-detail__item">
+                <el-form-item label="左侧文字" prop="leftTopBarText">
+                  <el-input
+                    v-model="form.leftTopBarText"
+                    placeholder="请输入左侧文字"
+                    maxlength="50"
+                  />
+                </el-form-item>
+              </div>
+              <div class="wrap-content-detail__item">
+                <el-form-item label="右侧文字" prop="rightTopBarText">
+                  <el-input
+                    v-model="form.rightTopBarText"
+                    placeholder="请输入右侧文字"
+                    maxlength="50"
+                  />
+                </el-form-item>
+              </div>
             </div>
-          </div>
+          </template>
         </div>
       </TagCard>
       <TagCard title="硬件模组配置">
@@ -1535,12 +1578,12 @@
                   label="default"
                   style="margin-right: 40px"
                 >继电器</el-radio>
-                <el-radio label="RS232">RS232</el-radio>
+                <el-radio v-if="!suspensionIsNotVerified" label="RS232">RS232</el-radio>
               </el-radio-group>
             </el-form-item>
           </div>
           <div
-            v-if="form.useSerialPort === 'RS232'"
+            v-if="form.useSerialPort === 'RS232' && !suspensionIsNotVerified"
             class="wrap-content__item"
           >
             <el-form-item label="RS232开门串口地址" prop="doorSerialPort">
@@ -1850,6 +1893,21 @@
             </el-form-item>
           </div>
           <div v-else class="wrap-content__item" />
+          <div class="wrap-content__item">
+            <el-form-item label="设置——人员列表" prop="setPersonalList">
+              <el-checkbox-group v-model="form.setPersonalList">
+                <el-checkbox v-for="item in setPersonalTypeList" :key="item.code" :label="item.code">{{ item.desc }}</el-checkbox>
+              </el-checkbox-group>
+            </el-form-item>
+          </div>
+          <div class="wrap-content__item">
+            <el-form-item label="预览页是否显示人员数量" prop="showPersonalNumSwitch">
+              <el-radio-group v-model="form.showPersonalNumSwitch">
+                <el-radio :label="true">是</el-radio>
+                <el-radio :label="false">否</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </div>
           <div class="wrap-content__item">
             <el-form-item label="首页图片配置" prop="homePageUrl">
               <el-upload
@@ -2048,6 +2106,16 @@ export default {
       type: Array,
       default: () => []
     },
+    // 成功显示人员信息下拉
+    successShowPersonalInfoTypeList: {
+      type: Array,
+      default: () => []
+    },
+    // 设置——人员列表下拉
+    setPersonalTypeList: {
+      type: Array,
+      default: () => []
+    },
     isDis: {
       type: Boolean,
       default: false
@@ -2103,6 +2171,7 @@ export default {
         manualInIdCard: false, // 是否启用手动输入证件号
         manualInUsePersonCard: false, // 启用手动输入证件号=> 是否人证比对 默认值:false
         openOneToN: true, // 是否开启 1:N 刷脸能力 默认值:true
+        sameFaceInterval: 7, // 是否开启 1:N 刷脸能力=>同人脸间隔时间(s) 默认值:7
 
         /** 摄像头配置 开始 **/
         cameraType: 'IR', // 摄像头类型 默认:双目
@@ -2191,6 +2260,7 @@ export default {
         successPageTime: 2, // 默认成功结果页时长(s) 1-100 默认值:2
         sucText: '请通行', // 成功默认标题 默认: 请通行
         sucVoice: '请通行', // 成功默认语音 默认: 请通行
+        successShowPersonalInfoList: [1, 2, 3, 4], // 成功显示人员信息 多选;默认: 照片、姓名、证件号、手机号这四项全部都选上
         showDisplayTimeByOpenTimesSwitch: false, // 是否根据开门次数决定显示时长  默认值:false
         onceOpenDoorTime: 2, // 单次开门时间(s) 默认值:2
         failPageTime: 5, // 默认失败结果页时长 1-100 默认值:5
@@ -2237,6 +2307,8 @@ export default {
         autoLaunch: false, // 应用是否自启动 默认值: false
         scheduledRestart: false, // 是否开启定时重启 默认值: false
         scheduledRestartTime: null, // 定时重启时间HH:mm:ss 默认值:
+        setPersonalList: [], // 设置人员列表
+        showPersonalNumSwitch: true, // 预览页是否显示人员数量 默认值: true
         homePageUrl: null, // 首页图片配置
         transitionPageUrl: null, // 过渡图片配置
         previewPageUrl: null, // 预览页图片配置
@@ -2394,6 +2466,11 @@ export default {
       ]
     }
   },
+  computed: {
+    suspensionIsNotVerified() {
+      return this.form.resultPageTemplate == 3
+    }
+  },
   mounted() {
     this.initData()
   },
@@ -2483,7 +2560,7 @@ export default {
         try {
           // 以下字段根据切换条件重置为默认值
           const fieldArr = [
-            'communicationMode', 'useIdcard', 'useQrcode', 'ic14443IcCardFunction', 'ic15693IcCardFunction', 'isOpenPassport', 'manualInIdCard',
+            'resultPageTemplate', 'communicationMode', 'useIdcard', 'useQrcode', 'ic14443IcCardFunction', 'ic15693IcCardFunction', 'isOpenPassport', 'manualInIdCard',
             'qrCodeReaderCommunicationMode', 'faceFollowBoxSwitch',
             'usingBestImage', 'qualityControl', 'livingControl', 'oneToNFailShowTip',
             'useLinkage', 'checkVerifyEncryptSwitch', 'specialCodeSwitch',
@@ -2496,6 +2573,44 @@ export default {
           fieldArr.forEach(field => {
             const fieldValue = this.form[field]
             switch (field) {
+              case 'resultPageTemplate':
+                // 模板类型:悬浮(无核验)
+                if (this.suspensionIsNotVerified) {
+                  this.form = {
+                    ...this.form,
+                    manualInIdCard: false, // 是否启用手动输入证件号
+                    manualInUsePersonCard: false, // 启用手动输入证件号=> 是否人证比对 默认值:false
+
+                    useLinkage: false, // 	启用核验接口 默认值:false
+                    linkageAds: '', // 	核验接口地址
+
+                    checkVerifyEncryptSwitch: true, // 核验接口数据是否加解密 默认值:true
+                    checkVerifyEncryptAppKey: '', //
+                    checkVerifyEncryptAppSecret: '', //
+                    checkVerifyEncryptPrivateKey: '', //
+                    checkVerifyRetryTimes: 1, // 核验接口失败重试次数
+                    linkTimeout: 5, // 核验接口超时时间(s)
+                    verifyRetryTimes: 2, // 核验接口失败重试次数(verify)
+                    verifyLinkTimeout: 15, // 核验接口超时时间(s)(verify)
+                    checkVerifyTimeoutTips: '核验接口超时', // 核验接口超时提示语
+                    checkVerifyFailedTips: '核验接口失败', // 核验接口失败提示语
+
+                    showDisplayTimeByOpenTimesSwitch: false, // 是否根据开门次数决定显示时长  默认值:false
+                    onceOpenDoorTime: 2, // 单次开门时间(s) 默认值:2
+
+                    singlePageTime: 120, // 默认单选页时长(s) 默认值:120
+                    multiPageTime: 120, // 默认多选页时长(s) 默认值:120
+                    waitPageTime: 120, // 默认等待页时长(s) 默认值:120
+
+                    showTopBar: false, // 是否显示通行统计  默认值:false
+                    leftTopBarText: '已/可通行人数',
+                    rightTopBarText: '今日刷脸成功人数',
+
+                    useSerialPort: 'default', // 	开门信号: 继电器/RS232 default/RS232 默认值:default
+                    doorSerialPort: '' // RS232开门串口地址
+                  }
+                }
+                break
               // 应用通信模式
               case 'communicationMode':
                 if (fieldValue == 2) {

+ 19 - 2
src/views/HHLocalDeviceTemplate/index.vue

@@ -21,6 +21,8 @@
         :qr-brand-list="qrBrandList"
         :camera-type-list="cameraTypeList"
         :push-failed-record-type-list="pushFailedRecordTypeList"
+        :success-show-personal-info-type-list="successShowPersonalInfoTypeList"
+        :set-personal-type-list="setPersonalTypeList"
         :live-type-list="liveTypeList"
         style="margin-left: 16px"
         @finish="back"
@@ -165,7 +167,12 @@ import {
 import {
   templatePage,
   templateDel,
-  templateList, getCameraTypeEnum, getLiveTypeEnum, getPushFailedRecordTypeEnum
+  templateList,
+  getCameraTypeEnum,
+  getLiveTypeEnum,
+  getPushFailedRecordTypeEnum,
+  getSuccessShowPersonalInfoListEnum,
+  getSetPersonalListEnum
 } from '@/api/HHLocalDevice'
 import { getIdCardReaderBrand, getQrCodeReaderBrandEnum, getReaderBrand } from '@/api/device'
 
@@ -202,6 +209,8 @@ export default {
       cameraTypeList: [], // 摄像头类型下拉
       liveTypeList: [], // 活体检测模式下拉
       pushFailedRecordTypeList: [], // 记录类型下拉
+      successShowPersonalInfoTypeList: [], // 成功显示人员信息下拉
+      setPersonalTypeList: [], // 设置——人员列表下拉
       systemType: [
         { id: 1, name: '蚂蚁OS' },
         { id: 2, name: '非蚂蚁OS' }
@@ -224,6 +233,8 @@ export default {
       const cameraTypeAxios = await getCameraTypeEnum() // 摄像头类型下拉
       const liveTypeAxios = await getLiveTypeEnum() // 活体检测模式下拉
       const pushFailedRecordTypeAxios = await getPushFailedRecordTypeEnum() // 记录类型下拉
+      const successShowPersonalInfoTypeAxios = await getSuccessShowPersonalInfoListEnum() // 成功显示人员信息下拉
+      const setPersonalTypeAxios = await getSetPersonalListEnum() // 设置——人员列表下拉
       Promise.all([
         applicationTypeAxios,
         deviceModelAxios,
@@ -233,7 +244,9 @@ export default {
         readerBrandAxios,
         cameraTypeAxios,
         liveTypeAxios,
-        pushFailedRecordTypeAxios
+        pushFailedRecordTypeAxios,
+        successShowPersonalInfoTypeAxios,
+        setPersonalTypeAxios
       ]).then(res => {
         const applicationTypeAxiosRes = res[0]
         this.applicationList = applicationTypeAxiosRes.data
@@ -253,6 +266,10 @@ export default {
         this.liveTypeList = liveTypeAxiosRes.data
         const pushFailedRecordTypeAxiosRes = res[8]
         this.pushFailedRecordTypeList = pushFailedRecordTypeAxiosRes.data
+        const successShowPersonalInfoTypeAxiosRes = res[9]
+        this.successShowPersonalInfoTypeList = successShowPersonalInfoTypeAxiosRes.data
+        const setPersonalTypeAxiosRes = res[10]
+        this.setPersonalTypeList = setPersonalTypeAxiosRes.data
       }).finally(() => {
         this.enumLoading = false
       })