use_bike.js 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228
  1. var app = getApp()
  2. var interval;
  3. var inter1;
  4. var locationTerval;
  5. var huancheTime;
  6. var coundDown;//运动中不可锁车倒计时
  7. var linshiStop;//临时停车倒计时
  8. const util = require('../../utils/utils.js');
  9. var interval;
  10. //蓝牙操作方法
  11. var BluetoothOperate = require('../../service/bluetooth.js');
  12. const { content } = require('../../service/dataTransition.js');
  13. let bluetoothOperate = new BluetoothOperate();
  14. let machineNO = "" //设备编号
  15. let key = "" //蓝牙密钥
  16. let operateType = '' //'open'开锁 'close'上锁 'bell'寻铃 'temporaryClose'临时锁车 'temporaryOpen'临时锁车开车
  17. Page({
  18. data: {
  19. nowBikeStatus: '',//当前车辆的状态
  20. money: { time_money: 0, dispatch_money: 0, total_money: 0 },//骑行费用
  21. steps: 1,//开锁步骤
  22. parkStatus: 0,//骑行中:0,临时停车:1,点击结束用车:2
  23. frame: false,//车辆未开锁弹框
  24. code: '',//车辆编码
  25. bikeMessage: '',//车辆信息
  26. times: '00:00', //当前骑行时间
  27. estimate_money: '--', //预计金额
  28. minute: '', //骑行总时间秒
  29. data: [],
  30. box_no: '',
  31. screenHeight: '',
  32. change: false,
  33. timing: 5,
  34. isShow: false,
  35. minute1: '',
  36. parke: true,
  37. timeout: 15,
  38. retry: '',
  39. bikePosition: false,
  40. battery_power: '--',
  41. huanche_timeout: 0,
  42. img: app.globalData.imgUrl,
  43. title: app.globalData.title,
  44. stopmMinute: 30,//临时停车时间
  45. stopMiao: 0,
  46. chaButton: 0,//0 不显示 1显示
  47. markers: [],
  48. polygons: [],
  49. polygons1: [],
  50. zoom: 18,
  51. temporaryTime: '',//临时锁车时间
  52. background: false,//位置权限弹框
  53. location: false,//位置权限弹框
  54. coundDownTime: 5,//运动中不可锁车倒计时
  55. countTimeShow: false,
  56. dispatch_money: 0,//调度费
  57. area_id: '',//区域id
  58. },
  59. onShow: function () {
  60. let that = this
  61. my.setNavigationBar({
  62. title: app.globalData.title
  63. })
  64. clearInterval(locationTerval);
  65. that.posiLoca()
  66. app.login().then(res => {
  67. that.chushiPosiloc()
  68. if (that.data.code) {
  69. that.getBikeMessage()
  70. }
  71. })
  72. if (that.data.order != undefined) {
  73. that.chushi()
  74. }
  75. },
  76. //初始化位之信息并获取区域
  77. chushiPosiloc: function () {
  78. let that = this
  79. my.showLoading({
  80. content: '正在定位...',
  81. })
  82. my.getLocation({
  83. type: 'gcj02',
  84. success: (res) => {
  85. console.log('经纬度为:+++++++++++2323++++++++++' + res.latitude + '++++++++' + res.longitude)
  86. var latitude = res.latitude
  87. var longitude = res.longitude
  88. my.hideLoading()
  89. that.setData({
  90. longitude: longitude,
  91. latitude: latitude,
  92. })
  93. that.home()
  94. },
  95. fail: function (err) {
  96. console.log(err)
  97. my.hideLoading()
  98. my.getSetting({
  99. success: function (res) {
  100. // console.log(res)
  101. var statu = res.authSetting;
  102. if (statu['scope.userLocation'] == false) {
  103. that.setData({
  104. background: true,
  105. location: true
  106. })
  107. }
  108. }
  109. })
  110. }
  111. })
  112. },
  113. onLoad: function (options) {
  114. console.log(options, '--------------------------')
  115. let that = this
  116. if (app.globalData.scanCode) {
  117. // console.log('扫码加载')
  118. // var code1 = decodeURIComponent(options.query.qrCode)
  119. // var index = code1.lastIndexOf("\=");
  120. // let code = code1.substring(index + 1, code1.length);
  121. that.setData({
  122. code: app.globalData.scanCode
  123. // code: '410100100'
  124. })
  125. } else if (options.order != undefined) {
  126. that.setData({
  127. order: options.order,
  128. })
  129. } else {
  130. that.setData({
  131. code: options.code
  132. })
  133. }
  134. // let that = this
  135. // let token = my.getStorageSync({ 'key': 'token' }).data
  136. // let data = Math.round(new Date().getTime() / 1000).toString();;
  137. // let tokenTime = my.getStorageSync({ 'key': 'token_time' }).data
  138. // let cha = data - tokenTime
  139. // let data1 = 60 * 60 * 24
  140. // if (!token) {
  141. // that.token()
  142. // } else if (cha > data1) {
  143. // my.removeStorageSync({ 'key': 'token' }).data
  144. // that.token()
  145. // } else {
  146. // console.log(options, 'order_no')
  147. // let home = my.getStorageSync({ 'key': 'home' }).data
  148. // // that.posiLoca();
  149. // let area_id = home.id
  150. // that.ban_stop(area_id)
  151. // if (options.order != undefined) {
  152. // that.setData({
  153. // order: options.order,
  154. // })
  155. // that.chushi()
  156. // }
  157. // if (options.code != undefined) {
  158. // that.setData({
  159. // code: options.code
  160. // })
  161. // this.getBikeMessage(options)
  162. // }
  163. // this.setData({
  164. // code: options.code
  165. // })
  166. // }
  167. },
  168. //获取token
  169. // token: function () {
  170. // my.getAuthCode({
  171. // success: function (res) {
  172. // var data = {
  173. // 'code': res.authCode,
  174. // 'appid': app.globalData.appid,
  175. // 'type': 1
  176. // };
  177. // app.request('/auth/weapp-login', data, 'post').then(res => {
  178. // my.setStorageSync({ 'key': 'token', data: res.data.token });
  179. // my.setStorageSync({ 'key': 'session_key', data: res.data.session_key });
  180. // my.setStorageSync({ 'key': 'token_time', data: res.data.exp });
  181. // my.setStorageSync({ 'key': 'user_ID', data: res.data.user.id });
  182. // })
  183. // }
  184. // })
  185. // },
  186. //用户状态
  187. userState: function (area_id) {
  188. var that = this;
  189. var data = {
  190. 'area_id': area_id
  191. }
  192. app.request("/user/status", data, "GET").then(res => {
  193. console.log(res, 'zhuangtai')
  194. if (res.status == 200) {
  195. my.setStorageSync({ 'key': 'userState', data: res.data });
  196. if (res.data.is_ride_order) {
  197. that.setData({
  198. order: res.data.is_ride_order,
  199. })
  200. that.chushi()
  201. }
  202. } else {
  203. if (this.data.bikeInfo.is_link == 0) {
  204. my.alert({
  205. title: '提示',
  206. content: '当前车子已下线请换辆车子骑行吧~',
  207. success: function (res) {
  208. my.reLaunch({
  209. url: '/pages/index/index',
  210. })
  211. }
  212. })
  213. return;
  214. } else if (this.data.bikeMessage.put_status == 0) {
  215. my.alert({
  216. title: '提示',
  217. content: '当前车子还未投放请换辆车子骑行吧~',
  218. success: function (res) {
  219. wx.reLaunch({
  220. url: '/pages/index/index',
  221. })
  222. }
  223. })
  224. return;
  225. } else if (this.data.bikeMessage.is_low_battery_power == 0) {
  226. my.alertal({
  227. title: '提示',
  228. content: '当前车子电量过低请换辆车子骑行吧~',
  229. success: function (res) {
  230. wx.reLaunch({
  231. url: '/pages/index/index',
  232. })
  233. }
  234. })
  235. return;
  236. } else if (this.data.bikeMessage.is_trouble == 1) {
  237. my.alert({
  238. title: '提示',
  239. content: '当前车子出现故障请换辆车子骑行吧~',
  240. success: function (res) {
  241. wx.reLaunch({
  242. url: '/pages/index/index',
  243. })
  244. }
  245. })
  246. return;
  247. } else if (this.data.bikeMessage.is_riding == 1) {
  248. my.alert({
  249. title: '提示',
  250. content: '当前车子正在骑行请换辆车子骑行吧~',
  251. success: function (res) {
  252. wx.reLaunch({
  253. url: '/pages/index/index',
  254. })
  255. }
  256. })
  257. return;
  258. }
  259. }
  260. }).catch(err => {
  261. console.log(err)
  262. })
  263. },
  264. //骑行区禁停区车辆
  265. home: function () {
  266. //请求首页接口和一些设置。
  267. console.log('测试')
  268. var that = this;
  269. if (that.data.longitude != '' && that.data.latitude != '') {
  270. //116.411027
  271. var data = {
  272. 'lat': that.data.latitude,
  273. 'lng': that.data.longitude
  274. }
  275. app.request("/pages/home?include=setting", data, "POST").then(res => {
  276. console.log(res, '骑行区域')
  277. if (res.status == 200) {
  278. var data = res.data;
  279. that.setData({
  280. area_id: res.data.id
  281. })
  282. let area_id = res.data.id
  283. that.userState(area_id)
  284. that.ban_stop(area_id)
  285. console.log(data, '区域')
  286. my.setStorageSync({ 'key': 'home', data: data });
  287. }
  288. console.log(data, 'tdada')
  289. if (data) {
  290. my.setStorageSync({ 'key': 'setting', data: data.setting });
  291. } else {
  292. my.removeStorageSync({ key: 'setting' })
  293. }
  294. }).catch(err => {
  295. console.log(err)
  296. my.alert({
  297. title: '提示',
  298. content: err.data.message,
  299. })
  300. })
  301. }
  302. },
  303. //停车区域
  304. ban_stop: function (area_id) {
  305. var that = this;
  306. let home = my.getStorageSync({ 'key': 'home' }).data
  307. that.setData({
  308. polygons1: that.data.polygons1.concat(home)
  309. })
  310. var data1 = {
  311. 'area_id': area_id
  312. }
  313. app.request('/parking/stop-sites', data1, 'GET').then(res => {
  314. console.log(res)
  315. if (res.status == 200) {
  316. var data = res.data
  317. console.log(data)
  318. that.setData({
  319. markers: that.data.markers.concat(data.centres),
  320. polygons: that.data.polygons1.concat(data.polygons),
  321. })
  322. }
  323. })
  324. },
  325. //初始化信息
  326. chushi: function () {
  327. my.showLoading()
  328. var that = this;
  329. var date = Date.parse(new Date()) / 1000;
  330. app.request('/pages/ride-order?no=' + that.data.order, '', 'GET').then(res => {
  331. console.log(res, ',---------')
  332. if (res.status == 200) {
  333. my.hideLoading()
  334. my.setStorageSync({ 'key': 'bike_status', data: res.data.status })
  335. if (res.data.start_use_bike_time <= 0) {
  336. that.setData({
  337. minute: 0
  338. })
  339. } else {
  340. that.setData({
  341. minute: date - res.data.start_use_bike_time
  342. })
  343. }
  344. that.terval()
  345. my.showToast({
  346. content: '刷新成功',
  347. icon: 'none'
  348. })
  349. that.setData({
  350. data: res.data,
  351. code: res.data.bike_no,
  352. temporaryTime: res.data.pause_bike_time
  353. })
  354. let userStatus = my.getStorageSync({ 'key': 'userState' }).data;
  355. let setting = my.getStorageSync({ 'key': 'setting' }).data;
  356. let bike_status = my.getStorageSync({ 'key': 'bike_status' }).data;
  357. //有正在骑行中的订单的订单
  358. if (userStatus.is_ride_order != false && bike_status == 1) {
  359. //骑行中
  360. console.log('ppppp')
  361. that.setData({
  362. steps: 3
  363. })
  364. } else if (bike_status == 0 && userStatus.is_ride_order != false) {
  365. // 临时停车
  366. that.setData({
  367. parkStatus: 1,
  368. steps: 3
  369. })
  370. that.stopDownTime()
  371. }
  372. app.request('/bike/' + that.data.code, '', 'GET').then(res => {
  373. console.log(res)
  374. 200 == res.status && that.setData({
  375. battery_power: res.data.battery_power,
  376. box_no: res.data.box_no,
  377. bikeMessage: res.data,
  378. })
  379. })
  380. if (res.data.status == 0) {
  381. that.setData({
  382. bolear: 0
  383. })
  384. } else if (res.data.status == 1) {
  385. that.setData({
  386. bolear: 1
  387. })
  388. } else if (res.data.status == 2) {
  389. clearInterval(interval),
  390. // clearInterval(interval1);
  391. clearInterval(locationTerval);
  392. my.reLaunch({
  393. url: '../payment/payment?order=' + res.data.no
  394. })
  395. } else {
  396. my.reLaunch({
  397. url: '../index/index',
  398. })
  399. }
  400. // that.bikeLocation();
  401. }
  402. }).catch(err => {
  403. console.log(err)
  404. })
  405. },
  406. //获取当前位置
  407. posiLoca: function () {
  408. var that = this;
  409. locationTerval = setInterval(function () {
  410. my.getLocation({
  411. type: 'gcj02',
  412. success: (res) => {
  413. console.log('经纬度为:+++++++++++2323++++++++++' + res.latitude + '++++++++' + res.longitude)
  414. var latitude = res.latitude
  415. var longitude = res.longitude
  416. my.hideLoading()
  417. that.setData({
  418. longitude: longitude,
  419. latitude: latitude,
  420. })
  421. },
  422. })
  423. }, 5000)
  424. },
  425. //获取蓝牙秘钥
  426. getSecretKey(box_no) {
  427. //     if (!box_no) box_no = this._bikeMainId
  428. //     let that = this;
  429. //     if(box_no== my.getStorageSync('box_no')) return;
  430. return new Promise(function (res, rej) {
  431. let param = {
  432. box_no: box_no, //我公司是通过设备编号获取的密钥
  433. };
  434. app.request('/blu/get-key', param, 'GET').then(resp => {
  435. key = resp.data.key
  436. res(resp.data.key);
  437. my.setStorageSync({ 'key': 'box_no', data: box_no })
  438. })
  439. });
  440. },
  441. //行车时间计时
  442. terval: function () {
  443. var that = this;
  444. clearInterval(interval)
  445. clearInterval(huancheTime)
  446. var times = ''; //秒数
  447. var minute = 0; //分钟
  448. var minute1 = '0'; //分钟
  449. var hour = 0; //小时
  450. var hour1 = '0'; //小时
  451. var time = that.data.minute //获取当前已骑行的秒数
  452. console.log(time)
  453. var setting = my.getStorageSync({ 'key': 'setting' }).data;
  454. var no_money_time = time;
  455. var close_bike_time = setting.close_bike_time;
  456. if (no_money_time < close_bike_time) {
  457. that.setData({
  458. huanche_timeout: close_bike_time - no_money_time
  459. })
  460. huancheTime = setInterval(() => {
  461. var no_money_time1 = that.data.huanche_timeout - 1
  462. that.setData({
  463. huanche_timeout: no_money_time1
  464. })
  465. if (no_money_time1 == 0) {
  466. that.setData({
  467. huanche_timeout: -1
  468. })
  469. clearInterval(huancheTime)
  470. }
  471. }, 1000);
  472. } else {
  473. that.setData({
  474. huanche_timeout: -1
  475. })
  476. }
  477. if (time > 60) { //秒数大于60 分钟= 秒数/60 秒数= -1*60 40
  478. minute = parseInt(time / 60);
  479. times = time - minute * 60;
  480. //minute代表分钟 times 代表秒数
  481. } else {
  482. minute = parseInt(time / 60);
  483. times = time;
  484. }
  485. interval = setInterval(function () {
  486. //定时器 秒数一秒加1
  487. times++
  488. if (times > 59) { //如果秒数大于59 让分钟加1 秒数归0
  489. minute = minute + 1
  490. times = 0
  491. }
  492. if (times < 10) { //如果秒数小于10 加一个0
  493. times = '0' + times
  494. }
  495. if (minute < 10) { //如果分钟小于10 加一个0
  496. minute1 = '0' + minute
  497. } else {
  498. minute1 = minute
  499. }
  500. if (minute > 59) {
  501. //分钟大于59 让小时+1
  502. hour = parseInt(minute / 60)
  503. minute1 = minute - hour * 60;
  504. if (hour < 10) {
  505. hour1 = '0' + hour;
  506. } else {
  507. hour1 = hour
  508. }
  509. }
  510. if (minute1 < 10 && hour > 0) { //如果分钟小于10 加一个0
  511. minute1 = '0' + minute1
  512. } else {
  513. minute1 = minute1
  514. }
  515. if (hour > 0) {
  516. //如果小时大于0 显示 时分
  517. that.setData({
  518. times: hour1 + ':' + minute1 + ':' + times
  519. })
  520. } else {
  521. //else 显示 分秒
  522. that.setData({
  523. times: minute1 + ':' + times
  524. })
  525. }
  526. // that.setData({ times: minute1 + ':' + times})
  527. //计算钱 分钟除以5*5 判断秒数>30 minute = minute+1
  528. //不满12分钟按12分钟算 并且大于30秒
  529. var per_money = setting.per_money;
  530. var per_minute = setting.per_minute;
  531. // console.log(minute)
  532. // console.log(minute1)
  533. if (setting.starting_price_time > minute) {
  534. that.setData({
  535. estimate_money: setting.starting_price
  536. })
  537. } else {
  538. //起步价+(分钟数-起步时长)/ 一块钱可骑多少分钟 * 钱数
  539. var time = minute - setting.starting_price_time;
  540. let money = parseFloat(parseFloat(time / per_minute * per_money + parseFloat(setting.starting_price)).toFixed(2));
  541. // if (money == NaN) {
  542. // money = parseFloat(parseFloat(time / per_minute * per_money + parseFloat(setting.starting_price)).toFixed(2));
  543. // }
  544. // if (minute > 0) {
  545. that.setData({
  546. estimate_money: money
  547. })
  548. // } else {
  549. // if (times >= 30) {
  550. // that.setData({
  551. // estimate_money: Math.ceil(1 / per_minute * Number(per_money))
  552. // })
  553. // }
  554. // }
  555. }
  556. }, 1000)
  557. },
  558. //获取车辆信息
  559. getBikeMessage: function () {
  560. var that = this;
  561. app.request('/bike/' + that.data.code, '', 'GET').then(res => {
  562. console.log(res, '车辆信息--------------------')
  563. machineNO = res.data.box_no
  564. my.hideLoading()
  565. if (res.status == 200) {
  566. that.setData({
  567. bikeMessage: res.data,
  568. battery_power: res.data.battery_power,
  569. steps: 1
  570. }),
  571. key = res.data.key
  572. // if (res.data.is_link == 0) {
  573. // my.alert({
  574. // title: '提示',
  575. // content: '当前车子已下线请换辆车子骑行吧~',
  576. // success: function (res) {
  577. // my.reLaunch({
  578. // url: '/pages/index/index',
  579. // })
  580. // }
  581. // })
  582. // return;
  583. // } else if (res.data.put_status == 0) {
  584. // my.alert({
  585. // title: '提示',
  586. // content: '当前车子还未投放请换辆车子骑行吧~',
  587. // success: function (res) {
  588. // my.reLaunch({
  589. // url: '/pages/index/index',
  590. // })
  591. // }
  592. // })
  593. // return;
  594. // } else if (res.data.is_low_battery_power == 0) {
  595. // my.alert({
  596. // title: '提示',
  597. // content: '当前车子电量过低请换辆车子骑行吧~',
  598. // success: function (res) {
  599. // my.reLaunch({
  600. // url: '/pages/index/index',
  601. // })
  602. // }
  603. // })
  604. // return;
  605. // } else if (res.data.is_trouble == 1) {
  606. // my.alert({
  607. // title: '提示',
  608. // content: '当前车子出现故障请换辆车子骑行吧~',
  609. // success: function (res) {
  610. // my.reLaunch({
  611. // url: '/pages/index/index',
  612. // })
  613. // }
  614. // })
  615. // return;
  616. // } else if (res.data.is_riding == 1) {
  617. // my.alert({
  618. // title: '提示',
  619. // content: '当前车子正在骑行请换辆车子骑行吧~',
  620. // success: function (res) {
  621. // my.reLaunch({
  622. // url: '/pages/index/index',
  623. // })
  624. // }
  625. // })
  626. // return;
  627. // } else {
  628. // let box_no = res.data.box_no
  629. // that.getSecretKey(box_no)
  630. // }
  631. } else {
  632. setTimeout(function () {
  633. my.reLaunch({
  634. url: '/pages/index/index',
  635. })
  636. }, 2000)
  637. }
  638. })
  639. },
  640. //检测用户是否完成实名认证,是否有待支付订单违章记录等
  641. jiance: function () {
  642. let that = this
  643. var userStatus = my.getStorageSync({ 'key': 'userState' }).data;
  644. var setting = my.getStorageSync({ 'key': 'setting' }).data;
  645. //未绑定手机号
  646. if (userStatus.is_bind_mobile == 0) {
  647. my.navigateTo({
  648. url: '/pages/authorization/authorization',
  649. })
  650. //未实名认证
  651. } else if (userStatus.is_card_certified == 0 && setting.is_card == 1) {
  652. my.navigateTo({
  653. url: '/pages/real_name/real_name',
  654. })
  655. } else if (userStatus.is_deposit == 0 && setting.is_deposit != 0 && userStatus.is_coupon_deposit_free == false) {
  656. my.navigateTo({
  657. url: '/pages/ride_zige/ride_zige',
  658. })
  659. } else if (userStatus.is_ride_order !== false) {
  660. console.log(userStatus, 'yyyyyyyyyyyyyyy')
  661. my.alert({
  662. title: '提示',
  663. content: '您有一个正在骑行中的订单',
  664. success: function (res) {
  665. my.reLaunch({
  666. url: '/pages/index/index',
  667. })
  668. }
  669. })
  670. } else if (userStatus.is_pay_order != false && userStatus.is_pay_order != undefined) {
  671. my.alert({
  672. title: '提示',
  673. content: '您有一个待支付订单,请先支付',
  674. success: function (res) {
  675. my.reLaunch({
  676. url: '/pages/index/index',
  677. })
  678. }
  679. })
  680. }
  681. else {
  682. that.setData({
  683. steps: 2
  684. })
  685. }
  686. },
  687. //倒计时
  688. //临时停车倒计时
  689. stopDownTime() {
  690. let that = this
  691. let endTime = Date.parse(new Date()); //date日期类型
  692. let startTime
  693. if (!that.data.temporaryTime || that.data.temporaryTime == null) {
  694. startTime = endTime
  695. } else {
  696. let data1 = that.data.temporaryTime
  697. let data2 = data1.replace(/-/g, '/')
  698. let data3 = new Date(data2)
  699. startTime = data3.getTime()
  700. }
  701. let totleTime = 1800
  702. clearInterval(linshiStop)
  703. console.log(endTime, 'endTime')
  704. console.log(startTime, 'startTime')
  705. let date3 = endTime - startTime;
  706. console.log(date3, 'date3')
  707. //计算出相差天数
  708. var days = Math.floor(date3 / (24 * 3600 * 1000));
  709. //计算出小时数
  710. var leave1 = date3 % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
  711. var hours = Math.floor(leave1 / (3600 * 1000));
  712. //计算相差分钟数
  713. var leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数
  714. var minutes = Math.floor(leave2 / (60 * 1000));
  715. //计算相差秒数
  716. var leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数
  717. var seconds = Math.round(leave3 / 1000);
  718. console.log(minutes, 'minutes')
  719. let chaTime = totleTime - minutes * 60
  720. console.log(chaTime, 'chaTime')
  721. linshiStop = setInterval(function () {
  722. let test = 30 * 60 * 1000
  723. console.log(test, 'test')
  724. if (date3 > test) {
  725. that.setData({
  726. stopMiao: 0,
  727. stopmMinute: 0
  728. })
  729. clearInterval(linshiStop)
  730. } else if (chaTime <= 0) {
  731. that.setData({
  732. stopMiao: 0,
  733. stopmMinute: 0
  734. })
  735. clearInterval(linshiStop)
  736. } else {
  737. console.log(minutes, 'pppp')
  738. chaTime--
  739. let fen = parseInt(chaTime / 60);
  740. let miao = parseInt(chaTime % 60);
  741. that.setData({
  742. stopMiao: miao,
  743. stopmMinute: fen
  744. })
  745. }
  746. }, 1000)
  747. },
  748. //开锁方法
  749. openBike() {
  750. var that = this;
  751. my.showLoading({
  752. content: '开锁中...',
  753. mask: true
  754. })
  755. var data = {
  756. bike_no: that.data.code,
  757. lat: that.data.latitude,
  758. lng: that.data.longitude,
  759. area_id: my.getStorageSync({ 'key': 'home' }).data.id,
  760. }
  761. app.request('/bike/open-lock', data, 'POST', app.globalData.req).then(res => {
  762. console.log(res)
  763. if (res.status == 200) {
  764. that.setData({
  765. steps: 3,
  766. order: res.data.no
  767. })
  768. that.terval()
  769. //蓝牙开锁
  770. operateType = 'open'
  771. bluetoothOperate.start(operateType, machineNO, key, (flag) => {
  772. });
  773. my.hideLoading()
  774. } else {
  775. // that.setData({
  776. // steps: 3
  777. // })
  778. // that.terval()
  779. }
  780. })
  781. },
  782. //开锁失败重试开锁
  783. retryOpenBike: function () {
  784. var that = this;
  785. console.log('重试开锁')
  786. //蓝牙重试开锁
  787. my.showLoading({
  788. content: '开锁中...',
  789. mask: true
  790. })
  791. let data = {
  792. order_no: that.data.order,
  793. bike_no: that.data.code
  794. }
  795. app.request('/order/retry-open-lock', data, 'GET').then(res => {
  796. console.log(res)
  797. if (res.status == 200) {
  798. my.hideLoading()
  799. if (res.data.status == 1) {
  800. that.setData({
  801. frame: false
  802. })
  803. my.hideLoading()
  804. operateType = 'open'
  805. bluetoothOperate.start(operateType, machineNO, key, (flag) => {
  806. });
  807. my.showToast({
  808. content: '开锁成功',
  809. icon: 'none'
  810. })
  811. }
  812. }
  813. })
  814. },
  815. openBikeClick: function () {
  816. let that = this
  817. if (this.data.bikeMessage.is_link == 0) {
  818. my.alert({
  819. title: '提示',
  820. content: '当前车子已下线请换辆车子骑行吧~',
  821. success: function (res) {
  822. my.reLaunch({
  823. url: '/pages/index/index',
  824. })
  825. }
  826. })
  827. return;
  828. } else if (this.data.bikeMessage.put_status == 0) {
  829. my.alert({
  830. title: '提示',
  831. content: '当前车子还未投放请换辆车子骑行吧~',
  832. success: function (res) {
  833. my.reLaunch({
  834. url: '/pages/index/index',
  835. })
  836. }
  837. })
  838. return;
  839. } else if (this.data.bikeMessage.is_low_battery_power == 0) {
  840. my.alert({
  841. title: '提示',
  842. content: '当前车子电量过低请换辆车子骑行吧~',
  843. success: function (res) {
  844. my.reLaunch({
  845. url: '/pages/index/index',
  846. })
  847. }
  848. })
  849. return;
  850. } else if (this.data.bikeMessage.is_trouble == 1) {
  851. my.alert({
  852. title: '提示',
  853. content: '当前车子出现故障请换辆车子骑行吧~',
  854. success: function (res) {
  855. my.reLaunch({
  856. url: '/pages/index/index',
  857. })
  858. }
  859. })
  860. return;
  861. } else if (this.data.bikeMessage.is_riding == 1) {
  862. my.alert({
  863. title: '提示',
  864. content: '当前车子正在骑行请换辆车子骑行吧~',
  865. success: function (res) {
  866. my.reLaunch({
  867. url: '/pages/index/index',
  868. })
  869. }
  870. })
  871. return;
  872. }
  873. that.jiance()
  874. },
  875. go_setting: util.throttle(function () {
  876. //点击去设置位置权限
  877. this.setData({
  878. background: false,
  879. location: false
  880. })
  881. my.openSetting({
  882. success: function (res) {
  883. }
  884. })
  885. }, 1500),
  886. //点击已开启位置权限
  887. open: util.throttle(function () {
  888. this.setData({
  889. background: false,
  890. location: false
  891. })
  892. }, 1500),
  893. //寻铃
  894. clickBell: util.throttle(function (e) {
  895. //点击响铃
  896. var that = this;
  897. my.showLoading({
  898. content: '找车中...',
  899. mask: true
  900. })
  901. app.request('/order/retry-bell-lock?order_no=' + that.data.order + '&bike_no=' + that.data.code, '', 'GET').then(res => {
  902. console.log(res)
  903. if (res.status == 200) {
  904. //蓝牙寻铃找车
  905. operateType = 'bell'
  906. bluetoothOperate.start(operateType, machineNO, key, (flag) => {
  907. //flag == true 操作成功
  908. //flag == false 操作失败
  909. //end
  910. });
  911. res.data.is_ok == true && my.showToast({
  912. content: '找车成功',
  913. icon: 'none',
  914. duration: 2000
  915. })
  916. res.data.is_ok == false && my.showToast({
  917. content: '找车失败请重试',
  918. icon: 'none',
  919. duration: 2000
  920. })
  921. }
  922. })
  923. }, 1000),
  924. //立即开锁
  925. konwOpenBike: util.throttle(function () {
  926. var that = this;
  927. // that.jiance()
  928. if (that.data.deposit == true) return;
  929. that.openBike()
  930. }, 1000),
  931. //临时锁车
  932. parkBike: function () {
  933. let that = this
  934. my.showLoading({
  935. content: '正在临时锁车',
  936. })
  937. var data = {
  938. bike_no: that.data.code,
  939. order_no: that.data.order,
  940. lat: that.data.latitude,
  941. lng: that.data.longitude
  942. }
  943. //代表要临时停车
  944. app.request('/bike/temporary-close-lock', data, 'POST').then(res => {
  945. console.log(res)
  946. if (res.status == 200) {
  947. my.hideLoading()
  948. //蓝牙临时锁车
  949. operateType = 'temporaryClose'
  950. bluetoothOperate.start(operateType, machineNO, key, (flag) => {
  951. //flag == true 操作成功
  952. //flag == false 操作失败
  953. //end
  954. });
  955. my.showToast({
  956. content: '停车成功',
  957. icon: 'none'
  958. })
  959. that.setData({
  960. parkStatus: 1,
  961. // nowBikeStatus:1
  962. })
  963. my.setStorageSync({ 'key': 'nowBikeStatus', data: 1 })
  964. that.stopDownTime()
  965. // that.getBikeMessage()
  966. } else if (res.status == 450) {
  967. my.showToast({
  968. content: '运动中不能关锁,请稍后重试',
  969. icon: 'none',
  970. duration: 5000,
  971. mask: true
  972. })
  973. my.hideLoading()
  974. }
  975. })
  976. },
  977. //结束临时锁车
  978. openPark: function () {
  979. let that = this
  980. my.showLoading({
  981. content: '解锁中',
  982. })
  983. var data = {
  984. bike_no: that.data.code,
  985. order_no: that.data.order,
  986. lat: that.data.latitude,
  987. lng: that.data.longitude
  988. }
  989. // clearInterval(inter1)
  990. app.request('/bike/temporary-open-lock', data, 'POST').then(res => {
  991. // that.inter1()
  992. if (res.status == 200) {
  993. my.hideLoading()
  994. // 蓝牙临时开车
  995. operateType = 'temporaryOpen'
  996. bluetoothOperate.start(operateType, machineNO, key, (flag) => {
  997. //flag == true 操作成功
  998. //flag == false 操作失败
  999. //end
  1000. });
  1001. my.showToast({
  1002. content: '开车成功',
  1003. icon: 'none'
  1004. })
  1005. clearInterval(linshiStop)
  1006. my.setStorageSync({ 'key': 'stopMiao', data: 0 })
  1007. my.setStorageSync({ 'key': 'stopmMinute', data: 30 })
  1008. that.setData({
  1009. stopMiao: 0,
  1010. stopmMinute: 30,
  1011. parkStatus: 0,
  1012. nowBikeStatus: 0
  1013. })
  1014. my.setStorageSync({ 'key': 'nowBikeStatus', data: 0 })
  1015. }
  1016. })
  1017. },
  1018. endUseBike: function () {
  1019. let that = this
  1020. my.showLoading({
  1021. content: '加载中...'
  1022. })
  1023. var data = {
  1024. bike_no: that.data.code,
  1025. order_no: that.data.order,
  1026. lat: that.data.latitude,
  1027. lng: that.data.longitude
  1028. }
  1029. app.request('/order/expect-order-money', data, 'POST').then(res => {
  1030. console.log(res)
  1031. if (res.status == 200) {
  1032. my.hideLoading()
  1033. let data = res.data.dispatch_money
  1034. res.data.time_money = parseFloat(res.data.time_money)
  1035. let data1 = parseFloat(data)
  1036. console.log(data1, 'ppppppppppppppppppp')
  1037. that.setData({
  1038. dispatch_money: data1,
  1039. money: res.data,
  1040. chaButton: 1,
  1041. parkStatus: 2
  1042. })
  1043. }
  1044. })
  1045. },
  1046. //确定结束用车
  1047. sureEndUseBike: util.throttle(function () {
  1048. my.showLoading({
  1049. content: '结算中...',
  1050. mask: true
  1051. })
  1052. var that = this;
  1053. var data = {
  1054. bike_no: that.data.code,
  1055. order_no: that.data.order,
  1056. lat: that.data.latitude,
  1057. lng: that.data.longitude
  1058. }
  1059. app.request('/bike/check-is-riding-area', data, 'POST').then(res => {
  1060. console.log(res)
  1061. if (res.status == 200) {
  1062. clearInterval(linshiStop);
  1063. my.setStorageSync({ 'key': 'stopMiao', data: 0 })
  1064. my.setStorageSync({ 'key': 'stopmMinute', data: 30 })
  1065. my.hideNavigationBarLoading(), my.hideLoading()
  1066. that.closeLock(data)
  1067. //订单结束关闭蓝牙
  1068. bluetoothOperate.end((flag) => { });
  1069. } else if (res.status == 450) {
  1070. my.showToast({
  1071. content: '运动中不能关锁,请稍后重试',
  1072. icon: 'none',
  1073. duration: 5000,
  1074. mask: true
  1075. })
  1076. my.hideLoading()
  1077. }
  1078. }).catch(err => {
  1079. my.hideLoading()
  1080. console.log(err)
  1081. })
  1082. }, 1000),
  1083. closeLock: function (data) {
  1084. var that = this;
  1085. app.request('/bike/close-lock', data, 'POST').then(res => {
  1086. console.log(res)
  1087. if (res.status == 200) {
  1088. console.log('锁车成功')
  1089. clearInterval(interval);
  1090. clearInterval(linshiStop);
  1091. //蓝牙锁车操作 确定结束用车
  1092. operateType = 'close'
  1093. bluetoothOperate.start(operateType, machineNO, key, (flag) => {
  1094. //flag == true 操作成功
  1095. //flag == false 操作失败
  1096. //end
  1097. });
  1098. my.setStorageSync({ 'key': 'stopMiao', data: 0 })
  1099. my.setStorageSync({ 'key': 'stopmMinute', data: 30 })
  1100. my.hideLoading()
  1101. my.reLaunch({
  1102. url: '../pay/pay?order=' + res.data.no
  1103. })
  1104. } else if (res.status == 450) {
  1105. //运动中不能锁车请5s后重试
  1106. my.showToast({
  1107. content: '运动中不能关锁,请稍后重试',
  1108. icon: 'none',
  1109. duration: 5000,
  1110. mask: true
  1111. })
  1112. my.hideLoading()
  1113. }
  1114. }).catch(err => {
  1115. console.log(err)
  1116. })
  1117. },
  1118. //取消锁车
  1119. cancelEndBike: function () {
  1120. console.log(my.getStorageSync({ 'key': 'nowBikeStatus' }).data)
  1121. let that = this
  1122. that.setData({
  1123. chaButton: 0,
  1124. parkStatus: my.getStorageSync({ 'key': 'nowBikeStatus' }).data
  1125. })
  1126. },
  1127. //计价规则
  1128. chargeRule: function () {
  1129. my.navigateTo({
  1130. url: '/pages/charge_rule/charge_rule',
  1131. })
  1132. },
  1133. //骑行须知
  1134. bikeKnow: function () {
  1135. my.navigateTo({
  1136. url: '/pages/ride_rule/ride_rule',
  1137. })
  1138. },
  1139. //骑行优惠券
  1140. bikeCoupon: function () {
  1141. my.navigateTo({
  1142. url: '/pages/buy-card/buy-card',
  1143. })
  1144. },
  1145. //客服
  1146. keFu: function () {
  1147. my.makePhoneCall({
  1148. number: my.getStorageSync({ 'key': 'home' }).data.customer_service_phone,
  1149. })
  1150. },
  1151. //车辆为未开锁弹框
  1152. //打开
  1153. frameClose: function () {
  1154. let that = this
  1155. that.setData({
  1156. frame: false
  1157. })
  1158. },
  1159. //关闭弹框
  1160. frameShow: function () {
  1161. let that = this
  1162. that.setData({
  1163. frame: true
  1164. })
  1165. },
  1166. //故障上报
  1167. guzhang: function () {
  1168. my.navigateTo({
  1169. url: '/pages/breakdown/breakdown',
  1170. })
  1171. },
  1172. //附近还车点
  1173. findPark: function () {
  1174. my.navigateTo({
  1175. url: '/pages/parking/parking',
  1176. })
  1177. },
  1178. onUnload: function () {
  1179. clearInterval(locationTerval)
  1180. // 停止位置跟踪
  1181. // my.stopLocationUpdate({
  1182. // success: (res) => {
  1183. // console.log("onUnload stopLocationUpdate success", res)
  1184. // },
  1185. // fail: (err) => {
  1186. // console.log("onUnload stopLocationUpdate fail", err)
  1187. // }
  1188. // })
  1189. }
  1190. })