1
0

13 Коммиты a6e0bc6ec5 ... 09e5919891

Автор SHA1 Сообщение Дата
  一懒众山小 09e5919891 修复多商户商品没传mch_id 3 лет назад
  huangzhe f0784ea03c 供应商商品详情参数 3 лет назад
  huangzhe cf0ecbd257 套餐内领取优惠券,供应商商品详情,商品详情参数详情,销售端订单总额,我的消息,切换销售端闪烁优化 3 лет назад
  huangzhe ec6bf8699b 套餐分享打开报错,套餐默认数量 3 лет назад
  huangzhe 5c291d6b53 套餐详情轮播图切换,供应商商品详情问题优化,套餐标签优化,我的消息去掉查看详情 3 лет назад
  huangzhe 00181409c5 销售端订单页搜索优化,代客下单选择客户优化,预约表单时间选择优化,销售端登录优化,新增销售退出登录 3 лет назад
  huangzhe f000866276 销售端登录问题修复,预约时间选择修复 3 лет назад
  huangzhe 934f9d0f42 测试文档Bug修复 3 лет назад
  huangzhe 8fcfb20baf 首页ui还原度调整及其他bug修改 3 лет назад
  一懒众山小 9f346bbc36 套餐订单确认页UII更改 3 лет назад
  一懒众山小 a4ced69abb UI细节调整(除首页) 3 лет назад
  huangzhe e2ba969714 页面优化,授权样式更改协议 3 лет назад
  huangzhe f21bdc1152 1 3 лет назад
100 измененных файлов с 4292 добавлено и 1507 удалено
  1. 0 1
      src/components/basic-component/app-close/app-close.vue
  2. 58 28
      src/components/basic-component/app-layout/app-user-login/app-user-login.vue
  3. 1 1
      src/components/page-component/app-area-picker/app-area-picker.vue
  4. 0 1
      src/components/page-component/app-head-navigation/app-head-navigation.vue
  5. 0 1
      src/components/page-component/app-quick-navigation/app-quick-navigation.vue
  6. 92 81
      src/components/page-component/app-user-center-top/app-user-center-top.vue
  7. 270 246
      src/components/page-component/goods/app-goods-banner.vue
  8. 163 4
      src/components/page-component/goods/bd-coupon.vue
  9. 38 8
      src/components/page-component/goods/bd-xbc.vue
  10. 2 2
      src/components/page-component/goods/u-attr.vue
  11. 1 2
      src/components/page-component/index/app-diy-list.vue
  12. 0 1
      src/components/page-component/index/app-diy-page.vue
  13. 11 6
      src/components/page-component/index/app-nav-bar.vue
  14. 1 1
      src/components/page-component/u-goods-list/u-ordinary-list.vue
  15. 6 2
      src/core/apiUrl.js
  16. 1 0
      src/core/jump.js
  17. 180 172
      src/pages.json
  18. 63 16
      src/pages/case/appointment/appointment-form.vue
  19. 6 6
      src/pages/case/appointment/appointment-list.vue
  20. 8 1
      src/pages/case/appointment/appointment.vue
  21. 4 3
      src/pages/case/components/hxj-bd-info.vue
  22. 10 5
      src/pages/case/components/scroll-list.vue
  23. 2 2
      src/pages/case/hot_sale_project.vue
  24. 21 183
      src/pages/case/projectInfo.vue
  25. 0 5
      src/pages/coupon/index/index.vue
  26. 310 330
      src/pages/coupon/list/list.vue
  27. 6 5
      src/pages/goods/goods.vue
  28. 3 0
      src/pages/goods/list.vue
  29. 1 1
      src/pages/index/binding/bindingSale.vue
  30. 8 6
      src/pages/index/components/scroll-list.vue
  31. 6 7
      src/pages/index/hxj_index_component.vue
  32. 6 3
      src/pages/index/index.scss
  33. 1 1
      src/pages/index/index.vue
  34. 185 4
      src/pages/order-submit/app-coupon-pick.vue
  35. 170 9
      src/pages/order-submit/app-submit-goods.vue
  36. 5 6
      src/pages/order-submit/invoice/invoice.vue
  37. 11 7
      src/pages/order-submit/order-submit.vue
  38. 5 4
      src/pages/order/index/index.vue
  39. 2 2
      src/pages/order/search/search.vue
  40. 4 4
      src/pages/sale/components/app-my-income.vue
  41. 13 7
      src/pages/sale/cusmter/addCustomer.vue
  42. 3 2
      src/pages/sale/cusmter/info.vue
  43. 14 0
      src/pages/sale/cusmter/list.vue
  44. 30 9
      src/pages/sale/myCommission.vue
  45. 99 17
      src/pages/sale/mySaleOrder.vue
  46. 73 77
      src/pages/sale/news/news.vue
  47. 112 39
      src/pages/sale/sale-user-center.vue
  48. 34 15
      src/pages/sale/sale_login/sale_login.vue
  49. 8 7
      src/pages/search/search.vue
  50. 12 2
      src/pages/user-center/about-mall/ComplaintsSuggestions.vue
  51. 12 2
      src/pages/user-center/about-mall/about-mall.vue
  52. 29 0
      src/pages/user-center/about-mall/mallAgreement.vue
  53. 167 115
      src/pages/user-center/privacyAgreement/privacyAgreement.vue
  54. 1 16
      src/pages/user-center/user-center.vue
  55. 0 1
      src/plugins/clerk/detail/detail.vue
  56. 3 2
      src/plugins/composition/components/app-bd-info/app-bd-info.vue
  57. 20 18
      src/plugins/composition/components/app-list/app-list.vue
  58. 11 11
      src/plugins/composition/detail/detail.vue
  59. 717 0
      src/plugins/mch/apply/apply.vue
  60. 520 0
      src/plugins/mch/cat/cat.vue
  61. 753 0
      src/plugins/mch/goods/goods.vue
  62. BIN
      src/plugins/mch/image/add-detail.png
  63. BIN
      src/plugins/mch/image/add-goods.png
  64. BIN
      src/plugins/mch/image/add.png
  65. BIN
      src/plugins/mch/image/apply-er.png
  66. BIN
      src/plugins/mch/image/apply-ok.png
  67. BIN
      src/plugins/mch/image/arrow-left-white.png
  68. BIN
      src/plugins/mch/image/camera.png
  69. BIN
      src/plugins/mch/image/cat-close.png
  70. BIN
      src/plugins/mch/image/close.png
  71. BIN
      src/plugins/mch/image/copy.png
  72. BIN
      src/plugins/mch/image/delete.png
  73. BIN
      src/plugins/mch/image/express.png
  74. BIN
      src/plugins/mch/image/goods-contact.png
  75. BIN
      src/plugins/mch/image/goods-del.png
  76. BIN
      src/plugins/mch/image/goods-edit.png
  77. BIN
      src/plugins/mch/image/goods-xiajia.png
  78. BIN
      src/plugins/mch/image/image.png
  79. BIN
      src/plugins/mch/image/line.png
  80. BIN
      src/plugins/mch/image/list-cat.png
  81. BIN
      src/plugins/mch/image/localhost.png
  82. BIN
      src/plugins/mch/image/login-alipay.png
  83. BIN
      src/plugins/mch/image/login-wechat.png
  84. BIN
      src/plugins/mch/image/low.png
  85. BIN
      src/plugins/mch/image/more-active.png
  86. BIN
      src/plugins/mch/image/more-handle.png
  87. BIN
      src/plugins/mch/image/more.png
  88. BIN
      src/plugins/mch/image/myshop-code.png
  89. BIN
      src/plugins/mch/image/myshop-data.png
  90. BIN
      src/plugins/mch/image/myshop-goods.png
  91. BIN
      src/plugins/mch/image/myshop-notice.png
  92. BIN
      src/plugins/mch/image/myshop-order.png
  93. BIN
      src/plugins/mch/image/myshop-shop.png
  94. BIN
      src/plugins/mch/image/myshop-zc.png
  95. BIN
      src/plugins/mch/image/open.png
  96. BIN
      src/plugins/mch/image/order-list-refund.png
  97. BIN
      src/plugins/mch/image/search.png
  98. BIN
      src/plugins/mch/image/shop-all.png
  99. BIN
      src/plugins/mch/image/shop-cat.png
  100. BIN
      src/plugins/mch/image/shop-contact.png

+ 0 - 1
src/components/basic-component/app-close/app-close.vue

xqd
@@ -91,7 +91,6 @@
                 url: this.$api.index.status,
                 data: para
             }).then(response => {
-                console.log(para)
                 let mallStatus = response.data;
                 if(!this.isMall) {
                     response.data.shift();

+ 58 - 28
src/components/basic-component/app-layout/app-user-login/app-user-login.vue

xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd
@@ -1,7 +1,7 @@
 <template>
     <view class="login-1 dir-left-nowrap main-center cross-center" :class="showLoginModal ? 'show' : ''">
         <view class="login-content">
-            <image :src="'https://t17.9026.com/web/statics/image/index/auth-default.png'" class="login-img"></image>
+			<image :src="'https://t17.9026.com/web/statics/image/index/auth-default.png'" class="login-img"></image>
             <view>
                 <app-hotspot :hotspot="auth_page.hotspot_link">
                     <button class="login-btn" @click="link"></button>
@@ -15,35 +15,44 @@
 			<view>
 			    <app-hotspot :hotspot="userprivacy">
 			        <view class="main-left cross-center login-userprivacy">
-						<view class="login-userprivacy-radio" @click="isAgreeUserprivacy=!isAgreeUserprivacy" :style="{'border':`2px solid ${isAgreeUserprivacy?'#EA554D':'#CDCDCD'}`}">
-							<view class="login-userprivacy-radio-check" v-show="isAgreeUserprivacy"  @click.stop="isAgreeUserprivacy=!isAgreeUserprivacy"></view>
+						<view class="login-userprivacy-radio" @click="navPrivacyAgreement" :style="{'border':`2px solid ${readUserAgreement?'#A2834F':'#CDCDCD'}`}">
+							<view class="login-userprivacy-radio-check" v-show="readUserAgreement"  @click="navPrivacyAgreement"></view>
 						</view>
-						<text  @click="isAgreeUserprivacy=!isAgreeUserprivacy">登录即表示同意</text> 
-						<text style="color: #EE5C52;margin-left: 5rpx;" @click="$jump({'open_type':'navigate','url':'/pages/user-center/privacyAgreement/privacyAgreement'})">用户隐私协议</text>
+						<text  @click="navPrivacyAgreement">登录即表示同意</text> 
+						<text style="color: #A2834F;margin-left: 5rpx;" @click="navPrivacyAgreement">用户隐私协议</text>
 					</view>
 			    </app-hotspot>
 			</view>
             <view>
                 <app-hotspot :hotspot="hotspot">
                     <!-- #ifdef MP -->
-                    <button class="login-btn" v-if="canIUseGetUserProfile"
+                    <button class="main-center cross-center hxj-login" v-if="canIUseGetUserProfile" 
                             scope="userInfo"
                             @click="getUserInfoClick"
                     >
+					<image style="width: 40rpx;height: 40rpx;margin-right: 10rpx;" src="https://t17.9026.com/web/statics/image/index/wxlogin.png" mode=""></image>立即登录
                     </button>
-                    <button class="login-btn"  v-else
+                    <button class="main-center cross-center hxj-login"  v-else
                             :open-type="openType"
                             scope="userInfo"
                             @getAuthorize="getUserInfo"
                             @getuserinfo="getUserInfo"
                             @click="getUserInfoClick"
                     >
+					<image style="width: 40rpx;height: 40px;margin-right: 10rpx;" src="https://t17.9026.com/web/statics/image/index/wxlogin.png" mode=""></image>立即登录
                     </button>
                     <!-- #endif -->
                     <!-- #ifdef H5 -->
-                    <view class="login-btn" @click="getUserInfo"></view>
+                    <view class="main-center cross-center hxj-login" @click="getUserInfo">
+						<image style="width: 40rpx;height: 40px;margin-right: 10rpx;" src="https://t17.9026.com/web/statics/image/index/wxlogin.png" mode=""></image>立即登录
+					</view>
                     <!-- #endif -->
                 </app-hotspot>
+				<!-- <app-hotspot :hotspot="hotspot">
+					<view class="hxj-login">
+						
+					</view>
+				</app-hotspot> -->
             </view>
         </view>
     </view>
@@ -64,34 +73,34 @@
 				isAgreeUserprivacy:false,
 				userprivacy:{
 					defaultX: "84",
-					defaultY: "560",
+					defaultY: "120",
 					height: "80",
 					width: "450",
 					left: "84",
 					link: "",
 					open_type: "cancel",
-					top: "560",
+					top: "120",
 					
 				},
 				hotspot:{
-					defaultX: "354",
-					defaultY: "642",
+					defaultX: "50",
+					defaultY: "208",
 					height: "80",
-					left: "354",
+					left: "50",
 					link: "",
 					open_type: "cancel",
-					top: "642",
-					width: "224",
+					top: "208",
+					width: "500",
 				},
 				hotspot_cancel:{
 					defaultX: "72",
-					defaultY: "642",
+					defaultY: "314",
 					height: "80",
-					left: "72",
+					left: "50",
 					link: "",
 					open_type: "cancel",
-					top: "642",
-					width: "224",
+					top: "314",
+					width: "500",
 				}
 			};
         },
@@ -108,7 +117,8 @@
             ...mapState({
                 showLoginModal: function(state) {
                     return state.user.showLoginModal
-                }
+                },
+				readUserAgreement:state=>state.user.readUserAgreement
             }),
 			canIUseGetUserProfile() {
 				return this.$user.canIUseGetUserProfile();
@@ -131,6 +141,14 @@
             });
         },
         methods: {
+			navPrivacyAgreement(){
+				let url= this.$platDiff.routeWithOption()
+				this.$jump({
+					// 'open_type':'redirect',
+					'open_type':'navigate',
+					'url':`/pages/user-center/privacyAgreement/privacyAgreement?url=${url}`,
+				})
+			},
             link() {
                 this.$store.commit('user/showLoginModal', false);
             },
@@ -173,9 +191,9 @@
             },
             // #ifdef MP
             getUserInfoClick(e) {
-				if(!this.isAgreeUserprivacy){
+				if(!this.readUserAgreement){
 					uni.showToast({
-						title:'请勾选用户隐私协议',
+						title:'请阅读并同意用户隐私协议',
 						icon:'none'
 					})
 					return
@@ -186,7 +204,6 @@
                 // #endif
 				// #ifdef MP-WEIXIN
 				this.$user.getUserProfile(e).then(res => {
-					console.log(res)
 					this.getUserInfo(res);
 				}).catch(res => {
 					console.log(res)
@@ -334,13 +351,13 @@
 
         .login-content {
             position: relative;
-            width: #{650rpx};
-            height: #{770rpx};
+            width: #{600rpx};
+            height: #{458rpx};
         }
 
         .login-img {
-            width: #{650rpx};
-            height: #{770rpx};
+            width: #{600rpx};
+            height: #{458rpx};
         }
 		.login-userprivacy{
 			font-size: 24rpx;
@@ -357,7 +374,7 @@
 					width: 16rpx;
 					height: 16rpx;
 					border-radius: 50%;
-					background-color: #EA554D;
+					background-color: #A2834F;
 					position: absolute;
 					left: 50%;
 					top: 50%;
@@ -371,4 +388,17 @@
         visibility: visible;
         opacity: 1;
     }
+	
+	.hxj-login{
+		width: 504rpx;
+		height: 82rpx;
+		background: #A18253!important;
+		border-radius: 2rpx;
+
+		font-size: 28rpx;
+		font-weight: 500;
+		color: #FFFFFF;
+		line-height: 82rpx;
+		z-index: 100001!important;
+	}
 </style>

+ 1 - 1
src/components/page-component/app-area-picker/app-area-picker.vue

xqd
@@ -109,7 +109,7 @@ export default {
 			immediate: true
 		},
 		place(newData,old){
-			console.log('地址变化',newData)
+			console.log('地址',newData)
 			this.$emit('place', newData);
 		}
 	},

+ 0 - 1
src/components/page-component/app-head-navigation/app-head-navigation.vue

xqd
@@ -45,7 +45,6 @@
 	    methods: {
             active(item) {
                 this.isSwitch = false;
-                console.log(item);
                 this.$emit('click', item);
             }
 	    },

+ 0 - 1
src/components/page-component/app-quick-navigation/app-quick-navigation.vue

xqd
@@ -226,7 +226,6 @@
                 }
                 // #ifdef H5
                 if (item.customize) {
-                    console.log(item)
                     if (item.customize.open_type === 'app') {
                         function changePx(num){
                             return uni.upx2px(num)+ 'px';

+ 92 - 81
src/components/page-component/app-user-center-top/app-user-center-top.vue

xqd xqd xqd xqd xqd xqd
@@ -208,10 +208,19 @@
 						</view>
 						<!--#ifdef MP-WEIXIN -->
 							<image v-if="isRealname" style="width: 96rpx;height: 31rpx;margin-left: 14rpx;" src="https://t17.9026.com/web/statics/image/index/ysm.png" mode=""></image>
-						<button class="u-refresh dir-left-nowrap main-between cross-center "
-							open-type="getUserInfo" @getAuthorize="getUserInfo" @click="getUserInfo">
-							<icon class="u-icon" type></icon>
-							<text>刷新</text>
+						<button class="u-refresh dir-left-nowrap main-between cross-center " v-if="canIUseGetUserProfile"
+						open-type="getUserInfo"
+								@click="getUserInfoClick"
+								>
+						    <icon class="u-icon" type></icon>
+						    <text>刷新</text>
+						</button>
+						<button class="u-refresh dir-left-nowrap main-between cross-center " v-else open-type="getUserInfo"
+						        @getAuthorize="getUserInfo"
+						        @getuserinfo="getUserInfo"
+								>
+						    <icon class="u-icon" type></icon>
+						    <text>刷新</text>
 						</button>
 						<!-- #endif-->
 						<!--#ifdef  H5 -->
@@ -252,10 +261,19 @@
 						</view>
 						<!--#ifdef MP-WEIXIN -->
 							<image v-if="isRealname" style="width: 96rpx;height: 31rpx;margin-left: 14rpx;" src="https://t17.9026.com/web/statics/image/index/ysm.png" mode=""></image>
-						<button class="u-refresh dir-left-nowrap main-between cross-center member-margin"
-							open-type="getUserInfo" @getAuthorize="getUserInfo" @click="getUserInfo">
-							<icon class="u-icon" type></icon>
-							<text>刷新</text>
+						<button class="u-refresh dir-left-nowrap main-between cross-center " v-if="canIUseGetUserProfile"
+						open-type="getUserInfo"
+								@click="getUserInfoClick"
+								>
+						    <icon class="u-icon" type></icon>
+						    <text>刷新</text>
+						</button>
+						<button class="u-refresh dir-left-nowrap main-between cross-center " v-else open-type="getUserInfo"
+						        @getAuthorize="getUserInfo"
+						        @getuserinfo="getUserInfo"
+								>
+						    <icon class="u-icon" type></icon>
+						    <text>刷新</text>
 						</button>
 						<!-- #endif-->
 						<!--#ifdef  H5 -->
@@ -330,6 +348,9 @@
 					return 'https://shop.9026.com/web/statics/img/mall/static/user-default-avatar.png';
 				}
 			},
+			canIUseGetUserProfile() {
+				return this.$user.canIUseGetUserProfile();
+			},
 			getMemberPicUrl() {
 				return this.memberPicUrl;
 				// todo 此处选哪个图标待确认
@@ -368,77 +389,67 @@
 					url: '/pages/member/index/index',
 				});
 			},
+			getUserInfoClick(userInfoResult) {
+				console.log('userInfoResult',userInfoResult)
+				this.$user.getUserProfile(userInfoResult).then(e => {
+					this.getUserInfo(e);
+				}).catch(e => {
+					console.log(e)
+				})
+			},
 			getUserInfo(userInfoResult) {
-				// #ifdef MP
-
-				let _this = this;
-				wx.getUserProfile({
-					desc: "用于完善会员资料", // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
-					success: (res) => {
-						wx.getUserInfo({
-							success: (res2) => {
-								res2.rawData = res.rawData;
-								uni.login({
-									scopes: 'auth_user',
-									success(loginResult) {
-										const data = {
-											encryptedData: res2.encryptedData,
-											iv: res2.iv,
-											rawData: res2.rawData,
-											signature: res2.signature,
-											code: loginResult.code,
-										};
-										_this.$request({
-											url: _this.$api.passport.login,
-											method: 'post',
-											data: data
-										}).then(response => {
-											uni.hideLoading();
-											if (response.code === 0) {
-												uni.showToast({
-													title: '资料已更新',
-													icon: 'none'
-												});
-												_this.$storage.setStorageSync(
-													'_USER_ACCESS_TOKEN',
-													response.data.access_token);
-											} else {
-												return reject(response.msg);
-											}
-										});
-									}
-								});
-							},
-							fail: (res2) => {},
-						});
-
-					},
-					fail: (res) => {
-						console.log("fail", res);
-					},
-				});
-
-				// #endif
-				// #ifdef H5
-				this.$request({
-					url: this.$api.registered.url,
-					method: 'get',
-					data: {
-						scope: 'snsapi_userinfo',
-						response_type: 'code',
-						url: `${window.location.href}`
-					}
-				}).then(res => {
-					if (res.code === 0) {
-						this.$storage.setStorageSync('_USER_SIGN', true);
-						window.location.replace(res.data.url);
-					} else {
-						uni.navigateTo({
-							url: '/pages/registered/sign'
-						});
-					}
-				});
-				// #endif
+			    // #ifdef MP
+			    let _this = this;
+			    uni.login({
+			        scopes: 'auth_user',
+			        success(loginResult) {
+						console.log('loginResult',loginResult)
+			            const data = {
+			                encryptedData: userInfoResult.detail.encryptedData,
+			                iv: userInfoResult.detail.iv,
+			                rawData: userInfoResult.detail.rawData,
+			                signature: userInfoResult.detail.signature,
+			                code: loginResult.code,
+			            };
+			            _this.$request({
+			                url: _this.$api.passport.login,
+			                method: 'post',
+			                data: data
+			            }).then(response => {
+			                uni.hideLoading();
+			                if (response.code === 0) {
+			                    uni.showToast({
+			                        title: '资料已更新',
+			                        icon: 'none'
+			                    });
+			                    _this.$storage.setStorageSync('_USER_ACCESS_TOKEN', response.data.access_token);
+			                } else {
+			                    return reject(response.msg);
+			                }
+			            });
+			        }
+			    });
+			    // #endif
+			    // #ifdef H5
+			    this.$request({
+			        url: this.$api.registered.url,
+			        method: 'get',
+			        data: {
+			            scope: 'snsapi_userinfo',
+			            response_type: 'code',
+			            url: `${window.location.href}`
+			        }
+			    }).then(res => {
+			        if (res.code === 0) {
+			            this.$storage.setStorageSync('_USER_SIGN', true);
+			            window.location.replace(res.data.url);
+			        } else {
+			            uni.navigateTo({
+			                url: '/pages/registered/sign'
+			            });
+			        }
+			    });
+			    // #endif
 			}
 		}
 	}
@@ -688,8 +699,8 @@
 
 
 	.u-refresh {
-		border-radius: 18upx;
-		border: 1upx solid #CDCCCB;
+		border-radius: 8rpx;
+		border: 1rpx solid #CDCCCB;
 		min-width: 69upx;
 		margin: 0 0 0 10upx;
 		box-sizing: content-box;
@@ -709,7 +720,7 @@
 
 		text {
 			line-height: 1;
-			color: #CDCCCB;
+			color: #999999;
 			font-size: 21upx;
 		}
 	}

+ 270 - 246
src/components/page-component/goods/app-goods-banner.vue

xqd
@@ -1,255 +1,279 @@
 <template>
-    <view class="app-goods-banner" v-if="picList.length > 0">
-        <!-- #ifdef H5 -->
-        <bd-h5-back></bd-h5-back>
-        <!-- #endif -->
-        <!-- #ifdef MP-WEIXIN -->
-        <view class='account-box' v-if='mallConfig.mall.setting.is_official_account == 1'>
-            <official-account></official-account>
-        </view>
-        <!-- #endif -->
-
-        <swiper
-            class="swiper"
-            v-bind:autoplay="autoplay"
-            v-bind:indicator-dots="picList.length>1"
-            circular
-            @change='bannerChange'
-            indicator-color="rgba(255,255,255,.3)"
-            indicator-active-color="#30353c"
-        >
-            <!-- #ifndef MP-BAIDU || H5 -->
-                <swiper-item v-if="videoUrl && getVideo == 1 && sign !== 'lottery' && sign !== 'bargain' && sign !== 'community' && sign !== 'wholesale'">
-                    <view class="swiper-img" @click="routeJumpT" v-bind:style="{backgroundImage: 'url(' + rangeKey!='false'?picList[0][rangeKey]:picList[0] + ')'}">
-                        <image class="video-play" src="https://shop.9026.com/web/statics/img/mall/static/video-play.png"></image>
-                    </view>
-                </swiper-item>
-            <!-- #endif-->
-
-            <swiper-item v-for="(item, index) in picList" v-bind:key="index">
-                <view class="swiper-img" v-bind:style="{backgroundImage: `url(${rangeKey!='false'?item[rangeKey]:item})`}"
-                      @click="clickImage(index)">
-
-                    <!-- #ifndef MP-BAIDU || H5 -->
-                    <app-video
-                        v-if="index === 0 && videoUrl && getVideo == 0"
-                        height="750rpx"
-                        v-bind:pic-url="rangeKey!='false'?item[rangeKey]:item"
-                        v-bind:url="videoUrl"
-                        v-on:video-start="videoStart"
-                        v-on:tap.native.stop="preventD"
-                    ></app-video>
-                    <app-video
-                        v-if="index === 0 && videoUrl && getVideo == 1 && (sign === 'lottery' || sign === 'bargain' || sign === 'community' || sign === 'wholesale')"
-                        height="750rpx"
-                        v-bind:pic-url="rangeKey!='false'?item[rangeKey]:item"
-                        v-bind:url="videoUrl"
-                        v-on:video-start="videoStart"
-                        v-on:tap.native.stop="preventD"
-                    ></app-video>
-                    <!-- #endif -->
-
-                    <!-- #ifdef MP-BAIDU || H5 -->
-                    <app-video
-                        v-if="index === 0 && videoUrl"
-                        height="750rpx"
-                        v-bind:pic-url="rangeKey!='false'?item[rangeKey]:item"
-                        v-bind:url="videoUrl"
-                        v-on:video-start="videoStart"
-                        v-on:tap.native.stop="preventD"
-                    ></app-video>
-                    <!-- #endif -->
-
-                </view>
-            </swiper-item>
-        </swiper>
-
-        <view>
-            <app-jump-button url="/pages/cart/cart" v-if="isCart">
-                <view class="cart" :class="isScanQrCode ? 'bd-cart-0' : 'bd-cart-1'" >
-                    <image load-lazy src="https://shop.9026.com/web/statics/image/mall/static/icon/nav-icon-cart.png"></image>
-                </view>
-            </app-jump-button>
-        </view>
-        <view class="share-commission dir-left-nowrap cross-center" v-if="share > 0">
-            <image load-lazy src="https://shop.9026.com/web/statics/img/mall/share/share_commission.png"></image>
-            <view class="text">
-                <view>分销最高可赚</view>
-                <view>¥{{share}}</view>
-            </view>
-        </view>
-    </view>
+	<view class="app-goods-banner" v-if="picList.length > 0">
+		<!-- #ifdef H5 -->
+		<bd-h5-back></bd-h5-back>
+		<!-- #endif -->
+		<!-- #ifdef MP-WEIXIN -->
+		<view class='account-box' v-if='mallConfig.mall.setting.is_official_account == 1'>
+			<official-account></official-account>
+		</view>
+		<!-- #endif -->
+
+		<view class="swiper_zhishi" v-if="picList.length>0">
+			<view :class="swiperKey===i?'view_active':''" v-for="(item1,i) in picList" :key="i"></view>
+		</view>
+		<swiper class="swiper" v-bind:autoplay="autoplay" v-bind:indicator-dots="false" circular @change='bannerChange' :current="current"
+			indicator-color="rgba(254,255,254,.4)" indicator-active-color="#FFFFFF">
+			<!-- #ifndef MP-BAIDU || H5 -->
+			<!-- <swiper-item
+				v-if="videoUrl && getVideo == 1 && sign !== 'lottery' && sign !== 'bargain' && sign !== 'community' && sign !== 'wholesale'">
+				<view class="swiper-img" @click="routeJumpT"
+					v-bind:style="{backgroundImage: 'url(' + rangeKey!='false'?picList[0][rangeKey]:picList[0] + ')'}">
+					<image class="video-play" src="https://shop.9026.com/web/statics/img/mall/static/video-play.png">
+					</image>
+				</view>
+			</swiper-item> -->
+			<!-- #endif-->
+
+			<swiper-item v-for="(item, index) in picList" v-bind:key="index">
+				<view class="swiper-img"
+					v-bind:style="{backgroundImage: `url(${rangeKey!='false'?item[rangeKey]:item})`}"
+					@click="clickImage(index)">
+
+					<!-- #ifndef MP-BAIDU || H5 -->
+					<app-video v-if="index === 0 && videoUrl && getVideo == 0" height="750rpx"
+						v-bind:pic-url="rangeKey!='false'?item[rangeKey]:item" v-bind:url="videoUrl"
+						v-on:video-start="videoStart" v-on:tap.native.stop="preventD"></app-video>
+					<app-video
+						v-if="index === 0 && videoUrl && getVideo == 1 && (sign === 'lottery' || sign === 'bargain' || sign === 'community' || sign === 'wholesale')"
+						height="750rpx" v-bind:pic-url="rangeKey!='false'?item[rangeKey]:item" v-bind:url="videoUrl"
+						v-on:video-start="videoStart" v-on:tap.native.stop="preventD"></app-video>
+					<!-- #endif -->
+
+					<!-- #ifdef MP-BAIDU || H5 -->
+					<app-video v-if="index === 0 && videoUrl" height="750rpx"
+						v-bind:pic-url="rangeKey!='false'?item[rangeKey]:item" v-bind:url="videoUrl"
+						v-on:video-start="videoStart" v-on:tap.native.stop="preventD"></app-video>
+					<!-- #endif -->
+
+				</view>
+			</swiper-item>
+		</swiper>
+
+		<view>
+			<app-jump-button url="/pages/cart/cart" v-if="isCart">
+				<view class="cart" :class="isScanQrCode ? 'bd-cart-0' : 'bd-cart-1'">
+					<image load-lazy src="https://shop.9026.com/web/statics/image/mall/static/icon/nav-icon-cart.png">
+					</image>
+				</view>
+			</app-jump-button>
+		</view>
+		<view class="share-commission dir-left-nowrap cross-center" v-if="share > 0">
+			<image load-lazy src="https://shop.9026.com/web/statics/img/mall/share/share_commission.png"></image>
+			<view class="text">
+				<view>分销最高可赚</view>
+				<view>¥{{share}}</view>
+			</view>
+		</view>
+	</view>
 </template>
 
 <script>
+	import appVideo from "../../page-component/app-video/app-video.vue";
+	// #ifdef H5
+	import bdH5Back from "@/components/page-component/goods/bd-h5-back.vue";
+	// #endif
+	import {
+		mapState,
+		mapGetters
+	} from 'vuex';
 
