zhuxiuping hace 2 años
padre
commit
c22f6cbf2c
Se han modificado 100 ficheros con 22669 adiciones y 0 borrados
  1. 24 0
      .hbuilderx/launch.json
  2. 432 0
      App.vue
  3. 87 0
      common/cache.js
  4. 18 0
      common/config.js
  5. 587 0
      common/httpRequest.js
  6. 207 0
      common/queue.js
  7. 16 0
      common/share.js
  8. 61 0
      common/time.js
  9. BIN
      components/colorui/.DS_Store
  10. 184 0
      components/colorui/animation.css
  11. 65 0
      components/colorui/components/cu-custom.vue
  12. 1226 0
      components/colorui/icon.css
  13. 3912 0
      components/colorui/main.css
  14. 63 0
      components/empty.vue
  15. 269 0
      components/permission.js
  16. 1 0
      components/watch-login/css/icon.css
  17. 139 0
      components/watch-login/watch-button.vue
  18. 222 0
      components/watch-login/watch-input.vue
  19. 7 0
      file/ReadMe.txt
  20. BIN
      file/mxkj.keystore
  21. BIN
      file/tcwmqs.keystore
  22. 65 0
      main.js
  23. 216 0
      manifest.json
  24. 34 0
      package-lock.json
  25. 17 0
      package.json
  26. 292 0
      pages.json
  27. 937 0
      pages/index/buyOrder/buyOrder.vue
  28. 506 0
      pages/index/cityOrder/cityOrder.vue
  29. 2771 0
      pages/index/index.vue
  30. 152 0
      pages/index/orderdetail/navigation.vue
  31. 975 0
      pages/index/orderdetail/orderdetail.vue
  32. 187 0
      pages/login/forgetPwd.vue
  33. 618 0
      pages/login/login.vue
  34. 280 0
      pages/login/running_rider/running_rider.vue
  35. 98 0
      pages/riderLogin/riderLogin.vue
  36. 551 0
      pages/riderMy/approve/approve.vue
  37. 85 0
      pages/riderMy/kefu.vue
  38. 645 0
      pages/riderMy/kefu/chat.vue
  39. 238 0
      pages/riderMy/kefu/kefu.vue
  40. 170 0
      pages/riderMy/kefu/liaotian.vue
  41. 533 0
      pages/riderMy/kefu/liaotianshi.vue
  42. 583 0
      pages/riderMy/myAccount/AcontMoney/AcontMoney.vue
  43. 119 0
      pages/riderMy/myAccount/AcontMoney/Acontlist.vue
  44. 133 0
      pages/riderMy/myAccount/AcontMoney/cashList.vue
  45. 281 0
      pages/riderMy/myAccount/AcontMoney/zhifubao.vue
  46. 116 0
      pages/riderMy/myAccount/Acontlist/Acontlist.vue
  47. 628 0
      pages/riderMy/myAccount/Txmoney/Txmoney.vue
  48. 176 0
      pages/riderMy/myAccount/myAccount.vue
  49. 233 0
      pages/riderMy/myComment/myComment.vue
  50. 358 0
      pages/riderMy/myComplain/myComplain.vue
  51. 195 0
      pages/riderMy/myComplain/online_complain/online_complain.vue
  52. 157 0
      pages/riderMy/myOnline/myOnline.vue
  53. 1238 0
      pages/riderMy/order.vue
  54. 36 0
      pages/riderMy/paotuixieyi.vue
  55. 116 0
      pages/riderMy/profit.vue
  56. 654 0
      pages/riderMy/riderMy.vue
  57. 31 0
      pages/riderMy/set/about.vue
  58. 44 0
      pages/riderMy/set/mimi.vue
  59. 121 0
      pages/riderMy/set/set.vue
  60. 44 0
      pages/riderMy/set/xieyi.vue
  61. 194 0
      pages/riderMy/set/yijian.vue
  62. 77 0
      pages/riderMy/trainingCenter.vue
  63. 48 0
      pages/riderMy/trainingList.vue
  64. 197 0
      pages/riderMy/updateNickName.vue
  65. BIN
      static/image/add.png
  66. BIN
      static/image/black.png
  67. BIN
      static/image/chats.png
  68. BIN
      static/image/close.png
  69. BIN
      static/image/empty.png
  70. BIN
      static/image/erweima.png
  71. BIN
      static/image/go.png
  72. BIN
      static/image/icon_add.png
  73. BIN
      static/image/icon_address.png
  74. BIN
      static/image/icon_back.png
  75. BIN
      static/image/icon_f.png
  76. BIN
      static/image/icon_name.png
  77. BIN
      static/image/icon_number.png
  78. BIN
      static/image/icon_qh.png
  79. BIN
      static/image/icon_s.png
  80. BIN
      static/image/location.png
  81. BIN
      static/image/orange.png
  82. BIN
      static/image/order.png
  83. BIN
      static/image/valua.png
  84. BIN
      static/logo.png
  85. BIN
      static/my/8.png
  86. BIN
      static/my/QQ.png
  87. BIN
      static/my/icon_00.png
  88. BIN
      static/my/icon_11.png
  89. BIN
      static/my/icon_22.png
  90. BIN
      static/my/icon_33.png
  91. BIN
      static/my/icon_44.png
  92. BIN
      static/my/icon_55.png
  93. BIN
      static/my/icon_66.png
  94. BIN
      static/my/icon_go.png
  95. BIN
      static/my/kf.png
  96. BIN
      static/my/phone.png
  97. BIN
      static/my/photo.png
  98. BIN
      static/my/weixin.png
  99. BIN
      static/my/wx.png
  100. 0 0
      static/my/zhifubao.png

+ 24 - 0
.hbuilderx/launch.json

@@ -0,0 +1,24 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version": "0.0",
+    "configurations": [{
+     	"app-plus" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"default" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"h5" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"mp-weixin" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"type" : "uniCloud"
+     }
+    ]
+}

+ 432 - 0
App.vue

@@ -0,0 +1,432 @@
+<script>
+	export default {
+		onLaunch: function() {
+			setInterval(d => { //定时器,定时去调取聊天未读消息
+				let userId = uni.getStorageSync('userId')
+				let token = uni.getStorageSync('token')
+				// console.log("userId"+userId+ "           token"+token)
+				if (userId && token) {
+					this.$Request.getT('/app/ordersChat/selectRiderAllUnreadCount').then(res => {
+						if (res.code === 0) {
+							let chatCount = res.data
+							let messageCount = res.data
+							uni.setStorageSync('messageCount', messageCount)
+
+							let num = chatCount + messageCount
+							if (num == 0) {
+								uni.removeTabBarBadge({
+									index: 1
+								})
+								return;
+							}
+							uni.setTabBarBadge({
+								index: 1,
+								text: num + ""
+							})
+
+						}
+					});
+				}
+			}, 3000);
+
+			//#ifdef APP-PLUS
+			// APP检测更新 具体打包流程可以参考:https://ask.dcloud.net.cn/article/35667
+			plus.screen.lockOrientation('portrait-primary'); //竖屏正方向锁定
+			//获取是否热更新过
+			const updated = uni.getStorageSync('updated'); // 尝试读取storage
+			let that = this;
+			if (updated.completed === true) {
+				// 如果上次刚更新过
+				// 删除安装包及安装记录
+				console.log('安装记录被删除,更新成功');
+				uni.removeSavedFile({
+					filePath: updated.packgePath,
+					success: res => {
+						uni.removeStorageSync('updated');
+					}
+				});
+			} else if (updated.completed === false) {
+				uni.removeStorageSync('updated');
+				plus.runtime.install(updated.packgePath, {
+					force: true
+				});
+				uni.setStorage({
+					key: 'updated',
+					data: {
+						completed: true,
+						packgePath: updated.packgePath
+					},
+					success: res => {
+						console.log('成功安装上次的更新,应用需要重启才能继续完成');
+					}
+				});
+				uni.showModal({
+					title: '温馨提示',
+					content: '应用将重启以完成更新',
+					showCancel: false,
+					complete: () => {
+						plus.runtime.restart();
+					}
+				});
+			} else {
+				//获取当前系统版本信息
+				plus.runtime.getProperty(plus.runtime.appid, widgetInfo => {
+					//请求后台接口 解析数据 对比版本
+					that.$Request.getT('/app/user/selectNewApp').then(res => {
+						res = res.data[1];
+						if (res.wgtUrl && widgetInfo.version < res.version) {
+							let downloadLink = '';
+							let androidLink = res.androidWgtUrl;
+							let iosLink = res.iosWgtUrl;
+							let ready = false;
+							//校验是是不是热更新
+							if (res.wgtUrl.match(RegExp(/.wgt/))) {
+								// 判断系统类型
+								if (plus.os.name.toLowerCase() === 'android') {
+									console.log('安卓系统');
+									if (androidLink && androidLink !== '#') {
+										// 我这里默认#也是没有地址,请根据业务自行修改
+										console.log('发现下载地址');
+										// 安卓:创建下载任务
+										if (androidLink.match(RegExp(/.wgt/))) {
+											console.log('确认wgt热更新包');
+											downloadLink = androidLink;
+											ready = true;
+										} else {
+											console.log('安卓推荐.wgt强制更新,.apk的强制更新请您自行修改程序');
+										}
+									} else {
+										console.log('下载地址是空的,无法继续');
+									}
+								} else {
+									console.log('苹果系统');
+									if (iosLink && iosLink !== '#') {
+										// 我这里默认#也是没有地址,请根据业务自行修改
+										console.log('发现下载地址');
+										// 苹果(A):进行热更新(如果iosLink是wgt更新包的下载地址)判断文件名中是否含有.wgt
+										if (iosLink.match(RegExp(/.wgt/))) {
+											console.log('确认wgt热更新包');
+											downloadLink = iosLink;
+											ready = true;
+										} else {
+											console.log('苹果只支持.wgt强制更新');
+										}
+									} else {
+										console.log('下载地址是空的,无法继续');
+									}
+								}
+								if (ready) {
+									console.log('任务开始');
+									let downloadTask = uni.downloadFile({
+										url: downloadLink,
+										success: res => {
+											if (res.statusCode === 200) {
+												// 保存下载的安装包
+												console.log('保存安装包');
+												uni.saveFile({
+													tempFilePath: res.tempFilePath,
+													success: res => {
+														const packgePath = res
+															.savedFilePath;
+														// 保存更新记录到stroage,下次启动app时安装更新
+														uni.setStorage({
+															key: 'updated',
+															data: {
+																completed: false,
+																packgePath: packgePath
+															},
+															success: () => {
+																console
+																	.log(
+																		'成功保存记录'
+																	);
+															}
+														});
+														// 任务完成,关闭下载任务
+														console.log(
+															'任务完成,关闭下载任务,下一次启动应用时将安装更新'
+														);
+														downloadTask.abort();
+														downloadTask = null;
+													}
+												});
+											}
+										}
+									});
+								} else {
+									console.log('下载地址未准备,无法开启下载任务');
+								}
+							} else {
+								//不是热更新是在线更新 校验是否强制升级
+								if (res.method == 'true') {
+									uni.showModal({
+										showCancel: false,
+										confirmText: '立即更新',
+										title: '发现新版本',
+										content: res.des,
+										success: res => {
+											if (res.confirm) {
+												that.$queue.showLoading('下载中...');
+												if (uni.getSystemInfoSync().platform ==
+													'android') {
+													uni.downloadFile({
+														url: androidLink,
+														success: downloadResult => {
+															if (downloadResult
+																.statusCode ===
+																200) {
+																plus.runtime
+																	.install(
+																		downloadResult
+																		.tempFilePath, {
+																			force: false
+																		},
+																		d => {
+																			console
+																				.log(
+																					'install success...'
+																				);
+																			plus.runtime
+																				.restart();
+																		},
+																		e => {
+																			console
+																				.error(
+																					'install fail...'
+																				);
+																		}
+																	);
+															}
+														}
+													});
+												}
+												if (uni.getSystemInfoSync().platform ==
+													'ios') {
+													plus.runtime.openURL(iosLink, function(
+														res) {});
+												}
+											} else if (res.cancel) {
+												console.log('取消');
+											}
+										}
+									});
+								} else {
+									uni.showModal({
+										title: '发现新版本',
+										confirmText: '立即更新',
+										cancelText: '下次更新',
+										content: res.des,
+										success: res => {
+											if (res.confirm) {
+												that.$queue.showLoading('下载中...');
+												if (uni.getSystemInfoSync().platform ==
+													'android') {
+													uni.downloadFile({
+														url: androidLink,
+														success: downloadResult => {
+															if (downloadResult
+																.statusCode ===
+																200) {
+																plus.runtime
+																	.install(
+																		downloadResult
+																		.tempFilePath, {
+																			force: false
+																		},
+																		d => {
+																			console
+																				.log(
+																					'install success...'
+																				);
+																			plus.runtime
+																				.restart();
+																		},
+																		e => {
+																			console
+																				.error(
+																					'install fail...'
+																				);
+																		}
+																	);
+															}
+														}
+													});
+												}
+												if (uni.getSystemInfoSync().platform ==
+													'ios') {
+													plus.runtime.openURL(iosLink, function(
+														res) {});
+												}
+											} else if (res.cancel) {
+												console.log('取消');
+											}
+										}
+									});
+								}
+							}
+						}
+					});
+				});
+			}
+			//#endif
+
+			//#ifdef H5
+			let ua = navigator.userAgent.toLowerCase();
+			if (ua.indexOf('micromessenger') !== -1) {
+				let openid = uni.getStorageSync('openid');
+				let userId = uni.getStorageSync('userId');
+				let that = this;
+				console.log(openid)
+				if (!openid) {
+					if (window.location.href.indexOf('?code=') !== -1 || window.location.href.indexOf('&code=') !==
+						-1) {
+						let code;
+						if (window.location.href.indexOf('?code=') !== -1) {
+							code = window.location.href.split('?code=')[1].split('&')[0];
+						} else {
+							code = window.location.href.split('&code=')[1].split('&')[0];
+						}
+						this.$Request.get('/app/Login/getRiderOpenId?code=' + code).then(ret => {
+							this.$queue.setData('openid', ret.data)
+
+							this.$Request.get('/app/Login/wxOpenIdLogin?openId=' + ret.data + '&userType=2')
+								.then(res => {
+
+									this.$queue.setData("userId", res.user.userId);
+									this.$queue.setData("token", res.token);
+									this.$queue.setData("phone", res.user.phone);
+									this.$queue.setData("userName", res.user.userName);
+									this.$queue.setData("avatar", res.user.avatar);
+									this.$queue.setData("invitationCode", res.user.invitationCode);
+									this.$queue.setData("inviterCode", res.user.inviterCode);
+								});
+						});
+					} else {
+						window.location.href =
+							'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
+							that.$queue.getWxAppid() +
+							'&redirect_uri=' +
+							window.location.href.split('#')[0] +
+							'&response_type=code&scope=snsapi_userinfo#wechat_redirect';
+					}
+				} else {
+					this.$Request.get('/app/Login/wxOpenIdLogin?openId=' + openid + '&userType=2').then(res => {
+
+						this.$queue.setData("userId", res.user.userId);
+						this.$queue.setData("token", res.token);
+						this.$queue.setData("phone", res.user.phone);
+						this.$queue.setData("userName", res.user.userName);
+						this.$queue.setData("avatar", res.user.avatar);
+						this.$queue.setData("invitationCode", res.user.invitationCode);
+						this.$queue.setData("inviterCode", res.user.inviterCode);
+					});
+				}
+			}
+			//#endif
+		},
+		onShow: function() {
+
+			console.log('App Show')
+
+			// #ifdef APP-PLUS
+			if (uni.getSystemInfoSync().platform == 'android') {
+				let clientid = plus.push.getClientInfo().clientid;
+
+				let userId = this.$queue.getData('userId');
+				if (userId) {
+					// console.log(clientid, '----', userId)
+					this.$Request.postT('/app/user/updateRiderClientId?clientId=' + clientid).then(
+						res => {
+							// console.log(res,'------------------')
+						});
+				}
+			}
+			//#endif
+
+
+
+			// this.$Request.get('/app/common/type/308').then(res => {
+			// 	if (res.code == 0) {
+			// 		// #ifdef MP-WEIXIN
+			// 		this.$queue.setData('XCXIsSelect', res.data.value);
+			// 		// #endif
+			// 		// #ifndef MP-WEIXIN
+			// 		this.$queue.setData('XCXIsSelect', '是');
+			// 		// #endif
+			// 	}
+			// });
+			this.$Request.get('/app/common/type/341').then(res => {
+				if (res.code == 0) {
+					// #ifdef MP-WEIXIN
+					this.$queue.setData('XCXIsSelect', res.data.value);
+					// #endif
+					// #ifndef MP-WEIXIN
+					this.$queue.setData('XCXIsSelect', '是');
+					// #endif
+				}
+			});
+
+			//腾讯地图名字
+			this.$Request.getT('/app/common/type/318').then(res => {
+				if (res.code == 0) {
+					if (res.data && res.data.value) {
+						this.$queue.setData('mapName', res.data.value)
+					}
+				}
+			});
+			//腾讯地图key
+			this.$Request.getT('/app/common/type/317').then(res => {
+				if (res.code == 0) {
+					if (res.data && res.data.value) {
+						this.$queue.setData('mapKey', res.data.value)
+					}
+				}
+			});
+			this.$Request.getT('/app/common/type/331').then(res => {
+				if (res.code === 0) {
+					uni.setStorageSync('tuiguang', res.data.value)
+				}
+			});
+			this.$Request.getT('/app/common/type/332').then(res => {
+				if (res.code === 0) {
+					uni.setStorageSync('tuiguangImg', res.data.value)
+				}
+			});
+
+			// 判断账号是否封禁
+			this.userId = this.$queue.getData("userId")
+			if (this.userId) {
+				this.$Request.getT('/app/userinfo/bannedFlag').then(res => {
+					if (res.code == 0) {
+						if (res.data == 2) {
+							uni.showModal({
+								title: '账号已被封禁',
+								content: '请在【我的】【我的客服】申诉,申诉成功后重新登录',
+								showCancel: false,
+								cancelText: '',
+								confirmText: '我知道了',
+								success: res => {
+									uni.clearStorageSync()
+								},
+								fail: () => {},
+								complete: () => {}
+							});
+						}
+
+					}
+				})
+			}
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+
+<style lang="scss">
+	/*每个页面公共css */
+	/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
+	@import "uview-ui/index.scss";
+	@import 'components/colorui/main.css';
+	@import 'components/colorui/icon.css';
+</style>

+ 87 - 0
common/cache.js

@@ -0,0 +1,87 @@
+/**
+ * 缓存数据优化
+ * var cache = require('utils/cache.js');
+ * import cache from '../cache'
+ * 使用方法 【
+ *     一、设置缓存
+ *         string    cache.put('k', 'string你好啊');
+ *         json      cache.put('k', { "b": "3" }, 2);
+ *         array     cache.put('k', [1, 2, 3]);
+ *         boolean   cache.put('k', true);
+ *     二、读取缓存
+ *         默认值    cache.get('k')
+ *         string    cache.get('k', '你好')
+ *         json      cache.get('k', { "a": "1" })
+ *     三、移除/清理  
+ *         移除: cache.remove('k');
+ *         清理:cache.clear(); 
+ * 】
+ * @type {String}
+ */
+var postfix = '_mallStore'; // 缓存前缀 
+/**
+ * 设置缓存 
+ * @param  {[type]} k [键名]
+ * @param  {[type]} v [键值]
+ * @param  {[type]} t [时间、单位秒]
+ */
+function put(k, v, t) {
+    uni.setStorageSync(k, v) 
+    var seconds = parseInt(t);
+    if (seconds > 0) {
+        var timestamp = Date.parse(new Date());
+        timestamp = timestamp / 1000 + seconds;
+        uni.setStorageSync(k + postfix, timestamp + "")
+    } else {
+        uni.removeStorageSync(k + postfix)
+    }
+}
+
+
+/**
+ * 获取缓存 
+ * @param  {[type]} k   [键名]
+ * @param  {[type]} def [获取为空时默认]
+ */
+function get(k, def) {
+    var deadtime = parseInt(uni.getStorageSync(k + postfix)) 
+    if (deadtime) {
+        if (parseInt(deadtime) < Date.parse(new Date()) / 1000) {
+            if (def) {
+                return def;
+            } else {
+                return false;
+            }
+        }
+    }
+    var res = uni.getStorageSync(k);
+    if (res) {
+        return res;
+    } else {
+        if (def == undefined  || def == "") {
+            def = false; 
+        }
+        return def;
+    }
+}
+
+function remove(k) {
+    uni.removeStorageSync(k);
+    uni.removeStorageSync(k + postfix);
+}
+
+/**
+ * 清理所有缓存
+ * @return {[type]} [description]
+ */
+function clear() {
+    uni.clearStorageSync();
+}
+
+
+module.exports = {
+    put: put,
+    get: get,
+    remove: remove,
+    clear: clear,
+}

+ 18 - 0
common/config.js

@@ -0,0 +1,18 @@
+const ROOTPATH1 = "https://www.daweilinli.com/sqx_fast";
+const ROO2 = "https://www.daweilinli.com";
+const ROOTPATH = "https://www.daweilinli.com/sqx_fast";
+const ROOTPATH2 = "wss://www.daweilinli.com/wss/websocket/"; //联系客服
+const ROOTPATH3 = "wss://www.daweilinli.com/wss/ordersChat/"; //聊天
+
+// const ROOTPATH1 = "http://192.168.0.119:8171/sqx_fast";
+// const ROOTPATH = "http://192.168.0.119:8171/sqx_fast";
+// const ROOTPATH2 = "wss://192.168.0.119:8171/wss/websocket/"; //联系客服
+// const ROOTPATH3 = "wss://192.168.0.119:8171/wss/ordersChat/"; //聊天
+
+module.exports = {
+    APIHOST: ROOTPATH,
+    APIHOST1: ROOTPATH1,
+	APIHOST2: ROO2,
+	WSHOST: ROOTPATH2,
+	WSHOST1: ROOTPATH3,
+};

+ 587 - 0
common/httpRequest.js

@@ -0,0 +1,587 @@
+import configdata from './config'
+import cache from './cache'
+
+module.exports = {
+	config: function(name) {
+		var info = null;
+		if (name) {
+			var name2 = name.split("."); //字符分割
+			if (name2.length > 1) {
+				info = configdata[name2[0]][name2[1]] || null;
+			} else {
+				info = configdata[name] || null;
+			}
+			if (info == null) {
+				let web_config = cache.get("web_config");
+				if (web_config) {
+					if (name2.length > 1) {
+						info = web_config[name2[0]][name2[1]] || null;
+					} else {
+						info = web_config[name] || null;
+					}
+				}
+			}
+		}
+		return info;
+	},
+	post: function(url, data, header) {
+		header = header || "application/x-www-form-urlencoded";
+		url = this.config("APIHOST") + url;
+		return new Promise((succ, error) => {
+			uni.request({
+				url: url,
+				data: data,
+				method: "POST",
+				header: {
+					"content-type": header
+				},
+				success: function(result) {
+					if (result.data.code == 401) {
+						uni.removeStorageSync("token")
+						uni.removeStorageSync("userId")
+						uni.removeStorageSync("phone")
+						uni.removeStorageSync("openid")
+						uni.removeStorageSync("userName")
+						uni.removeStorageSync("relation")
+						uni.removeStorageSync("relation_id")
+						uni.removeStorageSync("isInvitation")
+						uni.removeStorageSync("zhiFuBao")
+						uni.removeStorageSync("zhiFuBaoName")
+
+						uni.showModal({
+							title: '提示',
+							content: '用户信息失效,请重新登录!',
+							showCancel: false, // 是否显示取消按钮,默认为 true // 是否显示取消按钮,默认为 true
+							success: function(res) {
+								if (res.confirm) {
+									uni.redirectTo({
+										url: '/pages/login/login'
+									})
+								}
+							}
+						});
+					}
+					succ.call(self, result.data)
+				},
+				fail: function(e) {
+					error.call(self, e)
+				}
+			})
+		})
+	},
+	postT: function(url, data, header) {
+		header = header || "application/x-www-form-urlencoded";
+		url = this.config("APIHOST1") + url;
+		// let token = uni.getStorageSync("token");
+		let token = uni.getStorageSync("token");
+		if (token) {
+			return new Promise((succ, error) => {
+				uni.request({
+					url: url,
+					data: data,
+					method: "POST",
+					header: {
+						"content-type": header,
+						"token": token
+					},
+					success: function(result) {
+						console.error(result);
+						if (result.data.code == 401 && token) {
+							uni.removeStorageSync("token")
+							uni.removeStorageSync("userId")
+							uni.removeStorageSync("phone")
+							uni.removeStorageSync("openid")
+							uni.removeStorageSync("userName")
+							uni.removeStorageSync("relation")
+							uni.removeStorageSync("relation_id")
+							uni.removeStorageSync("isInvitation")
+							uni.removeStorageSync("zhiFuBao")
+							uni.removeStorageSync("zhiFuBaoName")
+							uni.showModal({
+								title: '提示',
+								content: '用户信息失效,请重新登录!',
+								showCancel: false, // 是否显示取消按钮,默认为 true // 是否显示取消按钮,默认为 true
+								success: function(res) {
+									if (res.confirm) {
+										uni.redirectTo({
+											url: '/pages/login/login'
+										})
+									}
+								}
+							});
+						}
+						succ.call(self, result.data)
+					},
+					fail: function(e) {
+						error.call(self, e)
+					}
+				})
+			})
+		} else {
+			return new Promise((succ, error) => {
+				uni.request({
+					url: url,
+					data: data,
+					method: "POST",
+					header: {
+						"content-type": header,
+					},
+					success: function(result) {
+						if (result.data.code == 401) {
+							uni.removeStorageSync("token")
+							uni.removeStorageSync("userId")
+							uni.removeStorageSync("phone")
+							uni.removeStorageSync("openid")
+							uni.removeStorageSync("userName")
+							uni.removeStorageSync("relation")
+							uni.removeStorageSync("relation_id")
+							uni.removeStorageSync("isInvitation")
+							uni.removeStorageSync("zhiFuBao")
+							uni.removeStorageSync("zhiFuBaoName")
+							uni.showModal({
+								title: '提示',
+								content: '用户信息失效,请重新登录!',
+								showCancel: false, // 是否显示取消按钮,默认为 true // 是否显示取消按钮,默认为 true
+								success: function(res) {
+									if (res.confirm) {
+										uni.redirectTo({
+											url: '/pages/login/login'
+										})
+									}
+								}
+							});
+						}
+						succ.call(self, result.data)
+					},
+					fail: function(e) {
+						error.call(self, e)
+					}
+				})
+			})
+		}
+	},
+
+	postJson: function(url, data, header) {
+		header = header || "application/json";
+		url = this.config("APIHOST1") + url;
+		// let token = uni.getStorageSync("token");
+		let token = uni.getStorageSync("token");
+		if (token) {
+			return new Promise((succ, error) => {
+				uni.request({
+					url: url,
+					data: data,
+					method: "POST",
+					header: {
+						"content-type": header,
+						"token": token
+					},
+					success: function(result) {
+						// console.error(result);
+						if (result.data.code == 401 && token) {
+							uni.removeStorageSync("token")
+							uni.removeStorageSync("userId")
+							uni.removeStorageSync("phone")
+							uni.removeStorageSync("openid")
+							uni.removeStorageSync("userName")
+							uni.removeStorageSync("relation")
+							uni.removeStorageSync("relation_id")
+							uni.removeStorageSync("isInvitation")
+							uni.removeStorageSync("zhiFuBao")
+							uni.removeStorageSync("zhiFuBaoName")
+
+							uni.showModal({
+								title: '提示',
+								content: '用户信息失效,请重新登录!',
+								showCancel: false, // 是否显示取消按钮,默认为 true // 是否显示取消按钮,默认为 true
+								success: function(res) {
+									if (res.confirm) {
+										uni.redirectTo({
+											url: '/pages/login/login'
+										})
+									}
+								}
+							});
+						}
+						succ.call(self, result.data)
+					},
+					fail: function(e) {
+						error.call(self, e)
+					}
+				})
+			})
+		} else {
+			return new Promise((succ, error) => {
+				uni.request({
+					url: url,
+					data: data,
+					method: "POST",
+					header: {
+						"content-type": header,
+					},
+					success: function(result) {
+						succ.call(self, result.data)
+					},
+					fail: function(e) {
+						error.call(self, e)
+					}
+				})
+			})
+		}
+	},
+	getT: function(url, data, header) {
+		header = header || "application/x-www-form-urlencoded";
+		url = this.config("APIHOST1") + url;
+		let token = uni.getStorageSync("token");
+		if (token) {
+			return new Promise((succ, error) => {
+				uni.request({
+					url: url,
+					data: data,
+					method: "GET",
+					header: {
+						"content-type": header,
+						"token": token
+					},
+					success: function(result) {
+						if (result.data.code == 401 && token) {
+							uni.removeStorageSync("token")
+							uni.removeStorageSync("userId")
+							uni.removeStorageSync("phone")
+							uni.removeStorageSync("openid")
+							uni.removeStorageSync("userName")
+							uni.removeStorageSync("relation")
+							uni.removeStorageSync("relation_id")
+							uni.removeStorageSync("isInvitation")
+							uni.removeStorageSync("zhiFuBao")
+							uni.removeStorageSync("zhiFuBaoName")
+
+							uni.showModal({
+								title: '提示',
+								content: '用户信息失效,请重新登录!',
+								showCancel: false, // 是否显示取消按钮,默认为 true // 是否显示取消按钮,默认为 true
+								success: function(res) {
+									if (res.confirm) {
+										uni.redirectTo({
+											url: '/pages/login/login'
+										})
+									}
+								}
+							});
+						}
+						succ.call(self, result.data)
+					},
+					fail: function(e) {
+						error.call(self, e)
+					}
+				})
+			})
+		} else {
+			return new Promise((succ, error) => {
+				uni.request({
+					url: url,
+					data: data,
+					method: "GET",
+					header: {
+						"content-type": header
+					},
+					success: function(result) {
+						if (result.data.code == 401) {
+							uni.removeStorageSync("token")
+							uni.removeStorageSync("userId")
+							uni.removeStorageSync("phone")
+							uni.removeStorageSync("openid")
+							uni.removeStorageSync("userName")
+							uni.removeStorageSync("relation")
+							uni.removeStorageSync("relation_id")
+							uni.removeStorageSync("isInvitation")
+							uni.removeStorageSync("zhiFuBao")
+							uni.removeStorageSync("zhiFuBaoName")
+
+							uni.showModal({
+								title: '提示',
+								content: '用户信息失效,请重新登录!',
+								showCancel: false, // 是否显示取消按钮,默认为 true // 是否显示取消按钮,默认为 true
+								success: function(res) {
+									if (res.confirm) {
+										uni.redirectTo({
+											url: '/pages/login/login'
+										})
+									}
+								}
+							});
+						}
+						succ.call(self, result.data)
+					},
+					fail: function(e) {
+						error.call(self, e)
+					}
+				})
+			})
+		}
+
+	},
+	posts: function(url, data, header) {
+		header = header || "application/x-www-form-urlencoded";
+		return new Promise((succ, error) => {
+			uni.request({
+				url: url,
+				data: data,
+				method: "POST",
+				header: {
+					"content-type": header
+				},
+				success: function(result) {
+					if (result.data.code == 401) {
+						uni.removeStorageSync("token")
+						uni.removeStorageSync("userId")
+						uni.removeStorageSync("phone")
+						uni.removeStorageSync("openid")
+						uni.removeStorageSync("userName")
+						uni.removeStorageSync("relation")
+						uni.removeStorageSync("relation_id")
+						uni.removeStorageSync("isInvitation")
+						uni.removeStorageSync("zhiFuBao")
+						uni.removeStorageSync("zhiFuBaoName")
+						uni.showModal({
+							title: '提示',
+							content: '用户信息失效,请重新登录!',
+							showCancel: false, // 是否显示取消按钮,默认为 true // 是否显示取消按钮,默认为 true
+							success: function(res) {
+								if (res.confirm) {
+									uni.redirectTo({
+										url: '/pages/login/login'
+									})
+								}
+							}
+						});
+					}
+					succ.call(self, result.data)
+				},
+				fail: function(e) {
+					error.call(self, e)
+				}
+			})
+		})
+	},
+	postF: function(url, data, header) {
+		header = header || "application/json";
+		url = this.config("APIHOST") + url;
+		return new Promise((succ, error) => {
+			uni.request({
+				url: url,
+				data: data,
+				method: "POST",
+				header: {
+					"content-type": header
+				},
+				success: function(result) {
+					if (result.data.code == 401) {
+						uni.removeStorageSync("token")
+						uni.removeStorageSync("userId")
+						uni.removeStorageSync("phone")
+						uni.removeStorageSync("openid")
+						uni.removeStorageSync("userName")
+						uni.removeStorageSync("relation")
+						uni.removeStorageSync("relation_id")
+						uni.removeStorageSync("isInvitation")
+						uni.removeStorageSync("zhiFuBao")
+						uni.removeStorageSync("zhiFuBaoName")
+
+						uni.showModal({
+							title: '提示',
+							content: '用户信息失效,请重新登录!',
+							showCancel: false, // 是否显示取消按钮,默认为 true // 是否显示取消按钮,默认为 true
+							success: function(res) {
+								if (res.confirm) {
+									uni.redirectTo({
+										url: '/pages/login/login'
+									})
+								}
+							}
+						});
+					}
+					succ.call(self, result.data)
+				},
+				fail: function(e) {
+					error.call(self, e)
+				}
+			})
+		})
+	},
+	postFs: function(url, data, header) {
+		header = header || "application/json";
+		return new Promise((succ, error) => {
+			uni.request({
+				url: url,
+				data: data,
+				method: "POST",
+				header: {
+					"content-type": header
+				},
+				success: function(result) {
+					if (result.data.code == 401) {
+						uni.removeStorageSync("token")
+						uni.removeStorageSync("userId")
+						uni.removeStorageSync("phone")
+						uni.removeStorageSync("openid")
+						uni.removeStorageSync("userName")
+						uni.removeStorageSync("relation")
+						uni.removeStorageSync("relation_id")
+						uni.removeStorageSync("isInvitation")
+						uni.removeStorageSync("zhiFuBao")
+						uni.removeStorageSync("zhiFuBaoName")
+
+						uni.showModal({
+							title: '提示',
+							content: '用户信息失效,请重新登录!',
+							showCancel: false, // 是否显示取消按钮,默认为 true // 是否显示取消按钮,默认为 true
+							success: function(res) {
+								if (res.confirm) {
+									uni.redirectTo({
+										url: '/pages/login/login'
+									})
+								}
+							}
+						});
+					}
+					succ.call(self, result.data)
+				},
+				fail: function(e) {
+					error.call(self, e)
+				}
+			})
+		})
+	},
+	get: function(url, data, header) {
+		header = header || "application/x-www-form-urlencoded";
+		url = this.config("APIHOST") + url;
+		return new Promise((succ, error) => {
+			uni.request({
+				url: url,
+				data: data,
+				method: "GET",
+				header: {
+					"content-type": header
+				},
+				success: function(result) {
+					if (result.data.code == 401) {
+						uni.removeStorageSync("token")
+						uni.removeStorageSync("userId")
+						uni.removeStorageSync("phone")
+						uni.removeStorageSync("openid")
+						uni.removeStorageSync("userName")
+						uni.removeStorageSync("relation")
+						uni.removeStorageSync("relation_id")
+						uni.removeStorageSync("isInvitation")
+						uni.removeStorageSync("zhiFuBao")
+						uni.removeStorageSync("zhiFuBaoName")
+
+						uni.showModal({
+							title: '提示',
+							content: '用户信息失效,请重新登录!',
+							showCancel: false, // 是否显示取消按钮,默认为 true // 是否显示取消按钮,默认为 true
+							success: function(res) {
+								if (res.confirm) {
+									uni.redirectTo({
+										url: '/pages/login/login'
+									})
+								}
+							}
+						});
+					}
+					succ.call(self, result.data)
+				},
+				fail: function(e) {
+					error.call(self, e)
+				}
+			})
+		})
+	},
+	getJd: function(url, data, header) {
+		header = header || "application/x-www-form-urlencoded";
+		return new Promise((succ, error) => {
+			uni.request({
+				url: url,
+				data: data,
+				method: "GET",
+				header: {
+					"content-type": header
+				},
+				success: function(result) {
+					if (result.data.code == 401) {
+						uni.removeStorageSync("token")
+						uni.removeStorageSync("userId")
+						uni.removeStorageSync("phone")
+						uni.removeStorageSync("openid")
+						uni.removeStorageSync("userName")
+						uni.removeStorageSync("relation")
+						uni.removeStorageSync("relation_id")
+						uni.removeStorageSync("isInvitation")
+						uni.removeStorageSync("zhiFuBao")
+						uni.removeStorageSync("zhiFuBaoName")
+
+						uni.showModal({
+							title: '提示',
+							content: '用户信息失效,请重新登录!',
+							showCancel: false, // 是否显示取消按钮,默认为 true // 是否显示取消按钮,默认为 true
+							success: function(res) {
+								if (res.confirm) {
+									uni.redirectTo({
+										url: '/pages/login/login'
+									})
+								}
+							}
+						});
+					}
+					succ.call(self, result.data)
+				},
+				fail: function(e) {
+					error.call(self, e)
+				}
+			})
+		})
+	},
+	get1: function(url, data, header) {
+		header = header || "application/json";
+		url = this.config("APIHOST") + url;
+		return new Promise((succ, error) => {
+			uni.request({
+				url: url,
+				data: data,
+				method: "GET",
+				success: function(result) {
+					if (result.data.code == 401) {
+						uni.removeStorageSync("token")
+						uni.removeStorageSync("userId")
+						uni.removeStorageSync("phone")
+						uni.removeStorageSync("openid")
+						uni.removeStorageSync("userName")
+						uni.removeStorageSync("relation")
+						uni.removeStorageSync("relation_id")
+						uni.removeStorageSync("isInvitation")
+						uni.removeStorageSync("zhiFuBao")
+						uni.removeStorageSync("zhiFuBaoName")
+
+						uni.showModal({
+							title: '提示',
+							content: '用户信息失效,请重新登录!',
+							showCancel: false, // 是否显示取消按钮,默认为 true // 是否显示取消按钮,默认为 true
+							success: function(res) {
+								if (res.confirm) {
+									uni.redirectTo({
+										url: '/pages/login/login'
+									})
+								}
+							}
+						});
+					}
+					succ.call(self, result.data)
+				},
+				fail: function(e) {
+					error.call(self, e)
+				}
+			})
+		})
+	}
+}

+ 207 - 0
common/queue.js

@@ -0,0 +1,207 @@
+/**
+ * 
+ * @author maxd
+ * @date 2019.8.1
+ */
+module.exports = {
+	//微信的appId
+	getWxAppid() {
+		return 'wxa59b58efa950ba1f'
+	},
+	//全局邀请码
+	getInvitation() {
+		return uni.getStorageSync("publicRelation")
+	},
+	//获取APP下载地址
+	getAppDownUrl() {
+		return uni.getStorageSync("appurl")
+	},
+	//全局域名 部分html中需要单独替换 需要修改config中的网络请求域名
+	publicYuMing() {
+		return 'https://www.daweilinli.com'
+	},
+	//全局域名 部分html中需要单独替换 需要修改config中的网络请求域名
+	publicYuMingAll() {
+		return 'https://www.daweilinli.com/sqx_fast'
+	},
+	minMoney() {
+		return uni.getStorageSync("minMoney") ? uni.getStorageSync("minMoney") : '0.3'
+	},
+	invitaionNum() {
+		return uni.getStorageSync("invitaionNum")
+	},
+	maxMoney() {
+		return uni.getStorageSync("maxMoney") ? uni.getStorageSync("maxMoney") : '0.7'
+	},
+	teamMoney() {
+		return uni.getStorageSync("teamMoney")
+	},
+	logout() {
+		this.remove("token");
+		this.remove("userId");
+		this.remove("mobile");
+		this.remove("openid");
+		this.remove("nickName");
+		this.remove("relation");
+		this.remove("avatar");
+		this.remove("relation_id");
+		this.remove("isInvitation");
+		this.remove("member");
+		this.remove("sex");
+	},
+	loginClear() {
+		this.remove("token");
+		this.remove("userId");
+		this.remove("mobile");
+		this.remove("nickName");
+		this.remove("avatar");
+		this.remove("relation_id");
+		this.remove("isInvitation");
+		this.remove("member");
+		this.remove("sex");
+	},
+	showLoading(title) {
+		uni.showLoading({
+			title: title
+		});
+	},
+	showToast(title) {
+		uni.showToast({
+			title: title,
+			mask: false,
+			duration: 4000,
+			icon: "none"
+		});
+	},
+	getSearchKeys: function(key) {
+		let list = "套套,情趣用品,避孕,男用,女用,成人用品,保健品,冈本 杜蕾斯 杰士邦 第六感 倍力乐 诺丝 多乐士 斯香妮 双一 雨蝶 玛尼仕,充气娃娃,娃娃充气 阴蒂 刺激 超薄 螺纹 震动 润滑 女液体 延时 ";
+		return list.includes(key);
+	},
+	setJson: function(key, value) {
+		let jsonString = JSON.stringify(value);
+		try {
+			uni.setStorageSync(key, jsonString);
+		} catch (e) {
+			// error
+		}
+	},
+	setData: function(key, value) {
+		try {
+			uni.setStorageSync(key, value);
+		} catch (e) {
+			// error
+		}
+	},
+	getData: function(key) {
+		try {
+			const value = uni.getStorageSync(key);
+			if (value) {
+				return value;
+			}
+		} catch (e) {
+			// error
+		}
+
+	},
+	getJson: function(key) {
+		try {
+			const value = uni.getStorageSync(key);
+			if (value) {
+				return JSON.parse(value);
+			}
+		} catch (e) {
+			// error
+		}
+
+	},
+	clear: function() {
+		uni.clearStorage();
+	},
+	get: function(key) { //获取队列里面全部的数据
+		let data = this.getJson(key);
+		if (data instanceof Array) {
+			return data;
+		}
+		return [];
+	},
+	insert: function(param) { //队列插入数据
+		param.capacityNum = param.capacityNum || 100; //队列容量 默认队列中超过100条数据,自动删除尾部
+		let data = this.getJson(param.key);
+		if (data instanceof Array) {
+			if (data.length > param.capacityNum) {
+				let total = data.length - param.capacityNum;
+				for (let i = 0; i < total; i++) {
+					data.pop();
+				}
+			}
+			data.unshift(param.value);
+		} else {
+			data = [];
+			data.push(param.value);
+		}
+		this.setJson(param.key, data);
+	},
+	removeItem: function(key, itemIds) { //提供itemIds数组 批量删除队列中的某项数据
+		let data = this.getJson(key);
+		if (data instanceof Array) {
+			for (let i = 0; i < itemIds.length; i++) {
+				for (let p = 0; p < data.length; p++) {
+					if (itemIds[i] === data[p].itemid) {
+						data.splice(p, 1);
+						break;
+					}
+				}
+			}
+			this.setJson(key, data);
+		}
+	},
+	isExist: function(key, itemId) { //检测某条数据在队列中是否存在
+		let data = this.getJson(key);
+		if (data instanceof Array) {
+			for (let p = 0; p < data.length; p++) {
+				if (itemId === data[p].itemid) {
+					return true;
+				}
+			}
+		}
+		return false;
+	},
+	isExistPdd: function(key, itemId) { //检测某条数据在队列中是否存在
+		let data = this.getJson(key);
+		if (data instanceof Array) {
+			for (let p = 0; p < data.length; p++) {
+				if (itemId === data[p].goodsId) {
+					return true;
+				}
+			}
+		}
+		return false;
+	},
+	isExistJd: function(key, itemId) { //检测某条数据在队列中是否存在
+		let data = this.getJson(key);
+		if (data instanceof Array) {
+			for (let p = 0; p < data.length; p++) {
+				if (itemId === data[p].skuId) {
+					return true;
+				}
+			}
+		}
+		return false;
+	},
+	remove: function(key) { //删除某条队列
+		try {
+			uni.removeStorageSync(key);
+			//localStorage.removeItem(key)
+		} catch (e) {
+			// error
+		}
+	},
+	getCount: function(key) { //获取队列中全部数据数量
+
+		let data = this.getJson(key);
+		if (data instanceof Array) {
+			return data.length;
+		}
+		return 0;
+	},
+};

+ 16 - 0
common/share.js

@@ -0,0 +1,16 @@
+export default {
+	onShareAppMessage(res) { //发送给朋友
+		return {
+			title: uni.getStorageSync('tuiguang'),
+			path:'/pages/index/index',
+			imageUrl: uni.getStorageSync('tuiguangImg'),
+		}
+	},
+	onShareTimeline(res) { //分享到朋友圈
+		return {
+			title: uni.getStorageSync('tuiguang'),
+			path:'/pages/index/index',
+			imageUrl: uni.getStorageSync('tuiguangImg'),
+		}
+	},
+}

+ 61 - 0
common/time.js

@@ -0,0 +1,61 @@
+function commentTimeHandle(dateStr) {
+    // dateStr = 2018-09-06 18:47:00" 测试时间
+    var publishTime = dateStr / 1000,  //获取dataStr的秒数  打印结果--1536230820000
+        date = new Date(publishTime * 1000), //获取dateStr的标准格式 console.log(date) 打印结果  Thu Sep 06 2018 18:47:00 GMT+0800 (中国标准时间)
+        // 获取date 中的 年 月 日 时 分 秒
+        Y = date.getFullYear(),
+        M = date.getMonth() + 1,
+        D = date.getDate(),
+        H = date.getHours(),
+        m = date.getMinutes(),
+        s = date.getSeconds();
+        // 对 月 日 时 分 秒 小于10时, 加0显示 例如: 09-09 09:01
+        if (M < 10) {
+            M = '0' + M;
+        }
+        if (D < 10) {
+            D = '0' + D;
+        }
+        if (H < 10) {
+            H = '0' + H;
+        }
+        if (m < 10) {
+            m = '0' + m;
+        }
+        if (s < 10) {
+            s = '0' + s;
+        }
+        // console.log("年", Y); // 年 2018
+        // console.log("月", M); // 月 09
+        // console.log("日", D); // 日 06
+        // console.log("时", H); // 时 18
+        // console.log("分", m); // 分 47
+        // console.log("秒", s); // 秒 00
+    var nowTime = new Date().getTime() / 1000, //获取此时此刻日期的秒数
+        diffValue = nowTime - publishTime,  // 获取此时 秒数 与 要处理的日期秒数 之间的差值
+        diff_days = parseInt(diffValue / 86400),    // 一天86400秒 获取相差的天数 取整
+        diff_hours = parseInt(diffValue / 3600),    // 一时3600秒
+        diff_minutes = parseInt(diffValue / 60),
+        diff_secodes = parseInt(diffValue);
+
+        if (diff_days > 0 && diff_days < 3) {  //相差天数 0 < diff_days < 3 时, 直接返出
+            return diff_days + "天前";
+        } else if (diff_days <= 0 && diff_hours > 0) {
+            return diff_hours + "小时前";
+        } else if (diff_hours <= 0 && diff_minutes > 0) {
+            return diff_minutes + "分钟前";
+        } else if (diff_secodes < 60) {
+            if (diff_secodes <= 0) {
+                return "刚刚";
+            } else {
+                return diff_secodes + "秒前";
+            }
+        } else if (diff_days >= 3 && diff_days < 30) {
+            return M + '-' + D + ' ' + H + ':' + m;
+        } else if (diff_days >= 30) {
+            return Y + '-' + M + '-' + D + ' ' + H + ':' + m;
+        }
+}
+module.exports = {
+    timeHandle: commentTimeHandle
+}

BIN
components/colorui/.DS_Store


+ 184 - 0
components/colorui/animation.css

@@ -0,0 +1,184 @@
+/* 
+  Animation 微动画  
+  基于ColorUI组建库的动画模块 by 文晓港 2019年3月26日19:52:28
+ */
+
+/* css 滤镜 控制黑白底色gif的 */
+.gif-black{  
+  mix-blend-mode: screen;  
+}
+.gif-white{  
+  mix-blend-mode: multiply; 
+}
+
+
+/* Animation css */
+[class*=animation-] {
+    animation-duration: .5s;
+    animation-timing-function: ease-out;
+    animation-fill-mode: both
+}
+
+.animation-fade {
+    animation-name: fade;
+    animation-duration: .8s;
+    animation-timing-function: linear
+}
+
+.animation-scale-up {
+    animation-name: scale-up
+}
+
+.animation-scale-down {
+    animation-name: scale-down
+}
+
+.animation-slide-top {
+    animation-name: slide-top
+}
+
+.animation-slide-bottom {
+    animation-name: slide-bottom
+}
+
+.animation-slide-left {
+    animation-name: slide-left
+}
+
+.animation-slide-right {
+    animation-name: slide-right
+}
+
+.animation-shake {
+    animation-name: shake
+}
+
+.animation-reverse {
+    animation-direction: reverse
+}
+
+@keyframes fade {
+    0% {
+        opacity: 0
+    }
+
+    100% {
+        opacity: 1
+    }
+}
+
+@keyframes scale-up {
+    0% {
+        opacity: 0;
+        transform: scale(.2)
+    }
+
+    100% {
+        opacity: 1;
+        transform: scale(1)
+    }
+}
+
+@keyframes scale-down {
+    0% {
+        opacity: 0;
+        transform: scale(1.8)
+    }
+
+    100% {
+        opacity: 1;
+        transform: scale(1)
+    }
+}
+
+@keyframes slide-top {
+    0% {
+        opacity: 0;
+        transform: translateY(-100%)
+    }
+
+    100% {
+        opacity: 1;
+        transform: translateY(0)
+    }
+}
+
+@keyframes slide-bottom {
+    0% {
+        opacity: 0;
+        transform: translateY(100%)
+    }
+
+    100% {
+        opacity: 1;
+        transform: translateY(0)
+    }
+}
+
+@keyframes shake {
+
+    0%,
+    100% {
+        transform: translateX(0)
+    }
+
+    10% {
+        transform: translateX(-9px)
+    }
+
+    20% {
+        transform: translateX(8px)
+    }
+
+    30% {
+        transform: translateX(-7px)
+    }
+
+    40% {
+        transform: translateX(6px)
+    }
+
+    50% {
+        transform: translateX(-5px)
+    }
+
+    60% {
+        transform: translateX(4px)
+    }
+
+    70% {
+        transform: translateX(-3px)
+    }
+
+    80% {
+        transform: translateX(2px)
+    }
+
+    90% {
+        transform: translateX(-1px)
+    }
+}
+
+@keyframes slide-left {
+    0% {
+        opacity: 0;
+        transform: translateX(-100%)
+    }
+
+    100% {
+        opacity: 1;
+        transform: translateX(0)
+    }
+}
+
+@keyframes slide-right {
+    0% {
+        opacity: 0;
+        transform: translateX(100%)
+    }
+
+    100% {
+        opacity: 1;
+        transform: translateX(0)
+    }
+}

+ 65 - 0
components/colorui/components/cu-custom.vue

@@ -0,0 +1,65 @@
+<template>
+	<view>
+		<view class="cu-custom" :style="[{height:CustomBar + 'px'}]">
+			<view class="cu-bar fixed" :style="style" :class="[bgImage!=''?'none-bg text-white bg-img':'',bgColor]">
+				<view class="action" @tap="BackPage" v-if="isBack">
+					<text class="cuIcon-back"></text>
+					<slot name="backText"></slot>
+				</view>
+				<view class="content" :style="[{top:StatusBar + 'px'}]">
+					<slot name="content"></slot>
+				</view>
+				<slot name="right"></slot>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				StatusBar: this.StatusBar,
+				CustomBar: this.CustomBar
+			};
+		},
+		name: 'cu-custom',
+		computed: {
+			style() {
+				var StatusBar= this.StatusBar;
+				var CustomBar= this.CustomBar;
+				var bgImage = this.bgImage;
+				var style = `height:${CustomBar}px;padding-top:${StatusBar}px;`;
+				if (this.bgImage) {
+					style = `${style}background-image:url(${bgImage});`;
+				}
+				return style
+			}
+		},
+		props: {
+			bgColor: {
+				type: String,
+				default: ''
+			},
+			isBack: {
+				type: [Boolean, String],
+				default: false
+			},
+			bgImage: {
+				type: String,
+				default: ''
+			},
+		},
+		methods: {
+			BackPage() {
+				uni.navigateBack({
+					delta: 1
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+
+</style>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1226 - 0
components/colorui/icon.css


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 3912 - 0
components/colorui/main.css


+ 63 - 0
components/empty.vue

@@ -0,0 +1,63 @@
+<template>
+	<view class="page-box">
+		<view class="centre">
+			<image src="../static/image/empty.png" mode=""></image>
+			<view class="tips">
+				{{content}}
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			content: {
+				type: String,
+				default: '暂无内容'
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.page-box {
+		// position: relative;
+		// left: 0;
+		height: 50vh;
+	}
+	.centre {
+		position: absolute;
+		left: 0;
+		top:0;
+		right: 0;
+		bottom: 0;
+		margin: auto;
+		height: 400rpx;
+		text-align: center;
+		// padding: 200rpx auto;
+		font-size: 32rpx;
+		image {
+			width: 387rpx;
+			height: 341rpx;
+			// margin-bottom: 20rpx;
+			margin: 0 auto 20rpx;
+			// border: 1px dotted #000000;
+		}
+		.tips {
+			font-size: 32rpx;
+			color: #2F3044;
+			margin-top: 20rpx;
+			font-weight: 700;
+		}
+		.btn {
+			margin: 80rpx auto;
+			width: 600rpx;
+			border-radius: 32rpx;
+			line-height: 90rpx;
+			color: #ffffff;
+			font-size: 34rpx;
+			background: #5074FF;
+		}
+	}
+</style>

+ 269 - 0
components/permission.js

@@ -0,0 +1,269 @@
+ 
+var isIos
+// #ifdef APP-PLUS
+isIos = (plus.os.name == "iOS")
+// #endif
+ 
+// 判断推送权限是否开启
+function judgeIosPermissionPush() {
+	var result = false;
+	var UIApplication = plus.ios.import("UIApplication");
+	var app = UIApplication.sharedApplication();
+	var enabledTypes = 0;
+	if (app.currentUserNotificationSettings) {
+		var settings = app.currentUserNotificationSettings();
+		enabledTypes = settings.plusGetAttribute("types");
+		console.log("enabledTypes1:" + enabledTypes);
+		if (enabledTypes == 0) {
+			console.log("推送权限没有开启");
+		} else {
+			result = true;
+			console.log("已经开启推送功能!")
+		}
+		plus.ios.deleteObject(settings);
+	} else {
+		enabledTypes = app.enabledRemoteNotificationTypes();
+		if (enabledTypes == 0) {
+			console.log("推送权限没有开启!");
+		} else {
+			result = true;
+			console.log("已经开启推送功能!")
+		}
+		console.log("enabledTypes2:" + enabledTypes);
+	}
+	plus.ios.deleteObject(app);
+	plus.ios.deleteObject(UIApplication);
+	return result;
+}
+ 
+// 判断定位权限是否开启
+function judgeIosPermissionLocation() {
+	var result = false;
+	var cllocationManger = plus.ios.import("CLLocationManager");
+	var status = cllocationManger.authorizationStatus();
+	result = (status != 2)
+	console.log("定位权限开启:" + result);
+	// 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation
+	/* var enable = cllocationManger.locationServicesEnabled();
+	var status = cllocationManger.authorizationStatus();
+	console.log("enable:" + enable);
+	console.log("status:" + status);
+	if (enable && status != 2) {
+		result = true;
+		console.log("手机定位服务已开启且已授予定位权限");
+	} else {
+		console.log("手机系统的定位没有打开或未给予定位权限");
+	} */
+	plus.ios.deleteObject(cllocationManger);
+	return result;
+}
+ 
+// 判断麦克风权限是否开启
+function judgeIosPermissionRecord() {
+	var result = false;
+	var avaudiosession = plus.ios.import("AVAudioSession");
+	var avaudio = avaudiosession.sharedInstance();
+	var permissionStatus = avaudio.recordPermission();
+	console.log("permissionStatus:" + permissionStatus);
+	if (permissionStatus == 1684369017 || permissionStatus == 1970168948) {
+		console.log("麦克风权限没有开启");
+	} else {
+		result = true;
+		console.log("麦克风权限已经开启");
+	}
+	plus.ios.deleteObject(avaudiosession);
+	return result;
+}
+ 
+// 判断相机权限是否开启
+function judgeIosPermissionCamera() {
+	var result = false;
+	var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
+	var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');
+	console.log("authStatus:" + authStatus);
+	if (authStatus == 3) {
+		result = true;
+		console.log("相机权限已经开启");
+	} else {
+		console.log("相机权限没有开启");
+	}
+	plus.ios.deleteObject(AVCaptureDevice);
+	return result;
+}
+ 
+// 判断相册权限是否开启
+function judgeIosPermissionPhotoLibrary() {
+	var result = false;
+	var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
+	var authStatus = PHPhotoLibrary.authorizationStatus();
+	console.log("authStatus:" + authStatus);
+	if (authStatus == 3) {
+		result = true;
+		console.log("相册权限已经开启");
+	} else {
+		console.log("相册权限没有开启");
+	}
+	plus.ios.deleteObject(PHPhotoLibrary);
+	return result;
+}
+ 
+// 判断通讯录权限是否开启
+function judgeIosPermissionContact() {
+	var result = false;
+	var CNContactStore = plus.ios.import("CNContactStore");
+	var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
+	if (cnAuthStatus == 3) {
+		result = true;
+		console.log("通讯录权限已经开启");
+	} else {
+		console.log("通讯录权限没有开启");
+	}
+	plus.ios.deleteObject(CNContactStore);
+	return result;
+}
+ 
+// 判断日历权限是否开启
+function judgeIosPermissionCalendar() {
+	var result = false;
+	var EKEventStore = plus.ios.import("EKEventStore");
+	var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
+	if (ekAuthStatus == 3) {
+		result = true;
+		console.log("日历权限已经开启");
+	} else {
+		console.log("日历权限没有开启");
+	}
+	plus.ios.deleteObject(EKEventStore);
+	return result;
+}
+ 
+// 判断备忘录权限是否开启
+function judgeIosPermissionMemo() {
+	var result = false;
+	var EKEventStore = plus.ios.import("EKEventStore");
+	var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
+	if (ekAuthStatus == 3) {
+		result = true;
+		console.log("备忘录权限已经开启");
+	} else {
+		console.log("备忘录权限没有开启");
+	}
+	plus.ios.deleteObject(EKEventStore);
+	return result;
+}
+ 
+// Android权限查询
+function requestAndroidPermission(permissionID) {
+	return new Promise((resolve, reject) => {
+		plus.android.requestPermissions(
+			[permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
+			function(resultObj) {
+				var result = 0;
+				for (var i = 0; i < resultObj.granted.length; i++) {
+					var grantedPermission = resultObj.granted[i];
+					console.log('已获取的权限:' + grantedPermission);
+					result = 1
+				}
+				for (var i = 0; i < resultObj.deniedPresent.length; i++) {
+					var deniedPresentPermission = resultObj.deniedPresent[i];
+					console.log('拒绝本次申请的权限:' + deniedPresentPermission);
+					result = 0
+				}
+				for (var i = 0; i < resultObj.deniedAlways.length; i++) {
+					var deniedAlwaysPermission = resultObj.deniedAlways[i];
+					console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
+					result = -1
+				}
+				resolve(result);
+				// 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
+				// if (result != 1) {
+				// gotoAppPermissionSetting()
+				// }
+			},
+			function(error) {
+				console.log('申请权限错误:' + error.code + " = " + error.message);
+				resolve({
+					code: error.code,
+					message: error.message
+				});
+			}
+		);
+	});
+}
+ 
+// 使用一个方法,根据参数判断权限
+function judgeIosPermission(permissionID) {
+	if (permissionID == "location") {
+		return judgeIosPermissionLocation()
+	} else if (permissionID == "camera") {
+		return judgeIosPermissionCamera()
+	} else if (permissionID == "photoLibrary") {
+		return judgeIosPermissionPhotoLibrary()
+	} else if (permissionID == "record") {
+		return judgeIosPermissionRecord()
+	} else if (permissionID == "push") {
+		return judgeIosPermissionPush()
+	} else if (permissionID == "contact") {
+		return judgeIosPermissionContact()
+	} else if (permissionID == "calendar") {
+		return judgeIosPermissionCalendar()
+	} else if (permissionID == "memo") {
+		return judgeIosPermissionMemo()
+	}
+	return false;
+}
+ 
+// 跳转到**应用**的权限页面
+function gotoAppPermissionSetting() {
+	if (isIos) {
+		var UIApplication = plus.ios.import("UIApplication");
+		var application2 = UIApplication.sharedApplication();
+		var NSURL2 = plus.ios.import("NSURL");
+		// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");		
+		var setting2 = NSURL2.URLWithString("app-settings:");
+		application2.openURL(setting2);
+ 
+		plus.ios.deleteObject(setting2);
+		plus.ios.deleteObject(NSURL2);
+		plus.ios.deleteObject(application2);
+	} else {
+		// console.log(plus.device.vendor);
+		var Intent = plus.android.importClass("android.content.Intent");
+		var Settings = plus.android.importClass("android.provider.Settings");
+		var Uri = plus.android.importClass("android.net.Uri");
+		var mainActivity = plus.android.runtimeMainActivity();
+		var intent = new Intent();
+		intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+		var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
+		intent.setData(uri);
+		mainActivity.startActivity(intent);
+	}
+}
+ 
+// 检查系统的设备服务是否开启
+// var checkSystemEnableLocation = async function () {
+function checkSystemEnableLocation() {
+	if (isIos) {
+		var result = false;
+		var cllocationManger = plus.ios.import("CLLocationManager");
+		var result = cllocationManger.locationServicesEnabled();
+		console.log("系统定位开启:" + result);
+		plus.ios.deleteObject(cllocationManger);
+		return result;
+	} else {
+		var context = plus.android.importClass("android.content.Context");
+		var locationManager = plus.android.importClass("android.location.LocationManager");
+		var main = plus.android.runtimeMainActivity();
+		var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
+		var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);
+		console.log("系统定位开启:" + result);
+		return result
+	}
+}
+ 
+export {
+	judgeIosPermission,
+	requestAndroidPermission,
+	checkSystemEnableLocation,
+	gotoAppPermissionSetting
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 0
components/watch-login/css/icon.css


+ 139 - 0
components/watch-login/watch-button.vue

@@ -0,0 +1,139 @@
+<template>
+	<view>
+		<!-- 按钮 -->
+		<button :class="['buttonBorder',!_rotate?'dlbutton':'dlbutton_loading']" :style="{'background':bgColor, 'color': fontColor}">
+			<view :class="_rotate?'rotate_loop':''">
+				<text v-if="_rotate" class="cuIcon cuIcon-loading1 "></text>
+				<text v-if="!_rotate">{{ text }}</text>
+			</view>
+		</button>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			text: String, //显示文本
+			rotate: {
+				//是否启动加载
+				type: [Boolean, String],
+				default: false,
+			},
+			bgColor: {
+				//按钮背景颜色
+				type: String,
+				// default: "linear-gradient(to right, rgba(0,0,0,0.7), rgba(0,0,0,0.6))",
+			},
+			fontColor: {
+				//按钮字体颜色
+				type: String,
+				default: "#FFFFFF",
+			},
+		},
+		computed: {
+			_rotate() {
+				//处理值
+				return String(this.rotate) !== 'false'
+			},
+		}
+	}
+</script>
+
+<style>
+	@import url("./css/icon.css");
+
+	.dlbutton {
+		color: #FFFFFF;
+		font-size: 30upx;
+		width: 651upx;
+		height: 90upx;
+	
+		background: linear-gradient(to left,#FF7F00 0, #FF7F00 100%);
+		box-shadow: 0upx 0upx 13upx 0upx rgba(164, 217, 228, 0.4);
+		border-radius: 2.5rem;
+		line-height: 90upx;
+		text-align: center;
+		margin-left: auto;
+		margin-right: auto;
+		margin-top: 96upx;
+	}
+
+	.dlbutton_loading {
+		color: #FFFFFF;
+		font-size: 30upx;
+		width: 100upx;
+		height: 100upx;
+		background: linear-gradient(to left,#FF7F00 0, #FF7F00 100%);
+		box-shadow: 0upx 0upx 13upx 0upx rgba(164, 217, 228, 0.4);
+		border-radius: 2.5rem;
+		line-height: 100upx;
+		text-align: center;
+		margin-left: auto;
+		margin-right: auto;
+		margin-top: 96upx;
+	}
+
+	.buttonBorder {
+		border: none;
+		border-radius: 2.5rem;
+		-webkit-box-shadow: 0 0 60upx 0 rgba(0, 0, 0, .2);
+		box-shadow: 0 0 60upx 0 rgba(0, 0, 0, .2);
+		-webkit-transition: all 0.4s cubic-bezier(.57, .19, .51, .95);
+		-moz-transition: all 0.4s cubic-bezier(.57, .19, .51, .95);
+		-ms-transition: all 0.4s cubic-bezier(.57, .19, .51, .95);
+		-o-transition: all 0.4s cubic-bezier(.57, .19, .51, .95);
+		transition: all 0.4s cubic-bezier(.57, .19, .51, .95);
+	}
+
+	/* 旋转动画 */
+	.rotate_loop {
+		-webkit-transition-property: -webkit-transform;
+		-webkit-transition-duration: 1s;
+		-moz-transition-property: -moz-transform;
+		-moz-transition-duration: 1s;
+		-webkit-animation: rotate 1s linear infinite;
+		-moz-animation: rotate 1s linear infinite;
+		-o-animation: rotate 1s linear infinite;
+		animation: rotate 1s linear infinite;
+	}
+
+	@-webkit-keyframes rotate {
+		from {
+			-webkit-transform: rotate(0deg)
+		}
+
+		to {
+			-webkit-transform: rotate(360deg)
+		}
+	}
+
+	@-moz-keyframes rotate {
+		from {
+			-moz-transform: rotate(0deg)
+		}
+
+		to {
+			-moz-transform: rotate(359deg)
+		}
+	}
+
+	@-o-keyframes rotate {
+		from {
+			-o-transform: rotate(0deg)
+		}
+
+		to {
+			-o-transform: rotate(359deg)
+		}
+	}
+
+	@keyframes rotate {
+		from {
+			transform: rotate(0deg)
+		}
+
+		to {
+			transform: rotate(359deg)
+		}
+	}
+</style>

+ 222 - 0
components/watch-login/watch-input.vue

@@ -0,0 +1,222 @@
+<template>
+	<view class="main-list oBorder">
+		<!-- 文本框 -->
+		<input
+			class="main-input"
+			:value="value"
+			:type="_type"
+			:maxlength="maxlength"
+			:placeholder="placeholder"
+			:password="type==='password'&&!showPassword"
+			@input="onInput"
+		/>
+		
+		<!-- 是否可见密码 -->
+		<image
+			v-if="_isShowPass&&type==='password'&&!_isShowCode"
+			class="img cuIcon"
+			:class="showPassword?'cuIcon-attention':'cuIcon-attentionforbid'"
+			@tap="showPass"
+		></image>
+		<!-- 倒计时 -->
+		<view
+				v-if="_isShowCode&&!_isShowPass"
+				:class="['vercode',{'vercode-run': second>0}]"
+				@click="setCode"
+		>{{ getVerCodeSecond }}</view>
+
+
+		<view
+				v-if="_isShowGet"
+				class="vercode"
+				@click="setNumberCode"
+		>官方邀请码</view>
+
+	</view>
+</template>
+
+<script>
+	var _this, countDown;
+	export default{
+		data(){
+			return{
+				showPassword: false, //是否显示明文
+				second: 0, //倒计时
+				isRunCode: false, //是否开始倒计时
+			}
+		},
+		props:{
+			type: String, //类型
+			value: String, //值
+			placeholder: String, //框内提示
+			maxlength: {
+				//最大长度
+				type: [Number,String],
+				default: 20,
+			},
+			isShowPass:{
+				//是否显示密码图标(二选一)
+				type: [Boolean,String],
+				default: false,
+			},
+			isShowCode:{
+				//是否显示获取验证码(二选一)
+				type: [Boolean,String],
+				default: false,
+			},
+			isShowGet:{
+				//是否显示获取验证码(二选一)
+				type: [Boolean,String],
+				default: false,
+			},
+			codeText:{
+				type: String,
+				default: "获取验证码",
+			},
+			setTime:{
+				//倒计时时间设置
+				type: [Number,String],
+				default: 60,
+			}
+		},
+		model: {
+			prop: 'value',
+			event: 'input'
+		},
+		mounted() {
+			_this=this
+			//准备触发
+			this.$on('runCode',(val)=>{
+                this.runCode(val);
+            });
+			clearInterval(countDown);//先清理一次循环,避免缓存
+		},
+		methods:{
+			showPass(){
+				//是否显示密码
+				this.showPassword = !this.showPassword
+			},
+			onInput(e) {
+				//传出值
+				this.$emit('input', e.target.value)
+			},
+			setCode(){
+				//设置获取验证码的事件
+				if(this.isRunCode){
+					//判断是否开始倒计时,避免重复点击
+					return false;
+				}
+				this.$emit('setCode')
+			},
+			setNumberCode(){
+				this.$emit('setNumberCode')
+			},
+			runCode(val){
+				//开始倒计时
+				if(String(val)=="0"){
+
+					//判断是否需要终止循环
+					this.second = 0; //初始倒计时
+					clearInterval(countDown);//清理循环
+					this.isRunCode= false; //关闭循环状态
+					return false;
+				}
+				if(this.isRunCode){
+					//判断是否开始倒计时,避免重复点击
+					return false;
+				}
+				this.isRunCode= true
+				this.second = this._setTime //倒数秒数
+
+				let _this=this;
+				countDown = setInterval(function(){
+					_this.second--
+					if(_this.second==0){
+						_this.isRunCode= false
+						clearInterval(countDown)
+					}
+				},1000)
+			}
+
+
+		},
+		computed:{
+			_type(){
+				//处理值
+				const type = this.type
+				return type == 'password' ? 'text' : type
+			},
+			_isShowPass() {
+				//处理值
+				return String(this.isShowPass) !== 'false'
+			},
+			_isShowCode() {
+				//处理值
+				return String(this.isShowCode) !== 'false'
+			},
+			_isShowGet() {
+				//处理值
+				return String(this.isShowGet) !== 'false'
+			},
+			_setTime() {
+				//处理值
+				const setTime = Number(this.setTime)
+				return setTime>0 ? setTime : 60
+			},
+			getVerCodeSecond(){
+				//验证码倒计时计算
+				if(this.second<=0){
+					return this.codeText;
+				}else{
+					if(this.second<10){
+						return '0'+this.second;
+					}else{
+						return this.second;
+					}
+				}
+
+			}
+		}
+	}
+</script>
+
+<style>
+	@import url("./css/icon.css");
+
+	.main-list{
+		display: flex;
+		flex-direction: row;
+		justify-content: space-between;
+		align-items: center;
+		height: 90upx;   /* Input 高度 */
+		color: #333333;
+		padding: 32upx;
+		margin-top:18upx;
+		margin-bottom: 18upx;
+	}
+	.img{
+		width: 32upx;
+		height: 32upx;
+		font-size: 32upx;
+	}
+	.main-input{
+		flex: 1;
+		text-align: left;
+		font-size: 28upx;
+		padding-right: 10upx;
+		/* margin-left: 20upx; */
+	}
+	.vercode {
+		color: rgba(0,0,0,0.7);
+		font-size: 24upx;
+		line-height: 100upx;
+	}
+	.vercode-run {
+		color: rgba(0,0,0,0.4) !important;
+	}
+	.oBorder{
+		width: 96%;
+			border-bottom: 1px solid #E6E6E6;
+	 
+	}
+</style>

+ 7 - 0
file/ReadMe.txt

@@ -0,0 +1,7 @@
+同城外卖骑手端:
+包名:com.qsd.tcwm
+别名:tcwaqs
+秘钥:123456
+md5:49:3F:47:8B:15:F6:61:94:A2:AC:F4:DA:BA:72:5C:CD
+SHA1:29:66:5D:1C:DC:61:76:B7:25:84:4D:BE:26:53:38:26:F3:20:21:83
+sha256:79:70:AD:DA:0A:9A:90:94:71:4E:F1:D7:27:8A:B2:B6:C1:53:9B:93:30:39:E4:BE:64:1D:78:38:4B:D5:91:CC

BIN
file/mxkj.keystore


BIN
file/tcwmqs.keystore


+ 65 - 0
main.js

@@ -0,0 +1,65 @@
+import Vue from 'vue'
+import App from './App'
+import HttpRequest from './common/httpRequest'
+import HttpCache from './common/cache'
+import queue from './common/queue'
+import share from './common/share.js'
+
+// 引入全局uView
+import uView from "uview-ui";
+Vue.use(uView);
+// 全局获取位置
+Vue.prototype.getLocation = function () {
+  return new Promise(function (resolve, reject) {
+    showLoading();
+    uni.getLocation({
+      type: "wgs84",
+      success: function (res) {
+        hideLoading();
+        resolve(res);
+      },
+      fail: function () {
+        hideLoading();
+        uni.showModal({
+          title: "请求授权当前位置",
+          content: "我们需要获取地理位置信息,为您推荐附近的订单",
+          success: (res) => {
+            if (res.confirm) {
+              uni.openSetting().then((res) => {
+                if (res[1].authSetting["scope.userLocation"] === true) {
+                  uni.getLocation({
+                    type: "wgs84",
+                    success: function (res) {
+                      resolve(res);
+                    },
+                  });
+                } else {
+                  uni.showToast({
+                    title: "您拒绝了授权当前位置",
+                  });
+                }
+              });
+            } else if (res.cancel) {
+              uni.showToast({
+                title: "您拒绝了授权当前位置",
+              });
+            }
+          },
+        });
+      },
+    });
+  });
+};
+
+Vue.config.productionTip = false
+Vue.prototype.$Request = HttpRequest;
+Vue.prototype.$queue = queue;
+Vue.prototype.$Sysconf = HttpRequest.config;
+Vue.prototype.$SysCache = HttpCache;
+Vue.mixin(share)
+App.mpType = 'app'
+
+const app = new Vue({
+    ...App
+})
+app.$mount()

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 216 - 0
manifest.json


+ 34 - 0
package-lock.json

@@ -0,0 +1,34 @@
+{
+  "name": "rider",
+  "version": "1.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@koa/cors": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-3.1.0.tgz",
+      "integrity": "sha512-7ulRC1da/rBa6kj6P4g2aJfnET3z8Uf3SWu60cjbtxTA5g8lxRdX/Bd2P92EagGwwAhANeNw8T8if99rJliR6Q==",
+      "requires": {
+        "vary": "^1.1.2"
+      }
+    },
+    "egg-cors": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/egg-cors/-/egg-cors-2.2.3.tgz",
+      "integrity": "sha512-MLG4pQekZpycLXR45ZAIgFpFYshosBxu1CMdhXAzqPzxUn0xI21gVzqLqcxUrzzulaErCwG6qMXaS1eFyj9u2w==",
+      "requires": {
+        "@koa/cors": "^3.0.0"
+      }
+    },
+    "uview-ui": {
+      "version": "1.8.4",
+      "resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-1.8.4.tgz",
+      "integrity": "sha512-Zr+D5dFdNy6CdHQLBEXeGq/w0LkjxzBtsgaaDwLl0P58g67H7fBBDvy6AzWK/k0c7dwPYMBiK7I4Tr9p92+0DA=="
+    },
+    "vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+    }
+  }
+}

+ 17 - 0
package.json

@@ -0,0 +1,17 @@
+{
+  "name": "rider",
+  "version": "1.0.0",
+  "description": "",
+  "main": "main.js",
+  "dependencies": {
+    "egg-cors": "^2.2.3",
+    "uview-ui": "^1.8.4"
+  },
+  "devDependencies": {},
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "keywords": [],
+  "author": "",
+  "license": "ISC"
+}

+ 292 - 0
pages.json

@@ -0,0 +1,292 @@
+{
+    "easycom" : {
+        "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
+    },
+    "pages" : [
+        //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+        
+        {
+            "path" : "pages/index/index",
+            "style" : {
+                "navigationBarTitleText" : "",
+                "enablePullDownRefresh" : true,
+                "navigationStyle" : "custom",
+                "navigationBarTextStyle" : "black"
+            }
+        },
+        {
+            "path" : "pages/riderMy/riderMy",
+            "style" : {
+                "navigationBarTitleText" : "我的",
+                "enablePullDownRefresh" : false,
+				"navigationBarBackgroundColor":"#fed9ba"
+                // "navigationStyle" : "custom",
+                // "navigationBarTextStyle" : "black"
+            }
+        },
+		{
+		    "path" : "pages/riderMy/updateNickName",
+		    "style" : {
+		        "navigationBarTitleText" : "修改昵称",
+		        "enablePullDownRefresh" : false,
+				"navigationBarBackgroundColor":"#fed9ba"
+		        // "navigationStyle" : "custom",
+		        // "navigationBarTextStyle" : "black"
+		    }
+		},
+		{
+		    "path" : "pages/riderMy/set/set",
+		    "style" : {
+		        "navigationBarTitleText" : "系统设置",
+		        "enablePullDownRefresh" : false
+		    }
+		},
+		{
+		    "path" : "pages/riderMy/set/yijian",
+		    "style" : {
+		        "navigationBarTitleText" : "意见反馈",
+		        "enablePullDownRefresh" : false
+		    }
+		},
+		{
+		    "path" : "pages/riderMy/kefu/chat",
+		    "style" : {
+		        "navigationBarTitleText" : "联系客服"
+		        // "enablePullDownRefresh" : false
+		    }
+		},
+		{
+		    "path" : "pages/riderMy/kefu/liaotianshi",
+		    "style" : {
+		        "navigationBarTitleText" : "聊天室",
+		        "enablePullDownRefresh" : false
+		    }
+		},
+		{
+		    "path" : "pages/riderMy/kefu/liaotian",
+		    "style" : {
+		        "navigationBarTitleText" : "消息中心",
+		        "enablePullDownRefresh" : true
+		    }
+		},
+        {
+            "path" : "pages/riderMy/approve/approve",
+            "style" : {
+                "navigationBarTitleText" : "",
+                "enablePullDownRefresh" : false
+            }
+        },
+        {
+            "path" : "pages/index/buyOrder/buyOrder",
+            "style" : {
+                "navigationBarTitleText" : "任务详情",
+                "enablePullDownRefresh" : false
+            }
+        },
+        {
+            "path" : "pages/index/cityOrder/cityOrder",
+            "style" : {
+                "navigationBarTitleText" : "任务详情",
+                "enablePullDownRefresh" : false
+            }
+        },
+        {
+            "path" : "pages/index/orderdetail/orderdetail",
+            "style" : {
+                "navigationBarTitleText" : "订单详情",
+                "enablePullDownRefresh" : false
+            }
+        },
+		{
+		    "path" : "pages/index/orderdetail/navigation",
+		    "style" : {
+		        "navigationBarTitleText" : "导航",
+		        "enablePullDownRefresh" : false
+		    }
+		},
+        {
+            "path" : "pages/riderMy/myAccount/myAccount",
+            "style" : {
+                "navigationBarTitleText" : "资金账户",
+                "enablePullDownRefresh" : false
+            }
+        },
+        {
+            "path" : "pages/riderMy/myAccount/AcontMoney/AcontMoney",
+            "style" : {
+                "navigationBarTitleText" : "保证金",
+                "enablePullDownRefresh" : false
+            }
+        },
+        {
+            "path" : "pages/riderMy/myAccount/Acontlist/Acontlist",
+            "style" : {
+                "navigationBarTitleText" : "账户明细",
+                "enablePullDownRefresh" : true
+            }
+        },
+		{
+		    "path" : "pages/riderMy/myAccount/AcontMoney/Acontlist",
+		    "style" : {
+		        "navigationBarTitleText" : "保证金明细",
+		        "enablePullDownRefresh" : true
+		    }
+		},
+        {
+            "path" : "pages/riderMy/myComment/myComment",
+            "style" : {
+                "navigationBarTitleText" : "我的评价",
+                "enablePullDownRefresh" : true
+            }
+        },
+        {
+            "path" : "pages/riderMy/myComplain/myComplain",
+            "style" : {
+                "navigationBarTitleText" : "违规申诉",
+                "enablePullDownRefresh" : false
+            }
+        },
+        {
+            "path" : "pages/riderMy/myComplain/online_complain/online_complain",
+            "style" : {
+                "navigationBarTitleText" : "在线申诉",
+                "enablePullDownRefresh" : false
+            }
+        },
+        {
+            "path" : "pages/riderMy/myOnline/myOnline",
+            "style" : {
+                "navigationBarTitleText" : "在线申诉",
+                "enablePullDownRefresh" : false
+            }
+        }, {
+			"path": "pages/login/login",
+			"style": {
+				"navigationBarTitleText": "登录",
+				"enablePullDownRefresh": false
+			}
+		}, {
+			"path": "pages/login/forgetPwd",
+			"style": {
+				"navigationBarTitleText": "忘记密码",
+				"enablePullDownRefresh": false
+			}
+		}, {
+			"path": "pages/login/running_rider/running_rider",
+			"style": {
+				"navigationBarTitleText": "骑手注册",
+				"enablePullDownRefresh": false
+			}
+		}
+        ,{
+            "path" : "pages/riderMy/myAccount/Txmoney/Txmoney",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "余额提现",
+                "enablePullDownRefresh": false
+            }
+            
+        },
+		{
+		    "path" : "pages/riderMy/order",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "我的订单",
+		        "enablePullDownRefresh": true
+		    }
+		    
+		},
+		{
+		    "path" : "pages/riderMy/set/xieyi",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "用户协议",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		},{
+		    "path" : "pages/riderMy/set/about",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "关于我们",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		},
+		{
+		    "path" : "pages/riderMy/set/mimi",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "隐私政策",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		},
+		{
+		    "path" : "pages/riderMy/paotuixieyi",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "跑腿代购协议",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		},
+		{
+		    "path" : "pages/riderMy/trainingCenter",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "培训中心",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		},
+		{
+		    "path" : "pages/riderMy/trainingList",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "帮助中心",
+		        "enablePullDownRefresh": true
+		    }
+		    
+		},
+		{
+		    "path" : "pages/riderMy/profit",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "收益明细",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		},
+		{
+			"path": "pages/riderMy/myAccount/AcontMoney/cashList",
+			"style": {
+				"navigationBarTitleText": "提现记录",
+				"enablePullDownRefresh": false
+			} 
+		},
+		{
+			"path": "pages/riderMy/myAccount/AcontMoney/zhifubao",
+			"style": {
+				"navigationBarTitleText": "提现账号",
+				"enablePullDownRefresh": false
+			}
+		}
+    ],
+    "globalStyle" : {
+        "navigationBarTextStyle" : "black",
+        "navigationBarTitleText" : "同城外卖骑手端",
+        "navigationBarBackgroundColor" : "#FFFFFF",
+        "backgroundColor" : "#F8F8F8"
+    },
+	"condition" : { //模式配置,仅开发期间生效
+		"current": 0, //当前激活的模式(list 的索引项)
+		"list": [
+			{
+				"name": "", //模式名称
+				"path": "", //启动页面,必选
+				"query": "" //启动参数,在页面的onLoad函数里面得到
+			}
+		]
+	}
+}

+ 937 - 0
pages/index/buyOrder/buyOrder.vue

@@ -0,0 +1,937 @@
+<template>
+	<view class="content">
+		<view class="list_box1">
+			<view class="part2" v-if="orderDelites.indentType == 1 || orderDelites.indentType == 2">
+				<view class="box_add">
+					<!-- <view class="distance">
+						<view v-if="orderDelites.distancess>1000">{{(Number(orderDelites.distancess) / 1000).toFixed(2)}}</view>
+						<view v-else>{{Number(orderDelites.distancess?(orderDelites.distancess).toFixed(2):0)}}</view>
+						<view class="a" v-if="orderDelites.distancess>1000">km</view>
+						<view class="a" v-else>m</view>
+						<view>{{orderDelites.distancess}}</view>
+					</view> -->
+					<view class="add_name" @click="goStart()">
+						<view class="flex align-center">
+							<view class="buy">
+								<image src="../../../static/rider/icon-buy.png"></image>
+							</view>
+							<view class="sh_name">
+								{{orderDelites.shopAddressDetail}}({{orderDelites.shopProvince?orderDelites.shopProvince:''}}{{orderDelites.shopCity?orderDelites.shopCity:''}}{{orderDelites.shopDistrict?orderDelites.shopDistrict:''}})
+								<u-icon name="map"></u-icon>
+							</view>
+						</view>
+						<!-- 	<view class="xs_add">
+							{{orderDelites.shopProvince?orderDelites.shopProvince:''}}{{orderDelites.shopCity?orderDelites.shopCity:''}}
+							{{orderDelites.shopDistrict?orderDelites.shopDistrict:''}}
+						</view> -->
+					</view>
+				</view>
+				<!-- <view class="jiantou">
+					<image src="../../../static/rider/jiantou.png"></image>
+					<view>{{orderDelites.distance}}</view>
+				</view> -->
+				<view class="box_add">
+					<!-- <view class="distance">
+						<view v-if="orderDelites.distance>1000">{{(Number(orderDelites.distance)/ 1000).toFixed(2)}}</view>
+						<view v-else>{{Number(orderDelites.distance?(orderDelites.distance).toFixed(2):0)}}</view>
+						<view class="a" v-if="orderDelites.distance>1000">km</view>
+						<view class="a" v-else>m</view>
+						<view>{{orderDelites.distancessd}}</view>
+					</view> -->
+					<view class="add_name" @click="goEnd()">
+						<view class="flex align-center">
+							<view class="send">
+								<image src="../../../static/rider/icon-send.png"></image>
+							</view>
+							<view class="sh_name">
+								{{orderDelites.userAddressDetail}}({{orderDelites.userProvince?orderDelites.userProvince:''}}{{orderDelites.userCity?orderDelites.userCity:''}}{{orderDelites.userDistrict?orderDelites.userDistrict:''}})
+								<u-icon name="map"></u-icon>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="part2" v-if="orderDelites.indentType == 3 && orderDelites.buyType==0">
+				<view class="box_add">
+					<!-- <view class="distance">
+						<view v-if="orderDelites.distance>1000">{{(Number(orderDelites.distance)/ 1000).toFixed(2)}}</view>
+						<view v-else>{{Number(orderDelites.distance?(orderDelites.distance).toFixed(2):0)}}</view>
+						<view class="a" v-if="orderDelites.distance>1000">km</view>
+						<view class="a" v-else>m</view>
+						<view>{{orderDelites.distancessd}}</view>
+					</view> -->
+					<view class="add_name flex align-center" @click="goEnd()">
+						<view class="send">
+							<image src="../../../static/rider/icon-send.png"></image>
+						</view>
+						<view class="sh_name">
+							{{orderDelites.userAddressDetail}}({{orderDelites.userProvince?orderDelites.userProvince:''}}{{orderDelites.userCity?orderDelites.userCity:''}}{{orderDelites.userDistrict?orderDelites.userDistrict:''}})
+							<u-icon name="map"></u-icon>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="part2" v-if="orderDelites.indentType == 3 && orderDelites.buyType==1">
+				<view class="box_add">
+					<!-- <view class="distance">
+						<view v-if="orderDelites.distancess>1000">{{(Number(orderDelites.distancess) / 1000).toFixed(2)}}</view>
+						<view v-else>{{Number(orderDelites.distancess?(orderDelites.distancess).toFixed(2):0)}}</view>
+						<view class="a" v-if="orderDelites.distancess>1000">km</view>
+						<view class="a" v-else>m</view>
+						<view>{{orderDelites.distancess}}</view>
+					</view> -->
+					<view class="add_name flex" @click="goStart()">
+						<view class="buy">
+							<image src="../../../static/rider/icon-buy.png"></image>
+						</view>
+						<view class="sh_name">
+							{{orderDelites.shopAddressDetail}}({{orderDelites.shopProvince?orderDelites.shopProvince:''}}{{orderDelites.shopCity?orderDelites.shopCity:''}}{{orderDelites.shopDistrict?orderDelites.shopDistrict:''}})
+							<u-icon name="map"></u-icon>
+						</view>
+						<!-- <view class="xs_add">
+							{{orderDelites.shopProvince?orderDelites.shopProvince:''}}{{orderDelites.shopCity?orderDelites.shopCity:''}}
+								{{orderDelites.shopDistrict?orderDelites.shopDistrict:''}}
+						</view> -->
+					</view>
+				</view>
+				<!-- <view class="jiantou">
+					<image src="../../../static/rider/jiantou.png"></image>
+					<view>{{orderDelites.distance}}</view>
+				</view> -->
+				<view class="box_add">
+					<!-- <view class="distance">
+						<view v-if="orderDelites.distance>1000">{{(Number(orderDelites.distance)/ 1000).toFixed(2)}}</view>
+						<view v-else>{{Number(item.distance?(item.distance).toFixed(2):0)}}</view>
+						<view class="a" v-if="orderDelites.distance>1000">km</view>
+						<view class="a" v-else>m</view>
+						<view>{{orderDelites.distancessd}}</view>
+					</view> -->
+					<view class="add_name" @click="goEnd()">
+						<view class="flex align-center">
+							<view class="send">
+								<image src="../../../static/rider/icon-send.png"></image>
+							</view>
+							<view class="sh_name">
+								{{orderDelites.userAddressDetail}}({{orderDelites.userProvince?orderDelites.userProvince:''}}{{orderDelites.userCity?orderDelites.userCity:''}}{{orderDelites.userDistrict?orderDelites.userDistrict:''}})
+								<u-icon name="map"></u-icon>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="part2" v-if="orderDelites.indentType == 4">
+				<view class="box_add">
+					<view class="distance">
+						<!-- <view v-if="orderDelites.distancessd>1000">{{(Number(orderDelites.distancessd)/ 1000).toFixed(2)}}</view>
+						<view v-else>{{Number(orderDelites.distancessd?(orderDelites.distancessd).toFixed(2):0)}}</view>
+						<view class="a" v-if="orderDelites.distancessd>1000">km</view>
+						<view class="a" v-else>m</view> -->
+						<!-- <view>{{orderDelites.distancessd}}</view> -->
+					</view>
+					<view class="add_name" @click="goEnd()">
+						<view class="send">
+							<image src="../../../static/rider/icon-send.png"></image>
+						</view>
+						<view class="sh_name">
+							{{orderDelites.userAddressDetail}}({{orderDelites.userProvince?orderDelites.userProvince:''}}{{orderDelites.userCity?orderDelites.userCity:''}}{{orderDelites.userDistrict?orderDelites.userDistrict:''}})
+							<u-icon name="map"></u-icon>
+						</view>
+					</view>
+				</view>
+			</view>
+
+			<view class="part2" v-if="orderDelites.indentType == 5">
+				<view class="box_add">
+					<view class="distance">
+						<!-- <view v-if="orderDelites.distancess>1000">{{(Number(orderDelites.distancess) / 1000).toFixed(2)}}</view>
+						<view v-else>{{Number(orderDelites.distancess?(orderDelites.distancess).toFixed(2):0)}}</view>
+						<view class="a" v-if="orderDelites.distancess>1000">km</view>
+						<view class="a" v-else>m</view> -->
+						<view>{{orderDelites.distancess}}</view>
+					</view>
+					<view class="add_name" @click="goStart()">
+						<view class="flex align-center">
+							<view class="buy">
+								<image src="../../../static/rider/icon-buy.png"></image>
+							</view>
+							<view class="sh_name">
+								{{orderDelites.shopAddressDetail}}
+								<u-icon name="map"></u-icon>
+							</view>
+						</view>
+						<view class="xs_add">
+							{{orderDelites.shopProvince?orderDelites.shopProvince:''}}{{orderDelites.shopCity?orderDelites.shopCity:''}}
+							{{orderDelites.shopDistrict?orderDelites.shopDistrict:''}}
+						</view>
+					</view>
+				</view>
+				<view class="jiantou">
+					<image src="../../../static/rider/jiantou.png"></image>
+					<!-- <view>{{orderDelites.distance}}</view> -->
+				</view>
+				<view class="box_add">
+					<view class="distance">
+						<!-- <view v-if="orderDelites.distance>1000">{{(Number(orderDelites.distance)/ 1000).toFixed(2)}}</view>
+						<view v-else>{{Number(item.distance?(item.distance).toFixed(2):0)}}</view>
+						<view class="a" v-if="orderDelites.distance>1000">km</view>
+						<view class="a" v-else>m</view> -->
+						<view>{{orderDelites.distancessd}}</view>
+					</view>
+					<view class="add_name" @click="goEnd()">
+						<view class="flex align-center">
+							<view class="send">
+								<image src="../../../static/rider/icon-send.png"></image>
+							</view>
+							<view class="sh_name">
+								{{orderDelites.userAddressDetail}}({{orderDelites.userProvince?orderDelites.userProvince:''}}{{orderDelites.userCity?orderDelites.userCity:''}}{{orderDelites.userDistrict?orderDelites.userDistrict:''}})
+								<u-icon name="map"></u-icon>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<!-- tip -->
+		<view class="tip_box" v-if="orderDelites.indentType != 5">
+			<view class="tip_part1">
+				<view class="tip_title" v-if="orderDelites.indentType == 1">帮送清单</view>
+				<view class="tip_title" v-if="orderDelites.indentType == 2">帮取清单</view>
+				<view class="tip_title" v-if="orderDelites.indentType == 3">帮买清单</view>
+				<view class="tip_title" v-if="orderDelites.indentType == 4">服务内容</view>
+				<view class="tip_rider" v-if="orderDelites.prepayMoney">
+					用户预付:¥<text>{{orderDelites.prepayMoney}}</text>
+				</view>
+
+				<view class="box_two1" v-if="orderDelites.itemType">{{orderDelites.itemType}}</view>
+				<view class="box_two1" v-if="orderDelites.itemValue">{{orderDelites.itemValue}}</view>
+				<view class="box_two1" v-if="orderDelites.itemWeight">{{orderDelites.itemWeight}}</view>
+			</view>
+			<u-line color="#F2F2F2" />
+			<view class="tip_content" v-if="orderDelites.indentType == 3">
+				{{orderDelites.productDetails?orderDelites.productDetails:''}}
+			</view>
+			<view class="tip_content"
+				v-if="orderDelites.indentType == 1 || orderDelites.indentType == 2&&orderDelites.remarks">
+				备注:{{orderDelites.remarks?orderDelites.remarks:''}}</view>
+			<view class="tip_content" v-if="orderDelites.indentType == 4">
+				{{orderDelites.serviceDetails?orderDelites.serviceDetails:''}}
+			</view>
+		</view>
+		<!-- 订单信息 -->
+		<view class="order_box">
+			<view class="order_title">订单信息</view>
+			<view class="order_list">
+				<view class="order_name">订单号码</view>
+				<view class="order_numbers" @click="copyOrder(orderDelites.indentNumber)">{{orderDelites.indentNumber}}
+					<u-icon name="order"></u-icon>
+				</view>
+			</view>
+			<view class="order_list">
+				<view class="order_name">送达时间</view>
+				<view class="order_numbers">
+					{{orderDelites.sendOutTime?orderDelites.sendOutTime:'立即配送'}}
+				</view>
+			</view>
+			<view class="order_list" v-if="orderDelites.remarks">
+				<view class="order_name">订单备注</view>
+				<view class="order_numbers">
+					{{orderDelites.remarks}}
+				</view>
+			</view>
+			<!-- <view class="order_list">
+				<view class="order_name">发票抬头</view>
+				<view class="order_numbers">无(不需要发票)</view>
+			</view> -->
+		</view>
+		<!-- 费用明细 -->
+		<view class="order_box">
+			<view class="order_title">费用明细</view>
+			<view class="order_list">
+				<view class="income_name">跑腿费</view>
+				<view class="income_numbers">¥<text>{{orderDelites.errandMoney}}</text></view>
+			</view>
+			<view class="order_list" v-if="orderDelites.tip">
+				<view class="income_name">小费奖励</view>
+				<view class="income_numbers">¥<text>{{orderDelites.tip?orderDelites.tip:0}}</text></view>
+			</view>
+			<view class="order_list" v-if="orderDelites.prepayMoney">
+				<view class="income_name">商品费用</view>
+				<view class="income_numbers1">¥<text>{{orderDelites.prepayMoney}}</text></view>
+			</view>
+		</view>
+		<!-- 接单按钮 -->
+		<view class="tabbar_btn">
+			<view class="btn" @click="bindorder">
+				接单
+			</view>
+		</view>
+	</view>
+
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				orderDelites: {},
+				longitude: '', //骑手起点经度
+				latitude: '', //骑手起点纬度
+				qiJuli: '', //骑手距离
+				dianJuli: '', //店家之间距离
+				checkCertification: '',
+				userId: '',
+				arr: [],
+				showModal: false
+			}
+		},
+		onLoad(options) {
+			uni.showLoading({
+				title: '加载中......',
+				icon: 'none'
+			})
+			console.log(options)
+			this.indentNumber = options.id
+			var that = this
+			uni.getLocation({
+				type: 'wgs84',
+				success: function(res) {
+					console.log('当前位置的经度:' + res.longitude);
+					console.log('当前位置的纬度:' + res.latitude);
+					that.longitude = res.longitude
+					that.latitude = res.latitude
+					that.taskData()
+				}
+			});
+			that.userId = that.$queue.getData("userId");
+		},
+		onShow() {
+			this.checkCertification = this.$queue.getData("checkCertification");
+			//用户端骑手转单订单通知 335
+			this.$Request.getT('/app/common/type/335').then(res => {
+				if (res.code === 0) {
+					this.arr = [];
+					this.arr.push(res.data.value)
+				}
+			});
+			// #ifdef MP-WEIXIN
+			//订阅
+			if (this.userId) {
+				if (this.showModal) {
+					this.openMsg()
+				}
+			}
+			// #endif
+		},
+		methods: {
+			openMsg() {
+				console.log('订阅消息')
+				var that = this
+				uni.getSetting({
+					withSubscriptions: true, //是否获取用户订阅消息的订阅状态,默认false不返回
+					success(ret) {
+						console.log(ret.subscriptionsSetting, '------------------')
+						// if (ret.subscriptionsSetting.itemSettings && Object.keys(ret.subscriptionsSetting.itemSettings).length == 2) {
+						if (ret.subscriptionsSetting.itemSettings) {
+							uni.setStorageSync('sendOrderMsg', true)
+							uni.openSetting({ // 打开设置页 
+								success(rea) {
+									console.log(rea.authSetting)
+								}
+							});
+						} else { // 用户没有点击“总是保持以上,不再询问”则每次都会调起订阅消息
+							uni.setStorageSync('sendOrderMsg', false)
+							uni.showModal({
+								title: '提示',
+								content: '为了更好的体验,请绑定消息推送',
+								confirmText: '确定',
+								cancelText: '取消',
+								success: function(res) {
+									if (res.confirm) {
+										wx.requestSubscribeMessage({
+											tmplIds: that.arr,
+											success(re) {
+												var datas = JSON.stringify(re);
+												if (datas.indexOf("accept") != -1) {
+													console.log(re)
+													// uni.setStorageSync('sendMsg', true)
+												}
+											},
+											fail: (res) => {
+												console.log(res)
+											}
+										})
+										// uni.setStorageSync('sendMsg', true)
+
+										that.showModal = false
+									} else if (res.cancel) {
+										console.log('取消')
+										// uni.setStorageSync('sendMsg', false)
+										// that.showModal = true
+									}
+								}
+							})
+						}
+					}
+				})
+			},
+			copyOrder(value) {
+				// #ifdef MP-WEIXIN
+				if (uni.getStorageSync('sendOrderMsg')) {
+					uni.requestSubscribeMessage({
+						tmplIds: this.arr,
+						success(re) {
+							// console.log(re,'**********')
+							var datas = JSON.stringify(re);
+							if (datas.indexOf("accept") != -1) {
+								console.log(re)
+							}
+						},
+						fail: (res) => {
+							console.log(res)
+						}
+					})
+				}
+				// #endif
+				uni.setClipboardData({
+					data: value, //要被复制的内容
+					success: () => { //复制成功的回调函数
+						uni.showToast({ //提示
+							title: '复制成功'
+						})
+					}
+				});
+			},
+			// 获取任务数据
+			taskData() {
+				this.$Request.postT('/app/tbindent/indentMessage', {
+					indentNumber: this.indentNumber,
+					ol: this.longitude,
+					od: this.latitude
+				}).then(res => {
+					if (res.code == 0) {
+						uni.hideLoading()
+						if (res.data.distancess > 1000) {
+							res.data.distancess = Number((res.data.distancess / 1000)).toFixed(2) + "km"
+						} else {
+							if (res.data.distancess == 0) {
+								res.data.distancess = "0m";
+							} else {
+								res.data.distancess = Number(res.data.distancess).toFixed(1) + "m";
+							}
+						}
+
+						if (res.data.distance > 1000) {
+							res.data.distance = Number((res.data.distance / 1000)).toFixed(2) + "km"
+						} else {
+							res.data
+							if (res.data.distance == 0) {
+								res.data.distance = "0m";
+							} else {
+								res.data.distance = Number(res.data.distance).toFixed(1) + "m";
+							}
+						}
+
+						if (res.data.distancessd > 1000) {
+							res.data.distancessd = Number((res.data.distancessd / 1000)).toFixed(2) + "km"
+						} else {
+							if (res.data.distancessd == 0) {
+								res.data.distancessd = "0m";
+							} else {
+								res.data.distancessd = Number(res.data.distancessd).toFixed(1) + "m";
+							}
+						}
+
+						this.orderDelites = res.data
+					} else {
+						console.log('失败:', res.data)
+					}
+
+				});
+			},
+			bindorder() {
+				let that = this
+				if (!that.userId) {
+					uni.showModal({
+						title: '提示',
+						content: '请先登录后再接单',
+						success: function(res) {
+							if (res.confirm) {
+								console.log('用户点击确定');
+								uni.navigateTo({
+									url: '/pages/login/login'
+								})
+							} else if (res.cancel) {
+								console.log('用户点击取消');
+							}
+						}
+					});
+					return;
+				}
+				// #ifdef MP-WEIXIN
+				if (uni.getStorageSync('sendOrderMsg')) {
+					uni.requestSubscribeMessage({
+						tmplIds: this.arr,
+						success(re) {
+							// console.log(re,'**********')
+							var datas = JSON.stringify(re);
+							if (datas.indexOf("accept") != -1) {
+								console.log(re)
+							}
+						},
+						fail: (res) => {
+							console.log(res)
+						}
+					})
+				}
+				// #endif
+				if (that.checkCertification == null) {
+					uni.showModal({
+						title: '提示',
+						content: '请先实名认证后再接单',
+						success: function(res) {
+							if (res.confirm) {
+								console.log('用户点击确定');
+								uni.navigateTo({
+									url: '/pages/riderMy/approve/approve'
+								})
+							} else if (res.cancel) {
+								console.log('用户点击取消');
+							}
+						}
+					});
+					return;
+				}
+				if (that.checkCertification == 0) {
+					uni.showToast({
+						title: '实名认证审核中,无法接单',
+						icon: 'none'
+					});
+					return;
+				}
+				if (that.checkCertification == 2) {
+					uni.showToast({
+						title: '实名认证未通过,无法接单',
+						icon: 'none'
+					});
+					return;
+				}
+				uni.showModal({
+					title: '提示',
+					content: '确认接单吗',
+					success: function(res) {
+						if (res.confirm) {
+							console.log('用户点击确定');
+							that.$Request.postT('/app/tbindent/indentReceiving', {
+								indentNumber: that.indentNumber
+							}).then(res => {
+								if (res.code == 0) {
+									uni.navigateTo({
+										url: '/pages/index/orderdetail/orderdetail?id=' + that
+											.indentNumber
+									})
+								} else {
+									console.log('失败:', res.data)
+									uni.showToast({
+										title: res.msg,
+										icon: 'none',
+										duration: 1500
+									});
+									setTimeout(()=>{
+										uni.reLaunch({
+											url:'/pages/index/index'
+										})
+									},1500)
+								}
+							});
+						} else if (res.cancel) {
+							console.log('用户点击取消');
+						}
+					}
+				});
+
+
+			},
+			// 计算两点之间的距离
+			jsjl(qj, qw, jj, jw) {
+				this.$Request.postT('/app/indent/findNewIndent', {
+					ol: qj,
+					od: qw,
+					dl: jj,
+					dd: jw
+				}).then(res => {
+					// if(){
+
+					// }
+				});
+			},
+			goStart() {
+				// let obj = {
+				// 	name: this.orderDelites.shopAddressDetail,
+				// 	lat: this.orderDelites.shopLat,
+				// 	long: this.orderDelites.shopLng,
+				// }
+				// this.navgate(obj)
+				// 一键导航
+				let latitude = this.orderDelites.shopLat
+				let longitude = this.orderDelites.shopLng
+				let name = this.orderDelites.shopAddressDetail
+				uni.openLocation({
+					latitude: Number(latitude), //要去的纬度-地址       
+					longitude: Number(longitude), //要去的经度-地址
+					name: name, //地址名称
+					address: name, //详细地址名称
+					success: function() {
+						console.log('导航成功');
+					},
+					fail: function(error) {
+						console.log(error)
+					}
+				})
+			},
+			goEnd() {
+				// let obj = {
+				// 	name: this.orderDelites.userAddressDetail,
+				// 	lat: this.orderDelites.userLat,
+				// 	long: this.orderDelites.userLng,
+				// }
+				// this.navgate(obj)
+
+				let latitude = this.orderDelites.userLat
+				let longitude = this.orderDelites.userLng
+				let name = this.orderDelites.userAddressDetail
+				uni.openLocation({
+					latitude: Number(latitude), //要去的纬度-地址       
+					longitude: Number(longitude), //要去的经度-地址
+					name: name, //地址名称
+					address: name, //详细地址名称
+					success: function() {
+						console.log('导航成功');
+					},
+					fail: function(error) {
+						console.log(error)
+					}
+				})
+			},
+			navgate(e) {
+
+				let plugin = requirePlugin('routePlan');
+				let key = this.$queue.getData('mapKey'); //使用在腾讯位置服务申请的key
+				let referer = this.$queue.getData('mapName'); //调用插件的app的名称
+
+				let endPoint = JSON.stringify({ //终点
+					'name': e.name,
+					'latitude': e.lat,
+					'longitude': e.long
+				});
+				wx.navigateTo({
+					url: 'plugin://routePlan/index?key=' + key + '&referer=' + referer + '&endPoint=' + endPoint
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	body {
+		background: #F5F5F5;
+	}
+
+	.content {
+		width: 100%;
+		margin-bottom: 159rpx;
+	}
+
+	.list_box1 {
+
+		width: 90%;
+		margin: 0 auto;
+		/* height: 320rpx; */
+		background: #FFFFFF;
+		border-radius: 23rpx;
+		box-shadow: 0rpx 5rpx 5rpx 0rpx rgba(198, 186, 181, 0.20);
+		margin-top: 20rpx;
+	}
+
+	.part2 {
+		width: 92%;
+		margin: 0 auto;
+		padding: 25rpx 0;
+	}
+
+	.box_add {
+		display: flex;
+	}
+
+	.box_two1 {
+		background: #c4e2ff;
+		color: #359CFF;
+		width: 72px;
+		height: 45rpx;
+		font-size: 22rpx;
+		text-align: center;
+		line-height: 45rpx;
+		border-radius: 5rpx;
+		margin-top: 20rpx;
+		margin-left: 10rpx;
+	}
+
+	.distance {
+		flex: 1;
+		/* text-align: center; */
+		font-size: 28rpx;
+		display: flex;
+		align-items: center;
+		justify-content: left;
+	}
+
+	.a {
+		font-size: 16rpx;
+	}
+
+	.add_name {
+		flex: 8;
+		position: relative;
+		padding-bottom: 20px;
+	}
+
+	.buy {
+		/* position: absolute;
+		top: 0rpx; */
+	}
+
+	.buy image {
+		width: 20px;
+		height: 20px;
+	}
+
+	.send {
+		/* position: absolute;
+		top: 0rpx; */
+	}
+
+	.send image {
+		width: 20px;
+		height: 20px;
+	}
+
+	.sh_name {
+		font-size: 30rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+		/* text-indent: 15rpx; */
+		margin-left: 8upx;
+	}
+
+	.xs_add {
+		color: #999999;
+		font-size: 24rpx;
+		margin-top: 10rpx;
+		margin-left: 30px;
+	}
+
+	.jiantou {
+		margin-left: 23rpx;
+		display: flex;
+		/* justify-content: space-between; */
+		align-items: center;
+	}
+
+	.jiantou image {
+		width: 20rpx;
+		height: 40rpx;
+	}
+
+	.jiantou>view {
+		margin-left: 10rpx;
+	}
+
+	.part3 {
+		width: 90%;
+		margin: 0 auto;
+		display: flex;
+	}
+
+	.three_left {
+		flex: 1;
+		height: 100rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+	}
+
+	.three_left image {
+		width: 36rpx;
+		height: 37rpx;
+	}
+
+	.three_left text {
+		color: #333333;
+		font-size: 25rpx;
+		margin-left: 10rpx;
+	}
+
+	.three_right {
+		flex: 1;
+		height: 100rpx;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		color: #FF412D;
+		font-size: 32rpx;
+		font-weight: bold;
+	}
+
+	/* tip */
+	.tip_box {
+		width: 90%;
+		margin: 0 auto;
+		/* height: 180rpx; */
+		background: #FFFFFF;
+		margin-top: 20rpx;
+		border-radius: 22rpx;
+	}
+
+	.tip_part1 {
+		display: flex;
+	}
+
+	.tip_title {
+		/* flex: 1; */
+		height: 80rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+		font-size: 32rpx;
+		font-weight: bold;
+		margin-left: 30rpx;
+	}
+
+	.tip_rider {
+		/* flex: 1; */
+		font-size: 20rpx;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		margin-left: 30rpx;
+	}
+
+	.tip_rider text {
+		font-size: 30rpx;
+	}
+
+	.tip_content {
+		width: 90%;
+		margin: 0 auto;
+		font-size: 27rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+		margin-top: 15rpx;
+		padding-bottom: 15rpx;
+	}
+
+	.u-line {
+		border-bottom-width: 3px !important;
+	}
+
+	/* 订单信息 */
+	.order_box {
+		width: 90%;
+		margin: 0 auto;
+		/* height: 300rpx; */
+		background: #ffffff;
+		margin-top: 20rpx;
+		border-radius: 22rpx;
+	}
+
+	.order_title {
+		width: 90%;
+		margin: 0 auto;
+		font-size: 32rpx;
+		font-weight: 600;
+		line-height: 67rpx;
+		letter-spacing: 3rpx;
+	}
+
+	.order_list {
+		display: flex;
+	}
+
+	.order_name {
+		flex: 1;
+		margin-left: 35rpx;
+		color: #999999;
+		font-size: 25rpx;
+		height: 75rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+	}
+
+	.order_numbers {
+		flex: 1;
+		color: #333333;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		font-size: 26rpx;
+		margin-right: 35rpx;
+	}
+
+	/* 费用明细 */
+	.income_name {
+		flex: 1;
+		margin-left: 35rpx;
+		color: #999999;
+		font-size: 26rpx;
+		height: 75rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+	}
+
+	.income_numbers {
+		flex: 1;
+		color: #333333;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		font-size: 26rpx;
+		margin-right: 35rpx;
+	}
+
+	.income_numbers1 {
+		flex: 1;
+		color: #FF2400;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		font-size: 26rpx;
+		margin-right: 35rpx;
+	}
+
+	/* 接单按钮 */
+	.tabbar_btn {
+		position: fixed;
+		bottom: 0rpx;
+		left: 0rpx;
+		right: 0rpx;
+		width: 100%;
+		height: 120rpx;
+		background: #FFFFFF;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.btn {
+		width: 90%;
+		height: 80rpx;
+		background: #FF7F00;
+		border-radius: 21rpx;
+		color: white;
+		text-align: center;
+		line-height: 80rpx;
+		font-size: 26rpx;
+	}
+</style>

+ 506 - 0
pages/index/cityOrder/cityOrder.vue

@@ -0,0 +1,506 @@
+<template>
+	<view class="content">
+		<view class="part2 u-skeleton-fillet">
+			<view class="box_add">
+				<!-- <view class="distance">
+					<view>{{orderDelites.distancessd}}</view>
+				</view> -->
+				<view class="add_name" @click="goStart">
+					<view class="sh_name">
+						{{orderDelites.userAddressDetail}}({{orderDelites.userProvince}}{{orderDelites.userCity}}{{orderDelites.userDistrict}})
+						<u-icon name="map"></u-icon>
+					</view>
+
+				</view>
+			</view>
+			<u-line color="#F2F2F2" />
+			<view class="part3">
+				<view class="three_left">
+					<image src="../../../static/rider/icon_data.png"></image>
+					<text>{{orderDelites.sendOutTime}}</text>
+				</view>
+				<!-- <view class="three_right">¥{{orderDelites.errandMoney}}</view> -->
+			</view>
+		</view>
+
+		<!-- tip -->
+		<view class="tip_box u-skeleton-fillet">
+			<view class="tip_part1">
+				<view class="box_two" v-if="orderDelites.indentType==4">同城服务</view>
+				<view class="box_two" v-if="orderDelites.indentType==3">同城帮买</view>
+				<view class="box_one" v-if='orderDelites.serviceType'>{{orderDelites.serviceType}}</view>
+				<view class="box_one" v-if='orderDelites.tool'>{{orderDelites.tool}}</view>
+			</view>
+			<u-line color="#F2F2F2" />
+			<view class="tip_content" v-if="orderDelites.indentType==3">
+				{{orderDelites.remarks}}
+			</view>
+			<view class="tip_content" v-if="orderDelites.indentType==4">
+				{{orderDelites.serviceDetails}}
+			</view>
+		</view>
+		<!-- 订单信息 -->
+		<view class="order_box u-skeleton-fillet">
+			<view class="order_title">订单信息</view>
+			<view class="order_list">
+				<view class="order_name">订单号码</view>
+				<view class="order_numbers" @click="copyOrder(orderDelites.indentNumber)">{{orderDelites.indentNumber}}
+					<u-icon name="order"></u-icon>
+				</view>
+			</view>
+			<view class="order_list">
+				<view class="order_name">预约时间</view>
+				<view class="order_numbers">{{orderDelites.sendOutTime}}</view>
+			</view>
+
+		</view>
+		<!-- 费用明细 -->
+		<view class="order_box u-skeleton-fillet">
+			<view class="order_title">费用明细</view>
+			<view class="order_list">
+				<view class="income_name">跑腿费</view>
+				<view class="income_numbers">¥<text>{{orderDelites.errandMoney}}</text></view>
+			</view>
+			<view class="order_list" v-if="orderDelites.tip">
+				<view class="income_name">小费奖励</view>
+				<view class="income_numbers">¥<text>{{orderDelites.tip}}</text></view>
+			</view>
+			<view class="order_list" v-if="orderDelites.prepayMoney">
+				<view class="income_name">商品预付</view>
+				<view class="income_numbers">¥<text>{{orderDelites.prepayMoney}}</text></view>
+			</view>
+			<view class="order_list">
+				<view class="income_name">合计</view>
+				<view class="income_numbers1">¥<text>{{orderDelites.riderMoney}}</text></view>
+			</view>
+		</view>
+		<!-- 接单按钮 -->
+		<view class="tabbar_btn">
+			<view class="btn" @click="bindorder">接单</view>
+		</view>
+		<u-skeleton :loading="loading" :animation="true" bgColor="#FFF"></u-skeleton>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				orderDelites: {},
+				indentNumber: '',
+				checkCertification: '',
+				userId: '',
+				loading: true, // 是否显示骨架屏组件
+			}
+		},
+		onLoad(options) {
+			console.log(options)
+			this.indentNumber = options.id
+			var that = this
+			uni.getLocation({
+				type: 'wgs84',
+				success: function(res) {
+					console.log('当前位置的经度:' + res.longitude);
+					console.log('当前位置的纬度:' + res.latitude);
+					that.longitude = res.longitude
+					that.latitude = res.latitude
+					that.taskData()
+				}
+			});
+			this.userId = that.$queue.getData("userId");
+			this.checkCertification = that.$queue.getData("checkCertification");
+		},
+		methods: {
+			copyOrder(value) {
+				uni.setClipboardData({
+					data: value, //要被复制的内容
+					success: () => { //复制成功的回调函数
+						uni.showToast({ //提示
+							title: '复制成功'
+						})
+					}
+				});
+			},
+			goStart() {
+				// let obj = {
+				// 	name: this.orderDelites.deilveryAddressDetail,
+				// 	lat: this.orderDelites.userLat,
+				// 	long: this.orderDelites.userLng,
+				// }
+				// this.navgate(obj)
+				let latitude = this.orderDelites.userLat
+				let longitude = this.orderDelites.userLng
+				let name = this.orderDelites.userAddressDetail
+				uni.openLocation({
+					latitude: Number(latitude), //要去的纬度-地址
+					longitude: Number(longitude), //要去的经度-地址
+					name: name, //地址名称
+					address: name, //详细地址名称
+					success: function() {
+						console.log('导航成功');
+					},
+					fail: function(error) {
+						console.log(error)
+					}
+				})
+
+			},
+			navgate(e) {
+				let plugin = requirePlugin('routePlan');
+				let key = this.$queue.getData('mapKey'); //使用在腾讯位置服务申请的key
+				let referer = this.$queue.getData('mapName'); //调用插件的app的名称
+
+				let endPoint = JSON.stringify({ //终点
+					'name': e.name,
+					'latitude': e.lat,
+					'longitude': e.long
+				});
+				wx.navigateTo({
+					url: 'plugin://routePlan/index?key=' + key + '&referer=' + referer + '&endPoint=' + endPoint
+				});
+			},
+			// 获取任务数据
+			taskData() {
+				this.$Request.postT('/app/tbindent/indentMessage', {
+					indentNumber: this.indentNumber,
+					ol: this.longitude,
+					od: this.latitude
+				}).then(res => {
+					if (res.code == 0) {
+						if (res.data.distancessd > 1000) {
+							res.data.distancessd = Number((res.data.distancessd / 1000)).toFixed(2) + "km"
+						} else {
+							if (res.data.distancessd == 0) {
+								res.data.distancessd = "0m";
+							} else {
+								res.data.distancessd = Number(res.data.distancessd).toFixed(1) + "m";
+							}
+						}
+						this.orderDelites = res.data
+
+					} else {
+						console.log('res', res.data)
+					}
+					this.loading = false;
+				});
+			},
+			bindorder() {
+				let that = this
+				if (!that.userId) {
+					uni.showModal({
+						title: '提示',
+						content: '请先登录后再接单',
+						success: function(res) {
+							if (res.confirm) {
+								console.log('用户点击确定');
+								uni.navigateTo({
+									url: '/pages/login/login'
+								})
+							} else if (res.cancel) {
+								console.log('用户点击取消');
+							}
+						}
+					});
+					return;
+				}
+				if (that.checkCertification != 1) {
+					uni.showModal({
+						title: '提示',
+						content: '请先实名认证后再接单',
+						success: function(res) {
+							if (res.confirm) {
+								console.log('用户点击确定');
+								uni.navigateTo({
+									url: '/pages/riderMy/approve/approve'
+								})
+							} else if (res.cancel) {
+								console.log('用户点击取消');
+							}
+						}
+					});
+					return;
+				}
+				uni.showModal({
+					title: '提示',
+					content: '确认接单吗',
+					success: function(res) {
+						if (res.confirm) {
+							console.log('用户点击确定');
+							that.$Request.postT('/app/tbindent/indentReceiving', {
+								indentNumber: that.indentNumber
+							}).then(res => {
+								if (res.code == 0) {
+									uni.navigateTo({
+										url: '/pages/index/orderdetail/orderdetail?id=' + that
+											.indentNumber
+									})
+								} else {
+									console.log('失败:', res.data)
+									uni.showToast({
+										title: res.msg,
+										icon: 'none',
+										duration: 1500
+									});
+								}
+							});
+						} else if (res.cancel) {
+							console.log('用户点击取消');
+						}
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	body {
+		background: #F5F5F5;
+	}
+
+	.content {
+		width: 100%;
+		padding-bottom: 180rpx;
+	}
+
+	.part2 {
+		width: 90%;
+		margin: 0 auto;
+		/* padding-top: 25rpx; */
+		/* height: 230rpx; */
+		background: #ffffff;
+		border-radius: 23rpx;
+		/* box-shadow: 0rpx 5rpx 5rpx 0rpx rgba(198, 186, 181, 0.20); */
+		margin-top: 30rpx;
+	}
+
+	.box_add {
+		display: flex;
+		/* height: 100rpx; */
+		/* line-height: 31rpx; */
+		padding: 15px 17px;
+	}
+
+	.distance {
+		flex: 1;
+		text-align: center;
+		font-size: 28rpx;
+		margin-top: 15rpx;
+	}
+
+	.a {
+		font-size: 16rpx;
+	}
+
+	.add_name {
+		flex: 4;
+	}
+
+
+	.sh_name {
+		font-size: 28rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+	}
+
+	.xs_add {
+		color: #999999;
+		font-size: 24rpx;
+		margin-top: 10rpx;
+	}
+
+	.u-line {
+		border-bottom-width: 3px !important;
+	}
+
+	.part3 {
+		width: 90%;
+		margin: 0 auto;
+		display: flex;
+	}
+
+	.three_left {
+		flex: 1;
+		height: 100rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+	}
+
+	.three_left image {
+		width: 36rpx;
+		height: 37rpx;
+	}
+
+	.three_left text {
+		color: #333333;
+		font-size: 25rpx;
+		margin-left: 10rpx;
+	}
+
+	.three_right {
+		flex: 1;
+		height: 100rpx;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		color: #FF412D;
+		font-size: 32rpx;
+		font-weight: bold;
+	}
+
+	/* tip */
+	.tip_box {
+		width: 90%;
+		margin: 0 auto;
+		height: 180rpx;
+		background: #FFFFFF;
+		margin-top: 20rpx;
+		border-radius: 22rpx;
+	}
+
+	.tip_part1 {
+		display: flex;
+		height: 70rpx;
+		justify-content: left;
+		align-items: center;
+		margin-left: 30rpx;
+
+	}
+
+	.box_one {
+		background: #c4e2ff;
+		color: #359CFF;
+		height: 45rpx;
+		font-size: 22rpx;
+		text-align: center;
+		line-height: 45rpx;
+		border-radius: 5rpx;
+		margin-left: 20rpx;
+		padding: 0 10rpx
+	}
+
+	.box_two {
+		font-size: 32rpx;
+		font-weight: bold;
+		letter-spacing: 3rpx;
+
+	}
+
+
+
+	.tip_content {
+		width: 90%;
+		margin: 0 auto;
+		font-size: 29rpx;
+		/* font-weight: bold; */
+		letter-spacing: 2rpx;
+		margin-top: 15rpx;
+	}
+
+	.u-line {
+		border-bottom-width: 3px !important;
+	}
+
+	/* 订单信息 */
+	.order_box {
+		width: 90%;
+		margin: 0 auto;
+		/* height: 300rpx; */
+		padding-bottom: 10upx;
+		background: #ffffff;
+		margin-top: 20rpx;
+		border-radius: 22rpx;
+	}
+
+	.order_title {
+		width: 90%;
+		margin: 0 auto;
+		font-size: 32rpx;
+		font-weight: bold;
+		line-height: 67rpx;
+		letter-spacing: 3rpx;
+	}
+
+	.order_list {
+		display: flex;
+	}
+
+	.order_name {
+		flex: 1;
+		margin-left: 35rpx;
+		color: #999999;
+		font-size: 25rpx;
+		height: 75rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+	}
+
+	.order_numbers {
+		flex: 1;
+		color: #333333;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		font-size: 26rpx;
+		margin-right: 35rpx;
+	}
+
+	/* 费用明细 */
+	.income_name {
+		flex: 1;
+		margin-left: 35rpx;
+		color: #999999;
+		font-size: 26rpx;
+		height: 75rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+	}
+
+	.income_numbers {
+		flex: 1;
+		color: #333333;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		font-size: 26rpx;
+		margin-right: 35rpx;
+	}
+
+	.income_numbers1 {
+		flex: 1;
+		color: #FF2400;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		font-size: 26rpx;
+		margin-right: 35rpx;
+	}
+
+	/* 接单按钮 */
+	.tabbar_btn {
+		position: fixed;
+		bottom: 0rpx;
+		left: 0rpx;
+		right: 0rpx;
+		width: 100%;
+		height: 120rpx;
+		background: #FFFFFF;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.btn {
+		width: 90%;
+		height: 80rpx;
+		background: #FF7F00;
+		border-radius: 21rpx;
+		color: white;
+		text-align: center;
+		line-height: 80rpx;
+		font-size: 26rpx;
+	}
+</style>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 2771 - 0
pages/index/index.vue


+ 152 - 0
pages/index/orderdetail/navigation.vue

@@ -0,0 +1,152 @@
+<template>
+	<view>
+		<map id="tencentMap" :style="[...mapStyle]" :show-compass="showCompass" :enable-traffic="enableTraffic"
+			:longitude="longitude" :latitude="latitude" :markers="markers" :show-location="showLocation"
+			@markertap="markertap"></map>
+	</view>
+</template>
+
+
+<script>
+	export default {
+		props: {
+			mapStyle: {
+				type: Object,
+				default: {
+					width: '100%',
+					height: '600rpx'
+				}
+			},
+			showCompass: { //	是否显示指南针
+				type: Boolean,
+				default: true
+			},
+			enableTraffic: { //	是否开启实时路况
+				type: Boolean,
+				default: false
+			},
+			showLocation: { //	是否显示带有方向的当前定位点
+				type: Boolean,
+				default: true
+			},
+		},
+		data() {
+			return {
+				longitude: '118.72495',
+				latitude: '32.00834',
+				markers: [],
+			}
+		},
+		onReady() {
+			let vm = this
+			vm.map = uni.createMapContext('tencentMap', this)
+			vm.getLocation()
+		},
+		onReady() {
+			//   wx请求获取位置权限
+			this.getAuthorize().then(() => {
+				//   同意后获取
+				this.getLocationInfo();
+			}).catch(() => {
+				//   不同意给出弹框,再次确认
+				this.openConfirm().then(() => {
+					this.getLocationInfo();
+				}).catch(() => {
+					this.rejectGetLocation();
+				});
+			});
+		},
+		methods: {
+			//   初次位置授权
+			getAuthorize() {
+				return new Promise((resolve, reject) => {
+					uni.authorize({
+						scope: "scope.userLocation",
+						success: () => {
+							resolve(); // 允许授权
+						},
+						fail: () => {
+							reject(); // 拒绝授权
+						},
+					});
+				});
+			},
+			// 确认授权后,获取用户位置
+			getLocationInfo() {
+				const that = this;
+				uni.getLocation({
+					type: "gcj02",
+					success: function(res) {
+						that.longitude = res.longitude;
+						that.latitude = res.latitude;
+						that.markers = [{
+							id: 2,
+							latitude: 32.00834,
+							longitude: 118.72495,
+							callout: {
+								content: '奥林皮克体育中心',
+								color: '#000',
+								fontSize: 10,
+								bgColor: '#fff',
+								padding: 5,
+								display: 'ALWAYS',
+								textAlign: 'center'
+							}
+						}, ]
+					}
+				});
+			},
+			// 拒绝授权后,弹框提示是否手动打开位置授权
+			openConfirm() {
+				return new Promise((resolve, reject) => {
+					uni.showModal({
+						title: "请求授权当前位置",
+						content: "我们需要获取地理位置信息,为您推荐附近的商家",
+						success: (res) => {
+							if (res.confirm) {
+								uni.openSetting().then((res) => {
+									if (res[1].authSetting["scope.userLocation"] === true) {
+										resolve(); // 打开地图权限设置
+									} else {
+										reject();
+									}
+								});
+							} else if (res.cancel) {
+								reject();
+							}
+						},
+					});
+				});
+			},
+			// 彻底拒绝位置获取
+			rejectGetLocation() {
+				uni.showToast({
+					title: "您拒绝了授权,无法获得周边信息",
+					icon: "none",
+					duration: 2000,
+				});
+			},
+			//	地图标点 点击事件
+			markertap(e) {
+				let plugin = requirePlugin('routePlan');
+				let key = '5ZKBZ-W3TCU-LSDVC-4XJLB-KQOYO-TVBQ6'; //	使用在腾讯位置服务申请的key
+				let referer = 'test'; //	调用插件的app的名称
+				let navigation = 1 //	值为1时,开启驾车导航功能;默认不开启此功能
+				let endPoint = JSON.stringify({ //	终点
+					'name': '奥林皮克体育中心',
+					'latitude': 32.00834,
+					'longitude': 118.72495
+				});
+				wx.navigateTo({
+					url: 'plugin://routePlan/index?key=' + key + '&referer=' + referer + '&endPoint=' + endPoint +
+						'&navigation=' + navigation
+				});
+
+			}
+		},
+
+	}
+</script>
+
+<style>
+</style>

+ 975 - 0
pages/index/orderdetail/orderdetail.vue

@@ -0,0 +1,975 @@
+<template>
+	<view class="content">
+		<view class="part_one u-skeleton-fillet" v-if="orderDelites.indentState=='3' || orderDelites.indentState=='4'">
+			<view class="pickup" v-if="orderDelites.indentState=='3'">待取货...</view>
+			<view class="pickup" v-if="orderDelites.indentState=='4'">配送中...</view>
+			<view class="pickup_tit" v-if="orderDelites.indentState=='3'">抢单成功请及时取货送达</view>
+			<view class="pickup_tit" v-if="orderDelites.indentState=='4'">取货成功请及时送达</view>
+		</view>
+
+		<view class="part_one u-skeleton-fillet" v-else>
+
+			<view class="pickup" v-if="orderDelites.indentState=='5'">已完成...</view>
+			<view class="pickup" v-if="orderDelites.indentState=='6'">已完成...</view>
+			<view class="pickup" v-if="orderDelites.indentState=='7'">已完成...</view>
+			<view class="pickup" v-if="orderDelites.indentState=='9'">已取消...</view>
+			<view class="pickup" v-if="orderDelites.indentState=='10'">已取消...</view>
+			<view class="pickup_tit">加油明天会更好!</view>
+
+		</view>
+		<view class="part_one u-skeleton-fillet" style="height: auto;"
+			v-if="orderDelites.indentState=='3'|| orderDelites.indentState=='4' && orderDelites.indentType=='5'&& orderDelites.indentType!='3'">
+			<view class="pickup">取货码</view>
+			<view class="pickup_tit quhuoma">{{orderDelites.orderCode}}</view>
+		</view>
+		<view class="list_box1 u-skeleton-fillet">
+			<view class="part2">
+				<view class="box_add" style="padding-bottom: 12px;"
+					v-if="orderDelites.indentType == 5||orderDelites.indentType == 1 || orderDelites.indentType == 2 || (orderDelites.indentType==3 &&orderDelites.buyType==1)">
+					<view class="add_name">
+						<view class="flex">
+							<view class="buy">
+								<image src="../../../static/rider/icon-buy.png"></image>
+							</view>
+							<view class="sh_name" @click="goStart()">
+								{{orderDelites.shopAddressDetail}}
+								<u-icon name="map"></u-icon>
+							</view>
+						</view>
+						<view class="xs_add" @click="coll(orderDelites.shopPhone)">
+							{{orderDelites.shopName?orderDelites.shopName:''}}<text
+								style="margin-left: 10upx;">{{orderDelites.shopPhone?orderDelites.shopPhone:''}}</text>
+							<u-icon name="phone"></u-icon>
+						</view>
+					</view>
+				</view>
+				<view class="box_add">
+					<view class="add_name">
+						<view class="flex">
+							<view class="send">
+								<image src="../../../static/rider/icon-send.png"></image>
+							</view>
+							<view class="sh_name" @click="goEnd()">
+								{{orderDelites.userAddressDetail}}({{orderDelites.userProvince?orderDelites.userProvince:''}}
+								{{orderDelites.userCity?orderDelites.userCity:''}}{{orderDelites.userDistrict?orderDelites.userDistrict:''}})
+								<u-icon name="map"></u-icon>
+							</view>
+						</view>
+
+						<view class="xs_add" @click="coll(orderDelites.userPhone)">
+							{{orderDelites.userName?orderDelites.userName:''}}<text
+								style="margin-left: 10upx;">{{orderDelites.userPhone?orderDelites.userPhone:''}}</text>
+							<u-icon name="phone"></u-icon>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view v-if="orderDelites.indentType == 5" style="padding-bottom: 15px;"></view>
+			<view class="part3" v-if="orderDelites.indentType != 5">
+				<view class="three_left" v-if="orderDelites.predictTime">
+					<image src="../../../static/rider/icon_data.png"></image>
+					<text>{{orderDelites.predictTime}}分钟内送达</text>
+				</view>
+				<view class="three_right">{{orderDelites.errandMoney}}元</view>
+			</view>
+		</view>
+
+		<!-- tip -->
+		<view class="tip_box u-skeleton-fillet" v-if="orderDelites.indentType != 5">
+			<view class="tip_part1">
+				<view class="tip_title" v-if="orderDelites.indentType == 1">帮送清单</view>
+				<view class="tip_title" v-if="orderDelites.indentType == 2">帮取清单</view>
+				<view class="tip_title" v-if="orderDelites.indentType == 3">帮买清单</view>
+				<view class="tip_title" v-if="orderDelites.indentType == 4">服务内容</view>
+				<view class="tip_rider" v-if="orderDelites.prepayMoney" style="margin-right: 16upx;">
+					商品预付:¥<text>{{orderDelites.prepayMoney}}</text>
+				</view>
+				<view class="box_two1" v-if="orderDelites.itemType">{{orderDelites.itemType}}</view>
+				<view class="box_two1" v-if="orderDelites.serviceType">{{orderDelites.serviceType}}</view>
+				<view class="box_two1" v-if="orderDelites.itemValue">{{orderDelites.itemValue}}</view>
+				<view class="box_two1" v-if="orderDelites.itemWeight">{{orderDelites.itemWeight}}</view>
+			</view>
+			<u-line color="#F2F2F2" />
+			<view class="tip_content" v-if="orderDelites.indentType == 3">
+				{{orderDelites.productDetails?orderDelites.productDetails:''}}
+			</view>
+			<view class="tip_content" v-if="orderDelites.indentType == 1 || orderDelites.indentType == 2">
+				{{orderDelites.remarks?orderDelites.remarks:''}}
+			</view>
+			<view class="tip_content" v-if="orderDelites.indentType == 4">
+				{{orderDelites.serviceDetails?orderDelites.serviceDetails:''}}
+			</view>
+		</view>
+		<!-- 订单信息 -->
+		<view class="order_box u-skeleton-fillet">
+			<view class="order_title">订单信息</view>
+			<view class="order_list">
+				<view class="order_name">订单号码</view>
+				<view class="order_numbers" @click="copyOrder(orderDelites.indentNumber)">{{orderDelites.indentNumber}}
+					<u-icon name="order"></u-icon>
+				</view>
+			</view>
+			<view class="order_list">
+				<view class="order_name">发布时间</view>
+				<view class="order_numbers">{{orderDelites.createTime}}
+
+				</view>
+			</view>
+			<view class="order_list">
+				<view class="order_name">接单时间</view>
+				<view class="order_numbers">{{orderDelites.receivingTime}}
+
+				</view>
+			</view>
+			<view class="order_list" v-if="orderDelites.finishTime">
+				<view class="order_name">完成时间</view>
+				<view class="order_numbers">{{orderDelites.finishTime}}
+
+				</view>
+			</view>
+			<view class="order_list padding-bottom-sm" v-if="orderDelites.remarks">
+				<view class="order_name">订单备注</view>
+				<view class="order_numbers">{{orderDelites.remarks}}
+				</view>
+			</view>
+			<!-- <view class="order_list">
+				<view class="order_name">发票抬头</view>
+				<view class="order_numbers">无(不需要发票)</view>
+			</view> -->
+		</view>
+		<!-- 费用明细 -->
+		<view class="order_box u-skeleton-fillet">
+			<view class="order_title">费用明细</view>
+			<view class="order_list">
+				<view class="income_name">跑腿费</view>
+				<view class="income_numbers">¥<text>{{orderDelites.errandMoney}}</text></view>
+			</view>
+			<view class="order_list" v-if="orderDelites.tip">
+				<view class="income_name">小费奖励</view>
+				<view class="income_numbers">¥<text>{{orderDelites.tip?orderDelites.tip:'0'}}</text></view>
+			</view>
+			<view class="order_list" v-if="orderDelites.prepayMoney">
+				<view class="income_name">商品费用</view>
+				<view class="income_numbers1">¥<text>{{orderDelites.prepayMoney}}</text></view>
+			</view>
+			<view class="order_list">
+				<view class="income_name">合计</view>
+				<view class="income_numbers1">¥<text>{{orderDelites.riderMoney}}</text></view>
+			</view>
+		</view>
+		<!-- 接单按钮 -->
+		<view class="tabbar_btn"
+			v-if="orderDelites.indentState=='3'||orderDelites.indentState=='4'||orderDelites.indentState=='5'">
+			<!-- <view class="btn_left">
+				联系TA
+			</view>
+			<view class="btn_right" @click="onshow">
+				确定送达
+			</view> -->
+			<view class="btn_right" @click="quhuo(orderDelites.indentId)" v-if="orderDelites.indentState=='3'">确认取货
+			</view>
+			<view class="btn_left" @click="zhuanOrder(orderDelites.indentId)" v-if="orderDelites.indentState=='3'">
+				转单
+			</view>
+			<view class="btn_left" v-if="orderDelites.indentState=='4'" @click="coll(orderDelites.userPhone)">
+				联系TA</view>
+			<view class="btn_right" v-if="orderDelites.indentState=='4'" @click.stop="shouhuo(orderDelites)">确认送达</view>
+			<view class="btn_right" v-if="orderDelites.indentState=='5'">客户待确认</view>
+		</view>
+		<!-- 聊天室 -->
+		<view style="position: fixed;bottom: 150rpx;right: 50rpx;">
+			<image @tap="goChat(orderDelites.indentId,orderDelites.orderId)" src="../../../static/image/chats.png"
+				style="width: 100rpx;height: 100rpx;border-radius: 50rpx;">
+			</image>
+			<view class="shopxiaoix" v-if="RiderUnreadCount">{{RiderUnreadCount}}</view>
+		</view>
+
+		<!-- 转单 -->
+		<u-popup v-model="showOrder" mode="center" border-radius="18" :closeable="closeable" close-icon="close-circle"
+			close-icon-size="45" width="580rpx" height="400rpx">
+			<view class="receipt_code">
+				<view class="code_title">填写手机号码</view>
+				<u-input v-model="phone" type="number" placeholder="填写转单人手机号码" :border="border" />
+				<view class="sure" style="margin-top: 40rpx;" @click="zhuandan">确定</view>
+			</view>
+		</u-popup>
+
+		<!-- 收货码弹框 -->
+		<u-popup v-model="show" mode="center" border-radius="18" :closeable="closeable" close-icon="close-circle"
+			close-icon-size="45" width="580rpx" height="400rpx">
+			<view class="receipt_code">
+				<view class="code_title">填写收货码</view>
+				<u-input v-model="shouhuoma" :type="type" placeholder="请输入收货码" :border="border" />
+				<view class="sure" @click="querenSh">确定</view>
+			</view>
+		</u-popup>
+		<!-- <u-skeleton :loading="loading" :animation="true" bgColor="#FFF"></u-skeleton> -->
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				show: false,
+				closeable: true,
+				value: '',
+				type: 'text',
+				border: true,
+				indentNumber: '',
+				orderId: '',
+				orderDelites: {},
+				latitude: '', //骑手起点经度
+				longitude: '', //骑手起点纬度
+				qiJuli: '', //骑手距离
+				shouhuoma: '',
+				loading: true, // 是否显示骨架屏组件
+				RiderUnreadCount: 0,
+				indentId: '',
+				showOrder: false,
+				phone: ''
+			}
+		},
+		onLoad(options) {
+			var that = this
+			console.error(options)
+			// uni.showLoading({
+			// 	title: '加载中......',
+			// 	icon: 'none'
+			// })
+			that.indentNumber = options.id
+			that.orderId = options.orderId
+
+
+			uni.getLocation({
+				type: 'wgs84',
+				success: function(res) {
+					console.log('当前位置的经度:' + res.longitude);
+					console.log('当前位置的纬度:' + res.latitude);
+					that.longitude = res.longitude
+					that.latitude = res.latitude
+					that.taskData()
+				}
+
+			});
+
+
+
+			setInterval(function() {
+				that.getRiderUnreadCount()
+			}, 10000)
+
+		},
+		methods: {
+			zhuanOrder(indentId) {
+				this.phone = ''
+				this.indentId = indentId
+				this.showOrder = true
+			},
+			zhuandan() {
+				this.$Request.postT('/app/tbindent/transferOfOrder', {
+					indentId: this.indentId,
+					phone: this.phone
+				}).then(res => {
+					if (res.code == 0) {
+						this.phone = ''
+						this.$queue.setData('zhuandan', this.indentId);
+						uni.showToast({
+							title: '转单成功',
+							icon: "none"
+						});
+						setTimeout(d => {
+							uni.navigateBack()
+						}, 1000)
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: "none"
+						});
+					}
+				});
+			},
+			goChat(indentId, orderId) {
+				uni.navigateTo({
+					url: '/pages/riderMy/kefu/liaotianshi?indentId=' + indentId + '&orderId=' + orderId
+				});
+			},
+			copyOrder(value) {
+				uni.setClipboardData({
+					data: value, //要被复制的内容
+					success: () => { //复制成功的回调函数
+						uni.showToast({ //提示
+							title: '复制成功'
+						})
+					}
+				});
+			},
+			onshow() {
+				this.show = true
+			},
+			coll(phone) {
+				uni.makePhoneCall({
+					phoneNumber: phone
+				});
+			},
+			taskData() {
+				if (this.indentNumber) {
+					if (!this.longitude) {
+						uni.showModal({
+							title: '温馨提示',
+							content: '未开启定位权限,无法获取数据,请开启一下',
+							showCancel: false,
+							cancelText: '',
+							confirmText: '我知道了',
+							success: res => {
+								uni.navigateBack({
+
+								})
+							},
+							fail: () => {},
+							complete: () => {}
+						});
+						return;
+					}
+					this.$Request.postT('/app/tbindent/indentMessage', {
+						indentNumber: this.indentNumber,
+						ol: this.longitude,
+						od: this.latitude
+					}).then(res => {
+						this.loading = false
+						uni.hideLoading()
+						if (res.code == 0 && res.data) {
+							// this.jsjl(this.longitude,this.latitude,res.data.deliveryAddressLatitude, res.data.deliveryAddressLongitude)
+							// this.jsjl(res.data.shipAddressLatitude, res.data.shipAddressLongitude,res.data.deliveryAddressLatitude, res.data.deliveryAddressLongitude)
+							// if (res.data.distanceInitial > 1000) {
+							// 	res.data.distanceInitials = (Number(res.data.distanceInitial) / 1000).toFixed(2)
+							// }
+							if (res.data.distance > 1000) {
+								res.data.distances = (Number(res.data.distance) / 1000).toFixed(2)
+							}
+							this.orderDelites = res.data
+							this.orderDelites.orderCode = res.data.orderCode.substring(res.data.orderCode.length -
+								3)
+
+
+							console.log('````', res.data)
+						} else {
+							console.log('失败:', res.data)
+							uni.navigateBack({
+
+							})
+						}
+						this.loading = false;
+					});
+				} else {
+					this.$Request.postT('/app/tbindent/indentMessageByOrderId', {
+						orderId: this.orderId,
+						ol: this.longitude,
+						od: this.latitude
+					}).then(res => {
+						this.loading = false
+						uni.hideLoading()
+						if (res.code == 0) {
+							// this.jsjl(this.longitude,this.latitude,res.data.deliveryAddressLatitude, res.data.deliveryAddressLongitude)
+							// this.jsjl(res.data.shipAddressLatitude, res.data.shipAddressLongitude,res.data.deliveryAddressLatitude, res.data.deliveryAddressLongitude)
+							if (res.data.distanceInitial > 1000) {
+								res.data.distanceInitials = (Number(res.data.distanceInitial) / 1000).toFixed(2)
+							}
+							if (res.data.distance > 1000) {
+								res.data.distances = (Number(res.data.distance) / 1000).toFixed(2)
+							}
+							this.orderDelites = res.data
+							this.orderDelites.orderCode = res.data.orderCode.substring(res.data.orderCode.length -
+								3)
+
+
+							console.log('````', res.data)
+						} else {
+							console.log('失败:', res.data)
+						}
+						this.loading = false;
+					});
+				}
+
+			},
+			quhuo(indentId) {
+				let that = this
+				uni.showModal({
+					title: '提示',
+					content: '确认取到货吗',
+					success: function(res) {
+						if (res.confirm) {
+							that.$Request.postJson('/app/tbindent/riderBuyGoods', {
+
+								indentId: indentId,
+								indentState: "4"
+							}).then(res => {
+								if (res.code == 0) {
+									that.taskData()
+									uni.showToast({
+										title: '确认取货成功',
+										icon: "none"
+									});
+								} else {
+									uni.showToast({
+										title: res.msg,
+										icon: "none"
+									});
+								}
+							});
+						}
+					}
+				})
+
+			},
+			goStart() {
+				// let obj = {
+				// 	name: this.orderDelites.shopAddressDetail,
+				// 	lat: this.orderDelites.shopLat,
+				// 	long: this.orderDelites.shopLng,
+				// }
+				// this.navgate(obj)
+				// 一键导航
+				let latitude = this.orderDelites.shopLat
+				let longitude = this.orderDelites.shopLng
+				let name = this.orderDelites.shopAddressDetail
+				uni.openLocation({
+					latitude: latitude - 0, //要去的纬度-地址       
+					longitude: longitude - 0, //要去的经度-地址
+					name: name, //地址名称
+					address: name, //详细地址名称
+					success: function() {
+						console.log('导航成功');
+					},
+					fail: function(error) {
+						console.log(error)
+					}
+				})
+			},
+			goEnd() {
+				// let obj = {
+				// 	name: this.orderDelites.userAddressDetail,
+				// 	lat: this.orderDelites.userLat,
+				// 	long: this.orderDelites.userLng,
+				// }
+				// this.navgate(obj)
+
+				let latitude = this.orderDelites.userLat
+				let longitude = this.orderDelites.userLng
+				let name = this.orderDelites.userAddressDetail
+				uni.openLocation({
+					latitude: Number(latitude), //要去的纬度-地址
+					longitude: Number(longitude), //要去的经度-地址
+					name: name, //地址名称
+					address: name, //详细地址名称
+					success: function() {
+						console.log('导航成功');
+					},
+					fail: function(error) {
+						console.log(error)
+					}
+				})
+			},
+			navgate(e) {
+				console.log(e)
+				let plugin = requirePlugin('routePlan');
+				let key = this.$queue.getData('mapKey'); //使用在腾讯位置服务申请的key
+				let referer = this.$queue.getData('mapName'); //调用插件的app的名称
+
+				let endPoint = JSON.stringify({ //终点
+					'name': e.name,
+					'latitude': e.lat,
+					'longitude': e.long
+				});
+				wx.navigateTo({
+					url: 'plugin://routePlan/index?key=' + key + '&referer=' + referer + '&endPoint=' + endPoint
+				});
+			},
+			shouhuo(e) {
+				console.log(e)
+				this.indentNumber = e.indentNumber
+				if (e.itemCodeFlag == 0 && e.indentType != 5) {
+					this.show = true
+
+				} else {
+					this.querenSh()
+				}
+
+			},
+			querenSh() {
+				let that = this
+
+				that.$Request.postT('/app/tbindent/riderDelivery', {
+					indentNumber: that.indentNumber,
+					itemCode: that.shouhuoma
+				}).then(res => {
+					console.log(res)
+					if (res.code == 0) {
+
+						uni.showToast({
+							title: '订完完成',
+							icon: "none"
+						});
+						setTimeout(function() {
+							uni.navigateBack()
+						}, 1000)
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: "none"
+						});
+					}
+				});
+			},
+			getRiderUnreadCount() {
+				let that = this
+				let data = {
+					ordersId: that.orderId
+				}
+				that.$Request.getT("/app/ordersChat/selectRiderUnreadCount", data).then(res => {
+					if (res.code == 0) {
+						if (res.data > 0) {
+							if (that.RiderUnreadCount != res.data) {
+								that.RiderUnreadCount = res.data
+								that.aplayAudio()
+								uni.showModal({
+									title: '消息',
+									content: '有' + res.data + '条消息,请前往聊天列表处理。',
+									success: (ret) => {
+										if (ret.confirm) {
+											uni.navigateTo({
+												url: '/pages/riderMy/kefu/liaotian'
+											})
+
+										} else {
+											console.log('else', ret)
+											that.defineCallBack()
+										}
+									}
+								});
+							}
+
+						}
+
+					}
+				});
+			},
+			//消息提示
+			aplayAudio() {
+				// console.log('语音提示')
+				const innerAudioContext = uni.createInnerAudioContext();
+				innerAudioContext.autoplay = true;
+				innerAudioContext.src =
+					'https://pw.xianmxkj.com/file/uploadPath/2022/01/19/0753211f78d718d44ee6372e33eae9ee.mp3';
+				innerAudioContext.onPlay(() => {
+					console.log('开始播放');
+				});
+				innerAudioContext.onError((res) => {
+					console.log(res.errMsg);
+					console.log(res.errCode);
+				});
+			},
+		}
+	}
+</script>
+
+<style>
+	body {
+		background: #F5F5F5;
+	}
+
+	.content {
+		width: 100%;
+		margin-bottom: 159rpx;
+	}
+
+	.part_one {
+		width: 90%;
+		margin: 0 auto;
+		height: 120rpx;
+		background: #ffffff;
+		margin-top: 20rpx;
+		border-radius: 23rpx;
+		padding-top: 10rpx;
+	}
+
+	.pickup {
+		width: 90%;
+		margin: 0 auto;
+		font-size: 29rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+		line-height: 60rpx;
+	}
+
+	.pickup_tit {
+		color: #999999;
+		font-size: 22rpx;
+		width: 90%;
+		margin: 0 auto;
+	}
+
+	.quhuoma {
+		font-size: 50rpx;
+		text-align: center;
+		font-weight: 600;
+		margin: 50rpx 0;
+		height: 100rpx;
+	}
+
+	.list_box1 {
+
+		width: 90%;
+		margin: 0 auto;
+		/* height: 320rpx; */
+		background: #FFFFFF;
+		border-radius: 23rpx;
+		/* box-shadow: 0rpx 5rpx 5rpx 0rpx rgba(198, 186, 181, 0.20); */
+		margin-top: 20rpx;
+	}
+
+	.part2 {
+		width: 90%;
+		margin: 0 auto;
+		padding-top: 25rpx;
+	}
+
+	.box_add {
+		display: flex;
+	}
+
+	.distance {
+		flex: 1;
+		text-align: center;
+		font-size: 28rpx;
+	}
+
+	.a {
+		font-size: 16rpx;
+	}
+
+	.add_name {
+		flex: 8;
+		position: relative;
+	}
+
+	.buy {
+		/* position: absolute;
+		top: 0rpx; */
+	}
+
+	.buy image {
+		width: 20px;
+		height: 20px;
+	}
+
+	.send {
+		/* 	position: absolute;
+		top: 0rpx; */
+	}
+
+	.send image {
+		width: 20px;
+		height: 20px;
+	}
+
+	.sh_name {
+		font-size: 30rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+		margin-left: 10px;
+	}
+
+	.xs_add {
+		color: #999999;
+		font-size: 24rpx;
+		margin-top: 10rpx;
+		margin-left: 30px;
+	}
+
+	.jiantou {
+		margin-left: 23rpx;
+	}
+
+	.jiantou image {
+		width: 20rpx;
+		height: 40rpx;
+	}
+
+	.part3 {
+		width: 90%;
+		margin: 0 auto;
+		display: flex;
+	}
+
+	.three_left {
+		flex: 1;
+		height: 100rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+	}
+
+	.three_left image {
+		width: 36rpx;
+		height: 37rpx;
+	}
+
+	.box_two1 {
+		background: #c4e2ff;
+		color: #359CFF;
+		/* width: 60px; */
+		padding: 0 5px;
+		height: 45rpx;
+		font-size: 22rpx;
+		text-align: center;
+		line-height: 45rpx;
+		border-radius: 5rpx;
+		margin-top: 20rpx;
+		margin-left: 10rpx;
+	}
+
+	.three_left text {
+		color: #333333;
+		font-size: 25rpx;
+		margin-left: 10rpx;
+	}
+
+	.three_right {
+		flex: 1;
+		height: 100rpx;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		color: #FF412D;
+		font-size: 32rpx;
+		font-weight: bold;
+	}
+
+	/* tip */
+	.tip_box {
+		width: 90%;
+		margin: 0 auto;
+		height: 180rpx;
+		background: #FFFFFF;
+		margin-top: 20rpx;
+		border-radius: 22rpx;
+	}
+
+	.tip_part1 {
+		display: flex;
+	}
+
+	.tip_title {
+		/* flex: 1; */
+		height: 80rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+		font-size: 32rpx;
+		font-weight: bold;
+		margin-left: 30rpx;
+	}
+
+	.tip_rider {
+		flex: 1;
+		font-size: 20rpx;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		margin-left: 30rpx;
+	}
+
+	.tip_rider text {
+		font-size: 30rpx;
+	}
+
+	.tip_content {
+		width: 90%;
+		margin: 0 auto;
+		font-size: 27rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+		margin-top: 15rpx;
+	}
+
+	.u-line {
+		border-bottom-width: 3px !important;
+	}
+
+	/* 订单信息 */
+	.order_box {
+		width: 90%;
+		margin: 0 auto;
+		/* height: 300rpx; */
+		background: #ffffff;
+		margin-top: 20rpx;
+		border-radius: 22rpx;
+	}
+
+	.order_title {
+		width: 90%;
+		margin: 0 auto;
+		font-size: 32rpx;
+		font-weight: 600;
+		line-height: 67rpx;
+		letter-spacing: 3rpx;
+	}
+
+	.order_list {
+		display: flex;
+	}
+
+	.order_name {
+		flex: 1;
+		margin-left: 35rpx;
+		color: #999999;
+		font-size: 25rpx;
+		height: 75rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+	}
+
+	.order_numbers {
+		flex: 1;
+		color: #333333;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		font-size: 26rpx;
+		margin-right: 35rpx;
+	}
+
+	/* 费用明细 */
+	.income_name {
+		flex: 1;
+		margin-left: 35rpx;
+		color: #999999;
+		font-size: 26rpx;
+		height: 75rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+	}
+
+	.income_numbers {
+		flex: 1;
+		color: #333333;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		font-size: 26rpx;
+		margin-right: 35rpx;
+	}
+
+	.income_numbers1 {
+		flex: 1;
+		color: #FF2400;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		font-size: 26rpx;
+		margin-right: 35rpx;
+	}
+
+	/* 接单按钮 */
+	.tabbar_btn {
+		position: fixed;
+		bottom: 0rpx;
+		left: 0rpx;
+		right: 0rpx;
+		width: 100%;
+		height: 120rpx;
+		background: #FFFFFF;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.btn_left {
+		flex: 1;
+		height: 80rpx;
+		color: white;
+		background: #33D442;
+		text-align: center;
+		line-height: 80rpx;
+		border-radius: 16rpx;
+		margin-left: 35rpx;
+		margin-right: 20rpx;
+		font-size: 26rpx;
+		letter-spacing: 3rpx;
+	}
+
+	.btn_right {
+		flex: 1;
+		height: 80rpx;
+		color: white;
+		background: #FF7F00;
+		text-align: center;
+		line-height: 80rpx;
+		border-radius: 16rpx;
+		margin-left: 20rpx;
+		margin-right: 35rpx;
+		font-size: 26rpx;
+		letter-spacing: 3rpx;
+	}
+
+	/* 收货码弹框 */
+	.receipt_code {
+		width: 90%;
+		margin: 0 auto;
+	}
+
+	.code_title {
+		width: 100%;
+		line-height: 100rpx;
+		font-size: 31rpx;
+		font-weight: bold;
+		text-align: center;
+		letter-spacing: 2rpx;
+		margin-top: 21rpx;
+		margin-bottom: 25rpx;
+	}
+
+	.u-input--border {
+		border: 1px solid #F2F2F2 !important;
+		background: #F2F2F2 !important;
+		color: #999999 !important;
+		font-weight: 500 !important;
+		letter-spacing: 2rpx !important;
+	}
+
+	.u-input__input {
+		font-size: 30rpx;
+		font-weight: bold;
+		flex: 1;
+		color: #999999 !important;
+		min-height: 85rpx !important;
+		margin-top: 7rpx;
+	}
+
+	.sure {
+		width: 100%;
+		height: 80rpx;
+		background: #FF7F00;
+		color: white;
+		border-radius: 46rpx;
+		text-align: center;
+		line-height: 80rpx;
+		margin-top: 30rpx;
+		letter-spacing: 2rpx;
+	}
+
+	.shopxiaoix {
+		background: red;
+		color: #ffffff;
+		width: 40rpx;
+		height: auto;
+		text-align: center;
+		border-radius: 30rpx;
+		position: relative;
+		top: -66px;
+		left: 35px;
+	}
+</style>

+ 187 - 0
pages/login/forgetPwd.vue

@@ -0,0 +1,187 @@
+<template>
+	<view class="container">
+		<view class="wrapper">
+			<view class="input-content">
+				<view class="cu-form-group" style="border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
+					<view class="title text-black">手机号</view>
+					<input type="number" :value="phone" placeholder="请输入手机号" maxlength="11" data-key="phone" @input="inputChange" />
+				</view>
+				<view class="cu-form-group" style="border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
+					<text class="title text-black">验证码</text>
+					<input type="number" :value="code" placeholder="请输入验证码" maxlength="6" data-key="code" @input="inputChange"
+					 @confirm="toLogin" />
+					<button class="send-msg" @click="sendMsg" :disabled="sending">{{sendTime}}</button>
+				</view>
+				<view class="cu-form-group" style="border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
+					<text class="title text-black">设置密码</text>
+					<input type="password" :value="password" placeholder="请设置新密码" placeholder-class="input-empty" maxlength="20"
+					 minlength="6" data-key="password" @input="inputChange" @confirm="toLogin" />
+				</view>
+			</view>
+			<button class="confirm-btn" @click="toLogin">立即找回</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				code: '',
+				phone: '',
+				password: '',
+				sending: false,
+				sendTime: '获取验证码',
+				count: 60,
+				logining: false
+			}
+		},
+
+		methods: {
+			sendMsg() {
+				const {
+					phone
+				} = this;
+				if (!phone) {
+					this.$queue.showToast("请输入手机号");
+				} else if (phone.length !== 11) {
+					this.$queue.showToast("请输入正确的手机号");
+				} else {
+					this.$queue.showLoading("正在发送验证码...");
+					this.$Request.getT("/app/Login/sendMsg/" + phone + "/forget").then(res => {
+						if (res.code === 0) {
+							this.sending = true;
+							this.$queue.showToast('验证码发送成功请注意查收');
+							this.countDown();
+							uni.hideLoading();
+						} else {
+							uni.hideLoading();
+							uni.showModal({
+								showCancel: false,
+								title: '短信发送失败',
+								content: res.msg ? res.msg : '请一分钟后再获取验证码'
+							});
+						}
+					});
+				}
+			},
+			countDown() {
+				const {
+					count
+				} = this;
+				if (count === 1) {
+					this.count = 60;
+					this.sending = false;
+					this.sendTime = '获取验证码'
+				} else {
+					this.count = count - 1;
+					this.sending = true;
+					this.sendTime = count - 1 + '秒后重新获取';
+					setTimeout(this.countDown.bind(this), 1000);
+				}
+			},
+			inputChange(e) {
+				const key = e.currentTarget.dataset.key;
+				this[key] = e.detail.value;
+			},
+			navBack() {
+				uni.navigateBack();
+			},
+
+
+			navTo(url) {
+				uni.navigateTo({
+					url
+				})
+			},
+			toLogin() {
+				const {
+					phone,
+					password,
+					code
+				} = this;
+				if (!phone) {
+					this.$queue.showToast("请输入手机号");
+				} else if (!password) {
+					this.$queue.showToast("请设置密码");
+				} else if (password.length < 6) {
+					this.$queue.showToast("密码位数必须大于六位");
+				} else {
+					this.logining = true;
+					this.$queue.showLoading("正在修改密码中...");
+					this.$Request.post("/app/Login/forgetPwd", {
+						pwd: password,
+						phone: phone,
+						msg: code
+					}).then(res => {
+						uni.hideLoading();
+						if (res.code === 0) {
+							uni.navigateTo({
+								url: '/pages/public/loginphone'
+							});
+						} else {
+
+							uni.showModal({
+								showCancel: false,
+								title: '密码找回失败',
+								content: res.msg,
+							});
+						}
+					});
+				}
+			},
+		},
+
+	}
+</script>
+
+<style lang='scss'>
+
+
+	.send-msg {
+		border-radius: 30px;
+		color: white;
+		height: 30px;
+		font-size: 14px;
+		line-height: 30px;
+		
+	}
+
+	.container {
+		padding-top: 32upx;
+		position: relative;
+		width: 100%;
+		height: 100%;
+		overflow: hidden;
+		
+	}
+
+	.wrapper {
+		position: relative;
+		z-index: 90;
+		
+		padding-bottom: 20px;
+	}
+
+
+	.input-content {
+		padding: 32upx 80upx;
+	}
+
+
+	.confirm-btn {
+		width: 600upx;
+		height: 80upx;
+		line-height: 80upx;
+		border-radius: 60upx;
+		margin-top: 32upx;
+		
+		color: #fff;
+		font-size: 32upx;
+
+		&:after {
+			border-radius: 60px;
+		}
+	}
+
+</style>

+ 618 - 0
pages/login/login.vue

@@ -0,0 +1,618 @@
+<template>
+	<view class="login">
+		<!-- 小程序状态下登录 -->
+		<!-- #ifdef MP-WEIXIN -->
+		<view class="mp_wxBox">
+			<view>
+				<view class="headers">
+					<image src="../../static/logo.png" style="border-radius: 50%;"></image>
+				</view>
+				<view class="content">
+					<view>申请获取以下权限</view>
+					<text style="margin-top: 20rpx;">获得你的公开信息(昵称,头像、地区等)</text>
+				</view>
+				<button v-show="weixinPhone" style="background: #FF7F00;background-color: #FF7F00;color: #FFFFFF;"
+					class="bottom" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
+					授权手机号
+				</button>
+				<!-- <button v-show="!weixinPhone" style="background: #FF3530; color: #FFF;" class="bottom"
+					open-type="getUserInfo" withCredentials="true" lang="zh_CN" @getuserinfo="wxGetUserInfo">
+					立即登录
+				</button> -->
+				<button v-show="!weixinPhone" style="background: #FF7F00;color: #FFFFFF;" class='bottom'
+					bindtap="getUserProfile" @tap="wxGetUserInfo">
+					授权登录
+				</button>
+
+				<!-- 底部信息 -->
+				<view class="footer">
+					<text @tap="isShowAgree" class="cuIcon" :class="showAgree?'cuIcon-radiobox':'cuIcon-round'">同意
+					</text>
+					<!-- 协议地址 -->
+					<navigator url="/pages/riderMy/set/mimi" open-type="navigate">《隐私政策》</navigator>和
+					<navigator url="/pages/riderMy/set/xieyi" open-type="navigate">《用户服务协议》</navigator>
+				</view>
+			</view>
+		</view>
+		<!-- #endif -->
+
+
+		<!-- #ifndef MP-WEIXIN -->
+		<view class="register">
+			<!-- <view class="back-btn yticon icon-zuojiantou-up" @click="navBack"></view> -->
+			<view style="padding-top: 172upx;margin-left: 36upx;">
+				<view style="color: #333333;font-size: 44upx;">手机快捷登录</view>
+				<view style="color: #999999;font-size: 24upx;margin-top: 20upx;">未注册的手机号将自动创建账号</view>
+			</view>
+			<view style="margin-left: 26upx;margin-top: 104upx;">
+				<wInput v-model="phoneData" type="number" maxlength="11" placeholder="请输入手机号"></wInput>
+				<!-- <wInput v-model="passData" type="number" maxlength="6" placeholder="请输入密码"></wInput> -->
+				<wInput v-model="verCode" type="number" maxlength="6" placeholder="请输入验证码" isShowCode ref="runCode"
+					@setCode="sendMsg()"></wInput>
+				<wInput v-show="show" v-model="invitation" isShowGet ref="setNumberCode" @setNumberCode="isShowGet()"
+					placeholder="请填写邀请码"></wInput>
+			</view>
+
+			<view class="footer" style=" margin-right: 72px;">
+				<image v-if="showAgree" @tap="isShowAgree"
+					src="https://api.shengqianxiong.com.cn/img/20201112/669aa8946cfb4ebdb459d57193c0ebca.png"
+					style="width: 36upx;height: 36upx;"></image>
+				<image v-else @tap="isShowAgree"
+					src="https://api.shengqianxiong.com.cn/img/20201112/1e9102fc891f4d86a13c7b2ba6921cba.png"
+					style="width: 36upx;height: 36upx;"></image>
+				<text style="margin-left: 10upx;margin-right: 0;">同意</text>
+				<navigator url="/pages/riderMy/set/mimi" open-type="navigate">《隐私政策》</navigator>和
+				<navigator url="/pages/riderMy/set/xieyi" open-type="navigate">《用户服务协议》</navigator>
+			</view>
+			<wButton text="登 录" :rotate="isRotate" @click.native="startReg()"></wButton>
+		</view>
+		<!-- #endif -->
+	</view>
+</template>
+
+<script>
+	import wInput from '@/components/watch-login/watch-input.vue' //input
+	import wButton from '@/components/watch-login/watch-button.vue' //button
+
+	export default {
+		components: {
+			wInput,
+			wButton,
+		},
+		data() {
+			return {
+				phoneData: '',
+				verCode: '',
+				show: '',
+				invitation: '',
+				isRotate: false, //是否加载旋转
+				platform: "app",
+				userType: 2,
+				passData: '', //密码
+
+				numbers: '',
+				password: '',
+				type: 'number',
+				pass: 'number',
+				clearable: false,
+				mobile: '',
+				code: '',
+				sessionkey: '',
+				flag: '1',
+				showAgree: false, //协议是否选择
+				weixinPhone: false,
+				sending: false,
+				sendDataList: {},
+				phone: '',
+				sendTime: '获取验证码',
+				count: 60
+			}
+		},
+		methods: {
+			navBack(){
+				uni.navigateBack()
+			},
+			isShowAgree() {
+				this.showAgree = !this.showAgree
+			},
+			startReg() {
+				var that = this
+				uni.getSystemInfo({
+					success: function(res) {
+						console.log(res.model);
+						if (res.model == 'iPhone') {
+							that.sysphone = 2
+						} else if (res.model != 'iPhone') {
+							that.sysphone = 1
+						}
+					}
+				});
+				//注册
+				if (that.isRotate) {
+					//判断是否加载中,避免重复点击请求
+					return false;
+				}
+				if (that.showAgree == false) {
+					uni.showToast({
+						icon: 'none',
+						position: 'bottom',
+						title: '请先同意《协议》'
+					});
+					return false;
+				}
+				if (that.phoneData.length != 11) {
+					uni.showToast({
+						icon: 'none',
+						position: 'bottom',
+						title: '手机号不正确'
+					});
+					return false;
+				}
+				// if (that.passData.length < 5) {
+				// 	uni.showToast({
+				// 		icon: 'none',
+				// 		position: 'bottom',
+				// 		title: '密码不能低于六位'
+				// 	});
+				// 	return false;
+				// }
+				if (that.verCode == 6) {
+					uni.showToast({
+						icon: 'none',
+						position: 'bottom',
+						title: '验证码不正确'
+					});
+					return false;
+				}
+				that.isRotate = true;
+				console.log('验证码', that.verCode, )
+				// {
+				// 	password: that.passData,
+				// 	phone: that.phoneData,
+				// 	msg: that.verCode,
+				// 	platform: that.platform,
+				// 	userType: that.userType,
+				// 	sysphone: that.sysphone
+				// 	// openid: this.$queue.getData("openid")
+				// }
+
+				var openid = this.$queue.getData("openid") ? this.$queue.getData("openid") : '';
+				that.$Request.postJson("/app/Login/registerCode?password=" + that.passData + '&phone=' + that.phoneData +
+					'&msg=' + that.verCode + '&platform=' + that.platform +
+					'&userType=' + that.userType + '&sysphone=' + that.sysphone + '&openId=' + openid).then(res => {
+					console.log(res)
+					if (res.code == 0) {
+						console.log(res.token)
+						this.$queue.setData("token", res.token);
+						this.$queue.setData("userId", res.user.userId);
+						this.$queue.setData("mobile", res.user.phone);
+						// this.getUserInfo(res.user.userId, res.token);
+						uni.navigateTo({
+							url: '/pages/index/index'
+						})
+						return false;
+					} else {
+						that.isRotate = false;
+						uni.hideLoading();
+						uni.showModal({
+							showCancel: false,
+							title: '登录失败',
+							content: res.msg,
+						});
+					}
+				});
+			},
+			sendMsg() {
+				const {
+					phoneData
+				} = this;
+				if (!phoneData) {
+					this.$queue.showToast("请输入手机号");
+				} else if (phoneData.length !== 11) {
+					this.$queue.showToast("请输入正确的手机号");
+				} else {
+					this.$queue.showLoading("正在发送验证码...");
+					this.$Request.getT("/app/Login/sendMsg/" + phoneData + '/register').then(res => {
+						console.log(res)
+						if (res.code == 0) {
+							if (res.data === 'register') {
+								this.show = true;
+							}
+							this.sending = true;
+							this.$queue.showToast('验证码发送成功请注意查收');
+							this.$refs.runCode.$emit('runCode');
+							uni.hideLoading();
+						} else {
+							uni.hideLoading();
+							uni.showModal({
+								showCancel: false,
+								title: '短信发送失败',
+								content: res.msg ? res.msg : '请一分钟后再获取验证码',
+							});
+						}
+					});
+				}
+			},
+			bindriderlogin() {
+				uni.navigateTo({
+					url: '/pages/login/running_rider/running_rider'
+				})
+			},
+			forgetPwd() {
+				uni.navigateTo({
+					url: '/pages/login/forgetPwd'
+				})
+			},
+			//第一授权获取用户信息===》按钮触发
+			wxGetUserInfo(e) {
+				if (!this.showAgree) {
+					uni.showToast({
+						title: '请选择用户和隐私协议',
+						icon: 'none'
+					})
+					return
+				}
+				let that = this;
+				wx.getUserProfile({
+					desc: '业务需要',
+					success: infoRes => {
+						console.log("infoRes.encryptedData__________:",infoRes.userInfo)
+						let userName = infoRes.userInfo.nickName; //昵称
+						let avatarUrl = infoRes.userInfo.avatarUrl; //头像
+						let sex = infoRes.userInfo.gender; //头像
+						try {
+							that.login(userName, avatarUrl, sex);
+						} catch (e) {}
+					}
+				})
+			},
+			//小程序微信登录后获取手机号
+			getPhoneNumber: function(e) {
+				console.log(e);
+				if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
+					console.log('用户拒绝提供手机号');
+				} else {
+					console.log('用户同意提供手机号');
+					this.setPhoneByInsert(e.detail.encryptedData, e.detail.iv);
+				}
+			},
+			//小程序微信登录后获取手机号
+			setPhoneByInsert(decryptData, iv) {
+				this.$queue.showLoading('登录中...');
+
+				let data = {
+					decryptData: decryptData,
+					key: this.sessionkey,
+					iv: iv
+				};
+				this.$Request.postJson('/app/Login/selectPhone', data).then(res => {
+					if (res.code === 0) {
+						uni.hideLoading();
+						this.phone = res.data.phoneNumber;
+						this.getWeixinInfo(this.sendDataList);
+					} else {
+						uni.hideLoading();
+						this.$queue.showToast(res.msg);
+					}
+				});
+			},
+			//获取个人信息
+			getWeixinInfo(sendData) {
+				let that = this;
+				// let url = '/user/mp/update';
+				uni.showLoading({
+					title: '登录中...'
+				});
+				var postData = {
+					riderOpenId: sendData.openid, //小程序openid
+					platform: '小程序', //unionId
+					userName: sendData.userName, //微信名称
+					avatar: sendData.imageUrl, //头像
+					userId: '', //性别
+					phone: that.phone,
+					inviterCode: sendData.invitation,
+					sex: sendData.gender
+				};
+				that.$Request.postJson('/app/Login/insertWxRiderUser', postData).then(res => {
+					console.log(res);
+					if (res.code === 0) {
+						uni.hideLoading();
+						that.$queue.setData('token', res.token);
+						that.$queue.setData('userId', res.user.userId);
+						that.$queue.setData("avatar", res.user.avatar ? res.user.avatar : '/static/img/logo.png');
+						that.$queue.setData("userName", res.user.userName);
+						that.$queue.setData("invitationCode", res.user.invitationCode);
+						that.$queue.setData("inviterCode", res.user.inviterCode);
+						that.$queue.setData("sex", res.user.sex);
+						that.$queue.setData("phone", res.user.phone);
+						that.$queue.setData("platform", res.user.platform);
+
+						that.$queue.setData("zhiFuBao", res.user.zhiFuBao);
+						that.$queue.setData("zhiFuBaoName", res.user.zhiFuBaoName);
+
+						that.$queue.setData("checkCertification", res.user.checkCertification);
+						uni.navigateBack();
+						// that.initUserInfo(res.user.userId, res.token);
+					} else {
+						uni.hideLoading();
+						uni.showModal({
+							showCancel: false,
+							title: '登录失败',
+							content: res.msg
+						});
+					}
+				});
+			},
+
+			login(userName, avatarUrl, sex) {
+				console.log(userName, avatarUrl, sex, '*********')
+				let that = this;
+				uni.showLoading({
+					title: '登录中...'
+				});
+				// 1.wx获取登录用户code
+				uni.login({
+					provider: 'weixin',
+					success: function(loginRes) {
+						var getParams = {
+							code: loginRes.code,
+							userType: 2
+						};
+						that.$Request.getT('/app/Login/wxRiderLogin', getParams).then(res => {
+							console.log(res, '登录');
+							if (res.code == 0) {
+								
+									that.$queue.setData('openid', res.data.open_id);
+									that.$queue.setData('unionid', res.data.unionid);
+									that.sessionkey = res.data.session_key;
+									that.flag = res.data.flag;
+									console.log(res.data.unionid, res.data.session_key);
+									uni.hideLoading();
+									//非第一次授权获取用户信息
+									//获取用户信息后向调用信息更新方法
+									that.$queue.setData("sessionkey", res.data.session_key);
+
+									var userByinvitationId = that.$queue.getData('userByinvitationId');
+									if (userByinvitationId) {
+										that.userByinvitationId = userByinvitationId;
+									} else {
+										that.userByinvitationId = that.$queue.getInvitation();
+									}
+									var sendData = {
+										openid: that.$queue.getData('openid'),
+										unionid: that.$queue.getData('unionid'),
+										userName: userName,
+										imageUrl: avatarUrl,
+										gender: sex, //性别
+										invitation: that.userByinvitationId //别人登录进来携带你的邀请码
+									};
+									that.sendDataList = sendData;
+
+									
+									if (res.data.isPhone == 2) {
+										that.weixinPhone = true
+									} else {
+										that.getWeixinInfo(sendData);
+									}
+							}
+						});
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style lang='scss'>
+	.headers {
+		text-align: center;
+	}
+
+	.headers>image {
+		width: 400upx;
+		height: 400upx;
+	}
+
+	.footer {
+		/* // padding-left: 140upx; */
+		justify-content: center;
+		margin-top: 32upx;
+		font-size: 24upx;
+		color: #666666;
+		display: flex;
+		text-align: center;
+		align-items: center;
+	}
+
+	page {
+		background: #fff;
+	}
+
+	.send-msg {
+		border-radius: 30px;
+		color: black;
+		background: white;
+		height: 30px;
+		font-size: 14px;
+		line-height: 30px;
+	}
+
+	.container {
+		top: 0;
+		padding-top: 32upx;
+		position: relative;
+		width: 100%;
+		height: 100%;
+		overflow: hidden;
+		background: #fff;
+
+
+	}
+
+	.mp_wxBox {}
+
+	.headers {
+		margin: 35% auto 50rpx;
+		text-align: center;
+		border-radius: 60rpx;
+		width: 650rpx;
+		height: 300rpx;
+		line-height: 450rpx;
+
+
+	}
+
+	.headers image {
+		width: 300rpx;
+		height: 300rpx;
+	}
+
+	.content {
+		text-align: center;
+	}
+
+	.headers text {
+		display: block;
+		color: #9d9d9d;
+		/* // margin-top: 40rpx; */
+	}
+
+	.bottom {
+		line-height: 80upx;
+		border-radius: 80upx;
+		margin: 50rpx;
+		height: 80upx;
+		font-size: 35rpx;
+	}
+
+
+
+	.welcome {
+		position: relative;
+		left: 30px;
+		top: -55px;
+		font-size: 28px;
+		color: #555;
+		text-shadow: 1px 0px 1px rgba(0, 0, 0, 0.3);
+	}
+
+	.input-content {
+		padding: 0 20px;
+	}
+
+	.left-top-sign {
+		font-size: 80px;
+		/* color: $page-color-base; */
+		position: relative;
+	}
+
+	.right-top-sign {
+		position: absolute;
+		top: 40px;
+		right: -15px;
+		z-index: 95;
+
+
+	}
+
+	.right-top-sign:before,
+	.right-top-sign:after {
+		display: block;
+		content: '';
+		width: 20px;
+		height: 40px;
+		background: #FF7F00;
+	}
+
+	.right-top-sign:before {
+		transform: rotate(50deg);
+		border-radius: 0 50px 0 0;
+	}
+
+	.right-top-sign:after {
+		position: absolute;
+		right: -198px;
+		top: 0;
+		transform: rotate(-50deg);
+		border-radius: 50px 0 0 0;
+		/* background: pink; */
+	}
+
+	/* ````` */
+	.login {
+		width: 100%;
+	}
+
+	.login_type {
+		width: 90%;
+		margin: 0 auto;
+		margin-top: 50rpx;
+		margin-bottom: 135rpx;
+	}
+
+	.type_name {
+		font-size: 38rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+	}
+
+	.type_tit {
+		color: #999999;
+		font-size: 21rpx;
+		margin-top: 10rpx;
+	}
+
+	/* 登录 */
+	.login_input {
+		width: 80%;
+		margin: 0 auto;
+	}
+
+	.numbers {
+		height: 120rpx;
+	}
+
+	.u-input__input {
+		border-bottom: 1rpx solid #E6E6E6 !important;
+	}
+
+	.submit {
+		width: 100%;
+		height: 90rpx;
+		background: #FF7F00;
+		color: white;
+		text-align: center;
+		line-height: 90rpx;
+		border-radius: 20rpx;
+		margin-top: 75rpx;
+	}
+
+	.submit_bottom {
+		display: flex;
+		height: 70rpx;
+	}
+
+	.bottom_left {
+		flex: 1;
+		color: #999999;
+		font-size: 26rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+	}
+
+	.bottom_right {
+		flex: 1;
+		color: #FF7F00;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.wrapper {
+		position: relative;
+		z-index: 90;
+		background: #fff;
+		padding-bottom: 20px;
+	}
+</style>

+ 280 - 0
pages/login/running_rider/running_rider.vue

@@ -0,0 +1,280 @@
+<template>
+	<view class="content">
+		<view class="user_box">
+			<u-form :model="form" ref="uForm" label-position="top">
+				<u-form-item label="姓名">
+					<u-input v-model="form.name" height="60rpx" placeholder="可商议" />
+				</u-form-item>
+				<u-form-item label="出生日期">
+					<u-input v-model="form.data" height="60rpx" placeholder="请填写 (必填)" />
+				</u-form-item>
+				<u-form-item label="地址">
+					<u-input v-model="form.address" height="60rpx" placeholder="请填写 (选填)" />
+				</u-form-item>
+			</u-form>
+		</view>
+		<!-- 实名认证 -->
+		<view class="user_upload">
+			<view class="upload_name">实名认证</view>
+			
+			<view class="upload_box">
+				<view class="upload" v-for="(item,index) in upload_list" :key="item.id">
+					<view class="box">
+						<view class="upload_image">
+							<image :src="item.image"></image>
+						</view>
+						<view class="upload_tit">{{item.name}}</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- 缴纳保证金 -->
+		<view class="deposit">
+			<view class="deposit_left">
+				<view class="deposit_name">缴纳保证金</view>
+				<view class="deposit_tit">满足订单量及好评率即可申请退还保证金</view>
+			</view>
+			<view class="deposit_right">
+				¥200
+			</view>
+		</view>
+		<!-- checkbox -->
+		<view class="sure_submit">
+			<u-checkbox-group>
+				<u-checkbox v-model="checked" shape="circle">同意并接受《跑腿代购服务用户协议》</u-checkbox>
+			</u-checkbox-group>
+		</view>
+		<!-- 底部 tabbar -->
+		<view class="tabbar">
+			<view class="tabbar_price">
+				支付:<text>¥200</text>
+			</view>
+			<view class="tabbar_btn">
+				<view class="btn">注册并支付</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				form: {
+					name: '',
+					data: '',
+					address: ''
+				},
+				upload_list: [{
+					id: 1,
+					name: '请拍摄身份证正面',
+					image: '../../../static/login/add.png'
+				}, {
+					id: 1,
+					name: '请拍摄身份证反面',
+					image: '../../../static/login/add.png'
+				}, {
+					id: 1,
+					name: '请拍摄手持身份证正面',
+					image: '../../../static/login/add.png'
+				}]
+			}
+		},
+		methods: {
+
+		}
+	}
+</script>
+
+<style>
+	body {
+		background: #F5F5F5;
+	}
+
+	.content {
+		width: 100%;
+	}
+
+	.user_box {
+		width: 90%;
+		margin: 0 auto;
+		height: 360rpx;
+		background: #ffffff;
+		margin-top: 30rpx;
+		border-radius: 18rpx;
+		padding-top: 10rpx;
+	}
+
+	.u-form-item {
+		padding: 0rpx 0 !important;
+		font-weight: bold !important;
+		/* margin-left: 40rpx !important; */
+		line-height: 40rpx !important;
+		margin-top: 20rpx;
+	}
+
+	.u-input__input {
+		font-size: 25rpx !important;
+		font-weight: 400 !important;
+	}
+
+	/* 实名认证 */
+	.user_upload {
+		width: 90%;
+		margin: 0 auto;
+		/* height: 500rpx; */
+		background: #ffffff;
+		margin-top: 50rpx;
+		border-radius: 18rpx;
+	}
+
+	.upload_name {
+		width: 90%;
+		margin: 0 auto;
+		height: 80rpx;
+		line-height: 80rpx;
+		font-size: 27rpx;
+		font-weight: bold;
+	}
+
+	.upload_box {
+		width: 90%;
+		margin: 0 auto;
+	}
+
+	.upload {
+		width: 100%;
+		height: 300rpx;
+		border: 1rpx dashed;
+		margin-bottom: 37rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.box {
+		width: 300rpx;
+		text-align: center;
+	}
+
+	.upload_image image {
+		width: 73rpx;
+		height: 60rpx;
+	}
+
+	.upload_tit {
+		font-size: 23rpx;
+		color: #353535;
+	}
+
+	/* 缴纳保证金 */
+	.deposit {
+		width: 90%;
+		margin: 0 auto;
+		height: 135rpx;
+		margin-top: 20rpx;
+		background: #FFFFFF;
+		display: flex;
+		border-radius: 18rpx;
+	}
+
+	.deposit_left {
+		flex: 2;
+		margin-left: 25rpx;
+		margin-top: 25rpx;
+	}
+
+	.deposit_name {
+		color: #FF9707;
+		font-size: 26rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+	}
+
+	.deposit_tit {
+		font-size: 22rpx;
+		color: #999999;
+		margin-top: 10rpx;
+	}
+
+	.deposit_right {
+		flex: 1;
+		color: #F1413D;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		margin-right: 25rpx;
+	}
+
+	.sure_submit {
+		width: 90%;
+		margin: 0 auto;
+		height: 100rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+		margin-bottom: 90rpx;
+	}
+
+	/*  checkbox */
+	.u-checkbox__label {
+		font-size: 23rpx !important;
+		color: #888888 !important;
+	}
+
+	.u-checkbox__icon-wrap--circle {
+		width: 26rpx !important;
+		height: 26rpx !important;
+	}
+
+	/* 底部 tabbar */
+	.tabbar {
+		width: 100%;
+		height: 100rpx;
+		background: #ffffff;
+		position: fixed;
+		bottom: 0rpx;
+		left: 0rpx;
+		right: 0rpx;
+		display: flex;
+	}
+
+	.tabbar_price {
+		flex: 1;
+		margin-left: 50rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+		color: black;
+		font-size: 30rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+	}
+
+	.tabbar_price text {
+		color: red;
+		font-weight: 500;
+		font-size: 28rpx;
+	}
+
+	.tabbar_btn {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.btn {
+		background: #ff6a04;
+		border-radius: 41rpx;
+		width: 220rpx;
+		height: 74rpx;
+		text-align: center;
+		line-height: 74rpx;
+		color: white;
+		font-size: 25rpx;
+		letter-spacing: 1rpx;
+	}
+	
+	
+</style>

+ 98 - 0
pages/riderLogin/riderLogin.vue

@@ -0,0 +1,98 @@
+<template>
+	<view class="riderr_login">
+		<view class="rider_type">
+			<view class="type_name">请选择注册类型</view>
+			<view class="type_tit">请选择您是那种注册用户类型</view>
+		</view>
+		<view class="type_box" v-for="(item,index) in list" :key="item.id" @click="bindrider(item.name)">
+			<view class="name">{{item.name}}</view>
+			<view class="icon">
+				<u-icon name="arrow-right"></u-icon>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				list: [{
+					id: 1,
+					name: '跑腿骑手'
+				}, {
+					id: 2,
+					name: '同城师傅'
+				}]
+			}
+		},
+		methods: {
+			bindrider(name) {
+				console.log(name)
+				if(name == '跑腿骑手'){
+					uni.navigateTo({
+						url:'/pages/login/login'
+					})
+				}
+			}
+		}
+	}
+</script>
+
+<style>
+	.riderr_login {
+		width: 100%;
+	}
+
+	.rider_type {
+		width: 90%;
+		margin: 0 auto;
+		margin-top: 50rpx;
+		margin-bottom: 135rpx;
+	}
+
+	.type_name {
+		font-size: 38rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+	}
+
+	.type_tit {
+		color: #999999;
+		font-size: 21rpx;
+		margin-top: 10rpx;
+	}
+
+	.type_box {
+		width: 90%;
+		margin: 0 auto;
+		height: 110rpx;
+		background: #F2F2F2;
+		display: flex;
+		margin-bottom: 20rpx;
+		border-radius: 18rpx;
+	}
+
+	.name {
+		flex: 1;
+		font-size: 30rpx;
+		color: black;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+		margin-left: 60rpx;
+	}
+
+	.icon {
+		flex: 1;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		margin-right: 30rpx;
+	}
+
+	.icon image {
+		width: 15rpx;
+		height: 25rpx;
+	}
+</style>

+ 551 - 0
pages/riderMy/approve/approve.vue

@@ -0,0 +1,551 @@
+<template>
+	<view v-if="XCXIsSelect !='否'">
+		<view class="padding">
+			<view class=" padding-lr bg-white radius">
+				<u-form :model="form" ref="uForm" label-position="top" :label-style='lableStyle'>
+					<u-form-item label="真实姓名" :border-bottom='false'>
+						<u-input :disabled="disabled" placeholder="请输入真实姓名" v-model="form.userName" />
+					</u-form-item>
+					<u-form-item label="证件号码" :border-bottom='false'>
+						<u-input :disabled="disabled" placeholder="请输入身份证号码" v-model="form.identityCardNumber" />
+					</u-form-item>
+				</u-form>
+			</view>
+			<view class=" padding bg-white radius margin-top">
+				<view class="margin-top"
+					style="border: 2rpx dashed #484B74; width: 100%;height: 320rpx;position: relative;">
+					<view style="text-align: center;margin: 80rpx auto 0;" @click="addImages(1)"
+						v-if="!form.identityCardFront">
+						<image src="../../../static/my/photo.png" mode="widthFix" style="width: 73rpx;"></image>
+						<view class="text-sm text-gray margin-top-sm">请拍摄身份证正面</view>
+					</view>
+					<image @click="disabled? '':addImages(1)" v-else :src="form.identityCardFront"
+						style="width: 100%;height: 320rpx;"></image>
+				</view>
+				<!-- <view class="text-lg">上传身份证反面</view> -->
+				<view class="margin-top"
+					style="border: 2rpx dashed #484B74; width: 100%;height: 320rpx;position: relative;">
+					<view style="text-align: center;margin: 80rpx auto 0;" @click="addImages(2)"
+						v-if="!form.identityCardVerso">
+						<image src="../../../static/my/photo.png" mode="widthFix" style="width: 73rpx;"></image>
+						<view class="text-sm text-gray margin-top-sm">请拍摄身份证反面</view>
+					</view>
+					<image @click="disabled? '':addImages(2)" v-else :src="form.identityCardVerso"
+						style="width: 100%;height: 320rpx;"></image>
+				</view>
+				<view class="margin-top"
+					style="border: 2rpx dashed #484B74; width: 100%;height: 320rpx;position: relative;">
+					<view style="text-align: center;margin: 80rpx auto 0;" @click="addImages(3)"
+						v-if="!form.selfIdentityCard">
+						<image src="../../../static/my/photo.png" mode="widthFix" style="width: 73rpx;"></image>
+						<view class="text-sm text-gray margin-top-sm">请拍摄手持身份证正面</view>
+					</view>
+					<image @click="disabled? '':addImages(3)" v-else :src="form.selfIdentityCard"
+						style="width: 100%;height: 320rpx;"></image>
+				</view>
+			</view>
+			<view class="padding bg-white radius margin-top">
+				<view class="text-bold">缴纳保证金</view>
+				<view class="flex justify-between margin-top-sm">
+					<view class="text-gray">满足订单量及好评率即可申请退还保证金</view>
+					<view class="text-bold" style="color: #FF6A04;">¥{{money}}</view>
+				</view>
+			</view>
+			<view class="padding margin-top footer text-xxl">
+				<text @tap="isShowAgree" class="cuIcon" :class="showAgree?'cuIcon-radiobox':'cuIcon-round'">同意并接受</text>
+				<!-- 协议地址 -->
+				<navigator url="/pages/riderMy/paotuixieyi" open-type="navigate">《跑腿代购用户协议》</navigator>
+			</view>
+			<view style="height: 120rpx;"></view>
+		</view>
+		<view class="bg-white flex justify-between align-center padding-lr"
+			style="position: fixed;bottom: 0;width: 100%;height: 120rpx;">
+			<view class="">
+				<text class="text-lg text-bold text-black">支付:</text>
+				<text class="text-red">¥{{money}}</text>
+			</view>
+			<view>
+				<u-button v-if="!disabled" @click="submit" class="" :custom-style="customStyle" shape="circle"
+					:hair-line="false">提交认证</u-button>
+			</view>
+		</view>
+
+		<u-popup v-model="showpay" mode="bottom" close-icon="close-circle" close-icon-pos="top-right"
+			close-icon-color="#8f9298" close-icon-size="50">
+			<view class="popup_pay">
+				<view class="bg margin-top padding-lr radius">
+					<view style="padding: 0 20upx;margin-top: 36rpx;">
+						<view
+							style="display: flex;height: 100upx;align-items: center;padding: 20upx 0;justify-content: center;"
+							v-for="(item,index) in openLists" :key='index'>
+							<image :src="item.image" style="width: 55upx;height: 55upx;border-radius: 50upx;">
+							</image>
+							<view style="font-size: 30upx;margin-left: 20upx;width: 70%;">
+								{{item.name}}
+							</view>
+							<radio-group name="openWay" style="margin-left: 45rpx;" @tap='selectWay(item)'>
+								<label class="tui-radio">
+									<radio color="#FF7F00" :checked="openWay == item.id ? true : false" />
+								</label>
+							</radio-group>
+						</view>
+					</view>
+				</view>
+				<view class="pay_btns" @click="pay()">确认支付</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import configdata from '@/common/config.js';
+	import configurl from '../../../common/config.js'
+	export default {
+		data() {
+			return {
+				form: {
+					userName: '',
+					// phone: '',
+					identityCardNumber: '',
+					identityCardFront: '',
+					identityCardVerso: '',
+					selfIdentityCard: '',
+					cashDeposit: ''
+				},
+				disabled: false,
+				lableStyle: {
+					color: '#000',
+					fontSize: '36upx',
+					fontWeight: 700
+				},
+				customStyle: {
+					backgroundColor: '#FF6A04',
+					color: '#FFFFFF',
+					border: 0,
+					width: '200rpx'
+				},
+				btnStyle: {
+					backgroundColor: '#FF6A04',
+					color: '#FFFFFF',
+				},
+				money: 0,
+				showAgree: false, //协议是否选择
+				sessionkey: '',
+
+				showpay: false,
+				openWay: 1,
+				openLists: [],
+				indentNumber: '',
+				XCXIsSelect:'否'
+			}
+		},
+		onLoad() {
+			this.XCXIsSelect = this.$queue.getData('XCXIsSelect');
+			if(this.XCXIsSelect =='否'){
+				uni.setNavigationBarTitle({
+				    title: '隐私政策'
+				});
+			}else{
+				uni.setNavigationBarTitle({
+				    title: '实名认证'
+				});
+			}
+			// #ifdef MP-WEIXIN
+			this.openLists = [{
+				id: 1,
+				image: '../../../static/my/weixin.png',
+				name: '微信'
+			}]
+			this.openWay = 1
+			// #endif
+			// #ifdef H5
+			this.openLists = [
+				 {
+				 	id: 1,
+				 	image: '../../../static/my/weixin.png',
+				 	name: '微信'
+			     },
+				{
+					id: 2,
+					image: '../../../static/my/zhifubao.png',
+					name: '支付宝'
+				}
+				
+			]
+			this.openWay = 1
+			// #endif
+			// #ifdef APP-PLUS
+			this.openLists = [{
+					id: 1,
+					image: '../../../static/my/weixin.png',
+					name: '微信'
+				},
+				{
+					id: 2,
+					image: '../../../static/my/zhifubao.png',
+					name: '支付宝'
+				}
+			]
+			// #endif
+
+			this.getRZmoney()
+			this.sessionkey = this.$queue.getData("sessionkey");
+		},
+		methods: {
+			isShowAgree() {
+				this.showAgree = !this.showAgree
+			},
+			getRZmoney() {
+				this.$Request.get("/app/common/type/273").then(res => {
+					if (res.code == 0) {
+						this.money = res.data.value
+						this.form.cashDeposit = res.data.value
+					}
+				});
+			},
+			selectWay: function(item) {
+				this.openWay = item.id;
+			},
+			submit() {
+				let that = this
+				console.log(that.form)
+				if (!that.form.userName) {
+					uni.showToast({
+						title: '请输入真实姓名',
+						icon: 'none',
+						duration: 1000
+					})
+					return;
+				}
+				if (!that.form.identityCardNumber) {
+					uni.showToast({
+						title: '请输入身份证号',
+						icon: 'none',
+						duration: 1000
+					})
+					return;
+				}
+				if (!that.form.identityCardFront) {
+					uni.showToast({
+						title: '请上传身份证正面',
+						icon: 'none',
+						duration: 1000
+					})
+					return;
+				}
+				if (!that.form.identityCardVerso) {
+					uni.showToast({
+						title: '请上传身份证反面',
+						icon: 'none',
+						duration: 1000
+					})
+					return;
+				}
+				if (!that.form.selfIdentityCard) {
+					uni.showToast({
+						title: '请上传手持身份证正面',
+						icon: 'none',
+						duration: 1000
+					})
+					return;
+				}
+
+				if (!this.showAgree) {
+					uni.showToast({
+						title: '请勾选跑腿代购用户协议',
+						icon: 'none',
+						duration: 1000
+					})
+					return;
+				}
+				// #ifdef MP-WEIXIN
+				that.$Request.postJson("/app/wxPayErrRider/wxPayJsApiRiderCertification/3", that.form).then(res => {
+					if (res.code == 0) {
+						uni.requestPayment({
+							provider: 'wxpay',
+							timeStamp: res.data.timestamp,
+							nonceStr: res.data.noncestr,
+							package: res.data.package,
+							signType: res.data.signType,
+							paySign: res.data.sign,
+							success: function(res) {
+								console.log(res)
+								uni.hideLoading();
+								uni.showToast({
+									title: '实名认证提交成功',
+									icon: 'none'
+								});
+								setTimeout(function() {
+									uni.navigateBack(1)
+								}, 1000)
+							},
+							fail: function(err) {
+								console.log('fail:' + JSON.stringify(err));
+								uni.hideLoading();
+								that.$queue.showToast('支付失败');
+							}
+						});
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						})
+					}
+				});
+				// #endif
+				// #ifdef H5
+				this.showpay = true
+
+				// #endif
+				// #ifdef APP-PLUS
+				this.showpay = true
+				// #endif
+
+			},
+			getUserInfo() {
+				this.$Request.get("/app/userinfo/findUserInfoById").then(res => {
+					if (res.code == 0) {
+						this.form.name = res.data.name ? res.data.name : ''
+						this.form.idNumber = res.data.idNumber ? res.data.idNumber : ''
+						this.form.front = res.data.front ? res.data.front : ''
+						this.form.back = res.data.back ? res.data.back : ''
+
+						if (res.data.status == 1) {
+							this.disabled = true
+						}
+						if (res.data.status == 2) {
+							this.form.remek = res.data.remek ? res.data.remek : ''
+						}
+					}
+				});
+			},
+			addImages(e) {
+				let that = this
+				uni.chooseImage({
+					count: 1,
+					sourceType: ['album', 'camera'],
+					success: res => {
+						for (let i = 0; i < 1; i++) {
+							that.$queue.showLoading("上传中...");
+							uni.uploadFile({ // 上传接口
+								url: configurl.APIHOST2 + '/sqx_fast/alioss/upload', //真实的接口地址
+								// url: 'https://www.daweilinli.com/sqx_fast/alioss/upload',
+								filePath: res.tempFilePaths[i],
+								name: 'file',
+								success: (uploadFileRes) => {
+									console.log(uploadFileRes)
+									if (e == 1) {
+										that.form.identityCardFront = JSON.parse(uploadFileRes
+											.data).data
+									} else if (e == 2) {
+										that.form.identityCardVerso = JSON.parse(uploadFileRes
+											.data).data
+									} else if (e == 3) {
+										that.form.selfIdentityCard = JSON.parse(uploadFileRes.data)
+											.data
+									}
+									uni.hideLoading();
+								}
+							});
+						}
+					}
+				})
+			},
+			config: function(name) {
+				var info = null;
+				if (name) {
+					var name2 = name.split("."); //字符分割
+					if (name2.length > 1) {
+						info = configdata[name2[0]][name2[1]] || null;
+					} else {
+						info = configdata[name] || null;
+					}
+					if (info == null) {
+						let web_config = cache.get("web_config");
+						if (web_config) {
+							if (name2.length > 1) {
+								info = web_config[name2[0]][name2[1]] || null;
+							} else {
+								info = web_config[name] || null;
+							}
+						}
+					}
+				}
+				return info;
+			},
+			pay() {
+				if (this.openWay == 0) {
+					this.$queue.showToast('请选择支付方式!')
+					return;
+				}
+				if (this.openWay == 1) {
+					// #ifdef H5
+					 this.$Request.postJson("/app/wxPayErrRider/wxPayJsApiRiderCertification/2", this.form).then(
+					 	res => {
+					 		console.log(res)
+					 		if (res.code == 0) {
+					 			console.log()
+					 			this.callPay(res.data);
+					 		} else {
+					 			uni.showToast({
+					 				icon: 'none',
+					 				title: '支付失败!'
+					 			});
+					 		}
+					 	});
+					// #endif
+
+					// #ifdef APP-PLUS
+					// 微信APP支付 根据订单id获取支付信息
+					this.$Request.postJson("/app/wxPayErrRider/wxPayJsApiRiderCertification/1", this.form).then(
+						res => {
+							console.log(JSON.stringify(res), '微信支付信息')
+							this.isCheckPay(res.code, 'wxpay', JSON.stringify(res.data));
+						});
+					// #endif
+
+				} else if (this.openWay == 2) { //支付宝支付
+					// #ifdef H5
+					this.$Request.postJson("/app/wxPayErrRider/wxPayJsApiRiderCertification/5", this.form).then(
+						res => {
+							console.log(res)
+							if (res.code == 0) {
+								console.log()
+								const div = document.createElement('div')
+								div.innerHTML = res.data //此处form就是后台返回接收到的数据
+								document.body.appendChild(div)
+								document.forms[0].submit()
+							} else {
+								uni.showToast({
+									icon: 'none',
+									title: '支付失败!'
+								});
+							}
+						});
+					// #endif
+					console.log('支付宝')
+					// APP支付宝支付
+					// #ifdef APP
+					this.$Request.postJson("/app/wxPayErrRider/wxPayJsApiRiderCertification/4", this.form).then(
+						res => {
+							console.log(JSON.stringify(res), '支付宝支付信息')
+							this.setPayment('alipay', res.data);
+						});
+					// #endif
+				}
+			},
+			callPay: function(response) {
+				console.log(response)
+				if (typeof WeixinJSBridge === "undefined") {
+					if (document.addEventListener) {
+						document.addEventListener('WeixinJSBridgeReady', this.onBridgeReady(response), false);
+					} else if (document.attachEvent) {
+						document.attachEvent('WeixinJSBridgeReady', this.onBridgeReady(response));
+						document.attachEvent('onWeixinJSBridgeReady', this.onBridgeReady(response));
+					}
+				} else {
+					this.onBridgeReady(response);
+				}
+			},
+			onBridgeReady: function(response) {
+				let that = this;
+				// if (!response.package) {
+				// 	return;
+				// }
+				console.log(response, 111111)
+				WeixinJSBridge.invoke(
+					'getBrandWCPayRequest', {
+						"appId": response.appid, //公众号名称,由商户传入
+						"timeStamp": response.timestamp, //时间戳,自1970年以来的秒数
+						"nonceStr": response.noncestr, //随机串
+						"package": response.package,
+						"signType": response.signType, //微信签名方式:
+						"paySign": response.sign //微信签名
+					},
+					function(res) {
+						console.log(res, '/*-/*-/*-')
+						if (res.err_msg === "get_brand_wcpay_request:ok") {
+							// 使用以上方式判断前端返回,微信团队郑重提示:
+							//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
+							uni.showLoading({
+								title: '支付成功'
+							});
+							setTimeout(function() {
+								uni.hideLoading();
+								uni.navigateBack()
+							}, 1000);
+						} else {
+							uni.hideLoading();
+						}
+						WeixinJSBridge.log(response.err_msg);
+					}
+				);
+			},
+			isCheckPay(status, name, order) {
+				if (status == 0) {
+					this.setPayment(name, order);
+				} else {
+					uni.hideLoading();
+					uni.showToast({
+						title: '支付信息有误',
+						icon: 'none'
+					});
+				}
+			},
+			setPayment(name, order) {
+				console.log(name, '*-*-*', order)
+				uni.requestPayment({
+					provider: name,
+					orderInfo: order, //微信、支付宝订单数据
+					success: function(res) {
+						console.log(res)
+						uni.hideLoading();
+						uni.showLoading({
+							title: '支付成功'
+						});
+						setTimeout(function() {
+							uni.navigateBack()
+						}, 1000);
+					},
+					fail: function(err) {
+						console.log(err)
+						uni.hideLoading();
+					},
+					complete() {
+						uni.hideLoading();
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style>
+	.footer {
+		/* // padding-left: 140upx; */
+		/* justify-content: center; */
+		margin-top: 32upx;
+		font-size: 24upx;
+		color: #666666;
+		display: flex;
+		text-align: center;
+		align-items: center;
+	}
+
+	/* 支付弹框 */
+	.popup_pay {
+		width: 100%;
+	}
+
+	.pay_btns {
+		width: 90%;
+		margin: 0 auto 40rpx;
+		text-align: center;
+		background: #FF7F00;
+		height: 80rpx;
+		border-radius: 16rpx;
+		color: #ffffff;
+		line-height: 80rpx;
+		margin-top: 20rpx;
+	}
+</style>

+ 85 - 0
pages/riderMy/kefu.vue

@@ -0,0 +1,85 @@
+<template>
+	<view class="content">
+		<view class="kefu_box">
+			<view class="title">联系电话</view>
+			<view style="font-size: 32rpx;">{{mobile}}</view>
+			<view class="btn" @click="PhoneCall">一键拨打</view>
+			<view class="image">
+				<image src="../../../static/logo.png"></image>
+			</view>
+			<view class="tit">长按二维码添加微信</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				mobile: '17884849832'
+			}
+		},
+		methods: {
+			PhoneCall() {
+				uni.makePhoneCall({
+					phoneNumber: this.mobile //仅为示例
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	page {
+		background: #F2F2F2;
+	}
+
+	.content {
+		width: 100%;
+	}
+
+	.kefu_box {
+		width: 90%;
+		margin: 0 auto;
+		background: #ffffff;
+		border-radius: 17rpx;
+		margin-top: 40rpx;
+		padding: 35rpx 0rpx;
+		text-align: center;
+	}
+
+	.title {
+		padding: 20rpx 0rpx;
+		font-size: 41rpx;
+		letter-spacing: 2rpx;
+	}
+
+	.btn {
+		background: #FF6A04;
+		color: #ffffff;
+		width: 42%;
+		margin: 0 auto;
+		border-radius: 54rpx;
+		padding: 20rpx 0rpx;
+		font-size: 37rpx;
+		letter-spacing: 2rpx;
+		margin-top: 25rpx;
+	}
+
+	.image {
+		width: 40%;
+		height: 300rpx;
+		margin: 0 auto;
+		padding: 20rpx 0rpx;
+	}
+
+	.image image {
+		width: 100%;
+		height: 100%;
+	}
+
+	.tit {
+		color: #666666;
+		font-size: 28rpx;
+	}
+</style>

+ 645 - 0
pages/riderMy/kefu/chat.vue

@@ -0,0 +1,645 @@
+<template>
+	<view>
+		<view style="width: 100%;">
+			<view style="display: flex;flex-direction: column;" v-for="(item,index) in ListItem" :key='index' >
+				<view style="margin-top: 15rpx;width: 100%;text-align: center;font-size: 26rpx;color: #999999;">
+					{{item.createTime}}</view>
+				<view v-if="item.sendType === 2" style="width: 83%;margin-right: 15%;">
+					<view class="chat-listitem" style="float: left;margin-left: 10rpx;">
+						<view>
+							<image src="../../../static/logo.png" class="chat-listitem-image"></image>
+						</view>
+						<view v-if="item.content && item.type === 1" class="chat-listitem-text"
+							style="margin-left: 20rpx;">{{item.content}}</view>
+						<image @tap="viewImg(item.content)" v-if="item.content && item.type === 2" :src="item.content"
+							style="height: 200rpx;width: 200rpx;margin-left: 20rpx;"></image>
+					</view>
+				</view>
+
+				<view v-if="item.sendType === 1" style="width: 83%;margin-left: 15%;">
+					<view class="chat-listitem" style="float: right;">
+						<view v-if="item.content && item.type === 1" @longpress="copy(item.content)"
+							class="chat-listitem-text" style="margin-right: 20rpx;">{{item.content}}</view>
+						<view v-if="item.content && item.type === 4" @click="goShop(item.content[3])"
+							style="width: 400rpx;background: #FFFFFF;height: max-content;margin-right: 20rpx;margin-top: 10rpx;border-radius: 20rpx;">
+							<image :src="item.content[0]" class="chat-listitem-image-type4"
+								style="width: 400rpx;height: 350rpx;"></image>
+							<view style="padding: 10rpx;padding-bottom: 20rpx;">
+								<view style="color: #ed5732;font-size: 34rpx;"><text style="font-size: 22rpx;">¥ </text>
+									{{item.content[2]}}</view>
+								<view
+									style="overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;width: 100%;height:  75upx;">
+									{{item.content[1]}}</view>
+							</view>
+						</view>
+						<view v-if="item.content && item.type === 3"
+							style="width: 500rpx;background: #FFFFFF;height: max-content;margin-right: 20rpx;margin-top: 10rpx;border-radius: 20rpx;padding: 15rpx 10rpx;">
+							<view style="color: #000000;font-weight: 600;margin-left: 10rpx;">你正在咨询的订单</view>
+							<view style="display: flex;">
+								<image :src="item.content[0]" class="chat-listitem-image-type4"
+									style="margin-left: 7rpx;margin-top: 20rpx;width: 110rpx;height: 110rpx;"></image>
+								<view
+									style="margin-top: 15rpx;padding: 10rpx 0rpx 5rpx 10rpx;width: 75%;background: #f5f5f5;margin-left: 10rpx;">
+									<view
+										style="font-size: 28rpx;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;height:  75upx;width: 100%;">
+										{{item.content[1]}}</view>
+									<view style="color: #ed5732;font-size: 28rpx;"><text style="font-size: 22rpx;">¥
+										</text>{{item.content[5]}}
+									</view>
+								</view>
+							</view>
+							<view style="color: #999999;margin-top: 10rpx;margin-left: 12rpx;">
+								<view>订单编号:{{item.content[3]}}</view>
+								<view style="margin-top: 10rpx;">创建时间:{{item.content[4]}}</view>
+							</view>
+							<view
+								style="float: right;margin-right: 10rpx;margin-top: 15rpx;background: #F9221D;color: #FFFFFF;border-radius: 50rpx;width: 150rpx;height: 50rpx;font-size: 24rpx;text-align: center;line-height: 50rpx;"
+								@click="goDingdanDetail(item.content[2])">查看</view>
+						</view>
+						<image @tap="viewImg(item.content)" v-if="item.content && item.type === 2" :src="item.content"
+							style="height: 200rpx;width: 200rpx;margin-right: 20rpx;"></image>
+						<view>
+							<image v-if="item.chat.userHead" :src="item.chat.userHead" class="chat-listitem-image">
+							</image>
+							<image v-else src="../../../static/logo.png" class="chat-listitem-image"></image>
+						</view>
+					</view>
+				</view>
+				<!-- <view v-if="item.sendType === 4" style="width: 83%;margin-left: 15%;">
+					<view class="chat-listitem" style="float: right;">
+						<view style="height: max-content;">
+							<image :src="type4[0]" mode=""></image>
+						</view>
+						<image @tap="viewImg(item.content)" v-if="item.content && item.type === 2" :src="item.content" style="height: 200rpx;width: 170rpx;margin-right: 20rpx;"></image>
+						<view>
+							<image :src="item.chat.userHead" class="chat-listitem-image"></image>
+						</view>
+					</view>
+				</view> -->
+			</view>
+		</view>
+		<view v-if="ShopState"
+			style="width: 95%;margin-left: 20rpx;height: 150upx;position: fixed;bottom: 120upx;z-index: 99;background-color: #FFFFFF;border-radius: 20rpx;">
+			<view style="display: flex;width: 100%;color: #000000;padding: 20rpx;">
+				<image :src="Shopimage" style="width: 110rpx;height: 110rpx;"></image>
+				<view style="margin-left: 20rpx;width: 400rpx;">
+					<view
+						style="font-size: 34rpx;color: #000000;overflow: hidden;text-overflow: ellipsis;flex-wrap: nowrap;white-space: nowrap;width: 98%;">
+						{{ShopTitle}}</view>
+					<view style="margin-top: 20rpx;color: #ed5732;font-size: 34rpx;">¥{{Shopmoney}}</view>
+				</view>
+				<view style="text-align: right;">
+					<image @click="ShopClose" src="../../../static/image/close.png"
+						style="width: 30rpx;height: 30rpx;"></image>
+					<view
+						style="margin-top: 20rpx;background: #F9221D;color: #FFFFFF;border-radius: 50rpx;width: 150rpx;height: 50rpx;font-size: 24rpx;text-align: center;line-height: 50rpx;"
+						@click="goMaijia">发送给商家</view>
+				</view>
+			</view>
+		</view>
+		<!-- <view v-if="orderState"
+			style="width: 95%;margin-left: 20rpx;height: 150upx;position: fixed;bottom: 120upx;z-index: 99;background-color: #FFFFFF;border-radius: 20rpx;">
+			<view style="display: flex;width: 100%;color: #000000;padding: 20rpx;">
+				<image :src="orderimage" style="width: 110rpx;height: 110rpx;"></image>
+				<view style="margin-left: 20rpx;width: 400rpx;">
+					<view
+						style="font-size: 34rpx;color: #000000;overflow: hidden;text-overflow: ellipsis;flex-wrap: nowrap;white-space: nowrap;width: 98%;">
+						你可能想咨询该订单</view>
+					<view style="margin-top: 20rpx;color: #ed5732;font-size: 34rpx;">¥{{ordermoney}}</view>
+				</view>
+				<view style="text-align: right;">
+					<image @click="orderClose" src="../../../static/image/close.png"
+						style="width: 30rpx;height: 30rpx;"></image>
+					<view
+						style="margin-top: 20rpx;background: #F9221D;color: #000000;border-radius: 50rpx;width: 150rpx;height: 50rpx;font-size: 24rpx;text-align: center;line-height: 50rpx;"
+						@click="goDingdan">发送订单</view>
+				</view>
+			</view>
+		</view> -->
+		<!-- 底部聊天输入框 -->
+		<view class="input-box">
+			<!-- <view class="justify-between padding-lr" style="display: flex;margin-top: 15rpx;width: 100%;background-color: #eee;padding-top: 4upx;">
+				<image src="../../../static/image/add.png" @click="chooseImage(['album'])"
+					style="width: 60rpx;height: 60rpx;margin-top: 8rpx;margin-right: 12rpx;"></image>
+				<input confirm-type="send" @confirm='setChatSave(1)' type="text" v-model="content"
+					style="width: 72%;height: 70rpx;background: #fff;margin: 4rpx 10rpx 0;border-radius: 70rpx;padding-left: 10rpx;color: #000000;" />
+				<view class="save" @tap='setChatSave(1)'>发送</view>
+			</view> -->
+			<view class="justify-between padding-lr align-center"
+				style="display: flex;width: 100%;background-color: #EEEEEE;">
+				<image src="../../../static/image/add.png" @click="chooseImage(['album'])"
+					style="width: 60rpx;height: 60rpx;margin-right: 12rpx;border-radius: 50upx;"></image>
+				<input confirm-type="send" @confirm='setChatSave(1)' type="text" v-model="content"
+					style="width: 72%;height: 70rpx;background: #fff;margin: 0 10rpx;border-radius: 5rpx;padding-left: 10rpx;" />
+				<view class="save" @tap='setChatSave(1)'>发送</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import configdata from '../../../common/config.js';
+	export default {
+		data() {
+			return {
+				connected: false,
+				connecting: false,
+				msg: false,
+				type4: [],
+				listRight: {
+					chat: {
+						userHead: ""
+					},
+					content: "",
+					sendType: 1,
+					type: 1
+				},
+				content: '',
+				chatId: '',
+				type: 1,
+				ListItem: [],
+				ShopState: false,
+				ShopordersId: '',
+				Shopimage: '',
+				Shopmoney: '',
+				ShopTitle: '',
+				orderState: false,
+				ordersId: '',
+				orderimage: '',
+				orderNum: '',
+				ordermoney: '',
+				orderTitle: '',
+				orderCreateTime: '',
+				className: '',
+				Shopsales: '',
+				hand: 1,
+				index: 0,
+				page: 0,
+				size: 1000,
+				countDown: ''
+			};
+		},
+		computed: {
+			showMsg() {
+				if (this.connected) {
+					if (this.msg) {
+						return '收到消息:' + this.msg
+					} else {
+						return '等待接收消息'
+					}
+				} else {
+					return '尚未连接'
+				}
+			}
+		},
+		onUnload() {
+			uni.closeSocket()
+			uni.hideLoading()
+		},
+		onLoad(d) {
+			if (d.className) {
+				this.className = d.className;
+				if (d.className === 'shop') {
+					this.ShopState = true;
+					this.ShopordersId = d.ordersId;
+					this.Shopimage = d.image;
+					this.Shopmoney = d.money;
+					this.Shopsales = d.sales;
+					this.ShopTitle = d.title;
+				} else if (d.className === 'order') {
+					this.orderState = true;
+					this.ordersId = d.id;
+					this.orderimage = d.image;
+					this.ordermoney = d.money;
+					this.orderTitle = d.title;
+					this.orderNum = d.orderNum;
+					this.orderCreateTime = d.createTime;
+				}
+			}
+			this.getChatSave();
+			this.connect();
+		},
+		onShow() {
+			if (this.connected || this.connecting) {
+
+			} else {
+				this.connect();
+			}
+		},
+		onHide() {
+			uni.closeSocket()
+		},
+		methods: {
+			copy(content) {
+				uni.showModal({
+					title: '温馨提示',
+					content: '确认要复制此文字吗?',
+					showCancel: true,
+					cancelText: '取消',
+					confirmText: '确认',
+					success: res => {
+						if (res.confirm) {
+							uni.setClipboardData({
+								data: content,
+								success: r => {
+									this.$queue.showToast('复制成功');
+								}
+							});
+						}
+					}
+				});
+			},
+			h5Copy(content) {
+				if (!document.queryCommandSupported('copy')) {
+					// 不支持
+					return false
+				}
+				let textarea = document.createElement("textarea")
+				textarea.value = content
+				textarea.readOnly = "readOnly"
+				document.body.appendChild(textarea)
+				textarea.select() // 选择对象
+				textarea.setSelectionRange(0, content.length) //核心
+				let result = document.execCommand("copy") // 执行浏览器复制命令
+				textarea.remove()
+				return result
+			},
+			getDateDiff(data) {
+				// 传进来的data必须是日期格式,不能是时间戳
+				//var str = data;
+				//将字符串转换成时间格式
+				var timePublish = new Date(data);
+				var timeNow = new Date();
+				var minute = 1000 * 60;
+				var hour = minute * 60;
+				var day = hour * 24;
+				var month = day * 30;
+				var result = "2";
+
+				var diffValue = timeNow - timePublish;
+				var diffMonth = diffValue / month;
+				var diffWeek = diffValue / (7 * day);
+				var diffDay = diffValue / day;
+				var diffHour = diffValue / hour;
+				var diffMinute = diffValue / minute;
+
+
+				if (diffMonth > 3) {
+					result = timePublish.getFullYear() + "-";
+					result += timePublish.getMonth() + "-";
+					result += timePublish.getDate();
+				} else if (diffMonth > 1) { //月
+					result = data.substring(0, 10);
+				} else if (diffWeek > 1) { //周
+					result = data.substring(0, 10);
+				} else if (diffDay > 1) { //天
+					result = data.substring(0, 10);
+				} else if (diffHour > 1) { //小时
+					result = parseInt(diffHour) + "小时前";
+				} else if (diffMinute > 1) { //分钟
+					result = parseInt(diffMinute) + "分钟前";
+				} else {
+					result = "刚刚";
+				}
+				return result;
+			},
+			goDingdanDetail(id) {
+				uni.navigateTo({
+					url: '../member/orderdetail?id=' + id
+				});
+			},
+			goShop(ordersId) {
+				uni.navigateTo({
+					url: './commoditydetail?ordersId=' + ordersId
+				});
+			},
+			ShopClose() {
+				this.ShopState = false;
+			},
+			orderClose() {
+				this.orderState = false;
+			},
+			goDingdan() {
+				this.orderState = false;
+				this.setChatSave(3);
+			},
+			goMaijia() {
+				this.ShopState = false;
+				this.setChatSave(4);
+			},
+			connect() {
+				let userId = this.$queue.getData('userId');
+				if (this.connected || this.connecting) {
+					uni.showModal({
+						content: '正在连接或者已经连接,请勿重复连接',
+						showCancel: false
+					})
+					return false
+				}
+				let token = uni.getStorageSync('token')
+				this.connecting = true
+				uni.showLoading({
+					title: '连接中...'
+				})
+				uni.connectSocket({
+					// url: 'wss://game.shengqianxiong.com.cn/wss/websocket/' + userId,
+					// url: 'ws://74165o0188.uicp.fun/sqx_fast/websocket/' + userId,
+					url: this.config("WSHOST") + userId,
+					data() {
+						return {
+							msg: 'Hello'
+						}
+					},
+					header: {
+						'content-type': 'application/json',
+						'token': token
+					},
+					method: 'GET',
+					success(res) {
+						// 这里是接口调用成功的回调,不是连接成功的回调,请注意
+					},
+					fail(err) {
+						// 这里是接口调用失败的回调,不是连接失败的回调,请注意
+					}
+				})
+				uni.onSocketOpen((res) => {
+					this.connecting = false
+					this.connected = true
+					uni.hideLoading()
+					// uni.showToast({
+					// 	icon: 'none',
+					// 	title: '连接成功'
+					// })
+					console.log('onOpen', res);
+				})
+				uni.onSocketError((err) => {
+					this.connecting = false
+					this.connected = false
+					uni.hideLoading()
+					uni.showModal({
+						content: '网络较差,请稍后再试',
+						showCancel: false
+					})
+					console.log('onError', err);
+				})
+				uni.onSocketMessage((res) => {
+					// let that = this;
+					// let datas = JSON.parse(res.data)
+					// let data = {
+					// 	chat: {
+					// 		userHead: '../../static/logo.png'
+					// 	},
+					// 	content: datas.content,
+					// 	type: datas.type,
+					// 	sendType: datas.sendType
+					// }
+					// that.ListItem.push(data);
+					this.getTimeOrListItem1();
+					console.log('onMessage', res)
+				})
+				uni.onSocketClose((res) => {
+					this.connected = false
+					this.startRecive = false
+					this.msg = false
+					console.log('onClose', res)
+				})
+			},
+			close() {
+				uni.closeSocket()
+			},
+			getTimeOrListItem1() {
+				this.$Request.getT('/app/chats/list?chatId=' + this.chatId).then(
+					res => {
+						this.ListItem = [];
+						if (res.data) {
+							var time = '';
+							res.data.forEach(d => {
+								d.createTime = this.getDateDiff(d.createTime);
+								if (d.createTime === time) {
+									d.createTime = '';
+								} else {
+									time = d.createTime;
+								}
+								if (!d.chat.userHead) {
+									// d.chat.userHead = '../../static/logo.png';
+									let avatar = this.$queue.getData('avatar');
+									d.chat.userHead = avatar
+								}
+								if (d.type === 4) {
+									let data = d.content.split(',');
+									d.content = data;
+								}
+								if (d.type === 3) {
+									let data = d.content.split(',');
+									d.content = data;
+								}
+								this.ListItem.push(d);
+							});
+							setTimeout(() => {
+								uni.pageScrollTo({
+									scrollTop: 99999,
+									duration: 0
+								});
+							}, 50);
+						}
+						uni.hideLoading();
+					});
+			},
+			getChatSave() {
+				let userId = this.$queue.getData('userId');
+				let phone = this.$queue.getData('phone');
+				let userName = this.$queue.getData('userName');
+				if (!phone) {
+					phone = this.$queue.getData('userName');
+				}
+				let avatar = this.$queue.getData('avatar');
+				let data = {
+					userId: userId,
+					userHead: avatar,
+					userName: userName,
+					storeId: '0',
+					storeHead: '码兄外卖',
+					storeName: ''
+				}
+				this.$Request.postJson('/app/chats/save', data).then(res => {
+					if (res.status === 0) {
+						this.chatId = res.data.chatId;
+						uni.showLoading({
+							title: '加载中...'
+						});
+						this.getTimeOrListItem1();
+					}
+				});
+			},
+			setChatSave(type) {
+				//type:1文字 2图片
+				if (type === 1 && this.content == '') {
+					this.$queue.showToast('请输入聊天内容');
+					return;
+				}
+				if (this.chatId == '' || this.chatId == undefined) {
+					this.$queue.showToast('网络较差,请稍后再试');
+					return;
+				}
+				let userId = this.$queue.getData('userId');
+				if (type === 4) {
+					this.content = this.Shopimage + ',' + this.ShopTitle + ',' + this.Shopmoney + ',' + this.ShopordersId;
+				}
+				if (type === 3) {
+					this.content = this.orderimage + ',' + this.orderTitle + ',' + this.ordersId + ',' + this.orderNum +
+						',' + this.orderCreateTime +
+						',' + this.ordermoney
+				}
+				let data = {
+					userId: userId,
+					content: this.content,
+					chatId: this.chatId,
+					type: type,
+					storeId: '0',
+					sendType: '1'
+				}
+				data = JSON.stringify(data);
+				let that = this;
+				uni.sendSocketMessage({
+					data: data,
+					success(res) {
+						let avatar = that.$queue.getData('avatar');
+						if (!avatar) {
+							avatar = '../../static/logo.png';
+						}
+						
+						setTimeout(() => {
+							that.getTimeOrListItem1();
+						}, 50);
+						console.log(that.content);
+					},
+					fail(err) {
+						console.log(err);
+					}
+				})
+				this.content = '';
+			},
+			//发送图片
+			chooseImage(sourceType) {
+				uni.chooseImage({
+					count: 1,
+					sourceType: ['album', 'camera'],
+					success: res => {
+						for (let i = 0; i < res.tempFilePaths.length; i++) {
+							this.$queue.showLoading("上传中...");
+							uni.uploadFile({ // 上传接口
+								url: this.config("APIHOST") + '/alioss/upload', //真实的接口地址
+								filePath: res.tempFilePaths[i],
+								name: 'file',
+								success: (uploadFileRes) => {
+									this.content = JSON.parse(uploadFileRes.data).data;
+									this.setChatSave(2);
+									uni.hideLoading();
+								}
+							});
+						}
+					}
+				})
+			},
+			config: function(name) {
+				var info = null;
+				if (name) {
+					var name2 = name.split("."); //字符分割
+					if (name2.length > 1) {
+						info = configdata[name2[0]][name2[1]] || null;
+					} else {
+						info = configdata[name] || null;
+					}
+					if (info == null) {
+						// let web_config = cache.get("web_config");
+						// if (web_config) {
+						// 	if (name2.length > 1) {
+						// 		info = web_config[name2[0]][name2[1]] || null;
+						// 	} else {
+						// 		info = web_config[name] || null;
+						// 	}
+						// }
+					}
+				}
+				return info;
+			},
+			//查看大图
+			viewImg(item) {
+				let imgsArray = [];
+				imgsArray[0] = item;
+				uni.previewImage({
+					current: 0,
+					urls: imgsArray
+				});
+			},
+		},
+	};
+</script>
+
+<style>
+	page {
+		/* background: #1c1b20; */
+	}
+
+	.input-box {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		height: 100rpx;
+		width: 100%;
+		display: flex;
+		box-sizing: content-box;
+		z-index: 999;
+		/* background-color: #ececec; */
+		/* padding: 0 5rpx; */
+	}
+
+	.chat-listitem {
+		display: flex;
+		margin-top: 20rpx;
+		padding: 10rpx;
+	}
+
+	.chat-listitem-text {
+		color: #000000;
+		background: #FFFFFF;
+		margin-top: 10rpx;
+		width: fit-content;
+		padding: 15rpx;
+		font-size: 30rpx;
+		height: max-content;
+		word-wrap: break-word;
+		word-break: break-all;
+		border-radius: 10rpx;
+	}
+
+	.chat-listitem-image-type4 {
+		color: #000000;
+		background: #FFFFFF;
+		width: fit-content;
+		font-size: 30rpx;
+		height: max-content;
+		word-wrap: break-word;
+		word-break: break-all;
+		border-top-left-radius: 20rpx;
+		border-top-right-radius: 20rpx;
+	}
+
+	.chat-listitem-image {
+		margin-top: 5rpx;
+		width: 75rpx;
+		height: 75rpx;
+		border-radius: 5rpx;
+	}
+
+	.save {
+		width: 130rpx;
+		text-align: center;
+		border-radius: 10rpx;
+		height: 70rpx;
+		color: #FFF;
+		background: #1789FD;
+		margin: 5rpx 10rpx 0;
+		line-height: 70rpx;
+	}
+</style>

+ 238 - 0
pages/riderMy/kefu/kefu.vue

@@ -0,0 +1,238 @@
+<template>
+	<view style="height: 100vh;">
+		<!-- border-radius: 32upx; -->
+		<view style="text-align: center;background: #FFFFFF;padding: 30upx;">
+			<view class="item">
+				<view class="lef">
+					<image src="../../../static/my/QQ.png"></image>
+					<view class="txt">
+						<text>QQ</text>
+						<text>{{qq}}</text>
+					</view>
+				</view>
+				<view @click="copyHref" class="copy" data-txt='qq'>复制QQ</view>
+			</view>
+			<view class="item">
+				<view class="lef">
+					<image src="../../../static/my/wx.png"></image>
+					<view class="txt">
+						<text>微信</text>
+						<text>{{weixin}}</text>
+					</view>
+				</view>
+				<view @click="copyHref" class="copy" data-txt='weixin'>复制微信</view>
+			</view>
+			<view class="item">
+				<view class="lef">
+					<image src="../../../static/my/phone.png"></image>
+					<view class="txt">
+						<text>电话</text>
+						<text>{{phone}}</text>
+					</view>
+				</view>
+				<view @click="copyHref" data-txt='phone' class="copy">拨打电话</view>
+			</view>
+			<!-- #ifdef MP-WEIXIN -->
+			<view class="item">
+				<view class="lef">
+					<image src="../../../static/my/kf.png"></image>
+					<view class="txt">
+						<text>在线客服</text>
+						<text>在线客服专员为你解答问题</text>
+					</view>
+				</view>
+				<button class="copys" data-txt='qq' open-type="contact">在线客服</button>
+			</view>
+			<!-- #endif -->
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				image: 'https://taobao.xianmxkj.com/custom.jpg',
+				isWeiXin: false,
+				weixin: '',
+				qq: '',
+				phone: '',
+				webviewStyles: {
+					progress: {
+						color: '#FF2638'
+					}
+				}
+			};
+		},
+		onLoad() {
+			// #ifdef H5
+			let ua = navigator.userAgent.toLowerCase();
+			if (ua.indexOf('micromessenger') !== -1) {
+				this.isWeiXin = true;
+			}
+			// #endif
+
+			//微信号码
+			this.$Request.getT('/app/common/type/44').then(res => {
+				if (res.code == 0) {
+					if (res.data && res.data.value) {
+						this.weixin = res.data.value;
+					}
+				}
+			});
+
+			//客服电话
+			this.$Request.getT('/app/common/type/252').then(res => {
+				if (res.code == 0) {
+					if (res.data && res.data.value) {
+						this.phone = res.data.value;
+					}
+				}
+			});
+			//qq号码
+			this.$Request.getT('/app/common/type/274').then(res => {
+				if (res.code == 0) {
+					if (res.data && res.data.value) {
+						this.qq = res.data.value;
+					}
+				}
+			});
+		},
+		onPullDownRefresh: function() {
+			uni.stopPullDownRefresh(); // 停止刷新
+		},
+		methods: {
+			//邀请码复制
+			copyHref(e) {
+				console.log(e.target.dataset.txt)
+				if (e.target.dataset.txt == 'qq') {
+					this.copy(this.qq)
+				} else if (e.target.dataset.txt == 'weixin') {
+					this.copy(this.weixin)
+				} else {
+					uni.makePhoneCall({
+						phoneNumber: this.phone
+					})
+
+				}
+			},
+			copy(item) {
+				uni.setClipboardData({
+					data: item,
+					success: r => {
+						this.$queue.showToast('复制成功');
+					}
+				});
+			},
+			saveImg() {
+				let that = this;
+				uni.saveImageToPhotosAlbum({
+					filePath: that.image,
+					success(res) {
+						that.$queue.showToast('保存成功');
+					}
+				});
+			},
+			rests() {
+				uni.showToast({
+					title: '已刷新请再次长按识别',
+					mask: false,
+					duration: 1500,
+					icon: 'none'
+				});
+				window.location.reload();
+			}
+		}
+	};
+</script>
+
+<style scoped>
+	/* @import '../../static/css/index.css'; */
+
+	.item {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin-bottom: 36rpx;
+	}
+
+	.items {
+		margin-bottom: 0;
+	}
+
+	.lef {
+		display: flex;
+		justify-content: flex-start;
+		align-items: center;
+	}
+
+	.item image {
+		width: 89rpx;
+		height: 89rpx;
+		margin-right: 26rpx;
+	}
+
+	.item .txt {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-start;
+		align-items: flex-start;
+	}
+
+	.txt>text:nth-child(1) {
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #1F2029;
+		/* line-height: 87rpx; */
+		margin-bottom: 10rpx;
+	}
+
+	.txt>text:nth-child(2) {
+		font-size: 28rpx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #666666;
+		/* line-height: 87rpx; */
+	}
+
+	.copy {
+		width: 140rpx;
+		height: 54rpx;
+		background: #FF1E43;
+		border-radius: 27rpx;
+		text-align: center;
+		line-height: 54rpx;
+		font-size: 24rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #FFFFFF;
+	}
+
+	.copys {
+		height: 54rpx;
+		background: #FF1E43;
+		border-radius: 27rpx;
+		text-align: center;
+		line-height: 54rpx;
+		font-size: 24rpx;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #FFFFFF;
+		margin-right: 0rpx;
+	}
+
+	/* 
+	<!-- <view style="font-size: 38upx;color: #000000">添加客服微信咨询</view>
+			<view style="font-size: 32upx;margin-top: 32upx;color: #000000">微信号:{{weixin}}</view>
+			<view @click="copyHref" style="width:200upx;margin-top: 32upx;font-size: 30upx;margin-left: 36%;color: #FFFFFF;background: #FF2638;padding: 4upx 20upx;border-radius: 24upx;">一键复制</view>
+			
+			<image @click="saveImg" mode="aspectFit" style="margin-top: 32upx" :src="image"></image>
+			<view style="font-size: 28upx;color: #000000;margin-top: 32upx" v-if="isWeiXin">{{ isWeiXin ? '长按识别上方二维码' : '' }}</view>
+			
+			
+			
+			<view v-if="isWeiXin" style="font-size: 24upx;color: #000000;margin-top: 80upx" @click="rests">无法识别?</view> -->
+
+ */
+</style>

+ 170 - 0
pages/riderMy/kefu/liaotian.vue

@@ -0,0 +1,170 @@
+<template>
+	<view class="">
+		<view v-if="chatList.length" class="content ">
+			<view class="radius padding-lr-sm bg" style="margin-top: 4rpx;" @click="goIM(item)"
+				v-for="(item,index) in chatList" :key='index'>
+				<view class="flex padding-tb " v-if="userId == item.userId">
+					<view>
+						<u-image shape="circle" width='80rpx' height="80rpx" :src="item.shopCover"></u-image>
+					</view>
+					<view class="flex-sub margin-left-sm">
+						<view class="flex justify-between">
+							<view style="width: 55%;">{{item.shopName}}</view>
+							<view class="text-grey">{{item.createTime}}</view>
+						</view>
+						<view class="flex justify-between">
+							<view class="text-grey">{{ item.messageType == 1? item.content : '[图片]'}}</view>
+							<view v-if="item.riderUnread"
+								style="height: 32rpx;width: 32rpx;border-radius: 100rpx;background-color: red;color: #FFF;text-align: center;">
+								{{item.riderUnread}}
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="flex padding-tb" v-else>
+					<view>
+						<u-image shape="circle" width='80rpx' height="80rpx" :src="item.shopCover"></u-image>
+					</view>
+					<view class="flex-sub margin-left-sm">
+						<view class="flex justify-between">
+							<view style="width: 55%;">{{item.shopName}}</view>
+							<view class="text-grey">{{item.createTime}}</view>
+						</view>
+						<view class="flex justify-between">
+							<view class="text-grey">{{ item.messageType == 1? item.content : '[图片]'}}</view>
+							<view v-if="item.riderUnread"
+								style="height: 32rpx;width: 32rpx;border-radius: 100rpx;background-color: red;color: #FFF;text-align: center;">
+								{{item.riderUnread}}
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<empty v-if="!chatList.length && !msgList.length" content='暂无消息'></empty>
+	</view>
+</template>
+
+<script>
+	import empty from '../../../components/empty.vue'
+	export default {
+		components: {
+			empty
+		},
+		data() {
+			return {
+				page: 1,
+				limit: 20,
+				chatList: [],
+				userId: '',
+				msgList: [],
+				count: 0,
+				time: '',
+				messageCount: 0,
+				scrollTop: false,
+			}
+		},
+
+		onPullDownRefresh: function() {
+			this.page = 1;
+			this.getChatList();
+		},
+		onLoad() {
+			this.$queue.showLoading("加载中...")
+			that.userId = uni.getStorageSync('userId')
+			if (that.userId) {
+				that.time = setInterval(function() {
+					that.getChatList()
+					// that.getMsgList()
+					that.$nextTick(function() {
+						that.messageCount = uni.getStorageSync('messageCount')
+					})
+
+				}, 10000)
+
+			} else {
+				that.chatList = []
+				that.msgList = []
+			}
+
+		},
+		onShow() {
+			let that = this
+
+			this.page = 1;
+			this.getChatList();
+
+		},
+		onHide() {
+			clearInterval(this.time)
+
+		},
+		methods: {
+			getChatList() {
+				this.$Request.getT("/app/ordersChat/selectOrdersChatPageRider", {
+					page: this.page,
+					limit: this.limit,
+					// shopId: uni.getStorageSync('shopId')
+				}).then(res => {
+					if (res.code === 0) {
+						this.totalCount = res.data.totalCount
+						if (this.page == 1) {
+							this.chatList = res.data.list
+						} else {
+							res.data.list.forEach(d => {
+								this.chatList.push(d);
+							});
+						}
+						this.count = res.data.totalCount;
+					}
+					uni.hideLoading();
+					uni.stopPullDownRefresh();
+					// if (res.code == 0) {
+					// 	this.chatList = res.data.list
+					// }
+				});
+			},
+			goIM(e) {
+				let userId = this.$queue.getData('userId');
+				if (e.userId == userId) {
+					userId = e.byUserId
+				} else {
+					userId = e.userId
+				}
+				uni.navigateTo({
+					url: '/pages/riderMy/kefu/liaotianshi?orderId=' + e.ordersId
+				})
+			},
+			goMsg() {
+				uni.navigateTo({
+					url: '/pages/msg/message'
+				})
+			}
+		},
+		onPageScroll: function(e) {
+			this.scrollTop = e.scrollTop > 200;
+		},
+		onReachBottom: function() {
+			if (this.chatList.length == this.count) {
+				uni.showToast({
+					title: '已经到底了',
+					icon: 'none'
+				})
+			} else {
+				this.page = this.page + 1;
+				this.getChatList();
+			}
+		},
+	}
+</script>
+
+<style>
+	page {
+		background-color: #F7F7F7;
+	}
+
+	.bg {
+		background: #FFFFFF;
+	}
+</style>

+ 533 - 0
pages/riderMy/kefu/liaotianshi.vue

@@ -0,0 +1,533 @@
+<template>
+	<view>
+		<view style="width: 100%;padding-bottom: 140rpx;">
+			<view style="display: flex;flex-direction: column;" v-for="(item,index) in ListItem" :key='index'>
+				<view style="margin-top: 15rpx;width: 100%;text-align: center;font-size: 26rpx;color: #999999;">
+					{{item.createTime}}
+				</view>
+
+				<view v-if="item.riderId === userId" style="width: 83%;margin-left: 15%;">
+					<view class="chat-listitem" style="float: right;">
+						<view v-if="item.content && item.messageType === 1" @longpress="copy(item.content)"
+							class="chat-listitem-text" style="margin-right: 20rpx;">{{item.content}}</view>
+						<image @tap="viewImg(item.content)" v-if="item.content && item.messageType === 2"
+							:src="item.content" style="height: 200rpx;width: 200rpx;margin-right: 20rpx;"></image>
+						<view>
+							<image v-if="item.riderAvatar" :src="item.riderAvatar" class="chat-listitem-image"></image>
+							<image v-else src="../../../static/logo.png" class="chat-listitem-image"></image>
+						</view>
+					</view>
+				</view>
+				<view v-if="item.riderId != userId" style="width: 83%;margin-right: 15%;">
+					<view class="chat-listitem" style="float: left;margin-left: 10rpx;">
+						<view>
+							<image v-if="item.shopCover" :src="item.shopCover" class="chat-listitem-image"></image>
+							<image v-else-if="item.userAvatar" :src="item.userAvatar" class="chat-listitem-image"></image>
+							<image v-else src="../../../static/logo.png" class="chat-listitem-image"></image>
+						</view>
+						<view v-if="item.content && item.messageType === 1" class="chat-listitem-text"
+							style="margin-left: 20rpx;">{{item.content}}</view>
+						<image @tap="viewImg(item.content)" v-if="item.content && item.messageType === 2"
+							:src="item.content" style="height: 200rpx;width: 200rpx;margin-left: 20rpx;"></image>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- 跳转订单 -->
+		<view class="order" @click="bindorder()">
+				<image src="../../../static/image/order.png"></image>
+			</view>
+		<!-- 底部聊天输入框 -->
+		<view class="input-box ">
+			<view class="justify-between padding-lr align-center"
+				style="display: flex;width: 100%;background-color: #EEEEEE;">
+				<image src="../../../static/image/add.png" @click="chooseImage(['album'])"
+					style="width: 60rpx;height: 60rpx;margin-right: 12rpx;border-radius: 50upx;"></image>
+				<input confirm-type="send" @confirm='setChatSave(1)' type="text" v-model="content"
+					style="width: 72%;height: 70rpx;background: #fff;margin: 0 10rpx;border-radius: 5rpx;padding-left: 10rpx;" />
+				<view class="save" @tap='setChatSave(1)'>发送</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import configdata from '../../../common/config.js';
+	export default {
+		data() {
+			return {
+				connected: false,
+				connecting: false,
+				msg: false,
+				type4: [],
+				listRight: {
+					chat: {
+						userHead: ""
+					},
+					content: "",
+					sendType: 1,
+					type: 1
+				},
+				content: '',
+				chatId: '',
+				type: 1,
+				ListItem: [],
+				ShopState: false,
+				ShopordersId: '',
+				Shopimage: '',
+				Shopmoney: '',
+				ShopTitle: '',
+				orderState: false,
+				ordersId: '',
+				userId: '',
+				orderimage: '',
+				orderNum: '',
+				teamId: '',
+				hand: 1,
+				index: 0,
+				page: 0,
+				size: 1000,
+				countDown: '',
+				chatConversationId: '',
+				byUserId: '',
+				orderId: ''
+			};
+		},
+		computed: {
+			showMsg() {
+				if (this.connected) {
+					if (this.msg) {
+						return '收到消息:' + this.msg
+					} else {
+						return '等待接收消息'
+					}
+				} else {
+					return '尚未连接'
+				}
+			}
+		},
+		onUnload() {
+			// uni.closeSocket()
+			uni.hideLoading()
+		},
+		onLoad(d) {
+			console.log(d)
+			this.userId = this.$queue.getData('userId');
+			this.byUserId = d.byUserId
+			this.indentId = d.indentId
+			this.orderId = d.orderId
+			this.connect();
+
+			// if (d.teamName) {
+			// 	uni.setNavigationBarTitle({
+			// 		title: d.teamName
+			// 	});
+			// }
+		},
+		onShow() {
+			if (this.connected || this.connecting) {
+
+			} else {
+				this.connect();
+			}
+		},
+		onHide() {
+			// uni.closeSocket()
+		},
+		onUnload() {
+			this.close()
+		},
+		methods: {
+			// 跳转订单
+			bindorder() {
+				console.log(this.ordersId)
+				uni.navigateTo({
+					url: '/pages/index/orderdetail/orderdetail?orderId='+this.orderId
+				})
+			},
+			copy(content) {
+				uni.showModal({
+					title: '温馨提示',
+					content: '确认要复制此文字吗?',
+					showCancel: true,
+					cancelText: '取消',
+					confirmText: '确认',
+					success: res => {
+						if (res.confirm) {
+							uni.setClipboardData({
+								data: content,
+								success: r => {
+									this.$queue.showToast('复制成功');
+								}
+							});
+						}
+					}
+				});
+			},
+			getDateDiff(data) {
+				// 传进来的data必须是日期格式,不能是时间戳
+				//var str = data;
+				//将字符串转换成时间格式
+				var timePublish = new Date(data);
+				var timeNow = new Date();
+				var minute = 1000 * 60;
+				var hour = minute * 60;
+				var day = hour * 24;
+				var month = day * 30;
+				var result = "2";
+
+				var diffValue = timeNow - timePublish;
+				var diffMonth = diffValue / month;
+				var diffWeek = diffValue / (7 * day);
+				var diffDay = diffValue / day;
+				var diffHour = diffValue / hour;
+				var diffMinute = diffValue / minute;
+
+
+				if (diffMonth > 3) {
+					result = timePublish.getFullYear() + "-";
+					result += timePublish.getMonth() + "-";
+					result += timePublish.getDate();
+				} else if (diffMonth > 1) { //月
+					result = data.substring(0, 10);
+				} else if (diffWeek > 1) { //周
+					result = data.substring(0, 10);
+				} else if (diffDay > 1) { //天
+					result = data.substring(0, 10);
+				} else if (diffHour > 1) { //小时
+					result = parseInt(diffHour) + "小时前";
+				} else if (diffMinute > 1) { //分钟
+					result = parseInt(diffMinute) + "分钟前";
+				} else {
+					result = "刚刚";
+				}
+				return result;
+			},
+
+			connect() {
+				let that = this;
+				let userId = that.$queue.getData('userId');
+				if (that.connected || that.connecting) {
+					uni.showModal({
+						content: '正在连接或者已经连接,请勿重复连接',
+						showCancel: false
+					})
+					return false
+				}
+				that.connecting = true
+				uni.showLoading({
+					title: '连接中...'
+				})
+				console.log(userId, '*******************')
+				uni.connectSocket({
+					// url: 'ws://192.168.1.17:8881/gameTeamChat/' + userId + '_' + this.teamId,
+					// url: 'wss://game.shengqianxiong.com.cn/wss/gameTeamChat/' + userId + '_' + this.teamId,
+					// url: 'ws://192.168.1.17:8180/sqx_fast/chatSocket/' + userId,
+					url: this.config("WSHOST1") + this.orderId,
+					data() {
+						return {
+							msg: 'Hello'
+						}
+					},
+					header: {
+						'content-type': 'application/json'
+					},
+					method: 'GET',
+					success(res) {
+						uni.hideLoading();
+						that.getTimeOrListItem1();
+						// 这里是接口调用成功的回调,不是连接成功的回调,请注意
+					},
+					fail(err) {
+						// 这里是接口调用失败的回调,不是连接失败的回调,请注意
+						console.log("--------------" + JSON.stringify(err))
+					}
+				});
+				uni.onSocketOpen((res) => {
+					that.connecting = false
+					that.connected = true
+					uni.hideLoading()
+					// uni.showToast({
+					// 	icon: 'none',
+					// 	title: '连接成功'
+					// })
+					console.log('onOpen', res);
+				})
+				uni.onSocketError((err) => {
+					that.connecting = false
+					that.connected = false
+					uni.hideLoading()
+					uni.showModal({
+						content: '网络较差,请稍后再试',
+						showCancel: false
+					})
+					console.log('onError', err);
+				})
+				uni.onSocketMessage((res) => {
+					// let that = this;
+					// let datas = JSON.parse(res.data)
+					// let data = {
+					// 	chat: {
+					// 		userHead: '../../../static/logo2.png'
+					// 	},
+					// 	content: datas.content,
+					// 	type: datas.type,
+					// 	sendType: datas.sendType
+					// }
+					// that.ListItem.push(data);
+					this.getTimeOrListItem1();
+					console.log('onMessage', res)
+				})
+				uni.onSocketClose((res) => {
+					that.connected = false
+					that.startRecive = false
+					that.msg = false
+					console.log('onClose', res)
+				});
+			},
+			close() {
+				uni.closeSocket()
+			},
+			getTimeOrListItem1() {
+				this.$Request.get('/app/ordersChat/selectGameChatDetails?page=1&limit=1000&ordersId=' + this.orderId+'&type=2')
+					.then(
+						res => {
+							this.ListItem = [];
+							if (res.data) {
+								var time = '';
+								res.data.list.forEach(d => {
+									if (!d.avatar) {
+										// d.chat.userHead = '../../static/logo.png';
+										let avatar = this.$queue.getData('avatar');
+										d.avatar = avatar
+									}
+									this.ListItem.push(d);
+								});
+								this.ListItem = this.ListItem.reverse();
+								setTimeout(() => {
+									uni.pageScrollTo({
+										scrollTop: 99999,
+										duration: 0
+									});
+								}, 50);
+							}
+							uni.hideLoading();
+						});
+			},
+			getChatSave() {
+				let userId = this.$queue.getData('userId');
+				let phone = this.$queue.getData('phone');
+				let userName = this.$queue.getData('userName');
+				if (!phone) {
+					phone = this.$queue.getData('userName');
+				}
+				let avatar = this.$queue.getData('avatar');
+				let data = {
+					userId: userId,
+					userHead: avatar,
+					userName: userName,
+					storeId: '0',
+					storeHead: '省钱兄陪玩',
+					storeName: ''
+				}
+				this.$Request.postJson('/chat/save', data).then(res => {
+					if (res.status === 0) {
+						this.chatId = res.data.chatId;
+						uni.showLoading({
+							title: '加载中...'
+						});
+						this.getTimeOrListItem1();
+					}
+				});
+			},
+			setChatSave(type) {
+				//type:1文字 2图片
+				if (type === 1 && this.content == '') {
+					this.$queue.showToast('请输入聊天内容');
+					return;
+				}
+				// if (this.chatId == '' || this.chatId == undefined) {
+				// 	this.$queue.showToast('网络较差,请稍后再试');
+				// 	return;
+				// }
+				let userId = this.$queue.getData('userId');
+				let avatar = this.$queue.getData('avatar');
+				let phone = this.$queue.getData('phone');
+				let userName = this.$queue.getData('userName');
+				if (!phone) {
+					phone = this.$queue.getData('userName');
+				}
+				console.log(this.byUserId)
+				let data = {
+					content: this.content,
+					messageType: type,
+					riderId: this.userId,
+					chatConversationId: this.chatConversationId,
+					ordersId: this.orderId
+				}
+				data = JSON.stringify(data);
+				let that = this;
+				uni.sendSocketMessage({
+					data: data,
+					success(res) {
+
+						let avatar = that.$queue.getData('avatar');
+						if (!avatar) {
+							avatar = '../../static/logo.png';
+						}
+						let data = {
+							chat: {
+								userHead: avatar
+							},
+							content: that.content,
+							type: type,
+							userId: userId
+						}
+						console.log(data, 'data99999999999999999')
+						// that.ListItem.push(data);
+						setTimeout(() => {
+							that.getTimeOrListItem1();
+						}, 50);
+						console.log(that.content);
+					},
+					fail(err) {
+						console.log(err);
+					}
+				})
+				this.content = '';
+			},
+			//发送图片
+			chooseImage(sourceType) {
+				uni.chooseImage({
+					count: 1,
+					sourceType: ['album', 'camera'],
+					success: res => {
+						for (let i = 0; i < res.tempFilePaths.length; i++) {
+							this.$queue.showLoading("上传中...");
+							uni.uploadFile({ // 上传接口
+								url: this.config("APIHOST1") + '/alioss/upload', //真实的接口地址
+								filePath: res.tempFilePaths[i],
+								name: 'file',
+								success: (uploadFileRes) => {
+									console.log(uploadFileRes)
+									this.content = JSON.parse(uploadFileRes.data).data;
+									this.setChatSave(2);
+									uni.hideLoading();
+								}
+							});
+						}
+					}
+				})
+			},
+			config: function(name) {
+				var info = null;
+				if (name) {
+					var name2 = name.split("."); //字符分割
+					if (name2.length > 1) {
+						info = configdata[name2[0]][name2[1]] || null;
+					} else {
+						info = configdata[name] || null;
+					}
+					if (info == null) {
+						let web_config = cache.get("web_config");
+						if (web_config) {
+							if (name2.length > 1) {
+								info = web_config[name2[0]][name2[1]] || null;
+							} else {
+								info = web_config[name] || null;
+							}
+						}
+					}
+				}
+				return info;
+			},
+			//查看大图
+			viewImg(item) {
+				let imgsArray = [];
+				imgsArray[0] = item;
+				uni.previewImage({
+					current: 0,
+					urls: imgsArray
+				});
+			},
+		},
+	};
+</script>
+
+<style>
+	page {
+		/* background: #1c1b20; */
+	}
+
+	.input-box {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		height: 120rpx;
+		width: 100%;
+		display: flex;
+		box-sizing: content-box;
+		z-index: 999;
+		/* background-color: #ececec; */
+		/* padding: 0 5rpx; */
+	}
+
+	.chat-listitem {
+		display: flex;
+		margin-top: 20rpx;
+		padding: 10rpx;
+	}
+
+	.chat-listitem-text {
+		color: #000000;
+		background: #FFFFFF;
+		margin-top: 10rpx;
+		width: fit-content;
+		padding: 15rpx;
+		font-size: 30rpx;
+		height: max-content;
+		word-wrap: break-word;
+		word-break: break-all;
+		border-radius: 10rpx;
+	}
+
+	.chat-listitem-image-type4 {
+		color: #000000;
+		background: #FFFFFF;
+		width: fit-content;
+		font-size: 30rpx;
+		height: max-content;
+		word-wrap: break-word;
+		word-break: break-all;
+		border-top-left-radius: 20rpx;
+		border-top-right-radius: 20rpx;
+	}
+
+	.chat-listitem-image {
+		margin-top: 5rpx;
+		width: 75rpx;
+		height: 75rpx;
+		border-radius: 5rpx;
+	}
+
+	.save {
+		width: 130rpx;
+		text-align: center;
+		border-radius: 70rpx;
+		height: 70rpx;
+		color: #FFF;
+		background: #1789FD;
+		margin: 5rpx 10rpx 0;
+		line-height: 70rpx;
+	}
+	.order {
+		position: fixed;
+		bottom: 65px;
+		right: 15px;
+	}
+	
+	.order image {
+		width: 120rpx;
+		height: 120rpx;
+	}
+</style>

+ 583 - 0
pages/riderMy/myAccount/AcontMoney/AcontMoney.vue

@@ -0,0 +1,583 @@
+<template>
+	<view class="content">
+		<view class="acont_part1">
+			<view class="part1_bg">
+				<image src="../../../../static/rider/image-bg.png"></image>
+			</view>
+			<view class="part1_box">
+				<view class="text-right margin-top-sm margin-right-sm" @click="goDet">查看明细</view>
+				<view class="balance">
+					<view class="balance_name">保证金余额(元)</view>
+					<view class="balance_price">{{mayMoney?mayMoney:0}}</view>
+				</view>
+				<view class="part1_btn">
+					<view class="btn_left" @click="tuiBtn()">退保证金</view>
+					<view class="btn_right" @click="openPay()">缴纳保证金</view>
+				</view>
+			</view>
+		</view>
+		<view class="acont_part2">
+			<view class="acount_type">保证金规则</view>
+			<view class="acount_box" v-for="(item,index) in list" :key="item.id">
+				<view class="name">{{item.name}}</view>
+				<view class="tit">{{item.tit}}</view>
+			</view>
+
+		</view>
+		<!-- 支付方式 -->
+		<u-popup v-model="shows" mode="center" width="640rpx" height="640rpx" border-radius="14" :closeable="true"
+			close-icon="close-circle" close-icon-size="50" close-icon-color="#CCCCCC" @close="closePopup()">
+			<view style="width: 100%;height: 300upx;background: #FFFFFF;">
+				<view class="receipt_code">
+					<view class="code_title">请输入支付金额</view>
+					<u-input v-model="earnestMoney" type="text" placeholder="请输入支付金额" :border="true" />
+					<view class="margin-tb padding-lr radius bg-white" style="height: 220upx;">
+						<view class="flex align-center justify-between padding-tb-sm" v-for="(item,index) in payList"
+							:key='index'>
+							<image :src="item.image" style="width: 80upx;height: 80upx;border-radius: 50upx;"></image>
+							<view class="flex-sub text-xl text-bold margin-left">{{item.name}}</view>
+							<radio-group name="openWay" style="margin-left: 20upx;" @change='selectWay(item)'>
+								<label class="tui-radio">
+									<radio class="red" :checked="openWay === item.id ? true : false" />
+								</label>
+							</radio-group>
+						</view>
+					</view>
+					<view class="sure" @click="jiaoBtn">确定</view>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				shows: false,
+				baozhengjin: 0,
+				disabled: true,
+				moneys: '',
+				list: [{
+					id: 1,
+					name: '保证金退款',
+					tit: '48小时内无订单记录即可申请退保证金,保证金统一退款至账户余额,实时到账。'
+				}, {
+					id: 2,
+					name: '保证金缴纳',
+					tit: '所有跑腿专人直送订单需缴纳保证金,没有缴纳者将无法接订单,建议您及时缴纳。'
+				}],
+				mayMoney: 0,
+				openWay: 1,
+				payList: [],
+				earnestMoney: ''
+			}
+		},
+		onLoad() {
+			//获取保证金
+			this.$Request.getT('/app/common/type/273').then(res => {
+				if (res.code === 0) {
+					this.baozhengjin = res.data.value;
+
+				}
+			});
+
+			// #ifdef MP-WEIXIN
+			this.payList = [{
+				id: 1,
+				image: '../../../../static/my/weixin.png',
+				name: '微信'
+			}]
+			this.openWay = 1
+			// #endif
+			// #ifdef H5
+			this.payList = [{
+				id: 2,
+				image: '../../../../static/my/zhifubao.png',
+				name: '支付宝'
+			}]
+			this.openWay = 2
+			// #endif
+			// #ifdef APP-PLUS
+			this.payList = [{
+					id: 1,
+					image: '../../../../static/my/weixin.png',
+					name: '微信'
+				},
+				{
+					id: 2,
+					image: '../../../../static/my/zhifubao.png',
+					name: '支付宝'
+				}
+			]
+			// #endif
+
+		},
+		onShow() {
+			this.taskData()
+
+		},
+		methods: {
+			openPay() {
+				this.$Request.getT("/app/wxPayErrRider/selectCertificationFlag").then(res => {
+					if (res.code == 0) {
+						this.shows = true
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						})
+					}
+				});
+			},
+			// 跳转保证金明细
+			goDet() {
+				uni.navigateTo({
+					url: '/pages/riderMy/myAccount/AcontMoney/Acontlist'
+				})
+			},
+			selectWay: function(item) {
+				this.openWay = item.id;
+			},
+			zhifu() {
+				this.shows = true
+			},
+			// 关闭底部弹出层
+			closePopup() {
+				this.shows = false
+			},
+
+			// 获取任务数据
+			taskData() {
+				let that = this;
+				let token = this.$queue.getData('token');
+				let userId = this.$queue.getData('userId');
+				if (token) {
+					//this.$queue.showLoading("加载中...");
+					//可以提现金额查询预估收入查询
+					this.$Request.getT("/app/userinfo/findUserInfoById").then(res => {
+						uni.hideLoading();
+						if (res.code === 0 && res.data) {
+							that.mayMoney = res.data.cashDeposit;
+							if (!res.data.cashDeposit) {
+								// this.earnestMoney=this.baozhengjin;
+								// this.disabled=true;
+							} else {
+								// this.disabled=false;
+							}
+
+						} else if (res.code === -102) {
+							this.$queue.showToast(res.msg);
+							this.$queue.logout();
+						} else {
+							that.mayMoney = '0';
+						}
+					});
+				}
+			},
+
+			// 缴纳
+			jiaoBtn() {
+				let that = this;
+				if (!that.earnestMoney) {
+					that.$queue.showToast('请输入支付金额');
+					return;
+				}
+				uni.showLoading({
+					title: '支付中'
+				});
+				// 微信支付
+				if (that.openWay == 1) {
+					// #ifdef APP-PLUS
+					uni.hideLoading();
+					// 微信APP支付 根据订单id获取支付信息
+					that.$Request.postT('/app/wxPayErrRider/wxPayCashDeposit?money=' + that.earnestMoney + '&type=1').then(
+						ret => {
+							// console.log(JSON.stringify(ret), '支付信息')
+							if (ret.code == 0) {
+								console.log(JSON.stringify(ret), '支付信息')
+								that.isCheckPay(ret.code, 'wxpay', JSON.stringify(ret.data));
+
+							} else {
+								that.shows = false
+								that.earnestMoney = ''
+								that.$queue.showToast(res.msg);
+							}
+
+						});
+
+					// #endif
+
+					// #ifdef H5
+					let ua = navigator.userAgent.toLowerCase();
+					console.log(ua.indexOf('micromessenger'))
+					if (ua.indexOf('micromessenger') !== -1) {
+						let openId = that.$queue.getData('openid') ? that.$queue.getData('openid') : '';
+						that.$Request.postT('/app/wxPayErrRider/wxPayCashDeposit?money=' + that.earnestMoney + '&type=2')
+							.then(
+								res => {
+									if (res.code == 0) {
+										that.callPay(res);
+									} else {
+										that.shows = false
+										that.earnestMoney = ''
+										that.$queue.showToast(res.msg);
+									}
+
+								});
+					}
+					// #endif
+
+					// #ifdef MP-WEIXIN
+					that.$Request.postT('/app/wxPayErrRider/wxPayCashDeposit?money=' + that.earnestMoney + '&type=3').then(
+						res => {
+							console.log('res', res)
+							if (res.code == 0) {
+								uni.requestPayment({
+									provider: 'wxpay',
+									timeStamp: res.data.timestamp,
+									nonceStr: res.data.noncestr,
+									package: res.data.package,
+									signType: res.data.signType,
+									paySign: res.data.sign,
+									success: function(res) {
+										that.shows = false
+										that.earnestMoney = ''
+										uni.hideLoading();
+
+
+										that.taskData()
+										that.$queue.showToast('支付成功');
+										setTimeout(function() {
+											uni.hideLoading();
+										}, 1000);
+									},
+									fail: function(err) {
+										that.shows = false
+										that.earnestMoney = ''
+										console.log('fail:' + JSON.stringify(err));
+										uni.hideLoading();
+										that.$queue.showToast('支付失败');
+									}
+								});
+							} else {
+								that.shows = false
+								that.earnestMoney = ''
+								that.$queue.showToast(res.msg);
+							}
+						});
+					// #endif
+				} else if (that.openWay == 2) { //支付宝支付
+					uni.hideLoading();
+					// #ifdef H5
+					let userId = this.$queue.getData('userId');
+					that.$Request.postT('/app/wxPayErrRider/wxPayCashDeposit?money=' + that.earnestMoney + '&type=5')
+						.then(res => {
+							if (res.code == 0) {
+								const div = document.createElement('div')
+								div.innerHTML = res.data //此处form就是后台返回接收到的数据
+								document.body.appendChild(div)
+								document.forms[0].submit()
+								that.earnestMoney = ''
+								that.shows = false
+							} else {
+								uni.hideLoading();
+								that.$queue.showToast(res.msg);
+							}
+						});
+					// #endif
+					// #ifdef APP-PLUS
+					that.$Request.postT('/app/wxPayErrRider/wxPayCashDeposit?money=' + that.earnestMoney + '&type=4').then(
+						ret => {
+							uni.hideLoading();
+							// console.log(JSON.stringify(ret), '支付信息')
+							if (ret.code == 0) {
+								that.setPayment('alipay', ret.data);
+								that.shows = false
+								// that.isCheckPay(ret.code, 'alipay', ret.data);
+							} else {
+								that.shows = false
+								that.earnestMoney = ''
+								that.$queue.showToast(res.msg);
+							}
+						});
+
+					// #endif
+				}
+			},
+			callPay: function(response) {
+				if (typeof WeixinJSBridge === "undefined") {
+					if (document.addEventListener) {
+						document.addEventListener('WeixinJSBridgeReady', that.onBridgeReady(response), false);
+					} else if (document.attachEvent) {
+						document.attachEvent('WeixinJSBridgeReady', that.onBridgeReady(response));
+						document.attachEvent('onWeixinJSBridgeReady', that.onBridgeReady(response));
+					}
+				} else {
+					that.onBridgeReady(response);
+				}
+			},
+			onBridgeReady: function(response) {
+				let that = this;
+				console.log(!response.package, '2222222')
+				// if (!response.package) {
+				// 	return;
+				// }
+				that.earnestMoney = ''
+				that.shows = false
+				console.log(response, '1111111111')
+				WeixinJSBridge.invoke(
+					'getBrandWCPayRequest', {
+						"appId": response.data.appid, //公众号名称,由商户传入
+						"timeStamp": response.data.timestamp, //时间戳,自1970年以来的秒数
+						"nonceStr": response.data.noncestr, //随机串
+						"package": response.data.package,
+						"signType": response.data.signType, //微信签名方式:
+						"paySign": response.data.sign //微信签名
+					},
+					function(res) {
+						console.log(res, '/*-/*-/*-')
+						if (res.err_msg === "get_brand_wcpay_request:ok") {
+							// 使用以上方式判断前端返回,微信团队郑重提示:
+							//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
+							that.taskData()
+							uni.showLoading({
+								title: '支付成功'
+							});
+							setTimeout(function() {
+								uni.hideLoading();
+							}, 1000);
+						} else {
+							uni.hideLoading();
+						}
+						WeixinJSBridge.log(response.err_msg);
+					}
+				);
+			},
+			isCheckPay(status, name, order) {
+				console.log(status, name, order, '111111')
+				this.earnestMoney = ''
+				this.shows = false
+				if (status == 0) {
+					this.setPayment(name, order);
+				} else {
+					uni.hideLoading();
+					uni.showToast({
+						title: '支付信息有误',
+						icon: 'none'
+					});
+				}
+			},
+			setPayment(name, order) {
+				let that = this
+				console.log(name, '*-*-*', order)
+				uni.requestPayment({
+					provider: name,
+					orderInfo: order, //微信、支付宝订单数据
+					success: function(res) {
+						console.log(res)
+						that.taskData()
+						uni.hideLoading();
+						that.earnestMoney = ''
+						that.shows = false
+						uni.showLoading({
+							title: '支付成功'
+						});
+					},
+					fail: function(err) {
+						console.log(err)
+						uni.hideLoading();
+					},
+					complete() {
+						uni.hideLoading();
+					}
+				});
+			},
+			// 退保证金
+			tuiBtn() {
+				let that = this
+				if (that.mayMoney == 0) {
+					uni.showToast({
+						icon: 'none',
+						title: '暂无保证金'
+					})
+					return
+				}
+				uni.showModal({
+					title: '提示',
+					content: '确认退还保证金吗?如果存在未完成订单和未处理完成的投诉无法退还,需要先处理完毕后再申请',
+					success: function(res) {
+						if (res.confirm) {
+							that.$Request.getT('/app/cash/cashDepositMoney').then(res => {
+								console.log(res)
+								if (res.code == 0) {
+									uni.showToast({
+										title: '申请成功'
+									})
+								} else {
+									uni.showToast({
+										title: res.msg,
+										icon: 'none'
+									})
+								}
+								setTimeout(function() {
+									that.taskData()
+								}, 1000)
+							});
+						}
+					},
+				})
+
+			}
+		}
+	}
+</script>
+
+<style>
+	/* 支付金额弹框 */
+	.receipt_code {
+		width: 90%;
+		margin: 0 auto;
+	}
+
+	.code_title {
+		width: 100%;
+		line-height: 100rpx;
+		font-size: 31rpx;
+		font-weight: bold;
+		text-align: center;
+		letter-spacing: 2rpx;
+		margin-top: 21rpx;
+		margin-bottom: 25rpx;
+	}
+
+	.u-input--border {
+		border: 1px solid #F2F2F2 !important;
+		background: #F2F2F2 !important;
+		color: #999999 !important;
+		font-weight: 500 !important;
+		letter-spacing: 2rpx !important;
+	}
+
+	.u-input__input {
+		font-size: 30rpx;
+		font-weight: bold;
+		flex: 1;
+		color: #999999 !important;
+		min-height: 85rpx !important;
+		margin-top: 7rpx;
+	}
+
+	.sure {
+		width: 100%;
+		height: 80rpx;
+		background: #FF7F00;
+		color: white;
+		border-radius: 46rpx;
+		text-align: center;
+		line-height: 80rpx;
+		margin-top: 30rpx;
+		letter-spacing: 2rpx;
+	}
+
+
+	.content {
+		width: 100%;
+		position: relative;
+	}
+
+	.acont_part1 {
+		width: 100%;
+
+	}
+
+	.part1_bg image {
+		width: 100%;
+		height: 730rpx;
+	}
+
+	.part1_box {
+		width: 90%;
+		height: 400rpx;
+		background: #ffffff;
+		position: absolute;
+		top: 70rpx;
+		left: 37rpx;
+		border-radius: 25rpx;
+	}
+
+	.balance {
+		width: 90%;
+		margin: 0 auto;
+		text-align: center;
+		/* margin-top: 50rpx; */
+		line-height: 55rpx;
+	}
+
+	.balance_name {
+		font-size: 26rpx;
+		letter-spacing: 2rpx;
+	}
+
+	.balance_price {
+		margin-top: 10rpx;
+		font-weight: bold;
+		font-size: 60rpx;
+	}
+
+	.part1_btn {
+		width: 90%;
+		margin: 0 auto;
+		margin-top: 80rpx;
+		display: flex;
+	}
+
+	.btn_left {
+		flex: 1;
+		border: 1rpx solid #CCCCCC;
+		text-align: center;
+		line-height: 80rpx;
+		color: black;
+		font-size: 24rpx;
+		border-radius: 12rpx;
+		margin-right: 10rpx;
+	}
+
+	.btn_right {
+		flex: 1;
+		border: 1rpx solid #CCCCCC;
+		text-align: center;
+		line-height: 80rpx;
+		background: #FF7F00;
+		color: white;
+		font-size: 24rpx;
+		border-radius: 12rpx;
+		margin-left: 10rpx;
+	}
+
+	.acont_part2 {
+		width: 90%;
+		position: absolute;
+		bottom: -100rpx;
+		left: 37rpx;
+	}
+
+	.acount_type {
+		font-size: 32rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+		line-height: 75rpx;
+	}
+
+	.name {
+		font-size: 26rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+		line-height: 70rpx;
+	}
+
+	.tit {
+		color: #666666;
+		font-size: 25rpx;
+	}
+</style>

+ 119 - 0
pages/riderMy/myAccount/AcontMoney/Acontlist.vue

@@ -0,0 +1,119 @@
+<template>
+	<view>
+		<view class="content" v-if="list.length" >
+			<view class="list_box" v-for="(item,index) in list" :key="index">
+				<view class="list_left">
+					<view class="name">{{item.title}}</view>
+					<view class="flex justify-between align-center">
+						<view style="color: red;">{{item.type==1?'+':'-'}} {{item.money}}</view>
+						<view class="data">{{item.createTime}}</view>
+					</view>
+					
+				</view>
+				<!-- <view class="list_right" style="color: red;" v-if="item.type==2">- {{item.money}}</view> -->
+				<!-- <view class="list_right" style="color: #33D442;" v-if="item.type==1">+ {{item.money}}</view> -->
+			</view>
+		</view>
+		<empty v-else></empty>
+	</view>
+</template>
+
+<script>
+	import empty from '@/components/empty'
+	export default {
+		components: {
+			empty
+		},
+		data() {
+			return {
+				list: [],
+				page: 1,
+				totalCount: 0
+			}
+		},
+		onLoad() {
+			this.taskData()
+		},
+		methods: {
+			// 获取任务数据
+			taskData() {
+				this.$Request.getT('/app/userinfo/selectCashDeposit?classify=1&page='+this.page+'&limit=15').then(res => {
+					if(res.code==0){
+						// this.list = res.data.list
+						if (this.page == 1) {
+							this.list = res.data.list
+						} else {
+							this.list = this.list.concat(res.data.list)
+						}
+						this.totalCount = res.data.totalPage
+					}
+					console.log('res',res)
+					uni.stopPullDownRefresh();
+				});
+			},
+		},
+		// 上拉加载
+		onReachBottom: function() {
+			if (this.page < this.totalCount) {
+				this.page += 1;
+				this.taskData();
+			} else {
+				uni.showToast({
+					title: '已经最后一页啦',
+					icon: 'none'
+				})
+			}
+			
+		},
+		onPullDownRefresh: function() {
+			this.page = 1;
+			this.taskData();
+		},
+	}
+</script>
+
+<style>
+	body {
+		background: #F5F5F5;
+	}
+
+	.content {
+		width: 100%;
+		background: #FFFFFF;
+		/* margin-top: 20rpx; */
+		padding-bottom: 50rpx;
+		padding-top: 20rpx;
+	}
+
+	.list_box {
+		width: 90%;
+		margin: 0 auto;
+		display: flex;
+		line-height: 45rpx;
+		padding-top: 20rpx;
+	}
+
+	.list_left {
+		flex: 2;
+	}
+
+	.name {
+		font-size: 26rpx;
+		color: #333333;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+	}
+
+	.data {
+		color: #999999;
+		font-size: 24rpx;
+	}
+
+	.list_right {
+		flex: 1;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		font-size: 31rpx;
+	}
+</style>

+ 133 - 0
pages/riderMy/myAccount/AcontMoney/cashList.vue

@@ -0,0 +1,133 @@
+<template>
+	<view style="text-align: left">
+		<view v-for="(item, index) in list" :key="index" class="item">
+			<view>
+				<view style="margin-bottom: 8upx;text-align: right;">
+					<text style="margin-bottom: 8upx;color: #0e80d2" v-if="item.state==1"> 提现成功</text>
+					<text style="margin-bottom: 8upx;color: #0e80d2" v-if="item.state==0"> 提现中</text>
+					<text style="margin-bottom: 8upx;color: #FF332F" v-if="item.state==-1"> 提现失败</text>
+				</view>
+				<view style="color: #999999;font-size: 28upx;">
+					<view v-if="item.classify == 1">
+						<view style="margin-bottom: 8upx">支付宝账号 {{ item.zhifubao }}</view>
+						<view style="margin-bottom: 8upx">支付宝姓名 {{ item.zhifubaoName }}</view>
+						<view style="margin-bottom: 8upx">发起时间 {{ item.createAt }}</view>
+					</view>
+					<view v-if="item.classify == 2">
+						<view>微信提现</view>
+						<view style="margin-bottom: 8upx">发起时间 {{ item.createAt }}</view>
+					</view>
+					<view style="margin-bottom: 8upx" v-if="item.state==1">成功时间 {{ item.outAt }}</view>
+					<view style="margin-bottom: 8upx;color: #FF2638" v-if="item.state==-1">失败原因:{{item.refund}}</view>
+					<view style="margin-bottom: 8upx;text-align: right;">
+						<!-- 提现金额: -->
+						<text style="color: #FF332F;font-size: 32upx;font-weight: 600">¥{{ item.money }}</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- 加载更多提示 -->
+		<view class="s-col is-col-24" v-if="list.length > 0">
+			<load-more :loadingType="loadingType" :contentText="contentText"></load-more>
+		</view>
+		<!-- 加载更多提示 -->
+		<empty v-if="list.length == 0" des="暂无数据"></empty>
+	</view>
+</template>
+
+<script>
+	import empty from '@/components/empty.vue'
+	export default {
+		components: {
+			empty
+		},
+		data() {
+			return {
+				page: 1,
+				size: 10,
+				list: [],
+				loadingType: 0,
+				scrollTop: false,
+				contentText: {
+					contentdown: '上拉显示更多',
+					contentrefresh: '正在加载...',
+					contentnomore: '没有更多数据了'
+				}
+			};
+		},
+		onLoad: function(e) {
+			this.$queue.showLoading('加载中...');
+			this.getMoney();
+		},
+		onPageScroll: function(e) {
+			this.scrollTop = e.scrollTop > 200;
+		},
+		methods: {
+			getMoney(type) {
+				this.loadingType = 1;
+				let userId = this.$queue.getData('userId');
+				let data = {
+					page: this.page,
+					limit: this.size,
+					userId: userId
+				};
+				this.$Request.getT('/app/cash/selectPayDetails', data).then(res => {
+					if (res.code === 0) {
+						if (this.page === 1) {
+							this.list = [];
+						}
+						res.data.list.forEach(d => {
+							// if (d.state === -1) {
+							// 	d.state = '已退款';
+							// } else if (d.state === 0) {
+							// 	d.state = '提现中';
+							// } else if (d.state === 1) {
+							// 	d.state = '提现成功';
+							// }
+							this.list.push(d);
+						});
+						if (res.data.list.length === this.size) {
+							this.loadingType = 0;
+						} else {
+							this.loadingType = 3;
+						}
+					} else {
+						this.loadingType = 2;
+					}
+					uni.hideLoading();
+					if (type === 'Refresh') {
+						uni.stopPullDownRefresh(); // 停止刷新
+					}
+				});
+			}
+		},
+		onLoad: function(e) {
+			this.getMoney();
+		},
+		onReachBottom: function() {
+			this.page = this.page + 1;
+			this.getMoney();
+		},
+		onPullDownRefresh: function() {
+			this.page = 1;
+			this.getMoney('Refresh');
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	// @import '../../static/css/index.css';
+
+	page {
+		background: #ffffff;
+	}
+
+	.item {
+		background: white;
+		padding: 32rpx;
+		margin: 32rpx;
+		font-size: 28rpx;
+		box-shadow: 7px 9px 34px rgba(0, 0, 0, 0.1);
+		border-radius: 16upx;
+	}
+</style>

+ 281 - 0
pages/riderMy/myAccount/AcontMoney/zhifubao.vue

@@ -0,0 +1,281 @@
+<template>
+	<view class="container" v-if="XCXIsSelect!='否'">
+		<!-- <list-cell title="收款人姓名" type="text" placeholder="请输入支付宝收款人姓名" v-model="userName"></list-cell>
+
+		<list-cell title="支付宝账号" type="number" placeholder="请输入要绑定的支付宝手机号" v-model="mobile" :maxlength="11"></list-cell> -->
+		<u-form :model="form" ref="uForm">
+			<u-form-item label="收款人姓名" label-width="250"><u-input type="text" placeholder="请输入支付宝收款人姓名" v-model="userName" /></u-form-item>
+			<u-form-item label="支付宝账号" label-width="250"><u-input type="text" placeholder="请输入要绑定的支付宝手机号" v-model="mobile" /></u-form-item>
+        </u-form>
+		<button v-if="btn" class="confirm-btn" @click="toLogin" :disabled="logining">{{btn}}</button>
+	    <view style="padding: 32upx 64upx;font-size: 24upx;color: #999999;">提示:请正确填写收款人的支付宝账户和真实的收款人姓名,否则将无法正常收款</view>
+	
+	</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		
+		data() {
+			return {
+				mobile: '',
+				userName: '',
+				btn:'绑定账户',
+				logining: false,
+				form:{},
+				XCXIsSelect:'否'
+			}
+		},
+		onLoad() {
+			this.XCXIsSelect = this.$queue.getData('XCXIsSelect');
+			if(this.XCXIsSelect =='否'){
+				uni.setNavigationBarTitle({
+				    title: '隐私政策'
+				});
+			}else{
+				uni.setNavigationBarTitle({
+				    title: '账号绑定'
+				});
+			}
+			let userId = this.$queue.getData("userId");
+			if (userId) {
+				this.$Request.getT("/app/userinfo/findUserInfoById").then(res => {
+					if (res.code === 0 && res.data) {
+						if (res.data.zhiFuBao) {
+							this.mobile = res.data.zhiFuBao;
+							this.btn = '修改账户';
+						}else{
+							this.btn = '绑定账户';
+						}
+						if (res.data.zhiFuBaoName) {
+							this.userName = res.data.zhiFuBaoName;
+						}
+					}else{
+						this.btn = '绑定账户';
+					}
+				});
+			}
+
+		},
+		methods: {
+			inputChange(e) {
+				const key = e.currentTarget.dataset.key;
+				this[key] = e.detail.value;
+			},
+			navBack() {
+				uni.navigateBack();
+			},
+
+			toLogin() {
+				let userId = this.$queue.getData("userId");
+				let token = uni.getStorageSync("token");
+				const {
+					mobile,
+					userName
+				} = this;
+				if (!mobile) {
+					this.$queue.showToast("请设置收款人支付宝账号");
+				} else if (!userName) {
+					this.$queue.showToast("请设置收款人姓名");
+				} else {
+					this.$queue.showLoading("修改中...");
+					this.$Request.postJson("/app/user/updateUser",{
+						zhiFuBao: mobile,
+						zhiFuBaoName: userName
+					}).then(
+						res => {
+							if (res.code === 0) {
+								this.navBack();
+							} else {
+								this.$queue.showToast(res.msg)
+							}
+							uni.hideLoading();
+						});
+				}
+			},
+		},
+
+	}
+</script>
+
+<style lang='scss'>
+	page {
+		background: #FFFFFF;
+	}
+
+	.container {
+		padding: 32upx;
+		position: relative;
+		width: 100%;
+		height: 100%;
+		overflow: hidden;
+		background: #fff;
+	}
+
+	.confirm-btn1 {
+		width: 300px;
+		height: 42px;
+		line-height: 42px;
+		border-radius: 30px;
+		margin-top: 70upx;
+		background: whitesmoke;
+		color: grey;
+		/* font-size: $font-lg; */
+
+		&:after {
+			border-radius: 60px;
+		}
+	}
+
+	.wrapper {
+		position: relative;
+		z-index: 90;
+		background: #fff;
+		padding-bottom: 20px;
+	}
+
+	.back-btn {
+		position: absolute;
+		left: 20px;
+		z-index: 9999;
+		padding-top: var(--status-bar-height);
+		top: 20px;
+		font-size: 20px;
+		/* color: $font-color-dark; */
+	}
+
+	.left-top-sign {
+		font-size: 80px;
+		/* color: $page-color-base; */
+		position: relative;
+	}
+
+	.right-top-sign {
+		position: absolute;
+		top: 40px;
+		right: -15px;
+		z-index: 95;
+
+		&:before,
+		&:after {
+			display: block;
+			content: "";
+			width: 20px;
+			height: 40px;
+			background: -moz-linear-gradient(left, #fa4dbe 0, #fbaa58 100%);
+			background: -webkit-gradient(linear,
+				left top,
+				left right,
+				color-stop(0, #fa4dbe),
+				color-stop(100%, #fbaa58));
+			background: -webkit-linear-gradient(left, #fa4dbe 0, #fbaa58 100%);
+			background: -o-linear-gradient(left, #fa4dbe 0, #fbaa58 100%);
+			background: -ms-linear-gradient(left, #fa4dbe 0, #fbaa58 100%);
+			background: linear-gradient(to left, #fa4dbe 0, #fbaa58 100%);
+		}
+
+		&:before {
+			transform: rotate(50deg);
+			border-radius: 0 50px 0 0;
+		}
+
+		&:after {
+			position: absolute;
+			right: -198px;
+			top: 0;
+			transform: rotate(-50deg);
+			border-radius: 50px 0 0 0;
+			/* background: pink; */
+		}
+	}
+
+	.left-bottom-sign {
+		position: absolute;
+		left: -270px;
+		bottom: -320px;
+		/*border: 100upx solid #d0d1fd;*/
+		border-radius: 50%;
+		padding: 90px;
+	}
+
+	.welcome {
+		position: relative;
+		left: 30px;
+		top: -50px;
+		font-size: 23px;
+		color: #555;
+		text-shadow: 1px 0px 1px rgba(0, 0, 0, .3);
+	}
+
+	.input-content {
+		padding: 0 20px;
+	}
+
+	.input-item {
+		display: flex;
+		flex-direction: column;
+		align-items: flex-start;
+		justify-content: center;
+		padding: 0 30px;
+		/* background: $page-color-light; */
+		height: 64px;
+		border-radius: 4px;
+		margin-bottom: 30px;
+
+		&:last-child {
+			margin-bottom: 0;
+		}
+
+		.tit {
+			height: 30px;
+			line-height: 28px;
+			/* font-size: $font-sm+2upx;
+			color: $font-color-base; */
+		}
+
+		input {
+			height: 40px;
+			/* font-size: $font-base + 2upx;
+			color: $font-color-dark; */
+			width: 100%;
+		}
+	}
+
+	.confirm-btn {
+		width: 300px;
+		height: 42px;
+		line-height: 42px;
+		border-radius: 30px;
+		margin-top: 70upx;
+		background: #FF4701;
+		color: #fff;
+		/* font-size: $font-lg; */
+	
+		&:after {
+			border-radius: 60px;
+		}
+	}
+
+	.forget-section {
+		/* font-size: $font-sm+2upx;
+		color: $font-color-spec; */
+		text-align: center;
+		margin-top: 40px;
+	}
+
+	.register-section {
+		position: fixed;
+		left: 0;
+		bottom: 30px;
+		width: 100%;
+		/* font-size: $font-sm+2upx;
+		color: $font-color-base; */
+		text-align: center; 
+
+		text {
+			/* color: $font-color-spec; */
+			margin-left: 10px;
+		}
+	}
+</style>

+ 116 - 0
pages/riderMy/myAccount/Acontlist/Acontlist.vue

@@ -0,0 +1,116 @@
+<template>
+	<view>
+		<view class="content" v-if="list.length" >
+			<view class="list_box" v-for="(item,index) in list" :key="index">
+				<view class="list_left">
+					<view class="name">{{item.title}}</view>
+					<view class="data">{{item.createTime}}</view>
+				</view>
+				<view class="list_right" style="color: red;" v-if="item.type==2">- {{item.money}}</view>
+				<view class="list_right" style="color: #33D442;" v-if="item.type==1">+ {{item.money}}</view>
+			</view>
+		</view>
+		<empty v-else></empty>
+	</view>
+</template>
+
+<script>
+	import empty from '@/components/empty'
+	export default {
+		components: {
+			empty
+		},
+		data() {
+			return {
+				list: [],
+				page: 1,
+				totalCount: 0
+			}
+		},
+		onLoad() {
+			this.taskData()
+		},
+		methods: {
+			// 获取任务数据
+			taskData() {
+				this.$Request.getT('/app/userinfo/findMoneyDetails?classify=3&page='+this.page+'&limit=15').then(res => {
+					if(res.code==0){
+						// this.list = res.data.list
+						if (this.page == 1) {
+							this.list = res.data.list
+						} else {
+							this.list = this.list.concat(res.data.list)
+						}
+						
+						this.totalCount = res.data.totalPage
+					}
+					console.log('res',res)
+					uni.stopPullDownRefresh();
+				});
+			},
+		},
+		// 上拉加载
+		onReachBottom: function() {
+			if (this.page < this.totalCount) {
+				this.page += 1;
+				this.taskData();
+			} else {
+				uni.showToast({
+					title: '已经最后一页啦',
+					icon: 'none'
+				})
+			}
+			
+		},
+		onPullDownRefresh: function() {
+			this.page = 1;
+			this.taskData();
+		},
+	}
+</script>
+
+<style>
+	body {
+		background: #F5F5F5;
+	}
+
+	.content {
+		width: 100%;
+		background: #FFFFFF;
+		/* margin-top: 20rpx; */
+		padding-bottom: 50rpx;
+		padding-top: 20rpx;
+	}
+
+	.list_box {
+		width: 90%;
+		margin: 0 auto;
+		display: flex;
+		line-height: 45rpx;
+		padding-top: 20rpx;
+	}
+
+	.list_left {
+		flex: 2;
+	}
+
+	.name {
+		font-size: 26rpx;
+		color: #333333;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+	}
+
+	.data {
+		color: #999999;
+		font-size: 24rpx;
+	}
+
+	.list_right {
+		flex: 1;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		font-size: 31rpx;
+	}
+</style>

+ 628 - 0
pages/riderMy/myAccount/Txmoney/Txmoney.vue

@@ -0,0 +1,628 @@
+<template>
+	<view class="content" v-if="XCXIsSelect !='否'">
+		<view class="part_one">
+			<view class="one_title">可提现金额</view>
+			<view class="one_price">¥{{mayMoney}}</view>
+		</view>
+		<view class="part_two">
+			<view class="two_title">提现金额
+				<text>提现最低额度{{minMoney}}元</text>
+			</view>
+			<view class="two_box">
+				¥
+				<u-input v-model="money" type="number" :clearable="false" :border="border" placeholder="请输入提现金额" />
+			</view>
+
+			<view class="beizhu">*注单笔限制提现最低额度{{minMoney}}元,最大提现额度为{{manMoney}}元,单笔提现手续费{{shouxufei*100}}%</view>
+
+		</view>
+		<view class="part_three">
+			<view class="three_name">兑换方式</view>
+			<view class="btn">
+				<view class="btn_left" :class="current==2?'btna':''" @click="bindToindex(2)">
+					<image src="../../../../static/my/weixin.png"></image>
+					<text>微信</text>
+				</view>
+				<view class="btn_right" :class="current==1?'btna':''" @click="bindToindex(1)">
+					<image src="../../../../static/my/zhifubao.png"></image>
+					<text>支付宝</text>
+				</view>
+			</view>
+		</view>
+		<view class="part_four">
+			<view class="submit" @click="getOut()">立即提现</view>
+			<view class="four_box">
+				<view class="box_left" @click="goZhifuBao">
+					提现账户
+				</view>
+				<view class="box_right" @click="list">
+					提现记录
+				</view>
+				<view class="box_right" @click="isShow">
+					微信收款码
+				</view>
+			</view>
+		</view>
+
+		<!-- 微信收款码弹框 -->
+		<u-popup v-model="show" mode="center">
+			<view class="padding">
+				<view class="text-center text-lg text-bold flex justify-between">
+					<view></view>
+					<view>添加微信收款码</view>
+					<view @click="show=false">X</view>
+				</view>
+				<!-- <view class="text-center padding-top-sm padding-bottom-lg" style="color: #999999;">请提交微信号和微信二维码
+				</view> -->
+				<view style="width: 80%;margin: 0 auto;">
+					<view class="margin-top" @click.stop="weixin"
+						style="border: 4rpx solid #010101;border-radius: 16rpx;overflow: hidden;">
+						<image v-if="!wximg" src="../../../../static/image/erweima.png"></image>
+						<image v-else :src="wximg" mode=""></image>
+					</view>
+				</view>
+				<!-- <view class="text-center margin-top-sm " @click="submit"
+					style="border-radius: 10rpx;background-color: #7E59FF;color: #fff;height: 80rpx;line-height: 80rpx;">保存</view> -->
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				show: false,
+				current: '1',
+				// value: 10,
+				money: '',
+				zhifubaoName: '',
+				zhifubao: '',
+				shouxufei: 0.01,
+				minMoney: '10',
+				manMoney: '200',
+				mayMoney: '',
+				XCXIsSelect: '否',
+				wximg: '',
+				values: ''
+			}
+		},
+		onLoad() {
+			this.XCXIsSelect = this.$queue.getData('XCXIsSelect');
+			if (this.XCXIsSelect == '否') {
+				uni.setNavigationBarTitle({
+					title: '隐私政策'
+				});
+			} else {
+				uni.setNavigationBarTitle({
+					title: '余额提现'
+				});
+			}
+		},
+		onShow() {
+			this.getMoney()
+			//最低可提现金额度
+			this.$Request.getT('/app/common/type/112').then(res => {
+				if (res.code === 0) {
+					this.minMoney = res.data.value
+				}
+			});
+			//最高可提现金额度
+			this.$Request.getT('/app/common/type/153').then(res => {
+				if (res.code === 0) {
+					this.manMoney = res.data.value
+				}
+			});
+			//手续费
+			this.$Request.getT('/app/common/type/114').then(res => {
+				if (res.code === 0) {
+					this.shouxufei = res.data.value
+				}
+			});
+			this.$Request.getT('/app/common/type/290').then(res => { //判断微信提现方式
+				if (res.code == 0) {
+					if (res.data && res.data.value) {
+						this.values = res.data.value
+					}
+				}
+			})
+		},
+		methods: {
+			//用户收款码弹框
+			isShow() {
+				this.getMoney()
+				this.show = true
+			},
+			//微信 支付宝提现选择
+			bindToindex(e) {
+				this.current = e
+				console.log(e, this.current)
+			},
+			list() {
+				uni.navigateTo({
+					url: '/pages/riderMy/myAccount/AcontMoney/cashList'
+				});
+			},
+			goZhifuBao() {
+				uni.navigateTo({
+					url: '/pages/riderMy/myAccount/AcontMoney/zhifubao'
+				});
+			},
+			getMoney() {
+				let that = this;
+				let token = this.$queue.getData('token');
+				let userId = this.$queue.getData('userId');
+				if (token) {
+					//this.$queue.showLoading("加载中...");
+					//可以提现金额查询预估收入查询
+					that.$Request.getT("/app/userinfo/findUserInfoById").then(res => {
+						if (res.code === 0 && res.data) {
+							that.mayMoney = res.data.balance;
+							that.zhifubao = res.data.zhiFuBao;
+							that.zhifubaoName = res.data.zhiFuBaoName;
+							that.wximg = res.data.cashQrCode
+						} else if (res.code === -102) {
+							that.$queue.showToast(res.msg);
+							that.$queue.logout();
+							// uni.navigateTo({
+							// 	url: '/pages/public/login'
+							// });
+						} else {
+							that.mayMoney = '0';
+							//this.$queue.showToast(res.msg);
+						}
+					});
+				}
+			},
+			getOut() {
+				let that = this;
+				let token = that.$queue.getData('token');
+				let userId = that.$queue.getData('userId');
+				if (token) {
+					if (that.current == 1) {
+						if (!that.zhifubao || !that.zhifubaoName) {
+							uni.navigateTo({
+								url: '/pages/riderMy/myAccount/AcontMoney/zhifubao'
+							});
+							return
+						}
+						if (!/^\d+$/.test(that.money)) {
+							uni.showToast({
+								icon: 'none',
+								title: '请输入正确金额,不能包含中文,英文,特殊字符和小数'
+							});
+							return;
+						}
+						if (Number(that.money) < Number(that.minMoney)) {
+							uni.showToast({
+								icon: 'none',
+								title: '提现金额不能小于' + that.minMoney + '元'
+							});
+							return;
+						}
+
+						if (Number(that.money) > Number(that.manMoney)) {
+							uni.showToast({
+								icon: 'none',
+								title: '提现金额不能大于' + that.manMoney + '元'
+							});
+							return;
+						}
+						uni.showModal({
+							title: '提现申请提示',
+							content: '请仔细确认收款人信息\n姓名:' + that.zhifubaoName + '\n提现金额:' + that.money + '\n提现手续费:' +
+								parseFloat(that.money * that.shouxufei).toFixed(2) + '元' + '\n收款账号:' + that.zhifubao + '',
+							success: e => {
+								if (e.confirm) {
+									that.$queue.showLoading('提现中...');
+									that.$Request.getT('/app/cash/cashMoney?classify=' + that.current +
+										'&money=' + that.money).then(res => {
+										if (res.code === 0) {
+											that.$queue.showToast('提现申请成功,预计三个工作日到账');
+											that.getMoney();
+											that.mayMoney = ''
+										} else {
+											uni.showModal({
+												title: '温馨提示',
+												content: res.msg,
+												showCancel: false,
+												cancelText: '取消',
+												confirmText: '确认'
+											});
+										}
+										uni.hideLoading();
+									});
+								}
+							}
+						});
+
+					} else if (that.current == 2) {
+						if (!/^\d+$/.test(that.money)) {
+							uni.showToast({
+								icon: 'none',
+								title: '请输入正确金额,不能包含中文,英文,特殊字符和小数'
+							});
+							return;
+						}
+						if (Number(that.money) < Number(that.minMoney)) {
+							uni.showToast({
+								icon: 'none',
+								title: '提现金额不能小于' + that.minMoney + '元'
+							});
+							return;
+						}
+						
+						if (Number(that.money) > Number(that.manMoney)) {
+							uni.showToast({
+								icon: 'none',
+								title: '提现金额不能大于' + that.manMoney + '元'
+							});
+							return;
+						}
+						if (that.values == 2) {
+							that.$Request.getT('/app/userinfo/findUserInfoById').then(res => {
+								if (res.code === 0) {
+									let wxImg = res.data.cashQrCode;
+									if (!wxImg) {
+										uni.showModal({
+											title: '提现提示',
+											content: '请上传微信收款码',
+											showCancel: true,
+											cancelText: '取消',
+											confirmText: '上传',
+											success: res => {
+												if (res.confirm) {
+													that.show = true
+												}
+											},
+											fail: () => {},
+											complete: () => {}
+										});
+										return;
+									}
+
+									if (that.money * 1 >= that.minMoney * 1) {
+										uni.showModal({
+											title: '提现申请提示',
+											content: '金额:' + that.money + '元' + ',' + '手续费:' + (that
+												.money * that.shouxufei).toFixed(2),
+											success: e => {
+												if (e.confirm) {
+													that.$queue.showLoading('提现中...');
+													let data = {
+														money: that.money,
+														classify: 2
+													}
+													that.$Request.getT('/app/cash/cashMoney',
+														data).then(
+														res => {
+															if (res.code === 0) {
+																setTimeout(function() {
+																	that.$queue.showToast(
+																		'提现申请成功,预计三个工作日到账'
+																	);
+																}, 1000)
+																that.getMoney();
+																that.money = ''
+															} else {
+																uni.showModal({
+																	title: '温馨提示',
+																	content: res.msg,
+																	showCancel: false,
+																	cancelText: '取消',
+																	confirmText: '确认'
+																});
+
+															}
+															uni.hideLoading();
+														});
+												}
+											}
+										});
+									} else {
+										setTimeout(function() {
+											that.$queue.showToast('提现金额必须大于或等于' + that.minMoney + '元才可提现');
+										}, 1000)
+
+									}
+								} else {
+									that.$queue.showToast('网络状态不好,请刷新后重试!');
+								}
+							});
+
+
+						} else {
+							if (!/^\d+$/.test(that.moneys)) {
+								uni.showToast({
+									icon: 'none',
+									title: '请输入正确金额,不能包含中文,英文,特殊字符和小数'
+								});
+								return;
+							}
+							if (parseFloat(that.moneys).toFixed(1) >= that.minMoney) {
+								uni.showModal({
+									title: '提现申请提示',
+									content: '金额:' + that.moneys + '元' + ',' + '手续费:' + parseFloat(that.moneys *
+										that.shouxufei).toFixed(2),
+									success: e => {
+										if (e.confirm) {
+											that.$queue.showLoading('提现中...');
+											let data = {
+												money: that.moneys,
+												classify: 2,
+												type: 3
+											}
+											that.$Request.getT('/shop/shopmoney/shopCashMoney', data).then(
+												res => {
+													if (res.code === 0) {
+														setTimeout(function() {
+															that.$queue.showToast(
+																'提现申请成功,预计三个工作日到账');
+														}, 1000)
+														that.getMoney();
+														that.money =''
+													} else {
+														uni.showModal({
+															title: '温馨提示',
+															content: res.msg,
+															showCancel: false,
+															cancelText: '取消',
+															confirmText: '确认'
+														});
+														that.getMoney();
+													}
+													uni.hideLoading();
+												});
+										}
+									}
+								});
+							} else {
+								that.$queue.showToast('提现金额必须大于或等于' + that.minMoney + '元才可提现');
+							}
+						}
+					}
+				} else {
+					uni.showToast({
+						title: '提现失败'
+					})
+				}
+			},
+			weixin() {
+				let that = this
+				uni.chooseImage({
+					count: 1, //默认9
+					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+					sourceType: ['album', 'camera'], //从相册选择
+					success: (res) => {
+						that.$queue.showLoading("上传中...");
+						for (let i = 0; i < 1; i++) {
+							uni.uploadFile({ // 上传接口
+								url: 'https://www.daweilinli.com/sqx_fast/alioss/upload', //真实的接口地址
+								filePath: res.tempFilePaths[i],
+								name: 'file',
+								success: (uploadFileRes) => {
+									let img = JSON.parse(uploadFileRes.data).data
+									let userId = that.$queue.getData('userId');
+									let data = {
+										cashQrCode: img
+									}
+									that.$Request.postJson('/app/user/updateUser',
+										data).then(
+										res => {
+											if (res.code == 0) {
+												that.getMoney()
+												setTimeout(function() {
+													that.$queue.showToast('上传成功')
+												}, 1000)
+											}
+										});
+									uni.hideLoading();
+
+
+
+									// that.show = false
+								}
+							});
+						}
+
+					}
+				});
+
+			},
+		}
+	}
+</script>
+
+<style>
+	body {
+		background: #F5F5F5;
+	}
+
+	.content {
+		width: 100%;
+	}
+
+
+	.part_one {
+		width: 90%;
+		margin: 0 auto;
+		background: #FFFFFF;
+		margin-top: 20rpx;
+		border-radius: 20rpx;
+		height: 170rpx;
+	}
+
+	.one_title {
+		width: 90%;
+		margin: 0 auto;
+		font-size: 32rpx;
+		letter-spacing: 1rpx;
+		padding-top: 30rpx;
+	}
+
+	.one_price {
+		width: 90%;
+		margin: 0 auto;
+		margin-top: 20rpx;
+		font-size: 47rpx;
+		font-weight: bold;
+	}
+
+	.part_two {
+		width: 90%;
+		margin: 0 auto;
+		background: #FFFFFF;
+		margin-top: 20rpx;
+		border-radius: 20rpx;
+	}
+
+	.two_title {
+		width: 90%;
+		margin: 0 auto;
+		line-height: 95rpx;
+		font-size: 34rpx;
+	}
+
+	.two_title text {
+		font-size: 27rpx;
+		margin-left: 34rpx;
+	}
+
+	.two_box {
+		width: 90%;
+		margin: 0 auto;
+		display: flex;
+		align-items: center;
+		font-size: 32rpx;
+		font-weight: bold;
+	}
+
+	.u-input__input {
+		font-size: 50rpx !important;
+		color: #747474 !important;
+		border-bottom: 1rpx solid #cccccc;
+
+	}
+
+	.tit {
+		width: 90%;
+		margin: 0 auto;
+		font-size: 31rpx;
+		margin-top: 10rpx;
+		color: black;
+	}
+
+	.beizhu {
+		width: 90%;
+		margin: 0 auto;
+		line-height: 55rpx;
+		color: red;
+		letter-spacing: 1rpx;
+	}
+
+	.part_three {
+		width: 90%;
+		margin: 0 auto;
+		background: #FFFFFF;
+		margin-top: 20rpx;
+		border-radius: 20rpx;
+	}
+
+	.three_name {
+		width: 90%;
+		margin: 0 auto;
+		font-size: 33rpx;
+		color: black;
+		line-height: 80rpx;
+	}
+
+	.btn {
+		width: 96%;
+		margin: 0 auto;
+		display: flex;
+		padding-bottom: 30rpx;
+	}
+
+	.btn_left {
+		flex: 1;
+		height: 90rpx;
+		border: 1rpx solid #ccc;
+		border-radius: 20rpx;
+		margin-right: 10rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.btn_right {
+		flex: 1;
+		/* width: 240rpx; */
+		height: 90rpx;
+		border: 1rpx solid #ccc;
+		border-radius: 20rpx;
+		margin-left: 10rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+
+
+	.btna {
+		border: 1rpx solid #E34B21 !important;
+	}
+
+
+	.btn_left image {
+		width: 50rpx;
+		height: 50rpx;
+		margin-right: 12rpx;
+	}
+
+	.btn_right image {
+		width: 50rpx;
+		height: 50rpx;
+		margin-right: 12rpx;
+	}
+
+	.part_four {
+		width: 90%;
+		margin: 0 auto;
+		/* background: #FFFFFF; */
+		margin-top: 20rpx;
+		border-radius: 20rpx;
+	}
+
+	.submit {
+		width: 100%;
+		height: 90rpx;
+		background: #F8501F;
+		color: #F8EBD2;
+		text-align: center;
+		line-height: 90rpx;
+		font-size: 37rpx;
+		border-radius: 12rpx;
+	}
+
+	.four_box {
+		width: 90%;
+		margin: 0 auto;
+		height: 125rpx;
+		display: flex;
+		color: #838383;
+	}
+
+	.box_left {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.box_right {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+</style>

+ 176 - 0
pages/riderMy/myAccount/myAccount.vue

@@ -0,0 +1,176 @@
+<template>
+	<view class="my_account">
+		<view class="account_top">
+			<view class="account_name">账户余额</view>
+			<view class="account_price">{{moneys}}<text>元</text></view>
+			<view class="account_btn" @click="bindTxmoney">立即提现</view>
+		</view>
+		<!-- 我的列表 -->
+		<view class="mylist">
+			<view class="list_box" v-for="(item,index) in mylist" :key="index" @click="bindTomy(item.name)">
+				<view class="list_left">
+					<view class="list_img">
+						<image :src="item.image"></image>
+					</view>
+					<view class="list_name">{{item.name}}</view>
+				</view>
+				<view class="list_right">
+					<image src="../../../static/my/icon_go.png"></image>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				moneys:0,
+				mylist: [{
+					id: 1,
+					name: '保证金',
+					image: '../../../static/rider/qqq.png'
+				}, {
+					id: 2,
+					name: '账户明细',
+					image: '../../../static/rider/qq.png'
+				}]
+			}
+		},
+		onShow() {
+			this.taskData()
+		},
+		methods: {
+			// 获取任务数据
+			taskData() {
+				this.$Request.getT('/app/userinfo/findBalance').then(res => {
+					if(res.code==0){
+						if(res.data){
+							this.moneys = res.data
+						}
+						
+					}
+					console.log('res',res)
+					
+				});
+			},
+			bindTxmoney() {
+				uni.navigateTo({
+					url: '/pages/riderMy/myAccount/Txmoney/Txmoney'
+				})
+			},
+			bindTomy(name) {
+				console.log(name)
+				if (name == '保证金') {
+					uni.navigateTo({
+						url: '/pages/riderMy/myAccount/AcontMoney/AcontMoney'
+					})
+				} else if (name == '账户明细') {
+					uni.navigateTo({
+						url: '/pages/riderMy/myAccount/Acontlist/Acontlist'
+					})
+				}
+			}
+		}
+	}
+</script>
+
+<style>
+	.my_account {
+		width: 100%;
+	}
+
+	.account_top {
+		width: 100%;
+		height: 280rpx;
+		background: #FF7F00;
+		position: relative;
+	}
+
+	.account_name {
+		position: absolute;
+		top: 80rpx;
+		left: 80rpx;
+		color: white;
+		font-size: 30rpx;
+		letter-spacing: 2rpx;
+	}
+
+	.account_price {
+		position: absolute;
+		top: 140rpx;
+		left: 80rpx;
+		color: white;
+		font-size: 50rpx;
+		letter-spacing: 2rpx;
+	}
+
+	.account_price text {
+		font-size: 25rpx;
+		margin-left: 10rpx;
+	}
+
+	.account_btn {
+		width: 190rpx;
+		height: 66rpx;
+		background: #ffffff;
+		color: #FF7F00;
+		border-radius: 66rpx;
+		text-align: center;
+		line-height: 66rpx;
+		position: absolute;
+		top: 140rpx;
+		right: 40rpx;
+		font-size: 24rpx;
+	}
+
+	/* 我的列表 */
+	.mylist {
+		width: 93%;
+		margin: 0 auto;
+		background-color: #FFFFFF;
+		margin-top: 10rpx;
+		border-radius: 23rpx;
+	}
+
+	.list_box {
+		width: 90%;
+		margin: 0 auto;
+		display: flex;
+		height: 95rpx;
+	}
+
+	.list_left {
+		flex: 1;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+	}
+
+	.list_img {
+		margin-right: 10rpx;
+	}
+
+	.list_img image {
+		width: 50rpx;
+		height: 50rpx;
+	}
+
+	.list_name {
+		font-size: 25rpx;
+		letter-spacing: 2rpx;
+	}
+
+	.list_right {
+		flex: 1;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.list_right image {
+		width: 12rpx;
+		height: 20rpx;
+	}
+</style>

+ 233 - 0
pages/riderMy/myComment/myComment.vue

@@ -0,0 +1,233 @@
+<template>
+	<view class="comment">
+		<view class="comment_tabs">
+			<view class="box" v-for="(item,index) in list" :key="index" @click="change(index)" :class="{btna:count == index}">{{item}}</view>
+		</view>
+		<view class="tab_box" :class="{dis:btnnum == 0}">
+			<view class="content">
+				<view class="content_box" v-for="(item,index) in head" :key="item.id">
+					<view class="comment_head">
+						<view class="head_left">
+							<view class="img">
+								<image :src="item.avatar?item.avatar:'../../../static/logo.png'"></image>
+							</view>
+							<view class="comment_name">{{item.nickName?item.nickName:'匿名'}}</view>
+						</view>
+						<view class="head_right" v-if="item.satisfactionFlag=='0'">
+							<view class="image">
+								<image src="../../../static/rider/zan.png"></image>
+							</view>
+							<view class="comment_tit">满意</view>
+						</view>
+					</view>
+					<view class="comment_title">{{item.evaluateMessage}}</view>
+				</view>
+			</view>
+			<empty v-if="head.length == 0" ></empty>
+		</view>
+		<view class="tab_box" :class="{dis:btnnum == 1}">
+			<view class="content">
+				<view class="content_box" v-for="(item,index) in head" :key="item.id">
+					<view class="comment_head">
+						<view class="head_left">
+							<view class="img">
+								<image :src="item.avatar?item.avatar:'../../../static/logo.png'"></image>
+							</view>
+							<view class="comment_name">{{item.nickName?item.nickName:'匿名'}}</view>
+						</view>
+						<view class="head_right" v-if="item.satisfactionFlag=='1'">
+							<view class="image">
+								<image src="../../../static/rider/zz.png"></image>
+							</view>
+							<view class="comment_tit comment_tit1">不满意</view>
+						</view>
+					</view>
+					<view class="comment_title">{{item.evaluateMessage}}</view>
+				</view>
+			</view>
+			<empty v-if="head.length == 0" ></empty>
+		</view>
+	</view>
+</template>
+
+<script>
+	import empty from '@/components/empty'
+	export default {
+		components: {
+			empty
+		},
+		data() {
+			return {
+				list: ["满意", "不满意"],
+				btnnum: 0,
+				count: "",
+				head: [],
+				page:1,
+				limit:10,
+				totalCount:0,
+				satisfactionFlag:0
+			}
+		},
+		mounted() {
+			this.bindorder()
+		},
+		methods: {
+			change(e) {
+				// console.log(e)
+				this.head = []
+				this.page = 1
+				this.count = e
+				this.btnnum = e
+				this.satisfactionFlag = e
+				this.bindorder()
+			},
+			// 获取数据
+			bindorder() {
+				this.$Request.getT('/app/userinfo/findEvaluate',
+				{
+					page:this.page,
+					limit:this.limit,
+					satisfactionFlag:this.satisfactionFlag
+				}).then(res => {
+					if(res.code==0){
+						// this.head = res.data
+						if (this.page == 1) {
+							this.head = res.data.list
+						} else {
+							this.head = this.head.concat(res.data.list)
+						}
+						this.totalCount = res.data.totalCount
+					}else{
+						console.log('失败:',res.data)
+					}
+					uni.stopPullDownRefresh();
+				});
+			},
+		},
+		// 上拉加载
+		onReachBottom: function() {
+			if(this.page<this.totalCount){
+				this.page = this.page + 1;
+				this.bindorder();
+			}else{
+				uni.showToast({
+					title:'已经最后一页啦',
+					icon:'none'
+				})
+			}
+			
+		},
+		// 下拉刷新
+		onPullDownRefresh: function() {
+			this.page = 1;
+			this.bindorder();
+		},
+	}
+</script>
+
+<style>
+	body {
+		background: #F5F5F5;
+	}
+
+	.comment {
+		width: 100%;
+	}
+
+	.comment_tabs {
+		width: 100%;
+		display: flex;
+		background: #FFFFFF;
+		height: 90rpx;
+	}
+
+	.box {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.btna {
+		background-color: #E6E6E6;
+	}
+
+	.tab_box {
+		display: none;
+	}
+
+	.dis {
+		display: block;
+	}
+
+	/* 满意 */
+	.content {
+		width: 90%;
+		margin: 0 auto;
+		background: #ffffff;
+		border-radius: 16rpx;
+		margin-top: 30rpx;
+	}
+
+	.content_box {
+		height: 145rpx;
+	}
+
+	.img image {
+		width: 50rpx;
+		height: 50rpx;
+		border-radius: 50%;
+	}
+
+	.comment_head {
+		width: 90%;
+		margin: 0 auto;
+		display: flex;
+	}
+
+	.comment_name {
+		color: #333333;
+		font-size: 22rpx;
+		margin-left: 10rpx;
+	}
+
+	.head_left {
+		flex: 1;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+		height: 65rpx;
+		margin-top: 20rpx;
+	}
+
+	.head_right {
+		flex: 1;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		color: #3390FF;
+		font-size: 20rpx;
+	}
+
+	.image {
+		margin-right: 11rpx;
+		margin-top: 8rpx;
+	}
+
+	.image image {
+		width: 22rpx;
+		height: 22rpx;
+	}
+
+	.comment_title {
+		width: 90%;
+		margin: 0 auto;
+		color: #333333;
+		font-size: 25rpx;
+	}
+
+	/* 不满意 */
+	.comment_tit1 {
+		color: #cccccc;
+	}
+</style>

+ 358 - 0
pages/riderMy/myComplain/myComplain.vue

@@ -0,0 +1,358 @@
+<template>
+	<view class="content">
+		<view class="complain_cont">
+			<view class="complain_tabs" v-show="!isShow">
+				<u-tabs :list="list" :is-scroll="true" name="illegal" :current="current" active-color="#FF7F00"
+					@change="change"></u-tabs>
+			</view>
+		</view>
+		<u-tabs :list="listTab" :is-scroll="false" inactive-color="#333333" active-color="#FF7F00" :current="currentIndex" @change="changeTab">
+		</u-tabs>
+		<view class="tabs_box dis">
+			<!-- 全部 -->
+			<view class="complain_box" v-for="(item,index) in orderlist" :key="index" @click="bindonline(item)">
+				<view class="complain_part1">
+					<view class="part1_left" v-if="item.illegal">{{item.illegal}}</view>
+					<view class="part1_left" v-if="item.wrongExplain">{{item.wrongExplain}}</view>
+					
+					
+					<view class="part1_right">扣款{{item.deductMoney}}元</view>
+				</view>
+				<view class="complain_part2" v-if="item.shipAddressDetail">
+					<image src="../../../static/image/black.png"></image>
+					<text>{{item.shipAddressDetail}}</text>
+				</view>
+				<view class="complain_part2" v-if="item.deilveryAddressDetail">
+					<image src="../../../static/image/orange.png"></image>
+					<text>{{item.deilveryAddressDetail}}</text>
+				</view>
+				<view class="complain_part2" v-if="item.shopAddressDetail">
+					<image src="../../../static/image/black.png"></image>
+					<text>{{item.shopAddressDetail}}</text>
+				</view>
+				<view class="complain_part2" v-if="item.userAddressDetail">
+					<image src="../../../static/image/orange.png"></image>
+					<text>{{item.userAddressDetail}}</text>
+				</view>
+				<view class="complain_part2" v-if="item.indentNumber">
+					<image src="../../../static/image/orange.png"></image>
+					<text>订单号:{{item.indentNumber}}</text>
+				</view>
+				<u-line color="#E6E6E6" />
+				<view class="complain_title">
+					<span v-if="item.complaintState=='1'">可申诉</span>
+					<span v-if="item.complaintState=='2'">申诉中</span>
+					<span v-if="item.complaintState=='3'">申诉未通过</span>
+					<span v-if="item.complaintState=='4'">申诉通过</span>
+				</view>
+			</view>
+
+			<view class="empty" v-if="orderlist.length == 0">
+				<view
+					style="display: block; width: 90%; margin: 0 auto; position: fixed;top: 35%;left: 0rpx;right: 0rpx;text-align: center;">
+					<image src="../../../static/image/empty.png" style="width: 300rpx;height: 300rpx;"></image>
+					<view style="color: #CCCCCC;">暂无内容</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				isShow: false,
+				page: 1,
+				limit: 10,
+				complaintType: null,
+				complaintState: '',
+				listTab: [{
+					name: '全部'
+				}, {
+					name: '可申诉'
+				}, {
+					name: '申诉中'
+				}, {
+					name: '申诉未通过'
+				}, {
+					name: '申诉通过'
+				}],
+				currentIndex: 0,
+				list: [{
+					id: '',
+					illegal: '全部'
+				}],
+				current: 0,
+				orderlist: [],
+				totalCount: 0,
+				illegalId: ''
+			}
+		},
+		mounted() {
+
+		},
+		onLoad() {
+			this.getTypeList()
+			this.bindorder()
+		},
+		methods: {
+			getTypeList() {
+				this.$Request.getT('/app/illegalType/selectIllegalTypeList').then(res => {
+					if (res.code == 0) {
+						this.list = [...this.list, ...res.data]
+					}
+				});
+			},
+			bindlist(index) {
+				console.log(index)
+
+				this.current = index;
+				this.isShow = !this.isShow
+			},
+			// 获取全部数据
+			bindorder() {
+				this.$Request.getT('/app/tbindent/findAllComplaint', {
+					page: this.page,
+					limit: this.limit,
+					complaintState: this.complaintState,
+					illegalId: this.illegalId
+				}).then(res => {
+					if (res.code == 0) {
+						this.totalCount = res.data.totalCount
+						if (this.page == 1) {
+							this.orderlist = res.data.list
+						} else {
+							this.orderlist = this.list_box.concat(res.data.list)
+						}
+					} else {
+						console.log('失败:', res.data)
+					}
+
+				});
+			},
+			change(index) {
+				console.log(index)
+				this.illegalId = this.list[index].id
+				this.orderlist = []
+				this.current = index;
+				this.currentIndex = 0
+				this.page = 1
+				
+				this.complaintState = ''
+				this.bindorder()
+			},
+			changeTab(index) {
+				this.orderlist = []
+				this.currentIndex = index
+				this.page = 1
+				if (index == 0) {
+					this.complaintState = ''
+				} else {
+					this.complaintState = index
+				}
+				this.bindorder()
+			},
+			bindonline(item) {
+				// if(item.complaintState == 1 || item.complaintState == 4) {
+				uni.navigateTo({
+					url: '/pages/riderMy/myComplain/online_complain/online_complain?indentNumber=' + item
+						.indentNumber + '&complaintId=' + item.complaintId
+				})
+				// }
+			},
+			bindshow() {
+				this.isShow = !this.isShow
+			},
+		},
+		// 上拉加载
+		onReachBottom: function() {
+			if (this.page < this.totalCount) {
+				this.page = this.page + 1;
+			} else {
+				uni.showToast({
+					title: '已经最后一页啦',
+					icon: 'none'
+				})
+			}
+			this.bindorder();
+		}
+	}
+</script>
+
+<style>
+	body {
+		background-color: #F5F5F5;
+	}
+
+	.empty {
+		width: 100%;
+		background: #ffffff;
+		/* #ifdef MP-WEIXIN */
+		height: 93vh;
+		/* #endif */
+		/* #ifndef MP-WEIXIN */
+		height: 80vh;
+		/* #endif */
+	}
+
+	.u-tab-item {
+		font-weight: 400 !important;
+		color: #000000 !important;
+		font-size: 24rpx !important;
+	}
+
+	.tabs_box {
+		/* display: none; */
+		/* position: absolute; */
+		/* top: 144rpx; */
+	}
+
+	.dis {
+		/* display: block; */
+		/* width: 100%; */
+		/* position: absolute; */
+		/* top: 100rpx; */
+	}
+
+	.content {
+		width: 100%;
+		position: relative;
+	}
+
+	.complain_cont {
+		width: 100%;
+		position: relative;
+		/* display: flex; */
+	}
+
+	.complain_tabs {
+		width: 100%;
+	}
+
+	.complain_btn {
+		width: 15%;
+		background: #FFFFFF;
+		box-shadow: -2rpx 1rpx 3rpx 0rpx rgba(39, 39, 39, 0.11);
+		height: 88rpx;
+		position: absolute;
+		top: 0rpx;
+		right: 0rpx;
+		z-index: 10075;
+	}
+
+	.btn {
+		color: #999999;
+		font-size: 25rpx;
+		letter-spacing: 2rpx;
+		text-align: center;
+		line-height: 88rpx;
+	}
+
+	.complain_none {
+		width: 15%;
+		background: #FFFFFF;
+		box-shadow: -2rpx 1rpx 3rpx 0rpx rgba(39, 39, 39, 0.11);
+		height: 88rpx;
+		position: absolute;
+		top: 88rpx;
+		right: 0rpx;
+
+	}
+
+	.popup_list {
+		width: 97%;
+		margin: 0 auto;
+		position: relative;
+		top: 90rpx;
+	}
+
+	.list_tabs {
+		width: 90%;
+		height: auto;
+		display: flex;
+		justify-content: start;
+		flex-wrap: wrap;
+	}
+
+	.tabs {
+		border: 1rpx solid #cccccc;
+		padding: 0rpx 25rpx;
+		line-height: 50rpx;
+		margin: 10rpx 10rpx;
+	}
+
+	/* 全部 */
+	.complain_box {
+		width: 90%;
+		margin: 0 auto;
+		/* height: 300rpx; */
+		background: #ffffff;
+		margin-top: 30rpx;
+		border-radius: 17rpx;
+	}
+
+	.complain_part1 {
+		width: 90%;
+		margin: 0 auto;
+		display: flex;
+		/* padding-top: 20rpx; */
+	}
+
+	.part1_left {
+		flex: 1;
+		font-size: 26rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+		height: 80rpx;
+		justify-content: left;
+		align-items: center;
+		display: flex;
+	}
+
+	.part1_right {
+		flex: 1;
+		color: #FF1B1B;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.complain_part2 {
+		width: 90%;
+		margin: 0 auto;
+		height: 50rpx;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+	}
+
+	.complain_part2 image {
+		width: 15rpx;
+		height: 15rpx;
+		margin-right: 20rpx;
+	}
+
+	.complain_part2 text {
+		color: #999999;
+		font-size: 24rpx;
+	}
+
+	.u-line {
+		border-bottom-width: 3px !important;
+		margin-top: 20rpx !important;
+	}
+
+	.complain_title {
+		width: 90%;
+		margin: 0 auto;
+		height: 80rpx;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		color: #FF2727;
+		font-size: 27rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+	}
+</style>

+ 195 - 0
pages/riderMy/myComplain/online_complain/online_complain.vue

@@ -0,0 +1,195 @@
+<template>
+	<view class="content">
+		<view class="online_box">
+			<view class="online_title">{{datas.illegal}}</view>
+			<u-line color="#E6E6E6" />
+			<view class="online" style="padding-top: 10rpx;">
+				<view class="online_tit">违规说明</view>
+				<view class="online_test">{{datas.wrongExplain}}</view>
+			</view>
+			<view class="online">
+				<view class="online_tit">关联订单</view>
+				<view class="online_text" v-if="datas.shipAddressDetail" >
+					<image src="../../../../static/image/black.png"></image>
+					<text>{{datas.shipAddressDetail}}</text>
+				</view>
+				<view class="online_text" v-if="datas.deilveryAddressDetail">
+					<image src="../../../../static/image/orange.png"></image>
+					<text>{{datas.deilveryAddressDetail}}</text>
+				</view>
+				
+				<view class="online_text" v-if="datas.shopAddressDetail">
+					<image src="../../../../static/image/black.png"></image>
+					<text>{{datas.shopAddressDetail}}</text>
+				</view>
+				<view class="online_text" v-if="datas.userAddressDetail">
+					<image src="../../../../static/image/orange.png"></image>
+					<text>{{datas.userAddressDetail}}</text>
+				</view>
+				<view class="online_text" v-if="datas.indentNumber" @click="copyOrder(datas.indentNumber)">
+					<image src="../../../../static/image/orange.png"></image>
+					<text>订单号:{{datas.indentNumber}}</text>
+				</view>
+			</view>
+			<view class="online">
+				<view class="online_tit">违规说明</view>
+				<view style="font-size: 24rpx;margin-top: 10rpx;">{{datas.resultHanding}}</view>
+				<view class="pnline_tip">如果配送中上报异常,审核成功后违规消除,不扣款</view>
+			</view>
+		</view>
+		<view class="btn" v-if="datas.complaintState=='1'" @click="bindonline">在线申诉</view>
+		<view class="btn btn1" v-if="datas.complaintState=='2'" >申诉中</view>
+		<view class="btn" v-if="datas.complaintState=='3'"@click="bindonline" >申诉未通过</view>
+		<view class="btn" v-if="datas.complaintState=='4'" >申诉通过</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				list: [{
+					id: 1,
+					img: '../../../../static/image/black.png',
+					name: '西安智能大厦'
+				}, {
+					id: 2,
+					img: '../../../../static/image/orange.png',
+					name: '用户地址隐藏',
+				}],
+				indentNumber:'',
+				datas:{},
+				complaintId: ''
+			}
+		},
+		onLoad(options) {
+			console.log(options)
+			this.indentNumber =options.indentNumber
+			this.complaintId = options.complaintId
+			// this.bindorder()
+		},
+		onShow() {
+			console.log('`````````````11111111')
+			if(this.indentNumber!=''){
+				this.bindorder()
+			}
+			
+		},
+		methods: {
+			copyOrder(value) {
+				uni.setClipboardData({
+					data: value, //要被复制的内容
+					success: () => { //复制成功的回调函数
+						uni.showToast({ //提示
+							title: '复制成功'
+						})
+					}
+				});
+			},
+			bindonline() {
+				uni.navigateTo({
+					url: '/pages/riderMy/myOnline/myOnline?indentNumber='+this.indentNumber+'&complaintType='+this.datas.complaintType+'&complaintId='+this.complaintId
+				})
+			},
+			// 获取数据
+			bindorder() {
+				this.$Request.getT('/app/tbindent/findComplaint',
+				{
+					indentNumber:this.indentNumber,
+					complaintId: this.complaintId
+				}).then(res => {
+					if(res.code==0){
+						this.datas = res.data
+						
+					}else{
+						console.log('失败:',res.data)
+					}
+					
+				});
+			},
+		}
+	}
+</script>
+
+<style>
+	body {
+		background-color: #F5F5F5;
+	}
+
+	.content {
+		width: 100%;
+	}
+
+	.online_box {
+		width: 90%;
+		margin: 0 auto;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		margin-top: 30rpx;
+	}
+
+	.online_title {
+		font-size: 28rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+		width: 90%;
+		margin: 0 auto;
+		line-height: 80rpx;
+	}
+
+	.online {
+		width: 90%;
+		margin: 0 auto;
+		padding-bottom: 34rpx;
+	}
+
+	.online_tit {
+		font-size: 27rpx;
+		letter-spacing: 2rpx;
+		font-weight: bolder;
+		line-height: 40rpx;
+
+	}
+
+	.online_test {
+		color: #333333;
+		font-size: 26rpx;
+		letter-spacing: 2rpx;
+		line-height: 38rpx;
+	}
+
+	.online_text {}
+
+	.online_text image {
+		width: 15rpx;
+		height: 15rpx;
+	}
+
+	.online_text text {
+		font-size: 21rpx;
+		color: #333333;
+		margin-left: 15rpx;
+		letter-spacing: 1rpx;
+	}
+
+	.pnline_tip {
+		color: #999999;
+		font-size: 25rpx;
+		line-height: 50rpx;
+	}
+
+	.btn {
+		width: 90%;
+		margin: 0 auto;
+		background: #FF7F00;
+		line-height: 90rpx;
+		text-align: center;
+		color: white;
+		border-radius: 15rpx;
+		margin-top: 20rpx;
+		font-size: 28rpx;
+	}
+	.btn1{
+		background: #ccc;
+	}
+</style>

+ 157 - 0
pages/riderMy/myOnline/myOnline.vue

@@ -0,0 +1,157 @@
+<template>
+	<view class="content">
+		<view class="online_box">
+			<view class="online">
+				<view class="tit">申诉理由</view>
+				<view class="text_box" style="margin-top: 20rpx;">
+					<u-input v-model="value" height="300" :type="type" :border="border" :clearable="false" placeholder="请描述问题发生的情况" />
+				</view>
+			</view>
+		</view>
+		<view class="btn" @click="bindorder">立即提交</view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				value: '',
+				type: 'textarea',
+				border: true,
+				indentNumber:'',
+				complaintType:'',
+				complaintName:'',
+				complaintId: '',
+			}
+		},
+		onLoad(options) {
+			console.log(options)
+			this.indentNumber =options.indentNumber
+			this.complaintId =options.complaintId
+		},
+		methods: {
+			bindorder(){
+				if(this.value==''){
+					uni.showToast({
+						title:'请填写申诉原因',
+						icon:'none'
+					})
+					return 
+				}
+				this.$Request.postJson('/app/tbindent/appealIndent',
+				{
+					indentNumber:this.indentNumber,
+					// appealType:this.complaintType,
+					appealMessage:this.value,
+					complaintId: this.complaintId
+				}).then(res => {
+					if(res.code==0){
+						uni.showToast({
+							title:'提交成功',
+							icon:'none'
+						})
+						setTimeout(function(){
+							uni.redirectTo({
+								url:'/pages/riderMy/myComplain/myComplain'
+							})
+						},1500)
+					}else{
+						console.log('失败:',res.data)
+					}
+					
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	body {
+		background-color: #F5F5F5;
+	}
+
+	.content {
+		width: 100%;
+	}
+
+	.online_box {
+		width: 90%;
+		margin: 0 auto;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		margin-top: 30rpx;
+		padding-top: 20rpx;
+		padding-bottom: 40rpx;
+	}
+
+	.part1 {
+		width: 90%;
+		margin: 0 auto;
+		height: 80rpx;
+		display: flex;
+		align-items: center;
+	}
+
+	.online_left {
+		flex: 1;
+		font-size: 27rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+	}
+
+	.online_right {
+		color: #999999;
+		font-size: 22rpx;
+		flex: 1;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.online_right image {
+		width: 12rpx;
+		height: 21rpx;
+		margin-left: 10rpx;
+	}
+
+	.online_title {
+		font-size: 28rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+		width: 90%;
+		margin: 0 auto;
+		line-height: 80rpx;
+	}
+
+	.online {
+		width: 90%;
+		margin: 0 auto;
+		padding-bottom: 34rpx;
+	}
+
+	.tit {
+		font-size: 27rpx;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+		margin-top: 19rpx;
+	}
+
+	.u-input--border {
+		border: none !important;
+		background: #F5F5F5 !important;
+	}
+
+	.btn {
+		width: 90%;
+		margin: 0 auto;
+		background: #FF7F00;
+		line-height: 90rpx;
+		text-align: center;
+		color: white;
+		border-radius: 15rpx;
+		margin-top: 20rpx;
+		font-size: 28rpx;
+	}
+</style>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1238 - 0
pages/riderMy/order.vue


+ 36 - 0
pages/riderMy/paotuixieyi.vue

@@ -0,0 +1,36 @@
+<template>
+	<view style="line-height: 26px;padding: 32upx;" class="home1">
+		<!-- <view v-html="tit"> </view> -->
+		<view style="font-size: 28upx;" v-html="content"></view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				tit: '',
+				content: ''
+			}
+		},
+		onLoad() {
+			this.getGuize();
+		},
+		methods: {
+			getGuize() {
+				this.$Request.getT('/app/userinfo/userAgreement').then(res => {
+					if (res.code == 0) {
+						this.content = res.data.value;
+						// this.tit = res.data.min
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	page {
+		background: #FFFFFF;
+	}
+</style>

+ 116 - 0
pages/riderMy/profit.vue

@@ -0,0 +1,116 @@
+<template>
+	<view>
+		<view class="content" v-if="list.length">
+			<view class="list_box" v-for="item in list" :key="item.id">
+				<view class="list_left">
+					<view class="name">{{item.title}}</view>
+					<view class="data">{{item.createTime}}</view>
+				</view>
+				<view class="list_right" style="color: red;" v-if="item.type==1">- {{item.money}}</view>
+				<view class="list_right" style="color: #33D442;" v-if="item.type==2">+ {{item.money}}</view>
+			</view>
+		</view>
+		<empty v-else ></empty>
+	</view>
+</template>
+
+<script>
+	import empty from '@/components/empty'
+	export default {
+		components: {
+			empty
+		},
+		data() {
+			return {
+				page:1,
+				limit:10,
+				totalCount:0,
+				list: []
+			}
+		},
+		onLoad() {
+			this.taskData()
+		},
+		methods: {
+			// 获取任务数据
+			taskData() {
+				let userId = this.$queue.getData('userId');
+				this.$Request.getT('/app/userMoney/profitDetailed',{
+					userId:userId,
+					page:this.page,
+					limit:this.limit
+				}).then(res => {
+					if(res.code==0){
+						if (this.page == 1) {
+							this.list = res.data.data.list
+						} else {
+							this.list = this.list_box.concat(res.data.data.list)
+						}
+						this.totalCount = res.data.data.totalCount
+					}
+					console.log('res',res) 
+					
+				});
+			},
+		},
+		// 上拉加载
+		onReachBottom: function() {
+			if(this.page<this.totalCount){
+				this.page = this.page + 1;
+			}else{
+				uni.showToast({
+					title:'已经最后一页啦',
+					icon:'none'
+				})
+			}
+			
+			this.taskData();
+		}
+	}
+</script>
+
+<style>
+	body {
+		background: #F5F5F5;
+	}
+
+	.content {
+		width: 100%;
+		background: #FFFFFF;
+		margin-top: 20rpx;
+		padding-bottom: 50rpx;
+		padding-top: 20rpx;
+	}
+
+	.list_box {
+		width: 90%;
+		margin: 0 auto;
+		display: flex;
+		line-height: 45rpx;
+		padding-top: 20rpx;
+	}
+
+	.list_left {
+		flex: 2;
+	}
+
+	.name {
+		font-size: 26rpx;
+		color: #333333;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+	}
+
+	.data {
+		color: #999999;
+		font-size: 24rpx;
+	}
+
+	.list_right {
+		flex: 1;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		font-size: 31rpx;
+	}
+</style>

+ 654 - 0
pages/riderMy/riderMy.vue

@@ -0,0 +1,654 @@
+<template>
+	<view class="bg">
+		<view class="content">
+			<!-- <u-navbar :is-back="true" :title="title"></u-navbar> -->
+			<!-- 顶部 -->
+			<view class="header">
+				
+				<!-- #ifdef MP-WEIXIN -->
+				<view class="head_image">
+					<button v-if="userId" open-type="chooseAvatar" @chooseavatar="onChooseAvatar" style="background-color: rgba(255, 255, 255, 0) !important;border: none !important;margin-top: 30rpx;">
+						<image :src="avatar?avatar:'../../static/logo.png'" style="border-radius: 50%;"></image>
+					</button>
+					<image v-else :src="avatar?avatar:'../../static/logo.png'" style="border-radius: 50%;"></image>
+				</view>
+				<!-- #endif -->
+				<!-- #ifndef MP-WEIXIN -->
+				<view class="head_image">
+					<image v-if="userId"  @click="upavatar()" :src="avatar?avatar:'../../static/logo.png'" style="border-radius: 50%;"></image>
+					<image v-else :src="avatar?avatar:'../../static/logo.png'" style="border-radius: 50%;"></image>
+				</view>
+				<!-- #endif -->
+				
+				<view class="head_name" v-if="userId">
+					<view class="name" @click="upNickName()">{{nickName}}</view>
+					<view v-if="XCXIsSelect !='否'">
+						<view class="approve" v-if="checkCertification=='0'">实名认证审核中</view>
+						<view class="approve" v-if="checkCertification=='1'">已实名</view>
+						<view class="approve" @click="bindapprove" v-if="checkCertification=='2'">实名认证未通过</view>
+						<view class="approve" @click="bindapprove" v-if="checkCertification==null">未实名认证</view>
+					</view>
+				</view>
+				<view class="head_name" v-if="!userId">
+					<button class="logins" @click="goLogin">登录</button>
+				</view>
+			</view>
+		</view>
+		<!-- 收入和订单 -->
+		<view style="border-radius: 24rpx;overflow: hidden;width: 93%;margin: 0 auto;background: #ffffff;"
+			v-if="XCXIsSelect !='否'">
+			<view class="user_box">
+				<view class="box">
+					<view class="user_name">
+						<u-section title="今日收入" :right="false" line-color="#FE3B27"></u-section>
+					</view>
+					<view class="user_price">{{indent.incomeday?indent.incomeday:0}} <text>元</text></view>
+					<view class="user_tit ">今日收入金额</view>
+				</view>
+				<view class="box">
+					<view class="user_name">
+						<u-section title="本月收入" :right="false" line-color="#009C66"></u-section>
+					</view>
+					<view class="user_price">{{indent.incomemonth?indent.incomemonth:0}} <text>元</text></view>
+					<view class="user_tit ">本月收入金额</view>
+				</view>
+			</view>
+			<view class="user_box">
+				<view class="box">
+					<view class="user_name">
+						<u-section title="累计收入" :right="false" line-color="#FE3B27"></u-section>
+					</view>
+					<view class="user_price">{{indent.incomesum?indent.incomesum:0}} <text>元</text></view>
+					<view class="user_tit ">累计收入金额</view>
+				</view>
+				<view class="box" @click="myOrders()">
+					<view class="user_name">
+						<u-section title="订单统计" :right="false" line-color="#009C66"></u-section>
+					</view>
+					<view class="user_price">{{indent.indentCount?indent.indentCount:0}} <text>单</text></view>
+					<view class="user_tit ">今日完成单量</view>
+				</view>
+			</view>
+		</view>
+		<!-- 我的列表 -->
+		<view class="mylist">
+			<view v-if="XCXIsSelect !='否'" class="list_box" v-for="(item,index) in mylist" :key="index"
+				@click="bindmy(item.name)">
+				<view class="list_left">
+					<view class="list_img">
+						<image :src="item.image" mode="scaleToFill"></image>
+					</view>
+					<view class="list_name">{{item.name}}</view>
+				</view>
+				<view class="list_right">
+					<view v-if="item.messageCount" class="bott">{{item.messageCount}}</view>
+					<image src="../../static/my/icon_go.png"></image>
+				</view>
+			</view>
+			<view v-if="XCXIsSelect =='否'" class="list_box" v-for="(item,index) in datalist" :key="index"
+				@click="bindmy(item.name)">
+				<view class="list_left">
+					<view class="list_img">
+						<image :src="item.image"></image>
+					</view>
+					<view class="list_name">{{item.name}}</view>
+				</view>
+				<view class="list_right">
+					<image src="../../static/my/icon_go.png"></image>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import configurl from '../../common/config.js'
+	export default {
+		onShareAppMessage(res) { //发送给朋友
+			return {
+				title: this.tuiguang,
+				path: '/pages/index/index',
+				imageUrl: this.tuiguangImg,
+			}
+		},
+		onShareTimeline(res) { //分享到朋友圈
+			return {
+				title: this.tuiguang,
+				path: '/pages/index/index',
+				imageUrl: this.tuiguangImg,
+			}
+		},
+		data() {
+			return {
+				tuiguang: '',
+				tuiguangImg: '',
+				show: false,
+				title: '我的',
+				mylist: [
+					{
+						id: 1,
+						name: '我的订单',
+						image: '../../static/rider/77.png'
+					},{
+						id: 2,
+						name: '资金账户',
+						image: '../../static/rider/22.png'
+					},
+					{
+						id: 3,
+						name: '我的评价',
+						image: '../../static/rider/33.png'
+					},
+					{
+						id: 4,
+						name: '违规申诉',
+						image: '../../static/rider/44.png'
+					},
+					{
+						id: 5,
+						name: '联系客服',
+						image: '../../static/my/8.png'
+					}, {
+						id: 6,
+						name: '消息中心',
+						image: '../../static/rider/liaotin.png',
+						messageCount:''
+					},
+					{
+						id: 7,
+						name: '意见反馈',
+						image: '../../static/rider/66.png'
+					},
+					
+					{
+						id: 9,
+						name: '系统设置',
+						image: '../../static/rider/55.png'
+					}
+				],
+				datalist: [{
+						id: 3,
+						name: '我的评价',
+						image: '../../static/rider/33.png'
+					},
+					{
+						id: 4,
+						name: '违规申诉',
+						image: '../../static/rider/44.png'
+					}, {
+						id: 5,
+						name: '消息中心',
+						image: '../../static/rider/liaotin.png'
+					},
+					// {
+					// 	id: 6,
+					// 	name: '用户协议',
+					// 	image: '../../static/rider/66.png'
+					// },
+					// {
+					// 	id: 7,
+					// 	name: '隐私政策',
+					// 	image: '../../static/rider/77.png'
+					// }, 
+					{
+						id: 9,
+						name: '系统设置',
+						image: '../../static/rider/55.png'
+					}
+				],
+				information: {}, //个人信息
+				daySr: '',
+				orders: '',
+				indent: {},
+				avatar: '',
+				nickName: '匿名',
+				checkCertification: '',
+				userId: '',
+				token: '',
+				XCXIsSelect: '否',
+				//messageCount: ''
+			}
+		},
+		onLoad() {
+			
+			this.$Request.getT('/app/common/type/331').then(res => {
+				if (res.code === 0) {
+					uni.setStorageSync('tuiguang', res.data.value)
+					this.tuiguang = res.data.value
+				}
+			});
+
+			this.$Request.getT('/app/common/type/332').then(res => {
+				if (res.code === 0) {
+					uni.setStorageSync('tuiguangImg', res.data.value)
+					this.tuiguangImg = res.data.value
+				}
+			});
+
+		},
+		onShow() {
+			this.mylist[5].messageCount = uni.getStorageSync('messageCount')
+			
+			this.XCXIsSelect = this.$queue.getData('XCXIsSelect');
+			this.token = this.$queue.getData('token');
+			this.userId = this.$queue.getData('userId');
+			if (this.token) {
+				this.shouru()
+				this.getUserInfo(this.userId);
+			} else {
+				// this.goLogin();
+			}
+
+
+		},
+		methods: {
+			//微信填写能力获取头像
+			onChooseAvatar(e){
+				console.log(e.detail.avatarUrl)
+				let that = this;
+				let token = uni.getStorageSync('token');
+				uni.showLoading({
+					title: '上传中...'
+				});
+				uni.uploadFile({
+					// url: config.APIHOST1 + '/alioss/upload', //仅为示例,非真实的接口地址
+					url: configurl.APIHOST2+'/sqx_fast/alioss/upload', //仅为示例,非真实的接口地址
+					filePath: e.detail.avatarUrl,
+					header: {
+						token: token
+					},
+					name: 'file',
+					success: uploadFileRes => {
+						let url = JSON.parse(uploadFileRes.data).data;
+						that.$Request.postJson(
+							'/app/user/updateUserImageUrl?avatar=' + url).then(
+							res => {
+								uni.hideLoading();
+								if (res.code === 0) {
+									that.$queue.showToast(
+										"更新成功");
+									that.getUserInfo();
+								}
+							});
+					},
+					fail:res=>{
+						uni.showToast({
+							title:res,
+							icon:'error'
+						})
+					}
+				});
+				
+			},
+			//修改用户名
+			upNickName(){
+				uni.navigateTo({
+					url:'./updateNickName'
+				})
+			},
+			//修改用户头像
+			upavatar() {
+				let that = this;
+				var url = null;
+				let userId = this.$queue.getData('userId');
+				uni.showActionSheet({
+					// itemList按钮的文字接受的是数组
+					itemList: ["查看头像", "从相册选择图片"],
+					success(e) {
+						var index = e.tapIndex
+						if (index === 0) {
+							// 用户点击了预览当前图片
+							// 可以自己实现当前头像链接的读取
+							let url = that.avatar;
+							let arr = []
+							arr.push(url)
+							uni.previewImage({
+								// 预览功能图片也必须是数组的
+								urls: arr
+							})
+						} else if (index === 1) {
+							uni.chooseImage({
+								count: 1, //默认9
+								sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+								sourceType: ['album'], //从相册选择
+								success: function(res) {
+									uni.showLoading({
+										title: '上传中...'
+									});
+									let token = uni.getStorageSync('token');
+									uni.uploadFile({
+										// url: config.APIHOST1 + '/alioss/upload', //仅为示例,非真实的接口地址
+										url: 'https://www.daweilinli.com/sqx_fast/alioss/upload', //仅为示例,非真实的接口地址
+										filePath: res.tempFilePaths[0],
+										header: {
+											token: token
+										},
+										name: 'file',
+										success: uploadFileRes => {
+											url = JSON.parse(uploadFileRes.data).data;
+											that.$Request.postJson(
+												'/app/user/updateUserImageUrl?avatar=' + url).then(
+												res => {
+													uni.hideLoading();
+													if (res.code === 0) {
+														that.$queue.showToast(
+															"更新成功");
+														that.getUserInfo();
+													}
+												});
+										}
+									});
+								}
+							});
+						}
+					}
+				})
+			},
+			// 查看今日收入
+			profit() {
+				if (!this.userId) {
+					uni.navigateTo({
+						url: '/pages/login/login'
+					})
+					return
+				}
+				uni.navigateTo({
+					url: '/pages/riderMy/profit'
+				})
+			},
+			// 查看订单统计
+			myOrders() {
+				if (!this.userId) {
+					uni.navigateTo({
+						url: '/pages/login/login'
+					})
+					return
+				}
+				uni.navigateTo({
+					url: '/pages/riderMy/order'
+				})
+			},
+			bindapprove() {
+				uni.navigateTo({
+					url: '/pages/riderMy/approve/approve'
+				})
+			},
+			bindmy(name) {
+				console.log(name)
+				let that = this
+
+				if (!that.token) {
+					uni.navigateTo({
+						url: '/pages/login/login'
+					})
+					return
+				}
+
+				if (name == '资金账户') {
+					uni.navigateTo({
+						url: '/pages/riderMy/myAccount/myAccount'
+					})
+				}else if (name == '我的订单') {
+					uni.navigateTo({
+						url: '/pages/riderMy/order'
+					})
+				}  else if (name == '我的评价') {
+					uni.navigateTo({
+						url: '/pages/riderMy/myComment/myComment'
+					})
+				} else if (name == '联系客服') {
+					uni.navigateTo({
+						url: '/pages/riderMy/kefu/chat'
+					})
+				} else if (name == '用户协议') {
+					uni.navigateTo({
+						url: '/pages/riderMy/xieyi'
+					})
+				} else if (name == '隐私政策') {
+					uni.navigateTo({
+						url: '/pages/riderMy/mimi'
+					})
+				} else if (name == '违规申诉') {
+					uni.navigateTo({
+						url: '/pages/riderMy/myComplain/myComplain'
+					})
+				} else if (name == '培训中心') {
+					uni.navigateTo({
+						url: '/pages/riderMy/trainingList'
+					})
+				} else if (name == '消息中心') {
+					uni.navigateTo({
+						url: '/pages/riderMy/kefu/liaotian'
+					})
+				} else if (name == '系统设置') {
+					uni.navigateTo({
+						url: '/pages/riderMy/set/set'
+					})
+				} else if (name == '意见反馈') {
+					uni.navigateTo({
+						url: '/pages/riderMy/set/yijian'
+					})
+				}
+			},
+			//检测是否登录
+			checkLogin() {
+
+			},
+			// 获取个人信息
+			getUserInfo(userId) {
+				this.$Request.getT("/app/tbindent/findUserInfoById").then(res => {
+					if (res.code == 0) {
+						this.$nextTick(function() {
+							this.avatar = res.data.avatar ? res.data.avatar : '../../static/logo.png'
+							this.nickName = res.data.nickName
+							uni.setStorageSync('userName',res.data.userName)
+							this.checkCertification = res.data.checkCertification
+							console.log(this.checkCertification, '实名认证')
+							this.userId = res.data.userId
+						})
+					} else {
+						this.$queue.logout();
+						uni.showModal({
+							showCancel: false,
+							title: '登录失败',
+							content: res.msg,
+						});
+					}
+				});
+			},
+			// 今日收入、订单量
+			shouru() {
+				this.$Request.getT('/app/userinfo/findIncome').then(res => {
+					if (res.code == 0) {
+						// this.daySr = res.data.income
+						// this.orders = res.data.indentCount
+						this.indent = res.data
+					}
+					console.log('res', res)
+
+				});
+			},
+			// 跳转去登录
+			goLogin() {
+				// this.$queue.setData('href', '/pages/my/index');
+				uni.navigateTo({
+					url: '/pages/login/login'
+				});
+			},
+		}
+	}
+</script>
+
+<style>
+	button::after {
+		border: none;
+		/* background-color: none; */
+	}
+	.u-icon__icon {
+		font-size: 35rpx !important;
+		font-weight: bold !important;
+	}
+	.u-title {
+		color: #000000 !important;
+	}
+
+	.u-navbar-fixed {
+		background: none !important;
+	}
+
+	body {
+		background: #F5F5F5;
+	}
+
+	.bg {}
+
+	.logins {
+		border: none;
+		background: #F8501F;
+		color: #fff;
+		width: 200rpx;
+		margin: 70rpx 20rpx;
+		height: 70rpx;
+		line-height: 70rpx;
+	}
+
+	.content {
+		background: linear-gradient(0deg, #F5F5F5 0%, #fed9ba 100%);
+		width: 100%;
+	}
+
+	/* 顶部 */
+	.header {
+		width: 100%;
+		height: 200rpx;
+		display: flex;
+	}
+
+	.head_image {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.head_image image {
+		width: 90rpx;
+		height: 90rpx;
+	}
+
+	.head_name {
+		flex: 4;
+		position: relative;
+		margin-left: -14rpx;
+	}
+
+	.name {
+		position: absolute;
+		top: 65rpx;
+	}
+
+	.approve {
+		position: absolute;
+		top: 100rpx;
+		font-size: 24rpx;
+		color: #999999;
+	}
+
+	/* 用户信息 */
+	.user_box {
+		display: flex;
+		height: 210rpx;
+
+		position: relative;
+		top: -15rpx;
+		padding: 0 20rpx;
+	}
+
+	.box {
+		flex: 1;
+		/* margin-left: 40rpx; */
+		margin-top: 40rpx;
+	}
+
+	.user_price {
+		font-size: 44rpx;
+		margin-top: 10rpx;
+	}
+
+	.user_price text {
+		font-size: 21rpx;
+		margin-left: 10rpx;
+	}
+
+	.user_tit {
+		color: #B3B3B3;
+		font-size: 21rpx;
+		margin-top: 10rpx;
+	}
+
+	.u-section__title {
+		font-weight: 500 !important;
+		color: #333333 !important;
+		font-size: 14px !important;
+		padding-left: 10px;
+	}
+
+	/* 我的列表 */
+	.mylist {
+		width: 93%;
+		margin: 0 auto;
+		background-color: #FFFFFF;
+		margin-top: 10rpx;
+		border-radius: 23rpx;
+	}
+
+	.list_box {
+		width: 90%;
+		margin: 0 auto;
+		display: flex;
+		height: 95rpx;
+	}
+
+	.list_left {
+		flex: 1;
+		display: flex;
+		justify-content: left;
+		align-items: center;
+	}
+
+	.list_img {
+		margin-right: 10rpx;
+		margin-top: 10rpx;
+	}
+
+	.list_img image {
+		width: 32rpx;
+		height: 32rpx;
+	}
+
+	.list_name {
+		font-size: 25rpx;
+		letter-spacing: 2rpx;
+	}
+
+	.list_right {
+		flex: 1;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.list_right image {
+		width: 12rpx;
+		height: 20rpx;
+	}
+
+	.bott {
+		background: red;
+		color: #ffffff;
+		padding: 5rpx 10rpx;
+		border-radius: 60%;
+		font-size: 23rpx;
+		margin-right: 15rpx;
+	}
+</style>

+ 31 - 0
pages/riderMy/set/about.vue

@@ -0,0 +1,31 @@
+<template>
+	<view style="font-size: 14px;line-height: 26px;padding: 32upx;" class="home1">
+		<view style="font-size: 28upx;" v-html="content" ></view>
+	</view>
+</template>
+
+<script>
+	export default {
+	    data() {
+	        return {
+				content:''
+			}
+	    },
+		onLoad() {
+			this.getGuize();
+		},
+	    methods: {
+			getGuize(){
+				this.$Request.getT('/app/common/type/233').then(res =>{
+					if(res.code === 0){
+						this.content = res.data.value;
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	
+</style>

+ 44 - 0
pages/riderMy/set/mimi.vue

@@ -0,0 +1,44 @@
+<template>
+	<view style="line-height: 26px;padding: 32upx;" class="home1">
+		<!-- <view v-html="tit"> </view> -->
+		<view style="font-size: 28upx;" v-html="content"></view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				tit: '',
+				content: ''
+			}
+		},
+		onLoad() {
+			// this.getGuize();
+			// 隐私政策
+			this.$Request.getT('/app/common/type/237').then(res => { //用户完成成功
+				if (res.code == 0) {
+					if (res.data && res.data.value) {
+						this.content = res.data.value;
+					}
+				}
+			})
+		},
+		methods: {
+			getGuize() {
+				this.$Request.getT('/app/userinfo/privacyPolicy').then(res => {
+					if (res.code == 0) {
+						this.content = res.data.value;
+						// this.tit = res.data.min
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	page {
+		/* background: #1c1b20; */
+	}
+</style>

+ 121 - 0
pages/riderMy/set/set.vue

@@ -0,0 +1,121 @@
+<template>
+	<view class=" padding-lr">
+		<!-- <view class="flex  padding-tb" @click="goNav('/pages/public/pwd')">
+			<view class="flex-sub text-df" style="line-height: 50upx;">修改密码</view>
+			<image src="../../../static/image/go.png" style="line-height: 50upx;width: 15rpx;height: 30rpx;">
+			</image>
+		</view> -->
+		<view class="flex  padding-tb" @click="goNav('/pages/riderMy/trainingList')">
+			<view class="flex-sub text-df" style="line-height: 50upx;">帮助中心</view>
+			<image src="../../../static/image/go.png" style="line-height: 50upx;width: 15rpx;height: 30rpx;">
+			</image>
+		</view>
+		<view class="flex  padding-tb" @click="goNav('/pages/riderMy/set/xieyi')">
+			<view class="flex-sub text-df" style="line-height: 50upx;">用户协议</view>
+			<image src="../../../static/image/go.png" style="line-height: 50upx;width: 15rpx;height: 30rpx;">
+			</image>
+		</view>
+		<view class="flex  padding-tb" @click="goNav('/pages/riderMy/set/mimi')">
+			<view class="flex-sub text-df" style="line-height: 50upx;">隐私政策</view>
+			<image src="../../../static/image/go.png" style="line-height: 50upx;width: 15rpx;height: 30rpx;">
+			</image>
+		</view>
+		<view class="flex  padding-tb" @click="goNav('/pages/riderMy/set/about')">
+			<view class="flex-sub text-df" style="line-height: 50upx;">关于我们</view>
+			<image src="../../../static/image/go.png" style="line-height: 50upx;width: 15rpx;height: 30rpx;">
+			</image>
+		</view>
+		<view class="btn" @click="TuiLogin">退出登录</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				userId: ""
+			}
+		},
+		onLoad() {
+			this.userId = uni.getStorageSync('userId')
+		},
+		methods: {
+			goNav(e) {
+				uni.navigateTo({
+					url: e
+				})
+			},
+			//退出登录
+			TuiLogin() {
+				let that = this
+
+				if (that.userId) {
+					uni.showModal({
+						title: '提示',
+						content: '确认退出登录吗?',
+						success: function(res) {
+							if (res.confirm) {
+								uni.removeStorageSync('userId')
+								uni.removeStorageSync('token')
+								uni.removeStorageSync('avatar')
+								uni.removeStorageSync('nickName')
+								uni.removeStorageSync('phone')
+								uni.removeStorageSync('invitationCode')
+								uni.removeStorageSync('inviterCode')
+								uni.removeStorageSync('platform')
+								uni.removeStorageSync('sex')
+								uni.removeStorageSync('zhiFuBao')
+								uni.removeStorageSync('zhiFuBaoName')
+								uni.removeStorageSync('checkCertification')
+
+								// uni.navigateBack()
+								uni.redirectTo({
+									url:'/pages/index/index'
+								})
+							} else if (res.cancel) {
+								console.log('用户点击取消');
+							}
+						}
+					});
+				} else {
+					uni.showModal({
+						title: '提示',
+						content: '您还未登录,请先登录',
+						success: function(res) {
+							if (res.confirm) {
+								console.log('用户点击确定');
+								uni.navigateTo({
+									url: '/pages/my/loginphone'
+								})
+							} else if (res.cancel) {
+								console.log('用户点击取消');
+							}
+						}
+					})
+				}
+
+
+			},
+		}
+
+	}
+</script>
+
+<style>
+	page {
+		background: #FFFFFF;
+	}
+
+	.btn {
+		width: 100%;
+		height: 80upx;
+		background: #FF6A04;
+		color: #FFFFFF;
+		border-radius: 6upx;
+		text-align: center;
+		line-height: 80upx;
+		margin-top: 40upx;
+		font-size: 34upx;
+		/* color: #fff; */
+	}
+</style>

+ 44 - 0
pages/riderMy/set/xieyi.vue

@@ -0,0 +1,44 @@
+<template>
+	<view style="line-height: 26px;padding: 32upx;" class="home1">
+		<!-- <view v-html="tit"> </view> -->
+		<view style="font-size: 28upx;" v-html="content"></view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				tit: '',
+				content: ''
+			}
+		},
+		onLoad() {
+			// this.getGuize();
+			// 用户协议
+			this.$Request.getT('/app/common/type/236').then(res => { //用户完成成功
+				if (res.code == 0) {
+					if (res.data && res.data.value) {
+						this.content = res.data.value;
+					}
+				}
+			})
+		},
+		methods: {
+			getGuize() {
+				this.$Request.getT('/app/userinfo/userAgreement').then(res => {
+					if (res.code == 0) {
+						this.content = res.data.value;
+						// this.tit = res.data.min
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+	page {
+		background: #FFFFFF;
+	}
+</style>

+ 194 - 0
pages/riderMy/set/yijian.vue

@@ -0,0 +1,194 @@
+<template>
+	<view class="page" style="background-color: #ffffff;">
+		<view class="feedback-title">
+			<text>问题和意见</text>
+			<text @tap="chooseMsg">快速键入</text>
+		</view>
+		<view class="feedback-body"><textarea placeholder="请详细描述你的问题和意见..." v-model="sendDate.content"
+				class="feedback-textare" /></view>
+		<view v-if="XCXIsSelect !='否'">
+			<view class="feedback-title"><text>QQ/邮箱</text></view>
+			<view class="feedback-body"><input class="feedback-input" v-model="sendDate.contact"
+					placeholder="方便我们联系你 " /></view>
+
+		</view>
+		<button style="" class="feedback-submit" @tap="send">提交</button>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				msgContents: ['界面显示错乱', '启动缓慢,卡出翔了', 'UI无法直视,丑哭了', '偶发性崩溃'],
+				stars: [1, 2, 3, 4, 5],
+				imageList: [],
+				sendDate: {
+					score: 5,
+					content: '',
+					contact: ''
+				},
+				XCXIsSelect: '否',
+			};
+		},
+		onLoad() {
+			this.XCXIsSelect = this.$queue.getData('XCXIsSelect');
+			// let deviceInfo = {
+			// 	appid: plus.runtime.appid,
+			// 	imei: plus.device.imei, //设备标识
+			// 	p: plus.os.name === 'Android' ? 'a' : 'i', //平台类型,i表示iOS平台,a表示Android平台。
+			// 	md: plus.device.model, //设备型号
+			// 	app_version: plus.runtime.version,
+			// 	plus_version: plus.runtime.innerVersion, //基座版本号
+			// 	os: plus.os.version,
+			// 	net: '' + plus.networkinfo.getCurrentType()
+			// };
+			// this.sendDate = Object.assign(deviceInfo, this.sendDate);
+		},
+		methods: {
+			close(e) {
+				this.imageList.splice(e, 1);
+			},
+			chooseMsg() {
+				//快速输入
+				uni.showActionSheet({
+					itemList: this.msgContents,
+					success: res => {
+						this.sendDate.content = this.msgContents[res.tapIndex];
+					}
+				});
+			},
+			chooseImg() {
+				//选择图片
+				uni.chooseImage({
+					sourceType: ['camera', 'album'],
+					sizeType: 'compressed',
+					count: 8 - this.imageList.length,
+					success: res => {
+						this.imageList = this.imageList.concat(res.tempFilePaths);
+					}
+				});
+			},
+			chooseStar(e) {
+				//点击评星
+				this.sendDate.score = e;
+			},
+			previewImage() {
+				//预览图片
+				uni.previewImage({
+					urls: this.imageList
+				});
+			},
+			send() {
+				//发送反馈
+				console.log(JSON.stringify(this.sendDate));
+
+				if (!this.sendDate.content) {
+					uni.showToast({
+						icon: 'none',
+						title: '请输入反馈内容'
+					});
+					return;
+				}
+				if (!this.sendDate.contact) {
+					uni.showToast({
+						icon: 'none',
+						title: '请填写QQ或邮箱'
+					});
+					return;
+				}
+				this.$queue.showLoading('加载中...');
+				this.$Request.postJson('/app/shop/userFeedback', {
+					shopId: uni.getStorageSync("shopId"),
+					title: this.sendDate.contact,
+					content: JSON.stringify(this.sendDate),
+					// state: 2
+				}).then(res => {
+					if (res.code === 0) {
+						uni.showToast({
+							title: '投诉成功'
+						});
+						setTimeout(function() {
+							uni.navigateBack();
+						}, 1000);
+					} else {
+						uni.hideLoading();
+						uni.showModal({
+							showCancel: false,
+							title: '投诉失败',
+							content: res.msg
+						});
+					}
+				});
+			}
+		}
+	};
+</script>
+
+<style>
+	@font-face {
+		font-family: uniicons;
+		font-weight: normal;
+		font-style: normal;
+		src: url('https://img-cdn-qiniu.dcloud.net.cn/fonts/uni.ttf') format('truetype');
+	}
+
+	page {
+		background-color: #F5F5F5 !important;
+	}
+
+	view {
+		font-size: 28upx;
+	}
+
+
+	/*问题反馈*/
+	.feedback-title {
+		display: flex;
+		flex-direction: row;
+		justify-content: space-between;
+		align-items: center;
+		padding: 20upx;
+		color: #8f8f94;
+		font-size: 28upx;
+	}
+
+	.feedback-star-view.feedback-title {
+		justify-content: flex-start;
+		margin: 0;
+	}
+
+	.feedback-body {
+		font-size: 32upx;
+		padding: 16upx;
+		margin: 16upx;
+		border-radius: 16upx;
+		background: #FFFFFF;
+		/* color: #FFF; */
+	}
+
+	.feedback-textare {
+		height: 200upx;
+		font-size: 34upx;
+		line-height: 50upx;
+		width: 100%;
+		box-sizing: border-box;
+		padding: 20upx 30upx 0;
+
+	}
+
+	.feedback-input {
+		font-size: 32upx;
+		height: 60upx;
+		/* padding: 15upx 20upx; */
+		line-height: 60upx;
+	}
+
+
+	.feedback-submit {
+		background: #FFCC00;
+		/* color: #ffffff; */
+		margin: 20upx;
+		margin-top: 32upx;
+	}
+</style>

+ 77 - 0
pages/riderMy/trainingCenter.vue

@@ -0,0 +1,77 @@
+<template>
+	<view style="line-height: 26px;padding: 32upx;" class="home1">
+		<!-- <view v-html="tit"> </view> -->
+		<!-- <view style="font-size: 28upx;" v-html="content"></view> -->
+		<u-parse :html="content"></u-parse>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				list: [],
+				content: ''
+			}
+		},
+		onLoad(e) {
+			this.taskData(e.id)
+		},
+		methods: {
+			// 获取任务数据
+			taskData(e) {
+				this.$Request.getT('/app/userinfo/TrainingCenter?id='+e).then(res => {
+					if(res.code==0){
+						this.content = res.data.message
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style>
+	page {
+		background: #FFFFFF;
+	}
+
+	.content {
+		width: 100%;
+		background: #FFFFFF;
+		margin-top: 20rpx;
+		padding-bottom: 50rpx;
+		padding-top: 20rpx;
+	}
+
+	.list_box {
+		width: 90%;
+		margin: 0 auto;
+		display: flex;
+		line-height: 45rpx;
+		padding-top: 20rpx;
+	}
+
+	.list_left {
+		flex: 2;
+	}
+
+	.name {
+		font-size: 26rpx;
+		color: #333333;
+		font-weight: bold;
+		letter-spacing: 2rpx;
+	}
+
+	.data {
+		color: #999999;
+		font-size: 24rpx;
+	}
+
+	/* .list_right {
+		flex: 1;
+		display: flex;
+		justify-content: flex-end;
+		align-items: center;
+		font-size: 31rpx;
+	} */
+</style>

+ 48 - 0
pages/riderMy/trainingList.vue

@@ -0,0 +1,48 @@
+<template>
+	<view>
+		<view style="margin-top: 4upx;" class="bg-white flex justify-between align-center padding" v-for="(item,index) in dataList" :key='index' @click="goDet(item)" >
+			<view class="text-lg">{{index+1}}.{{item.title}}</view>
+			<image src="../../static/image/go.png" style="width: 20rpx;height: 34rpx;" mode="aspectFill"></image>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				page: 1,
+				limit: 10,
+				dataList: []
+			}
+		},
+		onLoad() {
+			this.getDataList()
+		},
+		methods: {
+			getDataList() {
+				let data = {
+					page: this.page,
+					limit: this.limit,
+					type:2
+				}
+				this.$Request.getT("/app/userinfo/trainingCenterList",data).then(res => {
+					this.dataList = res.data.list
+				})
+			},
+			goDet(e) {
+				uni.navigateTo({
+					url: '/pages/riderMy/trainingCenter?id='+e.trainingId
+				})
+			}
+		},
+		onReachBottom: function() {
+		   this.page = this.page + 1;
+		   this.getDataList();
+		},
+	}
+</script>
+
+<style>
+</style>

+ 197 - 0
pages/riderMy/updateNickName.vue

@@ -0,0 +1,197 @@
+<template>
+	<view class="container">
+		<view class="wrapper">
+			<view class="input-content">
+				<view class="cu-form-group" style="border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
+					<text class="title">原昵称</text>
+					<input type="text" :value="oldnickName" placeholder-class="input-empty" disabled="true" />
+				</view>
+				<view class="cu-form-group" style="border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
+					<text class="title">新昵称</text>
+					<input type="nickname" v-model="nickName" placeholder="请设置新昵称" placeholder-class="input-empty" maxlength="20"
+					 minlength="6" />
+				</view>
+			</view>
+			<button class="confirm-btn" @click="updatNickName">修改昵称</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				nickName: '',
+				oldnickName: ''
+			}
+		},
+		onLoad() {
+			this.oldnickName = this.$queue.getData('userName');
+		},
+		methods: {
+			updatNickName() {
+				var patrn = /[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、 ]/im;
+				if (patrn.test(this.nickName)) { // 如果包含特殊字符返回false
+					this.$queue.showToast('包含特殊字符,请重新输入');
+					return;
+				}
+				uni.showLoading({
+					title: '提交中...'
+				});
+				let userId = this.$queue.getData('userId');
+				let data = {
+					userName:this.nickName
+				}
+				this.$Request.postT('/app/user/updateUserName',data).then(res => {
+					uni.hideLoading();
+					if (res.code === 0) {
+						this.$queue.showToast("更新成功");
+						setTimeout(() => {
+							uni.navigateBack();
+						}, 500);
+					}
+				});
+			},
+		},
+	}
+</script>
+
+<style lang='scss'>
+	page {
+		background: #fff;
+	}
+
+	.send-msg {
+		border-radius: 30px;
+		color: white;
+		height: 30px;
+		font-size: 14px;
+		line-height: 30px;
+		background: #e10a07;
+	}
+
+	.container {
+		padding-top: 32upx;
+		position: relative;
+		width: 100%;
+		height: 100%;
+		overflow: hidden;
+		background: #fff;
+	}
+
+	.wrapper {
+		position: relative;
+		z-index: 90;
+		background: #fff;
+		padding-bottom: 20px;
+	}
+
+	.right-top-sign {
+		position: absolute;
+		top: 40px;
+		right: -15px;
+		z-index: 95;
+
+		&:before,
+		&:after {
+			display: block;
+			content: "";
+			width: 20px;
+			height: 40px;
+			background: -moz-linear-gradient(left, #fa4dbe 0, #fbaa58 100%);
+			background: -webkit-gradient(linear,
+				left top,
+				left right,
+				color-stop(0, #fa4dbe),
+				color-stop(100%, #fbaa58));
+			background: -webkit-linear-gradient(left, #fa4dbe 0, #fbaa58 100%);
+			background: -o-linear-gradient(left, #fa4dbe 0, #fbaa58 100%);
+			background: -ms-linear-gradient(left, #fa4dbe 0, #fbaa58 100%);
+			background: linear-gradient(to left, #fa4dbe 0, #fbaa58 100%);
+		}
+
+		&:before {
+			transform: rotate(50deg);
+			border-radius: 0 50px 0 0;
+		}
+
+		&:after {
+			position: absolute;
+			right: -198px;
+			top: 0;
+			transform: rotate(-50deg);
+			border-radius: 50px 0 0 0;
+			/* background: pink; */
+		}
+	}
+
+	.left-bottom-sign {
+		position: absolute;
+		left: -270px;
+		bottom: -320px;
+		/*border: 100upx solid #d0d1fd;*/
+		border-radius: 50%;
+		padding: 90px;
+	}
+
+
+	.welcome {
+		position: relative;
+		left: 30px;
+		top: -55px;
+		font-size: 28px;
+		color: #555;
+		text-shadow: 1px 0px 1px rgba(0, 0, 0, .3);
+	}
+
+	.input-content {
+		padding: 0 20px;
+	}
+
+	.confirm-btn {
+		width: 300px;
+		height: 42px;
+		line-height: 42px;
+		border-radius: 30px;
+		margin-top: 40px;
+		background: #FF7F00;
+		color: #fff;
+		
+
+		&:after {
+			border-radius: 60px;
+		}
+	}
+
+	.confirm-btn1 {
+		width: 300px;
+		height: 42px;
+		line-height: 42px;
+		border-radius: 30px;
+		margin-top: 40px;
+		background: whitesmoke;
+		color: grey;
+		
+
+		&:after {
+			border-radius: 60px;
+		}
+	}
+
+	.forget-section {
+		text-align: center;
+		margin-top: 40px;
+	}
+
+	.register-section {
+		position: fixed;
+		left: 0;
+		bottom: 30px;
+		width: 100%;
+		text-align: center;
+
+		text {
+			margin-left: 10px;
+		}
+	}
+</style>

BIN
static/image/add.png


BIN
static/image/black.png


BIN
static/image/chats.png


BIN
static/image/close.png


BIN
static/image/empty.png


BIN
static/image/erweima.png


BIN
static/image/go.png


BIN
static/image/icon_add.png


BIN
static/image/icon_address.png


BIN
static/image/icon_back.png


BIN
static/image/icon_f.png


BIN
static/image/icon_name.png


BIN
static/image/icon_number.png


BIN
static/image/icon_qh.png


BIN
static/image/icon_s.png


BIN
static/image/location.png


BIN
static/image/orange.png


BIN
static/image/order.png


BIN
static/image/valua.png


BIN
static/logo.png


BIN
static/my/8.png


BIN
static/my/QQ.png


BIN
static/my/icon_00.png


BIN
static/my/icon_11.png


BIN
static/my/icon_22.png


BIN
static/my/icon_33.png


BIN
static/my/icon_44.png


BIN
static/my/icon_55.png


BIN
static/my/icon_66.png


BIN
static/my/icon_go.png


BIN
static/my/kf.png


BIN
static/my/phone.png


BIN
static/my/photo.png


BIN
static/my/weixin.png


BIN
static/my/wx.png


+ 0 - 0
static/my/zhifubao.png


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio