MaterialFlowInfo.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. // pages/MaterialFlowInfo/MaterialFlowInfo.js
  2. var http = require('../../utils/http.js');
  3. var util = require('../../utils/util.js');
  4. Page({
  5. /**
  6. * 页面的初始数据
  7. */
  8. data: {
  9. steps: [], //订单物流
  10. packageInfo: [],
  11. delivery: {},
  12. latitude: '', //初始纬度
  13. longitude: '', //初始经度
  14. scale: 14,
  15. markers: [],
  16. polyline: [],
  17. // 限制拖动的最大和最小范围(这里根据需求设置上下拖动300rpx范围)
  18. maxTop: 760, // 初始位置760rpx + 300rpx
  19. minTop: 560, // 初始位置760rpx - 300rpx
  20. flowInfoBoxTop: 560,
  21. option: ''
  22. },
  23. /**
  24. * 生命周期函数--监听页面加载
  25. */
  26. onLoad(options) {
  27. this.setData({
  28. option: options,
  29. latitude:options.lat,
  30. longitude:options.long
  31. })
  32. this.getDeliveryInfo()
  33. },
  34. /**
  35. * 生命周期函数--监听页面初次渲染完成
  36. */
  37. onReady() {
  38. },
  39. /**
  40. * 生命周期函数--监听页面显示
  41. */
  42. onShow() {
  43. },
  44. /**
  45. * 刷新
  46. */
  47. updateInfo: function () {
  48. this.getDeliveryInfo()
  49. },
  50. /**
  51. * 配送信息
  52. * @param {*} e
  53. */
  54. getDeliveryInfo: function () {
  55. wx.showLoading();
  56. let url = this.data.option.refundSn ? `/p/myDelivery/refund/${this.data.option.refundSn}` : `/p/myDelivery/orderInfo/${this.data.option.orderNumber}`
  57. var params = {
  58. url: url,
  59. method: "GET",
  60. callBack: res => {
  61. wx.hideLoading();
  62. let dataInfo = []
  63. if (res.info) {
  64. this.setData({
  65. delivery: res
  66. })
  67. res.info.forEach(e => {
  68. e.ctime = util.timestampToDate(e.ctime, 'Y-M-D h:m:s')
  69. // status:10待接单,20已接单,30已到店,40配送中,50已完成,60已取消,70配送失败
  70. let statusText;
  71. switch (e.status) {
  72. case 10:
  73. statusText = '待接单'
  74. break
  75. case 20:
  76. statusText = '已接单'
  77. break
  78. case 30:
  79. statusText = '已到店'
  80. break
  81. case 40:
  82. statusText = '配送中'
  83. break
  84. case 50:
  85. statusText = '已完成'
  86. break
  87. case 60:
  88. statusText = '已取消'
  89. break
  90. case 70:
  91. statusText = '配送失败'
  92. break
  93. }
  94. let riderName = e.riderName == '' ? '' : ';配送员:' + e.riderName + ','
  95. let riderPhone = e.riderPhone == '' ? '' : '联系方式:' + e.riderPhone
  96. dataInfo.push({
  97. text: statusText + ';' + e.ctime,
  98. desc: e.statusDesc + riderName + riderPhone,
  99. inactiveIcon: 'smile'
  100. })
  101. })
  102. } else {
  103. res.forEach(item => {
  104. if (item.deliveryDto) {
  105. let trackPoints = [];
  106. let content = []
  107. item.deliveryDto.info.forEach(e => {
  108. trackPoints.push({
  109. latitude: e.riderLatitude,
  110. longitude: e.riderLongitude
  111. })
  112. content.push({
  113. text: e.statusDesc
  114. })
  115. /*路线绘制 */
  116. let polylineData = {
  117. points: trackPoints,
  118. color: '#449CF7',
  119. width: 2
  120. };
  121. /*距离计算start*/
  122. let point1 = {
  123. latitude:this.data.option.lat,
  124. longitude:this.data.option.long
  125. };
  126. let point2 = {
  127. latitude: trackPoints[0].latitude,
  128. longitude: trackPoints[0].longitude
  129. };
  130. let distance = util.getDistance(point1, point2);
  131. /*距离计算end*/
  132. /*起终点配置start*/
  133. let startMarker = {
  134. latitude: trackPoints[0].latitude,
  135. longitude: trackPoints[0].longitude,
  136. iconPath: '/images/icon/origin.png', //示例图标路径
  137. width: 20,
  138. height: 20,
  139. callout: {
  140. content: content[0].text + ',' + '距离' + distance,
  141. display: 'ALWAYS',
  142. padding: 5,
  143. borderRadius: 6,
  144. color: '#04358D'
  145. }
  146. };
  147. let endMarker = {
  148. latitude:this.data.option.lat,
  149. longitude:this.data.option.long,
  150. iconPath:wx.getStorageSync('loginResult').pic,
  151. width: 20,
  152. height: 20,
  153. callout: {
  154. content:wx.getStorageSync('loginResult').nickName,
  155. display: 'ALWAYS',
  156. padding: 5,
  157. borderRadius: 6,
  158. color: '#04358D'
  159. }
  160. };
  161. /*起终点配置end*/
  162. this.setData({
  163. polyline: [polylineData],
  164. markers: [startMarker, endMarker]
  165. })
  166. e.ctime = util.timestampToDate(e.ctime, 'Y-M-D h:m:s')
  167. // status:10待接单,20已接单,30已到店,40配送中,50已完成,60已取消,70配送失败
  168. let statusText;
  169. let contentText;
  170. switch (e.status) {
  171. case 10:
  172. statusText = '待接单'
  173. contentText = ''
  174. break
  175. case 20:
  176. statusText = '已接单'
  177. contentText = ''
  178. break
  179. case 30:
  180. statusText = '已到目的地'
  181. contentText = '配送员已就位,待出货'
  182. break
  183. case 40:
  184. statusText = '配送中'
  185. contentText = '配送员已取货,正赶往目的地'
  186. break
  187. case 50:
  188. statusText = '已完成'
  189. contentText = '客户已收到商品'
  190. break
  191. case 60:
  192. statusText = '已取消'
  193. contentText = ''
  194. break
  195. case 70:
  196. statusText = '配送失败'
  197. contentText = ''
  198. break
  199. }
  200. /*物流信息格式处理*/
  201. let riderName = e.riderName == '' ? '' : ' ' + contentText + ';配送员:' + e.riderName + ','
  202. let riderPhone = e.riderPhone == '' ? '' : '联系方式:' + e.riderPhone
  203. dataInfo.push({
  204. text: statusText + ';' + e.ctime,
  205. desc: e.statusDesc + riderName + riderPhone,
  206. inactiveIcon: 'smile'
  207. })
  208. })
  209. }
  210. })
  211. this.setData({
  212. packageInfo: res
  213. })
  214. }
  215. this.setData({
  216. steps: dataInfo
  217. })
  218. }
  219. };
  220. http.request(params);
  221. },
  222. /**
  223. * 触摸开始事件处理函数
  224. * @param {*} e
  225. */
  226. touchStart(e) {
  227. this.startY = e.touches[0].pageY;
  228. },
  229. /**
  230. * 触摸移动事件处理函数
  231. * @param {*} e
  232. */
  233. touchMove(e) {
  234. const moveY = e.touches[0].pageY;
  235. const offset = moveY - this.startY;
  236. let newTop = this.data.flowInfoBoxTop + offset;
  237. // 限制拖动范围
  238. newTop = Math.min(this.data.maxTop, Math.max(this.data.minTop, newTop));
  239. this.setData({
  240. flowInfoBoxTop: newTop
  241. });
  242. this.startY = moveY;
  243. },
  244. mapClick() {
  245. let currentTop = this.data.flowInfoBoxTop;
  246. // 下移300rpx,确保不超出设定范围
  247. currentTop = Math.min(this.data.maxTop, currentTop + 300);
  248. this.setData({
  249. flowInfoBoxTop: currentTop
  250. });
  251. },
  252. /**
  253. * 生命周期函数--监听页面隐藏
  254. */
  255. onHide() {
  256. },
  257. /**
  258. * 生命周期函数--监听页面卸载
  259. */
  260. onUnload() {
  261. },
  262. /**
  263. * 页面相关事件处理函数--监听用户下拉动作
  264. */
  265. onPullDownRefresh() {
  266. },
  267. /**
  268. * 页面上拉触底事件的处理函数
  269. */
  270. onReachBottom() {
  271. },
  272. /**
  273. * 用户点击右上角分享
  274. */
  275. onShareAppMessage() {
  276. }
  277. })