From 8665daa7aa863f96d0d8f27c167edae1efc38022 Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期五, 31 七月 2026 14:46:19 +0800
Subject: [PATCH] Merge branch 'master' into dev
---
ruoyi-ui/src/views/visitor-admin/system/config.vue | 106 +++++++++++++++++++++++++++++++---------------------
1 files changed, 63 insertions(+), 43 deletions(-)
diff --git a/ruoyi-ui/src/views/visitor-admin/system/config.vue b/ruoyi-ui/src/views/visitor-admin/system/config.vue
index aeb0039..b684e2e 100644
--- a/ruoyi-ui/src/views/visitor-admin/system/config.vue
+++ b/ruoyi-ui/src/views/visitor-admin/system/config.vue
@@ -11,7 +11,7 @@
type="button"
@click="activeTab = tab.value"
>
- <span class="nav-folder"></span>
+ <svg-icon class-name="config-nav-icon" :icon-class="tab.icon" />
<span>{{ tab.label }}</span>
</button>
</aside>
@@ -20,33 +20,52 @@
<section v-show="activeTab === 'register'">
<div class="config-section">
<h2>登记模式设置</h2>
- <label v-for="item in registerSwitches" :key="item.prop" class="config-switch-row">
- <span class="row-icon"></span>
- <span class="row-label">{{ item.label }}</span>
- <input v-model="form[item.prop]" type="checkbox">
- <span class="switch-control"></span>
+ <label class="config-switch-row">
+ <svg-icon class-name="row-icon" icon-class="config-onsite-register" />
+ <span class="row-label">现场登记</span>
+ <input v-model="form.onsiteRegistrationEnabled" type="checkbox">
+ <span class="switch-control" />
</label>
+ <label class="config-switch-row">
+ <svg-icon class-name="row-icon" icon-class="config-appointment-register" />
+ <span class="row-label">预约登记</span>
+ <input v-model="form.appointmentRegistrationEnabled" type="checkbox">
+ <span class="switch-control" />
+ </label>
+ <div v-if="form.appointmentRegistrationEnabled" class="appointment-time-row">
+ <svg-icon class-name="row-icon" icon-class="config-appointment-time" />
+ <span class="row-label">预约登记默认访问时间</span>
+ <span class="time-day">当天</span>
+ <el-time-picker
+ v-model="form.appointmentDefaultVisitTime"
+ class="appointment-time-input"
+ value-format="HH:mm"
+ format="HH:mm"
+ placeholder="请选择时间"
+ :clearable="false"
+ />
+ </div>
</div>
<div class="config-section">
<h2>接待人验证开关</h2>
<p>设置登记、签离时是否需要接待人确认。若关闭,访客认证后直接打印凭条/签离时自动回收门禁权限。</p>
<label v-for="item in receiverSwitches" :key="item.prop" class="config-switch-row">
- <span class="row-icon"></span>
+ <svg-icon class-name="row-icon" :icon-class="item.icon" />
<span class="row-label">{{ item.label }}</span>
<input v-model="form[item.prop]" type="checkbox">
- <span class="switch-control"></span>
+ <span class="switch-control" />
</label>
</div>
<div class="config-section">
<h2>人脸验证方式</h2>
- <p>人像对比即身份证和人脸对比确保为同一人(手动录入身份证除外),全方位人脸采集则360°采集人脸照片。</p>
+ <p>人像对比即身份证和人脸对比确保为同一人(手动录入身份证除外),人脸采集则采集访客人脸照片。</p>
<label v-for="item in faceSwitches" :key="item.prop" class="config-switch-row">
- <span class="row-icon"></span>
+ <svg-icon class-name="row-icon" :icon-class="item.icon" />
<span class="row-label">{{ item.label }}</span>
<input v-model="form[item.prop]" type="checkbox">
- <span class="switch-control"></span>
+ <span class="switch-control" />
</label>
</div>
@@ -54,10 +73,10 @@
<h2>身份证手动输入</h2>
<p>关闭后仅可刷身份证登记/签离。强制人脸比对时,开启则支持手动输入身份证并做人脸采集。</p>
<label class="config-switch-row">
- <span class="row-icon"></span>
+ <svg-icon class-name="row-icon" icon-class="config-id-card" />
<span class="row-label">允许手动输入身份证</span>
<input v-model="form.manualIdCardEnabled" type="checkbox">
- <span class="switch-control"></span>
+ <span class="switch-control" />
</label>
</div>
</section>
@@ -68,15 +87,14 @@
<div class="config-section">
<h2>凭条样式配置</h2>
<p>勾选需要在凭条上打印的字段,支持拖拽排序(至少勾选1个字段)</p>
- <draggable v-model="printFieldOptions" class="print-field-list" handle=".print-field-drag" ghost-class="print-field-ghost" :delay="120" @end="syncPrintFieldsOrder">
+ <draggable v-model="printFieldOptions" class="print-field-list" ghost-class="print-field-ghost" chosen-class="print-field-chosen" :delay="120" :animation="160" @end="syncPrintFieldsOrder">
<label v-for="item in printFieldOptions" :key="item.fieldCode" class="print-field-item">
- <span class="print-field-drag">↕</span>
<input v-model="form.printFields" type="checkbox" :value="item.fieldCode">
<span>{{ item.fieldName }}</span>
</label>
</draggable>
<button class="sort-hint" type="button">
- <span>↕</span>
+ <i class="el-icon-s-opportunity sort-hint-icon" aria-hidden="true" />
<span>长按选项拖拽排序</span>
</button>
</div>
@@ -85,17 +103,21 @@
<aside class="print-preview">
<div class="preview-title">
<span>效果预览</span>
- <button type="button" title="刷新预览" @click="refreshPreview">↻</button>
+ <button type="button" title="刷新预览" aria-label="刷新预览" @click="refreshPreview">
+ <i class="el-icon-refresh" aria-hidden="true" />
+ </button>
</div>
- <section class="ticket-preview" aria-label="登记凭证预览">
- <h3>登记凭证</h3>
- <div class="ticket-rows">
- <div v-for="row in ticketRows" :key="row.label" class="ticket-row">
- <strong>{{ row.label }}</strong>
- <span>{{ row.value }}</span>
+ <div class="preview-stage">
+ <section class="ticket-preview" aria-label="登记凭证预览">
+ <h3>登记凭证</h3>
+ <div class="ticket-rows">
+ <div v-for="row in ticketRows" :key="row.label" class="ticket-row">
+ <strong>{{ row.label }}</strong>
+ <span>{{ row.value }}</span>
+ </div>
</div>
- </div>
- </section>
+ </section>
+ </div>
</aside>
</div>
</section>
@@ -109,13 +131,14 @@
<span>系统名称</span>
<input v-model="form.systemName" type="text" placeholder="请输入系统名称">
</label>
- <label class="input-field">
+ <div class="input-field">
<span>Logo</span>
- <div class="logo-upload">
+ <label class="logo-upload">
<input v-hasPermi="['visitor:config:edit']" type="file" accept="image/*" :disabled="uploadingLogo" @change="handleLogoChange">
- <span>{{ uploadingLogo ? '上传中' : logoFileName }}</span>
- </div>
- </label>
+ <span class="logo-upload-button">选择文件</span>
+ <span class="logo-file-name">{{ uploadingLogo ? '上传中' : logoFileName }}</span>
+ </label>
+ </div>
</div>
</div>
@@ -137,10 +160,10 @@
<h2>入口配置</h2>
<p>关闭后入口不显示,但是仍可以点击该区域进入。</p>
<label class="config-switch-row">
- <span class="row-icon"></span>
+ <svg-icon class-name="row-icon" icon-class="config-device" />
<span class="row-label">访客机管理侧入口</span>
<input v-model="form.visitorMachineEntryEnabled" type="checkbox">
- <span class="switch-control"></span>
+ <span class="switch-control" />
</label>
</div>
</div>
@@ -163,6 +186,7 @@
const defaultForm = {
onsiteRegistrationEnabled: true,
appointmentRegistrationEnabled: true,
+ appointmentDefaultVisitTime: '',
registerReceiverConfirmEnabled: false,
signReceiverConfirmEnabled: false,
faceCompareEnabled: false,
@@ -188,21 +212,17 @@
logoFileName: '未选择任何文件',
form: { ...defaultForm },
tabs: [
- { value: 'register', label: '登记配置' },
- { value: 'print', label: '打印凭条配置' },
- { value: 'system', label: '系统信息' }
- ],
- registerSwitches: [
- { prop: 'onsiteRegistrationEnabled', label: '现场登记' },
- { prop: 'appointmentRegistrationEnabled', label: '预约登记' }
+ { value: 'register', label: '登记配置', icon: 'config-register' },
+ { value: 'print', label: '打印凭条配置', icon: 'config-print' },
+ { value: 'system', label: '系统信息', icon: 'config-system' }
],
receiverSwitches: [
- { prop: 'registerReceiverConfirmEnabled', label: '登记需接待人确认' },
- { prop: 'signReceiverConfirmEnabled', label: '签离需接待人确认' }
+ { prop: 'registerReceiverConfirmEnabled', label: '登记需接待人确认', icon: 'config-receiver-confirm' },
+ { prop: 'signReceiverConfirmEnabled', label: '签离需接待人确认', icon: 'config-sign-confirm' }
],
faceSwitches: [
- { prop: 'faceCompareEnabled', label: '人像对比' },
- { prop: 'faceCaptureEnabled', label: '全方位人脸采集' }
+ { prop: 'faceCompareEnabled', label: '人像对比', icon: 'config-face-compare' },
+ { prop: 'faceCaptureEnabled', label: '人脸采集', icon: 'config-face-capture' }
],
printFieldOptions: [
{ fieldCode: 'visitorName', fieldName: '访客姓名' },
--
Gitblit v1.7.1