use_bike.js 35 KB

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