offsiteSign.uvue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <template>
  2. <view class="page-container">
  3. <!-- 头部 -->
  4. <view class="header">
  5. <view class="header-left" @click="goBack">
  6. <u-icon name="arrow-left" size="24" color="#333"/>
  7. </view>
  8. <view class="header-title">
  9. 异地签证
  10. </view>
  11. <view class="header-right"></view>
  12. </view>
  13. <!-- 标签页 -->
  14. <view class="tabs">
  15. <view class="tab-item" :class="{ active: activeTab === 0 }" @click="activeTab = 0">签证申请</view>
  16. <view class="tab-item" :class="{ active: activeTab === 1 }" @click="activeTab = 1">申请记录</view>
  17. </view>
  18. <!-- 签证申请内容 -->
  19. <view class="content" v-if="activeTab === 0">
  20. <!-- 意向城市 -->
  21. <view class="form-item">
  22. <text class="label">意向城市</text>
  23. <view class="value">请选择</view>
  24. <u-icon name="arrow-right" size="16" color="#999"/>
  25. </view>
  26. <!-- 开始日期 -->
  27. <view class="form-item">
  28. <text class="label">开始日期</text>
  29. <view class="value">请选择</view>
  30. <u-icon name="arrow-right" size="16" color="#999"/>
  31. </view>
  32. <!-- 结束日期 -->
  33. <view class="form-item">
  34. <text class="label">结束日期</text>
  35. <view class="value">请选择</view>
  36. <u-icon name="arrow-right" size="16" color="#999"/>
  37. </view>
  38. <!-- 签证理由 -->
  39. <view class="reason-section">
  40. <text class="section-title">签证理由</text>
  41. <textarea class="reason-input" placeholder="请输入签证理由"></textarea>
  42. </view>
  43. <!-- 按钮区域 -->
  44. <view class="button-section">
  45. <button class="submit-btn" @click="submitAudit">提交审核</button>
  46. <button class="return-btn" @click="returnCity">回原城市</button>
  47. </view>
  48. </view>
  49. <!-- 申请记录内容 -->
  50. <view class="content" v-if="activeTab === 1">
  51. <view class="record-empty">暂无申请记录</view>
  52. </view>
  53. </view>
  54. </template>
  55. <script setup lang="ts">
  56. import { ref } from 'vue';
  57. const activeTab = ref(0);
  58. const goBack = () => {
  59. uni.navigateBack();
  60. };
  61. const submitAudit = () => {
  62. uni.showToast({ title: '提交审核成功', icon: 'success' });
  63. };
  64. const returnCity = () => {
  65. uni.showToast({ title: '返回原城市', icon: 'none' });
  66. };
  67. </script>
  68. <style scoped>
  69. .page-container {
  70. background-color: #f5f5f5;
  71. min-height: 100vh;
  72. }
  73. .header {
  74. display: flex;
  75. align-items: center;
  76. justify-content: space-between;
  77. padding: 20rpx;
  78. background-color: #ffffff;
  79. border-bottom: 1rpx solid #f0f0f0;
  80. }
  81. .header-left, .header-right {
  82. width: 60rpx;
  83. }
  84. .header-title {
  85. font-size: 32rpx;
  86. font-weight: bold;
  87. color: #333;
  88. }
  89. .tabs {
  90. display: flex;
  91. background-color: #ffffff;
  92. padding: 0 30rpx;
  93. }
  94. .tab-item {
  95. flex: 1;
  96. text-align: center;
  97. padding: 20rpx;
  98. font-size: 28rpx;
  99. color: #666;
  100. position: relative;
  101. }
  102. .tab-item.active {
  103. color: #ffc107;
  104. font-weight: bold;
  105. }
  106. .tab-item.active::after {
  107. content: '';
  108. position: absolute;
  109. bottom: 0;
  110. left: 50%;
  111. transform: translateX(-50%);
  112. width: 40rpx;
  113. height: 4rpx;
  114. background-color: #ffc107;
  115. border-radius: 2rpx;
  116. }
  117. .content {
  118. padding: 30rpx;
  119. }
  120. .form-item {
  121. display: flex;
  122. align-items: center;
  123. justify-content: space-between;
  124. padding: 20rpx;
  125. background-color: #ffffff;
  126. border-radius: 16rpx;
  127. margin-bottom: 20rpx;
  128. }
  129. .label {
  130. font-size: 28rpx;
  131. color: #333;
  132. }
  133. .value {
  134. font-size: 28rpx;
  135. color: #999;
  136. }
  137. .reason-section {
  138. background-color: #ffffff;
  139. border-radius: 16rpx;
  140. padding: 20rpx;
  141. margin-bottom: 40rpx;
  142. }
  143. .section-title {
  144. font-size: 28rpx;
  145. color: #333;
  146. margin-bottom: 15rpx;
  147. }
  148. .reason-input {
  149. width: 100%;
  150. min-height: 120rpx;
  151. font-size: 26rpx;
  152. color: #333;
  153. line-height: 1.5;
  154. }
  155. .button-section {
  156. display: flex;
  157. flex-direction: column;
  158. gap: 20rpx;
  159. }
  160. .submit-btn {
  161. background-color: #ffc107;
  162. color: #333;
  163. font-size: 30rpx;
  164. font-weight: bold;
  165. border-radius: 50rpx;
  166. padding: 20rpx;
  167. border: none;
  168. }
  169. .return-btn {
  170. background-color: #ffffff;
  171. color: #333;
  172. font-size: 30rpx;
  173. border-radius: 50rpx;
  174. padding: 20rpx;
  175. border: 1rpx solid #d9d9d9;
  176. }
  177. .record-empty {
  178. text-align: center;
  179. color: #999;
  180. font-size: 28rpx;
  181. margin-top: 100rpx;
  182. }
  183. </style>