From 73257368728b79dec115de40aa0cfed7a9f53991 Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期一, 07 九月 2026 09:47:36 +0800
Subject: [PATCH] feat(appointment-scan): 同步身份证、人脸、接待人及打印凭条的横屏左右布局

---
 pages/appointment-scan/n-index.nvue |  204 ++++++++++++++++++++++++++++----------------------
 1 files changed, 113 insertions(+), 91 deletions(-)

diff --git a/pages/appointment-scan/n-index.nvue b/pages/appointment-scan/n-index.nvue
index 3770687..5abc831 100644
--- a/pages/appointment-scan/n-index.nvue
+++ b/pages/appointment-scan/n-index.nvue
@@ -18,43 +18,43 @@
 
     <!-- 步骤: 预约码验证 -->
     <template v-if="currentStepName === 'qr'">
-      <view class="main-card qr-main-card">
-        <view class="qr-main-content">
-          <view class="qr-text-panel">
-            <view class="qr-title-group">
-              <text class="main-title qr-main-title">请将您的预约二维码放置到扫码位置</text>
-              <text class="main-desc qr-main-desc">保持二维码完整、清晰,距离扫码口约 10-20 厘米</text>
+      <view class="main-card ls-main-card">
+        <view class="ls-main-content">
+          <view class="ls-text-panel">
+            <view class="ls-title-group">
+              <text class="main-title ls-main-title">请将您的预约二维码放置到扫码位置</text>
+              <text class="main-desc ls-main-desc">保持二维码完整、清晰,距离扫码口约 10-20 厘米</text>
             </view>
-            <text class="helper-text qr-helper-text">若识别失败,请调整手机亮度、避免反光,或联系工作人员协助</text>
+            <text class="helper-text ls-helper-text">若识别失败,请调整手机亮度、避免反光,或联系工作人员协助</text>
           </view>
 
-          <view class="device-area qr-device-area">
-            <image :src="deviceScanImage" class="device-img qr-device-img" mode="aspectFit"></image>
+          <view class="device-area ls-device-area">
+            <image :src="deviceScanImage" class="device-img ls-device-img" mode="aspectFit"></image>
           </view>
         </view>
       </view>
 
-      <view class="bottom-area qr-bottom-area">
-        <view class="help-card qr-help-card">
+      <view class="bottom-area ls-bottom-area">
+        <view class="help-card ls-help-card">
           <view class="highlight-bar"></view>
-          <view class="card-title-row qr-card-title-row" style="margin-top: 16px;">
+          <view class="card-title-row ls-card-title-row" style="margin-top: 16px;">
             <view class="icon-base">
               <image :src="hintIconImage" class="icon-base-img" mode="aspectFit"></image>
             </view>
             <text class="card-title">扫码小贴士</text>
           </view>
-          <text class="help-content qr-help-content">请使用预约成功后收到的二维码,\n保持二维码完整显示后再靠近扫码区域</text>
+          <text class="help-content ls-help-content">请使用预约成功后收到的二维码,\n保持二维码完整显示后再靠近扫码区域</text>
         </view>
 
-        <view class="action-card qr-action-card">
+        <view class="action-card ls-action-card">
           <view class="highlight-bar"></view>
-          <view class="card-title-row qr-card-title-row">
+          <view class="card-title-row ls-card-title-row">
             <view class="icon-base">
               <image :src="returnIconImage" class="icon-base-img" mode="aspectFit"></image>
             </view>
             <text class="card-title">需要返回?</text>
           </view>
-          <view class="main-btn qr-main-btn" @click="goBack">
+          <view class="main-btn ls-main-btn" @click="goBack">
             <text class="btn-text">返回上一步</text>
           </view>
         </view>
@@ -64,45 +64,51 @@
     <!-- 步骤: 身份证验证 -->
     <template v-else-if="currentStepName === 'idcard'">
       <template v-if="!isManualInput">
-        <view class="main-card">
-          <text class="main-title">请将您的身份证放置读卡器位置</text>
-          <text class="main-desc">请将身份证贴近设备感应区,系统将自动读取身份信息</text>
+        <view class="main-card ls-main-card">
+          <view class="ls-main-content">
+            <view class="ls-text-panel">
+              <view class="ls-title-group">
+                <text class="main-title ls-main-title">请将您的身份证放置读卡器位置</text>
+                <text class="main-desc ls-main-desc">请将身份证贴近设备感应区,系统将自动读取身份信息</text>
+              </view>
 
