C端小程序
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

876 行
21 KiB

  1. const navigationBarHeight = (getApp().statusBarHeight + 50) + 'px'
  2. const extConfig = wx.getExtConfigSync ? wx.getExtConfigSync() : {}
  3. let app = getApp();
  4. const format = require("../utils/util.js");
  5. let config = require("../config/config.js");
  6. let Http = require("../utils/HttpBasics");
  7. let Util = require("../utils/util");
  8. const imgurl = require("../utils/imgurl");
  9. Page({
  10. data: {
  11. navigationBarHeight,
  12. jianUrl: imgurl.jian.url,
  13. jiaofeiwm: imgurl.jiaofeiwm.url,
  14. parkUrl: imgurl.park.url,
  15. guanliHr: imgurl.guanliHr.url,
  16. qidaiUrl: imgurl.qidai.url,
  17. addUrl: imgurl.add.url,
  18. tingcheHr: imgurl.tingcheHr.url,
  19. cheUrl: imgurl.che.url,
  20. jiaofei: imgurl.jiaofei.url,
  21. wentiHr: imgurl.wentiHr.url,
  22. park: null,
  23. carList: [],
  24. payList: [],
  25. addCar: null,
  26. tcq: 2,
  27. flag: "",
  28. extraData: {},
  29. desc: '',
  30. title: '',
  31. indicatorDots: true,
  32. autoplay: false,
  33. interval: 5000,
  34. duration: 1000,
  35. current: 0,
  36. stopFees: {},
  37. scroll: true,
  38. ifHaveCarModular: "",
  39. canIUse: wx.canIUse("navigator"),
  40. showTicketModal: false,
  41. ticketList: [],
  42. noCoupon:imgurl.noCoupon.url,
  43. loadingUrl: imgurl.loading.url,
  44. allow_load: true,
  45. curPageNum: 1,
  46. curPageSize: 15,
  47. curTotalpageNum: 0,
  48. quantitle: '',
  49. quanid: '',
  50. gouHr: imgurl.gouHr.url,
  51. totalTicketNum: 0,
  52. },
  53. getMoreList(e) {
  54. let totalNum = this.data.ticketList.length;
  55. if (this.data.curPageNum < this.data.curTotalpageNum) {
  56. this.setData({
  57. curPageNum: this.data.curPageNum+1
  58. })
  59. this.getTicketList(0 ,this.data.curPageNum);
  60. }
  61. },
  62. /**
  63. * 选择使用的优惠券
  64. */
  65. choicecoupon: function(e) {
  66. /* wx.navigateBack();
  67. var pages = getCurrentPages();
  68. var prevPage = pages[pages.length - 2] //上一个页面 */
  69. var that = this;
  70. var quantitle = e.currentTarget.dataset.title;
  71. var quanid = e.currentTarget.dataset.id;
  72. this.setData({
  73. quantitle: quantitle,
  74. quanid: quanid,
  75. showTicketModal: false,
  76. });
  77. that.bindCoupon(that.data.quanid);
  78. /* wx.setStorage({
  79. key: 'chosed',
  80. data: 'chosed',
  81. }) */
  82. },
  83. /*
  84. */
  85. getTicketList(key, pageNum) {
  86. var that = this;
  87. if (that.data.allow_load) {
  88. wx.showLoading({
  89. title: "加载中"
  90. });
  91. Http.get({
  92. url: config.api.couponOrderCarList,
  93. data: {
  94. pageNum: pageNum,
  95. pageSize: 15,
  96. couponOrderStatus: key
  97. }
  98. }).then(res => {
  99. that.setData({
  100. curTotalpageNum: res.data.pages,
  101. curPageNum: res.data.pageNum,
  102. totalTicketNum: res.data.total
  103. })
  104. res.data.list.map(file => {
  105. file.expiredTime = format.formatTime(
  106. file.expiredTime,
  107. "yyyy-MM-dd hh:mm:ss"
  108. );
  109. });
  110. setTimeout(function () {
  111. wx.hideLoading();
  112. }, 1200);
  113. if (pageNum >= res.data.pages) {
  114. that.setData({
  115. allow_load: false
  116. });
  117. }
  118. /**
  119. * 先赋值后渲染页面
  120. * concat 不会改变原数组值
  121. * push 会改变原数组值,但不会一条一条插入,而是整个数组插入
  122. */
  123. if (pageNum == 1) {
  124. that.setData({
  125. ticketList: res.data.list,
  126. curPageNum: pageNum
  127. });
  128. } else {
  129. that.setData({
  130. ticketList: that.data.ticketList.concat(res.data.list)
  131. });
  132. }
  133. // that.data.ticketList = that.data.ticketList.concat(res.data.list);
  134. wx.hideLoading();
  135. })
  136. .catch(err => {
  137. setTimeout(function () {
  138. wx.hideLoading();
  139. }, 1200);
  140. wx.showToast({
  141. title: err.errMsg,
  142. icon: 'none',
  143. duration: 2000,
  144. mask: false
  145. });
  146. })
  147. } else {
  148. }
  149. },
  150. //点击跳转到券详情页面
  151. gotouse: function (e) {
  152. wx.navigateTo({
  153. url: `/pages/passCar/couponDetail/couponDetail?quancode=${
  154. e.currentTarget.dataset.quancode
  155. }`,
  156. success: function (res) {
  157. // success
  158. },
  159. fail: function () {
  160. // fail
  161. },
  162. complete: function () {
  163. // complete
  164. }
  165. });
  166. },
  167. /**
  168. * 车牌轮播滑动
  169. */
  170. onSlideChangeEnd: function (e) {
  171. var that = this;
  172. /**
  173. * 获得当前的车牌号码
  174. */
  175. var listCardNum = (that.data.carList)[e.detail.current].carNumber;
  176. that.setData({
  177. listCardNum: listCardNum
  178. });
  179. /**
  180. * 获得停车费用
  181. */
  182. if (that.data.scroll) {
  183. that.getStopFee(listCardNum);
  184. }
  185. },
  186. //停车费用为0
  187. paySuccess: function () {
  188. wx.showModal({
  189. title: '支付成功',
  190. content: '请尽快离场',
  191. showCancel: false
  192. })
  193. },
  194. gotomange: function () {
  195. wx.navigateTo({
  196. url: '/pages/managelicenseplate/managelicenseplate',
  197. })
  198. },
  199. bindfail: function (res) {
  200. console.log(res)
  201. },
  202. gotoCarMini: function (e) {
  203. var that = this
  204. // etcp parkVendor1
  205. // 泊链停车 parkVendor5
  206. if (e.target.dataset.flag == 'parkVendor1'){
  207. wx.navigateToMiniProgram({
  208. appId: that.data.etcpAppId,
  209. extraData: that.data.extraData,
  210. envVersion: that.data.carMiniVersion,
  211. path: that.data.payPath
  212. })
  213. } else if (e.target.dataset.flag == 'parkVendor5'){
  214. wx.navigateToMiniProgram({
  215. appId: that.data.bolinkAppId,
  216. extraData: that.data.extraData,
  217. envVersion: that.data.carMiniVersion,
  218. path: that.data.payPath
  219. })
  220. }
  221. },
  222. showquan: function () {
  223. wx.navigateTo({
  224. url: '/pages/passCar/couponList/couponList',
  225. })
  226. },
  227. gotodetail: function (e) {
  228. wx.showModal({
  229. title: '缴费规则',
  230. content: e.target.dataset.rule,
  231. showCancel: false,
  232. })
  233. },
  234. onShow: function (options) {
  235. if (typeof this.getTabBar === 'function' &&
  236. this.getTabBar()) {
  237. this.getTabBar().setData({
  238. selected: 2
  239. })
  240. }
  241. var that = this;
  242. that.setData({
  243. etcpAppId: extConfig.attr.car.etcp.etcpAppId,
  244. carMiniVersion: extConfig.attr.car.version,
  245. etcpCallbackUrl: extConfig.attr.car.etcp.etcpCallbackUrl,
  246. payPath: extConfig.attr.car.etcp.payPath,
  247. ifHaveCarModular: extConfig.attr.ifHaveCarModular
  248. })
  249. if (app.globalData.token) {
  250. that.getList();
  251. that.init();
  252. } else {
  253. that.init();
  254. }
  255. /**
  256. * 只有用户选择了优惠券
  257. * 才会进行券和车牌的绑定
  258. */
  259. /* if (wx.getStorageSync("chosed") && that.data.quanid) {
  260. that.getStopFee(that.data.listCardNum);
  261. that.bindCoupon(that.data.quanid);
  262. wx.setStorage({
  263. key: 'chosed',
  264. data: '',
  265. })
  266. }; */
  267. if (app.globalData.token) {
  268. // that.initUsrCarList();
  269. that.initUsrCarList("flags");
  270. that.setData({
  271. current: 0
  272. })
  273. }
  274. if (that.data.addCar) {
  275. // 绑车牌
  276. if (app.globalData.carLogin) {
  277. that.bindCar(that.data.addCar);
  278. } else {
  279. that.bindCar(that.data.addCar);
  280. }
  281. that.setData({
  282. addCar: null
  283. });
  284. }
  285. this.getTicketList(0, 1);
  286. },
  287. cancelMove: function() {
  288. console.log(111)
  289. return false;
  290. },
  291. onHide: function () {
  292. this.setData({
  293. allow_load: true,
  294. showTicketModal: false,
  295. curPageNum: 1,
  296. ticketList: []
  297. })
  298. },
  299. onLoad: function (options) {
  300. var that = this;
  301. /**
  302. * 获得分享小程序的
  303. * title
  304. * desc
  305. */
  306. Http.get({
  307. url: config.api.getWeapNote,
  308. data: {
  309. appId: config.weapp.AppId,
  310. }
  311. })
  312. .then(res => {
  313. let weapNote = JSON.parse(res.data.weapNote);
  314. that.setData({
  315. desc: weapNote.carpage.desc,
  316. title: weapNote.carpage.title
  317. })
  318. })
  319. .catch(err => {
  320. console.log(err);
  321. })
  322. // 登录
  323. var scene = decodeURIComponent(options.scene);
  324. that.setData({
  325. scene: scene
  326. });
  327. if (app.globalData.token) { } else {
  328. // app.getLocation();
  329. that.userLogin()
  330. }
  331. },
  332. /**
  333. * 用户登录
  334. */
  335. userLogin: function () {
  336. var that = this;
  337. // 登录
  338. wx.login({
  339. success: ({
  340. code
  341. }) => {
  342. wx.getSystemInfo({
  343. success: function (res) {
  344. that.setData({
  345. systemInfo: JSON.stringify(res)
  346. })
  347. }
  348. })
  349. var usrdata = {
  350. appId: config.weapp.AppId,
  351. code: code,
  352. sceneAddress: app.globalData.sceneAddress,
  353. scene: that.data.scene,
  354. systemInfo: that.data.systemInfo
  355. };
  356. if (app.globalData.locationInfo) {
  357. usrdata = {
  358. appId: config.weapp.AppId,
  359. code: code,
  360. sceneAddress: app.globalData.sceneAddress,
  361. latitude: "" + app.globalData.locationInfo.latitude,
  362. longitude: "" + app.globalData.locationInfo.longitude,
  363. scene: that.data.scene,
  364. systemInfo: that.data.systemInfo
  365. };
  366. }
  367. Http.post({
  368. url: config.api.login,
  369. data: usrdata
  370. })
  371. .then(res => {
  372. app.globalData.token = res.data.token;
  373. Http.setToken(res.data.token);
  374. that.checkUserCarStatus();
  375. that.getList();
  376. that.init();
  377. that.initUsrCarList();
  378. return Http.get({
  379. url: config.api.checkUserStatus,
  380. data: {}
  381. });
  382. })
  383. .then(res => { })
  384. .catch(err => {
  385. if (err.code == 11004) {
  386. // 用户昵称未授权
  387. wx.redirectTo({
  388. url: "/pages/getuserinfo/index"
  389. });
  390. } else {
  391. wx.showModal({
  392. title: '提示',
  393. content: err.errMsg,
  394. showCancel: false
  395. })
  396. }
  397. });
  398. }
  399. });
  400. },
  401. /**
  402. * 检查用户是否有车
  403. */
  404. checkUserCarStatus: function () {
  405. var that = this;
  406. Http.get({
  407. url: config.api.userCarCount,
  408. data: {}
  409. }).then(res => {
  410. if (res.data > 0) {
  411. // 用户名下有车
  412. app.globalData.phone = res.data.phone;
  413. app.globalData.supportCar = true;
  414. // 共同登录
  415. that.userCarLogin();
  416. }
  417. })
  418. .catch(err => { })
  419. },
  420. jumpToAdd: function () {
  421. wx.navigateTo({
  422. url: `/pages/addPark/addPark?flags=managepalte`
  423. });
  424. },
  425. passc: function () {
  426. wx.navigateTo({
  427. url: '/pages/ques/ques',
  428. })
  429. },
  430. /**
  431. * 券绑定车牌
  432. */
  433. bindCoupon: function (quanid) {
  434. var that = this;
  435. /**
  436. * etcp
  437. */
  438. var postCouponData = {
  439. etcpToken: app.globalData.etcpToken,
  440. carNumber: that.data.listCardNum,
  441. couponOrderId: quanid
  442. };
  443. if (app.globalData.parkVendor == 2) {
  444. // 停简单
  445. postCouponData = {
  446. carNumber: that.data.listCardNum
  447. }
  448. }
  449. if (app.globalData.parkVendor == 4){
  450. // 尚安
  451. postCouponData = {
  452. carNumber: that.data.listCardNum,
  453. couponOrderId: quanid
  454. }
  455. }
  456. if (app.globalData.parkVendor == 5) {
  457. // 泊链
  458. postCouponData = {
  459. carNumber: that.data.listCardNum,
  460. orderId: that.data.bolinkOrderId,
  461. couponOrderId: quanid
  462. }
  463. }
  464. Http.post({
  465. url: config.api.getCarCoupon,
  466. data: postCouponData
  467. })
  468. .then(res => {
  469. that.getStopFee(that.data.listCardNum);
  470. that.initUsrCarList();
  471. })
  472. .catch(err => {
  473. if (err.message!=undefined) {
  474. wx.showToast({
  475. title: err.message,
  476. icon: 'none',
  477. duration: 2000,
  478. mask: false
  479. });
  480. }
  481. })
  482. },
  483. /**
  484. * 选择优惠券
  485. */
  486. // gotoquan: function () {
  487. // let that = this;
  488. // if (that.data.quanid) {
  489. // wx.navigateTo({
  490. // url: `/pages/passCar/choicecoupon/choicecoupon?quanid=${that.data.quanid}`,
  491. // })
  492. // } else {
  493. // wx.navigateTo({
  494. // url: '/pages/passCar/choicecoupon/choicecoupon',
  495. // })
  496. // }
  497. // },
  498. closeTicketModal: function () {
  499. this.setData({
  500. showTicketModal: false
  501. })
  502. },
  503. /**
  504. * 停车券 弹框
  505. */
  506. openTicketModal: function () {
  507. this.setData({
  508. showTicketModal: true,
  509. allow_load: true,
  510. ticketList: [],
  511. curPageNum: 1,
  512. })
  513. this.getTicketList(0, 1);
  514. /* if (!this.data.ticketList.length){
  515. this.getTicketList(0, 1);
  516. } */
  517. },
  518. //获取名下停车券列表
  519. getList() {
  520. var that = this;
  521. Http.get({
  522. url: config.api.couponOrderCarList + "?type=5&couponOrderStatus=0",
  523. data: {
  524. pageNum: 1,
  525. pageSize: 15,
  526. couponOrderStatus: 0
  527. }
  528. }).then(res => {
  529. that.setData({
  530. couponList: res.data.list
  531. });
  532. })
  533. .catch(err => {
  534. console.log(err)
  535. })
  536. },
  537. /**
  538. * 共同登录
  539. */
  540. init: function (carNumber) {
  541. var that = this;
  542. app.parkInitCallback = token => {
  543. that.initPark();
  544. that.getParkStatus();
  545. if (!app.globalData.carLogin) {
  546. /**
  547. * 判断是否授权手机号
  548. */
  549. Http.get({
  550. url: config.api.checkPhoneStatus,
  551. data: {}
  552. })
  553. .then(res => {
  554. Http.post({
  555. url: config.api.carInit,
  556. data: {
  557. phone: app.globalData.phone
  558. }
  559. }).then(res => {
  560. app.globalData.carLogin = true;
  561. app.globalData.parkVendor = res.data.vendor;
  562. if (res.data.token) {
  563. app.globalData.etcpToken = res.data.token;
  564. }
  565. /**
  566. * 获得停车费用
  567. */
  568. that.initUsrCarList("flags");
  569. });
  570. })
  571. .catch(err => {
  572. if (err.code == 11005) {
  573. // 用户手机未授权
  574. /**
  575. * 将值传到用户手机号授权的页面
  576. *
  577. */
  578. wx.redirectTo({
  579. url: "/pages/getphoneInfo/index"
  580. });
  581. } else if (err.code == 11006) {
  582. // 用户手机已加密
  583. wx.redirectTo({
  584. url: "/pages/phoneinput/phoneinput"
  585. });
  586. } else {
  587. wx.showToast({
  588. title: err.errMsg,
  589. icon: 'none',
  590. duration: 2000,
  591. mask: false
  592. });
  593. }
  594. })
  595. }
  596. };
  597. if (app.globalData.token && app.globalData.token != null) {
  598. app.parkInitCallback(app.globalData.token);
  599. }
  600. },
  601. bindCar: function (carNum) {
  602. var that = this;
  603. // ETCP
  604. var etcpData = {
  605. etcpToken: app.globalData.etcpToken,
  606. carNumber: carNum
  607. };
  608. var otherData = {
  609. carNumber: carNum
  610. };
  611. var postData = app.globalData.parkVendor == 1 ? etcpData : otherData;
  612. Http.post({
  613. url: config.api.bindCar,
  614. data: postData
  615. })
  616. .then(res => {
  617. that.setData({
  618. addCar: null
  619. });
  620. that.initUsrCarList();
  621. wx.showModal({
  622. title: "提示",
  623. showCancel: false,
  624. content: "绑车牌成功!",
  625. success: function () { }
  626. });
  627. })
  628. .catch(error => {
  629. wx.showModal({
  630. title: "提示",
  631. showCancel: false,
  632. content: error.data.message,
  633. success: function () { }
  634. });
  635. });
  636. },
  637. /**
  638. * 车场信息获取
  639. */
  640. initPark: function () {
  641. var that = this;
  642. Http.get({
  643. url: config.api.getParkInfo,
  644. data: {}
  645. })
  646. .then(res => {
  647. that.setData({
  648. park: res.data
  649. })
  650. if (res.data){
  651. app.globalData.parkVendor = res.data.vendorType;
  652. if (app.globalData.parkVendor == 1) {
  653. console.log("payPath: " + extConfig.attr.car.etcp.payPath)
  654. // etcp
  655. that.setData({
  656. parkVendor: app.globalData.parkVendor,
  657. etcpAppId: extConfig.attr.car.etcp.etcpAppId,
  658. carMiniVersion: extConfig.attr.car.version,
  659. etcpCallbackUrl: extConfig.attr.car.etcp.etcpCallbackUrl,
  660. payPath: extConfig.attr.car.etcp.payPath
  661. })
  662. } else if (app.globalData.parkVendor == 2) {
  663. // TJD
  664. var vendorObj = JSON.parse(res.data.vendorParams)
  665. that.setData({
  666. parkVendor: app.globalData.parkVendor,
  667. tjdAppId: extConfig.attr.car.tjd.tjdAppId,
  668. carMiniVersion: extConfig.attr.car.version,
  669. payPath: extConfig.attr.car.tjd.payPath
  670. })
  671. } else if (app.globalData.parkVendor == 5) {
  672. // 泊链
  673. var vendorObj = JSON.parse(res.data.vendorParams)
  674. console.log("payPath: " + extConfig.attr.car.bolink.payPath)
  675. that.setData({
  676. parkVendor: app.globalData.parkVendor,
  677. bolinkAppId: extConfig.attr.car.bolink.bolinkAppId,
  678. carMiniVersion: extConfig.attr.car.version,
  679. payPath: extConfig.attr.car.bolink.payPath,
  680. bolinkComId: vendorObj.comid,
  681. bolinkUnionId: vendorObj.union_id
  682. })
  683. }
  684. }
  685. })
  686. .catch(err => {
  687. console.log(err);
  688. // wx.showToast({
  689. // title: err.message,
  690. // icon: 'none',
  691. // duration: 2000,
  692. // mask: false
  693. // });
  694. })
  695. },
  696. /**
  697. * 车场状态获取
  698. */
  699. getParkStatus: function () {
  700. var that = this;
  701. Http.get({
  702. url: config.api.getParkStatus,
  703. })
  704. .then(res => {
  705. console.log(res)
  706. })
  707. .catch(err => {
  708. console.log(err)
  709. // wx.showToast({
  710. // title: err.message,
  711. // icon:"none"
  712. // })
  713. })
  714. },
  715. /**
  716. * 绑定车获取
  717. */
  718. initUsrCarList: function (flag) {
  719. var that = this;
  720. Http.get({
  721. url: config.api.getUserCarList,
  722. data: {}
  723. }).then(res => {
  724. that.setData({
  725. carList: res.data
  726. });
  727. /**
  728. * flag ==flags
  729. * 表示从首页onShow进来的
  730. */
  731. if (flag == "flags" && res.data.length > 0) {
  732. var listCardNum = res.data[0].carNumber;
  733. that.setData({
  734. listCardNum: listCardNum
  735. })
  736. /**
  737. * 获得停车费用
  738. */
  739. that.getStopFee(listCardNum);
  740. }
  741. })
  742. .catch(err => {
  743. wx.showToast({
  744. title: err.message,
  745. icon: 'none',
  746. duration: 2000,
  747. mask: false
  748. });
  749. })
  750. },
  751. /**
  752. * 获得停车费用修改
  753. */
  754. getStopFee: function (carNumber) {
  755. let that = this;
  756. let postData =
  757. app.globalData.parkVendor == 1 ? {
  758. etcpToken: app.globalData.etcpToken,
  759. carNumber: carNumber
  760. } : {
  761. carNumber: carNumber
  762. };
  763. Http.post({
  764. url: config.api.getCarStopFee,
  765. data: postData
  766. })
  767. .then(res => {
  768. console.log(res)
  769. if(app.globalData.parkVendor == 1){ // ETCP
  770. var extraDataStr = {
  771. params: {
  772. token: app.globalData.etcpToken,
  773. syncId: res.data.orderId,
  774. payType: 6, // 小程序支付
  775. CarNumber: carNumber,
  776. returnUrl: that.data.etcpCallbackUrl,
  777. source: "FUMAO-001",
  778. actionId: "1" //操作ID,1:小程序支付
  779. }
  780. }
  781. that.setData({
  782. parkVendor: app.globalData.parkVendor,
  783. extraData: extraDataStr,
  784. stopFees: res.data,
  785. timecha: Util.timecha(res.data.exitTime, res.data.entranceTime)
  786. });
  787. } else if (app.globalData.parkVendor == 2) { // TJD // TODO
  788. var extraDataStr = {
  789. prePayType: that.data.prePayType,
  790. channel: res.data.channel,
  791. isShowDetail: true,
  792. orderId: res.data.orderId
  793. }
  794. that.setData({
  795. parkVendor: app.globalData.parkVendor,
  796. extraData: extraDataStr,
  797. stopFees: {
  798. orderId: res.data.orderId,
  799. entranceTime: res.data.start_time,
  800. remainingFee: res.data.money
  801. },
  802. timecha: res.data.duration
  803. });
  804. } else if (app.globalData.parkVendor == 5) { // BoLink
  805. var extraDataStr = {
  806. union_id: that.data.bolinkUnionId,
  807. order_id: res.data.order_id,
  808. park_id: that.data.bolinkComId,
  809. plate_number: res.data.plate_number,
  810. money: res.data.money,
  811. park_name: res.data.park_name
  812. }
  813. that.setData({
  814. parkVendor: app.globalData.parkVendor,
  815. bolinkOrderId: res.data.order_id,
  816. extraData: extraDataStr,
  817. stopFees: {
  818. orderId: res.data.order_id,
  819. entranceTime: res.data.start_time,
  820. remainingFee: res.data.money
  821. },
  822. timecha: res.data.duration
  823. });
  824. }
  825. that.setData({
  826. scroll: true
  827. })
  828. })
  829. .catch(error => {
  830. that.setData({
  831. stopFees: {},
  832. scroll: true
  833. })
  834. });
  835. },
  836. /**
  837. * 下拉刷新
  838. */
  839. onPullDownRefresh: function (e) {
  840. let that = this;
  841. that.initUsrCarList("flags");
  842. that.setData({
  843. current:0
  844. })
  845. wx.stopPullDownRefresh();
  846. }
  847. });