-    import appVideo from "../../page-component/app-video/app-video.vue";
-    // #ifdef H5
-    import bdH5Back from "@/components/page-component/goods/bd-h5-back.vue";
-    // #endif
-    import { mapState, mapGetters } from 'vuex';
-
-    export default {
-        components: {
-            'app-video': appVideo,
-            // #ifdef H5
-            bdH5Back
-            // #endif
-        },
-        props: {
-            picList: {
-                type: Array,
-                default() {
-                    return []
-                }
-            },
-			rangeKey:{  //传空字符串竟然为true,所以传false字符串替代''
-				type:String,
-				default:'pic_url'
+	export default {
+		components: {
+			'app-video': appVideo,
+			// #ifdef H5
+			bdH5Back
+			// #endif
+		},
+		props: {
+			current:{
+				type:Number,
+				default:0
+			},
+			picList: {
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			rangeKey: { //传空字符串竟然为true,所以传false字符串替代''
+				type: String,
+				default: 'pic_url'
+			},
+			share: {
+				type: Number
+			},
+			isCart: {
+				type: Boolean,
+				default () {
+					return true;
+				}
+			},
+			videoUrl: {
+				type: String
+			},
+			goods_id: {
+				type: [Number, String]
+			},
+			sign: {
+				type: String
+			}
+		},
+		data() {
+			return {
+				swiperKey: 0,
+				// #ifdef MP
+				autoplay: true,
+				// #endif
+				// #ifdef H5
+				autoplay: false,
+				// #endif
+			};
+		},
+		methods: {
+			bannerChange(e) {
+				this.swiperKey = e.detail.current
+				this.$event.trigger(this.$const.EVENT_VIDEO_END);
+			},
+			videoStart(videoStatus) {
+				// #ifdef MP
+				videoStatus ? this.autoplay = false : this.autoplay = true;
+				// #endif
+			},
+			preventD() {},
+			clickImage(index) {
+				let urls = [];
+				this.picList.forEach(item => {
+					urls.push(this.rangeKey != 'false' ? item[this.rangeKey] : item);
+				});
+				uni.previewImage({
+					current: index,
+					urls: urls
+				});
 			},
-            share: {
-                type: Number
-            },
-            isCart: {
-                type: Boolean,
-                default() {
-                    return true;
-                }
-            },
-            videoUrl: {
-                type: String
-            },
-            goods_id: {
-                type: [Number, String]
-            },
-            sign: {
-                type: String
-            }
-        },
-        data() {
-            return {
-                // #ifdef MP
-                autoplay: true,
-                // #endif
-                // #ifdef H5
-                autoplay: false
-                // #endif
-            };
-        },
-        methods: {
-            bannerChange() {
-                this.$event.trigger(this.$const.EVENT_VIDEO_END);
-            },
-            videoStart(videoStatus) {
-                // #ifdef MP
-                videoStatus ? this.autoplay = false : this.autoplay = true;
-                // #endif
-            },
-            preventD() {},
-            clickImage(index) {
-                let urls = [];
-                this.picList.forEach(item => {
-                    urls.push(this.rangeKey!='false'?item[this.rangeKey]:item);
-                });
-                uni.previewImage({
-                    current: index,
-                    urls: urls
-                });
-            },
-            // #ifndef MP-BAIDU || H5
-            routeJumpT() {
-                uni.navigateTo({
-                    url: `/pages/goods/video?goods_id=${this.goods_id}&sign=${this.sign}`
-                })
-            }
-            // #endif
-        },
-        computed: {
-            ...mapState({
-                // #ifdef MP-WEIXIN
-                mallConfig: state => state.mallConfig,
-                // #endif
-                isScanQrCode: state => state.page.isScanQrCode
-            }),
-            // #ifndef MP-BAIDU
-            ...mapGetters('mallConfig',{
-                getVideo: 'getVideo'
-            }),
-            // #endif
-        },
-
-    }
+			// #ifndef MP-BAIDU || H5
+			routeJumpT() {
+				uni.navigateTo({
+					url: `/pages/goods/video?goods_id=${this.goods_id}&sign=${this.sign}`
+				})
+			}
+			// #endif
+		},
+		computed: {
+			...mapState({
+				// #ifdef MP-WEIXIN
+				mallConfig: state => state.mallConfig,
+				// #endif
+				isScanQrCode: state => state.page.isScanQrCode
+			}),
+			// #ifndef MP-BAIDU
+			...mapGetters('mallConfig', {
+				getVideo: 'getVideo'
+			}),
+			// #endif
+		},
+
+	}
 </script>
 
 <style scoped lang="scss">
-    .app-goods-banner {
-        position: relative;
-        width: 750upx;
-    }
-
-    .cart {
-        position: fixed;
-        right: #{24rpx};
-        background: rgba(255, 255, 255, 0.5);
-        font-size: 0;
-        padding: #{20rpx};
-        border-radius: #{999rpx};
-        box-shadow: 0 #{1rpx} #{3rpx} rgba(0, 0, 0, 0.2);
-        z-index: 100;
-        image {
-            width: #{42rpx};
-            height: #{42rpx};
-        }
-    }
-    .bd-cart-0 {
-        top: #{250rpx};
-    }
-    .bd-cart-1 {
-        top: #{180rpx};
-    }
-    .share-commission {
-        height: #{80rpx};
-        padding-right: #{10rpx};
-        min-width: #{220rpx};
-        position: absolute;
-        right: 0;
-        bottom: #{80rpx};
-        border-top-left-radius: #{40rpx};
-        border-bottom-left-radius: #{40rpx};
-        background-color: rgba(0, 0, 0, 0.4);
-        z-index: 100;
-
-        image {
-            width: #{44rpx};
-            height: #{44rpx};
-            margin-right: #{14rpx};
-            margin-left: #{20rpx};
-        }
-
-        .text {
-            color: #ffffff;
-            font-size: $uni-font-size-weak-two;
-        }
-    }
-
-    .swiper {
-        height: #{750rpx};
-
-        .swiper-img {
-            width: 100%;
-            height: #{750rpx};
-            background-size: cover;
-            background-repeat: no-repeat;
-            background-position: center;
-            position: relative;
-        }
-    }
-    .video-play {
-        width: #{128upx};
-        height: #{128upx};
-        position: absolute;
-        top: 50%;
-        left: 50%;
-        transform: translate(-50%, -50%);
-    }
-</style>
+	.app-goods-banner {
+		position: relative;
+		width: 750upx;
+
+
+		.swiper_zhishi {
+			display: flex;
+			align-items: center;
+			width: 80%;
+			justify-content: center;
+			position: absolute;
+			left: 50%;
+			transform: translateX(-50%);
+			bottom: 39rpx;
+			overflow: hidden;
+			z-index: 100;
+
+			view {
+				width: 81rpx;
+				height: 4rpx;
+				background: #c8c8c8;
+			}
+
+			.view_active {
+				background: #f4f4f4;
+			}
+		}
+	}
+
+	.cart {
+		position: fixed;
+		right: #{24rpx};
+		background: rgba(255, 255, 255, 0.5);
+		font-size: 0;
+		padding: #{20rpx};
+		border-radius: #{999rpx};
+		box-shadow: 0 #{1rpx} #{3rpx} rgba(0, 0, 0, 0.2);
+		z-index: 100;
+
+		image {
+			width: #{42rpx};
+			height: #{42rpx};
+		}
+	}
+
+	.bd-cart-0 {
+		top: #{250rpx};
+	}
+
+	.bd-cart-1 {
+		top: #{180rpx};
+	}
+
+	.share-commission {
+		height: #{80rpx};
+		padding-right: #{10rpx};
+		min-width: #{220rpx};
+		position: absolute;
+		right: 0;
+		bottom: #{80rpx};
+		border-top-left-radius: #{40rpx};
+		border-bottom-left-radius: #{40rpx};
+		background-color: rgba(0, 0, 0, 0.4);
+		z-index: 100;
+
+		image {
+			width: #{44rpx};
+			height: #{44rpx};
+			margin-right: #{14rpx};
+			margin-left: #{20rpx};
+		}
+
+		.text {
+			color: #ffffff;
+			font-size: $uni-font-size-weak-two;
+		}
+	}
+
+	.swiper {
+		height: #{750rpx};
+
+		.swiper-img {
+			width: 100%;
+			height: #{750rpx};
+			background-size: cover;
+			background-repeat: no-repeat;
+			background-position: center;
+			position: relative;
+		}
+	}
+
+	.video-play {
+		width: #{128upx};
+		height: #{128upx};
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		transform: translate(-50%, -50%);
+	}
+</style>

+ 163 - 4
src/components/page-component/goods/bd-coupon.vue

xqd xqd xqd xqd
@@ -23,7 +23,7 @@
                 </view>
                 <scroll-view :scroll-y="true" class="f-scroll">
                     <view class="f-scroll-content">
-                        <view class="f-item dir-top-nowrap" v-for="(item, index) in coupons" :key="index">
+                        <!-- <view class="f-item dir-top-nowrap" v-for="(item, index) in coupons" :key="index">
                             <view class="f-item-top">
                                 <image :src="couponImg[item.is_receive == 0 ? 'coupon_enabled' : 'coupon_disabled']"></image>
                                 <view class="dir-left-nowrap main-between cross-center">
@@ -63,7 +63,54 @@
                                     </block>
                                 </text>
                             </view>
-                        </view>
+                        </view> -->
+							<view v-for="(item,index) in coupons" :key="index">
+								<view class="item">
+									<!-- <image src="https://t17.9026.com/web/statics/image/index/img-coupon-bg-0.png" ></image> -->
+									<view class="list-item">
+										<view class="item-left dir-top-nowrap main-center">
+											<view class="coupon-price t-omit" v-if="item.type == 2">
+												¥{{item.sub_price}}</view>
+											<view class="coupon-price t-omit" v-else>{{item.discount}}折</view>
+											<view style="font-size: 10px" class="t-omit" v-if="item.coupon_min_price > 0">
+												满{{item.coupon_min_price}}可用</view>
+											<view style="font-size: 10px" v-else>无门槛使用</view>
+											<view style="font-size: 10px" v-if="item.discount_limit">
+												优惠上限:¥{{item.discount_limit}}</view>
+										</view>
+										<view class="item-right">
+											<view class="item-name t-omit hjx-tc-222 hjx-tw-600">{{item.name}}</view>
+											<view v-if="item.appoint_type == 3">全场通用</view>
+											<view v-else-if="item.appoint_type == 4">仅限当面付活动使用</view>
+											<view v-else-if="item.appoint_type == 5">仅限礼品卡使用</view>
+											<view v-else>限品类</view>
+											<view class="t-omit t-small-color time-area hjx-tc-B19D60">{{item.begin_time.split(' ')[0]}} - {{item.end_time.split(' ')[0]}}</view>
+										</view>
+										<view class="item-right-btn cross-center" >
+											<view class="btn" @click="receive(item.id, index)">{{item.is_receive == 0 ? '立即领取' : '已领取'}}</view>
+										</view>
+									</view>
+									<view class="coupon-info" @click="toDetail(item.id)">
+										<view v-if="item.expire_type == `1`">领取后{{item.expire_day}}天过期</view>
+										<view v-if="item.expire_type == `2`">有效日期: {{item.begin_time}} - {{item.end_time}}</view>
+										<view class="t-omit" v-if="item.appoint_type == `3`">适用范围:全场通用</view>
+										<view class="t-omit" v-else-if="item.appoint_type == `4`">适用范围:仅限当面付活动使用</view>
+										<view class="t-omit" v-else-if="item.appoint_type == `5`">适用范围:仅限礼品卡使用</view>
+										<view class="t-omit" v-else-if="item.appoint_type == `2`">
+									  <text>适用商品:</text>
+											<text v-for="(goods,index) in item.goods" :key="goods.id">
+												<text>{{index != 0 ? '、' : ''}}{{goods.name}}</text>
+											</text>
+									 </view>
+										<view class="t-omit" v-else-if="item.appoint_type == `1`">
+											<text>适用分类:</text>
+											<text v-for="(cat,index) in item.cat" :key="cat.id">
+												<text>{{index != 0 ? '、' : ''}}{{cat.name}}</text>
+											</text>
+										</view>
+									</view>
+								</view>
+							</view>
                     </view>
                 </scroll-view>
             </view>
@@ -252,8 +299,7 @@ export default {
         width: 100%;
         background-color: #f7f7f7;
         .f-scroll-content {
-            padding: 0 24upx;
-            height: 995upx;
+            padding: 20rpx 24upx 0;
             width: 100%;
         }
         .f-item {
@@ -334,4 +380,117 @@ export default {
     }
 }
 
+.coupon-info {
+		margin: 0 auto;
+		width: 656rpx;
+		height: #{115rpx};
+		border-top: 1px solid #EAEAEA;
+		padding: #{20rpx} #{25rpx};
+		font-size: #{22rpx};
+		color: #777;
+	}
+
+
+	.item {
+		height: auto;
+		width: 100%;
+		background-image: url(https://t17.9026.com/web/statics/image/index/img-coupon-bg-0.png);
+		background-size: 100% 100%;
+		margin-bottom: 20rpx;
+	}
+
+	.item image {
+		width: 100%;
+		height: 100%;
+	}
+
+	.list-item {
+		height: #{181rpx};
+		width: 100%;
+		position: relative;
+	}
+
+	.item-left {
+		position: absolute;
+		left: 0;
+		top: 0;
+		height: 100%;
+		width: #{190rpx};
+		text-align: center;
+		font-size: #{24rpx};
+		color: #B19D60;
+		padding-top: #{8rpx};
+	}
+
+	.coupon-price {
+		font-size: #{36rpx};
+		padding-bottom: #{16rpx};
+		font-weight: 600;
+	}
+
+	.item-right {
+		position: absolute;
+		left: #{220rpx};
+		top: #{30rpx};
+		width: 45%;
+		color: #666666;
+		font-size: #{24rpx};
+	}
+
+	.item-name {
+		font-size: #{32rpx};
+	}
+
+	.item-right view {
+		margin-bottom: #{5rpx};
+	}
+
+	.item-right-btn {
+		position: absolute;
+		right: 0;
+		top: 0;
+		width: 20%;
+		height: 100%;
+
+		.btn {
+			width: 118rpx;
+			height: 52rpx;
+			border: 1rpx solid #B19D60;
+			border-radius: 26rpx;
+			font-size: 22rpx;
+			font-weight: 500;
+			color: #B19D60;
+			text-align: center;
+			line-height: 52rpx;
+			box-sizing: border-box;
+		}
+	}
+
+	.coupon-footer {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		width: 100%;
+		height: #{100rpx};
+		line-height: #{100rpx};
+		text-align: center;
+		background-color: #fff;
+		z-index: 2;
+	}
+
+	.coupon-footer.iphone_x {
+		height: #{150rpx};
+		padding-bottom: #{50rpx};
+	}
+
+	.list-item .status {
+		position: absolute;
+		top: 0;
+		right: 0;
+		height: #{98rpx};
+		width: #{140rpx};
+		z-index: 2;
+	}
+
 </style>

+ 38 - 8
src/components/page-component/goods/bd-xbc.vue

xqd xqd xqd xqd
@@ -32,13 +32,26 @@
             </view>
             <image class="bd-icon" src="https://shop.9026.com/web/statics/image/mall/static/icon/arrow-right.png"></image>
         </view>
-        <view v-if="param_content.length > 0" class="dir-left-nowrap cross-center bd-server" @click.stop="open('param')">
-            <text class="box-grow-0 bd-name">参数</text>
-            <view class="box-grow-1 u-content u-line-1">
-                {{paramStr}}
-            </view>
-            <image class="bd-icon" src="https://shop.9026.com/web/statics/image/mall/static/icon/arrow-right.png"></image>
-        </view>
+        <template v-if="param_style===1">
+        	<view v-if="param_content.length > 0" class="dir-left-nowrap cross-center bd-server" @click.stop="open('param')">
+        	    <text class="box-grow-0 bd-name">参数</text>
+        	    <view class="box-grow-1 u-content u-line-1">
+        	        {{paramStr}}
+        	    </view>
+        	    <image class="bd-icon" src="https://shop.9026.com/web/statics/image/mall/static/icon/arrow-right.png"></image>
+        	</view>
+        </template>
+		<template  v-if="param_style===2">
+			<view v-if="param_content.length > 0" class="bd-server" >
+			    <view class="bd-name">参数</view>
+			   <view style="padding: 10rpx;">
+				   <view v-for="(con, index) of param_content" :key="index" class="main-between cross-center"> 
+					   <view class="p-label1">{{ con.key }}</view>
+					   <view class="p-value1">{{ con.value }}</view>
+				   </view>
+			   </view>
+			</view>
+		</template>
         <u-popup v-model="show" mode="bottom" border-radius="14" @close="show = false">
             <view class="model">
                 <view class="f-top dir-left-nowrap main-between cross-center">
@@ -70,7 +83,7 @@
                         </template>
                         <template v-else-if="isShow === 'param'">
                             <view v-for="(con, index) of param_content" :key="index" class="p-box dir-left-nowrap cross-center">
-                                <view class="p-label">{{ con.key }}</view>
+                                <view class="p-label t-omit">{{ con.key }}</view>
                                 <view class="p-value">{{ con.value }}</view>
                             </view>
                         </template>
@@ -99,6 +112,10 @@
                 }
             },
             param_name: String,
+			param_style: {
+				type:Number,
+				default:1
+			},
             type: String,
             goodsStock: Number,
             coAttr: {
@@ -347,4 +364,17 @@
         color: #353535;
         word-break: break-word;
     }
+	.p-label1 {
+		font-size: 24rpx;
+	    width: 150upx;
+	    min-width: 120upx;
+	    color: #999999;
+	    margin-right: calc(36upx);
+	    word-break: break-word;
+	}
+	.p-value1 {
+		font-size: 22rpx;
+	    color: #353535;
+	    word-break: break-word;
+	}
 </style>

+ 2 - 2
src/components/page-component/goods/u-attr.vue

xqd xqd
@@ -864,7 +864,7 @@
 	}
 	.u-top {
 		margin: 0 24upx;
-		border-bottom: 1upx solid rgba(0,0,0,.1);
+		// border-bottom: 1upx solid rgba(0,0,0,.1);
 		height: 115upx;
 	}
 	.u-close-image {
@@ -1003,7 +1003,7 @@
 		height: 110upx;
 		width: 750upx;
 		padding: 20upx 24upx;
-		border-top: 1upx solid rgba(0,0,0,.1);
+		// border-top: 1upx solid rgba(0,0,0,.1);
 	}
 	.u-btn {
 		text-align: center;

+ 1 - 2
src/components/page-component/index/app-diy-list.vue

xqd xqd
@@ -89,7 +89,6 @@ export default {
           // 获取商品数组
         copyList() {
             let list = this.list && this.list.length > 0 ? this.list : this.temp.data.list;
-			console.log('商品列表',list)
             return list;
         },
     },
@@ -115,7 +114,7 @@ export default {
         }
     },
     created() {
-        // console.log(this.list)
+        
     },
     methods: {
         attrShow(e) {

+ 0 - 1
src/components/page-component/index/app-diy-page.vue

xqd
@@ -1134,7 +1134,6 @@ export default {
     },
     pageScroll() {
       let style = "";
-      console.log(uni.getSystemInfoSync(), this.scroll, this.hasTabs);
       let windowHeight = uni.getSystemInfoSync().windowHeight;
       let screenHeight = uni.getSystemInfoSync().screenHeight;
       // #ifdef MP-ALIPAY

+ 11 - 6
src/components/page-component/index/app-nav-bar.vue

xqd xqd xqd xqd xqd xqd xqd
@@ -13,8 +13,9 @@
                         class="box-grow-1 dir-left-nowrap app-navbar__right">
                         <view v-if="showLeftIcon">
 							<template v-if="xStyle==5">
-								<view class="main-left cross-center hxj-area" @click="leftClick">
-									<view class="tt t-omit">{{selectedProperties.name?selectedProperties.name:'绑定楼盘'}}</view><image src="https://t17.9026.com/web/statics/image/index/arrow-down.png" mode=""></image>
+								<view class="main-left cross-center hxj-area" :style="{color:color}"  @click="leftClick">
+									<view class="tt t-omit">{{selectedProperties.name?selectedProperties.name:'绑定楼盘'}}</view>
+									<image src="https://t17.9026.com/web/statics/image/index/arrow-down.png" mode=""></image>
 								</view>
 							</template>
 							<template v-else>
@@ -64,7 +65,6 @@ export default {
     },
     watch: {
         'leftIcon'(newValue, oldValue) {
-            console.log('lefticon 监听测试');
             this.doSomething();
         }
     },
@@ -89,6 +89,10 @@ export default {
             type: String,
             default: "#FFFFFF"
         },
+		backgroundImage:{
+			type:String,
+			default:''
+		},
         leftIcon: {
             type: String,
             default: ""
@@ -181,12 +185,14 @@ export default {
             return () => {
                 let color = '';
                 let backgroundColor = '';
+				let backgroundImage=''
                 if (this.hasMallSetting == 1) {
                     color = this.mallNavbar.top_text_color;
                     backgroundColor = this.mallNavbar.top_background_color;
                 } else {
                     color = this.color;
                     backgroundColor = this.backgroundColor;
+					backgroundImage =this.backgroundImage
                 }
                 let barHeight;
                 // #ifdef MP
@@ -196,7 +202,7 @@ export default {
                 color = color || '#000000';
                 backgroundColor = backgroundColor || '#FFFFFF';
                 return Object.assign({}, {
-                    color, backgroundColor,
+                    color, backgroundColor,backgroundImage,'background-size': '100% 386rpx',
                     height: (barHeight + this.mBarHeight) + 'px',
                     paddingTop: barHeight + 'px',
                 })
@@ -256,7 +262,6 @@ export default {
                         height: uni.upx2px(height) + 'px',
                         width: uni.upx2px(width) + 'px',
                     };
-                    console.log(self.hw_style);
                 }
             })
         },
@@ -282,7 +287,7 @@ export default {
 		width: 260rpx;
 		font-size: 28rpx;
 		font-weight: 500;
-		color: #FFFFFF;
+		color: #ebe4e1;
 		.tt{
 			max-width: 240rpx;
 		}

+ 1 - 1
src/components/page-component/u-goods-list/u-ordinary-list.vue

xqd
@@ -187,7 +187,7 @@
 			<!--一行两个-->
 			<template v-else-if="listStyle === 2">
 				<block v-for="(goods, index) in goodsList" v-bind:key="index">
-					<view hover-class="goods-hover-class" v-on:click.stop="router(goods)"
+					<view hover-class="goods-hover-class" @click="router(goods)"
 						v-bind:class="[goodsStyleObject, 'u-one-line-two', 'dir-top-nowrap']" :style="[styleBox]">
 
 

+ 6 - 2
src/core/apiUrl.js

xqd xqd
@@ -12,7 +12,10 @@ const apiUrl = {
 		get_token:'plugin/sale/api/customer/get-token',
 		
 		message_list:'plugin/sale/api/message/list',
-		message_delete:'plugin/sale/api/message/delete'
+		message_delete:'plugin/sale/api/message/delete',
+		
+		income_record:'plugin/sale/api/user/income-record',
+		logout:'plugin/sale/api/user/logout'
 	},
 	example:{
 		style_list:'plugin/example/api/index/style-list',
@@ -36,7 +39,8 @@ const apiUrl = {
 		// hxj新增
 		binding_estate:'api/estate/binding-estate-sale',
 		sale_list:'api/estate/sale-list',
-		select_master_estate:'api/estate/select-master-estate'
+		select_master_estate:'api/estate/select-master-estate',
+		setting_list:'api/default/setting-list'
     },
     finance: {
         cash: 'api/finance/cash',

+ 1 - 0
src/core/jump.js

xqd
@@ -71,6 +71,7 @@ const jump = function(data) {
             this.$platDiff.reload();
             // #endif
             // #ifndef MP-ALIPAY
+			console.log('this.$platDiff.routeWithOption()',this.$platDiff.routeWithOption())
             uni.redirectTo({
                 url: this.$platDiff.routeWithOption()
             });

+ 180 - 172
src/pages.json

xqd xqd
@@ -533,6 +533,13 @@
 						"enablePullDownRefresh": false
 					}
 
+				}, {
+					"path": "about-mall/mallAgreement",
+					"style": {
+						"navigationBarTitleText": "商城协议",
+						"enablePullDownRefresh": false
+					}
+
 				}
 			]
 		},
@@ -1124,178 +1131,179 @@
 				}
 			]
 		},
-		// {
-		// 	"root": "plugins/mch",
-		// 	"pages": [{
-		// 			"path": "apply/apply"
-		// 		},
-		// 		{
-		// 			"path": "cat/cat",
-		// 			"style": {
-		// 				"navigationBarTitleText": "店铺分类"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "goods/goods",
-		// 			"style": {
-		// 				"navigationBarTitleText": "商品详情"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "list/list",
-		// 			"style": {
-		// 				"navigationBarTitleText": "好店推荐"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "shop/shop"
-		// 		},
-		// 		{
-		// 			"path": "summary/summary",
-		// 			"style": {
-		// 				"navigationBarTitleText": "店铺简介"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/login/login",
-		// 			"style": {
-		// 				"navigationBarTitleText": "商家登录"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/myshop/myshop"
-		// 		},
-		// 		{
-		// 			"path": "mch/account/account",
-		// 			"style": {
-		// 				"navigationBarTitleText": "资产"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/account-log/account-log",
-		// 			"style": {
-		// 				"navigationBarTitleText": "交易记录"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/settle-detail/settle-detail"
-		// 		},
-		// 		{
-		// 			"path": "mch/cash-log/cash-log",
-		// 			"style": {
-		// 				"navigationBarTitleText": "提现记录"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/cash/cash",
-		// 			"style": {
-		// 				"navigationBarTitleText": "提现申请"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/count/count",
-		// 			"style": {
-		// 				"navigationBarTitleText": "数据统计"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/config/config",
-		// 			"style": {
-		// 				"navigationBarTitleText": "店铺管理"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/password/password",
-		// 			"style": {
-		// 				"navigationBarTitleText": "修改密码"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/web-login/web-login",
-		// 			"style": {
-		// 				"navigationBarTitleText": "登录网页端"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/qrcode/qrcode",
-		// 			"style": {
-		// 				"navigationBarTitleText": "店铺二维码"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/goods/goods",
-		// 			"style": {
-		// 				"navigationBarTitleText": "商品管理"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/add-goods/add-goods",
-		// 			"style": {
-		// 				"navigationBarTitleText": "添加商品"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/goods-detail/goods-detail",
-		// 			"style": {
-		// 				"navigationBarTitleText": "商品详情图"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/order/order",
-		// 			"style": {
-		// 				"navigationBarTitleText": "订单管理"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/order-detail/order-detail",
-		// 			"style": {
-		// 				"navigationBarTitleText": "订单详情"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/send/send",
-		// 			"style": {
-		// 				"navigationBarTitleText": "发货"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/express/express",
-		// 			"style": {
-		// 				"navigationBarTitleText": "快递信息"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/change-add/change-add",
-		// 			"style": {
-		// 				"navigationBarTitleText": "修改地址"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/goods-attr/goods-attr",
-		// 			"style": {
-		// 				"navigationBarTitleText": "商品规格"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/goods-attr-edit/goods-attr-edit",
-		// 			"style": {
-		// 				"navigationBarTitleText": "规格值编辑"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/goods-attr-info/goods-attr-info",
-		// 			"style": {
-		// 				"navigationBarTitleText": "规格明细"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "mch/open-time/open-time",
-		// 			"style": {
-		// 				"navigationBarTitleText": "设置时间段"
-		// 			}
-		// 		}
-		// 	]
-		// },
+		{
+			"root": "plugins/mch",
+			"pages": [{
+					"path": "apply/apply"
+				},
+				{
+					"path": "cat/cat",
+					"style": {
+						"navigationBarTitleText": "店铺分类"
+					}
+				},
+				{
+					"path": "goods/goods",
+					"style": {
+						"navigationBarTitleText": "商品详情",
+						"navigationStyle": "custom"
+					}
+				},
+				{
+					"path": "list/list",
+					"style": {
+						"navigationBarTitleText": "好店推荐"
+					}
+				},
+				{
+					"path": "shop/shop"
+				},
+				{
+					"path": "summary/summary",
+					"style": {
+						"navigationBarTitleText": "店铺简介"
+					}
+				},
+				{
+					"path": "mch/login/login",
+					"style": {
+						"navigationBarTitleText": "商家登录"
+					}
+				},
+				{
+					"path": "mch/myshop/myshop"
+				},
+				{
+					"path": "mch/account/account",
+					"style": {
+						"navigationBarTitleText": "资产"
+					}
+				},
+				{
+					"path": "mch/account-log/account-log",
+					"style": {
+						"navigationBarTitleText": "交易记录"
+					}
+				},
+				{
+					"path": "mch/settle-detail/settle-detail"
+				},
+				{
+					"path": "mch/cash-log/cash-log",
+					"style": {
+						"navigationBarTitleText": "提现记录"
+					}
+				},
+				{
+					"path": "mch/cash/cash",
+					"style": {
+						"navigationBarTitleText": "提现申请"
+					}
+				},
+				{
+					"path": "mch/count/count",
+					"style": {
+						"navigationBarTitleText": "数据统计"
+					}
+				},
+				{
+					"path": "mch/config/config",
+					"style": {
+						"navigationBarTitleText": "店铺管理"
+					}
+				},
+				{
+					"path": "mch/password/password",
+					"style": {
+						"navigationBarTitleText": "修改密码"
+					}
+				},
+				{
+					"path": "mch/web-login/web-login",
+					"style": {
+						"navigationBarTitleText": "登录网页端"
+					}
+				},
+				{
+					"path": "mch/qrcode/qrcode",
+					"style": {
+						"navigationBarTitleText": "店铺二维码"
+					}
+				},
+				{
+					"path": "mch/goods/goods",
+					"style": {
+						"navigationBarTitleText": "商品管理"
+					}
+				},
+				{
+					"path": "mch/add-goods/add-goods",
+					"style": {
+						"navigationBarTitleText": "添加商品"
+					}
+				},
+				{
+					"path": "mch/goods-detail/goods-detail",
+					"style": {
+						"navigationBarTitleText": "商品详情图"
+					}
+				},
+				{
+					"path": "mch/order/order",
+					"style": {
+						"navigationBarTitleText": "订单管理"
+					}
+				},
+				{
+					"path": "mch/order-detail/order-detail",
+					"style": {
+						"navigationBarTitleText": "订单详情"
+					}
+				},
+				{
+					"path": "mch/send/send",
+					"style": {
+						"navigationBarTitleText": "发货"
+					}
+				},
+				{
+					"path": "mch/express/express",
+					"style": {
+						"navigationBarTitleText": "快递信息"
+					}
+				},
+				{
+					"path": "mch/change-add/change-add",
+					"style": {
+						"navigationBarTitleText": "修改地址"
+					}
+				},
+				{
+					"path": "mch/goods-attr/goods-attr",
+					"style": {
+						"navigationBarTitleText": "商品规格"
+					}
+				},
+				{
+					"path": "mch/goods-attr-edit/goods-attr-edit",
+					"style": {
+						"navigationBarTitleText": "规格值编辑"
+					}
+				},
+				{
+					"path": "mch/goods-attr-info/goods-attr-info",
+					"style": {
+						"navigationBarTitleText": "规格明细"
+					}
+				},
+				{
+					"path": "mch/open-time/open-time",
+					"style": {
+						"navigationBarTitleText": "设置时间段"
+					}
+				}
+			]
+		},
 		{
 			"root": "plugins/book",
 			"pages": [{

+ 63 - 16
src/pages/case/appointment/appointment-form.vue

xqd xqd xqd xqd xqd xqd
@@ -36,7 +36,7 @@
 				<view class="hjx-ts-28 hjx-tw-600 hjx-tc-000">电话</view>
 				<view>
 					<view class="cross-center hjx-ts-28 ">
-						<input type="number" v-model="mobile" style="text-align:right;color: #000000;" placeholder="请输入"
+						<input type="number" v-model="mobile" maxlength="11" style="text-align:right;color: #000000;" placeholder="请输入"
 							placeholder-style="text-align:right" placeholder-class="hjx-tc-999" />
 					</view>
 
@@ -57,7 +57,7 @@
 			<view class="item main-between cross-center">
 				<view class="hjx-ts-28 hjx-tw-600 hjx-tc-000">到访时间</view>
 				<view>
-					<picker mode="time" :value="time" start="09:01" end="21:01" @change="bindTimeChange">
+					<picker mode="time" :value="time" :start="startTime" :end="endTime" @change="bindTimeChange">
 						<view class="cross-center hjx-ts-28"
 							:class="{'hjx-tc-999':time=='请选择'?true:false,'hjx-tc-000':time!='请选择'?true:false}">{{time}}
 							<image style="width: 12.8rpx;height: 22.8rpx;margin-left: 20rpx;"
@@ -81,10 +81,10 @@
 		},
 		computed: {
 			startDate() {
-				return this.getDate('start');
+				return this.getDate(1,this.dataDetail.begin_time);
 			},
 			endDate() {
-				return this.getDate('end');
+				return this.getDate(1,this.dataDetail.end_time);
 			}
 		},
 		data() {
@@ -97,9 +97,29 @@
 				username: '',
 				mobile: '',
 				time: '请选择',
-				date: '请选择'
+				date: '请选择',
+				
+				startTime:'',
+				endTime:'',
 			};
 		},
+		watch:{
+			date(nVal,oVal){
+				if(nVal==this.startDate){
+					this.startTime=this.getDate(2,this.dataDetail.begin_time);
+				}else{
+					this.startTime='00:00'
+				}
+				if(nVal==this.endDate){
+					this.endTime=this.getDate(2,this.dataDetail.end_time);
+				}else{
+					this.endTime='23:59'
+				}
+				if(new Date('2007-2-2 '+this.time).getTime()<new Date('2007-2-2 '+this.startTime).getTime() || new Date('2007-2-2 '+this.time).getTime()>new Date('2007-2-2 '+this.endTime).getTime()){
+					this.time='请选择'
+				}
+			}
+		},
 		onLoad(option) {
 			this.visit_id=option.id
 			this.$request({
@@ -121,22 +141,46 @@
 			bindDateChange(e) {
 				this.date = e.target.value
 			},
-			getDate(type) {
-				const date = new Date();
+			getDate(type,val) {
+				const date = new Date(val);
 				let year = date.getFullYear();
 				let month = date.getMonth() + 1;
 				let day = date.getDate();
-
-				if (type === 'start') {
-					year = year - 60;
-				} else if (type === 'end') {
-					year = year + 2;
+				let hours=date.getHours();
+				let minutes=date.getMinutes();
+				if(type===1){
+					month = month > 9 ? month : '0' + month;
+					day = day > 9 ? day : '0' + day;
+					return `${year}-${month}-${day}`;
+				}else{
+					hours=hours>9?hours:'0'+hours;
+					minutes=minutes<10? '0'+minutes:minutes;
+					return `${hours}:${minutes}`;
 				}
-				month = month > 9 ? month : '0' + month;
-				day = day > 9 ? day : '0' + day;
-				return `${year}-${month}-${day}`;
+				
 			},
 			goAppointment() {
+				if(!this.username){
+					uni.showToast({
+						title:'请输入姓名',
+						icon:'none'
+					})
+					return
+				}
+				if(!this.$validation.mobile(this.mobile)){
+					uni.showToast({
+						title:'手机号不合法',
+						icon:'none'
+					})
+					return
+				}
+				if(this.date==='请选择' || this.time==='请选择'){
+					uni.showToast({
+						title:'请选择预约日期',
+						icon:'none'
+					})
+					return
+				}
 				this.$request({
 					url: this.$api.user.visit_appoint,
 					data: {
@@ -149,7 +193,10 @@
 				}).then(res => {
 					if (res.code === 0) {
 						uni.showToast({
-							title: '预约成功'
+							title: '预约成功',
+							complete:()=>{
+								uni.navigateBack()
+							}
 						})
 					} else {
 						uni.showToast({

+ 6 - 6
src/pages/case/appointment/appointment-list.vue

xqd xqd
@@ -9,17 +9,17 @@
 				<view class="main-between pl" >
 					<view class="main-between-y">
 						<view class="title t-omit">{{item.name}}</view>
-						<view class="desc t-omit">活动时间:{{`${item.begin_time}-${item.end_time}`}}</view>
+						<view class="desc t-omit" :style="{width: is_myself===0?'':'100%'}">活动时间:{{`${item.begin_time}-${item.end_time}`}}</view>
 					</view>
-					<view class="right-bt">
-						<view class="t-omit">{{item.num}}</view>
+					<view v-if="is_myself===0" class="right-bt">
+						<view style="width: 118rpx;" class="t-omit">{{item.num}}</view>
 						<view class="ee">名额仅剩</view>
 					</view>
 				</view>
 				<view class="line"></view>
 				<view class="main-between cross-center addr">
-					<view class="t-omit" style="width: 400rpx;">活动地点:{{item.address}}</view>
-					<!-- <button class="appointment-now" size="mini" :style="{'background-color':getTheme.background,}">去预约</button> -->
+					<view class="t-omit" :style="{width: is_myself===0?'400rpx':'100%'}">活动地点:{{item.address}}</view>
+					<button v-if="is_myself===0" class="appointment-now" style="padding: 0;border-radius: 0;" size="mini" :style="{'background-color':item.is_already_appoint==1?'#908d89':getTheme.background}">{{item.is_already_appoint==1?'已预约':'去预约'}}</button>
 				</view>
 			</view>
 			<appNoData v-if="VisitList.length===0" :title="'暂无预约'"></appNoData>
@@ -195,7 +195,7 @@
 				line-height: 22rpx;
 			}
 			.appointment-now{
-				width: 150rpx;
+				width: 118rpx;
 				font-size: 22rpx;
 				height: 100%;
 				color: #fff;

+ 8 - 1
src/pages/case/appointment/appointment.vue

xqd xqd
@@ -109,7 +109,7 @@
 				</view>
 			</view>
 		</view>
-		<view class="noMake cross-center" v-if="!is_myself"><button type="default" @tap="goAppointment">立即预约</button></view>
+		<view class="noMake cross-center" v-if="!is_myself"><button type="default" @tap="goAppointment">{{dataDetail.is_already_appoint==1?'已预约':'立即预约'}}</button></view>
 	</view>
 </template>
 
@@ -147,6 +147,13 @@ export default {
 			this.swiperKey = e.detail.current;
 		},
 		goAppointment() {
+			if(this.dataDetail.is_already_appoint==1){
+			uni.showToast({
+				title:'您已预约该活动',
+				icon:'none'
+			})
+			return
+			}
 			uni.navigateTo({
 				url: '/pages/case/appointment/appointment-form?id='+this.dataDetail.id
 			});

+ 4 - 3
src/pages/case/components/hxj-bd-info.vue

xqd xqd xqd
@@ -1,5 +1,5 @@
 <template>
-	<view class="bd-info">
+	<view class="bd-info" style="margin-top: 32rpx;">
 		<view class="main-between hxj-goods-name">
 			<view class="main-between-y">
 				<view class="main-left cross-center">
@@ -150,9 +150,10 @@
 	.hxj-goods-name {
 		width: 750rpx;
 		height: auto;
-		background: #F6F6F6;
+		background: rgba($color:#F6F6F6, $alpha: 0.5);
 		padding: 43rpx 30rpx 28rpx 46rpx;
 
+border-radius: 60rpx 0px 0px 0px;
 		.hxj-name {
 			max-width: 360rpx;
 			font-size: 28rpx;
@@ -184,7 +185,7 @@
 			color: #AE8445;
 			opacity: 0.6;
 			padding: 0 6rpx;
-			line-height: 30rpx;
+			line-height: 24rpx;
 			text-align: center;
 		}
 

+ 10 - 5
src/pages/case/components/scroll-list.vue

xqd xqd
@@ -2,7 +2,7 @@
 	<view>
 		<scroll-view class="scroll_list" :style="{'background': background}" scroll-x="true">
 			<view class="main-left" style="padding-left: 40rpx;">
-				<view v-for="(item,index) in list" :key="index" @click="goPage(item.link)">
+				<view v-for="(item,index) in list" :key="index" @click="goPage(item.link,item.open_type,index)">
 					<view class="box" :style="{'width':itemWidth,'height':itemHeight}">
 						<image class="image-bg" :src="item.image"></image>
 						<view class="text t-omit">{{item.title}}</view>
@@ -69,10 +69,15 @@
 			}
 		},
 		methods: {
-			goPage(link){
-				uni.navigateTo({
-					url:link
-				})
+			goPage(link,open_type="navigate",index){
+				if(open_type==="navigate"){
+					uni.navigateTo({
+						url:link
+					})
+				}else{
+					this.$emit("Pclick",index)
+				}
+				
 			}
 		}
 	}

+ 2 - 2
src/pages/case/hot_sale_project.vue

xqd xqd
@@ -38,7 +38,7 @@
 				</view>
 			</view>
 			<view class="no-more" v-if="noMore && CompositionList.length>0">没有更多了...</view>
-			<appNoData v-if="CompositionList.length==0" :background="'#f8f8f8'" :title="'该分类暂无套'"></appNoData>
+			<appNoData v-if="CompositionList.length==0" :background="'#f8f8f8'" :title="'该分类暂无套'"></appNoData>
 		</view>
 	</view>
 </template>
@@ -185,7 +185,7 @@
 					font-size: 22rpx;
 					font-weight: 500;
 					color: #999999;
-					line-height: 45rpx;
+					margin: 10rpx 0 13rpx;
 				}
 				.price{
 					text{

+ 21 - 183
src/pages/case/projectInfo.vue

xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd
@@ -6,11 +6,11 @@
 				:hasHeight="false"></app-nav-bar>
 
 			<!--商品轮播图-->
-			<app-goods-banner :pic-list="compositionList.banner_imgs" :range-key="'banner_imgs'"
+			<app-goods-banner :pic-list="bannerList" :range-key="'banner_imgs'" :current="current"
 				:goods_id="compositionList.id" :isCart="false"></app-goods-banner>
 			<!-- 套装内商品 -->
 			<view style="background-color: #fff;">
-				<view class="link ">
+				<view class="link " style="padding-top: 50rpx;">
 					<view class="title1 main-left cross-center">
 						套装内商品
 						<image class="coupon_1" src="https://t17.9026.com/web/statics/image/index/coupon_1.png" mode="">
@@ -18,7 +18,7 @@
 						<text class="coupon_sub">IN SET GOODS</text>
 					</view>
 				</view>
-				<hxj-scroll-list :itemWidth="'168rpx'" :itemHeight="'168rpx'" :list="list"></hxj-scroll-list>
+				<hxj-scroll-list :itemWidth="'168rpx'" :itemHeight="'168rpx'" :list="list" @Pclick="selectBanner"></hxj-scroll-list>
 				<hxj-bd-info :theme="getTheme" :name="compositionList.name"
 					:discount_amount="compositionList.discount_amount" :original-price="compositionList.actual_price"
 					:sales="Number(compositionList.sale_num)+Number(compositionList.virtual_sale_num)"
@@ -228,6 +228,7 @@
 			hxjScrollList,
 			hxjBdInfo
 		},
+		
 		data() {
 			return {
 				id: '', //套餐id
@@ -253,60 +254,20 @@
 				sendPath: '',
 				poster_config: this.$api.goods.poster,
 				poster_generate: this.$api.poster.goods_new,
-				// // 限时抢购
-				// flash_sale: null,
-				// checked: null,
-				// // 商品服务
-				// services: null,
-				// // 商品详情
-				// detail: null,
-				// // 商品ID
-				// goodsId: null,
-				// // 套餐组合
-				// composition: null,
-				// autoplay: true,
-				// full_reduce: null,
-				// goods_marketing_award: null,
-				// express: null,
-				// goods_marketing: null,
-				// exchangeStatus: null,
-				// exchange: null,
 
-				// price: null,
-				// level_show: null,
-				// sales: null,
-				// unit: null,
-				// is_sales: null,
-				// extra_quick_share: null,
-				// price_max: null,
-				// price_min: null,
-				// price_member_max: null,
-				// price_member_min: null,
-				// original_price: null,
-				// subtitle: null,
-				// is_negotiable: null,
-				// name: null,
-				// app_share_pic: null,
-				// app_share_title: null,
-				// goodsType: null,
-				// favorite: null,
 				goods_coupon_center: null,
-				// guarantee_title: null,
-				// guarantee_pic: null,
-				// param_content: null,
-				// param_name: null,
-				// attr_groups: null,
-				// goods_num: null,
-				// good_stock: null,
-				// min_number: null,
-				// limit_buy: null,
-				// disable: 'disable',
-				// sell_time: 0,
-				// template_message_list: [],
-				// is_finish_sell: false
+
 			};
 		},
 		computed: {
+			bannerList:function(){
+				let data=[]
+				for (let i = 0; i < this.compositionList.compositionGoods.length; i++) {
+					let item=this.compositionList.compositionGoods[i]
+					data.push({banner_imgs:item.goods.cover_pic})
+				}
+				return data
+			},
 			...mapState({
 				mall: state => state.mallConfig.mall,
 				gConfig: state => state.gConfig,
@@ -421,7 +382,7 @@
 			// #ifndef MP-ALIPAY
 			this.loadData(this.id, options);
 			// #endif
-			this.sendPath = '/pages/goods/goods?id=' + options.id;
+			this.sendPath = '/pages/case/projectInfo?id=' + options.id;
 			console.log(this.sendPath);
 			if (options && options.exchange) {
 				this.exchangeStatus = options.exchange;
@@ -454,6 +415,9 @@
 		},
 		// #endif
 		methods: {
+			selectBanner(e){
+				this.current = e
+			},
 			receive() {
 				this.isCouponShow = true
 			},
@@ -467,7 +431,7 @@
 						path: '/pages/case/projectInfo',
 						desc: this.subtitle,
 						params: {
-							id: this.goodsId
+							id: this.id
 						}
 					},
 					s
@@ -502,14 +466,6 @@
 			}) {
 				this.checked = item;
 			},
-			change(e) {
-				if (e.detail.source === 'touch') {
-					this.current = e.detail.current;
-				}
-				if (e.detail.source === 'autoplay') {
-					this.current = e.detail.current;
-				}
-			},
 			quickShare(info) {
 				this.shareData = info;
 				//#ifdef H5
@@ -542,9 +498,11 @@
 								image,
 								link: `/pages/goods/goods?id=${id}`,
 								name,
-								goods_num
+								goods_num,
+								open_type:"click",
 							})
 						}
+						console.log('this.compositionList',this.compositionList)
 					}
 					this.$hideLoading();
 				})
@@ -560,126 +518,6 @@
 						this.goods_coupon_center = res.data.list
 					}
 				})
-				// return new Promise((resolve, reject) => {
-				// 	this.$showLoading();
-				// 	this.$request({
-				// 			url: this.$api.goods.detail,
-				// 			data: {
-				// 				id: 18,
-				// 				plugin: options && options.exchange ? 'exchange' : 'mall'
-				// 			}
-				// 		})
-				// 		.then(response => {
-				// 			this.$hideLoading();
-				// 			if (response.code === 0) {
-				// 				let {
-				// 					services,
-				// 					detail,
-				// 					name,
-				// 					vip_card_appoint,
-				// 					plugin_extra,
-				// 					id,
-				// 					goods_activity,
-				// 					goods_marketing_award,
-				// 					goods_marketing,
-				// 					express,
-				// 					price,
-				// 					sales,
-				// 					level_show,
-				// 					is_sales,
-				// 					unit,
-				// 					extra_quick_share,
-				// 					price_max,
-				// 					price_min,
-				// 					price_member_max,
-				// 					price_member_min,
-				// 					original_price,
-				// 					subtitle,
-				// 					is_negotiable,
-				// 					app_share_title,
-				// 					app_share_pic,
-				// 					type,
-				// 					favorite,
-				// 					goods_coupon_center,
-				// 					guarantee_title,
-				// 					guarantee_pic,
-				// 					param_content,
-				// 					param_name,
-				// 					attr_groups,
-				// 					goods_num,
-				// 					good_stock,
-				// 					min_number,
-				// 					limit_buy,
-				// 					sell_time,
-				// 					template_message_list,
-				// 					is_finish_sell
-				// 				} = response.data.goods;
-				// 				this.app_share_pic = app_share_pic;
-				// 				this.app_share_title = app_share_title;
-				// 				this.goods = response.data.goods;
-				// 				this.services = services;
-				// 				this.detail = detail;
-				// 				this.goodsId = id;
-				// 				this.flash_sale = plugin_extra.flash_sale;
-				// 				this.composition = plugin_extra.composition;
-				// 				this.goods_marketing_award = goods_marketing_award;
-				// 				this.goods_marketing = goods_marketing;
-				// 				this.express = express;
-				// 				this.price = price;
-				// 				this.level_show = level_show;
-				// 				this.sales = sales;
-				// 				this.unit = unit;
-				// 				this.is_sales = is_sales;
-				// 				this.price_max = price_max;
-				// 				this.price_min = price_min;
-				// 				this.price_member_max = price_member_max;
-				// 				this.price_member_min = price_member_min;
-				// 				this.original_price = original_price;
-				// 				this.subtitle = subtitle;
-				// 				this.is_negotiable = is_negotiable;
-				// 				this.extra_quick_share = extra_quick_share;
-				// 				this.goodsType = type;
-				// 				this.favorite = favorite;
-				// 				this.goods_coupon_center = goods_coupon_center;
-				// 				this.guarantee_title = guarantee_title;
-				// 				this.param_content = param_content;
-				// 				this.guarantee_pic = guarantee_pic;
-				// 				this.attr_groups = attr_groups;
-				// 				this.param_name = param_name;
-				// 				this.goods_num = goods_num;
-				// 				this.good_stock = good_stock;
-				// 				this.min_number = min_number;
-				// 				this.limit_buy = limit_buy;
-				// 				this.sell_time = sell_time;
-				// 				this.template_message_list = template_message_list;
-				// 				this.is_finish_sell = is_finish_sell;
-				// 				if (goods_activity) {
-				// 					this.full_reduce = goods_activity.full_reduce;
-				// 				}
-				// 				if (vip_card_appoint.discount || vip_card_appoint.discount === '0.00') {
-				// 					this.is_vip = true;
-				// 					this.discount = vip_card_appoint.discount;
-				// 				}
-				// 				this.is_vip_card_user = vip_card_appoint.is_vip_card_user;
-				// 				this.loadRecommend();
-				// 				// #ifdef H5
-				// 				this.hShareAppMessage();
-				// 				// #endif
-				// 				resolve();
-				// 			} else {
-				// 				uni.showToast({
-				// 					title: response.msg,
-				// 					icon: 'none'
-				// 				});
-				// 				reject();
-				// 			}
-				// 		})
-				// 		.catch(() => {
-				// 			reject();
-				// 			this.$hideLoading();
-				// 		});
-				// });
-
 			},
 			onAttr(data) {
 				this.selectAttr = data;

+ 0 - 5
src/pages/coupon/index/index.vue

xqd
@@ -5,11 +5,6 @@
         <view v-else class="list">
 	        <view @click="toDetail(item.id)" v-for="item in list" :key="item.id">
 	            <view class="list-item">
-					<!-- <image src="https://shop.9026.com/web/statics/img/mall/coupon/img-coupon-bg-0.png" v-if="activeTab == 1"></image>
-					<image src="https://shop.9026.com/web/statics/img/mall/coupon/img-coupon-bg-1.png" v-else></image>
-	                <image class="status" src="https://shop.9026.com/web/statics/img/mall/coupon/img-coupon-status-icon-1.png" v-if="activeTab == 2"></image>
-	                <image class="status" src="https://shop.9026.com/web/statics/img/mall/coupon/img-coupon-status-icon-2.png" v-if="activeTab == 3"></image> -->
-					
 					<image src="https://t17.9026.com/web/statics/image/index/img-coupon-bg-0.png" v-if="activeTab == 1"></image>
 					<image src="https://t17.9026.com/web/statics/image/index/img-coupon-bg-0.png" v-else></image>
 					<image class="status" src="https://shop.9026.com/web/statics/img/mall/coupon/img-coupon-status-icon-1.png" v-if="activeTab == 2"></image>

+ 310 - 330
src/pages/coupon/list/list.vue

xqd
@@ -1,355 +1,335 @@
 <template>
-    <app-layout>
-        <view class="page">
-            <view class="coupon-item" v-for="item in list" :key="item.id">
-                <!-- <image class="coupon-bg" :src="couponImg[item.is_receive == '0' ? 'coupon_enabled' : 'coupon_disabled']" ></image> -->
-				<image class="coupon-bg" src="https://t17.9026.com/web/statics/image/index/img-coupon-bg-0.png" ></image>
-                <view class="coupon-left dir-left-nowrap" @click="toDetail(item.id)">
-                    <view class="coupon-price t-omit box-grow-0">
-                        <template v-if="item.type == 2">
-                            <text>{{item.sub_price | keepNumbers}}</text>
-                        </template>
-                        <template v-else>
-                            <text>{{item.discount | keepNumbers}}</text>
+	<app-layout>
+		<view class="page">
+			<view class="list">
+				<view v-for="item in list" :key="item.id">
+					<view class="item">
+						<!-- <image src="https://t17.9026.com/web/statics/image/index/img-coupon-bg-0.png" ></image> -->
+						<view class="list-item">
+							<view class="item-left dir-top-nowrap main-center">
+								<view class="coupon-price t-omit" v-if="item.type == 2">
+									¥{{item.sub_price | keepNumbers}}</view>
+								<view class="coupon-price t-omit" v-else>{{item.discount | keepNumbers}}折</view>
+								<view style="font-size: 10px" class="t-omit" v-if="item.coupon_min_price > 0">
+									满{{item.coupon_min_price | keepNumbers}}可用</view>
+								<view style="font-size: 10px" v-else>无门槛使用</view>
+								<view style="font-size: 10px" v-if="item.discount_limit">
+									优惠上限:¥{{item.discount_limit | keepNumbers}}</view>
+							</view>
+							<view class="item-right">
+								<view class="item-name t-omit hjx-tc-222 hjx-tw-600">{{item.name}}</view>
+								<view v-if="item.appoint_type == 3">全场通用</view>
+								<view v-else-if="item.appoint_type == 4">仅限当面付活动使用</view>
+								<view v-else-if="item.appoint_type == 5">仅限礼品卡使用</view>
+								<view v-else>限品类</view>
+								<!-- <view class="t-omit t-small-color time-area hjx-tc-B19D60">{{item.start_time.split(' ')[0]}} - {{item.end_time.split(' ')[0]}}</view> -->
+							</view>
+							<view class="item-right-btn cross-center" v-if="item.is_receive == `0`">
+								<view class="btn" @click="receive(item)">立即领取</view>
+							</view>
+							<view class="item-right-btn cross-center" v-else>
+								<view class="btn btn1" @click="receive(item)">已领取</view>
+							</view>
+						</view>
+						<view class="coupon-info" @click="toDetail(item.id)">
+							<view v-if="item.expire_type == `1`">领取后{{item.expire_day}}天过期</view>
+							<view v-if="item.expire_type == `2`">有效日期: {{item.begin_time}} - {{item.end_time}}</view>
+							<view class="t-omit" v-if="item.appoint_type == `3`">适用范围:全场通用</view>
+							<view class="t-omit" v-else-if="item.appoint_type == `4`">适用范围:仅限当面付活动使用</view>
+							<view class="t-omit" v-else-if="item.appoint_type == `5`">适用范围:仅限礼品卡使用</view>
+							<view class="t-omit" v-else-if="item.appoint_type == `2`">
+						  <text>适用商品:</text>
+								<text v-for="(goods,index) in item.goods" :key="goods.id">
+									<text>{{index != 0 ? '、' : ''}}{{goods.name}}</text>
+								</text>
+						 </view>
+							<view class="t-omit" v-else-if="item.appoint_type == `1`">
+								<text>适用分类:</text>
+								<text v-for="(cat,index) in item.cat" :key="cat.id">
+									<text>{{index != 0 ? '、' : ''}}{{cat.name}}</text>
+								</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
 
-                            折
-                        </template>
-                    </view>
-                    <view class="box-grow-1 dir-top-nowrap main-center coupon-content">
-                        <view class="t-omit" style="width:auto;display:block;">{{item.name}}</view>
-                        <view class="min_price t-omit" v-if="item.min_price > 0">满{{item.min_price | keepNumbers}}可用</view>
-                        <view v-else>无门槛使用</view>
-                        <view v-if="item.discount_limit">优惠上限:¥{{item.discount_limit | keepNumbers}}</view>
-                    </view>
-                </view>
-                <view class="use-btn" @click="receive(item)" v-if="item.is_receive == `0`">
-                    <view class="use" style="text-align: center">立即领取</view>
-                </view>
-                <button class="use use-btn" style="color:#b4b4b4;" v-else-if="item.is_receive == `1`">已领取</button>
-                <view class="coupon-info" @click="toDetail(item.id)">
-                    <view v-if="item.expire_type == `1`">领取后{{item.expire_day}}天过期</view>
-                    <view v-if="item.expire_type == `2`">有效日期: {{item.begin_time}} - {{item.end_time}}</view>
-                    <view class="t-omit" v-if="item.appoint_type == `3`">适用范围:全场通用</view>
-                    <view class="t-omit" v-else-if="item.appoint_type == `4`">适用范围:仅限当面付活动使用</view>
-                    <view class="t-omit" v-else-if="item.appoint_type == `5`">适用范围:仅限礼品卡使用</view>
-                    <view class="t-omit" v-else-if="item.appoint_type == `2`">
-                        <text>适用商品:</text>
-                        <text v-for="(goods,index) in item.goods" :key="goods.id">
-                            <text>{{index != 0 ? '、' : ''}}{{goods.name}}</text>
-                        </text>
-                    </view>
-                    <view class="t-omit" v-else-if="item.appoint_type == `1`">
-                        <text>适用分类:</text>
-                        <text v-for="(cat,index) in item.cat" :key="cat.id">
-                            <text>{{index != 0 ? '、' : ''}}{{cat.name}}</text>
-                        </text>
-                    </view>
-                </view>
-            </view>
-			
 			<app-no-goods v-if="list.length === 0" :title="'暂无可领取优惠券'" background="#f7f7f7"></app-no-goods>
-        </view>
-    </app-layout>
+		</view>
+	</app-layout>
 </template>
 
 <script>
-import {mapGetters, mapState} from "vuex";
-import appNoGoods from '@/components/page-component/app-no-goods/app-no-goods.vue';
-    export default {
-        data() {
-            return {
-                list: [
-					   {
-					      "app_share_pic": "https://swdzshopv4.oss-cn-chengdu.aliyuncs.com/uploads/mall10000/20211129/12b320e83a7b82333ed46041acd3a4d2.jpg",
-					      "app_share_title": "分享",
-					      "appoint_type": "3",
-					      "begin_time": "",
-					      "can_receive_count": "-1",
-					      "cat": [],
-					      "couponGoods": [],
-					      "created_at": "2021-11-30 15:31:16",
-					      "deleted_at": "0000-00-00 00:00:00",
-					      "desc": "",
-					      "discount": "10.0",
-					      "discount_limit": null,
-					      "end_time": "",
-					      "expire_day": "1",
-					      "expire_type": "1",
-					      "goods": [],
-					      "id": "3",
-					      "is_delete": "0",
-					      "is_member": "0",
-					      "is_receive": "0",
-					      "mall_id": "10000",
-					      "min_price": "20000.00",
-					      "name": "满减",
-					      "page_url": "/pages/goods/list?coupon_id=3",
-					      "pic_url": "10",
-					      "rule": "",
-					      "share_type": 4,
-					      "sort": "3",
-					      "sub_price": "200.00",
-					      "total_count": "0",
-					      "type": "2",
-					      "updated_at": "2021-11-30 19:55:45",
-					      "use_obtain": "1"
-					    },
-					    {
-					      "app_share_pic": "",
-					      "app_share_title": "",
-					      "appoint_type": "3",
-					      "begin_time": "",
-					      "can_receive_count": "-1",
-					      "cat": [],
-					      "couponGoods": [],
-					      "created_at": "2021-11-30 14:22:26",
-					      "deleted_at": "0000-00-00 00:00:00",
-					      "desc": "",
-					      "discount": "10.0",
-					      "discount_limit": null,
-					      "end_time": "",
-					      "expire_day": "1",
-					      "expire_type": "1",
-					      "goods": [],
-					      "id": "1",
-					      "is_delete": "0",
-					      "is_member": "0",
-					      "is_receive": "0",
-					      "mall_id": "10000",
-					      "min_price": "131.00",
-					      "name": "优惠卷",
-					      "page_url": "/pages/goods/list?coupon_id=1",
-					      "pic_url": "10",
-					      "rule": "",
-					      "share_type": 4,
-					      "sort": "100",
-					      "sub_price": "11.00",
-					      "total_count": "-1",
-					      "type": "2",
-					      "updated_at": "2021-12-06 16:00:04",
-					      "use_obtain": "0"
-					    }
-				],
-                loading: false,
-                page: 2,
-            }
-        },
-		components:{
+	import {
+		mapGetters,
+		mapState
+	} from "vuex";
+	import appNoGoods from '@/components/page-component/app-no-goods/app-no-goods.vue';
+	export default {
+		data() {
+			return {
+				list: [],
+				loading: false,
+				page: 2,
+			}
+		},
+		components: {
 			appNoGoods
 		},
-        computed: {
-            ...mapState({
-                couponImg: state => state.mallConfig.__wxapp_img.coupon,
-            }),
-            ...mapGetters({
-                userInfo: 'user/info',
-            })
-        },
-        methods: {
-            getList() {
-                let that = this;
-                that.$request({
-                    url: that.$api.coupon.list,
-                    method: 'get',
-                }).then(response => {
-                    uni.hideLoading();
-                    that.$hideLoading();
-                    if (response.code === 0) {
-                        that.list = response.data.list;
-                    } else {
-                        uni.showToast({
-                            title: response.msg,
-                            icon: 'none',
-                            duration: 1000
-                        });
-                    }
-                }).catch(() => {
-                    uni.hideLoading();
-                    that.$hideLoading();
-                });
-            },
-            getMore() {
-                let that = this;
-                uni.showLoading({
-                    title: '加载中...'
-                });
-                that.$request({
-                    url: that.$api.coupon.list,
-                    data: {
-                        page: that.page
-                    },
-                }).then(e => {
-                    uni.hideLoading();
-                    if (e.code == 0) {
-                        if (e.data.list.length > 0) {
-                            that.list = that.list.concat(e.data.list);
-                            that.page++;
-                        }
-                    } else {
-                        uni.showToast({
-                            title: e.msg,
-                            icon: 'none',
-                            duration: 1000
-                        });
-                    }
-                }).catch(e => {
-                    uni.hideLoading();
-                });
-            },
-            toDetail(id) {
-                uni.navigateTo({
-                    url: '/pages/coupon/details/details?id=' + id
-                });
-            },
-            receive(coupon) {
+		computed: {
+			...mapState({
+				couponImg: state => state.mallConfig.__wxapp_img.coupon,
+			}),
+			...mapGetters({
+				userInfo: 'user/info',
+			})
+		},
+		methods: {
+			getList() {
+				let that = this;
+				that.$request({
+					url: that.$api.coupon.list,
+					method: 'get',
+				}).then(response => {
+					uni.hideLoading();
+					that.$hideLoading();
+					if (response.code === 0) {
+						that.list = response.data.list;
+					} else {
+						uni.showToast({
+							title: response.msg,
+							icon: 'none',
+							duration: 1000
+						});
+					}
+				}).catch(() => {
+					uni.hideLoading();
+					that.$hideLoading();
+				});
+			},
+			getMore() {
+				let that = this;
+				uni.showLoading({
+					title: '加载中...'
+				});
+				that.$request({
+					url: that.$api.coupon.list,
+					data: {
+						page: that.page
+					},
+				}).then(e => {
+					uni.hideLoading();
+					if (e.code == 0) {
+						if (e.data.list.length > 0) {
+							that.list = that.list.concat(e.data.list);
+							that.page++;
+						}
+					} else {
+						uni.showToast({
+							title: e.msg,
+							icon: 'none',
+							duration: 1000
+						});
+					}
+				}).catch(e => {
+					uni.hideLoading();
+				});
+			},
+			toDetail(id) {
+				uni.navigateTo({
+					url: '/pages/coupon/details/details?id=' + id
+				});
+			},
+			receive(coupon) {
 
-                let that = this;
-                if(that.loading) {
-                    return false
-                }
-                that.loading = true;
-                uni.showLoading({
-                    title: '领取中...'
-                });
-                that.$request({
-                    url: that.$api.coupon.receive,
-                    data: {
-                        coupon_id: coupon.id
-                    },
-                }).then(response => {
-                    that.loading = false;
-                    uni.hideLoading();
-                    if (response.code === 0) {
-                        setTimeout(function (row) {
-                            that.$store.dispatch('page/actionSetCoupon', {
-                                list: [Object.assign(coupon, response.data)],
-                                type: 'receive'
-                            });
-                            that.getList();
-                        }, 200)
-                    } else {
-                        uni.showToast({
-                            title: response.msg,
-                            icon: 'none',
-                            duration: 1000
-                        });
-                        that.getList();
-                    }
-                }).catch(() => {
-                    uni.hideLoading();
-                    that.$event.on(that.$const.EVENT_USER_LOGIN).then(() => {
-                        that.receive(coupon);
-                    });
-                });
-            },
-        },
-        onLoad() { this.$commonLoad.onload();
+				let that = this;
+				if (that.loading) {
+					return false
+				}
+				that.loading = true;
+				uni.showLoading({
+					title: '领取中...'
+				});
+				that.$request({
+					url: that.$api.coupon.receive,
+					data: {
+						coupon_id: coupon.id
+					},
+				}).then(response => {
+					that.loading = false;
+					uni.hideLoading();
+					if (response.code === 0) {
+						setTimeout(function(row) {
+							that.$store.dispatch('page/actionSetCoupon', {
+								list: [Object.assign(coupon, response.data)],
+								type: 'receive'
+							});
+							that.getList();
+						}, 200)
+					} else {
+						uni.showToast({
+							title: response.msg,
+							icon: 'none',
+							duration: 1000
+						});
+						that.getList();
+					}
+				}).catch(() => {
+					uni.hideLoading();
+					that.$event.on(that.$const.EVENT_USER_LOGIN).then(() => {
+						that.receive(coupon);
+					});
+				});
+			},
+		},
+		onLoad() {
+			this.$commonLoad.onload();
 
-        },
-        onShow() {
-            this.$showLoading({
-                text: '加载中...'
-            });
-            this.getList();
-        },
-        filters: {
-            keepNumbers(n) {
-                return Number(n);
-            }
-        },
-        onReachBottom() {
-            this.getMore();
-        },
-    }
+		},
+		onShow() {
+			this.$showLoading({
+			    text: '加载中...'
+			});
+			this.getList();
+		},
+		filters: {
+			keepNumbers(n) {
+				return Number(n);
+			}
+		},
+		onReachBottom() {
+			this.getMore();
+		},
+	}
 </script>
 
 <style scoped lang="scss">
-    .page {
-        padding: #{20rpx} #{25rpx};
-        width: 100%;
-    }
+	.page {
+		padding: #{20rpx} #{25rpx};
+		width: 100%;
+	}
 
-    .coupon-item {
-        height: #{275rpx};
-        position: relative;
-        margin-bottom: #{20rpx};
-    }
+	
 
-    .coupon-bg {
-        height: #{275rpx};
-        width: 100%;
-    }
+	.coupon-info {
+		margin: 0 auto;
+		width: 656rpx;
+		height: #{115rpx};
+		border-top: 1px solid #EAEAEA;
+		padding: #{20rpx} #{25rpx};
+		font-size: #{22rpx};
+		color: #777;
+	}
 
-    .coupon-left {
-        position: absolute;
-        left: #{20rpx};
-        top: #{30rpx};
-        color: #282828;
-        width: 70%;
-    }
 
-    .coupon-left .coupon-price {
-        float: left;
-        max-width: 55%;
-        width: auto;
-        height: #{92rpx};
-        line-height: #{92rpx};
-        margin-right: #{20rpx};
-    }
+	.list {
+		background-color: #f7f7f7;
+	}
 
-    .coupon-left .min_price {
-        width: auto;
-    }
+	.item {
+		height: auto;
+		width: 100%;
+		background-image: url(https://t17.9026.com/web/statics/image/index/img-coupon-bg-0.png);
+		background-size: 100% 100%;
+		margin-bottom: 20rpx;
+	}
 
-    .coupon-price text {
-        font-size: #{60rpx};
-    }
+	.item image {
+		width: 100%;
+		height: 100%;
+	}
 
-    .use {
-        height: #{56rpx};
-        line-height: #{58rpx};
-        background-color: #fff;
-        width: #{160rpx};
-        border-radius: #{28rpx};
-        font-size: #{24rpx};
-        color: #caa76e;
-    }
+	.list-item {
+		height: #{181rpx};
+		width: 100%;
+		position: relative;
+	}
 
-    .use-btn {
-        height: #{55rpx};
-        width: #{160rpx};
-        border-radius: #{27.5rpx};
-        position: absolute;
-        right: #{20rpx};
-        border: 0;
-        top: #{48rpx};
-    }
+	.item-left {
+		position: absolute;
+		left: 0;
+		top: 0;
+		height: 100%;
+		width: #{190rpx};
+		text-align: center;
+		font-size: #{24rpx};
+		color: #B19D60;
+		padding-top: #{8rpx};
+	}
 
-    .coupon-info {
-        position: absolute;
-        top: #{160rpx};
-        left: 0;
-        right: 0;
-        height: #{115rpx};
-        background-color: #fff;
-        border: #{2rpx} solid #cfcfcf;
-        border-top: 0;
-        padding: #{20rpx} #{25rpx};
-        font-size: #{26rpx};
-        color: #666;
-        border-bottom-left-radius: #{15rpx};
-        border-bottom-right-radius: #{15rpx};
-    }
+	.coupon-price {
+		font-size: #{36rpx};
+		padding-bottom: #{16rpx};
+		font-weight: 600;
+	}
 
-    .discount_limit {
-        width: #{286rpx};
-        text-align: center;
-        color: #ffffff;
-    }
+	.item-right {
+		position: absolute;
+		left: #{220rpx};
+		top: #{30rpx};
+		width: 45%;
+		color: #666666;
+		font-size: #{24rpx};
+	}
 
-    .coupon-content {
-        font-size: $uni-font-size-general-one;
-        line-height: 1.1;
-    }
-	
+	.item-name {
+		font-size: #{32rpx};
+	}
+
+	.item-right view {
+		margin-bottom: #{4rpx};
+	}
+
+	.item-right-btn {
+		position: absolute;
+		right: 0;
+		top: 0;
+		width: 20%;
+		height: 100%;
+
+		.btn {
+			width: 118rpx;
+			height: 52rpx;
+			border: 1rpx solid #B19D60;
+			border-radius: 26rpx;
+			font-size: 22rpx;
+			font-weight: 500;
+			color: #B19D60;
+			text-align: center;
+			line-height: 52rpx;
+			box-sizing: border-box;
+		}
+		
+		.btn1{
+			border: 1rpx solid #b1ac9d;
+			color: #b1ac9d;
+		}
+	}
+
+	.coupon-footer {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		width: 100%;
+		height: #{100rpx};
+		line-height: #{100rpx};
+		text-align: center;
+		background-color: #fff;
+		z-index: 2;
+	}
+
+	.coupon-footer.iphone_x {
+		height: #{150rpx};
+		padding-bottom: #{50rpx};
+	}
+
+	.list-item .status {
+		position: absolute;
+		top: 0;
+		right: 0;
+		height: #{98rpx};
+		width: #{140rpx};
+		z-index: 2;
+	}
 </style>

+ 6 - 5
src/pages/goods/goods.vue

xqd xqd xqd xqd
@@ -58,6 +58,7 @@
                 :guarantee-pic="guarantee_pic"
                 :param_content="param_content"
                 :param_name="param_name"
+				:param_style="2"
                 :services="services"
                 :attr-groups="attr_groups"
                 :goods-stock="goods_num"
@@ -95,13 +96,13 @@
 				</navigator>
             </view>
 			<view class="hxj-line"></view>			
-			<uTabsSwiper :list="[{tab:'商品评价'},{tab:'商品详情'}]" :current="tabsCurrent" name="tab" :activeColor="getTheme.color" :barHeight="0" :isScroll="false" @change="tabsChange" line></uTabsSwiper>
+			<uTabsSwiper :list="[{tab:'商品详情'},{tab:'商品评价'}]" :current="tabsCurrent" name="tab" :activeColor="getTheme.color" :barHeight="0" :isScroll="false" @change="tabsChange" line></uTabsSwiper>
 			<!-- 评价 -->
-			<view v-show="tabsCurrent===0">
+			<view v-show="tabsCurrent===1">
 				<bd-comments :goods-id="goodsId" ></bd-comments>
 			</view>
             <!--商品详情-->
-			<view v-show="tabsCurrent===1">
+			<view v-show="tabsCurrent===0">
 				<bd-detail :detail="detail" ></bd-detail>
 			</view>
             <!--相关推荐-->
@@ -133,7 +134,7 @@
                             <bd-service :name="name" :url="sendPath"></bd-service>
                         </template>
                         <view class="bd-back dir-top-nowrap main-center cross-center box-grow-0" @click="setFavorite">
-                            <image class="bd-icon" :src="favorite ? 'https://shop.9026.com/web/statics/image/mall/static/icon/icon-favorite-active.png' : 'https://shop.9026.com/web/statics/image/mall/static/icon/icon-favorite.png'"></image>
+                            <image class="bd-icon" :src="favorite ? 'https://t17.9026.com/web/statics/image/index/icon-favorite-active.png' : 'https://t17.9026.com/web/statics/image/index/icon-favorite.png'"></image>
                             <text class="bd-text">收藏</text>
                         </view>
                         <template v-if="is_negotiable !== 1">
@@ -269,7 +270,7 @@
         },
         data() {
             return {
-				tabsCurrent:1,
+				tabsCurrent:0,
                 showClose: false,
                 is_open: 0,
                 goods: null,

+ 3 - 0
src/pages/goods/list.vue

xqd xqd
@@ -49,12 +49,14 @@
                 noGoods: false,
                 loading: false,
                 sign: '',
+				mch_id:'',
             }
         },
 	    onLoad(options) { this.$commonLoad.onload(options);
             if(options.cat_id > 0) {
                 this.cat_id = options.cat_id;
             }
+			'mch_id' in options ?this.mch_id=options.mch_id:''
             if(options.coupon_id > 0) {
                 this.coupon_id = options.coupon_id
             }
@@ -122,6 +124,7 @@
                         keyword: '',
                         coupon_id: this.coupon_id,
                         sign: this.sign,
+						mch_id:this.mch_id
 	                }
                 });
                 if (res.code === 0) {

+ 1 - 1
src/pages/index/binding/bindingSale.vue

xqd
@@ -13,7 +13,7 @@
 					<!-- <text class="pla">更多</text><image class="arrow-right" src="https://t17.9026.com/web/statics/image/index/arrow-right-gray.png" mode=""></image> -->
 					</view>
 			</view>
-			<view class="main-between cross-center item" v-for="(item,index) in dataList" :key="index" @click="selectSale(index,item.id,item.salesperson.name)">
+			<view class="main-between cross-center item" v-for="(item,index) in dataList" :key="index" @click="selectSale(index,item.sale_id,item.salesperson.name)">
 				<view class="main-left">
 					<image style="width: 79rpx;height: 79rpx;border-radius: 50%;margin-right: 24rpx;" :src="item.salesperson.pic_url" mode=""></image>
 					<view>

+ 8 - 6
src/pages/index/components/scroll-list.vue

xqd xqd xqd xqd
@@ -2,7 +2,7 @@
 	<view>
 		<scroll-view class="scroll_list" :style="{'background': background}" scroll-x="true">
 			<view class="main-left" style="padding-left: 40rpx;">
-				<view v-for="(item,index) in list" :key="index" @click="goPage(item.link)">
+				<view class="item" v-for="(item,index) in list" :key="index" @click="goPage(item.link)">
 					<view class="box" :style="{'width':itemWidth,'height':itemHeight}">
 						<image class="image-bg" :src="item.image"></image>
 						<view class="text t-omit">{{item.title}}</view>
@@ -81,14 +81,16 @@
 <style lang="scss" scoped>
 	.scroll_list {
 		padding: 15rpx 0 28rpx;
-
+		
+		.item{
+			height: 330rpx;
+		}
 		.box {
 			border-radius: 20rpx;
 			overflow: hidden;
 			position: relative;
 			z-index: 2;
 			margin-right: 20rpx;
-
 			.image-bg {
 				position: absolute;
 				z-index: -1;
@@ -99,7 +101,7 @@
 				width: 100%;
 				height: 100%;
 			}
-
+ 
 			.text {
 				width: 115rpx;
 				font-size: 28rpx;
@@ -120,9 +122,9 @@
 			.tag {
 				background-color: rgba(238, 235, 222, 1);
 				color: rgb(167, 133, 79);
-				border-radius: 0 50% 50% 50%;
+				border-radius: 0 26rpx 26rpx 26rpx;
 				font-size: 24rpx;
-				padding: 10rpx 20rpx;
+				padding: 4rpx 20rpx;
 			}
 		}
 	}

+ 6 - 7
src/pages/index/hxj_index_component.vue

xqd xqd xqd xqd xqd xqd xqd
@@ -25,7 +25,7 @@
 		  v-bind:name="homePages[1].data.name"
 		  v-bind:textColor="homePages[1].data.textColor"
 		></u-announcement>
-		<view class="link">
+		<view class="link" style="margin-top: 30rpx;">
 			<view>
 				<view class="title">人居 · 荟享家<image class="hxjImg"
 						src="https://t17.9026.com/web/statics/image/index/HUIXIANGJIA.png" mode=""></image>
@@ -34,7 +34,7 @@
 		</view>
 		<app-scroll-list :list="list"></app-scroll-list>
 		<view class="link">
-			<view class="title1">本期家点灵感</view>
+			<view class="title1" style="margin-left: 20rpx;">本期家点灵感</view>
 			<image class="tyx" src="https://t17.9026.com/web/statics/image/index/tyx.png" mode=""></image>
 			<image class="d6" src="https://t17.9026.com/web/statics/image/index/6d.png" mode=""></image>
 			<view class="subtitle">臻选整装 · 安全无甲醛 · 7天入住</view>
@@ -114,7 +114,7 @@
 						<image class="borradu_20"
 							:src="item.icon_url"
 							mode=""></image>
-						<view class="title_2">{{item.name}}</view>
+						<view class="title_2" style="margin-top: 35rpx;">{{item.name}}</view>
 						<view class="desc_2">独到品味的代表备份</view>
 					</view>
 				</view>
@@ -140,7 +140,7 @@
 		</view>
 
 		<view class="group_list">
-			<swiper style="height: 606rpx;" :indicator-dots="false" :autoplay="false" :interval="3000" :duration="1000"
+			<swiper style="height: 556rpx;" :indicator-dots="false" :autoplay="false" :interval="3000" :duration="1000"
 				previous-margin="25rpx" next-margin="25rpx" :current="ptCurrent"  @change="ptChange">
 				<swiper-item class="" v-for="(item,index) in homePages[9].data.list" :key="index"
 					@click="goPage(item.page_url)">
@@ -172,7 +172,7 @@
 			<view class="title1" style="margin-right: 61rpx;color: #A7A7A7;">精选类别</view>
 			<view class="title1" style="margin-right: 61rpx;color: #A7A7A7;">精选类别</view>
 			<view class="title1" style="margin-right: 61rpx;color: #A7A7A7;">精选类别</view> -->
-			<view class="title1" style="margin-right: 61rpx;" :style="{'color':bottom_goods_index===index?'':'#A7A7A7'}" v-for="(item,index) in homePages[11].data.catList" :key="index" @click="selectCat(index)">{{item.menuName}}</view>
+			<view class="title1" style="margin-right: 43rpx;margin-left: 18rpx;" :style="{'color':bottom_goods_index===index?'':'#A7A7A7'}" v-for="(item,index) in homePages[11].data.catList" :key="index" @click="selectCat(index)">{{item.menuName}}</view>
 			<image class="tyx" src="https://t17.9026.com/web/statics/image/index/tyx.png" mode=""></image>
 		</view>
 		<view class="hxzy">
@@ -190,7 +190,7 @@
 			</view>
 			<view class="dir-left-wrap bottom">
 				<view class="item" v-for="(item,index) in homePages[11].data.catList[bottom_goods_index].goodsList" :key="index"
-					@click="goPage(`/pages/goods/goods?id=${item.id}`)">
+					@click="goPage(item.page_url)">
 					<view>
 						<image class="cover" :src="item.cover_pic"
 							mode=""></image>
@@ -353,7 +353,6 @@
 				this.bottom_goods_index=index
 			},
 			swiperChange(e) {
-				console.log(e.detail.current)
 				this.swiperKey = e.detail.current
 			},
 			goPage(url) {

+ 6 - 3
src/pages/index/index.scss

xqd xqd xqd xqd
@@ -38,7 +38,7 @@
 		height: 37rpx;
 		position: absolute;
 		top: 26rpx;
-		left: 24rpx;
+		left: 40rpx;
 		z-index: 1;
 	}
 	.d6 {
@@ -54,7 +54,7 @@
 		font-size: 24rpx;
 		font-weight: 400;
 		color: #a7a7a7;
-		line-height: 34rpx;
+		line-height: 48rpx;
 	}
 	.coupon_1 {
 		width: 15rpx;
@@ -252,7 +252,7 @@
 		margin-right: 25rpx;
 		position: relative;
 		background-image: url(https://t17.9026.com/web/statics/image/index/coupon_masking.png);
-		background-size: 310rpx 200rpx;
+		background-size: 320rpx 200rpx;
 		.Wb {
 			display: flex;
 			flex-flow: column;
@@ -275,6 +275,9 @@
 			}
 		}
 	}
+	&>.item:last-child{
+		margin-right: 0;
+	}
 }
 
 .hxdz {

+ 1 - 1
src/pages/index/index.vue

xqd
@@ -19,7 +19,7 @@
                          :link="diy__app_nav_bar.link"
                          :xStyle="5"
                          :hasMallSetting="diy__app_nav_bar.hasMallSetting"
-                         :color="diy__app_nav_bar.color"
+                         :color="sss>=0.7?'#fff':'#ebe4e1'"
                          :position="diy__app_nav_bar.position"
                          :placeholder="diy__app_nav_bar.placeholder"
                          :placeholderColor="diy__app_nav_bar.placeholderColor"

+ 185 - 4
src/pages/order-submit/app-coupon-pick.vue

xqd xqd xqd xqd xqd xqd
@@ -31,7 +31,7 @@
                         <view style="color: #999999;">暂无可用优惠券</view>
                     </view>
                     <template v-else>
-                        <view v-for="(item,index) in list"
+                        <!-- <view v-for="(item,index) in list"
                               :key="index"
                               class="item">
                             <view class="dir-left-nowrap cross-center top"
@@ -67,7 +67,38 @@
                                 <view style="margin-bottom: 12rpx;">有效日期:{{item.start_time}}-{{item.end_time}}</view>
                                 <view>适用范围:{{item.coupon_data.appoint_type == 3 ? '全场通用' : item.coupon_data.appoint_type == 5?'礼品卡' : '限品类'}}</view>
                             </view>
-                        </view>
+                        </view> -->
+						<view  v-for="(item,index) in list" :key="index">
+						    <view class="list-item">
+								<image src="https://t17.9026.com/web/statics/image/index/img-coupon-bg-0.png" ></image>
+						        <view class="item-left dir-top-nowrap main-center">
+						            <view class="coupon-price t-omit" v-if="item.type == 2">¥{{item.sub_price}}</view>
+						            <view class="coupon-price t-omit" v-else>{{item.discount}}折</view>
+						            <view style="font-size: 10px" class="t-omit" v-if="item.coupon_min_price > 0">满{{item.coupon_min_price}}可用</view>
+						            <view style="font-size: 10px" v-else>无门槛使用</view>
+						            <view style="font-size: 10px" v-if="item.discount_limit">优惠上限:¥{{item.discount_limit}}</view>
+						        </view>
+						        <view class="item-right">
+						            <view class="item-name t-omit hjx-tc-222 hjx-tw-600" style="margin-bottom: 20rpx;">{{item.coupon_data.name}}</view>
+									<view v-if="item.coupon_data.appoint_type == 3">全场通用</view>
+									<view v-else-if="item.coupon_data.appoint_type == 4">仅限当面付活动使用</view>
+									<view v-else-if="item.coupon_data.appoint_type == 5">仅限礼品卡使用</view>
+									<view v-else>限品类</view>
+						            <view class="t-omit t-small-color time-area hjx-tc-B19D60" style="margin-top: 5rpx;">{{item.start_time.split(' ')[0]}} - {{item.end_time.split(' ')[0]}}</view>
+						        </view>
+								<view class="item-right-btn cross-center" >
+									<!-- <view class="btn11">领取并使用</view> -->
+									<app-submit-checkbox
+									        :round="true"
+											:value="item.checked"
+									        :theme="theme"
+									        border-color="#999999"
+									        @input="handleCouponChange"
+									        :sign="index">
+									</app-submit-checkbox>
+								</view>
+						    </view>
+						</view>
                     </template>
                 </template>
             </view>
@@ -80,7 +111,7 @@
                         <view style="color: #999999;">暂无不可用优惠券</view>
                     </view>
                     <template v-else>
-                        <view v-for="(item,index) in cantUseList"
+                        <!-- <view v-for="(item,index) in cantUseList"
                               :key="index"
                               class="item">
                             <view class="dir-left-nowrap cross-center top"
@@ -109,7 +140,27 @@
                                 <view style="margin-bottom: 12rpx;">有效日期:{{item.start_time}}-{{item.end_time}}</view>
                                 <view>适用范围:{{item.coupon_data.appoint_type == 3 ? '全场通用' : '限品类'}}</view>
                             </view>
-                        </view>
+                        </view> -->
+						<view  v-for="(item,index) in cantUseList" :key="index">
+						    <view class="list-item no-use" style="background-color: rgba(0,0,0,0.4);">
+								<image src="https://t17.9026.com/web/statics/image/index/img-coupon-bg-0.png" ></image>
+						        <view class="item-left dir-top-nowrap main-center">
+						            <view class="coupon-price t-omit" v-if="item.type == 2">¥{{item.sub_price}}</view>
+						            <view class="coupon-price t-omit" v-else>{{item.discount}}折</view>
+						            <view style="font-size: 10px" class="t-omit" v-if="item.coupon_min_price > 0">满{{item.coupon_min_price}}可用</view>
+						            <view style="font-size: 10px" v-else>无门槛使用</view>
+						            <view style="font-size: 10px" v-if="item.discount_limit">优惠上限:¥{{item.discount_limit}}</view>
+						        </view>
+						        <view class="item-right">
+						            <view class="item-name t-omit hjx-tc-222 hjx-tw-600" style="margin-bottom: 20rpx;">{{item.coupon_data.name}}</view>
+									<view v-if="item.coupon_data.appoint_type == 3">全场通用</view>
+									<view v-else-if="item.coupon_data.appoint_type == 4">仅限当面付活动使用</view>
+									<view v-else-if="item.coupon_data.appoint_type == 5">仅限礼品卡使用</view>
+									<view v-else>限品类</view>
+						            <view class="t-omit t-small-color time-area hjx-tc-B19D60" style="margin-top: 5rpx;">{{item.start_time.split(' ')[0]}} - {{item.end_time.split(' ')[0]}}</view>
+						        </view>
+						    </view>
+						</view>
                     </template>
                 </template>
             </view>
@@ -216,6 +267,8 @@
                         this.list[i].checked = parseInt(index) === parseInt(i);
                     }
                 }
+				
+				console.log('this.list',this.list)
                 const formData = this.$store.state.orderSubmit.formData;
                 formData.list[this.mchIndex].user_coupon_id = data;
                 this.$store.commit('orderSubmit/mutSetFormData', formData);
@@ -328,4 +381,132 @@
             }
         }
     }
+	
+	
+	
+	.list {
+	    padding: #{32rpx} #{35rpx};
+	    background-color: #f7f7f7;
+	}
+	
+	.list-item {
+	    height: #{181rpx};
+	    width: 100%;
+	    position: relative;
+	    margin-bottom: #{20rpx};
+		border-radius: 8rpx;
+		overflow: hidden;
+	}
+	.no-use{
+		opacity: 0.4;
+		background-color: rgba(0,0,0,0.4);
+	}
+	
+	.list-item image {
+	    width: 100%;
+	    height: 100%;
+	}
+	
+	.item-left {
+	    position: absolute;
+	    left: 0;
+	    top: 0;
+	    height:100%;
+	    width: #{190rpx};
+	    text-align: center;
+	    font-size: #{24rpx};
+	    color: #B19D60;
+	    padding-top: #{8rpx};
+	}
+	
+	.coupon-price {
+	    font-size: #{36rpx};
+	    padding-bottom: #{16rpx};
+		font-weight: 600;
+	}
+	
+	.item-right {
+	    position: absolute;
+	    left: #{220rpx};
+	    top: #{30rpx};
+	    width: 45%;
+	    color: #666666;
+	    font-size: #{24rpx};
+	}
+	
+	.item-name {
+	    font-size: #{32rpx};
+	}
+	
+	.item-right view {
+	    margin-bottom: #{4rpx};
+	}
+	.item-right-btn{
+		position: absolute;
+		right: 0;
+		top: 0;
+		width: 24%;
+		height: 100%;
+		.btn11{
+			width: 140rpx;
+			height: 52rpx;
+			border: 1rpx solid #B19D60;
+			border-radius: 26rpx;
+			font-size: 22rpx;
+			font-weight: 500;
+			color: #B19D60;
+			text-align: center;
+			line-height: 52rpx;
+			box-sizing: border-box;
+		}
+	}
+	.coupon-footer {
+	    position: fixed;
+	    bottom: 0;
+	    left: 0;
+	    right: 0;
+	    width: 100%;
+	    height: #{100rpx};
+	    line-height: #{100rpx};
+	    text-align: center;
+	    background-color: #fff;
+	    z-index: 2;
+	}
+	
+	.coupon-footer.iphone_x {
+	    height: #{150rpx};
+	    padding-bottom: #{50rpx};
+	}
+	
+	.list-item .status {
+	    position: absolute;
+	    top: 0;
+	    right: 0;
+	    height: #{98rpx};
+	    width: #{140rpx};
+	    z-index: 2;
+	}
+	
+	.tip {
+		margin-top: 20%;
+	    text-align: center;
+	    color: #686868;
+	}
+	
+	.t-omit {
+	    display: inline-block;
+	    white-space: nowrap;
+	    width: 100%;
+	    overflow: hidden;
+	    text-overflow: ellipsis;
+	}
+	
+	.t-omit-two {
+	    word-break: break-all;
+	    text-overflow: ellipsis;
+	    display: -webkit-box;
+	    -webkit-box-orient: vertical;
+	    -webkit-line-clamp: 2;
+	    overflow: hidden;
+	}
 </style>

+ 170 - 9
src/pages/order-submit/app-submit-goods.vue

xqd xqd xqd xqd
@@ -50,13 +50,38 @@
         </view>
 
         <view v-else class="composition">
-            <view class="composition-item" v-for="(compositionItem, compositionIndex) in newList.composition_list"
+            <view class="" v-for="(compositionItem, compositionIndex) in newList.composition_list"
                   :key="compositionIndex">
-				  <!-- <view>
-					  
-				  </view> -->
-                <view v-for="(goodsItem, goodsIndex) in compositionItem.goods_list" :key="goodsIndex"
-                      class="goods-item" >
+					<view class="main-between info-box">
+						<view class="main-left">
+							<image class="gd-cover" :src="compositionItem.cover_img ? compositionItem.cover_img : compositionItem.goods_list[0].cover_pic" mode=""></image>
+							<view>
+								<view class="title t-omit">{{compositionItem.name}}</view>
+								<view>
+									<text class="price">
+										<text class="dw">¥</text>
+										<text class="rmb">{{compositionItem.total_price.split('.')[0]}}</text>
+										<text class="decimal">.{{compositionItem.total_price.split('.')[1]}}</text>
+									</text>
+									<text class="price-line"><text>¥</text>{{compositionItem.original_price.toFixed(2)}}</text>
+								</view>
+								<view class="main-between">
+									<view class="main-left">
+										<view class="tag">{{compositionItem.tag}}</view>
+										<view class="tag">套装</view>
+										<!-- <view class="tag">满200减10</view> -->
+									</view>
+								</view>
+								<view class="cross-center hxj-compositionItem-show" @click="showGoodsList=!showGoodsList">包含<text class="t-omit" style="width: 150rpx;">{{compositionItem.name}}</text>等{{compositionItem.goods_list.length}}个商品<image style="width: 28rpx;height: 28rpx;" :src="showGoodsList?'https://t17.9026.com/web/statics/image/index/arrow-12.png':'https://t17.9026.com/web/statics/image/index/arrow-11.png'" mode=""></image></view>
+							</view>
+						</view>
+						<view class="cross-bottom">
+							<view class="main-center cross-center receive" @click="receive" v-if="coupons.length>0">
+								领券<image src="https://t17.9026.com/web/statics/image/index/arrow-right-facet-white.png" mode=""></image>
+							</view>
+						</view>
+					</view>
+<!--                <view v-for="(goodsItem, goodsIndex) in compositionItem.goods_list" :key="goodsIndex" class="goods-item" >
                     <view class="dir-left-nowrap" >
                         <view class="box-grow-0" style="position: relative;">
                             <view v-if="goodsItem.address_disabled" class="address-disabled">不在配送范围内</view>
@@ -100,13 +125,26 @@
                         </template>
                         <template v-else>¥0.00</template>
                     </view>
-                </view>
-                <view class="composition-info" :class="[themeTextClass]" :style="{'color': !is_gift ? theme.color : ''}">
+                </view> -->
+				<view   class="hxj-composition-goods" v-show="showGoodsList">
+					<view  class="main-between cross-center hxj-composition-goods-item" v-for="(goodsItem, goodsIndex) in compositionItem.goods_list" :key="goodsIndex">
+						<view class="hxj-composition-goods-name t-omit">{{goodsItem.name}}</view>
+						<view class="main-left hxj-composition-goods-attr-list t-omit">
+							<view v-for="(attrItem,attrIndex) in goodsItem.attr_list"
+							      :key="attrIndex"
+							      class="cross-center hxj-composition-goods-attr-item">
+							    {{attrItem.attr_name}}
+							</view>
+						</view>
+						<view class="hxj-composition-goods-total_price"><text>¥</text>{{goodsItem.total_price}}</view>
+					</view>
+				</view>
+                <!-- <view class="composition-info" :class="[themeTextClass]" :style="{'color': !is_gift ? theme.color : ''}">
                     <view style="margin-bottom: 8rpx;">{{compositionItem.type == 1 ? '固定套餐' : '搭配套餐'}}
                         ¥{{compositionItem.total_price}}
                     </view>
                     <view class="composition-discount">已省 ¥{{compositionItem.composition_price}}</view>
-                </view>
+                </view> -->
             </view>
         </view>
 
@@ -131,6 +169,11 @@
             },
             theme: [String, Object],
         },
+		data(){
+			return{
+				showGoodsList:false,
+			}
+		},
         computed: {
             ...mapState({
                 appImg: state => state.mallConfig.__wxapp_img,
@@ -278,5 +321,123 @@
         .goods-item:last-child {
             border-bottom: none;
         }
+		
+		
+		.hxj-composition-goods{
+			width: 643rpx;
+			height: auto;
+			background: #F8F8F8;
+			border-radius: 6rpx;
+			margin: 0 auto 32rpx;
+			padding: 24rpx 28rpx;
+			.hxj-composition-goods-item{
+				height: 60rpx;
+				.hxj-composition-goods-name{
+					width: 224rpx;
+					font-size: 26rpx;
+					font-weight: 500;
+					color: #222222;
+				}
+				.hxj-composition-goods-attr-list{
+					width: 224rpx;
+					height: 100%;
+					font-size: 24rpx;
+					color: #999999;
+					.hxj-composition-goods-attr-item{
+						height: 100%;
+						margin-right: 5rpx;
+					}
+				}
+				.hxj-composition-goods-total_price{
+					font-size: 26rpx;
+					font-weight: 500;
+					color: #222222;
+					text{
+						font-weight: 300;
+					}
+				}
+			}
+		}
+		
+		
     }
+	
+	.receive{
+		width: 92rpx;
+		height: 38rpx;
+		background: #FF0000;
+		border-radius: 19rpx;
+		font-size: 20rpx;
+		font-weight: 500;
+		color: #FFFFFF;
+		line-height: 38rpx;
+		text-align: center;
+		image{
+			width: 22rpx;
+			height: 22rpx;
+			margin-left: 7rpx;
+		}
+	}
+	.info-box{
+		width: 100%;
+		height: auto;
+		background-color: #fff;
+		padding: 35rpx;
+		.gd-cover{
+			width: 170rpx;
+			height: 170rpx;
+			border-radius: 8rpx;
+			overflow: hidden;
+			margin-right: 28rpx;
+		}
+		.title{
+			width: 365rpx;
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #222222;
+			line-height: 46rpx;
+		}
+		.price{
+			color: #F93F3F;
+			line-height: 58rpx;
+			.dw{
+				font-size: 24rpx;
+				font-weight: 500;
+			}
+			.rmb{
+				font-size: 40rpx;
+				font-weight: 600;
+			}
+			.decimal{
+				font-size: 24rpx;
+				font-weight: 500;
+			}
+		}
+		.price-line{
+			font-size: 20rpx;
+			font-weight: 500;
+			text-decoration: line-through;
+			color: #999999;
+			line-height: 36rpx;
+			margin-left: 21rpx;
+		}
+		.tag{
+			width: auto;
+			height: 28rpx;
+			border: 1rpx solid #F59922;
+			border-radius: 2rpx;
+			font-size: 20rpx;
+			font-weight: 500;
+			color: #F59922;
+			line-height: 23rpx;
+			margin-right: 13rpx;
+			padding: 0 9rpx;
+		}
+		.hxj-compositionItem-show{
+			font-size: 24rpx;
+			font-weight: 500;
+			color: #A18353;
+			line-height: 36rpx;
+		}
+	}
 </style>

+ 5 - 6
src/pages/order-submit/invoice/invoice.vue

xqd xqd xqd
@@ -50,13 +50,12 @@
 						placeholder-style="font-size: 28rpx;font-weight: 300;color: #999999;" />
 				</view>
 			</view>
-
 		</view>
 		<view class="form-box">
 			<view class="main-between cross-center item">
 				<view class="title_1">电话号码</view>
 				<view class="main-right cross-center">
-					<input type="text" v-model="invoice_info.phone" placeholder="请输入" style="text-align: right;font-size: 28rpx;"
+					<input type="number" v-model="invoice_info.phone" placeholder="请输入" style="text-align: right;font-size: 28rpx;" maxlength="11"
 						placeholder-style="font-size: 28rpx;font-weight: 300;color: #999999;" />
 				</view>
 			</view>
@@ -80,7 +79,7 @@
 			<view class="main-between cross-center item">
 				<view class="title_1">开票金额<text>*</text></view>
 				<view class="main-right cross-center">
-					<input type="digit" v-model="invoice_info.amount" placeholder="请输入" style="text-align: right;font-size: 28rpx;"
+					<input type="digit" v-model="invoice_info.amount" placeholder="请输入" style="text-align: right;font-size: 28rpx;" disabled
 						placeholder-style="font-size: 28rpx;font-weight: 300;color: #999999;" />
 				</view>
 			</view>
@@ -125,12 +124,12 @@
 				deep:true
 			}
 		},
-		onLoad() {
+		onLoad(option) {
 			let storageInvoiceInfo=this.$storage.getStorageSync('invoice_info')
 			if(storageInvoiceInfo){
-				this.invoice_info.delivery_address=storageInvoiceInfo.delivery_address
-				this.invoice_info.user_address_id=storageInvoiceInfo.user_address_id
+				this.invoice_info=storageInvoiceInfo
 			}
+			this.invoice_info.amount=option.amount;
 		},
 		methods: {
 			submit(){

+ 11 - 7
src/pages/order-submit/order-submit.vue

xqd xqd xqd xqd xqd xqd
@@ -4,7 +4,7 @@
 			<!-- 地址、商户、配送、商品、优惠、费用信息 -->
 			<view class="page" v-if="previewData">
 				<view style="background-image: url(https://t17.9026.com/web/statics/image/index/appointment_top.png);background-size: 100% 100%;padding-bottom: 24rpx;">
-					<app-nav-bar :fixed="true" :background-color="''" :title="'确认订单'" :xStyle="1" :hasMallSetting="2" :hasHeight="true"></app-nav-bar>
+					<app-nav-bar :fixed="true" :background-color="''" :background-image="'url(https://t17.9026.com/web/statics/image/index/appointment_top.png)'" :title="'确认订单'" :xStyle="1" :hasMallSetting="2" :hasHeight="true"></app-nav-bar>
 					<template v-if="getIsEnterSales">
 						<view v-if="!customerInfo" @click="navCustomer" class="select-customer" >
 							请选择客户
@@ -490,7 +490,7 @@
 				<view class="box-grow-1 cross-center u-submit-bar-height">
 					<view class="price-info">
 						<view :class="[themeTextClass]"
-							:style="{'color': !is_gift ? theme.color : '','font-size': '26rpx'}">
+							:style="{'color': '#222222','font-size': '30rpx'}">
 							{{totalTitle}}:
 							<text v-for="(custom_currency, ccIndex) in previewData.custom_currency_all" :key="ccIndex">
 								{{custom_currency}}+
@@ -503,9 +503,13 @@
 									v-else>¥{{balance <0 ? setPrice(previewData.total_price, balance) : FlorPrice(previewData.total_price)}}</template>
 							</text>
 						</view>
-						<view v-if="previewData.vip_card_price > 0" :class="[themeTextClass]"
+						<!-- <view v-if="previewData.vip_card_price > 0" :class="[themeTextClass]"
 							:style="{'color': !is_gift ? theme.color : '','font-size': '20rpx'}">包含SVIP费用:
 							¥{{previewData.vip_card_price}}
+						</view> -->
+						<view v-if="previewData.mch_list[0].total_discounts_price > 0" 
+							:style="{'color': '#999','font-size': '22rpx','margin-left':'74rpx'}">共优惠:
+							¥{{previewData.mch_list[0].total_discounts_price}}元
 						</view>
 					</view>
 				</view>
@@ -928,7 +932,7 @@
 			},
 			navigateInvoice() {
 				uni.navigateTo({
-					url: '/pages/order-submit/invoice/invoice'
+					url: `/pages/order-submit/invoice/invoice?amount=${this.previewData.mch_list[0].total_goods_price}`
 				})
 			},
 			navigateInvoiceAddr() {
@@ -1663,7 +1667,7 @@
 			padding: 0 0;
 
 			>view {
-				margin: #{16rpx} 0;
+				margin: #{2rpx} 0;
 			}
 		}
 
@@ -1702,8 +1706,8 @@
 
 	.bd-bottom {
 		width: 750upx;
-		height: 110upx;
-		padding: 0 24upx;
+		height: 100upx;
+		padding: 0 0 0 24upx;
 	}
 
 	.full-tip {

+ 5 - 4
src/pages/order/index/index.vue

xqd xqd xqd xqd
@@ -80,7 +80,7 @@
                                                     </template>
                                                     <!-- 核销 -->
                                                     <!-- 到店自提订单 在核销前有收款操作 -->
-                                                    <template v-if='item.send_type ==1 && item.is_confirm == 0 && item.cancel_status == 0'>
+                                                    <template v-if='item.send_type ==1 && item.is_confirm == 0 && item.cancel_status == 0 && item.new_status < 2'>
                                                         <view @click='getClerkCode(item)' class='order-btn'>核销码</view>
                                                     </template>
                                                     <template v-if='item.action_status.is_show_comment == 1'>
@@ -92,11 +92,11 @@
                                             <!-- 已支付订单操作 start -->
                                             <template v-else>
                                                 <!-- 待付款 -->
-                                                <template v-if='item.is_pay == 0'>
+                                                <template v-if='item.is_pay == 0 && item.cancel_status == 0'>
                                                     <view @click="cancel(item)" class='order-btn'>取消</view>
                                                     <view @click='orderPay(item)' class='order-btn'>付款</view>
                                                 </template>
-                                                <template v-if='item.status == 1'>
+                                                <template v-if='item.status == 1 && item.new_status < 2'>
                                                     <!-- 核销 -->
                                                     <!-- 到店自提订单 未支付不显示核销码 | 未支付 货到付款订单显示核销码 -->
                                                     <template v-if='item.send_type ==1 && item.is_confirm == 0 && ((item.is_pay == 0 && item.pay_type == 2) || (item.is_pay == 1 && item.pay_type != 2))'>
@@ -566,7 +566,7 @@ export default {
 }
 
 .hxj-order-status{
-	width: 113rpx;
+	width: auto;
 	height: 44rpx;
 	background: #F8F8F8;
 	border-radius: 4rpx;
@@ -575,6 +575,7 @@ export default {
 	color: #838584;
 	line-height: 44rpx;
 	text-align: center;
+	padding: 0 24rpx;
 }
 
 .order-item-box .view-3 {

+ 2 - 2
src/pages/order/search/search.vue

xqd
@@ -199,8 +199,8 @@
                 this.dialog = false;
             },
             timeChange: function (e) {
-                const val = +e.detail.value;
-                this.timeVal = +e.detail.value;
+                const val = e.detail.value;
+                this.timeVal = e.detail.value;
                 let years = this.years;
                 let year = this.years[val[0]];
                 let month = this.months[val[1]];

+ 4 - 4
src/pages/sale/components/app-my-income.vue

xqd
@@ -1,18 +1,18 @@
 <template>
 	<view class="main-between income" style="margin-top: 29rpx;">
 		<view class="item" @click="goPage('/pages/sale/mySaleOrder')">
-			<view class="title">订单总额()</view>
+			<view class="title">订单总额()</view>
 			<view class="main-between cross-center">
-				<view class="num">{{(userInfo.salesperson_info.order_total_amount/10000).toFixed(2)}}</view>
+				<view class="num">{{(userInfo.salesperson_info.order_total_amount).toFixed(2)}}</view>
 				<image style="width: 12rpx;height: 21rpx;" src="https://t17.9026.com/web/statics/image/index/arrow-right-gray.png"
 					mode=""></image>
 			</view>
 		</view>
 		<view class="line"></view>
 		<view class="item" @click="$jump({'open_type':'navigate','url':'/pages/sale/myCommission'})">
-			<view class="title">我的提成()</view>
+			<view class="title">我的提成()</view>
 			<view class="main-between cross-center">
-				<view class="num">{{(userInfo.salesperson_info.order_total_commission/10000).toFixed(2)}}</view>
+				<view class="num">{{(userInfo.salesperson_info.order_total_commission).toFixed(2)}}</view>
 				<image style="width: 12rpx;height: 21rpx;" src="https://t17.9026.com/web/statics/image/index/arrow-right-gray.png"
 					mode=""></image>
 			</view>

+ 13 - 7
src/pages/sale/cusmter/addCustomer.vue

xqd xqd xqd xqd xqd xqd xqd
@@ -19,7 +19,7 @@
 				</view>
 				<view class="main-left cross-center linp border_bottom">
 					<view class="field">手机号</view>
-					<input type="text" v-model="form.mobile" placeholder="请输入手机号" placeholder-style="font-size:28rpx" />
+					<input type="text" v-model="form.mobile" maxlength="11" placeholder="请输入手机号" placeholder-style="font-size:28rpx" />
 				</view>
 			</view>
 		</view>
@@ -79,7 +79,8 @@
 					mobile: '',
 					name: '',
 					estates: []
-				}
+				},
+				setTimer:''
 			};
 		},
 		onLoad(option) {
@@ -136,7 +137,7 @@
 			// wx.enableAlertBeforeUnload({
 			// 	message:'还未保存',
 			// 	success:()=>{
-			// 		console.log('qqqqqqqqqqqqqq')
+			// 		console.log('')
 			// 	}
 			// })
 		},
@@ -166,7 +167,6 @@
 				}
 			},
 			areaEvent(data,index=this.formIndex) {
-				console.log('data',data)
 				if (data) {
 					this.form.estates[index].regionId.province_id = data.province.id;
 					this.form.estates[index].regionId.city_id = data.city.id;
@@ -190,8 +190,6 @@
 					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
 					sourceType: ['album', 'camera'], //从相册选择
 					success: (res) => {
-						console.log(res);
-						console.log(JSON.stringify(res.tempFilePaths));
 						uploadFile({
 							url: this.$api.upload.file,
 							filePath: res.tempFilePaths[0],
@@ -274,8 +272,13 @@
 					if(res.code===0){
 						uni.showToast({
 							title:this.form.sale_customer_id?'编辑成功':'添加成功',
+							success: () => {
+								this.setTimer=setTimeout(()=>{
+									uni.navigateBack()
+								},1500)
+							}
 						})
-						uni.navigateBack()
+						
 					}else{
 						uni.showToast({
 							title:res.msg,
@@ -289,6 +292,9 @@
 					})
 				})
 			}
+		},
+		onHide() {
+			clearTimeout(this.setTimer)
 		}
 	}
 </script>

+ 3 - 2
src/pages/sale/cusmter/info.vue

xqd
@@ -4,8 +4,9 @@
 			<view class="main-left">
 				<image style="width: 91rpx;height: 91rpx;border-radius: 50%;margin-right: 25rpx;" :src="info.avatar" mode=""></image>
 				<view class="main-between-y">
-					<view class="main-left name cross-center t-omit">{{info.name}}
-					<image style="width: 21rpx;height: 29rpx;margin: 0 28rpx 0 7rpx;" src="https://t17.9026.com/web/statics/image/sale/sex0.png" mode=""></image>
+					<view class="main-left name cross-center">
+					<text style="width: 330rpx;" class="t-omit">{{info.name}}</text>
+					<!-- <image style="width: 21rpx;height: 29rpx;margin: 0 28rpx 0 7rpx;" src="https://t17.9026.com/web/statics/image/sale/sex0.png" mode=""></image> -->
 					<!-- <image style="width: 21rpx;height: 29rpx;margin: 0 28rpx 0 7rpx;" src="https://t17.9026.com/web/statics/image/sale/sex1.png" mode=""></image> -->
 						<image style="width: 96rpx;height: 31rpx;" :src="info.is_verify==1?'https://t17.9026.com/web/statics/image/index/ysm.png':''" mode=""></image>
 					</view>

+ 14 - 0
src/pages/sale/cusmter/list.vue

xqd
@@ -97,6 +97,20 @@
 			},
 			navCusmterInfo(id,name,mobile,user_id) {
 				if(this.why==='select_customer'){
+					if(user_id==0){
+						uni.showModal({
+						    title: '提示',
+						    content: '客户暂未绑定,请联系',
+						    success: (res)=> {
+						        if (res.confirm) {
+						            return
+						        } else if (res.cancel) {
+									return
+						        }
+						    }
+						});
+						return
+					}
 					let pages = getCurrentPages();
 					let prevPage = pages[pages.length - 2]; //上一个页面
 					prevPage.$vm.customerInfo={user_id:user_id,name:name,mobile:mobile}

+ 30 - 9
src/pages/sale/myCommission.vue

xqd xqd
@@ -4,27 +4,27 @@
 		<view class="main-around cross-center head">
 			<view>
 				<view class="hjx-tc-777 hjx-ts-22 mb24">已发放提成</view>
-				<view class="price28 hjx-tc-B19D60 hjx-ts-50"><text>¥</text>9826</view>
+				<view class="price28 hjx-tc-B19D60 hjx-ts-50"><text>¥</text>{{dataInfo.already_send_amount}}</view>
 			</view>
 			<view>
 				<view class="hjx-tc-777 hjx-ts-22 mb24">未发放金额</view>
-				<view class="price28 hjx-tc-333 hjx-ts-50"><text>¥</text>346</view>
+				<view class="price28 hjx-tc-333 hjx-ts-50"><text>¥</text>{{dataInfo.not_send_amount}}</view>
 			</view>
 		</view>
 		<view class="list">
 			<view class="cross-center hjx-ts-30 hjx-tc-666" style="padding: 32rpx 0;">
-				已发放提成<image style="width: 30rpx;height: 25rpx;margin-left: 8rpx;" src="../../static/image/sale/tcff.png" mode=""></image>
+				已发放提成<image style="width: 30rpx;height: 25rpx;margin-left: 8rpx;" src="https://t17.9026.com/web/statics/image/sale/tcff.png" mode=""></image>
 			</view>
 			<view style="width: 100%;height: 1px;background: #EAEAEA;"></view>
-			<view class="main-between cross-center item" :class="{'item-line':true}" v-for="(item,index) in dataList" :key="index">
+			<view class="main-between cross-center item" :class="{'item-line':true}" v-for="(item,index) in dataInfo.list" :key="index">
 				<view class="main-between-y">
 					<view class="hjx-ts-28 hjx-tc-222 hjx-tw-500">提成收入</view>
-					<view class="hjx-ts-24 hjx-tc-666 hjx-tw-500">2021-02-10 10:12:32</view>
+					<view class="hjx-ts-24 hjx-tc-666 hjx-tw-500">{{item.created_at}}</view>
 				</view>
-				<view class="hjx-tc-B19D60 hjx-ts-34 hjx-tw-600">¥9826</view>
+				<view class="hjx-tc-B19D60 hjx-ts-34 hjx-tw-600">¥{{item.change_amount}}</view>
 			</view>
-			<view class="no-more" v-if="isNoMore && dataList.length>0">没有更多了...</view>
-			<app-no-goods v-if="dataList.length===0" :title="`暂无提成`" background="#fff"></app-no-goods>
+			<view class="no-more" v-if="isNoMore && dataInfo.list.length>0">没有更多了...</view>
+			<app-no-goods v-if="dataInfo.list.length===0" :title="`暂无提成`" background="#fff"></app-no-goods>
 		</view>
 	</view>
 	</app-layout>
@@ -38,10 +38,31 @@
 		},
 		data() {
 			return {
-				dataList:[],
+				dataInfo:[],
 				isNoMore:false,
 				page:1,
 			};
+		},
+		onLoad() {
+			this.getData()
+		},
+		methods:{
+			getData(){
+				this.$request({
+					url:this.$api.sale.income_record,
+					data:{
+						page:this.page
+					},
+					method:'post'
+				}).then(res=>{
+					if(res.code===0){
+						this.dataInfo=res.data
+						if(res.data.list.length<20){
+							this.isNoMore=true
+						}
+					}
+				})
+			}
 		}
 	}
 </script>

+ 99 - 17
src/pages/sale/mySaleOrder.vue

xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd
@@ -4,10 +4,16 @@
 	<view class="page">
 		<!-- <view style="background-color: #fff;position: fixed;top: 0;width: 100%;"> -->
 		<view style="background-color: #fff;">
-			<view class="main-left cross-center search">
+			<view class="main-left cross-center search" @click="toSearch">
 				<image src="https://t17.9026.com/web/statics/image/index/search.png" mode=""></image>
-				<input style="width: 560rpx;" type="text" value="" placeholder="搜索客户、商品、时间、订单号" v-model="keyword" @confirm="search"
-					placeholder-style="font-size:28rpx;color:#999;" />
+				<view v-if="search.keyword || search.dateArr[0] || search.dateArr[1]" class=" main-left cross-center hjx-tc-222">
+					<view v-if="search.dateArr[0]">{{search.dateArr[0]}}</view>
+					<view v-if="search.dateArr[1]"><text v-if="search.dateArr[0]">至</text>{{search.dateArr[1]}}</view>
+					<view v-if="search.keyword"><text v-if="search.dateArr[0] || search.dateArr[1]">,</text>{{search.keyword}}</view>
+				</view>
+				<view v-else class="hjx-tc-999">
+					搜索客户、商品名称、时间、订单号
+				</view>
 			</view>
 		</view>
 		<view style="background-color: #fff;position: sticky;top: 0;width: 100%;">
