From 802290838fd05c7236dae780900b4bacb20c82df Mon Sep 17 00:00:00 2001
From: xuxueyang <xuxy@fengyuntec.com>
Date: 星期五, 02 八月 2024 16:27:26 +0800
Subject: [PATCH] add 二维码格式

---
 sub_pages/partner/partner-info/partner-code-v2.vue |  754 ++++++---------------------------------------------------
 1 files changed, 89 insertions(+), 665 deletions(-)

diff --git a/sub_pages/partner/partner-info/partner-code-v2.vue b/sub_pages/partner/partner-info/partner-code-v2.vue
index 9746ae6..c6d015e 100644
--- a/sub_pages/partner/partner-info/partner-code-v2.vue
+++ b/sub_pages/partner/partner-info/partner-code-v2.vue
@@ -1,688 +1,112 @@
 <template>
-	<view class="product-detail-page">
-		<scroll-view enable-back-to-top scroll-y="true" class="product-detail-page__scroll">
-			<view class="product-detail-page__scroll__swiper" v-if="info.ImageUrlList&&info.ImageUrlList.length>0">
-				<swiper @change="onSwiperChange" :current="currentIndex" class="product-detail-page__scroll__swiper__target">
-					<swiper-item class="product-detail-page__scroll__swiper__target__item" v-for="(item,index) in info.ImageUrlList"
-					 :key="index">
-						<image mode="aspectFit" :src="item" class="product-detail-page__scroll__swiper__target__item__img" lazy-load></image>
-					</swiper-item>
-				</swiper>
-				<view class="product-detail-page__scroll__swiper__page">{{currentIndex+1}}/{{info.ImageUrlList.length}}</view>
-				<button v-if="info.Id" @click="shareDetail" class="evan-share">
-					<image src="/static/images/common/share_icon.png" class="evan-share__icon"></image>
-					<view class="evan-share__text">分享</view>
-				</button>
-			</view>
-			<image v-else mode="aspectFill" class="product-detail-page__scroll__default-image" src="/static/images/common/default_image_horizontal.png"></image>
-			<view class="product-detail-page__scroll__info">
-				<view class="product-detail-page__scroll__info__title">{{info.Name||''}}</view>
-				<view class="product-detail-page__scroll__info__desc">{{info.Introduction||''}}</view>
-				<!-- <view class="product-detail-page__scroll__info__bulter">管家提成比例:</view> -->
-				<view class="product-detail-page__scroll__info__tags">
-					<view class="product-detail-page__scroll__info__tags__item" v-for="(item,index) in tags" :key="index">
-						<image class="product-detail-page__scroll__info__tags__item__icon" :src="item.icon"></image>
-						<view class="product-detail-page__scroll__info__tags__item__text">{{item.text}}</view>
-					</view>
-					<view v-if="!isGroup" class="product-detail-page__scroll__info__tags__count">已售{{info.SaleCount||0}}</view>
-				</view>
-			</view>
-			<view class="product-detail-page__scroll__team" v-if="isGroup">
-				<view class="product-detail-page__scroll__team__title">批购进度及商品价格区间</view>
-				<view class="product-detail-page__scroll__team__main">
-					<view v-if="!info.GroupRules||info.GroupRules.length===0" class="product-detail-page__scroll__team__main__progress"></view>
-					<view v-else class="product-detail-page__scroll__team__main__progress">
-						<view class="product-detail-page__scroll__team__main__progress__active" :style="{width:getPercent()+'rpx'}"></view>
-					</view>
-			<!-- 		<template v-if="info.GroupRules&&info.GroupRules.length>0">
-						<view v-for="(item,index) in info.GroupRules" :key="index" class="product-detail-page__scroll__team__main__price"
-						 :style="{top:'80rpx',left:`${630 * 0.8 / lastInfo.GroupCountStart * item.GroupCountStart}rpx`}">
-							<view class="product-detail-page__scroll__team__main__price__line"></view>
-							<view class="product-detail-page__scroll__team__main__price__target">{{item.GroupCountStart}}件</view>
-							<view class="product-detail-page__scroll__team__main__price__target">{{item.Amount}}元</view>
-						</view>
-					</template> -->
-					<view v-if="!$utils.isTrueEmpty(info.GroupCount)" class="product-detail-page__scroll__team__main__price" :style="{bottom:'80rpx',left:getLeftValue()+'rpx'}">
-						<view class="product-detail-page__scroll__team__main__price__current">已批{{info.GroupCount}}件</view>
-						<view class="product-detail-page__scroll__team__main__price__line current"></view>
-					</view>
-				</view>
-			</view>
-			<view class="product-detail-page__scroll__team-intro" v-if="isGroup">
-				<view class="product-detail-page__scroll__team-intro__target">批购说明:参与购买的人数越多,商品价格越实惠</view>
-				<view class="product-detail-page__scroll__team-intro__target">根据批购最终参与购买的人数,来确定你需要支付的最终价格</view>
-			</view>
-			<view class="product-detail-page__scroll__desc">
-				<view class="product-detail-page__scroll__desc__title">商品详情</view>
-				<u-parse :content="info.ProductDesc" />
-			</view>
-		</scroll-view>
-		<view class="evan-buy-bottom">
-			<view class="evan-buy-bottom__item evan-buy-bottom__item--left">
-				<view class="evan-buy-bottom__item__price">
-					<view v-if="isGroup||info.PayType===1" class="evan-buy-bottom__item__price__unit">¥</view>
-					<!-- <view class="evan-buy-bottom__item__price__current">{{showPrice}}</view> -->
-					<view v-if="!isGroup&&info.PayType===1&&info.MarketPrice" class="evan-buy-bottom__item__price__old">¥{{info.MarketPrice}}</view>
-				</view>
-				<view v-if="info.GiveAwayHuidouCount" class="evan-buy-bottom__item__tip">赠送{{info.GiveAwayHuidouCount}}汇豆</view>
-			</view>
-			<view @tap="buy" class="evan-buy-bottom__item evan-buy-bottom__item--right">立即购买</view>
+	<view>
+		<view class="button p-t-12 bg-white">
+			<button :disabled="canvasImages == '' ? true : false" type="primary" @click="downloadImg">下载二维码</button>
+			<button :disabled="canvasImages != '' ? false : true" @click="previewHandle">预览二维码</button>
+			<!-- #ifdef MP-WEIXIN -->
+			<!-- <button type="warn" :disabled="canvasImages != '' ? false : true" open-type="share">分享给朋友</button> -->
+			<!-- #endif -->
 		</view>
