2 Commits c310785b57 ... b26b47464a

Auteur SHA1 Bericht Datum
  huangzhe b26b47464a 案例及预约相关接口 3 jaren geleden
  huangzhe c6598de46a 套餐bug修改 3 jaren geleden

+ 1 - 1
src/components/basic-component/app-goods/app-goods.vue

xqd
@@ -13,7 +13,7 @@
 			</view>
 			<!-- 商品图 -->
 			<view @click="toDetail" v-else>
-				<app-image :borderRadius="coverRadius" :img-src="goods.cover_pic" :width="listStyle == -1 ? coverHeight : '100%'" :height="coverHeight" :mode="fill === 1 ? 'aspectFill' : 'aspectFit'"></app-image>
+				<app-image :borderRadius="coverRadius" :img-src="goods.cover_pic?goods.cover_pic:goods.picUrl" :width="listStyle == -1 ? coverHeight : '100%'" :height="coverHeight" :mode="fill === 1 ? 'aspectFill' : 'aspectFit'"></app-image>
 			</view>
 			<view @click="toDetail" :style="coverStyle" class="out-dialog goods-cover" v-if="(goods.goods_num == 0 || goods.goods_stock == 0) && appSetting.is_show_stock == '1'">
 				<image :style="coverStyle" :src="appSetting.is_use_stock == '1' ? appImg.plugins_out : appSetting.sell_out_pic"></image>

+ 3 - 1
src/components/page-component/app-image-ad/app-image-ad.vue

xqd
@@ -15,7 +15,9 @@
 					backgroundImage: 'url(' + item.pic_url + ')',
 					height: item.height,
 			 	}"
-			></view>
+			>
+				<image :src="item.pic_url" mode=""></image>
+			</view>
 			</app-jump-button>
 		</view>
 		<view class="app-three-hundred-and-sixty" v-if="imageStyle === 1 || imageStyle === 2 || imageStyle === 3">

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

xqd xqd
@@ -78,7 +78,8 @@ export default {
     },
     data() {
         return {
-            goodsList: []
+            goodsList: [],
+			tempList:[]
         }
     },
     computed: {
@@ -88,7 +89,7 @@ export default {
           // 获取商品数组
         copyList() {
             let list = this.list && this.list.length > 0 ? this.list : this.temp.data.list;
-			console.log('商品列表',this.list)
+			console.log('商品列表',list)
             return list;
         },
     },

+ 8 - 0
src/core/apiUrl.js

xqd xqd
@@ -10,7 +10,14 @@ const apiUrl = {
 		
 		estate_list:'plugin/sale/api/estate/list'
 	},
+	example:{
+		style_list:'plugin/example/api/index/style-list',
+		house_list:'plugin/example/api/index/house-list',
+		list:'plugin/example/api/index/example-list',
+		detail:'plugin/example/api/index/example-detail',
+	},
 	//
+	
     index: {
         config: 'api/index/config',
         newIndex: 'api/index/new-index',
@@ -74,6 +81,7 @@ const apiUrl = {
 		evaluate_list:'api/order-comments/list',
 		del_evaluate:'api/order-comments/del',
 		suggestion:'api/user/submit-suggestion',
+		visit_house:'api/user/visit-house'
     },
     article: {
         list: 'api/default/article-list',

+ 10 - 1
src/pages.json

xqd
@@ -114,7 +114,16 @@
 					"enablePullDownRefresh": false
 				}
 
-			}]
+			}    ,{
+                    "path" : "caseList",
+                    "style" :                                                                                    
+                {
+                    "navigationBarTitleText": "",
+                    "enablePullDownRefresh": false
+                }
+                
+                }
+            ]
 		},
 		{
 			"root": "pages/sale",

+ 96 - 26
src/pages/case/appointment/appointment-form.vue

xqd xqd xqd xqd xqd xqd
@@ -2,13 +2,25 @@
 	<view>
 		<app-nav-bar v-if="true" :fixed="true" :title="'预约'" color="#000" background-color="#eae2dd"></app-nav-bar>
 		<view class="main-between-y builInfo">
-			<view class="main-between">
+			<view class="main-between cross-center" style="height: 72rpx;" @click="$jump({open_type:'navigate',url:'/pages/sale/properties/addProperties'})">
 				<view class="hjx-ts-30 hjx-tw-600 hjx-tc-222">楼盘名称</view>
-				<view class="hjx-ts-30 hjx-tc-222">龙湖·揽镜</view>
+				<view class="hjx-ts-30 hjx-tc-222">
+					<view class="cross-center hjx-ts-28 t-omit" style="width: 510rpx;text-align: right;"
+						:class="{'hjx-tc-999':estate_name==''?true:false,'hjx-tc-000':estate_name!=''?true:false}">{{estate_name===''?'请选择':estate_name}}
+						<image style="width: 12.8rpx;height: 22.8rpx;margin-left: 20rpx;"
+							src="https://t17.9026.com/web/statics/image/index/arrow-right-gray.png" mode=""></image>
+					</view>
+				</view>
 			</view>
-			<view class="main-between">
+			<view class="main-between cross-center" style="height: 72rpx;" @click="$jump({open_type:'navigate',url:'/pages/sale/properties/addProperties'})">
 				<view class="hjx-ts-30 hjx-tw-600 hjx-tc-222">楼盘地址</view>
-				<view class="hjx-ts-30 hjx-tc-222">双流区东升街道233号</view>
+				<view class="hjx-ts-30 hjx-tc-222">
+					<view class="cross-center hjx-ts-28 t-omit" style="width: 510rpx;text-align: right;"
+						:class="{'hjx-tc-999':estate_address==''?true:false,'hjx-tc-000':estate_address!=''?true:false}">{{estate_address===''?'请选择':estate_address}}
+						<image style="width: 12.8rpx;height: 22.8rpx;margin-left: 20rpx;"
+							src="https://t17.9026.com/web/statics/image/index/arrow-right-gray.png" mode=""></image>
+					</view>
+				</view>
 			</view>
 		</view>
 		<view class="form_box">
@@ -17,22 +29,32 @@
 			<view class="item main-between cross-center">
 				<view class="hjx-ts-28 hjx-tw-600 hjx-tc-000">姓名</view>
 				<view>
-						<view class="cross-center hjx-ts-28 hjx-tc-999">请选择<image style="width: 12.8rpx;height: 22.8rpx;margin-left: 20rpx;" src="https://t17.9026.com/web/statics/image/index/arrow-right-gray.png" mode=""></image></view>
-					
+					<view class="cross-center hjx-ts-28 ">
+						<input type="text" v-model="username" style="text-align:right;color: #000000;" placeholder="请输入"
+							placeholder-style="text-align:right" placeholder-class="hjx-tc-999" />
+					</view>
+
 				</view>
 			</view>
 			<view class="item main-between cross-center">
 				<view class="hjx-ts-28 hjx-tw-600 hjx-tc-000">电话</view>
 				<view>
-						<view class="cross-center hjx-ts-28 hjx-tc-999">请选择<image style="width: 12.8rpx;height: 22.8rpx;margin-left: 20rpx;" src="https://t17.9026.com/web/statics/image/index/arrow-right-gray.png" mode=""></image></view>
-					
+					<view class="cross-center hjx-ts-28 ">
+						<input type="number" v-model="mobile" style="text-align:right;color: #000000;" placeholder="请输入"
+							placeholder-style="text-align:right" placeholder-class="hjx-tc-999" />
+					</view>
+
 				</view>
 			</view>
 			<view class="item main-between cross-center">
 				<view class="hjx-ts-28 hjx-tw-600 hjx-tc-000">看房日期</view>
 				<view>
 					<picker mode="date" :value="date" :start="startDate" :end="endDate" @change="bindDateChange">
-						<view class="cross-center hjx-ts-28 hjx-tc-999">{{date}}<image style="width: 12.8rpx;height: 22.8rpx;margin-left: 20rpx;" src="https://t17.9026.com/web/statics/image/index/arrow-right-gray.png" mode=""></image></view>
+						<view class="cross-center hjx-ts-28"
+							:class="{'hjx-tc-999':date=='请选择'?true:false,'hjx-tc-000':date!='请选择'?true:false}">{{date}}
+							<image style="width: 12.8rpx;height: 22.8rpx;margin-left: 20rpx;"
+								src="https://t17.9026.com/web/statics/image/index/arrow-right-gray.png" mode=""></image>
+						</view>
 					</picker>
 				</view>
 			</view>
@@ -40,7 +62,11 @@
 				<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">
-						<view class="cross-center hjx-ts-28 hjx-tc-999">{{time}}<image style="width: 12.8rpx;height: 22.8rpx;margin-left: 20rpx;" src="https://t17.9026.com/web/statics/image/index/arrow-right-gray.png" mode=""></image></view>
+						<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;"
+								src="https://t17.9026.com/web/statics/image/index/arrow-right-gray.png" mode=""></image>
+						</view>
 					</picker>
 				</view>
 			</view>
@@ -58,33 +84,54 @@
 			AppNavBar,
 		},
 		computed: {
-		        startDate() {
-		            return this.getDate('start');
-		        },
-		        endDate() {
-		            return this.getDate('end');
-		        }
-		    },
+			startDate() {
+				return this.getDate('start');
+			},
+			endDate() {
+				return this.getDate('end');
+			}
+		},
 		data() {
 			return {
-				time:'请选择',
-				date:'请选择'
+				estate_id:'',
+				estate_name:'',
+				estate_address:'',
+				
+				username: '',
+				mobile: '',
+				time: '请选择',
+				date: '请选择'
 			};
 		},
