lhl 7 ماه پیش
والد
کامیت
56dbcd20a1
53فایلهای تغییر یافته به همراه3956 افزوده شده و 637 حذف شده
  1. 40 0
      androidPrivacy.json
  2. 23 0
      api/index.js
  3. 24 0
      api/order.js
  4. 26 1
      api/set.js
  5. 68 0
      api/user.js
  6. BIN
      baseInfo/logo.png
  7. BIN
      baseInfo/logo1.png
  8. BIN
      baseInfo/xd.keystore
  9. 2 0
      baseInfo/zs.txt
  10. 326 0
      components/tpf-time-range/tpf-time-range.vue
  11. 243 0
      components/yk-authpup/yk-authpup.vue
  12. 8 9
      manifest.json
  13. 16 0
      package.json
  14. 92 33
      pages.json
  15. 66 0
      pages/index/down.vue
  16. 28 23
      pages/index/index.vue
  17. 50 35
      pages/index/yuyue.vue
  18. 7 2
      pages/money/pay.vue
  19. 81 8
      pages/order/createOrder.vue
  20. 191 26
      pages/order/orderAdmin.vue
  21. 9 1
      pages/order/orderDetail.vue
  22. 191 0
      pages/order/orderDetails.vue
  23. 82 29
      pages/order/orders.vue
  24. 268 0
      pages/order/sh.vue
  25. 265 0
      pages/order/sht.vue
  26. 237 0
      pages/order/upPj.vue
  27. 380 0
      pages/order/wuyouAdmin.vue
  28. 5 12
      pages/product/product.vue
  29. 3 3
      pages/public/login.vue
  30. 36 136
      pages/public/privacyAgreement.vue
  31. 16 6
      pages/public/register.vue
  32. 9 4
      pages/set/address.vue
  33. 416 180
      pages/set/addressManage.vue
  34. 4 2
      pages/set/set.vue
  35. 53 17
      pages/set/userinfo.vue
  36. 216 0
      pages/set/zxzh.vue
  37. 33 24
      pages/user/admin.vue
  38. 4 3
      pages/user/award.vue
  39. 25 1
      pages/user/shareQrCode.vue
  40. 3 2
      pages/user/sqdl.vue
  41. 64 66
      pages/user/team.vue
  42. 36 10
      pages/user/user.vue
  43. 1 1
      pages/user/withdrawal.vue
  44. BIN
      static/icon/logo1.png
  45. BIN
      static/icon/logoo.png
  46. 4 2
      store/index.js
  47. 25 0
      store/model/address.js
  48. 6 0
      uni_modules/smh-time-range/changelog.md
  49. 152 0
      uni_modules/smh-time-range/components/smh-time-range/smh-time-range.vue
  50. 79 0
      uni_modules/smh-time-range/package.json
  51. 40 0
      uni_modules/smh-time-range/readme.md
  52. 1 1
      utils/loginUtils.js
  53. 2 0
      utils/newRequest.js

+ 40 - 0
androidPrivacy.json

@@ -0,0 +1,40 @@
+{
+  "version": "1",
+  "prompt": "template",
+  "title": "用户协议和隐私政策",
+  "message": "  请你务必审慎阅读、充分理解“用户协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://hdxy.zjxiyi888.cn/index/#/pages/public/privacyAgreement?type=1\">《用户协议》</a>和<a href=\"https://hdxy.zjxiyi888.cn/index/#/pages/public/privacyAgreement\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
+  "buttonAccept": "同意并接受",
+  "buttonRefuse": "暂不同意",
+  "hrefLoader": "system",
+  "backToExit":"false",
+  "second": {
+    "title": "确认提示",
+    "message": "  进入应用前,你需先同意<a href=\"https://hdxy.zjxiyi888.cn/index/#/pages/public/privacyAgreement?type=1\">《用户协议》</a>和<a href=\"https://hdxy.zjxiyi888.cn/index/#/pages/public/privacyAgreement\">《隐私政策》</a>,否则将退出应用。",
+    "buttonAccept": "同意并继续",
+    "buttonRefuse": "退出应用"
+  },
+  "disagreeMode":{
+    "support": false,
+    "loadNativePlugins": false,
+    "visitorEntry": false,
+    "showAlways": false
+  },
+  "styles": {
+    "backgroundColor": "#ffffff",
+    "borderRadius":"5px",
+    "title": {
+      "color": "#333333"
+    },
+    "buttonAccept": {
+      "color": "#000000"
+    },
+    "buttonRefuse": {
+      "color": "#999999"
+    },
+    "buttonVisitor": {
+      "color": "#00ffff"
+    }
+  }
+}
+
+

+ 23 - 0
api/index.js

@@ -50,3 +50,26 @@ export function orderVerific(data) {
 		data
 	});
 }
+
+export function getVersion(data) {
+	return request({
+		url: '/api/version',
+		method: 'get',
+		data
+	});
+}
+
+export function getArtList(data,id) {
+	return request({
+		url: '/api/article/list/' + id,
+		method: 'get',
+		data
+	});
+}
+
+export function getDetail(id) {
+	return request({
+		url: '/api/article/details/' + id,
+		method: 'get'
+	});
+}

+ 24 - 0
api/order.js

@@ -150,4 +150,28 @@ export function storeList(data) {
 		method: 'get',
 		data
 	});
+}
+
+export function upPj(data) {
+	return request({
+		url: '/api/agent/order/up_file',
+		method: 'post',
+		data
+	});
+}
+
+//agent/wy/up_file
+export function wuyouUpPj(data) {
+	return request({
+		url: '/api/agent/wy/up_file',
+		method: 'post',
+		data
+	});
+}
+
+export function getDetail(id) {
+	return request({
+		url: '/api/agent/order/info/' + id,
+		method: 'get'
+	});
 }

+ 26 - 1
api/set.js

@@ -43,4 +43,29 @@ export function applelogin(data) {
 		data
 	});
 }
-// #endif
+// #endif
+
+//获取省市区
+export function getAddressArea(data) {
+	return request({
+		url: '/api/area',
+		method: 'get',
+		data
+	});
+}
+
+export function getAddressCity(data) {
+	return request({
+		url: '/api/city',
+		method: 'get',
+		data
+	});
+}
+
+export function getAddressDetail(data,id) {
+	return request({
+		url: '/api/address/detail/'+id,
+		method: 'get',
+		data
+	});
+}

+ 68 - 0
api/user.js

@@ -277,4 +277,72 @@ export function goHx(data) {
 		method: 'post',
 		data
 	})
+}
+
+export function createSubscribe(data) {
+	return request({
+		url: '/api/subscribe/create',
+		method: 'post',
+		data
+	})
+}
+
+//'subscribe/lst
+export function subscribeList(data) {
+	return request({
+		url: '/api/subscribe/lst',
+		method: 'get',
+		data
+	})
+}
+
+export function wuyouList(data) {
+	return request({
+		url: '/api/agent/wy/lst',
+		method: 'get',
+		data
+	})
+}
+
+export function cancelSubscribe(data) {
+	return request({
+		url: '/api/subscribe/cancel',
+		method: 'get',
+		data
+	})
+}
+
+//agent/user
+export function agentInfo(data) {
+	return request({
+		url: '/api/agent/user',
+		method: 'get',
+		data
+	})
+}
+
+export function agentOrder(data) {
+	return request({
+		url: '/api/agent/order/index',
+		method: 'get',
+		data
+	})
+}
+
+//
+export function agentOrderAuth(data) {
+	return request({
+		url: '/api/agent/order/auth',
+		method: 'post',
+		data
+	})
+}
+
+//agent/wy/auth
+export function wuyouAgentOrderAuth(data) {
+	return request({
+		url: '/api/agent/wy/auth',
+		method: 'post',
+		data
+	})
 }

BIN
baseInfo/logo.png


BIN
baseInfo/logo1.png


BIN
baseInfo/xd.keystore


+ 2 - 0
baseInfo/zs.txt

@@ -0,0 +1,2 @@
+别名:com.xd.inc
+密码:112233

+ 326 - 0
components/tpf-time-range/tpf-time-range.vue