-		<hjg-spec @confirm="onSpecConfirm" :changeCount="!isNewUserProduct" :specs="info.SpecInfos" ref="spec"></hjg-spec>
-		<view @tap="hideBarcode" class="evan-poster__mask" :class="{hide:!showBarcode}" :style="{paddingTop:posterPadding}">
-			<canvas class="evan-poster__mask__canvas" :style="{width:canvasWidth+'px',height:canvasHeight+'px'}" canvas-id="barcode"></canvas>
-			<view @tap.stop.prevent="stopPop" class="evan-poster__mask__bottom">
-				<button open-type="share" class="evan-poster__mask__bottom__item">
-					<view class="evan-poster__mask__bottom__item__text">分享好友</view>
-				</button>
-				<button @tap="saveToAlbum" class="evan-poster__mask__bottom__item">
-					<view class="evan-poster__mask__bottom__item__text">保存海报</view>
-				</button>
-			</view>
-		</view>
+		<shareImages ref="canvas" :canvasWidth="canvasWidth" :canvasHeight="canvasHeight" :shareTitle="shareTitle"
+			:goodsTitle="goodsTitle" :shareImage="shareImage" :goodsTitle2="goodsTitle2" :qrSize="qrSize" :qrUrl="qrUrl"
+			@success="shareSuccess" :canvasID="canvasID">
+		</shareImages>
 	</view>
 </template>
 
 <script>
