orderStatus.vue 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774
  1. <template>
  2. <view class="container-view">
  3. <view class="time-info">
  4. <!-- order_status 0 待支付(可重新调起支付)1 已预约成功(未取车、激活电池则为取车)2 待激活 (可以激活电池)3 使用中(可续费、还车)
  5. 4 已逾期(可续费)5 还车申请中(待确认)6 还车中,等待门店取车 7 车辆已归还 8 订单已支付,已取消 9 订单未支付已取消
  6. 以及拖车工单状态
  7. workInfo.status 0 待商家确认拖车服务, 1门店拖车中, 2订单已结束, 3已取消拖车服务-->
  8. <view>
  9. <view v-if="orderInfo.order_status == 1">
  10. {{orderInfo.return_type == 1?('请于'+tools.formatTimeSecond(orderInfo.hire_begin_time)+'到门店取车'):('将于'+tools.formatTimeSecond(orderInfo.hire_begin_time)+'送车上门')}}
  11. </view>
  12. <view v-else-if="orderInfo.order_status == 2">请上传车辆图片激活车辆</view>
  13. <view v-else-if="orderInfo.order_status == 3" class="blue-text">使用中...</view>
  14. <view v-else-if="orderInfo.order_status == 4" class="red-text">已逾期</view>
  15. <view v-else-if="orderInfo.order_status == 5">待门店确认</view>
  16. <view v-else-if="orderInfo.order_status == 6">还车中,等待门店取车</view>
  17. <view v-else-if="orderInfo.order_status == 7">已完成</view>
  18. <view v-else-if="orderInfo.order_status == 8||orderInfo.order_status == 9">已取消</view>
  19. <view v-else>
  20. {{('请于'+'3.5-20:00'+'到门店取车')}}
  21. </view>
  22. </view>
  23. <view class="get-car-number-card">
  24. <view>取车码</view>
  25. <view class="get-car-number">487872</view>
  26. <view class="get-car-number-tip">到店后请向门店出示取车码,支付完成用车费用后即可用车</view>
  27. </view>
  28. <view class="time-money">
  29. <view class="flex-row flex-between">
  30. <view class="money-item">
  31. <view :class="orderInfo.order_status == 4?'red-status':''">
  32. {{orderInfo.hire_duration_time.day > 0 ? orderInfo.hire_duration_time.day :'' }}<text
  33. v-if="orderInfo.hire_duration_time.day>0">日</text>{{orderInfo.hire_duration_time.hour > 0 ? orderInfo.hire_duration_time.hour :'' }}<text
  34. v-if="orderInfo.hire_duration_time.hour>0">小时</text>{{orderInfo.hire_duration_time.minute > 0 ? orderInfo.hire_duration_time.minute :'' }}<text
  35. v-if="orderInfo.hire_duration_time.minute>0">分</text>
  36. </view>
  37. <view v-if="(orderInfo.order_status == 2&&orderInfo.hire_type==2) || orderInfo.order_status == 3">租期剩余</view>
  38. <view v-else-if="orderInfo.order_status == 4" class="red-status">逾期时长</view>
  39. <view v-else>租借周期</view>
  40. <!-- <view
  41. v-if="(orderInfo.order_status != 2&&orderInfo.hire_type==1) && orderInfo.order_status != 3 && orderInfo.order_status != 4">
  42. 租借周期</view> -->
  43. </view>
  44. <view class="money-item">
  45. <view :class="orderInfo.order_status == 4?'red-status':''">
  46. {{orderInfo.order_status == 4?tools.toFix(over_fee/100):tools.toFix(orderInfo.hire_money / 100)}}<text>元</text>
  47. </view>
  48. <view v-if="orderInfo.order_status == 4" class="red-status">逾期金额</view>
  49. <view v-else>订单金额</view>
  50. </view>
  51. <view @tap="bindExpanded">
  52. <text>{{isExpanded?'收起':'展开'}}</text>
  53. <img
  54. :src="isExpanded?'https://qiniu.bms16.com/FvRah8ro91B_TUVEmInBq6n69W2f':'https://qiniu.bms16.com/FtbxPP0aXYG8hyJTEJfNTXa_Puuc'" />
  55. </view>
  56. </view>
  57. </view>
  58. </view>
  59. <view class="car-info">
  60. <view class="flex-row flex-between" style="margin-bottom: 40rpx;">
  61. <text>自行去门店取还</text>
  62. <text class="distance-num">100m</text>
  63. </view>
  64. <view class="flex-row store-img-view">
  65. <img src="https://qiniu.bms16.com/FrwDlFZdSMiBgqnqDjB19PiDUmuu" alt="">
  66. <view style="width: 100%;margin-left: 24rpx;">
  67. <view class="store-name">小众租车深圳店</view>
  68. <view class="store-name-address">西丽留仙洞留仙村路97号</view>
  69. <view class="flex-row flex-between align-center">
  70. <view class="flex-row time-style align-center">
  71. <img style="width: 40rpx;height: 40rpx;" src="https://qiniu.bms16.com/Fp-G1pdXxnTV-G3qFbgS453AuqcU" alt="">
  72. <text>10:00-22:00</text>
  73. </view>
  74. <img style="width: 112rpx;height: 64rpx;" src="https://qiniu.bms16.com/Fts38M35doVjK09GfOza5qD-wwkK" alt="">
  75. </view>
  76. </view>
  77. </view>
  78. </view>
  79. <view class="car-info">
  80. <view>车辆信息</view>
  81. <view class="car-top flex-row flex-between">
  82. <view class="top-flex">
  83. <!-- <view>{{modelInfo.car_model}}</view> -->
  84. <view>智能电动摩托车智驾</view>
  85. <view>续航{{modelInfo.endurance}}|重量{{modelInfo.weight}}</view>
  86. </view>
  87. <img src="https://qiniu.bms16.com/FhEvnKUckAHPtWaC04mi2s53IEVj" alt="">
  88. </view>
  89. <view class="exchange-info">
  90. <view class="flex-row flex-between">
  91. <view class="exchange-info-title flex-row align-center">
  92. <img style="width: 40rpx;height: 40rpx;" src="https://qiniu.bms16.com/Fj_ifr41AqH2PijZBdOBa3SCxADg" alt="">
  93. <text style="margin-left: 16rpx;">换电信息</text>
  94. </view>
  95. <view @tap="navToExchange" class="flex-row" style="margin-bottom: 28rpx;">
  96. <view class="exchange-button">共3次</view>
  97. <image src="https://qiniu.bms16.com/FpIN7AVzFU75slFlX-SIdnSEmn1k" style="width: 28rpx;height: 28rpx;" />
  98. </view>
  99. </view>
  100. <view class="exchange-content">本单可享3次免费换电数,超出后需单独支付</view>
  101. <view class="exchange-content">自费换电:S1/次</view>
  102. <!-- <view class="exchange-content">本单您可享受{{orderInfo.gift_exchange_num}}次免费换电,
  103. 当前免费换电剩余{{(orderInfo.gift_exchange_num - orderInfo.used_exchange_num) > 0 ? (orderInfo.gift_exchange_num - orderInfo.used_exchange_num) : '0' }}次,超出后需要单独支付换电费用
  104. </view> -->
  105. </view>
  106. </view>
  107. <view v-if="orderInfo.hire_begin_time!=0&&orderInfo.hire_end_time!=0" class="return-info">
  108. <view class="return-top flex-row flex-between">
  109. <view>取还时间</view>
  110. <view>
  111. 共3天{{orderInfo.hire_return_time.day > 0 ? orderInfo.hire_return_time.day :'' }}<text
  112. v-if="orderInfo.hire_return_time.day>0">日</text>{{orderInfo.hire_return_time.hour > 0 ? orderInfo.hire_return_time.hour :'' }}<text
  113. v-if="orderInfo.hire_return_time.hour>0">小时</text>{{orderInfo.hire_return_time.minute > 0 ? orderInfo.hire_return_time.minute :'' }}<text
  114. v-if="orderInfo.hire_return_time.minute>0">分</text>
  115. </view>
  116. </view>
  117. <view class="return-bottom flex-row">
  118. <view>3.8-20:00</view>
  119. <img src="https://qiniu.bms16.com/FoXmBbj7YGWmjyeuVEY35nzieqnx" />
  120. <view>3.8-20:00</view>
  121. <!-- <view>{{tools.formatTimeDate(orderInfo.hire_begin_time)}}</view>
  122. <img src="https://qiniu.bms16.com/FoXmBbj7YGWmjyeuVEY35nzieqnx" />
  123. <view>{{tools.formatTimeDate(orderInfo.hire_end_time)}}</view> -->
  124. </view>
  125. </view>
  126. <view v-if="orderInfo.order_status==2||orderInfo.order_status==3||orderInfo.order_status==4"
  127. class="overdue-info">
  128. <view>逾期规则</view>
  129. <view class="overdue-one">
  130. <view>1. 逾期后还可用车吗?</view>
  131. <view>如果逾期将触发智能锁车逻辑,可能导致您无法正常用车,请及时续费或联系商家处理。</view>
  132. </view>
  133. <view class="overdue-two">
  134. <view>2. 逾期费计算标准是什么?</view>
  135. <view>小时租逾期费=每小时费用*逾期小时;当日还/日/周/月/季租逾期费=每天费用*逾期天数;如果不满1小时按1小时算,不满1天按1天算,最终收取的逾期费以门店确认的费用为准</view>
  136. </view>
  137. <view class="overdue-thr">
  138. <view>3. 逾期后续租如何收费?</view>
  139. <view>逾期后及时续租不收取逾期费,逾期时长将从续租订单的用车时间中抵扣</view>
  140. </view>
  141. </view>
  142. <!-- 考虑为空的情况 -->
  143. <view v-if="cancelInfo.cancel_setting.length != 0 && cancelInfo.cancel_setting" class="remove-info">
  144. <view>预约取消政策</view>
  145. <view class="remove-title flex-row">
  146. <view>预约取消时间</view>
  147. <view>扣费标准</view>
  148. </view>
  149. <view v-for="(item,index) in cancelInfo.cancel_setting" :key="index" class="remove-text flex-row">
  150. <view>支付{{item.hour}}小时内</view>
  151. <view v-if="item.hour-0 >= 0.1">扣除{{item.percent}}%租金总金额</view>
  152. <view v-else>免费取消</view>
  153. </view>
  154. </view>
  155. <view class="payment-info flex-row flex-between">
  156. <view v-if="orderInfo.order_status == 1" class="flex-row"> <!-- 待取车 -->
  157. <view class="cancel" @tap="clickCancel">取消订单</view>
  158. <view @tap="callPhone" class="deposit-btn w_224">门店/客服</view>
  159. <view v-if="orderInfo.return_type == 1" @tap="navToInput" class="sesame-btn w_288">立即用车</view>
  160. <view v-else class="sesame-btn-s w_288">待商家送车</view>
  161. <!-- <view class="sesame-btn">待商家送车</view> -->
  162. </view>
  163. <view v-else-if="orderInfo.order_status == 2" class="flex-row"> <!-- 待激活 -->
  164. <!-- <view class="cancel">更多操作</view> -->
  165. <view class="cancel" @tap="clickCancel">取消订单</view>
  166. <view @tap="callPhone" class="deposit-btn w_224">门店/客服</view>
  167. <view @tap="navToActive" class="sesame-btn w_288">激活车辆</view>
  168. </view>
  169. <view v-else-if="orderInfo.order_status == 3" class="flex-row"> <!-- 使用中 -->
  170. <!-- <view class="cancel">更多操作</view> -->
  171. <view @tap="bindBattery" class="deposit-btn w_254">用车</view>
  172. <view @tap="bindRenew" class="sesame-btn w_418">我要续租</view>
  173. </view>
  174. <view v-else-if="orderInfo.order_status == 4" class="flex-row"> <!-- 已逾期 -->
  175. <!-- <view class="cancel">更多操作</view> -->
  176. <view @tap="callPhone" class="deposit-btn w_254">门店/客服</view>
  177. <view @tap="bindRenew" class="sesame-btn w_418">我要续租</view>
  178. </view>
  179. <view v-else-if="orderInfo.order_status == 5||orderInfo.order_status == 6" @tap="callPhone" class="pay-btn">
  180. 联系门店</view> <!-- 待门店确认||还车中,等待门店取车 -->
  181. <view v-else-if="orderInfo.order_status == 7" @tap="bindToHome" class="pay-btn">返回首页</view> <!-- 已完成 -->
  182. <!-- <view v-else-if="orderInfo.order_status == 7" class="pay-btn">去评价</view> -->
  183. <view v-else-if="orderInfo.order_status == 8||orderInfo.order_status == 9" class="pay-btn" @tap="callPhone">
  184. 门店/客服</view> <!-- 已取消 -->
  185. </view>
  186. <view v-if="isShowCancel" class="cancel-b">
  187. <view class="cancel-box">
  188. <view class="cancel-title flex-row flex-between">
  189. <view>选择取消原因</view>
  190. <view @tap="isShowCancel = false" style="font-size: 60rpx;">×</view>
  191. </view>
  192. <view @tap="bindCancel" data-status="1" class="cancel-item flex-row flex-between">
  193. <view>行程变更无需用车</view>
  194. <img
  195. :src="reason == 1?'https://qiniu.bms16.com/FhWimtmWybKlYMB6mgIReVWArbfq':'https://qiniu.bms16.com/Fh0JH6_QbiXYmVy7FNYnDkVIGvLC'" />
  196. </view>
  197. <view @tap="bindCancel" data-status="2" class="cancel-item flex-row flex-between">
  198. <view>修改订单信息</view>
  199. <img
  200. :src="reason == 2?'https://qiniu.bms16.com/FhWimtmWybKlYMB6mgIReVWArbfq':'https://qiniu.bms16.com/Fh0JH6_QbiXYmVy7FNYnDkVIGvLC'" />
  201. </view>
  202. <view @tap="bindCancel" data-status="3" class="cancel-item flex-row flex-between">
  203. <view>不想要了</view>
  204. <img
  205. :src="reason == 3?'https://qiniu.bms16.com/FhWimtmWybKlYMB6mgIReVWArbfq':'https://qiniu.bms16.com/Fh0JH6_QbiXYmVy7FNYnDkVIGvLC'" />
  206. </view>
  207. </view>
  208. </view>
  209. <view v-if="isShowPrice" class="show_mark_patment">
  210. <view class="payment-info" style="border-radius: 32rpx 32rpx 0rpx 0rpx;">
  211. <view class="pay_money">
  212. <view class="flex-row flex-between">
  213. <view>价格明细</view>
  214. <view>
  215. <image style="width: 32rpx;height: 32rpx;" @tap="isShowPrice = false"
  216. src="https://qiniu.bms16.com/FtoTEHOJiUf_gjPCJGGHMsAtHI5M" />
  217. </view>
  218. </view>
  219. <view class="flex-row flex-between">
  220. <view>拖车费用</view>
  221. <view>¥{{charge_list.fare}}</view>
  222. </view>
  223. <view class="flex-row flex-between">
  224. <view>优惠金额</view>
  225. <view>-¥0.00</view>
  226. </view>
  227. <view class="charge_money_info">
  228. <view>支付金额</view>
  229. <view>¥{{charge_list.fare}}</view>
  230. </view>
  231. </view>
  232. <view class="pay_line"></view>
  233. <view class="pay_info">
  234. <view class="payment-top flex-row">
  235. <img @tap="isArgee = !isArgee"
  236. :src="isArgee?'https://qiniu.bms16.com/FhWimtmWybKlYMB6mgIReVWArbfq':'https://qiniu.bms16.com/FkmDjxBNZhFGFU5inza2usdtDlX8'" />
  237. 已阅读并同意
  238. <text>《小众电动车租赁用户协议》</text>
  239. </view>
  240. <view class="payment-bottom flex-row flex-between">
  241. <view class="bottom-left flex-row">
  242. <view>¥{{charge_list.fare}}</view>
  243. <view @tap="isShowPrice = false">明细<img
  244. src="https://qiniu.bms16.com/Fvl1d-AWRvwY_ehNrw7bMZOK6LBZ" /></view>
  245. </view>
  246. <view @tap="navToPage" data-url="/pages/orderStatus/orderStatus">立即支付</view>
  247. </view>
  248. </view>
  249. </view>
  250. </view>
  251. </view>
  252. </template>
  253. <script module="tools" lang="wxs" src="@/pages/common/wxs/tools.wxs"></script>
  254. <script module="tools" lang="sjs" src="@/pages/common/wxs/tools.sjs"></script>
  255. <script>
  256. var config = require('../../common/config.js');
  257. var common = require('../../common/common.js');
  258. var http = require('../../common/http.js');
  259. var storage = require('../../common/storage.js');
  260. var user = require('../../common/user.js');
  261. var appWhiteListFilter = require('../../common/appWhiteListFilter.js');
  262. import allPrice from '@/component/allPrice/allPrice';
  263. export default {
  264. components: {
  265. allPrice,
  266. },
  267. data() {
  268. return {
  269. isJumpReturn:false,
  270. isReturnHome:true,
  271. return_imgs: {},
  272. charge_standard: {},
  273. isShowDragMoney: false, // 是否显示拖车费用弹框
  274. work_sn: '',
  275. workInfo: {}, // 拖车工单信息
  276. isShowCancel: true,
  277. order_sn: '',
  278. cancelInfo: {
  279. cancel_setting: [],
  280. },
  281. reason: 0,
  282. orderInfo: {},
  283. modelInfo: {},
  284. shopInfo: {
  285. shop_image: [],
  286. },
  287. serviceList: [],
  288. waitMoney: '',
  289. longitude: '',
  290. latitude: '',
  291. shop_image: [],
  292. isExpanded: false,
  293. isShowPrice: false,
  294. timer: '',
  295. isSelectStatus: 1,
  296. price_list: [], //车辆价格 hire_duration_unit 1 日 4 小时 6 周
  297. insurance_status: 0,
  298. over_fee:0,//逾期金额
  299. plate_number: '',
  300. isScanCondeRentalCar: ''
  301. };
  302. },
  303. /**
  304. * 生命周期函数--监听页面加载
  305. */
  306. onLoad: function(options) {
  307. const myLocation = uni.getStorageSync('user_current_location')
  308. this.isJumpReturn = options.isJumpReturn ? false : true
  309. this.order_sn = options.order_sn || ''
  310. this.work_sn = options.work_sn || ''
  311. this.longitude = options.longitude ? options.longitude : (myLocation ? myLocation.longitude : '')
  312. this.latitude = options.latitude ? options.latitude : (myLocation ? myLocation.latitude : '')
  313. if (appWhiteListFilter.isScanCondeRentalCar()) {
  314. this.setData({
  315. isScanCondeRentalCar: true
  316. })
  317. }
  318. this.bindOrderInfo()
  319. },
  320. /**
  321. * 生命周期函数--监听页面显示
  322. */
  323. onShow: function() {
  324. this.isReturnHome = true
  325. },
  326. onUnload: function () {
  327. if(this.isReturnHome && this.isJumpReturn){
  328. uni.switchTab({
  329. url: '/pages/my/my' // 假设首页的路径是/pages/home/home
  330. });
  331. }
  332. },
  333. computed: {},
  334. methods: {
  335. bindOrderInfo() {
  336. const me = this
  337. if (!me.work_sn && !me.order_sn) return common.simpleToast('车辆订单不存在!')
  338. http.postApi(config.API_DAYHIRE_HIRE_ORDER_INFO, {
  339. work_sn: me.work_sn,
  340. order_sn: me.order_sn,
  341. longitude: me.longitude,
  342. latitude: me.latitude,
  343. }, (resp) => {
  344. if (resp.data.code === 200) {
  345. me.cancelInfo = resp.data.data.cancel_info
  346. me.cancelInfo.cancel_setting = resp.data.data.cancel_info.cancel_cost_setting || []
  347. me.orderInfo = resp.data.data.order_info
  348. me.modelInfo = resp.data.data.model_info
  349. me.modelInfo.model_images = me.modelInfo.model_images.split(',')
  350. me.modelInfo.endurance = common.formatDistance(me.modelInfo.endurance - 0)
  351. me.modelInfo.weight = common.formatWeight(me.modelInfo.weight - 0)
  352. me.shopInfo = resp.data.data.shop_info
  353. me.shopInfo.shop_image = JSON.parse(me.shopInfo.shop_image.split(','))
  354. me.shopInfo.distance = common.formatDistance(me.shopInfo.distance - 0)
  355. me.serviceList = resp.data.data.service_list
  356. me.waitMoney = resp.data.data.wait_money / 100
  357. me.workInfo = resp.data.data.work_info
  358. me.insurance_status = resp.data.data.insurance_status
  359. me.charge_standard = (me.workInfo && me.workInfo.status) ? this.calculateFare(me.workInfo.distance, JSON.parse(me.workInfo.drag_car_price_json)) : ''
  360. me.return_imgs = resp.data.data.return_imgs
  361. if(resp.data.data.order_info.order_status==4){
  362. me.setData({
  363. over_fee : resp.data.data.over_info.over_fee
  364. })
  365. }
  366. // if (this.orderInfo.order_status == 0) {
  367. // this.startCountDown()
  368. // this.updateCountdown()
  369. // }
  370. if (me.orderInfo.order_status == 0) {
  371. let _ctime = resp.data.data.order_info.ctime + 300 - 26
  372. let now = Date.parse(new Date()) / 1000
  373. me.timer = (_ctime - now) <= 330 ? (_ctime - now) : 0
  374. // me.timer=30
  375. }
  376. // 取还时间展示
  377. me.orderInfo.hire_return_time = common.getTimeToDay(Math.ceil(me.orderInfo.hire_end_time - me.orderInfo.hire_begin_time)/60)
  378. // 剩余租期判断
  379. if((me.orderInfo.hire_type==2&&me.orderInfo.order_status==2)||me.orderInfo.order_status==3){
  380. me.orderInfo.hire_duration_time = common.getTimeToDay(Math.ceil(me.orderInfo.hire_end_time-(Math.floor(new Date()) / 1000))/60)
  381. }else{
  382. if(me.orderInfo.order_status==4){
  383. me.orderInfo.hire_duration_time = common.getTimeToDay(Math.ceil(Math.floor(new Date()) / 1000-me.orderInfo.hire_end_time)/60)
  384. }else{
  385. me.orderInfo.hire_duration_time = me.orderInfo.hire_return_time
  386. }
  387. }
  388. } else {
  389. // 默认返回上一个页面再提示报错
  390. uni.navigateBack({
  391. delta: 1
  392. })
  393. common.simpleToast(resp.data.msg)
  394. }
  395. })
  396. },
  397. clickCancel() {
  398. const me = this
  399. uni.showModal({
  400. title: '取消订单',
  401. content: '您是否需要取消该订单',
  402. confirmText: '是',
  403. confirmColor: '#0074FF',
  404. cancelText: '否',
  405. cancelColor: '#191D23',
  406. success: function(res) {
  407. if (res.confirm) {
  408. me.isShowCancel = true
  409. }
  410. }
  411. });
  412. },
  413. bindCancel(e) {
  414. const me = this
  415. me.reason = e.currentTarget.dataset.status;
  416. me.cancel = true
  417. common.loading()
  418. setTimeout(function() {
  419. http.postApi(config.API_DAYHIRE_HIRE_CANCEL_ORDER, {
  420. order_sn: me.order_sn
  421. }, (resp) => {
  422. if (resp.data.code === 200) {
  423. uni.hideLoading()
  424. common.simpleToast('取消成功')
  425. setTimeout(()=> {
  426. me.bindOrderInfo()
  427. }, 500);
  428. } else{
  429. common.simpleToast('订单取消失败')
  430. }
  431. me.reason = 0
  432. me.isShowCancel = false
  433. })
  434. }, 600);
  435. },
  436. bindToNav() {
  437. console.log(111);
  438. const {
  439. address,
  440. latitude,
  441. longitude,
  442. shop_name
  443. } = this.shopInfo
  444. uni.openLocation({
  445. latitude: latitude - 0,
  446. longitude: longitude - 0,
  447. scale: 15,
  448. name: shop_name,
  449. address: address,
  450. success: function(res) {},
  451. })
  452. },
  453. bindToHome() {
  454. uni.reLaunch({
  455. url: '/pages/index/index',
  456. success: function(res) {},
  457. fail: function(res) {},
  458. complete: function(res) {}
  459. });
  460. },
  461. callPhone() {
  462. const me = this
  463. const phone = me.shopInfo.link_phone
  464. uni.showModal({
  465. content: `您是否要拨打电话${phone}?`,
  466. confirmText: '确定',
  467. success: (res) => {
  468. if (res.confirm) {
  469. uni.makePhoneCall({
  470. phoneNumber: phone,
  471. success() {},
  472. fail() {}
  473. })
  474. }
  475. },
  476. fail: (res) => {}
  477. })
  478. },
  479. bindRenew() {
  480. this.isReturnHome = false
  481. let isRenew = true
  482. uni.navigateTo({
  483. url: '/pages/carIntroduce/carIntroduce?plate_number=' + this.orderInfo.license_plate_number +
  484. '&isRenew=' + isRenew +
  485. '&order_sn=' + this.order_sn,
  486. success: function(res) {},
  487. fail: function(res) {},
  488. complete: function(res) {}
  489. });
  490. },
  491. bindBattery() {
  492. this.isReturnHome = false
  493. uni.navigateTo({
  494. url: '/pages/battery/battery?plate_number=' + this.orderInfo.license_plate_number,
  495. success: function(res) {},
  496. fail: function(res) {},
  497. complete: function(res) {}
  498. });
  499. },
  500. bindExpanded() {
  501. this.isExpanded = !this.isExpanded
  502. },
  503. navToInput() {
  504. this.isReturnHome = false
  505. uni.navigateTo({
  506. url: '/pages/inputLicensePlate/inputLicensePlate?order_sn=' + this.orderInfo.order_sn,
  507. success: function(res) {},
  508. fail: function(res) {},
  509. complete: function(res) {}
  510. });
  511. },
  512. // 激活车辆
  513. navToActive() {
  514. this.isReturnHome = false
  515. const me = this
  516. if (this.orderInfo.hire_type == 1) { // 预约
  517. if(me.isScanCondeRentalCar) {
  518. uni.scanCode({
  519. onlyFromCamera: true,
  520. success: function (res) {
  521. me.loadScanCode(res.result)
  522. },
  523. fail: function (res) { },
  524. complete: function (res) { },
  525. })
  526. } else {
  527. uni.navigateTo({
  528. url: '/pages/inputLicensePlate/inputLicensePlate?order_sn=' + this.order_sn +'&order_model_id='+this.orderInfo.model_id,
  529. success: function(res) {},
  530. fail: function(res) {},
  531. complete: function(res) {}
  532. });
  533. }
  534. } else { // 非预约
  535. const isJumpReturn = false
  536. uni.navigateTo({
  537. url: '/pages/activation/activation?order_sn=' + this.order_sn + '&plate_number=' + this
  538. .orderInfo.license_plate_number +'&isJumpReturn=' + isJumpReturn,
  539. success: function(res) {},
  540. fail: function(res) {},
  541. complete: function(res) {}
  542. });
  543. }
  544. },
  545. loadScanCode(battery_sn) {
  546. const pData = {
  547. longitude: this.longitude,
  548. latitude: this.latitude,
  549. battery_sn: battery_sn
  550. }
  551. const me = this
  552. http.postApi(config.API_DAYHIRE_CAR_CAR_INFO, pData, (resp) => {
  553. uni.hideLoading()
  554. if (resp.data.code === 200) {
  555. const timestamp = Date.now(); // 获取当前时间戳(毫秒)
  556. const isOffline = (Math.floor(timestamp / 1000) - resp.data.data.last_comm_time) > 1800
  557. me.plate_number = resp.data.data.license_plate_number
  558. if (resp.data.data.last_comm_time === 0 || isOffline) {
  559. common.simpleToast('此车辆已离线,请选择其他车辆')
  560. } else {
  561. let carInfo = JSON.stringify(resp.data.data)
  562. const car_model = resp.data.data.model_info.car_model
  563. const model_images = resp.data.data.model_info.model_images.split(',')
  564. const return_imgs = resp.data.data.return_imgs
  565. var model_id = resp.data.data.model_info.model_id
  566. if (resp.data.data.has_owner) { //车辆正在被使用
  567. if (resp.data.data.is_mine) { //是本人在使用
  568. wx.showModal({
  569. title: '提示',
  570. content: '已有正在使用的车辆,是否跳转至车辆详情页?',
  571. cancelText: '取消',
  572. confirmText: '确定',
  573. success: function(res) {
  574. this.isReturnHome = false
  575. uni.navigateTo({
  576. url: '/pages/battery/battery?plate_number=' +
  577. this.plate_number
  578. });
  579. },
  580. fail: function(res) {},
  581. complete: function(res) {},
  582. })
  583. } else {
  584. common.simpleToast('此车辆正在被使用')
  585. }
  586. } else {
  587. if (me.order_sn&&me.order_sn != '') {
  588. if (this.orderInfo.model_id != model_id) { // 预租车型与之前预约车型不一致
  589. common.simpleToast('与预约车型不符')
  590. } else {
  591. this.isReturnHome = false
  592. uni.navigateTo({
  593. url: '/pages/activation/activation?plate_number=' +
  594. this.plate_number + '&order_sn=' + this.order_sn +
  595. '&car_model=' + car_model + '&model_image=' +
  596. model_images[0] + '&return_imgs=' + JSON.stringify(
  597. return_imgs),
  598. fail() {}
  599. })
  600. }
  601. } else {
  602. this.isReturnHome = false
  603. uni.navigateTo({
  604. url: '/pages/carIntroduce/carIntroduce?carInfo=' +
  605. encodeURIComponent(carInfo) + '&plate_number=' + this.plate_number,
  606. fail() {}
  607. })
  608. }
  609. }
  610. }
  611. } else {
  612. common.simpleToast(resp.data.msg)
  613. }
  614. })
  615. },
  616. bindToPay() {
  617. const me = this
  618. //#ifdef MP-ALIPAY
  619. const _from = 'ali'
  620. const _pay_type = 2
  621. //#endif
  622. //#ifdef MP-WEIXIN
  623. const _from = 'wx'
  624. const _pay_type = 0
  625. //#endif
  626. http.postApi(config.API_DAYHIRE_HIRE_CONTINUE_PAY, {
  627. order_sn: me.order_sn,
  628. from: _from,
  629. pay_type: _pay_type
  630. }, (resp) => {
  631. common.loading()
  632. if (resp.data.code === 200) {
  633. uni.hideLoading()
  634. //#ifdef MP-ALIPAY
  635. my.tradePay({
  636. tradeNO: resp.data.data.trade_no,
  637. success: function(res) {
  638. if (res.resultCode == 9000) {
  639. common.simpleToast('支付成功');
  640. }
  641. setTimeout(function() {
  642. me.bindOrderInfo()
  643. }, 1000)
  644. },
  645. fail: function(res) {
  646. common.simpleToast('支付失败,请重试')
  647. },
  648. })
  649. //#endif
  650. //#ifdef MP-WEIXIN
  651. var payParams = JSON.parse(resp.data.data.payParams);
  652. user.wxPay(me.order_sn, payParams, function(isSuccess) {
  653. if (isSuccess) {
  654. common.simpleToast('支付成功')
  655. setTimeout(function() {
  656. me.bindOrderInfo()
  657. }, 1000)
  658. } else {
  659. common.simpleToast('支付失败,请重试')
  660. }
  661. });
  662. //#endif
  663. } else {
  664. uni.hideLoading()
  665. common.simpleToast(resp.data.msg)
  666. }
  667. })
  668. },
  669. // 计算拖车说明收费价格
  670. calculateFare(distance, charge_list) {
  671. let fare = 0
  672. if (distance <= charge_list.start_mil) {
  673. fare = charge_list.start_price / 100
  674. } else {
  675. // actual_start_mil:实际距离单位米
  676. // over_start_price:向上取整的公里数*超出首公里的费用
  677. var actual_start_mil = distance - charge_list.start_mil
  678. var over_start_price = (Math.ceil(actual_start_mil / charge_list.step_mil)) * charge_list.step_price
  679. fare = (charge_list.start_price + over_start_price) / 100
  680. }
  681. const fareArray = fare.toFixed(2).split('.'); //将价格拆分为整数部分和小数部分
  682. const price_list = {
  683. start_mil: (charge_list.start_mil / 1000).toFixed(2),
  684. start_price: (charge_list.start_price / 100).toFixed(2),
  685. step_mil: (charge_list.step_mil / 1000).toFixed(2),
  686. step_price: (charge_list.step_price / 100).toFixed(2),
  687. actual_start_mil: actual_start_mil ? (actual_start_mil / 1000).toFixed(2) : 0,
  688. over_start_price: over_start_price ? (over_start_price / 100).toFixed(2) : 0,
  689. fare: fare.toFixed(2), // 保留两位小数
  690. fareArray: fareArray //将价格拆分为整数部分和小数部分
  691. }
  692. return price_list
  693. },
  694. bindChangeStatus(e) {
  695. const {
  696. status,
  697. unit
  698. } = e.currentTarget.dataset
  699. this.setData({
  700. isSelectStatus: unit,
  701. selectIndex: status
  702. })
  703. // this.bindDuration()
  704. },
  705. //计算价格
  706. // bindDuration(){
  707. // const me = this
  708. // var _insurance_price //保险金
  709. // const unit_price=(me.price_list[0].hire_price/100) * me.leaseTime //租金
  710. // // insurance_setting 保险
  711. // if (me.insurance_setting!=null) { // 有保险的时候
  712. // // isSelectDeposit==0为免押 isOpenNoDeposit为是否成功开通免押 total_money为总金额
  713. // // unit_price 租金 insurance_setting.price 保险金 deposit 押金
  714. // if (me.duration_unit == 4) { // 时
  715. // _insurance_price = (me.insurance_setting.price - 0) * 1
  716. // } else if(me.duration_unit == 6) { // 周
  717. // _insurance_price = (me.insurance_setting.price - 0) * 7 * me.leaseTime
  718. // } else { //天
  719. // _insurance_price = (me.insurance_setting.price - 0) * me.leaseTime
  720. // }
  721. // } else { // 无保险
  722. // _insurance_price = 0
  723. // }
  724. // if (me.isOpenNoDeposit) {
  725. // // 金额=(周期数*周期价格)+保险金
  726. // me.amount = ((me.leaseTime * me.price_list[0].hire_price -0) + (_insurance_price - 0)) / 100
  727. // } else {
  728. // // 金额=(周期数*周期价格)+押金+保险金
  729. // me.amount = ((me.leaseTime * me.price_list[0].hire_price -0) + (me.modelInfo.deposit -0) + (_insurance_price - 0)) / 100
  730. // }
  731. // },
  732. loadEnd() {
  733. this.bindOrderInfo()
  734. },
  735. navToExchange(){
  736. console.log('跳转换电记录');
  737. uni.navigateTo({
  738. url: '/pages/exchangeRecord/exchangeRecord'+
  739. '?order_sn=' + this.orderInfo.order_sn
  740. })
  741. }
  742. }
  743. };
  744. </script>
  745. <style>
  746. @import './orderStatus.css';
  747. </style>