-		methods:{
+		onShow() {
+			var pages = getCurrentPages();
+			var currPage = pages[pages.length - 1]; //当前页面
+		
+			'estateInfo' in currPage.$vm ? this.estate_name = currPage.$vm.estateInfo.name : ''
+			'estateInfo' in currPage.$vm ? this.estate_id = currPage.$vm.estateInfo.id : ''
+			// 'estateInfo' in currPage.$vm ? this.multiIndex = currPage.$vm.estateInfo.multiIndex : ''
+			if('estateInfo' in currPage.$vm){
+				let address=currPage.$vm.estateInfo.address.split(' ').filter((s)=>{
+					return s && s.trim()
+				})
+				this.estate_address=address[2]+address[3]
+			}''
+			
+			
+		},
+		methods: {
 			bindTimeChange(e) {
-			            this.time = e.target.value
-			        },
+				this.time = e.target.value
+			},
 			bindDateChange(e) {
-				console.log(e)
-			            this.date = e.target.value
+				this.date = e.target.value
 			},
 			getDate(type) {
 				const date = new Date();
 				let year = date.getFullYear();
 				let month = date.getMonth() + 1;
 				let day = date.getDate();
-	
+
 				if (type === 'start') {
 					year = year - 60;
 				} else if (type === 'end') {
@@ -93,6 +140,29 @@
 				month = month > 9 ? month : '0' + month;
 				day = day > 9 ? day : '0' + day;
 				return `${year}-${month}-${day}`;
+			},
+			goAppointment() {
+				this.$request({
+					url: this.$api.user.visit_house,
+					data: {
+						estate_id: this.estate_id,
+						username: this.username,
+						phone: this.mobile,
+						visit_date: this.date + ' ' + this.time,
+					},
+					method: 'post'
+				}).then(res => {
+					if (res.code === 0) {
+						uni.showToast({
+							title: '预约成功'
+						})
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						})
+					}
+				})
 			}
 		}
 	}
