carRental.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. <template>
  2. <view class="container">
  3. <view class="store-item">
  4. <CarDemand ref="CarDemand" @updateInfo="updateInfo" />
  5. <view @tap="carDemandHandle" class="store-select">
  6. <view class="select-bg flex-row flex-between">
  7. <view class="flex-row flex-between">
  8. <view class="other-record">{{hideProvinceAndCity( myLocation.address || desc_adress)}}</view>
  9. <view class="b-border">|</view>
  10. <view> {{takeCar}} 取车</view>
  11. <view class="b-border">|</view>
  12. <text v-if="duration_unit==1">日租</text>
  13. <text v-if="duration_unit==2">月租</text>
  14. <text v-if="duration_unit==4">时租</text>
  15. <text v-if="duration_unit==6">周租</text>
  16. <text v-if="duration_unit==7">季租</text>
  17. <!-- <view> 共{{leaseTime+rentalUnit}}</view> -->
  18. </view>
  19. <view><img src="https://qiniu.bms16.com/FjOxX76jH0xi9m5Dnyi8H6YeAuwj" /></view>
  20. </view>
  21. </view>
  22. <!-- <view class="select-tab flex-row">
  23. <view @tap="bindDropDown" :class="isDropDown ? 'selected-item' : 'select-item'">
  24. 取还方式
  25. <img
  26. :src="isDropDown ? 'https://qiniu.bms16.com/FhjkDo4wFE9XNGVeMiokv-Oa0aGL' : 'https://qiniu.bms16.com/Fo_o-6okVZN86tCSfZnFk0nyjvfO'" />
  27. </view>
  28. <view @tap="bindDropMoney" :class="bindDropMoney ? 'selected-item' : 'select-item'">
  29. 车辆押金
  30. <img src="https://qiniu.bms16.com/Fo_o-6okVZN86tCSfZnFk0nyjvfO" />
  31. </view>
  32. </view> -->
  33. <view @tap="isDropDown=false" v-if="isDropDown" class="down-box">
  34. <view class="isShowDropDown">
  35. <view @tap.stop.prevent="bindWaySelect"
  36. :class="hire_return_type == 0 ? 'way-selected' : 'way-select'" data-status="0">
  37. 全部
  38. <img v-if="hire_return_type == 0" src="https://qiniu.bms16.com/FhWimtmWybKlYMB6mgIReVWArbfq" />
  39. </view>
  40. <view @tap.stop.prevent="bindWaySelect"
  41. :class="hire_return_type == 1 ? 'way-selected' : 'way-select'" data-status="1">
  42. 自行去门店取还
  43. <img v-if="hire_return_type == 1" src="https://qiniu.bms16.com/FhWimtmWybKlYMB6mgIReVWArbfq" />
  44. </view>
  45. <view @tap.stop.prevent="bindWaySelect"
  46. :class="hire_return_type == 2 ? 'way-selected' : 'way-select'" data-status="2">
  47. 送车上门
  48. <img v-if="hire_return_type == 2" src="https://qiniu.bms16.com/FhWimtmWybKlYMB6mgIReVWArbfq" />
  49. </view>
  50. </view>
  51. </view>
  52. <view @tap="isDropMoney=false" v-if="isDropMoney" class="down-box">
  53. <view class="isShowDropDown">
  54. <view @tap.stop.prevent="bindMoneySelect" :class="open_freeze == 0 ? 'way-selected' : 'way-select'"
  55. data-status="0">
  56. 全部
  57. <img v-if="open_freeze == 0" src="https://qiniu.bms16.com/FhWimtmWybKlYMB6mgIReVWArbfq" />
  58. </view>
  59. <view @tap.stop.prevent="bindMoneySelect" :class="open_freeze == 1 ? 'way-selected' : 'way-select'"
  60. data-status="1">
  61. 开启免押
  62. <img v-if="open_freeze == 1" src="https://qiniu.bms16.com/FhWimtmWybKlYMB6mgIReVWArbfq" />
  63. </view>
  64. <view @tap.stop.prevent="bindMoneySelect" :class="open_freeze == 2 ? 'way-selected' : 'way-select'"
  65. data-status="2">
  66. 未开启免押
  67. <img v-if="open_freeze == 2" src="https://qiniu.bms16.com/FhWimtmWybKlYMB6mgIReVWArbfq" />
  68. </view>
  69. </view>
  70. </view>
  71. </view>
  72. <view v-if="!isShowStore">
  73. <view v-for="(item,i) in shopModelList" :key="i" class="store-card">
  74. <view @tap="navToStore" :data-adminId="item.admin_id" class="card-top-style flex-row flex-between">
  75. <view>{{item.shop_name}}</view>
  76. <view>{{item.distance}}</view>
  77. </view>
  78. <view @tap="navToStore" :data-adminId="item.admin_id" class="card-center-ren flex-row">
  79. <view><text style="color: #0074FF;font-weight: 600;">{{item.model_list.length}}</text> 款车型</view>
  80. <view><text style="color: #0074FF;font-weight: 600;">{{item.all_num}}</text> 辆可租</view>
  81. <view v-if="hire_return_type == 2">送车上门</view>
  82. <view v-if="open_freeze == 1">芝麻免押</view>
  83. </view>
  84. <view :data-adminId="item.admin_id" v-if="item.model_list.length == 1">
  85. <view v-for="(items,index) in item.model_list" @tap="navToCarOrder" :data-item="items" :key="index" class="card-bottom card-first flex-row">
  86. <view v-if="items.price_setting.length!=0" class="second-view flex-row">
  87. <view><img
  88. :src="items.model_images!=''?items.model_images[0]:'https://qiniu.bms16.com/FhEvnKUckAHPtWaC04mi2s53IEVj'" />
  89. </view>
  90. <view class="bottom-item">
  91. <view>{{items.car_model}}</view>
  92. <view>
  93. 续航{{tools.formatDistance(items.endurance-0)}}|重量{{tools.formatWeight(items.weight-0)}}
  94. </view>
  95. <view class="flex-row flex-between">
  96. <view class="bottom-text">
  97. 总价 <text>¥</text><text>{{items.total_price}}</text>
  98. </view>
  99. <view style="font-size: 24rpx;">数量: {{items.car_num}}</view>
  100. </view>
  101. </view>
  102. </view>
  103. </view>
  104. </view>
  105. <scroll-view v-if="item.model_list.length > 1" scroll-x="true" enable-flex class="scrollview-box"
  106. scroll-with-animation @scroll="onScroll" :scroll-into-view="'into'+into">
  107. <view @tap="navToCarOrder" :data-item="items" v-for="(items,index) in item.model_list" :key="index" class='form-item'
  108. :style="{ marginLeft: index > 0 ? '32rpx' : '0' }">
  109. <view v-if="items.price_setting.length!=0" class="second-view flex-row">
  110. <view><img
  111. :src="items.model_images!=''?items.model_images[0]:'https://qiniu.bms16.com/FhEvnKUckAHPtWaC04mi2s53IEVj'" />
  112. </view>
  113. <view class="bottom-item">
  114. <view>{{items.car_model}}</view>
  115. <view>
  116. 续航{{tools.formatDistance(items.endurance-0)}}|重量{{tools.formatWeight(items.weight-0)}}
  117. </view>
  118. <view class="flex-row flex-between">
  119. <view class="bottom-text">
  120. 总价<text>¥</text><text>{{items.total_price}}</text>
  121. </view>
  122. <view style="font-size: 24rpx;">数量: {{items.car_num}}</view>
  123. </view>
  124. </view>
  125. </view>
  126. </view>
  127. </scroll-view>
  128. </view>
  129. </view>
  130. <view v-else>
  131. <view class="empty">
  132. 暂无门店~
  133. </view>
  134. </view>
  135. </view>
  136. </template>
  137. <script module="tools" lang="wxs" src="@/pages/common/wxs/tools.wxs"></script>
  138. <script module="tools" lang="sjs" src="@/pages/common/wxs/tools.sjs"></script>
  139. <script>
  140. var config = require('../../common/config.js');
  141. var common = require('../../common/common.js');
  142. var http = require('../../common/http.js');
  143. var storage = require('../../common/storage.js');
  144. import CarDemand from '../index/components/CarDemand/UpdatePopup.vue'
  145. export default {
  146. data() {
  147. return {
  148. showCarDemandPopup: false,
  149. isDropDown: false,
  150. isDropMoney: false,
  151. citycode: '', //城市代码
  152. desc_adress: '', // 我的位置
  153. takeCar: '', // 取车时间
  154. returnCar: '', // 还车时间
  155. leaseTime: '', // 租借时长
  156. rentalUnit: '', // 租借时长单位
  157. longitude: '', // 经度
  158. latitude: '', // 纬度
  159. duration_unit: 0, //周期单位
  160. desc_city: '', //选中城市
  161. startDate: '',
  162. currentCity: true, //是否为当前城市
  163. page: 1,
  164. limit: 20,
  165. hire_return_type: 0, // 还车方式
  166. open_freeze: 0, //是否免押
  167. shopModelList: [],
  168. icBatteryIndex: 0,
  169. into: 0,
  170. // all_num: 0,
  171. // distance: '',
  172. isShowStore: false,
  173. model_list: [],
  174. showUpdateInfoPopup:true,
  175. myLocation: {}
  176. };
  177. },
  178. components: { CarDemand },
  179. /**
  180. * 生命周期函数--监听页面加载
  181. */
  182. onLoad: function(options) {
  183. console.log(options,'optionsoptions');
  184. this.setData({
  185. citycode: options.citycode?options.citycode:'',
  186. cityName: options.cityName || '',
  187. // currentCity: options.currentCity?options.currentCity:'',
  188. rentalUnit: options.rentalUnit ? options.rentalUnit : '',
  189. desc_adress: options.desc_adress ? options.desc_adress : '',
  190. takeCar: options.takeCar ? options.takeCar : '',
  191. leaseTime: options.leaseTime ? options.leaseTime : ''
  192. })
  193. this.returnCar = options.returnCar ? options.returnCar : ''
  194. this.duration_unit = options.duration_unit ? options.duration_unit : ''
  195. this.longitude = options.longitude ? options.longitude : ''
  196. this.latitude = options.latitude ? options.latitude : ''
  197. this.desc_city = options.desc_city ? options.desc_city : ''
  198. this.startDate = options.startDate ? options.startDate : ''
  199. options.myLocation && (this.myLocation = JSON.parse( options.myLocation) || {})
  200. this.loadShopModelList()
  201. },
  202. /**
  203. * 生命周期函数--监听页面显示
  204. */
  205. onShow: function() {
  206. },
  207. methods: {
  208. // 参数传入弹窗
  209. carDemandHandle() {
  210. const data = {
  211. myLocation: this.myLocation,
  212. desc_adress: this.desc_adress,
  213. takeCar: this.takeCar,
  214. duration_unit: this.duration_unit,
  215. cityName: this.cityName,
  216. citycode: this.citycode
  217. }
  218. this.$refs.CarDemand.open(data)
  219. },
  220. updateInfo(data) {
  221. console.log(1111222);
  222. this.setData({
  223. myLocation: data.myLocation,
  224. desc_adress: data.desc_adress,
  225. takeCar: data.takeCar,
  226. duration_unit: data.duration_unit,
  227. cityName: data.cityName,
  228. citycode: data.citycode
  229. })
  230. this.loadShopModelList()
  231. },
  232. clickReSelectTime() {
  233. uni.navigateBack({
  234. delta: 1 // delta值为1时表示返回的页面层数
  235. });
  236. },
  237. loadShopModelList() {
  238. const me = this
  239. http.postApi(config.API_DAYHIRE_USER_SHOP_MODEL_LIST, {
  240. page: me.page,
  241. limit: me.limit,
  242. hire_return_type: me.hire_return_type,
  243. open_freeze: me.open_freeze,
  244. longitude: me.longitude,
  245. latitude: me.latitude
  246. }, (resp) => {
  247. if (resp.data.code === 200) {
  248. me.shopModelList = resp.data.data.list
  249. me.loadFilteredList()
  250. } else {
  251. common.simpleToast(resp.data.msg)
  252. }
  253. })
  254. },
  255. //加上距离数量门店数据
  256. recombineShopModelList(shopModelList) {
  257. const me = this
  258. shopModelList = shopModelList.map((item, index) => {
  259. if (item.model_list && Array.isArray(item.model_list)) {
  260. var all_num = 0
  261. var distance = ''
  262. for (var i = 0; item.model_list.length > i; i++) {
  263. var model_item = item.model_list[i]
  264. all_num += item.model_list[i].car_num - 0
  265. distance = common.formatDistance(item.distance)
  266. }
  267. item.all_num = all_num
  268. item.distance = distance
  269. item.model_list.map(items => {
  270. items.model_images = (typeof items.model_images == "string") ? items
  271. .model_images.split(',') : items.model_images
  272. items.total_price = (me.leaseTime * (items.price_setting[0].hire_price - 0)) /
  273. 100
  274. })
  275. }
  276. return item;
  277. });
  278. return shopModelList
  279. },
  280. //判断当前是否有租赁周期类型
  281. loadFilteredList() {
  282. var shopModelList = []
  283. console.log(this.shopModelList,'shopModelList');
  284. for (var i = 0; this.shopModelList.length > i; i++) {
  285. var searchIndex = false
  286. var item = this.shopModelList[i]
  287. if (!(item.model_list && Array.isArray(item.model_list))) return
  288. item.model_list = item.model_list.filter(items => items.car_num !== 0);
  289. var model_list = []
  290. for (var j = 0; item.model_list.length > j; j++) {
  291. var price_setting_list = item.model_list[j].price_setting
  292. price_setting_list = price_setting_list.filter(items => this.duration_unit == items
  293. .hire_duration_unit);
  294. console.log(price_setting_list,'price_setting_list');
  295. if (!common.isObjectEmpty(price_setting_list)) {
  296. searchIndex = true
  297. item.model_list[j].price_setting = price_setting_list
  298. model_list.push(item.model_list[j])
  299. }
  300. }
  301. console.log(model_list,'model_list');
  302. if (searchIndex) {
  303. item.model_list = model_list
  304. shopModelList.push(item)
  305. }
  306. }
  307. shopModelList = this.recombineShopModelList(shopModelList)
  308. this.setData({
  309. shopModelList: shopModelList
  310. })
  311. },
  312. navToPage(e) {
  313. const url = e.currentTarget.dataset.url;
  314. if (!url) {
  315. return;
  316. }
  317. uni.navigateTo({
  318. url: url
  319. });
  320. },
  321. navToStore(e) {
  322. //#ifdef MP-ALIPAY
  323. const adminId = e.currentTarget.dataset.adminId
  324. //#endif
  325. //#ifdef MP-WEIXIN
  326. const adminId = e.currentTarget.dataset.adminid
  327. //#endif
  328. // 门店id+是否免押+我的位置+取车时间+换车时间+租借时长+租借时长单位+经度+纬度+选中城市+开始时间
  329. const skipUrl = '/pages/storeDetails/storeDetails?shop_id=' + adminId + '&open_freeze=' + this
  330. .open_freeze +
  331. '&desc_adress=' + this.desc_adress + '&takeCar=' + this.takeCar + '&returnCar=' + this.returnCar +
  332. '&leaseTime=' + this.leaseTime + '&rentalUnit=' + this.rentalUnit +'&duration_unit=' + this.duration_unit +
  333. '&longitude=' + this.longitude + '&latitude=' + this.latitude + '&desc_city=' + this.desc_city +
  334. '&startDate=' + this.startDate
  335. uni.navigateTo({
  336. url: skipUrl,
  337. success: function(res) {},
  338. fail: function(res) {},
  339. complete: function(res) {},
  340. })
  341. },
  342. bindDropDown() {
  343. this.isDropDown = !this.isDropDown
  344. this.isDropMoney = false
  345. },
  346. bindDropMoney() {
  347. this.isDropMoney = !this.isDropMoney
  348. this.isDropDown = false
  349. },
  350. bindWaySelect(e) {
  351. const hire_return_type = e.target.dataset.status;
  352. this.setData({
  353. hire_return_type: hire_return_type
  354. })
  355. this.loadShopModelList()
  356. this.isDropDown = false
  357. },
  358. bindMoneySelect(e) {
  359. this.open_freeze = e.target.dataset.status;
  360. this.loadShopModelList()
  361. this.isDropMoney = false
  362. },
  363. onScroll(e) {
  364. var scrollX = e.detail.scrollLeft
  365. // if (scrollX % 356 > 178) {
  366. this.setData({
  367. into: Math.round(scrollX / 356)
  368. })
  369. // }
  370. },
  371. navToCarOrder(e){
  372. console.log(111);
  373. const item = e.currentTarget.dataset.item
  374. const url = '/pages/purchaseOrder/purchaseOrder' +
  375. '?modelId=' + item.model_id +
  376. '&takeCar=' + this.takeCar +
  377. '&returnCar=' + this.returnCar +
  378. '&leaseTime=' + this.leaseTime +
  379. '&rentalUnit=' + this.rentalUnit +
  380. '&longitude=' + this.longitude +
  381. '&latitude=' + this.latitude +
  382. '&desc_city=' + this.desc_city +
  383. '&startDate=' + this.startDate +
  384. '&duration_unit=' + this.duration_unit
  385. uni.navigateTo({ url })
  386. },
  387. hideProvinceAndCity(address){
  388. return common.hideProvinceAndCity(address)
  389. }
  390. }
  391. };
  392. </script>
  393. <style scoped>
  394. @import './carRental.css';
  395. </style>