liude 1 жил өмнө
parent
commit
43f508e0fc

+ 13 - 0
src/api/client/business.js

@@ -93,6 +93,19 @@ export function addGoodsFavorite(id) {
   });
 }
 
+// 商品接口 - 获取商家商品列表
+
+export function changeGoodsType(merchantId,data) {
+  return request({
+    url: `/maintain/merchant/${merchantId}/goods`,
+    method: 'get',
+    data:data,
+    header: {
+      'Content-Type': 'application/x-www-form-urlencoded',
+    },
+  });
+}
+
 // 取消收藏接口
 export function cancelFavorite(id) {
   return request({

+ 189 - 0
src/components/communityPop/index.vue

@@ -0,0 +1,189 @@
+<template>
+	<view class="container">
+		<u-sticky>
+			<view class="pop-top">
+				<view class="top-box">
+					<view class="top-black-box"></view>
+				</view>
+				<view class="top-title"> 1244条回复 </view>
+			</view>
+		</u-sticky>
+
+		<view class="center-box">
+			<view class="center-item" v-for="item of 7">
+				<view class="item-top">
+					<view class="top-left">
+						<view class="top-img">
+							<image src="@/static/QR57a.jpg" class="img" mode=""></image>
+						</view>
+						<view class="top-text">
+							<view class="text-title">测试名称</view>
+							<view class="text-address"> 2天前 山东潍坊</view>
+						</view>
+					</view>
+					<view class="top-right">
+						<u-icon name="heart" size="22"></u-icon>
+					</view>
+				</view>
+
+				<view class="item-text">
+					啊水泡车【卡擦【帕克我看篇v喵帕斯【普外科哦v骄傲【什么码数来看是卡拉瓦乔扣篮十多年可怜那棵老派的尼克拉斯你的卡拉省的
+				</view>
+			</view>
+		</view>
+
+		<view class="bottom-box">
+			<view class="bottom-item">
+				<view class="item-left">
+					<u--input
+					    placeholder="写回复"
+					    border="surround"
+					    v-model="value"
+						shape='circle'
+						customStyle="background-color:#F2F2F2"
+					  ></u--input>
+				</view>
+				<view class="item-right">
+					<button @click="handlerPopPublishBtn" class="btn">发布</button>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				value:''
+			}
+		},
+		methods:{
+			// 发布评论
+			handlerPopPublishBtn(){
+
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		height: 70vh;
+		overflow-y: auto;
+		box-sizing: border-box;
+		padding-bottom: 120rpx;
+
+		.pop-top {
+			background-color: #fff;
+			border-radius: 40rpx;
+			padding: 20rpx 0;
+		}
+
+		.top-box {
+			display: flex;
+			justify-content: center;
+
+			.top-black-box {
+				width: 10%;
+				height: 10rpx;
+				background-color: #000;
+				border-radius: 10%;
+			}
+		}
+
+		.top-title {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #000;
+			text-align: center;
+			margin-top: 20rpx;
+			letter-spacing: 2rpx;
+		}
+
+		.center-box {
+			margin-bottom: 20rpx;
+			padding: 0 20rpx;
+
+			.center-item {
+				margin-bottom: 40rpx;
+				border-radius: 20rpx;
+				.item-top {
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+
+					.top-left {
+						display: flex;
+						align-items: center;
+
+						.top-img {
+							.img {
+								width: 80rpx;
+								height: 80rpx;
+								border-radius: 50%;
+							}
+						}
+
+						.top-text {
+							display: flex;
+							flex-direction: column;
+							justify-content: space-around;
+							margin-left: 10rpx;
+
+							.text-title {
+								font-weight: bold;
+								font-size: 32rpx;
+								color: #000;
+							}
+
+							.text-address {
+								color: #8f8f8f;
+								font-size: 24rpx;
+							}
+						}
+					}
+				}
+
+				.item-text {
+					margin-top: 20rpx;
+					padding: 0 40rpx;
+				}
+			}
+		}
+
+		.bottom-box {
+			position: absolute;
+			bottom: 0;
+			background-color: #fff;
+			width: 100%;
+			height: 150rpx;
+
+			.bottom-item {
+				display: flex;
+				justify-content: space-around;
+				padding: 10rpx 20rpx 0;
+				box-sizing: border-box;
+				align-items: center;
+				.item-left{
+					width: 60%;
+					height: 70rpx;
+				}
+				.item-right{
+					width: 30%;
+					padding: 20rpx;
+					.btn{
+						border-radius: 20rpx;
+						text-align: center;
+						color: #fff;
+						background: linear-gradient(to right, #e8cbc0, #636fa4);
+						height: 70rpx;
+						font-size: 28rpx;
+						line-height: 70rpx;
+					}
+				}
+			}
+		}
+	}
+
+</style>

+ 2 - 2
src/components/empty/index.vue

@@ -23,12 +23,12 @@ export default {
 
 <style lang="scss" scoped>
 .empty {
-  height: 100vh;
+  // height: 100vh;
   display: flex;
   flex-direction: column;
   justify-content: center;
   align-items: center;
-  background-color: brown;
+  // background-color: brown;
   image {
     width: 350rpx;
     height: 400rpx;

+ 226 - 170
src/pages/client/clientPackage/communityPublish.vue

@@ -1,193 +1,249 @@
 <template>
-	<view class="container">
-		<view class="top-box">
-			<u--textarea border='none' v-model="textContent" count placeholder="写下自己的感受分享给更多人"></u--textarea>
-			<view class="upload-box">
-				<u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1" multiple
-					:maxCount="9"></u-upload>
-			</view>
-		</view>
-		<view class="item-box" @click="handlerGetLocation">
-			<view class="item-left">
-				<u-icon name="map" size='22'></u-icon>
-				<span class="fs-bold">你在哪里</span>
-				<span class="left-text">(越详细越容易被推荐噢)</span>
-			</view>
-			<view class="item-right">
-				<u-icon name="arrow-right"></u-icon>
-			</view>
-		</view>
-		<view class="btn-box">
-			<button class="btn" @click="handlerPublishBtn">发布</button>
-		</view>
-	</view>
+  <view class="container">
+    <view class="top-box">
+      <u--textarea border='none' v-model="textContent" count placeholder="写下自己的感受分享给更多人"></u--textarea>
+      <view class="upload-box">
+        <image class="upd-img" v-for="item of fileList" :src="item" mode="aspectFill"></image>
+        <view class="upload-item" @click="handlerUploadImg" v-if="fileList.length < 9">
+          <image class="img" src="@/static/QR57a.jpg" mode=""></image>
+        </view>
+      </view>
+    </view>
+    <view class="item-box" @click="handlerGetLocation">
+      <view class="item-left">
+        <u-icon name="map" size='22'></u-icon>
+        <span class="fs-bold">你在哪里</span>
+        <span class="left-text">(越详细越容易被推荐噢)</span>
+      </view>
+      <view class="item-right">
+        <u-icon name="arrow-right"></u-icon>
+      </view>
+    </view>
+    <view class="btn-box">
+      <button class="btn" @click="handlerPublishBtn">发布</button>
+    </view>
+  </view>
 </template>
 
 <script>
-  import { addClientContent } from '@/api/client/community.js';
-	export default {
-		data() {
-			return {
-				textContent: '',
-				fileList1: [],
-        userId:null
-			}
-		},
-    mounted(){
+  import {
+    addClientContent
+  } from '@/api/client/community.js';
+  export default {
+    data() {
+      return {
+        textContent: '',
+        fileList: [],
+        userId: null,
+        uploadCount: 0
+      }
+    },
+    mounted() {
       this.userId = this.$store.state.user.userMessage.id
     },
-		methods: {
-			// 获取当前定位
-			handlerGetLocation() {
-				wx.getLocation({
-					type: 'gcj02',
-					success(res) {
-						console.log("@@@@res", res);
-					},
-					fail(error){
-						console.log("error", error);
-					}
-				})
-			},
+    methods: {
+      // 获取当前定位
+      handlerGetLocation() {
+        wx.getLocation({
+          type: 'gcj02',
+          success(res) {
+            console.log("@@@@res", res);
+          },
+          fail(error) {
+            console.log("error", error);
+          }
+        })
+      },
       // 点击发布按钮
-      handlerPublishBtn(){
+      handlerPublishBtn() {
         let params = {
-          textContent:this.textContent,
-          status:0, // 状态:0-正常;1-屏蔽
-          type:'PURE_TEXT', // 动态类型:1-纯文字;2-图片;3-视频 允许值: PURE_TEXT, PHOTO, VIDEO
-          location:'山东潍坊', // 定位
-          userId:this.userId,
+          textContent: this.textContent,
+          status: 0, // 状态:0-正常;1-屏蔽
+          type: 'PURE_TEXT', // 动态类型:1-纯文字;2-图片;3-视频 允许值: PURE_TEXT, PHOTO, VIDEO
+          location: '山东潍坊', // 定位
+          userId: this.userId,
+        }
+        if (this.fileList.length != 0) {
+          params.type = 'PHOTO'
+          params.list = []
+          this.fileList.map((rs, idx) => {
+            params.list.push({
+              resourceKey: rs,
+              sort: idx
+            })
+          })
         }
-        console.log("@@@@params",params);
-        addClientContent(params).then(res=>{
-          console.log("addClientContent",res);
-          // if(res.code == 200){
-          //   uni.showToast({
-          //     title:'发布成功',
-          //     icon:'none'
-          //   })
-          //   this.textContent = ''
-          //   setTimeout(()=>{
-          //     uni.navigateBack(-1)
-          //   },1500)
-          // }else{
-          //   uni.showToast({
-          //     title:res.msg,
-          //     icon:'none'
-          //   })
-          //   return
-          // }
+        addClientContent(params).then(res => {
+          if (res.code == 200) {
+            uni.showToast({
+              title: '发布成功',
+              icon: 'none'
+            })
+            this.textContent = ''
+            setTimeout(() => {
+              uni.navigateBack(-1)
+            }, 1500)
+          } else {
+            uni.showToast({
+              title: res.msg,
+              icon: 'none'
+            })
+            return
+          }
         })
       },
-			// 删除图片
-			deletePic(event) {
-				this[`fileList${event.name}`].splice(event.index, 1)
-			},
-			// 新增图片
-			async afterRead(event) {
-				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
-				let lists = [].concat(event.file)
-				let fileListLen = this[`fileList${event.name}`].length
-				lists.map((item) => {
-					this[`fileList${event.name}`].push({
-						...item,
-						status: 'uploading',
-						message: '上传中'
-					})
-				})
-				for (let i = 0; i < lists.length; i++) {
-					const result = await this.uploadFilePromise(lists[i].url)
-					let item = this[`fileList${event.name}`][fileListLen]
-					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
-						status: 'success',
-						message: '',
-						url: result
-					}))
-					fileListLen++
-				}
-			},
-			uploadFilePromise(url) {
-				return new Promise((resolve, reject) => {
-					let a = uni.uploadFile({
-						url: 'http://192.168.2.21:7001/upload', // 仅为示例,非真实的接口地址
-						filePath: url,
-						name: 'file',
-						formData: {
-							user: 'test'
-						},
-						success: (res) => {
-							setTimeout(() => {
-								resolve(res.data.data)
-							}, 1000)
-						}
-					});
-				})
-			},
-		}
-	}
+      // 上传头像
+      async handlerUploadImg() {
+        try {
+          const res = await uni.showActionSheet({
+            itemList: ['拍照', '从相册选择'],
+          });
+
+          if (res.tapIndex === 0) {
+            // 用户选择拍照
+            this.takePhoto();
+          } else if (res.tapIndex === 1) {
+            // 用户选择从相册选择
+            this.chooseImage();
+          }
+        } catch (error) {
+          console.error(error);
+        }
+      },
+      // 拍照
+      takePhoto() {
+        uni.chooseImage({
+          sourceType: ['camera'],
+          count: 9 - this.uploadCount,
+          success: res => {
+            const tempFilePaths = res.tempFilePaths;
+            // 调用上传图片的方法
+            tempFilePaths.map(rs => {
+              this.uploadAvatar(rs);
+            })
+          },
+          fail: error => {
+            console.error(error);
+          },
+        });
+      },
+      //从相册中选择
+      chooseImage() {
+        uni.chooseImage({
+          sourceType: ['album'],
+          count: 9 - this.uploadCount,
+          success: res => {
+            const tempFilePaths = res.tempFilePaths;
+            tempFilePaths.map(rs => {
+              this.uploadAvatar(rs);
+            })
+            // 调用上传图片的方法
+          },
+          fail: error => {
+            console.error(error);
+          },
+        });
+      },
+      // 上传头像
+      uploadAvatar(filePath) {
+        // 在这里实现上传头像的逻辑,将filePath作为参数传入
+        this.fileList.push(filePath)
+        this.uploadCount = this.fileList.length
+        console.log('@@@filePath', this.fileList);
+        // this.queryParams.avatar = filePath;
+        this.$forceUpdate(); // 手动触发组件的重新渲染
+      },
+    }
+  }
 </script>
 
 <style lang="scss" scoped>
-	.container {
-		position: relative;
-		background-color: #F5F7F9;
-		height: 100vh;
+  .container {
+    position: relative;
+    background-color: #F5F7F9;
+    height: 100vh;
 
-		.top-box,
-		.item-box {
-			padding: 20rpx;
-			background-color: #fff;
-			border-radius: 20rpx;
+    .top-box,
+    .item-box {
+      padding: 20rpx;
+      background-color: #fff;
+      border-radius: 20rpx;
 
-			.upload-box {
-				margin-top: 20rpx;
-			}
-		}
+      .upload-box {
+        margin-top: 20rpx;
+        display: flex;
+        flex-wrap: wrap;
+
+        .upd-img {
+          width: 140rpx;
+          height: 140rpx;
+          border-radius: 20rpx;
+          margin: 10rpx;
+        }
+
+        .upload-item {
+          width: 140rpx;
+          height: 140rpx;
+          border: 2rpx solid #000;
+          border-radius: 20rpx;
+          display: flex;
+          flex-direction: column;
+          justify-content: center;
+          margin: 10rpx;
+
+          .img {
+            width: 80rpx;
+            height: 80rpx;
+            margin: 0 auto;
+          }
+        }
+      }
+    }
 
-		.item-box {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			margin-top: 20rpx;
+    .item-box {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      margin-top: 20rpx;
 
-			.item-left {
-				display: flex;
-				align-items: center;
-			}
-		}
+      .item-left {
+        display: flex;
+        align-items: center;
+      }
+    }
 
-		.btn-box {
-			position: absolute;
-			bottom: 0;
-			background-color: #fff;
-			height: 100rpx;
-			padding: 20rpx;
-			width: 95%;
-			display: flex;
-			justify-content: center;
+    .btn-box {
+      position: absolute;
+      bottom: 0;
+      background-color: #fff;
+      height: 100rpx;
+      padding: 20rpx;
+      width: 95%;
+      display: flex;
+      justify-content: center;
 
-			.btn {
-				width: 80%;
-				border-radius: 20rpx;
-				font-size: 28rpx;
-				color: #000;
-				background-color: #FECF4C;
-				height: 80rpx;
-				line-height: 80rpx;
-			}
-		}
+      .btn {
+        width: 80%;
+        border-radius: 20rpx;
+        font-size: 28rpx;
+        color: #000;
+        background-color: #FECF4C;
+        height: 80rpx;
+        line-height: 80rpx;
+      }
+    }
 
-		.fs-bold {
-			font-weight: bold;
-			font-size: 28rpx;
-			color: #000;
-			margin-left: 10rpx;
-		}
+    .fs-bold {
+      font-weight: bold;
+      font-size: 28rpx;
+      color: #000;
+      margin-left: 10rpx;
+    }
 
-		.left-text {
-			color: #a6a7a8;
-			font-size: 28rpx;
-			margin-left: 10rpx;
-		}
-	}
+    .left-text {
+      color: #a6a7a8;
+      font-size: 28rpx;
+      margin-left: 10rpx;
+    }
+  }
 </style>

+ 11 - 11
src/pages/client/clientPackage/serviceDetail/index.vue

@@ -41,7 +41,7 @@
             <u-icon name="arrow-right" size="16" color="#999" />
           </view>
         </view>
-        <view class="evaluate-context">
+        <!-- <view class="evaluate-context">
           <view class="flex evaluate">
             <view class="flex">
               <text style="margin-right: 30rpx">优惠</text>
@@ -52,16 +52,16 @@
               <u-icon name="arrow-right" size="16" color="#999" />
             </view>
           </view>
-        </view>
+        </view> -->
       </view>
     </view>
 
     <!-- 弹窗 -->
-    <u-popup :show="show" mode="bottom" :safeAreaInsetBottom="true">
+    <!-- <u-popup :show="show" mode="bottom" :safeAreaInsetBottom="true">
       <view>
         <GainCoupon @close="closeCoupon" :coupons="coupons"></GainCoupon>
       </view>
-    </u-popup>
+    </u-popup> -->
 
     <!-- 占位 -->
     <view class="placeholder"></view>
@@ -177,10 +177,10 @@
       openPopup() {
         this.show = true;
       },
-      closeCoupon(data) {
-        this.show = data;
-        this.handlerGetGoodsConcentList()
-      },
+      // closeCoupon(data) {
+      //   this.show = data;
+      //   this.handlerGetGoodsConcentList()
+      // },
       handlerInitList(id) {
         getGoodsDetailApi(id).then(res => {
           console.log("@@@@res",res)
@@ -200,9 +200,9 @@
         })
 
         // 根据id获取优惠券列表
-        accountTotIdGetConponList(this.shoopId,{ paging:'1,10' }).then(res=>{
-          this.coupons = res.data.records
-        })
+        // accountTotIdGetConponList(this.shoopId,{ paging:'1,10' }).then(res=>{
+        //   this.coupons = res.data.records
+        // })
       },
 
       // 点击分享

+ 117 - 40
src/pages/client/clientPackage/storeDetail.vue

@@ -42,10 +42,22 @@
         </view>
       </view>
     </view>
+    <view class="evaluate-context">
+      <view class="flex evaluate">
+        <view class="flex">
+          <text style="margin-right: 30rpx">优惠</text>
+          <view class="text_title"> 您有2张8元无门槛券待额 </view>
+        </view>
+        <view class="flex" @click="openPopup">
+          <text class="text_title" style="margin-right: 20rpx">去领取</text>
+          <u-icon name="arrow-right" size="16" color="#999" />
+        </view>
+      </view>
+    </view>
 
     <!-- 商家分类 -->
     <view class="categoryList">
-      <u-tabs :list="categoryList"></u-tabs>
+      <u-tabs :list="categoryList" @change='handlerChangeTab'></u-tabs>
     </view>
 
     <view>
@@ -70,7 +82,7 @@
               <text class="points">{{ item.score }}分</text>
             </view>
             <view>
-            <!-- {{ item.score }}单 -->
+              <!-- {{ item.score }}单 -->
             </view>
           </view>
           <view class="list-item">
@@ -97,7 +109,7 @@
 
     <!-- 底部购物车 -->
     <view class="bottom-box">
-      <settleBottomBtn :goodsCateList.sync='goodsCateList' :ids='ids' @handlerDeleteGoods='handlerDeleteGoods'/>
+      <settleBottomBtn :goodsCateList.sync='goodsCateList' :ids='ids' @handlerDeleteGoods='handlerDeleteGoods' />
     </view>
 
     <!-- 弹窗 -->
@@ -124,6 +136,12 @@
       v-model="addParams.appointTime" @change="handlerTimeChange" @confirm="time_show = false"
       @cancel="time_show = false" mode="datetime">
     </u-datetime-picker>
+
+    <u-popup :show="show" mode="bottom" :safeAreaInsetBottom="true">
+      <view>
+        <GainCoupon @close="closeCoupon" :coupons="coupons"></GainCoupon>
+      </view>
+    </u-popup>
   </view>
 </template>
 
@@ -134,19 +152,26 @@
     addShoppingCart,
     getCartList,
     addFavorite,
-    cancelFavorite
+    cancelFavorite,
+    changeGoodsType
   } from '@/api/client/business.js';
   import {
     getCurrentLocation,
     hotMerchant
   } from '@/api/client/home';
+  import {
+    accountTotIdGetConponList
+  } from "@/api/client/mine.js"
+  import GainCoupon from '@/pages/client/clientPackage/serviceDetail/GainCoupon.vue';
   import settleBottomBtn from "@/components/settleBottomBtn/settleBottomBtn.vue"
   export default {
     components: {
-      settleBottomBtn
+      settleBottomBtn,
+      GainCoupon
     },
     data() {
       return {
+        show: false,
         merchant: {},
         goods: [],
         swiperList: [
@@ -154,7 +179,10 @@
           'https://cdn.uviewui.com/uview/swiper/swiper2.png',
           'https://cdn.uviewui.com/uview/swiper/swiper1.png'
         ],
-        categoryList: [], // 分类列表
+        categoryList: [{
+          name: '全部',
+          id: 0
+        }], // 分类列表
         goodsCateList: [],
         queryParams: {
           //请求参数
@@ -171,7 +199,8 @@
           appointTime: '',
         },
         template_time: '',
-        ids: null // 商家id
+        ids: null, // 商家id
+        coupons: []
       };
     },
     onLoad(option) {
@@ -194,13 +223,19 @@
 
     methods: {
       // 初始化购物车列表
-      handletInitShopCarList(){
+      handletInitShopCarList() {
         getCartList(this.ids).then(res => {
-            if(res.data.cartItems.length == 0){
-              this.goodsCateList = []
-            }else{
-              this.goodsCateList = res.data.cartItems
-            }
+          if (res.data.cartItems.length == 0) {
+            this.goodsCateList = []
+          } else {
+            this.goodsCateList = res.data.cartItems
+          }
+        })
+
+        accountTotIdGetConponList(this.ids, {
+          paging: '1,10'
+        }).then(res => {
+          this.coupons = res.data.records
         })
       },
       // 获取当前经纬度
@@ -239,16 +274,20 @@
       },
       // 初始化列表
       handlerInitList() {
+        this.categoryList = [{
+          name: '全部',
+          id: 0
+        }]
         getSellsDetail(this.queryParams.id, this.queryParams).then(res => {
           this.merchant = res.data.merchant;
-          this.categoryList = res.data.categories
+          res.data.categories.map(rs => {
+            this.categoryList.push(rs)
+          })
           this.goods = res.data.goods;
           this.swiperList = res.data.merchant.banners.map(h => h.url);
         });
         // 获取锚点
         hotMerchant(this.queryParams.id).then();
-
-
       },
       // 点击拨打电话
       handlerMakeCall() {
@@ -324,34 +363,34 @@
       },
       // 收藏按钮
       handlerFavouriteShop() {
-        if(this.merchant.favorites){
-          cancelFavorite(this.ids).then(res=>{
-            if(res.code == 200){
+        if (this.merchant.favorites) {
+          cancelFavorite(this.ids).then(res => {
+            if (res.code == 200) {
               this.handlerInitList()
               uni.showToast({
-                title:'取消成功',
-                icon:'none'
+                title: '取消成功',
+                icon: 'none'
               })
-            }else{
+            } else {
               uni.showToast({
-                title:res.msg,
-                icon:'none'
+                title: res.msg,
+                icon: 'none'
               })
               return
             }
           })
-        }else{
-          addFavorite(this.ids).then(res=>{
-            if(res.code == 200){
+        } else {
+          addFavorite(this.ids).then(res => {
+            if (res.code == 200) {
               this.handlerInitList()
               uni.showToast({
-                title:'收藏成功',
-                icon:'none'
+                title: '收藏成功',
+                icon: 'none'
               })
-            }else{
+            } else {
               uni.showToast({
-                title:res.msg,
-                icon:'none'
+                title: res.msg,
+                icon: 'none'
               })
               return
             }
@@ -370,12 +409,12 @@
           // goodsSubTitle:this.goods.description
         }
         addShoppingCart(params).then(res => {
-          if(res.code == 200){
+          if (res.code == 200) {
             this.handletInitShopCarList()
-          }else{
+          } else {
             uni.showToast({
-              title:res.msg,
-              icon:'none'
+              title: res.msg,
+              icon: 'none'
             })
             return
           }
@@ -395,9 +434,27 @@
           this.template_time = this.addParams.appointTime;
         }
       },
-      handlerDeleteGoods(e){
+      handlerDeleteGoods(e) {
         this.handletInitShopCarList()
-      }
+      },
+      // 切换tab
+      handlerChangeTab(e) {
+        if (e.id == 0) {
+          this.handlerInitList()
+        } else {
+          changeGoodsType(e.id, {
+            size: 20
+          }).then(res => {
+            this.goods = res.data;
+          })
+        }
+      },
+      openPopup() {
+        this.show = true;
+      },
+      closeCoupon(data) {
+        this.show = data;
+      },
     },
   };
 </script>
@@ -445,7 +502,6 @@
   .merchant-info {
     padding: 20rpx;
     background-color: #fff;
-    margin-bottom: 20rpx;
 
     .info-title {
       display: flex;
@@ -501,6 +557,27 @@
     }
   }
 
+  .evaluate-context {
+    background-color: #fff;
+    margin-bottom: 20rpx;
+
+    .evaluate {
+      padding: 20rpx;
+      border-bottom: 1rpx solid #f4f4f4;
+    }
+  }
+
+  .flex {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+  }
+
+  .text_title {
+    font-size: 24rpx;
+    color: #999;
+  }
+
   .list {
     height: 220rpx;
     background-color: #fff;
@@ -596,7 +673,7 @@
 
         .btn {
           font-size: 26rpx;
-          border-radius: 40rpx ;
+          border-radius: 40rpx;
           border: 2rpx solid #ec5729;
           color: #ec5729;
           background-color: #fff;

+ 14 - 43
src/pages/client/clientPackage/uptickOrder.vue

@@ -67,7 +67,7 @@
 						<span>商家优惠券</span>
 					</view>
 					<view class="coupon-right" >
-						<view class="">暂无可用</view>
+						<view class=""> {{ coupon_list.couponHistoryDetailList.length == 0 ? '暂无可用' : `${coupon_list.couponHistoryDetailList.length} 张优惠券可用` }} </view>
 						<u-icon name="arrow-right" size='13'></u-icon>
 					</view>
 				</view>
@@ -99,26 +99,26 @@
 				<u-line margin='20rpx 0'></u-line>
 
 				<view class="pop-coupon-box">
-				  <view class="pop-item" v-for="(item,index) of coupon_list" @click="handlerSelectCoupon(item,index)">
+				  <view class="pop-item" v-for="(item,index) of coupon_list.couponHistoryDetailList" @click="handlerSelectCoupon(item,index)">
 				  	<view class="item-box">
 				  		<view class="item-left">
 				  			<view class="img-box">
-				  				<image class="left-img" :src="item.img"></image>
+				  				<image class="left-img" src="@/static/images/honglei.png"></image>
 				  			</view>
 				  			<view class="left-text">
-				  				<view class="text-title"> {{ item.name }} </view>
-				  				<view class="text"> {{ item.time_text }} </view>
+				  				<view class="text-title"> {{ item.couponDTO.name }} </view>
+				  				<view class="text"> 到期时间 : {{ item.couponDTO.endTime }} </view>
 				  			</view>
 				  		</view>
 				  		<view class="item-right">
 				  			<view class="price red-color">
-				  				<span class="price-symbol">¥</span> {{ item.price }}
+				  				<span class="price-symbol">¥</span> {{ item.couponDTO.reduce == null ? 0 : item.couponDTO.reduce }}
 				  			</view>
-				  			<view class="text"> {{ item.deduce_text }} </view>
+				  			<view class="text"> {{ item.couponDTO.name }} </view>
 				  		</view>
 				  	</view>
 				    <view class="item-bottom">
-				      <span>{{ item.discript }}</span>
+				      <span>{{ item.couponDTO.name }}</span>
 				    </view>
 				  </view>
 				</view>
@@ -134,46 +134,18 @@
 				结算
 			</view>
 		</view>
-
 	</view>
 </template>
 
 <script>
   import { generateOrder ,getCartList , generateConfirmOrder} from "@/api/client/business.js"
   import { maintainCouponPaging } from "@/api/client/mine.js"
+  import { changeTime } from "@/utils/tools.js"
 	export default {
 		data() {
 			return {
 				coupon_show: false,
-        coupon_list:[
-          {
-            id:1,
-            img:'../../../static/images/honglei.png',
-            name:'无反不做(无饭不做美工饭)',
-            time_text:'有效期至2024.02.32',
-            price:34,
-            deduce_text:'满23可用',
-            discript:'可以与其他活动共享,在线支付指定门店使用'
-          },
-          {
-            id:3,
-            img:'../../../static/images/honglei.png',
-            name:'我不知道叫啥名儿嗷',
-            time_text:'有效期至2024.03.01',
-            price:2,
-            deduce_text:'满5可用',
-            discript:'可以与其他活动共享,在线支付指定门店使用'
-          },
-          {
-            id:5,
-            img:'../../../static/images/honglei.png',
-            name:'红雷卖瓜',
-            time_text:'有效期至2024.03.01',
-            price:1,
-            deduce_text:'满65可用',
-            discript:'可以与其他活动共享,在线支付指定门店使用'
-          }
-        ],
+        coupon_list:[],
         init_list:[],
         phoneNumber:null ,// 订购电话
         goodsRemark:'' ,// 备注
@@ -220,7 +192,10 @@
         })
         // 订单接口 - 根据购物车信息生成确认单信息
         generateConfirmOrder(params).then(res=>{
-          console.log("@@@@res",res);
+          this.coupon_list = res.data
+          this.coupon_list.couponHistoryDetailList.map(rs=>{
+            rs.couponDTO.endTime = changeTime(rs.couponDTO.createTime)
+          })
         })
         // maintainCouponPaging( params ).then(res=>{
         //   console.log('@@@@res',res)
@@ -249,10 +224,6 @@
           }
         })
 			},
-      // 选择优惠券
-      handlerSelectCoupon(){
-
-      },
 
       close(){
         this.coupon_show = false

+ 10 - 3
src/pages/client/clientUser/mine/setting/feedback.vue

@@ -2,7 +2,8 @@
   <view class="feedback-container">
     <u--textarea class="textarea"  v-model="feedback" maxlength='150'  placeholder="请输入" count ></u--textarea>
 
-    <u-button type="primary" @click="submitFeedback" text="提交反馈"></u-button>
+    <!-- <u-button type="primary" @click="submitFeedback" text="提交反馈"></u-button> -->
+    <button class="feedback-btn" @click="submitFeedback">提交反馈</button>
   </view>
 </template>
 
@@ -43,9 +44,15 @@ export default {
   margin-bottom: 10px;
 }
 
-.u-button {
+/* .u-button {
   width: 100%;
   border-radius: 15rpx;
   margin-top: 30rpx;
-}
+} */
+  .feedback-btn {
+    background-color: #5992bb;
+    color: #fff;
+    font-size: 28rpx;
+    margin-top: 20rpx;
+  }
 </style>

+ 3 - 2
src/pages/client/clientUser/serviceCenter.vue

@@ -22,7 +22,7 @@
     </view>
 
 
-    <view class="title"> 在线客服 </view>
+    <!-- <view class="title"> 在线客服 </view>
     <view class="cust-box">
       <view class="item" :key="item" v-for="item of 3">
         <view class="item-l">
@@ -47,7 +47,7 @@
         </view>
       </view>
     </view>
-    <button class="feedback-btn" @click="handlerSubmitFeedback">提交反馈</button>
+    <button class="feedback-btn" @click="handlerSubmitFeedback">提交反馈</button> -->
   </view>
 </template>
 
@@ -118,6 +118,7 @@ export default {
 .container {
   padding: 40rpx;
   background-color: #fff;
+  height: calc(100vh - 80rpx);
   .title {
     font-size: 32rpx;
     font-weight: bold;

+ 22 - 5
src/pages/client/tabBar/community/index.vue

@@ -20,7 +20,7 @@
 			<view class="item-box" v-for="(item,index) of initList" :key='index'>
 				<view class="item-top">
 					<view class="top-left">
-						<image class="img" src="@/static/QR57a.jpg"></image>
+						<image class="img" :src="item.userDTO.avatar"></image>
 					</view>
 					<view class="top-right">
 						<view class="right-title">{{ item.userDTO.nickname }}</view>
@@ -35,7 +35,7 @@
 						{{ item.textContent }}
 					</view>
 					<view class="center-img-box">
-						<image v-for="item of 2" class="center-img" src="@/static/QR57a.jpg"></image>
+						<image v-for="itm of item.resourceVos" class="center-img" :src="itm.resourceKey"></image>
 					</view>
 				</view>
 				<view class="item-bottom">
@@ -45,13 +45,15 @@
 					<view class="bottom-item">
 						<u-icon name="heart" :size='iconSize'></u-icon><span>2332</span>
 					</view>
-					<view class="bottom-item">
+					<view class="bottom-item" @click='communityShow = true'>
 						<u-icon name="more-circle" :size='iconSize'></u-icon><span>2332</span>
 					</view>
 				</view>
 			</view>
 		</view>
 
+    <empty v-if="initList.length == 0"/>
+
 		<view class="flex-box">
 			<view class="flex" @click="handlerToPublish">
 				<view class="flex-icon">
@@ -60,6 +62,13 @@
 				<view class=""> 发布 </view>
 			</view>
 		</view>
+
+    <u-popup :show="communityShow" @close="communityShow = false" mode='bottom' overlayOpacity='0.1' round="20" >
+    	<view class="pop-box">
+    		<communityPop />
+    	</view>
+    </u-popup>
+
     <tabbar currentTab="clientCommunity" />
 	</view>
 </template>
@@ -67,9 +76,13 @@
 <script>
   import { clientContentList } from '@/api/client/community.js';
   import { intervalTime } from "@/utils/tools.js"
+  import communityPop from "@/components/communityPop/index.vue"
+  import empty from "@/components/empty/index.vue"
 	export default {
+    components:{communityPop , empty},
 		data() {
 			return {
+        communityShow:false,
 				list1: [{
 						name: '最新',
 						type: 'LATEST',
@@ -101,7 +114,7 @@
 		methods: {
       handlerInitList(){
         clientContentList(this.params).then(res=>{
-          this.initList = res.records
+          this.initList = res.data.records
         })
       },
       // 选择时间
@@ -138,7 +151,7 @@
 		background-color: #F8F8F8;
 		min-height: calc(100vh - 140rpx);
 		padding: 0 0 40rpx;
-
+    box-sizing: border-box;
 		.top {
 			height: 100rpx;
 		}
@@ -243,4 +256,8 @@
 			}
 		}
 	}
+
+  ::v-deep .u-safe-area-inset-bottom{
+  	padding-bottom: 0;
+  }
 </style>

+ 2 - 1
src/pages/client/tabBar/mine/index.vue

@@ -97,7 +97,8 @@ export default {
       listData,
     };
   },
-  mounted() {
+
+  onShow(){
     this.handlerInitUserMessage();
   },
   methods: {

+ 5 - 6
src/pages/merchant/tabBar/order/index.vue

@@ -38,11 +38,10 @@ export default {
   data() {
     return {
       list1: [
-        { id: '1', name: '全部' },
-        { id: '2', name: '进行中' },
-        { id: '3', name: '预约中' },
-        { id: '4', name: '退款' },
-        { id: '5', name: '已完成' },
+        { id: '0', name: '全部' },
+        { id: '1', name: '待核销' },
+        { id: '2', name: '已核销' },
+        { id: '3', name: '退款' },
       ],
       typeStyle:0,
       orderList: [],
@@ -50,7 +49,7 @@ export default {
         pageNum: 1,
         pageSize: 10,
       },
-      status:""
+      status:"1"
     };
   },
   components:{orderItem},

+ 1 - 1
src/pages/merchant/tabBar/store/index.vue

@@ -119,7 +119,7 @@ export default {
           title: '商家社区',
         },
         {
-          title: '全部',
+          title: '预约列表',
         },
       ],
       orderCount: 0

+ 14 - 0
src/utils/tools.js

@@ -49,3 +49,17 @@ export function intervalTime( endTime) {
   // return   days + "天 " + hours + "小时 " + minutes + " 分钟" + seconds + " 秒"
   return days + "天 " + hours + "小时 "
 }
+
+export function changeTime(e){
+  let time = new Date(e)
+  let year = time.getFullYear()
+  let month = time.getMonth() + 1
+  let date = time.getDate()
+  if (month < 10) {
+    month = '0' + month
+  }
+  if (date < 10) {
+    date = '0' + date
+  }
+  return year + '-' + month + '-' + date
+}