This commit is contained in:
2024-10-15 11:35:35 +08:00
parent 0ba0738ef9
commit 95365adddc
65 changed files with 13063 additions and 9746 deletions

View File

@@ -21,7 +21,7 @@
</view>
<slot name="bottomSlot"></slot>
<!-- <view>{{ detailInfo.content }}</view> -->
</view>

View File

@@ -2,64 +2,76 @@
<view
class="container playerBox"
id="playerBox"
style="
background-color: #000;
:style="`
background:${videoData.type == 2 ? '#fff' : '#000'};
width: 100%;
height: 200px;
position: relative;
padding: 0;
"
padding: 0;`"
>
<!-- ios不能播放私有加密提示信息 start-->
<!-- ios不能播放私有加密提示信息 end-->
<div ref="videoContent" id="url-player-test"></div>
<div
v-show="false"
:videoData="videoData"
:isDipose="isDipose"
:winWidth="winWidth"
:winHeight="winHeight"
:firstTime="firstTime"
:isOnLoad="isOnLoad"
:platform="platform"
:isSetFirstTime="isSetFirstTime"
:isChange="isChange"
:change:videoData="renderScript.receiveMsg"
:change:isDipose="renderScript.receiveisDipose"
:change:winWidth="renderScript.receiveWinWidth"
:change:winHeight="renderScript.receiveWinHeight"
:change:firstTime="renderScript.receiveFirstTime"
:change:isSetFirstTime="renderScript.receiveisSetFirstTime"
:change:isOnLoad="renderScript.receiveIsfresh"
:change:platform="renderScript.receiveplatform"
:change:isChange="renderScript.receiveIsChange"
></div>
<div @tap="renderScript.emitData" ref="videoContent1" v-show="false">
直接调用renderjs中的emitData的方法,传递当前播放时长
</div>
<div @tap="renderScript.endEmitData" ref="videoContent2" v-show="false">
监听结束方法记录播放时长
</div>
<div @tap="renderScript.changeVideoData" ref="videoContent3" v-show="false">
监听切换视频方法
</div>
<div @tap="renderScript.emitSetData" ref="videoContent4" v-show="false">
监听第一次初始播放时长,开始进行接口存储时间
</div>
<div @tap="renderScript.emitDispose" ref="videoContent6" v-show="false">
监听第一次初始播放时长,开始进行接口存储时间
</div>
<!-- 全屏按钮 start -->
<!-- 注意主要用于安卓端因为ios手机会被劫持 -->
<div class="fullScreenButton-container" v-if="platform != 'ios'">
<div v-if="videoData.type != 2">
<div ref="videoContent" id="url-player-test"></div>
<div
:class="`prism-fullscreen-btn ${isFullScreen ? 'fullscreen' : ''}`"
@tap="renderScript.changeVideoScreen"
v-show="false"
:videoData="videoData"
:isDipose="isDipose"
:winWidth="winWidth"
:winHeight="winHeight"
:firstTime="firstTime"
:isOnLoad="isOnLoad"
:platform="platform"
:isSetFirstTime="isSetFirstTime"
:isChange="isChange"
:change:videoData="renderScript.receiveMsg"
:change:isDipose="renderScript.receiveisDipose"
:change:winWidth="renderScript.receiveWinWidth"
:change:winHeight="renderScript.receiveWinHeight"
:change:firstTime="renderScript.receiveFirstTime"
:change:isSetFirstTime="renderScript.receiveisSetFirstTime"
:change:isOnLoad="renderScript.receiveIsfresh"
:change:platform="renderScript.receiveplatform"
:change:isChange="renderScript.receiveIsChange"
></div>
<div @tap="renderScript.emitData" ref="videoContent1" v-show="false">
直接调用renderjs中的emitData的方法,传递当前播放时长
</div>
<div @tap="renderScript.endEmitData" ref="videoContent2" v-show="false">
监听结束方法记录播放时长
</div>
<div
@tap="renderScript.changeVideoData"
ref="videoContent3"
v-show="false"
>
监听切换视频方法
</div>
<div @tap="renderScript.emitSetData" ref="videoContent4" v-show="false">
监听第一次初始播放时长,开始进行接口存储时间
</div>
<div @tap="renderScript.emitDispose" ref="videoContent6" v-show="false">
监听第一次初始播放时长,开始进行接口存储时间
</div>
<!-- 全屏按钮 start -->
<!-- 注意主要用于安卓端因为ios手机会被劫持 -->
<div class="fullScreenButton-container" v-if="platform != 'ios'">
<div
:class="`prism-fullscreen-btn ${isFullScreen ? 'fullscreen' : ''}`"
@tap="renderScript.changeVideoScreen"
></div>
</div>
<!-- 全屏按钮 end -->
</div>
<!-- 全屏按钮 end -->
<my-video
ref="audio"
:src="this.videoData.source"
title="标题名称"
subTitle="副标题名称"
v-else
></my-video>
</view>
</template>
<script>
@@ -116,11 +128,13 @@ export default {
},
},
//
mounted() { this.platform = this.$platform;
this.show = false;
if (uni.getStorageSync("videoOssList")) {
this.videoOssList = JSON.parse(uni.getStorageSync("videoOssList"));
}},
mounted() {
this.platform = this.$platform;
this.show = false;
if (uni.getStorageSync("videoOssList")) {
this.videoOssList = JSON.parse(uni.getStorageSync("videoOssList"));
}
},
//子组件销毁前
beforeDestroy() {
this.handleEnd();
@@ -132,7 +146,6 @@ export default {
// console.log("触发了更新");
},
methods: {
emitDispose1(status) {
this.$emit("handleSuccessDispose", status);
},
@@ -415,6 +428,10 @@ export default {
//初始化播放器
initAliyunPlayer() {
console.log("实例创建中 at line 436:", "实例创建中");
if(this.videoData.type!=2){
$("#url-player-test").empty();
var components = [
{
@@ -506,6 +523,10 @@ export default {
});
});
});
}else{
}
},
//调用 recordTime 方法 存本地播放时长

View File

@@ -49,7 +49,8 @@
font-size: 26rpx;
font-weight: 700;
">
<text style="font-size: 20rpx">免费</text>
<text style="font-size: 20rpx" v-if="slotProps.row.courseCatalogueEntityList[0].type==2">超 V 专享</text>
<text style="font-size: 20rpx" v-else>免费</text>
</view>
</view>
<view class="curriculum_tag_info_box price_box" v-else>

View File

@@ -12,7 +12,7 @@
}`"
>
<view
:style="`background:#000;height:200px;`"
:style="`background:${currentVideo.type==2?'#959698':'#000'};height:200px;`"
v-if="videoArray.length > 0"
>
<common-video
@@ -25,6 +25,7 @@
:currentVideoId="currentVideoId"
>
</common-video>
<view style="color: #fff"></view>
</view>

