浏览代码

4-2 论坛&积分相关页面add

lhl 2 小时之前
父节点
当前提交
05ad1b0d51

+ 1 - 0
api/signing.js

@@ -54,6 +54,7 @@ export function goPj(data) {
 	});
 }
 
+
 //打卡
 export function goDk(data) {
 	return request({

+ 38 - 2
pages.json

@@ -240,8 +240,44 @@
 				"style": {
 					"navigationBarTitleText": "我的预约"
 				}
-			}
-			
+			}
+			// ,
+			// {
+			// 	"path": "jf/rechange",
+			// 	"style": {
+			// 		"navigationBarTitleText": "次数购买"
+			// 	}
+			// },
+			// {
+			// 	"path": "jf/jfcz",
+			// 	"style": {
+			// 		"navigationBarTitleText": "积分充值"
+			// 	}
+			// },
+			// {
+			// 	"path": "jf/store",
+			// 	"style": {
+			// 		"navigationBarTitleText": "积分商城"
+			// 	}
+			// },
+			// {
+			// 	"path": "forum/index",
+			// 	"style": {
+			// 		"navigationBarTitleText": "论坛"
+			// 	}
+			// },
+			// {
+			// 	"path": "forum/edit",
+			// 	"style": {
+			// 		"navigationBarTitleText": "发布"
+			// 	}
+			// },
+			// {
+			// 	"path": "forum/detail",
+			// 	"style": {
+			// 		"navigationBarTitleText": "详情"
+			// 	}
+			// }
 		]
 	}, {
 		"root": "pages/set",

+ 3 - 3
pages/index/index.vue

@@ -84,7 +84,7 @@
 					</view>
 				</navigator> -->
 			</view>
-			<cmy-mys-list :list='jxList'></cmy-mys-list>
+			<cmy-mys-list :list='jxList' :height="440"></cmy-mys-list>
 			<view class="title-box flex padding-t-30 padding-b-30">
 				<view class="flex">
 					<image class="hot margin-r-10" src="../../static/icon/hot.png" mode="scaleToFill"></image>
@@ -533,7 +533,7 @@
 		border-top: #f2f2f2 1px solid;
 		flex-direction: column;
 		width: 330rpx;
-		height: 630rpx;
+		// height: 630rpx;
 
 		&:first-of-type {
 			border-top: none;
@@ -548,7 +548,7 @@
 			justify-content: flex-start;
 			align-items: flex-start;
 			width: 100%;
-			height: 100%;
+			// height: 100%;
 			padding-left: 20rpx;
 			padding-top: 20rpx;
 

+ 351 - 0
pages/user/forum/detail.vue

@@ -0,0 +1,351 @@
+<template>
+	<view class="content">
+		<view class="post-content">
+			<view class="post-header">
+				<image :src="post.avatar" mode="aspectFill" class="avatar"></image>
+				<view class="user-info">
+					<text class="username">{{post.username}}</text>
+					<text class="time">{{post.time}}</text>
+				</view>
+				<image class="share" src="/static/icon/share.png" mode=""></image>
+			</view>
+			
+			<text class="content">{{post.content}}</text>
+			
+			<view class="image-list">
+				<image :src="img" mode="aspectFill" class="image" v-for="(img, index) in post.images" :key="index" @click="previewImage(post.images, index)"></image>
+			</view>
+		</view>
+		
+		<view class="comment-section">
+			<view class="comment-header">
+				<text class="comment-title">最新评论({{comments.length}})</text>
+			</view>
+			<view class="comment-list">
+				<view class="comment-item" v-for="(comment, index) in comments" :key="index">
+					<image :src="comment.avatar" mode="aspectFill" class="comment-avatar"></image>
+					<view class="comment-content">
+						<view class="comment-header">
+							<text class="comment-username">{{comment.username}}</text>
+						</view>
+						<view class="comment-text">{{comment.content}}</view>
+						<view class="comment-time">{{comment.time}}</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		
+		<view class="comment-input">
+			<input placeholder="发表评论" v-model="commentText" class="input" />
+			<view class="submit-btn" @click="submitComment">
+				<text>发表评论</text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				post: {
+					username: '我欲随风',
+					time: '2020-04-16 09:34',
+					avatar: '../../../static/icon/ye.png',
+					content: '承包你大半年的洗衣液~【威露士】倍净洗衣液套装消毒除异味,除螨除菌高达99%用心呵护一家子的健康整整12斤,专享价【89】',
+					images: [
+						'../../../static/image/qy.png',
+						'../../../static/image/qy.png',
+						'../../../static/image/qy.png',
+						'../../../static/image/qy.png',
+						'../../../static/image/qy.png',
+						'../../../static/image/qy.png'
+					]
+				},
+				comments: [
+					{
+						id: 1,
+						username: '我欲随风',
+						time: '2020-4-15 09:37',
+						avatar: '../../../static/icon/ye.png',
+						content: '太便宜了吧!'
+					},
+					{
+						id: 2,
+						username: '我欲随风',
+						time: '2020-4-15 09:37',
+						avatar: '../../../static/icon/ye.png',
+						content: '买了能用大半年了'
+					},
+					{
+						id: 3,
+						username: '我欲随风',
+						time: '2020-4-15 09:37',
+						avatar: '../../../static/icon/ye.png',
+						content: '整装多少钱?'
+					},
+					{
+						id: 4,
+						username: '我欲随风',
+						time: '2020-4-15 09:37',
+						avatar: '../../../static/icon/ye.png',
+						content: '太便宜了吧!'
+					}
+				],
+				commentText: ''
+			};
+		},
+		methods: {
+			// 返回
+			navBack() {
+				uni.navigateBack();
+			},
+			// 分享
+			share() {
+				uni.showToast({
+					title: '分享功能开发中',
+					icon: 'none'
+				});
+			},
+			// 预览图片
+			previewImage(images, index) {
+				uni.previewImage({
+					urls: images,
+					current: index,
+					indicator: 'number',
+					success: function(res) {
+						console.log('预览图片成功');
+					},
+					fail: function(res) {
+						console.log('预览图片失败', res);
+					}
+				});
+			},
+			// 提交评论
+			submitComment() {
+				if (!this.commentText.trim()) {
+					uni.showToast({
+						title: '请输入评论内容',
+						icon: 'none'
+					});
+					return;
+				}
+				
+				// 这里可以添加提交评论的逻辑
+				uni.showToast({
+					title: '评论成功',
+					icon: 'success'
+				});
+				
+				// 清空评论输入框
+				this.commentText = '';
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+		background-color: #F5F5F5;
+	}
+
+	.content {
+		min-height: 100%;
+		padding-bottom: 100rpx;
+	}
+
+	.header {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 0 30rpx;
+		height: 80rpx;
+		background-color: #FFFFFF;
+		
+		.back {
+			width: 40rpx;
+			height: 40rpx;
+			
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+		
+		.title {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #333333;
+		}
+		
+		.share {
+			width: 40rpx;
+			height: 40rpx;
+			
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+
+	.post-content {
+		background-color: #FFFFFF;
+		padding: 20rpx;
+		margin-bottom: 10rpx;
+		
+		.post-header {
+			display: flex;
+			align-items: center;
+			margin-bottom: 15rpx;
+			
+			.avatar {
+				width: 60rpx;
+				height: 60rpx;
+				border-radius: 50%;
+				margin-right: 15rpx;
+			}
+			.share {
+				width: 30rpx;
+				height: 30rpx;
+			}
+			.user-info {
+				flex: 1;
+				
+				.username {
+					font-size: 28rpx;
+					font-weight: bold;
+					color: #333333;
+					margin-bottom: 5rpx;
+					display: block;
+				}
+				
+				.time {
+					font-size: 22rpx;
+					color: #999999;
+				}
+			}
+		}
+		
+		.content {
+			font-size: 26rpx;
+			color: #333333;
+			line-height: 36rpx;
+			margin-bottom: 20rpx;
+		}
+		
+		.image-list {
+			display: flex;
+			flex-wrap: wrap;
+			
+			.image {
+				width: 31%;
+				height: 200rpx;
+				margin: 1%;
+				border-radius: 10rpx;
+			}
+		}
+	}
+
+	.comment-section {
+		background-color: #FFFFFF;
+		padding: 20rpx;
+		
+		.comment-header {
+			margin-bottom: 20rpx;
+			
+			.comment-title {
+				font-size: 28rpx;
+				font-weight: bold;
+				color: #333333;
+			}
+		}
+		
+		.comment-list {
+			
+			.comment-item {
+				display: flex;
+				margin-bottom: 20rpx;
+				border-bottom: #EEEEEE 1rpx solid;
+				padding: 20rpx;
+				.comment-avatar {
+					width: 50rpx;
+					height: 50rpx;
+					border-radius: 50%;
+					margin-right: 15rpx;
+				}
+				
+				.comment-content {
+					flex: 1;
+					
+					.comment-header {
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+						margin-bottom: 10rpx;
+						
+						.comment-username {
+							font-size: 24rpx;
+							font-weight: bold;
+							color: #333333;
+						}
+						
+						
+					}
+					.comment-time {
+						font-size: 20rpx;
+						color: #999999;
+					}
+					.comment-text {
+						font-size: 24rpx;
+						color: #333333;
+						line-height: 32rpx;
+						padding: 20rpx 0;
+					}
+				}
+			}
+		}
+	}
+
+	.comment-input {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		height: 80rpx;
+		background-color: #FFFFFF;
+		border-top: 1rpx solid #EEEEEE;
+		display: flex;
+		align-items: center;
+		padding: 0 20rpx;
+		
+		.input {
+			flex: 1;
+			height: 50rpx;
+			padding: 0 20rpx;
+			border: 1rpx solid #EEEEEE;
+			border-radius: 25rpx;
+			font-size: 24rpx;
+			color: #333333;
+			margin-right: 15rpx;
+			resize: none;
+		}
+		
+		.submit-btn {
+			padding: 0 30rpx;
+			height: 50rpx;
+			background-color: #f65486;
+			border-radius: 25rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			
+			text {
+				font-size: 24rpx;
+				font-weight: bold;
+				color: #FFFFFF;
+			}
+		}
+	}
+</style>

+ 241 - 0
pages/user/forum/edit.vue

@@ -0,0 +1,241 @@
+<template>
+	<view class="content">
+		<view class="form">
+			<view class="form-item">
+				<view class="form-label">贴子内容</view>
+				<textarea placeholder="请输入帖子内容" v-model="pjs" maxlength="200" class="form-textarea"></textarea>
+				<view class="count">{{pjs.length}}/200</view>
+			</view>
+			<view class="form-item">
+				<view class="form-label">贴子图片</view>
+				<view class="image-list flex">
+					<view class="image-item" v-for="(item, index) in pjImg" :key="'pj' + index">
+						<image :src="item" mode="aspectFill" class="image"></image>
+						<view class="delete-btn" @click.stop="scPjImg(index)">
+							<image src="../../../static/icon/goodsExit.png" mode="widthFix"></image>
+						</view>
+					</view>
+					<view class="image-item add" @click="imgsub(pjImg.length)" v-if="pjImg.length < 6">
+						<image src="../../../static/image/upImg.png" mode="aspectFill"></image>
+						<text class="add-text">添加图片</text>
+					</view>
+				</view>
+				<view class="hint">最多可上传6张图片</view>
+			</view>
+		</view>
+		
+		<view class="submit-btn" @click="goPj">
+			提交发布
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		upload
+	} from '@/api/set.js';
+	export default {
+		data() {
+			return {
+				pjImg: [],
+				pjs: ''
+			}
+		},
+		methods: {
+			// 返回
+			navBack() {
+				uni.navigateBack();
+			},
+			// 选择图片
+			imgsub(index) {
+				upload({
+					filename: ''
+				}).then(data => {
+					this.$set(this.pjImg,index,data[0].img)
+				})
+			},
+			// 删除图片
+			scPjImg(index) {
+				this.pjImg.splice(index, 1);
+			},
+			// 提交
+			goPj() {
+				if (!this.pjs.trim()) {
+					uni.showToast({
+						title: '请输入帖子内容',
+						icon: 'none'
+					});
+					return;
+				}
+				
+				// 这里可以添加提交逻辑
+				uni.showToast({
+					title: '发布成功',
+					icon: 'success'
+				});
+				
+				setTimeout(() => {
+					this.navBack();
+				}, 1500);
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+		background-color: #F5F5F5;
+	}
+
+	.content {
+		min-height: 100%;
+		padding-bottom: 100rpx;
+	}
+
+	.header {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 0 30rpx;
+		height: 80rpx;
+		background-color: #FFFFFF;
+		
+		.back {
+			width: 40rpx;
+			height: 40rpx;
+			
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+		
+		.title {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #333333;
+		}
+		
+		.right {
+			width: 40rpx;
+		}
+	}
+
+	.form {
+		margin-top: 10rpx;
+		background-color: #FFFFFF;
+		padding: 30rpx;
+		
+		.form-item {
+			margin-bottom: 40rpx;
+			
+			.form-label {
+				font-size: 28rpx;
+				font-weight: bold;
+				color: #333333;
+				margin-bottom: 20rpx;
+			}
+			
+			.form-textarea {
+				width: 100%;
+				height: 200rpx;
+				padding: 20rpx;
+				border: 1rpx solid #EEEEEE;
+				border-radius: 10rpx;
+				font-size: 26rpx;
+				color: #333333;
+				line-height: 36rpx;
+				resize: none;
+			}
+			
+			.count {
+				text-align: right;
+				font-size: 22rpx;
+				color: #999999;
+				margin-top: 10rpx;
+			}
+			
+			.image-list {
+				flex-wrap: wrap;
+				justify-content: flex-start;
+				.image-item {
+					width: 150rpx;
+					height: 150rpx;
+					margin-right: 20rpx;
+					margin-bottom: 20rpx;
+					position: relative;
+					border-radius: 10rpx;
+					background-color: #F5F5F5;
+					
+					&:nth-child(4n) {
+						margin-right: 0;
+					}
+					
+					&.add {
+						display: flex;
+						flex-direction: column;
+						align-items: center;
+						justify-content: center;
+						
+						image {
+							width: 50rpx;
+							height: 50rpx;
+							margin-bottom: 10rpx;
+						}
+						
+						.add-text {
+							font-size: 22rpx;
+							color: #999999;
+						}
+					}
+					
+					.image {
+						width: 100%;
+						height: 100%;
+					}
+					
+					.delete-btn {
+						position: absolute;
+						top: -12rpx;
+						right:-12rpx;
+						width: 40rpx;
+						height: 40rpx;
+						background-color: #fff;
+						border-radius: 50%;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						
+						image {
+							width: 24rpx;
+							height: 24rpx;
+						}
+					}
+				}
+			}
+			
+			.hint {
+				font-size: 22rpx;
+				color: #999999;
+				margin-top: 10rpx;
+			}
+		}
+	}
+
+	.submit-btn {
+		position: fixed;
+		bottom: 30rpx;
+		left: 30rpx;
+		right: 30rpx;
+		height: 90rpx;
+		background-color: #f65486;
+		border-radius: 45rpx;
+		font-size: 32rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+</style>

+ 277 - 0
pages/user/forum/index.vue

@@ -0,0 +1,277 @@
+<template>
+	<view class="content">
+		<view class="post-list">
+			<view class="post-item" v-for="(post, index) in postList" :key="index">
+				<view class="post-header">
+					<image :src="post.avatar" mode="aspectFill" class="avatar"></image>
+					<view class="user-info">
+						<text class="username">{{post.username}}</text>
+						<text class="time">{{post.time}}</text>
+					</view>
+				</view>
+				
+				<text class="post-content">{{post.content}}</text>
+				
+				<view class="product-images">
+					<image :src="img" mode="aspectFill" class="product-image" v-for="(img, imgIndex) in post.images" :key="imgIndex" @click="previewImage(post.images, imgIndex)"></image>
+				</view>
+				<view class="post-footer">
+					<view class="comment-share">
+						<view class="action" @click="comment(post)">
+							<image src="../../../static/icon/pl.png" mode="widthFix" class="action-icon"></image>
+							<text class="action-text">评论({{post.commentCount}})</text>
+						</view>
+						<view class="action" @click="share(post)">
+							<image src="../../../static/icon/share.png" mode="widthFix" class="action-icon"></image>
+							<text class="action-text">分享</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		
+		<view class="publish-btn" @click="publish">
+			<image src="../../../static/icon/fabu.png" mode="widthFix" class="publish-icon"></image>
+			<text class="publish-text">我要发布</text>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				postList: [
+					{
+						id: 1,
+						username: '林丹丹',
+						time: '1分钟前',
+						avatar: '../../../static/icon/ye.png',
+						content: '风乐平樱桃黄姜复合肽压片糖果套盒,轻松饱腹降低食欲不再是梦,C天然果蔬纤维素多种果蔬纤维满足日常膳食营养,专享价【989】',
+						images: [
+							'../../../static/image/qy.png',
+							'../../../static/image/qy.png',
+							'../../../static/image/qy.png',
+							'../../../static/image/qy.png',
+							'../../../static/image/qy.png',
+							'../../../static/image/qy.png'
+						],
+						commentCount: 1
+					},
+					{
+						id: 2,
+						username: '林丹丹',
+						time: '1分钟前',
+						avatar: '../../../static/icon/ye.png',
+						content: '风乐平樱桃黄姜复合肽压片糖果套盒,轻松饱腹降低食欲不再是梦,C天然果蔬纤维素多种果蔬纤维满足日常膳食营养,专享价【989】',
+						images: [
+							'../../../static/image/qy.png',
+							'../../../static/image/qy.png',
+							'../../../static/image/qy.png',
+							'../../../static/image/qy.png',
+							'../../../static/image/qy.png',
+							'../../../static/image/qy.png'
+						],
+						commentCount: 0
+					}
+				]
+			};
+		},
+		methods: {
+			// 返回
+			navBack() {
+				uni.navigateBack();
+			},
+			// 评论
+			comment(post) {
+				uni.showToast({
+					title: '评论功能开发中',
+					icon: 'none'
+				});
+			},
+			// 分享
+			share(post) {
+				uni.showToast({
+					title: '分享功能开发中',
+					icon: 'none'
+				});
+			},
+			// 发布
+			publish() {
+				uni.navigateTo({
+					url:'/pages/user/forum/edit'
+				})
+			},
+			// 预览图片
+			previewImage(images, index) {
+				uni.previewImage({
+					urls: images,
+					current: index,
+					indicator: 'number',
+					success: function(res) {
+						console.log('预览图片成功');
+					},
+					fail: function(res) {
+						console.log('预览图片失败', res);
+					}
+				});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+		background-color: #F5F5F5;
+	}
+
+	.content {
+		min-height: 100%;
+		padding-bottom: 100rpx;
+	}
+
+	.header {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 0 30rpx;
+		height: 80rpx;
+		background-color: #FFFFFF;
+		
+		.back {
+			width: 40rpx;
+			height: 40rpx;
+			
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+		
+		.title {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #333333;
+		}
+		
+		.right {
+			width: 40rpx;
+		}
+	}
+
+	.post-list {
+		margin-top: 10rpx;
+		
+		.post-item {
+			background-color: #FFFFFF;
+			padding: 20rpx;
+			margin-bottom: 10rpx;
+			
+			.post-header {
+				display: flex;
+				align-items: center;
+				margin-bottom: 15rpx;
+				
+				.avatar {
+					width: 60rpx;
+					height: 60rpx;
+					border-radius: 50%;
+					margin-right: 15rpx;
+				}
+				
+				.user-info {
+					flex: 1;
+					
+					.username {
+						font-size: 28rpx;
+						font-weight: bold;
+						color: #333333;
+						margin-bottom: 5rpx;
+						display: block;
+					}
+					
+					.time {
+						font-size: 22rpx;
+						color: #999999;
+					}
+				}
+			}
+			
+			.post-content {
+				font-size: 26rpx;
+				color: #333333;
+				line-height: 36rpx;
+				margin-bottom: 15rpx;
+			}
+			
+			.product-images {
+				display: flex;
+				flex-wrap: wrap;
+				margin-bottom: 20rpx;
+				
+				.product-image {
+					width: 31%;
+					height: 200rpx;
+					margin: 1%;
+					border-radius: 10rpx;
+				}
+			}
+			
+			.post-footer {
+				border-top: 1rpx solid #EEEEEE;
+				padding-top: 15rpx;
+				
+				.comment-share {
+					display: flex;
+					align-items: center;
+					
+					.action {
+						display: flex;
+						flex: 1;
+						align-items: center;
+						margin-right: 40rpx;
+						text-align: center;
+						display: flex;
+						justify-content: center;
+						.action-icon {
+							width: 24rpx;
+							height: 24rpx;
+							margin-right: 8rpx;
+						}
+						
+						.action-text {
+							font-size: 24rpx;
+							color: #999999;
+						}
+					}
+				}
+			}
+		}
+	}
+
+	.publish-btn {
+		width: 185rpx;
+		height: 64rpx;
+		position: fixed;
+		bottom: 160rpx;
+		right: 0rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		background-color: #f65486;
+		border-radius: 32rpx 0 0 32rpx;
+		
+		.publish-icon {
+			width: 40rpx;
+			height: 40rpx;
+			margin-bottom: 10rpx;
+		}
+		
+		.publish-text {
+			font-size: 24rpx;
+			color: #FFFFFF;
+			font-weight: bold;
+		}
+	}
+</style>

+ 287 - 0
pages/user/jf/jfcz.vue

@@ -0,0 +1,287 @@
+<template>
+	<view class="content">
+		 <view class="points-header">
+			<text class="points-count">0</text>
+			<text class="points-label">我的积分</text>
+		</view>
+	
+		<view class="listBox">
+			<view class="list flex">
+				<view @click="changePoints(index)" :class="{action:index==actionIndex}" class="item flex" 
+					v-for="(item,index) in pointsList">
+					<image class="icon" src="../../../static/icon/ye.png" mode="widthFix"></image>
+					<view class="info">
+						<text class="points">{{item.points}}积分</text>
+						<text class="price">¥{{item.price}}元</text>
+					</view>
+				</view>
+			</view>
+			
+			<view class="amount">
+				<text class="label">应付金额(活动随机立减0.01~1.00元)</text>
+				<text class="value">¥{{payMoney}}元</text>
+			</view>
+		</view>
+		<view class="payment" @click="selectPayment('wxpay')">
+			<view class="left flex">
+				<image class="icon" src="../../../static/icon/weipay.png" mode="widthFix"></image>
+				<text>微信支付</text>
+			</view>
+			<view class="right">
+				<image v-if="paymentType=='wxpay'" class="checked" src="../../../static/icon/addressIconXz.png" mode="widthFix"></image>
+				<view v-else class="no-checked"></view>
+			</view>
+		</view>
+		
+		<view class="recharge-btn" @click="recharge">充值</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				actionIndex: 0, //当前选中的积分选项索引
+				paymentType: 'wxpay', //支付方式
+				pointsList: [
+					{ points: 10, price: 10 },
+					{ points: 20, price: 20 },
+					{ points: 50, price: 50 },
+					{ points: 80, price: 80 },
+					{ points: 100, price: 100 },
+					{ points: 200, price: 200 }
+				],
+				reduction: 0.1, //活动立减金额
+			};
+		},
+		computed: {
+			payMoney() {
+				const selected = this.pointsList[this.actionIndex];
+				return selected.price
+			}
+		},
+		methods: {
+			// 返回
+			navBack() {
+				uni.navigateBack();
+			},
+			// 选择积分选项
+			changePoints(ind) {
+				this.actionIndex = ind;
+			},
+			// 选择支付方式
+			selectPayment(type) {
+				this.paymentType = type;
+			},
+			// 充值
+			recharge() {
+				// 这里可以添加充值逻辑
+				uni.showToast({
+					title: '充值成功',
+					icon: 'success'
+				});
+				
+				// 充值成功后返回
+				setTimeout(() => {
+					this.navBack();
+				}, 1500);
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+		background-color: #F5F5F5;
+	}
+
+	.content {
+		min-height: 100%;
+	}
+
+	.header {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 0 30rpx;
+		height: 80rpx;
+		background-color: #FFFFFF;
+		
+		.back {
+			width: 40rpx;
+			height: 40rpx;
+			
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+		
+		.title {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #333333;
+		}
+		
+		.right {
+			width: 40rpx;
+		}
+	}
+
+	.points-header {
+		height: 200rpx;
+		background-color: #f65486;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		color: #FFFFFF;
+		
+		.points-count {
+			font-size: 60rpx;
+			font-weight: bold;
+			margin-bottom: 10rpx;
+		}
+		
+		.points-label {
+			font-size: 28rpx;
+		}
+	}
+
+	.listBox {
+		margin: 30rpx;
+		margin-top: -30rpx;
+		border-radius: 20rpx;
+		padding: 30rpx;
+		background-color: #FFFFFF;
+		position: relative;
+		box-shadow: 0 2rpx 10rpx rgba(0,0,0,0.1);
+	}
+
+	.list {
+		flex-wrap: wrap;
+		
+		.item {
+			flex-direction: column;
+			align-items: center;
+			justify-content: center;
+			width: 30%;
+			height: 150rpx;
+			margin-bottom: 20rpx;
+			margin-right: 5%;
+			background-color: #F5F5F5;
+			border-radius: 15rpx;
+			padding: 20rpx;
+			
+			&:nth-child(3n) {
+				margin-right: 0;
+			}
+			
+			&.action {
+				background-color: #FFF0F0;
+				border: 2rpx solid #f65486;
+			}
+			
+			.icon {
+				width: 40rpx;
+				height: 40rpx;
+				margin-bottom: 10rpx;
+			}
+			
+			.info {
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				
+				.points {
+					font-size: 26rpx;
+					color: #333333;
+					font-weight: bold;
+					margin-bottom: 5rpx;
+				}
+				
+				.price {
+					font-size: 22rpx;
+					color: #999999;
+				}
+			}
+		}
+	}
+
+	.amount {
+		margin-top: 30rpx;
+		padding-top: 30rpx;
+		border-top: 1rpx solid #EEEEEE;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		
+		.label {
+			font-size: 26rpx;
+			color: #666666;
+		}
+		
+		.value {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #f65486;
+		}
+	}
+
+	.payment {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 30rpx;
+		background-color: #FFFFFF;
+		margin: 0 30rpx;
+		margin-top: 20rpx;
+		border-radius: 15rpx;
+		
+		.left {
+			align-items: center;
+			
+			.icon {
+				width: 40rpx;
+				height: 40rpx;
+				margin-right: 15rpx;
+			}
+			
+			text {
+				font-size: 28rpx;
+				color: #333333;
+			}
+		}
+		
+		.right {
+			width: 36rpx;
+			height: 36rpx;
+			
+			.checked {
+				width: 100%;
+				height: 100%;
+			}
+			
+			.no-checked {
+				width: 100%;
+				height: 100%;
+				border: 1rpx solid #DDDDDD;
+				border-radius: 50%;
+			}
+		}
+	}
+
+	.recharge-btn {
+		margin: 50rpx 30rpx;
+		height: 90rpx;
+		background-color: #f65486;
+		border-radius: 45rpx;
+		font-size: 32rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+</style>

+ 266 - 0
pages/user/jf/rechange.vue

@@ -0,0 +1,266 @@
+<template>
+	<view class="content">
+		<view class="remain">
+			<text class="label">我的剩余次数:</text>
+			<text class="count">0</text>
+		</view>
+		<view class="listBox">
+			<view class="custom">
+				<text class="text">自定义</text>
+				<input class="input" type="number" v-model="count" placeholder="请输入购买数量" />
+			</view>
+			
+			<view class="list flex">
+				<view @click="changeCount(index)" :class="{action:count==item}" class="item flex" 
+					v-for="(item,index) in countList">
+					<text>{{item}}次</text>
+				</view>
+			</view>
+			
+			<view class="estimate">
+				<text>预计需{{estimatedPoints}}积分</text>
+			</view>
+		</view>
+		
+		<view class="points-info" @click="navToRecharge">
+			<view class="left flex">
+				<text>积分支付(余额:300)</text>
+			</view>
+			<view class="right flex">
+				<text>充值积分</text>
+				<image class="arrow" src="../../../static/icon/next1.png" mode="widthFix"></image>
+			</view>
+		</view>
+		
+		<view class="buy-btn" @click="buy">立即购买</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				actionIndex: 0, //当前选中的次数索引
+				count: 10, //购买次数
+				countList: [10, 20, 30, 40, 50, 60], //预设次数选项
+				pointsPerCount: 20, //每次需要的积分
+			};
+		},
+		computed: {
+			estimatedPoints() {
+				return this.count * this.pointsPerCount;
+			}
+		},
+		methods: {
+			// 跳转
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				});
+			},
+			// 跳转到充值积分页面
+			navToRecharge() {
+				this.navTo('/pages/user/jf/jfcz');
+			},
+			// 选择次数
+			changeCount(ind) {
+				this.actionIndex = ind;
+				this.count = this.countList[ind];
+			},
+			// 购买
+			buy() {
+				if (!this.count || this.count <= 0) {
+					uni.showModal({
+						title: '提示',
+						content: '请输入有效的购买次数',
+						showCancel: false
+					});
+					return;
+				}
+				
+				// 这里可以添加购买逻辑
+				uni.showToast({
+					title: '购买成功',
+					icon: 'success'
+				});
+				
+				// 购买成功后返回
+				setTimeout(() => {
+					this.navBack();
+				}, 1500);
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+		background-color: #F5F5F5;
+	}
+
+	.content {
+		min-height: 100%;
+	}
+
+	.header {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 0 30rpx;
+		height: 80rpx;
+		background-color: #FFFFFF;
+		
+		.back {
+			width: 40rpx;
+			height: 40rpx;
+			
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+		
+		.title {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #333333;
+		}
+		
+		.right {
+			width: 40rpx;
+		}
+	}
+
+	.remain {
+		padding: 30rpx;
+		background-color: #FFFFFF;
+		
+		.label {
+			font-size: 28rpx;
+			color: #666666;
+		}
+		
+		.count {
+			font-size: 28rpx;
+			font-weight: bold;
+			color: #f55586;
+			margin-left: 10rpx;
+		}
+	}
+
+	.listBox {
+		margin: 30rpx 0;
+		margin-top: 20rpx;
+		padding: 30rpx;
+		background-color: #FFFFFF;
+		position: relative;
+	}
+
+	.custom {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		margin-bottom: 30rpx;
+		
+		.text {
+			font-size: 28rpx;
+			color: #333333;
+		}
+		
+		.input {
+			width: 200rpx;
+			height: 60rpx;
+			border-radius: 10rpx;
+			padding: 0 20rpx;
+			font-size: 28rpx;
+			text-align: right;
+			color: #333333;
+		}
+	}
+
+	.list {
+		flex-wrap: wrap;
+		
+		.item {
+			justify-content: center;
+			align-items: center;
+			width: 30%;
+			height: 80rpx;
+			margin-bottom: 20rpx;
+			margin-right: 5%;
+			background-color: #F5F5F5;
+			border-radius: 10rpx;
+			font-size: 28rpx;
+			color: #666666;
+			
+			&:nth-child(3n) {
+				margin-right: 0;
+			}
+			
+			&.action {
+				background-color: #f55586;
+				color: #FFFFFF;
+			}
+		}
+	}
+
+	.estimate {
+		margin-top: 30rpx;
+		text-align: right;
+		font-size: 26rpx;
+		color: #f55586;
+	}
+
+	.points-info {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 30rpx;
+		background-color: #FFFFFF;
+		margin-top: 20rpx;
+		
+		.left {
+			align-items: center;
+			
+			.icon {
+				width: 40rpx;
+				height: 40rpx;
+				margin-right: 10rpx;
+			}
+			
+			text {
+				font-size: 28rpx;
+				color: #333333;
+			}
+		}
+		
+		.right {
+			align-items: center;
+			
+			text {
+				font-size: 26rpx;
+				color: #f55586;
+				margin-right: 10rpx;
+			}
+			
+			.arrow {
+				width: 20rpx;
+				height: 20rpx;
+			}
+		}
+	}
+
+	.buy-btn {
+		margin: 50rpx 30rpx;
+		height: 90rpx;
+		background-color: #f55586;
+		border-radius: 45rpx;
+		font-size: 32rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+</style>

+ 170 - 0
pages/user/jf/store.vue

@@ -0,0 +1,170 @@
+<template>
+	<view class="content">
+		<view class="goods-list">
+			<view class="goods-item" v-for="(item, index) in goodsList" :key="index">
+				<image :src="item.image" mode="aspectFill" class="goods-image"></image>
+				<text class="goods-name">{{item.name}}</text>
+				<view class="goods-info">
+					<text class="goods-points">{{item.points}} 积分</text>
+					<view class="add-cart" @click="addCart(item)">
+						<image src="../../../static/icon/ye.png" mode="widthFix" class="cart-icon"></image>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				goodsList: [
+					{
+						id: 1,
+						name: '发酵乳酸菌饮品',
+						spec: '500g*2瓶',
+						points: 200,
+						image: '../../../static/image/qy.png'
+					},
+					{
+						id: 2,
+						name: '发酵乳酸菌饮品',
+						spec: '500g*2瓶',
+						points: 200,
+						image: '../../../static/image/qy.png'
+					},
+					{
+						id: 3,
+						name: '发酵乳酸菌饮品',
+						spec: '500g*2瓶',
+						points: 200,
+						image: '../../../static/image/qy.png'
+					},
+					{
+						id: 4,
+						name: '发酵乳酸菌饮品',
+						spec: '500g*2瓶',
+						points: 200,
+						image: '../../../static/image/qy.png'
+					}
+				]
+			};
+		},
+		methods: {
+			// 返回
+			navBack() {
+				uni.navigateBack();
+			},
+			// 添加到购物车
+			addCart(item) {
+				uni.showToast({
+					title: '已加入购物车',
+					icon: 'success'
+				});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+		background-color: #F5F5F5;
+	}
+
+	.content {
+		min-height: 100%;
+	}
+
+	.header {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 0 30rpx;
+		height: 80rpx;
+		background-color: #FF4444;
+		
+		.back {
+			width: 40rpx;
+			height: 40rpx;
+			
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+		
+		.title {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #FFFFFF;
+		}
+		
+		.right {
+			width: 40rpx;
+		}
+	}
+
+
+
+	.goods-list {
+		display: flex;
+		flex-wrap: wrap;
+		padding: 0 15rpx;
+		
+		.goods-item {
+			width: 48%;
+			margin: 1%;
+			background-color: #FFFFFF;
+			border-radius: 15rpx;
+			overflow: hidden;
+			
+			.goods-image {
+				width: 100%;
+				height: 250rpx;
+			}
+			
+			.goods-name {
+				padding: 15rpx;
+				font-size: 26rpx;
+				color: #333333;
+				line-height: 36rpx;
+				height: 72rpx;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				-webkit-line-clamp: 2;
+				-webkit-box-orient: vertical;
+			}
+			
+			.goods-info {
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				padding: 0 15rpx 15rpx;
+				
+				.goods-points {
+					font-size: 26rpx;
+					font-weight: bold;
+					color: #FF4444;
+				}
+				
+				.add-cart {
+					width: 40rpx;
+					height: 40rpx;
+					background-color: #FF4444;
+					border-radius: 50%;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					
+					.cart-icon {
+						width: 24rpx;
+						height: 24rpx;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 14 - 9
pages/user/model/model.vue

@@ -82,15 +82,15 @@
 				{{userTemplate.bookmark_count||0}}
 			</view>
 			<view class="Sc" @click="goPl">
-				<uni-icons class="icon" color="#FFF" size='80rpx'
-					type="chat-filled"></uni-icons>
+				<uni-icons class="icon" color="#FFF" size='80rpx' type="chat-filled"></uni-icons>
 			</view>
 			<view class="ScNum">
 				{{userTemplate.comment_num||0}}
 			</view>
 			<!--  -->
 		</view>
-		<image src="/static/image/qy.png" mode="widthFix" class="qianyue" @click="goQy" v-if="userInfo.uid && userInfo.uid != uid"></image>
+		<image src="/static/image/qy.png" mode="widthFix" class="qianyue" @click="goQy"
+			v-if="!userInfo.uid || (userInfo.uid && userInfo.uid != uid)"></image>
 	</view>
 </template>
 
@@ -283,9 +283,12 @@
 		methods: {
 			...mapMutations('user', ['setUserInfo']),
 			goQy() {
-				uni.navigateTo({
-					url:'/pages/user/signing/signing?id=' + this.uid
+				getUser().then(res => {
+					uni.navigateTo({
+						url: '/pages/user/signing/signing?id=' + this.uid
+					})
 				})
+
 			},
 			onDz(type) {
 				if (type == 1) {
@@ -316,9 +319,9 @@
 				})
 			},
 			goPl() {
-				console.log(this.userTemplate,'this.userTemplate');
+				console.log(this.userTemplate, 'this.userTemplate');
 				uni.navigateTo({
-					url:'/pages/user/signing/plhis?id=' + this.uid
+					url: '/pages/user/signing/plhis?id=' + this.uid
 				})
 			},
 			payPhone() {
@@ -631,9 +634,10 @@
 		position: fixed;
 		right: 10rpx;
 		bottom: 300rpx;
-		background-color: rgba(0,0,0,0.1);
+		background-color: rgba(0, 0, 0, 0.1);
 		padding: 40rpx 10rpx;
 		border-radius: 100rpx;
+
 		// border: 1px solid #fa98b6;
 		.icon {
 			color: #fff;
@@ -644,6 +648,7 @@
 			text-align: center;
 		}
 	}
+
 	.qianyue {
 		width: 98rpx;
 		height: 108rpx;
@@ -651,6 +656,6 @@
 		right: 20rpx;
 		// top:300rpx;
 		bottom: 0;
-		top:500rpx;
+		top: 500rpx;
 	}
 </style>

+ 105 - 20
pages/user/signing/mySig.vue

@@ -84,8 +84,9 @@
 							class="sig-btn-base" @click="openY(item)">
 							签约
 						</view>
-						<view class="sig-btn-base" v-if="userInfo.uid == item.uid && item.status == 1 && !item.comment"
-							@click="pj(item)">
+						<!-- <view class="sig-btn-base" -->
+						<!-- userInfo.uid == item.uid &&  -->
+						<view class="sig-btn-base" v-if="userInfo.uid == item.uid && item.status == 1 && !item.comment" @click="pj(item)">
 							评价
 						</view>
 						<view class="sig-btn-base" v-if="userInfo.uid == item.to_uid && item.status == 1"
@@ -204,8 +205,6 @@
 						</signInput>
 					</view>
 				</template>
-
-
 				<view class="btn" @click="goYqy">
 					提交
 				</view>
@@ -216,8 +215,23 @@
 		</uni-popup>
 		<uni-popup ref="pjPopup" type="center">
 			<view class="listBox" style="padding-top: 40rpx;">
+				<view class="pj-tit ">
+					评价内容
+				</view>
 				<textarea name="" id="" cols="30" rows="10" placeholder="请输入您的评价" v-model="pjs" maxlength="200"
 					class="pj-wrap"></textarea>
+				<view class="pj-tit ">
+					评价图片
+				</view>
+				<view class="image-list flex">
+					<view class="pj-img" v-for="item,index in pjImg" :key="'pj' + index">
+						<image :src="item" mode="" class="pj-img" @click="imgsub(index)"></image>
+						<image src="/static/icon/goodsExit.png" mode="" class="scbtn" @click.stop="scPjImg(index)">
+						</image>
+					</view>
+					<image src="/static/image/upImg.png" mode="" class="pj-img" @click="imgsub(pjImg.length)"
+						v-if="pjImg.length < 3"></image>
+				</view>
 				<view class="btn" @click="goPj">
 					提交
 				</view>
@@ -230,13 +244,21 @@
 				</view>
 				<textarea name="" id="" cols="30" rows="10" v-model="checkItem.comment.content" maxlength="200"
 					class="pj-wrap" disabled></textarea>
+				<view class="image-list flex">
+					<image mode="" v-for="item,index in checkItem.comment.imgs"  class="pj-img"
+						:src="item" @click="lookImg(item)"></image>
+				</view>
 			</view>
 		</uni-popup>
+		
 	</view>
 
 </template>
 
 <script>
+	import {
+		upload
+	} from '@/api/set.js';
 	import signInput from "@/components/am-sign-input/am-sign-input.vue"
 	import empty from '@/components/empty/empty.vue'
 	import {
@@ -270,6 +292,8 @@
 		},
 		data() {
 			return {
+				zzYy: '',
+				pjImg: [],
 				pjs: '',
 				partyB: {
 					address: '',
@@ -337,6 +361,22 @@
 			}
 		},
 		methods: {
+			lookImg(url) {
+				uni.previewImage({
+					urls: [url],
+					current:url
+				})
+			},
+			imgsub(index) {
+				upload({
+					filename: ''
+				}).then(data => {
+					this.$set(this.pjImg, index, data[0].img)
+				})
+			},
+			scPjImg(index) {
+				this.pjImg.splice(index, 1)
+			},
 			showTimes(val) {
 				let date = new Date(val * 1000)
 				const year = date.getFullYear();
@@ -348,10 +388,10 @@
 				this.$refs.popup.close()
 			},
 			lookHt(item) {
-				let that= this
-				console.log(item,'item----------------------------');
+				let that = this
+				console.log(item, 'item----------------------------');
 				// return
-				console.log('item.template_iditem.template_iditem.template_id',item.template_id);
+				console.log('item.template_iditem.template_iditem.template_id', item.template_id);
 				if (item.template_id && item.template_id > 1) {
 					uni.setStorageSync('htDetail', item)
 					uni.navigateTo({
@@ -363,42 +403,44 @@
 					}).then(res => {
 						let jsonAr = res.data.content.jsonAr.map(i => {
 							i.value = item[i.code] || ''
-							if(i.type == 'date') {
+							if (i.type == 'date') {
 								i.value = that.showTimes(i.value)
 							}
 							return i
 						})
 						let jsonBr = res.data.content.jsonBr.map(j => {
 							if (j.code.indexOf('to_') != -1) {
-								console.log(item[j.code],j.code);
+								console.log(item[j.code], j.code);
 								j.value = item[j.code]
 							} else {
 								j.value = item['to_' + j.code]
 							}
-							if(j.type == 'date') {
+							if (j.type == 'date') {
 								j.value = that.showTimes(item[j.code])
 							}
 							return j
 						})
-						console.log(jsonBr,'jsonBr');
+						console.log(jsonBr, 'jsonBr');
 						uni.setStorageSync('htDetails', {
 							imgs: res.data.imgs,
 							content: {
-							jsonAr,
-							jsonBr
-						}
+								jsonAr,
+								jsonBr
+							}
 						})
 						uni.navigateTo({
 							url: '/pages/user/signing/ht?hid=2'
 						})
 					})
-					
+
 				}
 
 			},
 			dk(item) {
-				let addr = {value: ''}
-				if(item.content && item.content.jsonAr) {
+				let addr = {
+					value: ''
+				}
+				if (item.content && item.content.jsonAr) {
 					addr = item.content.jsonAr.find(i => i.code == 'address')
 				}
 				uni.navigateTo({
@@ -514,6 +556,13 @@
 			},
 			lookPj(item) {
 				this.checkItem = item
+				if (this.checkItem.comment && this.checkItem.comment.imgs) {
+					console.log(this.checkItem.comment.imgs,typeof(this.checkItem.comment.imgs));
+					if(typeof(this.checkItem.comment.imgs) == 'string') {
+						
+						this.checkItem.comment.imgs = this.checkItem.comment.imgs.split(',')
+					}
+				}
 				this.$refs.lookPjPopup.open()
 			},
 			goPj() {
@@ -528,7 +577,9 @@
 				this.loading = true
 				goPj({
 					contract_id: this.checkItem.id,
-					content: this.pjs
+					content: this.pjs,
+					imgs: this.pjImg,
+					uid: this.userInfo.uid
 				}).then(res => {
 
 					this.$refs.pjPopup.close()
@@ -537,12 +588,18 @@
 						duration: 2000
 					});
 					this.loading = false
+					this.getList('re')
 				}).catch(err => {
 					this.loading = false
 				})
 			},
 			openY(item) {
 				this.checkItem = item
+				if (this.checkItem.comment && this.checkItem.comment.imgs) {
+					if(typeof(this.checkItem.comment.imgs) == 'string') {
+						this.checkItem.comment.imgs = this.checkItem.comment.imgs.split(',')
+					}
+				}
 				this.$refs.popup.open()
 			},
 			check(item) {
@@ -577,7 +634,7 @@
 				let content = that.checkItem.content || {}
 
 				if (that.userInfo.uid == that.checkItem.uid) {
-				// if (that.userInfo.uid != that.checkItem.uid) {
+					// if (that.userInfo.uid != that.checkItem.uid) {
 					console.log('jiafang');
 					qy = Jcheck
 					data = {
@@ -628,7 +685,7 @@
 							}
 							return item
 						})
-						console.log(content.jsonBr,'content.jsonBr---------------------------------');
+						console.log(content.jsonBr, 'content.jsonBr---------------------------------');
 						data.content = JSON.stringify(content)
 						console.log(data, '结束data');
 					} else {
@@ -830,6 +887,12 @@
 				font-size: 26rpx;
 				color: #999;
 			}
+			&-cancels {
+				background: #fff;
+				border: 2rpx solid #FC4564;
+				font-size: 26rpx;
+				color: #FC4564;
+			}
 		}
 	}
 
@@ -967,4 +1030,26 @@
 		color: #000;
 		font-weight: bold;
 	}
+
+	.image-list {
+		padding: 20rpx 40rpx;
+		justify-content: flex-start;
+	}
+
+	.pj-img {
+		width: 150rpx;
+		height: 150rpx;
+		margin-right: 20rpx;
+		border: 1rpx solid #eee;
+		position: relative;
+		border-radius: 10rpx;
+	}
+
+	.scbtn {
+		width: 30rpx;
+		height: 30rpx;
+		position: absolute;
+		top: -15rpx;
+		right: -15rpx;
+	}
 </style>

+ 48 - 8
pages/user/signing/plhis.vue

@@ -2,14 +2,18 @@
 	<view class="content">
 		<view class="his" v-for="item in list">
 			<view class="flex user">
-				<image :src="item.uid_avatar" mode="" class="u-avt"></image>
+				<image :src="item.uid_avatar?item.uid_avatar: 'https://api.myjie.cn/static/img/logo.png'" mode=""
+					class="u-avt"></image>
 				<view class="u-nickname clamp">
-					{{item.uid_nickname}}
+					{{item.uid_nickname ? item.uid_nickname: '微信用户'}}
 				</view>
 			</view>
 			<view class="pl">
 				{{item.content}}
 			</view>
+			<view class="pl-img">
+				<image v-for="items,index in item.imgs" class="img" :src="items" mode="" @click="previewImage(item.imgs,items)"></image>
+			</view>
 		</view>
 		<empty v-if="list.length == 0 && loaded"></empty>
 		<uni-load-more v-else :status="loading"></uni-load-more>
@@ -18,7 +22,9 @@
 
 <script>
 	import empty from '@/components/empty/empty.vue'
-	import { getPlList } from '@/api/signing.js'
+	import {
+		getPlList
+	} from '@/api/signing.js'
 	export default {
 		components: {
 			empty
@@ -35,7 +41,7 @@
 		},
 		methods: {
 			getList() {
-				if(this.loading == 'loading' || this.loading == 'noMore') return;
+				if (this.loading == 'loading' || this.loading == 'noMore') return;
 				this.loading = 'loading'
 				getPlList({
 					to_uid: this.id,
@@ -44,14 +50,26 @@
 				}).then(res => {
 					// console.log(res);
 					this.list = this.list.concat(res.data.list)
-					if(res.data.list.length == this.limit) {
+					if (res.data.list.length == this.limit) {
 						this.loading = 'more'
-					}else {
+					} else {
 						this.loading = 'noMore'
 					}
 					this.loaded = true
 				})
 			},
+			previewImage(images, item) {
+				uni.previewImage({
+					urls: images,
+					current: item,
+					success: function(res) {
+						console.log('预览图片成功');
+					},
+					fail: function(res) {
+						console.log('预览图片失败', res);
+					}
+				});
+			},
 		},
 		onLoad(opt) {
 			this.id = opt.id
@@ -66,28 +84,34 @@
 <style lang="scss" scoped>
 	.user {
 		justify-content: flex-start;
+
 		.u-avt {
-			width:60rpx;
+			width: 60rpx;
 			height: 60rpx;
 			border-radius: 50%;
 		}
+
 		.u-nickname {
 			font-size: 30rpx;
 			font-weight: bold;
 			margin-left: 15rpx;
 		}
 	}
+
 	.pl {
 		font-size: 26rpx;
-		padding:10rpx 0 10rpx 70rpx;
+		padding: 10rpx 0 10rpx 70rpx;
 	}
+
 	.content {
 		height: 100vh;
 		background-color: #fff;
 	}
+
 	.his {
 		padding: 20rpx;
 		border-bottom: 1px dashed #eee;
+
 		&-tit {
 			padding-left: 28rpx;
 			height: 68rpx;
@@ -96,6 +120,7 @@
 			font-size: 32rpx;
 			color: #000000;
 		}
+
 		&-info {
 			padding-left: 28rpx;
 			font-size: 28rpx;
@@ -104,4 +129,19 @@
 			margin: 20rpx 0;
 		}
 	}
+
+	.pl-img {
+		display: flex;
+		justify-content: flex-start;
+		padding: 20rpx;
+		padding-left: 70rpx;
+
+		.img {
+			width: 200rpx;
+			height: 200rpx;
+			margin-right: 20rpx;
+			border-radius: 10rpx;
+			border: #eee 1rpx solid;
+		}
+	}
 </style>

二进制
static/icon/fabu.png


二进制
static/icon/jf.png


二进制
static/icon/pl.png


二进制
static/icon/share.png


二进制
static/icon/weipay.png


二进制
static/image/qy.png


+ 36 - 22
uni_modules/cmy-mys-list/components/cmy-mys-list/cmy-mys-list.vue

@@ -1,17 +1,18 @@
 <template>
 	<view class="listBox">
-		<view class="bd-btm-item"  :key='ind' v-for="(item,ind) in list"
-			@click="clickList(item)"
+		<view class="bd-btm-item" :key='ind' v-for="(item,ind) in list" @click="clickList(item)"
 			v-if="item.name != '影子' && item.name != '测试牛niu' &&item.name != '111'">
-			<view class="item-img-box">
-			<image :src="item.avatar" class="item-img"></image>
+			<view class="item-img-box" :style="{'height': height + 'rpx'}" >
+				<image :src="item.avatar" class="item-img" mode="widthFix" >
+				</image>
 			</view>
-			<view class="item-info" >
+			<view class="item-info">
 				<view class="item-name flex">
 					<view class="clamp">
 						{{item.name}}
 					</view>
-					<image class="item-name-image" :src="baseURL + '/resource/icon/rz.png'"  v-if="item.is_type_audit == 1"></image>
+					<image class="item-name-image" :src="baseURL + '/resource/icon/rz.png'"
+						v-if="item.is_type_audit == 1"></image>
 				</view>
 				<view class="item-where margin-t-10">
 					{{item.age}}岁
@@ -26,12 +27,14 @@
 	</view>
 </template>
 <script>
-	import{mapState} from "vuex"
+	import {
+		mapState
+	} from "vuex"
 	export default {
-		name:"mysList",
+		name: "mysList",
 		data() {
 			return {
-				
+
 			};
 		},
 		computed: {
@@ -41,11 +44,15 @@
 			list: {
 				type: Array,
 				default: []
-			}
+			},
+			height: {
+				type: Number,
+				default: 330
+			},
 		},
-		methods:{
-			clickList(item){
-				const url ='/pages/user/model/model?uid=' + item.uid + '&mtype=' + item.show_template_id + '&type=2'
+		methods: {
+			clickList(item) {
+				const url = '/pages/user/model/model?uid=' + item.uid + '&mtype=' + item.show_template_id + '&type=2'
 				uni.navigateTo({
 					url,
 				})
@@ -59,6 +66,7 @@
 		flex-wrap: wrap;
 		justify-content: space-between;
 		line-height: 1;
+
 		.bd-btm-item {
 			border-top: #f2f2f2 1px solid;
 			width: 330rpx;
@@ -66,16 +74,20 @@
 			box-shadow: 6rpx 6rpx 6rpx 6rpx rgba(46, 46, 49, 0.06);
 			border-radius: 20rpx;
 			overflow: hidden;
+
 			&:first-of-type {
 				border-top: none;
 			}
+
 			.item-info {
 				padding: 20rpx;
+
 				.item-name {
 					font-size: 31rpx;
 					font-weight: bold;
 					color: #333333;
 					justify-content: flex-start;
+
 					.item-name-image {
 						flex-shrink: 0;
 						width: 100rpx;
@@ -83,7 +95,7 @@
 						margin-left: 10rpx;
 					}
 				}
-		
+
 				.item-zy {
 					padding: 6rpx 20rpx;
 					background: #fee7e4;
@@ -92,31 +104,33 @@
 					font-weight: 500;
 					color: #F86859;
 				}
-		
+
 				.item-vist,
 				.item-where {
-					font-weight: 500;
 					color: #969696;
 				}
-		
+
 				.item-vist {
 					font-size: 22rpx;
 					justify-items: flex-end;
 				}
-		
+
 				.item-where {
 					font-size: 24rpx;
 				}
 			}
-			.item-img-box{
+
+			.item-img-box {
 				line-height: 0;
+				overflow: hidden;
 				background-color: #eee;
 			}
+
 			.item-img {
 				width: 330rpx;
-				height: 440rpx;
+				
 			}
-		
+
 		}
 	}
-</style>
+</style>