index.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <script lang="ts" setup>
  2. import { reactive, ref } from 'vue'
  3. import { useUserStore } from '@/store'
  4. definePage({
  5. style: {
  6. navigationBarTitleText: '发券人申请',
  7. },
  8. })
  9. const userStore = useUserStore()
  10. const model = reactive({
  11. name: '',
  12. phone: '',
  13. result: '',
  14. description: '',
  15. })
  16. const rules = reactive({
  17. name: {
  18. type: 'string',
  19. required: true,
  20. message: '请填写姓名',
  21. trigger: ['blur', 'change'],
  22. },
  23. phone: {
  24. type: 'string',
  25. required: true,
  26. message: '请填写电话',
  27. pattern: /^1[3-9]\d{9}$/,
  28. trigger: ['blur', 'change'],
  29. },
  30. })
  31. // 使用 ref 创建响应式引用
  32. const uFormRef = ref(null)
  33. function submitForm() {
  34. uFormRef.value.validate().then((valid) => {
  35. if (valid) {
  36. uni.$u.toast('校验通过')
  37. }
  38. else {
  39. uni.$u.toast('校验失败')
  40. }
  41. }).catch(() => {
  42. // 处理验证错误
  43. uni.$u.toast('校验失败')
  44. })
  45. }
  46. </script>
  47. <template>
  48. <view class="form-container">
  49. <view class="form-wrapper">
  50. <u-form
  51. ref="uFormRef"
  52. label-position="left"
  53. :model="model"
  54. :rules="rules"
  55. >
  56. <u-form-item
  57. ref="item1"
  58. label="申请人姓名"
  59. prop="name"
  60. :border-bottom="true"
  61. >
  62. <u-input
  63. v-model="model.name"
  64. border="none"
  65. placeholder="请输入申请人姓名"
  66. />
  67. </u-form-item>
  68. <u-form-item
  69. ref="item2"
  70. label="电话"
  71. prop="phone"
  72. :border-bottom="true"
  73. >
  74. <u-input
  75. v-model="model.phone"
  76. border="none"
  77. placeholder="请输入小程序登录的手机号"
  78. />
  79. </u-form-item>
  80. <u-form-item
  81. ref="item3"
  82. label="申请结果"
  83. :border-bottom="true"
  84. >
  85. <view class="form-item-result u-text-danger">
  86. 已拒绝
  87. </view>
  88. <view class="form-item-result u-text-success">
  89. 已通过
  90. </view>
  91. </u-form-item>
  92. <view class="form-item-des">
  93. <u-form-item
  94. ref="item4"
  95. label="拒绝说明"
  96. :border-bottom="true"
  97. >
  98. <u-textarea
  99. v-model="model.description"
  100. placeholder="此处显示拒绝说明"
  101. border="none"
  102. disabled
  103. />
  104. </u-form-item>
  105. </view>
  106. </u-form>
  107. <view class="form-btn" @click="submitForm">
  108. 提交申请
  109. </view>
  110. </view>
  111. </view>
  112. </template>
  113. <style lang="scss" scoped>
  114. ::v-deep .u-form-item__body__left {
  115. width: 150rpx !important;
  116. font-weight: 400 !important;
  117. font-size: 26rpx !important;
  118. color: #333333 !important;
  119. }
  120. ::v-deep .u-input__content__field-wrapper__field {
  121. text-align: right !important;
  122. }
  123. ::v-deep .u-form-item__body__left__content__label {
  124. color: #333333 !important;
  125. font-size: 26rpx !important;
  126. font-weight: 400 !important;
  127. }
  128. ::v-deep .u-line {
  129. border-color: #eeeeee !important;
  130. }
  131. ::v-deep .u-form-item__body__right__content__slot {
  132. display: flex;
  133. justify-content: flex-end;
  134. }
  135. .form-container {
  136. background-color: #f5f5f5;
  137. min-height: 100vh;
  138. padding: 20rpx;
  139. }
  140. .form-wrapper {
  141. background-color: #fff;
  142. border-radius: 12rpx;
  143. padding: 0 32rpx;
  144. }
  145. .form-item-result {
  146. width: 112rpx;
  147. height: 44rpx;
  148. line-height: 44rpx;
  149. border-radius: 10rpx;
  150. text-align: center;
  151. &.u-text-danger {
  152. color: #ff3333;
  153. background: rgba(#ff7171, 0.2);
  154. }
  155. &.u-text-success {
  156. color: #64a6ff;
  157. background: rgba(#64a6ff, 0.2);
  158. }
  159. }
  160. .form-item-des {
  161. ::v-deep .u-form-item__body {
  162. flex-direction: column !important;
  163. gap: 32rpx !important;
  164. }
  165. }
  166. .form-btn {
  167. width: 600rpx;
  168. height: 80rpx;
  169. line-height: 80rpx;
  170. background: linear-gradient(90deg, #ee6b67 0%, #ff7d78 100%);
  171. border-radius: 10rpx;
  172. position: fixed;
  173. bottom: 52rpx;
  174. left: 50%;
  175. transform: translateX(-50%);
  176. font-weight: 400;
  177. font-size: 30rpx;
  178. color: #ffffff;
  179. text-align: center;
  180. }
  181. </style>