@@ -101,7 +171,7 @@
 <style lang="scss" scoped>
 	.builInfo {
 		padding: 30rpx 36rpx;
-		height: 150rpx;
+		height: auto;
 	}
 
 	.form_box {

+ 242 - 71
src/pages/case/caseDetails.vue

xqd xqd xqd xqd
@@ -1,102 +1,258 @@
 <template>
-	<view class="page">
-		<app-nav-bar v-if="true" :fixed="true" :background-color="''" :xStyle="1" :hasMallSetting="2"
-			:hasHeight="false"></app-nav-bar>
-		<view class="swiper_cent tpbg">
-			<swiper style="height: 534rpx;" :indicator-dots="false" :autoplay="false" :interval="3000" :duration="1000"
-				@change="swiperChange">
-				<swiper-item v-for="(item,index) in 3" :key="index" @click="gopage">
-					<view style="width: 100%;height: 534rpx;position: relative;">
-						<image src="https://t17.9026.com/web/statics/image/index/14.png" style="width: 100%;height: 534rpx;position: absolute;top: 0;left: 0;" mode=""></image>
-					</view>
-				</swiper-item>
-			</swiper>
-			<view class="swiper_zhishi">
-				<view :class="swiperKey===i?'view_active':''" v-for="(item1,i) in 3" :key="i"></view>
-			</view>
-		</view>
-		<view class="center">
-			<view class="summary">
-				<view class="main-between title">
-					<view class="t-omit-two hxj-title text">北欧现代质感卧室,简洁清爽,卧室拥有大面积采光,让卧室明亮起来。</view>
-					<image src="https://t17.9026.com/web/statics/image/index/share.png" style="width: 33rpx;height: 33rpx;margin-top: 5rpx;"
-						mode=""></image>
-				</view>
-				<view class="main-between gg">
-					<view class="main-between-y cross-center item">
-						<view class="cross-center hjx-tc-666 hjx-ts-24">
-							<image src="https://t17.9026.com/web/statics/image/index/hx.png" mode=""></image>户型
+	<app-layout>
+		<view class="page">
+			<app-nav-bar v-if="true" :fixed="true" :background-color="''" :xStyle="1" :hasMallSetting="2"
+				:hasHeight="false"></app-nav-bar>
+			<view class="swiper_cent tpbg">
+				<swiper style="height: 534rpx;" :indicator-dots="false" :autoplay="false" :interval="3000"
+					:duration="1000" @change="swiperChange">
+					<swiper-item v-for="(item,index) in exampleDetail.banner_imgs" :key="index" @click="gopage">
+						<view style="width: 100%;height: 534rpx;position: relative;">
+							<image :src="item.banner_imgs"
+								style="width: 100%;height: 534rpx;position: absolute;top: 0;left: 0;" mode=""></image>
 						</view>
-						<view class="hjx-tc-222 hjx-ts-24 hjx-tw-600">三室一厅两卫</view>
+					</swiper-item>
+				</swiper>
+				<view class="swiper_zhishi">
+					<view :class="swiperKey===i?'view_active':''" v-for="(item1,i) in 3" :key="i"></view>
+				</view>
+			</view>
+			<view class="center">
+				<view class="topradus"></view>
+				<view class="summary">
+					<view class="main-between title">
+						<view class="t-omit-two hxj-title text t-omit-two">{{exampleDetail.title}}</view>
+						<app-jump-button form arrangement="topCenter" open_type="share" >
+						   <image src="https://t17.9026.com/web/statics/image/index/share.png"
+						   	style="width: 33rpx;height: 33rpx;margin-top: 5rpx;" mode=""></image>
+						</app-jump-button>
 					</view>
-					<view class="main-between-y cross-center item">
-						<view class="cross-center hjx-tc-666 hjx-ts-24">
-							<image src="https://t17.9026.com/web/statics/image/index/mj.png" mode=""></image>面积
+					<view class="main-between gg">
+						<view class="main-between-y cross-center item">
+							<view class="cross-center hjx-tc-666 hjx-ts-24">
+								<image src="https://t17.9026.com/web/statics/image/index/hx.png" mode=""></image>户型
+							</view>
+							<view class="hjx-tc-222 hjx-ts-24 hjx-tw-600">{{exampleDetail.exampleHouse.name}}</view>
 						</view>
-						<view class="hjx-tc-222 hjx-ts-24 hjx-tw-600">40m²</view>
-					</view>
-					<view class="main-between-y cross-center item">
-						<view class="cross-center hjx-tc-666 hjx-ts-24">
-							<image src="https://t17.9026.com/web/statics/image/index/dq.png" mode=""></image>地区
+						<view class="main-between-y cross-center item">
+							<view class="cross-center hjx-tc-666 hjx-ts-24">
+								<image src="https://t17.9026.com/web/statics/image/index/mj.png" mode=""></image>面积
+							</view>
+							<view class="hjx-tc-222 hjx-ts-24 hjx-tw-600">{{exampleDetail.square}}m²</view>
 						</view>
-						<view class="hjx-tc-222 hjx-ts-24 hjx-tw-600">成都</view>
-					</view>
-					<view class="main-between-y cross-center item">
-						<view class="cross-center hjx-tc-666 hjx-ts-24">
-							<image src="https://t17.9026.com/web/statics/image/index/fg.png" mode=""></image>风格
+						<view class="main-between-y cross-center item">
+							<view class="cross-center hjx-tc-666 hjx-ts-24">
+								<image src="https://t17.9026.com/web/statics/image/index/dq.png" mode=""></image>地区
+							</view>
+							<view class="hjx-tc-222 hjx-ts-24 hjx-tw-600">{{exampleDetail.address}}</view>
+						</view>
+						<view class="main-between-y cross-center item">
+							<view class="cross-center hjx-tc-666 hjx-ts-24">
+								<image src="https://t17.9026.com/web/statics/image/index/fg.png" mode=""></image>风格
+							</view>
+							<view class="hjx-tc-222 hjx-ts-24 hjx-tw-600">{{exampleDetail.exampleStyle.name}}</view>
 						</view>
-						<view class="hjx-tc-222 hjx-ts-24 hjx-tw-600">北欧</view>
 					</view>
 				</view>
-			</view>
-			<view class="details">
-				<view class="hjx-ts-34 hjx-tc-222 hjx-tw-600">详细描述</view>
-				<view class="content">
-					<view class="content-text">
-						四季轮换,家已经奏响秋日之歌。让卧室从清凉过渡到温暖,在人居荟只需要几步,干净舒适的家居、收纳、陈设与柔美的色调相融合,打造魅力非凡的惬意居所。
-					</view>
-					<view class="content-image">
-						<image src="https://t17.9026.com/web/statics/image/index/15.png" mode=""></image>
-					</view>
-					<view class="main-between content-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="col">
-									高级棕
+				<view class="details">
+					<view class="hjx-ts-34 hjx-tc-222 hjx-tw-600" style="padding: 0 36rpx;">详细描述</view>
+					<view class="content">
+						<!-- <view class="content-text">
+							四季轮换,家已经奏响秋日之歌。让卧室从清凉过渡到温暖,在人居荟只需要几步,干净舒适的家居、收纳、陈设与柔美的色调相融合,打造魅力非凡的惬意居所。
+						</view>
+						<view class="content-image">
+							<image src="https://t17.9026.com/web/statics/image/index/15.png" mode=""></image>
+						</view>
+						<view class="main-between content-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="col">
+										高级棕
+									</view>
 								</view>
 							</view>
-						</view>
-						<view class="priceBox main-center-y">
-							<view class="hxj-price20 hjx-tc-222 hjx-tw-600"><text>¥</text>2466.00</view>
-							<view class="hxj-price20 hjx-tc-999 hjx-text-decoration-line-through"><text>¥</text>3000.00
+							<view class="priceBox main-center-y">
+								<view class="hxj-price20 hjx-tc-222 hjx-tw-600"><text>¥</text>2466.00</view>
+								<view class="hxj-price20 hjx-tc-999 hjx-text-decoration-line-through">
+									<text>¥</text>3000.00
+								</view>
 							</view>
+						</view> -->
+
+						<view class="detail-diy">
+						    <block v-for="(temp, index) in exampleDetail.detail" :key="index">
+						        <template v-if="temp.id === 'mch-goods'">
+						            <view :style="[
+						                 {'background-color':`${temp.data.backgroundColor}`,
+						                'padding': `${temp.data.c_padding_top}rpx ${temp.data.c_padding_lr}rpx ${temp.data.c_padding_bottom}rpx`,
+						                'background-image': temp.data.backgroundPicUrl ? `url(${temp.data.backgroundPicUrl})` : `none`,
+						                'background-size':`${temp.data.backgroundWidth + '% ' + temp.data.backgroundHeight + '%'}`,
+						                'background-position':`${transLabelBackgroundPosition(temp.data.position)}`,
+						                'background-repeat':`${transLabelBackgroundRepeat(temp.data.mode)}`}]"
+						            >
+						                <app-diy-list :temp="temp" :theme="getTheme"></app-diy-list>
+						            </view>
+						        </template>
+						        <template v-else-if="temp.id === 'rubik'">
+						            <view style="position: relative">
+						                <app-image-ad
+						                    v-bind:image-style="temp.data.style"
+						                    v-bind:list="temp.data.list"
+						                    v-bind:height="temp.data.height"
+						                ></app-image-ad>
+						                <block v-for="(hotspot, hotspot_index) in temp.data.hotspot" v-bind:key="hotspot_index">
+						                    <app-hotspot v-bind:hotspot="rubikHotspot(hotspot)"></app-hotspot>
+						                </block>
+						            </view>
+						        </template>
+						        <template v-else-if="temp.id === 'video'">
+						            <app-video
+						                v-bind:pic-url="temp.data.pic_url"
+						                v-bind:url="temp.data.url"
+						                v-bind:has-auto="temp.data.hasAuto"
+						                v-bind:has-cycle="temp.data.hasCycle"
+						                v-bind:bg-padding="temp.data.bg_padding"
+						                v-bind:c-border-bottom="temp.data.c_border_bottom"
+						                v-bind:c-border-top="temp.data.c_border_top"
+						                v-bind:c-padding-top="temp.data.c_padding_top"
+						                v-bind:c-padding-lr="temp.data.c_padding_lr"
+						                v-bind:c-padding-bottom="temp.data.c_padding_bottom"
+						            ></app-video>
+						        </template>
+						        <template v-else-if="temp.id === 'image-text'">
+						            <view style="padding: 1rpx 24rpx" :style="{backgroundColor: temp.data.bg || 'inherit'}">
+						                <app-rich :image-prop="imageProp" v-bind:content='temp.data.content'></app-rich>
+						            </view>
+						        </template>
+						    </block>
 						</view>
+						<view style="height: 111rpx"></view>
 					</view>
 				</view>
 			</view>
 		</view>
-	</view>
+	</app-layout>
 </template>
 
 <script>
+	// import mchShare from "./mch-share";
+	// import appDiyGoodsList from "./components/app-diy-goods-list.vue";
+	import {mapGetters, mapState} from "vuex";
+	import appRich from "@/components/basic-component/app-rich/parse";
+	import appVideo from "@/components/page-component/app-video/app-video";
+	import appImageAd from "@/components/page-component/app-image-ad/app-image-ad";
+	import appHotspot from "@/components/basic-component/app-hotspot/app-hotspot";
+	import appDiyList from "@/components/page-component/index/app-diy-list";
+	
 	import appNavBar from '@/components/page-component/index/app-nav-bar.vue';
 	export default {
 		components: {
-			appNavBar
+			appNavBar,
+			appDiyList,
+			// mchShare,
+			// appDiyGoodsList,
+			appRich,
+			appVideo,
+			appImageAd,
+			appHotspot,
+		},
+		computed: {
+		    // ...mapState({
+		    //     userInfo: state => state.user.info,
+		    // }),
+		    ...mapGetters('mallConfig', {
+		        getTheme: 'getTheme',
+		    }),
 		},
 		data() {
 			return {
-swiperKey:0
+				swiperKey: 0,
+
+				exampleDetail: null,
 			};
 		},
+		onLoad(option) {
+			this.$showLoading()
+			this.$request({
+				url: this.$api.example.detail,
+				data: {
+					example_id: option.id
+				},
+				method: 'post'
+			}).then(res => {
+				if (res.code === 0) {
+					this.exampleDetail = res.data
+					this.exampleDetail.banner_imgs = JSON.parse(this.exampleDetail.banner_imgs)
+					this.exampleDetail.detail = JSON.parse(this.exampleDetail.detail)
+				}
+				this.$hideLoading()
+			})
+		},
 		methods: {
-			swiperChange(e){
+			swiperChange(e) {
 				console.log(e.detail.current)
 				this.swiperKey = e.detail.current
 			},
-		}
+			transLabelBackgroundPosition(val) {
+			    val = Number(val);
+			    switch (val) {
+			        case 1:
+			            return 'left top';
+			        case 2:
+			            return 'center top';
+			        case 3:
+			            return 'right top';
+			        case 4:
+			            return 'left center';
+			        case 5:
+			            return 'center center';
+			        case 6:
+			            return 'right center';
+			        case 7:
+			            return 'left bottom';
+			        case 8:
+			            return 'center bottom';
+			        case 9:
+			            return 'right bottom';
+			        default:
+			            return 'center';
+			    }
+			},
+			transLabelBackgroundRepeat(val) {
+			    val = Number(val);
+			    switch (val) {
+			        case 1:
+			            return 'no-repeat';
+			        case 2:
+			            return 'repeat-x';
+			        case 3:
+			            return 'repeat-y';
+			        case 4:
+			            return 'repeat';
+			        default:
+			            return 'no-repeat';
+			    }
+			},
+			rubikHotspot(hotspot) {
+			    if (hotspot && hotspot.link) {
+			        hotspot.link.url = hotspot.link.value;
+			        hotspot.link.openType = hotspot.link.open_type;
+			    }
+			    return hotspot;
+			},
+		},
+		 onShareAppMessage(res) {
+		    if (res.from === 'button') {// 来自页面内分享按钮
+		      console.log(res.target)
+		    }
+		    return {
+		      title: this.exampleDetail.app_share_title,
+		      path: '/pages/case/caseDetails?id='+this.exampleDetail.id
+		    }
+		  }
 	}
 </script>
 
