与牧同行-小程序用户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

284 lines
9.9 KiB

  1. <view class="auth-container">
  2. <!-- 背景装饰 -->
  3. <view class="background-design">
  4. <view class="bg-circle circle-1"></view>
  5. <view class="bg-circle circle-2"></view>
  6. <view class="bg-wave"></view>
  7. </view>
  8. <!-- 头部区域 -->
  9. <view class="header-section">
  10. <view class="brand-header">
  11. <view class="brand-text">
  12. <view class="brand-name">与牧同行</view>
  13. <view class="brand-slogan">专业牧业,贴心同行</view>
  14. </view>
  15. </view>
  16. <view class="auth-header">
  17. <view class="auth-title">
  18. <text class="title-text">实名认证</text>
  19. <view class="title-badge">必填</view>
  20. </view>
  21. <view class="auth-description">
  22. 为了更好的服务体验,请完成实名认证
  23. </view>
  24. </view>
  25. </view>
  26. <!-- 进度指示 -->
  27. <view class="progress-indicator">
  28. <view class="progress-step active">
  29. <view class="step-bubble">
  30. <view class="step-number">1</view>
  31. </view>
  32. <view class="step-label">填写信息</view>
  33. </view>
  34. <view class="progress-line">
  35. <view class="line-progress" style="width: {{lineProgress1}}%;"></view>
  36. </view>
  37. <view class="progress-step {{currentStep >= 2 ? 'active' : ''}}">
  38. <view class="step-bubble">
  39. <view class="step-number">2</view>
  40. </view>
  41. <view class="step-label">信息验证</view>
  42. </view>
  43. <view class="progress-line">
  44. <view class="line-progress" style="width: {{lineProgress2}}%;"></view>
  45. </view>
  46. <view class="progress-step {{currentStep >= 3 ? 'active' : ''}}">
  47. <view class="step-bubble">
  48. <view class="step-number">3</view>
  49. </view>
  50. <view class="step-label">完成认证</view>
  51. </view>
  52. </view>
  53. <!-- 表单区域 -->
  54. <view class="form-section">
  55. <!-- 姓名输入 -->
  56. <view class="input-card">
  57. <view class="input-label">
  58. <image class="label-icon" src="/pagesA/images/name.png" mode="aspectFit"></image>
  59. <text class="label-text">真实姓名</text>
  60. <text class="required-star">*</text>
  61. </view>
  62. <view class="input-container">
  63. <input
  64. class="input-field {{nameFocus ? 'focused' : ''}} {{nameError ? 'error' : ''}} {{name ? 'has-value' : ''}} {{isNameValid ? 'valid' : ''}}"
  65. placeholder="请输入您的真实姓名"
  66. placeholder-class="placeholder"
  67. value="{{name}}"
  68. bindinput="onNameInput"
  69. bindfocus="onNameFocus"
  70. bindblur="onNameBlur"
  71. maxlength="10"
  72. />
  73. <!-- 删除按钮 -->
  74. <view class="clear-wrapper" wx:if="{{name}}">
  75. <button class="clear-btn" bindtap="clearName" hover-class="btn-hover">
  76. <image class="clear-icon" src="/pagesA/images/ch.png" mode="aspectFit"></image>
  77. </button>
  78. </view>
  79. <!-- 输入框下划线 -->
  80. <view class="input-underline">
  81. <view class="underline-bg"></view>
  82. <view class="underline-progress {{nameFocus ? 'active' : ''}}"></view>
  83. </view>
  84. <!-- 字符计数 -->
  85. <view class="char-count {{name.length > 8 ? 'warning' : ''}}">
  86. {{name.length}}/10
  87. </view>
  88. </view>
  89. <!-- 提示信息 -->
  90. <view class="hint-container" wx:if="{{showNameHint || nameError}}">
  91. <text class="hint-text {{nameError ? 'error' : 'normal'}}">
  92. {{nameError || '请输入与身份证一致的姓名(2-10个汉字)'}}
  93. </text>
  94. </view>
  95. </view>
  96. <!-- 身份证号输入 -->
  97. <view class="input-card">
  98. <view class="input-label">
  99. <image class="label-icon" src="/pagesA/images/sfz.png" mode="aspectFit"></image>
  100. <text class="label-text">身份证号</text>
  101. <text class="required-star">*</text>
  102. </view>
  103. <view class="input-container">
  104. <input
  105. class="input-field {{idNumberError ? 'error' : ''}} {{isIdNumberValid ? 'valid' : ''}} {{idNumber ? 'has-value' : ''}}"
  106. placeholder="请输入18位身份证号码"
  107. placeholder-class="placeholder"
  108. value="{{idNumber}}"
  109. bindinput="onIdNumberInput"
  110. bindfocus="onIdNumberFocus"
  111. bindblur="onIdNumberBlur"
  112. maxlength="18"
  113. type="idcard"
  114. />
  115. <!-- 删除按钮 -->
  116. <view class="clear-wrapper" wx:if="{{idNumber}}">
  117. <button class="clear-btn" bindtap="clearIdNumber" hover-class="btn-hover">
  118. <image class="clear-icon" src="/pagesA/images/ch.png" mode="aspectFit"></image>
  119. </button>
  120. </view>
  121. <!-- 输入框下划线 -->
  122. <view class="input-underline">
  123. <view class="underline-bg"></view>
  124. <view class="underline-progress {{idNumberFocus ? 'active' : ''}}"></view>
  125. </view>
  126. <!-- 分段显示 -->
  127. <view class="id-segments {{idNumberFocus || idNumber ? 'show' : ''}}">
  128. <view class="id-segment {{idNumber.length >= 6 ? 'filled' : ''}}">{{idNumber.substring(0, 6) || '地区'}}</view>
  129. <view class="id-segment {{idNumber.length >= 14 ? 'filled' : ''}}">{{idNumber.substring(6, 14) || '出生'}}</view>
  130. <view class="id-segment {{idNumber.length >= 17 ? 'filled' : ''}}">{{idNumber.substring(14, 17) || '顺序'}}</view>
  131. <view class="id-segment last {{idNumber.length === 18 ? 'filled' : ''}}">{{idNumber.substring(17) || '校验'}}</view>
  132. </view>
  133. </view>
  134. <!-- 提示信息 -->
  135. <view class="hint-container" wx:if="{{showIdNumberHint || idNumberError}}">
  136. <text class="hint-text {{idNumberError ? 'error' : 'normal'}}">
  137. {{idNumberError || '请输入有效的18位身份证号码'}}
  138. </text>
  139. </view>
  140. </view>
  141. <!-- 协议条款 -->
  142. <view class="agreement-card">
  143. <label class="agreement-item" bindtap="toggleAgreement">
  144. <view class="agreement-checkbox {{agreed ? 'checked' : ''}}">
  145. <image
  146. wx:if="{{agreed}}"
  147. class="checkmark"
  148. src="/pagesA/images/duig.png"
  149. mode="aspectFit"
  150. ></image>
  151. </view>
  152. <view class="agreement-content">
  153. <text>我已阅读并同意</text>
  154. <text class="link-text" bindtap="showAgreementModal">《用户服务协议》</text>
  155. <text>和</text>
  156. <text class="link-text" bindtap="showPrivacyModal">《隐私保护协议》</text>
  157. </view>
  158. </label>
  159. </view>
  160. </view>
  161. <!-- 提交区域 -->
  162. <view class="submit-section">
  163. <button
  164. class="submit-button {{canSubmit ? 'active' : 'disabled'}}"
  165. bindtap="submitAuth"
  166. disabled="{{!canSubmit}}"
  167. hover-class="button-hover"
  168. loading="{{isSubmitting}}"
  169. >
  170. 验证
  171. </button>
  172. </view>
  173. <!-- 协议弹窗 -->
  174. <view class="modal-overlay {{showModal ? 'show' : ''}}" bindtap="closeModal">
  175. <view class="modal-container" catchtap="stopPropagation">
  176. <view class="modal-header">
  177. <view class="modal-title">{{modalTitle}}</view>
  178. <button class="modal-close" bindtap="closeModal">
  179. <image class="close-icon" src="/pagesA/images/ch.png" mode="aspectFit"></image>
  180. </button>
  181. </view>
  182. <scroll-view class="modal-content" scroll-y>
  183. <view class="modal-text">
  184. {{modalContent}}
  185. </view>
  186. </scroll-view>
  187. <view class="modal-footer">
  188. <button class="modal-confirm" bindtap="closeModal">
  189. 我已阅读并理解
  190. </button>
  191. </view>
  192. </view>
  193. </view>
  194. <!-- 成功弹窗 -->
  195. <view class="success-modal {{showSuccessModal ? 'show' : ''}}">
  196. <view class="success-overlay" bindtap="closeSuccessModal"></view>
  197. <view class="success-container">
  198. <view class="success-icon">
  199. <image class="success-badge" src="/pagesA/images/duig.png" mode="aspectFit"></image>
  200. <view class="success-ring ring-1"></view>
  201. <view class="success-ring ring-2"></view>
  202. </view>
  203. <view class="success-body">
  204. <view class="success-title">认证成功!</view>
  205. <view class="success-message">
  206. 欢迎加入<text class="brand">与牧同行</text>大家庭
  207. </view>
  208. <view class="success-details">
  209. <view class="detail-item">
  210. <view class="detail-label">
  211. <image class="detail-icon" src="/pagesA/images/name.png" mode="aspectFit"></image>
  212. <text>姓名</text>
  213. </view>
  214. <view class="detail-value">{{name}}</view>
  215. </view>
  216. <view class="detail-item">
  217. <view class="detail-label">
  218. <image class="detail-icon" src="/pagesA/images/sfz.png" mode="aspectFit"></image>
  219. <text>身份证号</text>
  220. </view>
  221. <view class="detail-value">{{maskedIdNumber}}</view>
  222. </view>
  223. </view>
  224. </view>
  225. <view class="success-footer">
  226. <button class="success-button" bindtap="goToHome">
  227. <text>开始使用</text>
  228. </button>
  229. </view>
  230. </view>
  231. </view>
  232. <!-- 错误弹窗(新增) -->
  233. <view class="modal-overlay {{showErrorModal ? 'show' : ''}}" bindtap="closeErrorModal">
  234. <view class="modal-container error-modal" catchtap="stopPropagation">
  235. <view class="modal-header">
  236. <view class="modal-title error-title">{{errorTitle}}</view>
  237. <button class="modal-close" bindtap="closeErrorModal">
  238. <image class="close-icon" src="/pagesA/images/ch.png" mode="aspectFit"></image>
  239. </button>
  240. </view>
  241. <view class="modal-content error-content">
  242. <view class="error-message">
  243. {{errorMessage}}
  244. </view>
  245. </view>
  246. <view class="modal-footer">
  247. <button class="modal-confirm error-confirm" bindtap="closeErrorModal">
  248. 确定
  249. </button>
  250. </view>
  251. </view>
  252. </view>
  253. </view>