Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

cardloss-confirm.vue 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <template>
  2. <vehicleDetail ref="vehicleDetailRef" :vehicleId="state.vehicleId" @getVehicleDetail="getVehicleDetail"></vehicleDetail>
  3. <!--
  4. <view class="main-block">
  5. <u-form :model="state.formData" ref="myForm" label-position="left">
  6. <view class="from">
  7. <u-form-item prop="phone">
  8. <view class="from_item" style="background-color: #f7f7f7">
  9. <text><text style="color: red"></text>手机号:</text>
  10. <u-input v-model="state.vehicleInfo.customerTel" :disabled="true" class="input" />
  11. </view>
  12. </u-form-item>
  13. <u-form-item prop="code">
  14. <view class="from_item">
  15. <text><text style="color: red"></text>验证码:</text>
  16. <u-input v-model="state.formData.code" placeholder="请输入验证码" class="input" type="number" />
  17. <view class="hint2">
  18. <view class="green">{{ codeDuration === 0 ? "" : codeDuration }}</view>
  19. <view class="grey" @click="getCode">{{ codeDuration === 0 ? "发送验证码" : "秒后可重发" }}</view>
  20. </view>
  21. </view>
  22. </u-form-item>
  23. </view>
  24. </u-form>
  25. </view> -->
  26. <view class="action" >
  27. <button type="default" class="ui-btn" @click="submit">恢复卡签使用</button>
  28. </view>
  29. <view class="bottom-empty-box"></view>
  30. </template>
  31. <script lang="ts" setup>
  32. import { reactive, ref } from "vue";
  33. import { onLoad, onShow } from "@dcloudio/uni-app";
  34. import { confirm, msg, objectToQueryString } from "@/utils/utils";
  35. import { sendMessage, cardLossUndo } from '@/utils/network/api.js'
  36. import { requestNew } from "@/utils/network/request.js";
  37. import vehicleDetail from '@/components/vehicle-detail/vehicle-detail.vue'
  38. const state = reactive({
  39. vehicleId: '',
  40. orderInfo: {
  41. },
  42. vehicleInfo: {
  43. customerName: '',
  44. customerIdType: '',
  45. customerIdNum: '',
  46. vehicleId: '',
  47. type: '',
  48. cardId: '',
  49. cardType: '',
  50. cardStatus: '',
  51. cardExpireTime: '',
  52. obuId: '',
  53. obuStatus: '',
  54. obuExpireTime: '',
  55. customerTel: ''
  56. },
  57. renewalStatus: '0',
  58. formData: {
  59. code: '',
  60. },
  61. flag: false // 是否可以操作挂失与解挂
  62. });
  63. const codeDuration = ref(0);
  64. const vehicleDetailRef = ref(null)
  65. let interval = null;
  66. onLoad(({vehicleId}) => {
  67. if (vehicleId) {
  68. state.vehicleId = decodeURIComponent(vehicleId)
  69. }
  70. });
  71. onShow(() => {
  72. });
  73. const submit = () => {
  74. let vehicleInfo = state.vehicleInfo
  75. let params = {
  76. routeType: '12',
  77. vehicleId: state.vehicleInfo.vehicleId,
  78. cardId: vehicleInfo.cardId,
  79. obuId: vehicleInfo.obuId,
  80. cardExpireTime: vehicleInfo.cardExpireTime,
  81. obuExpireTime: vehicleInfo.obuExpireTime
  82. }
  83. uni.showModal({
  84. title: '挂起恢复申请',
  85. content: '确定恢复当前挂起设备吗?',
  86. success: (e) => {
  87. if (e.confirm) {
  88. // uni.navigateTo({
  89. // url: `/pages/bluetooth/bluetooth?${objectToQueryString(params)}`
  90. // })
  91. uni.navigateTo({
  92. url: `/subpackage/after-sale/releaseSuspension/cardloss?${objectToQueryString(params)}`
  93. })
  94. }
  95. }
  96. })
  97. }
  98. // 获取车辆详情
  99. const getVehicleDetail = (res) => {
  100. state.vehicleInfo = res
  101. if (state.vehicleInfo.cardStatus === 'YKGQ' || state.vehicleInfo.cardStatus === 'WKGQ') {
  102. state.flag = true
  103. } else if (state.vehicleInfo.obuStatus == 'YQGQ' || state.vehicleInfo.obuStatus == 'WQGQ') {
  104. state.flag = true
  105. } else {
  106. state.flag = false
  107. }
  108. }
  109. const getCode = () => {
  110. if (codeDuration.value !== 0) {
  111. return;
  112. }
  113. const options = {
  114. type: 2,
  115. data: {
  116. mobile: state.vehicleInfo.customerTel,
  117. businessType: 5
  118. },
  119. method: "POST",
  120. showLoading: true,
  121. };
  122. requestNew(sendMessage, options)
  123. .then(() => {
  124. codeInterval();
  125. msg("验证码发送成功!");
  126. })
  127. .catch((err) => {
  128. console.log(err);
  129. });
  130. }
  131. /* 验证码倒计时 */
  132. const codeInterval = () => {
  133. codeDuration.value = 60;
  134. interval = setInterval(() => {
  135. codeDuration.value--;
  136. if (codeDuration.value === 0) {
  137. if (interval) {
  138. clearInterval(interval);
  139. interval = null;
  140. }
  141. }
  142. }, 1000);
  143. };
  144. </script>
  145. <style lang="scss" scoped>
  146. .main-block {
  147. background-color: white;
  148. margin: 20rpx 30rpx 0 30rpx;
  149. border-radius: 12px;
  150. border: 1px solid #FFFFFF;
  151. padding: 20rpx;
  152. overflow: hidden;
  153. .title {
  154. font-weight: bold;
  155. font-size: 30rpx;
  156. color: #01243A;
  157. margin-bottom: 12rpx;
  158. }
  159. }
  160. .renwal-type{
  161. justify-content: space-around;
  162. }
  163. .action {
  164. position: absolute;
  165. left: 0;
  166. height: 270rpx;
  167. background-color: #fff;
  168. border-radius: 30rpx 30rpx 0 0;
  169. width: 100vw;
  170. display: flex;
  171. align-items: center;
  172. justify-content: space-evenly;
  173. flex-direction: column;
  174. margin-top: 20rpx;
  175. }
  176. .from {
  177. ::v-deep .u-form-item {
  178. padding: 0;
  179. line-height: normal;
  180. .u-form-item__message {
  181. margin-bottom: 12rpx;
  182. }
  183. }
  184. .from_item {
  185. display: flex;
  186. flex-wrap: nowrap;
  187. justify-content: space-between;
  188. align-items: center;
  189. height: 80rpx;
  190. border-bottom: 1rpx solid #dcdcdc;
  191. padding: 0 24rpx;
  192. .btn {
  193. font-size: 24rpx;
  194. font-family: Microsoft YaHei;
  195. font-weight: 400;
  196. color: #ffffff;
  197. background: #00b38b;
  198. border-radius: 10rpx;
  199. padding: 10rpx 15rpx;
  200. }
  201. ::v-deep .input {
  202. text-align: left;
  203. flex: 1;
  204. background: transparent;
  205. input {
  206. text-align: left;
  207. }
  208. }
  209. .hint2{
  210. width: 180rpx;
  211. display: flex;
  212. align-items: center;
  213. }
  214. }
  215. }
  216. </style>