-          <view class="name-hint-row" v-if="mode === 'appointment'">
-            <view class="name-icon-box">
-              <text class="name-icon-text">人</text>
+              <view class="name-hint-row" v-if="mode === 'appointment'">
+                <view class="name-icon-box">
+                  <text class="name-icon-text">人</text>
+                </view>
+                <text class="name-text">姓名:{{ appointmentVisitorName }}</text>
+              </view>
+
+              <text class="helper-text ls-helper-text">若识别失败,请联系工作人员协助</text>
             </view>
-            <text class="name-text">姓名:{{ appointmentVisitorName }}</text>
-          </view>
 
-          <view class="device-area">
-            <image :src="deviceIdScanImage" class="device-img" mode="aspectFit"></image>
+            <view class="device-area ls-device-area">
+              <image :src="deviceIdScanImage" class="device-img ls-device-img" mode="aspectFit"></image>
+            </view>
           </view>
-
-          <text class="helper-text">若识别失败,请联系工作人员协助</text>
         </view>
 
-        <view class="bottom-area">
-          <view class="help-card">
+        <view class="bottom-area ls-bottom-area">
+          <view class="help-card ls-help-card">
             <view class="highlight-bar"></view>
-            <view class="card-title-row">
+            <view class="card-title-row ls-card-title-row">
               <view class="icon-base">
                 <image :src="hintIconImage" class="icon-base-img" mode="aspectFit"></image>
               </view>
               <text class="card-title">读卡小贴士</text>
             </view>
-            <text class="help-content">请使用二代身份证原件放至读卡区位置</text>
+            <text class="help-content ls-help-content">请使用二代身份证原件放至读卡区位置</text>
           </view>
 
-          <view class="action-card" v-if="allowManualIdCard">
+          <view class="action-card ls-action-card" v-if="allowManualIdCard">
             <view class="highlight-bar"></view>
-            <view class="card-title-row">
+            <view class="card-title-row ls-card-title-row">
               <view class="icon-base">
                 <image :src="keyboardIconImage" class="icon-base-img" mode="aspectFit"></image>
               </view>
               <text class="card-title">未携带身份证?</text>
             </view>
-            <view class="main-btn" @click="openManualInput">
+            <view class="main-btn ls-main-btn" @click="openManualInput">
               <text class="btn-text">手动录入信息</text>
             </view>
           </view>
@@ -203,10 +209,12 @@
 
     <!-- 步骤: 人脸验证 -->
     <template v-else-if="currentStepName === 'face'">
-      <view class="main-card">
-        <view class="title-group">
-          <text class="main-title">请面向屏幕完成人脸验证</text>
-          <text class="sub-title">请摘下口罩和帽子,保持面部位于取景框内并正视摄像头</text>
+      <view class="main-card ls-main-card">
+        <view class="ls-main-content">
+          <view class="ls-text-panel">
+            <view class="title-group ls-title-group">
+          <text class="main-title ls-main-title">请面向屏幕完成人脸验证</text>
+          <text class="sub-title ls-main-desc">请摘下口罩和帽子,保持面部位于取景框内并正视摄像头</text>
           <view class="name-pill">
             <view class="name-icon">
               <text class="name-icon-text">人</text>
@@ -215,7 +223,9 @@
           </view>
         </view>
 
-        <view class="face-capture-card">
+        <text class="bottom-subtext ls-helper-text">系统将自动完成人脸采集与比对,请勿频繁移动或离开识别区域</text>
+          </view>
+          <view class="face-capture-card ls-device-area">
           <view class="status-pill">
             <view class="status-dot"></view>
             <text class="status-text">{{ faceVerifyStatusText }}</text>
@@ -273,30 +283,31 @@
           </view>
         </view>
 
-        <text class="bottom-subtext">系统将自动完成人脸采集与比对,请勿频繁移动或离开识别区域</text>
+
+        </view>
       </view>
 
-      <view class="bottom-area">
-        <view class="help-card">
+      <view class="bottom-area ls-bottom-area">
+        <view class="help-card ls-help-card">
           <view class="highlight-bar"></view>
-          <view class="card-title-row">
+          <view class="card-title-row ls-card-title-row">
             <view class="icon-base">
               <image :src="hintIconImage" class="icon-base-img" mode="aspectFit"></image>
             </view>
             <text class="card-title">识别提示</text>
           </view>
-          <text class="help-content">{{ faceVerifyHelpText }}</text>
+          <text class="help-content ls-help-content">{{ faceVerifyHelpText }}</text>
         </view>
 
-        <view class="action-card">
+        <view class="action-card ls-action-card">
           <view class="highlight-bar"></view>