@@ -48,13 +54,13 @@
 						客户楼盘绑定通知
 					</view> -->
 					<view class="main-between cross-center">
-						<view class="date">{{item.status_text}}</view>
+						<view class="order_status">{{item.status_text}}</view>
 						<!-- <image class="del" src="https://t17.9026.com/web/statics/image/user-center/del.png" mode="">
 						</image> -->
 					</view>
 				</view>
 				<view class="center">
-					<view class="main-between goods" v-for="(goods,index1) in item.detail" :key="index1" @click="$jump({open_type:'navigate',url:'/pages/goods/goods?id='+goods.id})">
+					<view class="main-between goods" v-for="(goods,index1) in item.detail" :key="index1" @click="$jump({open_type:'navigate',url:'/pages/goods/goods?id='+goods.goods_id})">
 						<view class="main-left desc">
 							<image class="goods-img" :src="goods.goods_info.pic_url"
 								mode=""></image>
@@ -86,9 +92,9 @@
 						<view class="date">{{item.updated_at.split(' ')[0]}}</view>
 						<view class="main-around">
 							<!-- <view class="kbtn">上传发票</view> -->
-							<view class="kbtn">再次购买</view>
+							<!-- <view class="kbtn" @click="$jump({'open_type':'navigate','url':'/pages/cart/cart'})">再次购买</view> -->
 							
-							<view class="kbtn" v-if="item.status>1" @click="$jump({open_type:'navigate',url:'/pages/order/express-detail/express-detail'})">查看物流</view>
+							<view class="kbtn" v-if="item.status===1 && isShowExpressButton(item)" @click="logistics(item)">查看物流</view>
 						</view>
 					</template>
 					<!-- <template v-if="false">
@@ -173,9 +179,14 @@
 				rangeShow1: false,
 				
 				
-				keyword:'',
+				search: {
+				    keyword: '',
+				    dateArr: []
+				},
+				isRequest: true, //防止数据重复加载
 				page:1,
 				isNoMore:false,
+				timer:'',
 			};
 		},
 		computed: {
@@ -188,7 +199,32 @@
 		},
 		onShow() {
 			uni.hideHomeButton()
-			this.getDataList()
+			this.timer=setTimeout(()=>{
+				this.$storage.getStorage({
+					key: 'search',
+					success:(res)=> {
+						this.search = res.data;
+						let interval = setInterval(()=> {
+							if (this.isRequest) {
+								this.page = 1;
+								this.getDataList()
+								// this.$store.dispatch('gConfig/setTabBarBoolean', this.tabBarNavs.navs);
+							}
+							clearInterval(interval)
+						}, 300);
+					},
+					fail:()=> {
+						let interval = setInterval(()=> {
+							if (this.isRequest) {
+								this.page = 1;
+								this.getDataList()
+								// this.$store.dispatch('gConfig/setTabBarBoolean', this.tabBarNavs.navs);
+							}
+							clearInterval(interval)
+						}, 300);
+					}
+				});
+			}, 0)
 		},
 		onReachBottom() {
 			if(!this.isNoMore){
@@ -197,17 +233,57 @@
 			}
 		},
 		methods: {
+			toSearch() {
+			    uni.navigateTo({
+			        url: `/pages/order/search/search`
+			    })
+			},
+			// 物流信息
+			logistics(orderDetail) {
+			    if (orderDetail.is_send == 1 && orderDetail.detailExpress.length == 0) {
+			        // 兼容
+			        let [id, express, express_no, customer_name, cover_pic] = [orderDetail.id, orderDetail.express, orderDetail.express_no, orderDetail.customer_name, orderDetail.detail[0].goods_info.pic_url];
+			        uni.navigateTo({
+			            url: `/pages/order/express-detail/express-detail?id=${id}&express=${express}&express_no=${express_no}&customer_name=${customer_name}&cover_pic=${cover_pic}`
+			        })
+			    } else if (orderDetail.is_send == 1 && orderDetail.detailExpress.length == 1 && orderDetail.send_type != 2) {
+			        let express = orderDetail.detailExpress[0].express;
+			        let express_no = orderDetail.detailExpress[0].express_no;
+			        let customer_name = orderDetail.detailExpress[0].customer_name;
+			        let cover_pic = orderDetail.detailExpress[0].expressRelation[0].orderDetail.goods_info.goods_attr.cover_pic;
+			        uni.navigateTo({
+			            url: `/pages/order/express-detail/express-detail?express=` + express + `&customer_name=` + customer_name + `&express_no=` + express_no + `&cover_pic=` + cover_pic
+			        })
+			    } else if (orderDetail.detailExpress.length >= 1) {
+			        uni.navigateTo({
+			            url: '/pages/order/express-list/express-list?order_id=' + orderDetail.id
+			        });
+			    }
+			},
+			isShowExpressButton: function(order) {
+			    if (order.is_send) {
+			        if (order.detailExpress.length == 1 && order.detailExpress[0].send_type == 2 && order.send_type == 0) {
+			            return false;
+			        }
+			
+			        if (order.is_confirm == 0) {
+			            return true;
+			        }
+			    }
+			    return false;
+			},
 			getDataList(){
+				this.isRequest = false;
 				this.$showLoading()
 				this.$request({
 					url:this.$api.order.list,
 					data:{
 						status: this.status,
-						keyword: this.keyword,
-						dateArr: [],
+						keyword: this.search ? this.search.keyword : '',
+						dateArr: this.search ? JSON.stringify(this.search.dateArr) : JSON.stringify([]),
 						page: this.page,
 						sale_id:this.info.salesperson_id,
-						user_verify_status:this.user_verify_status
+						user_verify_status:this.user_verify_status,
 					},
 					method:'get'
 				}).then(res=>{
@@ -222,6 +298,7 @@
 							this.isNoMore=true
 						}
 					}
+					this.isRequest = true;
 				})
 			},
 			
@@ -250,6 +327,9 @@
 				this.page=1
 				this.getDataList()
 			}
+		},
+		onUnload() {
+			clearTimeout(this.timer)
 		}
 	}
 </script>
@@ -293,6 +373,8 @@
 		margin: 0 auto;
 		padding-left: 22rpx;
 
+font-size: 24rpx;
+
 		image {
 			width: 22rpx;
 			height: 22rpx;
@@ -360,11 +442,11 @@
 				color: #222222;
 			}
 