View File

@@ -184,8 +184,8 @@
<!-- slotProps.data.type---------- 0 是免费 1 普通 2 svip -->
<u-icon
v-if="
(goBuyType == 0 || goBuyType == 2) &&
slotProps.data.type != 0
(slotProps.data.type != 0 && goBuyType != 1) ||
(slotProps.data.type == 2 && goBuyType != 1)
"
@click="handleClickGetGoodsList(slotProps.data)"
class="editIcon"
@@ -252,7 +252,7 @@
<text
class="fdButtonBox aui-text-success"
style="background: none"
v-if="slotProps.row.isAudition == 1 "
v-if="slotProps.row.isAudition == 1"
>试听</text
>
@@ -673,30 +673,45 @@ export default {
this.$forceUpdate();
});
} else {
this.$http
.request({
url: this.urlList.goodsList,
method: "POST",
data: {
id: v.id,
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then(async (res) => {
if (res.productList.length > 0) {
this.goodsList = res.productList;
this.selectGoodsData = this.goodsList[0];
this.$refs.commonSelectGoods.open();
this.show = true;
} else {
this.$commonJS.showToast("此课程暂无购买方式");
}
if (v.type == 2) {
// 超v
this.$forceUpdate();
});
if (this.goBuyType != 1) {
uni.showModal({
title: "提示",
content: "当前课程目录是超V专享,开通超V可观看",
confirmText: "好的",
showCancel: false,
});
return;
}
}
if (this.goBuyType == 0 || this.goBuyType == 2) {
this.$http
.request({
url: this.urlList.goodsList,
method: "POST",
data: {
id: v.id,
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then(async (res) => {
if (res.productList.length > 0) {
this.goodsList = res.productList;
this.selectGoodsData = this.goodsList[0];
this.$refs.commonSelectGoods.open();
this.show = true;
} else {
this.$commonJS.showToast("此课程暂无购买方式");
}
this.$forceUpdate();
});
}
}
},
hancleModalConfirm() {

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@
<public-module></public-module>
<view class="header_box"></view>
<view class="appJump">
<!-- <view class="appJump">
<view class="everhealth item flexbox" @click="appjumpfun('everhealth')">
<view class="img">
<image
@@ -31,7 +31,7 @@
<text>吴门医述</text>
</view>
</view>
</view>
</view> -->
<view class="main_content_box">
<view class="curriculum_box">
<view

View File

@@ -20,7 +20,7 @@
</view>
<view class="input_box">
<uni-forms-item label="" name="account" label-width="0">
<text class="input_tit"><i>*</i>吴门医述账号:</text>
<text class="input_tit"><i>*</i>众秒之门账号:</text>
<view class="in">
<input placeholder-style="font-size:26rpx" type="text" v-model="form.account"
placeholder="请输入手机号/邮箱" />

View File

@@ -0,0 +1,144 @@
<template>
<view >
<z-nav-bar :title="yszcText.title" bgColor="#fff" fontColor="#333"></z-nav-bar>
<view class="tanchu">
<!-- <view class="dp_title" v-html="yszcText.title"></view> -->
<view class="dp_content" v-html="yszcText.content"></view>
<!-- <yhxyPage></yhxyPage> -->
</view>
</view>
</template>
<script>
export default {
data() {
return {
options:{},
yszcText: {
title: "",
content: "",
},
};
},
//第一次加载
onLoad(options) {
this.options=options;
this.getSettlement(105);
},
onReady() {},
//方法
methods: {
async getSettlement(id, type) {
console.log('id at line 57:', id)
//隐私策略
var data = await this.$commonJS.getAgreement(id);
if (data.content) {
data.content = data.content.replace(
/<h5>/g,
'<view style="font-weight: bold;font-size: 32rpx;margin-top: 20rpx;margin-bottom: 20rpx;">'
);
data.content = data.content.replace(/<\/h5>/g, "</view>");
}
this.yszcText=data
},
},
};
</script>
<style lang="scss" scoped>
.tanchu {
padding: 40rpx 30rpx 40rpx 30rpx;
position: relative;
}
.popup_box {
width: 600upx;
border-radius: 10rpx;
.popup_title {
display: flex;
justify-content: center;
height: 88upx;
line-height: 88upx;
view {
align-items: center;
font-size: 30upx;
display: flex;
image {
width: 50upx;
height: 50upx;
margin: 0 20rpx 0 0;
}
}
}
.popup_content {
padding: 30rpx 40rpx;
}
.popup_footer {
display: flex;
justify-content: center;
view {
width: 45%;
flex-shrink: 0;
text-align: center;
font-size: 28upx;
color: #999;
line-height: 70upx;
margin: 0 0 30rpx 0;
}
}
}
.dp_title {
font-size: 36rpx;
margin-bottom: 10rpx;
color: #555;
text-align: center;
font-weight: bold;
}
.dp_content {
max-height: 98%;
overflow-y: scroll;
font-size: 28rpx;
color: #555;
line-height: 45rpx;
.dp_con1 {
font-weight: bold;
font-size: 32rpx;
margin-top: 20rpx;
margin-bottom: 20rpx;
}
// .dp_con2 {
// font-size: 30rpx;
// margin-top: 10rpx;
// margin-bottom: 10rpx;
// }
}
</style>

View File

@@ -31,12 +31,7 @@
<template slot="rightSlot" slot-scope="slotProps">
<view class="right_content">
<view v-if="slotProps.row.type == 'sex'">
<text
v-if="
userData[slotProps.row.indexValue]
"
>
<text v-if="userData[slotProps.row.indexValue]">
{{
userData[slotProps.row.indexValue] == 2 ? "" : ""
}}</text
@@ -67,7 +62,10 @@
>点击绑定</view
>
</view>
<view v-if="slotProps.row.type == 'password'" @click="handleClickRightContent(slotProps.row, 'bind')">
<view
v-if="slotProps.row.type == 'password'"
@click="handleClickRightContent(slotProps.row, 'bind')"
>
{{
userData[slotProps.row.indexValue] ? "更改密码" : "设置密码"
}}
@@ -92,21 +90,18 @@
>未设置</view
>
</view>
<u-icon
v-if="
userData[slotProps.row.indexValue]&&userData[slotProps.row.indexValue]!=''
"
class="editIcon"
name="edit-pen-fill"
color="#3ab3ae"
size="22"
@click.native.stop="handleClickRightContent(slotProps.row)"
></u-icon>
<u-icon
v-if="
userData[slotProps.row.indexValue] &&
userData[slotProps.row.indexValue] != ''
"
class="editIcon"
name="edit-pen-fill"
color="#3ab3ae"
size="22"
@click.native.stop="handleClickRightContent(slotProps.row)"
></u-icon>
</view>
<text class="fdButtonBox aui-text-success">{{
slotProps.row.content
@@ -356,35 +351,32 @@
<template v-if="currentEditType == 'sex'">
<u-radio-group v-model="editForm.sex">
<view style="width: 100%">
<view
v-for="(item, index) in sexList"
class="dp_sex"
>
<view v-for="(item, index) in sexList" class="dp_sex">
{{ item.title }}
<u-radio
:key="index"
activeColor="#3AB3AE"
:name="item.id"
style="float: right; margin-top: 5rpx"
></u-radio>
</view>
</view>
</u-radio-group>
</template>
<template v-if="currentEditType == 'avatar'">
<u-upload
:fileList="fileAvatar"
@afterRead="afterRead"
@delete="deletePic"
multiple
:maxCount="1"
width="150"
height="150"
:previewFullImage="true"
>
</u-upload>
<view class="" @click="checkPermision">
<u-upload
:fileList="fileAvatar"
@afterRead="afterRead"
@delete="deletePic"
multiple
:maxCount="1"
width="150"
height="150"
:previewFullImage="true"
>
</u-upload
></view>
</template>
<u-button
@@ -396,13 +388,17 @@
<view @click="closeModal()" class="dp_canBtn"> 取消</view>
</view>
</u-popup>
<!-- <addCerInfo v-if="showSubmitInfoBlank" :submitInfo="submitInfo" @close="closeManager()" ></addCerInfo> -->
<music-play :playData="playData"></music-play>
<!-- <music-play :playData="playData"></music-play> -->
</view>
</template>
<script>
import musicPlay from "@/components/music.vue";
import permission from "@/js_sdk/wa-permission/permission.js"
// import musicPlay from "@/components/music.vue";
import $http from "@/config/requestConfig.js";
var clear;
import { mapState } from "vuex";
@@ -421,6 +417,8 @@ var enoughRegex = new RegExp("(?=.{8,}).*", "g");
export default {
data() {
return {
showCropper: false, submitInfo: {},
showSubmitInfoBlank:false,
playData: {},
userData: {},
isPassWordPhone: true,
@@ -548,10 +546,18 @@ export default {
this.getCountyCode();
},
components: {
musicPlay,
// addCerInfo
},
//方法
methods: {
async checkPermision(){
var result = await permission.premissionCheck("CAMERA_EXTERNAL_STORAGE")
if (result != 1) {
return false
}
},
handleChangeIsPassWordPhone() {
this.editForm = {};
this.isPassWordPhone = !this.isPassWordPhone;
@@ -707,8 +713,8 @@ export default {
that.userData.sex=2
}
console.log('that.userData at line 698:', that.userData)
});
}
},

View File

@@ -170,7 +170,21 @@
> -->
</view>
</template>
<template slot="bottomSlot" slot-scope="slotProps"> </template>
</common-goods-nav>
<view class="agree_wo" style="width: 100%; text-align: right">
<!-- <radio-group class="agree">
<view v-for="(item, index) in argee" :key="index">
<radio class="agreeRadio" :value="item.id" :checked="item.id == radioValue" color="#3AB3AE" size="12px"
@click="radioCheck(index)"></radio>
</view>
</radio-group> -->
<view
>支付即同意众妙之门<span class="highlight" @click="showXieyi"
>会员服务协议</span
></view
>
</view>
</view>
<!-- @close="closeOrderModalShow" -->
@@ -215,6 +229,14 @@ export default {
},
data() {
return {
radioValue: "",
argee: [
{
value: false,
id: "1",
},
], // 同意权限
xyText: "",
isDefaultCurrency: false,
isShowAddress: false,
jfNumber: 0,
@@ -320,7 +342,7 @@ export default {
},
customButton: [
{
width: "160rpx",
width: "400rpx",
text: "立即支付",
backgroundColor: "linear-gradient(90deg, #3AB3AE 0%, #117e4c 100%)",
color: "#fff",
@@ -396,6 +418,15 @@ export default {
...mapState(["userInfo"]),
},
methods: {
showXieyi() {
uni.navigateTo({
url: "/pages/mine/aboutUs/agreement?id=105",
});
},
onHandleClickBuy() {
this.orderModalShow = false;
this.remark = this.content;
@@ -531,34 +562,21 @@ export default {
},
async goBuyJie() {
debounce(async () => {
// if (this.radioValue != 1) {
// uni.showToast({
// title: "请勾选 已阅读会员服务协议",
// icon: "none",
// });
// return false;
// }
var that = this;
// if (this.addressList.length == 0) {
// this.dizhiShow = true // 如果没有地址信息
// }
// if (!this.nowClick) {
// return
// }
this.nowClick = false;
setTimeout(() => {
this.nowClick = true;
}, 5000);
// let youPre = {
// id: "",
// coupons: {
// amount: 0,
// name: "",
// },
// };
// if (this.youhuiContent.id != undefined) {
// youPre = this.youhuiContent;
// }
let xiaBiao = [];
// for (let i = 0; i < this.cartList.length; i++) {
// xiaBiao.push({
// productId: this.cartList[i].productId,
// quantity: this.cartList[i].productAmount,
// });
// }
let data = {
paymentMethod: this.payType, //1微信2支付宝3苹果支付4虚拟币
@@ -568,12 +586,9 @@ export default {
jfDeduction: 0, //积分抵扣
vipBuyConfigId: this.dataInfo.id,
come: 1, //订单来源0疯子读书1国学众妙之门2医学吴门医述
// appName: "zmzm",
};
console.log("data at line 477:", data);
await $http
.request({
// url: "book/buyOrder/buySave",
@@ -639,13 +654,6 @@ export default {
image: "../../../static/icon/ic_close.png",
});
}, 0);
// setTimeout(() => {
// uni.navigateTo({
// url: './orderList'
// });
// }, 1000)
}
}
);
@@ -900,69 +908,9 @@ export default {
// socket.init();
});
// this.$nextTick(() => {
// switch (item.type) {
// case 1:
// // allDataList
// this.dataList = that.allDataList.result1Lst
// break;
// case 2:
// this.dataList = that.allDataList.result2Lst
// break;
// case 3:
// this.dataList = that.allDataList.result3Lst
// break;
// case 4:
// this.dataList = that.allDataList.result4Lst.filter(e =>
// e.oid != '5fcf991c027b11e7ae62008cfae40c18' && e.oid != 'b3d8a938b8e147bc877613bb712a9cb3' && e.oid != '4d4730163135420ea962bfac4805e026' && e.oid != '49fb76ca3d6b43718d78c6aa9a3003c2' && e.oid != 'c7b047ed9246469b9ae2b1013fc3df9c'
// )
// console.log(this.dataList.length, 6666666)
// break;
// }
// this.currentCateIndex = item.index
// })
console.log(this.allDataList, this.dataList, "1688");
// if(this.userMes.tgdzPower == 0){
// let that = this
// uni.showModal({
// content: "购买 针灸六经法要上册和下册 后方可使用此功能",
// confirmText: '好的',
// showCancel: false,
// success: function(res) {
// if (res.confirm) {
// // console.log('用户点击确定');
// }
// }
// })
// return
// }
// if(item.title == "时辰取穴"){
// uni.navigateTo({
// url: "../timeAcupoint/timeAcupoint"
// })
// return
// }
// this.currentStatusIndex = index
this.searchValue = "";
this.searchList = [];
this.showSearchList = false;
// if (index != 2) {
// uni.createSelectorQuery().select('.statusList').boundingClientRect(function (rect) {
// var height = rect.height
// console.log('元素高度:',);
// }).exec();
// } else {
// this.getJFList(dictType)
// }
return data;
},
@@ -1831,4 +1779,21 @@ export default {
align-items: center;
justify-content: space-between;
}
.agree_wo {
float: right;
width: 100%;
color: #aaa;
font-size: 22rpx;
margin-top: -10rpx;
margin-bottom: 20rpx;
padding: 0 20rpx;
// margin: 40rpx 50rpx 0 50rpx;
// padding-bottom: 40rpx;
}
.agree {
width: auto !important;
}
.highlight {
color: $uni-color-primary;
}
</style>

View File

@@ -639,7 +639,7 @@
});
} else {
uni.showToast({
title: "请勾选 已阅读会员服务协议",
title: "请勾选 已阅读增值服务协议",
icon: "none",
});
return false;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff