cmy hai 1 ano
achega
9f01fca6ab
Modificáronse 100 ficheiros con 18323 adicións e 0 borrados
  1. 6 0
      .gitignore
  2. 291 0
      App.vue
  3. 63 0
      api/index.js
  4. 64 0
      api/login.js
  5. 109 0
      api/model.js
  6. 44 0
      api/set.js
  7. 297 0
      api/user.js
  8. 140 0
      api/wallet.js
  9. 37 0
      api/wx.js
  10. 18 0
      components/empty/empty.vue
  11. 1355 0
      components/wangding-pickerAddress/data.js
  12. 103 0
      components/wangding-pickerAddress/wangding-pickerAddress.vue
  13. 44 0
      main.js
  14. 199 0
      manifest.json
  15. 19 0
      package.json
  16. 356 0
      pages.json
  17. 619 0
      pages/index/index.vue
  18. 63 0
      pages/modelData/index.vue
  19. 715 0
      pages/modelData/modeltemplate/model_1.vue
  20. 718 0
      pages/modelData/modeltemplate/model_2.vue
  21. 652 0
      pages/modelData/modeltemplate/model_3.vue
  22. 57 0
      pages/public/agreement.vue
  23. 160 0
      pages/public/domApp.vue
  24. 306 0
      pages/public/forget.vue
  25. 332 0
      pages/public/login.vue
  26. 260 0
      pages/public/loginMethods.vue
  27. 336 0
      pages/public/phoneLogin.vue
  28. 160 0
      pages/public/privacyAgreement.vue
  29. 153 0
      pages/public/redirect.vue
  30. 345 0
      pages/public/register.vue
  31. 457 0
      pages/public/userAgreement.vue
  32. 68 0
      pages/public/workwork.vue
  33. 376 0
      pages/public/wxLogin.vue
  34. 312 0
      pages/set/address.vue
  35. 235 0
      pages/set/addressManage.vue
  36. 226 0
      pages/set/password.vue
  37. 202 0
      pages/set/phone.vue
  38. 204 0
      pages/set/set.vue
  39. 164 0
      pages/set/userinfo.vue
  40. 236 0
      pages/user/award/account.vue
  41. 327 0
      pages/user/award/award.vue
  42. 199 0
      pages/user/award/awardList.vue
  43. 361 0
      pages/user/award/withdrawal.vue
  44. 801 0
      pages/user/model/model.vue
  45. 193 0
      pages/user/model/modelList.vue
  46. 963 0
      pages/user/model/modelrz.vue
  47. 209 0
      pages/user/model/mymodellist.vue
  48. 353 0
      pages/user/model/phb.vue
  49. 333 0
      pages/user/model/shoprz.vue
  50. 404 0
      pages/user/money/pay.vue
  51. 108 0
      pages/user/money/paySuccess.vue
  52. 486 0
      pages/user/money/recharge.vue
  53. 268 0
      pages/user/money/wallet.vue
  54. 192 0
      pages/user/money/walletList.vue
  55. 444 0
      pages/user/myteam.vue
  56. 54 0
      pages/user/realName/cropper.vue
  57. 391 0
      pages/user/realName/realNameAuthentication.vue
  58. 441 0
      pages/user/shareQrCode.vue
  59. 397 0
      pages/user/teamph.vue
  60. 509 0
      pages/userhome/user.vue
  61. 147 0
      plugin/image-tools/index.js
  62. 0 0
      plugin/jweixin-module/index.js
  63. BIN=BIN
      static/controller/baoxiu.png
  64. BIN=BIN
      static/controller/dianchi.png
  65. BIN=BIN
      static/controller/dingwei.png
  66. BIN=BIN
      static/controller/huanche.png
  67. BIN=BIN
      static/controller/kaisuo.png
  68. BIN=BIN
      static/controller/qidong.png
  69. BIN=BIN
      static/controller/shouquan.png
  70. BIN=BIN
      static/controller/witchMessage.png
  71. BIN=BIN
      static/controller/witchShop.png
  72. BIN=BIN
      static/controller/xincheng.png
  73. BIN=BIN
      static/controller/xunche.png
  74. 242 0
      static/css/cmy.css
  75. BIN=BIN
      static/error/emptyAddress.png
  76. BIN=BIN
      static/error/emptyCart.png
  77. BIN=BIN
      static/error/emptyItem.png
  78. BIN=BIN
      static/error/emptyList.png
  79. BIN=BIN
      static/error/emptyMyCart.png
  80. BIN=BIN
      static/error/emptyNotice.png
  81. BIN=BIN
      static/error/emptyOrder.png
  82. BIN=BIN
      static/error/errorImage.jpg
  83. BIN=BIN
      static/error/missing-face.png
  84. BIN=BIN
      static/error/shopErroe.png
  85. BIN=BIN
      static/icon/addressIcon1.png
  86. BIN=BIN
      static/icon/addressIcon2.png
  87. BIN=BIN
      static/icon/addressIconXz.png
  88. BIN=BIN
      static/icon/appleIcon.png
  89. BIN=BIN
      static/icon/back.png
  90. BIN=BIN
      static/icon/dom.png
  91. BIN=BIN
      static/icon/goodsExit.png
  92. BIN=BIN
      static/icon/gpsW.png
  93. BIN=BIN
      static/icon/hot.png
  94. BIN=BIN
      static/icon/myaddress.png
  95. BIN=BIN
      static/icon/myinfo.png
  96. BIN=BIN
      static/icon/mymodel.png
  97. BIN=BIN
      static/icon/mymoney.png
  98. BIN=BIN
      static/icon/myserve.png
  99. BIN=BIN
      static/icon/myset.png
  100. BIN=BIN
      static/icon/myshare.png

+ 6 - 0
.gitignore

@@ -0,0 +1,6 @@
+.DS_Store
+unpackage/dist
+unpackage/release
+unpackage/debug
+unpackage/cache
+.hbuilderx

+ 291 - 0
App.vue

@@ -0,0 +1,291 @@
+<script>
+/**
+ * vuex管理登陆状态,具体可以参考官方登陆模板示例
+ */
+import { mapMutations } from 'vuex';
+// #ifdef H5
+import { weixindata, setRouter } from './utils/wxAuthorized';
+// #endif
+// #ifdef APP-PLUS
+import { getUpApp } from './utils/upApp.js';
+// #endif
+export default {
+	data() {
+		return {
+			/* 保存微信信息 */
+			appData: {}
+		};
+	},
+	methods: {
+		...mapMutations('user', ['setUserInfo', 'login', 'hasLogin']),
+		...mapMutations('shop', ['setShopInfo','setShopAction']),
+		...mapMutations(['setFirstUse'])
+	},
+	onLaunch: function(urlObj) {
+		console.log('开始升级');
+		const obj = this;
+		// 加载缓存中的用户信息
+		const userInfo = uni.getStorageSync('userInfo') || '';
+		// 判断是否拥有用户信息
+		if (userInfo) {
+			//更新登陆状态
+			uni.getStorage({
+				key: 'userInfo',
+				success: res => {
+					obj.setUserInfo(res.data);
+					obj.login();
+				},fail(res) {
+					console.log(res,'res.data');
+				}
+				
+			});
+		}
+		// 获取当前位置附近商店数据
+		const shopDetail = uni.getStorageSync('shopDetail') ||'';
+		if(shopDetail){
+			uni.getStorage({
+				key: 'shopDetail',
+				success: res => {
+					obj.setShopInfo(res.data);
+				}
+			});
+		}
+		// 获取商家用户数据
+		const shopDetailAction = uni.getStorageSync('shopDetailAction') ||'';
+		if(shopDetailAction){
+			uni.getStorage({
+				key: 'shopDetailAction',
+				success: res => {
+					obj.setShopAction(res.data);
+				}
+			});
+		}
+		// 获取是否已经在如果引导图
+		const guideMap = uni.getStorageSync('guideMap') ||false;
+		// 判断是否已经加载过数据
+		if(guideMap){
+			this.setFirstUse(true)
+		}
+		// #ifdef H5
+		// 保存路由对象
+		setRouter(this.$router);
+		//判断是否已经缓存浏览器
+		let bool = uni.getStorageSync('weichatBrowser') || '';
+		if (bool === '') {
+			//判断是否为微信浏览
+			bool = navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger';
+			// 保存当前是否为微信内核浏览器
+			uni.setStorageSync('weichatBrowser', bool);
+		}
+		if (bool) {
+			// 加载微信信息
+			weixindata();
+		}
+		// #endif
+		// #ifdef APP-PLUS
+		// 判断是否升级
+		getUpApp();
+		// 获取当前运行系统
+		let system = uni.getStorageSync('platform') || '';
+		if (!system) {
+			uni.setStorage({
+				key: 'platform',
+				data: uni.getSystemInfoSync().platform
+			});
+		}
+		// #endif
+	},
+	onShow: function() {
+		// 加载拦截
+		// console.log('App Show');
+	},
+	onHide: function() {
+		// console.log('App Hide');
+	}
+};
+</script>
+
+<style lang="scss">
+/*全局公共样式和字体图标*/
+@import '/static/css/cmy.css';
+view,
+scroll-view,
+swiper,
+swiper-item,
+cover-view,
+cover-image,
+icon,
+text,
+rich-text,
+progress,
+button,
+checkbox,
+form,
+input,
+label,
+radio,
+slider,
+switch,
+textarea,
+navigator,
+audio,
+camera,
+image,
+video {
+	box-sizing: border-box;
+}
+/* 骨架屏替代方案 */
+.Skeleton {
+	background: #f3f3f3;
+	padding: 20rpx 0;
+	border-radius: 8rpx;
+}
+
+/* 图片载入替代方案 */
+.image-wrapper {
+	font-size: 0;
+	background: #f3f3f3;
+	border-radius: 4px;
+	image {
+		width: 100%;
+		height: 100%;
+		transition: 0.6s;
+		opacity: 0;
+		&.loaded {
+			opacity: 1;
+		}
+	}
+}
+
+// 设置富文本中图片最大宽度
+uni-rich-text img {
+	max-width: 100% !important;
+}
+/*边框*/
+.b-b:after,
+.b-t:after {
+	position: absolute;
+	z-index: 3;
+	left: 0;
+	right: 0;
+	height: 0;
+	content: '';
+	transform: scaleY(0.5);
+	border-bottom: 1px solid $border-color-base;
+}
+
+.b-b:after {
+	bottom: 0;
+}
+
+.b-t:after {
+	top: 0;
+}
+
+/* input 样式 */
+.input-placeholder {
+	color: #999999;
+}
+
+.placeholder {
+	color: #999999;
+}
+// 边距样式
+@for $i from 1 to 5 {
+	.margin-l-#{$i * 10} {
+		margin-left: $i * 10rpx !important;
+	}
+	.margin-r-#{$i * 10} {
+		margin-right: $i * 10rpx !important;
+	}
+	.margin-t-#{$i * 10} {
+		margin-top: $i * 10rpx !important;
+	}
+	.margin-b-#{$i * 10} {
+		margin-bottom: $i * 10rpx !important;
+	}
+	.margin-#{$i * 10} {
+		margin: $i * 10rpx !important;
+	}
+	.margin-v-#{$i * 10} {
+		margin-top: $i * 10rpx !important;
+		margin-bottom: $i * 10rpx !important;
+	}
+	.margin-c-#{$i * 10} {
+		margin-left: $i * 10rpx !important;
+		margin-right: $i * 10rpx !important;
+	}
+	.padding-l-#{$i * 10} {
+		padding-left: $i * 10rpx !important;
+	}
+	.padding-r-#{$i * 10} {
+		padding-right: $i * 10rpx !important;
+	}
+	.padding-t-#{$i * 10} {
+		padding-top: $i * 10rpx !important;
+	}
+	.padding-b-#{$i * 10} {
+		padding-bottom: $i * 10rpx !important;
+	}
+	.padding-#{$i * 10} {
+		padding: $i * 10rpx !important;
+	}
+	.padding-v-#{$i * 10} {
+		padding-top: $i * 10rpx !important;
+		padding-bottom: $i * 10rpx !important;
+	}
+	.padding-c-#{$i * 10} {
+		padding-left: $i * 10rpx !important;
+		padding-right: $i * 10rpx !important;
+	}
+}
+// 字体大小
+.font-size-sm {
+	font-size: $font-sm;
+}
+.font-size-base {
+	font-size: $font-base;
+}
+.font-size-lg {
+	font-size: $font-lg;
+}
+// 字体颜色
+.font-color-yellow {
+	color: $color-yellow !important;
+}
+.font-color-gray {
+	color: $color-gray !important;
+}
+.font-color-red {
+	color: $color-red !important;
+}
+.font-color-greed {
+	color: $color-green !important;
+}
+// 边框颜色
+.border-color-yellow {
+	border: 1rpx solid $color-yellow;
+}
+// 基础按钮
+.base-buttom {
+	background-color: $base-color;
+	font-size: 32rpx;
+	padding: 30rpx;
+	color: #FFFFFF;
+	margin: 0 30rpx;
+	border-radius: 10rpx;
+	margin-top: 100rpx;
+	text-align: center;
+	z-index: 95;
+}
+// 修改默认背景颜色
+uni-page-wrapper {
+	background-color: $page-color-base;
+}
+page {
+	background-color: $page-color-base;
+	// 设置默认字体
+	font-family: PingFang SC, STHeitiSC-Light, Helvetica-Light, arial, sans-serif, Droid Sans Fallback;
+	min-height: 100%;
+}
+</style>

+ 63 - 0
api/index.js

@@ -0,0 +1,63 @@
+import request from '@/utils/request'
+
+// 获取版本号信息
+// #ifdef APP || H5
+export function getAppBBH(data) {
+	return request({
+		url: '/api/version',
+		method: 'get',
+		data
+	});
+}
+// #endif
+
+
+// 消息通知
+export function articleList(data, id) {
+	return request({
+		url: '/api/article/list/' + id,
+		method: 'get',
+		data
+	});
+}
+
+// 文章详细
+export function details(data, id) {
+	return request({
+		url: '/api/article/details/' + id,
+		method: 'get',
+		data
+	});
+}
+// 是否已读
+export function notify_read(data) {
+	return request({
+		url: '/api/car/notify_read',
+		method: 'post',
+		data
+	});
+}
+// 获取首页引导图
+export function guide_map(data) {
+	return request({
+		url: '/api/guide_map',
+		method: 'get',
+		data
+	});
+}
+//获取从业人员列表
+export function getWorkerList(data) {
+	return request({
+		url: '/api/pub/getWorkerList',
+		method: 'post',
+		data
+	});
+}
+//https://api.myjie.cn/api/pub/
+export function getCardLookCountRank(data) {
+	return request({
+		url: '/api/pub/getCardLookCountRank',
+		method: 'post',
+		data
+	});
+}

+ 64 - 0
api/login.js

@@ -0,0 +1,64 @@
+import request from '@/utils/request'
+
+// 登录
+export function login(data) {
+	return request({
+		url: '/api/login',
+		method: 'post',
+		data
+	});
+}
+// 注册
+export function register(data) {
+	return request({
+		url: '/api/register',
+		method: 'post',
+		data
+	});
+}
+// 验证码
+export function verify(data) {
+	// type=register为注册
+	// type=login为登录
+	return request({
+		url: '/api/register/verify',
+		method: 'post',
+		data
+	});
+}
+
+// 获取用户信息
+export function getUserInfo(data) {
+	return request({
+		url: '/api/user/userInfo',
+		method: 'get',
+		data
+	});
+}
+
+// 短信登录
+export function loginMobile(data) {
+	return request({
+		url: '/api/login/mobile',
+		method: 'post',
+		data
+	});
+}
+// #ifdef APP-PLUS
+// 微信授权登录
+export function loginWx(data) {
+	return request({
+		url: '/api/wechat/appauth',
+		method: 'get',
+		data
+	});
+}
+//苹果生成账户
+export function applelogin(data) {
+	return request({
+		url: '/api/applelogin',
+		method: 'post',
+		data
+	});
+}
+// #endif

+ 109 - 0
api/model.js

@@ -0,0 +1,109 @@
+import request from '@/utils/request'
+//获取其他用户名片信息
+export function getCommonUserCardInfo(data) {
+	return request({
+		url: '/api/pub/getCommonUserCardInfo',
+		method: 'post',
+		data
+	});
+}
+//获取模板详情
+export function getShowTemplateItem(data) {
+	return request({
+		url: '/api/pub/getShowTemplateItem',
+		method: 'post',
+		data
+	});
+}
+
+//购买皮肤模板
+export function subShowTemplateOrder(data) {
+	return request({
+		url: '/api/user/subShowTemplateOrder',
+		method: 'post',
+		data
+	});
+}
+// 获取服务时间类型
+export function getServiceTimeTypeList(data) {
+	return request({
+		url: '/api/pub/getServiceTimeTypeList',
+		method: 'post',
+		data
+	});
+}
+// 获取服务内容列表
+export function getServiceTypeList(data) {
+	return request({
+		url: '/api/pub/getServiceTypeList',
+		method: 'post',
+		data
+	});
+}
+// 获取服务职称
+export function getUserWorkTypeList(data) {
+	return request({
+		url: '/api/pub/getUserWorkTypeList',
+		method: 'post',
+		data
+	});
+}
+
+// 提交资料审核
+export function subInfoAudit(data) {
+	return request({
+		url: '/api/user/subInfoAudit',
+		method: 'post',
+		data
+	});
+}
+
+// 提交平台审核
+export function subTypeAudit(data) {
+	return request({
+		url: '/api/user/subTypeAudit',
+		method: 'post',
+		data
+	});
+}
+// 首页轮播图
+export function getBannerList(data) {
+	return request({
+		url: '/api/pub/getBannerList',
+		method: 'post',
+		data
+	});
+}
+// 首页模板列表
+export function getShowTemplateList(data) {
+	return request({
+		url: '/api/pub/getShowTemplateList',
+		method: 'post',
+})
+}
+//我的模板
+export function userShowTemplateList(data) {
+	return request({
+		url: '/api/user/userShowTemplateList',
+		method: 'post',
+		data
+	});
+}
+
+//默认模板
+export function setShowTemplate(data) {
+	return request({
+		url: '/api/user/setShowTemplate',
+		method: 'post',
+		data
+	});
+}
+
+//获取本人用户名片信息
+export function getUserCardInfo(data, id) {
+	return request({
+		url: '/api/user/getUserCardInfo',
+		method: 'post',
+		data
+	});
+}

+ 44 - 0
api/set.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+import {upFilse} from '@/utils/request'
+//上传图片
+export function upload(data) {
+	return upFilse({
+		url: '/api/user/qiniuUpload',
+		method: 'post',
+		data
+	});
+}
+// 修改用户信息
+export function userEdit(data) {
+	return request({
+		url: '/api/user/setUserInfo',
+		method: 'post',
+		data
+	});
+}
+
+//退出登录
+export function logout(data) {
+	return request({
+		url: '/api/logout',
+		method: 'get',
+		data
+	});
+}
+//修改密码
+export function registerReset(data) {
+	return request({
+		url: '/api/register/reset',
+		method: 'post',
+		data
+	});
+}
+
+//绑定手机
+export function binding(data) {
+	return request({
+		url: '/api/user/bindMobile',
+		method: 'post',
+		data
+	});
+}

+ 297 - 0
api/user.js

@@ -0,0 +1,297 @@
+import request from '@/utils/request'
+
+// 订单统计信息
+export function orderData(data) {
+	return request({
+		url: '/api/order/data',
+		method: 'get',
+		data
+	});
+}
+// 实名认证
+export function real_name(data) {
+	return request({
+		url: '/api/real_name',
+		method: 'post',
+		data
+	});
+}
+
+// 获取用户信息
+export function getUserInfo(data) {
+	return request({
+		url: '/api/user/userInfo',
+		method: 'get',
+		data
+	});
+}
+// 个人中心页数据
+export function getUser(data) {
+	return request({
+		url: '/api/user/userInfo',
+		method: 'get',
+		data
+	});
+}
+
+// 用户分享图
+export function spreadBanner(data) {
+	return request({
+		url: '/api/spread/banner',
+		method: 'get',
+		data
+	});
+}
+
+// 获取地址列表
+export function getAddressList(data) {
+	return request({
+		url: '/api/address/list',
+		method: 'get',
+		data
+	});
+}
+// 修改地址
+export function addressEdit(data) {
+	return request({
+		url: '/api/address/edit',
+		method: 'post',
+		data
+	});
+}
+// 删除地址
+export function addressDel(data) {
+	return request({
+		url: '/api/address/del',
+		method: 'post',
+		data
+	});
+}
+// 设为默认地址
+export function setAddressDefault(data) {
+	return request({
+		url: '/api/address/default/set',
+		method: 'post',
+		data
+	});
+}
+// 购物车列表
+export function getCartList(data) {
+	return request({
+		url: '/api/cart/list',
+		method: 'get',
+		data
+	});
+}
+
+// 修改购物车数量
+export function getCartNum(data) {
+	return request({
+		url: '/api/cart/num',
+		method: 'post',
+		data
+	});
+}
+//删除购物车
+export function cartDel(data) {
+	return request({
+		url: '/api/cart/del',
+		method: 'post',
+		data
+	});
+}
+//获取收藏夹列表
+export function getcollectList(data) {
+	return request({
+		url: '/api/collect/user',
+		method: 'get',
+		data
+	});
+}
+// 取消收藏
+export function delcollect(data) {
+	return request({
+		url: '/api/collect/del',
+		method: 'post',
+		data
+	});
+}
+// 获取我的团队
+export function spreadPeople(data) {
+	return request({
+		url: '/api/spread/people',
+		method: 'post',
+		data
+	});
+}
+// 获取我的所有车辆包含被授权车辆
+export function mycar(data) {
+	return request({
+		url: '/api/car/mycar',
+		method: 'get',
+		data
+	});
+}
+// 获取我的车辆
+export function carList(data) {
+	return request({
+		url: '/api/car/lst',
+		method: 'get',
+		data
+	});
+}
+// 获取授权车辆
+export function get_touid_car(data) {
+	return request({
+		url: '/api/car/get_touid_car',
+		method: 'post',
+		data
+	});
+}
+// 获取车辆详情
+export function getCarInfo(data) {
+	return request({
+		url: '/api/car/info',
+		method: 'get',
+		data
+	});
+}
+// 获取车辆行程记录列表
+export function car_record(data) {
+	return request({
+		url: '/api/car/car_record',
+		method: 'post',
+		data
+	});
+}
+// 获取车辆行程记录详细
+export function record_info(data) {
+	return request({
+		url: '/api/car/record_info',
+		method: 'get',
+		data
+	});
+}
+// 车锁开关
+export function car_switch(data) {
+	return request({
+		url: '/api/car/car_switch',
+		method: 'post',
+		data
+	});
+}
+
+// 车辆授权
+export function add_auth_car(data) {
+	return request({
+		url: '/api/car/add_auth_car',
+		method: 'post',
+		data
+	});
+}
+// 删除授权
+export function del_auth_car(data) {
+	return request({
+		url: '/api/car/del_auth_car',
+		method: 'post',
+		data
+	});
+}
+
+// 车辆授权列表
+export function get_auth(data) {
+	return request({
+		url: '/api/car/get_auth',
+		method: 'post',
+		data
+	});
+}
+
+// 车辆报修
+export function create_question(data) {
+	return request({
+		url: '/api/car/create_question',
+		method: 'post',
+		data
+	});
+}
+
+// 车辆报修详情
+export function question_info(data) {
+	return request({
+		url: '/api/car/question_info',
+		method: 'post',
+		data
+	});
+}
+
+// 车辆报修历史
+export function question(data) {
+	return request({
+		url: '/api/car/question',
+		method: 'post',
+		data
+	});
+}
+// 车辆报修评价
+export function question_score(data) {
+	return request({
+		url: '/api/car/question_score',
+		method: 'post',
+		data
+	});
+}
+
+// 撤销报修
+export function cancel_question(data) {
+	return request({
+		url: '/api/car/cancel_question',
+		method: 'get',
+		data
+	});
+}
+
+// 提前还款
+export function prepayment(data) {
+	return request({
+		url: '/api/car/prepayment',
+		method: 'post',
+		data
+	});
+}
+
+
+// 提前还款
+export function getcar_status(data) {
+	return request({
+		url: '/api/car/getcar_status',
+		method: 'get',
+		data
+	});
+}
+
+//获取分享海报
+export function getWxmpInviteQrcode(data) {
+	return request({
+		url: '/api/user/getWxmpInviteQrcode',
+		method: 'post',
+		data
+	});
+}
+
+//获取下级
+export function getChildList(data) {
+	return request({
+		url: '/api/user/getChildList',
+		method: 'post',
+		data
+	});
+}
+
+export function getInviterRanking(data) {
+	return request({
+		url: '/api/user/getInviterRanking',
+		method: 'post',
+		data
+	});
+}

+ 140 - 0
api/wallet.js

@@ -0,0 +1,140 @@
+import request from '@/utils/request'
+
+// 获取用户消费记录
+export function spreadCommission(data,state) {
+	return request({
+		url: '/api/spread/commission/'+state,
+		method: 'get',
+		data
+	});
+}
+
+// 获取账户余额
+export function userBalance(data) {
+	return request({
+		url: '/api/user/balance',
+		method: 'get',
+		data
+	});
+}
+
+// 提现
+export function extractCash(data) {
+	return request({
+		url: '/api/extract/cash',
+		method: 'post',
+		data
+	});
+}
+
+// 提现信息
+export function extractBank(data) {
+	return request({
+		url: '/api/extract/bank',
+		method: 'get',
+		data
+	});
+}
+// #ifdef H5
+// 公众号充值
+export function rechargeWechat(data) {
+	return request({
+		url: '/api/recharge/wechat',
+		method: 'post',
+		data
+	});
+}
+// #endif
+// #ifdef MP
+// 小程序充值
+export function rechargeRoutine(data) {
+	return request({
+		url: '/api/recharge/routine',
+		method: 'post',
+		data
+	});
+}
+// #endif
+// #ifdef APP
+// 支付宝支付
+export function aliPay(data) {
+	return request({
+		url: '/api/recharge/ali',
+		method: 'post',
+		data
+	});
+}
+// 微信支付
+export function wxPay(data) {
+	return request({
+		url: '/api/recharge/wxapp',
+		method: 'post',
+		data
+	});
+}
+// #endif
+// 佣金充值余额
+export function commissionPay(data) {
+	return request({
+		url: '/api/recharge/brokerage',
+		method: 'post',
+		data
+	});
+}
+// 获取提现支付宝账号
+export function aliInfo(data) {
+	return request({
+		url: '/api/ali/info',
+		method: 'get',
+		data
+	});
+}
+//获取默认银行卡账号
+export function bankInfo(data) {
+	return request({
+		url: '/api/bank/info',
+		method: 'get',
+		data
+	});
+}
+// 保存提现支付宝账号
+export function setAliInfo(data) {
+	return request({
+		url: '/api/ali/edit',
+		method: 'post',
+		data
+	});
+}
+//保存默认银行卡账号
+export function setBankInfo(data) {
+	return request({
+		url: '/api/bank/edit',
+		method: 'post',
+		data
+	});
+}
+
+
+// 账户余额
+export function balance(data) {
+	return request({
+		url: '/api/user/balance',
+		method: 'get',
+		data
+	});
+}
+
+
+// 充值分类金额
+export function rechargeIndex(data) {
+	return request({
+		url: '/api/recharge/index',
+		method: 'get',
+		data
+	});
+}
+
+
+
+
+

+ 37 - 0
api/wx.js

@@ -0,0 +1,37 @@
+import request from '@/utils/request'
+// 微信分享信息
+export function share(data) {
+	return request({
+		url: '/api/pub/getShareInfo',
+		method: 'get',
+		data
+	});
+}
+// #ifdef H5
+//微信配置
+export function wechatConfig(data) {
+	return request({
+		url: '/api/wechat/config',
+		method: 'get',
+		data
+	});
+}
+// 微信code地址
+export function wechatAuth(data) {
+	return request({
+		url: '/api/wechat/auth',
+		method: 'get',
+		data
+	});
+}
+// #endif
+// #ifdef MP-WEIXIN
+// 微信code地址
+export function wechatMpAuth(data) {
+	return request({
+		url: '/api/login/weixinLogin',
+		method: 'post',
+		data
+	});
+}
+// #endif

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 18 - 0
components/empty/empty.vue


+ 1355 - 0
components/wangding-pickerAddress/data.js

@@ -0,0 +1,1355 @@
+export default [{
+	"name": "北京",
+	"city": [{
+		"name": "北京市",
+		"area": ["东城区", "西城区", "朝阳区", "丰台区", "石景山区", "海淀区", "门头沟区", "房山区", "通州区", "顺义区", "昌平区", "大兴区",
+			"怀柔区", "平谷区", "密云区", "延庆区"
+		]
+	}]
+}, {
+	"name": "天津",
+	"city": [{
+		"name": "天津市",
+		"area": ["和平区", "河东区", "河西区", "南开区", "河北区", "红桥区", "东丽区", "西青区", "津南区", "北辰区", "武清区", "宝坻区", "滨海新区",
+			"宁河区", "静海区", "蓟州区"
+		]
+	}]
+}, {
+	"name": "河北",
+	"city": [{
+		"name": "石家庄市",
+		"area": ["市辖区", "长安区", "桥西区", "新华区", "井陉矿区", "裕华区", "藁城区", "鹿泉区", "栾城区", "井陉县", "正定县", "行唐县", "灵寿县",
+			"高邑县", "深泽县", "赞皇县", "无极县", "平山县", "元氏县", "赵县", "晋州市", "新乐市"
+		]
+	}, {
+		"name": "唐山市",
+		"area": ["市辖区", "路南区", "路北区", "古冶区", "开平区", "丰南区", "丰润区", "曹妃甸区", "滦县", "滦南县", "乐亭县", "迁西县", "玉田县",
+			"遵化市", "迁安市"
+		]
+	}, {
+		"name": "秦皇岛市",
+		"area": ["市辖区", "海港区", "山海关区", "北戴河区", "抚宁区", "青龙满族自治县", "昌黎县", "卢龙县"]
+	}, {
+		"name": "邯郸市",
+		"area": ["市辖区", "邯山区", "丛台区", "复兴区", "峰峰矿区", "邯郸县", "临漳县", "成安县", "大名县", "涉县", "磁县", "肥乡县", "永年县",
+			"邱县", "鸡泽县", "广平县", "馆陶县", "魏县", "曲周县", "武安市"
+		]
+	}, {
+		"name": "邢台市",
+		"area": ["市辖区", "桥东区", "桥西区", "邢台县", "临城县", "内丘县", "柏乡县", "隆尧县", "任县", "南和县", "宁晋县", "巨鹿县", "新河县",
+			"广宗县", "平乡县", "威县", "清河县", "临西县", "南宫市", "沙河市"
+		]
+	}, {
+		"name": "保定市",
+		"area": ["市辖区", "竞秀区", "莲池区", "满城区", "清苑区", "徐水区", "涞水县", "阜平县", "定兴县", "唐县", "高阳县", "容城县", "涞源县",
+			"望都县", "安新县", "易县", "曲阳县", "蠡县", "顺平县", "博野县", "雄县", "涿州市", "安国市", "高碑店市"
+		]
+	}, {
+		"name": "张家口市",
+		"area": ["市辖区", "桥东区", "桥西区", "宣化区", "下花园区", "万全区", "崇礼区", "张北县", "康保县", "沽源县", "尚义县", "蔚县", "阳原县",
+			"怀安县", "怀来县", "涿鹿县", "赤城县"
+		]
+	}, {
+		"name": "承德市",
+		"area": ["市辖区", "双桥区", "双滦区", "鹰手营子矿区", "承德县", "兴隆县", "平泉县", "滦平县", "隆化县", "丰宁满族自治县", "宽城满族自治县",
+			"围场满族蒙古族自治县"
+		]
+	}, {
+		"name": "沧州市",
+		"area": ["市辖区", "新华区", "运河区", "沧县", "青县", "东光县", "海兴县", "盐山县", "肃宁县", "南皮县", "吴桥县", "献县", "孟村回族自治县",
+			"泊头市", "任丘市", "黄骅市", "河间市"
+		]
+	}, {
+		"name": "廊坊市",
+		"area": ["市辖区", "安次区", "广阳区", "固安县", "永清县", "香河县", "大城县", "文安县", "大厂回族自治县", "霸州市", "三河市"]
+	}, {
+		"name": "衡水市",
+		"area": ["市辖区", "桃城区", "冀州区", "枣强县", "武邑县", "武强县", "饶阳县", "安平县", "故城县", "景县", "阜城县", "深州市"]
+	}, {
+		"name": "直辖县",
+		"area": ["定州市", "辛集市"]
+	}]
+}, {
+	"name": "山西",
+	"city": [{
+		"name": "太原市",
+		"area": ["市辖区", "小店区", "迎泽区", "杏花岭区", "尖草坪区", "万柏林区", "晋源区", "清徐县", "阳曲县", "娄烦县", "古交市"]
+	}, {
+		"name": "大同市",
+		"area": ["市辖区", "城区", "矿区", "南郊区", "新荣区", "阳高县", "天镇县", "广灵县", "灵丘县", "浑源县", "左云县", "大同县"]
+	}, {
+		"name": "阳泉市",
+		"area": ["市辖区", "城区", "矿区", "郊区", "平定县", "盂县"]
+	}, {
+		"name": "长治市",
+		"area": ["市辖区", "城区", "郊区", "长治县", "襄垣县", "屯留县", "平顺县", "黎城县", "壶关县", "长子县", "武乡县", "沁县", "沁源县",
+			"潞城市"
+		]
+	}, {
+		"name": "晋城市",
+		"area": ["市辖区", "城区", "沁水县", "阳城县", "陵川县", "泽州县", "高平市"]
+	}, {
+		"name": "朔州市",
+		"area": ["市辖区", "朔城区", "平鲁区", "山阴县", "应县", "右玉县", "怀仁县"]
+	}, {
+		"name": "晋中市",
+		"area": ["市辖区", "榆次区", "榆社县", "左权县", "和顺县", "昔阳县", "寿阳县", "太谷县", "祁县", "平遥县", "灵石县", "介休市"]
+	}, {
+		"name": "运城市",
+		"area": ["市辖区", "盐湖区", "临猗县", "万荣县", "闻喜县", "稷山县", "新绛县", "绛县", "垣曲县", "夏县", "平陆县", "芮城县", "永济市",
+			"河津市"
+		]
+	}, {
+		"name": "忻州市",
+		"area": ["市辖区", "忻府区", "定襄县", "五台县", "代县", "繁峙县", "宁武县", "静乐县", "神池县", "五寨县", "岢岚县", "河曲县", "保德县",
+			"偏关县", "原平市"
+		]
+	}, {
+		"name": "临汾市",
+		"area": ["市辖区", "尧都区", "曲沃县", "翼城县", "襄汾县", "洪洞县", "古县", "安泽县", "浮山县", "吉县", "乡宁县", "大宁县", "隰县",
+			"永和县", "蒲县", "汾西县", "侯马市", "霍州市"
+		]
+	}, {
+		"name": "吕梁市",
+		"area": ["市辖区", "离石区", "文水县", "交城县", "兴县", "临县", "柳林县", "石楼县", "岚县", "方山县", "中阳县", "交口县", "孝义市",
+			"汾阳市"
+		]
+	}]
+}, {
+	"name": "内蒙古",
+	"city": [{
+		"name": "呼和浩特市",
+		"area": ["市辖区", "新城区", "回民区", "玉泉区", "赛罕区", "土默特左旗", "托克托县", "和林格尔县", "清水河县", "武川县"]
+	}, {
+		"name": "包头市",
+		"area": ["市辖区", "东河区", "昆都仑区", "青山区", "石拐区", "白云鄂博矿区", "九原区", "土默特右旗", "固阳县", "达尔罕茂明安联合旗"]
+	}, {
+		"name": "乌海市",
+		"area": ["市辖区", "海勃湾区", "海南区", "乌达区"]
+	}, {
+		"name": "赤峰市",
+		"area": ["市辖区", "红山区", "元宝山区", "松山区", "阿鲁科尔沁旗", "巴林左旗", "巴林右旗", "林西县", "克什克腾旗", "翁牛特旗", "喀喇沁旗",
+			"宁城县", "敖汉旗"
+		]
+	}, {
+		"name": "通辽市",
+		"area": ["市辖区", "科尔沁区", "科尔沁左翼中旗", "科尔沁左翼后旗", "开鲁县", "库伦旗", "奈曼旗", "扎鲁特旗", "霍林郭勒市"]
+	}, {
+		"name": "鄂尔多斯市",
+		"area": ["市辖区", "东胜区", "康巴什区", "达拉特旗", "准格尔旗", "鄂托克前旗", "鄂托克旗", "杭锦旗", "乌审旗", "伊金霍洛旗"]
+	}, {
+		"name": "呼伦贝尔市",
+		"area": ["市辖区", "海拉尔区", "扎赉诺尔区", "阿荣旗", "莫力达瓦达斡尔族自治旗", "鄂伦春自治旗", "鄂温克族自治旗", "陈巴尔虎旗", "新巴尔虎左旗",
+			"新巴尔虎右旗", "满洲里市", "牙克石市", "扎兰屯市", "额尔古纳市", "根河市"
+		]
+	}, {
+		"name": "巴彦淖尔市",
+		"area": ["市辖区", "临河区", "五原县", "磴口县", "乌拉特前旗", "乌拉特中旗", "乌拉特后旗", "杭锦后旗"]
+	}, {
+		"name": "乌兰察布市",
+		"area": ["市辖区", "集宁区", "卓资县", "化德县", "商都县", "兴和县", "凉城县", "察哈尔右翼前旗", "察哈尔右翼中旗", "察哈尔右翼后旗", "四子王旗",
+			"丰镇市"
+		]
+	}, {
+		"name": "兴安盟",
+		"area": ["乌兰浩特市", "阿尔山市", "科尔沁右翼前旗", "科尔沁右翼中旗", "扎赉特旗", "突泉县"]
+	}, {
+		"name": "锡林郭勒盟",
+		"area": ["二连浩特市", "锡林浩特市", "阿巴嘎旗", "苏尼特左旗", "苏尼特右旗", "东乌珠穆沁旗", "西乌珠穆沁旗", "太仆寺旗", "镶黄旗", "正镶白旗",
+			"正蓝旗", "多伦县"
+		]
+	}, {
+		"name": "阿拉善盟",
+		"area": ["阿拉善左旗", "阿拉善右旗", "额济纳旗"]
+	}]
+}, {
+	"name": "辽宁",
+	"city": [{
+		"name": "沈阳市",
+		"area": ["市辖区", "和平区", "沈河区", "大东区", "皇姑区", "铁西区", "苏家屯区", "浑南区", "沈北新区", "于洪区", "辽中区", "康平县",
+			"法库县", "新民市"
+		]
+	}, {
+		"name": "大连市",
+		"area": ["市辖区", "中山区", "西岗区", "沙河口区", "甘井子区", "旅顺口区", "金州区", "普兰店区", "长海县", "瓦房店市", "庄河市"]
+	}, {
+		"name": "鞍山市",
+		"area": ["市辖区", "铁东区", "铁西区", "立山区", "千山区", "台安县", "岫岩满族自治县", "海城市"]
+	}, {
+		"name": "抚顺市",
+		"area": ["市辖区", "新抚区", "东洲区", "望花区", "顺城区", "抚顺县", "新宾满族自治县", "清原满族自治县"]
+	}, {
+		"name": "本溪市",
+		"area": ["市辖区", "平山区", "溪湖区", "明山区", "南芬区", "本溪满族自治县", "桓仁满族自治县"]
+	}, {
+		"name": "丹东市",
+		"area": ["市辖区", "元宝区", "振兴区", "振安区", "宽甸满族自治县", "东港市", "凤城市"]
+	}, {
+		"name": "锦州市",
+		"area": ["市辖区", "古塔区", "凌河区", "太和区", "黑山县", "义县", "凌海市", "北镇市"]
+	}, {
+		"name": "营口市",
+		"area": ["市辖区", "站前区", "西市区", "鲅鱼圈区", "老边区", "盖州市", "大石桥市"]
+	}, {
+		"name": "阜新市",
+		"area": ["市辖区", "海州区", "新邱区", "太平区", "清河门区", "细河区", "阜新蒙古族自治县", "彰武县"]
+	}, {
+		"name": "辽阳市",
+		"area": ["市辖区", "白塔区", "文圣区", "宏伟区", "弓长岭区", "太子河区", "辽阳县", "灯塔市"]
+	}, {
+		"name": "盘锦市",
+		"area": ["市辖区", "双台子区", "兴隆台区", "大洼区", "盘山县"]
+	}, {
+		"name": "铁岭市",
+		"area": ["市辖区", "银州区", "清河区", "铁岭县", "西丰县", "昌图县", "调兵山市", "开原市"]
+	}, {
+		"name": "朝阳市",
+		"area": ["市辖区", "双塔区", "龙城区", "朝阳县", "建平县", "喀喇沁左翼蒙古族自治县", "北票市", "凌源市"]
+	}, {
+		"name": "葫芦岛市",
+		"area": ["市辖区", "连山区", "龙港区", "南票区", "绥中县", "建昌县", "兴城市"]
+	}]
+}, {
+	"name": "吉林",
+	"city": [{
+		"name": "长春市",
+		"area": ["市辖区", "南关区", "宽城区", "朝阳区", "二道区", "绿园区", "双阳区", "九台区", "农安县", "榆树市", "德惠市"]
+	}, {
+		"name": "吉林市",
+		"area": ["市辖区", "昌邑区", "龙潭区", "船营区", "丰满区", "永吉县", "蛟河市", "桦甸市", "舒兰市", "磐石市"]
+	}, {
+		"name": "四平市",
+		"area": ["市辖区", "铁西区", "铁东区", "梨树县", "伊通满族自治县", "公主岭市", "双辽市"]
+	}, {
+		"name": "辽源市",
+		"area": ["市辖区", "龙山区", "西安区", "东丰县", "东辽县"]
+	}, {
+		"name": "通化市",
+		"area": ["市辖区", "东昌区", "二道江区", "通化县", "辉南县", "柳河县", "梅河口市", "集安市"]
+	}, {
+		"name": "白山市",
+		"area": ["市辖区", "浑江区", "江源区", "抚松县", "靖宇县", "长白朝鲜族自治县", "临江市"]
+	}, {
+		"name": "松原市",
+		"area": ["市辖区", "宁江区", "前郭尔罗斯蒙古族自治县", "长岭县", "乾安县", "扶余市"]
+	}, {
+		"name": "白城市",
+		"area": ["市辖区", "洮北区", "镇赉县", "通榆县", "洮南市", "大安市"]
+	}, {
+		"name": "延边朝鲜族自治州",
+		"area": ["延吉市", "图们市", "敦化市", "珲春市", "龙井市", "和龙市", "汪清县", "安图县"]
+	}]
+}, {
+	"name": "黑龙江",
+	"city": [{
+		"name": "哈尔滨市",
+		"area": ["市辖区", "道里区", "南岗区", "道外区", "平房区", "松北区", "香坊区", "呼兰区", "阿城区", "双城区", "依兰县", "方正县", "宾县",
+			"巴彦县", "木兰县", "通河县", "延寿县", "尚志市", "五常市"
+		]
+	}, {
+		"name": "齐齐哈尔市",
+		"area": ["市辖区", "龙沙区", "建华区", "铁锋区", "昂昂溪区", "富拉尔基区", "碾子山区", "梅里斯达斡尔族区", "龙江县", "依安县", "泰来县",
+			"甘南县", "富裕县", "克山县", "克东县", "拜泉县", "讷河市"
+		]
+	}, {
+		"name": "鸡西市",
+		"area": ["市辖区", "鸡冠区", "恒山区", "滴道区", "梨树区", "城子河区", "麻山区", "鸡东县", "虎林市", "密山市"]
+	}, {
+		"name": "鹤岗市",
+		"area": ["市辖区", "向阳区", "工农区", "南山区", "兴安区", "东山区", "兴山区", "萝北县", "绥滨县"]
+	}, {
+		"name": "双鸭山市",
+		"area": ["市辖区", "尖山区", "岭东区", "四方台区", "宝山区", "集贤县", "友谊县", "宝清县", "饶河县"]
+	}, {
+		"name": "大庆市",
+		"area": ["市辖区", "萨尔图区", "龙凤区", "让胡路区", "红岗区", "大同区", "肇州县", "肇源县", "林甸县", "杜尔伯特蒙古族自治县"]
+	}, {
+		"name": "伊春市",
+		"area": ["市辖区", "伊春区", "南岔区", "友好区", "西林区", "翠峦区", "新青区", "美溪区", "金山屯区", "五营区", "乌马河区", "汤旺河区",
+			"带岭区", "乌伊岭区", "红星区", "上甘岭区", "嘉荫县", "铁力市"
+		]
+	}, {
+		"name": "佳木斯市",
+		"area": ["市辖区", "向阳区", "前进区", "东风区", "郊区", "桦南县", "桦川县", "汤原县", "同江市", "富锦市", "抚远市"]
+	}, {
+		"name": "七台河市",
+		"area": ["市辖区", "新兴区", "桃山区", "茄子河区", "勃利县"]
+	}, {
+		"name": "牡丹江市",
+		"area": ["市辖区", "东安区", "阳明区", "爱民区", "西安区", "林口县", "绥芬河市", "海林市", "宁安市", "穆棱市", "东宁市"]
+	}, {
+		"name": "黑河市",
+		"area": ["市辖区", "爱辉区", "嫩江县", "逊克县", "孙吴县", "北安市", "五大连池市"]
+	}, {
+		"name": "绥化市",
+		"area": ["市辖区", "北林区", "望奎县", "兰西县", "青冈县", "庆安县", "明水县", "绥棱县", "安达市", "肇东市", "海伦市"]
+	}, {
+		"name": "大兴安岭地区",
+		"area": ["呼玛县", "塔河县", "漠河县"]
+	}]
+}, {
+	"name": "上海",
+	"city": [{
+		"name": "上海市",
+		"area": ["黄浦区", "徐汇区", "长宁区", "静安区", "普陀区", "虹口区", "杨浦区", "闵行区", "宝山区", "嘉定区", "浦东新区", "金山区", "松江区",
+			"青浦区", "奉贤区", "崇明区"
+		]
+	}]
+}, {
+	"name": "江苏",
+	"city": [{
+		"name": "南京市",
+		"area": ["市辖区", "玄武区", "秦淮区", "建邺区", "鼓楼区", "浦口区", "栖霞区", "雨花台区", "江宁区", "六合区", "溧水区", "高淳区"]
+	}, {
+		"name": "无锡市",
+		"area": ["市辖区", "锡山区", "惠山区", "滨湖区", "梁溪区", "新吴区", "江阴市", "宜兴市"]
+	}, {
+		"name": "徐州市",
+		"area": ["市辖区", "鼓楼区", "云龙区", "贾汪区", "泉山区", "铜山区", "丰县", "沛县", "睢宁县", "新沂市", "邳州市"]
+	}, {
+		"name": "常州市",
+		"area": ["市辖区", "天宁区", "钟楼区", "新北区", "武进区", "金坛区", "溧阳市"]
+	}, {
+		"name": "苏州市",
+		"area": ["市辖区", "虎丘区", "吴中区", "相城区", "姑苏区", "吴江区", "常熟市", "张家港市", "昆山市", "太仓市"]
+	}, {
+		"name": "南通市",
+		"area": ["市辖区", "崇川区", "港闸区", "通州区", "海安县", "如东县", "启东市", "如皋市", "海门市"]
+	}, {
+		"name": "连云港市",
+		"area": ["市辖区", "连云区", "海州区", "赣榆区", "东海县", "灌云县", "灌南县"]
+	}, {
+		"name": "淮安市",
+		"area": ["市辖区", "淮安区", "淮阴区", "清江浦区", "洪泽区", "涟水县", "盱眙县", "金湖县"]
+	}, {
+		"name": "盐城市",
+		"area": ["市辖区", "亭湖区", "盐都区", "大丰区", "响水县", "滨海县", "阜宁县", "射阳县", "建湖县", "东台市"]
+	}, {
+		"name": "扬州市",
+		"area": ["市辖区", "广陵区", "邗江区", "江都区", "宝应县", "仪征市", "高邮市"]
+	}, {
+		"name": "镇江市",
+		"area": ["市辖区", "京口区", "润州区", "丹徒区", "丹阳市", "扬中市", "句容市"]
+	}, {
+		"name": "泰州市",
+		"area": ["市辖区", "海陵区", "高港区", "姜堰区", "兴化市", "靖江市", "泰兴市"]
+	}, {
+		"name": "宿迁市",
+		"area": ["市辖区", "宿城区", "宿豫区", "沭阳县", "泗阳县", "泗洪县"]
+	}]
+}, {
+	"name": "浙江",
+	"city": [{
+		"name": "杭州市",
+		"area": ["市辖区", "上城区", "下城区", "江干区", "拱墅区", "西湖区", "滨江区", "萧山区", "余杭区", "富阳区", "桐庐县", "淳安县", "建德市",
+			"临安市"
+		]
+	}, {
+		"name": "宁波市",
+		"area": ["市辖区", "海曙区", "江东区", "江北区", "北仑区", "镇海区", "鄞州区", "象山县", "宁海县", "余姚市", "慈溪市", "奉化市"]
+	}, {
+		"name": "温州市",
+		"area": ["市辖区", "鹿城区", "龙湾区", "瓯海区", "洞头区", "永嘉县", "平阳县", "苍南县", "文成县", "泰顺县", "瑞安市", "乐清市"]
+	}, {
+		"name": "嘉兴市",
+		"area": ["市辖区", "南湖区", "秀洲区", "嘉善县", "海盐县", "海宁市", "平湖市", "桐乡市"]
+	}, {
+		"name": "湖州市",
+		"area": ["市辖区", "吴兴区", "南浔区", "德清县", "长兴县", "安吉县"]
+	}, {
+		"name": "绍兴市",
+		"area": ["市辖区", "越城区", "柯桥区", "上虞区", "新昌县", "诸暨市", "嵊州市"]
+	}, {
+		"name": "金华市",
+		"area": ["市辖区", "婺城区", "金东区", "武义县", "浦江县", "磐安县", "兰溪市", "义乌市", "东阳市", "永康市"]
+	}, {
+		"name": "衢州市",
+		"area": ["市辖区", "柯城区", "衢江区", "常山县", "开化县", "龙游县", "江山市"]
+	}, {
+		"name": "舟山市",
+		"area": ["市辖区", "定海区", "普陀区", "岱山县", "嵊泗县"]
+	}, {
+		"name": "台州市",
+		"area": ["市辖区", "椒江区", "黄岩区", "路桥区", "玉环县", "三门县", "天台县", "仙居县", "温岭市", "临海市"]
+	}, {
+		"name": "丽水市",
+		"area": ["市辖区", "莲都区", "青田县", "缙云县", "遂昌县", "松阳县", "云和县", "庆元县", "景宁畲族自治县", "龙泉市"]
+	}]
+}, {
+	"name": "安徽",
+	"city": [{
+		"name": "合肥市",
+		"area": ["市辖区", "瑶海区", "庐阳区", "蜀山区", "包河区", "长丰县", "肥东县", "肥西县", "庐江县", "巢湖市"]
+	}, {
+		"name": "芜湖市",
+		"area": ["市辖区", "镜湖区", "弋江区", "鸠江区", "三山区", "芜湖县", "繁昌县", "南陵县", "无为县"]
+	}, {
+		"name": "蚌埠市",
+		"area": ["市辖区", "龙子湖区", "蚌山区", "禹会区", "淮上区", "怀远县", "五河县", "固镇县"]
+	}, {
+		"name": "淮南市",
+		"area": ["市辖区", "大通区", "田家庵区", "谢家集区", "八公山区", "潘集区", "凤台县", "寿县"]
+	}, {
+		"name": "马鞍山市",
+		"area": ["市辖区", "花山区", "雨山区", "博望区", "当涂县", "含山县", "和县"]
+	}, {
+		"name": "淮北市",
+		"area": ["市辖区", "杜集区", "相山区", "烈山区", "濉溪县"]
+	}, {
+		"name": "铜陵市",
+		"area": ["市辖区", "铜官区", "义安区", "郊区", "枞阳县"]
+	}, {
+		"name": "安庆市",
+		"area": ["市辖区", "迎江区", "大观区", "宜秀区", "怀宁县", "潜山县", "太湖县", "宿松县", "望江县", "岳西县", "桐城市"]
+	}, {
+		"name": "黄山市",
+		"area": ["市辖区", "屯溪区", "黄山区", "徽州区", "歙县", "休宁县", "黟县", "祁门县"]
+	}, {
+		"name": "滁州市",
+		"area": ["市辖区", "琅琊区", "南谯区", "来安县", "全椒县", "定远县", "凤阳县", "天长市", "明光市"]
+	}, {
+		"name": "阜阳市",
+		"area": ["市辖区", "颍州区", "颍东区", "颍泉区", "临泉县", "太和县", "阜南县", "颍上县", "界首市"]
+	}, {
+		"name": "宿州市",
+		"area": ["市辖区", "埇桥区", "砀山县", "萧县", "灵璧县", "泗县"]
+	}, {
+		"name": "六安市",
+		"area": ["市辖区", "金安区", "裕安区", "叶集区", "霍邱县", "舒城县", "金寨县", "霍山县"]
+	}, {
+		"name": "亳州市",
+		"area": ["市辖区", "谯城区", "涡阳县", "蒙城县", "利辛县"]
+	}, {
+		"name": "池州市",
+		"area": ["市辖区", "贵池区", "东至县", "石台县", "青阳县"]
+	}, {
+		"name": "宣城市",
+		"area": ["市辖区", "宣州区", "郎溪县", "广德县", "泾县", "绩溪县", "旌德县", "宁国市"]
+	}]
+}, {
+	"name": "福建",
+	"city": [{
+		"name": "福州市",
+		"area": ["市辖区", "鼓楼区", "台江区", "仓山区", "马尾区", "晋安区", "闽侯县", "连江县", "罗源县", "闽清县", "永泰县", "平潭县", "福清市",
+			"长乐市"
+		]
+	}, {
+		"name": "厦门市",
+		"area": ["市辖区", "思明区", "海沧区", "湖里区", "集美区", "同安区", "翔安区"]
+	}, {
+		"name": "莆田市",
+		"area": ["市辖区", "城厢区", "涵江区", "荔城区", "秀屿区", "仙游县"]
+	}, {
+		"name": "三明市",
+		"area": ["市辖区", "梅列区", "三元区", "明溪县", "清流县", "宁化县", "大田县", "尤溪县", "沙县", "将乐县", "泰宁县", "建宁县", "永安市"]
+	}, {
+		"name": "泉州市",
+		"area": ["市辖区", "鲤城区", "丰泽区", "洛江区", "泉港区", "惠安县", "安溪县", "永春县", "德化县", "金门县", "石狮市", "晋江市", "南安市"]
+	}, {
+		"name": "漳州市",
+		"area": ["市辖区", "芗城区", "龙文区", "云霄县", "漳浦县", "诏安县", "长泰县", "东山县", "南靖县", "平和县", "华安县", "龙海市"]
+	}, {
+		"name": "南平市",
+		"area": ["市辖区", "延平区", "建阳区", "顺昌县", "浦城县", "光泽县", "松溪县", "政和县", "邵武市", "武夷山市", "建瓯市"]
+	}, {
+		"name": "龙岩市",
+		"area": ["市辖区", "新罗区", "永定区", "长汀县", "上杭县", "武平县", "连城县", "漳平市"]
+	}, {
+		"name": "宁德市",
+		"area": ["市辖区", "蕉城区", "霞浦县", "古田县", "屏南县", "寿宁县", "周宁县", "柘荣县", "福安市", "福鼎市"]
+	}]
+}, {
+	"name": "江西",
+	"city": [{
+		"name": "南昌市",
+		"area": ["市辖区", "东湖区", "西湖区", "青云谱区", "湾里区", "青山湖区", "新建区", "南昌县", "安义县", "进贤县"]
+	}, {
+		"name": "景德镇市",
+		"area": ["市辖区", "昌江区", "珠山区", "浮梁县", "乐平市"]
+	}, {
+		"name": "萍乡市",
+		"area": ["市辖区", "安源区", "湘东区", "莲花县", "上栗县", "芦溪县"]
+	}, {
+		"name": "九江市",
+		"area": ["市辖区", "濂溪区", "浔阳区", "九江县", "武宁县", "修水县", "永修县", "德安县", "都昌县", "湖口县", "彭泽县", "瑞昌市", "共青城市",
+			"庐山市"
+		]
+	}, {
+		"name": "新余市",
+		"area": ["市辖区", "渝水区", "分宜县"]
+	}, {
+		"name": "鹰潭市",
+		"area": ["市辖区", "月湖区", "余江县", "贵溪市"]
+	}, {
+		"name": "赣州市",
+		"area": ["市辖区", "章贡区", "南康区", "赣县", "信丰县", "大余县", "上犹县", "崇义县", "安远县", "龙南县", "定南县", "全南县", "宁都县",
+			"于都县", "兴国县", "会昌县", "寻乌县", "石城县", "瑞金市"
+		]
+	}, {
+		"name": "吉安市",
+		"area": ["市辖区", "吉州区", "青原区", "吉安县", "吉水县", "峡江县", "新干县", "永丰县", "泰和县", "遂川县", "万安县", "安福县", "永新县",
+			"井冈山市"
+		]
+	}, {
+		"name": "宜春市",
+		"area": ["市辖区", "袁州区", "奉新县", "万载县", "上高县", "宜丰县", "靖安县", "铜鼓县", "丰城市", "樟树市", "高安市"]
+	}, {
+		"name": "抚州市",
+		"area": ["市辖区", "临川区", "南城县", "黎川县", "南丰县", "崇仁县", "乐安县", "宜黄县", "金溪县", "资溪县", "东乡县", "广昌县"]
+	}, {
+		"name": "上饶市",
+		"area": ["市辖区", "信州区", "广丰区", "上饶县", "玉山县", "铅山县", "横峰县", "弋阳县", "余干县", "鄱阳县", "万年县", "婺源县", "德兴市"]
+	}]
+}, {
+	"name": "山东",
+	"city": [{
+		"name": "济南市",
+		"area": ["市辖区", "历下区", "市中区", "槐荫区", "天桥区", "历城区", "长清区", "平阴县", "济阳县", "商河县", "章丘市"]
+	}, {
+		"name": "青岛市",
+		"area": ["市辖区", "市南区", "市北区", "黄岛区", "崂山区", "李沧区", "城阳区", "胶州市", "即墨市", "平度市", "莱西市"]
+	}, {
+		"name": "淄博市",
+		"area": ["市辖区", "淄川区", "张店区", "博山区", "临淄区", "周村区", "桓台县", "高青县", "沂源县"]
+	}, {
+		"name": "枣庄市",
+		"area": ["市辖区", "市中区", "薛城区", "峄城区", "台儿庄区", "山亭区", "滕州市"]
+	}, {
+		"name": "东营市",
+		"area": ["市辖区", "东营区", "河口区", "垦利区", "利津县", "广饶县"]
+	}, {
+		"name": "烟台市",
+		"area": ["市辖区", "芝罘区", "福山区", "牟平区", "莱山区", "长岛县", "龙口市", "莱阳市", "莱州市", "蓬莱市", "招远市", "栖霞市", "海阳市"]
+	}, {
+		"name": "潍坊市",
+		"area": ["市辖区", "潍城区", "寒亭区", "坊子区", "奎文区", "临朐县", "昌乐县", "青州市", "诸城市", "寿光市", "安丘市", "高密市", "昌邑市"]
+	}, {
+		"name": "济宁市",
+		"area": ["市辖区", "任城区", "兖州区", "微山县", "鱼台县", "金乡县", "嘉祥县", "汶上县", "泗水县", "梁山县", "曲阜市", "邹城市"]
+	}, {
+		"name": "泰安市",
+		"area": ["市辖区", "泰山区", "岱岳区", "宁阳县", "东平县", "新泰市", "肥城市"]
+	}, {
+		"name": "威海市",
+		"area": ["市辖区", "环翠区", "文登区", "荣成市", "乳山市"]
+	}, {
+		"name": "日照市",
+		"area": ["市辖区", "东港区", "岚山区", "五莲县", "莒县"]
+	}, {
+		"name": "莱芜市",
+		"area": ["市辖区", "莱城区", "钢城区"]
+	}, {
+		"name": "临沂市",
+		"area": ["市辖区", "兰山区", "罗庄区", "河东区", "沂南县", "郯城县", "沂水县", "兰陵县", "费县", "平邑县", "莒南县", "蒙阴县", "临沭县"]
+	}, {
+		"name": "德州市",
+		"area": ["市辖区", "德城区", "陵城区", "宁津县", "庆云县", "临邑县", "齐河县", "平原县", "夏津县", "武城县", "乐陵市", "禹城市"]
+	}, {
+		"name": "聊城市",
+		"area": ["市辖区", "东昌府区", "阳谷县", "莘县", "茌平县", "东阿县", "冠县", "高唐县", "临清市"]
+	}, {
+		"name": "滨州市",
+		"area": ["市辖区", "滨城区", "沾化区", "惠民县", "阳信县", "无棣县", "博兴县", "邹平县"]
+	}, {
+		"name": "菏泽市",
+		"area": ["市辖区", "牡丹区", "定陶区", "曹县", "单县", "成武县", "巨野县", "郓城县", "鄄城县", "东明县"]
+	}]
+}, {
+	"name": "河南",
+	"city": [{
+		"name": "郑州市",
+		"area": ["市辖区", "中原区", "二七区", "管城回族区", "金水区", "上街区", "惠济区", "中牟县", "巩义市", "荥阳市", "新密市", "新郑市",
+			"登封市"]
+	}, {
+		"name": "开封市",
+		"area": ["市辖区", "龙亭区", "顺河回族区", "鼓楼区", "禹王台区", "金明区", "祥符区", "杞县", "通许县", "尉氏县", "兰考县"]
+	}, {
+		"name": "洛阳市",
+		"area": ["市辖区", "老城区", "西工区", "瀍河回族区", "涧西区", "吉利区", "洛龙区", "孟津县", "新安县", "栾川县", "嵩县", "汝阳县", "宜阳县",
+			"洛宁县", "伊川县", "偃师市"
+		]
+	}, {
+		"name": "平顶山市",
+		"area": ["市辖区", "新华区", "卫东区", "石龙区", "湛河区", "宝丰县", "叶县", "鲁山县", "郏县", "舞钢市", "汝州市"]
+	}, {
+		"name": "安阳市",
+		"area": ["市辖区", "文峰区", "北关区", "殷都区", "龙安区", "安阳县", "汤阴县", "滑县", "内黄县", "林州市"]
+	}, {
+		"name": "鹤壁市",
+		"area": ["市辖区", "鹤山区", "山城区", "淇滨区", "浚县", "淇县"]
+	}, {
+		"name": "新乡市",
+		"area": ["市辖区", "红旗区", "卫滨区", "凤泉区", "牧野区", "新乡县", "获嘉县", "原阳县", "延津县", "封丘县", "长垣县", "卫辉市", "辉县市"]
+	}, {
+		"name": "焦作市",
+		"area": ["市辖区", "解放区", "中站区", "马村区", "山阳区", "修武县", "博爱县", "武陟县", "温县", "沁阳市", "孟州市"]
+	}, {
+		"name": "濮阳市",
+		"area": ["市辖区", "华龙区", "清丰县", "南乐县", "范县", "台前县", "濮阳县"]
+	}, {
+		"name": "许昌市",
+		"area": ["市辖区", "魏都区", "许昌县", "鄢陵县", "襄城县", "禹州市", "长葛市"]
+	}, {
+		"name": "漯河市",
+		"area": ["市辖区", "源汇区", "郾城区", "召陵区", "舞阳县", "临颍县"]
+	}, {
+		"name": "三门峡市",
+		"area": ["市辖区", "湖滨区", "陕州区", "渑池县", "卢氏县", "义马市", "灵宝市"]
+	}, {
+		"name": "南阳市",
+		"area": ["市辖区", "宛城区", "卧龙区", "南召县", "方城县", "西峡县", "镇平县", "内乡县", "淅川县", "社旗县", "唐河县", "新野县", "桐柏县",
+			"邓州市"
+		]
+	}, {
+		"name": "商丘市",
+		"area": ["市辖区", "梁园区", "睢阳区", "民权县", "睢县", "宁陵县", "柘城县", "虞城县", "夏邑县", "永城市"]
+	}, {
+		"name": "信阳市",
+		"area": ["市辖区", "浉河区", "平桥区", "罗山县", "光山县", "新县", "商城县", "固始县", "潢川县", "淮滨县", "息县"]
+	}, {
+		"name": "周口市",
+		"area": ["市辖区", "川汇区", "扶沟县", "西华县", "商水县", "沈丘县", "郸城县", "淮阳县", "太康县", "鹿邑县", "项城市"]
+	}, {
+		"name": "驻马店市",
+		"area": ["市辖区", "驿城区", "西平县", "上蔡县", "平舆县", "正阳县", "确山县", "泌阳县", "汝南县", "遂平县", "新蔡县"]
+	}, {
+		"name": "直辖县",
+		"area": ["济源市"]
+	}]
+}, {
+	"name": "湖北",
+	"city": [{
+		"name": "武汉市",
+		"area": ["市辖区", "江岸区", "江汉区", "硚口区", "汉阳区", "武昌区", "青山区", "洪山区", "东西湖区", "汉南区", "蔡甸区", "江夏区", "黄陂区",
+			"新洲区"
+		]
+	}, {
+		"name": "黄石市",
+		"area": ["市辖区", "黄石港区", "西塞山区", "下陆区", "铁山区", "阳新县", "大冶市"]
+	}, {
+		"name": "十堰市",
+		"area": ["市辖区", "茅箭区", "张湾区", "郧阳区", "郧西县", "竹山县", "竹溪县", "房县", "丹江口市"]
+	}, {
+		"name": "宜昌市",
+		"area": ["市辖区", "西陵区", "伍家岗区", "点军区", "猇亭区", "夷陵区", "远安县", "兴山县", "秭归县", "长阳土家族自治县", "五峰土家族自治县",
+			"宜都市", "当阳市", "枝江市"
+		]
+	}, {
+		"name": "襄阳市",
+		"area": ["市辖区", "襄城区", "樊城区", "襄州区", "南漳县", "谷城县", "保康县", "老河口市", "枣阳市", "宜城市"]
+	}, {
+		"name": "鄂州市",
+		"area": ["市辖区", "梁子湖区", "华容区", "鄂城区"]
+	}, {
+		"name": "荆门市",
+		"area": ["市辖区", "东宝区", "掇刀区", "京山县", "沙洋县", "钟祥市"]
+	}, {
+		"name": "孝感市",
+		"area": ["市辖区", "孝南区", "孝昌县", "大悟县", "云梦县", "应城市", "安陆市", "汉川市"]
+	}, {
+		"name": "荆州市",
+		"area": ["市辖区", "沙市区", "荆州区", "公安县", "监利县", "江陵县", "石首市", "洪湖市", "松滋市"]
+	}, {
+		"name": "黄冈市",
+		"area": ["市辖区", "黄州区", "团风县", "红安县", "罗田县", "英山县", "浠水县", "蕲春县", "黄梅县", "麻城市", "武穴市"]
+	}, {
+		"name": "咸宁市",
+		"area": ["市辖区", "咸安区", "嘉鱼县", "通城县", "崇阳县", "通山县", "赤壁市"]
+	}, {
+		"name": "随州市",
+		"area": ["市辖区", "曾都区", "随县", "广水市"]
+	}, {
+		"name": "恩施土家族苗族自治州",
+		"area": ["恩施市", "利川市", "建始县", "巴东县", "宣恩县", "咸丰县", "来凤县", "鹤峰县"]
+	}, {
+		"name": "直辖县",
+		"area": ["仙桃市", "潜江市", "天门市", "神农架林区"]
+	}]
+}, {
+	"name": "湖南",
+	"city": [{
+		"name": "长沙市",
+		"area": ["市辖区", "芙蓉区", "天心区", "岳麓区", "开福区", "雨花区", "望城区", "长沙县", "宁乡县", "浏阳市"]
+	}, {
+		"name": "株洲市",
+		"area": ["市辖区", "荷塘区", "芦淞区", "石峰区", "天元区", "株洲县", "攸县", "茶陵县", "炎陵县", "醴陵市"]
+	}, {
+		"name": "湘潭市",
+		"area": ["市辖区", "雨湖区", "岳塘区", "湘潭县", "湘乡市", "韶山市"]
+	}, {
+		"name": "衡阳市",
+		"area": ["市辖区", "珠晖区", "雁峰区", "石鼓区", "蒸湘区", "南岳区", "衡阳县", "衡南县", "衡山县", "衡东县", "祁东县", "耒阳市", "常宁市"]
+	}, {
+		"name": "邵阳市",
+		"area": ["市辖区", "双清区", "大祥区", "北塔区", "邵东县", "新邵县", "邵阳县", "隆回县", "洞口县", "绥宁县", "新宁县", "城步苗族自治县",
+			"武冈市"
+		]
+	}, {
+		"name": "岳阳市",
+		"area": ["市辖区", "岳阳楼区", "云溪区", "君山区", "岳阳县", "华容县", "湘阴县", "平江县", "汨罗市", "临湘市"]
+	}, {
+		"name": "常德市",
+		"area": ["市辖区", "武陵区", "鼎城区", "安乡县", "汉寿县", "澧县", "临澧县", "桃源县", "石门县", "津市市"]
+	}, {
+		"name": "张家界市",
+		"area": ["市辖区", "永定区", "武陵源区", "慈利县", "桑植县"]
+	}, {
+		"name": "益阳市",
+		"area": ["市辖区", "资阳区", "赫山区", "南县", "桃江县", "安化县", "沅江市"]
+	}, {
+		"name": "郴州市",
+		"area": ["市辖区", "北湖区", "苏仙区", "桂阳县", "宜章县", "永兴县", "嘉禾县", "临武县", "汝城县", "桂东县", "安仁县", "资兴市"]
+	}, {
+		"name": "永州市",
+		"area": ["市辖区", "零陵区", "冷水滩区", "祁阳县", "东安县", "双牌县", "道县", "江永县", "宁远县", "蓝山县", "新田县", "江华瑶族自治县"]
+	}, {
+		"name": "怀化市",
+		"area": ["市辖区", "鹤城区", "中方县", "沅陵县", "辰溪县", "溆浦县", "会同县", "麻阳苗族自治县", "新晃侗族自治县", "芷江侗族自治县",
+			"靖州苗族侗族自治县", "通道侗族自治县", "洪江市"
+		]
+	}, {
+		"name": "娄底市",
+		"area": ["市辖区", "娄星区", "双峰县", "新化县", "冷水江市", "涟源市"]
+	}, {
+		"name": "湘西土家族苗族自治州",
+		"area": ["吉首市", "泸溪县", "凤凰县", "花垣县", "保靖县", "古丈县", "永顺县", "龙山县"]
+	}]
+}, {
+	"name": "广东",
+	"city": [{
+		"name": "广州市",
+		"area": ["市辖区", "荔湾区", "越秀区", "海珠区", "天河区", "白云区", "黄埔区", "番禺区", "花都区", "南沙区", "从化区", "增城区"]
+	}, {
+		"name": "韶关市",
+		"area": ["市辖区", "武江区", "浈江区", "曲江区", "始兴县", "仁化县", "翁源县", "乳源瑶族自治县", "新丰县", "乐昌市", "南雄市"]
+	}, {
+		"name": "深圳市",
+		"area": ["市辖区", "罗湖区", "福田区", "南山区", "宝安区", "龙岗区", "盐田区"]
+	}, {
+		"name": "珠海市",
+		"area": ["市辖区", "香洲区", "斗门区", "金湾区"]
+	}, {
+		"name": "汕头市",
+		"area": ["市辖区", "龙湖区", "金平区", "濠江区", "潮阳区", "潮南区", "澄海区", "南澳县"]
+	}, {
+		"name": "佛山市",
+		"area": ["市辖区", "禅城区", "南海区", "顺德区", "三水区", "高明区"]
+	}, {
+		"name": "江门市",
+		"area": ["市辖区", "蓬江区", "江海区", "新会区", "台山市", "开平市", "鹤山市", "恩平市"]
+	}, {
+		"name": "湛江市",
+		"area": ["市辖区", "赤坎区", "霞山区", "坡头区", "麻章区", "遂溪县", "徐闻县", "廉江市", "雷州市", "吴川市"]
+	}, {
+		"name": "茂名市",
+		"area": ["市辖区", "茂南区", "电白区", "高州市", "化州市", "信宜市"]
+	}, {
+		"name": "肇庆市",
+		"area": ["市辖区", "端州区", "鼎湖区", "高要区", "广宁县", "怀集县", "封开县", "德庆县", "四会市"]
+	}, {
+		"name": "惠州市",
+		"area": ["市辖区", "惠城区", "惠阳区", "博罗县", "惠东县", "龙门县"]
+	}, {
+		"name": "梅州市",
+		"area": ["市辖区", "梅江区", "梅县区", "大埔县", "丰顺县", "五华县", "平远县", "蕉岭县", "兴宁市"]
+	}, {
+		"name": "汕尾市",
+		"area": ["市辖区", "城区", "海丰县", "陆河县", "陆丰市"]
+	}, {
+		"name": "河源市",
+		"area": ["市辖区", "源城区", "紫金县", "龙川县", "连平县", "和平县", "东源县"]
+	}, {
+		"name": "阳江市",
+		"area": ["市辖区", "江城区", "阳东区", "阳西县", "阳春市"]
+	}, {
+		"name": "清远市",
+		"area": ["市辖区", "清城区", "清新区", "佛冈县", "阳山县", "连山壮族瑶族自治县", "连南瑶族自治县", "英德市", "连州市"]
+	}, {
+		"name": "东莞市",
+		"area": ["东城街道办事处", "南城街道办事处", "万江街道办事处", "莞城街道办事处", "石碣镇", "石龙镇", "茶山镇", "石排镇", "企石镇", "横沥镇",
+			"桥头镇", "谢岗镇", "东坑镇", "常平镇", "寮步镇", "樟木头镇", "大朗镇", "黄江镇", "清溪镇", "塘厦镇", "凤岗镇", "大岭山镇", "长安镇",
+			"虎门镇", "厚街镇", "沙田镇", "道滘镇", "洪梅镇", "麻涌镇", "望牛墩镇", "中堂镇", "高埗镇", "松山湖管委会", "虎门港管委会", "东莞生态园"
+		]
+	}, {
+		"name": "中山市",
+		"area": ["石岐区街道办事处", "东区街道办事处", "火炬开发区街道办事处", "西区街道办事处", "南区街道办事处", "五桂山街道办事处", "小榄镇", "黄圃镇", "民众镇",
+			"东凤镇", "东升镇", "古镇镇", "沙溪镇", "坦洲镇", "港口镇", "三角镇", "横栏镇", "南头镇", "阜沙镇", "南朗镇", "三乡镇", "板芙镇",
+			"大涌镇", "神湾镇"
+		]
+	}, {
+		"name": "潮州市",
+		"area": ["市辖区", "湘桥区", "潮安区", "饶平县"]
+	}, {
+		"name": "揭阳市",
+		"area": ["市辖区", "榕城区", "揭东区", "揭西县", "惠来县", "普宁市"]
+	}, {
+		"name": "云浮市",
+		"area": ["市辖区", "云城区", "云安区", "新兴县", "郁南县", "罗定市"]
+	}]
+}, {
+	"name": "广西",
+	"city": [{
+		"name": "南宁市",
+		"area": ["市辖区", "兴宁区", "青秀区", "江南区", "西乡塘区", "良庆区", "邕宁区", "武鸣区", "隆安县", "马山县", "上林县", "宾阳县", "横县"]
+	}, {
+		"name": "柳州市",
+		"area": ["市辖区", "城中区", "鱼峰区", "柳南区", "柳北区", "柳江区", "柳城县", "鹿寨县", "融安县", "融水苗族自治县", "三江侗族自治县"]
+	}, {
+		"name": "桂林市",
+		"area": ["市辖区", "秀峰区", "叠彩区", "象山区", "七星区", "雁山区", "临桂区", "阳朔县", "灵川县", "全州县", "兴安县", "永福县", "灌阳县",
+			"龙胜各族自治县", "资源县", "平乐县", "荔浦县", "恭城瑶族自治县"
+		]
+	}, {
+		"name": "梧州市",
+		"area": ["市辖区", "万秀区", "长洲区", "龙圩区", "苍梧县", "藤县", "蒙山县", "岑溪市"]
+	}, {
+		"name": "北海市",
+		"area": ["市辖区", "海城区", "银海区", "铁山港区", "合浦县"]
+	}, {
+		"name": "防城港市",
+		"area": ["市辖区", "港口区", "防城区", "上思县", "东兴市"]
+	}, {
+		"name": "钦州市",
+		"area": ["市辖区", "钦南区", "钦北区", "灵山县", "浦北县"]
+	}, {
+		"name": "贵港市",
+		"area": ["市辖区", "港北区", "港南区", "覃塘区", "平南县", "桂平市"]
+	}, {
+		"name": "玉林市",
+		"area": ["市辖区", "玉州区", "福绵区", "容县", "陆川县", "博白县", "兴业县", "北流市"]
+	}, {
+		"name": "百色市",
+		"area": ["市辖区", "右江区", "田阳县", "田东县", "平果县", "德保县", "那坡县", "凌云县", "乐业县", "田林县", "西林县", "隆林各族自治县",
+			"靖西市"
+		]
+	}, {
+		"name": "贺州市",
+		"area": ["市辖区", "八步区", "平桂区", "昭平县", "钟山县", "富川瑶族自治县"]
+	}, {
+		"name": "河池市",
+		"area": ["市辖区", "金城江区", "南丹县", "天峨县", "凤山县", "东兰县", "罗城仫佬族自治县", "环江毛南族自治县", "巴马瑶族自治县", "都安瑶族自治县",
+			"大化瑶族自治县", "宜州市"
+		]
+	}, {
+		"name": "来宾市",
+		"area": ["市辖区", "兴宾区", "忻城县", "象州县", "武宣县", "金秀瑶族自治县", "合山市"]
+	}, {
+		"name": "崇左市",
+		"area": ["市辖区", "江州区", "扶绥县", "宁明县", "龙州县", "大新县", "天等县", "凭祥市"]
+	}]
+}, {
+	"name": "海南",
+	"city": [{
+		"name": "海口市",
+		"area": ["市辖区", "秀英区", "龙华区", "琼山区", "美兰区"]
+	}, {
+		"name": "三亚市",
+		"area": ["市辖区", "海棠区", "吉阳区", "天涯区", "崖州区"]
+	}, {
+		"name": "三沙市",
+		"area": ["西沙群岛", "南沙群岛", "中沙群岛的岛礁及其海域"]
+	}, {
+		"name": "儋州市",
+		"area": ["那大镇", "和庆镇", "南丰镇", "大成镇", "雅星镇", "兰洋镇", "光村镇", "木棠镇", "海头镇", "峨蔓镇", "三都镇", "王五镇", "白马井镇",
+			"中和镇", "排浦镇", "东成镇", "新州镇", "国营西培农场", "国营西联农场", "国营蓝洋农场", "国营八一农场", "洋浦经济开发区", "华南热作学院"
+		]
+	}, {
+		"name": "省直辖县级行政区域",
+		"area": ["五指山市", "琼海市", "文昌市", "万宁市", "东方市", "定安县", "屯昌县", "澄迈县", "临高县", "白沙黎族自治县", "昌江黎族自治县",
+			"乐东黎族自治县", "陵水黎族自治县", "保亭黎族苗族自治县", "琼中黎族苗族自治县"
+		]
+	}]
+}, {
+	"name": "重庆",
+	"city": [{
+		"name": "重庆市",
+		"area": ["万州区", "涪陵区", "渝中区", "大渡口区", "江北区", "沙坪坝区", "九龙坡区", "南岸区", "北碚区", "綦江区", "大足区", "渝北区",
+			"巴南区", "黔江区", "长寿区", "江津区", "合川区", "永川区", "南川区", "璧山区", "铜梁区", "潼南区", "荣昌区", "开州区"
+		]
+	}, {
+		"name": "县",
+		"area": ["梁平县", "城口县", "丰都县", "垫江县", "武隆县", "忠县", "云阳县", "奉节县", "巫山县", "巫溪县", "石柱土家族自治县",
+			"秀山土家族苗族自治县", "酉阳土家族苗族自治县", "彭水苗族土家族自治县"
+		]
+	}]
+}, {
+	"name": "四川",
+	"city": [{
+		"name": "成都市",
+		"area": ["市辖区", "锦江区", "青羊区", "金牛区", "武侯区", "成华区", "龙泉驿区", "青白江区", "新都区", "温江区", "双流区", "金堂县", "郫县",
+			"大邑县", "蒲江县", "新津县", "都江堰市", "彭州市", "邛崃市", "崇州市", "简阳市"
+		]
+	}, {
+		"name": "自贡市",
+		"area": ["市辖区", "自流井区", "贡井区", "大安区", "沿滩区", "荣县", "富顺县"]
+	}, {
+		"name": "攀枝花市",
+		"area": ["市辖区", "东区", "西区", "仁和区", "米易县", "盐边县"]
+	}, {
+		"name": "泸州市",
+		"area": ["市辖区", "江阳区", "纳溪区", "龙马潭区", "泸县", "合江县", "叙永县", "古蔺县"]
+	}, {
+		"name": "德阳市",
+		"area": ["市辖区", "旌阳区", "中江县", "罗江县", "广汉市", "什邡市", "绵竹市"]
+	}, {
+		"name": "绵阳市",
+		"area": ["市辖区", "涪城区", "游仙区", "安州区", "三台县", "盐亭县", "梓潼县", "北川羌族自治县", "平武县", "江油市"]
+	}, {
+		"name": "广元市",
+		"area": ["市辖区", "利州区", "昭化区", "朝天区", "旺苍县", "青川县", "剑阁县", "苍溪县"]
+	}, {
+		"name": "遂宁市",
+		"area": ["市辖区", "船山区", "安居区", "蓬溪县", "射洪县", "大英县"]
+	}, {
+		"name": "内江市",
+		"area": ["市辖区", "市中区", "东兴区", "威远县", "资中县", "隆昌县"]
+	}, {
+		"name": "乐山市",
+		"area": ["市辖区", "市中区", "沙湾区", "五通桥区", "金口河区", "犍为县", "井研县", "夹江县", "沐川县", "峨边彝族自治县", "马边彝族自治县",
+			"峨眉山市"
+		]
+	}, {
+		"name": "南充市",
+		"area": ["市辖区", "顺庆区", "高坪区", "嘉陵区", "南部县", "营山县", "蓬安县", "仪陇县", "西充县", "阆中市"]
+	}, {
+		"name": "眉山市",
+		"area": ["市辖区", "东坡区", "彭山区", "仁寿县", "洪雅县", "丹棱县", "青神县"]
+	}, {
+		"name": "宜宾市",
+		"area": ["市辖区", "翠屏区", "南溪区", "宜宾县", "江安县", "长宁县", "高县", "珙县", "筠连县", "兴文县", "屏山县"]
+	}, {
+		"name": "广安市",
+		"area": ["市辖区", "广安区", "前锋区", "岳池县", "武胜县", "邻水县", "华蓥市"]
+	}, {
+		"name": "达州市",
+		"area": ["市辖区", "通川区", "达川区", "宣汉县", "开江县", "大竹县", "渠县", "万源市"]
+	}, {
+		"name": "雅安市",
+		"area": ["市辖区", "雨城区", "名山区", "荥经县", "汉源县", "石棉县", "天全县", "芦山县", "宝兴县"]
+	}, {
+		"name": "巴中市",
+		"area": ["市辖区", "巴州区", "恩阳区", "通江县", "南江县", "平昌县"]
+	}, {
+		"name": "资阳市",
+		"area": ["市辖区", "雁江区", "安岳县", "乐至县"]
+	}, {
+		"name": "阿坝藏族羌族自治州",
+		"area": ["马尔康市", "汶川县", "理县", "茂县", "松潘县", "九寨沟县", "金川县", "小金县", "黑水县", "壤塘县", "阿坝县", "若尔盖县", "红原县"]
+	}, {
+		"name": "甘孜藏族自治州",
+		"area": ["康定市", "泸定县", "丹巴县", "九龙县", "雅江县", "道孚县", "炉霍县", "甘孜县", "新龙县", "德格县", "白玉县", "石渠县", "色达县",
+			"理塘县", "巴塘县", "乡城县", "稻城县", "得荣县"
+		]
+	}, {
+		"name": "凉山彝族自治州",
+		"area": ["西昌市", "木里藏族自治县", "盐源县", "德昌县", "会理县", "会东县", "宁南县", "普格县", "布拖县", "金阳县", "昭觉县", "喜德县",
+			"冕宁县", "越西县", "甘洛县", "美姑县", "雷波县"
+		]
+	}]
+}, {
+	"name": "贵州",
+	"city": [{
+		"name": "贵阳市",
+		"area": ["市辖区", "南明区", "云岩区", "花溪区", "乌当区", "白云区", "观山湖区", "开阳县", "息烽县", "修文县", "清镇市"]
+	}, {
+		"name": "六盘水市",
+		"area": ["钟山区", "六枝特区", "水城县", "盘县"]
+	}, {
+		"name": "遵义市",
+		"area": ["市辖区", "红花岗区", "汇川区", "播州区", "桐梓县", "绥阳县", "正安县", "道真仡佬族苗族自治县", "务川仡佬族苗族自治县", "凤冈县", "湄潭县",
+			"余庆县", "习水县", "赤水市", "仁怀市"
+		]
+	}, {
+		"name": "安顺市",
+		"area": ["市辖区", "西秀区", "平坝区", "普定县", "镇宁布依族苗族自治县", "关岭布依族苗族自治县", "紫云苗族布依族自治县"]
+	}, {
+		"name": "毕节市",
+		"area": ["市辖区", "七星关区", "大方县", "黔西县", "金沙县", "织金县", "纳雍县", "威宁彝族回族苗族自治县", "赫章县"]
+	}, {
+		"name": "铜仁市",
+		"area": ["市辖区", "碧江区", "万山区", "江口县", "玉屏侗族自治县", "石阡县", "思南县", "印江土家族苗族自治县", "德江县", "沿河土家族自治县",
+			"松桃苗族自治县"
+		]
+	}, {
+		"name": "黔西南布依族苗族自治州",
+		"area": ["兴义市", "兴仁县", "普安县", "晴隆县", "贞丰县", "望谟县", "册亨县", "安龙县"]
+	}, {
+		"name": "黔东南苗族侗族自治州",
+		"area": ["凯里市", "黄平县", "施秉县", "三穗县", "镇远县", "岑巩县", "天柱县", "锦屏县", "剑河县", "台江县", "黎平县", "榕江县", "从江县",
+			"雷山县", "麻江县", "丹寨县"
+		]
+	}, {
+		"name": "黔南布依族苗族自治州",
+		"area": ["都匀市", "福泉市", "荔波县", "贵定县", "瓮安县", "独山县", "平塘县", "罗甸县", "长顺县", "龙里县", "惠水县", "三都水族自治县"]
+	}]
+}, {
+	"name": "云南",
+	"city": [{
+		"name": "昆明市",
+		"area": ["市辖区", "五华区", "盘龙区", "官渡区", "西山区", "东川区", "呈贡区", "晋宁县", "富民县", "宜良县", "石林彝族自治县", "嵩明县",
+			"禄劝彝族苗族自治县", "寻甸回族彝族自治县", "安宁市"
+		]
+	}, {
+		"name": "曲靖市",
+		"area": ["市辖区", "麒麟区", "沾益区", "马龙县", "陆良县", "师宗县", "罗平县", "富源县", "会泽县", "宣威市"]
+	}, {
+		"name": "玉溪市",
+		"area": ["市辖区", "红塔区", "江川区", "澄江县", "通海县", "华宁县", "易门县", "峨山彝族自治县", "新平彝族傣族自治县", "元江哈尼族彝族傣族自治县"]
+	}, {
+		"name": "保山市",
+		"area": ["市辖区", "隆阳区", "施甸县", "龙陵县", "昌宁县", "腾冲市"]
+	}, {
+		"name": "昭通市",
+		"area": ["市辖区", "昭阳区", "鲁甸县", "巧家县", "盐津县", "大关县", "永善县", "绥江县", "镇雄县", "彝良县", "威信县", "水富县"]
+	}, {
+		"name": "丽江市",
+		"area": ["市辖区", "古城区", "玉龙纳西族自治县", "永胜县", "华坪县", "宁蒗彝族自治县"]
+	}, {
+		"name": "普洱市",
+		"area": ["市辖区", "思茅区", "宁洱哈尼族彝族自治县", "墨江哈尼族自治县", "景东彝族自治县", "景谷傣族彝族自治县", "镇沅彝族哈尼族拉祜族自治县",
+			"江城哈尼族彝族自治县", "孟连傣族拉祜族佤族自治县", "澜沧拉祜族自治县", "西盟佤族自治县"
+		]
+	}, {
+		"name": "临沧市",
+		"area": ["市辖区", "临翔区", "凤庆县", "云县", "永德县", "镇康县", "双江拉祜族佤族布朗族傣族自治县", "耿马傣族佤族自治县", "沧源佤族自治县"]
+	}, {
+		"name": "楚雄彝族自治州",
+		"area": ["楚雄市", "双柏县", "牟定县", "南华县", "姚安县", "大姚县", "永仁县", "元谋县", "武定县", "禄丰县"]
+	}, {
+		"name": "红河哈尼族彝族自治州",
+		"area": ["个旧市", "开远市", "蒙自市", "弥勒市", "屏边苗族自治县", "建水县", "石屏县", "泸西县", "元阳县", "红河县", "金平苗族瑶族傣族自治县",
+			"绿春县", "河口瑶族自治县"
+		]
+	}, {
+		"name": "文山壮族苗族自治州",
+		"area": ["文山市", "砚山县", "西畴县", "麻栗坡县", "马关县", "丘北县", "广南县", "富宁县"]
+	}, {
+		"name": "西双版纳傣族自治州",
+		"area": ["景洪市", "勐海县", "勐腊县"]
+	}, {
+		"name": "大理白族自治州",
+		"area": ["大理市", "漾濞彝族自治县", "祥云县", "宾川县", "弥渡县", "南涧彝族自治县", "巍山彝族回族自治县", "永平县", "云龙县", "洱源县", "剑川县",
+			"鹤庆县"
+		]
+	}, {
+		"name": "德宏傣族景颇族自治州",
+		"area": ["瑞丽市", "芒市", "梁河县", "盈江县", "陇川县"]
+	}, {
+		"name": "怒江傈僳族自治州",
+		"area": ["泸水市", "福贡县", "贡山独龙族怒族自治县", "兰坪白族普米族自治县"]
+	}, {
+		"name": "迪庆藏族自治州",
+		"area": ["香格里拉市", "德钦县", "维西傈僳族自治县"]
+	}]
+}, {
+	"name": "西藏",
+	"city": [{
+		"name": "拉萨市",
+		"area": ["市辖区", "城关区", "堆龙德庆区", "林周县", "当雄县", "尼木县", "曲水县", "达孜县", "墨竹工卡县"]
+	}, {
+		"name": "日喀则市",
+		"area": ["桑珠孜区", "南木林县", "江孜县", "定日县", "萨迦县", "拉孜县", "昂仁县", "谢通门县", "白朗县", "仁布县", "康马县", "定结县",
+			"仲巴县", "亚东县", "吉隆县", "聂拉木县", "萨嘎县", "岗巴县"
+		]
+	}, {
+		"name": "昌都市",
+		"area": ["卡若区", "江达县", "贡觉县", "类乌齐县", "丁青县", "察雅县", "八宿县", "左贡县", "芒康县", "洛隆县", "边坝县"]
+	}, {
+		"name": "林芝市",
+		"area": ["巴宜区", "工布江达县", "米林县", "墨脱县", "波密县", "察隅县", "朗县"]
+	}, {
+		"name": "山南市",
+		"area": ["市辖区", "乃东区", "扎囊县", "贡嘎县", "桑日县", "琼结县", "曲松县", "措美县", "洛扎县", "加查县", "隆子县", "错那县", "浪卡子县"]
+	}, {
+		"name": "那曲地区",
+		"area": ["那曲县", "嘉黎县", "比如县", "聂荣县", "安多县", "申扎县", "索县", "班戈县", "巴青县", "尼玛县", "双湖县"]
+	}, {
+		"name": "阿里地区",
+		"area": ["普兰县", "札达县", "噶尔县", "日土县", "革吉县", "改则县", "措勤县"]
+	}]
+}, {
+	"name": "陕西",
+	"city": [{
+		"name": "西安市",
+		"area": ["市辖区", "新城区", "碑林区", "莲湖区", "灞桥区", "未央区", "雁塔区", "阎良区", "临潼区", "长安区", "高陵区", "蓝田县", "周至县",
+			"户县"
+		]
+	}, {
+		"name": "铜川市",
+		"area": ["市辖区", "王益区", "印台区", "耀州区", "宜君县"]
+	}, {
+		"name": "宝鸡市",
+		"area": ["市辖区", "渭滨区", "金台区", "陈仓区", "凤翔县", "岐山县", "扶风县", "眉县", "陇县", "千阳县", "麟游县", "凤县", "太白县"]
+	}, {
+		"name": "咸阳市",
+		"area": ["市辖区", "秦都区", "杨陵区", "渭城区", "三原县", "泾阳县", "乾县", "礼泉县", "永寿县", "彬县", "长武县", "旬邑县", "淳化县",
+			"武功县", "兴平市"
+		]
+	}, {
+		"name": "渭南市",
+		"area": ["市辖区", "临渭区", "华州区", "潼关县", "大荔县", "合阳县", "澄城县", "蒲城县", "白水县", "富平县", "韩城市", "华阴市"]
+	}, {
+		"name": "延安市",
+		"area": ["市辖区", "宝塔区", "安塞区", "延长县", "延川县", "子长县", "志丹县", "吴起县", "甘泉县", "富县", "洛川县", "宜川县", "黄龙县",
+			"黄陵县"
+		]
+	}, {
+		"name": "汉中市",
+		"area": ["市辖区", "汉台区", "南郑县", "城固县", "洋县", "西乡县", "勉县", "宁强县", "略阳县", "镇巴县", "留坝县", "佛坪县"]
+	}, {
+		"name": "榆林市",
+		"area": ["市辖区", "榆阳区", "横山区", "神木县", "府谷县", "靖边县", "定边县", "绥德县", "米脂县", "佳县", "吴堡县", "清涧县", "子洲县"]
+	}, {
+		"name": "安康市",
+		"area": ["市辖区", "汉滨区", "汉阴县", "石泉县", "宁陕县", "紫阳县", "岚皋县", "平利县", "镇坪县", "旬阳县", "白河县"]
+	}, {
+		"name": "商洛市",
+		"area": ["市辖区", "商州区", "洛南县", "丹凤县", "商南县", "山阳县", "镇安县", "柞水县"]
+	}]
+}, {
+	"name": "甘肃",
+	"city": [{
+		"name": "兰州市",
+		"area": ["市辖区", "城关区", "七里河区", "西固区", "安宁区", "红古区", "永登县", "皋兰县", "榆中县"]
+	}, {
+		"name": "嘉峪关市",
+		"area": ["市辖区"]
+	}, {
+		"name": "金昌市",
+		"area": ["市辖区", "金川区", "永昌县"]
+	}, {
+		"name": "白银市",
+		"area": ["市辖区", "白银区", "平川区", "靖远县", "会宁县", "景泰县"]
+	}, {
+		"name": "天水市",
+		"area": ["市辖区", "秦州区", "麦积区", "清水县", "秦安县", "甘谷县", "武山县", "张家川回族自治县"]
+	}, {
+		"name": "武威市",
+		"area": ["市辖区", "凉州区", "民勤县", "古浪县", "天祝藏族自治县"]
+	}, {
+		"name": "张掖市",
+		"area": ["市辖区", "甘州区", "肃南裕固族自治县", "民乐县", "临泽县", "高台县", "山丹县"]
+	}, {
+		"name": "平凉市",
+		"area": ["市辖区", "崆峒区", "泾川县", "灵台县", "崇信县", "华亭县", "庄浪县", "静宁县"]
+	}, {
+		"name": "酒泉市",
+		"area": ["市辖区", "肃州区", "金塔县", "瓜州县", "肃北蒙古族自治县", "阿克塞哈萨克族自治县", "玉门市", "敦煌市"]
+	}, {
+		"name": "庆阳市",
+		"area": ["市辖区", "西峰区", "庆城县", "环县", "华池县", "合水县", "正宁县", "宁县", "镇原县"]
+	}, {
+		"name": "定西市",
+		"area": ["市辖区", "安定区", "通渭县", "陇西县", "渭源县", "临洮县", "漳县", "岷县"]
+	}, {
+		"name": "陇南市",
+		"area": ["市辖区", "武都区", "成县", "文县", "宕昌县", "康县", "西和县", "礼县", "徽县", "两当县"]
+	}, {
+		"name": "临夏回族自治州",
+		"area": ["临夏市", "临夏县", "康乐县", "永靖县", "广河县", "和政县", "东乡族自治县", "积石山保安族东乡族撒拉族自治县"]
+	}, {
+		"name": "甘南藏族自治州",
+		"area": ["合作市", "临潭县", "卓尼县", "舟曲县", "迭部县", "玛曲县", "碌曲县", "夏河县"]
+	}]
+}, {
+	"name": "青海",
+	"city": [{
+		"name": "西宁市",
+		"area": ["市辖区", "城东区", "城中区", "城西区", "城北区", "大通回族土族自治县", "湟中县", "湟源县"]
+	}, {
+		"name": "海东市",
+		"area": ["乐都区", "平安区", "民和回族土族自治县", "互助土族自治县", "化隆回族自治县", "循化撒拉族自治县"]
+	}, {
+		"name": "海北藏族自治州",
+		"area": ["门源回族自治县", "祁连县", "海晏县", "刚察县"]
+	}, {
+		"name": "黄南藏族自治州",
+		"area": ["同仁县", "尖扎县", "泽库县", "河南蒙古族自治县"]
+	}, {
+		"name": "海南藏族自治州",
+		"area": ["共和县", "同德县", "贵德县", "兴海县", "贵南县"]
+	}, {
+		"name": "果洛藏族自治州",
+		"area": ["玛沁县", "班玛县", "甘德县", "达日县", "久治县", "玛多县"]
+	}, {
+		"name": "玉树藏族自治州",
+		"area": ["玉树市", "杂多县", "称多县", "治多县", "囊谦县", "曲麻莱县"]
+	}, {
+		"name": "海西蒙古族藏族自治州",
+		"area": ["格尔木市", "德令哈市", "乌兰县", "都兰县", "天峻县"]
+	}]
+}, {
+	"name": "宁夏",
+	"city": [{
+		"name": "银川市",
+		"area": ["市辖区", "兴庆区", "西夏区", "金凤区", "永宁县", "贺兰县", "灵武市"]
+	}, {
+		"name": "石嘴山市",
+		"area": ["市辖区", "大武口区", "惠农区", "平罗县"]
+	}, {
+		"name": "吴忠市",
+		"area": ["市辖区", "利通区", "红寺堡区", "盐池县", "同心县", "青铜峡市"]
+	}, {
+		"name": "固原市",
+		"area": ["市辖区", "原州区", "西吉县", "隆德县", "泾源县", "彭阳县"]
+	}, {
+		"name": "中卫市",
+		"area": ["市辖区", "沙坡头区", "中宁县", "海原县"]
+	}]
+}, {
+	"name": "新疆",
+	"city": [{
+		"name": "乌鲁木齐市",
+		"area": ["市辖区", "天山区", "沙依巴克区", "新市区", "水磨沟区", "头屯河区", "达坂城区", "米东区", "乌鲁木齐县"]
+	}, {
+		"name": "克拉玛依市",
+		"area": ["市辖区", "独山子区", "克拉玛依区", "白碱滩区", "乌尔禾区"]
+	}, {
+		"name": "吐鲁番市",
+		"area": ["高昌区", "鄯善县", "托克逊县"]
+	}, {
+		"name": "哈密市",
+		"area": ["伊州区", "巴里坤哈萨克自治县", "伊吾县"]
+	}, {
+		"name": "昌吉回族自治州",
+		"area": ["昌吉市", "阜康市", "呼图壁县", "玛纳斯县", "奇台县", "吉木萨尔县", "木垒哈萨克自治县"]
+	}, {
+		"name": "博尔塔拉蒙古自治州",
+		"area": ["博乐市", "阿拉山口市", "精河县", "温泉县"]
+	}, {
+		"name": "巴音郭楞蒙古自治州",
+		"area": ["库尔勒市", "轮台县", "尉犁县", "若羌县", "且末县", "焉耆回族自治县", "和静县", "和硕县", "博湖县"]
+	}, {
+		"name": "阿克苏地区",
+		"area": ["阿克苏市", "温宿县", "库车县", "沙雅县", "新和县", "拜城县", "乌什县", "阿瓦提县", "柯坪县"]
+	}, {
+		"name": "克孜勒苏柯尔克孜自治州",
+		"area": ["阿图什市", "阿克陶县", "阿合奇县", "乌恰县"]
+	}, {
+		"name": "喀什地区",
+		"area": ["喀什市", "疏附县", "疏勒县", "英吉沙县", "泽普县", "莎车县", "叶城县", "麦盖提县", "岳普湖县", "伽师县", "巴楚县",
+			"塔什库尔干塔吉克自治县"
+		]
+	}, {
+		"name": "和田地区",
+		"area": ["和田市", "和田县", "墨玉县", "皮山县", "洛浦县", "策勒县", "于田县", "民丰县"]
+	}, {
+		"name": "伊犁哈萨克自治州",
+		"area": ["伊宁市", "奎屯市", "霍尔果斯市", "伊宁县", "察布查尔锡伯自治县", "霍城县", "巩留县", "新源县", "昭苏县", "特克斯县", "尼勒克县"]
+	}, {
+		"name": "塔城地区",
+		"area": ["塔城市", "乌苏市", "额敏县", "沙湾县", "托里县", "裕民县", "和布克赛尔蒙古自治县"]
+	}, {
+		"name": "阿勒泰地区",
+		"area": ["阿勒泰市", "布尔津县", "富蕴县", "福海县", "哈巴河县", "青河县", "吉木乃县"]
+	}, {
+		"name": "直辖县",
+		"area": ["石河子市", "阿拉尔市", "图木舒克市", "五家渠市", "铁门关市"]
+	}]
+}, {
+	"name": "香港",
+	"city": [{
+		"name": "香港特别行政区",
+		"area": ["中西区", "东区", "九龙城区", "观塘区", "南区", "深水埗区", "湾仔区", "黄大仙区", "油尖旺区", "离岛区", "葵青区", "北区", "西贡区",
+			"沙田区", "屯门区", "大埔区", "荃湾区", "元朗区"
+		]
+	}]
+}, {
+	"name": "澳门",
+	"city": [{
+		"name": "澳门特别行政区",
+		"area": ["澳门半岛", "凼仔", "路凼城", "路环"]
+	}]
+}, {
+	"name": "台湾",
+	"city": [{
+		"name": "彰化县",
+		"area": ["芳苑乡", "芬园乡", "福兴乡", "和美镇", "花坛乡", "鹿港镇", "埤头乡", "埔心乡", "埔盐乡", "伸港乡", "社头乡", "田尾乡", "田中镇",
+			"线西乡", "溪湖镇", "秀水乡", "溪州乡", "永靖乡", "员林市", "竹塘乡"
+		]
+	}, {
+		"name": "新北市",
+		"area": ["八里区", "板桥区", "贡寮区", "金山区", "林口区", "芦洲区", "坪林区", "平溪区", "瑞芳区", "三重区", "三峡区", "三芝区", "深坑区",
+			"石碇区", "石门区", "双溪区", "树林区", "泰山区", "淡水区", "土城区"
+		]
+	}, {
+		"name": "澎湖县",
+		"area": ["白沙乡", "湖西乡", "马公市", "七美乡", "望安乡", "西屿乡"]
+	}, {
+		"name": "屏东县",
+		"area": ["三地门乡", "狮子乡", "泰武乡", "万丹乡", "万峦乡", "雾臺乡", "新埤乡", "新园乡", "盐埔乡", "竹田乡", "长治乡", "潮州镇", "车城乡",
+			"春日乡", "东港镇", "枋寮乡", "枋山乡", "高树乡", "恆春镇", "佳冬乡"
+		]
+	}, {
+		"name": "臺中市",
+		"area": ["梧栖区", "乌日区", "新社区", "西屯区", "北屯区", "中区", "大肚区", "大甲区", "大里区", "大雅区", "大安区", "东势区", "东区",
+			"丰原区", "和平区", "后里区", "龙井区", "南屯区", "北区", "清水区"
+		]
+	}, {
+		"name": "臺南市",
+		"area": ["佳里区", "将军区", "六甲区", "柳营区", "龙崎区", "麻豆区", "南化区", "楠西区", "北区", "七股区", "仁德区", "善化区", "山上区",
+			"南区", "中西区", "下营区", "西港区", "新化区", "新市区", "新营区"
+		]
+	}, {
+		"name": "臺北市",
+		"area": ["北投区", "大同区", "大安区", "南港区", "内湖区", "士林区", "松山区", "万华区", "文山区", "信义区", "中山区", "中正区"]
+	}, {
+		"name": "臺东县",
+		"area": ["卑南乡", "长滨乡", "成功镇", "池上乡", "达仁乡", "大武乡", "东河乡", "关山镇", "海端乡", "金峰乡", "兰屿乡", "绿岛乡", "鹿野乡",
+			"太麻里乡", "臺东市", "延平乡"
+		]
+	}, {
+		"name": "桃园市",
+		"area": ["八德区", "大溪区", "大园区", "復兴区", "观音区", "龟山区", "龙潭区", "芦竹区", "平镇区", "桃园区", "新屋区", "杨梅区", "中坜区"]
+	}, {
+		"name": "宜兰县",
+		"area": ["大同乡", "钓鱼臺", "冬山乡", "礁溪乡", "罗东镇", "南澳乡", "三星乡", "苏澳镇", "头城镇", "五结乡", "宜兰市", "员山乡", "壮围乡"]
+	}, {
+		"name": "南投县",
+		"area": ["草屯镇", "国姓乡", "集集镇", "鹿谷乡", "名间乡", "南投市", "埔里镇", "仁爱乡", "水里乡", "信义乡", "鱼池乡", "中寮乡", "竹山镇"]
+	}, {
+		"name": "南海岛",
+		"area": ["东沙群岛", "南沙群岛"]
+	}, {
+		"name": "苗栗县",
+		"area": ["头屋乡", "西湖乡", "苑里镇", "造桥乡", "竹南镇", "卓兰镇", "大湖乡", "公馆乡", "后龙镇", "苗栗市", "南庄乡", "三湾乡", "三义乡",
+			"狮潭乡", "泰安乡", "铜锣乡", "通霄镇", "头份市"
+		]
+	}, {
+		"name": "嘉义市",
+		"area": ["东区", "西区"]
+	}, {
+		"name": "嘉义县",
+		"area": ["阿里山乡", "布袋镇", "大林镇", "大埔乡", "东石乡", "番路乡", "六脚乡", "鹿草乡", "梅山乡", "民雄乡", "朴子市", "水上乡", "太保市",
+			"溪口乡", "新港乡", "义竹乡", "中埔乡", "竹崎乡"
+		]
+	}, {
+		"name": "新竹市",
+		"area": ["东区", "北区"]
+	}, {
+		"name": "新竹县",
+		"area": ["峨眉乡", "关西镇", "横山乡", "湖口乡", "尖石乡", "芎林乡", "五峰乡", "新丰乡", "新埔镇", "竹北市", "竹东镇", "宝山乡", "北埔乡"]
+	}, {
+		"name": "花莲县",
+		"area": ["卓溪乡", "丰滨乡", "凤林镇", "富里乡", "光復乡", "花莲市", "吉安乡", "瑞穗乡", "寿丰乡", "万荣乡", "新城乡", "秀林乡", "玉里镇"]
+	}, {
+		"name": "高雄市",
+		"area": ["阿莲区", "大寮区", "大社区", "大树区", "凤山区", "冈山区", "鼓山区", "湖内区", "甲仙区", "苓雅区", "林园区", "六龟区", "路竹区",
+			"茂林区", "美浓区", "弥陀区", "那玛夏区", "楠梓区", "内门区", "鸟松区"
+		]
+	}, {
+		"name": "基隆市",
+		"area": ["安乐区", "暖暖区", "七堵区", "仁爱区", "信义区", "中山区", "中正区"]
+	}, {
+		"name": "金门县",
+		"area": ["金城镇", "金湖镇", "金宁乡", "金沙镇", "烈屿乡", "乌坵乡"]
+	}, {
+		"name": "连江县",
+		"area": ["北竿乡", "东引乡", "莒光乡", "南竿乡"]
+	}, {
+		"name": "云林县",
+		"area": ["褒忠乡", "北港镇", "莿桐乡", "大埤乡", "东势乡", "斗六市", "斗南镇", "二崙乡", "古坑乡", "虎尾镇", "口湖乡", "林内乡", "崙背乡",
+			"麦寮乡", "水林乡", "四湖乡", "臺西乡", "土库镇", "西螺镇", "元长乡"
+		]
+	}]
+}]

+ 103 - 0
components/wangding-pickerAddress/wangding-pickerAddress.vue

@@ -0,0 +1,103 @@
+<template>
+	<picker @change="bindPickerChange" @columnchange="columnchange" :range="array" range-key="name" :value="value" mode="multiSelector">
+		<slot></slot>
+	</picker>
+</template>
+
+<script>
+	import AllAddress from './data.js'
+	let selectVal = ['','',''];
+	
+	export default {
+		data() {
+			return{
+				value: [0,0,0],
+				array: [],
+				index: 0
+			}
+		},
+		created() {
+			this.initSelect()
+		},
+		methods:{
+			// 初始化地址选项
+			initSelect() {
+				this.updateSourceDate() // 更新源数据
+				.updateAddressDate() // 更新结果数据
+				.$forceUpdate()  // 触发双向绑定
+			},
+			// 地址控件改变控件
+			columnchange(d) {
+				this.updateSelectIndex(d.detail.column, d.detail.value) // 更新选择索引
+				.updateSourceDate() // 更新源数据
+				.updateAddressDate() // 更新结果数据
+				.$forceUpdate()  // 触发双向绑定
+			},
+			
+			/**
+			 * 更新源数据
+			 * */
+			updateSourceDate() {
+				this.array = []
+				this.array[0] = AllAddress.map(obj => {
+					return {
+						name: obj.name
+					}
+				})
+				this.array[1] = AllAddress[this.value[0]].city.map(obj => {
+					return {
+						name: obj.name
+					}
+				})
+				this.array[2] = AllAddress[this.value[0]].city[this.value[1]].area.map(obj => { 
+					return {
+						name: obj
+					}
+				})
+				return this
+			},
+			
+			/**
+			 * 更新索引
+			 * */
+			updateSelectIndex(column, value){
+				let arr = JSON.parse(JSON.stringify(this.value)) 
+				arr[column] = value
+				if(column === 0 ) {
+					arr[1] = 0
+					arr[2] = 0
+				}
+				if(column === 1 ) {
+					arr[2] = 0
+				}
+				this.value = arr
+				return this
+			},
+			
+			/**
+			 * 更新结果数据 
+			 * */
+			updateAddressDate() {
+				selectVal[0] = this.array[0][this.value[0]].name
+				selectVal[1] = this.array[1][this.value[1]].name 
+				selectVal[2] = this.array[2][this.value[2]].name 
+				return this
+			},
+			
+			/**
+			 * 点击确定
+			 * */
+			bindPickerChange(e) {
+				this.$emit('change', {
+					index: this.value,
+					data: selectVal
+				})
+				return this
+			}
+			
+		}
+	}
+</script>
+
+<style>
+</style>

+ 44 - 0
main.js

@@ -0,0 +1,44 @@
+import Vue from 'vue'
+import store from './store'
+import App from './App'
+/**
+ *  所有测试用数据均存放于根目录json.js
+ *  
+ *  css部分使用了App.vue下的全局样式和iconfont图标,有需要图标库的可以留言。
+ *  示例使用了uni.scss下的变量, 除变量外已尽量移除特有语法,可直接替换为其他预处理器使用
+ */
+const msg = (title, duration=1500, mask=false, icon='none')=>{
+	//统一提示方便全局修改
+	if(Boolean(title) === false){
+		return;
+	}
+	uni.showToast({
+		title,
+		duration,
+		mask,
+		icon
+	});
+}
+
+const prePage = ()=>{
+	// 获取当前页面
+	let pages = getCurrentPages();
+	let prePage = pages[pages.length - 2];
+	// #ifdef H5
+	return prePage;
+	// #endif
+	return prePage.$vm;
+}
+
+
+Vue.config.productionTip = false
+Vue.prototype.$fire = new Vue();
+Vue.prototype.$store = store;
+Vue.prototype.$api = {msg, prePage};
+
+App.mpType = 'app'
+
+const app = new Vue({
+    ...App
+})
+app.$mount()

+ 199 - 0
manifest.json

@@ -0,0 +1,199 @@
+{
+    "name" : "母婴界严选",
+    "appid" : "__UNI__F0EBD91",
+    "description" : "",
+    "versionName" : "1.0.19",
+    "versionCode" : 122,
+    "transformPx" : false,
+    "app-plus" : {
+        /* 5+App特有相关 */
+        "usingComponents" : true,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        "modules" : {
+            "Maps" : {},
+            "Geolocation" : {},
+            "OAuth" : {},
+            "Payment" : {},
+            "Share" : {}
+        },
+        /* 模块配置 */
+        "distribute" : {
+            /* 应用发布信息 */
+            "android" : {
+                /* android打包配置 */
+                "permissions" : [
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.INTERNET\"/>",
+                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ],
+                "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ]
+            },
+            "ios" : {
+                "idfa" : false,
+                "privacyDescription" : {
+                    "NSPhotoLibraryUsageDescription" : "用于提交审核认证",
+                    "NSLocationWhenInUseUsageDescription" : "该应用需要持续获取用户地理位置,以便为你进行导航",
+                    "NSLocationAlwaysUsageDescription" : "该应用需要你的地理位置,以便为你提供当前位置信息",
+                    "NSPhotoLibraryAddUsageDescription" : "该应用需要读取你的相册,以便为你编辑个人信息",
+                    "NSCameraUsageDescription" : "该应用需要你的相机,以便你完成信息认证",
+                    "NSLocationAlwaysAndWhenInUseUsageDescription" : "该应用需要你的地理位置,以便为你提供当前位置信息"
+                },
+                "dSYMs" : false
+            },
+            /* ios打包配置 */
+            "sdkConfigs" : {
+                "maps" : {
+                    "amap" : {
+                        "appkey_ios" : "7e8fabcd781f77afbd37eaf98dd54498",
+                        "appkey_android" : "605c71799909b1b96fbc15dbe161cca0"
+                    }
+                },
+                "oauth" : {
+                    "weixin" : {
+                        "appid" : "wx016c3a0056b79c15",
+                        "appsecret" : "ab387ea25d15ad1f6d91d72ddc64bf96",
+                        "UniversalLinks" : "https://www.zjljzn.com/uni-universallinks/__UNI__F0EBD91/"
+                    },
+                    "apple" : {}
+                },
+                "ad" : {},
+                "geolocation" : {
+                    "amap" : {
+                        "__platform__" : [ "ios", "android" ],
+                        "appkey_ios" : "7e8fabcd781f77afbd37eaf98dd54498",
+                        "appkey_android" : "605c71799909b1b96fbc15dbe161cca0"
+                    },
+                    "system" : {
+                        "__platform__" : [ "ios", "android" ]
+                    }
+                },
+                "payment" : {
+                    "alipay" : {
+                        "__platform__" : [ "ios", "android" ]
+                    },
+                    "weixin" : {
+                        "__platform__" : [ "ios", "android" ],
+                        "appid" : "wx016c3a0056b79c15",
+                        "UniversalLinks" : "https://www.zjljzn.com/uni-universallinks/__UNI__F0EBD91/"
+                    }
+                },
+                "push" : {},
+                "share" : {
+                    "weixin" : {
+                        "appid" : "wx016c3a0056b79c15",
+                        "UniversalLinks" : "https://www.zjljzn.com/uni-universallinks/__UNI__F0EBD91/"
+                    }
+                },
+                "statics" : {}
+            },
+            "splashscreen" : {
+                "androidStyle" : "common",
+                "iosStyle" : "common",
+                "android" : {
+                    "hdpi" : "unpackage/启动图/安卓/482.9.png",
+                    "xhdpi" : "unpackage/启动图/安卓/722.9.png",
+                    "xxhdpi" : "unpackage/启动图/安卓/1082.9.png"
+                },
+                "ios" : {
+                    "storyboard" : "unpackage/启动图/ios/CustomStoryboard.zip"
+                }
+            },
+            "icons" : {
+                "android" : {
+                    "hdpi" : "unpackage/res/icons/72x72.png",
+                    "xhdpi" : "unpackage/res/icons/96x96.png",
+                    "xxhdpi" : "unpackage/res/icons/144x144.png",
+                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
+                },
+                "ios" : {
+                    "appstore" : "unpackage/res/icons/1024x1024.png",
+                    "ipad" : {
+                        "app" : "unpackage/res/icons/76x76.png",
+                        "app@2x" : "unpackage/res/icons/152x152.png",
+                        "notification" : "unpackage/res/icons/20x20.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "proapp@2x" : "unpackage/res/icons/167x167.png",
+                        "settings" : "unpackage/res/icons/29x29.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "spotlight" : "unpackage/res/icons/40x40.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
+                    },
+                    "iphone" : {
+                        "app@2x" : "unpackage/res/icons/120x120.png",
+                        "app@3x" : "unpackage/res/icons/180x180.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "notification@3x" : "unpackage/res/icons/60x60.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "settings@3x" : "unpackage/res/icons/87x87.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
+                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
+                    }
+                }
+            }
+        }
+    },
+    /* SDK配置 */
+    "quickapp" : {},
+    /* 快应用特有相关 */
+    "mp-weixin" : {
+        /* 小程序特有相关 */
+        "usingComponents" : true,
+        "appid" : "wx57a473fc2f83f7e5",
+        "setting" : {
+            "urlCheck" : true,
+            "minified" : true
+        },
+        "permission" : {},
+        "lazyCodeLoading" : "requiredComponents",
+        "requiredBackgroundModes" : [ "location" ]
+    },
+    "h5" : {
+        "title" : "母婴界严选",
+        "domain" : "",
+        "router" : {
+            "base" : "/index/",
+            "mode" : "history"
+        },
+        "devServer" : {
+            "proxy" : {
+                "/api" : {
+                    "target" : "https://api.myjie.cn/api",
+                    // "changeOrigin": true,
+                    "pathRewrite" : {
+                        "/api" : "" // rewrite path
+                    }
+                }
+            }
+        },
+        // "https" : true
+        "sdkConfigs" : {
+            "maps" : {
+                "qqmap" : {
+                    "key" : "VYZBZ-P2TRG-RMIQ3-ITAIN-2DKBK-CKFQQ"
+                }
+            }
+        }
+    },
+    "_spaceID" : "364f3115-6ed2-4e8f-913f-836cbd3f34fa"
+}

+ 19 - 0
package.json

@@ -0,0 +1,19 @@
+{
+    "id": "alger-simg",
+    "name": "图片预览(使用简单 长按可保存分享 插件)",
+    "version": "1.1.0",
+    "description": "图片预览(使用简单) 可以双指缩放 可以保存分享",
+    "keywords": [
+        "图片",
+        "image",
+        "img",
+        "图片预览",
+        "大图"
+    ],
+    "dcloudext": {
+        "category": [
+            "前端组件",
+            "通用组件"
+        ]
+    }
+}

+ 356 - 0
pages.json

@@ -0,0 +1,356 @@
+{
+	"pages": [{
+			"path": "pages/index/index",
+			"style": {
+				// #ifndef MP
+				"navigationStyle": "custom",
+				"app-plus": {
+					"titleNView": false
+				},
+				// #endif
+				// #ifdef MP
+				"navigationBarBackgroundColor": "#ff629f",
+				"navigationBarTextStyle":"white",
+				// #endif
+				"navigationBarTitleText": "母婴界严选"
+			}
+		},
+		// {
+		// 	"path": "pages/cart/cart",
+		// 	"style": {
+		// 		// #ifndef MP-WEIXIN
+		// 		"navigationStyle": "custom",
+		// 		// #endif
+		// 		"navigationBarTitleText": "购物车"
+		// 	}
+		// },
+		{
+			"path": "pages/userhome/user",
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTitleText": "个人中心"
+			}
+		}
+	],
+	"subPackages": [
+		{
+		"root": "pages/modelData",
+		"name": "model_index",
+		"pages": [
+		]
+	},
+	{
+		"root": "pages/user",
+		"name": "user",
+		"pages": [
+			// {
+			// 	"path": "realName/realNameAuthentication",
+			// 	"style": {
+			// 		"navigationBarTitleText": "实名认证"
+			// 	}
+			// },
+			{
+				"path": "realName/cropper",
+				"style": {
+					"navigationBarTitleText": "图片裁切"
+				}
+			},
+			{
+				"path": "myteam",
+				"style": {
+					"navigationBarTitleText": "我的团队"
+				}
+			},
+			{
+				"path": "teamph",
+				"style": {
+					"navigationBarTitleText": "我的团队"
+				}
+			},
+			{
+				"path": "award/award",
+				"style": {
+					"navigationBarTitleText": "佣金",
+					"navigationBarBackgroundColor": "#f6ab0b",
+					"navigationBarTextStyle": "white"
+				}
+			},
+			{
+				"path": "award/awardList",
+				"style": {
+					"navigationBarTitleText": "佣金明细"
+				}
+			},
+			{
+				"path": "award/withdrawal",
+				"style": {
+					"navigationBarTitleText": "提现"
+				}
+			},
+			{
+				"path": "money/pay",
+				"style": {
+					"navigationBarTitleText": "支付",
+					"navigationBarBackgroundColor": "#0BBB62",
+					"navigationBarTextStyle": "white"
+				}
+			},
+			{
+				"path": "money/paySuccess",
+				"style": {
+					"navigationBarTitleText": "支付成功"
+				}
+			},
+			{
+				"path": "money/wallet",
+				"style": {
+					"navigationBarTitleText": "我的钱包",
+					"navigationBarBackgroundColor": "#0BBB62",
+					"navigationBarTextStyle": "white"
+				}
+			},
+			{
+				"path": "money/walletList",
+				"style": {
+					"navigationBarTitleText": "余额明细"
+				}
+			},
+			{
+				"path": "award/account",
+				"style": {
+					"navigationBarTitleText": "提现账号"
+				}
+			},
+			{
+				"path": "money/recharge",
+				"style": {
+					"navigationBarTitleText": "充值",
+					"navigationBarBackgroundColor": "#0BBB62",
+					"navigationBarTextStyle": "white"
+				}
+			},
+			{
+				"path": "shareQrCode",
+				"style": {
+					"navigationBarTitleText": "邀请好友"
+				}
+			},
+			{
+				"path": "model/modelrz",
+				"style": {
+					"navigationBarTitleText": "资料认证"
+				}
+			},
+			{
+				"path": "model/model",
+				"style": {
+					"navigationBarTitleText": ""
+				}
+			},
+			{
+				"path": "model/modelList",
+				"style": {
+					"navigationBarTitleText": "模板列表"
+				}
+			},
+			{
+				"path": "model/mymodellist",
+				"style": {
+					"navigationBarTitleText": "我的模板"
+				}
+			},
+			{
+				"path": "model/shoprz",
+				"style": {
+					"navigationBarTitleText": "平台认证"
+				}
+			},
+			{
+				"path": "model/phb",
+				"style": {
+					"navigationBarTitleText": "排行榜"
+				}
+			}
+			
+		]
+	}, {
+		"root": "pages/set",
+		"name": "set",
+		"pages": [{
+				"path": "set",
+				"style": {
+					"navigationBarTitleText": "设置"
+				}
+			},
+			{
+				"path": "address",
+				"style": {
+					"navigationBarTitleText": "收货地址"
+				}
+			},
+			{
+				"path": "addressManage",
+				"style": {
+					"navigationBarTitleText": ""
+				}
+			},
+			{
+				"path": "phone",
+				"style": {
+					"navigationBarTitleText": "手机认证"
+				}
+			},
+			{
+				"path": "password",
+				"style": {
+					"navigationBarTitleText": "修改密码"
+				}
+			},
+			{
+				"path": "userinfo",
+				"style": {
+					"navigationBarTitleText": "修改资料"
+				}
+			}
+		]
+	}, {
+		"root": "pages/public",
+		"name": "public",
+		"pages": [
+			// #ifdef H5
+			{
+				"path": "domApp",
+				"style": {
+					"navigationBarTitleText": "app下载",
+					"app-plus": {
+						"titleNView": false
+					}
+				}
+			},
+			// #endif
+			// #ifndef MP
+			{
+				"path": "workwork",
+				"style": {
+					"navigationBarTitleText": "关于我们"
+				}
+			},
+			// #endif
+			{
+				"path": "register",
+				"style": {
+					"navigationBarTitleText": "注册",
+					"app-plus": {
+						"titleNView": false
+					}
+				}
+			},
+			{
+				"path": "phoneLogin",
+				"style": {
+					"navigationBarTitleText": "手机登录",
+					"app-plus": {
+						"titleNView": false
+					}
+				}
+			},
+			{
+				"path": "login",
+				"style": {
+					"navigationBarTitleText": "登录",
+					"app-plus": {
+						"titleNView": false
+					}
+				}
+			},
+			// #ifdef MP || H5
+			{
+				"path": "wxLogin",
+				"style": {
+					"navigationBarTitleText": "微信登录",
+					"app-plus": {
+						"titleNView": {
+							"type": "transparent"
+						}
+					}
+				}
+			},
+			// #endif
+			{
+				"path": "forget",
+				"style": {
+					"navigationBarTitleText": "忘记密码",
+					"app-plus": {
+						"titleNView": false
+					}
+				}
+			},
+			{
+				"path": "redirect",
+				"style": {
+					"navigationBarTitleText": "微信登录跳转页面",
+					"app-plus": {
+						"titleNView": false
+					}
+				}
+			},
+			{
+				"path": "userAgreement",
+				"style": {
+					"navigationBarTitleText": "用户协议"
+				}
+			},
+			{
+				"path": "privacyAgreement",
+				"style": {
+					"navigationBarTitleText": "隐私协议"
+				}
+			}
+		]
+	}],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "uni-app",
+		"navigationBarBackgroundColor": "#FFFFFF",
+		"backgroundColor": "#f8f8f8"
+	},
+	"tabBar": {
+		"color": "#666666",
+		"selectedColor": "#F65486",
+		"borderStyle": "black",
+		"backgroundColor": "#ffffff",
+		"list": [{
+				"pagePath": "pages/index/index",
+				"iconPath": "static/tabBar/tab-home.png",
+				"selectedIconPath": "static/tabBar/tab-home-current.png",
+				"text": "首页"
+			},
+			// {
+			// 	"pagePath": "pages/category/category",
+			// 	"iconPath": "static/tabBar/tab-cate.png",
+			// 	"selectedIconPath": "static/tabBar/tab-cate-current.png",
+			// 	"text": "分类"
+			// },
+			// {
+			// 	"pagePath": "pages/cart/cart",
+			// 	"iconPath": "static/tabBar/tab-cart.png",
+			// 	"selectedIconPath": "static/tabBar/tab-cart-current.png",
+			// 	"text": "购物车"
+			// },
+			{
+				"pagePath": "pages/userhome/user",
+				"iconPath": "static/tabBar/tab-my.png",
+				"selectedIconPath": "static/tabBar/tab-my-current.png",
+				"text": "我的"
+			}
+		]
+	},
+	"condition": { //模式配置,仅开发期间生效
+		"current": 0, //当前激活的模式(list 的索引项)
+		"list": [{
+			"name": "", //模式名称
+			"path": "", //启动页面,必选
+			"query": "" //启动参数,在页面的onLoad函数里面得到
+		}]
+	}
+}

+ 619 - 0
pages/index/index.vue

@@ -0,0 +1,619 @@
+<template>
+	<view class="indexBox">
+		<swiper class="top-swiper" autoplay="true" duration="400" interval="5000" @change="swiperChange">
+			<swiper-item v-for="item in imagelist" class="carousel-item" @click="navTo(item.url)">
+				<image class="imageitem" :src="item.img" />
+			</swiper-item>
+		</swiper>
+		<view class="hot-list-box">
+			<view class="title-box flex">
+				<view class="flex">
+					<image class="hot margin-r-10" src="../../static/icon/hot.png" mode="scaleToFill"></image>
+					<view class="title">
+						热门名片
+					</view>
+				</view>
+				<navigator url="/pages/user/model/modelList?ishot=1">
+					<view class="right flex">
+						<text class="margin-r-10">
+							更多
+						</text>
+						<image src="../../static/icon/next1.png" mode="scaleToFill" class="tip"></image>
+					</view>
+				</navigator>
+			</view>
+			<view class="hot-list">
+				<view class="item" v-for="item in rmList"
+					@click="navTo('/pages/user/model/model?mtype=' + item.id+'&type=0')">
+					<view class="hot-image-box">
+						<image class="hot-image" :src="item.img" mode="widthFix"></image>
+					</view>
+					<view class="hot-title clamp">
+						{{item.title}}
+					</view>
+					<view class="hot-money flex clamp">
+						<text class="money">
+							¥{{item.price}}
+						</text>
+						<text class="oldmoney">
+							{{item.old_price}}
+						</text>
+					</view>
+				</view>
+				<view class="item-none" v-if="rmList.length<3" v-for="item in (3-rmList.length)">
+
+				</view>
+			</view>
+
+
+			<view class="title-box flex">
+				<!-- <view class="flex">
+					<image class="hot margin-r-10" src="../../static/icon/hot.png" mode="scaleToFill"></image>
+					<view class="title">
+						名片推荐
+					</view>
+				</view>
+				<navigator url="/pages/user/model/modelList?isrecommend=1">
+					<view class="right flex">
+						<text class="margin-r-10">
+							更多
+						</text>
+						<image src="../../static/icon/next1.png" mode="scaleToFill" class="tip"></image>
+					</view>
+				</navigator> -->
+				<view class="sy-top">
+					<image src="../../static/icon/tj.png" mode=""></image>
+					<view class="top-tit">
+						精选推荐
+					</view>
+				</view>
+			</view>
+
+			<view class="list-box">
+				<view class="list" v-for="(item,index) in navList.orderList"
+					@click="navTo('/pages/user/model/model?mtype=' + item.id+'&type=0')">
+					<view class="list-image-box">
+						<image class="list-image" :src="item.img" mode="widthFix"></image>
+					</view>
+					<view class="list-content">
+
+						<view class="list-title clamp">
+							{{item.title}}
+						</view>
+						<view class="list-money flex flex-start">
+							<view class="money">
+								¥{{item.price}}
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="title-box flex">
+				<view class="flex">
+					<image class="hot margin-r-10" src="../../static/icon/hot.png" mode="scaleToFill"></image>
+					<view class="title">
+						精选名片推荐
+					</view>
+				</view>
+				<!-- <navigator url="/pages/user/model/phb">
+					<view class="right flex">
+						<text class="margin-r-10">
+							更多
+						</text>
+						<image src="../../static/icon/next1.png" mode="scaleToFill" class="tip"></image>
+					</view>
+				</navigator> -->
+			</view>
+			<view class="bd-wrap">
+				<view class="bd-btm-item flex" v-for="item in jxList" @click="navTo('/pages/user/model/model?uid=' + item.uid + '&mtype=' + item.show_template_id + '&type=2')" v-if="item.name != '影子' && item.name != '测试牛niu' &&item.name != '111'">
+					<image :src="item.avatar" mode="" class="item-img"></image>
+					<view class="flex item-info">
+						<view class="item-name">
+							{{item.name}}
+							<image :src="rz" mode="" v-if="item.is_type_audit == 1"></image>
+						</view>
+						<view class="item-where">
+							{{item.age}}岁
+						</view>
+						<view class="item-zy">
+							{{item.user_work_type_title}}
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<uni-load-more :status="navList.loadingType"></uni-load-more>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import {
+		share
+	} from '@/api/wx';
+	import {
+		getBannerList,
+		getShowTemplateList
+	} from '@/api/model.js';
+	import {
+		getWorkerList
+	} from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				rz: this.$store.state.baseURL + '/resource/icon/rz.png',
+				//轮播图
+				imagelist: [],
+				// 推荐商品
+				navList: {
+					state: 1,
+					text: '通知',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10, //每次信息条数
+					count: 0, //总消息条数
+				},
+				// 热门商品
+				rmList: [],
+				jxList: [], //精选列表
+			};
+		},
+		computed: {
+			...mapState('user', ['userInfo']),
+		},
+		onLoad: function(option) {
+			// #ifndef MP
+			if (option.spread) {
+				// 存储其他邀请人
+				uni.setStorageSync('spread', option.spread);
+			}
+			// #endif
+			// #ifdef MP
+			if (option.scene) {
+				// 存储小程序邀请人
+				uni.setStorage({
+					key: 'spread_code',
+					data: option.scene
+				});
+			}
+			// #endif
+			// 加载分享信息
+			this.share()
+		},
+		onShow() {
+			this.loadIndexs();
+			this.getWorkerList()
+		},
+		onReady() {},
+		// 滚动到底部
+		onReachBottom() {
+			this.getShowTemplateList();
+		},
+		// #ifdef MP
+		onShareAppMessage(options) {
+			// 设置菜单中的转发按钮触发转发事件时的转发内容
+			let pages = getCurrentPages(); //获取加载的页面
+			let currentPage = pages[pages.length - 1]; //获取当前页面的对象
+			let url = currentPage.route; //当前页面url
+			let item = currentPage.options; //如果要获取url中所带的参数可以查看options
+			let shareObj = {
+				title: this.shareData.title, // 默认是小程序的名称(可以写slogan等)
+				path: this.shareData.query, // 默认是当前页面,必须是以‘/’开头的完整路径
+				// imageUrl: this.shareData.img,
+				desc: this.shareData.content,
+				success: function(res) {
+					// 转发成功之后的回调
+					if (res.errMsg == 'shareAppMessage:ok') {}
+				},
+				fail: function() {
+					// 转发失败之后的回调
+					if (res.errMsg == 'shareAppMessage:fail cancel') {
+						// 用户取消转发
+					} else if (res.errMsg == 'shareAppMessage:fail') {
+						// 转发失败,其中 detail message 为详细失败信息
+					}
+				}
+			};
+			// 判断是否可以邀请
+			if (this.userInfo.uid) {
+				shareObj.path += '&spread=' + this.userInfo.uid;
+			}
+			return shareObj;
+		},
+		// #endif
+		methods: {
+			getWorkerList() {
+				try {
+					getWorkerList().then(res => {
+						// console.log(res)
+						this.jxList = res.data.list
+					})
+				} catch (e) {
+					//TODO handle the exception
+					console.log(e);
+				}
+
+			},
+			swiperChange() {
+
+			},
+			share() {
+				// console.log('加载分享');
+				const that = this;
+				// 请求获取默认数据
+				share({}).then(({
+					data
+				}) => {
+					// console.log('分享回调', data);
+					that.shareData = data.data
+				});
+			},
+
+			// 首页初始化
+			loadIndexs() {
+				const that = this;
+				// 轮播图
+				getBannerList().then(
+					(res) => {
+						that.imagelist = res.data.list
+						console.log(res);
+					}
+				).catch(
+					(res) => {
+						console.log(res);
+					}
+				)
+				// 获取热门
+				getShowTemplateList({
+					is_hot: 1,
+					pageSize: 3
+				}).then(
+					(res) => {
+						that.rmList = res.data.list.map((res) => {
+							res.price = +res.price
+							res.old_price = +res.old_price
+							return res
+						})
+						console.log(res);
+					}
+				).catch(
+					(res) => {
+						console.log(res);
+					}
+				)
+				that.getShowTemplateList();
+			},
+			// 获取模板列表
+			getShowTemplateList(source) {
+				//这里是将订单挂载到tab列表下
+				let navItem = this.navList;
+				let state = navItem.state;
+				if (source === 'tabChange' && navItem.loaded === true) {
+					//tab切换只有第一次需要加载数据
+					return;
+				}
+				if (navItem.loadingType === 'loading') {
+					//防止重复加载
+					return;
+				}
+				if (navItem.loadingType === 'noMore') {
+					//防止重复加载
+					return;
+				}
+				// 修改当前对象状态为加载中
+				navItem.loadingType = 'loading';
+				getShowTemplateList({
+						is_recommend: 1,
+						page: navItem.page,
+						pageSize: navItem.limit
+					})
+					.then(({
+						data
+					}) => {
+						let arr = data.list.map(e => {
+							return e;
+						});
+						navItem.orderList = navItem.orderList.concat(arr);
+						navItem.page++;
+						if (navItem.limit == arr.length) {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							navItem.loadingType = 'more';
+							return;
+						} else {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							navItem.loadingType = 'noMore';
+						}
+						uni.hideLoading();
+						this.$set(navItem, 'loaded', true);
+					})
+					.catch(e => {
+						console.log(e);
+					});
+
+			},
+			navTo(url) {
+				if (url) {
+					if (url.indexOf('http') > -1) {
+						// #ifdef H5
+						window.location.href = url
+						// #endif
+						// #ifdef APP
+						plus.runtime.openURL(url)
+						// #endif
+					} else {
+						uni.navigateTo({
+							url: url
+						})
+					}
+				}
+			}
+		},
+	};
+</script>
+
+<style lang="scss">
+	page,
+	.indexBox {
+		height: auto;
+		min-height: 100%;
+	}
+
+	.indexBox {
+		padding-bottom: 50rpx;
+	}
+
+	.top-swiper {
+		margin: auto;
+		width: 750rpx;
+		height: 273rpx;
+		padding: 0 $page-row-spacing;
+		background: linear-gradient(to bottom, #ff629f, rgba(255, 255, 255, 1) 80%, rgba(255, 255, 255, 1));
+
+		.carousel-item {
+			border-radius: 20rpx;
+
+			.imageitem {
+				// margin: auto;
+				width: 690rpx;
+				height: 273rpx;
+			}
+		}
+	}
+
+	.hot-list-box {
+		padding: $page-row-spacing;
+		background-color: #FFFFFF;
+		padding-bottom: 0;
+
+		.title-box {
+			line-height: 1;
+
+			.hot {
+				width: 36rpx;
+				height: 36rpx;
+
+			}
+
+			.title {
+				font-size: $font-lg;
+				font-weight: bold;
+			}
+
+			.right {
+				font-size: $font-sm;
+				color: #999999;
+
+				.tip {
+					width: 15rpx;
+					height: 25rpx;
+				}
+			}
+		}
+
+		.hot-list {
+			display: flex;
+			flex-wrap: wrap;
+			justify-content: space-between;
+			align-items: flex-start;
+			padding-top: 30rpx;
+			padding-bottom: 15rpx;
+
+			.item-none {
+				width: 220rpx;
+			}
+
+			.item {
+				padding: 13rpx;
+				width: 220rpx;
+				border-radius: 10rpx;
+				border: 2px solid #F65486;
+				margin-bottom: 16rpx;
+				line-height: 1;
+
+				.hot-title {
+					color: $font-color-dark;
+					font-size: $font-base;
+					padding: 10rpx 0;
+				}
+
+				.hot-image-box {
+					width: 194rpx;
+					height: 228rpx;
+					overflow: hidden;
+
+					.hot-image {
+						width: 100%;
+					}
+				}
+
+				.hot-money {
+					.money {
+						font: $font-lg;
+						color: #FF3342;
+					}
+
+					.oldmoney {
+						color: #969696;
+						font-size: $font-sm;
+						text-decoration: line-through;
+					}
+				}
+			}
+		}
+
+		.list-box {
+			display: flex;
+			flex-wrap: wrap;
+			justify-content: space-between;
+			align-items: flex-start;
+			padding-top: 30rpx;
+			padding-bottom: 20rpx;
+
+			.list {
+				box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
+				border-radius: 15rpx;
+				margin-bottom: 20rpx;
+				.list-image-box {
+					width: 330rpx;
+					height: 420rpx;
+					overflow: hidden;
+
+					.list-image {
+						width: 100%;
+					}
+				}
+
+				.list-content {
+					padding: 20rpx;
+					line-height: 1;
+
+					.list-title {
+						color: $font-color-dark;
+						font-size: $font-base;
+						margin-bottom: 20rpx;
+					}
+
+					.list-money {
+						.money {
+							font: $font-lg;
+							color: #FF3342;
+						}
+					}
+				}
+			}
+		}
+	}
+
+	.sy-top {
+		position: relative;
+		height: 100rpx;
+		width: 100%;
+
+		image {
+			width: 374rpx;
+			height: 30rpx;
+			position: absolute;
+			top: 0;
+			bottom: 0;
+			left: 0;
+			right: 0;
+			margin: auto;
+		}
+
+		.top-tit {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #FF478B;
+			text-align: center;
+			line-height: 100rpx;
+		}
+
+	}
+
+	.bd-btm-item {
+		border-top: #f2f2f2 1px solid;
+		flex-direction: column;
+		width: 330rpx;
+		height: 520rpx;
+
+		&:first-of-type {
+			border-top: none;
+		}
+		margin-bottom: 20rpx;
+		box-shadow: 0rpx 0rpx 20rpx 0rpx rgba(46, 46, 49, 0.06);
+		border-radius: 20rpx;
+
+		.item-info {
+			flex-direction: column;
+			justify-content: flex-start;
+			align-items: flex-start;
+			width: 100%;
+			height: 100%;
+			padding-left: 20rpx;
+			padding-top: 20rpx;
+
+			.item-name {
+				font-size: 31rpx;
+				font-weight: bold;
+				color: #333333;
+				display: flex;
+				align-items: center;
+				justify-content: flex-start;
+
+				image {
+					width: 100rpx;
+					height: 30rpx;
+					margin-left: 10rpx;
+				}
+			}
+
+			.item-zy {
+				padding: 6rpx 20rpx;
+				background: #fee7e4;
+				border-radius: 5rpx;
+				font-size: 22rpx;
+				font-weight: 500;
+				color: #F86859;
+				margin: 16rpx 0 20rpx;
+			}
+
+			.item-vist,
+			.item-where {
+				font-weight: 500;
+				color: #969696;
+			}
+
+			.item-vist {
+				font-size: 22rpx;
+				justify-items: flex-end;
+			}
+
+			.item-where {
+				font-size: 24rpx;
+			}
+		}
+
+		.item-img {
+			flex-shrink: 0;
+			width: 330rpx;
+			height: 330rpx;
+			background-color: #eee;
+		}
+
+	}
+
+	.jg {
+		height: 20rpx;
+	}
+
+	.bd-wrap {
+		display: flex;
+		justify-content: space-between;
+		flex-wrap: wrap;
+		padding: 30rpx 0;
+	}
+</style>

+ 63 - 0
pages/modelData/index.vue

@@ -0,0 +1,63 @@
+<template>
+	<view>
+		<model1 :shareNumber='shareNumber' :isDefault='isDefault' v-if="modelId==3||modelId==1" :templateDetail='templateData' :isShare='isShare' :isLook='isLook'></model1>
+		<model2 :shareNumber='shareNumber' :isDefault='isDefault' v-if="modelId==4" :templateDetail='templateData' :isShare='isShare' :isLook='isLook'></model2>
+		<model3 :shareNumber='shareNumber' :isDefault='isDefault' v-if="modelId==5" :templateDetail='templateData' :isShare='isShare' :isLook='isLook'></model3>
+	</view>
+</template>
+
+<script>
+	import model1 from './modeltemplate/model_1.vue';
+	import model2 from './modeltemplate/model_2.vue'
+	import model3 from './modeltemplate/model_3.vue'
+	export default {
+		props: {
+			// 浏览数量
+			shareNumber: {
+				type: Number,
+				default:0
+			},
+			// 是否显示默认数据
+			isDefault: {
+				type: Boolean,
+				default:true
+			},
+			templateData: {
+				type: Object,
+				default: ()=>{
+					return {}
+				}
+			},
+			isShare:{
+				type: Boolean,
+				default:false
+			},
+			//1为模板2为用户
+			isLook:{
+				type: Number,
+				default:0
+			},
+			modelId:{
+				type: Number,
+				default:0
+			},
+		},
+		components: {
+			model1,
+			model2,
+			model3
+		},
+		data() {
+			return {
+				model: 0
+			}
+		},
+		onLoad() {
+			console.log('233');
+			uni.postMessage('打开页面')
+		},
+		onUnload() {
+			uni.postMessage('关闭页面')
+		}
+	}
+</script>

+ 715 - 0
pages/modelData/modeltemplate/model_1.vue

@@ -0,0 +1,715 @@
+<template>
+	<view class="mone">
+		<view class="m-top">
+			<view class="top-user flex">
+				<image :src="cardInfo.avatar" mode="" class="user-logo"></image>
+			</view>
+			<view class="user-name">
+				{{cardInfo.name || '暂无'}}
+			</view>
+			<view class="u-zy">
+				<view class="">
+					职业:{{cardInfo.user_work_type_title || '暂无'}}
+				</view>
+			</view>
+			<!-- <button type="default" class="top-btn fx-btn" v-if="isShare" open-type="share">
+				<image :src="baseURL + '/resource/model/model1/fx.png'" mode=""></image>
+			</button> -->
+			<view class="top-btn visit mvisit padding-r-10" v-if="isLook==1||isLook==2">
+				浏览:{{shareNumber}}
+			</view>
+			<image :src="baseURL + '/resource/model/model1/hua7.png'" mode="" class="top-bg"></image>
+			
+		</view>
+		<view class="m-body gr">
+			<!-- 个人信息 -->
+			<view class="hua2">
+				<view class="m-card">
+					<image :src="baseURL + '/resource/model/model1/card-bg.png'" mode="" class="card-bg"></image>
+					<view class=" flex">
+						<view class="card-tit flex" style="flex-shrink: 0;">
+							<image :src="baseURL + '/resource/model/model1/m1.png'" mode="" class="tit-logo"></image>个人信息
+						</view>
+						<view class="u-bh flex">
+							<image :src="baseURL + '/resource/model/model1/bh.png'" mode=""></image>编号:{{cardInfo.no|| "未申请"}}
+						</view>
+					</view>
+					
+					<view class="card-content">
+
+						<view class="user-info flex">
+							<view class="info-item-b">
+								年<text class="qianger"></text>龄: {{cardInfo.age|| '暂无'}}
+							</view>
+							<view class="info-item-b">
+								属<text class="qianger"></text>相: {{cardInfo.twelve|| '暂无'}}
+							</view>
+							<view class="info-item-b">
+								从<text class="qianger"></text>业: {{(cardInfo.work_year + '年')|| '暂无'}}
+							</view>
+							<view class="info-item-b">
+								星<text class="qianger"></text>座: {{cardInfo.constellation || '暂无'}}
+							</view>
+							<!-- <view class="info-item-b">
+								职<text class="qianger"></text>业: {{cardInfo.user_work_type_title || '暂无'}}
+							</view> -->
+							<view class="info-item-b">
+								籍<text class="qianger"></text>贯: {{cardInfo.ancestral_place || '暂无'}}
+							</view>
+							<view class="info-item-b">
+								民<text class="qianger"></text>族: {{cardInfo.minority || '暂无'}}
+							</view>
+							<view class="info-item-b">
+								学<text class="qianger"></text>历: {{cardInfo.education || '暂无'}}
+							</view>
+							<!-- <view class="info-item-b">
+								综 <text class="laner"></text> 合<text class="laner"></text>分: 50
+							</view> -->
+							<view class="info-item-q flex" style="align-items: flex-start;">
+								<text style="flex-shrink: 0;">服务地区:</text>
+								<view class="fwdz flex">
+									<view v-for="(fwitem,fwindex) in cardInfo.service_area_all">
+										{{fwitem}}{{fwindex ==(cardInfo.service_area_all.length -1) ?'': '、'  }}
+									</view>
+								</view>
+							</view>
+							<view class="info-item-q flex" style="align-items: flex-start;">
+								<text style="flex-shrink: 0;">服务价格: </text>
+								<view class="gzt">
+									<image :src="baseURL + '/resource/model/model1/tiao.png'" mode=""></image>
+									<view class="gzt-price">
+										<text>{{cardInfo.service_min_price}}</text>元/{{ cardInfo.service_time_type_title && cardInfo.service_time_type_title.replace('每','')}}
+									</view>
+									<view class=" gzt-price-b">
+										<text>{{cardInfo.service_max_price}}</text>元/{{cardInfo.service_time_type_title && cardInfo.service_time_type_title.replace('每','')}}
+									</view>
+								</view>
+								<image :src="baseURL + '/resource/model/model1/yrz.png'" mode="" class="rz"
+									v-if="cardInfo.is_type_audit == 1"></image>
+							</view>
+						</view>
+					</view>
+					<view class="" style="height: 80rpx;"></view>
+
+				</view>
+			</view>
+			<!-- 自我评价 -->
+			<view class="hua4">
+				<view class="hua3">
+					<view class="m-card">
+						<image :src="baseURL + '/resource/model/model1/card-bg.png'" mode="" class="card-bg"></image>
+						<view class="card-tit flex">
+							<image :src="baseURL + '/resource/model/model1/m2.png'" mode="" class="tit-logo"></image>自我展示
+						</view>
+						<view class="card-content">
+							{{cardInfo.service_intro_content}}
+						</view>
+						<view class="img-list flex" style="padding-top: 0;">
+							<image :src="siiitem" mode="" v-for="siiitem in cardInfo.service_intro_imgs"></image>
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 我的证书 -->
+			<view class="hua5" v-if="cardInfo.service_audit_imgs && cardInfo.service_audit_imgs.length > 0">
+				<view class="m-card">
+					<image :src="baseURL + '/resource/model/model1/card-bg.png'" mode="" class="card-bg"></image>
+					<view class="card-tit flex">
+						<image :src="baseURL + '/resource/model/model1/m3.png'" mode="" class="tit-logo"></image>我的证书
+					</view>
+					<view class="img-list flex">
+						<image :src="saiitem" mode="" v-for="saiitem in cardInfo.service_audit_imgs"></image>
+					</view>
+				</view>
+			</view>
+			<!-- 服务内容 -->
+			<view class="hua6">
+				<view class="m-card">
+					<image :src="baseURL + '/resource/model/model1/card-bg.png'" mode="" class="card-bg"></image>
+					<view class="card-tit flex">
+						<image :src="baseURL + '/resource/model/model1/m4.png'" mode="" class="tit-logo"></image>服务内容
+					</view>
+					<view class="card-content">
+						<view class="fw" v-for="spaitem in cardInfo.service_project_ar">
+							<view class="fw-tit">
+								<text class="yg"></text>{{spaitem.title}}
+							</view>
+							<view class="fw-content">
+								{{spaitem.content}}
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 服务照片 -->
+			<view class="m-card" v-if="cardInfo.service_imgs && cardInfo.service_imgs.length > 0">
+				<image :src="baseURL + '/resource/model/model1/card-bg.png'" mode="" class="card-bg"></image>
+				<view class="card-tit flex">
+					<image :src="baseURL + '/resource/model/model1/m5.png'" mode="" class="tit-logo"></image>服务照片
+				</view>
+				<view class="img-list flex">
+					<image :src="siitem" mode="" v-for="siitem in cardInfo.service_imgs"></image>
+				</view>
+			</view>
+			<!-- 底部图片 -->
+			<image :src="baseURL + '/resource/model/model1/m-btm.png'" mode="" class="m-btm"></image>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+	} from 'vuex';
+	export default {
+		props: {
+			// 浏览数量
+			shareNumber: {
+				type: Number,
+				default:0
+			},
+			// 是否显示默认数据
+			isDefault: {
+				type: Boolean,
+				default: true
+			},
+			isShare: {
+				type: Boolean,
+				default: false
+			},
+			//1为模板2为用户
+			isLook: {
+				type: Number,
+				default: 0
+			},
+			templateDetail: {
+				type: Object,
+				default: () => {
+					return {}
+				}
+			},
+		},
+		data() {
+			return {
+				defaults: {
+					user_work_type_title: '母婴护理师',
+					name: '詹继红',
+					avatar: 'https://api.myjie.cn/resource/user/user1/zjh.png',
+					age: '49',
+					twelve: '牛',
+					work_year: '10',
+					constellation: '巨蟹座',
+					ancestral_place: '湖北',
+					minority: '汉族',
+					education: '大学',
+					service_area_all: ['上海市'],
+					service_min_price: 16800,
+					service_max_price: 19800,
+					service_time_type_title: '每月',
+					service_intro_content: '高级育婴师证|高级催乳师证|早产儿护理师母婴护理证|金牌月嫂证|产后恢复师证|公共营养师证|月子药膳调理师证|国际宝宝睡眠咨询师证|普通话二级甲等|中央广播电视大学学历|学前教育专业,深耕幼教十年,技能全面,性格活泼,有亲和力,做事干净利落,有很强的责任心。对宝宝有爱心,体贴新手妈妈。专业技能熟练。应急能力强。让家人放心、产妇舒心的坐好月子。',
+					service_intro_imgs: ['https://api.myjie.cn/resource/user/user1/pj1.png',
+						'https://api.myjie.cn/resource/user/user1/pj2.png',
+						'https://api.myjie.cn/resource/user/user1/pj3.png',
+						'https://api.myjie.cn/resource/user/user1/pj4.png'
+					],
+					service_audit_imgs: ['https://api.myjie.cn/resource/user/user1/zs1.png',
+						'https://api.myjie.cn/resource/user/user1/zs2.png',
+						'https://api.myjie.cn/resource/user/user1/zs3.png',
+						'https://api.myjie.cn/resource/user/user1/zs4.png'
+					],
+					service_project_ar: [{
+							title: '婴幼儿睡眠管理',
+							content: '如:日夜颠倒、睡眠不规律、乳头混淆、奶睡、抱睡等问题,帮助宝爸宝妈规律孩子作息、解决婴幼儿喂养困扰,培养良好的生活、学习习惯。'
+						}, {
+							title: '特色月子餐',
+							content: '套用客户的一句话“养眼、养心更养胃”!家常菜、面食、点心、甜品、靓汤、五谷杂粮粥、婴幼儿花样辅食等。'
+						},
+						{
+							title: '早产儿特殊护理',
+							content: '包括早产儿基础护理、安全喂养方法、追赶性生长、消化与免疫系统等技能,根据宝宝具体情况给予早产儿家长的科学入户指导。'
+						},
+						{
+							title: '0-6岁早期教育',
+							content: '在婴孩最敏感最能接受的时期进行事半功倍的适时教育,针对不同年龄段的孩子,开发婴幼儿潜能的教育,为孩子多元化和健康人格打下良好基础。'
+						}
+					],
+					service_imgs: [
+						'https://api.myjie.cn/resource/user/user1/fw1.png',
+						'https://api.myjie.cn/resource/user/user1/fw2.png',
+						'https://api.myjie.cn/resource/user/user1/fw3.png',
+						'https://api.myjie.cn/resource/user/user1/fw4.png'
+					],
+					is_type_audit: 1
+				}
+			}
+		},
+		computed: {
+			...mapState(['baseURL']),
+			cardInfo() {
+				if (this.isDefault) {
+					return this.defaults
+				} else {
+					return this.templateDetail
+				}
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.mone {
+		background-color: #f8e1df;
+		padding-bottom: 30rpx;
+
+		.m-top {
+			width: 750rpx;
+			position: relative;
+			width: 750rpx;
+			height: 450rpx;
+
+			.top-bg {
+				position: absolute;
+				width: 207rpx;
+				height: 123rpx;
+				bottom: 11rpx;
+				left:32rpx;
+			}
+
+			.readme {
+				width: 534rpx;
+				height: 83rpx;
+				position: absolute;
+				top: 172rpx;
+				left: 0;
+				right: 0;
+				margin: auto;
+			}
+			.u-zy {
+				position: absolute;
+				top: 375rpx;
+				left: 0;
+				right: 0;
+				margin: auto;
+				display: flex;
+				justify-content: center;
+				view {
+					display: inline-block;
+					padding: 8rpx 8rpx 8rpx 16rpx;
+					border: 1px solid #F46C85;
+					border-radius: 10rpx;
+					font-size: 26rpx;
+					font-weight: 500;
+					color: #F46C85;
+				}
+			}
+			.top-user {
+				width: 222rpx;
+				height: 222rpx;
+				background: #FEFEFE;
+				box-shadow: 0rpx 0rpx 20rpx 0rpx rgba(50, 50, 52, 0.06);
+				border-radius: 50%;
+				position: absolute;
+				left: 0;
+				right: 0;
+				top: 80rpx;
+				justify-content: center;
+				align-items: center;
+				margin: auto;
+
+				.user-logo {
+					width: 200rpx;
+					height: 200rpx;
+					border-radius: 50%;
+					background-color: #fff;
+				}
+
+				.gp {
+					width: 133rpx;
+					height: 38rpx;
+					position: absolute;
+					bottom: 0;
+					left: 0;
+					right: 0;
+					margin: auto;
+				}
+			}
+
+			.user-name {
+				width: 750rpx;
+				font-size: 38rpx;
+				font-weight: bold;
+				color: #000000;
+				text-align: center;
+				position: absolute;
+				top: 318rpx;
+			}
+
+			.fx-btn {
+
+				padding: 0;
+
+				&::after {
+					border: none;
+				}
+
+
+
+
+				border-radius: 24rpx 0 0 24rpx;
+
+				image {
+					width: 150rpx;
+					height: 48rpx;
+					display: block;
+				}
+			}
+
+			.top-btn {
+				height: 48rpx;
+				position: absolute;
+				right: 0;
+				top: 70rpx;
+				line-height: 48rpx;
+				font-size: 24rpx;
+			}
+
+			.visit {
+				border-radius: 24rpx 0 0 24rpx;
+				top: 130rpx;
+				border: 1px solid #f65486;
+				color: #f65486;
+				padding-left: 24rpx;
+			}
+
+			.mvisit {
+				top: 70rpx;
+			}
+		}
+	}
+
+	.m-body {
+
+		width: 705rpx;
+		margin: auto;
+		margin-top: 20rpx;
+		background-color: #fff;
+		border-left: 8rpx solid #efa0ab;
+		border-right: 8rpx solid #efa0ab;
+		padding: 45rpx 0;
+	}
+
+	.gr {
+		position: relative;
+
+		&::before {
+			content: '';
+			position: absolute;
+			// left: 75px;
+			right: 0;
+			top: -30rpx;
+			width: 120px;
+			height: 174px;
+			background: url($base-url + '/resource/model/model1/hua1.png') no-repeat;
+			background-size: 100% 100%;
+		}
+	}
+
+	.m-card {
+		width: 640rpx;
+		background: #fcf4f1;
+		border-radius: 20rpx;
+		position: relative;
+		// min-height: 270rpx;
+		margin: 0 auto 46rpx;
+
+		.card-tit {
+			width: 219rpx;
+			height: 57rpx;
+			background: #F46C85;
+			border-radius: 20rpx 28rpx 29rpx 0rpx;
+			justify-content: flex-start;
+			align-items: center;
+			padding: 0 20rpx;
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #FFFFFF;
+
+			.tit-logo {
+				width: 32rpx;
+				height: 32rpx;
+				margin-right: 18rpx;
+			}
+		}
+
+		.card-bg {
+			width: 100%;
+			height: 270rpx;
+			position: absolute;
+			bottom: 0rpx;
+		}
+
+		.card-content {
+			padding: 25rpx 35rpx;
+			font-size: 26rpx;
+			font-weight: 500;
+			color: #2C2E35;
+			position: relative;
+		}
+
+		.img-list {
+			justify-content: space-between;
+			flex-wrap: wrap;
+			margin: auto;
+			padding: 30rpx 30rpx 0;
+			position: relative;
+
+			image {
+				width: 270rpx;
+				height: 270rpx;
+				background-color: #fff;
+				margin-bottom: 30rpx;
+				box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.6);
+			}
+
+
+		}
+
+		.fw {
+			font-size: 26rpx;
+			font-weight: 500;
+			color: #2C2E35;
+			padding: 10rpx 0;
+
+			.fw-tit {
+				color: #F46C85;
+				display: flex;
+				align-items: center;
+
+				.yg {
+					background-color: #F46C85;
+					display: inline-block;
+					width: 10rpx;
+					height: 10rpx;
+					border-radius: 50%;
+					margin-right: 10rpx;
+				}
+			}
+
+			.fw-content {
+				padding-top: 10rpx;
+				padding-left: 18rpx;
+				text-align: justify;
+			}
+
+		}
+
+		.user-info {
+			flex-wrap: wrap;
+			font-size: 26rpx;
+			font-weight: 500;
+			color: #000000;
+			position: relative;
+
+			.info-item-b,
+			.info-item-q {
+				padding: 10rpx 0;
+				color: #000000;
+				position: relative;
+
+				padding-left: 20rpx;
+
+				&::before {
+					display: inline-block;
+					content: '';
+					width: 10rpx;
+					height: 10rpx;
+					border-radius: 50%;
+					background-color: #F46C85;
+					position: absolute;
+					top: 22rpx;
+					left: 0;
+				}
+
+				.qianger {
+					width: 2em;
+					display: inline-block;
+				}
+
+				.laner {
+					width: 0.5em;
+					display: inline-block;
+				}
+			}
+
+			.info-item-b {
+				width: 50%;
+			}
+
+			.info-item-q {
+				width: 100%;
+				display: flex;
+				align-items: flex-start;
+				justify-content: start;
+
+				.fwdz {
+					flex-direction: column;
+					align-items: flex-start;
+				}
+
+				.gzt {
+					width: 312rpx;
+					height: 24rpx;
+					padding-top: 10rpx;
+					position: relative;
+
+					image {
+						width: 312rpx;
+						height: 24rpx;
+						position: relative;
+					}
+
+					.gzt-price,
+					.gzt-price-b {
+						width: 200rpx;
+						text-align: center;
+						position: absolute;
+						padding-top: 20rpx;
+
+						&::after {
+							content: '';
+							width: 0px;
+							height: 0rpx;
+							// background: #FEB8C6;
+							border: 14rpx solid;
+							border-color: transparent transparent #FEB8C6;
+							// border-top:transparent;
+							// border-left: transparent;
+							// border-right: transparent;
+							position: absolute;
+							top: -14rpx;
+							left: 0;
+							right: 0;
+							margin: auto;
+						}
+
+						text {
+							color: #F46C85;
+						}
+					}
+
+					.gzt-price {
+						left: -100rpx;
+					}
+
+					.gzt-price-b {
+						right: -100rpx;
+					}
+				}
+
+				.rz {
+					margin-top: 10rpx;
+					margin-left: 10rpx;
+					width: 87rpx;
+					height: 26rpx;
+				}
+			}
+		}
+	}
+
+	.m-btm {
+		width: 660rpx;
+		height: 384rpx;
+	}
+
+	.hua2 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 199rpx;
+			height: 298rpx;
+			background: url($base-url + '/resource/model/model1/hua2.png') no-repeat;
+			position: absolute;
+			bottom: -100rpx;
+			right: 0;
+			background-size: 100% 100%;
+		}
+	}
+
+	.hua3 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 192rpx;
+			height: 223rpx;
+			background: url($base-url + '/resource/model/model1/hua3.png') no-repeat;
+			position: absolute;
+			top: 0;
+			bottom: 0;
+			left: 0;
+			margin: auto;
+			background-size: 100% 100%;
+		}
+	}
+
+	.hua4 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 128rpx;
+			height: 145rpx;
+			background: url($base-url + '/resource/model/model1/hua4.png') no-repeat;
+			position: absolute;
+			bottom: -70rpx;
+			right: 0;
+			background-size: 100% 100%;
+		}
+	}
+
+	.hua5 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 199rpx;
+			height: 298rpx;
+			background: url($base-url + '/resource/model/model1/hua2.png') no-repeat;
+			position: absolute;
+			bottom: -100rpx;
+			left: 0;
+			background-size: 100% 100%;
+			transform: rotateY(180deg);
+		}
+	}
+
+	.hua6 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 192rpx;
+			height: 223rpx;
+			background: url($base-url + '/resource/model/model1/hua3.png') no-repeat;
+			position: absolute;
+			bottom: -110rpx;
+			right: 0;
+			background-size: 100% 100%;
+			transform: rotateY(180deg);
+		}
+	}
+	.u-bh {
+		justify-content: flex-start;
+		padding-right: 10rpx;
+		image {
+			width: 26rpx;
+			height: 26rpx;
+			margin-right: 10rpx;
+		}
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #F46C85;
+		
+	}
+</style>

+ 718 - 0
pages/modelData/modeltemplate/model_2.vue

@@ -0,0 +1,718 @@
+<template>
+	<view class="mone">
+		<view class="m-top">
+			<image :src="baseURL + '/resource/icon/model2/tli.png'" mode="" class="top-left-img"></image>
+			<!-- <button type="default" class="top-btn fx-btn" v-if="isShare" open-type="share">
+				<image :src="baseURL + '/resource/icon/model1/fx.png'" mode=""></image>
+			</button> -->
+			<view class="top-btn visit mvisit padding-r-10" v-if="isLook==1||isLook==2">
+				浏览:{{shareNumber}}
+			</view>
+			
+		</view>
+		<view class="m-body ">
+			<!-- 个人信息 -->
+			<view class="hua3">
+			<view class="hua2 ">
+				<view class="m-card m-card-t "  >
+					<!-- 用户名称 -->
+					<view class="u-name">
+						{{cardInfo.name || '暂无'}}
+					</view>
+					<!-- 编号 -->
+					<view class="u-bh flex ">
+						<image :src="baseURL + '/resource/icon/model2/bh.png'" mode=""></image>编号:{{cardInfo.no || "myj23031421"}}
+					</view>
+					<!-- 头像 -->
+					<view class="user-img">
+						<image :src="baseURL + '/resource/icon/model2/txk.png'" mode="" class="base-bg"></image>
+						<image :src="cardInfo.avatar" mode=""  class="user-av"></image>
+					</view>
+					<!-- 职业 -->
+					<view class="zy-wrap" v-if="cardInfo.user_work_type_title">
+						<view class="zy">
+							职业:{{cardInfo.user_work_type_title || '暂无'}}
+						</view>
+						
+					</view>
+					<view class="card-content card-content-t">
+						<view class="user-info-t flex">
+			
+							<view class="info-item-b">
+								年龄: {{cardInfo.age|| '暂无'}}
+							</view>
+							<view class="info-item-b">
+								属相: {{cardInfo.twelve|| '暂无'}}
+							</view>
+							<view class="info-item-b">
+								从业: {{(cardInfo.work_year + '年')|| '暂无'}}
+							</view>
+							<view class="info-item-b">
+								星座: {{cardInfo.constellation.replace('座','') || '暂无'}}
+							</view>
+							<!-- <view class="info-item-b">
+								职业: {{cardInfo.user_work_type_title || '暂无'}}
+							</view> -->
+							<view class="info-item-b">
+								籍贯: {{cardInfo.ancestral_place || '暂无'}}
+							</view>
+							<view class="info-item-b">
+								民族: {{cardInfo.minority || '暂无'}}
+							</view>
+							<view class="info-item-b">
+								学历: {{cardInfo.education || '暂无'}}
+							</view>
+							
+						</view>
+						<view class="user-info flex">
+							<view class="info-item-q flex" style="align-items: flex-start;">
+								<text style="flex-shrink: 0;">服务地区:</text>
+								<view class="fwdz flex">
+									<view v-for="(fwitem,fwindex) in cardInfo.service_area_all">
+										{{fwitem}}{{fwindex ==(cardInfo.service_area_all.length -1) ?'': '、'  }}
+									</view>
+								</view>
+							</view>
+							<view class="info-item-q flex" style="align-items: flex-start;height: 110rpx;">
+								<text style="flex-shrink: 0;">服务价格: </text>
+								<view class="gzt">
+									<image :src="baseURL + '/resource/icon/model2/tiao.png'" mode=""></image>
+									<view class="gzt-price">
+										<text>{{cardInfo.service_min_price}}</text>元/{{ cardInfo.service_time_type_title && cardInfo.service_time_type_title.replace('每','')}}
+									</view>
+									<view class=" gzt-price-b">
+										<text>{{cardInfo.service_max_price}}</text>元/{{cardInfo.service_time_type_title && cardInfo.service_time_type_title.replace('每','')}}
+									</view>
+								</view>
+								<image :src="baseURL + '/resource/icon/model1/yrz.png'" mode="" class="rz"
+									v-if="cardInfo.is_type_audit == 1"></image>
+							</view>
+						</view>
+					</view>
+					<!-- <view class="" style="height: 40rpx;"></view> -->
+			
+				</view>
+			</view>	
+			</view>
+			
+			<!-- 自我评价 -->
+			<view class="hua4">
+				<view class="">
+					<view class="m-card">
+						<view class="card-tit flex">
+							<image :src="baseURL + '/resource/icon/model2/zwpj.png'" mode="" class=""></image>
+						</view>
+						<view class="card-content">
+							{{cardInfo.service_intro_content}}
+						</view>
+						<view class="img-list flex" style="padding-top: 0;">
+							<image :src="siiitem" mode="" v-for="siiitem in cardInfo.service_intro_imgs"></image>
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 我的证书 -->
+			<view class="hua5" v-if="cardInfo.service_audit_imgs && cardInfo.service_audit_imgs.length > 0">
+				<view class="m-card">
+					<view class="card-tit flex">
+						<image :src="baseURL + '/resource/icon/model2/wdzs.png'" mode="" class=""></image>
+					</view>
+					<view class="img-list flex">
+						<image :src="saiitem" mode="" v-for="saiitem in cardInfo.service_audit_imgs"></image>
+					</view>
+				</view>
+			</view>
+			<!-- 服务内容 -->
+			<view class="hua6">
+				<view class="m-card">
+					<view class="card-tit flex">
+						<image :src="baseURL + '/resource/icon/model2/fwnr.png'" mode="" class=""></image>
+					</view>
+					<view class="card-content">
+						<view class="fw" v-for="spaitem in cardInfo.service_project_ar">
+							<view class="fw-tit">
+								<text class="yg"></text>{{spaitem.title}}
+							</view>
+							<view class="fw-content">
+								{{spaitem.content}}
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 服务照片 -->
+			<view class="hua7" v-if="cardInfo.service_imgs && cardInfo.service_imgs.length > 0">
+				<view class="hua8">
+					<view class="m-card" >
+						<view class="card-tit flex">
+							<image :src="baseURL + '/resource/icon/model2/fwzp.png'" mode="" class=""></image>
+						</view>
+						<view class="img-list flex">
+							<image :src="siitem" mode="" v-for="siitem in cardInfo.service_imgs"></image>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+	} from 'vuex';
+	export default {
+		props: {
+			// 浏览数量
+			shareNumber: {
+				type: Number,
+				default:0
+			},
+			// 是否显示默认数据
+			isDefault: {
+				type: Boolean,
+				default: true
+			},
+			isShare: {
+				type: Boolean,
+				default: false
+			},
+			//1为模板2为用户
+			isLook: {
+				type: Number,
+				default: 0
+			},
+			templateDetail: {
+				type: Object,
+				default: () => {
+					return {}
+				}
+			}
+		},
+		data() {
+			return {
+				defaults: {
+					user_work_type_title: '母婴护理师',
+					name: '张腊枚',
+					avatar: 'https://api.myjie.cn/resource/user/zlm.png',
+					age: '48',
+					twelve: '兔',
+					work_year: '10',
+					constellation: '水瓶座',
+					ancestral_place: '湖南',
+					minority: '汉族',
+					education: '大学',
+					service_area_all: ['上海市'],
+					service_min_price: 16800,
+					service_max_price: 19800,
+					service_time_type_title: '每月',
+					service_intro_content: '    从事母婴护理行业十多年了,做培训讲师8年多,热爱本职工作。长沙民政职业技术学院家政服务管理系毕业,中职教师资格证,高级育婴师,高级保育员,高级养老护理,syb创业培训讲师,并进入湖南省家政服务专家师资库,蒙氏早教高级教师,高级催乳师,高级产后恢复师等。',
+					service_intro_imgs: ['https://api.myjie.cn/resource/user/user2/zwpj1.png',
+						'https://api.myjie.cn/resource/user/user2/zwpj2.png',
+						'https://api.myjie.cn/resource/user/user2/zwpj3.png',
+						'https://api.myjie.cn/resource/user/user2/zwpj4.png',
+						'https://api.myjie.cn/resource/user/user2/zwpj5.png',
+						'https://api.myjie.cn/resource/user/user2/zwpj6.png'
+					],
+					service_audit_imgs: ['https://api.myjie.cn/resource/user/user2/zs1.png',
+						'https://api.myjie.cn/resource/user/user2/zs2.png',
+						'https://api.myjie.cn/resource/user/user2/zs3.png',
+						'https://api.myjie.cn/resource/user/user2/zs4.png',
+						'https://api.myjie.cn/resource/user/user2/zs5.png',
+						'https://api.myjie.cn/resource/user/user2/zs6.png'
+					],
+					service_project_ar: [{
+							title: '婴幼儿睡眠管理',
+							content: '如:日夜颠倒、睡眠不规律、乳头混淆、奶睡、抱睡等问题,帮助宝爸宝妈规律孩子作息、解决婴幼儿喂养困扰,培养良好的生活、学习习惯。'
+						}, {
+							title: '特色月子餐',
+							content: '套用客户的一句话“养眼、养心更养胃”!家常菜、面食、点心、甜品、靓汤、五谷杂粮粥、婴幼儿花样辅食等。'
+						},
+						{
+							title: '早产儿特殊护理',
+							content: '包括早产儿基础护理、安全喂养方法、追赶性生长、消化与免疫系统等技能,根据宝宝具体情况给予早产儿家长的科学入户指导。'
+						},
+						{
+							title: '0-6岁早期教育',
+							content: '在婴孩最敏感最能接受的时期进行事半功倍的适时教育,针对不同年龄段的孩子,开发婴幼儿潜能的教育,为孩子多元化和健康人格打下良好基础。'
+						}
+					],
+					service_imgs: [
+						'https://api.myjie.cn/resource/user/user2/fw1.png',
+						'https://api.myjie.cn/resource/user/user2/fw2.png',
+						'https://api.myjie.cn/resource/user/user2/fw3.png',
+						'https://api.myjie.cn/resource/user/user2/fw4.png',
+						'https://api.myjie.cn/resource/user/user2/fw5.png',
+						'https://api.myjie.cn/resource/user/user2/fw6.png',
+						'https://api.myjie.cn/resource/user/user2/fw7.png',
+						'https://api.myjie.cn/resource/user/user2/fw8.png'
+					],
+					is_type_audit: 1
+				}
+			}
+		},
+		computed: {
+			...mapState(['baseURL']),
+			cardInfo() {
+				console.log("进入");
+				if (this.isDefault) {
+					return this.defaults
+				} else {
+					return this.templateDetail
+				}
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.mone {
+		background-color: #fffbed;
+		padding-bottom: 43rpx;
+
+		.m-top {
+			width: 750rpx;
+			position: relative;
+			width: 750rpx;
+			height: 150rpx;
+			background-color: #fffbed;
+			.top-left-img {
+				position: absolute;
+				top: 0;
+				left: 0;
+				width: 280rpx;
+				height: 248rpx;
+			}
+			.top-bg {
+				position: relative;
+				width: 750rpx;
+				height: 370rpx;
+			}
+
+			.readme {
+				width: 534rpx;
+				height: 83rpx;
+				position: absolute;
+				top: 172rpx;
+				left: 0;
+				right: 0;
+				margin: auto;
+			}
+
+			.fx-btn {
+				padding: 0;
+				&::after {
+					border: none;
+				}
+				border-radius: 24rpx 0 0 24rpx;
+				image {
+					width: 150rpx;
+					height: 48rpx;
+					display: block;
+				}
+			}
+			.top-btn {
+				height: 48rpx;
+				position: absolute;
+				right: 0;
+				top: 70rpx;
+				line-height: 48rpx;
+				font-size: 24rpx;
+			}
+			.visit {
+				border-radius: 24rpx 0 0 24rpx;
+				top: 130rpx;
+				border: 1px solid #f65486;
+				color: #f65486;
+				padding-left: 24rpx;
+			}
+			.mvisit {
+				top: 70rpx;
+			}
+		}
+	}
+
+	.m-body {
+
+		width: 750rpx;
+		margin: auto;
+		margin-top: 20rpx;
+
+		padding: 45rpx 0;
+	}
+
+	.info-item-b,
+	.info-item-q {
+		padding: 10rpx 0;
+		color: #000000;
+		position: relative;
+
+		padding-left: 20rpx;
+		&::before {
+			display: inline-block;
+			content: '';
+			width: 15rpx;
+			height: 15rpx;
+			background: linear-gradient(225deg, #FE9E32, #FDE37D);
+			border-radius: 50%;
+			position: absolute;
+			top: 22rpx;
+			left: 0;
+		}
+
+		.qianger {
+			width: 2em;
+			display: inline-block;
+		}
+
+		.laner {
+			width: 0.5em;
+			display: inline-block;
+		}
+	}
+	.m-card-t {
+		border: none !important;
+		background: transparent !important;
+	}
+	.m-card {
+		width: 640rpx;
+		background: rgba(255, 255, 255, 0.6);
+		border-radius: 20rpx;
+		position: relative;
+		// min-height: 270rpx;
+		border: 4px solid #fff;
+		margin: 0 auto 46rpx;
+		.user-img {
+			position: absolute;
+			right: -20rpx;
+			top: -49rpx;
+			width: 318rpx;
+			height: 366rpx;
+			.base-bg {
+				width: 100%;
+				height: 100%;
+			}
+			.user-av {
+				width: 272rpx;
+				height: 272rpx;
+				position: absolute;
+				bottom: 17rpx;
+				left: 12rpx;
+			}
+		}
+		.zy-wrap {
+			position: absolute;
+			right: 0;
+			top: 330rpx;
+			width: 300rpx;
+			// background-color: #fea540;
+			display: flex;
+			justify-content: center;
+			font-size: 26rpx;
+			.zy {
+				display: inline-block;
+				margin: auto;
+				border: 1px solid #fea540;
+				border-radius: 10rpx;
+				padding: 8rpx 16rpx;
+				color: #fea540;
+				margin: auto;
+			}
+			
+		}
+		.card-tit {
+			justify-content: center;
+			padding-top: 55rpx;
+			position: relative;
+			padding-bottom: 30rpx;
+			&::after {
+				content: '';
+				width: 60rpx;
+				height: 10rpx;
+				background: #FE9E32;
+				border-radius: 5rpx;
+				position: absolute;
+				bottom: 10rpx;
+				left: 0;
+				right: 0;
+				margin: auto;
+			}
+
+			image {
+				width: 213rpx;
+				height: 47rpx;
+			}
+		}
+
+		.card-bg {
+			width: 100%;
+			height: 270rpx;
+			position: absolute;
+			bottom: 0rpx;
+		}
+
+		.card-content {
+			padding: 25rpx 35rpx;
+			font-size: 26rpx;
+			font-weight: 500;
+			color: #2C2E35;
+			position: relative;
+		}
+		.card-content-t {
+			padding: 0;
+		}
+
+		.img-list {
+			justify-content: space-between;
+			flex-wrap: wrap;
+			margin: auto;
+			padding: 30rpx 30rpx 0;
+			position: relative;
+
+			image {
+				width: 270rpx;
+				height: 270rpx;
+				background-color: #fff;
+				margin-bottom: 30rpx;
+				box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.6);
+			}
+
+
+		}
+
+		.fw {
+			font-size: 26rpx;
+			font-weight: 500;
+			color: #2C2E35;
+			padding: 10rpx 0;
+
+			.fw-tit {
+				color: #FE9E32;
+				display: flex;
+				align-items: center;
+
+				.yg {
+					background-color: #FE9E32;
+					display: inline-block;
+					width: 10rpx;
+					height: 10rpx;
+					border-radius: 50%;
+					margin-right: 10rpx;
+				}
+			}
+
+			.fw-content {
+				padding-top: 10rpx;
+				padding-left: 18rpx;
+				text-align: justify;
+			}
+
+		}
+
+
+	}
+	.user-info-t {
+		width: 350rpx;
+	}
+	.user-info, .user-info-t {
+		flex-wrap: wrap;
+		font-size: 26rpx;
+		font-weight: 500;
+		color: #000000;
+		position: relative;
+
+
+
+		.info-item-b {
+			width: 50%;
+		}
+
+		.info-item-q {
+			width: 100%;
+			display: flex;
+			align-items: flex-start;
+			justify-content: start;
+
+			.fwdz {
+				flex-direction: column;
+				align-items: flex-start;
+			}
+
+			.gzt {
+				width: 312rpx;
+				height: 24rpx;
+				padding-top: 10rpx;
+				position: relative;
+
+				image {
+					width: 312rpx;
+					height: 24rpx;
+					position: relative;
+				}
+
+				.gzt-price,
+				.gzt-price-b {
+					width: 200rpx;
+					text-align: center;
+					position: absolute;
+					padding-top: 20rpx;
+
+					&::after {
+						content: '';
+						width: 0px;
+						height: 0rpx;
+						border: 14rpx solid;
+						border-color: transparent transparent #FE9E32;
+						position: absolute;
+						top: -14rpx;
+						left: 0;
+						right: 0;
+						margin: auto;
+					}
+
+					text {
+						color:#FE9E32;
+					}
+				}
+
+				.gzt-price {
+					left: -100rpx;
+				}
+
+				.gzt-price-b {
+					right: -100rpx;
+				}
+			}
+
+			.rz {
+				margin-top: 10rpx;
+				margin-left: 10rpx;
+				width: 87rpx;
+				height: 26rpx;
+			}
+		}
+	}
+	.hua2 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 370rpx;
+			height: 629rpx;
+			border-radius: 20rpx 314rpx 315rpx 20rpx;
+			background: radial-gradient(ellipse at 0 50%, #e0f2f8,#f8f9ef, transparent);
+			// background: url($base-url + '/resource/icon/model1/hua2.png') no-repeat;
+			position: absolute;
+			bottom: -315rpx;
+			left: 0;
+			background-size: 100% 100%;
+		}
+	}
+
+	.hua3 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 360rpx;
+			height: 629rpx;
+			background: radial-gradient(ellipse at 100% 50%, #FFE4E9,#fff4f5, transparent);
+			position: absolute;
+			bottom: -400rpx;
+			right: 0;
+			margin: auto;
+			background-size: 100% 100%;
+		}
+	}
+
+	.hua4 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 272rpx;
+			height: 621rpx;
+			background: radial-gradient(ellipse at 100% 50%, #e0f2f8,#f8f9ef, transparent);
+			position: absolute;
+			bottom: -310rpx;
+			right: 0;
+			background-size: 100% 100%;
+		}
+	}
+
+	.hua5 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 199rpx;
+			height: 298rpx;
+			background: radial-gradient(ellipse at 100% 50%, #FFE4E9,#fff4f5, transparent);
+			position: absolute;
+			bottom: -100rpx;
+			left: 0;
+			background-size: 100% 100%;
+			transform: rotateY(180deg);
+		}
+	}
+
+	.hua6 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 313rpx;
+			height: 629rpx;
+			position: absolute;
+			background: radial-gradient(ellipse at 0 50%, #FFE4E9,#fff4f5, transparent);
+			bottom: -315rpx;
+			right: 0;
+			background-size: 100% 100%;
+			transform: rotateY(180deg);
+		}
+	}
+	.hua7 {
+		position: relative;
+		&::before {
+			content: '';
+			width: 344rpx;
+			height: 286rpx;
+			position: absolute;
+			background: url($base-url + '/resource/icon/model2/hua8.png') no-repeat;
+			bottom: -143rpx;
+			right: 0;
+			background-size: 100% 100%;
+		}
+	}
+	.hua8 {
+		position: relative;
+		&::before {
+			content: '';
+			width: 367rpx;
+			height: 372rpx;
+			position: absolute;
+			border-radius: 20rpx 150rpx 150rpx 20rpx;
+			background: radial-gradient(ellipse at 0% 50%, #FFE4E9,#fff7f2, transparent);
+			bottom: -143rpx;
+			left: 0;
+			background-size: 100% 100%;
+		}
+	}
+	.u-name {
+		font-size: 73rpx;
+		font-weight: 400;
+		color: #202E4F;
+	}
+	.u-bh {
+		justify-content: flex-start;
+		image {
+			width: 26rpx;
+			height: 26rpx;
+			margin-right: 10rpx;
+		}
+		font-size: 28rpx;
+		font-weight: bold;
+		color: #202e4f;
+		
+	}
+</style>

+ 652 - 0
pages/modelData/modeltemplate/model_3.vue

@@ -0,0 +1,652 @@
+<template>
+	<view class="mone">
+		<view class="top-left-icon-1"></view>
+		<view class="top-center-icon-1"></view>
+		<view class="top-center-icon-2"></view>
+		<view class="top-right-icon-1 icon-box-border">
+			<view class="top-right-content icon-box-content">
+			</view>
+		</view>
+		<view class="user-bottom-icon icon-box-border">
+			<view class="user-bottom-content icon-box-content">
+			</view>
+		</view>
+		<image class="user-top-icon" :src="baseURL + '/resource/model/static/model3/tap3.png'" mode="scaleToFill"></image>
+		<image class="user-right-logo" :src="baseURL + '/resource/model/model3/tap13.png'" mode="widthFix"></image>
+		<view class="user-img">
+			<image class="image" :src="cardInfo.avatar" mode="widthFix"></image>
+		</view>
+		<image class="content-left-icon" :src="baseURL + '/resource/model/model3/tap6.png'" mode="widthFix"></image>
+		<image class="page-bottom-right" :src="baseURL + '/resource/model/model3/tap7.png'" mode="widthFix"></image>
+		<view class="share-number">
+			浏览:{{shareNumber}}
+		</view>
+		<view class="right-content">
+			<view class="name">
+				{{cardInfo.name || '暂无'}}
+			</view>
+			<view class="career margin-t-10">
+				职业:{{cardInfo.user_work_type_title || '暂无'}}
+			</view>
+			<view class="career margin-t-10">
+				编号:{{cardInfo.no}}
+			</view>
+			<image class="line-icon margin-t-10" :src="baseURL + '/resource/model/model3/tap11.png'" mode="widthFix"></image>
+		</view>
+		<image class="right-center-icon" :src="baseURL + '/resource/model/model3/tap5.png'" mode="widthFix"></image>
+		<view class="content ">
+			<view class="icon-round-min">
+
+			</view>
+			<view class="icon-round-base">
+
+			</view>
+			<view class="content-icon-right icon-box-border">
+				<view class="content-right-content icon-box-content">
+				</view>
+			</view>
+			<view class="center-data flex">
+				<view class="left">
+					<view class="list-item">
+						年龄: {{cardInfo.age|| '暂无'}}
+					</view>
+					<view class="list-item">
+						从业: {{(cardInfo.work_year + '年')|| '暂无'}}
+					</view>
+					<view class="list-item">
+						籍贯: {{cardInfo.ancestral_place || '暂无'}}
+					</view>
+					<view class="list-item">
+						学历: {{cardInfo.education || '暂无'}}
+					</view>
+				</view>
+				<view class="right">
+					<view class="list-item">
+						属相:{{cardInfo.twelve|| '暂无'}}
+					</view>
+					<view class="list-item">
+						星座:{{cardInfo.constellation || '暂无'}}
+					</view>
+					<view class="list-item">
+						民族: {{cardInfo.minority || '暂无'}}
+					</view>
+				</view>
+			</view>
+			<view class="list-item padding-l-30 margin-b-30">
+				服务地区:
+				<block v-for="(fwitem,fwindex) in cardInfo.service_area_all">
+					{{fwitem}}{{fwindex ==(cardInfo.service_area_all.length -1) ?'': '、'  }}
+				</block>
+			</view>
+			<view class="info-item-q flex-start ">
+				<text class="flex-shrink-false">服务价格: </text>
+				<view class="gzt">
+					<view class="line-box flex">
+						<view class="item" v-for="i in 18"></view>
+					</view>
+					<view class="gzt-price">
+						<text
+							class="money">{{cardInfo.service_min_price}}</text>元/{{ cardInfo.service_time_type_title && cardInfo.service_time_type_title.replace('每','')}}
+					</view>
+					<view class=" gzt-price-b">
+						<text
+							class="money">{{cardInfo.service_max_price}}</text>元/{{cardInfo.service_time_type_title && cardInfo.service_time_type_title.replace('每','')}}
+					</view>
+				</view>
+				<image :src="baseURL + '/resource/icon/model1/yrz.png'" mode="" class="rz"
+					v-if="cardInfo.is_type_audit == 1"></image>
+			</view>
+		</view>
+		<view class="content-text">
+			<view class="flex margin-b-20">
+				<view class="name">
+					自我评价
+				</view>
+				<image class="icon" :src="baseURL + '/resource/model/model3/tap13.png'" mode="widthFix"></image>
+			</view>
+			<view class="flex">
+				<view></view>
+				<image class="line" :src="baseURL + '/resource/model/model3/tap11.png'" mode="widthFix"></image>
+			</view>
+			<view class="text margin-t-20">
+				{{cardInfo.service_intro_content}}
+			</view>
+			<view class="img-list flex">
+				<image :src="siiitem" mode="scaleToFill" v-for="siiitem in cardInfo.service_intro_imgs"></image>
+			</view>
+		</view>
+		
+		<view class="content-text" >
+			<view class="flex margin-b-20">
+				<view class="name">
+					我的证书
+				</view>
+				<image class="icon" :src="baseURL + '/resource/model/model3/tap13.png'" mode="widthFix"></image>
+			</view>
+			<view class="flex">
+				<view></view>
+				<image class="line" :src="baseURL + '/resource/model/model3/tap11.png'" mode="widthFix"></image>
+			</view>
+			<view class="img-list flex" >
+				<image :src="siiitem" mode="scaleToFill" v-for="siiitem in cardInfo.service_audit_imgs"></image>
+			</view>
+		</view>
+		<view class="content-text">
+			<view class="flex margin-b-20">
+				<view class="name">
+					服务内容
+				</view>
+				<image class="icon" :src="baseURL + '/resource/model/model3/tap13.png'" mode="widthFix"></image>
+			</view>
+			<view class="flex">
+				<view></view>
+				<image class="line" :src="baseURL + '/resource/model/model3/tap11.png'" mode="widthFix"></image>
+			</view>
+			<view class="card-content">
+				<view class="fw" v-for="spaitem in cardInfo.service_project_ar">
+					<view class="fw-tit">
+						<text class="yg"></text>{{spaitem.title}}
+					</view>
+					<view class="fw-content">
+						{{spaitem.content}}
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="content-text">
+			<view class="flex margin-b-20">
+				<view class="name">
+					服务照片
+				</view>
+				<image class="icon" :src="baseURL + '/resource/model/model3/tap13.png'" mode="widthFix"></image>
+			</view>
+			<view class="flex">
+				<view></view>
+				<image class="line" :src="baseURL + '/resource/model/model3/tap11.png'" mode="widthFix"></image>
+			</view>
+			<view class="img-list flex" >
+				<image :src="siiitem" mode="scaleToFill" v-for="siiitem in cardInfo.service_imgs"></image>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+	} from 'vuex';
+	export default {
+		props: {
+			// 浏览数量
+			shareNumber: {
+				type: Number,
+				default: 0
+			},
+			// 是否显示默认数据
+			isDefault: {
+				type: Boolean,
+				default: true
+			},
+			isShare: {
+				type: Boolean,
+				default: false
+			},
+			//1为模板2为用户
+			isLook: {
+				type: Number,
+				default: 0
+			},
+			templateDetail: {
+				type: Object,
+				default: () => {
+					return {}
+				}
+			}
+		},
+		data() {
+			return {
+				defaultDate: {
+					user_work_type_title: '母婴护理师',
+					name: '陈旦',
+					avatar: 'https://api.myjie.cn/resource/user/user3/ld.png',
+					age: '40',
+					twelve: '猪',
+					work_year: '9',
+					constellation: '处女座',
+					ancestral_place: '广西',
+					minority: '汉族',
+					education: '初中',
+					no: 'myj23031421',
+					service_area_all: ['上海市'],
+					service_min_price: 16800,
+					service_max_price: 19800,
+					user_work_type_title: '母婴师',
+					service_time_type_title: '每月',
+					service_intro_content: '本人从事月嫂工作已经9年多了,顺产剖腹产的妈妈都照顾过,宝宝方面的新生儿,早产儿足月生产儿、双胞胎都照顾过,累积了丰富的经验,现在对于月嫂的这份工作得心应手。我秉承着不怕苦,不怕累,对工作认真负责的态度,帮助过很多需要的家庭。这些年也一直靠客户的口碑宣传接单工作,很感谢客户对我工作的认可。我严格要求自己待客户如家人,视宝宝如己出,我会用自己的爱心,细心,耐心和学到的专业知识去赢得每一个客户的认可。',
+					service_intro_imgs: ['https://api.myjie.cn/resource/user/user3/zwpj1.png',
+						'https://api.myjie.cn/resource/user/user3/zwpj2.png',
+						'https://api.myjie.cn/resource/user/user3/zwpj3.png',
+						'https://api.myjie.cn/resource/user/user3/zwpj4.png',
+						'https://api.myjie.cn/resource/user/user3/zwpj5.png',
+						'https://api.myjie.cn/resource/user/user3/zwpj6.png'
+					],
+					service_audit_imgs: ['https://api.myjie.cn/resource/user/user3/zs1.png',
+						'https://api.myjie.cn/resource/user/user3/zs2.png',
+						'https://api.myjie.cn/resource/user/user3/zs3.png',
+						'https://api.myjie.cn/resource/user/user3/zs4.png'
+					],
+					service_project_ar: [{
+							title: '婴幼儿睡眠管理',
+							content: '如:日夜颠倒、睡眠不规律、乳头混淆、奶睡、抱睡等问题,帮助宝爸宝妈规律孩子作息、解决婴幼儿喂养困扰,培养良好的生活、学习习惯。'
+						}, {
+							title: '特色月子餐',
+							content: '套用客户的一句话“养眼、养心更养胃”!家常菜、面食、点心、甜品、靓汤、五谷杂粮粥、婴幼儿花样辅食等。'
+						},
+						{
+							title: '早产儿特殊护理',
+							content: '包括早产儿基础护理、安全喂养方法、追赶性生长、消化与免疫系统等技能,根据宝宝具体情况给予早产儿家长的科学入户指导。'
+						},
+						{
+							title: '0-6岁早期教育',
+							content: '在婴孩最敏感最能接受的时期进行事半功倍的适时教育,针对不同年龄段的孩子,开发婴幼儿潜能的教育,为孩子多元化和健康人格打下良好基础。'
+						}
+					],
+					service_imgs: [
+						'https://api.myjie.cn/resource/user/user3/fw1.png',
+						'https://api.myjie.cn/resource/user/user3/fw2.png',
+						'https://api.myjie.cn/resource/user/user3/fw3.png',
+						'https://api.myjie.cn/resource/user/user3/fw4.png',
+						'https://api.myjie.cn/resource/user/user3/fw5.png',
+						'https://api.myjie.cn/resource/user/user3/fw6.png',
+					],
+					is_type_audit: 1
+				}
+			}
+		},
+		computed: {
+			...mapState(['baseURL']),
+			cardInfo() {
+				if (this.isDefault) {
+					return this.defaultDate
+				} else {
+					return this.templateDetail
+				}
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.mone {
+		padding-bottom: 150rpx;
+		background-color: #FFFFFF;
+		min-height: 100vh;
+		padding-top: 580rpx;
+		position: relative;
+		.top-left-icon-1 {
+			background-color: rgba(15, 61, 96, 1);
+			border-bottom-right-radius: 110rpx;
+			width: 250rpx;
+			height: 200rpx;
+			position: absolute;
+			top: -120rpx;
+			left: -130rpx;
+		}
+
+		.top-center-icon-1 {
+			border-radius: 100rpx;
+			width: 60rpx;
+			height: 60rpx;
+			position: absolute;
+			border: 1px solid rgba(43, 117, 180, 1);
+			top: 50rpx;
+			left: 310rpx;
+		}
+
+		.top-center-icon-2 {
+			border-radius: 100rpx;
+			width: 35rpx;
+			height: 35rpx;
+			position: absolute;
+			border: 1px solid rgba(215, 215, 215, 1);
+			top: 125rpx;
+			left: 525rpx;
+		}
+
+		.top-right-icon-1 {
+			padding: 30rpx;
+			width: 200rpx;
+			height: 200rpx;
+			border: 1px dashed rgba(215, 215, 215, 1);
+			top: -100rpx;
+			right: -50rpx;
+
+			.top-right-content {
+				background-color: rgba(215, 215, 215, 1);
+			}
+		}
+
+		.user-top-icon {
+			width: 106rpx;
+			height: 97rpx;
+			position: absolute;
+			top: 157rpx;
+			left: 205rpx;
+		}
+
+		.user-right-logo {
+			width: 235rpx;
+			position: absolute;
+			top: 246rpx;
+			right: 154rpx;
+		}
+
+		.user-img {
+			width: 280rpx;
+			height: 280rpx;
+			border: 3px solid #FFFFFF;
+			border-radius: 200rpx;
+			position: absolute;
+			top: 186rpx;
+			left: 50rpx;
+			overflow: hidden;
+
+			.image {
+				width: 100%;
+			}
+		}
+
+		.user-bottom-icon {
+			padding: 30rpx;
+			width: 210rpx;
+			height: 210rpx;
+			border: 1px dashed rgba(15, 61, 96, 1);
+			top: 380rpx;
+			left: 36rpx;
+
+			.user-bottom-content {
+				background-color: rgba(15, 61, 96, 1);
+			}
+		}
+
+		.share-number {
+			border-top-left-radius: 99rpx;
+			border-bottom-left-radius: 99rpx;
+			font-size: $font-base;
+			color: #266B9E;
+			border: 2px solid #266B9E;
+			position: absolute;
+			top: 150rpx;
+			right: 0rpx;
+			line-height: 1;
+			padding: 10rpx;
+			padding-left: 25rpx;
+		}
+
+		.right-content {
+			position: absolute;
+			right: 0;
+			top: 350rpx;
+			width: 390rpx;
+
+			.name {
+				font-size: 60rpx;
+				font-family: FZYanSongS-DB-GB;
+				color: #266B9E;
+			}
+
+			.career {
+				font-size: 30rpx;
+				font-family: FZYanSongS-DB-GB;
+				color: #266B9E;
+			}
+
+			.line-icon {
+				width: 360rpx;
+			}
+		}
+
+		.right-center-icon {
+			width: 190rpx;
+			position: absolute;
+			top: 900rpx;
+			right: 0;
+		}
+		.page-bottom-right{
+			width: 188rpx;
+			position: absolute;
+			bottom: 130rpx;
+			right: 0;
+		}
+	}
+
+	.icon-box-border {
+		border-radius: 1000rpx;
+		position: absolute;
+
+		.icon-box-content {
+			width: 100%;
+			height: 100%;
+			border-radius: 900rpx;
+		}
+	}
+	.content-left-icon{
+		width: 86rpx;
+		position: absolute;
+		top: 1800rpx;
+		left: 0rpx;
+	}
+	.content-text {
+		margin: 30rpx;
+		padding: 55rpx;
+		background-color: rgba(245, 248, 250, 1);
+		position: relative;
+		.card-content {
+			font-size: 26rpx;
+			font-weight: 500;
+			color: #2C2E35;
+			position: relative;
+			.fw {
+				font-size: 26rpx;
+				font-weight: 500;
+				color: #2C2E35;
+				padding: 10rpx 0;
+			
+				.fw-tit {
+					color: #266B9E;
+					display: flex;
+					align-items: center;
+			
+					.yg {
+						background-color: #266B9E;
+						display: inline-block;
+						width: 10rpx;
+						height: 10rpx;
+						border-radius: 50%;
+						margin-right: 10rpx;
+					}
+				}
+			
+				.fw-content {
+					padding-top: 10rpx;
+					padding-left: 18rpx;
+					text-align: justify;
+				}
+			
+			}
+		}
+		.name {
+			font-size: 65rpx;
+			font-family: FZYanSongS-DB-GB;
+			font-weight: bold;
+			background-color: #266B9E;
+			line-height: 60rpx;
+			padding: 20rpx 40rpx;
+			padding-bottom: 25rpx;
+			color: #FFF;
+		}
+
+		.icon {
+			width: 223rpx;
+		}
+
+		.line {
+			width: 400rpx;
+		}
+
+		.text {
+			line-height: 1.5;
+			font-size: 26rpx;
+			font-family: Adobe Heiti Std;
+		}
+	}
+
+	.content {
+		padding: 36rpx;
+		line-height: 1;
+		font-size: $font-base;
+		color: #266B9E;
+		font-weight: bold;
+		position: relative;
+		padding-bottom: 50rpx;
+		margin-bottom: 30rpx;
+
+		.content-icon-right {
+			position: absolute;
+			right: 50rpx;
+			top: 100rpx;
+			border: 1px solid #266B9E;
+			width: 75rpx;
+			height: 75rpx;
+			padding: 10rpx;
+
+			.content-right-content {
+				background-color: rgb(217, 217, 217);
+			}
+		}
+
+		.icon-round-min {
+			background-color: rgb(28, 109, 161);
+			border-radius: 100rpx;
+			width: 30rpx;
+			height: 30rpx;
+			position: absolute;
+			top: 30rpx;
+			left: 300rpx;
+		}
+
+		.icon-round-base {
+			background-color: rgb(28, 109, 161);
+			border-radius: 100rpx;
+			width: 60rpx;
+			height: 60rpx;
+			position: absolute;
+			top: 160rpx;
+			left: 280rpx;
+		}
+
+		.center-data {
+
+			align-items: flex-start;
+			border-left: 1px dashed #E6E6E6;
+
+			.left,
+			.right {
+				width: 50%;
+				padding-left: 30rpx;
+				text-align: left;
+			}
+
+			.list-item {
+				margin-bottom: 20rpx;
+			}
+		}
+
+		.info-item-q {
+			width: 100%;
+			display: flex;
+			align-items: flex-start;
+			justify-content: start;
+			padding-left: 30rpx;
+
+
+			.gzt {
+				width: 350rpx;
+				height: 24rpx;
+				position: relative;
+
+				.line-box {
+					width: 350rpx;
+					height: 24rpx;
+					position: relative;
+					background-color: rgb(36, 109, 179);
+					border-radius: 50rpx;
+					overflow: hidden;
+
+					.item {
+						margin-left: 10rpx;
+						background-color: #5294C9;
+						width: 10rpx;
+						height: 50rpx;
+						transform: rotate(18deg);
+					}
+				}
+
+				.gzt-price,
+				.gzt-price-b {
+					width: 200rpx;
+					text-align: center;
+					position: absolute;
+					padding-top: 20rpx;
+					color: $font-color-dark;
+
+					&::after {
+						content: '';
+						width: 0px;
+						height: 0rpx;
+						border: 14rpx solid;
+						border-color: transparent transparent #FEB8C6;
+						position: absolute;
+						top: -14rpx;
+						left: 0;
+						right: 0;
+						margin: auto;
+					}
+
+					text {
+						color: #236BA5;
+					}
+				}
+
+				.gzt-price {
+					left: -100rpx;
+				}
+
+				.gzt-price-b {
+					right: -100rpx;
+				}
+			}
+
+			.rz {
+				margin-left: 10rpx;
+				width: 87rpx;
+				height: 26rpx;
+			}
+		}
+	}
+
+	.img-list {
+		justify-content: space-between;
+		flex-wrap: wrap;
+		margin: auto;
+		position: relative;
+		padding-top: 50rpx;
+		image {
+			width: 270rpx;
+			height: 270rpx;
+			background-color: #fff;
+			margin-bottom: 30rpx;
+			box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.6);
+		}
+	}
+</style>

+ 57 - 0
pages/public/agreement.vue

@@ -0,0 +1,57 @@
+<template>
+	<view class="buttomText flex" @click="checkedChange">
+		<image v-if='checked' class="buttomIcon" src="../../static/icon/addressIconXz.png" mode="scaleToFill">
+		</image>
+		<view class="buttomNo" v-else>
+
+		</view>
+		<text class="margin-l-10">勾选代表同意</text>
+		<navigator url="./userAgreement">
+			<text class="next-text">母婴界严选服务</text>
+		</navigator>
+		<text>与</text>
+		<navigator url="./privacyAgreement">
+			<text class="next-text">隐私条例</text>
+		</navigator>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				// 是否选中
+				checked: false,
+			};
+		},
+		methods: {
+
+			checkedChange() {
+				this.checked = !this.checked;
+				this.$emit('checkedChange', this.checked)
+			}
+		},
+	};
+</script>
+
+<style lang="scss">
+	.buttomText {
+		margin-top: 30rpx;
+		justify-content: center;
+		font-size: 24rpx;
+		color: $font-color-light;
+
+		.buttomIcon,
+		.buttomNo {
+			width: 40rpx;
+			height: 40rpx;
+		}
+		.next-text{
+			color: $uni-color-primary;
+		}
+		.buttomNo {
+			border: 1px solid $font-color-light;
+			border-radius: 100rpx;
+		}
+	}
+</style>

+ 160 - 0
pages/public/domApp.vue

@@ -0,0 +1,160 @@
+<template>
+	<view class="box">
+		<view class="logo flex-line ">
+			<image class="logoImg" src="../../static/img/domLogo.png" mode="aspectFit"></image>
+			<view class="text">
+				<view class="name">
+					母婴界
+				</view>
+				<view class="content margin-t-20">
+					母婴界严选
+				</view>
+			</view>
+			<view class="tipBox">
+
+				<view class="rightO">
+
+				</view>
+				<view class="leftX">
+					×
+				</view>
+			</view>
+		</view>
+		<image class="img" src="../../static/img/bg.png" mode="widthFix"></image>
+		<view class="bottom flex-line">
+			<view class="buttom" @click="load">
+				立即下载
+			</view>
+			<view class="tip margin-t-20">
+				平价惠万民,智能行百里
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getAppBBH
+	} from "@/api/index.js";
+	export default {
+		data() {
+			return {
+
+			};
+		},
+		onLoad() {
+		
+		},
+		methods: {
+			load(){
+				const bo = uni.getStorageSync('weichatBrowser')||false;
+				if(bo){
+					uni.showModal({
+						title: '错误',
+						content: '无法在微信浏览器中下载请使用手机自带浏览器',
+						showCancel: false,
+					});
+					return 
+				}
+				uni.showLoading({
+					title: '开始下载',
+					mask: true
+				});
+				getAppBBH().then((res)=>{
+					uni.hideLoading()
+					let r = res.data;
+					console.log(r);
+					// 打开下载文件
+					window.open(r.file_url.app_file)
+				}).catch(()=>{
+					uni.hideLoading()
+				})
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.box {
+		line-height: 0;
+		height: 100vh;
+	}
+
+	.logo {
+		margin: 0 auto;
+		width: 700rpx;
+		height: calc(100vh - 535rpx);
+
+		.logoImg {
+			width: 100%;
+		}
+
+		.tipBox {
+			width: 700rpx;
+			position: relative;
+
+			.rightO {
+				border: 1px solid #04aa6a;
+				opacity: 0.8;
+				width: 40rpx;
+				height: 40rpx;
+				border-radius: 100rpx;
+				position: absolute;
+				right: 0;
+				top: -100rpx;
+			}
+
+			.leftX {
+				color: #04aa6a;
+				opacity: 0.8;
+				position: absolute;
+				left: 10rpx;
+				top: 80rpx;
+			}
+		}
+	}
+
+	.img {
+		width: 750rpx;
+		height: 160rpx;
+	}
+
+	.bottom {
+		width: 750rpx;
+		height: 375rpx;
+		background-color: #04aa6a;
+		line-height: 1;
+
+		.buttom {
+			font-weight: bold;
+			background-color: #FFFFFF;
+			text-align: center;
+			color: #04aa6a;
+			padding: 20rpx;
+			border-radius: 20rpx;
+			width: 450rpx;
+			margin: 0 auto;
+		}
+
+		.tip {
+			color: #FFFFFF;
+			font-size: 24rpx;
+		}
+	}
+
+	.text {
+		line-height: 1;
+		color: #04aa6a;
+		text-align: center;
+
+		.name {
+			font-size: 38rpx;
+			font-weight: bold;
+		}
+
+		.content {
+			font-size: 28rpx;
+			opacity: 0.5;
+		}
+	}
+</style>

+ 306 - 0
pages/public/forget.vue

@@ -0,0 +1,306 @@
+<template>
+	<view class="container">
+		<view class="loginTitle"><text>修改密码</text></view>
+		<view class="login_text">
+			<view class="login_input flex">
+				<view class="login_img">
+					+86
+				</view>
+				<view class="login_name"><input class="uni-input" v-model="phone" focus placeholder="请输入手机号" /></view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img">
+					新密码
+				</view>
+				<view class="login_name"><input class="uni-input" type="password" v-model="password" focus
+						placeholder="请重复输入密码" /></view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img">
+					验证码
+				</view>
+				<view class="login_name flex">
+					<input class="uni-input width" v-model="code" focus placeholder="请输入验证码" />
+					<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
+				</view>
+			</view>
+			<view><button type="green" @click="register" class="uni-button uni-button-green">修改密码</button></view>
+			<view>
+				<navigator url="login">
+					<button class="uni-button uni-button-green-plain" type="green" plain="true"
+						hover-class="none">返回登录</button>
+				</navigator>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	import {
+		verify
+	} from '@/api/login.js';
+	import {
+		registerReset
+	} from '@/api/set.js';
+	export default {
+		data() {
+			return {
+				phone: '', //用户
+				password: '', //密码
+				code: '', //验证码
+				time: '', //保存倒计时对象
+				countDown: 0, //倒计时
+			};
+		},
+		onLoad() {
+			// 获取扫码邀请人id
+			this.invitation = uni.getStorageSync('spread') || '';
+		},
+		watch: {
+			// 监听倒计时
+			countDown(i) {
+				if (i == 0) {
+					clearInterval(this.time);
+				}
+			}
+		},
+		methods: {
+			// 注册
+			register() {
+				let obj = this;
+				if (obj.phone == '') {
+					obj.$api.msg('请输入电话号码');
+					return;
+				}
+				if (this.phone.length != 11) {
+					obj.$api.msg('请输入正确的手机号');
+					return;
+				}
+				if (obj.password == '') {
+					obj.$api.msg('请输入密码');
+					return;
+				}
+				registerReset({
+					account: obj.phone, //账号
+					captcha: obj.code, //验证码
+					password: obj.password, //密码
+				}).then(function(e) {
+					uni.showToast({
+						title: '修改成功',
+						duration: 2000,
+						position: 'top'
+					});
+					setTimeout(function() {
+						uni.navigateTo({
+							url: '/pages/public/login'
+						});
+					}, 1000)
+
+				});
+				//调用注册接口,成功跳转登录页
+			},
+			//发送验证码
+			verification() {
+				let obj = this;
+				if (this.phone == '') {
+					this.$api.msg('请输入电话号码');
+					return;
+				}
+				if (this.phone.length < 11) {
+					this.$api.msg('请输入正确的手机号');
+					return;
+				}
+				// 判断是否在倒计时
+				if (obj.countDown > 0) {
+					return false;
+				} else {
+					obj.countDown = 60;
+					obj.time = setInterval(() => {
+						obj.countDown--;
+					}, 1000);
+					//调用验证码接口
+					verify({
+							phone: obj.phone,
+							type: ''
+						})
+						.then(({
+							data
+						}) => {})
+						.catch(err => {
+							console.log(err);
+						});
+				}
+			},
+			login() {
+				//返回登录
+				uni.navigateTo({
+					url: '/pages/public/login'
+				});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+	}
+
+	.container {
+		width: 100%;
+		height: 100%;
+		background-size: 100%;
+		background-color: #FFFFFF;
+	}
+
+	.container_text {
+		width: 100%;
+		height: 500rpx;
+		top: 0rpx;
+
+		.banner-img {
+			width: 100%;
+			height: 100%;
+		}
+	}
+
+	.login_text {
+		margin: auto 50rpx;
+		position: relative;
+		background-color: #ffffff;
+		border-radius: 20rpx;
+
+		.login_input {
+			border-bottom: 1px solid #f0f0f0;
+			margin-bottom: 30rpx;
+			padding: 30rpx 0;
+			line-height: 1;
+			.login_img {
+				height: 35rpx;
+				width: 150rpx;
+				flex-shrink: 0;
+				font-size: 30rpx;
+				text-align: center;
+				margin-right: 20rpx;
+				color: $font-base;
+			}
+
+			.uni-input {
+				text-align: left;
+				width: 100%;
+				font-size: 28rpx !important;
+			}
+
+			.login_name {
+				color: #333333;
+				flex-grow: 1;
+
+				.code {
+					color: #5dbc7c;
+					font-size: 23rpx;
+					border-left: 1px solid #eeeeee;
+					width: 150rpx;
+					flex-shrink: 0;
+					text-align: center;
+				}
+			}
+		}
+
+		.other {
+			margin-top: 60rpx;
+
+			.fenge {
+				width: 30%;
+				height: 2rpx;
+				background-color: #eeeeee;
+			}
+
+			.qita {
+				font-size: 28rpx;
+				color: #999999;
+			}
+		}
+
+		.weixin {
+			width: 75rpx;
+			height: 75rpx;
+			margin: 25rpx auto;
+		}
+
+		.weixin image {
+			width: 100%;
+			height: 100%;
+		}
+
+		.weixin_text {
+			text-align: center;
+			font-size: 28rpx;
+			color: #999999;
+		}
+
+		.forget {
+			font-size: 28rpx;
+			width: 100%;
+			text-align: right;
+			color: #999999;
+		}
+
+		.uni-button-green {
+			color: #ffffff;
+			background-color: #5dbc7c;
+			margin: 40rpx 10rpx;
+			border-radius: 50rpx;
+			box-shadow: 0px 8px 10px 0px rgba(166, 203, 184, 0.75);
+		}
+
+		.uni-button-green-plain {
+			margin: 40rpx 10rpx;
+			border-radius: 50rpx;
+			color: $font-base;
+			background-color: $page-color-base;
+			border: none;
+		}
+
+		.uni-button {
+			height: 80rpx;
+			line-height: 80rpx;
+			font-size: 28rpx;
+			width: 100%;
+		}
+	}
+
+	.loginTitle {
+		padding: 150rpx 0;
+		width: 100%;
+		text-align: left;
+		color: $font-base;
+		font-size: 48rpx;
+		margin: 0 50rpx;
+
+	}
+
+	.forget {
+		width: 100rpx;
+		font-size: 24rpx;
+		color: #ffffff;
+		margin: 0px auto;
+		border-bottom: 1px solid #ffffff;
+	}
+
+	.width {
+		width: 325rpx !important;
+	}
+
+	.code {
+		color: #5dbc7c;
+		font-size: 23rpx;
+		border-left: 1px solid #eeeeee;
+		width: 150rpx;
+		flex-shrink: 0;
+		text-align: center;
+	}
+
+	uni-button {
+		height: 80rpx !important;
+		line-height: 80rpx !important;
+	}
+</style>

+ 332 - 0
pages/public/login.vue

@@ -0,0 +1,332 @@
+<template>
+	<view class="container">
+		<view class="container_text">
+			<view>
+				<image class="banner-img" src="../../static/image/logo.png" mode="scaleToFill"></image>
+			</view>
+			<view class="logName">
+				母婴界严选
+			</view>
+		</view>
+		<view class="login_text">
+			<view class="login_input flex">
+				<view class="login_img">
+					+86
+				</view>
+				<view class="login_name"><input class="uni-input" v-model="username" focus placeholder="请输入手机号" />
+				</view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img">
+					密码
+				</view>
+				<view class="login_name">
+					<input class="uni-input" type="password" v-model="passward" focus placeholder="请输入密码" />
+				</view>
+			</view>
+			<view><button type="green" class="uni-button uni-button-green" @click="toLogin">立即登录</button></view>
+			<view><button type="green" class="uni-button uni-button-green-plain" plain="true" hover-class="none"
+					@click="$refs.popup.open()">更多</button></view>
+
+		</view>
+		<!-- #ifdef APP-PLUS -->
+		<loginMethods @onLogin='loginGl'></loginMethods>
+		<!-- #endif -->
+		<agreement @checkedChange='changeChecked'></agreement>
+		<uni-popup ref="popup" type="bottom">
+			<view class="buttomBox">
+				<navigator url="/pages/public/phoneLogin">
+					<view class="item borde-b">
+						手机登录
+					</view>
+				</navigator>
+				<navigator url="/pages/public/forget">
+					<view class="item borde-b">
+						忘记密码
+					</view>
+				</navigator>
+				<navigator url="/pages/public/register">
+					<view class="item">
+						注册
+					</view>
+				</navigator>
+			</view>
+			<view class="buttomBox" @click="close">
+				<view class="item qx">
+					取消
+				</view>
+			</view>
+		</uni-popup>
+
+	</view>
+</template>
+
+<script>
+	import loginMethods from "./loginMethods.vue"
+	import agreement from "./agreement.vue"
+	import {
+		mapMutations
+	} from 'vuex';
+	import {
+		login
+	} from '@/api/login.js';
+	import {
+		getUserInfo
+	} from '@/api/user.js';
+	export default {
+		data() {
+			return {
+				checked: false, //是否同意条款
+				username: '',
+				passward: '',
+			};
+		},
+		onLoad() {
+			let obj = this;
+		},
+		components: {
+			loginMethods,
+			agreement
+		},
+		methods: {
+			...mapMutations('user', ['setUserInfo', 'login','logout']),
+			// 监听隐私条例
+			changeChecked(check) {
+				this.checked = check;
+			},
+			loginGl(userinfo){
+				if(!this.checked){
+					this.logout();
+					uni.showModal({
+						title: '提示',
+						content: '请先阅读同意《母婴界严选服务》《隐私条例》',
+						showCancel: false,
+					});
+					return;
+				}
+				let ur = uni.getStorageSync('present') || '/pages/index/index';
+				// 用于处理缓存bug
+				if (ur == 'pages/product/product') {
+					ur = '/pages/index/index'
+				}
+				
+				if (!userinfo.phone) {
+					uni.showModal({
+						title: '提示',
+						content: '请先绑定手机号',
+						showCancel: false,
+						success: res => {
+							if (res.confirm) {
+								uni.navigateTo({
+									url: '/pages/set/phone',
+								});
+							}
+						},
+					});
+				} else {
+					uni.switchTab({
+						url: ur,
+						fail(e) {
+							uni.navigateTo({
+								url: ur,
+								fail(e) {
+									uni.navigateTo({
+										url: '/pages/index/index',
+									});
+								}
+							});
+						}
+					});
+				}
+			},
+			//登录
+			async toLogin() {
+				let obj = this;
+				
+				if (obj.username == '') {
+					obj.$api.msg('请输入手机号');
+					return;
+				}
+				if (obj.passward == '') {
+					obj.$api.msg('请输入密码');
+					return;
+				}
+				if(!this.checked){
+					uni.showModal({
+						title: '提示',
+						content: '请先阅读同意《母婴界严选服务》《隐私条例》',
+						showCancel: false,
+					});
+					return;
+				}
+				obj.logining = true;
+				login({
+						account: obj.username,
+						password: obj.passward
+					})
+					.then(function(e) {
+						uni.setStorageSync('token', e.data.token);
+						obj.$store.commit('hasLogin', true);
+						getUserInfo({}).then(e => {
+							obj.login();
+							// 保存返回用户数据
+							obj.setUserInfo(e.data);
+							let ur = uni.getStorageSync('present') || '/pages/index/index';
+							//成功跳转首页
+							uni.reLaunch({
+								url: ur,
+								fail(e) {
+									uni.switchTab({
+										url: '/pages/index/index',
+									});
+								}
+							})
+						});
+					})
+					.catch(function(e) {
+						console.log(e);
+					});
+			},
+			//跳转注册页
+			register() {
+				uni.navigateTo({
+					url: `/pages/public/register`
+				});
+			},
+			// 后退
+			navBack() {
+				uni.navigateBack();
+			},
+			// 关闭更多弹窗
+			close() {
+				this.$refs.popup.close();
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+		background-color: #FFFFFF;
+		padding-top: 44px;
+	}
+
+	.container {
+		width: 100%;
+		height: 100%;
+		background-size: 100%;
+		padding-top: 50rpx;
+	}
+
+	.container_text {
+		text-align: center;
+
+		.logName {
+			font-weight: bold;
+			font-size: 36rpx;
+			margin: 30rpx 0 80rpx;
+		}
+
+		.banner-img {
+			width: 170rpx;
+			height: 170rpx;
+			margin: 0 auto;
+			border-radius: 20rpx;
+		}
+	}
+
+	.login_text {
+		margin: auto 50rpx;
+		position: relative;
+		background-color: #ffffff;
+		border-radius: 20rpx;
+
+		.login_input {
+			border-bottom: 1px solid #f0f0f0;
+			margin-bottom: 30rpx;
+			padding: 30rpx 0;
+			line-height: 1;
+
+			.login_img {
+				height: 35rpx;
+				width: 70rpx;
+				flex-shrink: 0;
+				font-size: 30rpx;
+				margin-right: 20rpx;
+				color: $font-base;
+			}
+
+			.uni-input {
+				text-align: left;
+				width: 100%;
+				font-size: 28rpx !important;
+			}
+
+			.login_name {
+				color: #333333;
+				flex-grow: 1;
+			}
+		}
+
+
+
+
+
+		.forget {
+			font-size: 28rpx;
+			width: 100%;
+			text-align: right;
+			color: #999999;
+		}
+
+		.uni-button-green {
+			color: #ffffff;
+			background-color: #5dbc7c;
+			margin: 40rpx 10rpx;
+			border-radius: 50rpx;
+			box-shadow: 0px 8px 10px 0px rgba(166, 203, 184, 0.75);
+		}
+
+		.uni-button-green-plain {
+			margin: 40rpx 10rpx;
+			border-radius: 50rpx;
+			color: $font-base;
+			background-color: $page-color-base;
+			border: none;
+		}
+
+		.uni-button {
+			height: 80rpx;
+			line-height: 80rpx;
+			font-size: 28rpx;
+			width: 100%;
+		}
+	}
+
+
+
+	.buttomBox {
+		border-radius: 20rpx;
+		margin: 0 $page-row-spacing;
+		margin-bottom: 30rpx;
+		color: $color-green;
+		background-color: #FFFFFF;
+		overflow: hidden;
+
+		.item {
+			line-height: 100rpx;
+			height: 100rpx;
+			text-align: center;
+			font-size: 32rpx;
+
+			&.qx {
+				font-weight: bold;
+			}
+		}
+
+		.border_b {
+			border-bottom: 1px solid $page-color-light;
+		}
+	}
+</style>

+ 260 - 0
pages/public/loginMethods.vue

@@ -0,0 +1,260 @@
+<template>
+	<view class="">
+		<view class="flex other">
+			<view class="fenge"></view>
+			<view class="qita">其他方式登录</view>
+			<view class="fenge"></view>
+		</view>
+		<!-- #ifndef APP-PLUS -->
+		<view class="weixin" @click="wecahtLogin">
+			<image src="../../static/icon/weichat.png" mode=""></image>
+		</view>
+		<view class="weixin_text" @click="wecahtLogin">微信登录</view>
+		<!-- #endif -->
+		<!-- #ifdef APP-PLUS -->
+		<block v-if="!is_ios">
+			<view class="weixin" @click="wecahtLogin('weixin')">
+				<image src="../../static/icon/weichat.png" mode="scaleToFill"></image>
+			</view>
+			<view class="weixin_text" @click="wecahtLogin('weixin')">微信登录</view>
+		</block>
+		<block v-else>
+			<view class="ios_login flex" @click="wecahtLogin('weixin')">
+				<image class="loginIcon" src="../../static/icon/weichat.png" mode=" scaleToFill"></image>
+				<text class="weixin_text">微信登录</text>
+			</view>
+			<view class="ios_login flex" @click="wecahtLogin('apple')">
+				<image class="loginIcon" src="../../static/icon/appleIcon.png" mode=" scaleToFill"></image>
+				<text class="weixin_text">Apple登录</text>
+			</view>
+		</block>
+		<!-- #endif -->
+	</view>
+</template>
+
+<script>
+	import {
+		mapMutations
+	} from 'vuex';
+	// #ifdef APP-PLUS
+	// loginWx,applelogin接口需要开发编写,基础项目中可能没有
+	import {
+		loginWx,
+		applelogin
+	} from '@/api/login.js';
+	// #endif
+	// #ifdef H5
+	import {
+		loginWinxin
+	} from '@/utils/wxAuthorized';
+	// #endif
+	import {
+		getUserInfo
+	} from '@/api/user.js';
+	export default {
+		data() {
+			return {
+				// #ifdef APP-PLUS
+				is_ios: false, //判断是否为ios手机
+				// is_apple_login: false, //是否有ios授权登录功能
+				// #endif
+			};
+		},
+		created() {
+			let obj = this;
+			// #ifdef APP-PLUS
+			let system = uni.getStorageSync('platform');
+			console.log(system);
+			// 判断是否为ios
+			if (system == 'ios') {
+				obj.is_ios = true;
+			}
+			// uni.getSystemInfo({
+			// 	success(e) {
+			// 		if (+e.system.split('.')[0] >= 13) {
+			// 			obj.is_apple_login = true;
+			// 		}
+			// 	}
+			// })
+			// #endif
+		},
+		
+		methods: {
+			...mapMutations('user', ['setUserInfo', 'login']),
+			wecahtLogin(type) {
+				let obj = this;
+				// #ifdef H5
+				let weichatBrowser = uni.getStorageSync('weichatBrowser');
+				if (weichatBrowser) {
+					loginWinxin();
+				}
+				// #endif
+				// #ifdef APP-PLUS
+				uni.login({
+					provider: type,
+					success(e) {
+						console.log('授权返回结果',e);
+						uni.getUserInfo({
+							provider: type,
+							success(es) {
+								console.log('用户信息',es);
+								if (type === 'weixin') {
+									loginWx(es.userInfo)
+										.then(e => {
+											console.log(e,'回调数据');
+											uni.setStorageSync('token', e.data.token);
+											getUserInfo({}).then(e => {
+												obj.login();
+												// 保存返回用户数据
+												obj.setUserInfo(e.data);
+												obj.$emit('onLogin',e.data)
+											}).catch((e)=>{
+												console.log('错误',e);
+											});
+										})
+										.catch(e => {
+											console.log(e);
+											uni.showModal({
+												content: JSON.stringify(e),
+												success() {},
+												fail() {}
+											});
+										});
+								}
+								if (type === 'apple') {
+									console.log(es.userInfo);
+									applelogin({
+											account: es.userInfo.openId,
+										})
+										.then(function(e) {
+											console.log(e, 'token')
+											uni.setStorageSync('token', e.data.token);
+											getUserInfo({}).then(e => {
+												obj.login();
+												// 保存返回用户数据
+												obj.setUserInfo(e.data);
+												//成功跳转首页
+												uni.switchTab({
+													url: '/pages/index/index'
+												});
+											});
+			
+										})
+										.catch(function(e) {
+											console.log(e);
+										});
+								}
+			
+							},
+							fail(es) {
+								console.log(es,'错误');
+								uni.showModal({
+									content: JSON.stringify(es),
+									success() {
+										// obj.login();
+										// // 保存返回用户数据
+										// obj.setUserInfo(e.data);
+										// //成功跳转首页
+										// uni.switchTab({
+										// 	url: '/pages/index/index'
+										// });
+									}
+								});
+							}
+						});
+					},
+					fail(e) {
+						console.log(e,'错误');
+						uni.showModal({
+							title: '提示',
+							content: JSON.stringify(e),
+							showCancel: false
+						});
+					}
+				});
+				// #endif
+			},
+		},
+	};
+</script>
+
+<style  lang="scss">
+	.other {
+		margin-top: 60rpx;
+	
+		.fenge {
+			width: 30%;
+			height: 2rpx;
+			background-color: #eeeeee;
+		}
+	
+		.qita {
+			font-size: 28rpx;
+			color: #999999;
+		}
+	}
+	.weixin {
+		width: 75rpx;
+		height: 75rpx;
+		margin: 25rpx auto;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+	
+	.weixin_text {
+		text-align: center;
+		font-size: 28rpx;
+		color: #999999;
+	}
+	/* #ifdef APP-PLUS */
+	
+	.ios_login {
+		width: 260rpx;
+		border-radius: 12rpx;
+		justify-content: center;
+		border: 1px solid #212121;
+		margin: 24rpx auto;
+		padding: 10rpx;
+		background-color: #FFFFFF;
+		.loginIcon {
+			width: 50rpx;
+			height: 50rpx;
+		}
+	
+		.weixin_text {
+			line-height: 1;
+			margin-left: 20rpx;
+			font-size: 24rpx !important;
+			color: #212121 !important;
+		}
+	}
+	
+	/* #endif */
+	/* #ifdef H5 */
+	.ios_login {
+		width: 350rpx;
+		border-radius: 12rpx;
+		justify-content: center;
+		border: 1px solid #212121;
+		margin: 24rpx auto;
+		padding: 15rpx;
+		background-color: #212121;
+		color: #ffffff;
+		font-size: 32rpx;
+	
+		.loginIcon {
+			font-size: 35rpx;
+			width: 35rpx;
+			height: 35rpx;
+		}
+	
+		.weixin_text {
+			line-height: 1;
+			margin-left: 20rpx;
+			color: #ffffff !important;
+		}
+	}
+	/* #endif */
+</style>

+ 336 - 0
pages/public/phoneLogin.vue

@@ -0,0 +1,336 @@
+<template>
+	<view class="container">
+		<view class="container_text">
+			<view>
+				<image class="banner-img" src="../../static/image/logo.png" mode="scaleToFill"></image>
+			</view>
+			<view class="logName">
+				母婴界严选
+			</view>
+		</view>
+		<view class="login_text">
+			<view class="login_input flex">
+				<view class="login_img">
+					+86
+				</view>
+				<view class="login_name"><input class="uni-input" v-model="phone" focus placeholder="请输入手机号" />
+				</view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img">
+					验证码
+				</view>
+
+				<view class="login_name flex">
+					<input class="uni-input width" v-model="code" focus placeholder="请输入验证码" />
+					<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
+				</view>
+			</view>
+			<view><button type="green" class="uni-button uni-button-green" @click="toLogin">立即登录</button></view>
+			<view><button type="green" class="uni-button uni-button-green-plain" plain="true" hover-class="none"
+					@click="$refs.popup.open()">更多</button></view>
+		</view>
+		<!-- #ifdef APP-PLUS -->
+		<!-- <loginMethods  @onLogin='loginGl'></loginMethods> -->
+		<!-- #endif -->
+		<agreement @checkedChange='changeChecked'></agreement>
+		<uni-popup ref="popup" type="bottom">
+			<view class="buttomBox">
+				<navigator url="/pages/public/login">
+					<view class="item borde-b">
+						账号登录
+					</view>
+				</navigator>
+				<navigator url="/pages/public/forget">
+					<view class="item borde-b">
+						忘记密码
+					</view>
+				</navigator>
+				<navigator url="/pages/public/register">
+					<view class="item">
+						注册
+					</view>
+				</navigator>
+			</view>
+			<view class="buttomBox" @click="close">
+				<view class="item qx">
+					取消
+				</view>
+			</view>
+		</uni-popup>
+
+	</view>
+</template>
+
+<script>
+	import {
+		mapMutations
+	} from 'vuex';
+	import {
+		verify,
+		loginMobile,
+		getUserInfo
+	} from '@/api/login.js';
+	// #ifdef APP-PLUS
+	// applelogin接口需要开发编写,基础项目中可能没有
+	import {
+		applelogin
+	} from '@/api/set.js';
+	// loginWx接口需要开发编写,基础项目中可能没有
+	import {
+		loginWx
+	} from '@/api/login.js';
+	// #endif
+	// #ifdef H5
+	import {
+		loginWinxin
+	} from '@/utils/wxAuthorized';
+	// #endif
+	import loginMethods from "./loginMethods.vue"
+	import agreement from "./agreement.vue"
+
+	export default {
+		data() {
+			return {
+				checked: false, //是否同意条款
+				phone: '',
+				code: '',
+				time: '', //保存倒计时对象
+				countDown: 0 //倒计时
+			};
+		},
+		components: {
+			loginMethods,
+			agreement
+		},
+		watch: {
+			// 监听倒计时
+			countDown(i) {
+				if (i == 0) {
+					clearInterval(this.time);
+				}
+			}
+		},
+		onLoad() {
+
+		},
+		methods: {
+			...mapMutations('user', ['setUserInfo', 'login']),
+			changeChecked(check) {
+				this.checked = check;
+			},
+			//登录
+			async toLogin() {
+				let obj = this;
+
+				if (obj.phone == '') {
+					obj.$api.msg('请输入电话号码');
+					return;
+				}
+				if (obj.phone.length!=11) {
+					obj.$api.msg('请输入正确的手机号');
+					return;
+				}
+				if (obj.code == '') {
+					obj.$api.msg('请输入验证码');
+					return;
+				}
+				if (!obj.checked) {
+					uni.showModal({
+						title: '提示',
+						content: '请先阅读同意《母婴界严选服务》《隐私条例》',
+						showCancel: false,
+					});
+					return;
+				}
+				loginMobile({
+					phone: obj.phone, //账号
+					captcha: obj.code
+				}).then(function(e) {
+					uni.setStorageSync('token', e.data.token);
+					getUserInfo({}).then(e => {
+						obj.login();
+						// 保存返回用户数据
+						obj.setUserInfo(e.data);
+						//成功跳转首页
+						uni.switchTab({
+							url: '/pages/index/index'
+						});
+					});
+				}).catch((e) => {
+					console.log(e);
+				});
+			},
+			//发送验证码
+			verification() {
+				let obj = this;
+				if (this.phone == '') {
+					this.$api.msg('请输入电话号码');
+					return;
+				}
+				if (this.phone.length < 11) {
+					this.$api.msg('请输入正确的手机号');
+					return;
+				}
+				// 判断是否在倒计时
+				if (obj.countDown > 0) {
+					return false;
+				} else {
+					obj.countDown = 60;
+					obj.time = setInterval(() => {
+						obj.countDown--;
+					}, 1000);
+					//调用验证码接口
+					verify({
+							phone: obj.phone,
+							type: 'login'
+						})
+						.then(({
+							data
+						}) => {})
+						.catch(err => {
+							console.log(err);
+						});
+				}
+			},
+			// 后退
+			navBack() {
+				uni.navigateBack();
+			},
+			// 关闭更多弹窗
+			close() {
+				this.$refs.popup.close();
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+		background-color: #FFFFFF;
+		padding-top: 44px;
+	}
+
+	.container {
+		width: 100%;
+		height: 100%;
+		background-size: 100%;
+		padding-top: 50rpx;
+	}
+
+	.container_text {
+		text-align: center;
+
+		.logName {
+			font-weight: bold;
+			font-size: 36rpx;
+			margin: 30rpx 0 80rpx;
+		}
+
+		.banner-img {
+			width: 170rpx;
+			height: 170rpx;
+			margin: 0 auto;
+			border-radius: 20rpx;
+		}
+	}
+
+	.login_text {
+		margin: auto 50rpx;
+		position: relative;
+		background-color: #ffffff;
+		border-radius: 20rpx;
+
+		.login_input {
+			border-bottom: 1px solid #f0f0f0;
+			margin-bottom: 30rpx;
+			padding: 30rpx 0;
+
+			.login_img {
+				height: 35rpx;
+				width: 100rpx;
+				flex-shrink: 0;
+				font-size: 30rpx;
+				text-align: center;
+				margin-right: 20rpx;
+				color: $font-base;
+			}
+
+			.uni-input {
+				text-align: left;
+				width: 100%;
+				font-size: 28rpx !important;
+			}
+
+			.login_name {
+				color: #333333;
+				flex-grow: 1;
+
+				.code {
+					color: #5dbc7c;
+					font-size: 23rpx;
+					border-left: 1px solid #eeeeee;
+					width: 150rpx;
+					flex-shrink: 0;
+					text-align: center;
+				}
+			}
+		}
+
+		.forget {
+			font-size: 28rpx;
+			width: 100%;
+			text-align: right;
+			color: #999999;
+		}
+
+		.uni-button-green {
+			color: #ffffff;
+			background-color: #5dbc7c;
+			margin: 40rpx 10rpx;
+			border-radius: 50rpx;
+			box-shadow: 0px 8px 10px 0px rgba(166, 203, 184, 0.75);
+		}
+
+		.uni-button-green-plain {
+			margin: 40rpx 10rpx;
+			border-radius: 50rpx;
+			color: $font-base;
+			background-color: $page-color-base;
+			border: none;
+		}
+
+		.uni-button {
+			height: 80rpx;
+			line-height: 80rpx;
+			font-size: 28rpx;
+			width: 100%;
+		}
+	}
+
+
+	.buttomBox {
+		border-radius: 20rpx;
+		margin: 0 $page-row-spacing;
+		margin-bottom: 30rpx;
+		color: $color-green;
+		background-color: #FFFFFF;
+		overflow: hidden;
+
+		.item {
+			line-height: 100rpx;
+			height: 100rpx;
+			text-align: center;
+			font-size: 32rpx;
+
+			&.qx {
+				font-weight: bold;
+			}
+		}
+
+		.border_b {
+			border-bottom: 1px solid $page-color-light;
+		}
+	}
+</style>

+ 160 - 0
pages/public/privacyAgreement.vue

@@ -0,0 +1,160 @@
+<template>
+	<view class="content">
+		<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>
+</script>
+
+<style lang="scss">
+	.content {
+		padding: $page-row-spacing;
+		line-height: 2;
+		font-size: $font-base;
+	}
+
+	.title {
+		font-size: $font-lg + 6rpx;
+		font-weight: bold;
+		text-align: center;
+	}
+
+	.lineSt {
+		text-indent: 2em;
+	}
+
+	.strongItem {
+		margin: 20rpx 0 ;
+		font-weight: bold;
+		font-size: $font-lg;
+	}
+</style>

+ 153 - 0
pages/public/redirect.vue

@@ -0,0 +1,153 @@
+<template>
+	<view>
+	</view>
+</template>
+<script>
+	import {
+		getUserInfo
+	} from '@/api/user.js';
+	import {
+		mapMutations,
+		mapState
+	} from 'vuex';
+	// #ifdef H5
+	import {
+		wechatAuth
+	} from '@/api/wx';
+	// #endif
+	// #ifdef MP-WEIXIN
+	import {
+		wechatMpAuth
+	} from '@/api/wx';
+	// #endif
+	export default {
+		computed: {
+			...mapState(['urlFile'])
+		},
+		onLoad(option) {
+			let obj = this;
+			// 判断是否需要保存定向地址
+			// #ifdef H5
+			this.loadH5()
+			// #endif
+			// #ifdef MP-WEIXIN
+			this.loadMp(option)
+			// #endif
+		},
+		methods: {
+			...mapMutations('user', ['login', 'setUserInfo', 'logout']),
+			// #ifdef H5
+			loadH5() {
+				let obj = this;
+				let url = window.location.href;
+				let code = url.match(/code=([0-9]|[a-z]|[A-Z])*/g)[0].replace('code=', '');
+				let spread = uni.getStorageSync('spread') || '';
+				wechatAuth({
+					code: code,
+					spread: spread,
+				}).then(({
+					data
+				}) => {
+					obj.wchatAuth(data);
+					// 修改当前页面
+					history.replaceState({ name: '首页' }, '首页', obj.urlFile+'/pages/index/index');
+				}).catch((e) => {
+					uni.showModal({
+						title: '错误',
+						content: JSON.stringify(e),
+						showCancel: false,
+					});
+				});;
+			},
+			// #endif
+			// #ifdef MP-WEIXIN
+			loadMp(option) {
+				let obj = this;
+				// 获取登录授权页数据
+				let user = obj.$api.prePage().userInfo;
+				// #ifndef MP
+				// 获取推广人id
+				let spread_spid = uni.getStorageSync('spread') || '';
+				// #endif
+				// #ifdef MP
+				// 小程序推广人
+				let spread_code = uni.getStorageSync('spread_code') || '';
+				// #endif
+				wechatMpAuth({
+					code: option.code,
+					iv: user.target.iv,
+					encryptedData: user.target.encryptedData,
+					// #ifndef MP
+					spread_spid: spread_spid,
+					// #endif
+					// #ifdef MP
+					spread_code: spread_code
+					// #endif
+				}).then(({
+					data
+				}) => {
+					obj.wchatAuth(data);
+				}).catch((e) => {
+					uni.showModal({
+						title: '错误',
+						content: JSON.stringify(e),
+						showCancel: false,
+					});
+				});
+			},
+			// #endif
+			wchatAuth(data) {
+				let obj = this;
+				// 保存token
+				uni.setStorageSync('token', data.token);
+				// 获取用户基础信息
+				getUserInfo({}).then(e => {
+					obj.login();
+					// 保存返回用户数据
+					obj.setUserInfo(e.data);
+					let ur = uni.getStorageSync('present') || '/pages/index/index';
+					// 用于处理缓存bug
+					if (ur == 'pages/product/product') {
+						ur = '/pages/index/index'
+					}
+
+					if (!e.data.phone) {
+						uni.showModal({
+							title: '提示',
+							content: '请先绑定手机号',
+							showCancel: false,
+							success: res => {
+								if (res.confirm) {
+									uni.navigateTo({
+										url: '/pages/set/phone',
+									});
+								}
+							},
+						});
+					} else {
+						uni.switchTab({
+							url: ur,
+							fail(e) {
+								uni.navigateTo({
+									url: ur,
+									fail(e) {
+										uni.navigateTo({
+											url: '/pages/index/index',
+										});
+									}
+								});
+							}
+						});
+					}
+				}).catch((e) => {
+					uni.showModal({
+						title: '错误',
+						content: JSON.stringify(e),
+						showCancel: false,
+					});
+				});;
+			}
+		}
+	};
+</script>
+<style></style>

+ 345 - 0
pages/public/register.vue

@@ -0,0 +1,345 @@
+<template>
+	<view class="container">
+		<view class="loginTitle"><text>注册母婴界严选</text></view>
+		<view class="login_text">
+			<view class="login_input flex">
+				<view class="login_img">
+					+86
+				</view>
+				<view class="login_name"><input class="uni-input" v-model="phone" focus placeholder="请输入手机号" /></view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img">
+					密码
+				</view>
+				<view class="login_name"><input class="uni-input" type="password" v-model="password" focus
+						placeholder="请输入密码" /></view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img">
+					重复密码
+				</view>
+				<view class="login_name"><input class="uni-input" type="password" v-model="repassword" focus
+						placeholder="请重复输入密码" /></view>
+			</view>
+			<view class="login_input flex" style="display: none;">
+				<view class="login_img">
+					邀请码
+				</view>
+				<view class="login_name"><input class="uni-input" type="text" v-model="invitation" focus
+						placeholder="请输入邀请码" /></view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img">
+					验证码
+				</view>
+				<view class="login_name flex">
+					<input class="uni-input width" v-model="code" focus placeholder="请输入验证码" />
+					<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
+				</view>
+			</view>
+			<view><button type="green" @click="register" class="uni-button uni-button-green">立即注册</button></view>
+			<view>
+				<navigator url="login">
+					<button class="uni-button uni-button-green-plain" type="green" plain="true"
+						hover-class="none">返回登录</button>
+				</navigator>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	import {
+		register,
+		verify
+	} from '@/api/login.js';
+	export default {
+		data() {
+			return {
+				phone: '', //用户
+				password: '', //密码
+				repassword: '',
+				invitation: '', //邀请码
+				code: '', //验证码
+				time: '', //保存倒计时对象
+				countDown: 0, //倒计时
+				navdom: false //注册后是否跳转到下载页
+			};
+		},
+		onLoad(option) {
+			// 判断是否有邀请人
+			if (option.spread) {
+				// 有邀请人时跳转到下载页
+				this.navdom = true;
+				uni.setStorageSync('spread', option.spread);
+			}
+			// 获取扫码邀请人id
+			this.invitation = uni.getStorageSync('spread') || '';
+		},
+		watch: {
+			// 监听倒计时
+			countDown(i) {
+				if (i == 0) {
+					clearInterval(this.time);
+				}
+			}
+		},
+		methods: {
+			// 注册
+			register() {
+				let obj = this;
+				if (obj.phone == '') {
+					obj.$api.msg('请输入电话号码');
+					return;
+				}
+				if (this.phone.length != 11) {
+					obj.$api.msg('请输入正确的手机号');
+					return;
+				}
+				if (obj.password == '') {
+					obj.$api.msg('请输入密码');
+					return;
+				}
+				if (obj.repassword == '') {
+					obj.$api.msg('请再次输入密码');
+					return;
+				}
+				if (obj.repassword != obj.password) {
+					obj.$api.msg('两次密码不正确');
+					return;
+				}
+				register({
+					account: obj.phone, //账号
+					captcha: obj.code, //验证码
+					password: obj.password, //密码
+					spread: obj.invitation //上级推广人
+				}).then(function(e) {
+					uni.showToast({
+						title: '注册成功',
+						duration: 2000,
+						position: 'top',
+						mask:true
+					});
+					if (obj.navdom) {
+						setTimeout(function() {
+							uni.navigateTo({
+								url: '/pages/public/domApp'
+							});
+						}, 1000)
+					} else {
+						setTimeout(function() {
+							uni.navigateTo({
+								url: '/pages/public/login'
+							});
+						}, 1000)
+					}
+				});
+				//调用注册接口,成功跳转登录页
+			},
+			//发送验证码
+			verification() {
+				let obj = this;
+				if (this.phone == '') {
+					this.$api.msg('请输入电话号码');
+					return;
+				}
+				if (this.phone.length < 11) {
+					this.$api.msg('请输入正确的手机号');
+					return;
+				}
+				// 判断是否在倒计时
+				if (obj.countDown > 0) {
+					return false;
+				} else {
+					obj.countDown = 60;
+					obj.time = setInterval(() => {
+						obj.countDown--;
+					}, 1000);
+					//调用验证码接口
+					verify({
+							phone: obj.phone,
+							type: 'register'
+						})
+						.then(({
+							data
+						}) => {})
+						.catch(err => {
+							console.log(err);
+						});
+				}
+			},
+			login() {
+				//返回登录
+				uni.navigateTo({
+					url: '/pages/public/login'
+				});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+	}
+
+	.container {
+		width: 100%;
+		height: 100%;
+		background-size: 100%;
+		background-color: #FFFFFF;
+	}
+
+	.container_text {
+		width: 100%;
+		height: 500rpx;
+		top: 0rpx;
+
+		.banner-img {
+			width: 100%;
+			height: 100%;
+		}
+	}
+
+	.login_text {
+		margin: auto 50rpx;
+		position: relative;
+		background-color: #ffffff;
+		border-radius: 20rpx;
+
+		.login_input {
+			border-bottom: 1px solid #f0f0f0;
+			margin-bottom: 30rpx;
+			padding: 30rpx 0;
+			line-height: 1;
+
+			.login_img {
+				height: 35rpx;
+				width: 150rpx;
+				flex-shrink: 0;
+				font-size: 30rpx;
+				text-align: center;
+				margin-right: 20rpx;
+				color: $font-base;
+			}
+
+			.uni-input {
+				text-align: left;
+				width: 100%;
+				font-size: 28rpx !important;
+			}
+
+			.login_name {
+				color: #333333;
+				flex-grow: 1;
+
+				.code {
+					color: #5dbc7c;
+					font-size: 23rpx;
+					border-left: 1px solid #eeeeee;
+					width: 150rpx;
+					flex-shrink: 0;
+					text-align: center;
+				}
+			}
+		}
+
+		.other {
+			margin-top: 60rpx;
+
+			.fenge {
+				width: 30%;
+				height: 2rpx;
+				background-color: #eeeeee;
+			}
+
+			.qita {
+				font-size: 28rpx;
+				color: #999999;
+			}
+		}
+
+		.weixin {
+			width: 75rpx;
+			height: 75rpx;
+			margin: 25rpx auto;
+		}
+
+		.weixin image {
+			width: 100%;
+			height: 100%;
+		}
+
+		.weixin_text {
+			text-align: center;
+			font-size: 28rpx;
+			color: #999999;
+		}
+
+		.forget {
+			font-size: 28rpx;
+			width: 100%;
+			text-align: right;
+			color: #999999;
+		}
+
+		.uni-button-green {
+			color: #ffffff;
+			background-color: #5dbc7c;
+			margin: 40rpx 10rpx;
+			border-radius: 50rpx;
+			box-shadow: 0px 8px 10px 0px rgba(166, 203, 184, 0.75);
+		}
+
+		.uni-button-green-plain {
+			margin: 40rpx 10rpx;
+			border-radius: 50rpx;
+			color: $font-base;
+			background-color: $page-color-base;
+			border: none;
+		}
+
+		.uni-button {
+			height: 80rpx;
+			line-height: 80rpx;
+			font-size: 28rpx;
+			width: 100%;
+		}
+	}
+
+	.loginTitle {
+		padding: 150rpx 0;
+		width: 100%;
+		text-align: left;
+		color: $font-base;
+		font-size: 48rpx;
+		margin: 0 50rpx;
+
+	}
+
+	.forget {
+		width: 100rpx;
+		font-size: 24rpx;
+		color: #ffffff;
+		margin: 0px auto;
+		border-bottom: 1px solid #ffffff;
+	}
+
+	.width {
+		width: 325rpx !important;
+	}
+
+	.code {
+		color: #5dbc7c;
+		font-size: 23rpx;
+		border-left: 1px solid #eeeeee;
+		width: 150rpx;
+		flex-shrink: 0;
+		text-align: center;
+	}
+
+	uni-button {
+		height: 80rpx !important;
+		line-height: 80rpx !important;
+	}
+</style>

+ 457 - 0
pages/public/userAgreement.vue

@@ -0,0 +1,457 @@
+<template>
+	<view class="container">
+		<view class="title-name">母婴界严选服务协议</view>
+		<view class="title right">更新日期: 2022年04月28日</view>
+		<view class="indent">
+			欢迎您使用“母婴界严选"小程序,在您使用“母婴界严选"小程序前,您须仔细阅读、理解《母婴界严选服务协议》(以下简称"本协议")内容。一经您选择接受该协议或使用“母婴界严选 "小程序,即视为您已经阅读、理解协议内容,并同意与母婴界严选就您使用母婴界严选向您提供的“母婴界严选”小程序服务缔结合约。您在使用母婴界严选过程中,应严格遵守本协议相应约定。如您没有阅读、理解并接受本协议所有条款,请您不要继续使用母婴界严选提供的服务,您使用"母婴界严选"小程序提供的服务,即视为您已阅读、理解并同意本协议的约束。</br>
+			
+		如果您未满14周岁,请在法定监护人的陪同下阅读本协议。
+		</view>
+		<view class="title name">一、协议的订立</view>
+		<view class="title">
+			1.1本协议,指本协议正文、母婴界严选的平台规则、其修订版本等所列明的所有规则性文件、通知或其他公示内容。上述内容一 经正式发布, 即为本协议不可分割的组成部分。如您不接受本协议的全部或部分条款,请您不要使用、登录“母婴界严选",并立即予以注销或卸载。
+		</view>
+		<view class="title">
+			 1.2本协议各条的标题仅为方便阅读而设,不影响本协议的含义或解释。
+		</view>
+		<view class="title name">二、协议的生效与变更</view>
+		<view class="title">
+			 2.1母婴界严选有权在必要时修改本协议条款并及时更新公示,经修订的协议将根据法律法规的规定提前在"母婴界严选"小程序及相关渠道中予以公示,公示期满后自动生效。您可以在“母婴界严选"小程序中随时查阅最新版本的协议条款。
+		</view>
+		<view class="title">
+			2.2本协议条款变更且生效后,如果您继续使用母婴界严选提供的服务,即视为您已接受并愿意遵守修改后的协议。如果您不接受修改后的协议,应停止使用并卸载"母婴界严选"小程序。
+		</view>
+		<view class="title name">三、定义和解释</view>
+		<view class="title">
+			 3.1母婴界严选:指由母婴界严选提供技术支持和服务,并负责运营的生活服务类手机微信小程序。随着母婴界严选服务范围或服务项目的变更,母婴界严选可能在平台规则或公告中对母婴界严选的相关调整予以声明。
+		</view>
+		<view class="title">
+			  3.2平台规则:指在母婴界严选上已经发布或将来可能发布的各种规范性文件,包括但不限于细则、规范、政策、通知、公告等规范性文件,所有规范性文件为协议不可分割的一部分,与协议正文具有同等法律效力。
+		</view>
+		<view class="title">
+			 3.3平台服务:指母婴界严选依托母婴界严选小程序向用户提供的网络空间、技术支持、相关的软件服务、系统维护,以及同意向用户提供的各项附属功能、增值服务等,具体服务内容及功能以“母婴界严选"小程序显示功能为准。
+		</view>
+		<view class="title">
+			 3.4用户:指使用“母婴界严选"小程序的自然人、法人或其他组织,本协议中又称“您"。用户首次注册成功即为新用户。
+		</view>
+		<view class="title">
+			 3.5商品:系指母婴界严选通过软件或其他渠道,为用户提供的可供选购的商品(含服务)。
+		</view>
+		<view class="title">
+			  3.6账号:指用户所拥有的经母婴界严选认可,可以登录“母婴界严选"小程序的一一个合法获得并持有的服务账号。该账号形式可能是在母婴界严选注册所获得的账号、手机号、电子邮箱等母婴界严选支持的账号形式。该账户是您在使用母婴界严选服务时的重要身份标识,您应当妥善保管。
+		</view>
+		<view class="title">
+			   3.7互联网支付服务:指具有互联网支付合法资质的第三方支付机构为用户完成交易、转移资金提供的支付服务,详情见该第三方支付机构通过用户与其所签订的约定其所提供支付服务的协议、公司网站、电子邮件或其他形式所公布的相关规则及说明。
+		</view>
+		<view class="title">
+			3.8关联公司:本协议所称一方的“关联公司”是指由一方直接控制或间接控制;或直接或间接控制一方;或与一方共同控制同一家公司或能对其施加重大影响;或与一方受同一家公司直接或间接控制的公司。包括但不限于一方的母公司、子公司;与-方受同一母公司控制的子公司; 一方的合营企业、联营企业等。“控制”是指直接或间接地拥有影响所提及公司管理的能力,无论是通过所有权、有投票权的股份、合同或其他被人民法院认定的方式。
+		</view>
+		<view class="title name">四、帐户注册和注销</view>
+		<view class="title">4.1账户注册</view>
+		<view class="title soujin">
+			4.1.1用户使用“母婴界严选"小程序应具备完全民事行为能力,若用户不具备前述资格,用户的监护人应承担一切后果,且母婴界严选有权注销或永久冻结该用户账号,“				母婴界严选”有权就由此造成任何损失主张赔偿。
+		</view>
+		<view class="title soujin">
+			4.1.2用户使用“母婴界严选”小程序,必须拥有经母婴界严选认可的、可登录“母婴界严选"小程序的、一个合法获得并持有的服务账号;用户对前述账号的申请、使用等行为应符合本协议及注册该账号时与相应的第三方账号服务提供者所签订的注册协议、服务协议以及其他有关规则。用户应自行确保上述账号及其密码的安全,并对利用上述账号及其密码所进行的一切行为负完全责任。
+		</view>
+		<view class="title soujin">
+		4.1.3用户标识或账户中设置和使用的昵称、头像等不得违反国家法律法规、公序良俗,否则壹佰米可注销您的账号。
+		</view>
+		<view class="title soujin">
+		 4.1.4原则.上您只能注册一个账号,严禁同- -用户注册多个账号,若有违反,“母婴界严选”有权取消交易并停止向该用户提供服务,用户因此获取的利益须退还。虽有多个注册账号但经平台判断,存在相同注册电话号码、收货电话号码、支付账号、应用设备、2人次以上收货地址等情况的,将视为同一用户,平台将不会发放相关优惠福利等,如已发放,平台有权做无效处理。
+		</view>
+		<view class="title">4.2账户注销</view>
+		<view class="title soujin">
+		 4.2.1您可自行按照页面操作提示注销自有账户,提交账户注销申请前,请务必确认该账户无未完结订单及未消费资产等权益,否则,母婴界严选将视为您对该权益做出放弃处分,账户内未消费余额、卡券等将做清零处理。
+		</view>
+		<view class="title soujin">
+		4.2.2账户注销后,母婴界严选将删除您的个人信息或对其进行匿名化处理。
+		</view>
+		<view class="title soujin">
+		 4.2.3若您注销账户后使用相同手机号码再次注册,系统将不再判定您为新用户,故将无法享受相应新用户权益。
+		</view>
+		<view class="title">  4.3您理解并同意,若您的行为违反有关法律、本协议相关规定或滥用用户权利的,您的用户资格和账号可能被注销、暂时冻结或永久冻结;使母婴界严选遭受任何损失、受到任何第三方的索赔、或任何行政管理部门的处罚的,用户应对母婴界严选提供补偿,包括合理的维权费用。</view>
+		<view class="title">4.4您理解并同意,您下载母婴界严选小程序不视为母婴界严选.必须按照您的要求出售商品,诗词啊有权按照商品库存状况及本协议约定等因素评估是否接受您的购买要约。</view>
+		<view class="title">
+			 4.5您理解并同意,诗词啊有权基于运营情况设定或调整软件界面、功能等,如您在使用过程中需要操作指引,可通过客服服务获取帮助。
+		</view>
+		<view class="title">
+		 4.6您理解并同意,母婴界严选有权基于您已有的消费评价、投诉等实际行为判断您是否不认可本协议约定内容、平台公示规则等展现的母婴界严选的服务内容和方式,如确认属实,母婴界严选有权选择提示您或终止对您提供服务。
+		</view>
+		<view class="title name">五、用户信息收集、使用和保护</view>
+		<view class="title">
+		  5.1用户在使用“母婴界严选"小程序时需要根据要求披露- -些信息,包括但不限于您选择接受服务的社区地址、联系电话、收货地址等,及根据第三方支付机构的要求为享受互联网支付服务而需要提供的- -些必要信息,这些信息包括但不限于:真实姓名或名称、联系地址、邮箱和联系电话等。您应保证这些信息在提供时是真实、准确、有效且完整的,且应及时根据实际情况或者母婴界严选的要求更新这些信息。由于信息披露不完整、不真实.或者信息更新不及时导致您在享受平台服务时受到限制或损失的,应由您独立承担责任。除了必要信息外,您也有权自行决定披露一些其他信息。
+		</view>
+		<view class="title">
+		 5.2您授权“母婴界严选"小程序收集您的用户信息,这些信息可能包括注册信息或企业主体资质信息、产品信息和交易信息以及您的地理位置等,“母婴界严选"小虎层序对用户信息的收集将遵循相关法律的规定。您同时授权“母婴界严选”小程序和母婴界严选全国通用(在法律许可范围内)的、免费的许可使用权利(并有权对该权利再授权), 使“母婴界严选”小程序和母婴界严选有权(全部或部分地)使用、复制、修订、改写、发布、翻译、发布、执行和展示您所公示于母婴界严选的各类信息(不包括您的个人身份信息)或制作其派生作品,和/或以现在已知或日后开发的任何形式、媒体或技术,将上述您所公示的各类信息纳入其他作品内。
+		</view>
+		<view class="title">
+		5.3母婴界严选将采取适当措施,根据相关法律的要求,对用户信息提供充分的信息安全保障。用户应妥善保管、使用其用户信息,包括账号号码及其验证码、与交易有关的支付账号及密码、联系方式、地址等信息,因上述信息泄露而导致您的任何损失,包括使用母婴界严选的任何第三方应用软件造成信息泄露而导致您的任何损失,由您独立承担责任。如您泄露上述任何信息,您还应及时将泄露的情况以有效方式立即通知母婴界严选,以便母婴界严选在合理时间内采取措施防止损失继续扩大,但母婴界严选对采取措施前已经产生的后果不承担任何责任。
+		</view>
+		<view class="title">
+		 5.4母婴界严选不对外公开或向任何第三方提供您的个人信息,但存在下列情形之一的除外:
+		</view>
+		<view class="title soujin">
+		5.4.1公开或提供相关信息之前获得您许可的;
+		</view>
+		<view class="title soujin">
+		5.4.2根据法律或政策的规定而公开或提供的;
+		</view>
+		<view class="title soujin">
+		  5.4.3只有公开或提供您的个人信息,才能提供您所需的商品的;
+		</view>
+		<view class="title soujin">
+		  5.4.4只有公开或提供您的个人信息,才能提供您需要的母婴界严选服务的;
+		</view>
+		<view class="title soujin">
+		  5.4.5根据国家权力机关要求公开或提供的;
+		</view>
+		<view class="title soujin">
+		  5. 4.6根据本协议其他条款约定而公开或提供的。
+		</view>
+		<view class="title">
+		  5.5为了向您提供更优质的母婴界严选服务,提升购物体验,您同意母婴界严选可将您的个人信息提供给母婴界严选的关联公司。
+		</view>
+		<view class="title">
+		  5.6您理解并认同,在平台方发生并购等情况时,平台方可能会向第三方出售或转让母婴界严选。在该等交易中,作为母婴界严选不可分割的一部分,您的用户信息也可能将被转让给该第三方,以使该第三方可以继续为您提供服务。
+		</view>
+		<view class="title">
+		 5.7关于母婴界严选收集、使用、共享您个人信息的详细情况,您可以查看《母婴界严选隐私权政策》。
+		</view>
+		<view class="title name">十、用户行为规范</view>
+		<view class="title">
+		6.1遵守法律法规、社会公德及本协议
+		</view>
+		<view class="title soujin">
+		 您在使用“母婴界严选”服务中的所有行为应遵守国家法律、法规、规章、规范性文件等规定(如卖家从海外进口商品的,其还应遵守国家海关、检验检疫、外汇管理等进出口相关法律规定)及本协议的规定和要求,不违背社会公德,不损害国家或者任何第三人的任何合法权益。否则,产生的一切法律后果均由您独立承担,并应确保母婴界严选免于承担任何责任。
+		</view>
+		<view class="title">
+		6.2您应避免因使用母婴界严选服务而使母婴界严选卷入政治和公共事件,否则母婴界严选有权暂停或终止对您的服务。
+		</view>
+		<view class="title">
+		6.3遵守规则及相应流程要求
+		</view>
+		<view class="title soujin">
+		 您使用“母婴界严选"小程序的所有行为应遵守母婴界严选所实时公布的平台规则;如您需要开通、申请或使用"母婴界严选”小程序所公示提供的不同服务或为取得该种服务的相应资格(具体以公示的规则为准), 您应依据"母婴界严选"小程序所公示的相应具体规则及流程要求完成相应资格的认证与申请,提供开通相应服务所必须的相应资料和信息并保证该等信息的真实和准确;您应与壹佰米签订协议(如需要),并严格履行该等协议;您使用该等服务的具体内容以相应协议约定及平台规则规定为准。
+		</view>
+		<view class="title">
+		6.4您在使用“母婴界严选"小程序的所有行为应遵守诚信原则,不得实施以下任一行为:
+		</view>
+		<view class="title soujin">
+		6.4.2通过发送病毒、木马等行为攻击其他用户的账号或机器;
+		</view>
+		<view class="title soujin">
+		 6.4.1发送钓鱼链接给其他用户;
+		</view>
+		<view class="title soujin">
+		  6.4.3冒充"母婴界严选”工作人员欺骗其他用户;
+		</view>
+		<view class="title soujin">
+		 6.4. 5违反银行卡管理规则实施套现;
+		</view>
+		<view class="title soujin">
+		6.4.6通过留言、评价等手段发送违规或垃圾信息或有诋毁"母婴界严选”之行为;
+		</view>
+		<view class="title soujin">
+		6.4.7谋取、协助谋取不正当利益;
+		</view>
+		<view class="title soujin">
+		6.4.8恶意刷券行为;
+		</view>
+		<view class="title soujin">
+		6.4.9平台规则规定的其他不当行为;
+		</view>
+		<view class="title soujin">
+		 6.4.10其他有损平台正常运行或有损壹佰米权益的行为。
+		</view>
+		<view class="title">
+		 6.5禁止不当评价
+		</view>
+		<view class="title soujin">
+		 您不得以虚构或歪曲事实的方式不当评价其他用户,不得以不正当手段,包括虚假交易、互换好评等手段提高或降低自身或其他用户信用度。
+		</view>
+		<view class="title soujin">
+		您不得发布国家法律法规、本协议及其平台规则所禁止发布的商品信息,也不得发布任何涉嫌侵犯他人知识产权等合法权益的商品信息。
+		</view>
+		<view class="title">
+		 6.7您不得以任何方式危害“母婴界严选”的正常交易,包括不得实施如下任一行为:
+		</view>
+		<view class="title soujin">
+		 6.7.1 以任何机器人软件、蜘蛛软件、爬虫软件、刷屏软件等非母婴界严选认可的方式访问或登录"母婴界严选"小程序;
+		</view>
+		<view class="title soujin">
+		6.7.2通过任何方式对“母婴界严选小程序造成或可能造成不合理或不合比例的重大负荷;
+		</view>
+		<view class="title soujin">
+		 6.7.3通过任何方式干扰或试图干扰“母婴界严选"小程序的正常运行。
+		</view>
+		<view class="title">
+		6.7您不得以任何方式危害“母婴界严选”的正常交易,包括不得实施如下任一行为:
+		</view>
+		<view class="title">
+		  6.8同意接收广告、营销信息
+		</view>
+		<view class="title soujin">
+		 您同意接收来自母婴界严选的信息,包括但不限于营销活动信息、商品交易信息、促销信息等。为使您及时了解丰富的商品信息,提升服务体验,母婴界严选或其合作的第三方可以在法律法规允许的范围内,通过短信、电话、邮件等各种方式向您提供前述信息。
+		</view>
+		<view class="title soujin">
+		6.8.1您应自行承担因交易产生的相关费用,并依法纳税。您应自行配备上网的所需设备,包括个人手机、调制解调器或其他必备上网装置,并自行负担个人上网所支付的与此服务有关的电话费用、网络费用。
+		</view>
+		<view class="title soujin">
+		6.8.2母婴界严选的服务大部分是免费提供的,但可能会有部分服务是以收费方式提供的,如您使用收费服务,请遵守母婴界严选服务相关的规则。母婴界严选可能根据实际需要对收费服务的收费标准、方式进行修改,母婴界严选也可能会对部分免费服务开始收费。前述修改或开始收费前,母婴界严选将在相应服务页面进行通知或公告。如果您不同意上述修改或收费内容,则应立即停止使用该服务。
+		</view>
+		<view class="title">
+		6.9享受母婴界严选服务
+		</view>
+		<view class="title soujin">
+		  您享受母婴界严选服务时,应遵守法律法规及本协议约定,该服务内容可能包括在母婴界严选上发布、浏览、查询商品信息,进行商品交易,发表评价等,具体以“母婴界严选”提供的为准。
+		</view>
+		<view class="title">
+		6.10您有责任自行备份存储在使用母婴界严选服务中产生的数据和信息。
+		</view>
+		<view class="title name">十一、母婴界严选的权利和义务</view>
+		<view class="title">
+		7.1母婴界严选有义务在现有技术水平条件下,努力使整个母婴界严选正常运行,尽力避免母婴界严选服务中断或将中断时间限制在最短时间内,以保证用户正常使用服务。
+		</view>
+		<view class="title">
+		7.2用户已充分知悉和理解,因网上交易平台的特殊性,母婴界严选没有义务对所有用户使用母婴界严选服务的过程及行为进行事前及实时审查。但用户发生以下情形之一的,母婴界严选可以普通、非专业人员的知识水平标准或根据自己掌握的信息进行独立判断,母婴界严选有权采取包括但不限于限制用户登录、要求用户提供有关资料、发出警告通知、删除相关信息、中止或终止向用户提供母婴界严选服务、以网络公告等形式公布用户违法违约行为或依据平台规则对于违约用户进行的其他违规处理:
+		</view>
+		<view class="title soujin">
+		7.2.1 用户违反国家法律、法规、规章及规范性文件的;
+		</view>
+		<view class="title soujin">
+		  7.2.2用户违反本协议或任何平台规则的;
+		</view>
+		<view class="title soujin">
+		7.2.3用户侵犯第三方合法权益的;
+		</view>
+		<view class="title soujin">
+		7.2. 4恶意获取用户福利的。
+		</view>
+		<view class="title">
+		7.3用户不得发布下列任何信息,否则,母婴界严选可在不通知用户的情况下对其采取删除、屏蔽、断开链接或依据平台规则对于违约用户进行其他的违规处理:
+		</view>
+		<view class="title soujin">
+		7.3.1恶意欺诈信息;
+		</view>
+		<view class="title soujin">
+		 7.3.2与商品交易无关的信息;
+		</view>
+		<view class="title soujin">
+		7.3.3不以商品交易为目的的信息;
+		</view>
+		<view class="title soujin">
+		7.3.4存在恶意评价信息;
+		</view>
+		<view class="title soujin">
+		7.3.5试图或已经扰乱正常交易秩序的信息;
+		</view>
+		<view class="title soujin">
+		7.3.6违反国家法律、危害国家安全统一、社会稳定、公序良俗,侮辱、诽谤、淫秽、暴力的,以及任何违反国家法律法规的信息;
+		</view>
+		<view class="title soujin">
+		7.3.7侵害他人知识产权、商业秘密等合法权益的信息;
+		</view>
+		<view class="title">
+		 7.3.8虚构事实、误导、欺骗他人的信息;
+		</view>
+		<view class="title">
+		7.3.9发布、传送、传播广告信息及垃圾信息。
+		</view>
+		<view class="title">
+		 7.4用户知悉并同意,当国家行政、司法机关主动依职权或者根据他人的投诉调查用户在母婴界严选上的相关行为时,母婴界严选有权予以配合,并将所掌握的信息提供给上述国家机关。
+		</view>
+		<view class="title">
+		7.5用户知悉并同意,用户不得利用母婴界严选服务实施侵犯他人知识产权及其他合法权益的行为,如母婴界严选接到第三方投诉称用户侵权的,为防止侵权行为的继续扩大和及时解决纠纷,母婴界严选除依本协议规定采取措施外,母婴界严选还可以将用户的相关信息提供给投诉人。
+		</view>
+		<view class="title">
+		7.6对违反法律法规或本协议条款及其他严重影响平台运营效率和秩序的行为,母婴界严选有权随时终止对该用户提供服务,同时母婴界严选有权对新账户注册申请进行评估,如确认为同一用户的,有权对该账户注册申请不予通过。
+		</view>
+		<view class="title name">八、特别授权</view>
+		<view class="title">
+		   8.1您完全理解并不可撤销地授权母婴界严选或母婴界严选授权的第三方(如有),根据本协议及平台规则的规定,处理您在母婴界严选上发生的所有交易及交易纠纷。您同意母婴界严选或母婴界严选菜授权的第三方(如有)对您在母婴界严选上的行为的判断和相应处理决定对您具有约束力。
+		</view>
+		<view class="title">
+		   8.2母婴界严选有权以任何方式通知第三方支付机构及母婴界严选的任何关联公司,针对您违反本协议或平台规则的行为,对您的权益采取限制措施或给予相应违规处理,包括但不限于通知第三方支付机构将您支付账号中的款项支付给母婴界严选指定的用户或第三方,要求第三方支付机构和母婴界严选的关联公司中止、终止对您提供服务,并对您提供母婴界严选服务的目的而收集、使用、存储您的用户信息。
+		</view>
+		<view class="title name">九、责任限制</view>
+		<view class="title">
+		9.1您理解并同意,母婴界严选会在现有技术水平和条件下尽最大努力向您提供服务,确保服务的连贯性和安全性;但母婴界严选不能随时预见和防范法律、技术以及其他风险,包括但不限于不可抗力,大规模的病毒、木马和黑客攻击,系统不稳定,第三方服务瑕疵,政府管制等原因可能导致的服务中断、数据丢失以及其他的损失和风险。
+		</view>
+		<view class="title">
+		  9.2您同意,对母婴界严选上出现的网络链接信息,您应审慎判断其真实性和可靠性,除法律明确规定外,您应对依该链接信息进行的交易负责。
+		</view>
+		<view class="title">
+		 9.3用户理解并同意,在使用母婴界严选服务的过程中,可能会遇到不可抗力等风险因素使母婴界严选服务发生中断。不可抗力是指不能预见、不能克服并不能避免且对一方或双方造成重大影响的客观事件,包括但不限于自.然灾害如洪水、地震、瘟疫流行和风暴等以及社会事件如战争、动乱、政府行为等。出现上述情况时,母婴界严选将努力在第一时间与相关单位配合,及时进行修复,但是由此给用户造成的损失,母婴界严选将在法律允许的范围内免责。
+		</view>
+		<view class="title">
+		9.4在法律允许的范围内,母婴界严选对以下情形之一导致的服务中断或受阻不承担责任:
+		</view>
+		<view class="title soujin">
+		   9.4.1受到计算机病毒、木马或其他恶意程序、黑客攻击的破坏;
+		</view>
+		<view class="title soujin">
+		  9.4.2用户或母婴界严选的软件、系统、硬件和通信线路出现故障;
+		</view>
+		<view class="title soujin">
+		 9.4.3用户操作不当;
+		</view>
+		<view class="title soujin">
+		9.4.4用户通过非母婴界严选授权的方式使用服务;
+		</view>
+		<view class="title soujin">
+		 9.4.5其他母婴界严选无法控制或合理预见的情形。
+		</view>
+		<view class="title">
+		 9.5母婴界严选依据本协议约定获得处理违法违规内容的权利,该权利不构成母婴界严选的义务或承诺,母婴界严选不能保证及时发现违法行为或进行相应处理。
+		</view>
+		<view class="title">
+		  9.6您理解并同意,母婴界严选将为您提供最快捷的商品配送服务,但鉴于天气、交通等非主观因素影响可能导致配送服务迟延,母婴界严选将视情况为您提供一定补偿,补偿形式为积分补偿,补偿标准为超过用户选择的产品配送截止时间十分钟以上(含10分钟) 的,母婴界严选将为您提供300积分的补偿,补偿积分将于产品送达后3个工作日内到账。截至2014年2月10日, 尚未升级至母婴界严选8.10版本的用户,产品超出配送截止时间十分钟以上(含10分钟) 送达的,母婴界严选将为您提供价值3元的优惠券补偿,优惠券将于产品送达后3个工作日内到账。
+		</view>
+		<view class="title soujin">
+		  母婴界严选保留修改补偿形式、额度及补偿使用方式的权利。.上述补偿任何情况下不视为母婴界严选所负有的法律义务。
+		</view>
+		<view class="title name">十、服务中止和终止</view>
+		<view class="title">
+		   10.1本协议在下述情形下终止:
+		</view>
+		<view class="title soujin">
+		 10.1.1协议方签署新协议代替本协议的;
+		</view>
+		<view class="title soujin">
+		  10.1.2通知终止:除本协议另有约定外,缔约协议方中任一-方 提前通知对方终止本协议。
+		</view>
+		<view class="title">
+		  10.2如发生下列任何一-种情形,母婴界严选有权不经通知而中断、中止或终止向用户提供的服务,且不向该用户承担任何责任:
+		</view>
+		<view class="title soujin">
+		  10.2.1用户未按本协议提供真实信息;
+		</view>
+		<view class="title soujin">
+		   10.2.2用户违反相关法律法规或本协议的规定;
+		</view>
+		<view class="title soujin">
+		 10.2.3按照法律规定或主管部门的要求;
+		</view>
+		<view class="title soujin">
+		    10.2. 4用户侵犯其他第三方合法权益的;
+		</view>
+		<view class="title soujin">
+		   10.2.5用户对母婴界严选工作人员有人身攻击、侮辱行为的;
+		</view>
+		<view class="title">
+		 10.2.6出于安全的原因或其他必要的情形。
+		</view>
+		<view class="title">
+		   10.3您同意,即便在本协议终止及您的服务被终止后,母婴界严选仍有权:
+		</view>
+		<view class="title soujin">
+		  10.3.1在法律规定的范围内,继续保存并使用您的用户信息;
+		</view>
+		<view class="title soujin">
+		   10.3.2继续向您主张您在使用母婴界严选服务期间因违反法律法规、本协议及平台规则而应承担的责任。
+		</view>
+		<view class="title name">十一、本服务软件形式</view>
+		<view class="title">
+		 11.1母婴界严选可能为不同的终端设备开发不同的软件版本,您应当根据实际需要选择下载合适的版本进行安装。
+		</view>
+		<view class="title">
+		  11.2如果您从未经合法授权的第三方获取本软件或与本软件名称相同的安装程序,母婴界严选将无法保证该软件能否正常使用,并对因此给您造成的任何损失不予负责。
+		</view>
+		<view class="title">
+		 11.3为了增进用户体验、完善服务内容,母婴界严选将不时提供软件更新服务(该更新可能会采取软件替换、修改、功能强化、版本升级等形式)。为了改善用户体验,保证服务的安全性和功能的一致性,母婴界严选有权对软件进行更新或者对软件的部分功能效果进行改变或限制。
+		</view>
+		<view class="title">
+		 11.4软件新版本发布后,旧版软件可能无法使用。母婴界严选不保证旧版软件继续可用及相应的客户服务,请您随时核对并下载最新版本。
+		</view>
+		<view class="title">
+		   11.5除非法律允许或母婴界严选书面许可,您不得从事下列行为:
+		</view>
+		<view class="title soujin">
+		   11.5.1删除软件及其副本.上关于著作权的信息;
+		</view>
+		<view class="title soujin">
+		   11.5.2对软件进行反向工程、反向汇编、反向编译或者以其他方式尝试发现软件的源代码;
+		</view>
+		<view class="title soujin">
+		  11.5.3对母婴界严选或其关联公司拥有知识产权的内容进行使用、出租、出借、复制、修改、链接、转载、汇编、发表、出版、建立镜像站点等;
+		</view>
+		<view class="title soujin">
+		  11.5.4对软件或者软件运行过程中释放到任何终端内存中的数据、软件运行过程中客户端与服务器端的交互数据、软件运行过程中客户端与服务器端的交互数据,以及软件运行所必须的系统数据,进行复制、修改、增加、删除、挂件运行或创作任何非衍生作品,形式包括但不限于使用插件、外挂或非经合法授权的第三方工具/服务接入软件和相关系统。
+		</view>
+		<view class="title soujin">
+		11.5.5修改或伪造软件返行中的指令、数据,増加、刪減、变动软件的功能或送行效果,或者将用于上述用途的软件、方法进行运营或向公众侍播,无企上述行カ是是否为商业目的;
+		</view>
+		<view class="title soujin">
+		 11.5.6通过非母婴界严选开发、授叔的第三方软件、插件、外挂、系统,使用母婴界严选服务,或制作、友布、侍播非母婴界严选开发、授枚的第三方软件、插件、外挂、系统;
+		</view>
+		<view class="title soujin">
+		  11.5.7其他母婴界严选明示授权的行为。
+		</view>
+		<view class="title name">十二、知识产权</view>
+		<view class="title">
+		  12.1母婴界严选在提供母婴界严选服务中提供的信息内容,包括但不限于网页、文字、图片、音频、视频、图表等的知识产权均归母婴界严选所有,用户在使用母婴界严选服务中所产生的内容的知识产权归用户或相关权利人所有。
+		</view>
+		<view class="title">
+		   12.2除另有特别声明外,母婴界严选提供母婴界严选服务时所依托软件的著作权、专利权及其他知识产权均归母婴界严选关联公司所有。
+		</view>
+		<view class="title red">
+		   12.3母婴界严选在提供母婴界严选服务中所使用的“母婴界严选"、“母婴界严选代"、“母婴界严选代”等商业标识,其著作权或商标权归母婴界严选公司所有。
+		</view>
+		<view class="title">
+		    12.4如您通过母婴界严选推出的客户端软件使用母婴界严选服务,母婴界严选给予您一项个人的、不可转让、非独占及非排他性的许可,您只能为正当使用母婴界严选服务之目的使用该权利,不得将其用作任何目的,也不得随意复制、修改、编译或以任何其他方式处置这些权利。
+		</view>
+		<view class="title name">十三、隐私政策</view>
+		<view class="title soujin">
+		    保护用户个人信息及隐私是母婴界严选的一项基本原则。母婴界严选严格保护您的个人信息安全。母婴界严选使用各种制度、安全技术和程序等措施来保护您的个人信息不被未经授权的访问、使用或泄漏。除本协议有特殊约定,关于用户隐私保护政策详见《母婴界严选隐私权政策》。
+		</view>
+		<view class="title name">十四、管辖与法律适用</view>
+		<view class="title">
+      14.1本协议的成立、生效、履行、解释及纠纷解决,适用中华人民共和国大陆地区法律(不包括冲突法)。
+		</view>
+		<view class="title">
+		14.2若您和母婴界严选之间因本协议发生任何纠纷或争议,首先应友好协商解决;协商不成的,您和母婴界严选均同意将纠纷或争议提交至本协议签订地有管辖权的人民法院管辖。
+		</view>
+		<view class="title">
+		14.3本协议条款无论因何种原因部分无效,其余条款仍有效,对各方具有约束力。
+		</view>
+	</view>
+</template>
+
+<script></script>
+
+<style>
+page,
+.container {
+	width: 95%;
+	height: 100%;
+	background: #ffffff;
+	font-size: 26rpx;
+	margin: 25rpx auto;
+}
+.indent {
+	text-indent: 30px;
+}
+.title {
+	margin: 25rpx 0rpx;
+}
+.title-name{
+	text-align: center;
+	font-size: 45rpx;
+	font-weight: bold;
+	padding-bottom: 25rpx;
+}
+.right{
+	text-align: right;
+}
+.name {
+	font-size: 28rpx;
+	font-weight: bold;
+}
+.soujin{
+	padding-left: 35rpx;
+}
+.red{
+	color: #FF1A27 !important;
+}
+</style>

+ 68 - 0
pages/public/workwork.vue

@@ -0,0 +1,68 @@
+<template>
+	<view class="content">
+		<view class=" " @click="openPhone">
+			母婴界严选
+		</view>
+		<view class="margin-t-10">
+			联系地址:浙江,台州,路桥区 央钿大厦20楼
+		</view>
+		<view class="margin-t-10" @click="openPhone">
+			客服热线:<text>400-699-0899</text>
+		</view>
+		<view @click="openWWW" class="margin-t-10">
+			公司网址:<text>www.guaiyouyou.com</text>	
+		</view>
+		<view class="margin-t-10">
+			<text>协议条例:</text>		
+			<text class="xy" @click="navTo('/pages/public/privacyAgreement')">《隐私协议》</text>		
+			<text class="xy" @click="navTo('/pages/public/userAgreement')">《用户协议》</text>		
+		</view>
+		<!-- <view class="text margin-t-30">
+			母婴界严选是由浙江绿津智能科技有限公司打造的新一代智能电动车品牌,电慧安是一家集智能设备制造、软件开发、销售贸易、物带动互、社会服务为一体的高科技企业,公司以便、惠、安为核心发展理念,以做物联网产业的推动者,互联网行业的服务者为立企初衷。 公司通过不断创新商业模式,打造产品和服务品牌,以生产销售智能型电动车为主,研发全智能电动车软硬件配套,打造绿津自主品牌,致力于成为新一代智能电动车领域的第一品牌。
+		</view> -->
+	</view>
+</template>
+
+<script>
+	export default {
+		onLoad(option) {
+			
+		},
+		methods: {
+			navTo(url){
+				uni.navigateTo({
+					url,
+				});
+			},
+			openPhone(){
+				uni.makePhoneCall({
+					phoneNumber:'4006990899'
+				});
+			},
+			openWWW(){
+				// #ifdef H5
+				window.open('http://www.guaiyouyou.com')
+				// #endif
+				// #ifdef APP
+				plus.runtime.openURL('http://www.guaiyouyou.com');
+				// #endif
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.content{
+		padding: 30rpx;
+		color: $font-color-light;
+		font-size: 28rpx;
+	}
+	.text{
+		text-indent: 2em;
+		color: $font-color-light;
+		font-size: 28rpx;
+	}
+	.xy{
+		color: $color-green;
+	}
+</style>

+ 376 - 0
pages/public/wxLogin.vue

@@ -0,0 +1,376 @@
+<template>
+	<view class="content">
+		<!-- #ifdef MP -->
+		<view class="flex-center">
+			<view class="logo-img-box">
+				<image class="logo-img" src="../../static/image/logo.png" mode="scaleToFill"></image>
+				<button class="userInfo flex-center" type="warn" @tap="loding?'':userInfoData()">
+					<image class="icon margin-r-10" src="../../static/icon/weichat.png" mode="widthFix"></image>
+					<text>微信授权登录</text>
+				</button>
+				<agreement @checkedChange='changeChecked'></agreement>
+			</view>
+		</view>
+		<view class="Mask" v-show="MaskShow">
+			<view class="Mask-box">
+				<view class="title">申请获取您的手机号</view>
+				<view class="text">为了方便您的取货和我们的送货,并获取更多优惠活动,需要您的手机授权</view>
+				<view class="btn_box">
+					<button class="weixin" @click="outUser">取消</button>
+					<button class="weixin" open-type="getPhoneNumber" @getphonenumber="PhoneNumber">授权</button>
+				</view>
+			</view>
+		</view>
+		<!-- #endif -->
+	</view>
+</template>
+
+<script>
+	// #ifdef H5
+	import {
+		loginWinxin
+	} from '@/utils/wxAuthorized';
+	// #endif
+	// #ifdef MP-WEIXIN
+	import {
+		wechatMpAuth
+	} from '@/api/wx';
+	import {
+		loginWinxinMp
+	} from '@/utils/wxMinProgram';
+	// #endif
+	import {
+		mapMutations
+	} from 'vuex';
+	import {
+		getUserInfo,
+	} from '@/api/login.js';
+	import {
+		binding
+	} from '@/api/set.js';
+	import agreement from "./agreement.vue"
+	export default {
+		components: {
+			agreement
+		},
+		data() {
+			return {
+				checked: false,
+				userInfo: {}, //授权用户信息
+				code: '', //授权code
+				loding: false, //判断是否在点击中
+				MaskShow: false, // 手机号授权弹窗
+				cache_key: '',
+			};
+		},
+		onLoad(option) {
+			console.log(option, '船只');
+			this.loadData();
+		},
+		methods: {
+			...mapMutations('user', ['login', 'setUserInfo', 'logout']),
+			changeChecked(check) {
+				this.checked = check;
+			},
+			loadData() {
+				let obj = this;
+				// #ifdef H5
+				loginWinxin();
+				// #endif
+				// #ifdef MP-WEIXIN
+				loginWinxinMp().then((e) => {
+					console.log(e, 'loginWinxinMp');
+					obj.code = e.code;
+				});
+				// #endif
+			},
+			// #ifndef H5
+			// 用户确认授权
+			userInfoData(e) {
+				const that = this;
+				if (!that.checked) {
+					uni.showModal({
+						title: '提示',
+						content: '请先阅读同意《母婴界严选服务》《隐私条例》',
+						showCancel: false,
+					});
+					return;
+				}
+				// #ifdef MP-WEIXIN
+				if (!this.loding) {
+					wx.getUserProfile({
+						desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
+						success: res => {
+							console.log(res, 'res');
+							that.userInfo = res;
+							that.loadMp();
+						},
+						fail: err => {
+							console.log(err, 'err');
+							that.loding = false;
+							that.getLoginCode();
+							uni.showToast({
+								title: '您拒绝了请求,不能正常使用小程序',
+								icon: 'error',
+								duration: 2000
+							});
+						}
+					});
+				}
+				// #endif
+			},
+			// #endif
+			// #ifdef MP-WEIXIN
+			// 退出用户登录
+			outUser() {
+				this.logout();
+				uni.switchTab({
+					url: '/pages/index/index'
+				})
+			},
+			getLoginCode() {
+				const that = this;
+				wx.login({
+					success(e) {
+						console.log(e, 'loginWinxinMp');
+						that.code = e.code;
+					},
+					fill: function(e) {
+						console.log(e)
+					}
+				})
+			},
+			// 小程序授权登录
+			loadMp(option) {
+				let obj = this;
+				obj.loding = true;
+				// 获取登录授权页数据
+				let user = obj.userInfo;
+				// 获取推广人id
+				// #ifndef MP
+				let spread_spid = uni.getStorageSync('spread') || '';
+				// #endif
+				// #ifdef MP
+				let spread_code = uni.getStorageSync('spread_code') || '';
+				// #endif
+				uni.showLoading({
+					title: '授权中',
+					mask: true
+				});
+				wechatMpAuth({
+						code: obj.code,
+						avatar: user.userInfo.avatarUrl,
+						nickname: user.userInfo.nickName,
+						gender: user.userInfo.gender,
+						// #ifndef MP
+						parent_uid: spread_spid,
+						// #endif
+						// #ifdef MP
+						parent_uid: spread_code
+						// #endif
+					})
+					.then(({
+						data
+					}) => {
+						obj.loding = false;
+						obj.wchatAuth(data);
+						console.log(data, '授权数据');
+					})
+					.catch(e => {
+						obj.loding = false;
+						uni.hideLoading();
+					});
+
+			},
+			wchatAuth(data) {
+				let obj = this;
+				obj.cache_key = data.cache_key;
+				// 保存token
+				uni.setStorageSync('token', data.token);
+				obj.GetUser().then((data) => {
+					console.log(data, '返回用户的数据');
+					try {
+						uni.hideLoading();
+						obj.login();
+						// 保存返回用户数据
+						obj.setUserInfo(data);
+						if (data.mobile == null || !data.mobile) {
+							obj.MaskShow = true;
+						} else {
+							obj.ToIndex();
+						}
+					} catch (e) {
+						console.log(e, '登录');
+					}
+				}).catch((e) => {
+					uni.hideLoading();
+				})
+			},
+			// #endif
+			ToIndex() {
+				let ur = uni.getStorageSync('present') || '/pages/index/index';
+				// 用于处理缓存bug
+				if (ur == 'pages/product/product') {
+					ur = '/pages/index/index';
+				}
+				uni.switchTab({
+					url: ur,
+					fail(e) {
+						uni.navigateTo({
+							url: ur,
+							fail(e) {
+								uni.navigateTo({
+									url: '/pages/index/index'
+								});
+							}
+						});
+					}
+				});
+				// uni.switchTab({
+				// 	url: '/pages/index/index'
+				// });
+			},
+			// 获取用户数据
+			GetUser() {
+				// 获取用户基础信息
+				return new Promise((ok, error) => {
+					getUserInfo({})
+						.then(({
+							data
+						}) => {
+							ok(data)
+						})
+						.catch(e => {
+							error(e)
+						});
+				})
+			},
+			// #ifdef MP
+			// 绑定手机号
+			PhoneNumber(e) {
+				let obj = this;
+				obj.MaskShow = false;
+				let requestData = {
+					code: e.detail.code,
+				}
+				obj.bindPhone(requestData).then((ar) => {
+					obj.GetUser().then((data) => {
+						obj.setUserInfo(data);
+						uni.showToast({
+							title: '绑定成功',
+							mask: true,
+						});
+						setTimeout(
+							function() {
+								obj.ToIndex();
+							}, 500
+						)
+					});
+				})
+			},
+			// 绑定手机号
+			bindPhone(data) {
+				// 获取用户基础信息
+				return new Promise((ok, error) => {
+					binding(data)
+						.then(function(e) {
+							ok(e)
+						})
+						.catch(e => {
+							error(e)
+						});
+				})
+
+			}
+			// #endif
+		}
+	};
+</script>
+
+<style lang="scss">
+	page,
+	.content {
+		height: 100%;
+
+		/* #ifdef MP-WEIXIN */
+		.flex-center {
+			height: 100%;
+			text-align: center;
+			line-height: 1;
+		}
+
+		/* #endif */
+	}
+
+	/* #ifdef MP-WEIXIN */
+
+	.Mask {
+		position: fixed;
+		top: 0;
+		width: 100%;
+		height: 100%;
+		background-color: rgba(51, 51, 51, 0.7);
+
+		.Mask-box {
+			margin: auto;
+			margin-top: 320rpx;
+			padding: 50rpx 30rpx;
+			width: 90%;
+			height: 450rpx;
+			top: 500rpx;
+			left: 10%;
+			background-color: #ffffff;
+			border-radius: 15rpx;
+
+			.title {
+				text-align: center;
+				font-size: 35rpx;
+				font-weight: 700;
+			}
+
+			.text {
+				font-size: 30rpx;
+				color: #848484;
+				padding-top: 50rpx;
+			}
+
+			.btn_box {
+				margin: 70rpx 0 0 0;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+			}
+		}
+	}
+
+	.weixin {
+		background: $base-color;
+		width: 40%;
+		color: #ffffff;
+		border-radius: 50rpx;
+		border: none;
+		margin: 0 20rpx;
+	}
+
+	.logo-img {
+		width: 385rpx;
+		height: 385rpx;
+		margin: 0 auto;
+		border-radius: 50rpx;
+	}
+
+	.userInfo {
+		margin: 0 100rpx;
+		margin-top: 50rpx;
+		padding: 30rpx 50rpx;
+		color: #ffffff;
+		border-radius: 99rpx;
+		background-color: $base-color !important;
+
+		.icon {
+			width: 55rpx;
+		}
+	}
+
+	/* #endif */
+</style>

+ 312 - 0
pages/set/address.vue

@@ -0,0 +1,312 @@
+<template>
+	<view class="content b-t">
+		<!-- #ifdef H5 -->
+		<empty src="../../static/error/emptyAddress.png" v-if="addressList.length === 0"></empty>
+		<!-- #endif -->
+		<!-- #ifndef H5 -->
+		<empty src="../static/error/emptyAddress.png" v-if="addressList.length === 0"></empty>
+		<!-- #endif -->
+		<view class="list" v-for="(item, index) in addressList" :key="index" @click="checkAddress(item)">
+			<view class="wrapper">
+				<view class="address-box">
+					<text class="name">{{ item.real_name }}</text>
+					<text class="mobile">{{ item.phone }}</text>
+				</view>
+				<view class="u-box">
+					<text class="address">{{ item.province + item.city + item.district }} {{ item.detail }}</text>
+				</view>
+			</view>
+			<view class="buttom">
+				<view class="default-buttom" @click.stop="defaultUp(item,index)">
+					<image class="checkedImg" v-if="item.is_default == 1" src="../../static/icon/addressIconXz.png"
+						mode="widthFix"></image>
+					<view v-else class="checkbox">
+
+					</view>
+					<text class="text">设为默认地址</text>
+				</view>
+				<view class="operation">
+					<view @click.stop="addAddress('edit', item)" class="flex">
+						<image class="icon" src="../../static/icon/addressIcon1.png" mode="widthFix"></image>
+						<text class="text">编辑</text>
+					</view>
+					<view class="blank"></view>
+					<view @click.stop="delAddress(item)" class="flex">
+						<image class="icon" src="../../static/icon/addressIcon2.png" mode="widthFix"></image>
+						<text class="text">删除</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- #ifdef H5 || MP -->
+		<view class="add-btn two base-buttom" @click="addWxAddress">获取微信地址</view>
+		<!-- #endif -->
+		<view class="add-btn one base-buttom" @click="addAddress('add')">新增地址</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getAddressList,
+		setAddressDefault,
+		addressDel,
+		addressEdit
+	} from '@/api/user.js';
+	// #ifdef H5
+	import weixinObj from "@/plugin/jweixin-module/index.js";
+	import {
+		weixindata
+	} from "../../utils/wxAuthorized.js"
+	// #endif
+	export default {
+		data() {
+			return {
+				source: 0,
+				addressList: []
+			};
+		},
+		onLoad(option) {
+			this.source = option.source || 0
+			this.loadAddress();
+		},
+		methods: {
+			// 加载地址
+			loadAddress() {
+				getAddressList({
+					page: 1,
+					limit: 100
+				}).then(({
+					data
+				}) => {
+					this.addressList = data;
+				});
+			},
+			// 设为默认地址
+			defaultUp(data, ind) {
+				this.addressList = this.addressList.map((e) => {
+					e.is_default = 0
+					return e
+				})
+				this.addressList[ind].is_default = 1
+				setAddressDefault({
+					id: data.id
+				}).then(({
+					data
+				}) => {
+					this.loadAddress();
+				}).catch((e) => {
+					console.log(e);
+				});
+			},
+			//删除地址
+			delAddress(item) {
+				addressDel({
+					id: item.id
+				}).then(({
+					data
+				}) => {
+					this.$api.msg('删除成功')
+				})
+				let s = this.addressList.indexOf(item);
+				this.addressList.splice(s, 1);
+			},
+			//选择地址
+			checkAddress(item) {
+				if (this.source == 1) {
+					//this.$api.prePage()获取上一页实例,在App.vue定义
+					this.$api.prePage().addressData = item;
+					uni.navigateBack();
+				}
+			},
+			// 添加地址
+			addAddress(type, item) {
+				uni.navigateTo({
+					url: `/pages/set/addressManage?type=${type}&data=${JSON.stringify(item)}`
+				});
+			},
+			//添加或修改成功之后回调
+			refreshList() {
+				// 重新加载地址
+				this.loadAddress()
+			},
+			// #ifdef H5
+			// 公众号获取地址
+			addWxAddress() {
+				let that = this;
+				weixindata().then(() => {
+					weixinObj.openAddress({
+						success: function(data) {
+							that.addAddressOn(data)
+						},fail(e){
+							console.log(e,'授权错误');
+						}
+					});
+				})
+			},
+			// #endif
+			// #ifdef MP
+			addWxAddress() {
+				let that = this;
+				wx.chooseAddress({
+					success: function(data) {
+						console.log('获取地址',data);
+						that.addAddressOn(data)
+					},fail(e){
+						console.log(e);
+					}
+				});
+			},
+			// #endif
+			// #ifdef H5 || MP
+			addAddressOn(data) {
+				let that = this;
+				addressEdit({
+					real_name: data.userName,
+					phone: data.telNumber,
+					address: {
+						province: data.provinceName,
+						city: data.cityName,
+						district: data.countyName
+					},
+					detail: data.detailInfo,
+					type: 1
+				}).then(function(e) {
+					uni.showToast({
+						title: '提交成功',
+						duration: 2000
+					});
+					setTimeout(function() {
+						that.loadAddress();
+					}, 800);
+				});
+			
+			}
+			// #endif
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		padding-bottom: 120rpx;
+		padding-top: 20rpx;
+		background-color: $page-color-base;
+	}
+
+	.content {
+		position: relative;
+	}
+
+	.list {
+		align-items: center;
+		padding: 20rpx 30rpx;
+		background: #fff;
+		margin: 20rpx;
+		margin-top: 0;
+
+		.buttom {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			padding-top: 10rpx;
+
+			.checkbox,
+			.checkedImg {
+				height: 36rpx;
+				width: 36rpx;
+				border-radius: 100rpx;
+			}
+
+			.checkbox {
+				border: 1px solid $font-color-light;
+			}
+
+			.checkbox.checked {
+				color: $base-color;
+			}
+
+			.default-buttom {
+				display: flex;
+				align-items: center;
+			}
+
+			.operation {
+				display: flex;
+				align-items: center;
+
+				.blank {
+					width: 30rpx;
+				}
+
+				.icon {
+					width: 32rpx;
+				}
+			}
+
+			.text {
+				padding-left: 10rpx;
+				font-size: 24rpx;
+				color: #666666;
+			}
+		}
+	}
+
+	.wrapper {
+		display: flex;
+		flex-direction: column;
+		flex: 1;
+		border-bottom: 1px solid #f0f0f0;
+		padding-bottom: 20rpx;
+	}
+
+	.address-box {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+
+		.address {
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+		}
+
+		.mobile {
+			font-size: $font-base;
+			color: rgba(51, 51, 51, 1);
+		}
+	}
+
+	.u-box {
+		font-size: $font-base;
+		color: $font-color-light;
+		margin-top: 16rpx;
+
+		.name {
+			margin-right: 30rpx;
+		}
+	}
+
+	.icon-bianji {
+		display: flex;
+		align-items: center;
+		height: 80rpx;
+		font-size: 40rpx;
+		color: $font-color-light;
+		padding-left: 30rpx;
+	}
+
+	.add-btn {
+		position: fixed;
+		z-index: 95;
+		left: 30rpx;
+		right: 30rpx;
+
+		&.one {
+			bottom: 16rpx;
+		}
+
+		&.two {
+			bottom: 136rpx;
+			background-color: $font-color-disabled;
+		}
+	}
+</style>

+ 235 - 0
pages/set/addressManage.vue

@@ -0,0 +1,235 @@
+<template>
+	<view class="content">
+		<view class="listBox">
+			<view class="list">
+				<view class="flex listItem" >
+					<view class="flex titleBox">
+						<text class="title">联系人</text>
+					</view>
+					<view class="right flex">
+						<input class="input" type="text" v-model="addressData.name" placeholder="收货人姓名"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem" >
+					<view class="flex titleBox">
+						<text class="title">手机号</text>
+					</view>
+					<view class="right flex">
+						<input class="input" type="number" v-model="addressData.mobile" placeholder="收货人手机号码"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem" >
+					<view class="flex titleBox">
+						<text class="title">地址</text>
+					</view>
+					<view class="right flex">
+						<pickerAddress class="input" @change="onCityClick">{{addressDetail||'请选择地址'}}</pickerAddress>
+					</view>
+				</view>
+				<view class="flex listItem" >
+					<view class="flex titleBox">
+						<text class="title">门牌号</text>
+					</view>
+					<view class="right flex">
+						<input class="input" type="text" v-model="addressData.area" placeholder="楼号、门牌"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+			</view>
+
+		</view>
+		<uni-list class="margin-t-20 margin-l-30 margin-r-30" style="border-radius: 20rpx;">
+			<uni-list-item
+				title="设为默认"
+				:switch-checked="addressData.default"
+				:show-switch="true"
+				:show-arrow="false"
+				switch-color="#5dbc7c"
+				@switchChange="switchChange"
+			></uni-list-item>
+		</uni-list>
+
+		<view class="base-buttom" @click="confirm">提交</view>
+	</view>
+</template>
+
+<script>
+	import pickerAddress from '@/components/wangding-pickerAddress/wangding-pickerAddress.vue';
+	import {
+		addressEdit
+	} from '@/api/user.js';
+	export default {
+		components: {
+			pickerAddress,
+		},
+		data() {
+			return {
+				code: '',
+				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
+					},
+					area: data.detail,
+					default: data.is_default == 1,
+					id: data.id
+				};
+				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;
+					}
+				});
+			},
+			// 设置是否为默认地址
+			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.address) {
+					this.$api.msg('请在地图选择所在位置');
+					return;
+				}
+				if (!data.area) {
+					this.$api.msg('请填写门牌号信息');
+					return;
+				}
+
+				//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);
+				});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		background: $page-color-base;
+	}
+	.content{
+		padding-top: 30rpx;
+	}
+	.listBox {
+		margin: 0 $page-row-spacing;
+		border-radius: 20rpx;
+		overflow: hidden;
+		background-color: #FFFFFF;
+	}
+
+	.list {
+		.input {
+			text-align: right;
+			font-size: $font-base;
+			color: $color-gray;
+			width: 100%;
+			flex-grow: 1;
+		}
+
+		.listItem {
+			padding: 35rpx 40rpx;
+			border-bottom: 1px solid $page-color-light;
+		}
+
+		.listIconImg {
+			width: 36rpx;
+		}
+
+		.right {
+			color: $font-color-light;
+			font-size: $font-base;
+			flex-grow: 1;
+
+			.img {
+				width: 26rpx;
+			}
+
+			.code {}
+		}
+
+		.titleBox {
+			.title {
+				color: $font-color-base;
+				font-size: $font-base;
+			}
+		}
+	}
+</style>

+ 226 - 0
pages/set/password.vue

@@ -0,0 +1,226 @@
+<template>
+	<view class="container">
+		<view class="listBox">
+			<view class="list">
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">手机号</text>
+					</view>
+					<view class="right flex">
+						<input class="input" placeholder="请输入手机号" type="text" v-model="account"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">验证码</text>
+					</view>
+					<view class="right flex">
+						<input class="input" v-model="captcha" type="text" placeholder="请填写验证码"
+							placeholder-class="placeholder" />
+						<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">新密码</text>
+					</view>
+					<view class="right flex">
+						<input class="input" placeholder="请输入新密码" type="text" v-model="password"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">确认密码</text>
+					</view>
+					<view class="right flex">
+						<input class="input" placeholder="再次输入密码" type="text" v-model="dbPassword"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- <view class="row b-b">
+			<text class="tit">手机号</text>
+			<input class="input" v-model="account" type="text" placeholder="请填写手机号" placeholder-class="placeholder" />
+		</view>
+		
+		<view class="row b-b">
+			<text class="tit">新密码</text>
+			<input class="input" v-model="password" type="password" placeholder="请填写新密码" placeholder-class="placeholder" />
+		</view> -->
+		<view class="base-buttom" :class="{'bg-gray':loding}" @click="loding?'':confirm()">提交</view>
+	</view>
+</template>
+
+<script>
+	import {
+		verify
+	} from '@/api/login.js';
+	import {
+		mapState
+	} from 'vuex';
+	import {
+		registerReset
+	} from '@/api/set.js';
+	export default {
+		data() {
+			return {
+				time: '', //保存倒计时对象
+				countDown: 0, //倒计时
+				account: '', //原密码
+				dbPassword: '', //对比密码
+				password: '', //新密码
+				loding: false, //是否载入中
+			};
+		},
+		computed: {
+			...mapState(['userInfo'])
+		},
+		onLoad() {
+			if (this.userInfo.phone == null) {
+				this.account = '';
+			} else {
+				this.account = this.userInfo.phone;
+				this.show = false;
+			}
+		},
+		watch: {
+			// 监听倒计时
+			countDown(i) {
+				if (i == 0) {
+					clearInterval(this.time);
+				}
+			}
+		},
+		methods: {
+			//发送验证码
+			verification() {
+				let obj = this;
+				if (this.account == '') {
+					this.$api.msg('请输入电话号码');
+					return;
+				}
+				if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(this.account)) {
+					this.$api.msg('请输入正确的手机号');
+					return;
+				}
+				// 判断是否在倒计时
+				if (obj.countDown > 0) {
+					return false;
+				} else {
+					obj.countDown = 60;
+					obj.time = setInterval(() => {
+						obj.countDown--;
+					}, 1000);
+					//调用验证码接口
+					verify({
+							phone: obj.account,
+							type: ''
+						})
+						.then(({
+							data
+						}) => {})
+						.catch(err => {
+							console.log(err);
+						});
+				}
+			},
+			confirm(e) {
+				this.loding = true;
+				if (this.dbPassword != this.password) {
+					this.loding = false;
+					uni.showModal({
+						title: '请重新输入',
+						content: '两次密码输入不一致',
+						showCancel: false,
+					});
+					return
+				}
+				registerReset({
+						account: this.account,
+						captcha: this.captcha,
+						password: this.password,
+					})
+					.then(({
+						data
+					}) => {
+						this.loding = false;
+						this.$api.msg('修改成功');
+					})
+					.catch(err => {
+						this.loding = false;
+						console.log(err);
+					});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		background: $page-color-base;
+	}
+
+	.container {
+		padding-top: 30rpx;
+	}
+
+	.listBox {
+		margin: $page-row-spacing;
+		margin-top: 0;
+		border-radius: 20rpx;
+		overflow: hidden;
+		background-color: #FFFFFF;
+		
+	}
+
+	.list {
+		.input {
+			text-align: right;
+			font-size: $font-base;
+			color: $color-gray;
+			width: 100%;
+			
+		}
+
+		.listItem {
+			padding: 35rpx 40rpx;
+			border-bottom: 1px solid $page-color-light;
+			.code {
+				color: #5dbc7c;
+				font-size: 23rpx;
+				border-left: 1px solid #eeeeee;
+				padding-left: 20rpx;
+				flex-shrink: 0;
+				text-align: center;
+			}
+		}
+
+		.listIconImg {
+			width: 36rpx;
+		}
+
+		.right {
+			color: $font-color-light;
+			font-size: $font-base;
+			flex-grow: 1;
+
+			.img {
+				width: 26rpx;
+			}
+		}
+
+		.titleBox {
+			.title {
+				color: $font-color-base;
+				font-size: $font-base;
+			}
+		}
+	}
+
+	.bg-gray {
+		background-color: $color-gray;
+	}
+</style>

+ 202 - 0
pages/set/phone.vue

@@ -0,0 +1,202 @@
+<template>
+	<view class="container">
+		<view class="listBox">
+			<view class="list">
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">手机号</text>
+					</view>
+					<view class="right flex">
+						<input class="input" placeholder="填写绑定号码" type="text" v-model="account"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">验证码</text>
+					</view>
+					<view class="right flex">
+						<input class="input" v-model="captcha" type="text" placeholder="请填写验证码"
+							placeholder-class="placeholder" />
+						<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
+					</view>
+				</view>
+				<!-- <view class="flex listItem" >
+					<view class="flex titleBox">
+						<text class="title">新号码</text>
+					</view>
+					<view class="right flex">
+						<input class="input" v-model="account" type="text" placeholder="请填写新手机号"
+							placeholder-class="placeholder" />
+					</view>
+				</view> -->
+			</view>
+		</view>
+		<view class="base-buttom" :class="{ 'bg-gray': loding }" @click="loding ? '' : confirm()">提交</view>
+	</view>
+</template>
+
+<script>
+	import {
+		verify
+	} from '@/api/login.js';
+	import {
+		mapState
+	} from 'vuex';
+	import {
+		registerReset,
+		binding
+	} from '@/api/set.js';
+	export default {
+		data() {
+			return {
+				time: '', //保存倒计时对象
+				countDown: 0, //倒计时
+				account: '', //手机号
+				captcha: '', //验证码
+				loding: false //是否载入中
+			};
+		},
+		watch: {
+			// 监听倒计时
+			countDown(i) {
+				if (i == 0) {
+					clearInterval(this.time);
+				}
+			}
+		},
+		computed: {
+			...mapState(['userInfo'])
+		},
+		onLoad() {
+			if (this.userInfo.phone == null) {
+				this.account = '';
+			} else {
+				this.account = this.userInfo.phone;
+				this.show = false;
+			}
+		},
+		methods: {
+			//发送验证码
+			verification() {
+				let obj = this;
+				if (this.account == '') {
+					this.$api.msg('请输入电话号码');
+					return;
+				}
+				if (this.account.length != 11) {
+					this.$api.msg('请输入正确的手机号');
+					return;
+				}
+				// 判断是否在倒计时
+				if (obj.countDown > 0) {
+					return false;
+				} else {
+					obj.countDown = 60;
+					obj.time = setInterval(() => {
+						obj.countDown--;
+					}, 1000);
+					//调用验证码接口
+					verify({
+							phone: obj.account,
+							type: 'BDING_CODE'
+						})
+						.then(({
+							data
+						}) => {})
+						.catch(err => {
+							console.log(err);
+						});
+				}
+			},
+			confirm(e) {
+				let obj = this;
+				obj.loding = true;
+				binding({
+						phone: obj.account,
+						captcha: obj.captcha
+					})
+					.then(({
+						data
+					}) => {
+						obj.$api.msg('绑定成功!');
+						setTimeout(function() {
+							obj.loding = false;
+							uni.switchTab({
+								url: '/pages/userhome/user'
+							});
+						}, 1000);
+					})
+					.catch(err => {
+						obj.loding = false;
+						console.log(err);
+					});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		background: $page-color-base;
+	}
+	.container{
+		padding-top: 30rpx;
+	}
+	.listBox {
+		margin: $page-row-spacing;
+		border-radius: 20rpx;
+		overflow: hidden;
+		background-color: #FFFFFF;
+	}
+
+	.list {
+		.input {
+			text-align: right;
+			font-size: $font-base;
+			color: $color-gray;
+			width: 100%;
+		}
+
+		.listItem {
+			padding: 35rpx 40rpx;
+			border-bottom: 1px solid $page-color-light;
+		}
+
+		.listIconImg {
+			width: 36rpx;
+		}
+
+		.right {
+			color: $font-color-light;
+			font-size: $font-base;
+			flex-grow: 1;
+
+			.img {
+				width: 26rpx;
+			}
+		}
+
+		.titleBox {
+			.title {
+				color: $font-color-base;
+				font-size: $font-base;
+			}
+		}
+	}
+
+
+
+	.bg-gray {
+		background-color: $color-gray;
+	}
+
+	.code {
+		color: #5dbc7c;
+		font-size: 23rpx;
+		border-left: 1px solid #eeeeee;
+		padding-left: 20rpx;
+		flex-shrink: 0;
+		text-align: center;
+	}
+</style>

+ 204 - 0
pages/set/set.vue

@@ -0,0 +1,204 @@
+<template>
+	<view class="container">
+		<view class="listBox">
+			<view class="row flex" @click="navTo('/pages/set/userinfo')">
+				<text class="tit">头像</text>
+				<view>
+					<image class="background-img" v-model="userInfo.avatar" :src="userInfo.avatar" mode="aspectFill">
+					</image>
+				</view>
+			</view>
+			<view class="list">
+				<view class="flex listItem" @click="navTo('/pages/set/userinfo')">
+					<view class="flex titleBox">
+						<text class="title">昵称</text>
+					</view>
+					<view class="right flex">
+						<text>{{userInfo.nickname}}</text>
+						<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+					</view>
+				</view>
+				<view class="flex listItem" >
+					<view class="flex titleBox">
+						<text class="title">手机号</text>
+					</view>
+					<view class="right flex">
+						<text>{{userInfo.mobile}}</text>
+						<!-- <image class="img" src="../../static/icon/next1.png" mode="widthFix"></image> -->
+					</view>
+				</view>
+				<!-- <view class="flex listItem" @click="navTo('/pages/user/realName/realNameAuthentication')">
+					<view class="flex titleBox">
+						<text class="title">实名认证</text>
+					</view>
+					<view class="right flex">
+						<text></text>
+						<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+					</view>
+				</view> -->
+				<!-- <view class="flex listItem" @click="navTo('/pages/set/password')">
+					<view class="flex titleBox">
+						<text class="title">修改密码</text>
+					</view>
+					<view class="right flex">
+						<text></text>
+						<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+					</view>
+				</view> -->
+				<!-- #ifdef APP -->
+				<view class="flex listItem" @click="$refs.inputDialog.open()">
+					<view class="flex titleBox">
+						<text class="title">注销账号</text>
+					</view>
+					<view class="right flex">
+						<text></text>
+						<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+					</view>
+				</view>
+				<!-- #endif -->
+			</view>
+		</view>
+		<view class="base-buttom" @click="toLogout">
+			退出账号
+		</view>
+		<!-- #ifdef APP -->
+		<uni-popup ref="inputDialog" type="dialog">
+			<uni-popup-dialog ref="inputClose" mode="input" title="注销账号" value="" placeholder="请输入账号密码"
+				@confirm="outAccount"></uni-popup-dialog>
+		</uni-popup>
+		<!-- #endif -->
+	</view>
+</template>
+
+<script>
+	import {
+		logout,
+		uploads
+	} from '@/api/set.js';
+	import {
+		mapMutations,
+		mapState
+	} from 'vuex';
+	export default {
+		data() {
+			return {
+
+			};
+		},
+		computed: {
+			...mapState('user', ['userInfo'])
+		},
+		methods: {
+			...mapMutations('user', ['logout']),
+			// #ifdef APP
+			outAccount() {
+				uni.showModal({
+					title: '警告',
+					content: '注销后账号不可恢复是否注销?',
+					cancelText: '取消',
+					confirmText: '立即注销',
+					success: res => {
+						if (res.confirm) {
+							uni.showModal({
+								title: '提示',
+								content: '已提交注销申请!请等待处理结果',
+								showCancel: false,
+							});
+						}
+					},
+				});
+			},
+			// #endif
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				})
+			},
+			//退出登录
+			toLogout() {
+				let obj = this;
+				uni.showModal({
+					content: '确定要退出登录么',
+					success: (e) => {
+						if (e.confirm) {
+							obj.logout();
+							uni.setStorageSync('token', '');
+							uni.navigateBack();
+						}
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style lang='scss'>
+	.container {
+		padding-top: 30rpx;
+	}
+
+	.listBox {
+		margin: 0 $page-row-spacing;
+		background-color: #FFFFFF;
+		border-radius: 20rpx;
+		overflow: hidden;
+	}
+
+	.list {
+		.listItem {
+			padding: 35rpx 40rpx;
+			border-bottom: 1px solid $page-color-light;
+		}
+
+		.listIconImg {
+			width: 36rpx;
+		}
+
+		.right {
+			color: $font-color-light;
+			font-size: $font-base;
+			flex-grow: 1;
+			justify-content: flex-end;
+
+			.img {
+				width: 26rpx;
+			}
+		}
+
+		.titleBox {
+			.title {
+				color: $font-color-base;
+				font-size: $font-base;
+			}
+		}
+	}
+
+	.row {
+		display: flex;
+		align-items: center;
+		padding: 35rpx 40rpx;
+		background: #fff;
+		border-bottom: 1px solid $page-color-light;
+
+		.background-img {
+			width: 80rpx;
+			height: 80rpx;
+			border-radius: 50%;
+			background: #f2f2f2;
+		}
+
+		.tit {
+			flex-shrink: 0;
+			width: 120upx;
+			font-size: $font-base;
+			color: $font-color-base;
+		}
+
+		.input {
+			flex: 1;
+			text-align: right;
+			font-size: $font-base;
+			color: $color-gray;
+		}
+	}
+</style>

+ 164 - 0
pages/set/userinfo.vue

@@ -0,0 +1,164 @@
+<template>
+	<view class="content">
+		<view class="listBox">
+			<view class="row flex" @click="imgsub">
+				<text class="tit">头像</text>
+				<view>
+					<image class="background-img" v-model="userInfo.avatar" :src="userInfo.avatar" mode="aspectFill">
+					</image>
+				</view>
+			</view>
+			<view class="list">
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">昵称</text>
+					</view>
+					<view class="right flex">
+						<input class="input" type="text" v-model="userInfo.nickname" placeholder="请输入昵称" placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">ID</text>
+					</view>
+					<view class="right flex">
+						<text>{{userInfo.uid}}</text>
+						<!-- <image class="img" src="../../static/icon/next1.png" mode="widthFix"></image> -->
+					</view>
+				</view>
+				<!-- <view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">账户</text>
+					</view>
+					<view class="right flex">
+						<text>{{userInfo.account}}</text>
+					</view>
+				</view> -->
+			</view>
+		</view>
+		<view class="base-buttom" @click="confirm">提交</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+	} from 'vuex';
+	import {
+		userEdit,
+		upload
+	} from '@/api/set.js';
+
+	export default {
+		data() {
+			return {
+
+			}
+		},
+		onLoad() {
+			console.log(this.userInfo)
+		},
+		computed: {
+			...mapState('user', ['userInfo'])
+		},
+		methods: {
+			imgsub() {
+				console.log('上传头像')
+				upload({
+					filename: ''
+				}).then(data => {
+					console.log("data", data);
+					this.userInfo.avatar = data[0].img;
+				})
+			},
+			confirm() {
+				userEdit({
+						avatar: this.userInfo.avatar,
+						nickname: this.userInfo.nickname
+					})
+					.then(e => {
+						this.$api.msg('修改成功');
+						setTimeout(() => {
+							uni.switchTab({
+								url: '/pages/userhome/user'
+							});
+						}, 1000);
+						console.log(e);
+					})
+					.catch(e => {
+						console.log(e);
+					});
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.content {
+		padding-top: 30rpx;
+	}
+	.listBox {
+		margin: 0 $page-row-spacing;
+		border-radius: 20rpx;
+		overflow: hidden;
+		background-color: #FFFFFF;
+	}
+
+	.list {
+		.listItem {
+			padding: 35rpx 40rpx;
+			border-bottom: 1px solid $page-color-light;
+		}
+
+		.listIconImg {
+			width: 36rpx;
+		}
+
+		.right {
+			color: $font-color-light;
+			font-size: $font-base;
+			flex-grow: 1;
+			justify-content: flex-end;
+			.img {
+				width: 26rpx;
+			}
+		}
+		.input {
+			flex-grow: 1;
+			text-align: right;
+			font-size: $font-base;
+			color: $color-gray;
+		}
+		
+		.titleBox {
+			.title {
+				color: $font-color-base;
+				font-size: $font-base;
+			}
+		}
+	}
+
+	
+	.row {
+		display: flex;
+		align-items: center;
+		padding: 35rpx 40rpx;
+		background: #fff;
+		border-bottom: 1px solid $page-color-light;
+
+		.background-img {
+			width: 80rpx;
+			height: 80rpx;
+			border-radius: 50%;
+			background: #f2f2f2;
+		}
+
+		.tit {
+			flex-shrink: 0;
+			width: 120upx;
+			font-size: $font-base;
+			color: $font-color-base;
+		}
+	}
+
+</style>

+ 236 - 0
pages/user/award/account.vue

@@ -0,0 +1,236 @@
+<template>
+	<view class="content">
+		<view class="navbar">
+			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
+		</view>
+
+		<swiper :current="tabCurrentIndex" class="swiper-box" duration="300" @change="changeTab">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<view class="row b-b">
+					<text class="tit">姓名</text>
+					<input class="input" v-model="tabItem.orderList.name" type="text" placeholder="提款人姓名" placeholder-class="placeholder" />
+				</view>
+				<view class="row b-b">
+					<text class="tit">{{ tabIndex == 0 ? '账号' : '银行卡号' }}</text>
+					<input class="input" v-model="tabItem.orderList.code" type="text" placeholder="请输入账号" placeholder-class="placeholder" />
+				</view>
+				<view class="row b-b" v-if="tabIndex == 1">
+					<text class="tit">所属银行</text>
+					<input class="input" v-model="tabItem.orderList.bankName" type="text" placeholder="请输入账号" placeholder-class="placeholder" />
+				</view>
+			</swiper-item>
+		</swiper>
+
+		<button class="add-btn up" @click="confirm">提交申请</button>
+	</view>
+</template>
+
+<script>
+import { aliInfo, bankInfo, setAliInfo, setBankInfo } from '@/api/wallet.js';
+export default {
+	data() {
+		return {
+			tabCurrentIndex: 0,
+			navList: [
+				{
+					state: 0,
+					text: '支付宝',
+					loadingType: 'more',
+					orderList: {
+						name: '',
+						code: '',
+						id:''
+					}
+				},
+				{
+					state: 1,
+					text: '银行卡',
+					loadingType: 'more',
+					orderList: {
+						name: '',
+						code: '',
+						bankName: '',
+						id:''
+					}
+				}
+			]
+		};
+	},
+
+	onLoad(options) {
+		this.tabCurrentIndex = +options.state || 0;
+		this.loadAli();
+		this.loadBank();
+	},
+
+	methods: {
+		//加载数据
+		loadAli(source) {
+			aliInfo({}).then(({data}) => {
+				let order = this.navList[0].orderList;
+				this.$set(order,'name',data.fullname)
+				this.$set(order,'code',data.alino)
+				this.$set(order,'id',data.id)
+			});
+		},
+		loadBank() {
+			bankInfo({}).then(({data}) => {
+				let order = this.navList[1].orderList;
+				this.$set(order,'name',data.fullname);
+				this.$set(order,'code',data.bankno);
+				this.$set(order,'bankName',data.bank);
+				this.$set(order,'id',data.id)
+			});
+		},
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		},
+		// 提交保存
+		confirm() {
+			let obj = this;
+			let arr = obj.navList[obj.tabCurrentIndex].orderList;
+			if (obj.tabCurrentIndex == 1) {
+				obj.setBankInfo({
+					fullname: arr.name,
+					bank: arr.bankName,
+					bankno: arr.code,
+					id:arr.id
+				});
+			}
+			if (obj.tabCurrentIndex == 0) {
+				obj.setAliInfo({
+					fullname: arr.name,
+					alino: arr.code,
+					id:arr.id
+				});
+			}
+		},
+		/* 保存银行卡详细 */
+		setBankInfo(obj) {
+			setBankInfo(obj)
+				.then(e => {
+					uni.showToast({
+						title: '修改成功',
+						duration: 2000,
+						position: 'top'
+					});
+					this.$api.prePage().dataUp()
+					setTimeout(() => {
+						uni.navigateBack()
+					},1500)
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		// 修改支付宝信息
+		setAliInfo(obj) {
+			setAliInfo(obj)
+				.then(e => {
+					uni.showToast({
+						title: '修改成功',
+						duration: 2000,
+						position: 'top'
+					});
+					this.$api.prePage().dataUp()
+					setTimeout(() => {
+						uni.navigateBack()
+					},1500)
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+	}
+};
+</script>
+
+<style lang="scss">
+.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;
+	}
+}
+page,
+.content {
+	background: $page-color-base;
+	height: 100%;
+}
+
+.swiper-box {
+	height: 750rpx;
+}
+
+.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: $base-color;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid $base-color;
+			}
+		}
+	}
+}
+
+.add-btn {
+	&.up {
+		background-color: $base-color;
+		color: #fff;
+	}
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 690rpx;
+	height: 80rpx;
+	margin: 0 auto;
+	margin-top: 30rpx;
+	font-size: $font-lg;
+	border-radius: 10rpx;
+	// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
+}
+</style>

+ 327 - 0
pages/user/award/award.vue

@@ -0,0 +1,327 @@
+<template>
+	<view class="content">
+		<view class="bg">
+		</view>
+		<view class="content-money">
+			<view class="conetnt-box">
+				<view class="money-box">
+					<view class="text">可用佣金(元)</view>
+					<view class="money">{{ money | getMoneyStyle }}</view>
+				</view>
+
+				<view class="detailBox flex">
+					<view class="item">
+						<view class="nametype">
+							提现中
+						</view>
+						<view class="moneyNum font-color-red">
+							{{addMoney||0}}
+						</view>
+					</view>
+					<view class="item">
+						<view class="nametype">
+							即将到账
+						</view>
+						<view class="moneyNum ">
+							{{timeMoney||0}}
+						</view>
+					</view>
+					<view class="item">
+						<view class="nametype">
+							累计收益
+						</view>
+						<view class="moneyNum ">
+							{{allMoney||0}}
+						</view>
+					</view>
+				</view>
+				<view class="flex buttom-box">
+					<view class="buttom geMoney" @click="navto('./withdrawal')">
+						<text>提现</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="listbox">
+			<view class="navbar flex">
+				<view class="title">
+					佣金变动明细
+				</view>
+				<view class="alllist" @click="navto('./awardList')">
+					全部
+				</view>
+			</view>
+			<view class="conetntList">
+				<view class="listItem flex" v-for="(item, tabIndex) in navList[0].orderList">
+					<view class="itemLeft">
+						<view class="itemTitle flex">
+							<text>{{item.title}}</text>
+							<text class="font-size-sm font-color-red" v-if="item.status==0">(未到账)</text>
+						</view>
+						<view class="itemBottom">
+							{{item.add_time}}
+						</view>
+					</view>
+					<view class="itemRight">
+						<view class="itemTitle">
+							{{(item.pm == 0 ? '-' : '+')+item.number}}
+						</view>
+						<!-- <view class="itemBottom">
+								余额{{item.yue}}
+							</view> -->
+					</view>
+				</view>
+				<uni-load-more :status="navList[0].loadingType"></uni-load-more>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		spreadCommission,
+		extractBank
+	} from '@/api/wallet.js';
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import {
+		getMoneyStyle
+	} from '@/utils/rocessor.js';
+	// import empty from '@/components/empty';
+	export default {
+		filters: {
+			getMoneyStyle
+		},
+		// components: {
+		// 	empty,
+		// },
+		data() {
+			return {
+				tabCurrentIndex: 0,
+				navList: [{
+					state: 3,
+					text: '收入',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页面
+					limit: 10 //每次信息条数
+				}],
+				money: 0, //可提现佣金
+				addMoney: 200, //提现中到账
+				timeMoney: 200, //即将到账
+				allMoney: 1000, //累计收益
+
+			};
+		},
+		onLoad(options) {
+			this.loadData();
+		},
+		onShow() {
+			//获取用户余额
+			extractBank({}).then(({
+				data
+			}) => {
+				this.money = data.commissionCount;
+				this.addMoney = data.ext_broerage;
+				this.timeMoney = data.not_broerage;
+				this.allMoney = data.total_brokerage;
+			});
+		},
+		// 页面到底部后加载数据
+		onReachBottom() {
+			this.loadData();
+		},
+		methods: {
+			navto(e) {
+				uni.navigateTo({
+					url: e
+				});
+			},
+			async loadData(source) {
+				//这里时将订单挂载到tab列表下
+				let index = this.tabCurrentIndex;
+				let navItem = this.navList[index];
+				let state = navItem.state ;
+				if (source === 'tabChange' && navItem.loaded === true) {
+					//tab切换只有第一次需要加载数据
+					return;
+				}
+				if (navItem.loadingType === 'loading') {
+					//防止重复加载
+					return;
+				}
+				//修改当前对象状态为加载中
+				navItem.loadingType = 'loading';
+
+				spreadCommission({
+							page: navItem.page,
+							limit: navItem.limit
+						},
+						state
+					)
+					.then(({
+						data
+					}) => {
+						if (data.length > 0) {
+							navItem.orderList = navItem.orderList.concat(data[0].list);
+							console.log(navItem.orderList);
+							navItem.page++;
+						}
+						//判断是否还有数据, 有改为more, 没有改为noMore
+						if (navItem.limit == data.length) {
+							navItem.loadingType = 'more';
+							return;
+						} else {
+							navItem.loadingType = 'noMore';
+						}
+						uni.hideLoading();
+						this.$set(navItem, 'loaded', true);
+					})
+					.catch(e => {
+						console.log(e);
+					});
+			},
+
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+	}
+
+	.content-money {
+		position: relative;
+		padding: 20rpx;
+		z-index: 1;
+
+		.conetnt-box {
+			border-radius: 20rpx;
+			background-color: #ffffff;
+			padding-bottom: 50rpx;
+
+			// height: 400rpx;
+			.detailBox {
+				justify-content: space-around;
+				padding-top: 30rpx;
+
+				.item {
+					text-align: center;
+					color: $font-color-light;
+
+					.nametype {
+						color: $font-color-disabled;
+						font-size: 24rpx;
+					}
+
+					.moneyNum {
+						margin-top: 20rpx;
+						font-size: 28rpx;
+						font-weight: bold;
+					}
+				}
+			}
+		}
+
+		.buttom-box {
+			text-align: center;
+			margin: 0 30rpx;
+			margin-top: 50rpx;
+
+			.buttom {
+				flex-grow: 1;
+				border-radius: 100rpx;
+				font-size: $font-lg;
+				width: 300rpx;
+				height: 80rpx;
+				line-height: 80rpx;
+				background-color: $color-green;
+				color: #FFFFFF;
+
+				&.geMoney {
+					border: 1px solid $font-color-disabled;
+					color: $font-color-disabled;
+					background-color: #FFFFFF;
+				}
+			}
+		}
+	}
+
+	.money-box {
+		text-align: center;
+		color: $font-color-dark;
+		font-weight: bold;
+
+		.text {
+			padding-top: 85rpx;
+			font-size: 24rpx;
+			margin-bottom: 20rpx;
+		}
+
+		.money {
+			font-size: 60rpx;
+		}
+	}
+
+	.listbox {
+		margin: 0 20rpx;
+		border-radius: 20rpx;
+		position: relative;
+	}
+
+	.navbar {
+		background: #fff;
+		padding: 30rpx;
+		border-bottom: 1px solid $page-color-light;
+		border-top-left-radius: 20rpx;
+		border-top-right-radius: 20rpx;
+
+		.title {
+			font-size: 32rpx;
+			font-weight: bold;
+		}
+
+		.alllist {
+			font-size: 28rpx;
+
+		}
+	}
+
+
+	.content {
+		height: 100%;
+
+		.bg {
+			background-color: #f6ab0b;
+			width: 950rpx;
+			position: absolute;
+			left: -100rpx;
+			border-bottom-left-radius: 1000rpx;
+			border-bottom-right-radius: 1000rpx;
+			top: 0rpx;
+			height: 300rpx;
+		}
+
+	}
+
+	.conetntList {
+		padding: 30rpx;
+		background-color: #FFFFFF;
+		border-bottom-left-radius: 20rpx;
+		border-bottom-right-radius: 20rpx;
+
+		.listItem {
+			font-size: 30rpx;
+			color: $font-color-dark;
+			align-items: flex-start;
+		}
+
+		.itemBottom {
+			font-size: 24rpx;
+			color: $font-color-disabled;
+		}
+	}
+</style>

+ 199 - 0
pages/user/award/awardList.vue

@@ -0,0 +1,199 @@
+<template>
+	<view class="content">
+		<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+			<!-- 空白页 -->
+			<empty v-if="navList[0].loaded === true && navList[0].orderList.length === 0"></empty>
+			<!-- 订单列表 -->
+			<view class="momBox" v-for="(list, index) in navList[0].orderList" :key="index">
+				<view class="topMon">
+					<view>
+						<text class="mon">{{list.time}}</text>
+						<!-- <text class="font-size-sm margin-l-10">月</text> -->
+						<image class="iconRight margin-l-10" src="../../../static/icon/dom.png" mode="widthFix"></image>
+					</view>
+					<!-- <view class="textSm font-color-gray">
+						<text>支出:{{list.out}}</text>
+						<text class="margin-l-20">支出:{{list.get}}</text>
+					</view> -->
+				</view>
+				<view v-for="(item,index) in list.list" class="order-item flex">
+					<view class="title-box">
+						<view class="title">
+							<text>{{ item.title }}</text>
+						</view>
+						<view class="time">
+							<text>{{ item.add_time }}</text>
+						</view>
+					</view>
+					<view class="money">
+						<text>{{ (item.pm == 0 ? '-' : '+') + item.number }}</text>
+					</view>
+				</view>
+			</view>
+			<uni-load-more :status="navList[0].loadingType"></uni-load-more>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+	import {
+		spreadCommission,
+	} from '@/api/wallet.js';
+	import {
+		getMoneyStyle
+	} from '@/utils/rocessor.js';
+	export default {
+		filters: {
+			getMoneyStyle
+		},
+		data() {
+			return {
+				// 头部图高度
+				maxheight: '',
+				tabCurrentIndex: 0,
+				navList: [{
+					state: 3,
+					text: '全部',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}, ],
+				money: ''
+			};
+		},
+		onLoad(options) {},
+		onShow() {
+			this.loadData();
+		},
+		methods: {
+			// 页面跳转
+			navto(e) {
+				uni.navigateTo({
+					url: e
+				});
+			},
+			//获取收入支出信息
+			async loadData(source) {
+				//这里是将订单挂载到tab列表下
+				let index = this.tabCurrentIndex;
+				let navItem = this.navList[index];
+				let state = navItem.state;
+				if (source === 'tabChange' && navItem.loaded === true) {
+					//tab切换只有第一次需要加载数据
+					return;
+				}
+				if (navItem.loadingType === 'loading') {
+					//防止重复加载
+					return;
+				}
+				// 修改当前对象状态为加载中
+				navItem.loadingType = 'loading';
+
+				spreadCommission({
+							page: navItem.page,
+							limit: navItem.limit
+						},
+						state
+					)
+					.then(({
+						data
+					}) => {
+						if (data.length > 0) {
+							navItem.orderList = navItem.orderList.concat(data);
+							console.log(navItem.orderList);
+							navItem.page++;
+						}
+						if (navItem.limit == data.length) {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							navItem.loadingType = 'more';
+							return;
+						} else {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							navItem.loadingType = 'noMore';
+						}
+						uni.hideLoading();
+						this.$set(navItem, 'loaded', true);
+					})
+					.catch(e => {
+						console.log(e);
+					});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+	}
+
+	.money-box {
+		padding-top: var(--status-bar-height);
+		text-align: center;
+		color: $font-color-dark;
+		font-weight: bold;
+
+		.text {
+			padding-top: 85rpx;
+			font-size: 24rpx;
+		}
+
+		.money {
+			font-size: 60rpx;
+		}
+	}
+
+
+	// 列表
+	.order-item {
+		padding: 20rpx 30rpx;
+		line-height: 1.5;
+		border-bottom: 1px solid $page-color-light;
+		margin-left: 20rpx;
+		.title-box {
+			.title {
+				font-size: $font-lg;
+				color: $font-color-base;
+			}
+			.time {
+				font-size: $font-base;
+				color: $font-color-light;
+			}
+		}
+		.money {
+			font-size: $font-lg;
+		}
+	}
+
+	.list-scroll-content {
+		height: 100%;
+		padding-top: 30rpx;
+		.momBox{
+			background-color: #FFFFFF;
+			margin: $page-row-spacing;
+			margin-top: 0rpx;
+			border-radius: 20rpx;
+			overflow: hidden;
+			.topMon{
+				padding: 30rpx 20rpx;
+				border-bottom: 1px solid $page-color-light;
+				.iconRight{
+					width: 22rpx;
+				}
+				.mon{
+					font-size: 36rpx;
+					font-weight: 400;
+				}
+				.textSm{
+					color: $font-color-light;
+					font-size: 22rpx;
+				}
+			}
+		}
+	}
+
+	.content {
+		height: 100%;
+	}
+</style>

+ 361 - 0
pages/user/award/withdrawal.vue

@@ -0,0 +1,361 @@
+<template>
+	<view class="content">
+		<!-- <uni-notice-bar single="true" text="每月25号到月底可提现上月结算余额"></uni-notice-bar> -->
+		<view class="content-money">
+			<view class="flex ">
+				<view class="buttom">
+					<view class="icon">{{ money | getMoneyStyle }}</view>
+					<text class="text">可提现佣金</text>
+				</view>
+				<view class="interval"></view>
+				<view class="buttom">
+					<view class=" icon">{{ freeze | getMoneyStyle }}</view>
+					<text class="text">待审核提现佣金</text>
+				</view>
+			</view>
+		</view>
+		<view class="row-box">
+			<view class="title">提现金额</view>
+			<view class="row">
+				<text class="tit">¥</text>
+				<input class="input" type="number" v-model="withdrawal" :placeholder="'最低提现金额' + minPrice + '元'"
+					placeholder-class="placeholder" />
+				<view class="buttom" @click="withdrawal = money">全部提现</view>
+			</view>
+		</view>
+		<view class="list">
+			<radio-group @change="tabRadio">
+				<!-- <label>
+					<view class="box">
+						<view class="icon ">
+							<image class="icon-img" src="../../static/icon/orderWx.png" mode="scaleToFill"></image>
+						</view>
+						<view class="title-box">
+							<view class="title"><text>提现至微信</text></view>
+						</view>
+						<view class="right">
+							<radio value="weixin" color="#5dbc7c" :checked="type == 'weixin'" />
+						</view>
+					</view>
+				</label> -->
+				<label>
+					<view class="box">
+						<!-- <view class="icon iconfont iconzhifubao"></view> -->
+						<view class="icon ">
+							<image class="icon-img" src="../../../static/icon/orderAli.png" mode="scaleToFill"></image>
+						</view>
+						<view class="title-box">
+							<view class="title">
+								<text v-if="aliData.fullname">提现至支付宝</text>
+								<text v-else>请创建支付宝账号</text>
+							</view>
+							<view class="node">
+								<text v-if="aliData.fullname">真实姓名({{ aliData.fullname }})</text>
+							</view>
+						</view>
+						<view class="right">
+							<radio value="alipay" color="#5dbc7c" :checked="type == 'alipay'" />
+						</view>
+					</view>
+				</label>
+				<label>
+					<view class="box">
+						<view class="icon ">
+							<image class="icon-img" src="../../../static/icon/yh.png" mode="scaleToFill"></image>
+						</view>
+						<view class="title-box">
+							<view class="title">
+								<text v-if="bankData.bankno">{{ bankData.bank + ' ' + bankData.bankno }}</text>
+								<text v-else>请创建银行账号</text>
+							</view>
+							<view class="node">
+								<text v-if="bankData.fullname">真实姓名({{ bankData.fullname }})</text>
+							</view>
+						</view>
+						<view class="right">
+							<radio value="bank" color="#5dbc7c" :checked="type == 'bank'" />
+						</view>
+					</view>
+				</label>
+			</radio-group>
+		</view>
+		<button class="add-btn up" @click="confirm">提交申请</button>
+		<button class="add-btn modified" v-if="!weichatBsrowser" @click="navTo('./account')">账号管理</button>
+	</view>
+</template>
+
+<script>
+	import {
+		getMoneyStyle
+	} from '@/utils/rocessor.js';
+	import {
+		extractCash,
+		extractBank,
+		aliInfo,
+		bankInfo
+	} from '@/api/wallet.js';
+	export default {
+		filters: {
+			getMoneyStyle
+		},
+		data() {
+			return {
+				type: 'alipay', //提现方式
+				money: '0.00', //可提现金额
+				freeze: '0.0', //冻结金额
+				withdrawal: '', //提现金额
+				minPrice: '', //最少提现金额
+				aliData: {},
+				bankData: {},
+				// #ifdef H5
+				weichatBsrowser: false
+				// #endif
+			};
+		},
+		onLoad(options) {
+			// #ifdef H5
+			// this.weichatBsrowser = uni.getStorageSync('weichatBrowser');
+			// #endif
+			//加载提现信息
+			this.loadData();
+			// 加载提款账号信息
+			this.loadAli();
+			this.loadBank();
+		},
+		methods: {
+			// 更新数据
+			dataUp() {
+				this.loadAli();
+				this.loadBank();
+			},
+			//加载数据
+			async loadAli(source) {
+				aliInfo({}).then(e => {
+					this.aliData = e.data;
+				});
+			},
+			// 加载银行卡信息
+			async loadBank() {
+				bankInfo({}).then(e => {
+					this.bankData = e.data;
+				});
+			},
+			// 加载余额信息
+			async loadData() {
+				extractBank({}).then(({
+					data
+				}) => {
+					this.money = data.commissionCount;
+					this.minPrice = data.minPrice;
+					this.freeze = data.incommissionCount;
+				});
+			},
+			// 跳转
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				});
+			},
+			// 切换选中对象
+			tabRadio(e) {
+				this.type = e.detail.value;
+			},
+			// 提交
+			confirm() {
+				let data = {
+					extract_type: this.type, //bank -银行卡 alipay-支付宝 weixin-微信
+					money: this.withdrawal, //金额
+					money_type: 0 //0佣金1余额
+				};
+
+				if (this.withdrawal < this.minPrice) {
+					uni.showToast({
+						title: '提现金额不可少于' + this.minPrice,
+						duration: 2000,
+						mask: false,
+						icon: 'none',
+					})
+					return;
+				}
+				if (this.type == 'alipay') {
+					data.name = this.aliData.fullname;
+					data.alipay_code = this.aliData.alino;
+				}
+				if (this.type == 'bank') {
+					data.name = this.bankData.fullname;
+					data.bankname = this.bankData.bank;
+					data.cardnum = this.bankData.bankno;
+				}
+
+				extractCash(data)
+					.then(e => {
+						uni.showToast({
+							title: '提交成功',
+							duration: 2000,
+							position: 'top'
+						});
+					})
+					.catch(e => {
+						console.log();
+					});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+	}
+
+	.content-money {
+		padding: 30rpx 0;
+		background: #ffffff;
+	}
+
+	.flex {
+		background-color: #ffffff;
+		text-align: center;
+		margin: 0 30rpx;
+		border-radius: $border-radius-sm;
+
+		.buttom {
+			font-size: $font-lg;
+			width: 50%;
+		}
+
+		.interval {
+			width: 2px;
+			height: 60rpx;
+			background-color: #eeeeee;
+		}
+
+		.icon {
+			background-size: 100%;
+			font-size: 42rpx;
+			color: $font-color-dark;
+			font-weight: bold;
+			background-repeat: no-repeat;
+			background-position: center;
+		}
+
+		.text {
+			color: $font-color-light;
+		}
+	}
+
+	.row-box {
+		margin-top: 30rpx;
+		padding: 20rpx 30rpx;
+		background: #fff;
+
+		.title {
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+		}
+
+		.row {
+			display: flex;
+			align-items: center;
+			position: relative;
+			height: 80rpx;
+
+			.tit {
+				flex-shrink: 0;
+				width: 40rpx;
+				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;
+			}
+
+			.buttom {
+				color: $font-color-spec;
+				font-size: $font-base;
+			}
+		}
+	}
+
+	.add-btn {
+		&.modified {
+			color: $base-color;
+		}
+
+		&.up {
+			background-color: $base-color;
+			color: #fff;
+		}
+
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		width: 690rpx;
+		height: 80rpx;
+		margin: 0 auto;
+		margin-top: 30rpx;
+		font-size: $font-lg;
+		border-radius: 10rpx;
+		// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
+	}
+
+	.list {
+		padding-left: 30rpx;
+		margin-top: 30rpx;
+		background-color: #ffffff;
+
+		.box {
+			display: flex;
+			align-items: center;
+			width: 100%;
+			height: 120rpx;
+			border-bottom: 1px solid $border-color-light;
+
+			.icon {
+				font-size: 48rpx;
+				padding-right: 20rpx;
+
+				.icon-img {
+					height: 50rpx;
+					width: 50rpx;
+				}
+			}
+
+			.iconweixin1 {
+				color: #18bf16;
+			}
+
+			.iconzhifubao {
+				color: #08aaec;
+			}
+
+			.title-box {
+				flex-grow: 1;
+				text-align: left;
+
+				.title {
+					font-size: $font-base + 2rpx;
+					color: $font-color-base;
+				}
+
+				.node {
+					font-size: $font-sm;
+					color: $font-color-light;
+				}
+			}
+		}
+	}
+
+	/deep/ .uni-radio-input {
+		width: 45rpx;
+		height: 45rpx;
+	}
+</style>

+ 801 - 0
pages/user/model/model.vue

@@ -0,0 +1,801 @@
+<template>
+	<view class="content mone" v-if="baseURL">
+		<model :modelId='mtype' :templateData='userTemplate' :isShare='isShare' :isLook='isLook' :isDefault='isDefault'
+			:share-number='shareNumber'></model>
+		<view class="fxmp flex bottom" v-if="type==2">
+			<button class="share" type="default" open-type="share">
+				分享名片
+			</button>
+		</view>
+		<view class="fxmp flex bottom" v-if="type==3">
+			<button class="share" type="default" open-type="share">
+				分享名片
+			</button>
+			<view class="nav-model " @click="navto('/pages/user/model/modelrz?type=1&modelid=' + mtype)">
+				修改名片
+			</view>
+		</view>
+		<block v-if="type==0">
+			<view class="ljrz bottom" v-if="userInfo.work_type_id <=0"
+				@click="navto('/pages/user/model/modelrz?modelid=' + mtype + '&type=2')">
+				生成我的名片
+			</view>
+			<view v-else class="create-model flex bottom">
+				<view class="price-show">
+					模板费用:<text>{{modelInfo.price*1}}</text>
+				</view>
+				<view class="to-show" @click="preview">
+					模板预览
+				</view>
+				<view class="by-now" @click="gobuy">
+					立即使用
+				</view>
+			</view>
+		</block>
+		<view class="yl bottom" v-if="previewShow" @click="outPreview">
+			结束预览
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import {
+		getUserCardInfo,
+		getCommonUserCardInfo,
+		getShowTemplateItem,
+		subShowTemplateOrder
+	} from '@/api/model.js'
+	import {
+		getUser
+	} from '@/api/user.js';
+	import {
+		saveUrl,
+		interceptor
+	} from '@/utils/loginUtils.js';
+	import model from '@/pages/modelData/index.vue';
+	export default {
+		components: {
+			model
+		},
+		data() {
+			return {
+				mtype: 1, //modelid
+				shareId: '', //保存分享uid
+				// 默认显示数据
+				cardInfo: {},
+				// 是否显示默认
+				isDefault: true,
+				shareNumber: 0, //浏览量
+				userTemplate: {}, //用户展示数据
+				modelInfo: {}, //当前模板信息
+				payType: 'wxpay',
+				type: 0, //0为商品页面进入1为个人中心进入修改预览2为分享查看预览,3为已购模板进入查看分享
+				isShare: false, //是否显示分享按钮
+				isLook: 0, //1为平台浏览量2为用户浏览量0为不显示
+				previewShow: false, //是否显示预览
+			}
+		},
+		onLoad(opt) {
+
+			// #ifndef MP
+			if (opt.spread) {
+				// 存储其他邀请人
+				uni.setStorageSync('spread', opt.spread);
+			}
+
+			// #endif
+			// #ifdef MP
+			if (opt.scene) {
+				// 存储小程序邀请人
+				uni.setStorage({
+					key: 'spread_code',
+					data: opt.scene
+				});
+			}
+			uni.hideShareMenu();
+			// #endif
+
+			// 获取模板id
+			this.mtype = +opt.mtype
+			// 获取查看类型
+			this.type = +opt.type
+			// 是否首页进入
+			if (this.type === 0) {
+				this.isLook = 1;
+				this.getShowTemplateItem();
+				if (this.userInfo.uid) {
+					this.getCommonUserCardInfo(this.userInfo.uid);
+				}
+				return
+			}
+			//个人中心提交数据预览
+			if (this.type === 1) {
+				this.userTemplate = uni.getStorageSync('modeldata');
+				this.isDefault=false;
+				uni.setNavigationBarTitle({
+					title:'名片预览'
+				})
+				return
+			}
+			//分享预览
+			if (this.type === 2) {
+				console.log(opt.type, 'opt.type');
+				this.isLook = 2;
+				this.shareId = opt.uid
+				this.getCommonUserCardInfo(opt.uid);
+				return
+			}
+			//我的模板页进入预览
+			if (this.type === 3) {
+				console.log(opt.type, 'opt.type');
+				this.isShare = true;
+				this.isLook = 2;
+				this.shareId = this.userInfo.uid;
+				this.getCommonUserCardInfo(this.userInfo.uid);
+				return
+			}
+			// if(opt.look && opt.look == 2) {
+			// 	this.islook = opt.look
+			// 	this.cardInfo = uni.getStorageSync('modeldata')
+			// 	this.is_yl = true
+
+			// }else {
+			// 	if (opt.look && opt.look == 1) {
+			// 		uni.showShareMenu();
+			// 		this.look = false
+			// 	}
+			// 	if (opt.uid) {
+			// 		this.shareId = opt.uid
+			// 		this.getCommonUserCardInfo(opt.uid)
+			// 	} else {
+			// 		this.getShowTemplateItem()
+			// 	}
+			// }
+
+
+		},
+		computed: {
+			...mapState(['baseURL']),
+			...mapState('user', ['userInfo']),
+		},
+		onShow() {
+
+			// this.getUser()
+		},
+		// #ifdef MP
+		onShareAppMessage(options) {
+			// 设置菜单中的转发按钮触发转发事件时的转发内容
+			let pages = getCurrentPages(); //获取加载的页面
+			let currentPage = pages[pages.length - 1]; //获取当前页面的对象
+			let url = currentPage.route; //当前页面url
+			let item = currentPage.options; //如果要获取url中所带的参数可以查看options
+			let shareObj = {}
+			console.log(url,'url');
+			shareObj = {
+				title: this.userTemplate.name + '母婴界数字名片', // 默认是小程序的名称(可以写slogan等)
+				path: url + '?uid=' + this.shareId + '&mtype=' + this.mtype + '&type=2', // 默认是当前页面,必须是以‘/’开头的完整路径
+				imageUrl: '',
+				success: function(res) {
+					// 转发成功之后的回调
+					if (res.errMsg == 'shareAppMessage:ok') {}
+				},
+				fail: function() {
+					// 转发失败之后的回调
+					if (res.errMsg == 'shareAppMessage:fail cancel') {
+						// 用户取消转发
+					} else if (res.errMsg == 'shareAppMessage:fail') {
+						// 转发失败,其中 detail message 为详细失败信息
+					}
+				}
+			};
+			console.log(shareObj)
+			return shareObj;
+		},
+		// #endif
+		onUnload() {
+			let pages = getCurrentPages(); //获取加载的页面
+			let currentPage = pages[pages.length - 2]; //获取当前页面的对象
+			// console.log(currentPage.route)
+			if (currentPage.route == 'pages/public/wxLogin') {
+				uni.switchTab({
+					url: '/pages/index/index'
+				})
+			}
+		},
+		methods: {
+			...mapMutations('user', ['setUserInfo']),
+			// 模板预览
+			preview() {
+				if (!this.userInfo.uid) {
+					uni.showModal({
+						title: '提示',
+						content: '您未登录是否登录查看',
+						cancelText: '取消',
+						confirmText: '立即登录',
+						success: res => {
+							if (res.confirm) {
+								saveUrl();
+								interceptor();
+							}
+						},
+						fail: () => {},
+						complete: () => {}
+					});
+					return
+				}
+				// 判断是否显示默认数据
+				if (this.userTemplate.id) {
+					this.isDefault = false;
+				} else {
+					this.isDefault = true;
+				}
+				this.previewShow = true;
+
+				// 隐藏浏览数量
+				this.isLook = 0;
+			},
+			// 结束预览
+			outPreview() {
+				// 显示默认数据
+				this.isDefault = true;
+				this.previewShow = false;
+				if (this.type == 0) {
+					this.isLook = 1;
+					return
+				}
+				if (this.type == 3) {
+					this.isLook = 2;
+					return
+				}
+			},
+			// 监听web视图反馈
+			changeDate(base) {
+				console.log(base, 'mss');
+			},
+			navto(url) {
+				uni.navigateTo({
+					url
+				})
+			},
+			getUser() {
+				const that = this;
+				getUser({}).then((e) => {
+					that.setUserInfo(e.data)
+					if (e.data.work_type_id > 0 && that.shareId == '') {
+						that.getUserCardInfo()
+					} else {
+						that.cardInfo = {}
+					}
+				}).catch((e) => {})
+			},
+			gobuy() {
+				let that = this
+				subShowTemplateOrder({
+					id: that.mtype,
+					pay_type: that.payType
+				}).then(res => {
+					if (res.data.status == 1) {
+						uni.showModal({
+							title: '提示',
+							content: '支付成功!',
+							cancelText: '关闭',
+							confirmText: '查看模板',
+							success: res => {
+								if (res.confirm) {
+									uni.reLaunch({
+										url: '/pages/user/model/model?mtype=' +
+											that.mtype,
+									});
+								}
+							},
+							fail: () => {},
+							complete: () => {}
+						});
+					} else {
+						let da = res.data.jsApiParameters;
+						let data = {
+							appId: da.appId,
+							// #ifdef H5
+							timestamp: da.timeStamp,
+							// #endif
+							// #ifdef MP
+							timeStamp: da.timeStamp + '',
+							// #endif
+							nonceStr: da.nonceStr,
+							package: da.package,
+							signType: da.signType,
+							paySign: da.paySign,
+							success: function(res) {
+								// obj.paySuccessTo();
+								// alert('支付成功')
+								uni.showModal({
+									title: '提示',
+									content: '支付成功!',
+									cancelText: '关闭',
+									confirmText: '查看模板',
+									success: res => {
+										if (res.confirm) {
+											uni.reLaunch({
+												url: '/pages/user/model/model?mtype=' +
+													that.mtype,
+											});
+										}
+									},
+									fail: () => {},
+									complete: () => {}
+								});
+								console.log('支付成功')
+							},
+							fail: (err) => {
+								console.log(err)
+								// alert('支付失败')
+								// uni.navigateTo({
+								// 	url: '/pages/order/order?state=0'
+								// });
+							}
+						};
+						console.log(data, 'timeStamp')
+						if (that.payType == 'wxpay') {
+							console.log('到这里')
+							wx.requestPayment(data)
+						}
+					}
+
+				})
+			},
+			// 获取模板详情
+			getShowTemplateItem() {
+				let that = this
+				getShowTemplateItem({
+					id: that.mtype
+				}).then(res => {
+					that.modelInfo = res.data;
+					if (that.type == 0) {
+						uni.setNavigationBarTitle({
+							title:that.modelInfo.title
+						})
+						that.shareNumber = res.data.look_count
+					}
+				})
+			},
+			// 加载用户模板数据
+			getCommonUserCardInfo(uid) {
+				let that = this
+				getCommonUserCardInfo({
+					uid: uid
+				}).then(res => {
+					let arr = []
+					let basearr = res.data.service_area_all
+					basearr.forEach(item => {
+						arr.push(item[0].name + item[1].name + item[2].name)
+					})
+					res.data.service_area_all = arr
+					// 保存用户模板数据
+					that.userTemplate = res.data
+					// 判断是否从用户个人中心或者分享进入
+					if (that.type == 3 || that.type == 2) {
+						// 修改为非默认数据
+						that.isDefault = false;
+						that.shareNumber = res.data.card_look_count;
+						uni.setNavigationBarTitle({
+							title: this.userTemplate.name + '的分享名片'
+						})
+					}
+				})
+			},
+			getUserCardInfo() {
+				let that = this
+				getUserCardInfo().then(res => {
+					console.log(res)
+					let arr = []
+					let basearr = res.data.service_area_all
+					basearr.forEach(item => {
+						arr.push(item[0].name + item[1].name + item[2].name)
+					})
+					res.data.service_area_all = arr
+					that.cardInfo = res.data
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.bottom_padding {
+		height: 45px;
+		width: 100%;
+	}
+
+	.m-card {
+		width: 640rpx;
+		background: #fcf4f1;
+		border-radius: 20rpx;
+		position: relative;
+		// min-height: 270rpx;
+		margin: 0 auto 46rpx;
+
+		.card-tit {
+			width: 219rpx;
+			height: 57rpx;
+			background: #F46C85;
+			border-radius: 20rpx 28rpx 29rpx 0rpx;
+			justify-content: flex-start;
+			align-items: center;
+			padding: 0 20rpx;
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #FFFFFF;
+
+			.tit-logo {
+				width: 32rpx;
+				height: 32rpx;
+				margin-right: 18rpx;
+			}
+		}
+
+		.card-bg {
+			width: 100%;
+			height: 270rpx;
+			position: absolute;
+			bottom: 0rpx;
+		}
+
+		.card-content {
+			padding: 25rpx 35rpx;
+			font-size: 26rpx;
+			font-weight: 500;
+			color: #2C2E35;
+			position: relative;
+		}
+
+		.img-list {
+			justify-content: space-between;
+			flex-wrap: wrap;
+			margin: auto;
+			padding: 30rpx 30rpx 0;
+			position: relative;
+
+			image {
+				width: 270rpx;
+				height: 270rpx;
+				background-color: #fff;
+				margin-bottom: 30rpx;
+				box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.6);
+			}
+
+
+		}
+
+		.fw {
+			font-size: 26rpx;
+			font-weight: 500;
+			color: #2C2E35;
+			padding: 10rpx 0;
+
+			.fw-tit {
+				color: #F46C85;
+				display: flex;
+				align-items: center;
+
+				.yg {
+					background-color: #F46C85;
+					display: inline-block;
+					width: 10rpx;
+					height: 10rpx;
+					border-radius: 50%;
+					margin-right: 10rpx;
+				}
+			}
+
+			.fw-content {
+				padding-top: 10rpx;
+				padding-left: 18rpx;
+				text-align: justify;
+			}
+
+		}
+
+		.user-info {
+			flex-wrap: wrap;
+			font-size: 26rpx;
+			font-weight: 500;
+			color: #000000;
+			position: relative;
+
+			.info-item-b,
+			.info-item-q {
+				padding: 10rpx 0;
+				color: #000000;
+				position: relative;
+
+				padding-left: 20rpx;
+
+				&::before {
+					display: inline-block;
+					content: '';
+					width: 10rpx;
+					height: 10rpx;
+					border-radius: 50%;
+					background-color: #F46C85;
+					position: absolute;
+					top: 22rpx;
+					left: 0;
+				}
+
+				.qianger {
+					width: 2em;
+					display: inline-block;
+				}
+
+				.laner {
+					width: 0.5em;
+					display: inline-block;
+				}
+			}
+
+			.info-item-b {
+				width: 50%;
+			}
+
+			.info-item-q {
+				width: 100%;
+				display: flex;
+				align-items: flex-start;
+				justify-content: start;
+
+				.fwdz {
+					flex-direction: column;
+					align-items: flex-start;
+				}
+
+				.gzt {
+					width: 312rpx;
+					height: 24rpx;
+					padding-top: 10rpx;
+					position: relative;
+
+					image {
+						width: 312rpx;
+						height: 24rpx;
+						position: relative;
+					}
+
+					.gzt-price,
+					.gzt-price-b {
+						width: 200rpx;
+						text-align: center;
+						position: absolute;
+						padding-top: 20rpx;
+
+						&::after {
+							content: '';
+							width: 0px;
+							height: 0rpx;
+							// background: #FEB8C6;
+							border: 14rpx solid;
+							border-color: transparent transparent #FEB8C6;
+							// border-top:transparent;
+							// border-left: transparent;
+							// border-right: transparent;
+							position: absolute;
+							top: -14rpx;
+							left: 0;
+							right: 0;
+							margin: auto;
+						}
+
+						text {
+							color: #F46C85;
+						}
+					}
+
+					.gzt-price {
+						left: -100rpx;
+					}
+
+					.gzt-price-b {
+						right: -100rpx;
+					}
+				}
+
+				.rz {
+					margin-top: 10rpx;
+					margin-left: 10rpx;
+					width: 87rpx;
+					height: 26rpx;
+				}
+			}
+		}
+	}
+
+	.m-btm {
+		width: 660rpx;
+		height: 384rpx;
+	}
+
+	.hua2 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 199rpx;
+			height: 298rpx;
+			background: url($base-url + '/resource/icon/model1/hua2.png') no-repeat;
+			position: absolute;
+			bottom: -100rpx;
+			right: 0;
+			background-size: 100% 100%;
+		}
+	}
+
+	.hua3 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 192rpx;
+			height: 223rpx;
+			background: url($base-url + '/resource/icon/model1/hua3.png') no-repeat;
+			position: absolute;
+			top: 0;
+			bottom: 0;
+			left: 0;
+			margin: auto;
+			background-size: 100% 100%;
+		}
+	}
+
+	.hua4 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 128rpx;
+			height: 145rpx;
+			background: url($base-url + '/resource/icon/model1/hua4.png') no-repeat;
+			position: absolute;
+			bottom: -70rpx;
+			right: 0;
+			background-size: 100% 100%;
+		}
+	}
+
+	.hua5 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 199rpx;
+			height: 298rpx;
+			background: url($base-url + '/resource/icon/model1/hua2.png') no-repeat;
+			position: absolute;
+			bottom: -100rpx;
+			left: 0;
+			background-size: 100% 100%;
+			transform: rotateY(180deg);
+		}
+	}
+
+	.hua6 {
+		position: relative;
+
+		&::before {
+			content: '';
+			width: 192rpx;
+			height: 223rpx;
+			background: url($base-url + '/resource/icon/model1/hua3.png') no-repeat;
+			position: absolute;
+			bottom: -110rpx;
+			right: 0;
+			background-size: 100% 100%;
+			transform: rotateY(180deg);
+		}
+	}
+
+
+	.fxmp {
+		width: 750rpx;
+		
+		.share {
+			width: 50%;
+			padding: 0;
+			border-radius: 0;
+			flex-grow: 1;
+			background-color: $base-color;
+			color: #fff;
+			font-size: 32rpx;
+			&::after {
+				border: none;
+			}
+		}
+
+		.nav-model {
+			background-color: #FFF;
+			color: $base-color;
+			width: 50%;
+		}
+	}
+
+	.fxmp {
+		position: fixed;
+		width: 750rpx;
+		bottom: 0;
+		padding: 0;
+		background: #f65486;
+		// border-radius: 5rpx;
+		font-size: 30rpx;
+		font-weight: 500;
+		color: #FFFFFF;
+		text-align: center;
+	}
+
+	.create-model {
+		position: fixed;
+		width: 750rpx;
+		bottom: 0;
+		// border-radius: 5rpx;
+		font-size: 32rpx;
+		font-weight: 500;
+		text-align: center;
+
+		.price-show {
+			font-size: 32rpx;
+			font-weight: 500;
+			color: #333333;
+			background-color: #fff;
+			flex-grow: 1;
+
+			text {
+				font-size: 48rpx;
+				font-weight: 500;
+				color: #FC6F6D;
+			}
+		}
+
+		.to-show,
+		.by-now {
+			width: 223rpx;
+			background: #fa98b6;
+			flex-shrink: 0;
+			font-size: 34rpx;
+			color: #fff;
+		}
+
+		.by-now {
+			background: #f65486;
+		}
+	}
+
+	.yl {
+		position: fixed;
+		bottom: 0;
+		width: 750rpx;
+		font-size: 32rpx;
+		font-weight: 500;
+		text-align: center;
+		color: #fff;
+		text-align: center;
+		font-size: 34rpx;
+		background-color: #f65486;
+	}
+
+	.ljrz {
+		position: fixed;
+		width: 750rpx;
+		bottom: 0;
+		font-size: 32rpx;
+		font-weight: 500;
+		text-align: center;
+		background-color: #f65486;
+		color: #fff;
+	}
+
+	.bottom {
+		line-height: 45px;
+		height: 45px;
+	}
+</style>

+ 193 - 0
pages/user/model/modelList.vue

@@ -0,0 +1,193 @@
+<template>
+	<view class="indexBox">
+		<view class="hot-list-box">
+			<view class="list-box">
+				<view class="list" v-for="(item,index) in navList.orderList">
+					<view class="list-image-box">
+						<image class="list-image" :src="item.img" mode="widthFix"></image>
+					</view>
+					<view class="list-content">
+						<view class="list-title clamp">
+							{{item.title}}
+						</view>
+						<view class="list-money flex flex-start">
+							<view class="money">
+								¥{{item.price}}
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<uni-load-more :status="navList.loadingType"></uni-load-more>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import {
+		share
+	} from '@/api/wx';
+	import {
+		getBannerList,
+		getShowTemplateList
+	} from '@/api/model.js';
+	export default {
+		data() {
+			return {
+				ishot:0,//判断是否热门
+				isrecommend:0,//判断是否推荐
+				// 商品列表
+				navList: {
+					state: 1,
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10, //每次信息条数
+					count: 0, //总消息条数
+				},
+			};
+		},
+		onLoad: function(option) {
+			if(option.isrecommend){
+				uni.setNavigationBarTitle({
+					title:'精品推荐'
+				})
+				this.isrecommend = option.isrecommend
+			}else if(option.ishot){
+				uni.setNavigationBarTitle({
+					title:'热门装扮'
+				})
+				this.ishot = option.ishot
+			}
+			this.getShowTemplateList();
+		},
+		// 滚动到底部
+		onReachBottom() {
+			this.getShowTemplateList();
+		},
+		methods: {
+			// 获取模板列表
+			getShowTemplateList(source) {
+				//这里是将订单挂载到tab列表下
+				let navItem = this.navList;
+				let state = navItem.state;
+				if (source === 'tabChange' && navItem.loaded === true) {
+					//tab切换只有第一次需要加载数据
+					return;
+				}
+				if (navItem.loadingType === 'loading') {
+					//防止重复加载
+					return;
+				}
+				if (navItem.loadingType === 'noMore') {
+					//防止重复加载
+					return;
+				}
+				// 修改当前对象状态为加载中
+				navItem.loadingType = 'loading';
+				getShowTemplateList({
+						is_recommend: this.isrecommend,
+						is_hot: this.ishot,
+						page: navItem.page,
+						pageSize: navItem.limit
+					})
+					.then(({
+						data
+					}) => {
+						let arr = data.list.map(e => {
+							return e;
+						});
+						navItem.orderList = navItem.orderList.concat(arr);
+						navItem.page++;
+						if (navItem.limit == arr.length) {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							navItem.loadingType = 'more';
+							return;
+						} else {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							navItem.loadingType = 'noMore';
+						}
+						uni.hideLoading();
+						this.$set(navItem, 'loaded', true);
+					})
+					.catch(e => {
+						console.log(e);
+					});
+
+			},
+			navTo(url) {
+				if (url) {
+					if (url.indexOf('http') > -1) {
+						// #ifdef H5
+						window.location.href = url
+						// #endif
+						// #ifdef APP
+						plus.runtime.openURL(url)
+						// #endif
+					} else {
+						uni.navigateTo({
+							url: url
+						})
+					}
+				}
+			}
+		},
+	};
+</script>
+
+<style lang="scss">
+	page,
+	.indexBox {
+		height: auto;
+		min-height: 100%;
+	}
+
+	.hot-list-box {
+		padding: $page-row-spacing;
+		padding-bottom: 0;
+
+		.list-box {
+			display: flex;
+			flex-wrap: wrap;
+			justify-content: space-between;
+			align-items: flex-start;
+			padding-bottom: 20rpx;
+
+			.list {
+				box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
+				border-radius: 15rpx;
+
+				.list-image-box {
+					width: 330rpx;
+					height: 420rpx;
+					overflow: hidden;
+
+					.list-image {
+						width: 100%;
+					}
+				}
+
+				.list-content {
+					padding: 20rpx;
+					line-height: 1;
+					.list-title {
+						color: $font-color-dark;
+						font-size: $font-base;
+						margin-bottom: 20rpx;
+					}
+
+					.list-money {
+						.money {
+							font: $font-lg;
+							color: #FF3342;
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 963 - 0
pages/user/model/modelrz.vue

@@ -0,0 +1,963 @@
+<template>
+	<view class="content ">
+
+		<view class="item-name">
+			上传头像
+		</view>
+		<view class="con_box">
+			<view class="con_image">
+				<image class="img" @click="navCroper(400,400,'one')"
+					:src="updata.avatar||`../../../static/image/upImg.png`">
+				</image>
+			</view>
+		</view>
+		<view class="item-name">
+			基本信息
+		</view>
+		<view class="listBox">
+			<view class="list">
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="font-color-red font-size-sm">✲</text> <text class="title">真实姓名</text>
+					</view>
+					<view class="right flex">
+						<input class="input" v-model="updata.name" type="text" placeholder="请填写真实姓名"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="font-color-red font-size-sm">✲</text><text class="title">手机号</text>
+					</view>
+					<view class="right flex">
+						<input class="input" v-model="updata.phone" type="text" placeholder="请填写手机号"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="font-color-red font-size-sm">✲</text><text class="title">身份证号</text>
+					</view>
+					<view class="right flex">
+						<input class="input" v-model="updata.cardId" type="text" placeholder="请填写身份证号"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">从业时长</text>
+					</view>
+					<view class="right flex">
+						<input class="input" v-model="updata.work_year" type="number" placeholder="请填写从业时长"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">籍贯</text>
+					</view>
+					<view class="right flex">
+						<pickerAddress @change="changeAncestralPlace">
+							{{
+								updata.ancestral_place||'请选择籍贯'
+							}}
+						</pickerAddress>
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">学历</text>
+					</view>
+					<view class="right flex">
+						<picker class="input" :range='educationList' mode="selector" @change="changeEducation">
+							<view>
+								{{updata.education||'选择学历'}}
+							</view>
+						</picker>
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">民族</text>
+					</view>
+					<view class="right flex">
+						<input class="input" v-model="updata.minority" type="text" placeholder="请填写民族"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<!-- <view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">出生日期</text>
+					</view>
+					<view class="right flex">
+						<picker class="input" value='2000-01-01' mode="date" @change="changetime">
+							<view>
+								{{updata.time||'请选择日期'}}
+							</view>
+						</picker>
+					</view>
+				</view> -->
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="font-color-red font-size-sm">✲</text><text class="title">职业</text>
+					</view>
+					<view class="right flex">
+						<picker class="input" :range='workTypeList' range-key='title' mode="selector"
+							@change="changeWorkType">
+							<view>
+								{{updata.word.title||'选择职业'}}
+							</view>
+						</picker>
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="font-color-red font-size-sm">✲</text><text class="title">收费类型</text>
+					</view>
+					<view class="right flex">
+						<picker class="input" :value="updata.timetype.ind" :range='timeTypeList' range-key='title'
+							mode="selector" @change="changetimetype">
+							<view>
+								{{updata.timetype.title||'收费时间类型'}}
+							</view>
+						</picker>
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="font-color-red font-size-sm">✲</text><text class="title">最低价</text>
+					</view>
+					<view class="right flex">
+						<input class="input" v-model="updata.minMoney" type="number" placeholder="请输入最低收费价"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="font-color-red font-size-sm">✲</text><text class="title">最高价</text>
+					</view>
+					<view class="right flex">
+						<input class="input" v-model="updata.maxMoney" type="number" placeholder="请输入最高收费价"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="font-color-red font-size-sm">✲</text><text class="title">服务次数</text>
+					</view>
+					<view class="right flex">
+						<input class="input" v-model="updata.service_count" type="number" placeholder="请输入最低收费价"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="font-color-red font-size-sm">✲</text><text class="title">服务区域</text>
+					</view>
+					<view class="right">
+						<view class="citylist">
+							<view class="flex margin-b-20" v-for="(item,ind) in updata.onCity" :key="ind">
+								<view></view>
+								<view>
+									{{item.province+item.city+item.district}}
+									<text class="margin-l-10 del" @click="updata.onCity.splice(ind,1)">
+										删除
+									</text>
+								</view>
+							</view>
+							<view class="flex">
+								<view></view>
+								<pickerAddress class="buttom" @change="onCityClick">添加地区</pickerAddress>
+							</view>
+						</view>
+
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="font-color-red font-size-sm">✲</text><text class="title">服务内容</text>
+					</view>
+					<view class="right">
+						<checkbox-group @change="checkTypeChange">
+							<label class="flex timetype margin-b-10" v-for="(item,ind) in typeList" :key="item.id">
+								<view class="margin-r-10">{{item.title}}</view>
+								<view>
+									<checkbox :value="`${item.id}`" :checked="item.checked" />
+								</view>
+							</label>
+						</checkbox-group>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="item-name">
+			自我展示
+		</view>
+		<view class="listBox">
+			<view class="list">
+				<view class="listItem">
+					<textarea class="textarea" auto-height :maxlength='-1' v-model="updata.mymask" type="text" placeholder="自我评价\n\n本人从业***年,已经服务***名客户\n成长经历:\n从事母婴工作之前是做***行业的,于***年经过专业培训后进入母婴行业;先后学习了***\n性格特征:\n本人性格直爽,具有很强的服务意识,做事认真负责,擅长……类工作\n服务格言:\n全心全意服务好每一位客户"	placeholder-class="textareaplaceholder" />
+				</view>
+			</view>
+			<view class="con_box">
+				<view class="con_image" v-for="(item,ind) in updata.imageList">
+					<image class="img" @click="navCroper(400,400,'tab',ind)" :src="item"></image>
+					<image @click="updata.imageList.splice(ind,1)" class="tip" src="../../../static/icon/goodsExit.png"
+						mode="scaleToFill"></image>
+				</view>
+				<view class="con_image">
+					<image class="img" @click="navCroper(400,400,'all')" src="../../../static/image/upImg.png"></image>
+				</view>
+			</view>
+		</view>
+		<view class="item-name">
+			我的证书
+		</view>
+		<view class="listBox">
+			<view class="con_box">
+				<view class="con_image" v-for="(item,ind) in updata.service_audit_imgs">
+					<image class="img" @click="navCroper(400,400,'audit',ind)" :src="item"></image>
+					<image @click="updata.service_audit_imgs.splice(ind,1)" class="tip"
+						src="../../../static/icon/goodsExit.png" mode="scaleToFill"></image>
+				</view>
+				<view class="con_image">
+					<image class="img" @click="navCroper(400,400,'auditall')" src="../../../static/image/upImg.png">
+					</image>
+				</view>
+			</view>
+		</view>
+		<view class="item-name">
+			服务展示
+		</view>
+		<view class="listBox">
+			<view class="con_box">
+				<view class="con_image" v-for="(item,ind) in updata.service_imgs">
+					<image class="img" @click="navCroper(400,400,'service',ind)" :src="item"></image>
+					<image @click="updata.service_imgs.splice(ind,1)" class="tip"
+						src="../../../static/icon/goodsExit.png" mode="scaleToFill"></image>
+				</view>
+				<view class="con_image">
+					<image class="img" @click="navCroper(400,400,'serviceall')" src="../../../static/image/upImg.png">
+					</image>
+				</view>
+			</view>
+		</view>
+		<view class="base-buttom flex">
+			<view class="updata flex flex-center" :class="{ 'bg-gray': loding }" @click="loding ? '' : confirm()">
+				提交
+			</view>
+			<view class="ylan flex flex-center" @click="look">
+				预览
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getServiceTimeTypeList,
+		getServiceTypeList,
+		subInfoAudit,
+		getUserWorkTypeList,
+		getUserCardInfo
+	} from '@/api/model.js';
+	import {
+		isCardNo
+	} from '@/utils/rocessor.js';
+	import {
+		getAstro,
+		getShengXiao,
+		IdCard
+	} from '@/utils/twelve.js';
+	import {
+		mapState
+	} from "vuex"
+
+	import pickerAddress from '@/components/wangding-pickerAddress/wangding-pickerAddress.vue';
+
+	export default {
+		components: {
+			pickerAddress
+		},
+		data() {
+			return {
+				// 上传数据
+				updata: {
+					avatar: '', //用户头像
+					name: '', //用户名称
+					phone: '', //手机号
+					cardId: '', //身份证号
+					minMoney: '', //最低价
+					maxMoney: '', //最高价
+					checkedType: [], //选中的服务类型
+					time: '', //出生日期
+					timetype: {
+						title: '',
+						code: '',
+						ind: 0 //默认0
+					}, //选中的时间类型
+					onCity: [], //选中的城市
+					mymask: '', //自评
+					imageList: [], //自评上传图片列表
+					ancestral_place: '', //籍贯
+					education: '', //学历
+					minority: '', //民族
+					work_year: '', //从业时长
+					word: {
+						title: '',
+						id: ''
+					},
+					service_audit_imgs: [], //我的证书
+					service_imgs: [], //服务展示
+					no:''
+				},
+				typeList: [], //服务类型
+				timeTypeList: [], //时间类型
+				workTypeList: [], //工作类型
+				loding: false, //是否载入中
+				type: 0, //0为新增,1为修改2为商品页进入注册
+				userModelData: {}, //保存获取的用户模板
+				modelid: '', //保存要预览的模板id
+				educationList: ['小学', '初中', '高中', '大专', '本科', '研究生', '博士'] //学历列表
+			};
+		},
+		async onLoad(options) {
+			this.modelid = options.modelid
+			if (options.type == 1) {
+				this.type = 1;
+				await this.getUserCardInfo()
+			} else if (options.type == 2) {
+				this.type = 0
+			}
+			this.init()
+		},
+		computed: {
+			// #ifdef H5
+			...mapState(['urlFile']),
+			// #endif
+			...mapState(['baseURL']),
+		},
+		methods: {
+			// 选择学历
+			changeEducation(res) {
+				this.updata.education = this.educationList[res.detail.value];
+				console.log(res);
+			},
+			// 初始化
+			init() {
+				const that = this;
+				getServiceTimeTypeList().then(
+					(res) => {
+						that.timeTypeList = res.data.list.map((arr) => {
+							return arr
+						})
+						if (that.type == 0) {
+							that.updata.timetype = that.timeTypeList[0];
+						} else
+						if (that.type == 1) {
+							for (let i = 0; i < that.timeTypeList.length; i++) {
+								if (that.timeTypeList[i].code == that.userModelData.service_type) {
+									that.updata.timetype = that.timeTypeList[i]
+									that.updata.timetype.ind = i;
+									break
+								}
+							}
+						}
+					}
+				).catch(
+					(res) => {
+						console.log(res);
+					}
+				)
+				getServiceTypeList().then(
+					(res) => {
+						that.typeList = res.data.list
+						if (that.type == 1) {
+							for (let i = 0; i < that.userModelData.service_project_ar.length; i++) {
+								for (let a = 0; a < that.typeList.length; a++) {
+									if (+that.typeList[a].id == +that.userModelData.service_project_ar[i].id) {
+										that.typeList[a].checked = true;
+										that.updata.checkedType.push('' + that.typeList[a].id)
+									}
+								}
+							}
+						}
+						console.log(res, '服务');
+					}
+				).catch(
+					(res) => {
+						console.log(res);
+					}
+				)
+				getUserWorkTypeList().then(
+					(res) => {
+						console.log(res);
+						that.workTypeList = res.data.list
+						if (that.type == 0) {
+							that.updata.word = that.workTypeList[0];
+						} else if (that.type == 1) {
+							for (let i = 0; i < that.workTypeList.length; i++) {
+								console.log(that.userModelData.user_work_type_id, 'word', that.workTypeList[i].id);
+								if (that.workTypeList[i].id == that.userModelData.user_work_type_id) {
+									that.updata.word = that.workTypeList[i];
+									break
+								}
+							}
+						}
+					}
+				).catch(
+					(res) => {
+						console.log(res);
+					}
+				)
+			},
+			// 跳转查看预览页面
+			look() {
+				const that = this;
+				if (!that.rendl()) {
+					return
+				}
+				// 获取生日
+				const birthday = IdCard('' + that.updata.cardId, 1);
+				// 复制选中的服务数组
+				let arr = [...that.updata.checkedType]
+				let pushar = [];
+				that.typeList.forEach(
+					(re) => {
+						for (let i = 0; i < arr.length; i++) {
+							console.log(arr[i], '循环');
+							if (+arr[i] == +re.id) {
+								// 删除已选中的对象
+								arr.splice(i, 1)
+								pushar.push(re)
+								break
+							}
+						}
+					}
+				)
+				console.log(that.updata);
+				let data = {
+					name: that.updata.name,
+					avatar: that.updata.avatar,
+					age: IdCard(that.updata.cardId, 3),
+					twelve: getShengXiao(birthday),
+					work_year: that.updata.work_year,
+					constellation: getAstro(...(birthday.split('-'))),
+					ancestral_place: that.updata.ancestral_place,
+					minority: that.updata.minority,
+					education: that.updata.education,
+					service_area_all: that.updata.onCity.map(
+						(item) => {
+							return item.province + item.city + item.district
+						}
+					),
+					service_min_price: that.updata.minMoney,
+					service_max_price: that.updata.maxMoney,
+					service_time_type_title: that.updata.timetype.title,
+					service_intro_content: that.updata.mymask,
+					service_intro_imgs: that.updata.imageList,
+					service_audit_imgs: that.updata.service_audit_imgs,
+					service_project_ar: pushar,
+					service_imgs:that.updata.service_imgs,
+					no:that.updata.no,
+					user_work_type_title:that.updata.word.title,
+					service_count:that.updata.service_count
+				}
+				console.log('baocun');
+				uni.setStorageSync('modeldata', data)
+				uni.navigateTo({
+					url: '/pages/user/model/model?mtype=' + that.modelid + '&type=1'
+				})
+			},
+			// 获取用户提交数据
+			getUserCardInfo() {
+				const that = this;
+				return new Promise((resolve, reject) => {
+					getUserCardInfo().then(
+						(data) => {
+							const res = data.data;
+							console.log(res,'返回');
+							// 存储返回用户数据
+							that.userModelData = res;
+							that.updata = Object.assign(that.updata, {
+								avatar: res.avatar, //用户头像
+								name: res.name, //用户名称
+								phone: res.mobile, //手机号
+								cardId: res.idcard, //身份证号
+								minMoney: res.service_min_price, //最低价
+								maxMoney: res.service_max_price, //最高价
+								time: res.birthday, //出生日期
+								onCity: res.service_area_all.map((arr) => {
+									return {
+										province: arr[0].name,
+										city: arr[1].name,
+										district: arr[2].name
+									}
+								}), //选中的城市
+								mymask: res.service_intro_content, //自评
+								imageList: res.service_intro_imgs, //自评上传图片列表
+								ancestral_place: res.ancestral_place, //籍贯
+								education: res.education, //学历
+								minority: res.minority, //民族
+
+								work_year: res.work_year, //从业时长
+								service_audit_imgs: res.service_audit_imgs, //我的证书
+								service_imgs: res.service_imgs, //服务展示
+								no:res.no,
+								service_count:res.service_count
+							})
+							console.log(that.updata, 'that.updata');
+							resolve('初始化数据成功')
+						}
+					).catch(
+						(res) => {
+							reject(res)
+						}
+					)
+				})
+
+			},
+			// 选中的服务类型
+			checkTypeChange(type) {
+				this.updata.checkedType = type.detail.value;
+				console.log(type)
+			},
+			// 选中的工作类型
+			changeWorkType(type) {
+				this.updata.word = this.workTypeList[type.detail.value];
+				console.log(this.updata.word)
+			},
+			// 选择时间类型
+			changetimetype(res) {
+				this.updata.timetype = this.timeTypeList[res.detail.value];
+			},
+			// 时间选择
+			changetime(time) {
+				this.updata.time = time.detail.value;
+				console.log(time);
+			},
+			// 选择籍贯
+			changeAncestralPlace({
+				data
+			}) {
+				this.updata.ancestral_place = data[2];
+			},
+			// 选择省市区
+			onCityClick({
+				data
+			}) {
+				let address = {};
+				address.province = data[0];
+				address.city = data[1];
+				address.district = data[2];
+				this.updata.onCity.push(address)
+				console.log(this.onCity, 'cs');
+			},
+			upLoad(path) {
+				// #ifdef H5
+				console.log(path, 'h5');
+				// #endif
+				uni.showLoading({
+					title: '图片上传中',
+					mask: true
+				});
+				return new Promise((resolve, error) => {
+					uni.uploadFile({
+						url: this.baseURL + '/api/user/qiniuUpload', //仅为示例,非真实的接口地址
+						filePath: path,
+						name: 'file',
+						header: {
+							"token": uni.getStorageSync('token')
+						},
+						success: (uploadFileRes) => {
+							if ("string" === typeof uploadFileRes.data) {
+								resolve(JSON.parse(uploadFileRes.data).data)
+							} else {
+								resolve(uploadFileRes.data.data)
+							}
+						},
+						complete() {
+							uni.hideLoading()
+						}
+					});
+				})
+			},
+			// 图片裁切
+			/**
+			 * @param {Number} w 裁切宽度比例
+			 * @param {Number} h 裁切高度比例
+			 * @param {Number} mw 图片最小宽度
+			 * @param {Number} mh 图片最小高度
+			 * @param {String} url url修改
+			 */
+			navCroper(w, h, type, ind) {
+				let that = this;
+				let tt = (type == 'upimg' ? 2 : 1)
+				this.onImg(tt).then((url) => {
+					uni.navigateTo({
+						url: `../realName/cropper?width=${w}&height=${h}`,
+						events: {
+							uploadSuccess(res) {
+								that.upLoad(res).then((urldata) => {
+									console.log(urldata);
+									if (type == 'one') {
+										that.updata.avatar = urldata.img
+									} else if (type == 'all') {
+										that.updata.imageList.push(urldata.img)
+									} else if (type == 'tab') {
+										that.updata.imageList.splice(ind, 1, urldata.img)
+									} else if (type == 'audit') {
+										that.updata.service_audit_imgs.splice(ind, 1, urldata.img)
+									} else if (type == 'auditall') {
+										that.updata.service_audit_imgs.push(urldata.img)
+									} else if (type == 'service') {
+										that.updata.service_imgs.splice(ind, 1, urldata.img)
+									} else if (type == 'serviceall') {
+										that.updata.service_imgs.push(urldata.img)
+									}
+								})
+							}
+						},
+						success: function(res) {
+							// 通过eventChannel向被打开页面传送数据
+							res.eventChannel.emit('urlNext', {
+								url
+							})
+						}
+					})
+				})
+			},
+			onImg(type) {
+				const _this = this
+				return new Promise((ok, erro) => {
+					// 判断是否需要选择
+					if (type == 1) {
+						uni.showActionSheet({
+							itemList: ['拍照', '选择一张照片'],
+							success: function(res) {
+								_this.chooseImage(res.tapIndex).then((url) => {
+									ok(url)
+								}).catch((res) => {
+									erro(res)
+								})
+							},
+							fail: function(res) {
+								erro(res)
+								console.log(res.errMsg);
+							}
+						});
+					}
+					// 判断是否只需要拍照
+					if (type == 2) {
+						_this.chooseImage(0).then((url) => {
+							ok(url)
+						}).catch((res) => {
+							erro(res)
+						})
+					}
+				})
+
+			},
+			chooseImage: function(index) {
+				const _this = this
+				return new Promise((ok, error) => {
+					// 从相册/相机选择
+					// 如需直接开相机或直接选相册,请只使用一个选项
+					const sourceType = index === 0 ? ['camera'] : ['album']
+					uni.chooseImage({
+						count: 1, //默认9
+						sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+						sourceType: sourceType,
+						success: function(res) {
+							ok(res.tempFilePaths[0])
+						},
+						fail(e) {
+							uni.showModal({
+								title: '文件打开错误',
+								content: '请设置授权文件存储权限',
+								showCancel: false,
+							});
+							error(e)
+						}
+					});
+				})
+			},
+			// 实名认证
+			confirm(e) {
+				const that = this;
+				if (!that.rendl()) {
+					return
+				}
+				that.loding = true;
+				subInfoAudit({
+						avatar: that.updata.avatar,
+						name: that.updata.name,
+						mobile: that.updata.phone,
+						idcard: that.updata.cardId,
+						service_type: that.updata.timetype.code,
+						service_min_price: that.updata.minMoney,
+						service_max_price: that.updata.maxMoney,
+						service_area: that.updata.onCity.map((item) => {
+							return item.province +','+item.city+','+item.district;
+						}),
+						service_project: that.updata.checkedType,
+						service_intro_content: that.updata.mymask,
+						service_intro_imgs: that.updata.imageList,
+						work_year: that.updata.work_year,
+						ancestral_place: that.updata.ancestral_place,
+						education: that.updata.education,
+						minority: that.updata.minority,
+						service_audit_imgs: that.updata.service_audit_imgs,
+						service_imgs: that.updata.service_imgs,
+						user_work_type_id: that.updata.word.id,
+						service_count:that.updata.service_count
+					})
+					.then((e) => {
+						that.loding = false;
+						this.$api.msg(e.msg);
+					})
+					.catch(err => {
+						this.loding = false;
+						console.log(err);
+					});
+			},
+			// 认证
+			rendl() {
+				const that = this;
+				if (!that.updata.avatar) {
+					uni.showModal({
+						title: '错误',
+						content: '请上传头像',
+						showCancel: false,
+					});
+					return false
+				}
+
+				if (!that.updata.name) {
+					uni.showModal({
+						title: '错误',
+						content: '请填写姓名',
+						showCancel: false,
+					});
+					return false
+				}
+				if (!that.updata.cardId) {
+					uni.showModal({
+						title: '错误',
+						content: '请填写身份证号',
+						showCancel: false,
+					});
+					return
+				} else if (!isCardNo(that.updata.cardId)) {
+					uni.showModal({
+						title: '错误',
+						content: '请填写正确的身份证号',
+						showCancel: false,
+					});
+					return false
+				}
+				if (!that.updata.phone) {
+					uni.showModal({
+						title: '错误',
+						content: '请填写手机号',
+						showCancel: false,
+					});
+					return false
+				}
+				if (!that.updata.timetype.code) {
+					uni.showModal({
+						title: '错误',
+						content: '请选择收费时间类型',
+						showCancel: false,
+					});
+					return false
+				}
+				if (!that.updata.minMoney) {
+					uni.showModal({
+						title: '错误',
+						content: '请填写最低收费价',
+						showCancel: false,
+					});
+					return false
+				}
+				if (!that.updata.maxMoney) {
+					uni.showModal({
+						title: '错误',
+						content: '请填写最高收费价',
+						showCancel: false,
+					});
+					return false
+				}
+				if (that.updata.onCity.length == 0) {
+					uni.showModal({
+						title: '错误',
+						content: '请选择服务区域',
+						showCancel: false,
+					});
+					return false
+				}
+				if (that.updata.checkedType.length == 0) {
+					uni.showModal({
+						title: '错误',
+						content: '请选择服务内容',
+						showCancel: false,
+					});
+					return false
+				}
+				return true
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.content,
+	page {
+		min-height: 100%;
+	}
+
+	.content {
+		padding-bottom: 150rpx;
+	}
+
+	.item-name {
+		margin: $page-row-spacing;
+		font-size: $font-lg;
+		font-weight: bold;
+		color: $font-color-dark;
+	}
+
+	.con_box {
+		margin: $page-row-spacing;
+
+		.con_image {
+			width: 150rpx;
+			height: 150rpx;
+			display: inline-block;
+			margin-right: 20rpx;
+			position: relative;
+
+			.img {
+				width: 100%;
+				height: 100%;
+			}
+
+			.tip {
+				position: absolute;
+				top: -10rpx;
+				right: -10rpx;
+				width: 30rpx;
+				height: 30rpx;
+				background-color: #FFF;
+				border-radius: 99rpx;
+			}
+		}
+	}
+
+	.listBox {
+		margin: $page-row-spacing;
+		margin-top: 30rpx;
+		border-radius: 20rpx;
+		overflow: hidden;
+		background-color: #FFFFFF;
+	}
+
+	.list {
+		.input {
+			text-align: right;
+			font-size: $font-base;
+			color: $color-gray;
+			width: 100%;
+		}
+
+		.listItem {
+			padding: 35rpx 40rpx;
+			border-bottom: 1px solid $page-color-light;
+			.textarea{
+				font-size: $font-base;
+				width: 100%;
+				word-wrap: break-word;
+				white-space: pre-line;
+				min-height: 9rem;
+				
+			}
+			/deep/ .textareaplaceholder{
+				word-wrap: break-word;
+				white-space: pre-line;
+			}
+		}
+
+		.listIconImg {
+			width: 36rpx;
+		}
+
+		.right {
+			color: $font-color-light;
+			font-size: $font-base;
+			flex-grow: 1;
+			justify-content: flex-end;
+
+			.timetype {
+				width: 100%;
+				justify-content: flex-end;
+			}
+
+			.citylist {
+				.del {
+					color: $color-red;
+					font-size: $font-sm;
+					border: 1px solid $color-red;
+					border-radius: 10rpx;
+					line-height: 1;
+					padding: 5rpx 15rpx;
+				}
+			}
+
+			.img {
+				width: 26rpx;
+			}
+
+			.buttom {
+				color: $base-color;
+				border: 1px solid $base-color;
+				border-radius: 10rpx;
+				line-height: 1;
+				padding: 10rpx 20rpx;
+			}
+		}
+
+		.titleBox {
+			.title {
+				color: $font-color-base;
+				font-size: $font-base;
+			}
+		}
+	}
+
+	.bg-gray {
+		background-color: $color-gray;
+	}
+
+	.base-buttom {
+		position: fixed;
+		bottom: 0rpx;
+		right: 0rpx;
+		left: 0rpx;
+		margin: 0;
+		padding: 0;
+		height: 100rpx;
+		border-radius: 0;
+
+		.updata,
+		.ylan {
+			width: 50%;
+			height: 100%;
+			justify-content: center;
+		}
+
+		.ylan {
+			background-color: #FFF;
+			color: $font-color-dark;
+		}
+	}
+</style>

+ 209 - 0
pages/user/model/mymodellist.vue

@@ -0,0 +1,209 @@
+<template>
+	<view class="indexBox">
+		<view class="hot-list-box">
+			<view class="list-box">
+				<view class="list" @click="navTo('/pages/user/model/model?mtype=' + item.show_template_id + '&type=3')"
+					v-for="(item,index) in navList.orderList">
+					<view class="list-image-box">
+						<image class="list-image" :src="item.img" mode="widthFix"></image>
+					</view>
+					<view class="list-content">
+						<view class="list-title clamp">
+							{{item.title}}
+						</view>
+						<view v-if="item.is_default==0" class="list-money action" @click.stop="setmodel(item)">
+							设为默认
+						</view>
+						<view v-else class="list-money" @click.stop="setmodel(item)">
+							默认模板
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<uni-load-more :status="navList.loadingType"></uni-load-more>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import {
+		share
+	} from '@/api/wx';
+	import {
+		userShowTemplateList,
+		setShowTemplate
+	} from '@/api/model.js';
+	export default {
+		data() {
+			return {
+				// 商品列表
+				navList: {
+					state: 1,
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10, //每次信息条数
+					count: 0, //总消息条数
+				},
+			};
+		},
+		onLoad: function(option) {
+			this.getList();
+		},
+		// 滚动到底部
+		onReachBottom() {
+			this.getList();
+		},
+		methods: {
+			// 设为默认
+			setmodel(item) {
+				const that = this;
+				setShowTemplate({
+						show_template_id: item.show_template_id
+					})
+					.then((res) => {
+						that.navList.orderList.forEach(item => {
+							item.is_default = 0
+						})
+						item.is_default=1;
+						
+						uni.showToast({
+							title:res.msg
+						})
+						
+					})
+					.catch(e => {
+
+					});
+			},
+			// 获取模板列表
+			getList(source) {
+				//这里是将订单挂载到tab列表下
+				let navItem = this.navList;
+				let state = navItem.state;
+				if (source === 'tabChange' && navItem.loaded === true) {
+					//tab切换只有第一次需要加载数据
+					return;
+				}
+				if (navItem.loadingType === 'loading') {
+					//防止重复加载
+					return;
+				}
+				if (navItem.loadingType === 'noMore') {
+					//防止重复加载
+					return;
+				}
+				// 修改当前对象状态为加载中
+				navItem.loadingType = 'loading';
+				userShowTemplateList({
+						page: navItem.page,
+						pageSize: navItem.limit
+					})
+					.then(({
+						data
+					}) => {
+						let arr = data.list.map(e => {
+							return e;
+						});
+						navItem.orderList = navItem.orderList.concat(arr);
+						navItem.page++;
+						if (navItem.limit == arr.length) {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							navItem.loadingType = 'more';
+							return;
+						} else {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							navItem.loadingType = 'noMore';
+						}
+						uni.hideLoading();
+						this.$set(navItem, 'loaded', true);
+					})
+					.catch(e => {
+						console.log(e);
+					});
+
+			},
+			navTo(url) {
+				if (url) {
+					if (url.indexOf('http') > -1) {
+						// #ifdef H5
+						window.location.href = url
+						// #endif
+						// #ifdef APP
+						plus.runtime.openURL(url)
+						// #endif
+					} else {
+						uni.navigateTo({
+							url: url
+						})
+					}
+				}
+			}
+		},
+	};
+</script>
+
+<style lang="scss">
+	page,
+	.indexBox {
+		height: auto;
+		min-height: 100%;
+	}
+
+	.hot-list-box {
+		padding: $page-row-spacing;
+		padding-bottom: 0;
+
+		.list-box {
+			display: flex;
+			flex-wrap: wrap;
+			justify-content: space-between;
+			align-items: flex-start;
+			padding-bottom: 20rpx;
+
+			.list {
+				box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
+				border-radius: 15rpx;
+
+				.list-image-box {
+					width: 330rpx;
+					height: 420rpx;
+					overflow: hidden;
+
+					.list-image {
+						width: 100%;
+					}
+				}
+
+				.list-content {
+					padding: 20rpx;
+					line-height: 1;
+
+					.list-title {
+						color: $font-color-dark;
+						font-size: $font-base;
+						margin-bottom: 10rpx;
+					}
+
+					.list-money {
+						border-radius: 10rpx;
+						padding: 20rpx 20rpx;
+						background: linear-gradient(to bottom, #ff629f, rgba(255, 98, 159, 0.5));
+						text-align: center;
+						font-size: $font-lg;
+						font-weight: bold;
+						color: #FFFFFF;
+						&.action{
+							background: #FFFFFF;
+							color: $font-color-dark;
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 353 - 0
pages/user/model/phb.vue

@@ -0,0 +1,353 @@
+<template>
+	<view class="content">
+		<view class="nav flex">
+			<view class="nav-item" v-for="(item,index) in navList" @click="navClick(index)"
+				:class="{'action': index == currentIndex}">
+				{{item.title}}
+			</view>
+		</view>
+		<image :src="top_bg" mode="" class="top-bg"></image>
+		<view class="bd-wrap flex">
+			<view class="bd">
+				<image :src="tit_bg" mode="widthFix" class="bd-tit"></image>
+				<view class="bd-top flex">
+					<view class="top-item">
+						<view class="top-logo yp">
+							<image src="" mode=""></image>
+						</view>
+						<view class="top-name">
+							李小图
+						</view>
+						<view class="top-visit">
+							86.4W
+						</view>
+					</view>
+					<view class="top-item-center">
+						<view class="top-logo  jp">
+							<image src="" mode=""></image>
+						</view>
+						<view class="top-name">
+						</view>
+						<view class="top-visit">
+							86.4W
+						</view>
+					</view>
+					<view class="top-item">
+						<view class="top-logo tp">
+							<image src="" mode=""></image>
+						</view>
+						<view class="top-name">
+							李小图
+						</view>
+						<view class="top-visit">
+							86.4W
+						</view>
+					</view>
+				</view>
+				<view class="bd-btm-item flex" v-for="item in 3">
+					<image src="" mode="" class="item-img"></image>
+					<view class="flex item-info">
+						<view class="item-name">
+							杨阿姨 <image :src="rz" mode=""></image>
+						</view>
+						<view class="item-zy">
+							育儿嫂
+						</view>
+						<view class="item-where">
+							48岁 丨 甘肃人
+						</view>
+						<view class="" style="flex-grow: 1;">
+							
+						</view>
+						<view class="item-vist">
+							浏览量:2362
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="" style="height: 60rpx;">
+
+		</view>
+	</view>
+</template>
+
+<script>
+	import { getInviteCountRank } from '@/api/user.js'
+	import { getCardLookCountRank } from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				times: '',
+				top_bg: this.$store.state.baseURL + '/resource/icon/base/phb-bg.png',
+				tit_bg: this.$store.state.baseURL + '/resource/icon/llph.png',
+				rz: this.$store.state.baseURL + '/resource/icon/rz.png',
+				navList: [{
+					title: '周排行',
+					time: ((new Date().setHours(0, 0, 0) - (new Date().getDay() - 1) *24 * 60 * 60 *1000)/1000).toFixed(0),
+					times: ((new Date().setHours(0, 0, 0) + (7 - new Date().getDay()) *24 * 60 * 60 *1000)/1000).toFixed(0),
+					list: [],
+					loaded: false
+				}, {
+					title: '月排行',
+					time: (new Date(new Date(new Date().getFullYear(), new Date().getMonth(), 1).setHours(0, 0, 0)).getTime()/1000).toFixed(0),
+					times: ((new Date(new Date().getFullYear(), new Date().getMonth()+ 1, 0).setHours(23, 59, 59, 59))/1000).toFixed(0),
+					list: [],
+					loaded: false
+				}],
+				currentIndex: 0,
+			}
+		},
+		onLoad() {
+
+		},
+		onShow() {
+			console.log(this.$store.state.baseURL)
+			this.times = ((new Date().setHours(0, 0, 0) - (new Date().getDay() - 1) *24 * 60 * 60 *1000)/1000).toFixed(0)
+			this.getCardLookCountRank()
+		},
+		onReachBottom() {
+
+		},
+		onReady() {
+
+		},
+		methods: {
+			navClick(index) {
+				this.currentIndex = index
+				this.getCardLookCountRank()
+			},
+			getCardLookCountRank() {
+				let that = this
+				let navitem = that.navList[that.currentIndex]
+				if(navitem.loaded) {
+					return
+				}
+				getCardLookCountRank({
+					time: navitem.time,
+					times: navitem.times
+				}).then(res => {
+					console.log(res);
+					navitem.list = res.data
+					navitem.loaded = true
+				}).catch(err => {
+					navitem.loaded = false
+				})
+			}
+			
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	page,
+	.content {
+		height: auto;
+		min-height: 100%;
+		background-color: #900408;
+	}
+
+	.nav {
+		width: 750rpx;
+		height: 88rpx;
+
+		.nav-item {
+			line-height: 88rpx;
+			width: 50%;
+			text-align: center;
+			font-size: 30rpx;
+			font-weight: 500;
+			color: #333333;
+			height: 100%;
+		}
+
+		.action {
+			font-weight: bold;
+			position: relative;
+
+			&::after {
+				content: '';
+				width: 50rpx;
+				height: 6rpx;
+				background: #FE5B38;
+				border-radius: 3rpx;
+				position: absolute;
+				left: 0;
+				right: 0;
+				bottom: 6rpx;
+				margin: auto;
+			}
+		}
+
+		background-color: #fff;
+	}
+
+	.top-bg {
+		width: 750rpx;
+		height: 742rpx;
+	}
+
+	.bd-wrap {
+		width: 699rpx;
+		background: #F6E7E4;
+		border-radius: 14rpx;
+		justify-content: center;
+		margin: -150rpx auto 0;
+		position: relative;
+		padding: 16rpx;
+		.bd {
+			width: 666rpx;
+			background: #FFFFFF;
+			border: 2px solid #A30F0E;
+			border-radius: 14rpx;
+			position: relative;
+			padding: 35rpx;
+			.bd-tit {
+				width: 443rpx;
+				height: 69rpx;
+				position: absolute;
+				top: -35rpx;
+				left: 0;
+				right: 0;
+				margin: auto;
+			}
+			.bd-top {
+				height: 376rpx;
+				width: 100%;
+				
+				padding-bottom: 47rpx;
+				.jp,.yp,.tp {
+					&::after {
+						content: '';
+						width: 58rpx;
+						height: 66rpx;
+						position: absolute;
+						position: absolute;
+						bottom: 10rpx;
+						right: -10rpx;
+						z-index: 999;
+					}
+				}
+				.jp {
+					&::after {
+						
+						background: url($base-url + '/resource/icon/jp.png') no-repeat;
+						background-size: 100% 100%;
+					}
+				}
+				.yp {
+					&::after {
+						right: -15rpx;
+						background: url($base-url + '/resource/icon/yp.png') no-repeat;
+						background-size: 100% 100%;
+					}
+				}
+				.tp {
+					&::after {
+						right: -15rpx;
+						background: url($base-url + '/resource/icon/tp.png') no-repeat;
+						background-size: 100% 100%;
+					}
+				}
+				.top-item, .top-item-center {
+					height: 100%;
+					display: flex;
+					flex-direction: column;
+					justify-content: flex-end;
+					align-items: center;
+					.top-logo {
+						border-radius: 50%;
+						border: #900408 1px solid;
+						position: relative;
+						image {
+							width: 100%;
+							height: 100%;
+							background-color: #eee;
+							border-radius: 50%;
+						}
+					}
+					.top-name {
+						font-size: 26rpx;
+						font-weight: bold;
+						color: #A30F0E;
+						margin: 15rpx 0;
+					}
+					.top-visit {
+						font-size: 22rpx;
+						font-weight: bold;
+						color: #171717;
+					}
+				}
+				.top-item {
+					flex-grow: 3;
+					.top-logo {
+						width: 139rpx;
+						height: 139rpx;
+					}
+				}
+				.top-item-center {
+					flex-grow: 4;
+					.top-logo {
+						width: 198rpx;
+						height: 197rpx;
+					}
+				}
+			}
+			.bd-btm-item {
+				height: 260rpx;
+				border-top:  #f2f2f2 1px solid;
+				justify-content: flex-start;
+				.item-info {
+					height: 100%;
+					flex-grow: 1;
+					flex-direction: column;
+					justify-content: flex-start;
+					align-items: flex-start;
+					padding: 34rpx 0 21rpx;
+					
+					.item-name {
+						font-size: 31rpx;
+						font-weight: bold;
+						color: #333333;
+						display: flex;
+						align-items: center;
+						justify-content: flex-start;
+						image {
+							width: 100rpx;
+							height: 30rpx;
+							margin-left: 10rpx;
+						}
+					}
+					.item-zy {
+						padding: 6rpx 20rpx;
+						background: #fee7e4;
+						border-radius: 5rpx;
+						font-size: 22rpx;
+						font-weight: 500;
+						color: #F86859;
+						margin: 16rpx 0 20rpx;
+					}
+					.item-vist,.item-where {
+						font-weight: 500;
+						color: #969696;
+					}
+					.item-vist {
+						font-size: 22rpx;
+						justify-items: flex-end;
+					}
+					.item-where {
+						font-size: 24rpx;
+					}
+				}
+				.item-img {
+					flex-shrink: 0;
+					width: 160rpx;
+					height: 220rpx;
+					margin-right: 22rpx;
+					background-color: #eee;
+				}
+				
+			}
+		}
+	}
+</style>

+ 333 - 0
pages/user/model/shoprz.vue

@@ -0,0 +1,333 @@
+<template>
+	<view class="content ">
+		<view class="item-name">
+			工资认证
+		</view>
+		<view class="listBox">
+			<view class="con_box">
+				<view class="tip">
+					请上传最近3单工资证明
+				</view>
+				<view class="con_image" v-for="(item,ind) in updata.service_audit_imgs">
+					<image class="img" @click="navCroper(400,400,'audit',ind)"
+						:src="item"></image>
+					<image @click="updata.service_audit_imgs.splice(ind,1)" class="tip" src="../../../static/icon/goodsExit.png" mode="scaleToFill"></image>
+				</view>
+				<view class="con_image">
+					<image class="img" @click="navCroper(400,400,'auditall')"
+						src="../../../static/image/upImg.png"></image>
+				</view>
+			</view>
+		</view>
+		<view class="base-buttom" :class="{ 'bg-gray': loding }" @click="loding ? '' : confirm()">提交</view>
+	</view>
+</template>
+
+<script>
+	import {
+		subTypeAudit
+	} from '@/api/model.js';
+
+	import {
+		mapState
+	} from "vuex"
+	export default {
+		data() {
+			return {
+				// 上传数据
+				updata:{
+					service_audit_imgs: [], //服务图片
+				},
+				loding: false, //是否载入中
+
+			};
+		},
+		onLoad(options) {
+			this.init()
+		},
+		computed: {
+			// #ifdef H5
+			...mapState(['urlFile']),
+			// #endif
+			...mapState(['baseURL']),
+		},
+		methods: {
+			// 初始化
+			init() {
+				const that = this;
+			},
+			upLoad(path) {
+				// #ifdef H5
+				console.log(path, 'h5');
+				// #endif
+				uni.showLoading({
+					title: '图片上传中',
+					mask: true
+				});
+				return new Promise((resolve, error) => {
+					uni.uploadFile({
+						url: this.baseURL + '/api/user/qiniuUpload', //仅为示例,非真实的接口地址
+						filePath: path,
+						name: 'file',
+						header: {
+							"token": uni.getStorageSync('token')
+						},
+						success: (uploadFileRes) => {
+							if ("string" === typeof uploadFileRes.data) {
+								resolve(JSON.parse(uploadFileRes.data).data)
+							} else {
+								resolve(uploadFileRes.data.data)
+							}
+						},
+						complete() {
+							uni.hideLoading()
+						}
+					});
+				})
+			},
+			// 图片裁切
+			/**
+			 * @param {Number} w 裁切宽度比例
+			 * @param {Number} h 裁切高度比例
+			 * @param {Number} mw 图片最小宽度
+			 * @param {Number} mh 图片最小高度
+			 * @param {String} url url修改
+			 */
+			navCroper(w, h, type, ind) {
+				let that = this;
+				let tt = (type == 'upimg' ? 2 : 1)
+				this.onImg(tt).then((url) => {
+					uni.navigateTo({
+						url: `../realName/cropper?width=${w}&height=${h}`,
+						events: {
+							uploadSuccess(res) {
+								that.upLoad(res).then((urldata) => {
+									 if (type == 'audit') {
+										that.updata.service_audit_imgs.splice(ind, 1, urldata.img)
+									}else if (type == 'auditall') {
+										that.updata.service_audit_imgs.push( urldata.img)
+									}
+								})
+							}
+						},
+						success: function(res) {
+							// 通过eventChannel向被打开页面传送数据
+							res.eventChannel.emit('urlNext', {
+								url
+							})
+						}
+					})
+				})
+			},
+			onImg(type) {
+				const _this = this
+				return new Promise((ok, erro) => {
+					// 判断是否需要选择
+					if (type == 1) {
+						uni.showActionSheet({
+							itemList: ['拍照', '选择一张照片'],
+							success: function(res) {
+								_this.chooseImage(res.tapIndex).then((url) => {
+									ok(url)
+								}).catch((res) => {
+									erro(res)
+								})
+							},
+							fail: function(res) {
+								erro(res)
+								console.log(res.errMsg);
+							}
+						});
+					}
+					// 判断是否只需要拍照
+					if (type == 2) {
+						_this.chooseImage(0).then((url) => {
+							ok(url)
+						}).catch((res) => {
+							erro(res)
+						})
+					}
+				})
+
+			},
+			chooseImage: function(index) {
+				const _this = this
+				return new Promise((ok, error) => {
+					// 从相册/相机选择
+					// 如需直接开相机或直接选相册,请只使用一个选项
+					const sourceType = index === 0 ? ['camera'] : ['album']
+					uni.chooseImage({
+						count: 1, //默认9
+						sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+						sourceType: sourceType,
+						success: function(res) {
+							ok(res.tempFilePaths[0])
+						},
+						fail(e) {
+							uni.showModal({
+								title: '文件打开错误',
+								content: '请设置授权文件存储权限',
+								showCancel: false,
+							});
+							error(e)
+						}
+					});
+				})
+
+			},
+
+			// 实名认证
+			confirm(e) {
+				const that = this;
+				if (that.updata.service_audit_imgs.length==0) {
+					uni.showModal({
+						title: '错误',
+						content: '请上传工资截图',
+						showCancel: false,
+					});
+					return
+				}
+				that.loding = true;
+				subTypeAudit({
+						service_audit_imgs:that.updata.service_audit_imgs
+					})
+					.then((e) => {
+						that.loding = false;
+						this.$api.msg(e.msg);
+					})
+					.catch(err => {
+						this.loding = false;
+						console.log(err);
+					});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.content,
+	page {
+		min-height: 100%;
+	}
+
+	.content {
+		padding-bottom: 150rpx;
+	}
+
+	.item-name {
+		margin: $page-row-spacing;
+		font-size: $font-lg;
+		font-weight: bold;
+		color: $font-color-dark;
+	}
+
+	.con_box {
+		margin: $page-row-spacing;
+		.tip{
+			color: #999999;
+			font-size: $font-base;
+			margin-bottom: 20rpx;
+		}
+		.con_image {
+			width: 150rpx;
+			height: 150rpx;
+			display: inline-block;
+			margin-right: 20rpx;
+			position: relative;
+
+			.img {
+				width: 100%;
+				height: 100%;
+			}
+
+			.tip {
+				position: absolute;
+				top: -10rpx;
+				right: -10rpx;
+				width: 30rpx;
+				height: 30rpx;
+				background-color: #FFF;
+				border-radius: 99rpx;
+			}
+		}
+	}
+
+	.listBox {
+		margin: $page-row-spacing;
+		margin-top: 30rpx;
+		border-radius: 20rpx;
+		overflow: hidden;
+		background-color: #FFFFFF;
+	}
+
+	.list {
+		.input {
+			text-align: right;
+			font-size: $font-base;
+			color: $color-gray;
+			width: 100%;
+		}
+
+		.listItem {
+			padding: 35rpx 40rpx;
+			border-bottom: 1px solid $page-color-light;
+		}
+
+		.listIconImg {
+			width: 36rpx;
+		}
+
+		.right {
+			color: $font-color-light;
+			font-size: $font-base;
+			flex-grow: 1;
+			justify-content: flex-end;
+
+			.timetype {
+				width: 100%;
+				justify-content: flex-end;
+			}
+
+			.citylist {
+				.del {
+					color: $color-red;
+					font-size: $font-sm;
+					border: 1px solid $color-red;
+					border-radius: 10rpx;
+					line-height: 1;
+					padding: 5rpx 15rpx;
+				}
+			}
+
+			.img {
+				width: 26rpx;
+			}
+
+			.buttom {
+				color: $base-color;
+				border: 1px solid $base-color;
+				border-radius: 10rpx;
+				line-height: 1;
+				padding: 10rpx 20rpx;
+			}
+		}
+
+		.titleBox {
+			.title {
+				color: $font-color-base;
+				font-size: $font-base;
+			}
+		}
+	}
+
+	.bg-gray {
+		background-color: $color-gray;
+	}
+
+	.base-buttom {
+		position: fixed;
+		bottom: 30rpx;
+		right: 0rpx;
+		left: 0rpx;
+	}
+</style>

+ 404 - 0
pages/user/money/pay.vue

@@ -0,0 +1,404 @@
+<template>
+	<view class="app">
+		<view class="bg">
+		</view>
+		<view class="moneyBox">
+			<view class="price-box">
+				<text>支付金额</text>
+				<text class="price">{{ money }}</text>
+			</view>
+			<view class="yt-list">
+				<view class="yt-list-cell b-b" v-if="fx" @click="payType='weixin'">
+					<view class="cell-tit flex">
+						<image class="orderIcon" src="../../../static/icon/orderWx.png" mode="widthFix"></image>
+						<text class="margin-l-10">微信支付</text>
+					</view>
+					<image class="checked" v-if="payType=='weixin'" src="../../../static/icon/addressIconXz.png"
+						mode="widthFix"></image>
+					<view v-else class="noChecked"></view>
+				</view>
+				<!-- #ifdef APP-PLUS -->
+				<view class="yt-list-cell b-b" @click="payType='ali'">
+					<view class="cell-tit flex">
+						<image class="orderIcon" src="../../../static/icon/orderAli.png" mode="widthFix"></image>
+						<text class="margin-l-10">支付宝</text>
+					</view>
+					<image class="checked" v-if="payType=='ali'" src="../../../static/icon/addressIconXz.png"
+						mode="widthFix">
+					</image>
+					<view v-else class="noChecked"></view>
+				</view>
+				<!-- #endif -->
+				<view class="yt-list-cell" @click="payType='yue'">
+					<view class="cell-tit flex">
+						<image class="orderIcon" src="../../../static/icon/ye.png" mode="widthFix"></image>
+						<text class="margin-l-10">余额({{now_money}})</text>
+					</view>
+					<image class="checked" v-if="payType=='yue'" src="../../../static/icon/addressIconXz.png"
+						mode="widthFix">
+					</image>
+					<view v-else class="noChecked"></view>
+				</view>
+			</view>
+		</view>
+		<view class="base-buttom" :class="{ clickbg: payLoding }" @click="!payLoding ? confirm() : ''">确认支付</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState
+	} from 'vuex'
+	import {
+		balance
+	} from '@/api/wallet.js';
+	import {
+		orderPay
+	} from '@/api/set.js';
+	// #ifdef H5
+	import weixinObj from "@/plugin/jweixin-module/index.js";
+	// #endif
+	export default {
+		data() {
+			return {
+				// #ifdef H5
+				payType: 'ali',
+				// #endif
+				// #ifdef MP-WEIXIN
+				payType: 'ali',
+				// #endif
+				money: 0.0, //订单金额
+				now_money: 0.0, //余额
+				orderId: '', //保存订单id
+				payLoding: false, //判断是否支付中
+				payType: 'ali',
+				// #ifdef H5
+				froms: '', //保存h5中数据来源对象
+				// #endif
+			};
+		},
+		onLoad(options) {
+			// 判断是否为已创建单号订单
+			this.type = 1;
+			this.orderId = options.ordid;
+			this.money = options.money;
+			// 载入余额
+			balance({}).then(({
+				data
+			}) => {
+				// 获取余额
+				this.now_money = data.now_money;
+			});
+		},
+		computed:{
+			...mapState(['fx'])
+		},
+		methods: {
+			// 支付金额
+			orderMoneyPay() {
+				let obj = this;
+				orderPay({
+						uni: obj.orderId,
+						// #ifdef H5
+						from: obj.froms ? 'weixin' : 'H5', //来源
+						// #endif
+						// #ifdef MP-WEIXIN
+						from: 'routine', //来源
+						// #endif
+						// #ifdef APP-PLUS
+						from: 'app', //来源
+						// #endif
+						paytype: obj.payType //支付类型  weixin-微信 yue-余额
+					})
+					.then(e => {
+						// 判断是否为余额支付
+						if (obj.payType == 'yue' && e.data.status == 'SUCCESS') {
+							if (e.status == 200) {
+								obj.paySuccessTo();
+							} else {
+								obj.$api.msg(msg);
+							}
+						}
+						if (obj.payType == 'weixin') {
+							let da = e.data.result.jsConfig;
+							let data = {
+								// #ifdef H5
+								timestamp: da.timestamp,
+								// #endif
+								// #ifdef MP
+								timeStamp: da.timestamp,
+								// #endif
+								nonceStr: da.nonceStr,
+								package: da.package,
+								signType: da.signType,
+								paySign: da.paySign,
+								success: function(res) {
+									obj.paySuccessTo();
+								},
+								fail: () => {
+									uni.navigateTo({
+										url: '/pages/order/order?state=0'
+									});
+								}
+							};
+							// #ifdef H5
+							if (obj.payType == 'weixin') {
+								weixinObj.chooseWXPay(data);
+							}
+							// #endif
+							// #ifdef MP-WEIXIN
+							if (obj.payType == 'weixin') {
+								wx.requestPayment(data);
+							}
+							// #endif
+						}
+						uni.hideLoading();
+						obj.payLoding = false;
+					})
+					.catch(e => {
+						// 支付完成
+						uni.hideLoading();
+						obj.payLoding = false;
+						console.log(e);
+					});
+			},
+			// 支付成功跳转
+			paySuccessTo() {
+				uni.hideLoading();
+				uni.redirectTo({
+					url: './paySuccess?orderid=' + this.orderId
+				});
+			},
+			//确认支付
+			confirm: async function() {
+				let obj = this;
+				uni.showLoading({
+					title: '支付中',
+					mask: true
+				})
+				// 判断是否余额不足
+				if (obj.payType == 'yue' && +obj.now_money < obj.money) {
+					uni.showModal({
+						title: '提示',
+						content: '账户余额不足!',
+						showCancel: false,
+						success: res => {},
+						fail: () => {},
+						complete: () => {}
+					});
+					return;
+				}
+				// 支付中
+				obj.payLoding = true;
+				// #ifdef H5
+				// 获取当前是否为微信浏览器
+				obj.froms = uni.getStorageSync('weichatBrowser') || '';
+				// #endif
+				// 判断是否为未支付订单中跳转进入
+				obj.orderMoneyPay();
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.app {
+		width: 100%;
+		padding-top: 30rpx;
+	}
+
+	.moneyBox {
+		position: relative;
+		margin: 0 $page-row-spacing;
+		border-radius: 20rpx;
+		overflow: hidden;
+		background-color: #FFFFFF;
+	}
+
+	.bg {
+		background-color: $color-green;
+		width: 950rpx;
+		position: absolute;
+		left: -100rpx;
+		border-bottom-left-radius: 1000rpx;
+		border-bottom-right-radius: 1000rpx;
+		top: 0rpx;
+		height: 300rpx;
+	}
+
+	.price-box {
+		background-color: #fff;
+		height: 200rpx;
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		font-size: 28upx;
+		color: #909399;
+
+		.price {
+			font-size: 50upx;
+			color: #303133;
+			margin-top: 12upx;
+
+			&:before {
+				content: '¥';
+				font-size: 40upx;
+			}
+		}
+	}
+
+	.pay-type-list {
+		margin-top: 20upx;
+		background-color: #fff;
+		padding-left: 60upx;
+
+		.type-item {
+			height: 120upx;
+			padding: 20upx 0;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding-right: 60upx;
+			font-size: 30upx;
+			position: relative;
+		}
+
+		.icon {
+			width: 100upx;
+			font-size: 52upx;
+		}
+
+		.iconyue {
+			color: #fe8e2e;
+		}
+
+		.iconweixin {
+			color: #36cb59;
+		}
+
+		.iconzhifubao {
+			color: #01aaef;
+		}
+
+		.tit {
+			font-size: $font-lg;
+			color: $font-color-dark;
+			margin-bottom: 4upx;
+		}
+
+		.con {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			font-size: $font-sm;
+			color: $font-color-light;
+		}
+	}
+
+	.clickbg {
+		background-color: $color-gray !important;
+	}
+
+	.yt-list {
+		background: #fff;
+		margin: 0 $page-row-spacing;
+		border-radius: 20rpx;
+		padding-bottom: 20rpx;
+	}
+
+	.yt-list-cell {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 10rpx 30rpx 10rpx 40rpx;
+		line-height: 70rpx;
+		position: relative;
+
+		.checked,
+		.noChecked {
+			width: 36rpx;
+			height: 36rpx;
+		}
+
+		.noChecked {
+			border: 1px solid $font-color-light;
+			border-radius: 100rpx;
+		}
+
+		&.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 {
+			font-size: 26rpx;
+			color: $font-color-light;
+			margin-right: 10rpx;
+
+			.orderIcon {
+				width: 48rpx;
+			}
+		}
+
+		.cell-tip {
+			font-size: 26rpx;
+			color: $font-color-dark;
+
+			&.disabled {
+				color: $font-color-light;
+			}
+
+			&.active {
+				color: $base-color;
+			}
+
+			&.red {
+				color: $base-color;
+			}
+		}
+
+		&.desc-cell {
+			.cell-tit {
+				max-width: 90rpx;
+			}
+		}
+
+		.desc {
+			text-align: right;
+			font-size: $font-base;
+			color: $font-color-light;
+		}
+	}
+</style>

+ 108 - 0
pages/user/money/paySuccess.vue

@@ -0,0 +1,108 @@
+<template>
+	<view class="content">
+		<view class="box">
+			<image class="img" src="../../../static/image/success.png" mode="widthFix"></image>
+			<text class="tit">支付成功</text>
+			<view class="tip" >
+				<text v-if="type==0">
+				请前往母婴界严选加盟商一领取
+				</text>
+			</view>
+			<view class="btn-group flex">
+				<navigator v-if="type==0" :url="'/pages/order/orderDetail?id='+orderId" open-type="redirect"
+					class="mix-btn hollow">查看订单</navigator>
+				<view v-if="type==1" class="mix-btn hollow" @click="navBack">返回</view>
+				<navigator url="/pages/index/index" open-type="switchTab" class="mix-btn ">返回首页</navigator>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				orderId: '',
+				type: 0 //0为订单1为充值
+			}
+		},
+		onLoad(opt) {
+			// 保存订单号
+			if (opt.orderid) {
+				this.orderId = opt.orderid;
+			}
+			// 分类
+			if (opt.type) {
+				this.type = opt.type;
+			}
+		},
+		methods: {
+			// 返回上一页
+			navBack() {
+				uni.navigateBack()
+			}
+		}
+	}
+</script>
+
+<style lang='scss'>
+	.content {
+		padding-top: 30rpx;
+	}
+
+	.box {
+		margin: 0 $page-row-spacing;
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		background-color: #FFFFFF;
+		border-radius: 20rpx;
+		padding: 50rpx;
+		padding-top: 80rpx;
+	}
+
+	.tip {
+		color: $font-color-disabled;
+		font-size: 24rpx;
+		margin-top: 30rpx;
+		padding-bottom: 30rpx;
+	}
+
+	.img {
+		width: 200rpx;
+
+	}
+
+	.tit {
+		font-size: 38rpx;
+		font-weight: bold;
+		color: #303133;
+		margin-top: 30rpx;
+	}
+
+	.btn-group {
+		padding-top: 100rpx;
+		width: 100%;
+		justify-content: space-around;
+		padding: 0 10rpx;
+	}
+
+	.mix-btn {
+		margin-top: 30upx;
+		display: flex;
+		align-items: center;
+		font-size: $font-lg;
+		color: #fff;
+		background-color: $base-color;
+		padding: 20rpx 50rpx;
+		border-radius: 100rpx;
+		line-height: 1;
+
+		&.hollow {
+			background: #fff;
+			color: #303133;
+			border: 1px solid #ccc;
+		}
+	}
+</style>

+ 486 - 0
pages/user/money/recharge.vue

@@ -0,0 +1,486 @@
+<template>
+	<view class="content">
+		<view class="bg">
+		</view>
+		<view class="listBox">
+			<view class="list flex">
+				<view @click="changeMoney(index)" :class="{action:index==actionIndex}" class="item flex"
+					v-for="(item,index) in moneyList">
+					<text>{{item.price}}元</text>
+				</view>
+			</view>
+			<view class="flex inputBox">
+				<text class="text">自定义金额</text>
+				<input class="input" type="number" v-model="money" />
+				<text>元</text>
+			</view>
+		</view>
+
+		<view class="yt-list">
+			<view class="yt-list-cell b-b" v-if="fx" @click="type='wxpay'">
+				<view class="cell-tit flex">
+					<image class="orderIcon" src="../../../static/icon/orderWx.png" mode="widthFix"></image>
+					<text class="margin-l-10">微信支付</text>
+				</view>
+				<image class="checked" v-if="type=='wxpay'" src="../../../static/icon/addressIconXz.png"
+					mode="widthFix"></image>
+				<view v-else class="noChecked"></view>
+			</view>
+			<!-- #ifdef APP-PLUS -->
+			<view class="yt-list-cell b-b" @click="type='alipay'">
+				<view class="cell-tit flex">
+					<image class="orderIcon" src="../../../static/icon/orderAli.png" mode="widthFix"></image>
+					<text class="margin-l-10">支付宝</text>
+				</view>
+				<image class="checked" v-if="type=='alipay'" src="../../../static/icon/addressIconXz.png"
+					mode="widthFix">
+				</image>
+				<view v-else class="noChecked"></view>
+			</view>
+			<!-- #endif -->
+<!-- 			<view class="yt-list-cell b-b" @click="type='commission'">
+				<view class="cell-tit flex">
+					<image class="orderIcon" src="../../../static/icon/ye.png" mode="widthFix"></image>
+					<text class="margin-l-10">佣金({{commissionMoney}})</text>
+				</view>
+				<image class="checked" v-if="type=='commission'" src="../../../static/icon/addressIconXz.png"
+					mode="widthFix">
+				</image>
+				<view v-else class="noChecked"></view>
+			</view> -->
+		</view>
+
+		<view class="base-buttom" :class="{ 'active-bg': payLoding }" @click="!payLoding ? confirm() : ''">确认充值</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapState
+	} from 'vuex';
+	import {
+		commissionPay
+	} from '@/api/wallet.js';
+	// #ifdef APP
+	import {
+		aliPay,
+		wxPay
+	} from '@/api/wallet.js';
+	// #endif
+	// #ifdef H5
+	import weixinObj from "@/plugin/jweixin-module/index.js";
+	import {
+		rechargeWechat
+	} from '@/api/wallet.js';
+	// #endif
+	// #ifdef MP
+	import {
+		rechargeRoutine
+	} from '@/api/wallet.js';
+	// #endif
+
+	import {
+		rechargeIndex,
+		spreadCommission,
+		extractBank
+	} from '@/api/wallet.js';
+
+
+	export default {
+		data() {
+			return {
+				actionIndex: 0, //当前选中的充值金额对象
+				type: 'alipay',
+				money: '', //充值金额
+				payLoding: false, //是否加载中
+				moneyList: [],
+				commissionMoney: 0, //可提现佣金
+			};
+		},
+		onLoad(options) {
+			this.rechargeIndex();
+			this.extractBank();
+			console.log("s");
+		},
+		computed:{
+			...mapState(['fx'])
+		},
+		methods: {
+			//获取用户金额信息
+			extractBank() {
+				extractBank({}).then(({
+					data
+				}) => {
+					// 保存佣金信息
+					this.commissionMoney = data.commissionCount;
+				});
+			},
+			// 金额修改
+			changeMoney(ind) {
+				this.actionIndex = ind;
+				this.money = this.moneyList[ind].price
+			},
+			// 查询金额列表
+			rechargeIndex() {
+				rechargeIndex().then((e) => {
+					this.moneyList = e.data.recharge_quota.map((e) => {
+						e.price = +e.price;
+						return e
+					});
+					// 设置默认金额值
+					this.money = this.moneyList[0].price
+					console.log(e);
+				})
+			},
+			// 跳转
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				});
+			},
+			// 提交
+			confirm() {
+				const that = this;
+				if (that.money < (+that.moneyList[0].price)) {
+					uni.showModal({
+						title: '失败',
+						content: '充值金额不可以低于¥' + that.moneyList[0].price,
+						showCancel: false
+					});
+					return
+				}
+				that.payLoding = true;
+				let pushData = {
+					price: this.money,
+					// #ifdef H5
+					from: 'weixin',
+					// #endif
+					// #ifdef APP
+					from: 'app',
+					// #endif
+				}
+				// 佣金转余额
+				if (that.type == 'commission') {
+					that.commissionPay(pushData)
+					return
+				}
+				// 微信支付
+				if (that.type == 'wxpay') {
+					that.wxpay(pushData)
+					return
+				}
+				// #ifdef APP
+				// 支付宝支付
+				if (that.type == 'alipay') {
+					console.log('ali');
+					that.alipay(pushData)
+					return
+				}
+				// #endif
+				// 微信支付
+
+			},
+			commissionPay(pushData) {
+				const that = this;
+				commissionPay(pushData).then((e) => {
+					that.payLoding = false;
+					if (e.status == 200) {
+						that.extractBank()
+						uni.redirectTo({
+							url: './paySuccess?type=1'
+						});
+						return
+					}
+					uni.showToast({
+						title: e.msg
+					});
+				}).catch(() => {
+					that.payLoding = false;
+				})
+			},
+			// #ifdef APP-PLUS
+			alipay(pushData) {
+				const that = this;
+				aliPay(pushData).then((e) => {
+					console.log(e.data.data,'jie');
+					let orderInfo={};
+					that.payLoding = true;
+					uni.requestPayment({
+						provider: that.type,
+						orderInfo:e.data.data,
+						success(e) {
+							uni.redirectTo({
+								url: './paySuccess?type=1'
+							});
+						},fail(e) {
+							console.log(e);
+						}
+					})
+				}).catch(e => {
+					that.payLoding = false;
+					console.log(e,'cuowu');
+				});
+			},
+			// #endif
+			wxpay(pushData) {
+				const that = this;
+				// #ifdef H5
+				console.log(pushData);
+				rechargeWechat(pushData)
+					.then(e => {
+						let da = e.data;
+						that.payLoding = false;
+						weixinObj.chooseWXPay({
+							timestamp: da.timestamp,
+							nonceStr: da.nonceStr,
+							package: da.package,
+							signType: da.signType,
+							paySign: da.paySign,
+							success: function(res) {
+								uni.redirectTo({
+									url: './paySuccess?type=1'
+								});
+							},
+						});
+					})
+					.catch(e => {
+						that.payLoding = false;
+						console.log(e);
+					});
+				// #endif
+				// #ifdef MP
+				rechargeRoutine(pushData)
+					.then(e => {
+						let da = e.data;
+						wx.requestPayment({
+							timeStamp: da.timestamp,
+							nonceStr: da.nonceStr,
+							package: da.package,
+							signType: da.signType,
+							paySign: da.paySign,
+							success: function(res) {
+								uni.redirectTo({
+									url: './paySuccess?type=1'
+								});
+							}
+						})
+						that.payLoding = false;
+					})
+					.catch(e => {
+						that.payLoding = false;
+						console.log(e);
+					});
+				// #endif
+				// #ifdef APP
+				wxPay(pushData).then((res) => {
+					console.log(res.data,'充值');
+					that.payLoding = true;
+					uni.requestPayment({
+						provider: that.type,
+						orderInfo: res.data,
+						success(e) {
+							uni.redirectTo({
+								url: './paySuccess?type=1'
+							});
+						},
+						fail(e) {
+							console.log('错误', e);
+						}
+					})
+				}).catch(e => {
+					that.payLoding = false;
+					console.log(e);
+				});
+				// #endif
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.yt-list {
+		background: #fff;
+		margin: 0 $page-row-spacing;
+		margin-top: 30rpx;
+		border-radius: 20rpx;
+
+		.yt-list-cell {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			padding: 10rpx 30rpx 10rpx 40rpx;
+			line-height: 70rpx;
+			position: relative;
+
+			.checked,
+			.noChecked {
+				width: 36rpx;
+				height: 36rpx;
+			}
+
+			.noChecked {
+				border: 1px solid $font-color-light;
+				border-radius: 100rpx;
+			}
+
+			&.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 {
+				font-size: 26rpx;
+				color: $font-color-light;
+				margin-right: 10rpx;
+
+				.orderIcon {
+					width: 48rpx;
+				}
+			}
+
+			.cell-tip {
+				font-size: 26rpx;
+				color: $font-color-dark;
+
+				&.disabled {
+					color: $font-color-light;
+				}
+
+				&.active {
+					color: $base-color;
+				}
+
+				&.red {
+					color: $base-color;
+				}
+			}
+
+			&.desc-cell {
+				.cell-tit {
+					max-width: 90rpx;
+				}
+			}
+
+			.desc {
+				text-align: right;
+				font-size: $font-base;
+				color: $font-color-light;
+			}
+		}
+	}
+
+
+
+	page {
+		height: 100%;
+	}
+
+	.content {
+		padding-top: 30rpx;
+	}
+
+	.active-bg {
+		background-color: $color-gray !important;
+	}
+
+	.listBox {
+		margin: 30rpx;
+		margin-top: 0;
+		border-radius: 20rpx;
+		padding: 20rpx;
+		background-color: #FFFFFF;
+		position: relative;
+		padding-bottom: 30rpx;
+
+		.inputBox {
+			font-size: 28rpx;
+			font-weight: bold;
+			color: $font-color-base;
+			margin: 0 20rpx;
+
+			.text {
+				flex-shrink: 0;
+			}
+
+			.input {
+				border-bottom: 1px solid $font-color-disabled;
+				flex-grow: 1;
+				margin: 0 10rpx;
+				height: 30rpx;
+				text-align: center;
+			}
+		}
+	}
+
+	.list {
+		padding-top: 10rpx;
+		flex-wrap: wrap;
+
+		.item {
+			justify-content: center;
+			width: 210rpx;
+			height: 100rpx;
+			margin-bottom: 20rpx;
+			background-color: #F5F5F5;
+			border-radius: 20rpx;
+			font-size: 28rpx;
+			font-weight: bold;
+			color: $font-color-base;
+			border: 1px solid #F5F5F5;
+
+			&.action {
+				border: 1px solid $color-green;
+				color: $color-green;
+			}
+		}
+	}
+
+	.bg {
+		background-color: $color-green;
+		width: 950rpx;
+		position: absolute;
+		left: -100rpx;
+		border-bottom-left-radius: 1000rpx;
+		border-bottom-right-radius: 1000rpx;
+		top: 0rpx;
+		height: 300rpx;
+	}
+
+	.base-buttom {
+		position: relative;
+		left: auto;
+		bottom: auto;
+		right: auto;
+	}
+</style>

+ 268 - 0
pages/user/money/wallet.vue

@@ -0,0 +1,268 @@
+<template>
+	<view class="content">
+		<view class="bg">
+		</view>
+		<view class="content-money">
+			<view class="conetnt-box">
+				<view class="money-box">
+					<view class="text">可用金额(元)</view>
+					<view class="money">{{ money | getMoneyStyle }}</view>
+				</view>
+				<view class="flex buttom-box">
+					<view class="buttom" @click="navto('./recharge')">
+						<text>充值</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="listbox">
+			<view class="navbar flex">
+				<view class="title">
+					余额变动明细
+				</view>
+				<view class="alllist" @click="navto('./walletList')">
+					全部
+				</view>
+			</view>
+			<view class="conetntList">
+				<view class="listItem flex" v-for="(item, tabIndex) in navList[0].orderList">
+					<view class="itemLeft">
+						<view class="itemTitle">
+							{{item.title}}
+						</view>
+						<view class="itemBottom">
+							{{item.add_time}}
+						</view>
+					</view>
+					<view class="itemRight">
+						<view class="itemTitle">
+							{{(item.pm == 0 ? '-' : '+')+item.number}}
+						</view>
+						<!-- <view class="itemBottom">
+							余额{{item.yue}}
+						</view> -->
+					</view>
+				</view>
+				<uni-load-more :status="navList[0].loadingType"></uni-load-more>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		spreadCommission,
+		userBalance
+	} from '@/api/wallet.js';
+	import {
+		getMoneyStyle
+	} from '@/utils/rocessor.js';
+	export default {
+		filters: {
+			getMoneyStyle
+		},
+		data() {
+			return {
+				// 头部图高度
+				maxheight: '',
+				tabCurrentIndex: 0, //当前选中的
+				navList: [{
+					state: 0,
+					text: '全部',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}, ],
+				money: ''
+			};
+		},
+		onLoad(options) {
+			this.loadData();
+			console.log('进入');
+		},
+		onShow() {
+			// 获取用户余额
+			userBalance({}).then(({
+				data
+			}) => {
+				this.money = data.now_money;
+			});
+		},
+		// 页面到底部后加载数据
+		onReachBottom() {
+			this.loadData();
+		},
+		methods: {
+			// 页面跳转
+			navto(e) {
+				uni.navigateTo({
+					url: e
+				});
+			},
+			//获取收入支出信息
+			async loadData(source) {
+				//这里是将订单挂载到tab列表下
+				let index = this.tabCurrentIndex;
+				let navItem = this.navList[index];
+				let state = navItem.state;
+				if (source === 'tabChange' && navItem.loaded === true) {
+					//tab切换只有第一次需要加载数据
+					return;
+				}
+				if (navItem.loadingType === 'loading') {
+					//防止重复加载
+					return;
+				}
+				// 修改当前对象状态为加载中
+				navItem.loadingType = 'loading';
+
+				spreadCommission({
+							page: navItem.page,
+							limit: navItem.limit
+						},
+						state
+					)
+					.then(({
+						data
+					}) => {
+						if (data.length > 0) {
+							navItem.orderList = navItem.orderList.concat(data[0].list);
+							console.log(navItem.orderList);
+							navItem.page++;
+						}
+						if (navItem.limit == data.length) {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							navItem.loadingType = 'more';
+							return;
+						} else {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							navItem.loadingType = 'noMore';
+						}
+						uni.hideLoading();
+						this.$set(navItem, 'loaded', true);
+					})
+					.catch(e => {
+						console.log(e);
+						this.$set(navItem, 'loaded', true);
+					});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+	}
+
+	.content-money {
+		position: relative;
+		padding: 20rpx;
+		z-index: 1;
+		height: 440rpx;
+
+		.conetnt-box {
+			border-radius: 20rpx;
+			background-color: #ffffff;
+			height: 400rpx
+		}
+
+		.buttom-box {
+			text-align: center;
+			margin: 0 30rpx;
+			margin-top: 80rpx;
+
+			.buttom {
+				flex-grow: 1;
+				border-radius: 100rpx;
+				font-size: $font-lg;
+				width: 300rpx;
+				height: 80rpx;
+				line-height: 80rpx;
+				background-color: $color-green;
+				color: #FFFFFF;
+
+				&.geMoney {
+					border: 1px solid $font-color-disabled;
+					color: $font-color-disabled;
+					background-color: #FFFFFF;
+				}
+			}
+		}
+	}
+
+	.money-box {
+		text-align: center;
+		color: $font-color-dark;
+		font-weight: bold;
+
+		.text {
+			padding-top: 85rpx;
+			font-size: 24rpx;
+			margin-bottom: 20rpx;
+		}
+
+		.money {
+			font-size: 60rpx;
+		}
+	}
+
+	.listbox {
+		margin: 0 20rpx;
+		border-radius: 20rpx;
+	}
+
+	.navbar {
+		background: #fff;
+		padding: 30rpx;
+		border-bottom: 1px solid $page-color-light;
+		border-top-left-radius: 20rpx;
+		border-top-right-radius: 20rpx;
+
+		.title {
+			font-size: 32rpx;
+			font-weight: bold;
+		}
+
+		.alllist {
+			font-size: 28rpx;
+
+		}
+	}
+
+
+	.content {
+		height: 100%;
+
+		.bg {
+			background-color: $color-green;
+			width: 950rpx;
+			position: absolute;
+			left: -100rpx;
+			border-bottom-left-radius: 1000rpx;
+			border-bottom-right-radius: 1000rpx;
+			top: 0rpx;
+			height: 300rpx;
+		}
+
+	}
+
+	.conetntList {
+		padding: 30rpx;
+		background-color: #FFFFFF;
+		border-bottom-left-radius: 20rpx;
+		border-bottom-right-radius: 20rpx;
+
+		.listItem {
+			font-size: 30rpx;
+			color: $font-color-dark;
+			align-items: flex-start;
+		}
+
+		.itemBottom {
+			font-size: 24rpx;
+			color: $font-color-disabled;
+		}
+	}
+</style>

+ 192 - 0
pages/user/money/walletList.vue

@@ -0,0 +1,192 @@
+<template>
+	<view class="content">
+		<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+			<!-- 空白页 -->
+			<empty v-if="navList[0].loaded === true && navList[0].orderList.length === 0"></empty>
+			<!-- 订单列表 -->
+			<view class="momBox" v-for="(list, index) in navList[0].orderList" :key="index">
+				<view class="topMon">
+					<view>
+						<text class="mon">{{list.time}}</text>
+						<!-- <text class="font-size-sm margin-l-10">月</text> -->
+						<image class="iconRight margin-l-10" src="../../../static/icon/dom.png" mode="widthFix"></image>
+					</view>
+					<!-- <view class="textSm font-color-gray">
+						<text>支出:{{list.out}}</text>
+						<text class="margin-l-20">支出:{{list.get}}</text>
+					</view> -->
+				</view>
+				<view v-for="(item,index) in list.list" class="order-item flex">
+					<view class="title-box">
+						<view class="title">
+							<text>{{ item.title }}</text>
+						</view>
+						<view class="time">
+							<text>{{ item.add_time }}</text>
+						</view>
+					</view>
+					<view class="money">
+						<text>{{ (item.pm == 0 ? '-' : '+') + item.number }}</text>
+					</view>
+				</view>
+			</view>
+			<uni-load-more :status="navList[0].loadingType"></uni-load-more>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+	import {
+		spreadCommission,
+	} from '@/api/wallet.js';
+	export default {
+		data() {
+			return {
+				// 头部图高度
+				maxheight: '',
+				tabCurrentIndex: 0,
+				navList: [{
+					state: 0,
+					text: '全部',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}, ],
+				money: ''
+			};
+		},
+		onLoad(options) {
+			this.loadData();
+		},
+		methods: {
+			// 页面跳转
+			navto(e) {
+				uni.navigateTo({
+					url: e
+				});
+			},
+			//获取收入支出信息
+			async loadData(source) {
+				//这里是将订单挂载到tab列表下
+				let index = this.tabCurrentIndex;
+				let navItem = this.navList[index];
+				let state = navItem.state;
+				if (source === 'tabChange' && navItem.loaded === true) {
+					//tab切换只有第一次需要加载数据
+					return;
+				}
+				if (navItem.loadingType === 'loading') {
+					//防止重复加载
+					return;
+				}
+				// 修改当前对象状态为加载中
+				navItem.loadingType = 'loading';
+
+				spreadCommission({
+							page: navItem.page,
+							limit: navItem.limit
+						},
+						state
+					)
+					.then(({
+						data
+					}) => {
+						if (data.length > 0) {
+							navItem.orderList = navItem.orderList.concat(data);
+							console.log(navItem.orderList);
+							navItem.page++;
+						}
+						if (navItem.limit == data.length) {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							navItem.loadingType = 'more';
+							return;
+						} else {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							navItem.loadingType = 'noMore';
+						}
+						uni.hideLoading();
+						this.$set(navItem, 'loaded', true);
+					})
+					.catch(e => {
+						console.log(e);
+					});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+	}
+
+	.money-box {
+		padding-top: var(--status-bar-height);
+		text-align: center;
+		color: $font-color-dark;
+		font-weight: bold;
+
+		.text {
+			padding-top: 85rpx;
+			font-size: 24rpx;
+		}
+
+		.money {
+			font-size: 60rpx;
+		}
+	}
+
+
+	// 列表
+	.order-item {
+		padding: 20rpx 30rpx;
+		line-height: 1.5;
+		border-bottom: 1px solid $page-color-light;
+		margin-left: 20rpx;
+		.title-box {
+			.title {
+				font-size: $font-lg;
+				color: $font-color-base;
+			}
+			.time {
+				font-size: $font-base;
+				color: $font-color-light;
+			}
+		}
+		.money {
+			font-size: $font-lg;
+		}
+	}
+
+	.list-scroll-content {
+		height: 100%;
+		padding-top: 30rpx;
+		.momBox{
+			background-color: #FFFFFF;
+			margin: $page-row-spacing;
+			margin-top: 0rpx;
+			border-radius: 20rpx;
+			overflow: hidden;
+			.topMon{
+				padding: 30rpx 20rpx;
+				border-bottom: 1px solid $page-color-light;
+				.iconRight{
+					width: 22rpx;
+				}
+				.mon{
+					font-size: 36rpx;
+					font-weight: 400;
+				}
+				.textSm{
+					color: $font-color-light;
+					font-size: 22rpx;
+				}
+			}
+		}
+	}
+
+	.content {
+		height: 100%;
+	}
+</style>

+ 444 - 0
pages/user/myteam.vue

@@ -0,0 +1,444 @@
+<template>
+	<view class="content">
+		<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="header">我的推广</view>
+			</view> -->
+			<view class="content-bg">
+				<image src="../../static/img/tg-bg.png" mode=""></image>
+			</view>
+			<view class="money-box">
+				<view class="money">{{ all|| '0' }}</view>
+				<view>我的影响指数</view>
+			</view>
+			<view class="money-box flex" style="padding-top: 20rpx;" >
+				<view style="flex-grow: 1;" @click="navto('/pages/user/model/phb')">人气排行榜</view>
+				<view style="flex-grow: 1;text-align: right;padding-right: 20rpx;" @click="navto('/pages/user/teamph')">团队排行榜</view>
+			</view>
+		</view>
+
+		<scroll-view class="list-scroll-content" :style="{ height: maxheight }" scroll-y @scrolltolower="loadData">
+			<!-- <empty v-if="loaded === true && list.length === 0" :style="{ height: maxheight }"></empty> -->
+
+			<view v-for="(item, index) in list" :key="index" class="order-item flex">
+				<view class="title-box flex_item">
+					<view class="title-avatar">
+						<image :src="item.avatar"></image>
+					</view>
+					<view class="list_tpl">
+						<view class="title">
+							<view class="title-name clamp">{{ item.nickname }}</view>
+						</view>
+						<view class="time">
+							<text>{{ item.mobile }}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+			<uni-load-more :status="loadingType"></uni-load-more>
+		</scroll-view>
+	</view>
+</template>
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import {
+		getChildList
+	} from '@/api/user.js'
+	export default {
+		onReady(res) {
+			var _this = this;
+			uni.getSystemInfo({
+				success: resu => {
+					const query = uni.createSelectorQuery();
+					query.select('.list-scroll-content').boundingClientRect();
+					query.exec(function(res) {
+						_this.maxheight = resu.windowHeight - res[0].top + 'px';
+						console.log('打印页面的剩余高度', _this.height);
+					});
+				},
+				fail: res => {}
+			});
+		},
+		data() {
+			return {
+				// 头部图高度
+				maxheight: '',
+				loadingType: 'more',
+				list: [],
+				page: 1, //当前页数
+				all: '',
+				page: 1,
+				pageSize: 10,
+				loaded: false,
+			};
+		},
+		computed: {
+			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin']),
+			...mapState(['baseURL'])
+		},
+		onLoad(options) {},
+		onShow() {
+			this.loadData();
+		},
+		methods: {
+			// 页面跳转
+			navto(e) {
+				uni.navigateTo({
+					url: e
+				});
+			},
+			//获取收入支出信息
+			async loadData(source) {
+				//这里是将订单挂载到tab列表下
+				let that = this
+				if (that.loadingType === 'loading') {
+					//防止重复加载
+					return;
+				}
+				if (that.loadingType === 'noMore') {
+					//防止重复加载
+					return;
+				}
+				// 修改当前对象状态为加载中
+				that.loadingType = 'loading';
+				getChildList({
+						page: that.page,
+						pageSize: that.pageSize,
+					})
+					.then(({
+						data
+					}) => {
+						that.all = data.totalCount
+						that.list = that.list.concat(data.list)
+						that.page++
+
+						if (that.pageSize == data.list.length) {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							that.loadingType = 'more';
+						} else {
+							//判断是否还有数据, 有改为 more, 没有改为noMore
+							that.loadingType = 'noMore';
+						}
+						that.$set(that, 'loaded', true);
+					})
+					.catch(e => {
+						console.log(e);
+					});
+			},
+			//swiper 切换
+			changeTab(e) {
+				this.tabCurrentIndex = e.target.current;
+				this.loadData('tabChange');
+			},
+			//顶部tab点击
+			tabClick(index) {
+				this.tabCurrentIndex = index;
+			},
+			// 点击返回 我的页面
+			toBack() {
+				uni.switchTab({
+					url: '/pages/user/user'
+				});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		background: #f8f8f8;
+		height: 100%;
+	}
+
+	.status_bar {
+		height: var(--status-bar-height);
+		width: 100%;
+		background: #5dbc7c;
+	}
+
+	.content-money {
+		position: relative;
+		height: 480rpx;
+
+		.content-bg {
+			position: absolute;
+			top: 0;
+			left: 0;
+			right: 0;
+			width: 750rpx;
+			height: 480rpx;
+
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.body-title {
+			height: 80rpx;
+			text-align: center;
+			font-size: 35rpx;
+			position: relative;
+
+			.header {
+				position: absolute;
+				left: 0;
+				top: 0;
+				width: 100%;
+				font-size: 36rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #fffeff;
+				height: 80rpx;
+				font-size: 36rpx;
+				font-weight: 700;
+				z-index: 9;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+			}
+
+			.goback-box {
+				position: absolute;
+				left: 18rpx;
+				top: 0;
+				height: 80rpx;
+				display: flex;
+				align-items: center;
+			}
+
+			.goback {
+				z-index: 100;
+				width: 34rpx;
+				height: 34rpx;
+			}
+		}
+	}
+
+	.money-box {
+		position: relative;
+		z-index: 2;
+		padding-top: 90rpx;
+		color: #ffffff;
+		text-align: center;
+
+		.money {
+			font-size: 72rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #ffffff;
+		}
+
+		.text {
+			font-size: 30rpx;
+		}
+	}
+
+	.order-item {
+		padding: 20rpx 30rpx;
+		line-height: 1.5;
+		background-color: #fff;
+
+		.title-box {
+			width: 100%;
+
+			.title-avatar {
+				flex-shrink: 0;
+				width: 100rpx;
+				height: 100rpx;
+				margin-right: 25rpx;
+				border-radius: 100%;
+
+				image {
+					width: 100%;
+					height: 100%;
+					border-radius: 100%;
+				}
+			}
+
+			.list_tpl {
+				width: 85%;
+
+				.title {
+					display: flex;
+					justify-content: flex-start;
+					font-size: $font-lg;
+					color: $font-color-base;
+					overflow: hidden; //超出的文本隐藏
+					text-overflow: ellipsis; //溢出用省略号显示
+					white-space: nowrap;
+					line-height: 1;
+					text-align: center;
+
+					.title-name {
+						max-width: 40%;
+					}
+
+					.dl {
+						margin-left: 10rpx;
+						width: 93rpx;
+						height: 32rpx;
+						border-radius: 16rpx;
+
+						image {
+							width: 93rpx;
+							height: 32rpx;
+							border-radius: 16rpx;
+						}
+					}
+
+					.class {
+						display: inline-block;
+						margin-left: 10rpx;
+						padding: 6rpx;
+						text-align: center;
+						border: 1px solid #2e58ff;
+						border-radius: 16rpx;
+						font-size: 20rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #2e58ff;
+					}
+				}
+
+				.time {
+					font-size: $font-lg;
+					color: $font-color-light;
+				}
+			}
+		}
+
+		.money {
+			width: 50%;
+			text-align: right;
+			color: #db1935;
+			font-size: $font-lg;
+		}
+	}
+
+	.yeji {
+		position: relative;
+		margin: -72rpx auto 0;
+		width: 690rpx;
+		height: 143rpx;
+		background: #ffffff;
+		box-shadow: 0rpx 0rpx 20rpx 0rpx rgba(50, 50, 52, 0.06);
+		border-radius: 10rpx;
+		display: flex;
+		align-items: center;
+
+		.yeji-a {
+			width: 50%;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+
+			.yeji-top {
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+			}
+
+			.yeji-buttom {
+				font-size: 42rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+			}
+		}
+
+		.border {
+			width: 1rpx;
+			height: 51rpx;
+			background: #dddddd;
+		}
+	}
+
+	.navbar {
+		margin-top: 20rpx;
+		display: flex;
+		height: 88rpx;
+		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: #999999;
+			position: relative;
+
+			&.current {
+				color: #000;
+
+				&:after {
+					content: '';
+					position: absolute;
+					left: 50%;
+					bottom: 0;
+					transform: translateX(-50%);
+					width: 44px;
+					height: 0;
+					border-bottom: 2px solid #fe5b38;
+				}
+			}
+		}
+	}
+
+	.buttom-box {
+		position: relative;
+		background-color: #ffffff;
+		text-align: center;
+		padding: 30rpx 0;
+
+		.buttom {
+			flex-grow: 1;
+		}
+
+		.money {
+
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #ff4173;
+		}
+
+		.text {
+			padding-bottom: 26rpx;
+			font-size: 28rpx;
+			font-weight: 500;
+			color: #666666;
+
+			&.current {
+				border-bottom: 2px solid #ff4173;
+			}
+		}
+
+		.icon {
+			height: 50rpx;
+			width: 48rpx;
+			margin: 0 auto;
+
+			.icon-img {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+</style>

+ 54 - 0
pages/user/realName/cropper.vue

@@ -0,0 +1,54 @@
+<template>
+	<view>
+		<ksp-cropper mode="fixed" :width="minPicWidth" :height="minPicHeight" :maxWidth="1024" :maxHeight="1024"
+			:url="url" @cancel="oncancel" @ok="uploadSuccess"></ksp-cropper>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				// 保存触发事件
+				eventChannel: '',
+				minPicWidth: 100, //保存图片最小宽
+				minPicHeight: 100, //保存图片最小高
+				url: '' //图片
+
+			}
+		},
+		onLoad(opt) {
+			const that = this;
+			if (opt.width) {
+				that.minPicWidth = +opt.width;
+			}
+			if (opt.height) {
+				that.minPicHeight = +opt.height;
+			}
+			// #ifdef APP-NVUE
+			that.eventChannel = that.$scope.eventChannel; // 兼容APP-NVUE
+			// #endif
+			// #ifndef APP-NVUE
+			that.eventChannel = that.getOpenerEventChannel();
+			// #endif
+			that.eventChannel.on('urlNext', function(data) {
+				that.url = data.url;
+			})
+		},
+		methods: {
+			oncancel(e) {
+				uni.navigateBack();
+				console.log(e, 'on');
+			},
+			// 3.定义自己的回调函数
+			uploadSuccess(tempFilePath) {
+				this.eventChannel.emit('uploadSuccess', tempFilePath.path);
+				// 后退回原来的页面
+				uni.navigateBack();
+			},
+
+		}
+	}
+</script>
+<style>
+</style>

+ 391 - 0
pages/user/realName/realNameAuthentication.vue

@@ -0,0 +1,391 @@
+<template>
+	<view class="content padding-b-30">
+		<view class="listBox" @click="navCroper(480,640,'upimg')">
+			<view class="list">
+				<view class="flex listItem">
+					<view class="titleBox">
+						<view class="title">正面照</view>
+						<view class="font-color-gray font-size-sm">
+							上传您的正面照
+						</view>
+					</view>
+					<view class="right flex">
+						<!-- #ifdef H5 -->
+						<image class="userRenzheng" :src="upimg||this.urlFile + '/static/image/realUser.png'"
+							mode="widthFix"></image>
+						<!-- #endif -->
+						<!-- #ifndef H5 -->
+						<image class="userRenzheng" :src="upimg||'/static/image/realUser.png'" mode="widthFix"></image>
+						<!-- #endif -->
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="listBox" @click="navCroper(400,300,'sfzZm')">
+			<view class="list">
+				<view class="flex listItem">
+					<view class="titleBox">
+						<view class="title">身份证正面</view>
+						<view class="font-color-gray font-size-sm">
+							上传您的身份证正面
+						</view>
+					</view>
+					<view class="right flex">
+						<!-- #ifdef H5 -->
+						<image class="userRenzheng" :src="sfzZm||this.urlFile + '/static/image/realZm.png'"
+							mode="widthFix"></image>
+						<!-- #endif -->
+						<!-- #ifndef H5 -->
+						<image class="userRenzheng" :src="sfzZm||'/static/image/realZm.png'" mode="widthFix"></image>
+						<!-- #endif -->
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="listBox" @click="navCroper(400,300,'sfzFm')">
+			<view class="list">
+				<view class="flex listItem">
+					<view class="titleBox">
+						<view class="title">身份证反面</view>
+						<view class="font-color-gray font-size-sm">
+							上传您的身份证反面
+						</view>
+					</view>
+					<view class="right flex">
+						<!-- #ifdef H5 -->
+						<image class="userRenzheng" :src="sfzFm||this.urlFile + '/static/image/realBm.png'"
+							mode="widthFix"></image>
+						<!-- #endif -->
+						<!-- #ifndef H5 -->
+						<image class="userRenzheng" :src="sfzFm||'/static/image/realBm.png'" mode="widthFix"></image>
+						<!-- #endif -->
+					</view>
+				</view>
+			</view>
+		</view>
+    
+		<view class="listBox">
+			<view class="list">
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">真实姓名</text>
+					</view>
+					<view class="right flex">
+						<input class="input" v-model="name" type="text" placeholder="请填写真实姓名"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+				<view class="flex listItem">
+					<view class="flex titleBox">
+						<text class="title">身份证号</text>
+					</view>
+					<view class="right flex">
+						<input class="input" v-model="cardId" type="text" placeholder="请填写身份证号"
+							placeholder-class="placeholder" />
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="base-buttom" :class="{ 'bg-gray': loding }" @click="loding ? '' : confirm()">提交</view>
+	</view>
+</template>
+
+<script>
+	import {
+		real_name
+	} from '@/api/user.js';
+	import {
+		mapState
+	} from "vuex"
+	export default {
+		data() {
+			return {
+				name: '', //用户名称
+				cardId: '', //身份证号
+				upimg: '', //图片地址
+				xyfImg: '', //信用分图片
+				sfzZm: '', //身份证正面
+				sfzFm: '', //身份证反面
+				loding: false, //是否载入中
+			};
+		},
+		onLoad(options) {},
+		computed: {
+			// #ifdef H5
+			...mapState(['urlFile']),
+			// #endif
+			...mapState(['baseURL']),
+		},
+		methods: {
+			upLoad(path) {
+				// #ifdef H5
+				console.log(path,'h5');
+				// #endif
+				uni.showLoading({
+					title: '图片上传中',
+					mask: true
+				});
+				return new Promise((resolve, error) => {
+					uni.uploadFile({
+						url: this.baseURL + '/api/upload/image', //仅为示例,非真实的接口地址
+						filePath: path,
+						name: 'file',
+						header: {
+							"Authori-zation": 'Bearer ' + uni.getStorageSync('token')
+						},
+						success: (uploadFileRes) => {
+							if ("string" === typeof uploadFileRes.data) {
+								resolve(JSON.parse(uploadFileRes.data).data)
+							} else {
+								resolve(uploadFileRes.data.data)
+							}
+						},
+						complete() {
+							uni.hideLoading()
+						}
+					});
+				})
+			},
+			// 图片裁切
+			/**
+			 * @param {Number} w 裁切宽度比例
+			 * @param {Number} h 裁切高度比例
+			 * @param {Number} mw 图片最小宽度
+			 * @param {Number} mh 图片最小高度
+			 * @param {String} url url修改
+			 */
+			navCroper(w, h, type) {
+				let that = this;
+				let tt = (type=='upimg'?2:1)
+				this.onImg(tt).then((url) => {
+					uni.navigateTo({
+						url: `./cropper?width=${w}&height=${h}`,
+						events: {
+							uploadSuccess(res) {
+								that.upLoad(res).then((urldata) => {
+									that[type] = urldata.url;
+								})
+								// console.log(e, '接受数据');
+							}
+						},
+						success: function(res) {
+							// 通过eventChannel向被打开页面传送数据
+							res.eventChannel.emit('urlNext', {
+								url
+							})
+						}
+					})
+				})
+			},
+			onImg(type) {
+				const _this = this
+				return new Promise((ok, erro) => {
+					// 判断是否需要选择
+					if(type==1){
+						uni.showActionSheet({
+							itemList: ['拍照', '选择一张照片'],
+							success: function(res) {
+								_this.chooseImage(res.tapIndex).then((url) => {
+									ok(url)
+								}).catch((res) => {
+									erro(res)
+								})
+							},
+							fail: function(res) {
+								erro(res)
+								console.log(res.errMsg);
+							}
+						});
+					}
+					// 判断是否只需要拍照
+					if(type==2){
+						_this.chooseImage(0).then((url) => {
+							ok(url)
+						}).catch((res) => {
+							erro(res)
+						})
+					}
+					
+					
+
+				})
+
+			},
+			chooseImage: function(index) {
+				const _this = this
+				return new Promise((ok, error) => {
+					// 从相册/相机选择
+					// 如需直接开相机或直接选相册,请只使用一个选项
+					const sourceType = index === 0 ? ['camera'] : ['album']
+					uni.chooseImage({
+						count: 1, //默认9
+						sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+						sourceType: sourceType,
+						success: function(res) {
+							ok(res.tempFilePaths[0])
+						},
+						fail(e) {
+							uni.showModal({
+								title: '文件打开错误',
+								content: '请设置授权文件存储权限',
+								showCancel: false,
+							});
+							error(e)
+						}
+					});
+				})
+
+			},
+
+			// 实名认证
+			confirm(e) {
+				if (!this.name) {
+					uni.showModal({
+						title: '错误',
+						content: '请填写姓名',
+						showCancel: false,
+					});
+					return
+				}
+				if (!this.cardId) {
+					uni.showModal({
+						title: '错误',
+						content: '请填写身份证号',
+						showCancel: false,
+					});
+					return
+				}
+				if (!this.upimg) {
+					uni.showModal({
+						title: '错误',
+						content: '请上传正面照',
+						showCancel: false,
+					});
+					return
+				}
+				if (!this.sfzZm) {
+					uni.showModal({
+						title: '错误',
+						content: '请上传身份证正面照',
+						showCancel: false,
+					});
+					return
+				}
+				if (!this.sfzFm) {
+					uni.showModal({
+						title: '错误',
+						content: '请上传身份证反面照',
+						showCancel: false,
+					});
+					return
+				}
+				/*
+				if (!this.xyfImg) {
+					uni.showModal({
+						title: '错误',
+						content: '上传您的信用分截图',
+						showCancel: false,
+					});
+					return
+				}*/
+				this.loding = true;
+				real_name({
+						real_name: this.name,
+						id_card: this.cardId,
+						face_image: this.upimg.replace('data:image/jpeg;base64,', ''),
+						id_card_front_image: this.sfzZm.replace('data:image/jpeg;base64,', ''),
+						id_card_back_image: this.sfzFm.replace('data:image/jpeg;base64,', ''),
+						pay_points: this.xyfImg.replace('data:image/jpeg;base64,', ''),
+
+					})
+					.then((e) => {
+						this.loding = false;
+						if (e.msg == '已实名') {
+							uni.showModal({
+								title: '提示',
+								content: '恭喜您实名认证成功',
+								showCancel: false,
+								complete: () => {
+									uni.switchTab({
+										url: '/pages/userhome/user'
+									})
+								}
+							});
+						} else {
+							this.$api.msg('认证失败');
+						}
+					})
+					.catch(err => {
+						this.loding = false;
+						console.log(err);
+					});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.content,
+	page {
+		min-height: 100%;
+	}
+
+	.listBox {
+		margin: $page-row-spacing;
+		margin-top: 30rpx;
+		border-radius: 20rpx;
+		overflow: hidden;
+		background-color: #FFFFFF;
+	}
+
+	.list {
+		.input {
+			text-align: right;
+			font-size: $font-base;
+			color: $color-gray;
+			width: 100%;
+		}
+
+		.listItem {
+			padding: 35rpx 40rpx;
+			border-bottom: 1px solid $page-color-light;
+		}
+
+		.listIconImg {
+			width: 36rpx;
+		}
+
+		.right {
+			color: $font-color-light;
+			font-size: $font-base;
+			flex-grow: 1;
+			justify-content: flex-end;
+
+			.userRenzheng {
+				width: 400rpx;
+			}
+
+			.img {
+				width: 26rpx;
+			}
+		}
+
+		.titleBox {
+			.title {
+				color: $font-color-base;
+				font-size: $font-base;
+			}
+		}
+	}
+
+	.bg-gray {
+		background-color: $color-gray;
+	}
+
+	.base-buttom {
+		position: relative;
+		bottom: auto;
+		right: auto;
+		left: auto;
+	}
+</style>

+ 441 - 0
pages/user/shareQrCode.vue

@@ -0,0 +1,441 @@
+<template>
+	<view class="container">
+		<view class="" style="height: 80rpx;">
+			
+		</view>
+		<canvas :style="{ width:  canvasW + 'px', height: canvasH + 'px',}" canvas-id="myCanvas" id="myCanvas" class="hb"></canvas>
+		<!-- #ifndef MP -->
+		<div class="preserve">
+			<div class="line"></div>
+			<div class="tip">长按保存图片</div>
+			<div class="line"></div>
+		</div>
+		<!-- #endif -->
+
+		<!-- #ifdef MP -->
+		<view class='keep' @click='saveShareQrcode' v-if="!loading">保存海报</view>
+		<!-- #endif -->
+
+	</view>
+</template>
+
+<script>
+	import {
+		spreadBanner,
+		getWxmpInviteQrcode
+	} from '@/api/user.js';
+	import {
+		qrcode
+	} from '@/api/user.js';
+	import {
+		mapState
+	} from 'vuex';
+	export default {
+		// #ifdef MP
+		onShareAppMessage: function(res) {
+			// if (res.from === 'button') {
+
+			// 保存邀请人
+			let path = '/pages/index/index?' + 'spread=' + this.userInfo.uid;
+			console.log('path', path)
+			let data = {
+				path: path,
+				imageUrl: this.poster,
+				title: this.userInfo.nickname + '邀请您进入母婴界严选'
+			};
+			console.log('---data---', data)
+			return data;
+			// }
+		},
+		// #endif
+		data() {
+			return {
+				bl: 0.95,//画布比例
+				canvasW: '',
+				canvasH: '',
+				bgimg: '',
+				qrimg: '',
+				shareList: [],
+				swiperIndex: 0,
+				poster: '', // 当前海报
+				loading: true
+			}
+		},
+		onLoad(option) {
+			// console.log('---option---',option)
+			// let path = '/pages/index/index?' + 'spread=' + this.userInfo.uid;
+			// console.log('path',path)
+			// if(option.scene){
+			// 	// 存储邀请人
+			// 	this.spread = opt.pid;
+			// 	uni.setStorageSync('spread', opt.pid);
+			// }
+			this.loadData();
+		},
+		computed: {
+			...mapState(['userInfo']),
+		},
+		methods: {
+			bindchange(e) {
+				let shareList = this.shareList;
+				this.swiperIndex = e.detail.current;
+				// #ifdef MP
+				this.poster = shareList[this.swiperIndex].poster;
+				// #endif 
+
+				// // #ifndef MP
+				// this.poster = shareList[this.swiperIndex].wap_poster;
+				// // #endif 
+
+				console.log(this.poster)
+			},
+
+			// 保存海报
+			savePosterPath: function() {
+				let that = this;
+				if (that.poster == '') {
+					// that.poster = that.shareList[0].poster;
+					that.poster = this.bgimg
+				}
+				uni.downloadFile({
+					url: that.poster,
+					success(resFile) {
+						if (resFile.statusCode === 200) {
+							uni.getSetting({
+								success(res) {
+									if (!res.authSetting['scope.writePhotosAlbum']) {
+										uni.authorize({
+											scope: 'scope.writePhotosAlbum',
+											success() {
+												uni.saveImageToPhotosAlbum({
+													filePath: resFile.tempFilePath,
+													success: function(res) {
+														return that.$api.msg(
+															'保存成功');
+													},
+													fail: function(res) {
+														return that.$api.msg(res
+															.errMsg);
+													},
+													complete: function(res) {},
+												})
+											},
+											fail() {
+												uni.showModal({
+													title: '您已拒绝获取相册权限',
+													content: '是否进入权限管理,调整授权?',
+													success(res) {
+														if (res.confirm) {
+															uni.openSetting({
+																success: function(
+																	res) {
+																	console
+																		.log(
+																			res
+																			.authSetting
+																			)
+																}
+															});
+														} else if (res.cancel) {
+															return that.$api.msg(
+																'已取消!');
+														}
+													}
+												})
+											}
+										})
+									} else {
+										uni.saveImageToPhotosAlbum({
+											filePath: resFile.tempFilePath,
+											success: function(res) {
+												return that.$api.msg('保存成功');
+											},
+											fail: function(res) {
+												return that.$api.msg(res.errMsg);
+											},
+											complete: function(res) {},
+										})
+									}
+								},
+								fail(res) {
+
+								}
+							})
+						} else {
+							return that.$api.msg(resFile.errMsg);
+						}
+					},
+					fail(res) {
+						return that.$api.msg(res.errMsg);
+					}
+				})
+			},
+
+			// #ifdef MP-WEIXIN
+			// 保存画图图片到本地
+			seav(url) {
+				uni.showLoading({
+					title: '生成中...',
+					mask: true
+				});
+				uni.saveImageToPhotosAlbum({
+					filePath: this.poster,
+					complete(result) {
+						uni.hideLoading();
+						console.log(result);
+						uni.showToast({
+							title: '保存图片成功!',
+							duration: 2000,
+							icon: 'none'
+						});
+					}
+				});
+			},
+			// #endif
+
+			// 获取海报
+			loadData() {
+				let obj = this;
+				uni.showLoading({
+					title: '获取中',
+					mask: true,
+				});
+				// spreadBanner({
+				// 	// #ifdef H5
+				// 	type: 2,
+				// 	// #endif
+				// 	// #ifdef MP
+				// 	type: 1
+				// 	// #endif
+				// }).then(res =>{
+				// 	uni.hideLoading();
+				// 	obj.shareList = res.data;
+				// 	console.log('obj.shareList',obj.shareList);
+				// }).catch(err => {
+				// 	uni.hideLoading();
+				// });
+				getWxmpInviteQrcode().then(res => {
+					console.log(res)
+					obj.bgimg = res.data.bgimg
+					obj.qrcode = res.data.qrcode
+					uni.hideLoading();
+					obj.createPoster()
+					
+				})
+			},
+			async createPoster() {
+				let that = this
+				// 获取设备信息,主要获取宽度,赋值给canvasW 也就是宽度:100%
+				this.SystemInfo = await this.getSystemInfo();
+				// 获取商品主图,二维码信息,APP端会返回图片的本地路径(H5端只能返回原路径)
+				this.goodsImg = await this.getImageInfo(that.bgimg);
+				this.ewmImg = await this.getImageInfo(that.qrcode);
+				this.canvasW = this.SystemInfo.windowWidth * that.bl; // 画布宽度
+				this.ratio = this.SystemInfo.windowWidth / 750;
+				let x = 750*this.goodsImg.height/this.goodsImg.width
+				// this.canvasW =750 * this.ratio;
+				this.canvasH = x * this.ratio * that.bl;
+
+				this.ewmW = 220 * this.ratio;
+	
+				
+				console.log(this.canvasH, 'this.canvasH')
+				// this.canvasH = this.goodsImg.height + this.ewmW + 200;  // 画布高度 = 主图高度+二维码高度 + 文字图片的间距(大概50)
+			
+				// 如果主图,二维码图片,设备信息都获取成功,开始绘制海报,这里需要用setTimeout延时绘制,否则可能会出现图片不显示。
+				if (this.goodsImg.errMsg == 'getImageInfo:ok' && this.ewmImg.errMsg == 'getImageInfo:ok' && this
+					.SystemInfo.errMsg == 'getSystemInfo:ok') {
+					console.log('ok')
+					uni.showToast({
+						icon: 'loading',
+						mask: true,
+						duration: 10000,
+						title: '海报绘制中',
+					});
+					setTimeout(() => {
+						var ctx = uni.createCanvasContext('myCanvas', this);
+						// 填充背景色,白色
+						ctx.setFillStyle('#fff'); // 默认白色
+						ctx.fillRect(0, 0, this.canvasW, this.canvasH) // fillRect(x,y,宽度,高度)
+			
+						// 绘制商品主图,二维码
+						ctx.drawImage(this.goodsImg.path, 0, 0, this.canvasW, this
+							.canvasH) // drawImage(图片路径,x,y,绘制图像的宽度,绘制图像的高度)
+							ctx.drawImage(this.ewmImg.path, (this.canvasW / 2 - this.ewmW / 2),this.canvasH - 85*this.ratio - this.ewmW,
+								this.ewmW, this.ewmW) // drawImage(图片路径,x,y,绘制图像的宽度,绘制图像的高度,二维码的宽,高)
+						
+			
+						// 3、绘制商品标题,多余文字自动换行
+						ctx.setFontSize(16); // setFontSize() 设置字体字号
+						ctx.setFillStyle('#333'); // setFillStyle() 设置字体颜色
+						ctx.draw(false, (ret) => { // draw方法 把以上内容画到 canvas 中。
+							console.log(ret)
+							uni.showToast({
+								icon: 'none',
+								title: '生成成功!',
+							});
+							that.loading = false
+							that.fina = true
+							uni.canvasToTempFilePath({ // 保存canvas为图片
+								canvasId: 'myCanvas',
+								quality: 1,
+								fileType: 'jpg',
+								complete: function(res) {
+									// 在H5平台下,tempFilePath 为 base64, // 图片提示跨域 H5保存base64失败,APP端正常输出临时路径
+									console.log(res)
+									that.canvasShow = false
+									that.shareQrcodeUrl = res.tempFilePath
+									that.$forceUpdate()
+									setTimeout(function() {
+										console.log(that.shareQrcodeUrl, that
+											.canvasShow)
+									}, 2000)
+								},
+							})
+						});
+					}, 1500)
+				} else {
+					console.log('err')
+				}
+			},
+			// 获取设备信息
+			getSystemInfo() {
+				return new Promise((req, rej) => {
+					uni.getSystemInfo({
+						success: function(res) {
+							req(res)
+						}
+					});
+				})
+			},
+			// 获取图片信息
+			getImageInfo(image) {
+				return new Promise((req, rej) => {
+					uni.getImageInfo({
+						src: image,
+						success: function(res) {
+							req(res)
+						},
+					});
+				})
+			},
+			//保存图片
+			saveShareQrcode() {
+				console.log(this.shareQrcodeUrl)
+				uni.saveImageToPhotosAlbum({
+					filePath: this.shareQrcodeUrl,
+					success: (res) => {
+						uni.showToast({
+							icon: 'none',
+							position: 'bottom',
+							title: "成功保存到相册",
+						});
+					},
+					fail: (err) => {
+						//重新提示用户打开保存图片的授权
+						if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny") {
+							uni.showModal({
+								title: '提示',
+								content: '需要您授权保存相册',
+								showCancel: false,
+								success(res) {
+									if (res.confirm) {
+										uni.openSetting({
+											success(settingdata) {
+												if (settingdata.authSetting[
+														'scope.writePhotosAlbum']) {
+													uni.showModal({
+														title: '提示',
+														content: '获取权限成功,再次保存图片即可成功',
+														showCancel: false,
+													})
+												} else {
+													uni.showModal({
+														title: '提示',
+														content: '获取权限失败,无法保存到相册',
+														showCancel: false
+													})
+												}
+											}
+										})
+									}
+								}
+							})
+						}
+					},
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background: #a3a3a3;
+		height: 100%;
+	}
+
+	.container {
+		width: 100%;
+		padding-bottom: 100rpx;
+		.posters-box {
+			width: 100%;
+			height: 1000rpx;
+			margin-top: 40rpx;
+
+			.slide-image {
+				width: 100%;
+				height: 100%;
+				border-radius: 15rpx;
+			}
+		}
+
+		.posters-box .slide-image.active {
+			transform: none;
+			transition: all 0.2s ease-in 0s;
+		}
+
+		.posters-box .slide-image.quiet {
+			transform: scale(0.8333333);
+			transition: all 0.2s ease-in 0s;
+		}
+
+		.keep {
+			font-size: 30rpx;
+			background: $base-color;
+			color: #fff;
+			width: 750rpx;
+			position: fixed;
+			height: 100rpx;
+			text-align: center;
+			line-height: 100rpx;
+			bottom: 0;
+			left: 0;
+		}
+	}
+
+	.preserve {
+		color: #fff;
+		text-align: center;
+		margin-top: 38rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+
+		.line {
+			width: 100rpx;
+			height: 1px;
+			background-color: #fff;
+		}
+
+		.tip {
+			margin: 0 20rpx;
+			font-size: 28rpx;
+		}
+	}
+	.hb {
+		margin: auto;
+		border-radius: 20rpx;
+		overflow: hidden;
+	}
+</style>

+ 397 - 0
pages/user/teamph.vue

@@ -0,0 +1,397 @@
+<template>
+	<view class="content">
+		<view class="nav flex">
+			<view class="nav-item" v-for="(item,index) in navList" @click="navClick(index)"
+				:class="{'action': index == currentIndex}">
+				{{item.title}}
+			</view>
+		</view>
+		<view class="ph-top">
+			<view class="ph-m"></view>
+			<view class="ph flex">
+
+				<view class="ph-item flex">
+					<view class="item-logo yj-logo">
+						<image :src="navList[currentIndex].list[1].avatar" mode="" class="avt"></image>
+					</view>
+					<view class="item-name">
+						{{navList[currentIndex].list[1].nickname}}
+					</view>
+					<view class="item-id">
+						ID: {{navList[currentIndex].list[1].uid}}
+					</view>
+					<view class="item-tit">
+						团队数
+					</view>
+					<view class="item-val">
+						{{navList[currentIndex].list[1].count}}
+					</view>
+				</view>
+				<view class="ph-item flex">
+					<view class="item-logo gj-logo">
+						<image :src="navList[currentIndex].list[0].avatar" mode="" class="avt"></image>
+					</view>
+					<view class="item-name">
+						{{navList[currentIndex].list[0].nickname}}
+					</view>
+					<view class="item-id">
+						ID: {{navList[currentIndex].list[0].uid}}
+					</view>
+					<view class="item-tit">
+						团队数
+					</view>
+					<view class="item-val">
+						{{navList[currentIndex].list[0].count}}
+					</view>
+				</view>
+				<view class="ph-item flex">
+					<view class="item-logo jj-logo">
+						<image :src="navList[currentIndex].list[2].avatar" mode="" class="avt"></image>
+					</view>
+					<view class="item-name">
+						{{navList[currentIndex].list[2].nickname}}
+					</view>
+					<view class="item-id">
+						ID: {{navList[currentIndex].list[2].uid}}
+					</view>
+					<view class="item-tit">
+						团队数
+					</view>
+					<view class="item-val">
+						{{navList[currentIndex].list[2].count}}
+					</view>
+				</view>
+			</view>
+			<image src="../../static/icon/yy.png" mode="" class="yy"></image>
+		</view>
+		<scroll-view scroll-y="true" class="grop-list" :style="{'height': max_height}">
+			<view class="grop-item flex" v-for="item in 10">
+				<view class="item-xh">
+					4
+				</view>
+				<image src="" mode="" class="item-logo"></image>
+				<view class="item-info">
+					<view class="info-name">
+						李淡淡
+					</view>
+					<view class="info-id">
+						ID: 09124
+					</view>
+				</view>
+				<view class="item-tg">
+					<view class="tg-val">
+						233
+					</view>
+					<view class="tg-tit">
+						团队数
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+	import { getInviterRanking } from '@/api/user.js'
+	export default {
+		data() {
+			return {
+				max_height: '',
+				navList: [{
+					title: '周排行',
+					time: ((new Date().setHours(0, 0, 0) - (new Date().getDay() - 1) *24 * 60 * 60 *1000)/1000).toFixed(0),
+					times: ((new Date().setHours(0, 0, 0) + (7 - new Date().getDay()) *24 * 60 * 60 *1000)/1000).toFixed(0),
+					list: [],
+					page: 1,
+					limit: 10,
+					loadingType: 'more',
+					loaded: false
+				}, {
+					title: '月排行',
+					time: (new Date(new Date(new Date().getFullYear(), new Date().getMonth(), 1).setHours(0, 0, 0)).getTime()/1000).toFixed(0),
+					times: ((new Date(new Date().getFullYear(), new Date().getMonth()+ 1, 0).setHours(23, 59, 59, 59))/1000).toFixed(0),
+					list: [],
+					page: 1,
+					limit: 10,
+					loadingType: 'more',
+					loaded: false
+				}],
+				currentIndex: 0,
+			}
+		},
+		onLoad() {
+			this.getInviterRanking()
+		},
+		computed: {
+			showList() {
+				return this.navList[this.currentIndex].list
+			}
+		},
+		onShow() {
+			
+		},
+		onReachBottom() {
+
+		},
+		onReady() {
+			var obj = this;
+			uni.getSystemInfo({
+				success: resu => {
+					const query = uni.createSelectorQuery();
+					query.select('.grop-list').boundingClientRect();
+					query.exec(function(res) {
+						obj.max_height = resu.windowHeight - res[0].top + 'px';
+					});
+				},
+				fail: res => {}
+			});
+		},
+		methods: {
+			navClick(index) {
+				this.currentIndex = index
+				this.getInviterRanking()
+			},
+			getInviterRanking() {
+				let that = this
+				let navitem = that.navList[that.currentIndex]
+				if(navitem.loadingType == 'loading' || navitem.loadingType == 'noMore') {
+					return
+				}
+				if(navitem.loaded) {
+					return
+				}
+				navitem.loadingType = 'loading'
+				getInviterRanking({
+					time: navitem.time,
+					times: navitem.times,
+					page: navitem.page,
+					pageSize: navitem.pageSize
+				}).then(res => {
+					console.log(res);
+					navitem.list = navitem.list.concat(res.data.list)
+					if(navitem.limit == res.data.list.length) {
+						navitem.loadingType = 'more'
+					}else {
+						navitem.loadingType = 'noMore'
+					}
+					navitem.loaded = true
+				}).catch(err => {
+					navitem.loaded = false
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.nav {
+		width: 750rpx;
+		height: 88rpx;
+
+		.nav-item {
+			line-height: 88rpx;
+			width: 50%;
+			text-align: center;
+			font-size: 30rpx;
+			font-weight: 500;
+			color: #333333;
+			height: 100%;
+		}
+
+		.action {
+			font-weight: bold;
+			position: relative;
+
+			&::after {
+				content: '';
+				width: 50rpx;
+				height: 6rpx;
+				background: #FE5B38;
+				border-radius: 3rpx;
+				position: absolute;
+				left: 0;
+				right: 0;
+				bottom: 6rpx;
+				margin: auto;
+			}
+		}
+
+		background-color: #fff;
+	}
+
+	.ph-top {
+		width: 750rpx;
+		height: 555rpx;
+		background-color: #fc6795;
+		position: relative;
+
+		.yy {
+			width: 261rpx;
+			height: 195rpx;
+			position: absolute;
+			top: 131rpx;
+			left: 0;
+			right: 0;
+			margin: auto;
+		}
+
+		.ph-m {
+			width: 233rpx;
+			height: 100rpx;
+			border-radius: 20rpx 20rpx 0 0;
+			background-color: #fff;
+			position: absolute;
+			top: 70rpx;
+			left: 0;
+			right: 0;
+			margin: auto;
+		}
+
+		.ph {
+			height: 360rpx;
+			width: 702rpx;
+			background-color: #fff;
+			border-radius: 20rpx;
+			align-items: flex-end;
+			position: absolute;
+			bottom: 65rpx;
+			left: 0;
+			right: 0;
+			margin: auto;
+
+			.ph-item {
+				flex-grow: 1;
+				flex-direction: column;
+				justify-content: flex-end;
+				padding-bottom: 30rpx;
+
+				.item-logo {
+					width: 90rpx;
+					height: 90rpx;
+					position: relative;
+
+					.avt {
+						width: 100%;
+						height: 100%;
+						border-radius: 50%;
+						background-color: #eee;
+					}
+				}
+
+				.gj-logo {
+					width: 120rpx;
+					height: 120rpx;
+					background-color: #eee;
+					border-radius: 50%;
+
+					&::after {
+						content: '';
+						width: 51rpx;
+						height: 49rpx;
+						position: absolute;
+						top: -15rpx;
+						right: -15rpx;
+						background: url($base-url + '/resource/icon/gj.png') no-repeat;
+						background-size: 100% 100%;
+					}
+				}
+
+				.yj-logo {
+					&::after {
+						content: '';
+						width: 37rpx;
+						height: 35rpx;
+						position: absolute;
+						top: -12rpx;
+						right: -12rpx;
+						background: url($base-url + '/resource/icon/yj.png') no-repeat;
+						background-size: 100% 100%;
+					}
+				}
+
+				.jj-logo {
+					&::after {
+						content: '';
+						width: 37rpx;
+						height: 35rpx;
+						position: absolute;
+						top: -12rpx;
+						right: -12rpx;
+						background: url($base-url + '/resource/icon/jj.png') no-repeat;
+						background-size: 100% 100%;
+					}
+				}
+
+				.item-name {
+					font-size: 28rpx;
+					font-weight: bold;
+					color: #3F454B;
+					margin: 15rpx 0 10rpx;
+				}
+
+				.item-id {
+					font-size: 24rpx;
+					font-weight: 400;
+					color: #606972;
+				}
+
+				.item-tit {
+					font-size: 24rpx;
+					font-weight: 500;
+					color: #999999;
+					margin: 25rpx 0 15rpx;
+				}
+
+				.item-val {
+					font-size: 30rpx;
+					font-weight: 500;
+					color: #FA2740;
+				}
+			}
+		}
+	}
+	.grop-item {
+		margin: auto;
+		width: 702rpx;
+		height:150rpx;
+		border-bottom: 1px solid #F0F0F0;
+		.item-logo {
+			width: 90rpx;
+			height: 90rpx;
+			border-radius: 50%;
+			background-color: #eee;
+			margin: 0 20rpx;
+		}
+		.item-info {
+			flex-grow: 1;
+		}
+		.item-info {
+			.info-name {
+				margin-bottom: 10rpx;
+				font-size: 28rpx;
+				font-weight: bold;
+				color: #3F454B;
+			}
+			.info-id {
+				font-size: 24rpx;
+				font-weight: 400;
+				color: #606972;
+			}
+		}
+		.item-tg {
+			flex-shrink: 0;
+			.tg-tit {
+				font-size: 24rpx;
+				font-weight: 500;
+				color: #999999;
+			}
+			.tg-val {
+				font-size: 28rpx;
+				font-weight: 500;
+				color: #FA2740;
+				margin-bottom: 10rpx;
+			}
+		}
+		
+	}
+</style>

+ 509 - 0
pages/userhome/user.vue

@@ -0,0 +1,509 @@
+<template>
+	<view class="container">
+		<scroll-view class="content-box" scroll-y="true">
+			<view class="user-section">
+				<view class="user-info-box ">
+					<view class="detail flex">
+						<view class="portrait-box" @click="navTo('/pages/set/userinfo')">
+							<image class="portrait" :src="user.avatar || '/static/error/missing-face.png'"></image>
+						</view>
+						<view class="info-box">
+							<view class="username flex-start">
+								<text class="clamp padding-r-20">
+									{{ user.nickname || '游客' }}
+								</text>
+
+								<view class="tipLevel flex-shrink-false">
+								</view>
+							</view>
+							<view class="flex-start flex">
+								<view class="authentication">{{user.mobile}}</view>
+							</view>
+						</view>
+						<view class="righ-tbox flex">
+							<image class="right-tip" src="../../static/icon/tiptop.png" mode="scaleToFill"></image>
+							<block v-if="!user.work_type_title">
+								普通用户
+							</block>
+							<block v-else>
+								{{user.work_type_title}}
+							</block>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="nav-model flex" @click="navcard">
+				<view class="right-card">
+					<view class="title">
+						我的数字名片
+					</view>
+					<view class="tip" v-if="user.info_audit_status==-2">
+						审核成功即可获得母婴界数字名片
+					</view>
+					<view class="tip" v-else-if="user.info_audit_status==1">
+						点击查看您的母婴界数字名片
+					</view>
+					<view class="tip" v-else-if="user.info_audit_status==0&&user.work_type_id<=0">
+						数字名片资料审核中请等待审核完毕
+					</view>
+					<view class="tip" v-else-if="user.info_audit_status==0&&user.work_type_id>0">
+						修改数字名片资料审核中请等待审核完毕
+					</view>
+				</view>
+				<image class="next" src="../../static/icon/next2.png" mode="scaleToFill"></image>
+			</view>
+			<view class="nav-model-rz flex" v-if="user.work_type_id>0&&user.type_audit_status!=1" @click="user.type_audit_status==0||navTo('/pages/user/model/shoprz')">
+				<view class="tiptext" v-if="user.type_audit_status==-2">
+					您未完成平台认证,请立即认证>>
+				</view>
+				<view class="tiptext" v-else-if="user.type_audit_status==-1">
+					您平台认证失败,请重新认证>>
+				</view>
+				<view class="tiptext" v-else-if="user.type_audit_status==-3">
+					您平台认证已失效,请重新认证>>
+				</view>
+				<view class="tiptext" v-else-if="user.type_audit_status==0">
+					您已提交认证信息请等待认证结束
+				</view>
+				<view class="rztext" v-if="user.type_audit_status==-2">
+					立即认证
+				</view>
+				<view class="rztext" v-else-if='user.type_audit_status==-3||user.type_audit_status==-1'>
+					重新生成
+				</view>
+			</view>
+			<view class="cover-container">
+				<view class="listBox">
+					<view class="list">
+						<!-- <view class="flex listItem" @click="navTo('/pages/user/myCart/myCart')">
+							<view class="flex titleBox">
+								<image class="listIconImg" src="../../static/icon/mymoney.png" mode="widthFix"></image>
+								<text class="title">我的钱包</text>
+							</view>
+							<view class="right flex">
+								<text></text>
+								<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+							</view>
+						</view> -->
+						
+						<view class="flex listItem" @click="navTo('/pages/user/myteam')">
+							<view class="flex titleBox">
+								<image class="listIconImg" src="../../static/icon/myshare.png" mode="widthFix"></image>
+								<text class="title">影响指数</text>
+							</view>
+							<view class="right flex">
+								<text></text>
+								<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+							</view>
+						</view>
+						<view class="flex listItem" @click="navTo('/pages/user/shareQrCode')">
+							<view class="flex titleBox">
+								<image class="listIconImg" src="../../static/icon/myshareimg.png" mode="widthFix"></image>
+								<text class="title">邀请海报</text>
+							</view>
+							<view class="right flex">
+								<text></text>
+								<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+							</view>
+						</view>
+						<view class="flex listItem" @click="navTo('/pages/user/model/mymodellist')">
+							<view class="flex titleBox">
+								<image class="listIconImg" src="../../static/icon/mymodel.png" mode="widthFix"></image>
+								<text class="title">已购模板</text>
+							</view>
+							<view class="right flex">
+								<text></text>
+								<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+							</view>
+						</view>
+						<!-- <view class="flex listItem" @click="navTo('/pages/user/myCart/myCart')">
+							<view class="flex titleBox">
+								<image class="listIconImg" src="../../static/icon/myaddress.png" mode="widthFix"></image>
+								<text class="title">收货地址</text>
+							</view>
+							<view class="right flex">
+								<text></text>
+								<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+							</view>
+						</view> -->
+						<!-- #ifdef MP -->
+						<button hover-class="none" class="flex listItem" open-type='contact'>
+							<view class="flex titleBox">
+								<image class="listIconImg" src="../../static/icon/myserve.png" mode="widthFix"></image>
+								<text class="title">客服中心</text>
+							</view>
+							<view class="right flex">
+								<text></text>
+								<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+							</view>
+						</button>
+						<!-- #endif -->
+						<!-- #ifndef APP -->
+						<!-- <view class="flex listItem" @click="navTo('/pages/user/shareQrCode')">
+							<view class="flex titleBox">
+								<image class="listIconImg" src="../../static/icon/myshare.png" mode="widthFix"></image>
+								<text class="title">邀请好友</text>
+							</view>
+							<view class="right flex">
+								<text></text>
+								<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+							</view>
+						</view> -->
+						<!-- #endif -->
+						<!-- #ifdef APP -->
+						<view class="flex listItem" @click="shareDomApp">
+							<view class="flex titleBox">
+								<image class="listIconImg" src="../../static/icon/myshare.png" mode="widthFix"></image>
+								<text class="title">邀请好友</text>
+							</view>
+							<view class="right flex">
+								<text></text>
+								<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+							</view>
+						</view>
+						<!-- #endif -->
+						<!-- #ifndef MP -->
+						<view class="flex listItem" @click="navTo('/pages/public/workwork')">
+							<view class="flex titleBox">
+								<image class="listIconImg" src="../../static/icon/myinfo.png" mode="widthFix"></image>
+								<text class="title">关于我们</text>
+							</view>
+							<view class="right flex">
+								<text></text>
+								<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+							</view>
+						</view>
+						<!-- #endif -->
+						<view class="flex listItem" @click="navTo('/pages/set/set')">
+							<view class="flex titleBox">
+								<image class="listIconImg" src="../../static/icon/myset.png" mode="widthFix"></image>
+								<text class="title">系统设置</text>
+							</view>
+							<view class="right flex">
+								<text></text>
+								<image class="img" src="../../static/icon/next1.png" mode="widthFix"></image>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import {
+		share
+	} from '@/api/wx';
+	import {
+		getUser
+	} from '@/api/user.js';
+	import {
+		articleList,
+		notify
+	} from '@/api/index.js';
+	import {
+		saveUrl,
+		interceptor
+	} from '@/utils/loginUtils.js';
+	export default {
+		data() {
+			return {
+				user: {
+					avatar: '', //头像
+					nickname: '', //昵称
+				},
+				shareData: {}
+			};
+		},
+		computed: {
+			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin']),
+			...mapState(['baseURL', 'urlFile']),
+			...mapState(['fx']),
+			// 总消息条数
+			notic() {
+				return this.user.question_sum + this.user.notice_sum;
+			},
+		},
+		// 创建时获取分享信息
+		onLoad() {
+			// share().then((res) => {
+			// 	this.shareData = res.data.data
+			// }).catch((res) => {
+			// 	console.log(res, '分享加载失败');
+			// })
+		},
+		onShow() {
+			this.getUser();
+		},
+		methods: {
+			...mapMutations('user', ['setUserInfo']),
+			// 跳转卡片页面
+			navcard() {
+				// 判断是否已经认证
+				if (this.user.work_type_id <=0) {
+					this.navTo('/pages/user/model/modelrz?modelid='+this.user.show_template_id)
+				} else {
+					if (this.user.show_template_id) {
+						this.navTo('/pages/user/model/model?mtype=' + this.user.show_template_id+'&type=3')
+					}else{
+						uni.showModal({
+							title: '错误',
+							content: '您未购买模板请先购买',
+							showCancel: false,
+						});
+					}
+				}
+			},
+
+			//#ifdef APP
+			shareDomApp() {
+				uni.share({
+					provider: 'weixin',
+					type: 0,
+					title: '母婴界严选',
+					summary: '',
+					imageUrl: this.shareData.img,
+					href: this.baseURL + this.urlFile + '/pages/public/register?spread=' + this.userInfo.uid
+				})
+			},
+			//#endif
+			// 获取用户数据
+			getUser() {
+				console.log('data')
+				const that = this;
+				getUser({}).then((e) => {
+					this.user = e.data;
+					this.setUserInfo(e.data)
+				}).catch((e) => {
+					console.log(e, 'sj');
+				})
+				// 系统消息
+				// articleList({}, 1).then((e) => {
+				// 	that.user.question_sum = e.data.count
+				// 	console.log(that, 1);
+				// }).catch((e) => {
+				// 	console.log(e);
+				// })
+				// 报警消息
+				// notify().then((e) => {
+				// 	that.user.notice_sum = e.data.count
+				// }).catch((e) => {
+				// 	console.log(e);
+				// })
+			},
+			changeTab() {
+				this.$emit('tab', true)
+			},
+			navTo(url) {
+				console.log(this.hasLogin,'this.hasLogin');
+				if (!this.hasLogin) {
+					// 保存地址
+					saveUrl();
+					// 登录拦截
+					interceptor();
+				} else {
+					uni.navigateTo({
+						url,
+						fail(e) {
+							console.log(e);
+						}
+					});
+				}
+			},
+		}
+	};
+</script>
+<style lang="scss">
+	page {
+		height: 100%;
+	}
+
+	.listBox {
+		margin-top: 20rpx;
+		overflow: hidden;
+	}
+
+	.list {
+		.listItem {
+			padding: 35rpx 40rpx;
+			margin-bottom: 15rpx;
+			background-color: #FFFFFF;
+			border-radius: 20rpx;
+			border: none;
+			line-height: 1;
+			&::after{
+				border: none;
+			}
+		}
+		
+		.listIconImg {
+			width: 36rpx;
+			height: 36rpx;
+		}
+
+		.right {
+			.img {
+				width: 26rpx;
+			}
+		}
+
+		.titleBox {
+			.title {
+				padding-left: 20rpx;
+				color: $font-color-base;
+				font-size: $font-base;
+			}
+		}
+	}
+
+	.container {
+		height: 100%;
+		background-color: $page-color-base;
+	}
+
+	.content-box {
+		height: 100%;
+	}
+
+	.user-section {
+		padding: 15rpx 30rpx 0;
+		position: relative;
+		background: url('https://api.myjie.cn/resource/appimage/userbg.png');
+		background-size: 100% 100%;
+		padding-top: 100rpx;
+		height: 350rpx;
+	}
+
+	.user-info-box {
+		height: 180rpx;
+		color: white;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		position: relative;
+		z-index: 1;
+
+		.detail {
+			height: 130rpx;
+			flex-grow: 1;
+			overflow: hidden;
+
+			.portrait-box {
+				height: 100%;
+
+				.portrait {
+					width: 130rpx;
+					height: 100%;
+					border: 5rpx solid #fff;
+					border-radius: 50%;
+				}
+			}
+
+			.info-box {
+				margin-left: 20rpx;
+				line-height: 1.5;
+				flex-grow: 1;
+				overflow: hidden;
+
+				.tipLevel {
+					height: 36rpx;
+					margin-right: 20rpx;
+				}
+
+				.username {
+					font-size: 34rpx;
+					color: #FFF;
+					font-weight: bold;
+					height: 100%;
+				}
+
+				.authentication {
+					font-size: 24rpx;
+					color: #FFF;
+					float: left;
+				}
+			}
+
+			.righ-tbox {
+				padding: 10rpx 20rpx;
+				border-radius: 12rpx;
+				font-size: 25rpx;
+				line-height: 1;
+				color: $base-color;
+				background-color: #FFF;
+
+				.right-tip {
+					width: 25rpx;
+					height: 33rpx;
+					margin-right: 10rpx;
+				}
+			}
+		}
+	}
+	.nav-model-rz{
+		background-color:#FFD7E3 ;
+		border-radius: 20rpx;
+		margin: 0 auto;
+		padding: 30rpx;
+		padding-bottom: 15rpx;
+		padding-top: 50rpx;
+		line-height: 1;
+		width: 690rpx;
+		margin-top: -38rpx;
+		.tiptext{
+			color:#F65486 ;
+			font-size: 26rpx;
+			font-weight: bold;
+		}
+		.rztext{
+			color: #FFF;
+			background-color: #F65486;
+			border-radius: 100rpx;
+			padding: 15rpx 20rpx;
+			font-size: 22rpx;
+		}
+	}
+
+	.nav-model {
+		background: url('https://api.myjie.cn/resource/appimage/uservip.png');
+		background-size: 100% 100%;
+		color: #FFF;
+		border-radius: 20rpx;
+		width: 690rpx;
+		height: 157rpx;
+		margin: 0 auto;
+		margin-top: -80rpx;
+		font-weight: bold;
+		z-index: 1;
+		position: relative;
+
+		.next {
+			width: 26rpx;
+			height: 28rpx;
+			margin-right: 40rpx;
+		}
+
+		.right-card {
+			padding-left: 170rpx;
+		}
+
+		.title {
+			font-size: 35rpx;
+		}
+
+		.tip {
+			font-size: 26rpx;
+		}
+
+	}
+
+	.cover-container {
+		padding: 0 30rpx;
+		position: relative;
+		padding-bottom: 20rpx;
+	}
+</style>

+ 147 - 0
plugin/image-tools/index.js

@@ -0,0 +1,147 @@
+function getLocalFilePath(path) {
+    if (path.indexOf('_www') === 0 || path.indexOf('_doc') === 0 || path.indexOf('_documents') === 0 || path.indexOf('_downloads') === 0) {
+        return path
+    }
+    if (path.indexOf('file://') === 0) {
+        return path
+    }
+    if (path.indexOf('/storage/emulated/0/') === 0) {
+        return path
+    }
+    if (path.indexOf('/') === 0) {
+        var localFilePath = plus.io.convertAbsoluteFileSystem(path)
+        if (localFilePath !== path) {
+            return localFilePath
+        } else {
+            path = path.substr(1)
+        }
+    }
+    return '_www/' + path
+}
+
+export function pathToBase64(path) {
+    return new Promise(function(resolve, reject) {
+        if (typeof window === 'object' && 'document' in window) {
+            if (typeof FileReader === 'function') {
+                var xhr = new XMLHttpRequest()
+                xhr.open('GET', path, true)
+                xhr.responseType = 'blob'
+                xhr.onload = function() {
+                    if (this.status === 200) {
+                        let fileReader = new FileReader()
+                        fileReader.onload = function(e) {
+                            resolve(e.target.result)
+                        }
+                        fileReader.onerror = reject
+                        fileReader.readAsDataURL(this.response)
+                    }
+                }
+                xhr.onerror = reject
+                xhr.send()
+                return
+            }
+            var canvas = document.createElement('canvas')
+            var c2x = canvas.getContext('2d')
+            var img = new Image
+            img.onload = function() {
+                canvas.width = img.width
+                canvas.height = img.height
+                c2x.drawImage(img, 0, 0)
+                resolve(canvas.toDataURL())
+                canvas.height = canvas.width = 0
+            }
+            img.onerror = reject
+            img.src = path
+            return
+        }
+        if (typeof plus === 'object') {
+            plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) {
+                entry.file(function(file) {
+                    var fileReader = new plus.io.FileReader()
+                    fileReader.onload = function(data) {
+                        resolve(data.target.result)
+                    }
+                    fileReader.onerror = function(error) {
+                        reject(error)
+                    }
+                    fileReader.readAsDataURL(file)
+                }, function(error) {
+                    reject(error)
+                })
+            }, function(error) {
+                reject(error)
+            })
+            return
+        }
+        if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
+            wx.getFileSystemManager().readFile({
+                filePath: path,
+                encoding: 'base64',
+                success: function(res) {
+                    resolve('data:image/png;base64,' + res.data)
+                },
+                fail: function(error) {
+                    reject(error)
+                }
+            })
+            return
+        }
+        reject(new Error('not support'))
+    })
+}
+
+export function base64ToPath(base64) {
+    return new Promise(function(resolve, reject) {
+        if (typeof window === 'object' && 'document' in window) {
+            base64 = base64.split(',')
+            var type = base64[0].match(/:(.*?);/)[1]
+            var str = atob(base64[1])
+            var n = str.length
+            var array = new Uint8Array(n)
+            while (n--) {
+                array[n] = str.charCodeAt(n)
+            }
+            return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type: type })))
+        }
+        var extName = base64.match(/data\:\S+\/(\S+);/)
+        if (extName) {
+            extName = extName[1]
+        } else {
+            reject(new Error('base64 error'))
+        }
+        var fileName = Date.now() + '.' + extName
+        if (typeof plus === 'object') {
+            var bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now())
+            bitmap.loadBase64Data(base64, function() {
+                var filePath = '_doc/uniapp_temp/' + fileName
+                bitmap.save(filePath, {}, function() {
+                    bitmap.clear()
+                    resolve(filePath)
+                }, function(error) {
+                    bitmap.clear()
+                    reject(error)
+                })
+            }, function(error) {
+                bitmap.clear()
+                reject(error)
+            })
+            return
+        }
+        if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
+            var filePath = wx.env.USER_DATA_PATH + '/' + fileName
+            wx.getFileSystemManager().writeFile({
+                filePath: filePath,
+                data: base64.replace(/^data:\S+\/\S+;base64,/, ''),
+                encoding: 'base64',
+                success: function() {
+                    resolve(filePath)
+                },
+                fail: function(error) {
+                    reject(error)
+                }
+            })
+            return
+        }
+        reject(new Error('not support'))
+    })
+}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
plugin/jweixin-module/index.js


BIN=BIN
static/controller/baoxiu.png


BIN=BIN
static/controller/dianchi.png


BIN=BIN
static/controller/dingwei.png


BIN=BIN
static/controller/huanche.png


BIN=BIN
static/controller/kaisuo.png


BIN=BIN
static/controller/qidong.png


BIN=BIN
static/controller/shouquan.png


BIN=BIN
static/controller/witchMessage.png


BIN=BIN
static/controller/witchShop.png


BIN=BIN
static/controller/xincheng.png


BIN=BIN
static/controller/xunche.png


+ 242 - 0
static/css/cmy.css

@@ -0,0 +1,242 @@
+.bg-color-red {
+	background-color: #e93323 !important;
+}
+
+/*水平线*/
+.hr {
+	width: 100%;
+	position: relative;
+	border-bottom: 1px solid #dddddd;
+	/* height: 0.5rpx; */
+}
+
+/* 一行显示 */
+.clamp {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	display: block;
+}
+
+/* 二行显示 */
+.clamp2 {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-line-clamp: 2;
+	-webkit-box-orient: vertical;
+}
+
+/* 二行显示 */
+.ellipsis {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-box-orient: vertical;
+	-webkit-line-clamp: 2;
+}
+
+.common-hover {
+	background: #f5f5f5;
+}
+
+/* 角标 */
+.corner {
+	background-color: #e51c23;
+	position: absolute;
+	right: -18rpx;
+	top: -18rpx;
+	color: #FFFFFF;
+	text-align: center;
+	border-radius: 999px;
+	font-size: 24rpx !important;
+	min-width: 35rpx;
+	min-height: 35rpx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	line-height: 1;
+}
+
+.flex_item {
+	display: flex;
+	align-items: center;
+	/* justify-content: space-between; */
+}
+
+/* 左右顶格加上下居中 */
+.flex-between-center {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+}
+
+/* flex布局-整体居中 */
+.flex-center {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+/* flex-开始居中 */
+.flex-start {
+	display: flex;
+	align-items: center;
+	justify-content: flex-start;
+}
+/* 一行居中显示 */
+.flex-line{
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	flex-direction: column;
+}
+
+/*文字对齐*/
+.text-left {
+	text-align: left !important;
+}
+
+.text-center {
+	text-align: center !important;
+}
+
+.text-justify {
+	text-align: justify !important;
+}
+
+.text-right {
+	text-align: right !important;
+}
+
+.text-default {
+	color: #212121 !important;
+}
+
+.text-white {
+	color: #ffffff !important;
+}
+
+.text-primary {
+	color: #00bcd4 !important;
+}
+
+.text-success {
+	color: #009688 !important;
+}
+
+.text-info {
+	color: #03a9f4 !important;
+}
+
+.text-warning {
+	color: #ffc107 !important;
+}
+
+.text-danger {
+	color: #e51c23 !important;
+}
+
+.text-pink {
+	color: #e91e63 !important;
+}
+
+.text-purple {
+	color: #673ab7 !important;
+}
+
+.text-indigo {
+	color: #3f51b5 !important;
+}
+
+.text-gray {
+	color: #999999 !important;
+}
+
+.bg-default {
+	background-color: #f5f5f5 !important;
+}
+
+.bg-primary {
+	background-color: #00bcd4 !important;
+}
+
+.bg-success {
+	background-color: #009688 !important;
+}
+
+.bg-info {
+	background-color: #03a9f4 !important;
+}
+
+.bg-warning {
+	background-color: #FFB238 !important;
+}
+
+.bg-danger {
+	background-color: #DC4D46 !important;
+}
+
+.bg-pink {
+	background-color: #e91e63 !important;
+}
+
+.bg-purple {
+	background-color: #673ab7 !important;
+}
+
+.bg-indigo {
+	background-color: #3f51b5 !important;
+}
+
+.bg-white {
+	background-color: white !important;
+}
+
+.bg-gray {
+	background-color: #e3e3e3 !important;
+}
+
+/* 边框 */
+.border-radius-15 {
+	border-radius: 15rpx;
+}
+
+.border-radius-10 {
+	border-radius: 10rpx;
+}
+
+.border-radius-all {
+	border-radius: 1000rpx;
+}
+
+/* 底部边线 */
+.borde-b {
+	border-bottom: 1px solid #dddddd;
+}
+
+/* 弹性盒子 */
+.flex {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+
+.items-left {
+	justify-content: flex-start;
+}
+
+.items-right {
+	justify-content: flex-end;
+}
+
+.flex-shrink-false {
+	flex-shrink: 0;
+}
+
+.flex-grow-true {
+	flex-grow: 1;
+}
+
+.position-relative {
+	position: relative;
+}

BIN=BIN
static/error/emptyAddress.png


BIN=BIN
static/error/emptyCart.png


BIN=BIN
static/error/emptyItem.png


BIN=BIN
static/error/emptyList.png


BIN=BIN
static/error/emptyMyCart.png


BIN=BIN
static/error/emptyNotice.png


BIN=BIN
static/error/emptyOrder.png


BIN=BIN
static/error/errorImage.jpg


BIN=BIN
static/error/missing-face.png


BIN=BIN
static/error/shopErroe.png


BIN=BIN
static/icon/addressIcon1.png


BIN=BIN
static/icon/addressIcon2.png


BIN=BIN
static/icon/addressIconXz.png


BIN=BIN
static/icon/appleIcon.png


BIN=BIN
static/icon/back.png


BIN=BIN
static/icon/dom.png


BIN=BIN
static/icon/goodsExit.png


BIN=BIN
static/icon/gpsW.png


BIN=BIN
static/icon/hot.png


BIN=BIN
static/icon/myaddress.png


BIN=BIN
static/icon/myinfo.png


BIN=BIN
static/icon/mymodel.png


BIN=BIN
static/icon/mymoney.png


BIN=BIN
static/icon/myserve.png


BIN=BIN
static/icon/myset.png


BIN=BIN
static/icon/myshare.png


Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio