From 8771da2ccf6f7c3fd2a8c89a1a0e230c6386db7f Mon Sep 17 00:00:00 2001
From: 石广澎 <shiguangpeng@163.com>
Date: 星期一, 17 十一月 2025 15:40:48 +0800
Subject: [PATCH] feat(api): 新增多个API接口并优化配置

---
 pages/pay/discountpay.vue |  616 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 616 insertions(+), 0 deletions(-)

diff --git a/pages/pay/discountpay.vue b/pages/pay/discountpay.vue
new file mode 100644
index 0000000..a531920
--- /dev/null
+++ b/pages/pay/discountpay.vue
@@ -0,0 +1,616 @@
+<!-- 鎵爜鏀粯 -->
+<template>
+	<view class="page">
+		<u-alert type="warning" closable description="瀹夊叏鎻愰啋锛氳璋ㄦ厧鏍稿鍟嗗銆佽鍗曚俊鎭紝淇濇姢鑷繁璧勯噾瀹夊叏!"></u-alert>
+		<view class="pay-box">
+			<view class="u-font-26 color-666">搴斾粯閲戦</view>
+			<view class="u-m-t-14">
+				<text class="u-font-36 color-333 u-m-r-8">楼</text>
+				<text class="money">{{money.split(".")[0]}}</text>
+				<text class="u-font-40">.{{money.split(".")[1]}}</text>
+			</view>
+		</view>
+
+		<view v-if="discountInfo.shopDiscount!=1&&money*(1-discountInfo.shopDiscount)>=0.01" class="bg-fff u-m-h-32 u-m-t-20 u-p-h-32 u-br-10">
+			<view class="u-p-v-32 u-flex u-row-between u-border-bottom u-font-30 color-333">
+				<view>{{discountInfo.memberGradeName}}涓撳睘鎶樻墸</view>
+				<view>-{{ money*(1-discountInfo.shopDiscount).toFixed(2) }}</view>
+			</view>
+		</view>
+		<view v-if="canUseIntegral||canUseCoupon" class="u-p-h-32 bg-fff u-m-h-32 u-br-10">
+			<view class="u-font-28 u-m-t-32">閫夋嫨浼樻儬鏂瑰紡</view>
+			<view v-if="canUseIntegral" class="u-p-v-24 u-border-bottom u-flex u-m-t-10">
+				<image class="item-icon" style="align-self: flex-start;position: relative;top: -3rpx;" src="/static/integral.png" mode=""></image>
+				<view class="u-flex-1 u-m-h-16">
+					<view class="u-font-30">绉垎鎶垫墸</view>
+					<view class="u-font-24 color-999 u-m-t-20">鍙敤<text style="color: #D31F28;">{{integral}}</text>绉垎
+					</view>
+				</view>
+				<input-number @handleCount="changeInt" :value="canUseInt" :min="0" :max="maxIntegral">
+				</input-number>
+			</view>
+			<view v-if="canUseCoupon" class="u-flex u-p-v-32">
+				<image class="item-icon" src="/static/coupon-icon.png" mode=""></image>
+				<view class="u-font-30 u-flex-1 u-m-h-16">浼樻儬鍒�</view>
+				<view @click="showCoupon" class="u-flex">
+					<view v-if="couponInfo.id" class="tag-pain">
+						婊{parseFloat((couponInfo.thresholdValue/100).toFixed(2))}}鍏冨噺{{parseFloat((couponInfo.discount/100).toFixed(2))}}鍏�
+					</view>
+					<text v-else class="u-font-26">璇烽�夋嫨</text>
+					<u-icon class="u-m-l-10" name="arrow-right" color="#333" size="13"></u-icon>
+				</view>
+			</view>
+		</view>
+		<view class="bg-fff u-m-h-32 u-m-t-20 u-p-h-32 u-br-10">
+			<view v-if="discount" class="u-p-v-32 u-flex u-row-between u-border-bottom u-font-30 color-333">
+				<view>瀹為檯鎶垫墸</view>
+				<view>-{{ discount }}</view>
+			</view>
+			<view class="u-p-v-32 u-flex u-row-between">
+				<view class="u-font-30 color-333">瀹炰粯閲戦</view>
+				<view class="color-red">
+					<text class="u-font-26 u-m-r-6">楼</text>
+					<text class="u-font-34">{{ price }}</text>
+				</view>
+			</view>
+		</view>
+
+		<button class="pay-it" @click="pay">纭畾鏀粯</button>
+		<!-- 浼樻儬鍒稿脊绐� -->
+		<u-popup mode="bottom" :closeable="true" :show="couponShow" @close="couponShow = false" :round="10">
+			<view class="u-font-32 color-333 u-text-center u-p-t-30">浼樻儬鍒�</view>
+			<view v-if="checkCoupon.id" class="choose-coupon">
+				宸查�夋嫨浼樻儬鍒�1寮狅紝鍏辨姷鎵o骏{{parseFloat((checkCoupon.discount/100).toFixed(2))}}</view>
+			<!-- <view class="choose-coupon">閫夋嫨浼樻儬鍒�</view> -->
+			<scroll-view scroll-y class="u-p-30 coupon-list">
+				<view @click="clickCoupon(item)" class="u-m-b-24 u-flex coupon" v-for="(item, index) in couponList" :key="index">
+					<view style="color: #D31F28;" class="u-p-h-28">
+						<view class="font-bold">
+							<text class="u-font-36">锟�</text>
+							<text class="money">{{parseFloat(item.discount/100)}}</text>
+						</view>
+						<view class="u-font-24 u-m-t-20">婊{parseFloat(item.thresholdValue/100)}}鍏冧娇鐢�</view>
+					</view>
+					<view class="butt"></view>
+					<view class="u-p-30 u-flex-1 u-flex">
+						<view class="u-flex-1">
+							<view class="u-font-28 color-333 u-line-2">{{item.name}}</view>
+							<view class="u-font-22 color-999 u-m-t-20">
+								鏈夋晥鏈熻嚦锛歿{$u.timeFormat(item.outTime, 'yyyy-mm-dd hh:MM')}}
+							</view>
+						</view>
+						<u-icon v-if="item.id==checkCoupon.id" name="checkmark-circle-fill" color="#D31F28" size="20">
+						</u-icon>
+					</view>
+
+				</view>
+			</scroll-view>
+			<view @click="getCoupon" class="coupon-btn">纭畾</view>
+		</u-popup>
+		<!-- 鏁板瓧閿洏 -->
+		<u-popup :show="bordShow" :overlay="false" @close="bordShow = false">
+			<key-bord @changeMoney="changeMoney" :num.sync="money" @close="bordShow = false" @pay="pay"></key-bord>
+		</u-popup>
+		<!-- 鏀粯楠岃瘉鐮� -->
+		<u-popup :show="codeShow" closeable mode="center" @close="codeShow = false">
+			<view class="u-p-h-40 u-p-b-40">
+				<view class="u-text-center u-p-t-20 u-m-b-30 u-font-34">璇疯緭鍏ユ墜鏈洪獙璇佺爜</view>
+				<view class="u-text-center u-m-b-20 color-666">{{ shopInfo.shop_name }}</view>
+				<view class="u-flex u-row-center font-bold u-m-b-40"><text class="u-font-42">锟�</text><text class="u-font-money">{{ price }}</text>
+				</view>
+				<u-code-input @finish="bankPay" v-model="smscode" mode="box" :focus="true"></u-code-input>
+			</view>
+
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		ACCESSTOKEN
+	} from '@/common/config.js';
+	import {
+		queryMyUseSweepPayMaxCoupon,
+		queryUseSweepPayCoupon,
+		getWechatConfigInfo,
+		saveWxOrder,
+		tlPay
+	} from '@/common/api/index'
+	import wx from 'weixin-js-sdk'; // 浣跨敤js-sdk
+	export default {
+		data() {
+			return {
+				cid: null,
+				bordShow: false, // 鏄剧ず閿洏
+				scoreWorth: 0,
+				shopInfo: {
+					shop_name: '',
+					scan_flag: '',
+					use_score_flag: 0, //鍟嗛摵鏄惁鍙敤绉垎 0鍚� 1鏄�
+					user_coupon_flag: 0, //鍟嗛摵鏄惁鍙敤浼樻儬鍒� 0鍚� 1鏄�
+					app_pay_use_score_flag: 0, //寰俊/鏀粯瀹濇槸鍚﹀彲鐢ㄧН鍒� 0鍚� 1鏄�
+					app_pay_use_coupon_flag: 0, //寰俊/鏀粯瀹濇槸鍚﹀彲鐢ㄤ紭鎯犲埜 0鍚� 1鏄�
+					bank_pay_use_score_flag: 0, //閾惰鍗℃敮浠樻槸鍚﹀彲鐢ㄧН鍒� 0鍚� 1鏄�
+					bank_pay_use_coupon_flag: 0, //閾惰鍗℃敮浠樻槸鍚﹀彲鐢ㄤ紭鎯犲埜 0鍚� 1鏄�
+				},
+				money: 0.00, // 閲戦
+				integral: 0, // 浣跨敤绉垎
+				canUseInt: 0, // 鍙敤绉垎
+				couponList: [], // 浼樻儬鍒�
+				couponShow: false, // 浼樻儬鍒稿脊绐�
+				couponInfo: {
+					id: '',
+					discount: 0,
+					thresholdValue: 0
+				}, // 浼樻儬鍒稿唴瀹�
+				payWay: 3, // 5鏀粯瀹� 2寰俊 3閾惰鍗�
+				isNew: false,
+				codeShow: false,
+				smscode: '',
+				thpinfo: null,
+				canReset: false,
+				checkCoupon: {
+					id: null,
+					discount: 0,
+					thresholdValue: 0
+				},
+				discountInfo: {
+					memberGradeName: '',
+					shopDiscount: 10
+				}
+			};
+		},
+		watch: {
+			integralDiscount(val) {
+				if (this.couponInfo.id && val < this.couponInfo.thresholdValue) {
+					this.couponInfo = {
+						id: '',
+						discount: 0,
+						thresholdValue: 0
+					}
+					this.checkCoupon = {
+						id: '',
+						discount: 0,
+						thresholdValue: 0
+					}
+				}
+			}
+		},
+		computed: {
+			canUseIntegral() {
+				if (this.payWay == 3) { //閾惰鍗�
+					return this.shopInfo.use_score_flag && this.shopInfo.bank_pay_use_score_flag
+				} else {
+					return this.shopInfo.use_score_flag && this.shopInfo.app_pay_use_score_flag
+				}
+
+			},
+			canUseCoupon() {
+				if (this.payWay == 3) { //閾惰鍗�
+					return this.shopInfo.user_coupon_flag && this.shopInfo.bank_pay_use_coupon_flag
+				} else {
+					return this.shopInfo.user_coupon_flag && this.shopInfo.app_pay_use_coupon_flag
+				}
+			},
+			maxIntegral() {
+				if (this.couponInfo.id) {
+					const num = Math.ceil((this.money * this.discountInfo.shopDiscount - this.couponInfo.thresholdValue / 100) / (
+						this.scoreWorth / 100))
+					if (num < 0) {
+						return 0
+					}
+					return num
+				} else {
+					const num = Math.ceil((this.money * this.discountInfo.shopDiscount - this.couponInfo.thresholdValue / 100) / (
+						this.scoreWorth / 100))
+					if (num < 0) {
+						return 0
+					}
+					return num
+				}
+			},
+			integralDiscount() {
+				let num = 0;
+				num = parseInt(parseFloat((this.money * this.discountInfo.shopDiscount * 100).toPrecision(12)) - this.canUseInt *
+					this.scoreWorth);
+				return num;
+			},
+			discount() {
+				let num = 0;
+				num = ((this.canUseInt * this.scoreWorth + parseFloat(this.couponInfo.discount)) / 100).toFixed(2);
+				if (parseFloat(num) > parseFloat(this.money * this.discountInfo.shopDiscount)) {
+					return this.money * this.discountInfo.shopDiscount
+				}
+				return num;
+			},
+			price() {
+				let num = 0;
+				num = parseFloat((this.money * this.discountInfo.shopDiscount * 100).toPrecision(12)) - this.canUseInt * this
+					.scoreWorth - this.couponInfo
+					.discount;
+				num = num > 0 ? (num / 100).toFixed(2) : '0.00';
+				return num;
+			}
+		},
+		onLoad(opt) {
+			this.isNew = uni.getStorageSync('IS_NEW')
+			this.cid = uni.getStorageSync('CID')
+			this.discountInfo = uni.getStorageSync('DISCOUNT_INFO') || {
+				shopDiscount: 1
+			}
+			const token = uni.getStorageSync(ACCESSTOKEN) || null
+			this.shopInfo = uni.getStorageSync('SHOP_INFO')
+			if (opt.scoreWorth) {
+				this.scoreWorth = Number(opt.scoreWorth)
+			}
+			if (opt.integral) {
+				this.integral = Number(opt.integral)
+			}
+			if (opt.money) {
+				this.money = parseFloat(opt.money).toFixed(2)
+				let ds = parseFloat(this.discountInfo.shopDiscount)
+				let dis = this.money * 100 * (1 - ds)
+				let money = parseInt((this.money * 100 * ds))
+				if (dis < 1) {
+					money = parseInt((this.money * 100))
+				}
+				queryMyUseSweepPayMaxCoupon({
+					params: {
+						shopId: this.shopInfo.id,
+						money: money < 1 ? 1 : money
+					}
+				}).then(res => {
+					if (res && this.canUseCoupon) {
+						this.couponInfo = res
+						this.checkCoupon = res
+					}
+
+				})
+			}
+			if (opt.payWay) {
+				this.payWay = opt.payWay
+			}
+			if (opt.bankCardId) {
+				this.bankCardId = opt.bankCardId
+			}
+			this.init()
+		},
+		methods: {
+			// 鏇存柊閲戦
+			changeMoney(str) {
+				this.money = str;
+			},
+			// 灞曠ず閿洏
+			showBord() {
+				this.bordShow = true;
+			},
+			init() {
+				uni.showLoading()
+				if (this.payWay == 2) {
+					const uri = encodeURIComponent(window.location)
+					getWechatConfigInfo({
+						url: uri
+					}).then(res => {
+						uni.hideLoading()
+						wx.config({
+							debug: false, // 寮�鍚皟璇曟ā寮�
+							appId: res.appId, // 蹇呭~锛屽叕浼楀彿鐨勫敮涓�鏍囪瘑
+							timestamp: res.timestamp, // 蹇呭~锛岀敓鎴愮鍚嶇殑鏃堕棿鎴�
+							nonceStr: res.nonceStr, // 蹇呭~锛岀敓鎴愮鍚嶇殑闅忔満涓�
+							signature: res.signature, // 蹇呭~锛岀鍚�
+							jsApiList: ['chooseWXPay'], // 蹇呭~锛岄渶瑕佷娇鐢ㄧ殑 JS 鎺ュ彛鍒楄〃
+							// openTagList: ['wx-open-launch-weapp'] //鍙�夛紝闇�瑕佷娇鐢ㄧ殑寮�鏀炬爣绛惧垪琛�
+						});
+					}).catch(() => {
+						uni.hideLoading()
+					})
+				}
+			},
+			// 鏇存敼绉垎
+			changeInt(num) {
+				this.canUseInt = num;
+			},
+			pay() {
+				this.bordShow = false
+				uni.showLoading()
+				const params = {
+					money: parseFloat((this.money * 100).toPrecision(12)),
+					shopId: this.shopInfo.id,
+					cid: this.cid,
+					payWay: this.payWay,
+					score: this.canUseInt,
+					couponDetailId: this.couponInfo.id
+				}
+				if (this.payWay == 3) {
+					params.bankCardId = this.bankCardId
+				}
+				saveWxOrder(params).then(res => {
+					uni.hideLoading()
+					try {
+						this.orderId = res.orderId
+						res.youHuiInfo.shopName = this.shopInfo.shop_name
+						this.youHuiInfo = res.youHuiInfo
+						if (res.isOk == 1) {
+							uni.navigateTo({
+								url: `/pages/pay/paySuccess?orderId=${this.orderId}&youHuiInfo=${JSON
+									.stringify(this.youHuiInfo)}`
+							})
+						} else {
+							if (res.toPayMethod == 1) {
+								if (this.payWay == 3) {
+									this.smscode = ''
+									this.codeShow = true
+								}
+							} else if (res.toPayMethod == 2) {
+								if (this.payWay == 2) {
+									this.wxPay(res.paymentData)
+								}
+								if (this.payWay == 5) {
+									this.aliPay(res.paymentData)
+								}
+							} else if (res.toPayMethod == 3) {
+								window.location.href = res.paymentUrl
+							}
+						}
+					} catch (e) {
+						//TODO handle the exception
+						console.error(e);
+					}
+
+
+				}).catch(() => {
+					uni.hideLoading()
+				})
+			},
+			// 寰俊鏀粯
+			wxPay(res) {
+				/*setTimeout(() => {
+					wx.chooseWXPay({
+						timestamp: res.timeStamp, // 鏀粯绛惧悕鏃堕棿鎴�
+						nonceStr: res.nonceStr, // 鏀粯绛惧悕闅忔満涓诧紝涓嶉暱浜� 32 浣�
+						package: res.package, // 缁熶竴鏀粯鎺ュ彛杩斿洖鐨刾repay_id鍙傛暟鍊硷紝鎻愪氦鏍煎紡濡傦細prepay_id=\*\*\*锛�
+						signType: res.signType, // 寰俊鏀粯V3鐨勪紶鍏� RSA ,寰俊鏀粯V2鐨勪紶鍏ユ牸寮忎笌V2缁熶竴涓嬪崟鐨勭鍚嶆牸寮忎繚鎸佷竴鑷�
+						paySign: res.paySign, // 鏀粯绛惧悕
+						success: function(res) {
+							// 鏀粯鎴愬姛鍚庣殑鍥炶皟鍑芥暟
+							uni.navigateTo({
+								url: `/pages/pay/paySuccess?orderId=${this.orderId}&youHuiInfo=${JSON
+									.stringify(this.youHuiInfo)}`
+							})
+						}
+					});
+				}, 200)*/
+				setTimeout(() => {
+					WeixinJSBridge.invoke(
+						'getBrandWCPayRequest', {
+							"appId": res.appId, //鍏紬鍙稩D锛岀敱鍟嗘埛浼犲叆
+							"timeStamp": res.timeStamp, //鏃堕棿鎴筹紝鑷�1970骞翠互鏉ョ殑绉掓暟
+							"nonceStr": res.nonceStr, //闅忔満涓�
+							"package": res.package,
+							"signType": res.signType, //寰俊绛惧悕鏂瑰紡锛�
+							"paySign": res.paySign //寰俊绛惧悕
+						},
+						(res) => {
+							if (res.err_msg == "get_brand_wcpay_request:ok") {
+								// 浣跨敤浠ヤ笂鏂瑰紡鍒ゆ柇鍓嶇杩斿洖,寰俊鍥㈤槦閮戦噸鎻愮ず锛�
+								//res.err_msg灏嗗湪鐢ㄦ埛鏀粯鎴愬姛鍚庤繑鍥瀘k锛屼絾骞朵笉淇濊瘉瀹冪粷瀵瑰彲闈犮��
+								/*uni.navigateTo({
+									url: `/pages/pay/paySuccess?orderId=${this.orderId}&youHuiInfo=${JSON
+                        .stringify(this.youHuiInfo)}`
+								})*/
+							}
+						});
+				}, 200)
+			},
+			//鏀粯瀹濇敮浠�
+			aliPay(res) {
+				ap.tradePay({
+					tradeNO: res.tradeNO
+				}, (res) => {
+					if (res.resultCode == 9000) {
+						/*uni.navigateTo({
+							url: `/pages/pay/paySuccess?orderId=${this.orderId}&youHuiInfo=${JSON
+								.stringify(this.youHuiInfo)}`
+						})*/
+						// 鏀粯鎴愬姛
+					} else if (res.resultCode == 8000 || res.resultCode == 6001) {
+						// 姝e湪澶勭悊涓� || 鍙栨秷
+					} else {
+						// 鏀粯澶辫触
+					}
+				});
+			},
+			//閾惰鍗℃敮浠�
+			bankPay(e) {
+				uni.showLoading()
+				tlPay({
+					orderId: this.orderId,
+					payWay: 3,
+					bankCardId: this.bankCardId,
+					smscode: e
+				}).then(res => {
+					uni.hideLoading()
+					uni.hideKeyboard()
+					this.codeShow = false
+					uni.navigateTo({
+						url: `/pages/pay/paySuccess?orderId=${this.orderId}&youHuiInfo=${JSON
+							.stringify(this.youHuiInfo)}`
+					})
+				}).catch(() => {
+					uni.hideLoading()
+				})
+			},
+			//鏄剧ず浼樻儬鍒�
+			showCoupon() {
+				uni.showLoading()
+				queryUseSweepPayCoupon({
+					params: {
+						cusid: this.shopInfo.cusid,
+						c: this.shopInfo.c,
+						money: parseFloat((this.money * 100).toPrecision(12)),
+						score: this.canUseInt
+					}
+				}).then(res => {
+					uni.hideLoading()
+					if (res.length > 0) {
+						this.couponList = res
+						this.checkCoupon = this.couponInfo
+						this.couponShow = true;
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: '鏆傛棤鍙敤浼樻儬鍒�'
+						})
+					}
+
+				}).catch(() => {
+					uni.hideLoading()
+				})
+
+			},
+			clickCoupon(item) {
+				if (this.checkCoupon.id == item.id) {
+					this.checkCoupon = {
+						id: '',
+						discount: 0,
+						thresholdValue: 0
+					}
+				} else {
+					this.checkCoupon = item
+				}
+			},
+			getCoupon() {
+				// item 涓轰紭鎯犲埜淇℃伅
+				this.couponInfo = this.checkCoupon;
+				this.couponShow = false;
+			}
+		}
+	};
+</script>
+
+<style scoped lang="scss">
+	.page {
+		height: calc(100vh - 0px);
+		display: flex;
+		flex-direction: column;
+		line-height: 1;
+	}
+
+	.avg-img {
+		width: 80rpx;
+		height: 80rpx;
+	}
+
+	.pay-box {
+		text-align: center;
+		padding: 65rpx 0 42rpx;
+	}
+
+	.money {
+		font-size: 64rpx;
+	}
+
+	.tag-pain {
+		border: 1px solid #D31F28;
+		font-size: 22rpx;
+		color: #D31F28;
+		border-radius: 4rpx;
+		line-height: 1;
+		padding: 8rpx 4rpx;
+	}
+
+	.item-icon {
+		width: 38rpx;
+		height: 38rpx;
+	}
+
+	.pay-it {
+		position: absolute;
+		width: 686rpx;
+		height: 98rpx;
+		bottom: 0;
+		border-radius: 10rpx;
+		font-size: 34rpx;
+		color: #ffffff;
+		background-color: #de2d35;
+		margin: 32rpx;
+	}
+
+	.choose-coupon {
+		margin: 32rpx 32rpx 0;
+		border-radius: 10rpx;
+		background: #fff1f1;
+		padding: 26rpx 16rpx;
+		color: #D31F28;
+		font-size: 28rpx;
+	}
+
+	.coupon-list {
+		box-sizing: border-box;
+		height: calc(50vh - 44px);
+	}
+
+	.coupon {
+		background-color: rgba(255, 241, 241, 0.47);
+		height: 171rpx;
+		border: solid 1rpx #f85d64;
+		border-radius: 10rpx;
+		position: relative;
+		overflow: hidden;
+	}
+
+	.butt {
+		width: 1rpx;
+		height: 100%;
+		position: relative;
+		z-index: 9;
+		border-left: 1rpx dashed #f85d64;
+	}
+
+	.butt:before {
+		z-index: 10;
+		box-sizing: border-box;
+		position: absolute;
+		content: "";
+		width: 24rpx;
+		height: 12rpx;
+		border-bottom: 1rpx solid #f85d64;
+		border-right: 1rpx solid #f85d64;
+		border-left: 1rpx solid #f85d64;
+		border-radius: 0 0 24rpx 24rpx;
+		left: -12rpx;
+		background-color: #ffffff;
+	}
+
+	.butt:after {
+		box-sizing: border-box;
+		position: absolute;
+		content: "";
+		width: 24rpx;
+		height: 12rpx;
+		bottom: 0;
+		border-bottom: 1rpx solid #ffff;
+		border-right: 1rpx solid #f85d64;
+		border-left: 1rpx solid #f85d64;
+		border-top: 1rpx solid #f85d64;
+		border-radius: 24rpx 24rpx 0 0;
+		left: -12rpx;
+		background-color: #ffffff;
+	}
+
+
+	.coupon-btn {
+		margin: 0 32rpx;
+		height: 98rpx;
+		border-radius: 10rpx;
+		background-color: #D31F28;
+		font-size: 34rpx;
+		color: #fff;
+		line-height: 98rpx;
+		text-align: center;
+	}
+
+	.u-font-money {
+		font-size: 60rpx;
+	}
+</style>

--
Gitblit v1.9.1