与牧同行-小程序用户端
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.

184 lines
6.5 KiB

  1. <!-- pages/real-name-auth/real-name-auth.wxml -->
  2. <view class="auth-container">
  3. <!-- 顶部装饰 -->
  4. <view class="top-decoration">
  5. <view class="decoration-circle circle-1"></view>
  6. <view class="decoration-circle circle-2"></view>
  7. <view class="decoration-circle circle-3"></view>
  8. </view>
  9. <!-- 头部 -->
  10. <view class="header">
  11. <image class="logo" src="/assets/icons/sheep-logo.svg" mode="aspectFit"></image>
  12. <view class="brand-name">与牧同行</view>
  13. <view class="page-title">实名认证</view>
  14. <view class="page-subtitle">开启您的牧业伙伴之旅</view>
  15. </view>
  16. <!-- 表单卡片 -->
  17. <view class="form-card">
  18. <!-- 表单标题 -->
  19. <view class="card-header">
  20. <view class="card-title">
  21. <image class="title-icon" src="/assets/icons/id-card.svg" mode="aspectFit"></image>
  22. <text>身份信息</text>
  23. </view>
  24. <view class="card-hint">请填写您的真实信息</view>
  25. </view>
  26. <!-- 姓名输入 -->
  27. <view class="input-group">
  28. <view class="input-label">
  29. <image class="label-icon" src="/assets/icons/user.svg" mode="aspectFit"></image>
  30. <text>真实姓名</text>
  31. </view>
  32. <view class="input-wrapper">
  33. <input
  34. class="name-input"
  35. placeholder="请输入您的真实姓名"
  36. placeholder-class="placeholder"
  37. value="{{name}}"
  38. bindinput="onNameInput"
  39. focus="{{nameFocus}}"
  40. bindfocus="onNameFocus"
  41. bindblur="onNameBlur"
  42. />
  43. <view class="input-border"></view>
  44. <view class="input-focus-border {{nameFocus ? 'active' : ''}}"></view>
  45. </view>
  46. <view class="input-hint {{nameError ? 'error' : ''}}">
  47. {{nameError || '请务必使用真实姓名'}}
  48. </view>
  49. </view>
  50. <!-- 手机号输入 -->
  51. <view class="input-group">
  52. <view class="input-label">
  53. <image class="label-icon" src="/assets/icons/phone.svg" mode="aspectFit"></image>
  54. <text>手机号码</text>
  55. </view>
  56. <view class="input-wrapper">
  57. <input
  58. class="phone-input"
  59. placeholder="请输入您的手机号码"
  60. placeholder-class="placeholder"
  61. value="{{phone}}"
  62. bindinput="onPhoneInput"
  63. type="number"
  64. maxlength="11"
  65. focus="{{phoneFocus}}"
  66. bindfocus="onPhoneFocus"
  67. bindblur="onPhoneBlur"
  68. />
  69. <view class="input-border"></view>
  70. <view class="input-focus-border {{phoneFocus ? 'active' : ''}}"></view>
  71. </view>
  72. <view class="input-hint {{phoneError ? 'error' : ''}}">
  73. {{phoneError || '用于接收重要通知'}}
  74. </view>
  75. </view>
  76. <!-- 验证码 -->
  77. <view class="input-group">
  78. <view class="input-label">
  79. <image class="label-icon" src="/assets/icons/sms.svg" mode="aspectFit"></image>
  80. <text>验证码</text>
  81. </view>
  82. <view class="code-input-wrapper">
  83. <view class="code-input-container">
  84. <input
  85. class="code-input"
  86. placeholder="请输入验证码"
  87. placeholder-class="placeholder"
  88. value="{{smsCode}}"
  89. bindinput="onSmsCodeInput"
  90. type="number"
  91. maxlength="6"
  92. focus="{{codeFocus}}"
  93. bindfocus="onCodeFocus"
  94. bindblur="onCodeBlur"
  95. />
  96. <view class="input-border"></view>
  97. <view class="input-focus-border {{codeFocus ? 'active' : ''}}"></view>
  98. </view>
  99. <button
  100. class="send-code-btn {{!canSendCode ? 'disabled' : ''}} {{countdown > 0 ? 'counting' : ''}}"
  101. bindtap="sendSmsCode"
  102. disabled="{{!canSendCode || countdown > 0}}"
  103. hover-class="btn-hover"
  104. >
  105. <view class="btn-content">
  106. <image wx:if="{{countdown === 0}}" class="sms-icon" src="/assets/icons/send.svg" mode="aspectFit"></image>
  107. <!-- <text>{{countdown > 0 ? `${countdown}s后重发` : '发送验证码'}}</text> -->
  108. </view>
  109. </button>
  110. </view>
  111. <view class="input-hint {{smsCodeError ? 'error' : ''}}">
  112. {{smsCodeError || '输入6位数字验证码'}}
  113. </view>
  114. </view>
  115. </view>
  116. <!-- 协议 -->
  117. <view class="agreement-card">
  118. <label class="agreement-item" bindtap="toggleAgreement">
  119. <view class="checkbox {{agreed ? 'checked' : ''}}">
  120. <image wx:if="{{agreed}}" class="check-icon" src="/assets/icons/check.svg" mode="aspectFit"></image>
  121. </view>
  122. <view class="agreement-text">
  123. 我已阅读并同意
  124. <text class="link" bindtap="viewAgreement">《用户服务协议》</text>
  125. <text class="link" bindtap="viewPrivacy">《隐私政策》</text>
  126. </view>
  127. </label>
  128. </view>
  129. <!-- 提交按钮 -->
  130. <view class="submit-section">
  131. <button
  132. class="submit-btn {{canSubmit ? 'active' : 'disabled'}}"
  133. bindtap="submitAuth"
  134. disabled="{{!canSubmit}}"
  135. hover-class="submit-btn-hover"
  136. loading="{{isSubmitting}}"
  137. >
  138. <view class="btn-inner">
  139. <text>{{isSubmitting ? '提交中...' : '完成认证'}}</text>
  140. <image wx:if="{{!isSubmitting}}" class="arrow-icon" src="/assets/icons/arrow-right.svg" mode="aspectFit"></image>
  141. </view>
  142. </button>
  143. <view class="submit-hint">
  144. 认证成功后,您将享受与牧同行的专属服务
  145. </view>
  146. </view>
  147. <!-- 底部装饰 -->
  148. <view class="bottom-decoration">
  149. <image class="sheep-illustration" src="/assets/illustrations/sheep.svg" mode="aspectFit"></image>
  150. <view class="decoration-text">
  151. <text class="highlight">与牧同行</text>,伴您每一次成长
  152. </view>
  153. </view>
  154. <!-- 成功弹窗 -->
  155. <view class="success-modal {{showSuccessModal ? 'show' : ''}}">
  156. <view class="modal-mask" bindtap="closeSuccessModal"></view>
  157. <view class="modal-content">
  158. <view class="modal-icon">
  159. <image class="success-icon" src="/assets/icons/success.svg" mode="aspectFit"></image>
  160. </view>
  161. <view class="modal-title">认证成功!</view>
  162. <view class="modal-message">
  163. 欢迎加入<text class="brand-highlight">与牧同行</text>大家庭
  164. </view>
  165. <view class="modal-subtitle">
  166. 您已成功完成实名认证,开始享受专属服务吧!
  167. </view>
  168. <button class="modal-btn" bindtap="goToHome">
  169. <image class="home-icon" src="/assets/icons/home.svg" mode="aspectFit"></image>
  170. <text>前往首页</text>
  171. </button>
  172. </view>
  173. </view>
  174. </view>