@@ -121,10 +277,22 @@ swiperKey:0
 		background: #F8F8F8;
 		border-radius: 20rpx;
 		overflow: hidden;
-		padding: 36rpx;
+		padding: 36rpx 0;
 		margin-top: -20rpx;
+		position: relative;
+
+		.topradus {
+			width: 100%;
+			height: 20rpx;
+			background-color: #fff;
+			position: absolute;
+			top: 0;
+			left: 0;
+			z-index: 10;
+		}
+
 		.summary {
-			padding-bottom: 30rpx;
+			padding: 0 36rpx 30rpx;
 			background-color: #F8F8F8;
 
 			.title {
@@ -211,8 +379,10 @@ swiperKey:0
 			}
 		}
 	}
+
 	.swiper_cent {
 		position: relative;
+
 		.swiper_zhishi {
 			display: flex;
 			align-items: center;
@@ -220,12 +390,13 @@ swiperKey:0
 			justify-content: center;
 			position: absolute;
 			bottom: 39rpx;
-	
+
 			view {
 				width: 81rpx;
 				height: 4rpx;
 				background: #c8c8c8;
 			}
+
 			.view_active {
 				background: #f4f4f4;
 			}

+ 142 - 0
src/pages/case/caseList.vue

xqd
@@ -0,0 +1,142 @@
+<template>
+	<app-layout>
+		<view class="popcase">
+			<view class="item" v-for="(item,index) in exampleList"
+				@tap="goPage(`/pages/case/caseDetails?id=${item.id}`)">
+				<image :src="item.cover_pic" mode=""></image>
+				<view class="main-between bt">
+					<view class="main-between-y">
+						<view class="title t-omit">{{item.title}}</view>
+						<!-- <view class="desc">{{item.exampleStyle.name}}·{{item.exampleHouse.name}}</view> -->
+					</view>
+					<!-- <view class="price20"><text class="rmb">¥</text>2466.00</view> -->
+				</view>
+			</view>
+			<appNoGoods v-if="exampleList.length===0" :title="'没有任何案例...'"></appNoGoods>
+		</view>
+	</app-layout>
+</template>
+
+<script>
+	import appNoGoods from '@/components/page-component/app-no-goods/app-no-goods.vue'
+	export default {
+		components: {
+			appNoGoods
+		},
+		data() {
+			return {
+				exampleList: [],
+				page: 1,
+
+			};
+		},
+		watch: {
+
+		},
+		computed: {
+
+		},
+		methods: {
+			getExampleList() {
+				this.$request({
+					url: this.$api.example.list,
+					data: {
+						style_id: this.style_id,
+						house_id: this.house_id,
+						is_chosen: 0,
+						page: this.page
+					},
+					method: 'post'
+				}).then(res => {
+					if (res.code === 0) {
+						this.exampleList = res.data.list
+					}
+				})
+			},
+			goPage(url) {
+				uni.navigateTo({
+					url: url
+				})
+			},
+		},
+		onLoad(option) {
+			this.style_id = option.style_id ? option.style_id : ''
+			this.house_id = option.house_id ? option.house_id : ''
+			uni.setNavigationBarTitle({
+				title: option.nav_title
+			});
+			this.getExampleList()
+		},
+		onReachBottom() {
+			this.page++
+			this.getExampleList()
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	@import '../index/index.scss';
+
+	.tabs {
+		box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+		background-color: #fff;
+		padding: 30rpx 36rpx 20rpx;
+		position: relative;
+		z-index: 10;
+
+		.item {
+			display: inline-block;
+			text-align: center;
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #999999;
+			margin-right: 36rpx;
+		}
+
+		.active {
+			color: #222222;
+			position: relative;
+		}
+
+		.underline {
+			position: absolute;
+			bottom: 20rpx;
+			z-index: 100;
+		}
+	}
+
+	.popcase {
+		padding-top: 40rpx;
+
+		.item {
+			width: 678rpx;
+			height: auto;
+			background: #FFFFFF;
+			border-radius: 8rpx;
+			margin: 0 auto 30rpx;
+			overflow: hidden;
+
+			image {
+				width: 100%;
+				height: 340rpx;
+			}
+
+			.bt {
+				padding: 27rpx 24rpx 37rpx 33rpx;
+			}
+
+			.title {
+				width: 580rpx;
+				font-size: 32rpx;
+				font-weight: bold;
+				color: #222222;
+			}
+
+			.desc {
+				font-size: 22rpx;
+				font-weight: 500;
+				color: #A6824F;
+			}
+		}
+	}
+</style>

+ 10 - 9
src/pages/case/projectInfo.vue

xqd xqd xqd xqd xqd xqd xqd
@@ -1,7 +1,7 @@
 <template>
 	<app-layout>
-		<view v-if="!compositionList" class="u-goods-detail"></view>
-		<template v-if="compositionList">
+		<view v-if="!Object.keys(compositionList).length" class="u-goods-detail"></view>
+		<template v-else>
 			<app-nav-bar v-if="true" :fixed="true" :background-color="''" :xStyle="1" :hasMallSetting="2"
 				:hasHeight="false"></app-nav-bar>
 
@@ -224,10 +224,11 @@
 		},
 		data() {
 			return {
+				id:'',//套餐id
 				isCouponShow: false,
 				list: [],
 				isOpen: false, //hxj套装内商品是否展开
-				compositionList:[], //套餐详情
+				compositionList:{}, //套餐详情
 
 				showClose: false,
 				is_open: 0,
@@ -410,9 +411,9 @@
 			if (this.isLogin) {
 				this.$store.dispatch('user/info');
 			}
-			this.compositionList.id = options.id;
+			this.id = options.id;
 			// #ifndef MP-ALIPAY
-			this.loadData(this.compositionList.id, options);
+			this.loadData(this.id, options);
 			// #endif
 			this.sendPath = '/pages/goods/goods?id=' + options.id;
 			console.log(this.sendPath);
@@ -427,7 +428,7 @@
 			setTimeout(() => {
 				this.showClose = true;
 				// #ifdef MP-ALIPAY
-				this.loadData(this.compositionList.id, this.exchange);
+				this.loadData(this.id, this.exchange);
 				// #endif
 			});
 		},
@@ -441,7 +442,7 @@
 				title: this.compositionList.name,
 				imageUrl: this.goods.pic_url[0].pic_url,
 				query: {
-					id: this.compositionList.id
+					id: this.id
 				}
 			});
 		},
@@ -694,7 +695,7 @@
 				this.$request({
 					url: this.$api.composition.collect,
 					data: {
-						composition_id: this.compositionList.id
+						composition_id: this.id
 					},
 					method:'post'
 				}).then(response => {
@@ -729,7 +730,7 @@
 				// 	return;
 				// }
 				uni.navigateTo({
-					url: `/plugins/composition/detail/detail?composition_id=${this.compositionList.id}`
+					url: `/plugins/composition/detail/detail?composition_id=${this.id}`
 				});
 				// this.attrShow = true;
 			},

+ 65 - 17
src/pages/case/selectedCases.vue

xqd xqd xqd xqd xqd xqd xqd xqd
@@ -1,31 +1,31 @@
 <template>
-	<view>
+	<app-layout>
 		<view id="tabs-ewr">
 			<scroll-view class="main-left tabs" style="white-space: nowrap;" scroll-with-animation scroll-x :scroll-left="scrollLeft">
-				<block v-for="(item, index) in ['热门风格', '精选户型']" :key="index">
+				<block v-for="(item, index) in tabTitle" :key="index">
 					<view :class="{ item: true, active: activeIndex === index }" :id="'tab_' + index" @click="tabClick(index)">{{ item }}</view>
 				</block>
 				<!-- <view class="underline" :style="[tabBarStyle]"></view> -->
-			</scroll-view>
+			</scroll-view> 
 		</view>
-		<app-scroll-list :background="'#fff'"></app-scroll-list>
+		<app-scroll-list :background="'#fff'" :list="tabList"></app-scroll-list>
 		<view class="link">
 			<view class="title1">热门案例</view>
 			<image class="tyx" src="https://t17.9026.com/web/statics/image/index/tyx.png" mode=""></image>
-		</view>
+		</view> 
 		<view class="popcase">
-			<view class="item" v-for="(item,index) in 3" @tap="goPage">
-				<image src="https://t17.9026.com/web/statics/image/index/3.png" mode=""></image>
+			<view class="item" v-for="(item,index) in exampleList" @tap="goPage(`/pages/case/caseDetails?id=${item.id}`)">
+				<image :src="item.cover_pic" mode=""></image>
 				<view class="main-between bt">
 					<view class="main-between-y">
-						<view class="title">北欧质感现代风</view>
-						<view class="desc">九林居·3室1厅</view>
+						<view class="title t-omit">{{item.title}}</view>
+						<!-- <view class="desc">{{item.exampleStyle.name}}·{{item.exampleHouse.name}}</view> -->
 					</view>
-					<view class="price20"><text class="rmb">¥</text>2466.00</view>
+					<!-- <view class="price20"><text class="rmb">¥</text>2466.00</view> -->
 				</view>
 			</view>
 		</view>
-	</view>
+	</app-layout>
 </template>
  
 <script>
@@ -36,8 +36,13 @@ export default {
 	},
 	data() {
 		return {
-			list: ['热门风格', '精选户型'],
+			tabTitle: ['热门风格', '精选户型'],
 			activeIndex: 0,
+			
+			tabList:[],
+			exampleList:[],
+			page:1,
+			
 			scrollLeft: 0, // 滚动scroll-view的左边滚动距离
 			scrollBarLeft: 0, // 移动bar需要通过translateX()移动的距离
 			barFirstTimeMove: true, // 滑块第一次移动时(页面刚生成时),无需动画,否则给人怪异的感觉
@@ -52,6 +57,7 @@ export default {
 			// 视图更新后再执行移动操作
 			this.$nextTick(() => {
 				this.scrollByIndex();
+				this.getTabList()
 			});
 		}
 	},
@@ -91,9 +97,44 @@ export default {
 		}
 	},
 	methods: {
-		goPage(){
+		getTabList(){
+			this.$showLoading()
+			let url=this.activeIndex?this.$api.example.house_list:this.$api.example.style_list
+			this.$request({
+				url:url,
+				method:'post'
+			}).then(res=>{
+				if(res.code===0){
+					this.tabList=[]
+					for (let i = 0; i < res.data.length; i++) {
+						let item=res.data[i]
+						let link=!this.activeIndex?`?style_id=${item.id}`:`?house_id=${item.id}`
+						this.tabList.push({image:item.cover_img,id:item.id,tag:item.name,link:`/pages/case/caseList${link}&nav_title=${item.name}`})
+					}
+				}
+				this.$hideLoading()
+			})
+		},
+		getExampleList(){
+			this.$request({
+				url:this.$api.example.list,
+				data:{
+					// style_id,
+					// house_id,
+					is_chosen:1,
+					page:this.page
+				},
+				method:'post'
+			}).then(res=>{
+				if(res.code===0){
+					this.exampleList=res.data.list
+				}
+			})
+		},
+
+		goPage(url){
 			uni.navigateTo({
-				url:'/pages/case/caseDetails'
+				url:url
 			})
 		},
 		// 设置一个init方法,方便多处调用
@@ -130,7 +171,7 @@ export default {
 			// 创建节点查询
 			let query = uni.createSelectorQuery().in(this);
 			// 历遍所有tab,这里是执行了查询,最终使用exec()会一次性返回查询的数组结果
-			for (let i = 0; i < this.list.length; i++) {
+			for (let i = 0; i < this.tabTitle.length; i++) {
 				// 只要size和rect两个参数
 				query.select(`#tab_${i}`).fields({
 					size: true,
@@ -175,6 +216,12 @@ export default {
 	},
 	onLoad() {
 		this.init();
+		this.getTabList()
+		this.getExampleList()
+	},
+	onReachBottom() {
+		this.page++
+		this.getExampleList()
 	}
 };
 </script>
@@ -209,7 +256,7 @@ export default {
 .popcase{
 	.item{
 		width: 678rpx;
-		height: 466rpx;
+		height: auto;
 		background: #FFFFFF;
 		border-radius: 8rpx;
 		margin: 0 auto 30rpx;
@@ -219,9 +266,10 @@ export default {
 			height: 340rpx;
 		}
 		.bt{
-			padding: 10rpx 24rpx 31rpx 33rpx;
+			padding: 27rpx 24rpx 37rpx 33rpx;
 		}
 		.title{
+			width: 580rpx;
 			font-size: 32rpx;
 			font-weight: bold;
 			color: #222222;

+ 45 - 6
src/pages/favorite/favorite.vue

xqd xqd xqd
@@ -232,8 +232,45 @@
 			</view>
 
 
-			<view class="f-topic" v-if="getCurrent === 1" :class="getCurrent === 1 ? 'f-good-show' : 'f-good-hidden'">
-			        <app-special-topic-list :cat-show="false" :topic-list="topicList"></app-special-topic-list>
+			<view class="f-good" style="margin-top: 115rpx;" v-if="getCurrent === 1" :class="getCurrent === 1 ? 'f-good-show' : 'f-good-hidden'">
+			        <!-- <app-special-topic-list :cat-show="false" :topic-list="topicList"></app-special-topic-list> -->
+					<view class="dir-left-nowrap" v-for="(item,index) in topicList" :key="index">
+						<good-action style="width: 750rpx" :index="index" :theme="getTheme" @del="del" @open="openAction" @share="share" :disabled="touch" :show="item.show">
+							<view class="f-item u-border-bottom dir-left-nowrap" @click="routeUrl({page_url:`/pages/case/projectInfo?id=${item.id}`})">
+								<image class="f-img" :src="item.cover_img" />
+								<!-- 此层wrap在此为必写的,否则可能会出现标题定位错误 -->
+								<view class="f-content dir-top-wrap main-between">
+									<text class="t-omit-two f-title">{{ item.name }}</text>
+									<view>
+										<!-- <view class="f-invalid dir-left-nowrap cross-center main-between" v-if="item.status_type === 3">
+											<image src="https://shop.9026.com/web/statics/image/mall/static/icon/invalid.png"></image>
+											<text>失效</text>
+										</view>
+										<view class="f-low-stock dir-left-nowrap cross-center main-between" v-if="item.status_type === 2">
+											<image src="https://shop.9026.com/web/statics/image/mall/static/icon/low_stock.png"></image>
+											<text>低库存</text>
+										</view>
+										<view class="f-low-price dir-left-nowrap" v-if="item.status_type === 1">
+											<view class="dir-left-nowrap main-between cross-center">
+												<image src="https://shop.9026.com/web/statics/image/mall/static/icon/low_price.png"></image>
+												比收藏时降价{{ item.low_price }}元
+											</view>
+										</view> -->
+										<view class="dir-left-nowrap main-between" v-if="item.status_type !== 3">
+											<template v-if="item.is_negotiable == 1">
+												<view :style="{ color: getTheme.color, 'margin-bottom': '8rpx' }">价格面议</view>
+											</template>
+											<view v-else class="dir-top-wrap main-between">
+												<text class="f-price" :style="{ color: getTheme.color }">¥{{ item.price }}</text>
+												<text class="f-scale">已售{{ item.sale_num }}</text>
+											</view>
+										</view>
+									</view>
+								</view>
+							</view>
+						</good-action>
+					</view>
+					
 			</view>
 		</view>
 	</app-layout>
@@ -428,11 +465,14 @@ export default {
 			}
 		},
 
-		async getTopicList(bool) {
+		async getTopicList(bool) { //老版专题
 			const e = await this.$request({
-				url: this.$api.user.my_favorite_topic,
-				method: 'get',
+				// url: this.$api.user.my_favorite_topic,
+				// method: 'get',
+				url: this.$api.composition.list,
+				method: 'post',
 				data: {
+					is_my_collect:1,
 					page: this.topic_page
 				}
 			});
@@ -445,7 +485,6 @@ export default {
 			} else {
 				this.topicList.push(...list);
 			}
-			console.log('list', list);
 		},
 		del(index) {
 			if (this.getCurrent === 0) {

+ 2 - 2
src/pages/index/binding/binding.vue

xqd xqd
@@ -1,5 +1,5 @@
 <template>
-	<view>
+	<app-layout>
 		<view class="properties_list">
 			<view class="item main-left" v-for="(item,index) in dataList" :key="index" @click="selectMasterEstate(index,item.id)">
 				<view class="left">
@@ -66,7 +66,7 @@
 		</view>
 		<button type="default" @click="addmyEstate" :class="{'add':true, 'allow-add':true, 'not-add':false}"
 			:disabled="fasle">添加楼盘</button>
-	</view>
+	</app-layout>
 </template>
 
 <script>

+ 24 - 24
src/pages/index/hxj_index_component.vue

xqd xqd xqd xqd
@@ -41,12 +41,12 @@
 					</view>
 				</view>
 			</view>
-			<view class="more">
+			<!-- <view class="more">
 				<view>VIEW MORE</view>
 				<view>
 					<image src="https://t17.9026.com/web/statics/image/index/viewmore.png" mode=""></image>
 				</view>
-			</view>
+			</view> -->
 		</view>
 		<view class="link ">
 			<view class="title1 main-left cross-center">优惠券<image class="coupon_1"
@@ -156,7 +156,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" @click="selectCat(index)">{{item.menuName}}</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>
 			<image class="tyx" src="https://t17.9026.com/web/statics/image/index/tyx.png" mode=""></image>
 		</view>
 		<view class="hxzy">
@@ -237,8 +237,8 @@
 					{
 						image: 'https://t17.9026.com/web/statics/image/index/temporary/jhk-1634283667210.png',
 						title: '定制产品',
-						tag: '定制',
-						link: ''
+						tag: '预约',
+						link: '/pages/case/appointment/appointment-form'
 					},
 					{
 						image: 'https://t17.9026.com/web/statics/image/index/2.png',
@@ -246,25 +246,25 @@
 						tag: '套装'
 					}
 				],
-				jdlg: [{
-						title: '兴城人居ins风套装',
-						sub_title: '细节控·轻奢风',
-						price: '65622',
-						cover_image: '3',
-					},
-					{
-						title: '风创造「最大坪效」85m²MUJI',
-						sub_title: '细节控·轻奢风',
-						price: '7486',
-						cover_image: 'temporary/jhk-1634283447190'
-					},
-					{
-						title: '85m²MUJI风创造「最大坪效」',
-						sub_title: '细节控·轻奢风',
-						price: '27853',
-						cover_image: 'temporary/jhk-1634284367308'
-					}
-				],
+				// jdlg: [{
+				// 		title: '兴城人居ins风套装',
+				// 		sub_title: '细节控·轻奢风',
+				// 		price: '65622',
+				// 		cover_image: '3',
+				// 	},
+				// 	{
+				// 		title: '风创造「最大坪效」85m²MUJI',
+				// 		sub_title: '细节控·轻奢风',
+				// 		price: '7486',
+				// 		cover_image: 'temporary/jhk-1634283447190'
+				// 	},
+				// 	{
+				// 		title: '85m²MUJI风创造「最大坪效」',
+				// 		sub_title: '细节控·轻奢风',
+				// 		price: '27853',
+				// 		cover_image: 'temporary/jhk-1634284367308'
+				// 	}
+				// ],
 				qwe: [
 					{
 						'title': '兴城人居',

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

xqd
@@ -108,6 +108,7 @@
 		},
 		onLoad(options) {
 			this.$commonLoad.onload(options);
+			this.$store.dispatch('user/isEnterSales',false);
 			// #ifdef H5
 			this.$jwx.config();
 			// #endif

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

xqd xqd xqd xqd
@@ -22,7 +22,7 @@
 					</view> -->
 					<view :key="mchIndex" class="group">
 						<!-- 循环商户列表start -->
-						<view style="padding: 26rpx 32rpx;">
+						<view style="padding: 26rpx 32rpx;" v-if="false">
 							<view class="dir-left-nowrap cross-center" style="padding: 10rpx 0;line-height: 1.2;">
 								<!-- 商户名start -->
 								<view class="box-grow-0">
@@ -108,7 +108,7 @@
 							</template>
 							<!-- 自提门店信息end -->
 						</view>
-						<view class="line"></view>
+						<!-- <view class="line"></view> -->
 						<!-- 选择配送方式start -->
 						<!-- <view v-if="mch.show_delivery !== false" style="padding: 18rpx 32rpx;">
 							<view class="dir-left-nowrap cross-center" style="padding: 18rpx 0;">
@@ -150,7 +150,7 @@
 								</view>
 							</view>
 						</template><!-- 同城配送信息end -->
-						<view class="line"></view>
+						<!-- <view class="line"></view> -->
 						<view v-if="!mch.pick_up_enable"
 							style="height: 80rpx;line-height: 80rpx; background: #fff4f3;padding: 0 24rpx;">
 							<view>以下商品满{{mch.pick_up_price}}元起送</view>
@@ -160,8 +160,7 @@
 						<view class="line"></view>
 						<template v-if="(mch.coupon && mch.coupon.enabled) ||
                                 (mch.member_discount > 0 || mch.member_discount < 0) ||
-                                (mch.integral && mch.integral.can_use) ||
-                                mch.temp_vip_discount ||
+                                (mch.integral && mch.integral.can_use) || mch.temp_vip_discount ||
                                 (mch.insert_rows && mch.insert_rows.length) ||
                                 (mch.full_reduce_discount > 0 || mch.full_reduce_discount < 0)">
 							<view style="padding: 20rpx 32rpx;">

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

xqd xqd xqd xqd
@@ -78,18 +78,7 @@
 					avatar: '',
 					mobile: '',
 					name: '',
-					estates: [
-					// 	{
-					// 	estate_id: '',
-					// 	estate_no: '',
-					// 	room_no: '',
-						
-					// 	regionId:{},
-					// 	region:'',
-					// 	multiIndex:[],
-					// 	estate_name: '',
-					// },
-					]
+					estates: []
 				}
 			};
 		},
@@ -132,6 +121,16 @@
 				uni.setNavigationBarTitle({
 				    title: '添加客户'
 				});
+				this.form.estates.push({
+						estate_id: '',
+						estate_no: '',
+						room_no: '',
+						
+						regionId:{},
+						region:'',
+						multiIndex:[],
+						estate_name: '',
+					})
 			}
 			
 			// wx.enableAlertBeforeUnload({
@@ -251,11 +250,11 @@
 					}
 				}
 				let data={
-					sale_customer_id:this.form.sale_customer_id,
 					avatar:this.form.avatar,
 					mobile:this.form.mobile,
 					name:this.form.name,
 				}
+				this.form.sale_customer_id?data.sale_customer_id=this.form.sale_customer_id:''
 				for(let i in this.form.estates){
 					for (let j in this.form.estates[i]) {
 						if(j==='estate_id' || j==='estate_no' || j==='room_no'){
@@ -274,6 +273,11 @@
 						uni.showToast({
 							title:this.form.sale_customer_id?'编辑成功':'添加成功',
 						})
+					}else{
+						uni.showToast({
+							title:res.msg,
+							icon:'none'
+						})
 					}
 				}).catch(rej=>{
 					uni.showToast({

+ 22 - 8
src/pages/sale/properties/addProperties.vue

xqd xqd xqd xqd xqd
@@ -18,6 +18,7 @@
 				<image class="bg" src="https://t17.9026.com/web/statics/image/sale/properties_gradual.png" mode="">
 				</image>
 			</view>
+			<view class="no-more" v-if="noMore">没有更多了...</view>
 			<app-no-goods v-if="dataList.length === 0" :title="'暂无数据'" background="#f7f7f7"></app-no-goods>
 		</view>
 		<u-popup v-model="show" mode="center" border-radius="14" @close="show = false">
@@ -58,6 +59,7 @@
 				name:'',
 				
 				dataList:[],
+				noMore:false,
 				selectIndex:-1,
 				regionId:{},
 			};
@@ -69,15 +71,11 @@
 		},
 		methods:{
 			selectEstate(index,name,id,item){
-				// if(this.type==='addCustomer'){
 					let pages = getCurrentPages();
 					let currPage = pages[pages.length - 1]; //当前页面
 					let prevPage = pages[pages.length - 2]; //上一个页面
 					let multiIndex=[item.province_id,item.city_id,item.district_id]
-					prevPage.$vm.estateInfo={id:id,name:name,multiIndex:multiIndex}
-					// uni.navigateBack()
-					// return
-				// }
+					prevPage.$vm.estateInfo={id:id,name:name,multiIndex:multiIndex,address:item.address}
 				this.selectIndex=index
 				this.show=true
 			},
@@ -120,14 +118,23 @@
 					method: 'post'
 				}).then(res=>{
 					if(res.code===0){
-						this.dataList=res.data.list
+						if(this.page===1){
+							this.dataList=res.data.list
+						}else{
+							this.dataList=this.dataList.concat(res.data.list)
+						}
+						if(res.data.list.length<20){
+							this.noMore=true
+						}
 					}
 				})
 			}
 		},
 		onReachBottom() {
-			this.page++
-			this.getData(this.page)
+			if(!noMore){
+				this.page++
+				this.getData(this.page)
+			}
 		}
 	}
 </script>
@@ -271,4 +278,11 @@
 			color: #FFFFFF;
 		}
 	}
+	.no-more {
+		font-size: 24rpx;
+		font-weight: 500;
+		color: #666666;
+		margin-top: 37rpx;
+		text-align: center;
+	}
 </style>

+ 7 - 0
src/pages/user-center/about-mall/ComplaintsSuggestions.vue

xqd
@@ -38,6 +38,13 @@
 		},
 		methods:{
 			submit(){
+				if(this.content===''){
+					uni.showToast({
+						title:'请填写评价内容',
+						icon:'none'
+					})
+					return
+				}
 				this.$request({
 					url:this.$api.user.suggestion,
 					data:{

+ 10 - 4
src/pages/user-center/evaluate/list.vue

xqd xqd xqd xqd
@@ -59,7 +59,7 @@
 				</view>
 			</view>
 
-			<view class="no-more">没有更多了...</view>
+			<view class="no-more" v-if="noMore">没有更多了...</view>
 		</view>
 	</app-layout>
 </template>
@@ -72,7 +72,8 @@
 		data() {
 			return {
 				page: 1,
-				evaluateList: []
+				evaluateList: [],
+				noMore:false
 			};
 		},
 		computed: {
@@ -84,8 +85,10 @@
 			this.getData()
 		},
 		onReachBottom() {
-			this.page++
-			this.getData()
+			if(!this.noMore){
+				this.page++
+				this.getData()
+			}
 		},
 		methods: {
 			getData() {
@@ -105,6 +108,9 @@
 						} else {
 							this.evaluateList = this.evaluateList.concat(evaluateList)
 						}
+						if(res.data.list.length<20){
+							this.noMore=true
+						}
 					}
 					this.$hideLoading()
 				}).catch(rej => {

+ 13 - 9
src/plugins/composition/components/app-list/app-list.vue

xqd xqd xqd xqd xqd
@@ -24,7 +24,7 @@
 						        </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.max_price}}</text><text class="paid_price" v-show="goods.total_price">实付:¥<text>{{goods.total_price}}</text></text></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">实付:¥<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>
@@ -51,7 +51,7 @@
                             </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.max_price}}</text><text class="paid_price" v-show="goods.total_price">实付:¥<text>{{goods.total_price}}</text></text></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">实付:¥<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>
@@ -175,6 +175,7 @@
                 that.list[that.index].goods_list.forEach(v => {
                     if(v.id == that.goods.id) {
                         v.choose_attr = selectAttr;
+						!v.choose_attr.number?v.choose_attr.number=1:''
                         v.detail.selectAttr = selectAttr;
                         for(let i in selectAttr.attr_list) {
                             for(let j in v.attr_groups) {
@@ -273,15 +274,18 @@
                     that.list[i].total_price = 0;
                     let allchoose = true;
                     for(let x in that.list[i].goods_list) {
-                        if(that.list[i].goods_list[x].choose_attr) {
-                            if(that.list[i].goods_list[x].choose_attr.price > 0) {
-                                that.list[i].total_price += +that.list[i].goods_list[x].choose_attr.price;
-                            }
+						let item = that.list[i].goods_list[x]
+                        if(item.choose_attr && item.choose_attr.number) {
+                            // if(item.choose_attr.price > 0) {
+                                that.list[i].total_price += item.choose_attr.price*item.choose_attr.number;
+								item.total_price = +item.choose_attr.price*item.choose_attr.number
+								that.max_discount += (+item.price)*item.choose_attr.number
+                            // }
                         }else {
                             allchoose = false;
                         }
-                        if(that.list[i].choose && that.list[i].goods_list[x].choose_attr == null ) {
-                            that.noAttrList.push(that.list[i].goods_list[x])
+                        if(that.list[i].choose && item.choose_attr == null ) {
+                            that.noAttrList.push(item)
                         }
                     }
                     if(that.list[i].total_price < 0) {
@@ -319,7 +323,7 @@
 					}
                     for(let x in that.list[i].goods_list) {
 						let item=that.list[i].goods_list[x]
-                        if(item.choose_goods && item.choose_attr) {
+                        if(item.choose_goods && item.choose_attr && item.choose_attr.number) {
                             item.total_price = (+item.choose_attr.price - +item.price)*item.choose_attr.number
                             that.max_discount += (+item.price)*item.choose_attr.number
                             if(item.total_price < 0) {

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

xqd
@@ -189,7 +189,7 @@
 							let noChoose = true;
 							for (let y in that.list[i].goods_list) {
 								if (that.list[i].goods_list[y].choose_goods && that.list[i].goods_list[y].choose_attr
-									.attr_list) {
+									.attr_list && that.list[i].goods_list[y].choose_attr.number>=1) {
 									noChoose = false;
 									for (let x in that.list[i].goods_list[y].choose_attr.attr_list) {
 										attr.push({

BIN
src/static/image.zip


+ 161 - 153
src/store/modules/user.js

xqd
@@ -1,175 +1,183 @@
 import user from '../../core/user.js';
 
 const state = {
-    accessToken: null,
-    info: null,
-    showLoginModal: false,
-    tempParentId: 0,
-    showAttention: false,
-    showAttentionTwo:false,
-    sign: {
-        mobile: '',
-        pic_captcha: '',
-        sms_captcha: '',
-        validate_code_id: -1
-    },
-    isSign: false,
-	
-	selectedProperties:{
-		name:'绑定楼盘'
-	},
-	
-	isEnterSales:false,//是否进入销售端
+	accessToken: null,
+	info: null,
+	showLoginModal: false,
+	tempParentId: 0,
+	cart_nums: 0,
+	showAttention: false,
+	showAttentionTwo: false,
+	sign: {
+		mobile: '',
+		pic_captcha: '',
+		sms_captcha: '',
+		validate_code_id: -1
+	},
+	isSign: false,
+
+	selectedProperties: {
+		name: '绑定楼盘'
+	},
+
+	isEnterSales: false, //是否进入销售端
 };
 
 const getters = {
-    accessToken(state) {
-        return state.accessToken;
-    },
-    info(state) {
-        return state.info;
-    },
-    showLoginModal(state) {
-        return state.showLoginModal;
-    },
-    tempParentId(state) {
-        return state.tempParentId;
-    },
-    is_vip(state) {
-        return state.is_vip_card_user;
-    },
-    showAttention(state) {
-        return state.showAttention;
-    },
-    showAttentionTwo(state) {
-        return state.showAttentionTwo;
-    },
-    sign(state) {
-        return state.sign;
-    },
-    isSign(state) {
-        return state.isSign;
-    },
+	accessToken(state) {
+		return state.accessToken;
+	},
+	info(state) {
+		return state.info;
+	},
+	cart_nums(state) {
+		return state.cart_nums;
+	},
+	showLoginModal(state) {
+		return state.showLoginModal;
+	},
+	tempParentId(state) {
+		return state.tempParentId;
+	},
+	is_vip(state) {
+		return state.is_vip_card_user;
+	},
+	showAttention(state) {
+		return state.showAttention;
+	},
+	showAttentionTwo(state) {
+		return state.showAttentionTwo;
+	},
+	sign(state) {
+		return state.sign;
+	},
+	isSign(state) {
+		return state.isSign;
+	},
 	getIsEnterSales(state) {
-	    return state.isEnterSales;
+		return state.isEnterSales;
 	}
 };
 
 const mutations = {
-    accessToken(state, data) {
-        state.accessToken = data;
-    },
-    info(state, data) {
-        state.info = data;
-    },
-    showLoginModal(state, data) {
-        state.showLoginModal = data;
-    },
-    tempParentId(state, data) {
-        state.tempParentId = data;
-    },
-    showAttention(state, data) {
-        state.showAttention = data;
-    },
-    showAttentionTwo(state, data) {
-        state.showAttentionTwo = data;
-    },
-    sign(state, data) {
-        state.sign = data;
-    },
-    isSign(state, data) {
-        state.isSign = data;
-    },
-	isEnterSales(state,data) {
-		if(data){
-			console.log('进入销售端',data)
-		}else{
-			console.log('退出销售端',data)
+	accessToken(state, data) {
+		state.accessToken = data;
+	},
+	info(state, data) {
+		state.info = data;
+	},
+	cart_nums(state, data) {
+		state.cart_nums = data;
+	},
+	showLoginModal(state, data) {
+		state.showLoginModal = data;
+	},
+	tempParentId(state, data) {
+		state.tempParentId = data;
+	},
+	showAttention(state, data) {
+		state.showAttention = data;
+	},
+	showAttentionTwo(state, data) {
+		state.showAttentionTwo = data;
+	},
+	sign(state, data) {
+		state.sign = data;
+	},
+	isSign(state, data) {
+		state.isSign = data;
+	},
+	isEnterSales(state, data) {
+		if (data) {
+			console.log('进入销售端', data)
+		} else {
+			console.log('退出销售端', data)
 		}
-	    state.isEnterSales = data;
+		state.isEnterSales = data;
 	},
-	selectedProperties(state,data){
-		state.selectedProperties=data
+	selectedProperties(state, data) {
+		state.selectedProperties = data
 	}
 };
 
 const actions = {
 	isEnterSales(context, data) {
-	    context.commit('isEnterSales', data);
-	},
-    sign(context, data) {
-        context.commit('sign', data);
-    },
-    isSign(context, data) {
-        context.commit('isSign', data);
-    },
-    accessToken(context) {
-        if (!user.isLogin()) {
-            context.commit('accessToken', null);
-        }
-        user.getAccessToken().then(accessToken => {
-            context.commit('accessToken', accessToken);
-        });
-    },
-    info(context, options) {
-        if (!user.isLogin()) {
-            context.commit('accessToken', null);
-        }
-        user.getAccessToken().then(accessToken => {
-            context.commit('accessToken', accessToken);
-            user.getInfo(options).then(data => {
-                context.commit('info', data);
-            });
-        }).catch((err) => {
-            context.commit('showLoginModal', true);
-        });
-    },
-    refreshInfo(context) {
-        context.commit('accessToken', null);
-    },
-    refresh(context) {
-        if (!user.isLogin()) {
-            context.commit('accessToken', null);
-        }
-        user.getAccessToken().then(accessToken => {
-            context.commit('accessToken', accessToken);
-            user.getInfo({
-                refresh: true,
-            }).then(data => {
-                context.commit('info', data);
-            }).catch(e => {
-            });
-        }).catch(e => {
-        });
-    },
-    setTempParentId(context, data) {
-        context.commit('tempParentId', data);
-    },
-    loadAccessTokenFormCache(context) {
-        if (context.accessToken) return;
-        user.getAccessToken({
-            cacheOnly: true,
-        }).then(e => {
-            if (!e) return;
-            context.commit('accessToken', e);
-        });
-    },
-    logout(context) {
-        context.commit('accessToken', null);
-        user.loginByToken(null);
-    },
-    showAttention(context, data) {
-        context.commit('showAttention', data);
-    },
-    showAttentionTwo(context, data) {
-        context.commit('showAttentionTwo', data);
-    }
+		context.commit('isEnterSales', data);
+	},
+	sign(context, data) {
+		context.commit('sign', data);
+	},
+	isSign(context, data) {
+		context.commit('isSign', data);
+	},
+	cart_nums(context, data) {
+		context.commit('cart_nums', data);
+	},
+	accessToken(context) {
+		if (!user.isLogin()) {
+			context.commit('accessToken', null);
+		}
+		user.getAccessToken().then(accessToken => {
+			context.commit('accessToken', accessToken);
+		});
+	},
+	info(context, options) {
+		if (!user.isLogin()) {
+			context.commit('accessToken', null);
+		}
+		user.getAccessToken().then(accessToken => {
+			context.commit('accessToken', accessToken);
+			user.getInfo(options).then(data => {
+				context.commit('info', data);
+			});
+		}).catch((err) => {
+			context.commit('showLoginModal', true);
+		});
+	},
+	refreshInfo(context) {
+		context.commit('accessToken', null);
+	},
+	refresh(context) {
+		if (!user.isLogin()) {
+			context.commit('accessToken', null);
+		}
+		user.getAccessToken().then(accessToken => {
+			context.commit('accessToken', accessToken);
+			user.getInfo({
+				refresh: true,
+			}).then(data => {
+				context.commit('info', data);
+			}).catch(e => {});
+		}).catch(e => {});
+	},
+	setTempParentId(context, data) {
+		context.commit('tempParentId', data);
+	},
+	loadAccessTokenFormCache(context) {
+		if (context.accessToken) return;
+		user.getAccessToken({
+			cacheOnly: true,
+		}).then(e => {
+			if (!e) return;
+			context.commit('accessToken', e);
+		});
+	},
+	logout(context) {
+		context.commit('accessToken', null);
+		user.loginByToken(null);
+	},
+	showAttention(context, data) {
+		context.commit('showAttention', data);
+	},
+	showAttentionTwo(context, data) {
+		context.commit('showAttentionTwo', data);
+	}
 };
 
 export default {
-    namespaced: true,
-    state,
-    getters,
-    mutations,
-    actions
+	namespaced: true,
+	state,
+	getters,
+	mutations,
+	actions
 }