-
-	import {
-		mapGetters,
-		mapState
-	} from 'vuex'
-	let ENV = 'prod'
+	import shareImages from '@/components/hj-placard/shareImages.vue'
 	export default {
 		components: {
-
-		},
-		computed: {
-
-			
+			shareImages
 		},
 		data() {
 			return {
-				memberId: '',
-				headUrl: '',
-				nickName: '',
-				id: null,
-				info: {},
-				currentIndex: 0,
-				tags: [{
-						icon: '/static/images/home/qqzx.png',
-						text: '全球精品'
-					},
-					{
-						icon: '/static/images/home/jyps.png',
-						text: '正品保证'
-					},
-					{
-						icon: '/static/images/home/shwy.png',
-						text: '商品包邮'
-					}
-				],
-				isGroup: false,
-				groupId: null,
-				canvasWidth: 242,
-				canvasHeight: 430,
-				showBarcode: false,
-				ratio: 430 / 1920,
-				posterPadding: 0,
-				filePath: '',
-				isNewUserProduct: false,
-				canBuy: false
+				name: '',
+				canvasID: "myQrcode",
+				canvasImages: '',
+				canvasWidth: 375, // 宽度
+				canvasHeight: 650, // 高度
+				shareTitle: '我是这张图片的标题', // 分享标题
+				goodsTitle: '\n', // 商品宣传标题
+				goodsTitle2: '',
+				shareImage: 'https://hmy-flower.oss-cn-shanghai.aliyuncs.com/d4/d43cdefc7b8f4c3e91fb451a236a4435WechatIMG2882.jpg', // 背景图片
+				qrSize: 100, // 二维码大小
+				qrUrl: 'http://www.hmyxianhua.com/wx/jump?partnerUserId=1&partnerUserName=', // 生成二维码的链接
 			}
+		},
+		onLoad() {
+			if (!this.currentInfo.partnerDTO) {
+				this.$message.showToast('请先完善合伙人信息')
+				return
+			}
+			this.name = this.currentInfo.partnerDTO.name || '佚名'
+			this.qrUrl =
+				`http://www.hmyxianhua.com/wx/jump?partnerUserId=${this.currentInfo.id||'-'}&partnerUserName=${this.name||'-'}`
+			this.goodsTitle = `${this.name||'-'}的推广二维码`
+			this.goodsTitle2 = `扫码注册绑定合伙人`
+			this.$message.showLoading()
+			setTimeout(() => {
+				this.createsShareImage()
+			}, 500)
+			setTimeout(() => {
+				this.$message.hideLoading()
+			}, 2000)
 		},
 		methods: {
-			async getDetail() {
-				// const {
-				// 	code,
-				// 	data
-				// } = await productService.getDetail(this.id)
-				// if (code === 0) {
-				// 	this.info = data
-				// 	this.isNewUserProduct = data.IsNewUserTopic === 1
+			// 生成分享图片
+			createsShareImage() {
+				// console.log(this.$refs.canvas)
+				this.$refs.canvas.canvasCreate();
+			},
+			// 预览图片
+			previewHandle() {
+				uni.previewImage({
+					urls: [this.canvasImages],
+				});
+			},
+			// 回调图片地址
+			shareSuccess(e) {
+				// console.log('地址',e)
+				this.canvasImages = e
+			},
+			downloadImg() {
+				// this.$refs.canvas.downloadImg();
+				uni.saveImageToPhotosAlbum({
+					filePath: this.canvasImages,
+					success: function() {
+						console.log('save success');
+						uni.showToast({
+							title: '保存成功'
+						})
+					},
+					fail(res) {
+						console.error(res)
+						uni.showToast({
+							title: '保存失败。',
+							icon: 'error'
+						})
+					}
+				})
+
+
+			},
+			// 分享
+			onShareAppMessage(res) {
+				// if (res.from === 'button') {
+				// 	console.log(res.target)
 				// }
-			},
-			async getGroupDetail() {
-				const {
-					code,
-					data
-				} = await assembleService.getAssembleDetail(this.id, this.groupId)
-				if (code === 0) {
-					this.info = data
+				return {
+					title: `${this.name||'-'}的推广二维码`,
+					path: this.canvasImages
 				}
-			},
-			onSwiperChange(e) {
-				this.currentIndex = e.detail.current
-			},
-			async buy() {
-				
-			},
-			onSpecConfirm(e) {
-				let specList = []
-				if (Array.isArray(e.specs)) {
-					specList = e.specs.map((item) => {
-						return {
-							SpecName: item.SpecName,
-							SpecValue: item.SpecValue
-						}
-					})
-				}
-				let orderInfo = {
-					ProductId: this.info.Id,
-					ProductSpecList: specList,
-					ProductCount: e.count,
-					ProductSaleType: this.isGroup ? 2 : 1,
-					ProductPayType: this.isGroup ? 1 : this.info.PayType
-				}
-				if (this.isGroup) {
-					orderInfo.GroupId = this.groupId
-					orderInfo.BookAmount = this.info.BookAmount
-				} else {
-					if (orderInfo.ProductPayType === 1) {
-						orderInfo.SaleAmount = this.info.SalePrice
-					} else {
-						orderInfo.SaleAmount = this.info.HuidouCount
-					}
-				}
-				uni.navigateTo({
-					url: `./order?orderInfo=${JSON.stringify(orderInfo)}`
-				})
-			},
-			getPercent() {
-				if (!this.info.GroupRules || this.info.GroupRules.length === 0) {
-					return 0
-				}
-				if (this.info.GroupCount > this.info.GroupRules[this.info.GroupRules.length - 1].GroupCountStart) {
-					return 0.85 * 630
-				} else {
-					return this.info.GroupCount / this.info.GroupRules[this.info.GroupRules.length - 1].GroupCountStart *
-						0.8 * 630
-				}
-			},
-			getLeftValue() {
-				if (!this.info.GroupRules || this.info.GroupRules.length === 0) {
-					if (this.info.GroupCount === 0) {
-						return 0
-					} else {
-						return 630 * 0.8
-					}
-				} else {
-					if (this.info.GroupCount > this.info.GroupRules[this.info.GroupRules.length - 1].GroupCountStart) {
-						return 630 * 0.85
-					} else {
-						return 630 * 0.8 / Math.max(this.info.GroupRules[this.info.GroupRules.length - 1].GroupCountStart /
-							this.info.GroupCount, 1)
-					}
-				}
-			},
-			formatCanvasSize(size) {
-				return Math.floor(this.ratio * size)
-			},
-			async shareDetail() {
-				if (this.memberId) {
-					// #ifdef MP-WEIXIN
-					let params = `id=${this.info.Id}`
-					if (this.isGroup) {
-						params += `&groupId=${this.groupId}`
-					}
-					if (this.memberId) {
-						params += `&inviteId=${this.memberId}`
-					}
-					const {
-						code: sceneCode,
-						data: sceneData
-					} = await commonService.saveScene(encodeURIComponent(params))
-					if (sceneCode === 0) {
-						const {
-							code,
-							data
-						} = await commonService.getUnlimitedBarcode('pages/home/product/detail', `posterId=${sceneData}`)
-						if (code === 0) {
-							const fsm = wx.getFileSystemManager()
-							this.filePath = `${wx.env.USER_DATA_PATH}/barcode_tmp_${(new Date).getTime()}.png`
-							fsm.writeFile({
-								filePath: this.filePath,
-								data: data,
-								encoding: 'binary',
-								success: async () => {
-									const context = uni.createCanvasContext('barcode')
-									const headSize = this.formatCanvasSize(105)
-									const productSize = this.formatCanvasSize(540)
-									const canvasWidth = this.canvasWidth
-									const canvasHeight = this.canvasHeight
-									const headPath = await this.getImageInfo(this.headUrl)
-									const productPath = await this.getImageInfo(this.info.ImageUrlList[0])
-									// 背景
-									context.drawImage('/pages/home/static/images/sharebg.jpg', 0, 0, canvasWidth,
-										canvasHeight)
-									// 头像
-									context.drawImage(headPath, this.formatCanvasSize(80), this.formatCanvasSize(70), headSize, headSize)
-									// 昵称
-									context.font = `bold ${this.formatCanvasSize(40)}px system-ui`
-									context.setFillStyle('#000')
-									this.fillTextByLength(context, this.nickName, 20, this.formatCanvasSize(198),
-										this.formatCanvasSize(110))
-									// 产品图
-									context.drawImage(productPath, this.formatCanvasSize(260), this.formatCanvasSize(440), productSize,
-										productSize)
-									// 价格
-									const priceWidth = this.formatCanvasSize(150)
-									const priceTop = this.formatCanvasSize(1240)
-									const priceLeft = this.formatCanvasSize(141)
-									// 当前价格
-									if (this.showPrice) {
-										const price = (this.isGroup || this.info.PayType === 1) ? `¥${this.showPrice}` : this.showPrice
-										context.font = `bold ${this.formatCanvasSize(84)}px system-ui`
-										context.setFillStyle('#d92c21')
-										context.fillText(price, priceLeft, priceTop, priceWidth)
-									}
-									// 市场价格
-									if (!this.isGroup && this.info.PayType === 1 && this.info.MarketPrice) {
-										context.font = `normal ${this.formatCanvasSize(54)}px system-ui`
-										context.setFillStyle('#61605e')
-										context.fillText(`¥${this.info.MarketPrice}`, priceLeft + priceWidth + 5, priceTop, priceWidth)
-										context.moveTo(priceLeft + priceWidth + 5, priceTop - this.formatCanvasSize(20))
-										context.lineTo(priceLeft + priceWidth + 5 + context.measureText(`¥${this.info.MarketPrice}`).width + 2,
-											priceTop - this.formatCanvasSize(20))
-										context.setStrokeStyle('#61605e')
-										context.stroke()
-									}
-									// 赠送汇豆
-									if (this.info.GiveAwayHuidouCount) {
-										context.font = `normal ${this.formatCanvasSize(36)}px system-ui`
-										context.setFillStyle('#61605e')
-										context.fillText(`赠送${this.info.GiveAwayHuidouCount}汇豆`, priceLeft, priceTop + this.formatCanvasSize(36) +
-											5,
-											priceWidth * 2)
-									}
-									// 商品名称
-									let nameLeft = priceLeft + 2 * priceWidth + 10
-									let nameTop = this.formatCanvasSize(1230)
-									context.font = `bold ${this.formatCanvasSize(50)}px system-ui`
-									context.setFillStyle('#000')
-									let nameWidth = 0
-									// 换行次数
-									let breakLineCount = 0
-									for (let i = 0; i < this.info.Name.length; i++) {
-										const str = this.info.Name[i]
-										nameWidth += context.measureText(str).width
-										if (nameWidth > 80 && breakLineCount > 0) {
-											context.fillText('...', nameLeft, nameTop)
-											break
-										}
-										if (nameWidth > 90) {
-											nameTop += this.formatCanvasSize(74)
-											nameLeft = priceLeft + 2 * priceWidth + 10
-											nameWidth = context.measureText(str).width
-											breakLineCount++
-										}
-										context.fillText(str, nameLeft, nameTop)
-										nameLeft += context.measureText(str).width + 2
-									}
-									// 二维码
-									const barcodeSize = this.formatCanvasSize(250)
-									const barcodeLeft = this.formatCanvasSize(740)
-									const barcodeTop = this.formatCanvasSize(1500)
-									context.drawImage(this.filePath, barcodeLeft, barcodeTop,
-										barcodeSize,
-										barcodeSize)
-									this.showBarcode = true
-									this.$nextTick(() => {
-										context.draw(false, () => {})
-									})
-								},
-								fail: (err) => {
-									this.$message.showToast('写入文件失败')
-								}
-							})
-						}
-					}
-					// #endif
-				} else {
-					this.$message.confirm('登录后才能分享,是否立即登录?').then(() => {
-						uni.navigateTo({
-							url: '/pages/account/login'
-						})
-					}).catch(() => {})
-				}
-			},
-			fillTextSingleLine(context, text, maxLength, startLeft, startTop) {
-				let nameWidth = 0
-				for (let i = 0; i < text.length; i++) {
-					const str = text[i]
-					nameWidth += context.measureText(str).width
-					if (nameWidth > maxLength - 10) {
-						context.fillText('...', startLeft, startTop)
-						break
-					} else {
-						context.fillText(str, startLeft, startTop)
-						startLeft += context.measureText(str).width + 2
-					}
-				}
-			},
-			fillTextByLength(context, text, len, startLeft, startTop) {
-				if (text.length > len - 3) {
-					text = text.substr(0, len - 3) + '...'
-				}
-				context.fillText(text, startLeft, startTop)
-			},
-			getImageInfo(url) {
-				if (ENV === 'prod') {
-					url = url.replace(/http:\/\//g, 'https://')
-				}
-				return new Promise((resolve, reject) => {
-					uni.getImageInfo({
-						src: url,
-						success: (res) => {
-							resolve(res.path)
-						},
-						fail: (e) => {
-							reject(e)
-						}
-					})
-				})
-			},
-			saveToAlbum() {
-				uni.canvasToTempFilePath({
-					x: 0,
-					y: 0,
-					width: this.canvasWidth,
-					height: this.canvasHeight,
-					canvasId: 'barcode',
-					success: (res) => {
-						uni.saveImageToPhotosAlbum({
-							filePath: res.tempFilePath,
-							success: () => {
-								this.$message.showToast('已为您保存至相册')
-							}
-						})
-					}
-				})
-			},
-			hideBarcode() {
-				this.showBarcode = false
-				if (this.filePath) {
-					const fsm = wx.getFileSystemManager()
-					fsm.unlink({
-						filePath: this.filePath,
-						success: () => {
-							this.filePath = ''
-						}
-					})
-				}
-			},
-			stopPop() {
-				// do nothing
-			},
-			async getScene(id) {
-				const {
-					code,
-					data
-				} = await commonService.getScene(id)
-				if (code === 0) {
-					const productId = this.$utils.getBarcodeQueryString(data, 'id')
-					const inviteId = this.$utils.getBarcodeQueryString(data, 'inviteId')
-					const groupId = this.$utils.getBarcodeQueryString(data, 'groupId')
-					if (productId) {
-						this.id = productId
-						if (inviteId) {
-							this.$store.commit('account/SET_INVITEID', inviteId)
-						}
-						if (groupId) {
-							this.isGroup = true
-							this.groupId = groupId
-							this.getGroupDetail()
-						} else {
-							this.getDetail()
-						}
-					}
-				}
-			},
-			setPosterPadding() {
-				const windowHeight = uni.getSystemInfoSync().windowHeight
-				this.posterPadding = (windowHeight - 126 - this.canvasHeight) / 2 + 'px'
-			}
-		},
-		async onLoad(options) {
-			this.setPosterPadding()
-			this.id = options.id || ''
-		},
-		onUnload() {
-		},
-		onShareAppMessage() {
-			let params = `id=${this.info.Id}`
-			if (this.isGroup) {
-				params += `&groupId=${this.groupId}`
-			}
-			if (this.memberId) {
-				params += `&inviteId=${this.memberId}`
-			}
-			let path = `/pages/home/product/detail?${params}`
-			return {
-				title: this.info.Name,
-				path: path
 			}
 		}
 	}
 </script>
 
-<style lang="scss">
-	.product-detail-page {
-		height: 100%;
+<style scoped>
+	.button {
 		display: flex;
-		flex-direction: column;
-
-		&__scroll {
-			flex: 1;
-			overflow: auto;
-
-			&__swiper {
-				position: relative;
-				width: 100%;
-				height: 446rpx;
-				background-color: #fff;
-
-				&__target {
-					height: 100%;
-
-					&__item {
-						display: flex;
-						align-items: center;
-						justify-content: center;
-
-						&__img {
-							width: 400rpx;
-							height: 400rpx;
-						}
-					}
-				}
-
-				&__page {
-					position: absolute;
-					bottom: 14rpx;
-					right: 40rpx;
-					height: 40rpx;
-					border-radius: 20rpx;
-					background-color: rgba(0, 0, 0, 0.6);
-					padding: 0 14rpx;
-					font-size: 28rpx;
-					color: #fff;
-				}
-			}
-
-			&__default-image {
-				width: 100%;
-				height: 446rpx;
-			}
-
-			&__info {
-				background-color: #fff;
-				padding: 18rpx 30rpx 28rpx 30rpx;
-
-				&__title {
-					font-size: 32rpx;
-					color: #000;
-					font-weight: 500;
-					line-height: 44rpx;
-					margin-bottom: 14rpx;
-				}
-
-				&__desc {
-					font-size: 28rpx;
-					color: #666;
-					line-height: 40rpx;
-					margin-bottom: 10rpx;
-				}
-
-				&__bulter {
-					font-size: 28rpx;
-					color: #000;
-					line-height: 40rpx;
-				}
-
-				&__tags {
-					display: flex;
-					align-items: center;
-					margin-top: 10rpx;
-
-					&__item {
-						display: flex;
-						align-items: center;
-						margin-right: 44rpx;
-
-						&__icon {
-							width: 28rpx;
-							height: 28rpx;
-							margin-right: 4rpx;
-						}
-
-						&__text {
-							font-size: 24rpx;
-							color: #000;
-						}
-					}
-
-					&__count {
-						flex: 1;
-						text-align: right;
-						font-size: 24rpx;
-						color: #666;
-					}
-				}
-			}
-
-			&__desc {
-				padding: 30rpx;
-				background-color: #fff;
-				margin-top: 24rpx;
-
-				&__title {
-					font-size: 36rpx;
-					color: #000;
-					font-weight: 500;
-					line-height: 50rpx;
-					margin-bottom: 26rpx;
-				}
-			}
-
-			&__team {
-				background-color: #fff;
-				padding-bottom: 48rpx;
-
-				&__title {
-					font-size: 28rpx;
-					color: #000;
-					padding: 0 30rpx;
-					font-weight: bold;
-				}
-
-				&__main {
-					width: 750rpx;
-					padding: 60rpx 0;
-					position: relative;
-					display: flex;
-					justify-content: center;
-
-					&__progress {
-						width: 630rpx;
-						height: 20rpx;
-						background-color: #d8d8d8;
-						border-radius: 16rpx;
-
-						&__active {
-							height: 100%;
-							background-color: #d51d1d;
-							border-radius: 16rpx;
-						}
-					}
-
-					&__price {
-						display: flex;
-						flex-direction: column;
-						align-items: center;
-						position: absolute;
-						min-width: 120rpx;
-
-						&__line {
-							width: 2rpx;
-							height: 24rpx;
-							background-color: #979797;
-
-							&.current {
-								background-color: #d51d1d;
-							}
-						}
-
-						&__target {
-							font-size: 24rpx;
-							color: #000;
-							font-weight: bold;
-						}
-
-						&__current {
-							font-size: 20rpx;
-							color: #d51d1d;
-						}
-					}
-				}
-			}
-
-			&__team-intro {
-				padding: 8rpx 30rpx;
-				background-color: #EDE0CC;
-				margin-top: 24rpx;
-
-				&__target {
-					font-size: 24rpx;
-					color: #9C753B;
-					font-weight: bold;
-
-					&:not(:first-child) {
-						margin-top: 8rpx;
-					}
-				}
-			}
-
-			&__team-info {
-				padding: 16rpx 30rpx 0 16rpx;
-
-				&__line {
-					display: flex;
-					align-items: flex-start;
-					margin-bottom: 8rpx;
-
-					&__label {
-						font-size: 28rpx;
-						color: #000;
-					}
-
-					&__value {
-						font-size: 28rpx;
-						color: #000;
-						flex: 1;
-					}
-				}
-			}
-		}
 	}
-</style>
+</style>
\ No newline at end of file

--
Gitblit v1.9.3