use_bike.js 39 KB

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