From 8728844446c0328ef51069199c40671dc4db8c2f Mon Sep 17 00:00:00 2001
From: YeMingfei666 <1619116647@qq.com>
Date: Mon, 13 Jan 2025 13:57:50 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=94=AF=E4=BB=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
api/video/index.js | 44 +++
components/my-video-list/my-video-list.vue | 116 +++++--
http/http.js | 363 +++++++++++----------
pages.json | 7 +
pages/pays/pays.vue | 86 +++++
pages/video/detail.nvue | 28 +-
6 files changed, 421 insertions(+), 223 deletions(-)
create mode 100644 pages/pays/pays.vue
diff --git a/api/video/index.js b/api/video/index.js
index 77b8b56..661a324 100644
--- a/api/video/index.js
+++ b/api/video/index.js
@@ -66,3 +66,47 @@ export function tuijianVideo(data){
}
})
}
+//解锁10集视频
+export function buyTenVideo(data){
+ return http.request({
+ url: 'order/insertCourseOrders/limit10',
+ method:'GET',
+ data:data
+ })
+}
+//解锁单集或者全部视频
+export function buyVideo(data){
+ return http.request({
+ url: 'order/insertCourseOrders',
+ method:'GET',
+ data:data
+ })
+}
+//订单支付
+export function payOrder(data){
+ let payType='h5'
+ // #ifdef APP
+ payType='app'
+ // #endif
+ return http.request({
+ url: 'wuyou/payOrder/'+data.orderId+'?payType='+payType,
+ method:'GET'
+ })
+}
+//获取订单支付状态
+export function getOrderInfo(data){
+ return http.request({
+ url: 'wuyou/queryOrder/'+data.orderId,
+ method:'GET'
+ })
+}
+//金币解锁
+export function goldPay(data){
+ return http.request({
+ url: 'order/payOrders',
+ method:'POST',
+ data:{...data,header:{
+ 'content-type':'application/x-www-form-urlencoded'
+ }}
+ })
+}
\ No newline at end of file
diff --git a/components/my-video-list/my-video-list.vue b/components/my-video-list/my-video-list.vue
index cbfba9e..addc099 100644
--- a/components/my-video-list/my-video-list.vue
+++ b/components/my-video-list/my-video-list.vue
@@ -5,12 +5,12 @@
@change="swiperChange" :current="current" :circular="true" vertical class="u-flex-1"
@transition="transition" :indicator-dots="false" :autoplay="false" :interval="0" :duration="200">
-
+
@@ -22,12 +22,12 @@
|
+ :rightStyle="rightStyle" :infoStyle="infoStyle" :isCommand="isCommand"
+ :showControls="control.showControls" @toDetail="toDetail(item,index)" @itemMounted="itemMounted"
+ @controlstoggles="controlstoggles" :index="index" :instance="instance" :nowIndex="nowIndex"
+ @appear="appear($event,item,index)" :playSpeeds="playSpeeds" @disappear="disappear(item,index)"
+ @dianzanClick="dianzanClick(item,index)" @share="share(item)" @zhuijuClick="zhuijuClick(item)"
+ @popupShow="popupShow($event,item,index)">
|
@@ -125,7 +125,8 @@
-
+
我已经阅读并同意
@@ -213,7 +214,7 @@
showControls: true
})
// #ifdef APP
- control.showControls=false
+ control.showControls = false
// #endif
const customStyle = computed(() => {
@@ -229,7 +230,7 @@
function controlstoggles(e) {
control.showControls = e.detail.show
- console.log(control.showControls );
+ console.log(control.showControls);
control.showBack = control.showControls
console.log(control);
}
@@ -292,8 +293,8 @@
pay: false,
payTips: false,
speed: false,
- data:null,
- payType:null
+ data: null,
+ payType: null
})
@@ -325,25 +326,68 @@
}
+
+ //非金币支付
+ async function payOrder(data) {
+ const res = await Api.payOrder(data)
+ console.log(res);
+ if (res) {
+ uni.navigateTo({
+ url: '/pages/pays/pays?orderId=' + data.orderId + '&url=' + res.h5Url
+ });
+ return
+ // #ifdef APP
+ uni.navigateTo({
+ url: '/pages/pays/pays?orderId=' + res.orderId + '&url=' + res.h5Url
+ });
+ // #endif
+ // #ifdef H5
+ window.location.href = res.h5Url
+ // #endif
+ }
+ }
+ //金币支付
+ async function goldPay(data) {
+ const res = await Api.goldPay(data)
+ console.log(res);
+ }
//确认支付
- function payConfirm() {
- console.log(isAgree.value);
+ async function payConfirm() {
if (!isAgree.value) {
return infoBox.showToast('请阅读并同意 《付费须知说明》')
}
+ const [type, num] = popup.payType.split('-');
+ console.log(type, num);
let data = {
- courseId: this.courseId
+ courseId: popup.data.courseId
}
- if(popup.payType=='all'){
+ if (num == 1) {
+ data.courseDetailsId = popup.data.courseDetailsId
+ }
+
+ const res = num == '10' ? await Api.buyTenVideo(data) : await Api.buyVideo(data)
+ if (res) {
+ if(type=='gold'){
+ goldPay({
+ orderId: res.orders.ordersId
+ })
+ }else{
+ payOrder({
+ orderId: res.orders.ordersId
+ })
+ }
+
+ } else {
}
-
-
+
+
}
- function payBtnClick(type,num) {
- popup.payType=`${type}-${num}`
- popupClose()
+ function payBtnClick(type, num) {
+ console.log(type, num);
+ popup.payType = `${type}-${num}`
+ popupClose('show')
popupShow('payTips')
}
@@ -370,7 +414,10 @@
};
}
//滚动到指定位置
+ let positonmer = null
+
function goListPosition(index) {
+ clearTimeout(positonmer)
console.log('goListPosition:' + index)
const el = refList.value[index]
if ($mountedComponents[props.list.length - 1]) {
@@ -382,7 +429,7 @@
setVideoList(item)
insertHistory()
} else {
- setTimeout(() => {
+ positonmer = setTimeout(() => {
goListPosition(index)
}, 30)
}
@@ -400,11 +447,13 @@
}
}
- function popupShow(key = 'show',item,index) {
+ function popupShow(key = 'show', item, index) {
console.log(item);
popup[key] = true
- popup['data'] = item
- popup['index'] = index
+ if (item) {
+ popup['data'] = item
+ popup['index'] = index
+ }
}
@@ -602,7 +651,7 @@
}
console.log(videoList.value);
if (!item.videoUrl) {
- popupShow('pay',item,index)
+ popupShow('pay', item, index)
}
}
@@ -632,7 +681,7 @@
const nowDanjiPrice = computed(() => {
return videoList.value[current.value].price
})
- const rightStyle=computed(()=>{
+ const rightStyle = computed(() => {
// #ifdef H5
return {
transform: `translateX(${!control.showControls?'0':60}px)`
@@ -644,7 +693,7 @@
}
// #endif
})
- const infoStyle=computed(()=>{
+ const infoStyle = computed(() => {
// #ifdef H5
return {
transform: `translateX(${!control.showControls?0:'-110%'})`
@@ -656,6 +705,7 @@
}
// #endif
})
+
function loadmore() {
console.log('loadmore');
}
diff --git a/http/http.js b/http/http.js
index 2cdba93..72572f4 100644
--- a/http/http.js
+++ b/http/http.js
@@ -1,152 +1,161 @@
// 导入全局属性
-import { sm4DecryptByResData } from "@/utils/encryptUtil.js";
+import {
+ sm4DecryptByResData
+} from "@/utils/encryptUtil.js";
import infoBox from "@/utils/infoBox.js";
-import { reject } from "lodash";
+import {
+ reject
+} from "lodash";
import config from "@/commons/config.js";
// 测试服
let baseUrl = config.baseApiUrl + "app";
const loadingShowTime = 200;
-function getHeader() {
- const headerObject = {};
- headerObject["token"] = uni.getStorageSync("token");
- return headerObject;
+function getHeader(data) {
+ const header = data ? data.header : {}
+ const headerObject = {
+ ...header
+ };
+ headerObject["token"] = uni.getStorageSync("token");
+ return headerObject;
}
// 通用处理逻辑
-function commonsProcess(showLoading, httpReqCallback,isreturm) {
- // 判断是否请求完成(用作 是否loading )
- // 包括: 'ing', 'ingLoading', 'finish'
- let reqState = "ing";
- // 是否已经提示的错误信息
- let isShowErrorToast = false;
- // 请求完成, 需要处理的动作
- let reqFinishFunc = () => {
- if (reqState == "ingLoading") {
- // 关闭loading弹层
- infoBox.hideLoading();
- }
- reqState = "finish"; // 请求完毕
- };
- // 明确显示loading
- if (showLoading) {
- // xx ms内响应完成,不提示loading
- setTimeout(() => {
- if (reqState == "ing") {
- reqState = "ingLoading";
- infoBox.showLoading();
- }
- }, loadingShowTime);
- }
+function commonsProcess(showLoading, httpReqCallback, isreturm) {
+ // 判断是否请求完成(用作 是否loading )
+ // 包括: 'ing', 'ingLoading', 'finish'
+ let reqState = "ing";
+ // 是否已经提示的错误信息
+ let isShowErrorToast = false;
+ // 请求完成, 需要处理的动作
+ let reqFinishFunc = () => {
+ if (reqState == "ingLoading") {
+ // 关闭loading弹层
+ infoBox.hideLoading();
+ }
+ reqState = "finish"; // 请求完毕
+ };
+ // 明确显示loading
+ if (showLoading) {
+ // xx ms内响应完成,不提示loading
+ setTimeout(() => {
+ if (reqState == "ing") {
+ reqState = "ingLoading";
+ infoBox.showLoading();
+ }
+ }, loadingShowTime);
+ }
- return httpReqCallback()
- .then((httpData) => {
+ return httpReqCallback()
+ .then((httpData) => {
- reqFinishFunc(); // 请求完毕的动作
- // 从http响应数据中解构响应数据 [ 响应码、 bodyData ]
- let { statusCode, data } = httpData;
- // 避免混淆重新命名
- let bodyData = data;
- if(isreturm){
- return Promise.resolve(bodyData.data || bodyData.page|| bodyData);
- }
- if (statusCode == 500) {
- isShowErrorToast = true;
- return Promise.reject(bodyData); // 跳转到catch函数
- }
+ reqFinishFunc(); // 请求完毕的动作
+ // 从http响应数据中解构响应数据 [ 响应码、 bodyData ]
+ let {
+ statusCode,
+ data
+ } = httpData;
+ // 避免混淆重新命名
+ let bodyData = data;
+ if (isreturm) {
+ return Promise.resolve(bodyData.data || bodyData.page || bodyData);
+ }
+ if (statusCode == 500) {
+ isShowErrorToast = true;
+ return Promise.reject(bodyData); // 跳转到catch函数
+ }
- if (statusCode == 401) {
- // 提示信息
- isShowErrorToast = true;
- return Promise.reject(bodyData); // 跳转到catch函数
- }
- // http响应码不正确
- if (statusCode != 200 && statusCode != 204 && statusCode != 201) {
- isShowErrorToast = true;
- data.message =
- data.message == "Bad credentials" ? "用户名或密码错误" : data.message;
- infoBox.showToast(data.message || "服务器异常");
- return Promise.reject(bodyData); // 跳转到catch函数
- }
- if (bodyData.code == 401) {
- // 提示信息
- isShowErrorToast = true;
- return Promise.reject(bodyData); // 跳转到catch函数
- }
- if (bodyData.code == 500) {
- // 提示信息
- isShowErrorToast = true;
- return Promise.reject(bodyData); // 跳转到catch函数
- }
- if (bodyData.code != 0) {
- infoBox.showToast(data.message);
- return;
- }
+ if (statusCode == 401) {
+ // 提示信息
+ isShowErrorToast = true;
+ return Promise.reject(bodyData); // 跳转到catch函数
+ }
+ // http响应码不正确
+ if (statusCode != 200 && statusCode != 204 && statusCode != 201) {
+ isShowErrorToast = true;
+ data.message =
+ data.message == "Bad credentials" ? "用户名或密码错误" : data.message;
+ infoBox.showToast(data.message || "服务器异常");
+ return Promise.reject(bodyData); // 跳转到catch函数
+ }
+ if (bodyData.code == 401) {
+ // 提示信息
+ isShowErrorToast = true;
+ return Promise.reject(bodyData); // 跳转到catch函数
+ }
+ if (bodyData.code == 500) {
+ // 提示信息
+ isShowErrorToast = true;
+ return Promise.reject(bodyData); // 跳转到catch函数
+ }
+ if (bodyData.code != 0) {
+ infoBox.showToast(data.message);
+ return;
+ }
- // 加密数据
- if (!bodyData.data && bodyData.encryptData) {
- return Promise.resolve({
- bizData: sm4DecryptByResData(bodyData.encryptData),
- code: bodyData.code,
- });
- }
-
- // 构造请求成功的响应数据
- return Promise.resolve(bodyData.data || bodyData.page|| bodyData);
- })
- .catch((res) => {
-
- if (res.status == 404) {
- infoBox.showErrorToast("接口404").then(() => {});
- reject();
- return;
- }
+ // 加密数据
+ if (!bodyData.data && bodyData.encryptData) {
+ return Promise.resolve({
+ bizData: sm4DecryptByResData(bodyData.encryptData),
+ code: bodyData.code,
+ });
+ }
- if (res.code == 401) {
- infoBox.showErrorToast(res.message || "请登录").then(() => {
- uni.redirectTo({
- url: "/pages/login/login",
- });
- reject();
- });
- }
- if (res.code != 0) {
- infoBox.showErrorToast(res.msg).then(() => {});
- reject();
- }
- if (res.code == 500) {
- infoBox.showErrorToast(res.msg || "服务器异常").then(() => {});
- reject();
- }
- reqFinishFunc(); // 请求完毕的动作
+ // 构造请求成功的响应数据
+ return Promise.resolve(bodyData.data || bodyData.page || bodyData);
+ })
+ .catch((res) => {
- // 如果没有提示错误, 那么此处提示 异常。
- if (!isShowErrorToast) {
- infoBox.showErrorToast(`请求网络异常`);
- }
+ if (res.status == 404) {
+ infoBox.showErrorToast("接口404").then(() => {});
+ reject();
+ return;
+ }
- return Promise.reject(res);
- })
- .finally(() => {
- // finally 是 then结束后再执行, 此处不适用。 需要在请求完成后立马调用: reqFinishFunc()
- });
+ if (res.code == 401) {
+ infoBox.showErrorToast(res.message || "请登录").then(() => {
+ uni.redirectTo({
+ url: "/pages/login/login",
+ });
+ reject();
+ });
+ }
+ if (res.code != 0) {
+ infoBox.showErrorToast(res.msg).then(() => {});
+ reject();
+ }
+ if (res.code == 500) {
+ infoBox.showErrorToast(res.msg || "服务器异常").then(() => {});
+ reject();
+ }
+ reqFinishFunc(); // 请求完毕的动作
+
+ // 如果没有提示错误, 那么此处提示 异常。
+ if (!isShowErrorToast) {
+ infoBox.showErrorToast(`请求网络异常`);
+ }
+
+ return Promise.reject(res);
+ })
+ .finally(() => {
+ // finally 是 then结束后再执行, 此处不适用。 需要在请求完成后立马调用: reqFinishFunc()
+ });
}
// 默认 显示loading(控制 xxs 内 不提示loading )
function req(uri, data, method = "GET", showLoading = true, extParams = {}) {
- return commonsProcess(showLoading, () => {
- return uni.request(
- Object.assign(
- {
- url: baseUrl + uri,
- data: data,
- method: method,
- header: getHeader(),
- },
- extParams
- )
- );
- });
+ return commonsProcess(showLoading, () => {
+ return uni.request(
+ Object.assign({
+ url: baseUrl + uri,
+ data: data,
+ method: method,
+ header: getHeader(data),
+ },
+ extParams
+ )
+ );
+ });
}
// 默认 显示loading(控制 xxs 内 不提示loading )
@@ -158,16 +167,17 @@ function request(args) {
method = "GET",
showLoading = true,
extParams = {},
- isreturm=false
+ isreturm = false
} = args
if (params) {
let result = ''
Object.keys(params).forEach((key) => {
- if (!Object.is(params[key], undefined) && !Object.is(params[key], null) && !Object.is(JSON.stringify(params[key]), '{}')) {
- result += encodeURIComponent(key) + '=' + encodeURIComponent(params[key]) + "&"
- }
+ if (!Object.is(params[key], undefined) && !Object.is(params[key], null) && !Object.is(JSON
+ .stringify(params[key]), '{}')) {
+ result += encodeURIComponent(key) + '=' + encodeURIComponent(params[key]) + "&"
+ }
})
- url = url+'?'+(result.slice(0,result.length-1))
+ url = url + '?' + (result.slice(0, result.length - 1))
params = null
}
let headerObject = {}
@@ -177,60 +187,59 @@ function request(args) {
url: slash(baseUrl, url),
data: params || data,
method: method,
- header: getHeader()
+ header: getHeader(data)
}, extParams)
)
- },isreturm)
+ }, isreturm)
}
// 处理/
function slash(baseUrl, url) {
- let u = "";
- if (baseUrl[baseUrl.length - 1] == "/") {
- u += baseUrl;
- } else {
- u = u + baseUrl + "/";
- }
- if (url[0] == "/") {
- u = u + url.slice(1);
- } else {
- u = u + url;
- }
- return u;
+ let u = "";
+ if (baseUrl[baseUrl.length - 1] == "/") {
+ u += baseUrl;
+ } else {
+ u = u + baseUrl + "/";
+ }
+ if (url[0] == "/") {
+ u = u + url.slice(1);
+ } else {
+ u = u + url;
+ }
+ return u;
}
// 上传
function upload(uri, data, file, showLoading = true, extParams = {}) {
- // 放置token
- let headerObject = {};
- return commonsProcess(showLoading, () => {
- return uni
- .uploadFile(
- Object.assign(
- {
- url: baseUrl + uri,
- formData: data,
- name: "file",
- filePath: file.path || file.url,
- header: getHeader(),
- },
- extParams
- )
- )
- .then((httpData) => {
- // uni.upload 返回bodyData 的是 string类型。 需要解析。
- httpData.data = JSON.parse(httpData.data);
- return Promise.resolve(httpData);
- })
- .catch((err) => {
- uni.hideLoading();
- infoBox.showErrorToast(`上传失败`);
- });
- });
+ // 放置token
+ let headerObject = {};
+ return commonsProcess(showLoading, () => {
+ return uni
+ .uploadFile(
+ Object.assign({
+ url: baseUrl + uri,
+ formData: data,
+ name: "file",
+ filePath: file.path || file.url,
+ header: getHeader(data),
+ },
+ extParams
+ )
+ )
+ .then((httpData) => {
+ // uni.upload 返回bodyData 的是 string类型。 需要解析。
+ httpData.data = JSON.parse(httpData.data);
+ return Promise.resolve(httpData);
+ })
+ .catch((err) => {
+ uni.hideLoading();
+ infoBox.showErrorToast(`上传失败`);
+ });
+ });
}
export default {
- req: req,
- request,
- upload: upload,
-};
+ req: req,
+ request,
+ upload: upload,
+};
\ No newline at end of file
diff --git a/pages.json b/pages.json
index 794f373..c82795c 100644
--- a/pages.json
+++ b/pages.json
@@ -192,6 +192,13 @@
{
"navigationBarTitleText" : "抽奖"
}
+ },
+ {
+ "path" : "pages/pays/pays",
+ "style" :
+ {
+ "navigationBarTitleText" : ""
+ }
}
],
"globalStyle": {
diff --git a/pages/pays/pays.vue b/pages/pays/pays.vue
new file mode 100644
index 0000000..5ef6368
--- /dev/null
+++ b/pages/pays/pays.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/video/detail.nvue b/pages/video/detail.nvue
index 2bff792..da418ea 100644
--- a/pages/video/detail.nvue
+++ b/pages/video/detail.nvue
@@ -1,8 +1,7 @@
-
+
@@ -18,8 +17,8 @@
import {
slice
} from 'lodash'
- const boxStyle={
- height:'835px'
+ const boxStyle = {
+ height: '835px'
}
let options = {}
const state = reactive({
@@ -44,23 +43,26 @@
// }
}
}
- function update({index,item}){
- state.list[index]=item
+
+ function update({
+ index,
+ item
+ }) {
+ state.list[index] = item
}
onLoad((opt) => {
Object.assign(options, opt)
init()
})
-
+
function swiperChange({
current,
direction,
data
- }) {
- }
+ }) {}
onShow(() => {
-
+ init()
})
@@ -71,8 +73,8 @@
background-color: #000;
overflow: hidden;
}
- .u-popup{
+
+ .u-popup {
position: fixed;
}
-
\ No newline at end of file