-          <view class="card-title-row">
+          <view class="card-title-row ls-card-title-row">
             <view class="icon-base">
               <image :src="retryIconImage" class="icon-base-img" mode="aspectFit"></image>
             </view>
             <text class="card-title">识别失败?</text>
           </view>
-          <view class="main-btn" @click="handleFaceVerifyNextStep">
+          <view class="main-btn ls-main-btn" @click="handleFaceVerifyNextStep">
             <text class="btn-text">重新采集人脸</text>
             <!-- <text class="btn-text">跳过人脸采集</text> -->
           </view>
@@ -306,10 +317,12 @@
 
     <!-- 步骤: 接待人验证 -->
     <template v-else-if="currentStepName === 'host'">
-      <view class="main-card">
-        <view class="title-group">
-          <text class="main-title">请接待人面向屏幕</text>
-          <text class="sub-title">请接待人站在设备前,正视屏幕完成身份确认</text>
+      <view class="main-card ls-main-card">
+        <view class="ls-main-content">
+          <view class="ls-text-panel">
+            <view class="title-group ls-title-group">
+          <text class="main-title ls-main-title">请接待人面向屏幕</text>
+          <text class="sub-title ls-main-desc">请接待人站在设备前,正视屏幕完成身份确认</text>
           <view class="name-pill" v-if="mode === 'appointment'">
             <view class="name-icon">
               <text class="name-icon-text">人</text>
@@ -318,7 +331,9 @@
           </view>
         </view>
 
-        <view class="face-capture-card">
+        <text class="bottom-subtext ls-helper-text">系统将自动完成人脸采集与比对,请勿频繁移动或离开识别区域</text>
+          </view>
+          <view class="face-capture-card ls-device-area">
           <view class="status-pill">
             <view class="status-dot"></view>
             <text class="status-text">{{ hostVerifyStatusText }}</text>
@@ -374,30 +389,31 @@
           </view>
         </view>
 
-        <text class="bottom-subtext">系统将自动完成人脸采集与比对,请勿频繁移动或离开识别区域</text>
+
+        </view>
       </view>
 
-      <view class="bottom-area">
-        <view class="help-card">
+      <view class="bottom-area ls-bottom-area">
+        <view class="help-card ls-help-card">
           <view class="highlight-bar"></view>
-          <view class="card-title-row">
+          <view class="card-title-row ls-card-title-row">
             <view class="icon-base">
               <image :src="hintIconImage" class="icon-base-img" mode="aspectFit"></image>
             </view>
             <text class="card-title">验证提示</text>
           </view>
-          <text class="help-content">请由接待人本人操作;\n接待人可以直接使用门禁卡刷卡验证</text>
+          <text class="help-content ls-help-content">请由接待人本人操作;\n接待人可以直接使用门禁卡刷卡验证</text>
         </view>
 
-        <view class="action-card">
+        <view class="action-card ls-action-card">
           <view class="highlight-bar" style="background: #6EA2FF;"></view>
-          <view class="card-title-row">
+          <view class="card-title-row ls-card-title-row">
             <view class="icon-base">
               <image :src="retryIconImage" class="icon-base-img" mode="aspectFit"></image>
             </view>
             <text class="card-title">验证失败?</text>
           </view>
-          <view class="main-btn" @click="retryFaceVerify">
+          <view class="main-btn ls-main-btn" @click="retryFaceVerify">
             <text class="btn-text">重新验证接待人</text>
             <!-- <text class="btn-text">跳过人脸采集</text> -->
           </view>
@@ -454,35 +470,41 @@
 
     <!-- 步骤: 打印凭条 -->
     <template v-else-if="currentStepName === 'print'">
-      <view class="main-card">
-        <text class="main-title">请等待打印凭条</text>
+      <view class="main-card ls-main-card">
+        <view class="ls-main-content">
+          <view class="ls-text-panel">
+            <view class="ls-title-group">
+              <text class="main-title ls-main-title">请等待打印凭条</text>
+            </view>
+          </view>
+          <view class="print-demo-card ls-device-area" style="align-items: center; justify-content: center;">
+          <image :src="printTicketDemoImage" class="print-demo-img ls-device-img" mode="aspectFit"></image>
+        </view>
 
-        <view class="print-demo-card">
-          <image :src="printTicketDemoImage" class="print-demo-img" mode="aspectFit"></image>
         </view>
       </view>
 
-      <view class="bottom-area">
-        <view class="help-card">
+      <view class="bottom-area ls-bottom-area">
+        <view class="help-card ls-help-card">
           <view class="highlight-bar"></view>
