Procházet zdrojové kódy

Merge branch 'master' of http://git.qiniu1314.com/zhang/fengpingle

zyx před 1 rokem
rodič
revize
78af6068ff

+ 108 - 0
components/sunui-grand/sunui-grand.vue

@@ -0,0 +1,108 @@
+<template name="sunui-grand">
+	<view>
+		<view v-show="isHide">
+			<view class="sunui-grand-hide-bg" :style="'background-color:' + bg + ';'">
+				<view class="sunui-grand-summary" :style="'-webkit-line-clamp:' + clamp + ';'">{{ content }}</view>
+				<view class="sunui-grand-show-btn" :style="'top:' + (clamp - 1) + 'rem;height:' + clamp / 2 + 'rem;'" v-show="clamp >= 4">
+					<view @tap.stop="show" :style="{ color: color }">
+						<text :style="'border-bottom: 1upx solid ' + color + ';'">{{ expandText }}</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view v-show="!isHide">
+			<view class="sunui-grand-show-bg" :style="'background-color:' + bg + ';'">
+				<view>{{ content }}</view>
+				<view class="sunui-grand-hide-btn" v-show="shinkText != ''">
+					<view @tap.stop="hide" :style="{ color: color }">{{ shinkText == 'true' || shinkText == true ? '' : shinkText }}</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+var _self;
+export default {
+	data() {
+		return {
+			isHide: true
+		};
+	},
+	name: 'sunui-grand',
+	props: {
+		clamp: {
+			type: [Number, String],
+			default: `4`
+		},
+		color: {
+			type: String,
+			default: `#1D82FE`
+		},
+		content: {
+			type: [String, Object],
+			default: ``
+		},
+		bg: {
+			type: String,
+			default: `#E6E6E6`
+		},
+		expandText: {
+			type: String,
+			default: '展开阅读全文'
+		},
+		shinkText: {
+			type: String,
+			default: '点击收起全文'
+		}
+	},
+	created() {
+		_self = this;
+	},
+	methods: {
+		show() {
+			let _this = this;
+			_this.isHide = false;
+		},
+		hide() {
+			let _this = this;
+			_this.isHide = true;
+		}
+	}
+};
+</script>
+
+<style>
+.sunui-grand-hide-bg {
+	background-color: #e9ecef;
+	padding: 4%;
+	padding-bottom: 0;
+	position: relative;
+}
+
+.sunui-grand-show-bg {
+	background-color: #e9ecef;
+	padding: 4%;
+}
+
+.sunui-grand-summary {
+	overflow: hidden;
+	text-overflow: clip;
+	display: -webkit-box;
+	-webkit-box-orient: vertical;
+}
+
+.sunui-grand-show-btn {
+	width: 100%;
+	position: absolute;
+	left: 0;
+	z-index: 0;
+	text-align: center;
+	background-image: linear-gradient(-180deg, rgba(233, 236, 239, 0) 0%, #fff 80%);
+	padding-top: 3rem;
+}
+
+.sunui-grand-hide-btn {
+	text-align: right;
+}
+</style>

+ 33 - 0
js_sdk/xb-copy/uni-copy.js

@@ -0,0 +1,33 @@
+export default function uniCopy(content) {
+	/**
+	 * 小程序端 和 app端的复制逻辑
+	 */
+	//#ifndef H5
+	uni.setClipboardData({
+		data: content,
+		success: function() {
+			console.log('success');
+			return true
+		}
+	});
+	//#endif
+	
+	/**
+	 * H5端的复制逻辑
+	 */
+	// #ifdef H5
+	if (!document.queryCommandSupported('copy')) { //为了兼容有些浏览器 queryCommandSupported 的判断
+		// 不支持
+		return false
+	}
+	let textarea = document.createElement("textarea")
+	textarea.value = content
+	textarea.readOnly = "readOnly"
+	document.body.appendChild(textarea)
+	textarea.select() // 选择对象
+	textarea.setSelectionRange(0, content.length) //核心
+	let result = document.execCommand("copy") // 执行浏览器复制命令
+	textarea.remove()
+	return result
+	// #endif
+}

+ 49 - 36
pages.json

@@ -18,15 +18,6 @@
 				"navigationBarTitleText": "商城首页"
 			}
 		},
-		{
-			"path": "pages/hall/halllist",
-			"style": {
-				"navigationBarTitleText": "会馆详情",
-				"app-plus": {
-					"titleNView": false
-				}
-			}
-		},
 		{
 			"path": "pages/cate/order",
 			"style": {
@@ -81,33 +72,55 @@
 			}
 		]
 	   },