-			.date {
+			.order_status {
+				text-align: right;
 				font-size: 22rpx;
 				font-weight: 500;
 				color: #222222;
-				margin-right: 30rpx;
 			}
 
 			.del {
@@ -419,14 +501,14 @@
 
 				.desc {
 					width: 100%;
-					height: 141rpx;
+					height: 156rpx;
 					// background: #F8F8F8;
 					border-radius: 6rpx;
 					padding: 18rpx 0 18rpx 0;
 
 					.goods-img {
-						width: 147rpx;
-						height: 110rpx;
+						width: 120rpx;
+						height: 120rpx;
 						border-radius: 8rpx;
 						margin-right: 21rpx;
 					}

+ 73 - 77
src/pages/sale/news/news.vue

xqd xqd xqd xqd xqd
@@ -2,12 +2,12 @@
 	<view class="page">
 		<view class="box" v-for="(item,index) in dataList" :key="index">
 			<view class="main-between cross-center header">
-				<!-- <view class="cross-center head t-omit" :class="{'border_bottom':true}">
-					<image src="https://t17.9026.com/web/statics/image/sale/1.png" mode=""></image>
-					周先生
-				</view> -->
+
 				<view class="cross-center head1">
-					<image src="https://t17.9026.com/web/statics/image/index/msg.png" mode=""></image>
+					<view class="headimg">
+						<image src="https://t17.9026.com/web/statics/image/index/msg.png" mode=""></image>
+						<view class="isread" v-if="item.is_read!=1"></view>
+					</view>
 					客户楼盘绑定通知
 				</view>
 				<view class="main-between cross-center" @click="del_msg(item.id,index)">
@@ -16,40 +16,15 @@
 				</view>
 			</view>
 			<view class="center">
-				<!-- <view class="main-between cross-center">
-					<view class="title">整体评价</view>
-					<view class="isopen cross-center">
-						展开
-						<image src="https://t17.9026.com/web/statics/image/user-center/arrow-bottom.png" mode=""></image>
-					</view>
-				</view> -->
+
 				<view class="center-text">{{item.message}}</view>
-				<!-- 客户xxxx向您发起了楼盘xxxx的认证通知,请前往我的-我的客户查看并处理 -->
-				<!-- <view class="center-img">
-					<image v-for="(item, index) in 5" :key="index" src="https://t17.9026.com/web/statics/image/user-center/1.png" mode=""></image>
-				</view>
-				<view class="main-between goods">
-					<view class="main-left desc">
-						<image class="goods-img" src="https://t17.9026.com/web/statics/image/user-center/1.png" mode=""></image>
-						<view>
-							<view class="title">兴城人居ins居家占位套餐</view>
-							<view class="price">
-								<text class="company">¥</text>
-								2466.00
-							</view>
-						</view>
-					</view>
-					<view class="isopen cross-center">
-						收起
-						<image src="https://t17.9026.com/web/statics/image/user-center/arrow-top.png" mode=""></image>
-					</view>
-				</view> -->
+
 			</view>
-			<view class="main-between footer cross-center border_top">
+			<!-- <view class="main-between footer cross-center border_top">
 				<view class="left">查看详情</view>
 				<image style="width: 12rpx;height: 22rpx;" src="https://t17.9026.com/web/statics/image/index/arrow-right-gray.png"
 					mode="" ></image>
-			</view>
+			</view> -->
 		</view>
 		<view class="no-more" v-if="noMore && dataList.length>0">没有更多了...</view>
 	</view>
@@ -59,65 +34,65 @@
 	export default {
 		data() {
 			return {
-				page:1,
-				dataList:[],
-				noMore:false
+				page: 1,
+				dataList: [],
+				noMore: false
 			};
 		},
 		onLoad() {
 			this.getMessageList()
 		},
 		onReachBottom() {
-			if(!this.noMore){
+			if (!this.noMore) {
 				this.page++
 				this.getMessageList()
 			}
 		},
-		methods:{
-			getMessageList(){
+		methods: {
+			getMessageList() {
 				this.$request({
-					url:this.$api.sale.message_list,
-					data:{
-						page:this.page
+					url: this.$api.sale.message_list,
+					data: {
+						page: this.page
 					},
-					method:'post'
-				}).then(res=>{
-					if(res.code===0){
-						if(this.page===1){
-							this.dataList=res.data.list
-						}else{
-							this.dataList=this.dataList(res.data.list)
+					method: 'post'
+				}).then(res => {
+					if (res.code === 0) {
+						if (this.page === 1) {
+							this.dataList = res.data.list
+						} else {
+							this.dataList = this.dataList(res.data.list)
 						}
-						if(res.data.list.length<20){
-							this.noMore=true
+						if (res.data.list.length < 20) {
+							this.noMore = true
 						}
 					}
-					
+
 				})
 			},
-			del_msg(id,index){
+			del_msg(id, index) {
 				uni.showModal({
-				    title: '提示',
-				    content: '确定删除该条消息吗',
-				    success:(qq)=> {
-				        if (qq.confirm) {
-				            this.$request({
-				            	url:this.$api.sale.message_delete,
-				            	data:{
-				            		message_id:id
-				            	},
-				            	method:'post'
-				            }).then(res=>{
-				            	if(res.code===0){
-									this.dataList.splice(index,1)
+					title: '提示',
+					content: '确定删除该条消息吗',
+					success: (qq) => {
+						if (qq.confirm) {
+							this.$request({
+								url: this.$api.sale.message_delete,
+								data: {
+									message_id: id
+								},
+				 			method: 'post'
+							}).then(res => {
+								if (res.code === 0) {
+									this.dataList.splice(index, 1)
 								}
-				            })
-				        } else if (qq.cancel) {
-				            console.log('用户点击取消');
-				        }
-				    }
+							})
+						} else if (qq.cancel) {
+							console.log('用户点击取消');
+						}
+					}
 				});
-				
+
 			}
 		}
 	};
@@ -154,7 +129,8 @@
 				background: #f6f6f6;
 				border-radius: 24rpx;
 				padding: 0 17rpx;
-overflow: hidden;
+				overflow: hidden;
+
 				image {
 					width: 32rpx;
 					height: 32rpx;
@@ -170,14 +146,34 @@ overflow: hidden;
 			.head1 {
 				max-width: 500rpx;
 				height: 48rpx;
-overflow: hidden;
-				image {
+				overflow: hidden;
+
+				.headimg {
 					width: 45rpx;
 					height: 45rpx;
+					position: relative;
 					margin-right: 14rpx;
-					border-radius: 50%;
+
+					image {
+						width: 45rpx;
+						height: 45rpx;
+
+						border-radius: 50%;
+					}
+
+					.isread {
+						position: absolute;
+						top: 0;
+						right: 0;
+						width: 16rpx;
+						height: 16rpx;
+						background: #FB122B;
+						border: 2rpx solid #FFFFFF;
+						border-radius: 50%;
+					}
 				}
 
+
 				font-size: 30rpx;
 				font-weight: bold;
 				color: #222222;

+ 112 - 39
src/pages/sale/sale-user-center.vue

xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd
@@ -1,7 +1,8 @@
 <template>
 	<app-layout :haveBackground="false">
 		<image style="height: 396rpx;width: 100%;position: absolute;top: 0;left: 0;z-index: -1;"
-			src="https://swdzshopv4.oss-cn-chengdu.aliyuncs.com/uploads/mall10000/20211209/0adfeb029f95892255541fd43cb70358.png" mode=""></image>
+			src="https://swdzshopv4.oss-cn-chengdu.aliyuncs.com/uploads/mall10000/20211209/0adfeb029f95892255541fd43cb70358.png"
+			mode=""></image>
 		<app-nav-bar v-if="true" :fixed="true" :title="mall.name" color="#000" :hasMallSetting="2" background-color="">
 		</app-nav-bar>
 		<app-user-center-top :top-style="5" :member-pic-url="userCenter.member_pic_url"
@@ -14,23 +15,49 @@
 			<view class="list" :class="[listStyle]">
 				<!--  #ifdef MP -->
 				<view class="item" v-for="(item, index) in temporaryMenu" :key="index">
-					<app-jump-button form :url="item.link_url" :open_type="item.open_type" :item="item" :number="userInfo.service_phone"
-						:arrangement="'row'">
+					<app-jump-button v-if="item.name!='退出销售端'" form :url="item.link_url" :open_type="item.open_type" :item="item"
+						:number="userInfo.service_phone" :arrangement="'row'">
 						<view style="width: 100%" class="item-container dir-left-nowrap cross-center">
 							<view class="box-grow-0">
 								<image :src="item.icon_url" class="icon"></image>
 							</view>
 							<view class="box-grow-1 main-between" style="max-width: 100%">
 								<view class="name">{{item.name}}</view>
-								<view class="num" v-if="item.num">{{item.num===1?Number(userInfo.salesperson_info.already_verify_num) + Number(userInfo.salesperson_info.not_verify_num):userInfo.salesperson_info.estate_num}}</view>
+								<view class="num" v-if="item.num">
+									{{item.num===1?Number(userInfo.salesperson_info.already_verify_num) + Number(userInfo.salesperson_info.not_verify_num):''}}
+									{{item.num===2?userInfo.salesperson_info.estate_num:''}}
+								</view>
+								<view class="dto" v-if="item.dto">
+									<view class="red" v-if="userInfo.salesperson_info.unread_message_num!='0'"></view>
+								</view>
 							</view>
 							<view class="box-grow-0">
 								<image src="https://t17.9026.com/web/statics/image/index/arrow-right-bgwrite.png"
-									class="arrow" ></image>
+									class="arrow"></image>
 								<!-- <image src="https://t17.9026.com/web/statics/image/index/arrow-right-bgwrite.png" class="arrow"></image> -->
 							</view>
 						</view>
 					</app-jump-button>
+					<view v-else style="width: 100%" class="item-container dir-left-nowrap cross-center" @click="logout">
+						<view class="box-grow-0">
+							<image :src="item.icon_url" class="icon"></image>
+						</view>
+						<view class="box-grow-1 main-between" style="max-width: 100%">
+							<view class="name">{{item.name}}</view>
+							<view class="num" v-if="item.num">
+								{{item.num===1?Number(userInfo.salesperson_info.already_verify_num) + Number(userInfo.salesperson_info.not_verify_num):''}}
+								{{item.num===2?userInfo.salesperson_info.estate_num:''}}
+							</view>
+							<view class="dto" v-if="item.dto">
+								<view class="red"></view>
+							</view>
+						</view>
+						<view class="box-grow-0">
+							<image src="https://t17.9026.com/web/statics/image/index/arrow-right-bgwrite.png"
+								class="arrow"></image>
+							<!-- <image src="https://t17.9026.com/web/statics/image/index/arrow-right-bgwrite.png" class="arrow"></image> -->
+						</view>
+					</view>
 				</view>
 				<!--  #endif -->
 				<!--  #ifdef H5 -->
@@ -47,12 +74,17 @@
 								</view>
 								<view class="box-grow-1" style="max-width: 100%">
 									<view class="name">{{item.name}}</view>
-									<view class="num" v-if="item.num">{{item.num===1?Number(userInfo.salesperson_info.already_verify_num) + Number(userInfo.salesperson_info.not_verify_num):userInfo.salesperson_info.estate_num}}</view>
+									<view class="num" v-if="item.num">
+										{{item.num===1?Number(userInfo.salesperson_info.already_verify_num) + Number(userInfo.salesperson_info.not_verify_num):''}}
+										{{item.num===2?userInfo.salesperson_info.estate_num:''}}
+									</view>
+									<view class="dto" v-if="item.dto">
+										<view class="red"></view>
+									</view>
 								</view>
 								<view class="box-grow-0" v-if="userCenter.menu_style=='1'">
-									<image
-										src="https://t17.9026.com/web/statics/image/index/arrow-right.png"
-										class="arrow" ></image>
+									<image src="https://t17.9026.com/web/statics/image/index/arrow-right.png"
+										class="arrow"></image>
 								</view>
 							</view>
 						</app-jump-button>
@@ -80,7 +112,7 @@
 				<view :style="{height: '110rpx'}" class="nav-margin "
 					:class="haveBackground ? 'app-layout-background' : ''"></view>
 			</view>
-			<app-tab-bar :page-count="0" ></app-tab-bar>
+			<app-tab-bar :page-count="0"></app-tab-bar>
 		</template>
 	</app-layout>
 </template>
@@ -89,6 +121,7 @@
 	import {
 		mapGetters,
 		mapState,
+		mapActions
 	} from 'vuex';
 	import AppUserCenterTop from '../../components/page-component/app-user-center-top/app-user-center-top.vue';
 	import AppCopyright from '../../components/page-component/app-copyright/app-copyright.vue';
@@ -109,46 +142,41 @@
 		},
 		data() {
 			return {
+				timer:'',
 				temporaryMenu: [{
 						icon_url: "https://t17.9026.com/web/statics/image/index/order-icon.png",
-						key: "pintuan",
+						key: "",
 						link_url: "/pages/sale/mySaleOrder",
 						name: "我的订单",
 						open_type: "navigate",
 					},
 					{
 						icon_url: "https://t17.9026.com/web/statics/image/index/kehu.png",
-						key: "pintuan",
+						key: "",
 						link_url: "/pages/sale/cusmter/list",
 						name: "我的客户",
 						open_type: "navigate",
-						num:1,
+						num: 1,
 					},
 					{
 						icon_url: "https://t17.9026.com/web/statics/image/index/lp.png",
-						key: "pintuan",
+						key: "",
 						link_url: "/pages/sale/properties/properties",
 						name: "我负责的楼盘",
 						open_type: "navigate",
-						num:2,
+						num: 2,
 					},
 					{
 						icon_url: "https://t17.9026.com/web/statics/image/index/xx.png",
-						key: "pintuan",
+						key: "",
 						link_url: "/pages/sale/news/news",
 						name: "我的消息",
 						open_type: "navigate",
+						dto:1
 					},
-					// {
-					// 	icon_url: "https://t17.9026.com/web/statics/image/index/m.png",
-					// 	key: "pintuan",
-					// 	link_url: "",
-					// 	name: "我的身份码",
-					// 	open_type: "navigate",
-					// },
 					{
 						icon_url: "https://t17.9026.com/web/statics/image/index/kf.png",
-						key: "pintuan",
+						key: "",
 						link_url: "",
 						name: "联系客服",
 						open_type: "tel",
@@ -159,6 +187,13 @@
 						link_url: "/pages/index/index",
 						name: "用户端",
 						open_type: "reLaunch",
+					},
+					{
+						icon_url: "https://t17.9026.com/web/statics/image/sale/sale_home.png",
+						key: "",
+						link_url: "",
+						name: "退出销售端",
+						open_type: "",
 					}
 				]
 			}
@@ -185,7 +220,7 @@
 				account_bar_status: function() {
 					return this.userCenter.account_bar ? this.userCenter.account_bar.status : 0;
 				},
-				info:state => state.user.info
+				info: state => state.user.info
 				// #ifdef H5
 				isWechat: function() {
 					return this.$jwx.isWechat();
@@ -278,7 +313,7 @@
 							let padding = '';
 							let arrow = require(
 								"https://shop.9026.com/web/statics/image/mall/static/icon/arrow-right.png"
-								);
+							);
 							if (true) {
 								let margin = uni.upx2px(16);
 								strImg =
@@ -364,27 +399,21 @@
 			// #ifdef H5
 			this.$jwx.config();
 			// #endif
-			if(!this.info.salesperson_info){
-				uni.redirectTo({
-					url:'/pages/sale/sale_login/sale_login'
-				})
-			}
 		},
-		onShow() {
+		async onShow() {
 			this.$event.on(this.$const.EVENT_USER_LOGIN).then(() => {
 				uni.redirectTo({
 					url: `/pages/user-center/user-center`
 				});
-			});
-			// if (this.$user.isLogin()) {
-			    this.$store.dispatch('user/refresh');
-			// }
+			})
+			this.refresh()
 			this.$nextTick().then(() => {
 				this.$store.dispatch('userCenter/data');
-				this.$store.dispatch('user/isEnterSales',true);
+				this.$store.dispatch('user/isEnterSales', true);
 			});
 		},
 		methods: {
+			...mapActions('user', ['refresh']),
 			// #ifdef H5
 			routerGo() {
 				uni.navigateTo({
@@ -392,8 +421,39 @@
 				});
 			},
 			// #endif
+			logout() {
+				uni.showModal({
+					title: '提示',
+					content: '确定退出销售端?',
+					success: (res) => {
+						if (res.confirm) {
+							this.$request({
+								url: this.$api.sale.logout,
+								method: 'post'
+							}).then(res => {
+								if (res.code === 0) {
+									uni.showToast({
+										title: '退出成功',
+										icon: 'none'
+									})
+									this.timer=setTimeout(()=>{
+										uni.reLaunch({
+											url:'/pages/index/index',
+										})
+									},1500)
+								}
+							})
+						} else if (res.cancel) {
+							console.log('用户点击取消');
+						}
+					}
+				});
 
+			}
 		},
+		onUnload() {
+			clearTimeout(this.timer)
+		}
 	}
 </script>
 
@@ -422,13 +482,26 @@
 				}
 
 				.arrow {
-					width: 42rpx;height: 42rpx;
+					width: 42rpx;
+					height: 42rpx;
 				}
-				.num{
+
+				.num {
 					font-size: 28rpx;
 					color: #999999;
 					margin-right: 32rpx;
 				}
+				.dto{
+					margin-right: 33rpx;
+					.red{
+						margin-top: 10rpx;
+						width: 16rpx;
+						height: 16rpx;
+						background: #FB122B;
+						border: 2rpx solid #FFFFFF;
+						border-radius: 50%;
+					}
+				}
 			}
 		}
 

+ 34 - 15
src/pages/sale/sale_login/sale_login.vue

xqd xqd xqd
@@ -8,7 +8,7 @@
 		<view class="login_form">
 			<view class="item">
 				<view class="title">手机号</view>
-				<input class="input" v-model="account" type="number" placeholder-class="plh_class" placeholder="请输入您的手机号" />
+				<input class="input" v-model="account" maxlength="11" type="number" placeholder-class="plh_class" placeholder="请输入您的手机号" />
 				<view class="b_line"></view>
 			</view>
 			<view class="item">
@@ -23,7 +23,7 @@
 </template>
 
 <script>
-	import {mapGetters} from 'vuex'
+	import {mapGetters,mapActions} from 'vuex'
 	export default {
 		data() {
 			return {
@@ -37,26 +37,45 @@
 			}),
 		},
 		methods:{
-			login(){
-				this.$request({
+			...mapActions('user',['refresh']),
+		 async login(){
+			 if(!this.$validation.mobile(this.account)){
+				 uni.showToast({
+				 	title:'手机号不合法',
+				 	icon:'none'
+				 })
+				 return
+			 }
+			 if(!this.password){
+				 uni.showToast({
+				 	title:'密码不能为空',
+				 	icon:'none'
+				 })
+				 return
+			 }
+				let loginRes=await this.$request({
 				    url: this.$api.sale.sale_login,
 				    data: {
 				        account:this.account,
 						password:this.password
 				    },
 				    method:'post'
-				}).then(res=>{
-					if(res.code===0){
-						uni.reLaunch({
-							url:'/pages/sale/sale-user-center'
-						})
-					}else{
-						uni.showToast({
-							title:res.msg,
-							icon:'none'
-						})
-					}
 				})
+				console.log(loginRes)
+				if(loginRes.code===0){
+					console.log('111')
+					await this.refresh()
+					console.log('userRes')
+					console.log('222')
+					uni.reLaunch({
+						url:'/pages/sale/sale-user-center'
+					})
+				}else{
+					uni.showToast({
+						title:loginRes.msg,
+						icon:'none'
+					})
+				}
 				
 			},
 			forgetPwd(){

+ 8 - 7
src/pages/search/search.vue

xqd xqd xqd
@@ -86,15 +86,15 @@
                             </view>
                         </view>
                     </template>
-                    <view style="background-color: #f7f7f7;padding: 0 20rpx;">
+                    <view style="background-color: #f7f7f7;padding: 20rpx 20rpx;">
 						<view class="item" v-for="(item,index) in CompositionList" :key="index" @click="$jump({'open_type':'navigate','url':`/pages/case/projectInfo?id=${item.id}`})">
 							<view class="main-between img">
 								<view style="width: 419rpx;height: 281rpx;">
-									<image style="width: 420rpx;height: 420rpx;" :src="item.cover_img" mode=""></image>
+									<image style="width: 434rpx;height: 434rpx;" :src="item.cover_img" mode=""></image>
 								</view>
-								<view style="width: 206rpx;">
-									<image style="width: 206rpx;height: 206rpx;" :src="item.banner_imgs[0].banner_imgs" mode=""></image>
-									<image style="width: 206rpx;height: 206rpx;" :src="item.banner_imgs[1].banner_imgs" mode=""></image>
+								<view style="width: 218rpx;">
+									<image style="width: 218rpx;height: 218rpx;" :src="item.banner_imgs[0].banner_imgs" mode=""></image>
+									<image style="width: 218rpx;height: 218rpx;" :src="item.banner_imgs[1].banner_imgs" mode=""></image>
 								</view>
 							</view>
 							<view class="main-between pl" >
@@ -389,7 +389,8 @@ export default {
 			        // mch_id: this.mch_id,
 					limit:10,
 			        page: page,
-			    }
+			    },
+				method:'post'
 			})
 			if (compositionList.code === 0) {
 			    if (page === 1) this.CompositionList = [];
@@ -672,7 +673,7 @@ export default {
         }
 		//composition
 		.item{
-			width: 678rpx;
+			width: 710rpx;
 			height: auto;
 			background: #FFFFFF;
 			border-radius: 8rpx;

+ 12 - 2
src/pages/user-center/about-mall/ComplaintsSuggestions.vue

xqd xqd xqd xqd
@@ -33,7 +33,8 @@
 		data() {
 			return {
 				content:'',
-				imgs:[]
+				imgs:[],
+				setTimer:'',
 			};
 		},
 		methods:{
@@ -55,7 +56,12 @@
 				}).then(res=>{
 					if(res.code===0){
 						uni.showToast({
-							title:'成功'
+							title:'提交成功',
+							success: () => {
+								this.setTimer=setTimeout(()=>{
+									uni.navigateBack()
+								},2000)	
+							}
 						})
 					}
 				})
@@ -64,6 +70,9 @@
 			imageEvent(e) {
 				this.imgs = e.imageList;
 			},
+		},
+		onHide() {
+			clearTimeout(this.setTimer)
 		}
 	}
 </script>
@@ -112,6 +121,7 @@
 			background: #F8F8F8;
 			border-radius: 6rpx;
 			margin: 24rpx auto 0;
+			padding: 10rpx;
 		}
 		/deep/.evalphlVal{
 			font-size: 28rpx;

+ 12 - 2
src/pages/user-center/about-mall/about-mall.vue

xqd
@@ -1,24 +1,34 @@
 <template>
 	<view class="main-center-y cross-center page">
-		<view class="i">
+		<view class="i" @click="goPage('/pages/user-center/about-mall/mallAgreement')">
 			商城协议<image src="../../../static/index/arrow-right-ewrte.png" mode=""></image>
 		</view>
 		<view class="i" @click="goPage('/pages/user-center/about-mall/ComplaintsSuggestions')">
 			投诉建议<image src="../../../static/index/arrow-right-ewrte.png" mode=""></image>
 		</view>
 		<view class="i">
-			联系客服<image src="../../../static/index/arrow-right-ewrte.png" mode=""></image>
+			<app-jump-button  form  :open_type="'tel'" url=""
+				:number="userInfo.service_phone" :arrangement="'row'">
+				联系客服<image src="../../../static/index/arrow-right-ewrte.png" mode=""></image>
+			</app-jump-button>
+			
 		</view>
 	</view>
 </template>
 
 <script>
+	import {mapState} from 'vuex'
 	export default {
 		data() {
 			return {
 				
 			};
 		},
+		computed:{
+			...mapState({
+				userInfo: state => state.user.info,
+			})
+		},
 		methods:{
 			goPage(url){
 				uni.navigateTo({url:url})

+ 29 - 0
src/pages/user-center/about-mall/mallAgreement.vue

xqd
@@ -0,0 +1,29 @@
+<template>
+	<view>
+		<view style="padding: 40rpx;" v-html="main_agreement"></view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				main_agreement:''
+			};
+		},
+		onLoad() {
+			this.$request({
+				url:this.$api.index.setting_list,
+				method:'post'
+			}).then(res=>{
+				if(res.code===0){
+					this.main_agreement=res.data.main_agreement
+				}
+			})
+		}
+	}
+</script>
+
+<style lang="scss">
+
+</style>

+ 167 - 115
src/pages/user-center/privacyAgreement/privacyAgreement.vue

xqd
@@ -1,140 +1,192 @@
 <template>
 	<view style="min-height: 100vh;background-color: #f0f2f5;">
-		<view v-html=""></view>
-		<button class="login-btn" v-if="content" @click="login">
-			立即登录
-		</button>
+		<view style="padding: 40rpx;" v-html="content"></view>
+		<view style="height: 200rpx;"></view>
+		<view class="login-btn-box">
+			<button class="main-center cross-center login-btn" :style="{'opacity':readUserAgreement?'1':'0.39'}"
+				v-if="content" @click="login">
+				<image style="width: 40rpx;height: 40rpx;margin-right: 10rpx;"
+					src="https://t17.9026.com/web/statics/image/index/wxlogin.png" mode=""></image>同意
+			</button>
+		</view>
 	</view>
 </template>
 
 <script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
 	export default {
 		data() {
 			return {
-				content:''
+				url:'',
+				content: ''
 			};
 		},
-		methods:{
-			login(e){
-				this.$store.commit("user/showLoginModal", false);
-				// #ifdef MP-TOUTIAO
-				this.getUserInfo(e);
+		computed: {
+			...mapState({
+				readUserAgreement: state => state.user.readUserAgreement
+			})
+		},
+		onReachBottom() {
+			this.$store.commit('user/readUserAgreement', true);
+		},
+		onLoad(option) {
+			this.url=option.url
+			this.$request({
+				url:this.$api.index.setting_list,
+				method:'post'
+			}).then(res=>{
+				if(res.code===0){
+					this.content=res.data.vice_agreement
+				}
+			})
+		},
+		methods: {
+			login(e) {
+				if (!this.readUserAgreement) {
+					uni.showToast({
+						title: '请阅读完用户隐私协议再登录',
+						icon: 'none'
+					})
+					return
+				}
+				uni.navigateBack()
+				// // #ifdef MP-TOUTIAO
+				// this.getUserInfo(e);
+				// // #endif
+				// // #ifdef MP-WEIXIN
+				// this.$user.getUserProfile(e).then(res => {
+				// 	console.log(res)
+				// 	this.getUserInfo(res);
+				// }).catch(res => {
+				// 	console.log(res)
+				// })
+				// // #endif
+			},
+			getUserInfo(e) {
+				// #ifdef H5
+				if (this.$jwx.isWechat()) {
+					this.$request({
+						url: this.$api.registered.url,
+						method: 'get',
+						data: {
+							scope: 'snsapi_userinfo',
+							response_type: 'code',
+							url: `${window.location.href}`
+						}
+					}).then(res => {
+						if (res.code === 0) {
+							this.$storage.setStorageSync('_USER_SIGN', true);
+							window.location.replace(res.data.url);
+						} else {
+							uni.navigateTo({
+								url: '/pages/registered/sign'
+							});
+						}
+					});
+				} else {
+					uni.navigateTo({
+						url: '/pages/registered/sign'
+					});
+				}
 				// #endif
+				// #ifdef MP
+				this.$store.commit('user/showLoginModal', false);
+				const resolve = this.$user.getUserInfoResolve;
+				const reject = this.$user.getUserInfoReject;
+				this.$event.on(this.$const.EVENT_USER_LOGIN, true).then(() => {
+					this.$jump({
+						open_type: 'redirect',
+						url:this.url
+					})
+				});
 				// #ifdef MP-WEIXIN
-				this.$user.getUserProfile(e).then(res => {
-					console.log(res)
-					this.getUserInfo(res);
-				}).catch(res => {
-					console.log(res)
-				})
+				if (e.detail.errMsg !== 'getUserInfo:ok') {
+					this.$store.commit('user/showLoginModal', true);
+					return reject(e.detail.errMsg);
+				} else {
+					return resolve(e);
+				}
+				// #endif
+
+				// #ifdef MP-ALIPAY
+				my.getOpenUserInfo({
+					success(openUserInfo) {
+						const response = JSON.parse(openUserInfo.response);
+						e.detail = {
+							rawData: JSON.stringify(response.response),
+							encryptedData: '',
+							iv: '',
+							signature: '',
+						};
+						return resolve(e);
+					},
+					fail(failE) {
+						console.log('getOpenUserInfo:', failE);
+					},
+				});
+				// #endif
+
+				// #ifdef MP-BAIDU
+				e.detail.rawData = JSON.stringify(e.detail.userInfo);
+				e.detail.encryptedData = '';
+				e.detail.iv = '';
+				e.detail.signature = '';
+				return resolve(e);
+				// #endif
+
+				// #ifdef MP-TOUTIAO
+				uni.login({
+					success() {
+						uni.getUserInfo({
+							success(result) {
+								e.detail = {
+									rawData: result.rawData,
+									encryptedData: '',
+									iv: '',
+									signature: '',
+								};
+								return resolve(e);
+							},
+							fail(e) {
+								console.log('getUserInfo fail:', e);
+							},
+						});
+					},
+					fail(e) {
+						console.log('login fail:', e);
+					},
+				});
+				// #endif
 				// #endif
-			},
-			getUserInfo(e) {
-			    // #ifdef H5
-			    if (this.$jwx.isWechat()) {
-			        this.$request({
-			            url: this.$api.registered.url,
-			            method: 'get',
-			            data: {
-			                scope: 'snsapi_userinfo',
-			                response_type: 'code',
-			                url: `${window.location.href}`
-			            }
-			        }).then(res => {
-			            if (res.code === 0) {
-			                this.$storage.setStorageSync('_USER_SIGN', true);
-			                window.location.replace(res.data.url);
-			            } else {
-			                uni.navigateTo({
-			                    url: '/pages/registered/sign'
-			                });
-			            }
-			        });
-			    } else {
-			        uni.navigateTo({
-			            url: '/pages/registered/sign'
-			        });
-			    }
-			    // #endif
-			    // #ifdef MP
-			    this.$store.commit('user/showLoginModal', false);
-			    const resolve = this.$user.getUserInfoResolve;
-			    const reject = this.$user.getUserInfoReject;
-			    this.$event.on(this.$const.EVENT_USER_LOGIN, true).then(() => {
-			        this.$jump({
-			            open_type: 'reload'
-			        })
-			    });
-			    // #ifdef MP-WEIXIN
-			    if (e.detail.errMsg !== 'getUserInfo:ok') {
-			        this.$store.commit('user/showLoginModal', true);
-			        return reject(e.detail.errMsg);
-			    } else {
-			        return resolve(e);
-			    }
-			    // #endif
-			
-			    // #ifdef MP-ALIPAY
-			    my.getOpenUserInfo({
-			        success(openUserInfo) {
-			            const response = JSON.parse(openUserInfo.response);
-			            e.detail = {
-			                rawData: JSON.stringify(response.response),
-			                encryptedData: '',
-			                iv: '',
-			                signature: '',
-			            };
-			            return resolve(e);
-			        },
-			        fail(failE) {
-			            console.log('getOpenUserInfo:', failE);
-			        },
-			    });
-			    // #endif
-			
-			    // #ifdef MP-BAIDU
-			    e.detail.rawData = JSON.stringify(e.detail.userInfo);
-			    e.detail.encryptedData = '';
-			    e.detail.iv = '';
-			    e.detail.signature = '';
-			    return resolve(e);
-			    // #endif
-			
-			    // #ifdef MP-TOUTIAO
-			    uni.login({
-			        success() {
-			            uni.getUserInfo({
-			                success(result) {
-			                    e.detail = {
-			                        rawData: result.rawData,
-			                        encryptedData: '',
-			                        iv: '',
-			                        signature: '',
-			                    };
-			                    return resolve(e);
-			                },
-			                fail(e) {
-			                    console.log('getUserInfo fail:', e);
-			                },
-			            });
-			        },
-			        fail(e) {
-			            console.log('login fail:', e);
-			        },
-			    });
-			    // #endif
-			    // #endif
 			},
 		}
 	}
 </script>
 
 <style lang="scss" scoped>
-	.login-btn{
+	.login-btn-box {
+		position: fixed;
+		bottom: 0rpx;
+		left: 50%;
+		transform: translateX(-50%);
+
+		width: 100%;
+		height: auto;
+		padding: 10rpx 0;
+		background-color: #fff;
+	}
+
+	.login-btn {
+		margin: 0 auto;
+
 		width: 678rpx;
 		height: 82rpx;
-		background: #EA554D;
-		border-radius: 41rpx;
+		background: #A18253;
+
+		border-radius: 2rpx;
 		margin: 20rpx auto;
 		text-align: center;
 		font-size: 30rpx;

+ 1 - 16
src/pages/user-center/user-center.vue

xqd xqd xqd xqd
@@ -5,9 +5,9 @@
 			background-color=""></app-nav-bar>
         <app-user-center-top
             :top-style="4"
-            
             :member-pic-url="userCenter.member_pic_url"
             :is_icon_super_vip="is_icon_super_vip"
+			:isRealname="userInfo.estate?true:false"
             user-name-color="#262626"
         ></app-user-center-top>
 
@@ -19,20 +19,7 @@
                     <view>{{item.name}}</view>
                 </view>
             </view>
-            <!-- <view class="u-line"></view> -->
         </view>
-
-        <!-- <view style="padding: 0 24rpx">
-            <app-vip-card></app-vip-card>
-        </view> -->
-
-        <!-- <app-account-balance
-            v-if="account_bar_status == 1"
-            :margin="true"
-            :round="true"
-            :input-user-center="userCenter"
-        ></app-account-balance> -->
-		<!-- <app-my-income></app-my-income> -->
         <app-my-order
             v-if="userCenter.is_order_bar_status == 1"
             :margin="true"
@@ -160,7 +147,6 @@
 						val.splice(1, 0, {icon_url:'',name:'我的优惠券'})
 						val.splice(2,1)
 						return val;
-						console.log(val)
 					}else{
 						return state.userCenter.data.foot_bar
 					}
@@ -334,7 +320,6 @@
             // #ifdef H5
             this.$jwx.config();
             // #endif
-			console.log('查看',this)
         },
         onShow() {
             this.$event.on(this.$const.EVENT_USER_LOGIN).then(() => {

+ 0 - 1
src/plugins/clerk/detail/detail.vue

xqd
@@ -231,7 +231,6 @@
         },
         methods: {
             showForm(e) {
-                console.log(e)
                 this.haveForm = e && e.length ? true : false
             },
             toClerk(id) {

+ 3 - 2
src/plugins/composition/components/app-bd-info/app-bd-info.vue

xqd xqd xqd
@@ -11,7 +11,7 @@
 							<text class="rmb">{{total}}</text>
 							<text class="decimal">.00</text>
 						</text>
-						<text class="price-line"><text>¥</text>{{info.min_composition_price}}</text>
+						<text class="price-line"><text v-if="info.min_composition_price">¥</text>{{info.min_composition_price}}</text>
 					</view>
 					<view class="main-between">
 						<view class="main-left">
@@ -108,6 +108,7 @@
 			text-decoration: line-through;
 			color: #999999;
 			line-height: 36rpx;
+			margin-left: 21rpx;
 		}
 		.tag{
 			width: auto;
@@ -117,7 +118,7 @@
 			font-size: 20rpx;
 			font-weight: 500;
 			color: #F59922;
-			line-height: 20rpx;
+			line-height: 24rpx;
 			margin-right: 13rpx;
 			padding: 0 9rpx;
 		}

+ 20 - 18
src/plugins/composition/components/app-list/app-list.vue

xqd xqd xqd xqd xqd xqd
@@ -2,11 +2,9 @@
     <view>
         <view class="app-list" :style="{'margin-top': `${top}rpx`}">
             <view class="app-item" v-for="(item,index) in list" :key="item.id">
-                
                 <view class="item-goods main-between" v-for="(goods,index1) in item.host_list" :key="goods.id">
-                   
                     <view class="main-left">
-						<image @click="toDetail(goods.goods_id)" class="goods-img" :src="goods.cover_pic"></image>
+						<image @click="toDetail(goods.goods_id,goods.mch_id)" class="goods-img" :src="goods.cover_pic"></image>
 						<view v-if="goods.stock == 0 || item.stock == 0" class="out-dialog">
 						    <image :src="appSetting.is_use_stock == '1' ? appImg.plugins_out : appSetting.sell_out_pic"></image>
 						</view>
@@ -24,14 +22,14 @@
 						        </view>
 						        <image class="item-good-attr-arrow" src="https://t17.9026.com/web/statics/image/index/arrow-right-A18353.png"></image>
 						    </view>
-							<view class="price"><text class="ought_price">¥{{goods.choose_attr?goods.choose_attr.price*goods.choose_attr.number:goods.min_price}}</text><text class="paid_price" v-show="goods.total_price>=0">实付:¥<text>{{goods.total_price}}</text></text></view>
+							<view class="price"><text class="ought_price">¥{{goods.choose_attr?goods.choose_attr.price*goods.goods_num:goods.min_price}}</text><text class="paid_price" v-show="goods.total_price>=0">实付:¥<text>{{goods.total_price}}</text></text></view>
 						</view>
 					</view>
-					<app-add-subtract :xStyle="2" :stock="goods.stock" :good_id="goods.id" :min="1" :value="goods.choose_attr.number" @change="addsubChange($event,goods,index,index1,0)"></app-add-subtract>
+					<app-add-subtract :xStyle="2" :stock="goods.stock" :good_id="goods.id" :min="1" :value="goods.goods_num" @change="addsubChange($event,goods,index,index1,0)"></app-add-subtract>
                 </view>                    
                 <view class="item-goods main-between" v-for="(goods,idx) in item.goods_list" :key="goods.id">
 					<view class="main-left">
-                    <image @click="toDetail(goods.goods_id)" class="goods-img" :src="goods.cover_pic"></image>
+                    <image @click="toDetail(goods.goods_id,goods.mch_id)" class="goods-img" :src="goods.cover_pic"></image>
                     <view v-if="goods.stock == 0 || item.stock == 0" class="out-dialog">
                         <image :src="appSetting.is_use_stock == '1' ? appImg.plugins_out : appSetting.sell_out_pic"></image>
                     </view>
@@ -51,10 +49,10 @@
                             </view>
                             <image class="item-good-attr-arrow" src="https://t17.9026.com/web/statics/image/index/arrow-right-A18353.png"></image>
                         </view>
-                        <view class="price"><text class="ought_price">¥{{goods.choose_attr?goods.choose_attr.price*goods.choose_attr.number:goods.min_price}}</text><text class="paid_price" v-show="goods.total_price>=0">实付:¥<text>{{goods.total_price}}</text></text></view>
+                        <view class="price"><text class="ought_price">¥{{goods.choose_attr?goods.choose_attr.price*goods.goods_num:goods.min_price}}</text><text class="paid_price" v-show="goods.total_price>=0">实付:¥<text>{{goods.total_price}}</text></text></view>
                     </view>
 					</view>
-					<app-add-subtract :xStyle="2" :stock="goods.stock" :good_id="goods.id" :min="0" :value="goods.choose_attr.number" @change="addsubChange($event,goods,index,idx,1)"></app-add-subtract>
+					<app-add-subtract :xStyle="2" :stock="goods.stock" :good_id="goods.id" :min="0" :value="goods.goods_num" @change="addsubChange($event,goods,index,idx,1)"></app-add-subtract>
                 </view>
                 <view class="app-price">
                     <template v-if="item.total_price && hidden">
@@ -163,12 +161,17 @@
             // 规格选择
             check({item}) {
                 this.checked = item;
-				console.log(this.checked)
             },
-            toDetail(id) {
-                uni.navigateTo({
-                    url: '/pages/goods/goods?id=' + id
-                });
+            toDetail(id,mch_id) {
+				if(mch_id){//供应商商品详情
+					uni.navigateTo({
+					    url: `/plugins/mch/goods/goods?id=${id}&mch_id=${mch_id}`
+					});
+				}else{
+					uni.navigateTo({
+					    url: '/pages/goods/goods?id=' + id
+					});
+				}
             },
             buyClick() {
                 let that = this;
@@ -232,7 +235,6 @@
                 that.checked = null;
             },
             chooseAttr(goods,index, type) {
-                console.log(goods)
                 this.goods = goods;
                 this.index = index;
                 this.attrShow = Math.random();
@@ -534,11 +536,11 @@
                         }
                         .item-good-attr-arrow {
                             position: absolute;
-                            right: #{8rpx};
+                            right: #{1rpx};
                             top: 50%;
-                            margin-top: #{-6rpx};
-                            height: #{15.1rpx};
-                            width: #{9.9rpx};
+                            transform: translateY(-50%);
+                            height: 21rpx;
+                            width: 23rpx;
                         }
                     }
                 }

+ 11 - 11
src/plugins/composition/detail/detail.vue

xqd xqd xqd xqd xqd xqd xqd
@@ -1,16 +1,17 @@
 <template>
 	<app-layout>
 		<app-bd-info v-if="list.length>0" @receive="receive" :info="list[0]" :coupons="goods_coupon_center" :total="total"></app-bd-info>
+		<view style="width: 678rpx;height: 1rpx;background-color: #EEEEEE;margin: 0 auto;"></view>
 		<!--商品优惠券-->
 		<bd-coupon @change="setCoupon" @on-show-change="val => {isCouponShow = val}" :isCustomEntry="true"
 			:myShow="isCouponShow" :theme="getTheme" :coupons="goods_coupon_center"></bd-coupon>
-		<view v-show="list.length>0"
-			style="font-size: 34rpx;font-weight: bold;color: #222222;line-height: 46rpx;padding:30rpx 0 0 35rpx;background-color: #fff;">
-			套内商品</view>
+		<view v-if="list.length>0"
+			style="font-size: 34rpx;font-weight: bold;color: #222222;line-height: 46rpx;padding:51rpx 0 0 35rpx;background-color: #fff;">
+			套内商品</view>
 		<app-list v-if="loading" :hidden="false" :top="0" :theme="getTheme" :list="list" v-on:update="update"
 			v-on:change="getTotal" v-on:updateList="updateList"></app-list>
 		<view class="list" v-if="other.length > 0">
-			<view class="title">其他套</view>
+			<view class="title">其他套</view>
 			<view v-for="(item, index) in other" :key="index" class="item dir-left-nowrap">
 				<app-composition :theme="getTheme" @click="choose(item)" @look="choose(item)" :item="item">
 				</app-composition>
@@ -43,9 +44,9 @@
 		</view>
 		<view class='no-tip' v-if="list.length == 0 && loading">
 			<image src="../image/pull-off.png"></image>
-			<view>您选购的套已下架</view>
+			<view>您选购的套已下架</view>
 			<view @click="toComposition" class="to-composition" :style="{'background-color': getTheme.background}">
-				逛逛套专区</view>
+				逛逛套专区</view>
 		</view>
 	</app-layout>
 </template>
@@ -213,7 +214,7 @@
 					}
 					// if (list[0].composition_list.length == 0) {
 					// 	uni.showToast({
-					// 		title: '请选择套',
+					// 		title: '请选择套',
 					// 		icon: 'none',
 					// 		duration: 1000
 					// 	});
@@ -237,8 +238,6 @@
 									list[0].goods_list.push(list[0].composition_list[j].goods_list[y])
 								}
 							}
-							console.log('this.list',this.list)
-							console.log('list',list)
 							let jump_url = `/pages/order-submit/order-submit?mch_list=${JSON.stringify(list)}`;
 							jump_url +=
 								`&preview_url=${encodeURIComponent(this.$api.composition.order_preview)}&submit_url=${encodeURIComponent(this.$api.composition.order_submit)}&plugin=composition`;
@@ -303,7 +302,7 @@
 								if (that.list[i].goods_list[idx].goods_attr.length == 1) {
 									// that.list[i].goods_list[idx].choose_attr = that.list[i].goods_list[idx]
 									// 	.goods_attr[0];
-									// that.list[i].goods_list[idx].choose_attr.number = 1;
+									that.list[i].goods_list[idx].choose_attr.number = that.list[i].goods_list[idx].goods_num;
 									// that.list[i].goods_list[idx].total_price = (+that.list[i].goods_list[idx]
 									// 	.choose_attr.price - +that.list[i].goods_list[idx].price).toFixed(2)
 								}
@@ -312,7 +311,7 @@
 										that.list[i].host_list[t].choose_attr = null;
 										if (that.list[i].host_list[t].goods_attr.length == 1) {
 											that.list[i].host_list[t].choose_attr = that.list[i].host_list[t].goods_attr[0];
-											that.list[i].host_list[t].choose_attr.number = 1;
+											that.list[i].host_list[t].choose_attr.number = that.list[i].host_list[t].goods_num;
 											that.list[i].host_list[t].total_price = (+that.list[i].host_list[t]
 												.choose_attr.price - +that.list[i].host_list[t].price).toFixed(2)
 										}
@@ -559,6 +558,7 @@
 			font-size: #{32rpx};
 			line-height: #{78rpx};
 			text-align: center;
+			margin: 0 auto;
 		}
 
 		.discount {

+ 717 - 0
src/plugins/mch/apply/apply.vue

xqd
@@ -0,0 +1,717 @@
+<template>
+    <app-layout>
+        <view v-if="status === -1 || form_status">
+            <view class="apply-com">基本信息</view>
+            <view class="white">
+                <view class="dir-left-nowrap cross-center form-input">
+                    <view class="box-grow-0 form-label main-right">联系人</view>
+                    <view class="box-grow-1">
+                        <input @input="applyInput"
+                               :disabled="form_status && status !== 2"
+                               data-type="realname"
+                               placeholder-class="plugins-mch-apply-input"
+                               placeholder="必填"
+                               name="realname"
+                               :value="form.realname"/>
+                    </view>
+                </view>
+                <view class="dir-left-nowrap cross-center form-input">
+                    <view class="box-grow-0 form-label main-right">联系电话</view>
+                    <view class="box-grow-1">
+                        <input @input="applyInput"
+                               :disabled="form_status && status !== 2"
+                               data-type="mobile"
+                               placeholder-class="plugins-mch-apply-input"
+                               placeholder="必填"
+                               name="mobile"
+                               :value="form.mobile"/>
+                    </view>
+                </view>
+                <view class="dir-left-nowrap cross-center form-input">
+                    <view class="box-grow-0 form-label main-right">微信号</view>
+                    <view class="box-grow-1">
+                        <input @input="applyInput"
+                               :disabled="form_status && status !== 2"
+                               data-type="wechat"
+                               placeholder="请填写微信号"
+                               placeholder-class="plugins-mch-apply-input"
+                               name="wechat"
+                               :value="form.wechat"/>
+                    </view>
+                </view>
+            </view>
+
+            <view class="apply-com">账号信息</view>
+            <view class="white">
+                <view class="dir-left-nowrap cross-center form-input">
+                    <view class="box-grow-0 form-label main-right">账号</view>
+                    <view class="box-grow-1">
+                        <input @input="applyInput"
+                               :disabled="form_status && status !== 2"
+                               data-type="username"
+                               placeholder-class="plugins-mch-apply-input"
+                               placeholder="必填"
+                               name="username"
+                               :value="form.username"/>
+                    </view>
+                </view>
+                <view class="dir-left-nowrap cross-center form-input">
+                    <view class="box-grow-0 form-label main-right">密码</view>
+                    <view class="box-grow-1">
+                        <input @input="applyInput"
+                               :disabled="form_status && status !== 2"
+                               password
+                               data-type="password"
+                               placeholder-class="plugins-mch-apply-input"
+                               placeholder="必填"
+                               name="password"
+                               :value="form.password"/>
+                    </view>
+                </view>
+                <view class="dir-left-nowrap cross-center form-input">
+                    <view class="box-grow-0 form-label main-right">确认密码</view>
+                    <view class="box-grow-1">
+                        <input @input="applyInput"
+                               :disabled="form_status && status !== 2"
+                               password
+                               data-type="checkPass"
+                               placeholder-class="plugins-mch-apply-input"
+                               placeholder="必填"
+                               name="checkPass"
+                               :value="form.checkPass"/>
+                    </view>
+                </view>
+            </view>
+
+            <view class="apply-com">店铺信息</view>
+            <view class="white">
+                <view class="dir-left-nowrap cross-center form-input">
+                    <view class="box-grow-0 form-label main-right">店铺名称</view>
+                    <view class="box-grow-1">
+                        <input @input="applyInput"
+                               :disabled="form_status && status !== 2"
+                               data-type="name"
+                               placeholder-class="plugins-mch-apply-input"
+                               placeholder="必填"
+                               name="name"
+                               :value="form.name"/>
+                    </view>
+                </view>
+                <view class="dir-left-nowrap cross-center form-input">
+                    <view class="box-grow-0 form-label main-right">所在地区</view>
+                    <view class="box-grow-1 area-left">
+                        <app-area-picker @customevent="areaEvent"
+                                         :ids="[area.province_id, area.city_id, area.district_id]"></app-area-picker>
+                    </view>
+                </view>
+                <view class="dir-left-nowrap cross-center form-input">
+                    <view class="box-grow-0 form-label main-right">详细地址</view>
+                    <view class="box-grow-1">
+                        <input @input="applyInput"
+                               :disabled="form_status && status !== 2"
+                               data-type="address"
+                               placeholder-class="plugins-mch-apply-input"
+                               placeholder="必填"
+                               name="address"
+                               :value="form.address"/>
+                    </view>
+                </view>
+                <view class="dir-left-nowrap cross-center form-input">
+                    <view class="box-grow-0 form-label main-right">客服电话</view>
+                    <view class="box-grow-1">
+                        <input @input="applyInput"
+                               :disabled="form_status && status !== 2"
+                               data-type="service_mobile"
+                               placeholder-class="plugins-mch-apply-input"
+                               placeholder="必填"
+                               name="service_mobile"
+                               :value="form.service_mobile"/>
+                    </view>
+                </view>
+                <view class="dir-left-nowrap cross-center form-input">
+                    <view class="box-grow-0 form-label main-right">所售类目</view>
+                    <view class="box-grow-1">
+                        <picker :disabled="form_status && status !== 2"
+                                :range="category_list" range-key="name" class="category-picker"
+                                :value="form.mch_common_cat_id" @change="categoryChange">
+                            <view class="cross-center dir-left-nowrap category-info">
+                                <view class="box-grow-1 category-select">
+                                    {{form.mch_common_cat_str?form.mch_common_cat_str:`请选择`}}
+                                </view>
+                                <view class="box-grow-0 cross-center">
+                                    <icon class="icon-arrow-right" type></icon>
+                                </view>
+                            </view>
+                        </picker>
+                    </view>
+                </view>
+            </view>
+
+            <block v-if="form_data && form_data.length && (setting.status === '1' || status >= 0)">
+                <!-- 自定义表单-->
+                <app-diy-form title="其他信息" :list="form_data" sign="mch" @input="hangleForm"
+                              @validate="validateForm"></app-diy-form>
+            </block>
+
+            <block v-if="!form_status || status === 2">
+                <view class="dir-left-nowrap cross-center rules-box">
+                    <view v-if="rulesStatus" class="icon" @click="rulesTap(false)">
+                        <view class="icon-true" type></view>
+                    </view>
+                    <view v-else class="icon" @click="rulesTap(true)">
+                        <view class="icon-false" type></view>
+                    </view>
+                    <view class="block">我已阅读并同意</view>
+                    <view @click="navApplyRules" class="blue">《入驻协议》</view>
+                </view>
+                <view class="main-center submit-btn" v-if="status === -1 || status === 2">
+                    <app-button @click="formSubmit" height="80" width="702" font-size="32" background="#ff4544"
+                                color="#FFFFFF" round>提交
+                    </app-button>
+                </view>
+            </block>
+
+            <view v-if="form_status" class="cross-center dir-top-nowrap main-center">
+                <view @click="closeForm" class="result-title">查看审核结果</view>
+                <view @click="navHome" class="result-home">返回首页</view>
+            </view>
+        </view>
+
+        <!-- STATUS -->
+        <block v-if="status >=0 && !form_status">
+            <view class="dir-top-nowrap main-center cross-center">
+                <view class="main-center form-img">
+                    <image v-if="status === 0" :src="appImg.load"></image>
+                    <image v-else-if="status === 1" :src="appImg.success"></image>
+                    <image v-else-if="status === 2" :src="appImg.error"></image>
+                </view>
+                <view class="status-title">
+                    <view v-if="status === 0">待审核</view>
+                    <view v-else-if="status === 1">审核通过</view>
+                    <view v-else-if="status === 2">审核失败</view>
+                </view>
+                <view class="status-content">
+                    <view v-if="status === 0">您的信息已提交,请耐心等待审核。</view>
+                    <block v-else-if="status === 2">
+                        <view v-if="mch.review_remark">{{mch.review_remark}}</view>
+                        <view v-else>您的信息填写不完整,请重新填写</view>
+                    </block>
+                </view>
+                <view v-if="status === 2" class="status-new main-center">
+                    <app-button @click="openForm" height="80" width="560" background="#FF4544" color="#FFFFFF"
+                                font-size="32" round>重新申请
+                    </app-button>
+                </view>
+                <view v-else class="status-submit" @click="openForm">查看提交内容</view>
+            </view>
+        </block>
+
+    </app-layout>
+</template>
+
+<script>
+import {mapState} from 'vuex';
+import appAreaPicker from '../../../components/page-component/app-area-picker/app-area-picker';
+import appDiyForm from '../../../components/page-component/app-diy-form/app-diy-form';
+
+export default {
+    name: "apply",
+    components: {appAreaPicker, appDiyForm},
+    computed: {
+        ...mapState({
+            appImg: state => state.mallConfig.plugin.mch.app_image,
+        }),
+    },
+    data() {
+        return {
+            mch_id: -1,
+                category_list: [],
+                express_list: null,
+                form_data: null,
+                form_status: false,
+                rulesStatus: false,
+                area: {
+                    province_id: 0,
+                    city_id: 0,
+                    district_id: 0,
+                },
+                setting: {},
+                status: -2,
+                form: {
+                    realname: '',
+                    mobile: '',
+                    wechat: '',
+                    username: '',
+                    password: '',
+                    checkPass: '',
+                    address: '',
+                    name: '',
+                    service_mobile: '',
+                    mch_common_cat_str: '',
+                    mch_common_cat_id: 0,
+                },
+                formStatus: {
+                    errors: [],
+                    hasError: false,
+                },
+                submit_status: false,
+                template_message_list: null,
+            }
+        },
+        onLoad(options) { this.$commonLoad.onload(options);
+            this.mch_id = options.mch_id;
+            this.getCategory();
+        },
+
+        methods: {
+            hangleForm({data}) {
+                this.form.form_data = data;
+            },
+            navApplyRules() {
+                // uni.navigateTo({url: `/plugins/mch/apply_rules/apply_rules`});
+                uni.navigateTo({
+                    url: `/pages/rules/index?url=${encodeURIComponent(this.$api.mch.setting)}&keys=${JSON.stringify(['setting', 'desc'])}`,
+                });
+            },
+            navHome() {
+                uni.navigateTo({url: `/pages/index/index`});
+            },
+            loadData: function () {
+                const self = this;
+                self.$showLoading();
+                self.$request({
+                    url: self.$api.mch.mch_status,
+                }).then(info => {
+                    self.$hideLoading();
+                    if (info.code === 0) {
+                        self.mch = info.data.mch;
+                        self.status = self.mch ? self.mch.review_status : -1;
+                        self.template_message_list = info.data.template_message_list;
+                        if (self.mch) {
+                            self.formInfo(self.mch.id);
+                            if (self.mch.status == 1) {
+                                //缓存
+                                this.$storage.setStorageSync("MCH2019", info.data);
+                            }
+                        } else {
+                            self.getSetting();
+                        }
+                    }
+                }).catch(e => {
+                    self.$hideLoading();
+                })
+            },
+
+            //FUNCTION
+            getCategory: function () {
+                const self = this;
+                self.$request({
+                    url: self.$api.mch.category,
+                    data: {
+                        id: self.mch_id,
+                    }
+                }).then(info => {
+                    if (info.code === 0) {
+                        self.category_list = info.data.list;
+                        self.loadData();
+                    }
+                });
+            },
+
+            getExpress: function () {
+                const self = this;
+                self.$request({
+                    url: self.$api.mch.express_list,
+                }).then(info => {
+                    if (info.code === 0) {
+                        self.express_list = info.data.list;
+                    }
+                });
+            },
+
+            getSetting: function () {
+                const self = this;
+                self.$request({
+                    url: self.$api.mch.setting,
+                }).then(info => {
+                    self.$hideLoading();
+                    if (info.code === 0) {
+                        self.setting = info.data.setting;
+                        self.form_data = info.data.setting.form_data;
+                    }
+                });
+            },
+
+            //INFO
+            formInfo(mch_id) {
+                const self = this;
+                self.getExpress();
+
+                self.$request({
+                    url: self.$api.mch.detail,
+                    data: {
+                        id: mch_id,
+                        is_review_status: 1,
+                    }
+                }).then(info => {
+                    if (info.code === 0) {
+                        const detail = info.data.detail;
+
+                        let mch_common_cat_str = '';
+                        self.category_list.forEach(v => {
+                            if (v.id == detail.mch_common_cat_id)
+                                mch_common_cat_str = v.name
+                        });
+
+                        if (self.status === 2) {
+                            self.getSetting();
+                        }
+
+                        //表单处理
+                        if (self.status === 0 || self.status === 1) {
+                            let form_data = [];
+                            if (detail.form_data && detail.form_data.length) {
+                                detail.form_data.map(v => {
+                                    let list = [];
+                                    if (v.key === 'checkbox') {
+                                        v.value = v.value ? v.value: [];
+                                        v.value.map(v => {
+                                            list.push({label: v});
+                                        })
+                                    }
+                                    if (v.key === 'radio') {
+                                        list.push({label: v.value});
+                                    }
+                                    form_data.push({
+                                        key: v.key,
+                                        name: v.key_name,
+                                        default: v.value,
+                                        is_required: v.required,
+                                        img_type: v.img_type,
+                                        list: list,
+                                    })
+                                });
+                            }
+                            self.form_data = form_data;
+                        }
+
+                        self.form = {
+                            mch_id: detail.id,
+                            realname: detail.realname,
+                            mobile: detail.mobile,
+                            wechat: detail.wechat,
+                            username: detail.mchUser.username,
+                            password: '000000',
+                            checkPass: '000000',
+                            address: detail.store.address,
+                            name: detail.store.name,
+                            service_mobile: detail.store.mobile,
+                            mch_common_cat_str: mch_common_cat_str,
+                            mch_common_cat_id: detail.mch_common_cat_id,
+                        };
+
+                        self.area = {
+                            province_id: detail.store.province_id,
+                            city_id: detail.store.city_id,
+                            district_id: detail.store.district_id,
+                        };
+                    }
+                });
+            },
+
+            //INPUT
+            applyInput: function (e) {
+                let name = e.currentTarget.dataset.type;
+                this.form[name] = e.detail.value;
+            },
+
+            categoryChange(e) {
+                const item = this.category_list[e.detail.value];
+
+                this.form.mch_common_cat_id = item.id;
+                this.form.mch_common_cat_str = item.name;
+            },
+
+            //地址处理
+            areaEvent(data) {
+                if (data) {
+                    this.area.province_id = data.province.id;
+                    this.area.city_id = data.city.id;
+                    this.area.district_id = data.district.id;
+                }
+            },
+
+            validateForm: function ({result}) {
+                this.formStatus = result;
+            },
+            subscribe(callback) {
+                this.$subscribe(this.template_message_list).then(() => {
+                    callback();
+                }).catch(() => {
+                    callback();
+                });
+            },
+            //SUBMIT
+            formSubmit: function () {
+                const self = this;
+                let form = self.form;
+                let area = self.area;
+                let rulesStatus = self.rulesStatus;
+
+                let content = function () {
+                    if (!rulesStatus) {
+                        return '请同意入驻协议';
+                    }
+                    if (!form.realname) {
+                        return "联系人不能为空";
+                    }
+                    if (!form.mobile) {
+                        return "联系电话不能为空";
+                    }
+                    if (!form.username) {
+                        return "账号不能为空";
+                    }
+                    if (!form.password) {
+                        return "密码不能为空";
+                    }
+                    if (!form.mch_common_cat_id) {
+                        return "类目不能为空";
+                    }
+                    if (form.password !== form.checkPass) {
+                        return "密码不一致";
+                    }
+                    if (!form.name) {
+                        return "店铺名称不能为空";
+                    }
+                    if (self.formStatus.hasError) {
+                        return self.formStatus.errors[0].msg;
+                    }
+                    if (self.submit_status) {
+                        return "提交中";
+                    }
+                    return false;
+                }();
+
+                if (content) {
+                    uni.showToast({title: content, icon: 'none'});
+                    return;
+                }
+                self.subscribe(() => {
+                    self.$showLoading({text: `提交中`});
+                    self.submit_status = true;
+                    self.$request({
+                        url: self.$api.mch.apply,
+                        data: {
+                            id: form.mch_id ? form.mch_id : 0,
+                            realname: form.realname,
+                            mobile: form.mobile,
+                            wechat: form.wechat,
+                            username: form.username,
+                            password: form.password,
+                            name: form.name,
+                            province_id: area.province_id,
+                            city_id: area.city_id,
+                            district_id: area.district_id,
+                            mch_common_cat_id: form.mch_common_cat_id,
+                            address: form.address,
+                            service_mobile: form.service_mobile,
+                            form_data: form.form_data ? JSON.stringify(form.form_data) : JSON.stringify([]),
+                            is_update_apply: self.status === 2 ? 1 : 0,
+                        },
+                        method: 'POST',
+                    }).then(info => {
+                        self.submit_status = false;
+                        self.$hideLoading();
+                        if (info.code === 0) {
+                            self.loadData();
+                            self.form_status = false;
+                        } else {
+                            uni.showToast({title: info.msg, icon: 'none'});
+                        }
+                    }).catch(e => {
+                        self.submit_status = false;
+                    })
+                })
+            },
+
+            rulesTap: function (status) {
+                this.rulesStatus = status;
+            },
+
+            closeForm() {
+                this.form_status = false;
+            },
+
+            openForm() {
+                this.form_status = true;
+            },
+        }
+    }
+</script>
+
+<style lang="scss">
+    .plugins-mch-apply-input {
+        color: #bbb;
+        font-size: #{28rpx};
+    }
+</style>
+<style scoped lang="scss">
+    .apply-com {
+        padding-top: #{30rpx};
+        padding-left: #{24rpx};
+        height: #{72rpx};
+        color: #999;
+        font-size: #{26rpx};
+        background: #f7f7f7;
+        width: 100%;
+    }
+
+    .white {
+        background: #FFFFFF;
+
+        .form-input {
+            margin: 0 #{24rpx};
+            border-bottom: 1px solid #e2e2e2;
+            height: #{100rpx}
+        }
+
+        input {
+            height: 100%;
+            padding: 0 #{32rpx};
+            color: #666666;
+            font-size: #{28rpx};
+        }
+
+        .form-label {
+            padding-left: #{3rpx};
+            font-size: #{28rpx};
+            color: #353535;
+            min-width: #{125rpx};
+        }
+
+        > view:last-child {
+            border-bottom: none;
+        }
+
+        .icon-arrow-right {
+            background-image: url("https://shop.9026.com/web/statics/image/mall/static/icon/arrow-right.png");
+            height: #{22rpx};
+            width: #{12rpx};
+            background-size: 100% auto;
+            background-repeat: no-repeat;
+        }
+
+        .area-left {
+            padding-left: #{32rpx};
+            text-align: right;
+            margin-left: auto;
+        }
+
+        .category-picker {
+            height: 100%;
+            width: 100%;
+        }
+
+        .category-info {
+            height: 100%;
+            width: 100%;
+            min-height: #{98rpx};
+        }
+
+        .category-select {
+            font-size: #{28rpx};
+            color: #666666;
+            text-align: right;
+            padding-right: #{24rpx};
+        }
+    }
+
+    .rules-box {
+        background: #f7f7f7;
+        margin: #{32rpx} #{24rpx};
+        font-size: #{28rpx};
+
+        .icon {
+            height: #{32rpx};
+            width: #{32rpx};
+            margin-right: #{16rpx};
+        }
+
+        .icon-true {
+            height: #{32rpx};
+            width: #{32rpx};
+            background-repeat: no-repeat;
+            background-image: url("../image/apply-ok.png");
+            background-size: 100% 100%;
+        }
+
+        .icon-false {
+            height: #{32rpx};
+            width: #{32rpx};
+            background-repeat: no-repeat;
+            background-image: url("../image/apply-er.png");
+            background-size: 100% 100%;
+        }
+
+        .block {
+            color: #353535;
+        }
+
+        .blue {
+            color: #5292ed;
+        }
+    }
+
+    .submit-btn {
+        margin-top: #{52rpx - 32rpx};
+        margin-bottom: #{24rpx};
+    }
+
+    .result-title {
+        color: #387ee8;
+        font-size: #{28rpx};
+        margin-top: #{32rpx};
+    }
+
+    .result-home {
+        color: #666;
+        font-size: #{28rpx};
+        padding: #{24rpx};
+    }
+
+    .form-img {
+        width: 100%;
+        margin-top: #{150rpx};
+        margin-bottom: #{72rpx};
+
+        image {
+            height: #{270rpx};
+            width: #{380rpx};
+        }
+    }
+
+    .status-title {
+        font-size: #{36rpx};
+        color: #666666;
+    }
+
+    .status-content {
+        margin-top: #{24rpx};
+        color: #666666;
+        width: #{560rpx};
+
+        view {
+            text-align: center;
+        }
+    }
+
+    .status-new {
+        margin-top: #{88rpx};
+    }
+
+    .status-submit {
+        color: #5292ed;
+        font-size: #{28rpx};
+        margin-top: #{66rpx};
+    }
+</style>

+ 520 - 0
src/plugins/mch/cat/cat.vue

xqd
@@ -0,0 +1,520 @@
+<template>
+    <view class="app-layout">
+        <app-layout>
+            <template v-if="cat_style === `1`">
+                <view class="app-body dir-top-nowrap">
+                    <view class="app-item" v-for="(item, index) in list" :key="index">
+                        <app-jump-button 
+                            form 
+                            open_type="navigate" 
+                            :url="item.page_url"
+                        >
+                            <view class="app-image" 
+                                :style="{backgroundImage: `url(${item.big_pic_url})`}"
+                            ></view>
+                        </app-jump-button>
+                    </view>
+                </view>
+            </template>
+            <template v-else-if="cat_style === `2`">
+                <view class="app-left-right dir-left-nowrap">
+                    <app-category-list 
+                        @click="activeThree" 
+                        :windowHeight="windowHeight" 
+                        :windowWidth="windowWidth"
+                        :botHeight="botHeight" 
+                        :height="height" 
+                        :noSetHeight="setHeight"
+                        :list="list"
+                    ></app-category-list>
+                    <scroll-view scroll-y class="app-right" :style="{height: `${setHeight}`}" style="padding-top:20rpx">
+                        <image class="app-background" :src="list[activeIndex].advert_pic"
+                               v-if="list[activeIndex].advert_pic"></image>
+                        <view class="app-item" v-for="(item, index) in list[activeIndex].child" :key="index">
+                            <app-jump-button form open_type="navigate" :url="item.page_url">
+                                <image :src="item.big_pic_url" class="app-image"></image>
+                            </app-jump-button>
+                        </view>
+                    </scroll-view>
+                </view>
+            </template>
+            <template v-else-if="cat_style === `3`">
+                <view class="app-small dir-left-wrap">
+                    <view class="app-item" v-for="(item, index) in list" :key="index">
+                        <app-jump-button arrangement="column" form open_type="navigate" :url="item.page_url">
+                            <image class="app-image" :src="item.pic_url"></image>
+                            <text class="app-name" style="text-align: center">{{item.name}}</text>
+                        </app-jump-button>
+                    </view>
+                </view>
+            </template>
+            <template v-else-if="cat_style === `4`">
+                <view class="app-left-right-t dir-left-nowrap">
+                    <app-category-list :windowHeight="windowHeight" :windowWidth="windowWidth" :botHeight="botHeight"
+                                       @click="activeThree" :height="height" :noSetHeight="setHeight"
+                                       :list="list"></app-category-list>
+                    <scroll-view scroll-y class="app-right" :style="{height: `${setHeight}`}"
+                                 style="padding-top: 20rpx">
+                        <image class="app-background" :src="list[activeIndex].advert_pic"
+                               v-if="list[activeIndex].advert_pic"></image>
+                        <view class="app-item" v-for="(item, index) in list[activeIndex].child" :key="index">
+                            <app-jump-button arrangement="column" form open_type="navigate" :url="item.page_url">
+                                <image :src="item.pic_url" class="app-image"></image>
+                                <text class="app-name">{{item.name}}</text>
+                            </app-jump-button>
+                        </view>
+                    </scroll-view>
+                </view>
+            </template>
+            <template v-else-if="cat_style === `6`">
+                <view class="app-left-right-f dir-left-nowrap">
+                    <app-category-list :windowHeight="windowHeight" :windowWidth="windowWidth" :botHeight="botHeight"
+                                       @click="activeThree" :height="height" :noSetHeight="setHeight"
+                                       :list="list"></app-category-list>
+                    <scroll-view scroll-y class="app-right" :style="{height: `${setHeight}`}">
+                        <image class="app-background" :src="list[activeIndex].advert_pic"
+                               v-if="list[activeIndex].advert_pic"></image>
+                        <view class="app-item" v-for="(item, index) in list[activeIndex].child" :key="index">
+                            <view class="app-top">
+                                <app-jump-button arrangement="left" form open_type="navigate" :url="item.page_url">
+                                    <text class="app-text">{{item.name}}</text>
+                                    <view class="app-icon dir-left-nowrap cross-center">
+                                        <text>更多</text>
+                                        <icon type></icon>
+                                    </view>
+                                </app-jump-button>
+                            </view>
+                            <view v-for="(a, i)  in item.child" :key="i">
+                                <app-jump-button form open_type="navigate" :url="a.page_url">
+                                    <image :src="a.big_pic_url" class="app-image"></image>
+                                </app-jump-button>
+                            </view>
+                        </view>
+                    </scroll-view>
+                </view>
+            </template>
+            <template v-else-if="cat_style === `7`">
+                <view class="app-left-right-s  dir-left-nowrap">
+                    <app-category-list 
+                        :windowHeight="windowHeight" 
+                        :windowWidth="windowWidth" 
+                        :botHeight="botHeight"
+                        @click="activeThree" 
+                        :height="height"
+                        :noSetHeight="setHeight"
+                        :list="list"
+                    ></app-category-list>
+                    <scroll-view
+                        scroll-y
+                        class="app-right"
+                        :style="{height: `${setHeight}`}"
+                        style="padding-top: 20rpx"
+                    >
+                        <image lazy-load class="app-background" 
+                            :src="list[activeIndex].advert_pic"
+                            v-if="list[activeIndex].advert_pic"
+                        ></image>
+                        <view class="app-item" v-for="(item, index) in list[activeIndex].child" :key="index">
+                            <view class="app-top">
+                                <app-jump-button arrangement="left" form open_type="navigate" :url="item.page_url">
+                                    <text class="app-text">{{item.name}}</text>
+                                    <view class="app-icon dir-left-nowrap cross-center">
+                                        <text>更多</text>
+                                        <icon type></icon>
+                                    </view>
+                                </app-jump-button>
+                            </view>
+                            <view class="app-item-child" v-for="(a, i)  in item.child" :key="i">
+                                <app-jump-button arrangement="column" form open_type="navigate" :url="a.page_url">
+                                    <image :src="a.pic_url" class="app-image"></image>
+                                    <text class="app-text">{{a.name}}</text>
+                                </app-jump-button>
+                            </view>
+                        </view>
+                    </scroll-view>
+                </view>
+            </template>
+        </app-layout>
+    </view>
+</template>
+
+<script>
+    import {mapGetters, mapState} from 'vuex';
+    import appCategoryList from '../../../components/page-component/app-category-list/app-category-list.vue';
+
+    export default {
+        components: {
+            'app-category-list': appCategoryList,
+        },
+        data() {
+            return {
+                scrollTop: 0,
+                list: [],
+                goods: [],
+                request: true,
+                page: 1,
+                classId: 0,
+                activeIndex: 0,
+                activeIndexTwo: 0,
+                height: 0,
+                over: false,
+                scrollHeight: 0,
+                mch_id: 0,
+                cat_style: 0,
+                cat_id: 0,
+            }
+        },
+        computed: {
+            ...mapGetters('mallConfig', {
+                tabBarNavs: 'getNavBar'
+            }),
+            ...mapState('gConfig', {
+                windowHeight: state => state.systemInfo.windowHeight,
+                windowWidth: state => state.systemInfo.windowWidth,
+            }),
+            ...mapGetters('iPhoneX', {
+                botHeight: 'getBotHeight'
+            }),
+            setHeight() {
+                return this.windowHeight + 'px';
+            }
+        },
+        onReachBottom() {
+
+        },
+        /**
+         * 生命周期函数--监听页面加载
+         */
+        onLoad(options) { this.$commonLoad.onload(options);
+            const self = this;
+            self.mch_id = options.mch_id;
+            self.$request({
+                url: self.$api.mch.cat_style,
+                data: {
+                    mch_id: self.mch_id,
+                }
+            }).then(info => {
+                if (info.code === 0) {
+                    self.cat_style = info.data.setting.cat_style;
+                    self.loadData();
+                }
+            });
+        },
+        methods: {
+            loadData: function () {
+                const self = this;
+                self.$showLoading();
+                self.$request({
+                    url: self.$api.mch.cats_list,
+                    data: {
+                        mch_id: self.mch_id,
+                        cat_id: self.cat_id
+                    }
+                }).then(info => {
+                    self.$hideLoading();
+                    if (info.code === 0) {
+                        self.list = info.data.list
+                    }
+                }).catch(info => {
+                    self.$hideLoading();
+                })
+            },
+            // 点击导航栏
+            active(item) {
+                this.page = 1;
+                uni.showLoading({
+                    text: '加载中...',
+                    mask: true
+                });
+                for (let i = 0; i < this.list.length; i++) {
+                    if (this.list[i].active !== item.active) {
+                        this.list[i].active = false;
+                    }
+                    if (this.list[i].id === item.id) {
+                        this.list[i].active = true;
+                    }
+                }
+                this.$request({
+                    url: `${this.$api.default.goods_list}&page=${this.page}&cat_id=${item.id}`
+                }).then(response => {
+                    uni.hideLoading();
+                    this.goods = response.data.list;
+                    this.page = 1;
+                    this.classId = item.id;
+                    this.over = false;
+                });
+                this.over = false;
+            },
+            // 下拉分页请求
+            req() {
+                this.$request({
+                    url: `${this.$api.default.goods_list}&page=${this.page}&cat_id=${this.classId}`
+                }).then(response => {
+                    if (response.data.list.length > 0) {
+                        this.goods.push(...response.data.list);
+                    } else {
+                        this.over = true;
+                    }
+                    uni.hideLoading();
+                });
+            },
+            activeThree(item) {
+                for (let i = 0; i < this.list.length; i++) {
+                    if (this.list[i].active !== item.active) {
+                        this.list[i].active = false;
+                    }
+                    if (this.list[i].id === item.id) {
+                        this.list[i].active = true;
+                        this.activeIndex = i;
+                    }
+                }
+            }
+        },
+    }
+</script>
+<style lang="scss" scoped>
+    .app-layout {
+        background: white;
+        min-height: 100vh;
+    }
+    .app-body {
+        width: #{750rpx};
+        background-color: white;
+        padding: 0 #{24rpx} #{24rpx} #{24rpx};
+        .app-item {
+            width: #{702rpx};
+            height: #{212rpx};
+            margin-top: #{20rpx};
+            .app-image {
+                background-size: 100% 100%;
+                background-repeat: no-repeat;
+                width: 100%;
+                height: 100%;
+            }
+        }
+    }
+    .app-small {
+        width: $screen-width;
+        padding: 0 #{27rpx};
+        background-color: white;
+        .app-item {
+            width: #{120rpx};
+            margin: #{64rpx} #{27rpx} 0 #{27rpx};
+            .app-image {
+                width: #{120rpx};
+                height: #{120rpx};
+                margin-bottom: #{20rpx};
+            }
+            .app-name {
+                color: #353535;
+                font-size: #{26rpx};
+                width: 100%;
+                word-break: break-all;
+                text-overflow: ellipsis;
+                display: -webkit-box;
+                -webkit-box-orient: vertical;
+                -webkit-line-clamp: 1;
+                overflow: hidden;
+            }
+        }
+    }
+    .app-top {
+        width: $screen-width;
+    }
+
+    .app-top-t {
+        width: $screen-width;
+        background: white;
+
+        .app-t {
+            width: 100%;
+            padding-top: #{24rpx};
+            padding-left: #{24rpx};
+
+            > text {
+                margin-bottom: #{20rpx};
+            }
+
+            .app-text {
+                border: #{1rpx} solid #cccccc;
+                font-size: #{28rpx};
+                color: #666666;
+                padding: 0 #{28rpx};
+                display: inline-block;
+                height: #{54rpx};
+                line-height: #{54rpx};
+                margin-right: #{24rpx};
+                border-radius: #{28rpx};
+            }
+
+            .app-active-color {
+                color: #ff4544;
+                border: #{1rpx} solid #ff4544;
+            }
+        }
+    }
+    .app-left-right {
+        width: $screen-width;
+        background: #ffffff;
+        .app-right {
+            width: #{524rpx};
+            margin-left: #{22rpx};
+            .app-background {
+                width: #{500rpx};
+                height: #{184rpx};
+                margin: #{20rpx} #{24rpx} #{20rpx} 0;
+            }
+
+            .app-item {
+                margin-left: #{2rpx};
+                height: #{158rpx};
+                width: #{524rpx};
+                margin-bottom: #{20rpx};
+
+                .app-image {
+                    height: #{158rpx};
+                    width: #{524rpx};
+                }
+            }
+        }
+    }
+    .app-left-right-t {
+        width: $screen-width;
+        background: white;
+        .app-right {
+            width: #{546rpx};
+            .app-background {
+                width: #{500rpx};
+                height: #{184rpx};
+                margin: #{20rpx} #{24rpx} #{20rpx} #{24rpx};
+            }
+            .app-item {
+                width: #{182rpx};
+                height: #{138rpx};
+                display: inline-block;
+                margin-bottom: #{40rpx};
+                .app-image {
+                    height: #{104rpx};
+                    width: #{104rpx};
+                }
+                .app-name {
+                    font-size: #{26rpx};
+                    margin-top: #{8rpx};
+                    color: #353535;
+                    word-break: break-all;
+                    text-overflow: ellipsis;
+                    display: -webkit-box;
+                    -webkit-box-orient: vertical;
+                    -webkit-line-clamp: 1;
+                    overflow: hidden;
+                }
+            }
+        }
+    }
+    .app-left-right-f {
+        width: $screen-width;
+        background: white;
+        .app-right {
+            width: #{524rpx};
+            margin-left: #{22rpx};
+            .app-background {
+                width: #{500rpx};
+                height: #{184rpx};
+                margin: #{20rpx} #{24rpx} #{20rpx} 0;
+            }
+            .app-item {
+                margin-left: #{2rpx};
+                width: #{524rpx};
+                .app-image {
+                    width: #{524rpx};
+                    height: #{158rpx};
+                    margin-bottom: #{20rpx};
+                }
+
+                .app-top {
+                    position: relative;
+                    width: #{524rpx};
+                    margin: #{20rpx} 0 #{40rpx} 0;
+                }
+                .app-text {
+                    font-size: #{28rpx};
+                    color: #353535;
+                }
+                .app-icon {
+                    position: absolute;
+                    right: #{24rpx};
+                    text {
+                        font-size: #{26rpx};
+                        color: #999999;
+                        margin-left: #{16rpx};
+                    }
+                    icon {
+                        width: #{13rpx};
+                        height: #{22rpx};
+                        background-image: url("https://shop.9026.com/web/statics/image/mall/static/icon/arrow-right.png");
+                        background-size: 100% 100%;
+                        background-repeat: no-repeat;
+                        margin-left: #{24rpx};
+                    }
+                }
+            }
+        }
+    }
+    .app-left-right-s {
+        width: $screen-width;
+        background: white;
+        .app-right {
+            width: #{546rpx};
+            background-color: white;
+            .app-background {
+                width: #{500rpx};
+                height: #{184rpx};
+                margin: #{20rpx} #{24rpx} #{40rpx} #{24rpx};
+            }
+            .app-item {
+                width: #{546rpx};
+                .app-top {
+                    width: 100%;
+                    padding-left: #{24rpx};
+                    margin-bottom: #{40rpx};
+                    .app-text {
+                        font-size: #{28rpx};
+                        color: #353535;
+                    }
+                    .app-icon {
+                        position: absolute;
+                        right: #{24rpx};
+                        text {
+                            font-size: #{26rpx};
+                            color: #999999;
+                            margin-left: #{16rpx};
+                        }
+                        icon {
+                            width: #{13rpx};
+                            height: #{22rpx};
+                            background-image: url("https://shop.9026.com/web/statics/image/mall/static/icon/arrow-right.png");
+                            background-size: 100% 100%;
+                            background-repeat: no-repeat;
+                            margin-left: #{24rpx};
+                        }
+                    }
+                }
+                .app-item-child {
+                    display: inline-block;
+                    height: #{138rpx};
+                    width: #{182rpx};
+                    margin-bottom: #{40rpx};
+                    .app-image {
+                        width: #{104rpx};
+                        height: #{104rpx};
+                    }
+                    .app-text {
+                        font-size: #{26rpx};
+                        color: #353535;
+                        margin-top: #{8rpx};
+                    }
+                }
+            }
+        }
+    }
+</style>

+ 753 - 0
src/plugins/mch/goods/goods.vue

xqd
@@ -0,0 +1,753 @@
+<template>
+    <app-layout>
+        <view v-if="!goods" class="u-goods-detail"></view>
+        <view v-if="goods" style="background: #fff;">
+			<app-nav-bar  :fixed="true" :background-color="''" :xStyle="1" :hasMallSetting="2"
+				:hasHeight="false"></app-nav-bar>
+            <!--商品轮播图-->
+            <app-goods-banner
+                :pic-list="goods.pic_url"
+                :share="goods.share"
+                :goods_id="id"
+                sign="mch"
+                :video-url="goods.video_url"
+            ></app-goods-banner>
+            <view>
+                <bd-info
+                    :theme="getTheme"
+                    :name="goods.name"
+                    :subtitle="goods.subtitle"
+                    :level-show="goods.level_show"
+                    :flash-sale="flash_sale"
+                    :price="goods.price"
+                    :original-price="goods.original_price"
+                    :price-max="goods.price_max"
+                    :price-min="goods.price_min"
+                    :price-member-max="goods.price_member_max"
+                    :price-member-min="goods.price_member_min"
+                    :sales="goods.sales"
+                    :unit="goods.unit"
+                    :is-sales="goods.is_sales"
+                    :goods-id="goods.id"
+                    :extra-quick-share="goods.extra_quick_share"
+                    :app-share-pic="goods.app_share_pic"
+                    :app-share-title="goods.app_share_title"
+                    :poster-config="poster_config + `&goods_id=` + goods.id + `&mch_id=` + goods.mch_id"
+                    :poster-generate="poster_generate + `&goods_id=` + goods.id + `&mch_id=` + goods.mch_id"
+                    :has-poster-nav="true"
+                    :share-url="poster + `&goods_id=` + goods.id + `&mch_id=` + goods.mch_id"
+                    v-bind:goods="goods"
+                    @share="hShareAppMessage"
+					:limit-buy="goods.limit_buy"
+					:min-number="goods.min_number"
+                ></bd-info>
+            </view>
+			<!-- 关闭多商户 -->
+            <template v-if="mch_store && false">
+                <view class="shop-info dir-left-nowrap cross-center" :clas="mch_store.distance ? 'shop-info-2' : 'shop-info-1'">
+                    <image @click="navShop" class="box-grow-0" :src="mch_store.store.cover_url"></image>
+                    <view @click="navShop" class="dir-top-nowrap box-grow-1">
+                        <view class="store-name t-omit">{{mch_store.store.name}}</view>
+                        <view class="dir-left-nowrap">
+                            <view class="store-num">商品数量: {{mch_store.goods_count}}</view>
+                            <view>已售: {{mch_store.order_goods_count}}</view>
+                        </view>
+                    </view>
+                    <view class="box-grow-0">
+                        <view @click="navService" v-if="mch_setting.is_web_service"
+                              class="contain main-center cross-center dir-top-nowrap">
+                            <image class="store-icon-contain"
+                                   :src="mch_setting.web_service_pic ? mch_setting.web_service_pic : `../image/goods-contact.png`"></image>
+                            <view class="store-contain">客服</view>
+                        </view>
+                        <view v-else class="main-center store-btn">
+                            <view class="shop-btn" @click="navShop">进店逛逛</view>
+                        </view>
+                    </view>
+                </view>
+                <view v-if="mch_store.distance"  class="shop-address dir-left-nowrap cross-top">
+                    <view class="dir-top-nowrap box-grow-1">
+                        <view class="address">{{mch_store.store.address}}</view>
+                        <view class="km">距离{{mch_store.distance}}</view>
+                    </view>
+                    <view @click="navMap" class="box-grow-0 icon-address main-center">
+                        <image src="https://shop.9026.com/web/statics/img/mall/mch//summary-address.png"></image>
+                    </view>
+                </view>
+            </template>
+            <bd-xbc
+                :coAttr="is_open"
+                :attr-list="selectAttr && selectAttr.attr_list"
+                :type="goods.type"
+                :guarantee-title="goods.guarantee_title"
+                :guarantee-pic="goods.guarantee_pic"
+                :param_content="param_content"
+                :param_name="goods.param_name"
+				:param_style="2"
+                :services="goods.services"
+                :attr-groups="goods.attr_groups"
+                :goods-stock="goods.goods_stock"
+                @openAttr="clickAttr()"
+            ></bd-xbc>
+            <bd-hc
+                :integral="goods.goods_marketing_award.integral"
+                :coupon="goods.goods_marketing_award.coupon"
+                :card="goods.goods_marketing_award.card"
+                :balance="goods.goods_marketing_award.balance"
+                :theme="getTheme"
+            ></bd-hc>
+            <bd-kb
+                :limit="goods.goods_marketing.limit"
+                :express="goods.express"
+                :shipping="goods.goods_marketing.shipping"
+                :pickup="goods.goods_marketing.pickup"
+            ></bd-kb>
+			<view class="hxj-line"></view>
+			<uTabsSwiper :list="[{tab:'商品详情'},{tab:'商品评价'}]" :current="tabsCurrent" name="tab" :activeColor="getTheme.color" :barHeight="0" :isScroll="false" @change="tabsChange" line></uTabsSwiper>
+			<!-- 评价 -->
+			<view v-show="tabsCurrent===1">
+				<bd-comments :goods-id="goods.id" ></bd-comments>
+			</view>
+			<!--商品详情-->
+			<view v-show="tabsCurrent===0">
+				<bd-detail :detail="goods.detail" ></bd-detail>
+			</view>
+            <!-- <bd-comments :goods-id="goods.id"></bd-comments>
+            <bd-detail :detail="goods.detail"></bd-detail> -->
+            <!--相关推荐-->
+            <view class="recommend">
+                <view class="recommend-title dir-left-nowrap main-center">
+                    <view class="dir-left-nowrap cross-center">
+                        <view class="border"></view>
+                        <image src="https://shop.9026.com/web/statics/image/mall/static/icon/icon-favorite.png"></image>
+                        <view style="color: #353535;">您或许喜欢</view>
+                        <view class="border"></view>
+                    </view>
+                </view>
+                <view class="recommend-list" style="padding: 0 24rpx;">
+                    <u-ordinary-list :is-under-line-price="isListUnderlinePrice == 1 ? true : false" :isShowAttr="true" :list="recommend_list" :theme="getTheme" :list-style="2"></u-ordinary-list>
+                </view>
+            </view>
+            <!-- 底部空格 -->
+            <view class="safe-area-inset-bottom">
+                <view class="u-bottom-height" :class="[uBottomHeight]"></view>
+            </view>
+            <!-- 底部按钮 -->
+            <view v-if="is_open == 1" class="safe-area-inset-bottom u-bottom-fixed">
+                <view v-if="full_reduce">
+                    <app-goods-full-reduce
+                        :theme="getTheme"
+                        :full_reduce="full_reduce"
+                    >
+                    </app-goods-full-reduce>
+                </view>
+				<view v-if="goods.sell_time > 0">
+					<app-sell-tip :time="goods.sell_time" @changeTime="changeTime"></app-sell-tip>
+				</view>
+                <view class="bd-bottom dir-left-nowrap" >
+                   <!-- <view class="bd-back dir-top-nowrap main-center cross-center box-grow-0" @click="navShop">
+                        <image class="bd-icon" src="https://t17.9026.com/web/statics/image/mall/static/icon/icon-mch.png"></image>
+                        <text>店铺</text>
+                    </view> -->
+                    <view class="bd-back dir-top-nowrap main-center cross-center box-grow-0" @click="back">
+                        <image class="bd-icon" src="https://t17.9026.com/web/statics/image/mall/static/icon/index.png"></image>
+                        <text>首页</text>
+                    </view>
+                    <view class="bd-back dir-top-nowrap main-center cross-center box-grow-0" @click="favorite">
+                        <image class="bd-icon" :src="goods.favorite ? 'https://t17.9026.com/web/statics/image/index/icon-favorite-active.png' : 'https://t17.9026.com/web/statics/image/index/icon-favorite.png'"></image>
+                        <text>收藏</text>
+                    </view>
+                    <view class="box-grow-1 dir-left-nowrap">
+                        <template v-if="goods.goods_stock > 0 && !goods.is_finish_sell">
+                            <view class="bd-button"
+                                  :class="[leftTip]"
+                                  :style="{'background': !goods || goods.buy_goods_auth ? getTheme.background_s_gradient_btn : '#999999','color': !goods || goods.buy_goods_auth ? getTheme.secondary_text : ''}"
+                                  @click="clickAttr">
+                                加入购物车
+                            </view>
+							<view class="bd-button" v-if="!(isTip == 0 && goods.sell_time > 0)">
+								<app-jump-button form>
+									<view 
+                            :style="{'background': goods.buy_goods_auth ? getTheme.background_gradient_btn : '#999999','color': goods.buy_goods_auth ? getTheme.main_text : '', 'width': '100%'}"
+							class="bd-btn-right box-grow-1"  @click="buyClick"
+                            >{{rightRemindText}}
+									</view>
+								</app-jump-button>
+							</view>
+                        </template>
+                        <view v-else class="bd-btn" :class="[disableBtn]">{{goods.is_finish_sell ? '商品已下架' : '已售罄'}}</view>
+                    </view>
+                </view>
+            </view>
+            <u-attr
+                v-model="attrShow"
+                :goods="goods"
+                :theme="getTheme"
+                :checked="selectAttr"
+                @check="onAttr"
+            >
+            </u-attr>
+        </view>
+        <app-close v-if="showClose" :mch_id="mch_id" :modal="false" @update="getMall"></app-close>
+    </app-layout>
+</template>
+
+<script>
+    import {mapGetters, mapState} from "vuex";
+    import appGoodsBanner from "@/components/page-component/goods/app-goods-banner.vue";
+    import appGoodsFullReduce from "@/components/page-component/goods/app-goods-full-reduce";
+    import uOrdinaryList from '@/components/page-component/u-goods-list/u-ordinary-list.vue';
+    import uAttr from '@/components/page-component/goods/u-attr.vue';
+    import bdInfo from '@/components/page-component/goods/bd-info';
+    import bdXbc from '@/components/page-component/goods/bd-xbc.vue';
+    import bdKb from '@/components/page-component/goods/bd-kb.vue';
+    import bdHc from '@/components/page-component/goods/bd-hc.vue';
+    import bdDetail from '@/components/page-component/goods/bd-detail.vue';
+    import bdComments from '@/components/page-component/goods/bd-comments.vue';
+    import appClose from '@/components/basic-component/app-close/app-close.vue';
+    import appSellTip from '@/components/page-component/goods/app-sell-tip.vue';
+	import goodsMixin from '@/core/goods-mixin.js';
+
+import appNavBar from '@/components/page-component/index/app-nav-bar.vue';
+
+import uTabsSwiper from '@/components/basic-component/u-tabs-swiper/u-tabs-swiper.vue';
+    export default {
+        name: "goods",
+		mixins: [goodsMixin],
+        components: {
+            appGoodsBanner,
+            uOrdinaryList,
+            uAttr,
+            appGoodsFullReduce,
+            bdInfo,
+            bdXbc,
+            bdKb,
+            bdHc,
+            bdDetail,
+            bdComments,
+            appClose,
+			appSellTip,
+			
+			appNavBar,
+			uTabsSwiper
+        },
+        data() {
+            return {
+				tabsCurrent:0,
+                showClose: false,
+                is_open: 0,
+                goods: null,
+                full_reduce: null,
+                selectAttr: null,
+                recommend_list: null,
+                attrShow: false,
+                id: 0,
+                mch_id: 0,
+                mch_store: null,
+                mch_setting: null,
+                flash_sale: null,
+                poster: this.$api.mch.poster,
+                poster_config: this.$api.mch.poster_config,
+                poster_generate: this.$api.mch.poster_generate,
+                param_content: [],
+				disable: 'disable'
+            };
+        },
+        computed: {
+            ...mapState({
+                mall: state => state.mallConfig.mall,
+                isListUnderlinePrice: state => state.mallConfig.mall.setting.is_list_underline_price,
+				isTip: state => state.mallConfig.mall.setting.is_remind_sell_time
+            }),
+            ...mapState('gConfig', {
+                iphone: (data) => {
+                    return data.iphone;
+                },
+                iphoneHeight: (state) => {
+                    return state.iphoneHeight;
+                },
+            }),
+            ...mapGetters('mallConfig', {
+                getTheme: 'getTheme',
+            }),
+			uBottomHeight() {
+				if (this.full_reduce && this.goods && this.goods.sell_time > 0) {
+					return 'u-bottom-height-2';
+				} else if (this.full_reduce || (this.goods && this.goods.sell_time > 0)) {
+					return 'u-bottom-height-1';
+				} else {
+					return 'u-bottom-height-0';
+				}
+			},
+			leftTip() {
+				let leftTip = '';
+				if (!(this.isTip == 0 && this.goods && this.goods.sell_time > 0)) {
+					leftTip = 'bd-btn-left';
+				} else {
+					leftTip = 'box-grow-1';
+				}
+				return leftTip;
+			},
+			disableBtn() {
+				return this.goods && this.goods.is_finish_sell ? 'btn-finish-sell' : 'bd-oversell-btn';
+			},
+			remindParams() {
+				if (!this.goods) {
+					return {};
+				}
+				return {
+					sell_time: this.goods.sell_time,
+					goods_id: this.goods.id,
+					template_message_list: this.goods.template_message_list,
+					buy_text: '立即购买'
+				};
+			},
+        },
+        onLoad(options) { this.$commonLoad.onload(options);
+            [this.mch_id, this.id] = [options.mch_id, options.id];
+            this.getAddress();
+            this.loadRecommend();
+            // #ifdef MP-WEIXIN
+            wx.showShareMenu({
+                withShareTicket: true,
+                menus: ['shareAppMessage', 'shareTimeline']
+            })
+            // #endif
+        },
+        onShow() {
+            this.showClose = false;
+            setTimeout(()=>{
+                this.showClose = true;
+            })
+        },
+        // #ifdef MP-WEIXIN
+        onShareTimeline() {
+            return this.$shareTimeline({
+                title: this.goods.app_share_title ? this.goods.app_share_title : this.goods.name,
+                query: {
+                    id: this.id,
+                    mch_id: this.mch_id,
+                }
+            });
+        },
+        // #endif
+        // #ifdef MP
+        onShareAppMessage() {
+            return this.hShareAppMessage();
+        },
+        // #endif
+        methods: {
+            hShareAppMessage(s = false){
+                return this.$shareAppMessage({
+                    title: this.goods.app_share_title ? this.goods.app_share_title : this.goods.name,
+                    imageUrl: this.goods.app_share_pic ? this.goods.app_share_pic : this.goods.pic_url[0].pic_url,
+                    path: '/plugins/mch/goods/goods',
+                    desc: this.goods.subtitle,
+                    params: {
+                        id: this.id,
+                        mch_id: this.mch_id,
+                    }
+                }, s);
+            },
+            getMall(e) {
+                this.is_open = e.is_open;
+            },
+            // setCoupon(index) {
+            //     this.$set(this.goods.goods_coupon_center[index], 'is_receive', 1);
+            // },
+            getAddress() {
+                const self = this;
+                uni.getLocation({
+                    type: 'wgs84',
+                    success(res) {
+                        self.getMch(res.latitude, res.longitude);
+                    },
+                    fail(e) {
+                        self.getMch(0, 0);
+                    }
+                });
+            },
+
+            getMch(latitude, longitude) {
+                const self = this;
+                self.$showLoading();
+                self.$request({
+                    url: self.$api.mch.detail,
+                    data: {
+                        id: self.mch_id,
+                        latitude: latitude,
+                        longitude: longitude,
+                    }
+                }).then(info => {
+                    self.$hideLoading();
+                    if (info.code === 0) {
+                        [self.mch_store, self.mch_setting] = [info.data.detail, info.data.mchSetting];
+                        self.getDetail();
+                    } else {
+                        uni.showModal({
+                            title: '提示',
+                            content: info.msg,
+                            showCancel: false,
+                            success: function (e) {
+                                if (e.confirm) {
+                                    uni.navigateBack({delta: 1});
+                                }
+                            }
+                        });
+                    }
+                }).catch(() => {
+                    self.$hideLoading();
+                })
+            },
+
+            getDetail() {
+                this.$showLoading();
+                this.$request({
+                    url: this.$api.mch.goods_detail,
+                    data: {
+                        id: this.id,
+                        mch_id: this.mch_id
+                    }
+                }).then(e => {
+                    this.$hideLoading();
+                    if (e.code === 0) {
+                        let { goods_activity } = e.data.detail;
+                        this.goods = e.data.detail;
+                        // #ifdef H5
+                        this.hShareAppMessage();
+                        // #endif
+                        let { param_content } = e.data.detail;
+                        this.param_content = param_content;
+                        if (goods_activity) {
+                            this.full_reduce = goods_activity.full_reduce;
+                        }
+                    } else {
+                        uni.showModal({
+                            title: '提示',
+                            content: e.msg,
+                            showCancel: false
+                        });
+                    }
+                }).catch(() => {
+                    this.$hideLoading();
+                });
+            },
+
+            loadRecommend() {
+                const self = this;
+                self.$request({
+                    url: self.$api.goods.new_recommend,
+                    data: {
+                        goods_id: self.id,
+                    },
+                    method: 'get'
+                }).then(info => {
+                    if (info.code === 0) {
+                        this.recommend_list = info.data.list;
+                    }
+                });
+            },
+
+            navMap() {
+                uni.openLocation({
+                    latitude: parseFloat(this.mch_store.store.latitude),
+                    longitude: parseFloat(this.mch_store.store.longitude),
+                    name: this.mch_store.store.name,
+                    address: this.mch_store.store.address,
+                })
+            },
+
+            onAttr({item}) {
+                this.selectAttr = item;
+            },
+
+            navService() {
+                uni.navigateTo({url: `/pages/web/web?url=` + this.mch_setting.web_service_url});
+            },
+
+            navShop() {
+                uni.redirectTo({url: `/plugins/mch/shop/shop?mch_id=` + this.mch_id});
+            },
+
+            back() {
+                uni.redirectTo({
+                    url: '/pages/index/index'
+                });
+            },
+
+            favorite() {
+                this.goods.favorite ? this.goods.favorite = false :  this.goods.favorite = true;
+                this.$request({
+                    url: !this.goods.favorite ? this.$api.user.favorite_remove : this.$api.user.favorite_add,
+                    data: {
+                        goods_id: this.goods.id,
+                    }
+                }).then(e => {
+                    if (e.code !== 0) {
+                        uni.showModal({
+                            title: '提示',
+                            content: e.msg,
+                            showCancel: false
+                        });
+                    }
+                });
+            },
+
+            clickAttr() {
+                if (!this.goods.buy_goods_auth) {
+                    uni.showToast({
+                        title: '您暂无权限购买该商品',
+                        icon: 'none'
+                    });
+                    return;
+                }
+                if (this.goods.type === 'ecard') {
+                    uni.showToast({
+                        title: '虚拟商品不允许加入购物车',
+                        icon: 'none'
+                    });
+                    return;
+                }
+                this.attrShow = true;
+            },
+			changeTime(time) {
+				this.goods.sell_time = time;
+			},
+			buyClick() {
+				if (this.goods.sell_time > 0) {
+					this.rightTip();
+				} else{
+					this.clickAttr();
+				}
+			},
+			tabsChange(e){
+				this.tabsCurrent=e
+			},
+        },
+    }
+</script>
+
+<style scoped lang="scss">
+    .goods-name {
+        padding: #{24rpx};
+        background-color: #ffffff;
+        color: $uni-important-color-black;
+    }
+
+    .goods-subtitle {
+        padding: #{24rpx};
+        padding-top: 0;
+        font-size: 24rpx;
+        background-color: #ffffff;
+        color: #999999;
+    }
+
+
+    .attr {
+        padding: #{24rpx} 0;
+        background-color: #f7f7f7;
+    }
+
+    .recommend {
+        .recommend-title {
+            margin: #{40rpx} 0 #{32rpx} 0;
+            font-size: $uni-font-size-weak-one;
+            color: $uni-general-color-two;
+
+            .border {
+                border-top: #{1rpx} solid #bbbbbb;
+                height: 0;
+                width: #{40rpx};
+                margin: 0 #{24rpx};
+            }
+
+            image {
+                width: #{24rpx};
+                height: #{24rpx};
+                display: block;
+                margin-right: #{12rpx};
+            }
+        }
+    }
+
+    .shop-btn {
+        height: #{64rpx};
+        border: #{1px} solid #cdcdcd;
+        color: #666666;
+        background: #FFFFFF;
+        width: #{146rpx};
+        line-height: #{64rpx};
+        border-radius: #{32rpx};
+        text-align: center;
+    }
+
+    .bd-bottom {
+        height: 110upx;
+        width: 750upx;
+        padding: 20upx 24upx;
+    }
+    .bd-back {
+        width: 66upx;
+        height: 100%;
+        margin-right: 20upx;
+        font-size: 20upx;
+        color: #888888;
+    }
+    .bd-icon {
+        width: 30upx;
+        height: 30upx;
+    }
+    .bd-button {
+        text-align: center;
+        line-height: 70upx;
+        font-size: 26upx;
+        // border-radius: 35upx;
+        width: 50%;
+    }
+    .bd-btn-left {
+        border-top-right-radius: 0;
+        border-bottom-right-radius: 0;
+    }
+    .bd-btn-right {
+        border-top-left-radius: 0;
+        border-bottom-left-radius: 0;
+        // border-top-right-radius: 35upx;
+        // border-bottom-right-radius: 35upx;
+        color: #ffffff;
+    }
+    .bd-btn {
+        color: #ffffff;
+        width: 100%;
+        text-align: center;
+        line-height: 70upx;
+        font-size: 26upx;
+        border-radius: 35upx;
+    }
+
+    .comments {
+        margin-bottom: #{20rpx};
+        background-color: #ffffff;
+    }
+
+    .detail {
+        background-color: #ffffff;
+
+        image {
+            width: 100%;
+            height: #{80rpx};
+            display: block;
+        }
+    }
+    .shop-info-1 {
+        border-radius: 15upx;
+    }
+    .shop-info-2 {
+        border-radius: 15upx 15upx 0 0;
+    }
+    .shop-info {
+        height: #{124rpx};
+        color: #999999;
+        font-size: #{24rpx};
+        background: #FFFFFF;
+        width: 702upx;
+        margin: 24upx 24upx 0 24upx;
+        > image {
+            border-radius: #{8rpx};
+            margin: 0 #{20rpx};
+            height: #{80rpx};
+            width: #{80rpx}
+        }
+
+        .store-name {
+            line-height: 1.5em;
+            font-size: #{32rpx};
+            color: #353535;
+            margin-bottom: #{16rpx};
+        }
+
+        .store-num {
+            margin-right: #{32rpx};
+        }
+
+        .contain {
+            width: #{152rpx};
+            height: 100%;
+
+            image {
+                height: #{40rpx};
+                width: #{40rpx};
+                display: block;
+            }
+
+            view {
+                margin-top: #{8rpx};
+            }
+        }
+
+        .store-btn {
+            margin: 0 #{20rpx};
+        }
+    }
+
+    .shop-address {
+        width: 702rpx;
+        margin: 0 24upx 24upx 24upx;
+        padding: 20upx;
+        font-size: #{24rpx};
+        background: #FFFFFF;
+        border-radius: 0 0 15upx 15upx;
+        .address {
+            color: #666666;
+            max-height: #{560rpx};
+        }
+
+        .km {
+            color: #999999;
+            margin-top:#{10rpx};
+        }
+
+        .icon-address {
+            width: #{120rpx};
+            border-left: 1px solid #e2e2e2;
+        }
+
+        image {
+            height: #{32rpx};
+            width: #{32rpx};
+            display: block;
+        }
+    }
+    .text {
+        color: #ffffff;
+    }
+    .goods-margin {
+        margin-top: 20upx;
+    }
+    .u-bottom-height-0 {
+        height: 110upx;
+    }
+    .u-bottom-height-1 {
+        height: 190upx;
+    }
+    .u-bottom-fixed {
+        position: fixed;
+        bottom: 0;
+        left: 0;
+        width: 100%;
+        z-index: 1602;
+        background-color: #ffffff;
+        box-shadow: 0 -1rpx 20rpx -15rpx #353535;
+    }
+    .bd-oversell-btn {
+        background-color: #CDCDCD;
+    }
+	.btn-finish-sell {
+		background: linear-gradient(to right, rgba(153, 153, 153, 1), rgba(153, 153, 153, 0.7)) ;
+	}
+    .u-bottom-height-2 {
+        height: 270upx;
+    }
+    .bd-oversell-btn {
+        background-color: #CDCDCD;
+    }
+</style>

BIN
src/plugins/mch/image/add-detail.png


BIN
src/plugins/mch/image/add-goods.png


BIN
src/plugins/mch/image/add.png


BIN
src/plugins/mch/image/apply-er.png


BIN
src/plugins/mch/image/apply-ok.png


BIN
src/plugins/mch/image/arrow-left-white.png


BIN
src/plugins/mch/image/camera.png


BIN
src/plugins/mch/image/cat-close.png


BIN
src/plugins/mch/image/close.png


BIN
src/plugins/mch/image/copy.png


BIN
src/plugins/mch/image/delete.png


BIN
src/plugins/mch/image/express.png


BIN
src/plugins/mch/image/goods-contact.png


BIN
src/plugins/mch/image/goods-del.png


BIN
src/plugins/mch/image/goods-edit.png


BIN
src/plugins/mch/image/goods-xiajia.png


BIN
src/plugins/mch/image/image.png


BIN
src/plugins/mch/image/line.png


BIN
src/plugins/mch/image/list-cat.png


BIN
src/plugins/mch/image/localhost.png


BIN
src/plugins/mch/image/login-alipay.png


BIN
src/plugins/mch/image/login-wechat.png


BIN
src/plugins/mch/image/low.png


BIN
src/plugins/mch/image/more-active.png


BIN
src/plugins/mch/image/more-handle.png


BIN
src/plugins/mch/image/more.png


BIN
src/plugins/mch/image/myshop-code.png


BIN
src/plugins/mch/image/myshop-data.png


BIN
src/plugins/mch/image/myshop-goods.png


BIN
src/plugins/mch/image/myshop-notice.png


BIN
src/plugins/mch/image/myshop-order.png


BIN
src/plugins/mch/image/myshop-shop.png


BIN
src/plugins/mch/image/myshop-zc.png


BIN
src/plugins/mch/image/open.png


BIN
src/plugins/mch/image/order-list-refund.png


BIN
src/plugins/mch/image/search.png


BIN
src/plugins/mch/image/shop-all.png


BIN
src/plugins/mch/image/shop-cat.png


BIN
src/plugins/mch/image/shop-contact.png


Некоторые файлы не были показаны из-за большого количества измененных файлов