Browse Source

研究报告-支付

littleblue55 2 days ago
parent
commit
b64ed95637

+ 20 - 3
api/report.js

@@ -83,22 +83,39 @@ export function cancelReportFavi(id){
 }
 
 // 点赞
-export function reportApplaud(id){
+export function reportApplaud(){
 	return request({
-		url: `/applaud/report/${id}`,
+		url: `/applaud/report`,
 		headers: {
 			isToken: true
 		},
+		data: {
+			id: id
+		},
 		'method': 'post'
 	})
 }
 // 取消收藏
 export function cancelReportApplaud(id){
 	return request({
-		url: '/applaud/report/cancel/' + id,
+		url: '/applaud/report/cancel',
 		headers: {
 			isToken: true
 		},
+		data: {
+			id: id
+		},
+		'method': 'post'
+	})
+}
+
+export function payReport(data){
+	return request({
+		url: '/report/payment',
+		headers: {
+			isToken: true
+		},
+		data: data,
 		'method': 'post'
 	})
 }

+ 80 - 38
pages/goOnEdu/course/courseDetail/courseOrder.vue

@@ -20,7 +20,7 @@
 					<u-icon name="clock" size="28"></u-icon>
 					{{ getDateWeek(course.courseDate) }}
 				</view>
-				<view class="course-price">¥{{ course.price }}元</view>
+				<view class="course-price">¥{{ isMember ? course.priceMember : course.price }}元</view>
 			</view>
 		</view>
 		<view class="course-form" style="margin-top: 20rpx;">
@@ -36,7 +36,7 @@
 				<view class="course-label">
 					支付方式
 				</view>
-				<view class="course-value" @click="show = true">
+				<view class="course-value" @click="payTypeShow = true">
 					{{ activePayType }}<i class="iconfont icon-sangedian-copy"></i>
 				</view>
 			</view>
@@ -47,7 +47,7 @@
 					课程金额
 				</view>
 				<view class="course-value">
-					¥{{ course.price }}
+					¥{{ isMember ? course.priceMember : course.price }}
 				</view>
 			</view>
 			<view class="course-form-item">
@@ -74,7 +74,7 @@
 				</view>
 			</view>
 		</view>
-		<view class="course-form" style="background: none;">
+		<view class="course-form" style="background: none;" v-if="!isMember && course.viewMode === '2'">
 			<view class="course-form-item">
 				<text class="text-red" style="font-weight: bold;">个人会员或单位会员免费,点击现在入会></text>
 			</view>
@@ -87,60 +87,99 @@
 				<button class="pay-btn" @click="toBuy">立即购买</button>
 			</view>
 		</view>
-		<u-action-sheet :list="list" v-model="show" @click="clickAction" safe-area-inset-bottom></u-action-sheet>
+		<u-action-sheet :list="list" v-model="payTypeShow" @click="clickAction" safe-area-inset-bottom></u-action-sheet>
 	</view>
 </template>
 
 <script setup>
 	import {
-		ref
+		ref,
+		computed
 	} from 'vue'
 	import {
 		onLoad
 	} from '@dcloudio/uni-app'
 	import configService from '@/utils/baseurl.js'
-	import { loadCourseDetail } from "@/api/edu.js"
-	
+	import {
+		loadCourseDetail,
+		payCourse
+	} from "@/api/edu.js"
+	import {
+		useAuthStore
+	} from '@/store/authStore'
+	const authStore = useAuthStore();
+	const isMember = computed(() => {
+		authStore.loadUserInfo()
+		return authStore.userInfo.isMember == '0' ? false : true
+	})
+	const openid = computed(() => {
+		authStore.loadOpenid()
+		return authStore.openid
+	})
 	const FILE_URL = configService.FILE_URL;
 	const courseId = ref("");
 	const course = ref({})
-	const price = ref(0)
+	const price = computed(() => {
+		let val;
+		if (isMember.value) {
+			val = course.value.priceMember
+		} else {
+			val = course.value.price
+		}
+		// 如果后续有积分需求可以写在这里,计算一下积分,返回最终值
+		payForm.value.amount = val
+		return val
+	})
+
 	const activePayType = ref("微信支付")
+
 	const list = ref([{
 		text: '微信支付'
 	}])
-	const show = ref(false)
+
+	const payForm = ref({
+		title: "",
+		desc: "",
+		id: "",
+		amount: "",
+		openid: ""
+	})
+
+	const payTypeShow = ref(false)
+	// 支付完成
 	const toBuy = () => {
-		uni.redirectTo({
-			url: "/pages/goOnEdu/course/courseDetail/coursePay?id=" + courseId.value
+		payForm.value.openid = openid.value
+		console.log(payForm.value)
+		// 支付部分
+		payCourse(payForm.value).then(res => {
+			if (res && res.code === 0) {
+				const params = res.data
+				wx.requestPayment({
+					nonceStr: params.nonceStr,
+					package: params.package,
+					paySign: params.paySign,
+					signType: params.signType,
+					timeStamp: params.timeStamp,
+					success(res){
+						msgSuccess("支付成功")
+					},
+					fail(res){
+						msgError("支付失败")
+					}
+				})
+			}
 		})
+		// uni.redirectTo({
+		// 	url: "/pages/goOnEdu/course/courseDetail/coursePay?id=" + courseId.value
+		// })
 	}
 
-	const clickAction = (i) =>{
+	const clickAction = (i) => {
 		// console.log(i)
 		activePayType.value = list.value[i].text
-		show.value = false
+		payTypeShow.value = false
 	}
-	// 加载数据
-	// const init = (id) => {
-	// 	// 加载数据
-	// 	courseId.value = id
-	// 	course.value = {
-	// 		id: id,
-	// 		courseName: "11Vue.js 从入门到精通",
-	// 		courseType: "领袖锻造营",
-	// 		name: "李老师11",
-	// 		courseDate: "2023-09-15",
-	// 		imgUrl: "https://tse4-mm.cn.bing.net/th/id/OIP-C.X_J8jL0bSPQ_jgOrdIbsgQHaEK?rs=1&pid=ImgDetMain",
-	// 		price: 199.00,
-	// 		hasBuy: true,
-	// 		hasFavi: false,
-	// 		payType: "会员免费",
-	// 		expirationDate: "用户注销前有效"
-	// 	}
-	// 	course.courseTime = "18:00"
-	// 	price.value = course.value.price
-	// }
+
 	// 日期格式:xxxx年xx月xx日(星期x)
 	function getDateWeek(val) {
 		const date = new Date(val);
@@ -152,16 +191,19 @@
 		// const result = `${year}年${month}月${day}日(星期${dayOfWeek})`
 		return `${year}年${month}月${day}日(星期${dayOfWeek})`
 	}
-	
+
 	// 初始化
 	function init(id) {
-		loadCourseDetail(id).then(res=>{
-			if(res?.data){
+		loadCourseDetail(id).then(res => {
+			if (res?.data) {
 				course.value = res.data;
+				payForm.value.id = res.data.id;
+				payForm.value.title = res.data.courseName
+				payForm.value.desc = res.data.courseName
 			}
 		})
 	}
-	
+
 	onLoad((option) => {
 		const {
 			id

+ 1 - 1
pages/order/order.vue

@@ -111,7 +111,7 @@
 	const loadMoreStatus = ref('more')
 	const searchForm = ref({
 		keyword: '',
-		type: 0,
+		type: null,
 		pageNumber: 1,
 		pageSize: 10
 	})

+ 83 - 30
pages/reportDetail/reportDetail.vue

@@ -4,7 +4,7 @@
 			<view class="title">
 				{{ report.title }}
 			</view>
-			<!-- <text>需要付款才能看</text> -->
+			<button @click="toBuy">点击购买</button>
 		</view>
 		<!-- <web-view  id="webview" :src="report.sourceFile">
 			<cover-view class="close-view">
@@ -52,12 +52,25 @@
 		reportFavi,
 		cancelReportFavi,
 		reportApplaud,
-		cancelReportApplaud
+		cancelReportApplaud,
+		payReport
 	} from '@/api/report.js'
-
-	// import VueOfficePdf from '@vue-office/pdf'
-	// const modelValue = ref('http://www.gzrea.org.cn/upload/news/2025/03/4128b87c1b0535772f345cf82fa04084431c17f2561a6fb3.pdf')
-	// let previewOtherUpload = ref(false);
+	import {
+		msgError,
+		msgSuccess
+	} from "@/utils/common.js"
+	import {
+		useAuthStore
+	} from '@/store/authStore'
+	const authStore = useAuthStore();
+	const isMember = computed(()=>{
+		authStore.loadUserInfo()
+		return authStore.userInfo.isMember == '0' ? false : true
+	})
+	const openid = computed(()=>{
+		authStore.loadOpenid()
+		return authStore.openid
+	})
 	const webview = ref();
 	const id = ref()
 	const title = ref()
@@ -117,59 +130,96 @@
 
 		return false
 	})
+	const payForm = ref({
+		"id": null,
+		"title": "",
+		"desc": "",
+		"amount": null,
+		"openid": ""
+	})
 
 	function changeFavi() {
-		if(report.value.hasFavi){
-			cancelReportFavi(id.value).then(res=>{
-				if(res?.code==0){
+		if (report.value.hasFavi) {
+			cancelReportFavi(id.value).then(res => {
+				if (res?.code == 0) {
 					report.value.hasFavi = false
 				}
 			})
-		}else{
+		} else {
 			reportFavi(id.value).then(res => {
-				if(res?.code==0){
+				if (res?.code == 0) {
 					report.value.hasFavi = true
 				}
 			})
 		}
 	}
-	
-	function changeApplaud(){
-		if(report.value.hasApplaud){
-			cancelReportApplaud(id.value).then(res=>{
-				if(res?.code==0){
+
+	function changeApplaud() {
+		if (report.value.hasApplaud) {
+			cancelReportApplaud(id.value).then(res => {
+				if (res?.code == 0) {
 					report.value.hasApplaud = false
 				}
 			})
-		}else{
+		} else {
 			reportApplaud(id.value).then(res => {
-				if(res?.code==0){
+				if (res?.code == 0) {
 					report.value.hasApplaud = true
 				}
 			})
 		}
 	}
 
-	onLoad((load) => {
-		if(load.id){
-			console.log(load.id)
-			id.value = load.id
-			title.value = load.title
-		}
-		getReportDetail(66).then(res => {
-			// console.log(res, "报告详情")
+	function toBuy() {
+		// 修改一下,如果是会员,用会员价格,
+		// 如果不是会员就用普通价格
+		payForm.value.amount = isMember.value? report.value.priceMember : report.value.price
+		payForm.value.openid = openid.value
+		payReport(payForm.value).then(res=>{
+			if(res && res.code===0){
+				const params = res.data
+				wx.requestPayment({
+					nonceStr: params.nonceStr,
+					package: params.package,
+					paySign: params.paySign,
+					signType: params.signType,
+					timeStamp: params.timeStamp,
+					success(res){
+						msgSuccess("支付成功")
+					},
+					fail(res){
+						msgError("支付失败")
+					}
+				})
+			}
+		})
+	}
+
+	function init(id) {
+		getReportDetail(id).then(res => {
 			if (res.code === 0) {
 				report.value = res.data
+				payForm.value.id = res.data.id
+				payForm.value.title = res.data.title
+				payForm.value.desc = res.data.title
+				
 			}
 		})
+	}
+	onLoad((load) => {
+		if (load.id) {
+			id.value = load.id
+			title.value = load.title
+			init(id.value)
+		}
 		uni.setNavigationBarTitle({
 			title: title.value
 		})
 	})
-	onMounted(()=>{
+	onMounted(() => {
 		console.log(uni.createSelectorQuery().select("#webview"))
 	})
-	
+
 
 	onShareAppMessage((res) => {
 		if (res.from === 'button') {
@@ -298,15 +348,18 @@
 				align-items: center;
 				justify-content: flex-end;
 				gap: 50rpx;
-				.menu-item{
+
+				.menu-item {
 					background-color: transparent;
 					margin: 0;
 					border: none;
 					padding: 0;
 				}
-				.menu-item::after{
+
+				.menu-item::after {
 					border: none !important;
 				}
+
 				.iconfont {
 					font-size: 42rpx;
 					color: $uni-text-color-grey;