@@ -0,0 +1,326 @@
+<template>
+	<uni-popup ref="popup" type="bottom" @change="uniChange">
+		<view class="tpf-time-range-section">
+			<view class="tpf-time-range-title-section flex flex-align-center flex-pack-justify">
+				<text class="tpf-time-range-title-txt tpf-time-range-cancel" @tap="closePopup('cancel')">取消</text>
+				<text class="tpf-time-range-title-txt tpf-time-range-title">时间范围选择</text>
+				<text class="tpf-time-range-title-txt tpf-time-range-sure" @tap="closePopup('sure')">确定</text>
+			</view>
+			<view class="tpf-time-range-main flex flex-l flex-align-center flex-pack-justify">
+				<view class="tpf-time-range-item flex flex-v flex-align-center">
+					<text class="tpf-start-time">开始时间</text>
+					<picker-view class="flex-1 tpf-picker-view" :value="startDefaultTimeArr" indicator-style="height: 50px;" @change="startTimeChange">
+						<picker-view-column>
+							<view class="tpf-time-range-picker-item flex flex-align-center flex-pack-center" v-for="(item,index) in createTimeRange.hours" :key="index">{{item}}</view>
+						</picker-view-column>
+						<picker-view-column>
+							<view class="tpf-time-range-picker-item flex flex-align-center flex-pack-center" v-for="(item,index) in createTimeRange.startMinutes" :key="index">{{item}}</view>
+						</picker-view-column>
+					</picker-view>
+				</view>
+				<text class="tpf-time-divide"> - </text>
+				<view class="tpf-time-range-item flex flex-v flex-align-center">
+					<text class="tpf-start-time">结束时间</text>
+					<picker-view class="flex-1 tpf-picker-view" :value="endDefaultTimeArr" indicator-style="height: 50px;" @change="endTimeChange">
+						<picker-view-column>
+							<view class="tpf-time-range-picker-item flex flex-align-center flex-pack-center" v-for="(item,index) in createTimeRange.hours" :key="index">{{item}}</view>
+						</picker-view-column>
+						<picker-view-column>
+							<view class="tpf-time-range-picker-item flex flex-align-center flex-pack-center" v-for="(item,index) in createTimeRange.endMinutes" :key="index">{{item}}</view>
+						</picker-view-column>
+					</picker-view>
+				</view>
+			</view>
+		</view>
+		<view class="" :style="{'height': tcHeight + 'rpx'}">
+			
+		</view>
+	</uni-popup>
+</template>
+
+<script>
+/**
+* TimeRange 时间范围选择
+* @description 对时间(时、分)区间进行选择,限制选择范围
+* @property {string} startTime 定义开始时间
+* @property {string} startDefaultTime 定义开始默认时间
+* @property {string} endTime 定义结束时间
+* @property {string} endDefaultTime 定义结束默认时间
+* @event {Function()} name 
+*/
+export default{
+	name:"TpfTimeRange",
+	props:{
+		// 底部填充高度
+		tcHeight: 0,
+		// 开始时间
+		startTime:{
+			type:String,
+			default:"00:00",
+			validator:(value)=>{
+				return /(((2[0-3])|([0-1][0-9])):[0-5][0-9])|24:00/.test(value);
+			}
+		},
+		// 开始默认时间
+		startDefaultTime:{
+			type:String,
+			// #ifdef MP-WEIXIN
+			default:"00:00",
+			// #endif
+			// #ifndef MP-WEIXIN
+			default(){
+				return this.startTime;
+			},
+			// #endif
+			
+			validator:(value)=>{
+				return /(((2[0-3])|([0-1][0-9])):[0-5][0-9])|24:00/.test(value);
+			}
+		},
+		// 结束时间
+		endTime:{
+			type:String,
+			default:"23:59",
+			validator:(value)=>{
+				return /(((2[0-3])|([0-1][0-9])):[0-5][0-9])|24:00/.test(value);
+			}
+		},
+		// 结束默认时间
+		endDefaultTime:{
+			type:String,
+			// #ifdef MP-WEIXIN
+			default:"23:59",
+			// #endif
+			// #ifndef MP-WEIXIN
+			default(){
+				return this.endTime;
+			},
+			// #endif
+			validator:(value)=>{
+				return /(((2[0-3])|([0-1][0-9])):[0-5][0-9])|24:00/.test(value);
+			}
+		}
+	},
+	data(){
+		return {
+			startDefaultTimeArr:[0,0],
+			endDefaultTimeArr:[0,0],
+		}
+	},
+	methods:{
+		uniChange(e) {
+			this.$emit('change',e)
+		},
+		startTimeChange(e){
+			this.startDefaultTimeArr = e.detail.value;
+			if(this.compareTwoTimeRange(e.detail.value,this.endDefaultTimeArr)) this.endDefaultTimeArr = e.detail.value;
+		},
+		endTimeChange(e){
+			this.endDefaultTimeArr = e.detail.value;
+			if(this.compareTwoTimeRange(this.startDefaultTimeArr,e.detail.value)) this.startDefaultTimeArr = e.detail.value;
+		},
+		open(){
+			this.$refs.popup.open();
+		},
+		closePopup(action=""){
+			if(this.compareTwoTimeRange(this.startDefaultTimeArr , this.endDefaultTimeArr)){
+				uni.showToast({
+					title:"开始时间不能大于结束时间",
+					icon:'none'
+				});
+				return false;
+			}
+			let startTime = this.createTimeRange.hours[this.startDefaultTimeArr[0]]+":"+this.createTimeRange.startMinutes[this.startDefaultTimeArr[1]];
+			let endTime = this.createTimeRange.hours[this.endDefaultTimeArr[0]]+":"+this.createTimeRange.endMinutes[this.endDefaultTimeArr[1]];
+			this.$emit('timeRange',[
+				startTime,endTime
+			]);
+			this.$refs.popup.close();
+		},
+		compareTwoTimeRange(arr1=[],arr2=[]){
+			if(arr1[0]>arr2[0] || (arr1[0] == arr2[0] && arr1[1] > arr2[1])) return true;
+			return false;
+		},
+	},
+	beforeCreate(){
+		// 初始化小时
+		let hour = [],minute=[];
+		for(let h=0;h<=24;h++){
+			hour.push(h<10?'0'+h:h+'');
+		}
+		for(let m=0;m<60;m++){
+			minute.push(m<10?'0'+m:m+'');
+		}
+		this.timeRange = {hour,minute};
+	},
+	created() {
+		
+	},
+	computed:{
+		createTimeRange(){
+			let {startTime,startDefaultTime,endTime,endDefaultTime} = this.timeRangeDateChange;
+			let startTimeArr = startTime.split(":"),endTimeArr = endTime.split(":");
+			let hours = this.timeRange.hour.slice(
+				this.timeRange.hour.findIndex(item=>item == startTimeArr[0]),
+				this.timeRange.hour.findIndex(item=>item == endTimeArr[0])+1,
+			);
+
+			let startMinutes = null;
+			if(startTimeArr[0] == endTimeArr[0]){
+				startMinutes = this.timeRange.minute.slice(
+					this.timeRange.minute.findIndex(item=>item == startTimeArr[1]),
+					this.timeRange.minute.findIndex(item=>item == endTimeArr[1])+1,
+				);
+			}else{
+				if(this.startDefaultTimeArr[0] == 0){
+					startMinutes = this.timeRange.minute.slice(
+						this.timeRange.minute.findIndex(item=>item == startTimeArr[1])
+					);
+				}
+				else if(this.startDefaultTimeArr[0] == hours.length-1){
+					startMinutes = this.timeRange.minute.slice(
+						0,
+						this.timeRange.minute.findIndex(item=>item == endTimeArr[1])+1
+					);
+				}else{
+					startMinutes = this.timeRange.minute;	// 完整数据
+				}
+			}
+			let endMinutes = null;
+			if(startTimeArr[0] == endTimeArr[0]){
+				endMinutes = this.timeRange.minute.slice(
+					this.timeRange.minute.findIndex(item=>item == startTimeArr[1]),
+					this.timeRange.minute.findIndex(item=>item == endTimeArr[1])+1,
+				);
+			}
+			else{
+				if(this.endDefaultTimeArr[0] == 0){
+					endMinutes = this.timeRange.minute.slice(
+						this.timeRange.minute.findIndex(item=>item == startTimeArr[1])
+					);
+				}
+				else if(this.endDefaultTimeArr[0] == hours.length-1){
+					endMinutes = this.timeRange.minute.slice(
+						0,
+						this.timeRange.minute.findIndex(item=>item == endTimeArr[1])+1
+					);
+				}else{
+					endMinutes = this.timeRange.minute;	// 完整数据
+				}
+			}
+			return {
+				hours,
+				startMinutes,
+				endMinutes,
+			}
+		},
+		// 用于监听属性的变化
+		timeRangeDateChange(){
+			let {startTime,startDefaultTime,endTime,endDefaultTime} = this;
+			startTime = startTime<endTime?startTime:endTime;
+			startDefaultTime = startDefaultTime>=startTime && startDefaultTime<=endTime?startDefaultTime:startTime;
+			endDefaultTime = endDefaultTime>=startTime && endDefaultTime<=endTime && endDefaultTime>=startDefaultTime?endDefaultTime:startDefaultTime;
+			return {
+				startTime,
+				startDefaultTime,
+				endTime,
+				endDefaultTime
+			}
+		}
+	},
+	watch:{
+		timeRangeDateChange:{
+			handler(newVal,oldVal){
+				let {startTime,startDefaultTime,endTime,endDefaultTime} = newVal;
+				let startTimeArr = startTime.split(":"),endTimeArr = endTime.split(":");
+				let startDefaultTimeArr = startDefaultTime.split(":"),endDefaultTimeArr = endDefaultTime.split(":");
+				
+				let hours = this.timeRange.hour.slice(
+					this.timeRange.hour.findIndex(item=>item == startTimeArr[0]),
+					this.timeRange.hour.findIndex(item=>item == endTimeArr[0])+1,
+				);
+				
+				this.$set(this.startDefaultTimeArr,0, hours.includes(startDefaultTimeArr[0])?hours.findIndex(item=>item == startDefaultTimeArr[0]):0);
+				this.$set(this.endDefaultTimeArr,0, hours.includes(endDefaultTimeArr[0])?hours.findIndex(item=>item == endDefaultTimeArr[0]):this.startDefaultTimeArr[0]);
+				
+				let startMinute = null,endMinute = null;
+				if(startTimeArr[0] == endTimeArr[0]){
+					startMinute = endMinute = this.timeRange.minute.slice(
+						this.timeRange.minute.findIndex(item=>item == startTimeArr[1]),
+						this.timeRange.minute.findIndex(item=>item == endTimeArr[1])+1,
+					);
+				}
+				else{
+					if(startDefaultTime.split(":")[0] == startTimeArr[0]){
+						startMinute = this.timeRange.minute.slice(
+							this.timeRange.minute.findIndex(item=>item == startTimeArr[1]),
+						);
+					}
+					else if(startDefaultTime.split(":")[0] == endTimeArr[0]){
+						startMinute = this.timeRange.minute.slice(
+							0,
+							this.timeRange.minute.findIndex(item=>item == endTimeArr[1])+1,
+						);
+					}else{
+						startMinute = this.timeRange.minute;
+					}
+					if(endDefaultTime.split(":")[0] == startTimeArr[0]){
+						endMinute = this.timeRange.minute.slice(
+							this.timeRange.minute.findIndex(item=>item == startTimeArr[1]),
+						);
+					}else if(endDefaultTime.split(":")[0] == endTimeArr[0]){
+						endMinute = this.timeRange.minute.slice(
+							0,
+							this.timeRange.minute.findIndex(item=>item == endTimeArr[1])+1,
+						);
+					}else{
+						endMinute = this.timeRange.minute;
+					}
+				}
+				this.$set(this.startDefaultTimeArr,1, startMinute.includes(startDefaultTimeArr[1])?startMinute.findIndex(item=>item == startDefaultTimeArr[1]):0);
+				this.$set(this.endDefaultTimeArr,1, endMinute.includes(endDefaultTimeArr[1])?endMinute.findIndex(item=>item == endDefaultTimeArr[1]):this.startDefaultTimeArr[1]);
+			},
+			deep:true,		// 深度监听
+			immediate:true,	// 初始化立即执行
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.flex{display:flex;}
+.flex-v{flex-direction:column;}
+.flex-wrap{flex-wrap:wrap;}
+.flex-row-wrap{flex-flow:row wrap;}
+.flex-1{flex:1;}
+.flex-align-center{align-items:center;}
+.flex-pack-center{justify-content:center;}
+.flex-pack-justify{justify-content:space-between;}
+.flex-pack-around{justify-content:space-around;}
+.tpf-time-range-section{
+	background-color: #FFF;
+}
+.tpf-time-range-title-section{
+	padding: 20rpx;
+	border-bottom: 1px #f2f2f2 solid;
+}
+.tpf-time-range-title-txt{
+	font-size: 28rpx;
+}
+.tpf-time-range-title{
+	font-size:32rpx;
+}
+.tpf-time-range-main{
+	padding: 0 20rpx 20rpx;
+}
+.tpf-time-range-item{
+	height: 400rpx;
+	width: 300rpx;
+}
+.tpf-start-time{
+	padding: 20rpx 0;
+}
+.tpf-picker-view{
+	width:280rpx;
+}
+</style>

+ 243 - 0
components/yk-authpup/yk-authpup.vue

@@ -0,0 +1,243 @@
+<template>
+	<view v-if="showPopup" class="uni-popup" @touchmove.stop.prevent="">
+		<view :class="[type, ani, animation ? 'ani' : '']" class="uni-custom uni-popup__wrapper"
+			@click="close(true)">
+			<view class="uni-popup__wrapper-box">
+				<view :style="[{paddingTop: StatusBar+'px'}]">
+					<view class="title">{{authList[permissionID].title}}</view>
+					<view class="content">{{authList[permissionID].content}}</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'YkAuthpup',
+		props: {
+			// 开启动画
+			animation: {
+				type: Boolean,
+				default: true
+			},
+			//弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层,
+			type: {
+				type: String,
+				default: 'center'
+			},
+			show: {
+				type: Boolean,
+				default: true
+			},
+			permissionID: {
+				type: [String, Number],
+				default: ''
+			}
+		},
+		data() {
+			const appName = '宏涤品牌'
+			return {
+				ani: '',
+				showPopup: false,
+				StatusBar:'',
+				authList: {
+					'WRITE_EXTERNAL_STORAGE': {
+						title: appName + "对存储空间/照片权限申请说明",
+						content: "便于您使用该功能上传您的照片/图片/视频及用于更换头像、意见反馈、保存相册、分享、客服沟通等场景中读取和写入相册和文件内容。"
+					},
+					'ACCESS_FINE_LOCATION': {
+						title: appName + "对地理位置权限申请说明",
+						content: "便于应用程序可以提供基于位置的服务、定位导航、附近搜索等功能。"
+					},
+					'CALL_PHONE': {
+						title: appName + "对拨打/管理电话权限申请说明",
+						content: "便于您使用该功能联系客服、业务经理与联系等场景下使用"
+					},
+					'CAMERA': {
+					    title: appName + "对拍摄照片/录制视频权限申请说明",
+					    content: "便于您使用该功能上传您的照片/图片/视频/识别二维码及用于更换头像等场景下使用。"
+					},
+					'RECORD_AUDIO': {
+					    title: appName + "申请获取麦克风权限",
+					    content: "在下方弹窗中选择允许后,你可以在" + appName + "中发送语音消息的场景使用麦克风进行录音。"
+					}
+				}
+			}
+		},
+		created() {
+			this.getSystemInfo();
+		},
+		methods: {
+			//获取状态栏高度
+			getSystemInfo(){
+				uni.getSystemInfo({
+				  success: function(e) {
+				    this.StatusBar = e.statusBarHeight;
+				  }
+				})
+			},
+			open() {
+				this.requestPermissions(this.permissionID);
+			},
+			close(type) {
+				this.ani = ''
+				this.$nextTick(() => {
+					setTimeout(() => {
+						this.showPopup = false
+					}, 300)
+				})
+			},
+			//权限检测
+			requestPermissions(permissionID) {
+				let _this = this;
+				let _permissionID;
+				_permissionID = 'android.permission.' + permissionID;
+				// #ifdef APP-PLUS
+				//判断安卓与ios设备
+				if ( plus.os.name =='Android') {
+					plus.android.checkPermission(_permissionID,
+						granted => {
+							if (granted.checkResult == -1) {
+								//还未授权当前查询的权限,打开权限申请目的自定义弹框
+								_this.showPopup = true;
+								_this.$nextTick(() => {
+									setTimeout(() => {
+										_this.ani = 'uni-' + _this.type
+									}, 30)
+								})
+							}
+						},
+						error => {
+							console.log(error.message);
+						}
+					);
+					plus.android.requestPermissions([_permissionID],
+						(e) => {
+							//关闭权限申请目的自定义弹框
+							_this.ani = '';
+							_this.$nextTick(() => {
+								setTimeout(() => {
+									_this.showPopup = false
+								}, 300)
+							})
+							if (e.granted.length > 0) {
+								//当前查询权限已授权,此时可以通知页面执行接下来的操作
+								_this.$emit('changeAuth');
+							}
+						})
+				}else{
+					//IOS不需要,在配置文件的隐私信息访问的许可描述里可添加
+				}
+				// #endif
+			}
+		}
+	}
+</script>
+<style lang="scss">
+	.uni-popup {
+		position: fixed;
+		/*  #ifdef  H5  */
+		top: 0px;
+		// top: 50px;
+		/*  #endif  */
+		/*  #ifndef  H5  */
+		top: 0px;
+		/*  #endif  */
+		bottom: 0;
+		left: 0;
+		right: 0;
+		z-index: 99999;
+		overflow: hidden;
+		background-color: #fff;
+		&__wrapper {
+			position: absolute;
+			z-index: 999;
+			box-sizing: border-box;
+
+			&.ani {
+				transition: all 0.3s;
+			}
+
+			&.top {
+				top: 0;
+				left: 0;
+				width: 100%;
+				transform: translateY(-100%);
+			}
+
+			&.bottom {
+				bottom: 0;
+				left: 0;
+				width: 100%;
+				transform: translateY(100%);
+			}
+
+			&.right {
+				bottom: 0;
+				left: 0;
+				width: 70%;
+				transform: translateY(100%);
+			}
+
+			&.center {
+				width: 100%;
+				height: 100%;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				transform: scale(1.2);
+				opacity: 0;
+			}
+
+			&-box {
+				position: relative;
+				box-sizing: border-box;
+			}
+
+			&.uni-custom {
+				& .uni-popup__wrapper-box {
+					// border-radius: 20upx 20upx 0 0;
+					padding: 30upx;
+					background: #fff;
+					.title{
+						font-size: 32rpx;
+						font-weight: bold;
+					}
+					.content{
+						margin-top: 16rpx;
+						line-height: 1.6;
+					}
+				}
+
+				&.center {
+					& .uni-popup__wrapper-box {
+						position: relative;
+						max-width: 80%;
+						max-height: 80%;
+						overflow-y: scroll;
+					}
+				}
+
+				&.top,
+				&.bottom {
+					& .uni-popup__wrapper-box {
+						width: 100%;
+						max-height: 1000upx;
+						// overflow-y: scroll;
+					}
+				}
+			}
+
+			&.uni-top,
+			&.uni-bottom {
+				transform: translateY(0);
+			}
+
+			&.uni-center {
+				transform: scale(1);
+				opacity: 1;
+			}
+		}
+	}
+</style>

+ 8 - 9
manifest.json

@@ -1,9 +1,9 @@
 {
-    "name" : "舒天下",
-    "appid" : "__UNI__4400DB0",
-    "description" : "微客快乐购",
-    "versionName" : "1.1.5",
-    "versionCode" : 115,
+    "name" : "宏涤品牌",
+    "appid" : "__UNI__919ED64",
+    "description" : "宏涤品牌",
+    "versionName" : "1.2.1",
+    "versionCode" : 121,
     "transformPx" : false,
     "app-plus" : {
         /* 5+App特有相关 */
@@ -16,8 +16,7 @@
         },
         "modules" : {
             "Barcode" : {},
-            "Camera" : {},
-            "VideoPlayer" : {}
+            "Camera" : {}
         },
         /* 模块配置 */
         "distribute" : {
@@ -103,7 +102,7 @@
         }
     },
     "h5" : {
-        "title" : "微客快乐购",
+        "title" : "宏涤品牌",
         "domain" : "",
         "router" : {
             "base" : "/index/",
@@ -112,7 +111,7 @@
         "devServer" : {
             "proxy" : {
                 "/api" : {
-                    "target" : "https://stx2.qiniu1314.com"
+                    "target" : "https://hdxy.zjxiyi888.cn"
                 }
             },
             "https" : false

+ 16 - 0
package.json

@@ -0,0 +1,16 @@
+{
+    "id": "tpf-time-range",
+    "name": "时间范围选择插件,支持时分范围选择",
+    "displayName": "时间范围选择插件,支持时分范围选择",
+    "version": "1.0.1",
+    "description": "这是一个时间(时-分)范围选择插件,第一个时间不能大于第二个时间,第二个时间不能小于第一个时间。",
+    "keywords": [
+        "时间选择,范围选择,时间范围选择"
+    ],
+    "dcloudext": {
+        "category": [
+            "前端组件",
+            "通用组件"
+        ]
+    }
+}

+ 92 - 33
pages.json

@@ -4,9 +4,17 @@
 			"style": {
 				"navigationBarTitleText": "首页",
 				"navigationStyle": "custom",
-				"navigationBarTextStyle":"white"
+				"navigationBarTextStyle": "white"
 			}
 		},
+		{
+				"path": "pages/index/down",
+				"style": {
+					"navigationBarTitleText": "下载",
+					"navigationStyle": "custom",
+					"navigationBarTextStyle": "white"
+				}
+			},
 		{
 			"path": "pages/index/yuyue",
 			"style": {
@@ -30,8 +38,8 @@
 		{
 			"path": "pages/user/admin",
 			"style": {
-				"navigationBarBackgroundColor":"#3A79F7",
-				"navigationBarTextStyle":"white",
+				"navigationBarBackgroundColor": "#3A79F7",
+				"navigationBarTextStyle": "white",
 				"navigationBarTitleText": "代理人中心"
 			}
 		},
@@ -61,7 +69,12 @@
 				"navigationBarTitleText": "更新"
 			}
 		},
-		// #ifdef H5
+		{
+			"path": "pages/order/orders",
+			"style": {
+				"navigationBarTitleText": "我的订单"
+			}
+		},
 		{
 			"path": "pages/public/register",
 			"style": {
@@ -76,6 +89,12 @@
 				"navigationBarTitleText": "登录"
 			}
 		},
+		{
+			"path": "pages/public/privacyAgreement",
+			"style": {
+				"navigationBarTitleText": ""
+			}
+		},
 		{
 			"path": "pages/public/forget",
 			"style": {
@@ -83,7 +102,6 @@
 				"navigationBarTitleText": "忘记密码"
 			}
 		},
-		// #endif
 		{
 			"path": "pages/public/wxLogin",
 			"style": {
@@ -152,7 +170,7 @@
 				"navigationBarTitleText": "收款信息"
 			}
 		},
-		
+
 		{
 			"path": "pages/category/category",
 			"style": {
@@ -203,7 +221,7 @@
 			"style": {
 				"navigationBarBackgroundColor": "#3A79F6",
 				"navigationBarTitleText": "我的团队",
-				"navigationBarTextStyle":"white"
+				"navigationBarTextStyle": "white"
 			}
 		},
 		{
@@ -211,7 +229,7 @@
 			"style": {
 				"navigationBarBackgroundColor": "#3A79F6",
 				"navigationBarTitleText": "我的推广",
-				"navigationBarTextStyle":"white"
+				"navigationBarTextStyle": "white"
 			}
 		},
 		{
@@ -243,8 +261,7 @@
 	"subPackages": [{
 			"root": "pages/money",
 			"name": "money",
-			"pages": [
-				{
+			"pages": [{
 					"path": "pay",
 					"style": {
 						"navigationBarTitleText": "支付"
@@ -277,23 +294,50 @@
 					}
 				},
 				{
-						"path": "orders",
-						"style": {
-							"navigationBarTitleText": "我的订单",
-							"app-plus": {
-								"bounce": "none"
-							}
+					"path": "upPj",
+					"style": {
+						"navigationBarTitleText": "上传评价"
+					}
+				},
+				{
+					"path": "sh",
+					"style": {
+						"navigationBarTitleText": "审核预约"
+					}
+				},
+				{
+					"path": "sht",
+					"style": {
+						"navigationBarTitleText": "审核预约"
+					}
+				},
+				// {
+				// 	"path": "orders",
+				// 	"style": {
+				// 		"navigationBarTitleText": "我的订单",
+				// 		"app-plus": {
+				// 			"bounce": "none"
+				// 		}
+				// 	}
+				// },
+				{
+					"path": "orderAdmin",
+					"style": {
+						"navigationBarTitleText": "家政维修",
+						"app-plus": {
+							"bounce": "none"
 						}
-					},
-					{
-							"path": "orderAdmin",
-							"style": {
-								"navigationBarTitleText": "订单管理",
-								"app-plus": {
-									"bounce": "none"
-								}
-							}
-						},
+					}
+				},
+				{
+					"path": "wuyouAdmin",
+					"style": {
+						"navigationBarTitleText": "五优订单",
+						"app-plus": {
+							"bounce": "none"
+						}
+					}
+				},
 				{
 					"path": "expressInfo",
 					"style": {
@@ -309,6 +353,15 @@
 						}
 					}
 				},
+				{
+					"path": "orderDetails",
+					"style": {
+						"navigationBarTitleText": "订单详情",
+						"app-plus": {
+							"bounce": "none"
+						}
+					}
+				},
 				{
 					"path": "evaluate",
 					"style": {
@@ -367,6 +420,12 @@
 					"style": {
 						"navigationBarTitleText": "修改资料"
 					}
+				},
+				{
+					"path": "zxzh",
+					"style": {
+						"navigationBarTitleText": "注销账号"
+					}
 				}
 			]
 		},
@@ -444,7 +503,7 @@
 	],
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "微客快乐购",
+		"navigationBarTitleText": "宏涤品牌",
 		"navigationBarBackgroundColor": "#FFFFFF",
 		"backgroundColor": "#f8f8f8"
 	},
@@ -459,12 +518,12 @@
 				"selectedIconPath": "static/tabBar/home1.png",
 				"text": "首页"
 			},
-			{
-				"pagePath": "pages/order/orders",
-				"iconPath": "static/tabBar/center.png",
-				"selectedIconPath": "static/tabBar/center.png",
-				"text": "购物车"
-			},
+			// {
+			// 	"pagePath": "pages/order/orders",
+			// 	"iconPath": "static/tabBar/center.png",
+			// 	"selectedIconPath": "static/tabBar/center.png",
+			// 	"text": "我的订单"
+			// },
 			{
 				"pagePath": "pages/user/user",
 				"iconPath": "static/tabBar/user.png",

+ 66 - 0
pages/index/down.vue

@@ -0,0 +1,66 @@
+<template>
+	<view class="content">
+		<image src="../../static/icon/logo1.png" mode="" class="logo"></image>
+		<view class="btn" @click="downapp">
+			APP 下载
+		</view>
+	</view>
+</template>
+
+<script>
+	import { getVersion } from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				appDown: 'https://hdxy.zjxiyi888.cn/static/app/xy.apk'
+			}
+		},
+		onShow() {
+			this.getVersion()
+		},
+		methods: {
+			downapp() {
+				window.open(this.appDown)
+			},
+			getVersion() {
+				getVersion().then(res => {
+					// console.log(res.data.app_down);
+					this.appDown = res.data.app_down
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	page {
+		// background: linear-gradient(to bottom,#3a79f7 10%,#fff 50%,#fff,#fff 60%,#3a79f7);
+		height: auto;
+		min-height: 100%;
+		background-color: #FFFFFF;
+	}
+	.content {
+		position: absolute;
+		height: 100%;
+		width: 100%;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+	}
+	.logo {
+		width: 314rpx;
+		height: 300rpx;
+	}
+	.btn {
+		width: 300rpx;
+		line-height: 70rpx;
+		background: #FFFFFF;
+		border-radius: 10rpx;
+		margin-top: 50rpx;
+		text-align: center;
+		background-color: $base-color;
+		color: #fff;
+		margin-top: 300rpx;
+	}
+</style>

+ 28 - 23
pages/index/index.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="container">
 		<!-- 顶部logo and 搜索 start-->
-		<!-- <view class="status_bar"></view> -->
+		<view class="status_bar"></view>
 		<view class="top-bg"></view>
 		<view class="top-search flex">
 			<view class="search-box flex" @click="clickSearch()">
@@ -20,18 +20,18 @@
 		</swiper>
 		<!-- 轮播图 end -->
 		<!-- 积分 -->
-		<template v-for="(item,index) in navList" v-if="index == 0">
-			<view class="common-wrap" v-if="item.list.length > 0">
+		
+			<view class="common-wrap" v-if="list.length > 0">
 				<view class="tit">
 					<view class="cate">
 						特惠折扣 <text>限量抢购</text>
 					</view>
-					<view class="more" @click="navto(item.path)">
+					<view class="more" @click="navto('/pages/index/yuyue?state=1')">
 						查看更多<image src="../../static/index/in-go.png" mode=""></image>
 					</view>
 				</view>
 				<view class="goods-wrap flex-start">
-					<view class="goods" v-for="good in item.list"
+					<view class="goods" v-for="good in list"
 						@click="navto('/pages/product/product?id=' + good.id)">
 						<image :src="good.image" mode="" class="goods-img"></image>
 						<view class="goods-tit clamp">
@@ -45,7 +45,6 @@
 					</view>
 				</view>
 			</view>
-		</template>
 		<view class="in-banner">
 			<image v-for="item in inBanner" :src="'../../static/img/in-b'+item.state + '.png'" mode="widthFix" @click="navto('/pages/index/yuyue?state=' + item.state)"></image>
 		</view>
@@ -83,11 +82,12 @@
 	export default {
 		data() {
 			return {
+				list: [],
 				inBanner: [
-					{
-						state:1,
-						tit: '洗衣'
-					},
+					// {
+					// 	state:1,
+					// 	tit: '洗衣'
+					// },
 					{
 						state:2,
 						tit: '家政'
@@ -202,13 +202,16 @@
 			// #endif
 		},
 		onShow: function() {
-			this.getGoodList()
+			// this.getGoodList()
 			this.loadData();
 			// this.getnavbar();
 			this.getProducts()
 		},
 		onHide() {},
 		methods: {
+			swiperChange() {
+				
+			},
 			showW() {
 				// if(this.cateList.length > 4 && )
 				if(this.cateList.length < 4) {
@@ -223,9 +226,10 @@
 			},
 			getProducts() {
 				getProducts({
-					sid: 54
+					is_housekeeping:0,
+					is_maintenance:0
 				}).then(res => {
-					this.cunList = res.data
+					this.list = res.data
 					console.log(this.cunList,'cunList')
 				})
 				//
@@ -285,16 +289,16 @@
 			// 	}
 			// },
 			getGoodList() {
-				let obj = this
-				let lb = obj.navList[0];
-				let jf = obj.navList[1];
-				// let vip = obj.navList[2];
-				groomList(lb.qdata, lb.state).then(res => {
-					lb.list = res.data.list
-				})
-				groomList(jf.qdata, jf.state).then(res => {
-					jf.list = res.data.list
-				})
+				// let obj = this
+				// let lb = obj.navList[0];
+				// let jf = obj.navList[1];
+				// // let vip = obj.navList[2];
+				// groomList(lb.qdata, lb.state).then(res => {
+				// 	lb.list = res.data.list
+				// })
+				// groomList(jf.qdata, jf.state).then(res => {
+				// 	jf.list = res.data.list
+				// })
 			},
 			navto(url, type = 0) {
 				if (type == 1) {
@@ -475,6 +479,7 @@
 	page {
 		min-height: 100%;
 		height: auto;
+		background-color: #fff;
 	}
 
 	// 顶部搜索

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 50 - 35
pages/index/yuyue.vue


+ 7 - 2
pages/money/pay.vue

@@ -46,6 +46,9 @@ export default {
 	data() {
 		return {
 			payType: 3, //支付类型
+			// #ifdef APP-PLUS
+			payName: 'yue',
+			// #endif
 			// #ifdef H5
 			payName: 'yue',
 			// #endif
@@ -237,8 +240,10 @@ export default {
 			let prepage = obj.$api.prePage();
 
 			let data = {
-				is_level: prepage.is_level,
-				is_pack: prepage.is_pack,//是否礼包商品
+				subscribe_day: prepage.date,
+				subscribe_time: prepage.timeArea,
+				is_maintenance: prepage.is_maintenance,
+				is_housekeeping: prepage.is_housekeeping,//是否礼包商品
 				real_name: prepage.addressData.real_name, //联系人名称
 				phone: prepage.addressData.phone, //联系人号码
 				couponId: prepage.couponChecked.id, //优惠券编号

+ 81 - 8
pages/order/createOrder.vue

@@ -111,6 +111,16 @@
 				<text class="cell-tit clamp">运费</text>
 				<text class="cell-tip">{{ Postage }}</text>
 			</view>
+			<view class="yt-list-cell b-b" v-if="is_housekeeping == 1|| is_maintenance == 1">
+				<text class="cell-tit clamp">上门日期</text>
+				<picker mode="date" :start="today" :value="date" @change="bindDateChange">
+					<text class="cell-tip">{{date}}</text>
+				</picker>
+			</view>
+			<view class="yt-list-cell b-b" v-if="is_housekeeping == 1|| is_maintenance == 1">
+				<text class="cell-tit clamp">上门时间</text>
+				<view class="desc" @click="open">{{timeArea||'请选择上门时间'}}</view>
+			</view>
 			<view class="yt-list-cell b-b">
 				<text class="cell-tit clamp">备注</text>
 				<input class="desc" type="text" v-model="desc" placeholder="请填写备注信息" placeholder-class="placeholder" />
@@ -160,6 +170,9 @@
 				</scroll-view>
 			</view>
 		</uni-popup>
+		<tpf-time-range ref="time" :startTime="startTime" :startDefaultTime="startDefaultTime" :endTime="endTime"
+			:endDefaultTime="endDefaultTime" @timeRange="timeRange" @change="selectChange">
+		</tpf-time-range>
 	</view>
 </template>
 
@@ -181,7 +194,22 @@
 	} from 'vuex';
 	export default {
 		data() {
+			let currentDate = this.getDate({
+				format: true
+			})
+			let start_time =  this.getTimeHalfHourLater(30)
+			let end_time = this.getTimeHalfHourLater(90)
+			if(end_time <start_time) {
+				end_time = '24:00'
+			}
 			return {
+				startTime: start_time,
+				startDefaultTime: start_time,
+				endTime: "24:00",
+				endDefaultTime: end_time,
+				timeArea: '',
+				today: currentDate,
+				date: currentDate,
 				is_integral: 0,
 				showbtn: true,
 				store_list: [],
@@ -233,15 +261,16 @@
 				payLoding: true, //是否可支付
 				pinkid: '', //保存拼团商品id
 				affiliation_uid: 0,
-				is_level: 0,
+				is_housekeeping: 0,
+				is_maintenance: 0
 			};
 		},
 		onLoad(option) {
-			if (option.is_level) {
-				this.is_level = option.is_level
+			if (option.is_housekeeping) {
+				this.is_housekeeping = option.is_housekeeping
 			}
-			if (option.affiliation_uid) {
-				this.affiliation_uid = option.affiliation_uid
+			if(option.is_maintenance) {
+				this.is_maintenance = option.is_maintenance
 			}
 			// 判断是否为拼团商品
 			if (option.type == 'pink') {
@@ -253,7 +282,7 @@
 				this.loadData();
 			}
 			if (option.is_integral) {
-				this.is_integral = option.is_integral*1
+				this.is_integral = option.is_integral * 1
 			}
 			this.userinfo();
 			this.storeList()
@@ -284,6 +313,43 @@
 			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
 		},
 		methods: {
+			getTimeHalfHourLater(m) {
+				var currentDate = new Date();
+				var halfHourLater = new Date(currentDate.getTime() + m * 60000); // m分钟后的时间
+
+				var hours = ('0' + halfHourLater.getHours()).slice(-2); // 获取小时,并补零
+				var minutes = ('0' + halfHourLater.getMinutes()).slice(-2); // 获取分钟,并补零
+
+				return hours + ':' + minutes;
+			},
+			selectChange(e) {
+				console.log(e);
+				this.showbtn = !e.show
+			},
+			timeRange(e) {
+				this.timeArea = e[0] + '-' + e[1]
+			},
+			open() {
+				this.$refs.time.open()
+			},
+			getDate(type) {
+				const date = new Date();
+				let year = date.getFullYear();
+				let month = date.getMonth() + 1;
+				let day = date.getDate();
+
+				if (type === 'start') {
+					year = year - 60;
+				} else if (type === 'end') {
+					year = year + 2;
+				}
+				month = month > 9 ? month : '0' + month;
+				day = day > 9 ? day : '0' + day;
+				return `${year}-${month}-${day}`;
+			},
+			bindDateChange: function(e) {
+				this.date = e.detail.value
+			},
 			storeList() {
 				storeList().then(res => {
 					console.log(res)
@@ -375,7 +441,7 @@
 					// 计算金额
 					this.payMoneyNub();
 					// 加载优惠券
-					obj.couponsOrder(data.priceGroup.totalPrice);
+					// obj.couponsOrder(data.priceGroup.totalPrice);
 				});
 			},
 			// 购买数量变化
@@ -403,7 +469,14 @@
 						return false;
 					}
 				}
-
+				if(this.is_housekeeping == 1 || this.is_maintenance ==1) {
+					if (!this.date) {
+						return this.$api.msg('请选择上门时间')
+					}
+					if (!this.timeArea) {
+						return this.$api.msg('请选择上门时间')
+					}
+				}
 				let url = '/pages/money/pay?key=' + this.orderKey
 				if (this.pinkid) {
 					url += '&pinkid=' + this.pinkid

+ 191 - 26
pages/order/orderAdmin.vue

@@ -1,40 +1,40 @@
 <template>
 	<view class="content">
-		<view class="search-wrap">
+		<!-- <view class="search-wrap">
 			<view class="search flex">
 				<image src="../../static/icon/search.png" mode=""></image>
 				<input type="text" placeholder="请输入关键词搜索" confirm-type="search" @confirm="search" v-model="keys"/>
 			</view>
-		</view>
-		<view class="navbar">
+		</view> -->
+		<!-- <view class="navbar">
 			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: current === index }" @click="changeCurrent(index)">{{ item.tit }}</view>
-		</view>
+		</view> -->
 		<view style="height: 20rpx;">
 		</view>
-		<swiper :current="current" class="swiper-box" :style="{'height': height}" @change="chanageC">
+		<swiper :current="current" class="swiper-box" :style="{'height': height}" @change="chanageC" disable-touch>
 			<swiper-item v-for="item in navList" >
 				<scroll-view scroll-y="true" :style="{'height': height}">
 					<empty v-if="item.loaded === true && item.list.length === 0"></empty>
-					<view class="order-item" v-for="items in item.list" >
+					<view class="order-item" v-for="items in item.list"  @click="lookMore(items)">
 						<view class="item-top flex">
 							<view class="order-type">
 								预约订单
 							</view>
 							<view class="order-id">
-								订单编号:9876543211025666
+								订单编号:{{items.order_id}}
 							</view>
 							<view class="order-status">
-								待服务
+								{{items.agent_status == 0?'待服务':(items.agent_status == 1?'进行中':'已完成')}}
 							</view>
 						</view>
 						<view class="item-user flex">
 							<image src="../../static/icon/where.png" mode="" class="where"></image>
 							<view class="">
 								<view class="">
-									山西省太原市小店区谢涛清真羊肉汤(并州东街店)
+									{{items.user_address}}
 								</view>
 								<view class="phone">
-									陈琪137****58343
+									{{items.real_name}} <text @click="makeCall(items.user_phone)">{{items.user_phone }}</text> 
 								</view>
 							</view>
 						</view>
@@ -42,21 +42,36 @@
 							<image src="../../static/icon/time.png" mode="" class="where"></image>
 							<view class="">
 								<view class="">
-									山西省太原市小店区谢涛清真羊肉汤(并州东街店)
-									山西省太原市小店区谢涛清真羊肉汤(并州东街店)
+									{{items.subscribe_day}} {{items.subscribe_time}}
 								</view>
 							</view>
 						</view>
-						<view class="item-yg">
-							<view class="" style="padding-bottom: 15rpx;">
-								服务类型:<text>洗衣</text>
-							</view>
-							<view class="">
-								代理人:<text>李丹丹</text>
+						<view class="goods-box-single" v-for="(goodsItem, goodsIndex) in items._info" :key="goodsIndex">
+							<image class="goods-img" :src="goodsItem.cart_info.productInfo.image" mode="scaleToFill"></image>
+							<view class="right">
+								<view class="flex-start">
+									<text class="title clamp2">{{ goodsItem.cart_info.productInfo.store_name }}</text>
+									<!-- <text class="price">{{ goodsItem.cart_info.productInfo.price }}</text> -->
+								</view>
+								<view class="row flex">
+									<!-- <text class="row_title">{{ goodsItem.productInfo.attrInfo ? goodsItem.productInfo.attrInfo.suk : '' }}</text> -->
+									<text class="attr-box">服务类型:{{ goodsItem.cart_info.productInfo.is_housekeeping == 1? '家政':(goodsItem.cart_info.productInfo.is_maintenance == 1?'维修': '普通商品') }}</text>
+								</view>
 							</view>
 						</view>
 						<view class="item-btm flex">
-							下单时间:2024/12/15
+							<view class="">
+								下单时间:{{items.add_time}}
+							</view>
+							<view class="u-btn" @click.stop="cancelSubscribe(items.order_id)" v-if="items.agent_status == 1">
+								上传评价
+							</view>
+							<view class="u-btn" @click.stop="pass(items)" v-if="items.agent_status == 0">
+								订单确认
+							</view>
+							<view class="u-btn" @click.stop="lookimg(items)" v-if="items.agent_status == 2 || items.agent_status == 3">
+								查看评价
+							</view>
 						</view>
 					</view>
 					<uni-load-more :status="item.loadingType" v-if="!(item.loaded === true && item.list.length === 0)"></uni-load-more>
@@ -69,6 +84,7 @@
 <script>
 	import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
 	import empty from '@/components/empty';
+	import { subscribeList,cancelSubscribe,agentOrder,agentOrderAuth} from '@/api/user.js'
 	export default {
 		components: {
 			empty,
@@ -81,7 +97,16 @@
 				current: 0,
 				navList: [
 					{
-						tit: '待服务',
+						tit: '全部',
+						status: -2,
+						list: [],
+						loadingType: 'more',
+						loaded: true,
+						page: 1,
+						limit: 10
+					},
+					{
+						tit: '待确认',
 						status: 0,
 						list: [],
 						loadingType: 'more',
@@ -90,9 +115,27 @@
 						limit: 10
 					},
 					{
-						tit: '进行中',
+						tit: '待上传',
 						status: 1,
-						list: [1,2,1,2,1,2,1,2],
+						list: [],
+						loadingType: 'more',
+						loaded: false,
+						page: 1,
+						limit: 10
+					},
+					{
+						tit: '已上传',
+						status: 2,
+						list: [],
+						loadingType: 'more',
+						loaded: false,
+						page: 1,
+						limit: 10
+					},
+					{
+						tit: '已完成',
+						status:3,
+						list: [],
 						loadingType: 'more',
 						loaded: false,
 						page: 1,
@@ -105,7 +148,7 @@
 			
 		},
 		onShow() {
-			
+			this.getOrderList('re')
 		},
 		onReachBottom() {
 			
@@ -124,8 +167,32 @@
 					});
 				},
 		methods: {
+			makeCall(phone) {
+					console.log(phone);
+				if(phone) {
+					uni.makePhoneCall({
+						phoneNumber:phone + ''
+					})
+				}
+				
+			},
+			lookMore(item) {
+				console.log(item);
+				uni.navigateTo({
+					url:'/pages/order/orderDetails?id=' + item.id
+				})
+			},
+			lookimg(item) {
+				let arr = item.auth_up_file.split(',')
+				uni.previewImage({
+					current: 0,
+					loop: false,
+					urls: arr,
+					indicator: 'default'
+				});
+			},
 			search() {
-				console.log('ddd');
+				this.getOrderList('re')
 			},
 			chanageC(e) {
 				this.current = e.detail.current;
@@ -135,12 +202,53 @@
 				if(index == this.current) return;
 				this.current = index;
 			},
+			pass(item) {
+				// agentOrderAuth({
+				// 	id,
+				// 	status: 0
+				// }).then(res => {
+				// 	uni.showToast({
+				// 		title: '确认成功',
+				// 		duration: 2000
+				// 	});
+				// })
+				uni.navigateTo({
+					url: '/pages/order/sh?id=' + item.order_id + '&day=' + item.subscribe_day + '&time=' + item.subscribe_time + '&type=' + item.type
+				})
+			},
+			cancelSubscribe(id) {
+				uni.navigateTo({
+					url: '/pages/order/upPj?id=' + id
+				})
+			},
 			getOrderList(type) {
 				let that = this;
 				let item = that.navList[that.current];
 				if(type == 'tab' && item.loaded) return;
+				if(type == 're') {
+					item.loadingType = 'more'
+					item.loaded = false
+					item.page = 1
+					item.list = []
+				}
 				if(item.loadingType == 'loading' || item.loadingType == 'noMore') return;
 				item.loadingType = 'loading'
+				agentOrder({
+					page:item.page,
+					limit:item.limit,
+					agent_status: item.status,
+					key: this.keys
+				}).then(res => {
+					let arr = res.data.data
+					item.list = item.list.concat(arr)
+					if(arr.length == item.limit) {
+						item.loadingType = 'more'
+					}else {
+						item.loadingType = 'noMore'
+					}
+					item.loaded = true
+				})
+				
 			}
 		}
 	}
@@ -219,11 +327,10 @@
 		}
 		.item-yg {
 			width: 660rpx;
-			height: 122rpx;
 			background: #F5F5F5;
 			font-size: 24rpx;
 			color: #666666;
-			padding: 25rpx 0 0 20rpx;
+			padding: 20rpx 0 20rpx 20rpx;
 			margin-bottom: 24rpx;
 			text {
 				font-weight: bold;
@@ -286,4 +393,62 @@
 			}
 		}
 	}
+	.u-btn {
+		width: 144rpx;
+		line-height: 55rpx;
+		border-radius: 28rpx;
+		border: 1px solid #FF4C4C;
+		font-size: 26rpx;
+		color: #FF4C4C;
+		text-align: center;
+	}
+	/* 单条商品 */
+	.goods-box-single {
+		display: flex;
+		padding: 20rpx 0;
+		.goods-img {
+			display: block;
+			width: 120rpx;
+			height: 120rpx;
+		}
+		.right {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			padding: 0 30rpx 0 24rpx;
+			overflow: hidden;
+			.row{
+				margin-top: 10rpx;
+			}
+			.row_title{
+				padding:5rpx 10rpx;
+				background-color: #dddddd;
+				border-radius: 10rpx;
+				font-size: 22rpx;
+				color: #ffffff;
+			}
+			.title {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				line-height: 1;
+				width: 80%;
+			}
+			.attr-box {
+				display: flex;
+				justify-content: flex-end;
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+			}
+			.price {
+				display: inline;
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				&:before {
+					content: '¥';
+					font-size: $font-sm;
+					
+				}
+			}
+		}
+	}
 </style>

+ 9 - 1
pages/order/orderDetail.vue

@@ -34,7 +34,7 @@
 				<image class="goods-img" :src="goodsItem.productInfo.image" mode="aspectFill"></image>
 				<view class="right position-relative">
 					<view class="flex">
-						<text class="title">{{ goodsItem.productInfo.store_name }}</text>
+						<text class="title clamp2">{{ goodsItem.productInfo.store_name }}</text>
 						<view class="title-right">
 							<view class="price">{{ goodsItem.productInfo.price }}</view>
 							<view class="attr-box">
@@ -51,6 +51,14 @@
 				</view>
 			</view>
 		</view>
+		<view class="row b-b flex" v-if="item.subscribe_time">
+			<text class="tit">预约日期</text>
+			<view class="input">{{ item.subscribe_day }}</view>
+		</view>
+		<view class="row b-b flex" v-if="item.subscribe_time">
+			<text class="tit">预约时间</text>
+			<view class="input">{{ item.subscribe_time}}</view>
+		</view>
 		<view class="row b-b flex">
 			<text class="tit">订单总价</text>
 			<view class="input">¥{{ payAllMoney }}</view>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 191 - 0
pages/order/orderDetails.vue


+ 82 - 29
pages/order/orders.vue

@@ -15,20 +15,20 @@
 								预约订单
 							</view>
 							<view class="order-id">
-								订单编号:9876543211025666
+								订单编号:{{items.order_id}}
 							</view>
 							<view class="order-status">
-								待服务
+								{{items.status == 0?'待服务':(items.status == 1?'进行中':'已完成')}}
 							</view>
 						</view>
 						<view class="item-user flex">
 							<image src="../../static/icon/where.png" mode="" class="where"></image>
 							<view class="">
 								<view class="">
-									山西省太原市小店区谢涛清真羊肉汤(并州东街店)
+									{{items.user_address}}
 								</view>
 								<view class="phone">
-									陈琪137****58343
+									{{items.real_name}}{{items.user_phone |geTel}}
 								</view>
 							</view>
 						</view>
@@ -36,24 +36,28 @@
 							<image src="../../static/icon/time.png" mode="" class="where"></image>
 							<view class="">
 								<view class="">
-									山西省太原市小店区谢涛清真羊肉汤(并州东街店)
-									山西省太原市小店区谢涛清真羊肉汤(并州东街店)
+									{{items.subscribe_day}} {{items.subscribe_time}}
 								</view>
 							</view>
 						</view>
 						<view class="item-yg">
-							<view class="" style="padding-bottom: 15rpx;">
-								服务类型:<text>洗衣</text>
-							</view>
 							<view class="">
-								代理人:<text>李丹丹</text>
+								服务类型:<text>{{items.type}}</text>
 							</view>
+							<!-- <view class="">
+								代理人:<text>李丹丹</text>
+							</view> -->
 						</view>
 						<view class="item-btm flex">
-							下单时间:2024/12/15
+							<view class="">
+								下单时间:{{items.add_time}}
+							</view>
+							<view class="u-btn" @click="cancelSubscribe(items.order_id)" v-if="items.status == 0">
+								取消预约
+							</view>
 						</view>
 					</view>
-					<uni-load-more :status="item.loadingType" v-if="!(item.loaded === true && item.list.length === 0)"></uni-load-more>
+					<uni-load-more :status="item.loading" v-if="!(item.loaded === true && item.list.length === 0)"></uni-load-more>
 				</scroll-view>
 			</swiper-item>
 		</swiper>
@@ -63,6 +67,7 @@
 <script>
 	import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
 	import empty from '@/components/empty';
+	import { subscribeList,cancelSubscribe} from '@/api/user.js'
 	export default {
 		components: {
 			empty,
@@ -80,34 +85,39 @@
 						loading: 'more',
 						loaded: true,
 						page: 1,
-						limit: 10
+						limit: 10,
 					},
 					{
 						tit: '进行中',
 						status: 1,
-						list: [1,2,2,2,2,2],
-						loading: 'more',
-						loaded: false,
-						page: 1,
-						limit: 10
-					},
-					{
-						tit: '已完成',
-						status: 2,
 						list: [],
 						loading: 'more',
 						loaded: false,
 						page: 1,
-						limit: 10
-					}
+						limit: 10,
+					},
+					// {
+					// 	tit: '已完成',
+					// 	status: 2,
+					// 	list: [],
+					// 	loading: 'more',
+					// 	loaded: false,
+					// 	page: 1,
+					// 	limit: 10
+					// }
 				]
 			}
 		},
+		filters:{
+			geTel(tel){
+			    var reg = /^(\d{3})\d{4}(\d{4})$/;  
+			    return tel.replace(reg, "$1****$2");
+			}
+		},
 		onLoad() {
-			
+			this.getOrderList()
 		},
 		onShow() {
-			
 		},
 		onReachBottom() {
 			
@@ -126,14 +136,48 @@
 					});
 				},
 		methods: {
+			cancelSubscribe(id) {
+				cancelSubscribe({
+					order_id:id
+				}).then(res=> {
+					uni.showToast({
+						title: '取消成功',
+						duration: 2000
+					});
+					this.getOrderList('re')
+				})
+			},
 			changeCurrent(index) {
 				if(index == this.current) return;
 				this.current = index;
 				this.getOrderList()
 			},
-			getOrderList() {
+			getOrderList(type) {
 				let that = this;
 				let item = that.navList[that.current];
+				if(type == 're') {
+					item.list = []
+					item.page = 1
+					item.loading = 'more'
+					item.loaded = false
+				}
+				if(item.loading == 'noMore' || item.loading == 'loading') return;
+				item.loading = 'more'
+				subscribeList({
+					page:item.page,
+					limit:item.limit,
+					status: item.status
+				}).then(res => {
+					console.log(res.data.data);
+					let arr = res.data.data
+					item.list = item.list.concat(arr)
+					if(arr.length == item.limit) {
+						item.loading = 'more'
+					}else {
+						item.loading = 'noMore'
+					}
+					item.loaded = true
+				})
 			}
 		}
 	}
@@ -201,11 +245,11 @@
 		}
 		.item-yg {
 			width: 660rpx;
-			height: 122rpx;
+			// height: 122rpx;
 			background: #F5F5F5;
 			font-size: 24rpx;
 			color: #666666;
-			padding: 25rpx 0 0 20rpx;
+			padding: 25rpx 0 20rpx 20rpx;
 			margin-bottom: 24rpx;
 			text {
 				font-weight: bold;
@@ -246,4 +290,13 @@
 			}
 		}
 	}
+	.u-btn {
+		width: 144rpx;
+		line-height: 55rpx;
+		border-radius: 28rpx;
+		border: 1px solid #FF4C4C;
+		font-size: 26rpx;
+		color: #FF4C4C;
+		text-align: center;
+	}
 </style>

+ 268 - 0
pages/order/sh.vue

@@ -0,0 +1,268 @@
+<template>
+	<view class="content">
+		<view class="yt-list">
+			<view class="yt-list-cell b-b">
+				<text class="cell-tit clamp">订单编号</text>
+				<view class="desc">{{id}}</view>
+			</view>
+			<!-- <view class="yt-list-cell b-b">
+				<text class="cell-tit clamp">服务项目</text>
+				<view class="desc">{{type}}</view>
+			</view> -->
+			<view class="yt-list-cell b-b">
+				<text class="cell-tit clamp">上门时日期</text>
+				<view class="desc">{{day}}</view>
+			</view>
+			<view class="yt-list-cell b-b">
+				<text class="cell-tit clamp">上门时间</text>
+				<view class="desc">{{time}}</view>
+			</view>
+			<view class="yt-list-cell b-b">
+				<text class="cell-tit clamp">审核结果</text>
+				<picker @change="bindPickerChange" :range="typeArray" range-key="lable" mode="selector">
+					<view class="desc">{{stateName || '请选择审核意见'}}</view>
+				</picker>
+			</view>
+		</view>
+		<view class="bz">
+			<view class="tit">
+				备注说明<text>(选填)</text>
+			</view>
+			<textarea name="" id="bzinfo" cols="30" rows="10" placeholder="请输入备注说明" maxlength="140"
+				v-model="remark"></textarea>
+		</view>
+		<buuug7-simple-datetime-picker ref="myPicker" @submit="handleSubmit"
+			:time-hide="[true, true, true, true, true, false]" :time-label="['年', '月', '日', '时', '分']" />
+		<view class="base-btn" @click="gonow">
+			提交
+		</view>
+		<uni-popup ref="popupkf" type="bottom">
+			<smh-time-range @confrim="confrim" @cancel="cancel"></smh-time-range>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		getDefaultAddress,
+		createSubscribe,
+		agentOrderAuth
+	} from '@/api/user.js'
+
+
+	export default {
+		data() {
+			return {
+				id:'',
+				type: '',
+				day: '',
+				time: '',
+				state: "",
+				stateName: '',
+				remark:'',
+				typeArray: [
+					{
+						value: 1,
+						lable: '通过'
+					},
+					{
+						value: -1,
+						lable: '拒绝'
+					}
+				]
+			}
+		},
+		onLoad(opt) {
+			this.id = opt.id
+			this.type = opt.type
+			this.day = opt.day
+			this.time = opt.time
+		},
+		onShow() {},
+		onReachBottom() {
+
+		},
+		onReady() {
+
+		},
+		methods: {
+			bindPickerChange(e) {
+				console.log(e);
+				this.state = e.detail.value
+				this.stateName = this.typeArray[e.detail.value].lable
+			},
+			gonow() {
+			
+				if (!this.typeArray[this.state].value ) {
+					return this.$api.msg('请选择审核意见')
+				}
+				agentOrderAuth({
+					order_id: this.id,
+					status: this.typeArray[this.state].value,
+					remark: this.remark,
+					
+				}).then(res => {
+					console.log();
+					uni.showToast({
+						title: '提交成功',
+						duration: 2000
+					});
+					setTimeout(()=> {
+						uni.navigateBack()
+					},1500)
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.address-section {
+		padding: 30rpx 0;
+		background: #fff;
+		position: relative;
+		border-top: 1px solid $border-color-light;
+
+		.order-content {
+			min-height: 100rpx;
+			display: flex;
+			align-items: center;
+
+			.addAddress {
+				text-align: center;
+				width: 100%;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+
+				.iconaddition {
+					font-size: 55rpx;
+					line-height: 1;
+					border-radius: 100rpx;
+					margin-right: 20rpx;
+				}
+			}
+		}
+
+		.iconlocation {
+			flex-shrink: 0;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 90rpx;
+			color: #888;
+			font-size: 44rpx;
+		}
+
+		.cen {
+			display: flex;
+			flex-direction: column;
+			flex: 1;
+			font-size: 28rpx;
+			color: $font-color-dark;
+		}
+
+		.name {
+			font-size: 34rpx;
+			margin-right: 24rpx;
+		}
+
+		.address {
+			margin-top: 16rpx;
+			margin-right: 20rpx;
+			color: $font-color-light;
+		}
+
+		.icon-you {
+			font-size: 32rpx;
+			color: $font-color-light;
+			margin-right: 30rpx;
+		}
+
+		.a-bg {
+			position: absolute;
+			left: 0;
+			bottom: 0;
+			display: block;
+			width: 100%;
+			height: 5rpx;
+		}
+	}
+
+	.yt-list {
+		margin-top: 16rpx;
+		background: #fff;
+	}
+
+	.yt-list-cell {
+		display: flex;
+		align-items: center;
+		padding: 10rpx 30rpx 10rpx 40rpx;
+		line-height: 70rpx;
+		position: relative;
+
+		&.cell-hover {
+			background: #fafafa;
+		}
+
+		&.b-b:after {
+			left: 30rpx;
+		}
+
+		.cell-icon {
+			height: 32rpx;
+			width: 32rpx;
+			font-size: 22rpx;
+			color: #fff;
+			text-align: center;
+			line-height: 32rpx;
+			background: #f85e52;
+			border-radius: 4rpx;
+			margin-right: 12rpx;
+
+			&.hb {
+				background: #ffaa0e;
+			}
+
+			&.lpk {
+				background: #3ab54a;
+			}
+		}
+
+		.cell-more {
+			align-self: center;
+			font-size: 24rpx;
+			color: $font-color-light;
+			margin-left: 8rpx;
+			margin-right: -10rpx;
+		}
+
+		.cell-tit {
+			flex: 1;
+			font-size: 30rpx;
+			color: #222222;
+			margin-right: 10rpx;
+
+		}
+
+		.desc {
+			flex: 1;
+			min-width: 300rpx;
+			text-align: right;
+			font-size: $font-base;
+			color: $font-color-dark;
+		}
+	}
+
+	.bz {
+		padding: 30rpx;
+		margin-top: 20rpx;
+		background-color: #fff;
+		margin-bottom: 50rpx;
+	}
+
+	#bzinfo {
+		padding: 20rpx 10rpx 10rpx;
+		width: 100%;
+	}
+</style>

+ 265 - 0
pages/order/sht.vue

@@ -0,0 +1,265 @@
+<template>
+	<view class="content">
+		<view class="yt-list">
+			<view class="yt-list-cell b-b">
+				<text class="cell-tit clamp">订单编号</text>
+				<view class="desc">{{id}}</view>
+			</view>
+			<view class="yt-list-cell b-b">
+				<text class="cell-tit clamp">服务项目</text>
+				<view class="desc clamp">{{type}}</view>
+			</view>
+			<!-- <view class="yt-list-cell b-b">
+				<text class="cell-tit clamp">上门时日期</text>
+				<view class="desc">{{day}}</view>
+			</view>
+			<view class="yt-list-cell b-b">
+				<text class="cell-tit clamp">上门时间</text>
+				<view class="desc">{{time}}</view>
+			</view> -->
+			<view class="yt-list-cell b-b">
+				<text class="cell-tit clamp">审核结果</text>
+				<picker @change="bindPickerChange" :range="typeArray" range-key="lable" mode="selector">
+					<view class="desc">{{stateName || '请选择审核意见'}}</view>
+				</picker>
+			</view>
+		</view>
+		<view class="bz">
+			<view class="tit">
+				备注说明<text>(选填)</text>
+			</view>
+			<textarea name="" id="bzinfo" cols="30" rows="10" placeholder="请输入备注说明" maxlength="140"
+				v-model="remark"></textarea>
+		</view>
+		<buuug7-simple-datetime-picker ref="myPicker" @submit="handleSubmit"
+			:time-hide="[true, true, true, true, true, false]" :time-label="['年', '月', '日', '时', '分']" />
+		<view class="base-btn" @click="gonow">
+			提交
+		</view>
+		<uni-popup ref="popupkf" type="bottom">
+			<smh-time-range @confrim="confrim" @cancel="cancel"></smh-time-range>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		getDefaultAddress,
+		createSubscribe,
+		wuyouAgentOrderAuth,
+	} from '@/api/user.js'
+
+
+	export default {
+		data() {
+			return {
+				id:'',
+				type: '',
+				day: '',
+				time: '',
+				state: "",
+				stateName: '',
+				remark:'',
+				typeArray: [
+					{
+						value: 1,
+						lable: '通过'
+					},
+					{
+						value: -1,
+						lable: '拒绝'
+					}
+				]
+			}
+		},
+		onLoad(opt) {
+			this.id = opt.id
+			this.type = opt.type
+			this.day = opt.day
+			this.time = opt.time
+		},
+		onShow() {},
+		onReachBottom() {
+
+		},
+		onReady() {
+
+		},
+		methods: {
+			bindPickerChange(e) {
+				console.log(e);
+				this.state = e.detail.value
+				this.stateName = this.typeArray[e.detail.value].lable
+			},
+			gonow() {
+			
+				if (!this.typeArray[this.state].value ) {
+					return this.$api.msg('请选择审核意见')
+				}
+				wuyouAgentOrderAuth({
+					order_id: this.id,
+					status: this.typeArray[this.state].value,
+					remark: this.remark,
+					
+				}).then(res => {
+					console.log();
+					uni.showToast({
+						title: '提交成功',
+						duration: 2000
+					});
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.address-section {
+		padding: 30rpx 0;
+		background: #fff;
+		position: relative;
+		border-top: 1px solid $border-color-light;
+
+		.order-content {
+			min-height: 100rpx;
+			display: flex;
+			align-items: center;
+
+			.addAddress {
+				text-align: center;
+				width: 100%;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+
+				.iconaddition {
+					font-size: 55rpx;
+					line-height: 1;
+					border-radius: 100rpx;
+					margin-right: 20rpx;
+				}
+			}
+		}
+
+		.iconlocation {
+			flex-shrink: 0;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 90rpx;
+			color: #888;
+			font-size: 44rpx;
+		}
+
+		.cen {
+			display: flex;
+			flex-direction: column;
+			flex: 1;
+			font-size: 28rpx;
+			color: $font-color-dark;
+		}
+
+		.name {
+			font-size: 34rpx;
+			margin-right: 24rpx;
+		}
+
+		.address {
+			margin-top: 16rpx;
+			margin-right: 20rpx;
+			color: $font-color-light;
+		}
+
+		.icon-you {
+			font-size: 32rpx;
+			color: $font-color-light;
+			margin-right: 30rpx;
+		}
+
+		.a-bg {
+			position: absolute;
+			left: 0;
+			bottom: 0;
+			display: block;
+			width: 100%;
+			height: 5rpx;
+		}
+	}
+
+	.yt-list {
+		margin-top: 16rpx;
+		background: #fff;
+	}
+
+	.yt-list-cell {
+		display: flex;
+		align-items: center;
+		padding: 10rpx 30rpx 10rpx 40rpx;
+		line-height: 70rpx;
+		position: relative;
+
+		&.cell-hover {
+			background: #fafafa;
+		}
+
+		&.b-b:after {
+			left: 30rpx;
+		}
+
+		.cell-icon {
+			height: 32rpx;
+			width: 32rpx;
+			font-size: 22rpx;
+			color: #fff;
+			text-align: center;
+			line-height: 32rpx;
+			background: #f85e52;
+			border-radius: 4rpx;
+			margin-right: 12rpx;
+
+			&.hb {
+				background: #ffaa0e;
+			}
+
+			&.lpk {
+				background: #3ab54a;
+			}
+		}
+
+		.cell-more {
+			align-self: center;
+			font-size: 24rpx;
+			color: $font-color-light;
+			margin-left: 8rpx;
+			margin-right: -10rpx;
+		}
+
+		.cell-tit {
+			flex: 1;
+			font-size: 30rpx;
+			color: #222222;
+			margin-right: 10rpx;
+
+		}
+
+		.desc {
+			flex: 1;
+			min-width: 300rpx;
+			text-align: right;
+			font-size: $font-base;
+			color: $font-color-dark;
+		}
+	}
+
+	.bz {
+		padding: 30rpx;
+		margin-top: 20rpx;
+		background-color: #fff;
+		margin-bottom: 50rpx;
+	}
+
+	#bzinfo {
+		padding: 20rpx 10rpx 10rpx;
+		width: 100%;
+	}
+</style>

+ 237 - 0
pages/order/upPj.vue

@@ -0,0 +1,237 @@
+<template>
+	<view class="center">
+		<view class="upload" >
+			<view class="upload-title">上传支付截图</view>
+			
+			<view class="upload-main" v-for="(item,index) in pjList">
+				<image v-if="!item" class="upload-image" src="../../static/img/add.png" mode="" @click="upimg(index)"></image>
+				<image v-else :src="item" mode="" class="upload-image" @click="upimg(index)"></image>
+			</view>
+		</view>
+		<view class="bottom flex">
+			<view class="btn" @click="goUp()">立即上传</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { upload,upPj,wuyouUpPj } from '@/api/order.js';
+	import {
+		getCardInfo,
+		upEvaluation
+	} from '@/api/zero.js'
+	export default {
+		data() {
+			return {
+				tabCurrentIndex: 1,
+				info: {},
+				pz: '',
+				pzing: false,
+				pjList: [''],
+				type: 0
+			};
+		},
+		onLoad(opt) {
+			if (opt.id) {
+				this.id = opt.id
+			}
+			if(opt.type) {
+				this.type = opt.type
+			}
+		},
+		methods: {
+			lookImg(img) {
+				let arr = img.split(',')
+				uni.previewImage({
+					current: 0,
+					loop: false,
+					urls: arr,
+					indicator: 'default'
+				});
+			},
+			//上传凭证
+			goUp() {
+				if(this.pzing) {
+					return
+				}
+				// if(!this.pz) {
+				// 	return this.$api.msg('请上传支付截图')
+				// }
+				this.pzing = true
+				let upup;
+				if(this.type == 1) {
+					upup = wuyouUpPj
+				}else {
+					upup = upPj
+				}
+				upup({
+					order_id: this.id,
+					auth_up_file: this.pjList.filter(item => item !== '').join(',')
+				}).then(res => {
+					uni.showToast({
+						title:'上传成功',
+						duration:2000
+					});
+					this.pzing = false
+					setTimeout(()=> {
+						uni.navigateBack()
+					},1500)
+				}).catch(err => {
+					this.pzing = false
+				})
+			},
+			openAuth() {
+				this.$refs['WRITE_EXTERNAL_STORAGE'].open()
+			},
+			changeAuth() {
+				this.upimg()
+			},
+			upimg(index) {
+				upload({
+					file: '',
+					stype: 3
+				})
+					.then(e => {
+						console.log(e,'e')
+					this.pjList.splice(index,1,e[0].url)
+					if(this.pjList.length < 5) {
+						this.pjList.push('')
+					}
+					console.log(this.pjList)
+					})
+					.catch(e => {});
+			},
+			getInfo() {
+				getCardInfo({
+					id: this.id
+				}).then(res => {
+					// console.log(info)
+					this.info = res.data.result
+				})
+			},
+			open() {
+				this.$refs.popup.open();
+			},
+			close() {
+				this.$refs.popup.close();
+			},
+			nav(url) {
+				uni.navigateTo({
+					url
+				});
+			},
+			//swiper 切换
+			changeTab(e) {
+				this.tabCurrentIndex = e.target.current;
+			},
+			toBack() {
+				uni.navigateBack({});
+			},
+			change(num) {
+				this.tabCurrentIndex = num * 1;
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.center {
+		background: #f8f6f6;
+		min-height: 100%;
+		height: auto;
+	}
+
+
+
+	
+
+	.bottom {
+		position: fixed;
+		bottom: 0;
+		background: #ffffff;
+		width: 750rpx;
+		height: 146rpx;
+		justify-content: center;
+
+		.bottom-item {
+			margin-left: 30rpx;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+
+			.bi-image {
+				width: 38rpx;
+				height: 34rpx;
+			}
+
+			.bottom-font {
+				margin-top: 14rpx;
+				font-size: 24rpx;
+				font-weight: bold;
+				color: #333333;
+			}
+
+			.bottom-num {
+				line-height: 1;
+				font-size: 24rpx;
+				font-weight: bold;
+				color: #333333;
+			}
+		}
+
+		.shu {
+			margin-left: 20rpx;
+			width: 2px;
+			height: 74rpx;
+			background: #c0bfc0;
+		}
+
+		.btn {
+			margin-left: 40rpx;
+			width: 430rpx;
+			height: 80rpx;
+			background: $base-color;
+			border-radius: 20rpx;
+			text-align: center;
+			font-size: 34rpx;
+			font-weight: bold;
+			color: #ffffff;
+			line-height: 80rpx;
+		}
+	}
+	
+	
+	
+	.upload {
+		margin-top: 20rpx;
+		padding: 34rpx 30rpx 40rpx 30rpx;
+		background: #ffffff;
+	
+		.upload-title {
+			font-size: 30rpx;
+			font-weight: bold;
+			color: #333333;
+		}
+	
+		.upload-main {
+			padding-top: 32rpx;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			flex-direction: column;
+	
+			.upload-image {
+				width: 160rpx;
+				height: 160rpx;
+				border-radius: 10rpx;
+			}
+	
+			.upload-font {
+				margin-top: 24rpx;
+				font-size: 30rpx;
+				font-weight: bold;
+				color: #333333;
+			}
+		}
+	}
+</style>

+ 380 - 0
pages/order/wuyouAdmin.vue

@@ -0,0 +1,380 @@
+<template>
+	<view class="content">
+		<!-- <view class="search-wrap">
+			<view class="search flex">
+				<image src="../../static/icon/search.png" mode=""></image>
+				<input type="text" placeholder="请输入关键词搜索" confirm-type="search" @confirm="search" v-model="keys"/>
+			</view>
+		</view> -->
+		<view class="navbar">
+			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: current === index }" @click="changeCurrent(index)">{{ item.tit }}</view>
+		</view>
+		<view style="height: 20rpx;">
+		</view>
+		<swiper :current="current" class="swiper-box" :style="{'height': height}" @change="chanageC">
+			<swiper-item v-for="item in navList" >
+				<scroll-view scroll-y="true" :style="{'height': height}">
+					<empty v-if="item.loaded === true && item.list.length === 0"></empty>
+					<view class="order-item" v-for="items in item.list" >
+						<view class="item-top flex">
+							<view class="order-type">
+								预约订单
+							</view>
+							<view class="order-id">
+								订单编号:{{items.order_id}}
+							</view>
+							<view class="order-status">
+								{{items.status == 0?'待服务':(items.status == 1?'进行中':'已完成')}}
+							</view>
+						</view>
+						<view class="item-user flex">
+							<image src="../../static/icon/where.png" mode="" class="where"></image>
+							<view class="">
+								<view class="">
+									{{items.detail}}
+								</view>
+								<view class="phone">
+									{{items.real_name}} {{items.phone |geTel}}
+								</view>
+							</view>
+						</view>
+						<!-- <view class="item-user flex">
+							<image src="../../static/icon/time.png" mode="" class="where"></image>
+							<view class="">
+								<view class="">
+									{{items.add_date}} {{items.last_date}}
+								</view>
+							</view>
+						</view> -->
+						<view class="item-yg">
+							<view class="">
+								商品信息:<text>{{items.goods.name}}</text>
+							</view>
+							<!-- <view class="">
+								代理人:<text>李丹丹</text>
+							</view> -->
+						</view>
+						<view class="item-btm flex">
+							<view class="" v-if="item.status != 3">
+								下单时间:{{items.add_date}}
+							</view>
+							<!-- cashback_money -->
+							<view class="" v-if="item.status == 3">
+								返现金额:{{items.cashback_money}}
+							</view>
+							<view class="u-btn" @click="cancelSubscribe(items.order_id)" v-if="items.status == 1">
+								上传评价
+							</view>
+							<view class="u-btn" @click="pass(items)" v-if="items.status == 0">
+								订单确认
+							</view>
+							<view class="u-btn" @click="lookimg(items)" v-if="items.status == 2 || items.status == 3">
+								查看评价
+							</view>
+						</view>
+					</view>
+					<uni-load-more :status="item.loadingType" v-if="!(item.loaded === true && item.list.length === 0)"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+	import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+	import empty from '@/components/empty';
+	import { wuyouList,cancelSubscribe,agentOrder,agentOrderAuth,wuyouAgentOrderAuth} from '@/api/user.js'
+	export default {
+		components: {
+			empty,
+			uniLoadMore
+		},
+		data() {
+			return {
+				keys: '',
+				height: '',
+				current: 0,
+				navList: [
+					{
+						tit: '待确认',
+						status: 0,
+						list: [],
+						loadingType: 'more',
+						loaded: true,
+						page: 1,
+						limit: 10
+					},
+					{
+						tit: '待上传',
+						status: 1,
+						list: [],
+						loadingType: 'more',
+						loaded: false,
+						page: 1,
+						limit: 10
+					},
+					{
+						tit: '已上传',
+						status: 2,
+						list: [],
+						loadingType: 'more',
+						loaded: false,
+						page: 1,
+						limit: 10
+					},
+					{
+						tit: '已完成',
+						status:3,
+						list: [],
+						loadingType: 'more',
+						loaded: false,
+						page: 1,
+						limit: 10
+					}
+				]
+			}
+		},
+		onLoad() {
+			
+		},
+		onShow() {
+			this.getOrderList('re')
+		},
+		onReachBottom() {
+			
+		},
+		onReady(res) {
+					var that = this;
+					uni.getSystemInfo({
+						success: resu => {
+							const query = uni.createSelectorQuery();
+							query.select('.swiper-box').boundingClientRect();
+							query.exec(function(res) {
+								that.height = resu.windowHeight - res[0].top + 'px';
+							});
+						},
+						fail: res => {}
+					});
+				},
+		methods: {
+			lookimg(item) {
+				let arr = item.auth_up_file.split(',')
+				uni.previewImage({
+					current: 0,
+					loop: false,
+					urls: arr,
+					indicator: 'default'
+				});
+			},
+			search() {
+				this.getOrderList('re')
+			},
+			chanageC(e) {
+				this.current = e.detail.current;
+				this.getOrderList('tab')
+			},
+			changeCurrent(index) {
+				if(index == this.current) return;
+				this.current = index;
+			},
+			pass(item) {
+				// agentOrderAuth({
+				// 	id,
+				// 	status: 0
+				// }).then(res => {
+				// 	uni.showToast({
+				// 		title: '确认成功',
+				// 		duration: 2000
+				// 	});
+				// })
+				uni.navigateTo({
+					url: '/pages/order/sht?id=' + item.order_id + '&type=' + item.goods.name
+				})
+			},
+			cancelSubscribe(id) {
+				uni.navigateTo({
+					url: '/pages/order/upPj?id=' + id + '&type=1'
+				})
+			},
+			getOrderList(type) {
+				let that = this;
+				let item = that.navList[that.current];
+				if(type == 'tab' && item.loaded) return;
+				if(type == 're') {
+					item.loadingType = 'more'
+					item.loaded = false
+					item.page = 1
+					item.list = []
+				}
+				if(item.loadingType == 'loading' || item.loadingType == 'noMore') return;
+				item.loadingType = 'loading'
+				wuyouList({
+					page:item.page,
+					limit:item.limit,
+					status: item.status,
+					key: this.keys
+				}).then(res => {
+					let arr = res.data.data
+					item.list = item.list.concat(arr)
+					if(arr.length == item.limit) {
+						item.loadingType = 'more'
+					}else {
+						item.loadingType = 'noMore'
+					}
+					item.loaded = true
+				})
+				
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.navbar {
+		display: flex;
+		height: 40px;
+		padding: 0 5px;
+		background: #fff;
+		box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+		position: relative;
+		z-index: 10;
+		.nav-item {
+			flex: 1;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			height: 100%;
+			font-size: 15px;
+			color: $font-color-dark;
+			position: relative;
+	
+			&.current {
+				color: #000;
+				font-weight: bold;
+	
+				&:after {
+					content: '';
+					position: absolute;
+					left: 50%;
+					bottom: 0;
+					transform: translateX(-50%);
+					width: 44px;
+					height: 0;
+					border-bottom: 2px solid $base-color;
+				}
+			}
+		}
+	}
+	.swiper-box {
+	}
+	.order-item {
+		padding:0 20rpx;
+		background-color: #fff;
+		width: 700rpx;
+		margin: 0 auto 20rpx;
+		border-radius: 20rpx;
+		&:last-of-type {
+			margin-bottom: 0;
+		}
+		.item-top {
+			height: 92rpx;
+			border-bottom: #f5f5f5 3rpx solid;
+			font-weight: 500;
+			.order-type {
+				// padding: 10;
+				padding: 8rpx 10rpx;
+				
+				background: #ffeae5;
+				border-radius: 0rpx 10rpx 0rpx 10rpx;
+				font-size: 20rpx;
+				color: #FF4E00;
+			}
+			.order-id {
+				flex-grow: 1;
+				font-size: 22rpx;
+				color: #A3A8BB;
+				padding-left: 10rpx;
+			}
+			.order-status {
+				font-size: 26rpx;
+				color: #FF4E00;
+			}
+		}
+		.item-yg {
+			width: 660rpx;
+			background: #F5F5F5;
+			font-size: 24rpx;
+			color: #666666;
+			padding: 20rpx 0 20rpx 20rpx;
+			margin-bottom: 24rpx;
+			text {
+				font-weight: bold;
+				color: #333333;
+			}
+		}
+		.item-btm {
+			height: 92rpx;
+			font-size: 24rpx;
+			color: #A3A8BB;
+			border-top: #f5f5f5 3rpx solid;
+		}
+		.item-user {
+			justify-content: flex-start;
+			align-items: flex-start;
+			font-weight: bold;
+			font-size: 26rpx;
+			color: #000000;
+			margin: 30rpx 0;
+			.where {
+				width: 24rpx;
+				height: 28rpx;
+				margin-right: 23rpx;
+			}
+			.time {
+				width: 24rpx;
+				height: 24rpx;
+				
+			}
+			image {
+				flex-shrink: 0;
+				margin-top:5rpx;
+			}
+			.phone {
+				padding-top: 15rpx;
+				font-size: 23rpx;
+				color: #666666;
+			}
+		}
+	}
+	.search-wrap {
+		background-color: #ffffff;
+		padding: 20rpx 0;
+		.search {
+			width: 702rpx;
+			height: 64rpx;
+			background: #F1F1F1;
+			border-radius: 32rpx;
+			margin: auto;
+			padding: 0 30rpx;
+			image {
+				width: 31rpx;
+				height: 32rpx;
+				flex-shrink: 0;
+			}
+			input {
+				height: 100%;
+				flex-grow: 1;
+				padding-left: 18rpx;
+			}
+		}
+	}
+	.u-btn {
+		width: 144rpx;
+		line-height: 55rpx;
+		border-radius: 28rpx;
+		border: 1px solid #FF4C4C;
+		font-size: 26rpx;
+		color: #FF4C4C;
+		text-align: center;
+	}
+</style>

+ 5 - 12
pages/product/product.vue

@@ -14,11 +14,7 @@
 			<view class="title flex">
 				<view class="title-box">
 					<text class="price-tip">¥</text>
-					<text class="price"
-						v-if="userInfo && userInfo.level == 1">{{ goodsObjact.vip_repurchase*1 || ''}}</text>
-					<text class="price"
-						v-if="userInfo && userInfo.level == 2">{{ goodsObjact.agent_repurchase*1 || ''}}</text>
-					<text class="price" v-if="(!hasLogin || userInfo.level == 0)">{{ goodsObjact.price*1 }}</text>
+					<text class="price" >{{ goodsObjact.price*1 }}</text>
 					<text class="m-price"
 						v-if="goodsObjact.ot_price > goodsObjact.price">¥{{ goodsObjact.ot_price }}</text>
 					<!-- <text class="coupon-tip">7折</text> -->
@@ -73,7 +69,7 @@
 			<view class="action-btn-group">
 				<view class="buy-now">
 					<button type="primary" class=" action-btn no-border buy-now-btn" @click.stop="toggleSpec(2)"
-						v-if="goodsObjact.id && goodsObjact.is_level != 1">加入购物车</button>
+						v-if="goodsObjact.id && goodsObjact.is_housekeeping != 1 && goodsObjact.is_maintenance != 1">加入购物车</button>
 					<button type="primary" class=" action-btn no-border  add-cart-btn"
 						@click.stop="toggleSpec(1)">立即购买</button>
 				</view>
@@ -456,9 +452,8 @@
 					uniqueId: obj.uniqueId, //商品标签
 					new: '1', //商品是否新增加到购物车1为不加入0为加入
 					mer_id: obj.shopId,
-					is_pack: obj.goodsObjact.is_pack||'',
-					is_level: obj.goodsObjact.is_level
-					// type: 0,//0为余额支付  1为消费券支付 2为积分支付
+					is_housekeeping: obj.goodsObjact.is_housekeeping||'',
+					is_maintenance: obj.goodsObjact.is_maintenance || ''
 				};
 				if (obj.type == 2) {
 					data.new = 0;
@@ -493,9 +488,7 @@
 							// 跳转到支付页
 							uni.navigateTo({
 								url: '/pages/order/createOrder?id=' + data.cartId + '&goodsType=' + obj
-									.goodsType + '&is_pack=' + (obj.goodsObjact.is_pack||'') + '&affiliation_uid=' +
-									(obj.goodsObjact.affiliation_uid||'') + '&is_level=' + (obj.goodsObjact.is_level||'') +
-									'&is_integral=' + (obj.goodsObjact.max_integral||'')
+									.goodsType + '&is_housekeeping=' + (obj.goodsObjact.is_housekeeping||'0') + '&is_maintenance=' + (obj.goodsObjact.is_maintenance||'0')
 							});
 						}
 						if (obj.type == 2) {

+ 3 - 3
pages/public/login.vue

@@ -3,7 +3,7 @@
 		
 		<!-- <view class="loginTitle"><text>登录</text></view> -->
 		<view class="tit">
-			数字门店欢迎您
+			宏涤品牌欢迎您
 		</view>
 		<view class="tit1">
 			注册登录账号即可查看更多精彩资讯
@@ -23,7 +23,7 @@
 				<view class="login_img">
 					<image src="/static/icon/img03.png"></image>
 				</view>
-				<view class="login_name"><input class="uni-input" v-model="username" focus placeholder="请输入手机号" />
+				<view class="login_name"><input class="uni-input" v-model="username" placeholder="请输入手机号" />
 				</view>
 			</view>
 			<view class="login_input flex">
@@ -289,7 +289,7 @@
 					})
 					.then(function(e) {
 						uni.setStorageSync('token', e.data.token);
-						obj.$store.commit('hasLogin', true);
+						obj.$store.commit('login', true);
 						getUserInfo({}).then(e => {
 							obj.login();
 							// 保存返回用户数据

+ 36 - 136
pages/public/privacyAgreement.vue

@@ -1,150 +1,50 @@
 <template>
 	<view class="content">
-		<view class="" v-html="ysxy">
-			
+		<view class="" v-html="description">
 		</view>
-		<!-- <view class="title">
-			舒天下隐私协议
-		</view>
-		<view class="lineSt margin-t-40">
-			为舒天下提供相应服务之必须,您以自愿填写的方式提供注册所需的姓名、性别、电话以及其他类似的个人信息,则表示您已经了解并接受您个人信息的用途,同意舒天下为实现该特定目的使用您的个人信息。除此个人信息之外,其他任何您发送或提供给舒天下的材料、信息或文本(以下统称信息)均将被视为非保密和非专有的。<strong>舒天下</strong>对这些信息不承担任何义务。同时如果您提交时没有特别声明的,可视为同意舒天下及其授权人可以因商业或非商业的目的复制、透露、分发、合并和以其他方式利用这些信息和所有数据、图像、声音、文本及其他内容。您可阅读下面的隐私规则以了解更加详细的内容。
-		</view>
-		<view class="lineSt strongItem">
-			隐私规则
-		</view>
-		<view class="lineSt">
-			舒天下非常重视对您的个人隐私保护,我们将按照本规则收集、使用、共享和保护您的个人信息。在您使用舒天下的产品及服务前,请您仔细阅读并全面了解本规则。如果您是未成年人,您的监护人需要仔细阅读本规则并同意您依照本规则使用我们的产品或服务。对于本规则中与您的权益存在重大关系的条款,我们已将字体加粗以提示您注意。当您浏览、访问舒天下平台及/或使用舒天下的产品或服务时,即表示您已经同意我们按照本规则来收集、使用、共享和保护您的个人信息。
-		</view>
-		<view class="lineSt strongItem">
-			信息的收集范围
-		</view>
-		<view class="lineSt">
-			我们收集您的以下个人信息:
-		</view>
-		<view class="lineSt">
-			身份识别信息,包括但不限于您的姓名、身份证明、联系地址、电话号码、生物特征信息;
-		</view>
-		<view class="lineSt">
-			您所处的地理位置及目的地信息;
-		</view>
-		<view class="lineSt">
-			平台操作信息,包括但不限于您的IP地址、设备型号、设备标识符、操作系统版本信息;
-		</view>
-		<view class="lineSt">
-			行程信息,包括但不限于您的出发地、到达地、路线、途经地点及里程数信息;
-		</view>
-		<view class="lineSt">
-			支付信息,包括但不限于您的支付时间、支付金额、支付工具、银行账户及支付账户信息;
-		</view>
-		<view class="lineSt">
-			个人信用信息,包括但不限于关于您的任何信用状况、信用分、信用报告信息;
-		</view>
-		<view class="lineSt">
-			其他根据我们具体产品及服务的需要而收集的您的个人信息,包括但不限于您对我们及我们的产品或服务的意见、建议、您曾经使用或经常使用的移动应用软件以及使用场景和使用习惯等信息。
-		</view>
-		<view class="lineSt strongItem">
-			信息的收集方法
-		</view>
-		<view class="lineSt">
-			您授权我们通过以下方法收集您的个人信息:
-		</view>
-		<view class="lineSt">
-			我们将收集和储存在您浏览、访问舒天下平台及/或使用舒天下的产品或服务时主动向我们提供的信信息;
-		</view>
-		<view class="lineSt">
-			我们将收集和储存我们在向您提供舒天下的产品或服务的过程中记录的与您有关的信息;
-		</view>
-		<view class="lineSt">
-			我们将收集和储存您通过我们的客服人员及/或其他渠道主动提交或反馈的信息;
-		</view>
-		<view class="lineSt">
-			我们将向关联公司、商业合作伙伴及第三方独立资料来源,收集和储存其合法获得的与您有关的信息;
-		</view>
-		<view class="lineSt">
-			我们将向依法设立的征信机构査询您的相关信用信息,包括但不限于任何信用分、信用报告等。
-		</view>
-		<view class="lineSt strongItem">
-			信息的用途
-		</view>
-		<view class="lineSt">
-			您授权我们出于以下用途使用您的个人信息:
-		</view>
-		<view class="lineSt">
-			向您提供舒天下的产品及服务,并进行舒天下相关网站及APP的管理和优化;
-		</view>
-		<view class="lineSt">
-			提升和改善舒天下现有产品及服务的功能和质量,包括但不限于产品及服务内容的个性化定制及更新;
-		</view>
-		<view class="lineSt">
-			开展舒天下产品及服务相关的市场活动,向您推送最新的市场活动信息及优惠方案;
-		</view>
-		<view class="lineSt">
-			设计、开发、推广全新的产品及服务;
-		</view>
-		<view class="lineSt">
-			提高舒天下产品及服务安全性,包括但不限于身份验证、客户服务、安全防范、诈骗监测、存档和备份;
-		</view>
-		<view class="lineSt">
-			协助行政机关、司法机构等有权机关开展调査,并遵守适用法律法规及其他向有权机关承诺之义务;
-		</view>
-		<view class="lineSt">
-			在收集信息之时所通知您的用途以及与上述任何用途有关的其他用途;
-		</view>
-		<view class="lineSt">
-			此外,我们可能向您发送与上述用途有关的信息和通知,包括但不限于为保证服务完成所必须的验证码、使用产品或服务时所必要的推送通知、当前费用优惠及减免信息、关于舒天下产品或服务的新闻以及市场活动及优惠促销信息。
-		</view>
-		<view class="lineSt strongItem">
-			信息的共享
-		</view>
-		<view class="lineSt">
-			我们对您的个人信息承担保密义务,但您授权我们在下列情况下将您的信息与第三方共享:
-		</view>
-		<view class="lineSt">
-			为了提升我们的产品及服务质量或向您提供全新的产品及服务,我们会在关联公司内部共享您的相关信息,也可能将我们收集的信息提供给第三方用于分析和统计;
-		</view>
-		<view class="lineSt">
-			为了与第三方开展联合推广活动,我们可能与其共享开展活动所必需的以及在活动过程中产生的相关信息;
-		</view>
-		<view class="lineSt">
-			为了维护您的合法权益,在协助处理与您有关的纠纷或争议时,我们会向存在利害关系的第三方提供解决纠纷或争议所必需的信息;
-		</view>
-		<view class="lineSt">
-			根据法律法规的规定及商业惯例,我们需要接受第三方的审计或尽职调査时,可能向其提供您的相关信息;
-		</view>
-		<view class="lineSt">
-			根据法律法规的规定或行政机关、司法机构等有权机关要求,我们会向其提供您的相关信息;
-		</view>
-		<view class="lineSt">
-			其他经您同意或授权可以向第三方提供您的个人信息的情况。
-		</view>
-		<view class="lineSt">
-			信息的安全及保护措施
-		</view>
-		<view class="lineSt">
-			我们及我们的关联公司将采用严格的安全制度以及行业通行的安全技术和程序来确保您的个人信息不被丢失、泄露、毀损或滥用。但是,请您注意,任何安全系统都存在可能的及未知的风险。
-		</view>
-		<view class="lineSt">
-			您访问的第三方网站经营者、您使用的第三方服务提供者和通过我们获取您的个人信息的第三方可能有自己的隐私权保护规则以及获取您个人信息的方法和措施,这些第三方的隐私权保护规则、获取个人信息的方法和措施将不会受到我们的控制。虽然我们将与可能接触到您的个人信息的我们的合作方等第三方签署保密协议并尽合理的努力督促其履行保密义务,但我们无法保证第三方一定会按照我们的要求采取保密措施,我们亦不对第三方的行为及后果承担任何责任。
-		</view>
-		<view class="lineSt">
-			作为用户,您可根据您的意愿决定是否使用舒天下平台的服务,是否主动提供个人信息。同时,您可以查看您提供给我们的个人信息及行程信息。如果您希望删除或更正您的个人信息,请联系我们的客服人员。
-		</view>
-		<view class="lineSt">
-			如果我们监测到您将舒天下的产品及服务以及相关信息用于欺诈或非法目的,我们将会采取相应措施,包括但不限于中止或终止向您提供任何产品或服务。
-		</view> -->
 	</view>
 </template>
 
 <script>
-	import {getYs } from '@/utils/ysxy.js'
+	import {
+		getDetail,
+	} from '@/api/index.js';
 	export default {
 		data() {
 			return {
-				ysxy: ''
+				description: ''
+			}
+		},
+		onLoad(opt) {
+			if(opt.type) {
+				this.type = opt.type
+				uni.setNavigationBarTitle({
+					title: '用户协议'
+				})
+			}else {
+				uni.setNavigationBarTitle({
+					title: '隐私协议'
+				})
 			}
 		},
 		onShow() {
-			this.ysxy = getYs()
+			this.loadData()
+		},
+		methods: {
+			loadData() {
+				let obj = this;
+				let id = 1;
+				if(obj.type == 1) {
+					id = 2
+				}
+				getDetail(id).then(function(e) {
+					obj.list = e.data;
+					if (obj.list.content != null) {
+						obj.description = obj.list.content.replace(/<img/g,
+							"<img style='max-width:100%;height:auto;'");
+					} //小程序商品详情图超出屏幕问题
+				});
+			}
 		}
 	}
 </script>
@@ -167,8 +67,8 @@
 	}
 
 	.strongItem {
-		margin: 20rpx 0 ;
+		margin: 20rpx 0;
 		font-weight: bold;
 		font-size: $font-lg;
 	}
-</style>
+</style>

+ 16 - 6
pages/public/register.vue

@@ -7,7 +7,7 @@
 				
 			</view> -->
 			<view class="tit">
-				数字门店欢迎您
+				宏涤品牌欢迎您
 			</view>
 			<view class="tit1">
 				注册登录账号即可查看更多精彩资讯
@@ -17,7 +17,11 @@
 		<view class="login_text">
 			<view class="login_input flex">
 				<view class="login_img"><image src="/static/icon/img03.png"></image></view>
-				<view class="login_name"><input class="uni-input" v-model="phone" focus placeholder="请输入手机号" /></view>
+				<view class="login_name"><input class="uni-input" v-model="phone"  placeholder="请输入手机号" /></view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/img03.png"></image></view>
+				<view class="login_name"><input class="uni-input" v-model="nickname"  placeholder="请输入昵称" /></view>
 			</view>
 			<view class="login_input flex">
 				<view class="login_img"><image src="/static/icon/img04.png"></image></view>
@@ -31,13 +35,13 @@
 				<view class="login_img"><image src="/static/icon/img07.png"></image></view>
 				<view class="login_name"><input class="uni-input" type="text" v-model="invitation"  placeholder="请输入邀请码" /></view>
 			</view>
-			<!-- <view class="login_input flex">
+			<view class="login_input flex">
 				<view class="login_img"><image src="/static/icon/img06.png"></image></view>
 				<view class="login_name flex">
-					<input class="uni-input width" v-model="code" focus placeholder="请输入验证码" />
+					<input class="uni-input width" v-model="code"  placeholder="请输入验证码" />
 					<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
 				</view>
-			</view> -->
+			</view>
 			<view><button type="green" @click="register" class="uni-button uni-button-green">注册账号</button></view>
 			<view><button class="uni-button uni-button-green uni-button-green-plain" type="green" plain="true" hover-class="none" @click="login">返回登录</button></view>
 		</view>
@@ -52,9 +56,10 @@ export default {
 			password: '', //密码
 			repassword: '',
 			invitation: '', //邀请码
-			code: '123456', //验证码
+			code: '', //验证码
 			time: '', //保存倒计时对象
 			countDown: 0 ,//倒计时
+			nickname: ''
 		};
 	},
 	onLoad(opt) {
@@ -80,6 +85,10 @@ export default {
 				obj.$api.msg('请输入电话号码');
 				return;
 			}
+			if (obj.nickname == '') {
+				obj.$api.msg('请输入昵称');
+				return;
+			}
 			if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(this.phone)) {
 				obj.$api.msg('请输入正确的手机号');
 				return;
@@ -105,6 +114,7 @@ export default {
 				return;
 			}
 			register({
+				nickname: obj.nickname,
 				account: obj.phone, //账号
 				captcha: obj.code, //验证码
 				password: obj.password ,//密码

+ 9 - 4
pages/set/address.vue

@@ -7,7 +7,7 @@
 					<text class="mobile">{{ item.phone }}</text>
 				</view>
 				<view class="u-box">
-					<text class="address">{{ item.province + item.city + item.district }} {{ item.detail }}</text>
+					<text class="address">{{ item.province + item.city + item.district + (item.own || '')}} {{ item.detail }}</text>
 				</view>
 			</view>
 			<view class="buttom">
@@ -95,9 +95,14 @@ export default {
 		},
 		// 添加地址
 		addAddress(type, item) {
-			uni.navigateTo({
-				url: `/pages/set/addressManage?type=${type}&data=${JSON.stringify(item)}`
-			});
+			let url=`/pages/set/addressManage?type=${type}`
+						if(item&&item.id){
+							url += `&id=${item.id}`;
+						}
+						
+						uni.navigateTo({
+							url
+						});
 		},
 		//添加或修改成功之后回调
 		refreshList() {

+ 416 - 180
pages/set/addressManage.vue

@@ -2,31 +2,38 @@
 	<view class="content">
 		<view class="row b-b">
 			<text class="tit">联系人</text>
-			<input class="input" type="text" v-model="addressData.name" placeholder="收货人姓名" placeholder-class="placeholder" />
+			<input class="input" type="text" v-model="addressData.name" placeholder="收货人姓名"
+				placeholder-class="placeholder" />
 		</view>
 		<view class="row b-b">
 			<text class="tit">手机号</text>
-			<input class="input" type="number" v-model="addressData.mobile" placeholder="收货人手机号码" placeholder-class="placeholder" />
+			<input class="input" type="number" v-model="addressData.mobile" placeholder="收货人手机号码"
+				placeholder-class="placeholder" />
 		</view>
 		<view class="row b-b">
-			<text class="tit">地址</text>
-			<pickerAddress class="input" @change="onCityClick">{{addressDetail||'请选择地址'}}</pickerAddress>
-			<text class="iconfont iconlocation"></text>
+			<text class="tit">省市区</text>
+			<picker mode="multiSelector" :range="areaJs" range-key="name" :value="addressIndex"
+				@columnchange="onCityClick" @change="changeArea">
+				<view v-if="addressDetail">{{ addressDetail }}</view>
+				<view v-else class="font-color-gray">请选择省市区</view>
+			</picker>
+		</view>
+		<view class="row b-b" v-if="showl">
+			<text class="tit">乡/镇/街道</text>
+			<!-- range-key -->
+			<picker :range="array" @change="changeCity" mode="selector" range-key="name" :value="addressDetailCitys">
+				<view v-if="addressDetailCity && addressDetailCity.name">{{ addressDetailCity.name}}</view>
+				<view v-else class="font-color-gray">请选择乡/镇/街道</view>
+			</picker>
 		</view>
 		<view class="row b-b">
 			<text class="tit">门牌号</text>
-			<input class="input" type="text" v-model="addressData.area" placeholder="楼号、门牌" placeholder-class="placeholder" />
+			<input class="input" type="text" v-model="addressData.area" placeholder="楼号、门牌"
+				placeholder-class="placeholder" />
 		</view>
-
 		<uni-list class="margin-t-20">
-			<uni-list-item
-				title="设为默认"
-				:switch-checked="addressData.default"
-				:show-switch="true"
-				:show-arrow="false"
-				switch-color="#5dbc7c"
-				@switchChange="switchChange"
-			></uni-list-item>
+			<uni-list-item title="设为默认" :switch-checked="addressData.default" :show-switch="true" :show-arrow="false"
+				switch-color="#ff4c4c" @switchChange="switchChange"></uni-list-item>
 		</uni-list>
 
 		<button class="add-btn" @click="confirm">提交</button>
@@ -34,186 +41,415 @@
 </template>
 
 <script>
-import uniList from '@/components/uni-list/uni-list.vue';
-import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
-import uniPopup from '@/components/uni-popup/uni-popup.vue';
-import  pickerAddress from '@/components/wangding-pickerAddress/wangding-pickerAddress.vue';
-import { addressEdit } from '@/api/user.js';
-export default {
-	components: {
-		uniList,
-		uniListItem,
-		pickerAddress,
-		uniPopup
-	},
-	data() {
-		return {
-			addressDetail: '',
-			addressData: {
-				name: '',
-				mobile: '',
-				address: {
-					province: '',
-					city: '',
-					district: ''
-				},
-				area: '',
-				default: false
-			}
-		};
-	},
-	onLoad(option) {
-		let title = '新增收货地址';
-		if (option.type === 'edit') {
-			title = '编辑收货地址';
-			let data = JSON.parse(option.data);
-			console.log(data);
-
-			this.addressData = {
-				name: data.real_name,
-				mobile: data.phone,
-				address: {
-					province: data.province,
-					city: data.city,
-					district: data.district
+	import uniList from '@/components/uni-list/uni-list.vue';
+	import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
+	import uniPopup from '@/components/uni-popup/uni-popup.vue';
+	import {
+		addressEdit
+	} from '@/api/user.js';
+	import {
+		getAddressArea,
+		getAddressCity,
+		getAddressDetail
+	} from '@/api/set.js';
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	export default {
+		components: {
+			uniList,
+			uniListItem,
+			uniPopup
+		},
+		data() {
+			return {
+				array: [],
+				showl: false, //设置是否隐藏村镇选择
+				addressIndex: [0, 0, 0], //当前选中的省市区
+				addressIndexCity: {name: ''}, //当前选中的村镇
+				addressDetail: '', //省市区名称
+				addressDetailCity: {}, //村镇名称
+				addressDetailCitys:0,
+				addressData: {
+					name: '',
+					mobile: '',
+					area: '',
+					default: false,
+					id: ''
 				},
-				area: data.detail,
-				default: data.is_default == 1,
-				id: data.id
+				type: 'add', //判断当前加载类型
+				loadCityp: false //判断是否已经初次加载过数据
 			};
-			this.addressDetail = data.province + data.city + data.district;
-		}
-		this.manageType = option.type;
-		uni.setNavigationBarTitle({
-			title
-		});
-	},
-	methods: {
-		// 选中城市切换
-		onCityClick({data}) {
-			let address = this.addressData.address;
-			address.province = data[0];
-			address.city = data[1];
-			address.district = data[2];
-			this.addressDetail = data.join('');
 		},
-		//地图选择地址
-		chooseLocation() {
-			uni.chooseLocation({
-				success: data => {
-					console.log(data);
-					this.addressData.addressName = data.name;
-					this.addressData.address = data.name;
+		computed: {
+			...mapState('address', ['area', 'city']),
+			bindPickerChange(e) {
+				console.log(e);
+			},
+			// 省市区动态渲染列表
+			areaJs() {
+				if (this.area.length > 0) {
+					const index1 = this.addressIndex[0];
+					console.log(this.addressIndex, this.area[index1], this.area[index1].child[this.addressIndex[1]]);
+					return [this.area, this.area[index1].child, this.area[index1].child[this.addressIndex[1]].child];
+				}
+			},
+			// 村镇切换渲染
+			cityJs() {
+				if (this.city.length > 0) {
+					// const index1 = this.addressIndexCity[0];
+					// return [this.city];
+					console.log(this.city,'this.city');
+					return this.city
 				}
-			});
-		},
-		// 设置是否为默认地址
-		switchChange(e) {
-			this.addressData.default = e.value;
-		},
-		//提交
-		confirm() {
-			let obj = this;
-			let data = this.addressData;
-			if (!data.name) {
-				this.$api.msg('请填写收货人姓名');
-				return;
-			}
-			if (!data.mobile) {
-				this.$api.msg('请输入手机号');
-				return;
 			}
-			if (!data.address) {
-				this.$api.msg('请在地图选择所在位置');
-				return;
+		},
+		onLoad(option) {
+			let title = '新增收货地址';
+			this.type = option.type;
+			if (this.type === 'edit') {
+				title = '编辑收货地址';
+				this.getAddressDetail(option.id);
+				// this.addressDetail = data.province + data.city + data.district;
 			}
-			if (!data.area) {
-				this.$api.msg('请填写门牌号信息');
-				return;
+			if (this.type === 'add') {
+				console.log('');
+				this.loadCityp = true;
+				this.init();
 			}
-
-			//this.$api.prePage()获取上一页实例,可直接调用上页所有数据和方法,在App.vue定义
-			addressEdit({
-				real_name: data.name,
-				phone: data.mobile,
-				address: {
-					province: data.address.province,
-					city: data.address.city,
-					district: data.address.district
-				},
-				detail: data.area,
-				is_default: data.default,
-				id: data.id||"",
-				type:1
-			}).then(function(e) {
-				obj.$api.prePage().refreshList();
-				uni.showToast({
-					title:'提交成功',
-					duration:2000
-				});
-				setTimeout(function() {
-					uni.navigateBack();
-				}, 800);
+			this.manageType = option.type;
+			uni.setNavigationBarTitle({
+				title
 			});
+		},
+		methods: {
+			...mapMutations('address', ['setArea', 'setCity']),
+			// 初始化
+			init() {
+				if (this.area.length <= 0) {
+					// 获取省市区信息
+					this.getAddressArea();
+				} else {
+					if (this.type == 'edit' && !this.loadCityp) {
+						this.changeArea();
+					}
+				}
+			},
+			// 获取地址详情
+			getAddressDetail(id) {
+				getAddressDetail({}, id)
+					.then(e => {
+						let address = this.addressData;
+						let data = e.data;
+						address.name = data.real_name; //保存用户姓名
+						address.mobile = data.phone; //保存用户手机号
+						address.area = data.detail; //保存用户详细地址
+						address.default = data.is_default == 1 ? true : false; //保存是否默认地址
+						address.id = data.id;
+						// 开始加载村镇信息
+						let arr = e.data.address_arr.split(',');
+						let ar1 = [];
+						let ar2 = [];
+						for (var i = 0; i < 4; i++) {
+							if (i < 3) {
+								ar1.push(arr[i]);
+							}
+							if (i >= 3) {
+								this.addressDetailCitys = arr[i]
+								// 判断是否有值
+								// if (arr[i]) {
+								// 	ar2.push(arr[i]);
+								// } else {
+								// 	ar2.push(0);
+								// }
+							}
+						}
+						this.addressIndex = ar1;
+						// this.addressIndexCity = ar2;
+						// 开始初始化
+						this.init();
+					})
+					.catch(e => {
+						console.log(e);
+					});
+			},
+			// 获取省市区信息
+			getAddressArea() {
+				getAddressArea().then(e => {
+					this.setArea(e.data);
+					// this.getAddressCity(e.data[0].child[0].child[0].city_id);
+					// 判断是否为修改
+					if (this.type == 'edit' && !this.loadCityp) {
+						console.log('初始化数据');
+						this.changeArea();
+					}
+				});
+			},
+			// 获取村镇信息
+			getAddressCity(id) {
+				// uni.showLoading({
+				// 	title: '村镇数据加载中....',
+				// 	mask: true
+				// });
+				getAddressCity({
+						pid: id
+					})
+					.then(e => {
+						this.array = e.data
+						this.setCity(e.data);
+						if (e.data.length > 0) {
+							this.showl = true
+						} else {
+							this.showl = false
+						}
+						if (!this.loadCityp && this.type == 'edit') {
+							this.loadCityp = true;
+							this.changeCity({
+								detail: {
+									value: this.addressDetailCitys
+								}
+							});
+						}
+					})
+					.catch(e => {
+						console.log(e);
+						// uni.hideLoading();
+					});
+			},
+			//省市区确认后村镇数据更新
+			changeArea() {
+				if (this.area.length > 0) {
+					const index0 = this.addressIndex[0];
+					const index1 = this.addressIndex[1];
+					const index2 = this.addressIndex[2];
+					this.addressDetail = this.areaJs[0][index0].name + this.areaJs[1][index1].name + this.areaJs[2][index2]
+						.name;
+					// 判断是否已经加载过修改
+					if (this.loadCityp) {
+						// 初始化选中的村镇
+						this.addressDetailCity = {};
+						this.addressDetailCitys = ''
+					}
+					this.getAddressCity(this.areaJs[2][index2].city_id);
+				} else {
+					this.addressDetail = '';
+				}
+			},
+			// 村镇切换
+			changeCity(e) {
+				console.log(e);
+				this.addressDetailCity = this.array[e.detail.value]
+				this.addressDetailCitys = e.detail.value
+				console.log(this.addressDetailCity,'this.addressDetailCity');
+				// if (this.city.length > 0) {
+				// 	const index0 = this.addressIndexCity[0];
+				// 	const index1 = this.addressIndexCity[1];
+				// 	// this.addressDetailCity = this.cityJs[0][index0].name + this.cityJs[1][index1].name;
+				// } else {
+				// 	this.addressDetailCity = '';
+				// }
+			},
+			// 选中省市区切换
+			onCityClick(data) {
+				// 采用map防止直接修改无法触发数组set事件
+				this.addressIndex = this.addressIndex.map((e, ind) => {
+					if (data.detail.column < ind) {
+						e = 0;
+					}
+					if (ind == data.detail.column) {
+						e = data.detail.value;
+					}
+					return e;
+				});
+			},
+			// 选中村镇切换
+			onCityChange(data) {
+				// 采用map防止直接修改无法触发数组set事件
+				this.addressIndexCity = this.addressIndexCity.map((e, ind) => {
+					if (data.detail.column < ind) {
+						e = 0;
+					}
+					if (ind == data.detail.column) {
+						e = data.detail.value;
+					}
+					return e;
+				});
+			},
+			//地图选择地址
+			chooseLocation() {
+				uni.chooseLocation({
+					success: data => {
+						this.addressData.addressName = data.name;
+						this.addressData.address = data.name;
+					}
+				});
+			},
+			// 设置是否为默认地址
+			switchChange(e) {
+				this.addressData.default = e.value;
+			},
+			//提交
+			confirm() {
+				let obj = this;
+				let data = this.addressData;
+				if (!data.name) {
+					this.$api.msg('请填写收货人姓名');
+					return;
+				}
+				if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(data.mobile)) {
+					this.$api.msg('请输入正确的手机号码');
+					return;
+				}
+				if (!data.area) {
+					this.$api.msg('请填写门牌号信息');
+					return;
+				}
+				if (!this.addressDetail) {
+					this.$api.msg('请选择省市区');
+					return;
+				}
+				if(this.array.length > 0 && !this.addressDetailCity.city_id) {
+					this.$api.msg('请选择乡/镇/街道');
+					return;
+				}
+				// 数组
+				let address = [];
+				let arrObj = [];
+				// 保存省市区信息
+				this.areaJs.forEach((e, ind) => {
+					arrObj.push(this.addressIndex[ind]);
+					address.push({
+						city_id: e[this.addressIndex[ind]].city_id,
+						name: e[this.addressIndex[ind]].name
+					});
+				});
+				console.log(arrObj,'arrObj');
+				if(this.addressDetailCity && this.addressDetailCity.id) {
+					address.push({
+						city_id:this.addressDetailCity.city_id,
+						name: this.addressDetailCity.name
+					})
+					arrObj.push(this.addressDetailCitys)
+				}
+				
+				// 保存村镇信息
+				// if (this.cityJs && this.cityJs.length > 0) {
+				// 	this.cityJs.forEach((e, ind) => {
+				// 		arrObj.push(this.addressIndexCity[ind]);
+				// 		address.push({
+				// 			city_id: e[this.addressIndexCity[ind]].city_id,
+				// 			name: e[this.addressIndexCity[ind]].name
+				// 		});
+				// 	});
+				// }
+				// if(this.addressDetailCity.id) {
+				// 	address.push({
+				// 		city_id: e[this.addressIndex[ind]].city_id,
+				// 		name: e[this.addressIndex[ind]].name
+				// 	});
+				// }
+				console.log(address);
+				uni.showLoading({
+					title: '提交中....',
+					mask: true
+				});
+				addressEdit({
+						real_name: data.name,
+						phone: data.mobile,
+						address: {
+							province: address[0].name,
+							city: address[1].name,
+							district: address[2].name,
+							street: address[3] ? address[3].name : '', //街道
+							// village: address[4] ? address[4].name : '', //村
+							city_id: address[address.length - 1].city_id //保存id
+						},
+						address_arr: arrObj,
+						detail: data.area,
+						is_default: data.default,
+						id: data.id || '',
+						type: 0
+					})
+					.then(function(e) {
+						uni.hideLoading();
+						uni.showToast({
+							title: '提交成功',
+							duration: 2000
+						});
+						obj.$api.prePage().refreshList();
+						setTimeout(function() {
+							uni.navigateBack();
+						}, 800);
+					})
+					.catch(e => {
+						uni.hideLoading();
+					});
+			}
 		}
-	}
-};
+	};
 </script>
 
 <style lang="scss">
-page {
-	background: $page-color-base;
-	padding-top: 16rpx;
-}
+	page {
+		background: $page-color-base;
+		padding-top: 16rpx;
+	}
 
-.row {
-	display: flex;
-	align-items: center;
-	position: relative;
-	padding: 0 30rpx;
-	height: 110rpx;
-	background: #fff;
+	.row {
+		display: flex;
+		align-items: center;
+		position: relative;
+		padding: 0 30rpx;
+		height: 110rpx;
+		background: #fff;
 
-	.tit {
-		flex-shrink: 0;
-		width: 120rpx;
-		font-size: 30rpx;
-		color: $font-color-dark;
-	}
-	.input {
-		flex: 1;
-		font-size: 30rpx;
-		color: $font-color-dark;
-	}
-	.iconlocation {
-		font-size: 36rpx;
-		color: $font-color-light;
+		.tit {
+			flex-shrink: 0;
+			width: 120rpx;
+			font-size: 30rpx;
+			color: $font-color-dark;
+		}
+
+		.input {
+			flex: 1;
+			font-size: 30rpx;
+			color: $font-color-dark;
+		}
+
+		.iconlocation {
+			font-size: 36rpx;
+			color: $font-color-light;
+		}
 	}
-}
-.default-row {
-	margin-top: 16rpx;
-	.tit {
-		flex: 1;
+
+	.default-row {
+		margin-top: 16rpx;
+
+		.tit {
+			flex: 1;
+		}
+
+		switch {
+			transform: translateX(16rpx) scale(0.9);
+		}
 	}
-	switch {
-		transform: translateX(16rpx) scale(0.9);
+
+	.add-btn {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		width: 690rpx;
+		height: 80rpx;
+		margin: 60rpx auto;
+		font-size: $font-lg;
+		color: #fff;
+		background-color: $base-color;
+		border-radius: 10rpx;
+		// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
 	}
-}
-.add-btn {
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	width: 690rpx;
-	height: 80rpx;
-	margin: 60rpx auto;
-	font-size: $font-lg;
-	color: #fff;
-	background-color: $base-color;
-	border-radius: 10rpx;
-	// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
-}
 
-.alert-box {
-	background-color: #ffffff;
-}
-</style>
+	.alert-box {
+		background-color: #ffffff;
+	}
+</style>

+ 4 - 2
pages/set/set.vue

@@ -2,8 +2,10 @@
 	<view class="container">
 		<uni-list>
 		    <uni-list-item title="个人资料" @click="navTo('/pages/set/userinfo')" ></uni-list-item>
-			<!-- <uni-list-item title="修改密码" @click="navTo('/pages/set/password')" ></uni-list-item> -->
-		    <!-- <uni-list-item title="实名认证" @click="navTo('/pages/set/phone')" ></uni-list-item> -->
+			<uni-list-item title="修改密码" @click="navTo('/pages/set/password')" ></uni-list-item>
+			<uni-list-item title="隐私协议" @click="navTo('/pages/public/privacyAgreement')" ></uni-list-item>
+			<uni-list-item title="用户协议" @click="navTo('/pages/public/privacyAgreement?type=1')" ></uni-list-item>
+		    <uni-list-item title="注销账号" @click="navTo('/pages/set/zxzh')" ></uni-list-item>
 		    <!-- <uni-list-item title="收货地址" @click="navTo('/pages/set/address')" ></uni-list-item> -->
 		</uni-list>
 		<!-- <uni-list class="margin-t-20">

+ 53 - 17
pages/set/userinfo.vue

@@ -2,39 +2,46 @@
 	<view class="content">
 		<view class="row1">
 			<text class="tit">头像</text>
-			<view class="background-img" @click="imgsub">
+			<!-- #ifdef APP -->
+			<view class="background-img" @click="openAuth">
 				<image class="background-img" v-model="userInfo.avatar" :src="userInfo.avatar" mode="aspectFill">
 				</image>
 			</view>
+			<!-- #endif -->
+			<!-- #ifndef APP -->
+			<view class="background-img" @click="imgsub(3)">
+				<image class="background-img" v-model="userInfo.avatar" :src="userInfo.avatar" mode="aspectFill">
+				</image>
+			</view>
+			<!-- #endif -->
 		</view>
 		<view class="row">
 			<text class="tit">昵称</text>
-			<input class="input" type="text" v-model="userInfo.nickname" placeholder-class="placeholder"  />
+			<input class="input" type="text" v-model="userInfo.nickname" placeholder-class="placeholder" />
 		</view>
 		<view class="row">
 			<text class="tit">ID</text>
 			<input class="input" type="text" disabled="true" v-model="userInfo.uid" placeholder-class="placeholder" />
 		</view>
-		<view class="row" v-if="userInfo.tjr">
+		<!-- <view class="row" v-if="userInfo.tjr">
 			<text class="tit">推荐人</text>
 			<input class="input" type="text" disabled="true" v-model="userInfo.tjr" placeholder-class="placeholder" />
-		</view>
+		</view> -->
 		<view class="add-btn tj" @click="confirm">提交</view>
+		<!-- #ifndef APP -->
 		<view class="add-btn" @click="cancel">退出</view>
-		<!-- <uni-popup ref="popup" type="center">
-			<view class="psw-wrapper">
-				<view class="psw-title">请输入自己的账户</view>
-				<input type="text" v-model="password" class="psw-ipt" />
-				<view class="psw-btn">
-					<text @click.stop="qx">取消</text>
-					<text class="psw-qd" @click.stop="pswQd">确定</text>
-				</view>
-			</view>
-		</uni-popup> -->
+		<!-- #endif -->
+		<!-- #ifdef APP -->
+		<yk-authpup ref="WRITE_EXTERNAL_STORAGE" type="top" @changeAuth="changeAuth"
+			permissionID="WRITE_EXTERNAL_STORAGE"></yk-authpup>
+		<yk-authpup ref="CAMERA" type="top" @changeAuth="changeAuths" permissionID="CAMERA"></yk-authpup>
+		<!-- #endif -->
+
 	</view>
 </template>
 
 <script>
+	import ykAuthpup from "@/components/yk-authpup/yk-authpup";
 	import {
 		mapState,
 		mapMutations
@@ -47,6 +54,9 @@
 		logout
 	} from '@/api/set.js';
 	export default {
+		components: {
+			ykAuthpup
+		},
 		data() {
 			return {
 				show: false,
@@ -61,10 +71,36 @@
 		},
 		methods: {
 			...mapMutations('user', ['logout']),
-			imgsub() {
+			openAuth() {
+				let that = this
+				uni.showActionSheet({
+					itemList: ['拍摄', '从相册选择'],
+					success: function(res) {
+						// console.log('选中了第' + (res.tapIndex + 1) + '个按钮');
+						if (res.tapIndex == 1) {
+							that.$refs['WRITE_EXTERNAL_STORAGE'].open()
+						} else {
+							that.$refs['CAMERA'].open()
+						}
+					},
+					fail: function(res) {
+						console.log(res.errMsg);
+					}
+				});
+			},
+			changeAuth() {
+				console.log('zheli');
+				this.imgsub(1)
+			},
+			changeAuths() {
+				console.log('nali');
+				this.imgsub(0)
+			},
+			imgsub(index) {
 				console.log('上传头像')
 				upload({
-					filename: ''
+					filename: '',
+					stype: index
 				}).then(data => {
 					console.log("data", data);
 					this.userInfo.avatar = data[0].url;
@@ -195,7 +231,7 @@
 		display: flex;
 		align-items: center;
 		justify-content: center;
-		margin:40rpx auto 30rpx;
+		margin: 40rpx auto 30rpx;
 		width: 560rpx;
 		height: 80rpx;
 		background: #fff;

+ 216 - 0
pages/set/zxzh.vue

@@ -0,0 +1,216 @@
+<template>
+    <view class="">
+       在您提交账号注销申请前,您应当阅读并遵守《账号注销协议》(以下简称:本协议)。如果您对本协议的条款有疑问,请向客服咨询。
+       <br />
+       重要提示
+       <br />
+       
+       1、除非您已充分阅读、完全理解并接受本协议所有条款,否则,**请您不要发起账号注销流程、操作。**您单击“同意”或“下一步”,或您开始进行任何账号注销的流程、操作,或者以其他任何明示或者默示方式表示接受本协议的,均视为您已阅读并同意签署本协议。本协议产生法律效力,成为对双方均具有约束力的法律文件。 请您务必审慎阅读、充分理解各条款内容,特别是免除或者限制责任的条款、对您权利进行限制的条款、约定争议解决方式和司法管辖的条款(如第四条相关约定)等。限制、免责条款或者其他涉及您重大权益的条款可能以加粗、加下划线等形式提示您重点注意。
+       <br />
+       
+       2、在您同意并接受本协议之前,您应已经同意并接受《服务协议》并注册网站账号。
+       <br />
+       3、账号注销操作是不可恢复的操作。同时,账号注销后,您将无法再登录相应账号使用相关服务,除按照相关法律规定应该保留的相关信息或数据外,在您注销账号项下存储、使用等的全部信息、数据等将会被永久删除,请您谨慎进行账号注销操作。
+       <br />
+       4、在您的账号下,如还有未使用的代金券、余额、已经购买但尚未使用完的服务等尚未使用的权益(以下统称:尚未使用的权益),请您先处理完毕上述尚未使用的权益后再提交注销申请。如果您在准备注销的账号下还有尚未使用的权益的情况下发起相应账号注销流程,将视为您主动放弃相应权益,相应尚未使用的权益在您发起注销流程后将作废并删除。由于账号注销给您造成的任何后果或损失,您应自行承担。
+       <br />
+       5、账号注销并不代表您在该账号注销前的所有账号行为和相关责任得到豁免或减轻。账号注销后,您仍然需为您注销账号前该账号项下的全部行为、事项承担全部责任。
+       <br />
+       <view class="string">
+             一、关于本协议
+       </view>
+       <br />
+       1.1 本协议是账号的合法持有人,就您注销之前依据《服务协议》注册的网站账号所达成的一致条款。
+       <br />
+       1.2 在您提交账号注销申请后,将对您及账号的相关情况进行相应核查,仅在通过核查确认您符合账号注销条件的情况下,您的账号方能注销成功。
+       
+       <br />
+       <br />
+       <view class="string">
+          二、账号注销的流程 
+       </view>
+       
+       <br />
+       
+       2.1 本协议项下的“账号注销”是指由您主动发起的,旨在实现注销您的账号及终止其下所有您使用的相关服务、存在的合同及其他关系、完全关闭您原先注册并合法持有的特定账号等的操作。
+       
+       <br />
+       
+       2.2 账号注销为不可逆操作,自您正式提交申请之时起,将核实您账号的相关情况,如核查通过,账号将被注销。
+       
+       <br />
+       
+       2.3 如果您需要注销账号,您的账号需同时满足以下条件:
+       
+       <br />
+       
+       (1)账号内无未完成的订单、服务;
+       <br />
+       
+       
+       (2)账号无任何未完成的投诉举报或被投诉举报;
+       
+       <br />
+       
+       (3)账号中无尚未使用的权益;
+       
+       <br />
+       
+       (4)您不存在任何拖欠或者未缴纳的任何款项;
+       
+       <br />
+       
+       (5)您的账号与其他第三方网络应用(例如:网站、APP)或其他账号的绑定关系或对外授权已经解除,或者您能确信不解除该等绑定关系或不撤回该等对外授权不会对您本人或任何第三方造成任何不利影响;
+       
+       <br />
+       
+       (6)您账号下所有的用户(包括协作者、子用户、消息接收人)和 API 密钥等已经全部删除;
+       <br />
+       
+       
+       (7)您账号下的所有您有权的数据、信息等均已迁出及妥善备份,或您完全放弃保留、找回该等数据的权利;
+       
+       <br />
+       
+       (8)您提交账号注销申请,并非为了躲避正在或即将发生的投诉、纠纷、诉讼,或规避主管部门的监管,或绕开法律法规的相关规定等不良意图;
+       
+       
+       <br />
+       (9)账号不存在其他依照法律法规的要求应当履行而尚未履行的义务等情形;
+       
+       <br />
+       
+       (10)已经妥善处理了其他任何可能影响您权益的事项。
+       
+       <br />
+       
+       核查过程中,如果发现您账号不能同时满足上述条件的,您的账号注销申请将被驳回。如果您希望继续注销,需根据驳回原因处理完成相关事项后,重新发起账号注销申请。
+       
+       <br />
+       2.4 账号注销期间,如果发现您的账号涉及争议、纠纷,包括但不限于有涉及投诉、诉讼、仲裁或政府监管等事项的可能性或者相应事项已经发生,将单方终止您的账号注销申请而无需另行得到您的同意。
+       
+       <br />
+       <br />
+       <view class="string">
+           三、账号注销的后果
+       </view>
+       
+       <br />
+       
+       3.1 您知悉并同意,账号完成注销流程后将产生包括但不限于以下后果:
+       
+       <br />
+       
+       3.1.1 您原先拥有的账号将被收回,您无权再使用原有的账号。您将无法再次以该账号登录网站、授权访问的第三方网络服务等;
+       <br />
+       
+       
+       3.1.2 您将无法以该账号访问控制面板;
+       
+       <br />
+       
+       3.1.3 您将无法进行依赖于该账号的权限操作;
+       
+       <br />
+       
+       3.1.4 您将无法找回该账号下您曾经存储、使用等的全部信息、数据等,按照相关法律规定应该保留的相关信息或数据除外。
+       
+       <br />
+       
+       3.1.5 其他可能对您的权益造成损害或给您造成损失的后果。
+       <br />
+       <br />
+       <view class="string">
+           四、附则
+       </view>
+       
+       <br />
+       
+       4.1 本协议的签订地为浙江省台州市椒江区。
+       
+       <br />
+       
+       4.2 本协议的成立、生效、履行、解释及纠纷解决,适用中华人民共和国大陆地区法律(不包括冲突法)。
+       
+       
+       <br />
+       4.3 本协议是《服务协议》的不可分割的组成部分,与其构成统一整体。我司有权在必要时修改本协议,您可以在相关页面中查阅最新的本协议。您的任何使用本功能的行为,即视为您已经阅读并同意本协议及相应更新。
+       
+       
+       <br />
+       4.4 因本协议产生之争议,双方应首先协商解决;双方未能以诚意协商解决的,任何一方均应将纠纷或争议提交浙江省杭州市滨江区人民法院管辖。
+       
+       
+       <br />
+       4.5 本协议的拟定、解释均以中文为准。除双方另有约定外,任何有关本协议的翻译不得作为解释本协议或判定双方当事人意图之依据。
+        <view style="width: 80%;margin: 20px auto;">
+            <view class="button1" style="text-align: center" @tap="gozx()">
+                注销账户
+            </view>
+        
+        </view>
+        <view class="" style="height: 40rpx;">
+            
+        </view>
+    </view>
+</template>
+
+<script>
+    export default {
+        data() {
+            return {
+                isZxing: uni.getStorageSync('iszxing') || ''
+            }
+        },
+        methods: {
+            gozx() {
+                let zxing = uni.getStorageSync('iszxing') || ''
+                if(zxing) {
+                    uni.showModal({
+                        title:'提醒',
+                        content:'您已申请注销账号,请等待审核。',
+                        showCancel:false
+                    })
+                }else {
+                    uni.showModal({
+                        title:'温馨提醒',
+                        content:'您确认注销账号,注销后将不可恢复!',
+                        complete(res) {
+                            console.log(res);
+                            if(res.confirm) {
+                                uni.setStorageSync('iszxing',true)
+                                uni.showModal({
+                                    title:'提醒',
+                                    content:'您已申请注销账号,请等待审核。',
+                                     showCancel:false
+                                })
+                            }
+                        }
+                    })
+                }
+            }
+        }
+    }
+</script>
+
+<style lang="scss">
+    .string {
+        font-weight: bold;
+    }
+    view {
+        text-indent: 2ch;
+        white-space: wrap;
+    }
+    .button1 {
+        height: 40px;
+        line-height: 40px;
+        border: 0px;
+        border-radius: 20px;
+        color: #fff;
+        background: $base-color;
+        width: 100%;
+        font-size: 16px;
+        font-weight: 600;
+        text-align: center;
+    }
+</style>

+ 33 - 24
pages/user/admin.vue

@@ -5,52 +5,52 @@
 			<view class="userInfo">
 				<view class="userInfo-box">
 					<view class="userInfo-img">
-						<image class="portrait" :src="image || '../../static/error/missing-face.png'"></image>
+						<image class="portrait" :src="userInfo.avatar || '../../static/error/missing-face.png'"></image>
 					</view>
 					<view class="userInfo-xinxi">
 						<view class="title clamp">
-							李丹丹
+							{{userInfo.nickname}}
 						</view>
-						<view class="phone">
+						<!-- <view class="phone">
 							好评总数:10251
-						</view>
+						</view> -->
 					</view>
-					<view class="balance">当前余额:200</view>
+					<view class="balance" @click="navTo('/pages/user/award')">当前佣金:{{userInfo.brokerage_price}}</view>
 				</view>
-				<view class="user-money flex">
-					<view class="user-money-item" @click="navTo('/pages/user/yue')">
-						<view class="user-money-num">{{ userInfo.now_money*1 || 0 }}</view>
+				<view class="user-money flex" v-if="userInfo && agent && agent.count">
+					<view class="user-money-item" >
+						<view class="user-money-num">{{ agent.count.cashback_sum*1 || 0 }}</view>
 						<view class="user-money-font"> 累计金额</view>
 					</view>
 					<view class="user-xian"></view>
-					<view class="user-money-item" @click="navTo('/pages/user/award')">
-						<view class="user-money-num">{{ userInfo.brokerage_price*1 || 0 }}</view>
+					<view class="user-money-item" >
+						<view class="user-money-num">{{ agent.count.status_count_0*1 || 0 }}</view>
 						<view class="user-money-font">待处理单数</view>
 					</view>
 					<view class="user-xian"></view>
-					<view class="user-money-item" @click="navTo('/pages/user/sz')">
-						<view class="user-money-num">{{ userInfo.integral*1 || 0 }}</view>
+					<view class="user-money-item" >
+						<view class="user-money-num">{{ agent.count.status_count_2*1 || 0 }}</view>
 						<view class="user-money-font">完成单数</view>
 					</view>
 				</view>
 			</view>
 			<view class="userInfoList">
-				<view class="userInfoList-bottom" @click="navTo('/pages/user/yue')">
+				<view class="userInfoList-bottom" @click="navTo('/pages/order/orderAdmin')">
+					<image src="../../static/icon/admin3.png" mode="" class="bottom">
+						家政维修
+				</view>
+				<view class="userInfoList-bottom" @click="navTo('/pages/order/wuyouAdmin')">
+					<image src="../../static/icon/admin4.png" mode="" class="bottom">
+						洗衣订单
+				</view>
+				<view class="userInfoList-bottom" @click="navTo('/pages/user/award')">
 					<image src="../../static/icon/admin1.png" mode="" class="bottom">
-						余额管理
+						佣金管理
 				</view>
 				<view class="userInfoList-bottom" @click="navTo('/pages/user/spread')">
 					<image src="../../static/icon/admin2.png" mode="" class="bottom">
 						我的推广
 				</view>
-				<view class="userInfoList-bottom" @click="navTo('/pages/order/orderAdmin')">
-					<image src="../../static/icon/admin3.png" mode="" class="bottom">
-						订单管理
-				</view>
-				<view class="userInfoList-bottom" @click="navTo('/pages/merchant/commodity')">
-					<image src="../../static/icon/admin4.png" mode="" class="bottom">
-						服务评价
-				</view>
 				<view class="userInfoList-bottom" @click="navTo('/pages/user/team')">
 					<image src="../../static/icon/admin5.png" mode="" class="bottom">
 						我的团队
@@ -65,6 +65,7 @@
 		mapState,
 		mapMutations
 	} from 'vuex';
+	import {agentInfo} from '@/api/user.js'
 	export default {
 		data() {
 			return {
@@ -73,11 +74,12 @@
 				name: '',
 				phone: '',
 				address: '',
-				code: ''
+				code: '',
+				agent:{}
 			};
 		},
 		onLoad() {
-
+			this.agentInfo()
 		},
 		computed: {
 			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
@@ -89,6 +91,12 @@
 					url
 				});
 			},
+			agentInfo() {
+				agentInfo().then(res=> {
+					console.log(res);
+					this.agent = res.data
+				})
+			}
 		}
 	};
 </script>
@@ -141,6 +149,7 @@
 					border-radius: 50%;
 					width: 100%;
 					height: 100%;
+					background: #fff;
 				}
 			}
 

+ 4 - 3
pages/user/award.vue

@@ -3,16 +3,16 @@
 		<view class="content-money">
 			<view class="status_bar"><!-- 这里是状态栏 --></view>
 			<view class="body-title">
-				<view class="goback-box" @click="toBack"><image class="goback" src="../../static/icon/fanhui.png" mode=""></image></view>
+				<!-- <view class="goback-box" @click="toBack"><image class="goback" src="../../static/icon/fanhui.png" mode=""></image></view> -->
 				<view class="header">我的佣金</view>
 			</view>
-			<view class="content-bg"><image src="../../static/img/tg-bg.png" mode=""></image></view>
+			<view class="content-bg"><image src="../../static/img/user-ng.png" mode=""></image></view>
 			<view class="money-box">
 				<view class="money">{{ yj || 0 }}</view>
 				<view>我的佣金</view>
 			</view>
 			<view class="moneybtn-box">
-				<view class="money-btn" @click="navto('/pages/user/yjzye?type=1')">佣金转余额</view>
+				<view class="money-btn" @click="navto('/pages/user/yjzye?type=1')"></view>
 				<view class="money-btn"  @click="navto('/pages/user/withdrawal')">佣金提现</view>
 			</view>
 		</view>
@@ -217,6 +217,7 @@ export default {
 </script>
 
 <style lang="scss">
+	$base-color: #ffffff;
 page {
 	background: #f1f1f1;
 	height: 100%;

+ 25 - 1
pages/user/shareQrCode.vue

@@ -46,6 +46,11 @@
 			>保存图片</view
 		>
 		<!-- #endif -->
+		<view
+			class="keep"
+			@click="baocun"
+			>保存图片</view
+		>
 	</view>
 </template>
 
@@ -87,7 +92,26 @@
 				// #endif
 				console.log(this.poster);
 			},
-
+			baocun() {
+				let that = this;
+				uni.saveImageToPhotosAlbum({
+				    filePath: that.shareList[0].wap_poster,
+				    success: function () {
+				        console.log('图片保存成功');
+						uni.showToast({
+							title:  '保存成功',
+							duration: 2000,
+							icon: "none",
+						});
+				        // 成功处理逻辑
+				    },
+				    fail: function (err) {
+				        console.log('图片保存失败', err);
+						that.$api.msg('图片保存失败')
+				        // 失败处理逻辑
+				    }
+				});
+			},
 			// 保存海报
 			savePosterPath: function () {
 				let that = this;

+ 3 - 2
pages/user/sqdl.vue

@@ -200,10 +200,11 @@
 			...mapState('user', ['userInfo'])
 		},
 		methods: {
-			upimg(type) {
+			upimg(type,stype = 3) {
 				let that = this
 				upload({
-					file: ''
+					file: '',
+					stype:stype
 				})
 					.then(e => {
 						console.log(e,'e')

+ 64 - 66
pages/user/team.vue

@@ -1,13 +1,13 @@
 <template>
 	<view class="content">
-		<view class="status_bar"></view>
+		<!-- <view class="status_bar"></view> -->
 		<view class="top-wrap flex">
 			<view class="item">
 				<view class="">
 					下级人数
 				</view>
 				<view class="val">
-					90
+					{{info.area_taem_count}}
 				</view>
 			</view>
 			<view class="item">
@@ -15,7 +15,7 @@
 					团队业绩
 				</view>
 				<view class="val">
-					¥900
+					¥{{info.area_taem_cashback_money || '0.00'}}
 				</view>
 			</view>
 		</view>
@@ -36,55 +36,49 @@
 				<view>我的团队</view>
 			</view>
 		</view> -->
-		<swiper :current="tabCurrentIndex" :style="{ height: maxheight }" class="swiper-box" duration="300"
-			@change="changeTab" disable-touch>
-			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
-				<scroll-view class="list-scroll-content" :style="{ height: maxheight }" scroll-y
-					@scrolltolower="loadData">
-					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
-
-					<view v-for="(item, index) in tabItem.orderList" :key="index" class="order-item">
-						<view class="top flex">
-							<view class="name clamp">
-								{{item.nickname}}
-							</view>
-							<image src="https://stx2.qiniu1314.com/static/img/level0.png" mode="" class="gp"></image>
-							<view class="tc">
-							</view>
-							<image src="../../static/icon/call.png" mode="" class="call"></image>
-						</view>
-						<view class="info">
-							<view class="info-item flex">
-								<view class="">
-									待处理单数:<text>5</text>
-								</view>
-								<view class="">
-									待处理单数:<text>5</text>
-								</view>
-								<view class="">
-									待处理单数:<text>5</text>
-								</view>
-							</view>
-							<view class="info-val flex">
-								<view class="">
-									累计金额:<text>¥5000</text>
-								</view>
-								<view class="more">
-									查看明细<image src="../../static/index/in-go.png" mode=""></image>
-								</view>
-							</view>
-						</view>
-						
+		<view v-for="(item, index) in info.area_taem_lst" :key="index" class="order-item">
+			<view class="top flex">
+				<view class="name clamp">
+					{{item.agent_user.nickname}}
+				</view>
+				<!-- <view class="name clamp">
+					{{item.agent_user.phone}}
+				</view> -->
+				<!-- <image src="https://stx2.qiniu1314.com/static/img/level0.png" mode="" class="gp"></image> -->
+				<view class="tc">
+					{{item.name}}
+				</view>
+				<image src="../../static/icon/call.png" mode="" class="call" @click="makeCall(item.agent_user.phone)" v-if="item.agent_user.phone"></image>
+			</view>
+			<view class="info">
+				<view class="info-item flex">
+					<view class="">
+						待处理单数:<text>{{item.sub_not_count + item.wy_not_count}}</text>
+					</view>
+					<view class="">
+						完成单数:<text>{{item.wy_ok_count + item.sub_ok_count}}</text>
 					</view>
-					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
-				</scroll-view>
-			</swiper-item>
-		</swiper>
+					<view class="">
+						<!-- 待处理单数:<text>5</text> -->
+					</view>
+				</view>
+				<view class="info-val flex">
+					<view class="">
+						累计金额:<text>¥{{item.wy_cashback_money + item.wy_cashback_money}}</text>
+					</view>
+					<!-- <view class="more">
+						查看明细<image src="../../static/index/in-go.png" mode=""></image>
+					</view> -->
+				</view>
+			</view>
+			
+		</view>
 	</view>
 </template>
 <script>
 	import {
 		myspread,
+		agentInfo,
 		getLevelList
 	} from '@/api/user.js';
 	import empty from '@/components/empty';
@@ -98,20 +92,7 @@
 			empty,
 			uniLoadMore
 		},
-		onReady(res) {
-			var _this = this;
-			uni.getSystemInfo({
-				success: resu => {
-					const query = uni.createSelectorQuery();
-					query.select('.swiper-box').boundingClientRect();
-					query.exec(function(res) {
-						_this.maxheight = resu.windowHeight - res[0].top + 'px';
-						console.log('打印页面的剩余高度', _this.height);
-					});
-				},
-				fail: res => {}
-			});
-		},
+		
 		data() {
 			return {
 				// 头部图高度
@@ -140,7 +121,12 @@
 				order: '',
 				zt_order: '',
 				jt_order: '',
-				listList: []
+				listList: [],
+				info: {
+					area_taem_lst: [],
+					area_taem_count: 0,
+					area_taem_cashback_money: 0
+				}
 			};
 		},
 		computed: {
@@ -149,13 +135,25 @@
 		},
 		onLoad(options) {},
 		onShow() {
-			this.loadData();
-			getLevelList().then(res => {
-				console.log(res);
-				this.listList = res.data.list
-			})
+			this.agentInfo()
+			// this.loadData();
+			// getLevelList().then(res => {
+			// 	console.log(res);
+			// 	this.listList = res.data.list
+			// })
 		},
 		methods: {
+			makeCall(phone) {
+				uni.makePhoneCall({
+					phoneNumber: phone + ''
+				})
+			},
+			agentInfo() {
+				agentInfo().then(res => {
+					console.log(res.data);
+					this.info = res.data
+				})
+			},
 			showLevel(val) {
 				let data = this.listList.find(item => item.grade == val.level)
 				if(data) {

+ 36 - 10
pages/user/user.vue

@@ -11,10 +11,13 @@
 				<image class="avatar" src="../../static/error/missing-face.png" mode="" v-else
 					@click="navTo('/pages/set/userinfo')"></image>
 				<view class="user-name-id">
-					<view class="user-name clamp2">{{ userInfo.phone || '游客'}}</view>
-					<!-- <view class="user-id" v-if="userInfo && userInfo.uid">
-						UID: {{userInfo.uid}}
-					</view> -->
+					<view class="user-name clamp2">{{ userInfo.nickname || '游客'}}</view>
+					<view class="user-id" v-if="userInfo && userInfo.uid">
+						{{userInfo.area_agent_name}}
+					</view>
+					<view class="user-id" v-if="userInfo && userInfo.uid" @click="navTo('/pages/user/award')">
+						当前佣金:{{userInfo.brokerage_price || '0'}}
+					</view>
 					<view class="user-shop flex" v-if="userInfo.uid">
 						<view class="user-shop-item" v-if="userInfo.level> 0 " style="width: 180rpx;">
 							<image class="user-shop-icon" :src="showLevel(userInfo.level)" mode=""
@@ -28,7 +31,7 @@
 			</view>
 		</view>
 		<!--  -->
-		<view class="dl-wrap flex">
+		<view class="dl-wrap flex" v-if="userInfo && userInfo.area_agent">
 			<!-- <image src="" mode=""></image> -->
 			<image src="../../static/icon/zuan.png" mode=""></image>
 			<view class="tit">
@@ -64,6 +67,13 @@
 				</view>
 			</view>
 		</view>
+		<!-- <view class="user-list flex" @click="navTo('/pages/user/award')">
+			<image src="../../static/icon/admin1.png" mode="" class="left-img"></image>
+			<view class="">
+				我的佣金
+			</view>
+			<image src="../../static/icon/back.png" mode="" class="right-img"></image>
+		</view> -->
 		<view class="user-list flex" @click="navTo('/pages/user/shareQrCode')">
 			<image src="../../static/icon/u1.png" mode="" class="left-img"></image>
 			<view class="">
@@ -71,6 +81,13 @@
 			</view>
 			<image src="../../static/icon/back.png" mode="" class="right-img"></image>
 		</view>
+		<view class="user-list flex" @click="navTo('/pages/user/spread')">
+			<image src="../../static/icon/admin2.png" mode="" class="left-img"></image>
+			<view class="">
+				我的推广
+			</view>
+			<image src="../../static/icon/back.png" mode="" class="right-img"></image>
+		</view>
 		<view class="user-list flex" @click="navTo('/pages/set/address')">
 			<image src="../../static/icon/u2.png" mode="" class="left-img"></image>
 			<view class="">
@@ -85,6 +102,7 @@
 			</view>
 			<image src="../../static/icon/back.png" mode="" class="right-img"></image>
 		</view>
+		<!-- #ifndef APP -->
 		<view class="user-list flex" @click="navTo('/pages/set/userinfo')">
 			<image src="../../static/icon/u6.png" mode="" class="left-img"></image>
 			<view class="">
@@ -92,6 +110,16 @@
 			</view>
 			<image src="../../static/icon/back.png" mode="" class="right-img"></image>
 		</view>
+		<!-- #endif -->
+		<!-- #ifdef APP -->
+		<view class="user-list flex" @click="navTo('/pages/set/set')">
+			<image src="../../static/icon/u6.png" mode="" class="left-img"></image>
+			<view class="">
+				设置
+			</view>
+			<image src="../../static/icon/back.png" mode="" class="right-img"></image>
+		</view>
+		<!-- #endif -->
 		<view class="" style="height: 20rpx;">
 
 		</view>
@@ -602,14 +630,13 @@
 				width: 132rpx;
 				height: 132rpx;
 				background-color: #eee;
-				margin-right: 18rpx;
 			}
 
 			.user-uid {
 				padding-top: 10rpx;
 				font-size: 24rpx;
 				font-weight: 500;
-				color: #666666;
+				color: #fff;
 			}
 		}
 
@@ -618,17 +645,16 @@
 			text-align: center;
 			width: 300rpx;
 			margin-top: 14rpx;
-			// font-size: 30rpx;
 			font-size: $ltl-size-big;
-			font-family: PingFang SC;
 			font-weight: bold;
-			color: #333333;
+			color: #fff;
 		}
 
 		.user-id {
 			text-align: center;
 			font-size: 28rpx;
 			padding: 10rpx 0;
+			color: #fff;
 		}
 
 		.user-shop {

+ 1 - 1
pages/user/withdrawal.vue

@@ -76,7 +76,7 @@
 				</label> -->
 			</radio-group>
 		</view>
-		<template v-if="yy_model == 0">
+		<template >
 			<view class="row b-b" v-if="type == 'weixin'">
 				<text class="tit">微信账号</text>
 				<input class="input" type="text" v-model="weixin_no" placeholder="请输入微信账号"

BIN
static/icon/logo1.png


BIN
static/icon/logoo.png


+ 4 - 2
store/index.js

@@ -1,6 +1,7 @@
 import Vue from 'vue'
 import Vuex from 'vuex'
 import user from './model/user'
+import address from './model/address'
 Vue.use(Vuex)
 
 const store = new Vuex.Store({
@@ -10,7 +11,7 @@ const store = new Vuex.Store({
 		baseURL:window.location.protocol + "//" + window.location.host,//请求地址配置 
 		// #endif
 		// #ifndef H5
-		baseURL:'https://stx2.qiniu1314.com',//请求地址配置
+		baseURL:'https://hdxy.zjxiyi888.cn',//请求地址配置
 		// #endif
 		urlFile:'/index',//项目部署所在文件夹
 		userInfo: {}, //登录信息
@@ -31,7 +32,8 @@ const store = new Vuex.Store({
 		}
 	},
 	modules:{
-		user
+		user,
+		address
 	},
 	actions: {}
 })

+ 25 - 0
store/model/address.js

@@ -0,0 +1,25 @@
+let state = {
+	area:[],//省市区数据
+	city:[]//村镇数据
+}
+
+let mutations = {
+	// 设置省市区
+	setArea(state,data){
+		state.area = data;
+	},
+	// 设置村镇
+	setCity(state,data){
+		state.city = data;
+	}
+	
+	
+}
+let getters = {}
+
+export default {
+	namespaced: true,
+	state,
+	mutations,
+	getters
+}

+ 6 - 0
uni_modules/smh-time-range/changelog.md

@@ -0,0 +1,6 @@
+## 1.0.3(2021-06-10)
+修改了由接口返回的数据,然后渲染数据无效的bug
+## 1.0.2(2021-05-21)
+修改了一些样式的小bug
+## 1.0.1(2021-05-21)
+更新了属性和时间的详细说明

+ 152 - 0
uni_modules/smh-time-range/components/smh-time-range/smh-time-range.vue

@@ -0,0 +1,152 @@
+<template>
+	<view class="time1">
+		<view class="top flex justify-between align-center">
+			<text @tap="cancel">取消</text>
+			<text @tap="confirm">确定</text>
+		</view>
+		<picker-view class="picker" :value="value" @change="getime" indicator-style="height:30px;">
+			<picker-view-column>
+				<view class="hours" style="line-height:30px; text-align: center;" v-for="(item,index) in hoursList"
+					:key="index">{{item}}</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="minutes" style="line-height:30px; text-align: center;" v-for="(item,index) in minutes"
+					:key="index">{{item}}</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view style="line-height:30px; text-align: center;">-</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="hours" style="line-height:30px; text-align: center;" v-for="(item,index) in hoursList"
+					:key="index">{{item}}</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="minutes" style="line-height:30px; text-align: center;" v-for="(item,index) in minutes"
+					:key="index">{{item}}</view>
+			</picker-view-column>
+		</picker-view>
+	</view>
+</template>
+<script>
+	let minutes = []
+	for (let i = 0; i <= 59; i++) {
+		if (i < 10) {
+			i = "0" + i
+		}
+		minutes.push(i)
+	}
+	export default {
+		props: {
+			time: {
+				type: Array,
+				default () {
+					return [8, 0, 0, 9, 0];
+				}
+			}
+		},
+		watch: {
+			time: function() {
+				this.value = this.time
+			}
+		},
+		created() {
+
+		},
+		data() {
+			return {
+				value: this.time, //默认结束开始时间
+				hoursList: ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15',
+					'16', '17', '18', '19', '20', '21', '22', '23'
+				],
+				minutes,
+			}
+		},
+		methods: {
+			confirm() {
+				let time = this.setVal(this.value[0]) + ":" + this.setVal(this.value[1])  + "-" + this.setVal(this.value[3]) + ":" + this.setVal(this.value[4])
+				this.$emit("confrim", {
+					time: time
+				})
+			},
+			cancel() {
+				let time = this.setVal(this.value[0]) + ":" + this.setVal(this.value[1]) + "-" + this.setVal(this.value[3]) + ":" + this.setVal(this.value[4])
+				this.$emit("cancel", {
+					time: time
+				})
+			},
+			setVal(v) {
+				v = Number(v)
+				return v < 10 ? `0${v}` : v
+			},
+			getime(e) {
+				let val = e.detail.value
+				this.value[0] = this.hoursList[val[0]]
+				this.value[1] = this.minutes[val[1]]
+				this.value[2] = val[2]
+				this.value[3] = this.hoursList[val[3]]
+				this.value[4] = this.minutes[val[4]]
+
+			},
+		}
+	}
+</script>
+<style lang="scss">
+	.time1 {
+		width: 100%;
+		margin: 0 auto;
+		background-color: #FFFFFF;
+		color: #000;
+		height: 450rpx;
+
+		.top {
+			width: 690rpx;
+			margin: 0 auto;
+			height: 100rpx;
+			line-height: 100rpx;
+
+			text {
+				font-weight: bold;
+
+				&:nth-child(1) {
+					font-size: 28rpx;
+					color: #999;
+				}
+
+				&:nth-child(2) {
+					font-size: 28rpx;
+					color: #0A84FF;
+				}
+			}
+		}
+
+		.tip12 {
+			width: 100%;
+			height: 100rpx;
+
+			view {
+				width: 50%;
+				text-align: center;
+				line-height: 100rpx;
+				font-size: 40rpx;
+				color: #000000;
+			}
+		}
+
+		.hours {
+			font-size: 30rpx;
+			font-weight: bold;
+			color: #000;
+		}
+
+		.minutes {
+			font-size: 30rpx;
+			font-weight: bold;
+			color: #000;
+		}
+	}
+
+	.picker {
+		width: 100%;
+		height: 300rpx;
+	}
+</style>

+ 79 - 0
uni_modules/smh-time-range/package.json

@@ -0,0 +1,79 @@
+{
+  "id": "smh-time-range",
+  "displayName": "smh-time-range 时间范围选择",
+  "version": "1.0.3",
+  "description": "一个用于时间范围选择的组件,最好嵌套于底部弹窗中使用",
+  "keywords": [
+    "smh-time-range",
+    "时间选择",
+    "范围选择",
+    "时间范围选择"
+],
+  "repository": "",
+  "engines": {
+    "HBuilderX": "^3.1.0"
+  },
+  "dcloudext": {
+    "category": [
+        "前端组件",
+        "通用组件"
+    ],
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "插件不采集任何数据",
+      "permissions": "无"
+    },
+    "npmurl": ""
+  },
+  "uni_modules": {
+    "dependencies": [],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "n",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        }
+      }
+    }
+  }
+}

+ 40 - 0
uni_modules/smh-time-range/readme.md

@@ -0,0 +1,40 @@
+# smh-time-range
+
+用于时间范围的选择组件
+
+### 安装方式
+
+本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+
+### 基本用法
+
+在 ``template`` 中使用组件
+
+```html
+<smh-time-range :time="['12','30','0','17','30']" @confrim="confrim" @cancel="cancel"></smh-time-range>
+
+methods: {
+	confrim(e){
+		console.log(e.time)//确定事件 =>12:30-17:30
+	},
+	cancel(e){
+		console.log(e.time)//取消事件 =>12:30-17:30
+	}
+}
+```
+
+
+## API
+
+### smh-time-range  Props
+
+|属性名	|类型		|默认值	|说明				|
+|:-:	|:-:		|:-:	|:-:				|
+|time	|Array		|['15','0','0','18','0']		|设置默认时间,前两个参数为第一个时间(15:00),后两个参数为第二个时间(18:00),第三个参数为固定参数,不用修改		|
+
+
+### smh-time-range Events
+|事件名	|说明			|返回值|
+|:-:	|:-:			|:-:  |
+|@confrim|点击确定按钮事件|{time:15:00-18:00}|
+|@cancel|点击取消按钮事件|{time:15:00-18:00}|

+ 1 - 1
utils/loginUtils.js

@@ -12,7 +12,7 @@ export function interceptor() {
 	// 判断是否为公众号调用微信授权登录
 	let weichatBrowser = uni.getStorageSync('weichatBrowser');
 	if (weichatBrowser) {
-		// url = '/pages/public/wxLogin';
+		url = '/pages/public/wxLogin';
 	}
 	// #endif
 	// #ifdef MP-WEIXIN

+ 2 - 0
utils/newRequest.js

@@ -85,6 +85,7 @@ let service = {
 	},
 	// 上传文件
 	upFilse: async function(data) {
+		console.log(data,'data+++++');
 		return await new Promise(function(resolve, reject) {
 			let requestData = ''; //保存处理完成后请求数据
 			let url = '' //保存请求地址
@@ -118,6 +119,7 @@ let service = {
 					return new Promise((resolve, reject) => {
 						uni.chooseImage({
 							count: num,
+							sourceType: requestData.data.stype == 3?['album','camera']:(requestData.data.stype == 1?['album']:['camera']),
 							success(res) {
 								// console.log(res);
 								// 缓存文件路径

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است