+	   
+	   {
+		"root": "pages/share",
+		"name": "share",
+		"pages": [  {
+		   	"path": "plshare",
+		   	"style": {
+		   		"navigationBarTitleText": "分享内容"
+		   	}
+		   },
+		   {
+		   	"path": "wzshare",
+		   	"style": {
+		   		"navigationBarTitleText": "分享内容"
+		   	}
+		   },
+		   {
+		   	"path": "share",
+		   	"style": {
+		   		"navigationBarTitleText": "种草专区",
+		   		"app-plus": {
+		   			"titleNView": false
+		   		}
+		   	}
+		   },
+		   {
+		   	"path": "plDetail",
+		   	"style": {
+		   		"navigationBarTitleText": "内容详情",
+		   		"app-plus": {
+		   			"titleNView": {
+		   				"type": "transparent"
+		   			}
+		   		}
+		   	}
+		   },
+		   {
+		   	"path": "wzDetail",
+		   	"style": {
+		   		"navigationBarTitleText": "内容详情",
+		   		"app-plus": {
+		   			"titleNView": {
+		   				"type": "transparent"
+		   			}
+		   		}
+		   	}
+		   }]
+	   },
 	   {
-		   "root": "pages/hall",
-		   "name": "hall",
-		   "pages": [
-			   {
-			   	"path": "gsell",
-			   	"style": {
-			   		"navigationBarTitleText": "挂售"
-			   	}
-			   },
-			   {
-			   	"path": "hallpay",
-			   	"style": {
-			   		"navigationBarTitleText": "支付"
-			   	}
-			   },
-			   {
-			   	"path": "hall",
-			   	"style": {
-			   		"navigationBarTitleText": "会馆",
-			   		"app-plus": {
-			   			"titleNView": false
-			   		}
-			   	}
-			   }
-		   ]
-	   },{
 		   "root": "pages/address",
 		   "name": "address",
 		   "pages": [
@@ -413,7 +426,7 @@
 				"text": "首页"
 			},
 			{
-				"pagePath": "pages/hall/halllist",
+				"pagePath": "pages/share/share",
 				"iconPath": "static/tabBar/tab-cate.png",
 				"selectedIconPath": "static/tabBar/tab-cate-current.png",
 				"text": "参赛"

+ 0 - 137
pages/hall/gsell.vue

@@ -1,137 +0,0 @@
-<template>
-	<view class="center">
-		<view class="main">
-			<view class="main-font">购买价格(元)</view>
-			<view class="main-input">{{ (buy * 1).toFixed(2) * 1 }}</view>
-		</view>
-		<!-- <view class="center"><calendar class="sign-date-box" :checks="signList" checksClass="" :checkTextShow="true" :nextMounth="next"></calendar></view> -->
-		<view class="title">今日最高限价{{ (price * 1).toFixed(2) * 1 }}</view>
-		<!-- <view class="main">
-			<view class="main-font">挂售日期</view>
-			<view class="main-input">{{ deta }}</view>
-		</view> -->
-		<view class="main">
-			<view class="main-font">挂售价格(元)</view>
-			<view class="main-input">{{ (price * 1).toFixed(2) * 1 }}</view>
-		</view>
-		<view class="money">服务费{{ (fwprice * 1).toFixed(2) * 1 }}易趣卷</view>
-		<view class="btn" @click="sall()">确定</view>
-	</view>
-</template>
-
-<script>
-import { gsxq, hanging_sale } from '@/api/hall.js';
-import calendar from '../../components/ss-calendar/ss-calendar.vue';
-export default {
-	components: {
-		calendar
-	},
-	data() {
-		return {
-			// signList: [],
-			id: '',
-			price: '', //挂售价格
-			buy: '', //购买价格
-			deta: '', //挂售日期
-			fwprice: '', //服务费
-			// next: false
-		};
-	},
-	onLoad(option) {
-		this.id = option.id;
-		this.loadData();
-	},
-	methods: {
-		loadData() {
-			gsxq({ id: this.id }).then(e => {
-				console.log(e);
-				this.buy = e.data.price;
-				this.price = e.data.hanging_price;
-				this.fwprice = e.data.anticipate;
-				// let arr = e.data.gs_time.split(' ');
-				// let brr = arr[0].split('-');
-				// this.signList.push(brr[2] * 1)
-				// this.signList.push(brr[2] * 1);
-				// let month = new Date().getMonth() + 1;
-				// if (brr[1] * 1 == month) {
-				// 	this.next = false;
-				// } else {
-				// 	this.next = true;
-				// }
-				// this.deta = brr[1] + '月' + brr[2] + '日';
-			});
-		},
-		sall() {
-			hanging_sale({ id: this.id }).then(e => {
-				uni.navigateTo({
-					url: '/pages/money/success?type=2'
-				});
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.center,
-page {
-	height: auto;
-	background: #ffffff;
-	min-height: 100%;
-}
-.title {
-	margin-top: 50rpx;
-	text-align: center;
-	font-size: 30rpx;
-	font-family: PingFang SC;
-	font-weight: 500;
-	color: #fd3b39;
-	margin-bottom: 60rpx;
-}
-.main {
-	margin-top: 40rpx;
-	padding: 0 66rpx 0 60rpx;
-	display: flex;
-	justify-content: space-between;
-	align-items: center;
-	.main-font {
-		font-size: 32rpx;
-		font-family: PingFang SC;
-		font-weight: bold;
-		color: #333333;
-	}
-	.main-input {
-		width: 404rpx;
-		height: 88rpx;
-		background: #f4f4f4;
-		border-radius: 10rpx;
-		font-size: 32rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: #333333;
-		line-height: 88rpx;
-		text-align: center;
-	}
-}
-.money {
-	margin-top: 74rpx;
-	text-align: center;
-	font-size: 32rpx;
-	font-family: PingFang SC;
-	font-weight: bold;
-	color: #fd3b39;
-}
-.btn {
-	width: 560rpx;
-	height: 80rpx;
-	background: #fc5b62;
-	border-radius: 40rpx;
-	margin: 96rpx auto 0;
-	font-size: 30rpx;
-	font-family: PingFangSC;
-	font-weight: 500;
-	color: #ffffff;
-	line-height: 80rpx;
-	text-align: center;
-}
-</style>

+ 0 - 283
pages/hall/hall.vue

@@ -1,283 +0,0 @@
-<template>
-	<view class="center">
-		<view class="status_bar"><!-- 这里是状态栏 --></view>
-		<view class="top">
-			<!-- #ifndef APP-PLUS -->
-			<image class="top-bg" src="http://yiqugo.oss-cn-hangzhou.aliyuncs.com/f0827202304061457316753.png" mode="">
-			</image>
-			<!-- #endif -->
-			<!-- #ifdef APP-PLUS -->
-			<image class="top-bg" src="../../static/img/hall-bg.png" mode=""></image>
-
-			<!-- #endif -->
-			<view class="title">易趣会馆</view>
-		</view>
-		<view class="hall-main">
-			<!-- #ifndef APP-PLUS -->
-			<image src="http://yiqugo.oss-cn-hangzhou.aliyuncs.com/75885202304061434299264.png" mode=""></image>
-			<!-- #endif -->
-			<!-- #ifdef APP-PLUS -->
-			<image src="../../static/img/hell-main1.png" mode=""></image>
-			<!-- #endif -->
-		</view>
-		<view class="hall-center">
-			<view class="shingle-main" v-for="(item, index) in list" :key="index" @click="nav(item)">
-				<view class="shingle-bg">
-					<image :src="item.image" mode=""></image>
-				</view>
-				<view class="shinglem-title flex">
-					<image class="tbg" src="../../static/img/tbg-left.png" mode=""></image>
-					<view class="shinglemt-center">
-						<image class="address" src="../../static/img/address.png" mode=""></image>
-						<view class="shingle-font">{{ item.name }}</view>
-					</view>
-					<image class="tbg" src="../../static/img/tbg-right.png" mode=""></image>
-				</view>
-				<view class="shingle-mmain flex">
-					<view class="smmain-item">
-						<view class="smitem-top">开放中</view>
-						<view class="smitem-bottom">状态</view>
-					</view>
-					<view class="shu"></view>
-					<view class="smmain-item">
-						<view class="smitem-top clamp">{{ item.nickname }}</view>
-						<view class="smitem-bottom clamp">馆长</view>
-					</view>
-					<view class="shu"></view>
-					<view class="smmain-item">
-						<view class="people flex">
-							<view class="peopleitem" v-for="item in 1">
-								<image src="../../static/img/busy.png" mode=""></image>
-							</view>
-							<view class="peopleitem" v-for="item in 4">
-								<image src="../../static/img/leisure.png" mode=""></image>
-							</view>
-						</view>
-						<view class="smitem-bottom">流畅</view>
-					</view>
-				</view>
-				<image class="right-bottom" src="../../static/img/right-bottom.png" mode=""></image>
-			</view>
-		</view>
-		<u-tabbar activeColor="#f42b4e" v-model="current" :list="tabbar" :mid-button="true"></u-tabbar>
-	</view>
-</template>
-
-<script>
-	import {
-		tabbar
-	} from '@/utils/tabbar.js';
-	import {
-		auction_gu
-	} from '@/api/hall.js';
-	export default {
-		data() {
-			return {
-				tabbar: tabbar,
-				current: 2,
-				list: [],
-				page: 1,
-				limit: 10,
-				loadingType: 'more'
-			};
-		},
-		onShow() {
-			this.loadData();
-		},
-		methods: {
-			loadData() {
-				const obj = this;
-				if (obj.loadingType == 'nomore' || obj.loadingType == 'loading') {
-					return;
-				}
-				obj.loadingType = 'loading';
-				auction_gu({
-						pages: obj.page,
-						limit: obj.limit
-					})
-					.then(({
-						data
-					}) => {
-						console.log(data);
-						this.list = data;
-					})
-					.catch(e => {
-						console.log(e);
-					});
-			},
-			nav(item) {
-				uni.navigateTo({
-					url: '/pages/hall/halllist?id=' + item.id + '&name=' + item.name + '&peoplename=' + item
-						.nickname
-				});
-			}
-		}
-	};
-</script>
-
-<style lang="less">
-	.center,
-	page {
-		height: auto;
-		min-height: 100%;
-		background: #ffffff;
-	}
-
-	.status_bar {
-		height: var(--status-bar-height);
-		width: 100%;
-	}
-
-	.top {
-		position: relative;
-		width: 750rpx;
-		height: 346rpx;
-
-		.top-bg {
-			position: absolute;
-			top: 0;
-			left: 0;
-			right: 0;
-			width: 750rpx;
-			height: 346rpx;
-		}
-
-		.title {
-			padding-top: 20rpx;
-			text-align: center;
-			position: relative;
-			z-index: 2;
-			font-size: 36rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #ffffff;
-		}
-	}
-
-	.hall-main {
-		margin: -252rpx auto 0;
-		width: 700rpx;
-		height: 300rpx;
-
-		image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-
-	.hall-center {
-		margin-top: 34rpx;
-	}
-
-	.shingle-main {
-		margin: 20rpx auto;
-		width: 690rpx;
-		height: 218rpx;
-		position: relative;
-
-		.shingle-bg {
-			position: absolute;
-			top: 0;
-			left: 0;
-			right: 0;
-			width: 690rpx;
-			height: 218rpx;
-
-			image {
-				width: 690rpx;
-				height: 218rpx;
-			}
-		}
-
-		.shinglem-title {
-			position: relative;
-			z-index: 2;
-			justify-content: center;
-			height: 70rpx;
-
-			.tbg {
-				height: 70rpx;
-				width: 40rpx;
-			}
-
-			.shinglemt-center {
-				display: flex;
-				align-items: center;
-				background: rgba(220, 38, 43, 0.66);
-			}
-
-			.address {
-				width: 28rpx;
-				height: 30rpx;
-			}
-
-			.shingle-font {
-				font-size: 36rpx;
-				font-family: PingFang SC;
-				font-weight: bold;
-				color: #ffffff;
-				line-height: 70rpx;
-				margin-left: 14rpx;
-			}
-		}
-
-		.shingle-mmain {
-			position: relative;
-			z-index: 2;
-			margin-top: 30rpx;
-
-			.smmain-item {
-				width: 33%;
-				display: flex;
-				flex-direction: column;
-				align-items: center;
-
-				.smitem-top {
-					text-align: center;
-					width: 90%;
-					font-size: 30rpx;
-					font-family: PingFang SC;
-					font-weight: bold;
-					color: #ffffff;
-				}
-
-				.smitem-bottom {
-					margin-top: 10rpx;
-					font-size: 30rpx;
-					font-family: PingFang SC;
-					font-weight: 500;
-					color: #ffffff;
-				}
-
-				.people {
-					justify-content: center;
-
-					.peopleitem {
-						width: 24rpx;
-						height: 34rpx;
-
-						image {
-							width: 100%;
-							height: 100%;
-						}
-					}
-				}
-			}
-
-			.shu {
-				width: 2rpx;
-				height: 70rpx;
-				background: #ffffff;
-			}
-		}
-
-		.right-bottom {
-			position: absolute;
-			z-index: 2;
-			right: 0;
-			bottom: 0;
-			width: 94rpx;
-			height: 92rpx;
-		}
-	}
-</style>

+ 0 - 482
pages/hall/halllist.vue

@@ -1,482 +0,0 @@
-<template>
-	<view class="center">
-		<u-tabbar activeColor="#01A6A8" inactive-color='#666666' :list="tabbar"></u-tabbar>
-	</view>
-</template>
-
-<script>
-	import {
-		getUserInfo,
-		rate,
-		details
-	} from '@/api/user.js';
-	import {
-		mapState,
-		mapMutations
-	} from 'vuex';
-	import {
-		tabbar1
-	} from '@/utils/tabbar.js';
-	export default {
-		data() {
-			return {
-				tabbar: tabbar1,
-			};
-		},
-		onLoad(option) {
-			
-		},
-		onShow() {
-			this.list = [];
-			this.page = 1;
-			this.limit = 10;
-			this.loadingType = 'more';
-			pay_list({}).then(({
-				data
-			}) => {
-				this.wx = data.wx;
-				this.aliData = data.zfb;
-				this.bankData = data.bank;
-			});
-			this.loadData();
-		},
-		computed: {
-			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
-		},
-		methods: {
-			...mapMutations('user', ['setUserInfo', 'setOrderInfo']),
-			loadData() {
-				const obj = this;
-				if (obj.loadingType == 'nomore' || obj.loadingType == 'loading') {
-					return;
-				}
-				obj.loadingType = 'loading';
-				auction_list({
-					page: obj.page,
-					limit: obj.limit,
-				}).then(({
-					data
-				}) => {
-					obj.images = data.slider_image;
-					obj.list = obj.list.concat(data.data);
-					if (data.data.length == obj.limit) {
-						obj.loadingType = 'more';
-						obj.page++;
-					} else {
-						obj.loadingType = 'nomore';
-					}
-				});
-			},
-			navTo(url) {
-				uni.navigateTo({
-					url
-				});
-			},
-			isTime(index) {
-				console.log(index, '123');
-				this.list[index].daotime = 1;
-			}
-		}
-	};
-</script>
-
-<style lang="scss">
-	page,
-	.center {
-		height: auto;
-		min-height: 100%;
-		background: #f2f5f4;
-	}
-
-	.status_bar {
-		height: var(--status-bar-height);
-		width: 100%;
-	}
-
-	.money-box {
-		color:$font-color-dark;
-		text-align: center;
-		position: relative;
-
-		.header {
-			width: 100%;
-			height: 80rpx;
-			font-size: 32rpx;
-			font-weight: 700;
-			z-index: 99;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-		}
-
-		.goback-box {
-			position: absolute;
-			left: 18rpx;
-			top: 0;
-			height: 80rpx;
-			display: flex;
-			align-items: center;
-		}
-
-		.goback {
-			z-index: 100;
-			width: 34rpx;
-			height: 34rpx;
-		}
-
-		.money_bg {
-			width: 100%;
-			height: 382rpx;
-			display: block;
-		}
-	}
-
-	.shingle-mmain {
-		position: relative;
-		z-index: 2;
-		margin: -90rpx auto 0;
-		width: 690rpx;
-		height: 176rpx;
-		background: #ffffff;
-		box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
-		border-radius: 20rpx;
-		background-color: #ffffff;
-
-		.smmain-item {
-			width: 33%;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-
-			.red {
-				color: #fd3b39 !important;
-			}
-
-			.smitem-top {
-				font-size: 30rpx;
-				font-family: PingFang SC;
-				font-weight: bolder;
-				color: #0c1732;
-			}
-
-			.smitem-bottom {
-				margin-top: 10rpx;
-				font-size: 30rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #0c1732;
-			}
-
-			.people {
-				justify-content: center;
-
-				.peopleitem {
-					width: 24rpx;
-					height: 34rpx;
-
-					image {
-						width: 100%;
-						height: 100%;
-					}
-				}
-			}
-		}
-
-		.shu {
-			width: 2rpx;
-			height: 70rpx;
-			background: #dcdcdc;
-		}
-	}
-
-	.main {
-		margin: 30rpx auto 0;
-		padding: 50rpx 50rpx 36rpx 50rpx;
-		width: 690rpx;
-		background: #ffffff;
-		box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
-		border-radius: 20rpx;
-
-		.mtitle-english {
-			font-size: 30rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #9ea6ba;
-		}
-
-		.mmain {
-			margin-top: 24rpx;
-
-			.mmain-info {
-				.mmain-title {
-					display: flex;
-					justify-content: flex-start;
-					align-items: center;
-
-					.mmaint-left {
-						width: 52rpx;
-						height: 40rpx;
-					}
-
-					.mmaint-font {
-						margin-left: 10rpx;
-						font-size: 32rpx;
-						font-family: PingFang SC;
-						font-weight: bold;
-						color: #0c1732;
-					}
-
-					.mmaint-time {
-						margin-left: 20rpx;
-						font-size: 28rpx;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #0c1732;
-					}
-				}
-
-				.mmain-time {
-					justify-content: flex-start;
-					margin-top: 10rpx;
-					font-size: 26rpx;
-					font-family: PingFang SC;
-					font-weight: 500;
-					color: #0c1732;
-
-					.lyy-b-jz {
-						margin-left: 10rpx;
-					}
-				}
-			}
-
-			.mmain-image {
-				padding-top: 14rpx;
-				width: 182rpx;
-				height: 182rpx;
-
-				image {
-					width: 100%;
-					height: 100%;
-				}
-			}
-		}
-
-		.bottom {
-			margin: 0 auto;
-			margin-top: 32rpx;
-			width: 440rpx;
-			height: 80rpx;
-			background: linear-gradient(90deg, #C38E4F, #ECC697);
-			border-radius: 20rpx;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-
-			.bottom-font {
-				font-size: 28rpx;
-				font-family: PingFang SC;
-				font-weight: bold;
-				color: #ffffff;
-			}
-
-			.bottom-image {
-				margin-left: 12rpx;
-				width: 24rpx;
-				height: 22rpx;
-			}
-		}
-	}
-
-	.popup {
-		width: 582rpx;
-		background: #ffffff;
-		border-radius: 20rpx;
-		// padding: 118rpx 20rpx 30rpx;
-
-		.popup-title {
-			padding: 30rpx;
-			text-align: center;
-			.title {
-				font-size: $font-lg;
-				padding-bottom: 30rpx;
-			}
-
-			.pirice {
-				font-weight: bold;
-				line-height: 70rpx;
-				min-width: 140rpx;
-				height: 70rpx;
-				border: 1px solid #9ea6ba;
-				&.action{
-					 color: #FFF;
-					 background-color: $u-type-primary;
-					 border-color: $u-type-primary;
-				}
-			}
-		}
-
-		.btn-box {
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			border-top: 1px solid $border-color-light;
-			font-size: 34rpx;
-			text-align: center;
-			font-weight: 500;
-			line-height: 78rpx;
-
-			.btn-left,
-			.btn-right {
-				flex-grow: 1;
-				height: 78rpx;
-			}
-
-			.btn-left {
-				color: $font-color-dark;
-			}
-
-			.btn-right {
-				background: $u-type-primary;
-				color: #ffffff;
-			}
-		}
-	}
-
-	.message {
-		justify-content: space-around;
-		margin: 20rpx auto 0;
-		padding: 16rpx 40rpx 16rpx 50rpx;
-		width: 690rpx;
-		background: #ffffff;
-		box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
-		border-radius: 20rpx;
-
-		.message-left {
-			width: 52rpx;
-			height: 52rpx;
-			flex-shrink: 0;
-		}
-
-		.message-font {
-			margin: 0 40rpx;
-			font-size: 28rpx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #0c1732;
-		}
-
-		.message-right {
-			width: 18rpx;
-			height: 30rpx;
-		}
-	}
-
-	.hallist-bg {
-		position: relative;
-		z-index: 10;
-		margin: 0 auto;
-		width: 702rpx;
-		height: 300rpx;
-		border-radius: 14rpx;
-		overflow: hidden;
-		image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-
-	.navbar {
-		display: flex;
-		align-items: center;
-		justify-content: space-around;
-		width: 700rpx;
-		background: #ffffff;
-		box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
-		border-radius: 20rpx;
-		margin: 40rpx auto 0;
-		padding: 40rpx 0 50rpx;
-
-		.vvv {
-			width: 2rpx;
-			height: 74rpx;
-			background: #dcdcdc;
-		}
-
-		.navbar-item {
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-
-			.navbar-font {
-				margin-bottom: 10rpx;
-				display: flex;
-				justify-content: center;
-				align-items: center;
-
-				image {
-					margin-right: 10rpx;
-					width: 40rpx;
-					height: 40rpx;
-				}
-
-				.font {
-					font-size: 30rpx;
-					font-weight: bold;
-					color: #0c1732;
-				}
-			}
-
-			.navbar-num {
-				font-size: 34rpx;
-				font-weight: bold;
-				color: #0c1732;
-			}
-		}
-	}
-
-	.regulation {
-		width: 650rpx;
-		padding: 30rpx;
-		background: #ffffff;
-		border-radius: 20rpx;
-		position: relative;
-
-		.regulation_close {
-			position: absolute;
-			width: 44rpx;
-			height: 44rpx;
-			top: 30rpx;
-			right: 30rpx;
-
-			image {
-				width: 100%;
-				height: 100%;
-			}
-		}
-
-		.regulation_name {
-			padding: 40rpx 0;
-			text-align: center;
-			font-size: 30rpx;
-			font-weight: bold;
-		}
-
-		.scroll-view {
-			height: 735rpx;
-		}
-
-		.regulation_btn {
-			margin: 20rpx auto 0;
-			width: 496rpx;
-			height: 78rpx;
-			background: #dc262b;
-			border-radius: 10rpx;
-			font-size: 34rpx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #ffffff;
-			text-align: center;
-			line-height: 78rpx;
-		}
-	}
-</style>

+ 0 - 674
pages/hall/hallpay.vue

@@ -1,674 +0,0 @@
-<template>
-	<view class="center">
-		<view class="top">
-			<view class="top-main">
-				<view class="num" style="color: #888888;">挂售价格¥{{ info.price }}</view>
-
-				<!-- <image class="top-image" src="../../static/img/copy.png" mode=""></image> -->
-			</view>
-			<view class="top-main" style="margin-top: 30rpx;">
-				<view class="num">
-					<text>实际支付¥ {{ info.actual_price }}</text>
-				</view>
-
-				<!-- <image class="top-image" src="../../static/img/copy.png" mode=""></image> -->
-			</view>
-
-			<!-- <view v-if="status == 1">
-				<view class="downtime" v-if="stopTime.stopTimeH < 0 || stopTime.stopTimeM < 0 || stopTime.stopTimeS < 0">订单已过期</view>
-				<view class="downtime" v-else>
-					<uni-countdowns
-						color="#FFFFFF"
-						splitor-color="#FD3B39"
-						background-color="#FD3B39"
-						border-color="#FD3B39"
-						:show-day="false"
-						:hour="stopTime.stopTimeH"
-						:minute="stopTime.stopTimeM"
-						:second="stopTime.stopTimeS"
-					></uni-countdowns>
-				</view>
-			</view> -->
-		</view>
-		<view class="product flex">
-			<image class="product-image" :src="info.image" mode=""></image>
-			<view class="product-info">
-				<view class="title">{{ info.name }}</view>
-				<view class="title buyId">
-					<text>卖家ID:</text>
-					{{ info.collection_id }}
-				</view>
-				<view class="title buyName">
-					<text>卖家昵称:</text>
-					{{ info.c_nickname }}
-				</view>
-				<view class="title buyPhone">
-					<text>卖家手机号:</text>
-					{{ zfb != '' ? zfb.phone : wx != '' ? wx.phone : bank.phone }}
-				</view>
-			</view>
-		</view>
-		<view class="main">
-			<view class="main-tip">请向以下账号自行转账(任选一种方式)</view>
-			<view class="main-title flex">
-				<view class="main-item">
-					<view class="mt-item" @click="change('0')" :class="{ current: tabCurrentIndex === 0 }" v-if="zfb != ''">
-						<image class="mt-image" :src="tabCurrentIndex == 0 ? '../../static/img/aliD.png' : '../../static/img/ali.png'" mode=""></image>
-						<view class="mt-font" :class="{ current: tabCurrentIndex === 0 }">支付宝</view>
-					</view>
-				</view>
-				<view class="main-item">
-					<view class="mt-item" @click="change('1')" :class="{ current: tabCurrentIndex === 1 }" v-if="bank != ''">
-						<image class="mt-image1" :src="tabCurrentIndex == 1 ? '../../static/img/bankD.png' : '../../static/img/bank.png'" mode=""></image>
-						<view class="mt-font" :class="{ current: tabCurrentIndex === 1 }">银行卡</view>
-					</view>
-				</view>
-				<view class="main-item">
-					<view class="mt-item" @click="change('2')" :class="{ current: tabCurrentIndex === 2 }" v-if="wx != ''">
-						<image class="mt-image2" :src="tabCurrentIndex == 2 ? '../../static/img/yueD.png' : '../../static/img/yue.png'" mode=""></image>
-						<view class="mt-font" :class="{ current: tabCurrentIndex === 2 }">微信</view>
-					</view>
-				</view>
-			</view>
-			<swiper
-				class="swiper-box"
-				:duration="500"
-				@change="changeTab"
-				:style="{ height: tabCurrentIndex == 2 ? '450rpx' : tabCurrentIndex == 1 ? '340rpx' : '280rpx' }"
-				:current="tabCurrentIndex"
-				disable-touch
-			>
-				<swiper-item class="tab-content" v-if="zfb != ''">
-					<scroll-view scroll-y="true" style="height: 100%;">
-						<view class="tc-item flex">
-							<view class="tcitem-name">账号</view>
-							<view class="ali-name">{{ zfb.payment }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(zfb.payment)"></image>
-						</view>
-						<view class="tc-item flex">
-							<view class="tcitem-name">姓名</view>
-							<view class="ali-name">{{ zfb.name }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(zfb.name)"></image>
-						</view>
-					</scroll-view>
-				</swiper-item>
-				<swiper-item class="tab-content" v-else></swiper-item>
-				<swiper-item class="tab-content" v-if="bank != ''">
-					<scroll-view scroll-y="true" style="height: 100%;">
-						<view class="tc-item flex">
-							<view class="tcitem-name">姓名</view>
-							<view class="ali-name">{{ bank.name }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(bank.name)"></image>
-						</view>
-						<view class="tc-item flex">
-							<view class="tcitem-name">银行</view>
-							<view class="ali-name">{{ bank.bank }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(bank.bank)"></image>
-						</view>
-						<view class="tc-item flex">
-							<view class="tcitem-name">支行</view>
-							<view class="ali-name">{{ bank.bank_name }}</view>
-							<image @click="copy(bank.bank_name)" class="tcitem-image" src="../../static/img/copy.png" mode=""></image>
-						</view>
-						<view class="tc-item flex">
-							<view class="tcitem-name">账号</view>
-							<view class="ali-name">{{ bank.payment }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(bank.payment)"></image>
-						</view>
-					</scroll-view>
-				</swiper-item>
-				<swiper-item class="tab-content" v-else></swiper-item>
-				<swiper-item class="tab-content" v-if="wx != ''">
-					<scroll-view scroll-y="true" style="height: 100%;">
-						<view class="tc-item flex">
-							<view class="tcitem-name">账号</view>
-							<view class="ali-name">{{ wx.payment }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(wx.payment)"></image>
-						</view>
-						<view class="tc-item flex">
-							<view class="tcitem-name">姓名</view>
-							<view class="ali-name">{{ wx.name }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(wx.name)"></image>
-						</view>
-						<view class="tc-item">
-							<view class="upload-title" style="color: #9d9d9d;">微信二维码</view>
-							<view class="upload-main" @click="lookimg(wx.image)"><image class="upload-image" :src="wx.image" mode="aspectFit"></image></view>
-						</view>
-					</scroll-view>
-				</swiper-item>
-				<swiper-item class="tab-content" v-else></swiper-item>
-			</swiper>
-		</view>
-		<view class="upload">
-			<view class="upload-title">上传支付截图</view>
-			<view class="upload-main">
-				<image class="upload-image" src="../../static/img/add.png" mode="" v-if="!image" @click="uploads"></image>
-				<image class="upload-image" :src="image" mode="" @click="uploads" v-if="image"></image>
-				<view class="upload-font">点击上传支付截图</view>
-			</view>
-		</view>
-		<view class="contentBottomHeight"></view>
-		<view class="bottom flex">
-			<view class="bottom-item" @click.stop="tocall()">
-				<image class="bi-image" src="../../static/img/call.png" mode=""></image>
-				<view class="bottom-font">联系卖家</view>
-			</view>
-			<view class="shu"></view>
-			<view class="bottom-item" @click.stop="openKf()">
-				<image class="bi-image" src="../../static/img/kf.png" mode=""></image>
-				<view class="bottom-font">联系客服</view>
-			</view>
-			<view class="btn" @click.stop="buy()">完成上传</view>
-		</view>
-		<uni-popup ref="popupkf" type="center">
-			<view class="popup-box">
-				<view class="img"><image src="../../static/img/img009.png" mode=""></image></view>
-				<view class="mian">
-					<view class="delivery">
-						<view class="title">已经为您定制专属客服</view>
-						<image src="../../static/img/img010.png" mode=""></image>
-					</view>
-					<view class="nocancel">客服VX:{{ text }}</view>
-					<view class="comfirm-box">
-						<view class="cancel" @click="cancel">取消</view>
-						<view class="comfirm" @click="copy(text)">复制微信</view>
-					</view>
-				</view>
-			</view>
-		</uni-popup>
-	</view>
-</template>
-
-<script>
-import uniCountdowns from '@/components/uni-countdown/uni-countdowns.vue';
-import uniCopy from '@/components/js_sdk/xb-copy/uni-copy.js';
-import { user_auction_order, upload, up_image, edit_voucher, time } from '@/api/order.js';
-import { timeComputed } from '@/utils/rocessor.js';
-// import { json } from 'node:stream/consumers';
-export default {
-	components: {
-		uniCountdowns
-	},
-	data() {
-		return {
-			type: 1,
-			// 倒计时
-			stopTime: {
-				stopTimeH: 0,
-				stopTimeM: 0,
-				stopTimeS: 0
-			},
-			tabCurrentIndex: 0,
-			id: '',
-			info: '',
-			bank: '',
-			wx: '',
-			zfb: '',
-			image: '',
-			status: 1,
-			text: '123456',
-			payTime: '',
-			upFileLoding:false
-		};
-	},
-	onLoad(option) {
-		this.id = option.ordid;
-		this.loadData();
-		// this.getpayTime();
-		if (option.type) {
-			this.type = option.type;
-		}
-	},
-	methods: {
-		uploads() {
-			const that = this;
-			if (that.upFileLoding) {
-				return
-			}
-			that.upFileLoding = true;
-			setTimeout(()=>{
-				that.upFileLoding = false;
-			},1000);
-			upload({
-				filename: ''
-			}).then(data => {
-				that.image = data[0].url;
-			}).catch((e)=>{
-				console.log(e);
-			});
-		},
-		// getpayTime() {
-		// 	time().then(({ data }) => {
-		// 		this.payTime = data.tow_time * 1 * 60;
-		// 		this.loadData();
-		// 	});
-		// },
-		loadData() {
-			user_auction_order({ type: 1, order_id: this.id }).then(({ data }) => {
-				let time = data.time * 1 > data.radd_time * 1 ? data.time : data.radd_time;
-				let now_time = timeComputed(time + this.payTime);
-				this.status = data.status;
-				this.stopTime.stopTimeH = now_time.hours;
-				this.stopTime.stopTimeM = now_time.minutes;
-				this.stopTime.stopTimeS = now_time.seconds;
-				this.info = data;
-				this.zfb = data.zfb;
-				this.wx = data.wx;
-				this.bank = data.bank;
-				console.log(data.zfb.length, '123456');
-				if (data.zfb.length == []) {
-					this.tabCurrentIndex = 1;
-					if (data.bank.length == []) {
-						this.tabCurrentIndex = 2;
-					}
-				}
-				console.log(this.tabCurrentIndex);
-			});
-		},
-		nav(url) {
-			uni.navigateTo({
-				url
-			});
-		},
-		copy(value) {
-			let obj = this;
-			let content = value; //需要复制的内容
-			console.log('复制的内容:', content);
-			// content = typeof content === 'string' ? content : content.toString(); // 复制内容,必须字符串,数字需要转换为字符串
-			const result = uniCopy(content);
-			if (result === false) {
-				uni.showToast({
-					title: '不支持'
-				});
-			} else {
-				uni.showToast({
-					title: '复制成功',
-					icon: 'none'
-				});
-			}
-		},
-		tocall() {
-			let num = this.zfb != '' ? this.zfb.phone : this.wx != '' ? this.wx.phone : this.bank.phone;
-			console.log(num);
-			uni.makePhoneCall({
-				phoneNumber: num //仅为示例
-			});
-		},
-		// 查看大图
-		lookimg(src) {
-			console.log(src);
-			let arr = [src];
-			uni.previewImage({
-				current: src,
-				urls: arr
-			});
-		},
-		//swiper 切换
-		changeTab(e) {
-			this.tabCurrentIndex = e.target.current;
-		},
-		toBack() {
-			uni.navigateBack({});
-		},
-		change(num) {
-			this.tabCurrentIndex = num * 1;
-		},
-		// 打开客服
-		openKf() {
-			this.$refs.popupkf.open();
-		},
-		// 关闭客服
-		cancel() {
-			this.$refs.popupkf.close();
-		},
-		buy() {
-			if (this.image == '') {
-				return this.$api.msg('请上传支付凭证');
-			}
-			if (this.type == 1) {
-				up_image({ id: this.info.id, image: this.image }).then(({ data }) => {
-					uni.navigateTo({
-						url: '/pages/money/success'
-					});
-				});
-			}
-			if (this.type == 2) {
-				edit_voucher({ order_id: this.id, image: this.image }).then(({ data }) => {
-					uni.navigateTo({
-						url: '/pages/money/success'
-					});
-				});
-			}
-		}
-	}
-};
-</script>
-
-<style lang="less">
-.center {
-	background: #f8f6f6;
-	min-height: 100%;
-	height: auto;
-}
-.top {
-	margin-top: 10rpx;
-	background-color: #ffffff;
-	padding: 56rpx 0;
-	display: flex;
-	flex-direction: column;
-	justify-content: center;
-	align-items: center;
-	.top-main {
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		line-height: 1;
-		.num {
-			font-size: 28rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #fd3b39;
-			text {
-				font-size: 50rpx;
-			}
-		}
-		.top-image {
-			margin-left: 10rpx;
-			width: 26rpx;
-			height: 28rpx;
-		}
-	}
-	.downtime {
-		margin-top: 20rpx;
-	}
-}
-.product {
-	margin-top: 20rpx;
-	padding: 35rpx 35rpx 40rpx 35rpx;
-	background-color: #ffffff;
-	justify-content: flex-start;
-	align-items: flex-start;
-	.product-image {
-		width: 210rpx;
-		height: 210rpx;
-		border-radius: 10rpx;
-	}
-	.product-info {
-		margin-left: 26rpx;
-		padding-top: 10rpx;
-		line-height: 1;
-		.title {
-			line-height: 1;
-			font-size: 30rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #333333;
-			text {
-				color: #999999;
-			}
-		}
-		.buyId {
-			margin-top: 30rpx;
-		}
-		.buyName {
-			margin-top: 24rpx;
-		}
-		.buyPhone {
-			margin-top: 24rpx;
-		}
-	}
-}
-.main {
-	margin-top: 20rpx;
-	padding: 30rpx 0 40rpx;
-	background: #ffffff;
-	.main-tip {
-		padding: 0 30rpx;
-		font-size: 30rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: #999999;
-	}
-	.main-title {
-		margin-top: 34rpx;
-		justify-content: flex-start;
-		.current {
-			background: linear-gradient(143.2747deg, #ff6a00, #ee0979) !important;
-			color: #ffffff !important;
-		}
-		.main-item {
-			width: 33%;
-		}
-		.mt-item {
-			margin: 0 auto;
-			width: 160rpx;
-			height: 60rpx;
-			background: #f8f8f8;
-			border-radius: 10rpx;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			.mt-image {
-				width: 32rpx;
-				height: 32rpx;
-			}
-			.mt-image1 {
-				width: 38rpx;
-				height: 32rpx;
-			}
-			.mt-image2 {
-				width: 36rpx;
-				height: 32rpx;
-			}
-			.mt-font {
-				margin-left: 10rpx;
-				font-size: 30rpx;
-				font-family: PingFang SC;
-				font-weight: bold;
-				color: #333333;
-			}
-		}
-	}
-	.swiper-box {
-		width: 100%;
-		padding: 14rpx 30rpx 0;
-		.tc-item {
-			padding: 50rpx 2rpx 0;
-			line-height: 1;
-			.tcitem-name {
-				width: 118rpx;
-				font-size: 30rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #999999;
-			}
-			.ali-name {
-				width: 380rpx;
-				font-size: 30rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #333333;
-			}
-			.tcitem-image {
-				width: 26rpx;
-				height: 28rpx;
-			}
-		}
-	}
-}
-.upload-image {
-	width: 160rpx;
-	height: 160rpx;
-	border-radius: 10rpx;
-}
-.upload-title {
-	font-size: 30rpx;
-	font-family: PingFang SC;
-	font-weight: bold;
-	color: #333333;
-}
-.upload-main {
-	padding-top: 32rpx;
-	display: flex;
-	justify-content: center;
-	align-items: center;
-	flex-direction: column;
-	.upload-font {
-		margin-top: 24rpx;
-		font-size: 30rpx;
-		font-family: PingFang SC;
-		font-weight: bold;
-		color: #333333;
-	}
-}
-.upload {
-	margin-top: 20rpx;
-	padding: 34rpx 30rpx 40rpx 30rpx;
-	background: #ffffff;
-}
-.bottom {
-	position: fixed;
-	bottom: 0;
-	background: #ffffff;
-	width: 750rpx;
-	height: 146rpx;
-	justify-content: flex-start;
-	.bottom-item {
-		margin-left: 30rpx;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		.bi-image {
-			width: 38rpx;
-			height: 34rpx;
-		}
-		.bottom-font {
-			margin-top: 14rpx;
-			font-size: 24rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #333333;
-		}
-		.bottom-num {
-			line-height: 1;
-			font-size: 24rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #333333;
-		}
-	}
-	.shu {
-		margin-left: 20rpx;
-		width: 2px;
-		height: 74rpx;
-		background: #c0bfc0;
-	}
-	.btn {
-		margin-left: 20rpx;
-		width: 430rpx;
-		height: 80rpx;
-		background: #fd3b39;
-		border-radius: 20rpx;
-		text-align: center;
-		font-size: 34rpx;
-		font-family: PingFang SC;
-		font-weight: bold;
-		color: #ffffff;
-		line-height: 80rpx;
-	}
-}
-// 文章页底部高度撑开
-.contentBottomHeight {
-	height: 150rpx;
-}
-.popup-box {
-	width: 522rpx;
-	height: 605rpx;
-	background-color: #ffffff;
-	border-radius: 20rpx;
-	position: relative;
-
-	.img {
-		position: relative;
-		top: -56rpx;
-		left: 0;
-		width: 522rpx;
-		height: 132rpx;
-		display: flex;
-		justify-content: center;
-
-		image {
-			border-radius: 20rpx 20rpx 0 0;
-			width: 450rpx;
-			height: 132rpx;
-		}
-	}
-
-	.mian {
-		margin-top: -44rpx;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		// padding: 32rpx 32rpx;
-		background-color: #ffffff;
-		border-radius: 0 0 20rpx 20rpx;
-		text-align: center;
-
-		.delivery {
-			font-size: 40rpx;
-			color: #333333;
-			display: flex;
-			align-items: center;
-			flex-direction: column;
-
-			.title {
-			}
-
-			image {
-				margin-top: 48rpx;
-				width: 172rpx;
-				height: 160rpx;
-			}
-		}
-
-		.nocancel {
-			font-size: 32rpx;
-			color: #333333;
-			margin-top: 14rpx;
-		}
-
-		.comfirm-box {
-			margin-top: 52rpx;
-			display: flex;
-			// margin-bottom: 32rpx;
-
-			// justify-content: space-around;
-			.cancel {
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				width: 197rpx;
-				height: 74rpx;
-				border: 1px solid #dcc786;
-				border-radius: 38rpx;
-
-				font-size: 32rpx;
-				color: #605128;
-			}
-
-			.comfirm {
-				margin-left: 32rpx;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				width: 197rpx;
-				height: 74rpx;
-				background: linear-gradient(-90deg, #d1ba77 0%, #f7e8ad 100%);
-				border-radius: 38px;
-				font-size: 32rpx;
-				color: #605128;
-			}
-		}
-	}
-}
-</style>

+ 482 - 0
pages/share/plDetail.vue

@@ -0,0 +1,482 @@
+<template>
+	<view class="content">
+		<view class="top">
+			<image :src="info.main_pic || ''" mode="widthFix"></image>
+		</view>
+		<view class="title">{{ info.title || '' }}</view>
+		<view class="tip">{{ info.comment || '' }}</view>
+		<view class="main" v-for="(ls, index) in info.pics" :key="index">
+			<image :src="ls" mode="widthFix"></image>
+		</view>
+		<view class="navbar flex">
+			<view class="navbar-item" @click.stop="shareLink()">
+				<view class="navbar-icon">
+					<image src="../../static/icon/sharejt.png" mode=""></image>
+				</view>
+				<view class="navbar-font">分享</view>
+			</view>
+			<view class="xian"></view>
+			<view class="navbar-item" @click.stop="wzdz()">
+				<view class="navbar-icon" v-if="info.user_good == 1">
+					<image src="../../static/icon/zanguo.png" mode=""></image>
+				</view>
+				<view class="navbar-icon" v-else>
+					<image src="../../static/icon/zan.png" mode=""></image>
+				</view>
+				<view class="navbar-font">{{ info.goods_count }}</view>
+			</view>
+		</view>
+		<view v-if="shareShow" class="Shraremask" @click="cancel">
+			<view class="mask-content">
+				<scroll-view class="view-content" scroll-y>
+					<view class="share-header">分享到</view>
+					<view class="share-list">
+						<view class="share-item">
+							<button class="wechat-box" open-type="share">
+								<image class="itemImage" src="../../static/icon/share1.png" mode=""></image>
+								<text class="itemText">微信好友</text>
+							</button>
+							<view class="wechat-box" @click="navTo('/pages/zc/plshare?id=' + id)">
+								<image class="itemImage" src="../../static/icon/share2.png" mode=""></image>
+								<text class="itemText">朋友圈</text>
+							</view>
+							<view class="wechat-box" @click="copy()">
+								<image class="itemImage" src="../../static/icon/share3.png" mode=""></image>
+								<text class="itemText">复制链接</text>
+							</view>
+							<view class="wechat-box" @click="shareToFriend()">
+								<image class="itemImage" src="../../static/icon/share4.png" mode=""></image>
+								<text class="itemText">生成海报</text>
+							</view>
+						</view>
+					</view>
+				</scroll-view>
+				<view class="bottomButtom b-t" @click="cancel">取消</view>
+			</view>
+		</view>
+		<uni-popup ref="popupshare" type="center">
+			<view class="share-box">
+				<image :src="shareImage" mode="" class="box-img" @longpress="saveImg()"></image>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		reply_detail,
+		reply_good,
+		short_link,
+		reply_poster
+	} from '@/api/activity.js';
+	import uniCopy from '@/js_sdk/xb-copy/uni-copy.js';
+	import {
+		mapState
+	} from 'vuex';
+	export default {
+		data() {
+			return {
+				id: '',
+				info: {},
+				shareShow: false,
+				shareImage: ''
+			};
+		},
+		computed: {
+			...mapState('user', ['hasLogin', 'userInfo'])
+		},
+		onLoad(option) {
+			if (option.id) {
+				this.id = option.id;
+			}
+			// #ifdef MP
+			if (option.scene) {
+				if (typeof option.scene == 'string') {
+					// let scene = ('{' + option.scene + "}").replace('qr%26', '').replace(/%3D/g, ':').replace(/%26/g, ',')
+					// 	.replace('id', '\"id\"').replace('pid', '\"pid\"');
+					let scene = ('{' + option.scene + '}')
+						.replace('qr%26', '')
+						.replace(/%3D/g, ':')
+						.replace(/%26/g, ',')
+						.replace('id', '"id"')
+						.replace('pid', '"pid"')
+						.replace(/=/g, ':')
+						.replace(/&/g, ',');
+					console.log(scene, 'scene');
+					let opt = JSON.parse(scene);
+					console.log(opt);
+					// 保存拼团订单id
+					this.id = opt.id;
+					if (opt.pid) {
+						// 存储邀请人
+						// this.spread = opt.pid;
+						uni.setStorageSync('spread', opt.pid);
+					}
+				}
+			}
+			// #endif
+		},
+		onShow() {
+			this.loadData();
+		},
+		onReachBottom() {},
+		onReady() {},
+		// #ifdef MP
+		onShareAppMessage: function(res) {
+			console.log(this.share);
+			if (res.from === 'button') {
+				// 来自页面内分享按钮
+				let pages = getCurrentPages();
+				// 获取当前页面
+				let page = pages[pages.length - 1];
+				let path = '/' + page.route + '?';
+				// 保存传值
+				for (let i in page.options) {
+					path += i + '=' + page.options[i] + '&';
+				}
+				// 保存邀请人
+				let data = {
+					path: path,
+					imageUrl: this.info.share_images[0],
+					title: this.info.title
+				};
+				console.log('data', data);
+				return data;
+			}
+		},
+		// #endif
+		methods: {
+			loadData() {
+				reply_detail({}, this.id).then(({
+					data
+				}) => {
+					this.info = data;
+				});
+			},
+			// 文章点赞
+			wzdz() {
+				reply_good({}, this.id).then(e => {
+					if (this.info.user_good == 0) {
+						this.info.user_good = 1;
+						this.info.goods_count += 1;
+					} else {
+						this.info.user_good = 0;
+						this.info.goods_count -= 1;
+					}
+				});
+			},
+			navTo(url) {
+				uni.navigateTo({
+					url
+				});
+			},
+			shareLink(item) {
+				console.log('dainjideniang');
+				this.shareShow = true;
+			},
+			shareToFriend() {
+				let obj = this;
+				uni.showLoading({
+					title: 'Loading...',
+					mask: true
+				});
+				reply_poster({}, this.id)
+					.then(({
+						data
+					}) => {
+						obj.shareImage = data.url;
+						console.log(obj.shareImage, '123456');
+						uni.hideLoading();
+						this.$refs.popupshare.open();
+					})
+					.catch(e => {
+						uni.hideLoading();
+					});
+			},
+			copy() {
+				short_link({
+					url: 'pages/zc/plDetail?id=' + this.id
+				}).then(({
+					data
+				}) => {
+					console.log(data);
+					this.comfirm(data.link);
+				});
+			},
+			comfirm(text) {
+				console.log(text);
+				const result = uniCopy(text);
+				if (result === false) {
+					uni.showToast({
+						title: '不支持'
+					});
+				} else {
+					uni.showToast({
+						title: '复制成功',
+						icon: 'none'
+					});
+				}
+			},
+			//取消分享
+			cancel() {
+				this.shareShow = false;
+			},
+			saveImg(w) {
+				console.log(w);
+				let obj = this;
+				uni.downloadFile({
+					//下载图片
+					url: obj.shareImage,
+					success: res => {
+						console.log(res.tempFilePath);
+						uni.saveImageToPhotosAlbum({
+							//将图片保存在手机
+							filePath: res.tempFilePath, //保存的位置
+							success: res => {
+								uni.showToast({
+									title: '保存成功',
+									icon: 'none'
+								});
+							}
+						});
+					}
+				});
+			},
+			// 富文本视频解析
+			getVideo(data) {
+				let videoList = [];
+				let videoReg = /<video.*?(?:>|\/>)/gi; //匹配到字符串中的 video 标签
+				let srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i; //匹配到字符串中的 video 标签 的路径
+				let arr = data.match(videoReg) || []; // arr 为包含所有video标签的数组
+				let articleList = data.split('</video>'); // 把字符串  从视频标签分成数组
+				arr.forEach((item, index) => {
+					var src = item.match(srcReg);
+					videoList.push(src[1]); //所要显示的字符串中 所有的video 标签 的路径
+				});
+				let needArticleList = [];
+				articleList.forEach((item, index) => {
+					if (item != '' && item != undefined) {
+						//  常见的标签渲染
+						needArticleList.push({
+							type: 'rich-text',
+							value: item + '</video>'
+						});
+					}
+					let articleListLength = articleList.length; // 插入到原有video 标签位置
+					if (index < articleListLength && videoList[index] != undefined) {
+						needArticleList.push({
+							type: 'video',
+							value: videoList[index]
+						});
+					}
+				});
+				return needArticleList;
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page,
+	.content {
+		min-height: 100%;
+		height: auto;
+	}
+
+	.top {
+		width: 750rpx;
+
+		image {
+			width: 100%;
+		}
+	}
+
+	.title {
+		margin-top: 20rpx;
+		text-align: center;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: 800;
+		color: #303030;
+	}
+
+	.tip {
+		margin-top: 20rpx;
+		padding: 0 10rpx;
+		font-size: 24rpx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #969696;
+	}
+
+	.main {
+		margin-top: 60rpx;
+
+		image {
+			width: 750rpx;
+		}
+	}
+
+	.navbar {
+		background: #ffffff;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		width: 750rpx;
+		padding: 50rpx 0;
+
+		.xian {
+			width: 2px;
+			background: #999999;
+			height: 36rpx;
+		}
+
+		.navbar-item {
+			width: 50%;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+
+			.navbar-icon {
+				width: 36rpx;
+				height: 36rpx;
+
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+
+			.navbar-font {
+				margin-left: 17rpx;
+				font-size: 22rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+			}
+		}
+	}
+
+	.Shraremask {
+		position: fixed;
+		left: 0;
+		top: 0;
+		right: 0;
+		bottom: 0;
+		display: flex;
+		justify-content: center;
+		align-items: flex-end;
+		z-index: 998;
+		transition: 0.3s;
+		background-color: rgba(51, 51, 51, 0.6);
+
+		.bottomButtom {
+			position: absolute;
+			left: 0;
+			bottom: 0;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			width: 100%;
+			height: 90rpx;
+			background: #fff;
+			z-index: 9;
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+		}
+	}
+
+	.mask-content {
+		margin-bottom: 88rpx;
+		width: 100%;
+		height: 380rpx;
+		transition: 0.3s;
+		background: #fff;
+
+		&.has-bottom {
+			padding-bottom: 90rpx;
+		}
+
+		.view-content {
+			height: 100%;
+		}
+	}
+
+	.share-header {
+		height: 110rpx;
+		font-size: $font-base + 2rpx;
+		color: font-color-dark;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		padding-top: 10rpx;
+
+		&:before,
+		&:after {
+			content: '';
+			width: 240rpx;
+			height: 0;
+			border-top: 1px solid $border-color-base;
+			transform: scaleY(0.5);
+			margin-right: 30rpx;
+		}
+
+		&:after {
+			margin-left: 30rpx;
+			margin-right: 0;
+		}
+	}
+
+	.share-list {
+		display: flex;
+		width: 80%;
+		margin: 0rpx auto;
+	}
+
+	.share-item {
+		min-width: 33.33%;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 180rpx;
+		width: 100%;
+
+		.wechat-box {
+			width: 50%;
+			height: 100%;
+			background: #ffffff;
+			border: 0;
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+
+			&::after {
+				border: 0;
+			}
+
+			.itemImage {
+				width: 80rpx;
+				height: 80rpx;
+				margin-bottom: 16rpx;
+			}
+
+			.itemText {
+				font-size: $font-base;
+				color: $font-color-base;
+				line-height: 2;
+			}
+		}
+	}
+
+	.share-box {
+		width: 600rpx;
+		height: 1000rpx;
+		background: red;
+
+		.box-img {
+			width: 600rpx;
+			height: 1000rpx;
+		}
+	}
+</style>

+ 291 - 0
pages/share/plshare.vue

@@ -0,0 +1,291 @@
+<template>
+	<view class="content">
+		<view class="box">
+			<view class="title flex">
+				<view class="title-font">分享文案</view>
+				<view class="title-btn" @click="comfirm()">复制文案</view>
+			</view>
+			<view class="box-info">
+				<view class="info-title">{{ info.title }}</view>
+				<view class="info-tip">{{ info.comment }}</view>
+				<view class="info-url">{{ url }}</view>
+			</view>
+			<view class="title flex" style="margin-top: 20rpx;">
+				<view class="title-font">
+					分享素材
+					<text>(已选{{ nowlen }}/{{ alllen }})</text>
+				</view>
+			</view>
+			<view class="image-box">
+				<view class="image-item" v-for="(item, index) in imageBox" @click="change(item)">
+					<image :src="item.url" mode=""></image>
+					<view class="isxuan" v-if="item.isxuan"></view>
+				</view>
+			</view>
+		</view>
+		<view class="btn" @click="onDown()">下载</view>
+	</view>
+</template>
+
+<script>
+import sunuiGrand from '@/components/sunui-grand/sunui-grand.vue';
+import { reply_detail, short_link } from '@/api/activity.js';
+import uniCopy from '@/js_sdk/xb-copy/uni-copy.js';
+export default {
+	data() {
+		return {
+			info: {},
+			url: '',
+			imageBox: [],
+			alllen: '',
+			nowlen: ''
+		};
+	},
+	components: {
+		sunuiGrand
+	},
+	onLoad(opt) {
+		this.id = opt.id;
+	},
+	onShow() {
+		this.imageBox = [];
+		this.loadData();
+	},
+	onReachBottom() {},
+	onReady() {},
+	methods: {
+		loadData() {
+			const obj = this;
+			reply_detail({}, this.id).then(({ data }) => {
+				data.pics.forEach(e => {
+					let u = {
+						isxuan: true,
+						url: e
+					};
+					obj.imageBox.push(u);
+				});
+				this.alllen = obj.imageBox.length;
+				this.nowlen = obj.imageBox.length;
+				this.info = data;
+			});
+			short_link({ url: 'pages/zc/plDetail?id=' + this.id }).then(({ data }) => {
+				console.log(data);
+				this.url = data.link;
+			});
+		},
+		change(opt) {
+			if (opt.isxuan) {
+				opt.isxuan = false;
+				this.nowlen -= 1;
+			} else {
+				opt.isxuan = true;
+				this.nowlen += 1;
+			}
+		},
+		comfirm() {
+			let text = this.info.comment + this.url;
+			const result = uniCopy(text);
+			if (result === false) {
+				uni.showToast({
+					title: '不支持'
+				});
+			} else {
+				uni.showToast({
+					title: '复制成功',
+					icon: 'none'
+				});
+			}
+		},
+		onDown() {
+			let that = this;
+			let index = 0;
+			let list = [];
+			that.imageBox.forEach(e => {
+				if (e.isxuan) {
+					list.push(e.url);
+				}
+			});
+			// console.log('触发下载图片');
+			// 第一步,先调用授权功能
+			uni.authorize({
+				scope: 'scope.writePhotosAlbum',
+				success() {
+					// 1 授权成功遍历所有要下载的图片
+					if (list && list.length > 0) {
+						// console.log(that.pathList, '============查看有没有图片数据=============>');
+						let i = 1;
+						list.forEach(item => {
+							// 1.1 调用下载api方法
+							uni.showLoading({
+								title: '下载第' + i + '图片中,共' + list.length + '张'
+							});
+							uni.downloadFile({
+								url: item, // 获取要下载的服务器里的图片地址
+								success: res => {
+									// 1.2 获取远程图片地址后,将图片地址缓存到本地
+									if (res.statusCode === 200) {
+										// console.log(res, '============下载后的图片地址=============>');
+										uni.saveImageToPhotosAlbum({
+											filePath: res.tempFilePath, // 把远程的图片地址及图片保存到本地
+											success: function(res) {
+												// 1.3保存成功后弹框提示保存成功
+												i += 1;
+												uni.showToast({
+													title: '保存成功',
+													icon: 'none'
+												});
+											},
+											fail: function(res) {
+												// console.log(res, '============fail=============>');
+												// 1.4保存失败给用户弹框提示
+												uni.showToast({
+													title: '保存失败',
+													icon: 'none'
+												});
+												if (res.errMsg == 'saveImageToPhotosAlbum:fail cancel') {
+													return;
+												}
+											}
+										});
+									}
+								}
+							});
+						});
+					} else {
+						uni.showToast({
+							title: '暂无数据',
+							icon: 'none'
+						});
+					}
+				},
+				fail() {
+					// 2、授权失败 弹框再次要求授权
+					uni.showModal({
+						title: '您需要授权相册权限',
+						success(res) {
+							// 2.1点击确认按钮就调取授权设置页面
+							if (res.confirm) {
+								// 2.2 开启授权设置页面
+								uni.openSetting({
+									success(res) {},
+									fail(res) {}
+								});
+							}
+						}
+					});
+				}
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page,
+.content {
+	min-height: 100%;
+	height: auto;
+	background: #f8f8f8;
+}
+.box {
+	width: 730rpx;
+	margin: 20rpx auto 0;
+	border-radius: 20rpx;
+	background: #ffffff;
+	padding: 20rpx;
+	.title {
+		.title-font {
+			font-size: 32rpx;
+			font-family: PingFang SC;
+			font-weight: 800;
+			color: #303030;
+			text {
+				display: inline-block;
+				margin-left: 10rpx;
+				color: #999999;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+			}
+		}
+		.title-btn {
+			width: 150rpx;
+			height: 50rpx;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			border: 1px solid #e66f6f;
+			border-radius: 30rpx;
+			color: #e66f6f;
+		}
+	}
+	.box-info {
+		background: #f6f6f6;
+		width: 700rpx;
+		padding: 20rpx;
+		margin: 20rpx auto 0;
+		.info-title {
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 800;
+			color: #303030;
+		}
+		.info-tip {
+			font-size: 26rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #303030;
+		}
+		.info-url {
+			margin-top: 20rpx;
+			font-size: 26rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #666666;
+		}
+	}
+	.image-box {
+		margin-top: 20rpx;
+		display: flex;
+		align-items: center;
+		flex-wrap: wrap;
+		.image-item {
+			margin: 10rpx;
+			position: relative;
+			width: 33%;
+			height: 300rpx;
+			.isxuan {
+				position: absolute;
+				top: 20rpx;
+				right: 20rpx;
+				width: 30rpx;
+				height: 30rpx;
+				border-radius: 50%;
+				background: #e04b4b;
+			}
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+}
+.btn {
+	margin: 0 auto;
+	position: fixed;
+	bottom: 20rpx;
+	left: 0;
+	right: 0;
+	width: 710rpx;
+	height: 80rpx;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	background: #e04b4b;
+	color: #ffffff;
+	font-size: 26rpx;
+	font-family: PingFang SC;
+	font-weight: 500;
+	border-radius: 50rpx;
+}
+</style>

+ 510 - 0
pages/share/share.vue

@@ -0,0 +1,510 @@
+<template>
+	<view class="content">
+		<view class="vheigh"></view>
+		<!-- <view class="top-bg">
+			<view class="top" @click="clickSearch()">
+				<view class="top-icon">
+					<image src="../../static/icon/icon.png" mode=""></image>
+				</view>
+				<view class="top-main">输入关键词搜索</view>
+			</view>
+		</view> -->
+		<!-- <view class="navbar">
+			<view class="nav-item" :class="{ current: tabCurrentIndex === 0 }" @click="tabClick('0')">笔记素材</view>
+			<view class="nav-item" :class="{ current: tabCurrentIndex === 1 }" @click="tabClick('1')">买家反馈</view>
+		</view> -->
+		<swiper :current="tabCurrentIndex" :style="{ height: height }" class="swiper-box" duration="300"
+			@change="changeTab">
+			<swiper-item class="tab-content">
+				<scroll-view scroll-y="true" class="list-scroll-content">
+					<view class="main" v-for="(item, index) in bjsclist" :key="index"
+						@click="navTo('/pages/zc/wzDetail?id=' + item.id)">
+						<view class="main-userInfo">
+							<view class="avatar">
+								<image src="../../static/icon/fire.png" mode=""></image>
+							</view>
+							<view class="main-user-info">
+								<view class="main-userName">{{ item.author }}</view>
+								<view class="main-user-time">2022-12-20 20:52</view>
+							</view>
+						</view>
+						<view class="main-info">{{ item.synopsis }}</view>
+						<!-- <sunuiGrand :content="item.synopsis" clamp="4" expandText="全文" shinkText="收起" bg="#ffffff"></sunuiGrand> -->
+						<!-- <view class="imagebox">
+							<view class="image-item" v-for="(itm, inx) in item.share_images"><image :src="itm" mode=""></image></view>
+						</view> -->
+						<view class="main-bottom flex">
+							<view class="main-bottom-item" @click.stop="navTo('/pages/zc/wzshare?id=' + item.id)">
+								<view class="main-bottom-icon">
+									<image src="../../static/icon/pyq.png" mode=""></image>
+								</view>
+								<view class="main-bottom-font">朋友圈</view>
+							</view>
+							<button class="main-bottom-item" open-type="share" @click.stop="seave(item)">
+								<view class="main-bottom-icon1">
+									<image src="../../static/icon/wxhy.png" mode=""></image>
+								</view>
+								<view class="main-bottom-font">微信好友</view>
+							</button>
+							<view class="main-bottom-item" @click.stop="wzdz(item)">
+								<view class="main-bottom-icon" v-if="item.user_good == 1">
+									<image src="../../static/icon/zanguo.png" mode=""></image>
+								</view>
+								<view class="main-bottom-icon" v-else>
+									<image src="../../static/icon/zan.png" mode=""></image>
+								</view>
+								<view class="main-bottom-font">{{ item.goods_count }}</view>
+							</view>
+						</view>
+					</view>
+				</scroll-view>
+			</swiper-item>
+			<!-- <swiper-item class="tab-content">
+				<scroll-view scroll-y="true" class="list-scroll-content">
+					<view class="info">
+						<view class="info-item" v-for="(item, index) in mjfklist" :key="index"
+							@click="navTo('/pages/zc/plDetail?id=' + item.id)">
+							<view class="info-image">
+								<image :src="item.main_pic" mode=""></image>
+							</view>
+							<view class="info-name clamp">{{ item.title }}</view>
+							<view class="info-userinfo flex">
+								<view class="info-left">
+									<view class="info-avatar">
+										<image :src="item.avatar" mode=""></image>
+									</view>
+									<view class="info-userinfo-name">{{ item.nickname }}</view>
+								</view>
+								<view class="info-right" @click.stop="pldz(item)">
+									<view class="info-avatar" v-if="item.user_good == 0">
+										<image src="../../static/icon/zan.png" mode=""></image>
+									</view>
+									<view class="info-avatar" v-if="item.user_good == 1">
+										<image src="../../static/icon/zanguo.png" mode=""></image>
+									</view>
+									<view class="info-userinfo-name">{{ item.goods_count }}</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</scroll-view>
+			</swiper-item> -->
+		</swiper>
+	</view>
+</template>
+
+<script>
+	import {
+		article
+	} from '@/api/user.js';
+	import {
+		reply_list
+	} from '@/api/product.js';
+	import {
+		article_good,
+		reply_good
+	} from '@/api/activity.js';
+	import sunuiGrand from '@/components/sunui-grand/sunui-grand.vue';
+	export default {
+		// #ifdef MP
+		onShareAppMessage: function(res) {
+			console.log(this.share);
+			if (res.from === 'button') {
+				// 来自页面内分享按钮
+				let pages = getCurrentPages();
+				// 获取当前页面
+				let page = pages[pages.length - 1];
+				let path = '/' + page.route + '?';
+				// 保存传值
+				for (let i in page.options) {
+					path += i + '=' + page.options[i] + '&';
+				}
+				// 保存邀请人
+				let data = {
+					path: path,
+					imageUrl: this.share.image_input[0],
+					title: this.share.title
+				};
+				console.log('data', data);
+				return data;
+			}
+		},
+		// #endif
+		components: {
+			sunuiGrand
+		},
+		data() {
+			return {
+				tabCurrentIndex: 0,
+				height: '',
+				bjsclist: '',
+				mjfklist: '',
+				share: ''
+			};
+		},
+		onLoad() {},
+		onShow() {
+			this.loadData();
+		},
+		onReachBottom() {},
+		onReady(res) {
+			var _this = this;
+			uni.getSystemInfo({
+				success: resu => {
+					const query = uni.createSelectorQuery();
+					query.select('.swiper-box').boundingClientRect();
+					query.exec(function(res) {
+						_this.height = resu.windowHeight - res[0].top + 'px';
+						console.log('打印页面的剩余高度', _this.height);
+					});
+				},
+				fail: res => {}
+			});
+		},
+		methods: {
+			seave(item) {
+				this.share = item;
+			},
+			clickSearch() {
+				uni.navigateTo({
+					url: '/pages/product/search'
+				});
+			},
+			changeTab(e) {
+				this.tabCurrentIndex = e.target.current;
+				this.loadData();
+			},
+			tabClick(index) {
+				this.tabCurrentIndex = index;
+				this.loadData();
+			},
+			// 文章点赞
+			wzdz(item) {
+				article_good({}, item.id).then(e => {
+					if (item.user_good == 0) {
+						item.user_good = 1;
+						item.goods_count += 1;
+					} else {
+						item.user_good = 0;
+						item.goods_count -= 1;
+					}
+				});
+			},
+			// 评论点赞
+			pldz(item) {
+				reply_good({}, item.id).then(e => {
+					if (item.user_good == 0) {
+						item.user_good = 1;
+						item.goods_count += 1;
+					} else {
+						item.user_good = 0;
+						item.goods_count -= 1;
+					}
+				});
+			},
+			navTo(url) {
+				uni.navigateTo({
+					url
+				});
+			},
+			async loadData(source) {
+				let obj = this;
+				if (this.tabCurrentIndex == 0) {
+					article({
+								page: 1,
+								limit: 1000
+							},
+							1
+						)
+						.then(({
+							data
+						}) => {
+							this.bjsclist = data;
+						})
+						.catch(e => {
+							console.log(e);
+						});
+				} else {
+					reply_list({
+								page: 1,
+								limit: 1000
+							},
+							0
+						)
+						.then(({
+							data
+						}) => {
+							this.mjfklist = data;
+						})
+						.catch(e => {
+							console.log(e);
+						});
+				}
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.vheigh {
+		height: var(--status-bar-height);
+		background-color: #ffffff;
+	}
+
+	button {
+		padding: 0;
+		margin: 0;
+		border: none;
+		background-color: #ffffff;
+		line-height: 1;
+		height: auto;
+	}
+
+	button::after {
+		border: none;
+	}
+
+	page,
+	.content {
+		min-height: 100%;
+		height: auto;
+	}
+
+	.top-bg {
+		padding-top: 20rpx;
+		background: #ffffff;
+	}
+
+	.list-scroll-content {
+		background: #ffffff;
+		height: 100%;
+
+		.yan {
+			padding-bottom: 100rpx;
+		}
+	}
+
+	.top {
+		width: 689rpx;
+		height: 58rpx;
+		background: #ededed;
+		border-radius: 29rpx;
+		margin: 0 auto;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+
+		.top-icon {
+			width: 32rpx;
+			height: 32rpx;
+
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.top-main {
+			margin-left: 20rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #cbcbcb;
+		}
+	}
+
+	.navbar {
+		display: flex;
+		height: 88rpx;
+		padding: 0 5px;
+		background: #ffffff;
+		box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+		position: relative;
+		z-index: 10;
+
+		.nav-item {
+			flex: 1;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			height: 100%;
+			font-size: 15px;
+			color: #999999;
+			position: relative;
+
+			&.current {
+				color: #000;
+
+				&:after {
+					content: '';
+					position: absolute;
+					left: 50%;
+					bottom: 0;
+					transform: translateX(-50%);
+					width: 44px;
+					height: 0;
+					border-bottom: 2px solid #000000;
+				}
+			}
+		}
+	}
+
+	.main {
+		margin-top: 20rpx;
+		padding: 35rpx 20rpx 24rpx;
+		background: #ffffff;
+
+		image {
+			width: 100%;
+			height: 100%;
+		}
+
+		.main-userInfo {
+			display: flex;
+			align-items: center;
+
+			.avatar {
+				width: 80rpx;
+				height: 80rpx;
+				background: #ffffff;
+				border-radius: 50%;
+			}
+
+			.main-user-info {
+				margin-left: 14rpx;
+				line-height: 1;
+
+				.main-userName {
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #000000;
+				}
+
+				.main-user-time {
+					margin-top: 14rpx;
+					font-size: 21rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #666666;
+				}
+			}
+		}
+
+		.main-info {
+			margin-top: 20rpx;
+		}
+
+		.imagebox {
+			margin-top: 40rpx;
+			display: flex;
+			align-items: center;
+			flex-wrap: wrap;
+
+			.image-item {
+				margin: 10rpx;
+				width: 30%;
+				height: 230rpx;
+			}
+		}
+
+		.main-bottom {
+			margin-top: 60rpx;
+
+			.main-bottom-item {
+				padding: 30rpx 0;
+				width: 33%;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+
+				.main-bottom-icon {
+					width: 36rpx;
+					height: 36rpx;
+				}
+
+				.main-bottom-icon1 {
+					width: 43rpx;
+					height: 36rpx;
+				}
+
+				.main-bottom-icon2 {
+					width: 36rpx;
+					height: 36rpx;
+				}
+
+				.main-bottom-font {
+					margin-left: 17rpx;
+					font-size: 22rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+			}
+		}
+	}
+
+	.info {
+		padding: 10rpx;
+		display: flex;
+		flex-wrap: wrap;
+		justify-content: space-between;
+
+		image {
+			width: 100%;
+			height: 100%;
+		}
+
+		.info-item {
+			width: 48%;
+			padding-bottom: 20rpx;
+
+			.info-image {
+				width: 100%;
+				height: 480rpx;
+			}
+
+			.info-name {
+				margin-top: 20rpx;
+				padding: 0 10rpx;
+				font-size: 26rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #000000;
+			}
+
+			.info-userinfo {
+				margin-top: 20rpx;
+				padding: 0 10rpx;
+
+				.info-left {
+					display: flex;
+					align-items: center;
+
+					.info-avatar {
+						width: 32rpx;
+						height: 32rpx;
+					}
+				}
+
+				.info-userinfo-name {
+					margin-left: 10rpx;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #999999;
+				}
+
+				.info-right {
+					display: flex;
+					align-items: center;
+
+					.info-avatar {
+						width: 30rpx;
+						height: 30rpx;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 493 - 0
pages/share/wzDetail.vue

@@ -0,0 +1,493 @@
+<template>
+	<view class="content">
+		<view class="top">
+			<image :src="info.share_images[0] || ''" mode="widthFix"></image>
+		</view>
+		<view class="title">{{ info.title || '' }}</view>
+		<view class="tip">{{ info.synopsis || '' }}</view>
+		<view class="main" v-for="(ls, index) in info.content" :key="index">
+			<view v-if="ls.type == 'rich-text'" v-html="ls.value"></view>
+			<video v-if="ls.type == 'video' && ls.value" :src="ls.value" style="width:100%;height: 300px"
+				frameborder="0"></video>
+		</view>
+		<view class="navbar flex">
+			<view class="navbar-item" @click.stop="shareLink()">
+				<view class="navbar-icon">
+					<image src="../../static/icon/sharejt.png" mode=""></image>
+				</view>
+				<view class="navbar-font">分享</view>
+			</view>
+			<view class="xian"></view>
+			<view class="navbar-item" @click.stop="wzdz()">
+				<view class="navbar-icon" v-if="info.user_good == 1">
+					<image src="../../static/icon/zanguo.png" mode=""></image>
+				</view>
+				<view class="navbar-icon" v-else>
+					<image src="../../static/icon/zan.png" mode=""></image>
+				</view>
+				<view class="navbar-font">{{ info.goods_count }}</view>
+			</view>
+		</view>
+		<view v-if="shareShow" class="Shraremask" @click="cancel">
+			<view class="mask-content">
+				<scroll-view class="view-content" scroll-y>
+					<view class="share-header">分享到</view>
+					<view class="share-list">
+						<view class="share-item">
+							<button class="wechat-box" open-type="share">
+								<image class="itemImage" src="../../static/icon/share1.png" mode=""></image>
+								<text class="itemText">微信好友</text>
+							</button>
+							<view class="wechat-box" @click="navTo('/pages/zc/wzshare?id=' + id)">
+								<image class="itemImage" src="../../static/icon/share2.png" mode=""></image>
+								<text class="itemText">朋友圈</text>
+							</view>
+							<view class="wechat-box" @click="copy()">
+								<image class="itemImage" src="../../static/icon/share3.png" mode=""></image>
+								<text class="itemText">复制链接</text>
+							</view>
+							<view class="wechat-box" @click="shareToFriend()">
+								<image class="itemImage" src="../../static/icon/share4.png" mode=""></image>
+								<text class="itemText">生成海报</text>
+							</view>
+						</view>
+					</view>
+				</scroll-view>
+				<view class="bottomButtom b-t" @click="cancel">取消</view>
+			</view>
+		</view>
+		<uni-popup ref="popupshare" type="center">
+			<view class="share-box">
+				<image :src="shareImage" mode="" class="box-img" @longpress="saveImg()"></image>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		details
+	} from '@/api/user.js';
+	import {
+		article_good,
+		short_link,
+		article_poster
+	} from '@/api/activity.js';
+	import uniCopy from '@/js_sdk/xb-copy/uni-copy.js';
+	import {
+		mapState
+	} from 'vuex';
+	export default {
+		data() {
+			return {
+				id: '',
+				info: {},
+				shareShow: false,
+				shareImage: ''
+			};
+		},
+		computed: {
+			...mapState('user', ['hasLogin', 'userInfo'])
+		},
+		onLoad(option) {
+			if (option.id) {
+				this.id = option.id;
+			}
+			// #ifdef MP
+			if (option.scene) {
+				if (typeof option.scene == 'string') {
+					// let scene = ('{' + option.scene + "}").replace('qr%26', '').replace(/%3D/g, ':').replace(/%26/g, ',')
+					// 	.replace('id', '\"id\"').replace('pid', '\"pid\"');
+					let scene = ('{' + option.scene + '}')
+						.replace('qr%26', '')
+						.replace(/%3D/g, ':')
+						.replace(/%26/g, ',')
+						.replace('id', '"id"')
+						.replace('pid', '"pid"')
+						.replace(/=/g, ':')
+						.replace(/&/g, ',');
+					console.log(scene, 'scene');
+					let opt = JSON.parse(scene);
+					console.log(opt);
+					// 保存拼团订单id
+					this.id = opt.id;
+					if (opt.pid) {
+						// 存储邀请人
+						// this.spread = opt.pid;
+						uni.setStorageSync('spread', opt.pid);
+					}
+				}
+			}
+			// #endif
+		},
+		onShow() {
+			this.loadData();
+		},
+		onReachBottom() {},
+		onReady() {},
+		// #ifdef MP
+		onShareAppMessage: function(res) {
+			console.log(this.share);
+			if (res.from === 'button') {
+				// 来自页面内分享按钮
+				let pages = getCurrentPages();
+				// 获取当前页面
+				let page = pages[pages.length - 1];
+				let path = '/' + page.route + '?';
+				// 保存传值
+				for (let i in page.options) {
+					path += i + '=' + page.options[i] + '&';
+				}
+				path += 'pid=' + this.userInfo.uid;
+				// 保存邀请人
+				let data = {
+					path: path,
+					imageUrl: this.info.share_images[0],
+					title: this.info.title
+				};
+				console.log('data', data);
+				return data;
+			}
+		},
+		// #endif
+		methods: {
+			loadData() {
+				details({}, this.id).then(({
+					data
+				}) => {
+					data.content = data.content.replace(/<img/g, '<img class="rich-img"').replace(/<p>\s*<img/g,
+						'<p class="pHeight"><img');
+					data.content = this.getVideo(data.content);
+					this.info = data;
+				});
+			},
+			// 文章点赞
+			wzdz() {
+				article_good({}, this.id).then(e => {
+					if (this.info.user_good == 0) {
+						this.info.user_good = 1;
+						this.info.goods_count += 1;
+					} else {
+						this.info.user_good = 0;
+						this.info.goods_count -= 1;
+					}
+				});
+			},
+			shareLink(item) {
+				console.log('dainjideniang');
+				this.shareShow = true;
+			},
+			navTo(url) {
+				uni.navigateTo({
+					url
+				});
+			},
+			shareToFriend() {
+				let obj = this;
+				uni.showLoading({
+					title: 'Loading...',
+					mask: true
+				});
+				article_poster({}, this.id)
+					.then(({
+						data
+					}) => {
+						obj.shareImage = data.url;
+						console.log(obj.shareImage, '123456');
+						uni.hideLoading();
+						this.$refs.popupshare.open();
+					})
+					.catch(e => {
+						uni.hideLoading();
+					});
+			},
+			copy() {
+				short_link({
+					url: 'pages/zc/wzDetail?id=' + this.id
+				}).then(({
+					data
+				}) => {
+					console.log(data);
+					this.comfirm(data.link);
+				});
+			},
+			comfirm(text) {
+				console.log(text);
+				const result = uniCopy(text);
+				if (result === false) {
+					uni.showToast({
+						title: '不支持'
+					});
+				} else {
+					uni.showToast({
+						title: '复制成功',
+						icon: 'none'
+					});
+				}
+			},
+			//取消分享
+			cancel() {
+				this.shareShow = false;
+			},
+			saveImg(w) {
+				console.log(w);
+				let obj = this;
+				uni.downloadFile({
+					//下载图片
+					url: obj.shareImage,
+					success: res => {
+						console.log(res.tempFilePath);
+						uni.saveImageToPhotosAlbum({
+							//将图片保存在手机
+							filePath: res.tempFilePath, //保存的位置
+							success: res => {
+								uni.showToast({
+									title: '保存成功',
+									icon: 'none'
+								});
+							}
+						});
+					}
+				});
+			},
+			// 富文本视频解析
+			getVideo(data) {
+				let videoList = [];
+				let videoReg = /<video.*?(?:>|\/>)/gi; //匹配到字符串中的 video 标签
+				let srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i; //匹配到字符串中的 video 标签 的路径
+				let arr = data.match(videoReg) || []; // arr 为包含所有video标签的数组
+				let articleList = data.split('</video>'); // 把字符串  从视频标签分成数组
+				arr.forEach((item, index) => {
+					var src = item.match(srcReg);
+					videoList.push(src[1]); //所要显示的字符串中 所有的video 标签 的路径
+				});
+				let needArticleList = [];
+				articleList.forEach((item, index) => {
+					if (item != '' && item != undefined) {
+						//  常见的标签渲染
+						needArticleList.push({
+							type: 'rich-text',
+							value: item + '</video>'
+						});
+					}
+					let articleListLength = articleList.length; // 插入到原有video 标签位置
+					if (index < articleListLength && videoList[index] != undefined) {
+						needArticleList.push({
+							type: 'video',
+							value: videoList[index]
+						});
+					}
+				});
+				return needArticleList;
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page,
+	.content {
+		min-height: 100%;
+		height: auto;
+	}
+
+	.top {
+		width: 750rpx;
+
+		image {
+			width: 100%;
+		}
+	}
+
+	.title {
+		margin-top: 20rpx;
+		text-align: center;
+		font-size: 32rpx;
+		font-family: PingFang SC;
+		font-weight: 800;
+		color: #303030;
+	}
+
+	.tip {
+		margin-top: 20rpx;
+		padding: 0 10rpx;
+		font-size: 24rpx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #969696;
+	}
+
+	.main {
+		margin-top: 60rpx;
+		padding: 10rpx;
+	}
+
+	/deep/ .main {
+		.rich-img {
+			width: 100% !important;
+			height: auto;
+		}
+	}
+
+	.navbar {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		width: 750rpx;
+		padding: 50rpx 0;
+
+		.xian {
+			width: 2px;
+			background: #999999;
+			height: 36rpx;
+		}
+
+		.navbar-item {
+			width: 50%;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+
+			.navbar-icon {
+				width: 36rpx;
+				height: 36rpx;
+
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+
+			.navbar-font {
+				margin-left: 17rpx;
+				font-size: 22rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+			}
+		}
+	}
+
+	.Shraremask {
+		position: fixed;
+		left: 0;
+		top: 0;
+		right: 0;
+		bottom: 0;
+		display: flex;
+		justify-content: center;
+		align-items: flex-end;
+		z-index: 998;
+		transition: 0.3s;
+		background-color: rgba(51, 51, 51, 0.6);
+
+		.bottomButtom {
+			position: absolute;
+			left: 0;
+			bottom: 0;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			width: 100%;
+			height: 90rpx;
+			background: #fff;
+			z-index: 9;
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+		}
+	}
+
+	.mask-content {
+		margin-bottom: 88rpx;
+		width: 100%;
+		height: 380rpx;
+		transition: 0.3s;
+		background: #fff;
+
+		&.has-bottom {
+			padding-bottom: 90rpx;
+		}
+
+		.view-content {
+			height: 100%;
+		}
+	}
+
+	.share-header {
+		height: 110rpx;
+		font-size: $font-base + 2rpx;
+		color: font-color-dark;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		padding-top: 10rpx;
+
+		&:before,
+		&:after {
+			content: '';
+			width: 240rpx;
+			height: 0;
+			border-top: 1px solid $border-color-base;
+			transform: scaleY(0.5);
+			margin-right: 30rpx;
+		}
+
+		&:after {
+			margin-left: 30rpx;
+			margin-right: 0;
+		}
+	}
+
+	.share-list {
+		display: flex;
+		width: 80%;
+		margin: 0rpx auto;
+	}
+
+	.share-item {
+		min-width: 33.33%;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 180rpx;
+		width: 100%;
+
+		.wechat-box {
+			width: 50%;
+			height: 100%;
+			background: #ffffff;
+			border: 0;
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+
+			&::after {
+				border: 0;
+			}
+
+			.itemImage {
+				width: 80rpx;
+				height: 80rpx;
+				margin-bottom: 16rpx;
+			}
+
+			.itemText {
+				font-size: $font-base;
+				color: $font-color-base;
+				line-height: 2;
+			}
+		}
+	}
+
+	.share-box {
+		width: 600rpx;
+		height: 1000rpx;
+		background: red;
+
+		.box-img {
+			width: 600rpx;
+			height: 1000rpx;
+		}
+	}
+</style>

+ 291 - 0
pages/share/wzshare.vue

@@ -0,0 +1,291 @@
+<template>
+	<view class="content">
+		<view class="box">
+			<view class="title flex">
+				<view class="title-font">分享文案</view>
+				<view class="title-btn" @click="comfirm()">复制文案</view>
+			</view>
+			<view class="box-info">
+				<view class="info-title">{{ info.title }}</view>
+				<view class="info-tip">{{ info.synopsis }}</view>
+				<view class="info-url">{{ url }}</view>
+			</view>
+			<view class="title flex" style="margin-top: 20rpx;">
+				<view class="title-font">
+					分享素材
+					<text>(已选{{ nowlen }}/{{ alllen }})</text>
+				</view>
+			</view>
+			<view class="image-box">
+				<view class="image-item" v-for="(item, index) in imageBox" @click="change(item)">
+					<image :src="item.url" mode=""></image>
+					<view class="isxuan" v-if="item.isxuan"></view>
+				</view>
+			</view>
+		</view>
+		<view class="btn" @click="onDown()">下载</view>
+	</view>
+</template>
+
+<script>
+import { details } from '@/api/user.js';
+import sunuiGrand from '@/components/sunui-grand/sunui-grand.vue';
+import { reply_detail, short_link } from '@/api/activity.js';
+import uniCopy from '@/js_sdk/xb-copy/uni-copy.js';
+export default {
+	data() {
+		return {
+			info: {},
+			url: '',
+			imageBox: [],
+			alllen: '',
+			nowlen: ''
+		};
+	},
+	components: {
+		sunuiGrand
+	},
+	onLoad(opt) {
+		this.id = opt.id;
+	},
+	onShow() {
+		this.imageBox = [];
+		this.loadData();
+	},
+	onReachBottom() {},
+	onReady() {},
+	methods: {
+		loadData() {
+			const obj = this;
+			details({}, this.id).then(({ data }) => {
+				data.share_images.forEach(e => {
+					let u = {
+						isxuan: true,
+						url: e
+					};
+					obj.imageBox.push(u);
+				});
+				this.alllen = obj.imageBox.length;
+				this.nowlen = obj.imageBox.length;
+				this.info = data;
+			});
+			short_link({ url: 'pages/zc/wzDetail?id=' + this.id }).then(({ data }) => {
+				this.url = data.link;
+			});
+		},
+		change(opt) {
+			if (opt.isxuan) {
+				opt.isxuan = false;
+				this.nowlen -= 1;
+			} else {
+				opt.isxuan = true;
+				this.nowlen += 1;
+			}
+		},
+		comfirm() {
+			let text = this.info.synopsis + this.url;
+			const result = uniCopy(text);
+			if (result === false) {
+				uni.showToast({
+					title: '不支持'
+				});
+			} else {
+				uni.showToast({
+					title: '复制成功',
+					icon: 'none'
+				});
+			}
+		},
+		onDown() {
+			let that = this;
+			let index = 0;
+			let list = [];
+			that.imageBox.forEach(e => {
+				if (e.isxuan) {
+					list.push(e.url);
+				}
+			});
+			// console.log('触发下载图片');
+			// 第一步,先调用授权功能
+			uni.authorize({
+				scope: 'scope.writePhotosAlbum',
+				success() {
+					// 1 授权成功遍历所有要下载的图片
+					if (list && list.length > 0) {
+						// console.log(that.pathList, '============查看有没有图片数据=============>');
+						let i = 1;
+						list.forEach(item => {
+							uni.showLoading({
+								title: '下载第' + i + '图片中,共' + list.length + '张'
+							});
+							// 1.1 调用下载api方法
+							uni.downloadFile({
+								url: item, // 获取要下载的服务器里的图片地址
+								success: res => {
+									// 1.2 获取远程图片地址后,将图片地址缓存到本地
+									if (res.statusCode === 200) {
+										// console.log(res, '============下载后的图片地址=============>');
+										uni.saveImageToPhotosAlbum({
+											filePath: res.tempFilePath, // 把远程的图片地址及图片保存到本地
+											success: function(res) {
+												// 1.3保存成功后弹框提示保存成功
+												i += 1;
+												uni.showToast({
+													title: '保存成功',
+													icon: 'none'
+												});
+											},
+											fail: function(res) {
+												// console.log(res, '============fail=============>');
+												// 1.4保存失败给用户弹框提示
+												uni.showToast({
+													title: '保存失败',
+													icon: 'none'
+												});
+												if (res.errMsg == 'saveImageToPhotosAlbum:fail cancel') {
+													return;
+												}
+											}
+										});
+									}
+								}
+							});
+						});
+					} else {
+						uni.showToast({
+							title: '暂无数据',
+							icon: 'none'
+						});
+					}
+				},
+				fail() {
+					// 2、授权失败 弹框再次要求授权
+					uni.showModal({
+						title: '您需要授权相册权限',
+						success(res) {
+							// 2.1点击确认按钮就调取授权设置页面
+							if (res.confirm) {
+								// 2.2 开启授权设置页面
+								uni.openSetting({
+									success(res) {},
+									fail(res) {}
+								});
+							}
+						}
+					});
+				}
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page,
+.content {
+	min-height: 100%;
+	height: auto;
+	background: #f8f8f8;
+}
+.box {
+	width: 730rpx;
+	margin: 20rpx auto 0;
+	border-radius: 20rpx;
+	background: #ffffff;
+	padding: 20rpx;
+	.title {
+		.title-font {
+			font-size: 32rpx;
+			font-family: PingFang SC;
+			font-weight: 800;
+			color: #303030;
+			text {
+				display: inline-block;
+				margin-left: 10rpx;
+				color: #999999;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+			}
+		}
+		.title-btn {
+			width: 150rpx;
+			height: 50rpx;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			border: 1px solid #e66f6f;
+			border-radius: 30rpx;
+			color: #e66f6f;
+		}
+	}
+	.box-info {
+		background: #f6f6f6;
+		width: 700rpx;
+		padding: 20rpx;
+		margin: 20rpx auto 0;
+		.info-title {
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 800;
+			color: #303030;
+		}
+		.info-tip {
+			font-size: 26rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #303030;
+		}
+		.info-url {
+			margin-top: 20rpx;
+			font-size: 26rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #666666;
+		}
+	}
+	.image-box {
+		margin-top: 20rpx;
+		display: flex;
+		align-items: center;
+		flex-wrap: wrap;
+		.image-item {
+			margin: 10rpx;
+			position: relative;
+			width: 32%;
+			height: 300rpx;
+			.isxuan {
+				position: absolute;
+				top: 20rpx;
+				right: 20rpx;
+				width: 30rpx;
+				height: 30rpx;
+				border-radius: 50%;
+				background: #e04b4b;
+			}
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+}
+.btn {
+	margin: 0 auto;
+	position: fixed;
+	bottom: 20rpx;
+	left: 0;
+	right: 0;
+	width: 710rpx;
+	height: 80rpx;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	background: #e04b4b;
+	color: #ffffff;
+	font-size: 26rpx;
+	font-family: PingFang SC;
+	font-weight: 500;
+	border-radius: 50rpx;
+}
+</style>

binární
static/icon/fire.png


binární
static/icon/icon.png


binární
static/icon/pyq.png


binární
static/icon/share1.png


binární
static/icon/share2.png


binární
static/icon/share3.png


binární
static/icon/share4.png


binární
static/icon/sharejt.png


binární
static/icon/wxhy.png


binární
static/icon/zan.png


binární
static/icon/zanguo.png


+ 1 - 1
utils/tabbar.js

@@ -5,7 +5,7 @@ export const tabbar1 = [{
 		text: "首页"
 	},
 	{
-		pagePath: "/pages/hall/halllist",
+		pagePath: "/pages/share/share",
 		iconPath: require("@/static/tabBar/tab-cate.png"),
 		selectedIconPath: require("@/static/tabBar/tab-cate-current.png"),
 		text: "素材"