-          <view class="card-title-row">
+          <view class="card-title-row ls-card-title-row">
             <view class="icon-base">
               <image :src="hintIconImage" class="icon-base-img" mode="aspectFit"></image>
             </view>
             <text class="card-title">取条提示</text>
           </view>
-          <text class="help-content">请在凭条完全打印后再取走;\n如长时间未出条,请联系现场工作人员协助</text>
+          <text class="help-content ls-help-content">请在凭条完全打印后再取走;\n如长时间未出条,请联系现场工作人员协助</text>
         </view>
 
-        <view class="action-card">
+        <view class="action-card ls-action-card">
           <view class="highlight-bar" style="background: #6EA2FF;"></view>
-          <view class="card-title-row">
+          <view class="card-title-row ls-card-title-row">
             <view class="icon-base">
               <image :src="retryIconImage" class="icon-base-img" mode="aspectFit"></image>
             </view>
             <text class="card-title">未打印成功?</text>
           </view>
-          <view class="main-btn" @click="startPrintTicket">
+          <view class="main-btn ls-main-btn" @click="startPrintTicket">
             <text class="btn-text">重新打印凭条</text>
           </view>
         </view>
@@ -4720,7 +4742,7 @@
   height: 320px;
 }
 
-.page-container.landscape .qr-main-card {
+.page-container.landscape .ls-main-card {
   height: 560px;
   padding-top: 40px;
   padding-right: 56px;
@@ -4730,7 +4752,7 @@
   flex-direction: row;
 }
 
-.page-container.landscape .qr-main-content {
+.page-container.landscape .ls-main-content {
   width: 100%;
   flex: 1;
   display: flex;
@@ -4739,7 +4761,7 @@
   justify-content: space-between;
 }
 
-.page-container.landscape .qr-text-panel {
+.page-container.landscape .ls-text-panel {
   width: 760px;
   display: flex;
   flex-direction: column;
@@ -4749,55 +4771,55 @@
   padding-bottom: 18px;
 }
 
-.page-container.landscape .qr-title-group {
+.page-container.landscape .ls-title-group {
   display: flex;
   flex-direction: column;
   align-items: flex-start;
 }
 
-.page-container.landscape .qr-main-title,
-.page-container.landscape .qr-main-desc,
-.page-container.landscape .qr-helper-text {
+.page-container.landscape .ls-main-title,
+.page-container.landscape .ls-main-desc,
+.page-container.landscape .ls-helper-text {
   width: 100%;
   text-align: left;
 }
 
-.page-container.landscape .qr-main-title {
+.page-container.landscape .ls-main-title {
   font-size: 56px;
   line-height: 74px;
   height: auto;
 }
 
-.page-container.landscape .qr-main-desc {
+.page-container.landscape .ls-main-desc {
   margin-top: 14px;
   margin-bottom: 0;
   font-size: 24px;
   line-height: 34px;
 }
 
-.page-container.landscape .qr-helper-text {
+.page-container.landscape .ls-helper-text {
   font-size: 20px;
   line-height: 30px;
 }
 
-.page-container.landscape .qr-device-area {
+.page-container.landscape .ls-device-area {
   width: 620px;
   height: 100%;
   margin-bottom: 0;
 }
 
-.page-container.landscape .qr-device-img {
+.page-container.landscape .ls-device-img {
   width: 620px;
   height: 420px;
 }
 
-.page-container.landscape .qr-bottom-area {
+.page-container.landscape .ls-bottom-area {
   height: 176px;
   align-items: stretch;
 }
 
-.page-container.landscape .qr-help-card,
-.page-container.landscape .qr-action-card {
+.page-container.landscape .ls-help-card,
+.page-container.landscape .ls-action-card {
   width: 900px;
   height: 176px;
   padding-top: 22px;
@@ -4806,21 +4828,21 @@
   padding-left: 28px;
 }
 
-.page-container.landscape .qr-card-title-row {
+.page-container.landscape .ls-card-title-row {
   margin-top: 14px;
 }
 
-.page-container.landscape .qr-help-content {
+.page-container.landscape .ls-help-content {
   margin-top: 14px;
   font-size: 17px;
   line-height: 26px;
 }
 
-.page-container.landscape .qr-action-card {
+.page-container.landscape .ls-action-card {
   justify-content: flex-start;
 }
 
-.page-container.landscape .qr-main-btn {
+.page-container.landscape .ls-main-btn {
   width: 100%;
   height: 56px;
   margin-top: 18px;

--
Gitblit v1.7.1