This commit is contained in:
2025-04-18 16:32:32 +08:00
parent 09c087508f
commit 8e44473164
74 changed files with 24833 additions and 10335 deletions

View File

@@ -17,7 +17,7 @@
/></view>
</view>
<view v-if="deliverDetails.length > 0">
<!-- <u-tabs active-color="#2979ff" inactive-color="#606266" bar-height="6" bar-width="40"
<!-- <u-tabs active-color="#117e4c" inactive-color="#606266" bar-height="6" bar-width="40"
name="name" :list="deliverList" :is-scroll="false" :current="current" @change="tabchange"></u-tabs> -->
<view class="deliverCntent">
<view class="">

View File

@@ -174,6 +174,23 @@
<br clear="both" />
</view>
<view class="orderContent" v-if="orderContet.orderType == 'relearn'">
<image
src="/static/icon/fugou.png"
mode="aspectFill"
style="width: 100rpx; height: 100rpx"
></image>
<view class="itemJian">
<view class="orderTitle" style="line-height: 60rpx">
<text>{{ orderContet.remark }}</text>
</view>
<view class="orderPrice">
<text style="font-weight: bold">&nbsp;</text>
</view>
<br clear="both" />
</view>
<br clear="both" />
</view>
<view class="orderContent" v-if="orderContet.orderType == 'vip'">
<image
src="/static/icon/vip.png"
@@ -213,6 +230,7 @@
</view>
<view class="order_item" style="">
<view class="orderallpri">
<span style="color: #666; margin-right: 10rpx; float: left"
>商品总价 :
@@ -259,12 +277,88 @@
>- ¥{{ orderContet.vipDiscountAmount }}</span
>
</view>
<view class="orderReal" v-if="orderContet.orderType == 'order'">
<view
class="orderReal"
v-if="orderContet.couponId && orderContet.couponId != null"
>
<span style="color: #666; margin-right: 10rpx; float: left"
>优惠券 :
</span>
<span>- ¥</span>{{ orderContet.couponAmount }}
</view>
<view class="orderReal" v-if="orderContet.jfDeduction > 0">
<span style="color: #666; margin-right: 10rpx; float: left"
>积分 :
</span>
<span v-if="orderContet.jfDeduction > 0">-</span> <span>¥</span
>{{ orderContet.jfDeduction }}
<span style="color: #fa2d12" v-if="orderContet.jfDeduction > 0"
>-</span
>
<span style="color: #fa2d12"
>¥ {{ orderContet.jfDeduction }}</span
>
</view>
<view
class="orderReal"
v-if="orderContet.paymentMethod == 4 && orderContet.realMoney > 0"
>
<span style="color: #666; margin-right: 10rpx; float: left"
>天医币抵扣:
</span>
<span style="color: #fa2d12">-&nbsp;&nbsp;</span>
<span style="color: #fa2d12">¥{{ orderContet.realMoney }}</span>
</view>
<view
class="orderReal"
v-if="orderContet.orderStatus != 0"
style="margin-bottom: 20rpx"
>
<span style="color: #666; margin-right: 10rpx; float: left"
>实付款 :
</span>
<b v-if="orderContet.orderType == 'point'" style="color: #dd3c0c"
>¥ {{ orderContet.bookBuyConfigEntity.realMoney }}</b
>
<b style="color: #dd3c0c" v-else>
<template v-if="orderContet.realMoney > 0">
¥{{ orderContet.realMoney }}
<text style="font-size: 28rpx;margin-left: 10rpx;">
<span
style=""
v-if="orderContet.paymentMethod == 1"
>微信支付</span
>
<span
style=""
v-if="orderContet.paymentMethod == 2"
>支付宝支付</span
>
<span
style=""
v-if="orderContet.paymentMethod == 3"
>苹果支付</span
>
<span
style=""
v-if="orderContet.paymentMethod == 4"
>
天医币支付
</span></text
>
</template>
<text
style="margin: 0 4rpx"
v-if="
orderContet.realMoney > 0 && orderContet.jfDeduction > 0
"
>
+
</text>
<text v-if="orderContet.jfDeduction > 0"
>{{ orderContet.jfDeduction }} 积分</text
></b
>
</view>
<!-- <view class="orderReal">
<span style="color: #666; margin-right: 10rpx; float: left"
@@ -275,14 +369,7 @@
>
<b v-else style="color: #dd3c0c"><span>-¥</span>0</b>
</view> -->
<view class="orderReal" v-if="orderContet.orderStatus != 0">
<span style="color: #666; margin-right: 10rpx; float: left"
>实付款 :
</span>
<b style="color: #dd3c0c"
><span>¥</span>{{ orderContet.realMoney }}</b
>
</view>
</view>
<view class="order_item">
<view class="orderYunf">
@@ -327,9 +414,11 @@
>付款时间 :
</span>
<text style="font-size: 24rpx; color: #666">{{
orderContet.paymentDate
orderContet.paymentDate? orderContet.paymentDate:''
}}</text>
</view>
<br/>
</view>
<!-- <view class="orderReal" v-if="orderContet.orderStatus >= 2 && orderContet.orderStatus != 5">

View File

@@ -1,9 +1,5 @@
<template>
<view
class="container commonPageBox commonDetailPage"
style=""
>
<view class="container commonPageBox commonDetailPage" style="">
<!-- 公共组件-每个页面必须引入 -->
<public-module></public-module>
<z-nav-bar
@@ -39,11 +35,7 @@
<!-- 站位 -->
<!-- <view v-if="ordersListTab == 1"> -->
<view
class="order_box"
:style="`height: auto;margin-top: 40px; `"
style=""
>
<view class="order_box" :style="`height: auto;margin-top: 40px; `" style="margin-bottom: 40px;">
<common-list
imgUrl="url"
indexKey="orderSn"
@@ -130,7 +122,41 @@
>
</view>
</view>
<view
v-if="slotProps.row.orderType == 'relearn'"
class="bookinfolist"
>
<image
class="feng fengPoint"
src="/static/icon/fugou.png"
mode="aspectFill"
>
</image>
<!-- <view class="description" >课程复读订单
</view> -->
<view class="btns flexbox">
<view class="booknameleft">
{{ slotProps.row.remark }}
</view>
<view
style="
line-height: 58rpx;
color: #333;
font-size: 26rpx;
font-weight: 700;
"
>
<text style="font-size: 20rpx"></text>
</view>
</view>
<!-- <view
class="btns flexbox"
style="color: #9f9f9f; margin-top: 10rpx; font-size: 24rpx"
>
下单时间{{ slotProps.row.createTime }}
</view> -->
</view>
<view
v-if="slotProps.row.orderType == 'vip'"
class="bookinfolist"
@@ -322,64 +348,32 @@
font-weight: 700;
"
>
<text style="font-size: 20rpx"></text>
{{
slotProps.row.realMoney ||
slotProps.row.realMoney == 0
? slotProps.row.realMoney
: ""
}}
<!-- <text style="font-size: 20rpx"></text> -->
<text v-if="slotProps.row.orderType == 'point'">
{{ slotProps.row.bookBuyConfigEntity.realMoney }}
</text>
<template v-if="slotProps.row.realMoney > 0&&slotProps.row.orderType != 'point'">
{{ slotProps.row.realMoney }}
</template>
<text
style="margin: 0 4rpx"
v-if="
slotProps.row.realMoney > 0 &&
slotProps.row.jfDeduction > 0&&slotProps.row.orderType != 'point'
"
>
+
</text>
<text v-if="slotProps.row.jfDeduction > 0&&slotProps.row.orderType != 'point'"
>{{ slotProps.row.jfDeduction }} 积分</text
>
</view>
</view>
</view>
<view
class="btns flexbox"
style="
margin-top: 0rpx;
float: right;
width: auto;
margin-left: 20rpx;
"
v-if="
(slotProps.row.addressId == 0 ||
slotProps.row.addressId == null) &&
slotProps.row.orderType == 'order' &&
slotProps.row.jfDeduction > 0
"
>
<view
class="right flexbox opbtns"
style="
line-height: 44rpx;
letter-spacing: 1rpx;
display: flex;
align-items: center;
"
><text style="color: #9b9b9b"> </text>
<view
style="
line-height: 46rpx;
color: #9b9b9b;
font-size: 24rpx;
font-weight: 500;
margin-right: 10rpx;
"
>积分抵扣</view
>
<view
style="
/* margin-top: 8rpx; */
line-height: 46rpx;
color: #9b9b9b;
font-size: 26rpx;
font-weight: 700;
"
>
<text style="font-size: 20rpx">¥</text>
{{ slotProps.row.jfDeduction }}
</view> </view
><text style="color: #9b9b9b"></text>
</view>
</view>
<view
@@ -982,7 +976,7 @@ export default {
});
}
this.getOrderList();
},
}
);
} else if (payItem.paymentMethod == 1) {
console.log("微信支付");
@@ -1282,7 +1276,7 @@ export default {
//匹配最后一个表情符号并删除11。
this.Pform.comment = this.Pform.comment.replace(
/(\[[^\]]+\]|[\s\S])$/,
"",
""
);
if (this.emoji.length > 0) {
this.emoji = this.emoji.slice(0, -1);
@@ -1642,7 +1636,7 @@ export default {
.cateList {
width: 100%;
position: fixed !important;
z-index: 970;
z-index: 970;
}
/deep/.u-tabs__wrapper__nav__item {

View File

@@ -55,7 +55,7 @@
><uni-easyinput
:maxlength="16"
:style="{
borderColor: '#2979FF',
borderColor: '#117e4c',
}"
v-model="addForm.consigneeName"
placeholder="请输入收件人姓名"

View File

@@ -146,7 +146,8 @@ export default {
}
.titleItem {
width: calc(100% );
width: calc(100%) !important;
// display: block !important;
justify-content: space-between;
}

File diff suppressed because it is too large Load Diff

View File

@@ -77,10 +77,14 @@
<template slot="labelSlot" slot-scope="slotProps">
<!-- isSelectGoods -->
<view
style="width: 100%;"
class="related_courses_name"
:class="`goods_item ${
selectGoodsData &&
selectGoodsData.productId == slotProps.row.productId
(!isFudu &&
selectGoodsData &&
selectGoodsData.productId == slotProps.row.productId) ||
(isFudu &&
selectGoodsData.productName == slotProps.row.productName)
? 'isSelectGoods color_shandow'
: ''
}`"
@@ -98,7 +102,7 @@
<view class="" style="align-items: center">
<!-- <text style="color: #999; text-decoration: line-through; margin-right: 20rpx;"
v-if="slotProps.row.activityPrice > 0 && slotProps.row.activityPrice < slotProps.row.price" >¥{{slotProps.row.price}}</text>
<view class="price" style="color: #258feb"
<view class="price" style="color: #3AB3AE "
>¥{{ slotProps.row.activityPrice?slotProps.row.activityPrice:slotProps.row.price }}</view
></view
> -->
@@ -163,7 +167,8 @@ export default {
"isScroll",
"selectGoodsData",
"customButtonGroup1",
"buyOptions",
"buyOptions", "isFudu", // 是否复读
"type", // 页面类型
],
data() {
return {

View File

@@ -0,0 +1,393 @@
<template>
<view
class="container commonPageBox commonDetailPage"
style="height: auto !important; padding-bottom: 0 !important"
>
<u-popup
:show="show"
v-if="show"
mode="bottom"
@close="close"
class="popup_box"
>
<view class="popup_top">
<!-- @click="previewImage(selectGoodsData.productImages)" -->
<view class="product_image">
<image
src="@/static/icon/vip.png"
mode="aspectFit"
class="goods_image"
></image>
</view>
<view class="title">已选{{ selectGoodsData.title }}&nbsp;{{ selectGoodsData.year }}</view>
</view>
<view :class="`common_radius_box goods_box popup_content`">
<view class="title title_box"
>
<text style="color: #e97512; font-weight: bold;font-size: 30rpx;">
{{ Number(selectGoodsData.rebateFee).toFixed(2) }}</text
>
</text>
<u-icon
name="close"
color="#333"
size="18"
@click="close"
style="display: inline-block"
></u-icon
></view>
<view class="title title_list"
><text>VIP商品列表{{ goodsList.length }}</text></view
>
<common-list
imgUrl="url"
isNoIcon
imgMode="aspectFit"
defaultUrl=""
:isCondition="true"
:dataList="goodsList"
@hancleClick="selectGoods"
label="title"
>
<template slot="labelSlot" slot-scope="slotProps">
<!-- isSelectGoods -->
<view
class="related_courses_name"
:class="`goods_item ${
(
selectGoodsData &&
selectGoodsData.id == slotProps.row.id)
? 'isSelectGoods color_shandow'
: ''
}`"
>
<view class="image_box" style="margin-right: 10rpx">
<image
src="@/static/icon/vip.png"
mode="aspectFit"
class="goods_image"
></image>
</view>
<view :class="`goods_info just`" style="">
<view class="name">{{ slotProps.row.title }}<text style="color: #ff2e4d;margin-left: 10rpx;">{{ slotProps.row.year }}</text></view>
<view class="flex_box" style="align-items: center">
<!-- <text style="color: #999; text-decoration: line-through; margin-right: 20rpx;"
v-if="slotProps.row.activityPrice > 0 && slotProps.row.activityPrice < slotProps.row.price" >{{slotProps.row.price}}</text>
<view class="price" style="color: #3AB3AE"
>{{ slotProps.row.activityPrice?slotProps.row.activityPrice:slotProps.row.price }}</view
></view
> -->
<text ><span style="color: #e97512;">
{{Number(slotProps.row.rebateFee).toFixed(2)}}</span>
</text>
</view>
</view>
</view>
<!-- <text v-if="slotProps.row.conditions!='03'">试听</text> -->
</template>
</common-list>
<view class="goods_nav_box">
<uni-goods-nav
:fill="true"
:options="buyOptions"
:button-group="customButtonGroup1"
@click="onHandleClickBuy"
@buttonClick="onHandleClickBuy"
/>
</view>
<!-- <view>
<text @click="handleClickClose">取消</text>
<text @click="handleClickGoBuy">立即购买</text>
</view>-->
</view>
</u-popup></view
>
</template>
<script>
import { mapState } from "vuex";
export default {
props: [
"goodsList",
"label",
"isCondition",
"imgUrl",
"imgMode",
"className",
"col",
"defaultUrl",
"isScroll",
"selectGoodsData",
"customButtonGroup1",
"buyOptions",
"isFudu", // 是否复读
"type", // 页面类型
],
data() {
return {
show: false,
};
},
onLoad() {},
onHide() {
// this.showSearchList = false
// this.searchList = []
},
computed: {
...mapState(["userInfo"]),
},
methods: {
getPrice(slotProps) {
if (
Number(slotProps.row.isVipPrice) === 1 &&
Number(slotProps.row.vipPrice) > 0
) {
return `
<text style="color: #e97512; font-size: 12px; font-weight: bold;">
${Number(slotProps.row.vipPrice).toFixed(2)}
</text>
<text
style="color: #8a8a8a; font-size: 10px; margin-left: 4px; font-weight: bold; text-decoration: line-through;"
>
${Number(slotProps.row.price).toFixed(2)}
</text>
`;
} else if (Number(slotProps.row.activityPrice) > 0) {
return `
<text style="color: #e97512; font-size: 12px; font-weight: bold;">
${Number(slotProps.row.activityPrice).toFixed(2)}
</text>
<text
style="color: #8a8a8a; font-size: 10px; margin-left: 4px; font-weight: bold; text-decoration: line-through;"
>
${Number(slotProps.row.price).toFixed(2)}
</text>
`;
} else {
return `<span style="color: #e97512;">
${Number(slotProps.row.price).toFixed(2)}</span>
`;
}
},
// 放大图片
previewImage(url) {
console.log(url);
uni.previewImage({
urls: [url],
longPressActions: {
itemList: ["很抱歉,暂不支持保存图片到本地"],
success: function (res) {
// console.log(res,'+++++')
},
},
});
},
close() {
this.show = false;
},
selectGoods(data) {
this.$emit("selectGoods", data);
},
open() {
this.show = true;
},
gotoDetail(v) {
this.$emit("hancleClick", v);
},
onHandleClickBuy() {
// this.$emit("selectGoodsData", this.selectGoodsData);
setTimeout(() => {
this.$emit("onHandleClickBuy");
}, 200);
},
},
onBackPress() {
// #ifdef APP-PLUS
plus.key.hideSoftKeybord();
// #endif
},
components: {},
};
</script>
<style lang="scss" scoped>
@import "@/style/mixin.scss";
.goods_item {
overflow: hidden;
display: flex;
align-items: center;
justify-content: space-between;
// margin-bottom: 20rpx;
padding: 10rpx 20rpx;
border: 2rpx solid #fff;
border-radius: 10rpx;
}
.title {
box-sizing: border-box;
// font-weight: bold;
margin-bottom: 40rpx;
padding-left: 20rpx;
}
.image_box {
width: 70rpx;
height: 70rpx;
float: left;
background-color: #f5f5f5;
}
.goods_image {
width: 100%;
height: 100%;
}
.goods_info {
width: calc(100%);
// padding: 10rpx 20rpx;
box-sizing: border-box;
// height: 100rpx;
// display: flex;
// align-items: center;
// justify-content: space-between;
float: left;
.name {
font-size: 26rpx;
// font-weight: 600;
color: #333;
}
.price {
font-size: 26rpx;
color: #aaa;
}
}
.isSelectGoods {
color: $themeColor !important;
.name {
color: $themeColor !important;
}
.price {
color: $themeColor !important;
}
border: 2rpx solid $themeColor;
border-radius: 10rpx;
}
/deep/.list_item {
// border-bottom: none;
padding: 10rpx 0 !important;
padding-right: 0 !important;
}
.goods_image {
width: 100%;
height: 100%;
}
.curriulum_box {
margin-top: 20rpx;
width: 100%;
.curriulum_title_box {
display: flex;
align-items: center;
margin-bottom: 20rpx;
background-color: #fff;
.curriulum_title {
width: calc(100% - 80rpx);
font-size: 38rpx;
line-height: 40rpx;
padding: 20rpx;
box-sizing: border-box;
}
}
}
.goods_box {
background-color: #fff;
// margin-top: 20rpx;
// padding: 40rpx 30rpx;
box-sizing: border-box;
width: 100%;
.curriulum_title_box {
width: calc(100%) !important;
padding-bottom: 20rpx;
background-color: #fff;
.curriulum_title {
width: calc(100%);
font-weight: 600;
font-size: 34rpx;
// line-height: 40rpx;
// display: flex;
// align-items: center;
margin-top: 80rpx;
margin-bottom: 0rpx;
// padding: 20rpx;
box-sizing: border-box;
}
}
}
.popup_box {
padding-top: 30rpx;
background-color: transparent;
.popup_top {
display: flex;
align-items: center;
color: #fff;
margin-bottom: 20rpx;
padding: 0 20rpx;
.title {
margin-bottom: 0;
font-size: 30rpx;
font-weight: 600;
}
}
.popup_content {
padding-bottom: 140rpx;
}
/deep/.list_item {
// border-bottom: none;
border: none !important;
box-shadow: none !important;
}
.product_image {
width: 120rpx;
height: 120rpx;
border-radius: 10rpx;
// background-color: #f5f5f5;
// margin: 0 auto;
}
}
/deep/.u-popup__content {
background-color: transparent !important;
}
/deep/.u-popup__content__close {
color: #fff !important;
}
.title_box {
display: flex;
align-items: center;
justify-content: space-between;
padding-left: 0;
.title_price {
color: #ef1224;
font-size: 40rpx;
font-weight: 700;
}
}
</style>

1074
pages/course/myCourse.vue Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -123,7 +123,7 @@ export default{
color: #fff;
padding: 0 12rpx;
border-radius: 15rpx;
background-image: linear-gradient(90deg, #258feb 0%, #00e1ec 100%);
background-image: linear-gradient(90deg, #3AB3AE 0%, #00e1ec 100%);
}
.vip_item_special .vip_item_title{
height: 50rpx;
@@ -190,7 +190,7 @@ export default{
}
.line{
text-decoration: line-through;
color: #258feb;
color: #3AB3AE ;
font-style: italic;
}
.vip_item_flag{

View File

@@ -781,6 +781,7 @@
}
.titleItem {
width: 100%;
display: flex;
align-items: center;
}

View File

@@ -139,7 +139,7 @@
</view>
<view class="right">
<u-icon
<!-- <u-icon
v-if="
userVip == null &&
slotProps.data.type != 0 &&
@@ -151,7 +151,7 @@
color="#FF2B57"
size="30"
style="display: inline-block; margin-left: 10rpx"
></u-icon>
></u-icon> -->
<text
v-if="
@@ -168,9 +168,51 @@
</view>
</view>
</view>
</template>
<template slot="contentList" slot-scope="slotProps">
<view
v-if="
userVip == null &&
slotProps.data.type != 0 &&
slotProps.data.isBuy != 1
"
style="margin-bottom: 20rpx;"
>
<view class="libOther">
<!-- 没有观看权限的时候 -->
<view class="text">
您未购买此目录课程或已到期购买后或开通VIP即可学习本目录课程
</view>
<view class="tag-view flex_box">
<u-button
class="btn"
type="warning"
size="small"
@click="handleClickGetGoodsList(slotProps.data)"
text="购买课程"
></u-button>
<u-button
class="btn"
type="success"
size="small"
@click="goNewPay(slotProps.data)"
text="复读"
v-if="showNewPayBtn[slotProps.index]&&showNewPayBtn[slotProps.index].status"
></u-button>
<u-button
size="small"
class="btn"
type="primary"
@click="onPageJump('/pages/mine/vip/index')"
text="开通VIP"
></u-button>
</view>
</view>
</view>
<view class="containerBg2">
<view class="shiting_content">
<view class="catalogueList">
@@ -217,7 +259,7 @@
slotProps1.row.isAudition == 0
"
name="lock"
color="#258feb"
color="#3AB3AE "
size="24"
></u-icon>
</view>
@@ -229,7 +271,7 @@
slotProps.data.isBuy == 0
"
name="lock"
color="#258feb"
color="#3AB3AE "
size="24"
></u-icon>
</view>
@@ -276,6 +318,7 @@
</template>
</common-anchor-link>
<common-select-goods
:isFudu="isFudu"
ref="commonSelectGoods"
:selectGoodsData="selectGoodsData"
:goodsList="goodsList"
@@ -345,6 +388,10 @@ export default {
},
data() {
return {
fuduId:null,
isFudu:false,
showNewPayBtn: [],
isHideCourseInfo: false,
courseList: [],
showGoBuy: true,
@@ -427,6 +474,8 @@ export default {
list: "sociology/course/getCourseDetail",
goodsList: "sociology/product/getProductListForCourse",
startStudyForMF: "sociology/course/startStudyForMF",
newPayment:"common/courseRelearn/courseCatalogueCanRelearn", // 检查复读地址
newPaymentList:"common/courseRelearn/relearnShopProductList", // 获取复读列表
},
userVip: null, //是否有vip
textList: [], //转化文字集合
@@ -458,7 +507,87 @@ export default {
this.getCourseDescriptionData();
});
},
methods: {
methods: { // 选择复读选项
async goNewPay(item){
await this.getNewPaymentList(item.id)
if(this.newPaymentProList.length > 0){
this.goodsList = this.newPaymentProList;
this.selectGoodsData = this.goodsList[0];
this.$refs.commonSelectGoods.open();
this.isFudu = true
this.show = true;
//存复读需要的id
this.fuduId = item.id;
}else{
this.show = false
this.isFudu = false
this.$commonJS.showToast('暂无复读方案');
}
},
async getNewPaymentList(id){
uni.showLoading({
title:'加载中'
})
await this.$http
.request({
url: this.urlList.newPaymentList,
method: "POST",
data: {
catalogueId: id,
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then(async (res) => {
console.log("复读列表", res);
uni.hideLoading()
if(res.code != 0){return this.$commonJS.showToast(res.errMsg);}
// if (res.code == 0) {
this.newPaymentProList = res.productList
// }
this.$forceUpdate();
}).catch(e => {
uni.hideLoading()
console.log('e',e);
this.newPaymentProList = []
this.$commonJS.showToast(e.errMsg);
});
},
// 查询目录续费情况
async checkRenewPayment(id) {
var ss = false;
await this.$http
.request({
url: this.urlList.newPayment,
method: "POST",
data: {
courseCatalogueId: id,
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then(async (res) => {
console.log("res at line 493:", res);
if (res.code != 0) {
// return this.$commonJS.showToast(res.errMsg);
}
if (res.code == 0) {
ss = res.canRelearn;
}
this.$forceUpdate();
})
.catch((e) => {
console.log("e", e);
ss = false;
this.$commonJS.showToast(e.errMsg);
});
return ss;
},
//点击顶部按钮
handleClickGetVip() {
uni.navigateTo({
@@ -585,6 +714,8 @@ export default {
navTitle: this.options.navTitle,
title: this.options.title,
sourceType: "curriculum",
isFudu: this.isFudu,
fuduId: this.fuduId
}); // 这里转换成 字符串
uni.navigateTo({
url: `/pages/goods/order/index?data=${mynavData}`,
@@ -618,6 +749,11 @@ export default {
}
this.$forceUpdate();
});
this.$nextTick(() => {
setTimeout(() => {
this.getCourseDescriptionData();
}, 500);
});
} else if (v.type == 2 && this.userVip == null) {
uni.showModal({
title: "提示",
@@ -628,11 +764,7 @@ export default {
} else {
this.getProductListForCourse(v);
}
this.$nextTick(() => {
setTimeout(() => {
this.getCourseDescriptionData();
}, 500);
});
},
getProductListForCourse(v) {
@@ -799,8 +931,16 @@ export default {
that.curriculumData = res.data.course;
that.cateList = [...res.data.catalogues];
for (let i = 0; i < that.cateList.length; i++) {
this.showNewPayBtn[i]={status:false}
console.log('at line 876:',this.showNewPayBtn[i] )
var list = await that.getChapterList(that.cateList[i]);
if (that.cateList[i].isBuy == 0 && this.userVip == null) {
that.showNewPayBtn[i].status = await this.checkRenewPayment(that.cateList[i].id);
console.log("可以复读吗?", this.showNewPayBtn);
} else {
console.log("不用复读");
} console.log('this.showNewPayBtn at line 877:', this.showNewPayBtn)
that.allDataList[i] = {
...that.cateList[i],
courseList: [...list],
@@ -812,7 +952,11 @@ export default {
}, 200);
this.$forceUpdate();
});
},
}, onPageJump(url, id) {
uni.navigateTo({
url: `${url}?id=${id}`,
});
},
getPriceData() {
var that = this;
setTimeout(() => {
@@ -1667,7 +1811,7 @@ export default {
.describe_block {
padding: 15rpx 20rpx;
background: linear-gradient(90deg, #258feb 0%, #00e1ec 100%);
background: linear-gradient(90deg, #3ab3ae 0%, #00e1ec 100%);
position: fixed;
left: 0;
width: 100%;
@@ -1691,5 +1835,26 @@ export default {
border-radius: 10rpx;
line-height: 50rpx;
height: 50rpx;
}
}.libOther {
border: 1px solid #fff;
border-radius: 10rpx;
text-align: center;
background-color: rgba(0, 0, 0, .4);
padding: 10rpx;
.text {
font-size: 26rpx;
line-height: 40rpx;
margin-bottom: 20rpx;
color: #fff;
}
}.tag-view {
justify-content: center;
margin-bottom: 20rpx;
.btn {
width: 40%;
margin: 0 20rpx;
}
}
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -324,7 +324,7 @@ export default {
},
{
name: "我的课程",
url: "/pages/curriculum/order/index/index",
url: "/pages/course/myCourse",
// url: "",
imgUrl: require("@/static/icon/homePage/wdkc.png"),
},

351
pages/hufen/hufen.vue Normal file
View File

@@ -0,0 +1,351 @@
<template>
<view class="commonPageBox">
<!-- 公共组件-每个页面必须引入 -->
<public-module></public-module>
<z-nav-bar title="我的湖分" bgColor="#3ab3ae" fontColor="#fff">
<!-- <uni-icons type="bars" class="topRight" slot="right" @click="showDrawer('showRight')" size="22"></uni-icons> -->
</z-nav-bar>
<view class="xiugai">
<common-list
:dataList="tabList"
@hancleClick="handleClickTab"
label="name"
>
<template slot="rightSlot" slot-scope="slotProps">
<text
class="fdButtonBox aui-text-success"
style="
line-height: 40rpx;
font-size: 36rpx;
float: right;
color: #3AB3AE !important;
font-weight: bold;
"
>{{ slotProps.row.score }}<text style="font-size: 30rpx;margin-left: 4rpx;">湖分</text></text
>
</template>
</common-list>
</view>
<u-popup mode="bottom" :show="show" border-radius="10" @close="show=false">
<view class="content" style="height: 50vh">
<p style="height: 90rpx" class="popupTitle">
{{ currentData.name }} 湖分记录
</p>
<scroll-view scroll-y="true" style="height: calc(100% - 210rpx)">
<view style="padding: 20rpx; box-sizing: border-box">
<!-- <view v-for="index in 20" :key="index"> {{ index }}个Item </view> -->
<view class="AC_con">
<!-- <view class="AC_jilu PM_font">湖分记录</view> -->
<common-list
:dataList="MoneyRecord"
isCondition="true"
isNoIcon="true"
label="orderType"
>
<template slot="labelSlot" slot-scope="slotProps">
<view class="label_content AC_List">
<view class="left">
<view class="title"
><view class="AC_time"
>{{ slotProps.row.createTime }}
</view></view
>
</view>
<view
:class="`right ${slotProps.row.score > 0 ? 'Hot' : ''}`"
>
<text
v-if="slotProps.row.score > 0"
style="color: #3ab3ae"
>+</text
>
<text style="color: #3ab3ae">{{
slotProps.row.score
}}</text> </view
><view class="AC_mark" v-if="slotProps.row.detail">{{
slotProps.row.detail
}}</view>
</view>
<!-- <text class="order" style="font-size: 12px;" v-if="slotProps.row.relationId" @click="goClick(slotProps.row.relationId)">订单详情</text> -->
</template>
</common-list>
</view>
</view>
</scroll-view>
<view class="confrim-btn">
<u-button
style="
width: 90%;
margin: 0 auto;
margin-top: 20rpx;
color: #1d1d1d;
border: 1rpx solid #a0a0a0;
"
@click="show = false"
>关闭</u-button
>
</view>
</view>
</u-popup>
</view>
</template>
<script>
var clear;
import { mapState } from "vuex";
export default {
data() {
return {
tabList: [],
MoneyRecord: [],
pageList: [],
show: false,
currentData: {},
};
},
//第一次加载
onLoad(e) {
// 隐藏原生的tabbar
uni.hideTabBar();
},
computed: {
...mapState(["userInfo"]),
videoHTML() {
return `<video class="video-box" poster="http://ehh-public-01.oss-cn-beijing.aliyuncs.com/wumenyishu-image/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20240606110049.jpg" src="${this.videoUrl}" enable-danmu danmu-btn controls style="width:100%;height:320rpx"></video>`;
},
},
//页面显示
onShow() {
// 隐藏原生的tabbar
uni.hideTabBar();
this.getData();
},
onUnload() {
// #ifdef APP-PLUS
plus.screen.lockOrientation("portrait-primary"); // 清除横屏
// #endif
this.showTemp = true;
this.videoContext = null;
},
onPullDownRefresh() {
uni.stopPullDownRefresh();
},
components: {
// curriculumVideo,
},
//方法
methods: {
async handleClickTab(e) {
this.currentData = e;
console.log("e at line 78:", e);
await this.gethufenData();
this.show = true;
console.log(e);
this.$forceUpdate();
// this.tabList = e;
},
getPointsType(type) {
var str = "";
switch (type) {
case "01":
return "在线教学";
case "03":
return "学术期刊";
case "05":
return "太湖讲堂";
case "07":
return "创作技术";
case "11":
return "注册邀请";
case "13":
return "课程邀请";
}
},
async gethufenData(type) {
await this.$http
.request({
url: "common/userContribution/getUserContributionByType",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data: {
current: 1,
limit: 999999,
type: this.currentData.type,
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then((res) => {
console.log("res at line 296:", res.list);
if (res.code == 0 && res.list.records.length > 0) {
this.MoneyRecord = [];
this.MoneyRecord = res.list.records;
} else {
this.MoneyRecord = [];
}
})
.catch((e) => {
console.log(e, "报错");
});
},
async getData() {
await this.$http
.post("common/userContribution/getUserContribution")
.then((res) => {
console.log("res at line 296:", res.list);
if (res.code == 0 && res.list.length > 0) {
this.tabList = [];
this.tabList = res.list.map((e) => {
return { ...e, name: e.dict_value };
});
} else {
this.tabList = [];
}
})
.catch((e) => {
console.log(e, "报错");
});
},
},
};
</script>
<style scoped lang="scss">
.AC_List {
overflow: hidden;
.left {
width: calc(100% - 200rpx) !important;
// font-weight: 700;
float: left;
color: #333;
font-size: 38rpx;
line-height: 40rpx;
}
.right {
display: block;
width: 200rpx !important;
float: right;
text-align: right;
font-size: 38rpx;
// font-weight: 700;
color: #333;
}
// border-bottom: 1px solid #eee;
// padding: 40rpx 10rpx;
.AC_title {
font-size: 32rpx;
margin-bottom: 20rpx;
view {
float: right;
font-size: 34rpx;
font-weight: bold;
}
}
.AC_mark {
width: 100%;
font-size: 28rpx;
margin-top: 10rpx;
margin-bottom: 15rpx;
// white-space: nowrap;
color: #343434;
float: left;
overflow: hidden;
}
.AC_time {
// width: 100%;
color: #909090;
font-size: 28rpx;
}
}
.popupTitle {
padding-top: 10rpx;
box-sizing: border-box;
font-size: 42rpx;
// font-weight: bold;
text-align: center;
font-family: PangMenZhengDaoBiaoTiTiMianFeiBan;
line-height: 60rpx;
color: #3ab3ae;
}
.grid-text {
font-size: 28rpx;
margin-top: 4rpx;
}
.commonPageBox {
height: 100vh;
// background-image: url("@/static/icon/mine_bg.png");
background-repeat: no-repeat;
background-size: 100% 100%;
background-image: linear-gradient(
-60deg,
#f4fcf6 0%, /* 极浅的绿白色 */
#e8f7f0 40%, /* 轻微绿色调的浅色 */
#d8f3e6 60%, /* 非常浅的绿色 */
#f0fdf9 80%, /* 淡绿色与白色的混合 */
#f9fffb 100% /* 接近白色的极浅绿色 */
);
// background-color: #d8f8e4 !important;
}
.xiugai {
border-radius: 20rpx !important;
margin: 20rpx;
// padding:0 40rpx;
background: #fff;
.nav_list {
background-color: #b7e0e2;
padding: 15rpx 0 15rpx 10rpx;
display: flex;
align-items: center;
font-size: 22rpx;
position: relative;
font-weight: bold;
border-bottom: 1px solid #e5e5e5;
&:active {
background-color: #f5f5f5;
}
text {
color: #333;
margin-left: 10rpx;
}
&::after {
content: "";
position: absolute;
right: 20rpx;
top: 50%;
transform: translateY(-50%);
width: 30rpx;
height: 30rpx;
background-image: url("@/static/icon/icon_right.png");
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
}
}
.nav_list:nth-last-child(1) {
border-bottom: 0;
}
}
</style>

View File

@@ -247,10 +247,10 @@
<template slot="rightSlot" slot-scope="slotProps">
<text
class="fdButtonBox aui-text-success"
style="line-height: 40rpx"
>{{ slotProps.row.content }}</text
v-if="slotProps.row.contentType&&slotProps.row.contentType == 'hufen'&&hufenNumber>0"
style="line-height: 40rpx; font-size: 40rpx;color: #3AB3AE;float: right;"
>{{ hufenNumber }}<text style="font-size: 30rpx;margin-left: 4rpx;">湖分</text></text
>
<view> </view>
</template>
</common-list>
@@ -316,7 +316,7 @@ import $http from "@/config/requestConfig.js";
import { mapState, mapMutations } from "vuex";
export default {
data() {
return {
return {hufenNumber: 0,
userCouponNum: 0,
come: "1",
orderList: [
@@ -384,7 +384,11 @@ export default {
url: "/pages/bookShop/orderList?type=mine",
type: "switchTab",
},
},{
name: "我的湖分",
url: "/pages/hufen/hufen",
type: "pageJump", contentType: "hufen",
},
{
name: "个人资料",
url: "/pages/mine/userInfo/persData",
@@ -430,6 +434,7 @@ export default {
onShow() {
this.getBookList();
this.getData();
this.gethufenData();
//获取vip身份
this.textList = [];
this.getUserVipType();
@@ -443,7 +448,20 @@ export default {
},
//方法
methods: {
...mapMutations(["setUserInfo"]),
...mapMutations(["setUserInfo"]), async gethufenData() {
await this.$http
.post("common/userContribution/getUserContribution")
.then((res) => {
console.log("res at line 296:", res);
if (res.code == 0) {
this.hufenNumber = res.total;
} else {
}
})
.catch((e) => {
console.log(e, "报错");
});
},
async getUserCouponList() {
await this.$http
.request({
@@ -1432,7 +1450,7 @@ uni-page-body {
align-items: center;
justify-content: center;
padding: 0 10rpx;
background: linear-gradient(90deg, #258feb 0%, #00e1ec 100%);
background: linear-gradient(90deg, #3AB3AE 0%, #00e1ec 100%);
border-radius: 20rpx;
font-size: 18rpx;
line-height: 40rpx;

View File

@@ -736,7 +736,7 @@ export default {
//console.log('中等密码-----',value)
this.passNote =
"请至少使用大小写字母、数字、符号两种类型组合的密码长度为8位。";
this.passStr = "<span style='color:#2979ff'>密码强度中等!</span>";
this.passStr = "<span style='color:#117e4c'>密码强度中等!</span>";
this.passwordOk = true;
} else if (enoughRegex.test(value)) {
//console.log('弱密码-----',value)

View File

@@ -0,0 +1,351 @@
<template>
<view class="commonPageBox">
<z-nav-bar title="VIP"></z-nav-bar>
<view class="vip_block">
<view
class="vip_item"
:class="[
item.type == 1 || item.type == 2 ? 'vip_item_special' : '',
item.state == 1 ? 'vip_item_overdue' : '',
(item.type == 1 && item.state == 0) ||
(item.type == 2 && item.state == 0)
? 'vip_item_bg_1'
: '',
item.type != 1 && item.type != 2 && item.state == 0
? 'vip_item_bg_2'
: '',
]"
v-for="(item, index) in list"
:key="index"
>
<view>
<text class="vip_item_title">{{ item.title }}</text>
<text class="vip_item_tip" v-if="item.tip && item.tip < 100"
><uni-icons type="info" size="17" color="#ff1f00"></uni-icons>还有{{item.tip}}天到期</text
>
<text class="vip_item_flag" v-if="item.state == 1">
<uni-icons type="info" size="17" color="#999"></uni-icons>已过期
</text>
</view>
<view class="vip_price" style="padding-top: 10rpx">
<text class="font_bold">课程价格</text>
<view class="vip_qx_v">一年<text class="vip_fee line">{{ item.originalPrice || 0 }}</text></view>
</view>
<view v-if="$platform!='ios'">
<text
class="vip_item_btn"
v-if="item.state == null"
@click="openorderModal(item, 0)"
>去办理</text
>
<text class="vip_item_btn" v-else @click="openorderModal(item, 0)"
>去续费</text
>
</view>
<view class="vip_price" v-if="item.vcbList && item.vcbList.length > 0">
<text class="font_bold" v-if="item.type == 1 || item.type == 2"
>超级VIP价格</text
>
<text class="font_bold" v-else>VIP价格</text>
<text
class="vip_price_v"
v-for="(item_price, index_price) in item.vcbList"
:key="index_price"
@click="openorderModal(item_price)"
>
{{ item_price.year }}<text>{{ item_price.rebateFee }}</text
>
</text>
</view>
<view
class="vip_price"
v-if="item.yanqiList && item.yanqiList.length > 0"
>
<text class="font_bold">延期价格</text>
<text
class="vip_price_v"
v-for="(item_yq, index_yq) in item.yanqiList"
:key="index_yq"
@click="openorderModal(item_yq, 1)"
>
{{ item_yq.year }}<text>{{ item_yq.rebateFee }}</text
>
</text>
</view>
<view class="vip_qx">
<text class="font_bold" style="display: block">VIP权限</text>
<view class="vip_qx_v" v-if="item.type == 1"
>无限制观看吴门医述APP中医学中西汇通学针灸学肿瘤学四个板块任意课程</view
>
<view class="vip_qx_v" v-else-if="item.type == 2"
>无限制观看众妙之门APP与吴门医述APP心理学板块任意课程</view
>
<view class="vip_qx_v" v-else-if="item.type == 7"
>无限制观看众妙之门APP任意课程</view
>
<view class="vip_qx_v" v-else
>无限制观看吴门医述APP{{
item.title.replace(/VIP/g, "")
}}板块任意课程</view
>
<view class="vip_qx_v">
<text v-if="item.type == 1 || item.type == 2">{{
item.title.replace(/超级VIP/g, "")
}}</text>
<text v-else>{{ item.title.replace(/VIP/g, "") }}</text>
培训班报名享受<text
class="vip_fee"
v-if="item.type == 1 || item.type == 2"
>8</text
><text class="vip_fee" v-else>9折</text>优惠
</view>
<view class="vip_qx_v"
>疯子读书APP购书享受<text
class="vip_fee"
v-if="item.type == 1 || item.type == 2"
>8</text
><text class="vip_fee" v-else>9折</text>优惠</view
>
</view>
</view>
</view>
<u-popup :show="orderModalShow" mode="bottom" :round="20">
<view class="orderModalShow popup_box">
<u-icon
name="close"
color="#333"
size="18"
@click="closeOrderModalShow"
style="
display: inline-block;
position: absolute;
right: 20rpx;
top: 20rpx;
"
></u-icon>
<orderPay ref="orderPay" :dataInfo="selectVipData"></orderPay>
</view>
</u-popup>
</view>
</template>
<script>
import $http from "@/config/requestConfig.js";
import orderPay from "./order.vue";
export default {
data() {
return {
type: 0,
text: "", //针对不同type展示文案
list: [],
orderModalShow: false,
selectVipData: {},
};
},
components: {
orderPay,
},
onLoad() {
this.getData();
},
onShow() {},
methods: {
//获取数据
getData() {
uni.showLoading({
title: "加载中",
});
$http
.request({
url: "common/userVip/getVipBuyConfigList",
method: "POST",
data: {},
header: {
"Content-Type": "application/json",
},
})
.then((res) => {
uni.hideLoading();
if (res.code == 0) {
this.list = res.res;
}
})
.catch((e) => {});
},
//点击购买
openorderModal(item, type) {
if(this.$platform=='ios'){
return false
}
let text = "";
//如果是右侧按钮点击展示
//判断点击类型是vip价格还是延期价格
if (type == 0) {
if (item.state == null) {
//没有vip
this.selectVipData.list = item.vcbList;
this.selectVipData.id = item.vcbList[0].id;
} else {
this.selectVipData.list = item.yanqiList;
this.selectVipData.id = item.yanqiList[0].id;
}
} else {
this.selectVipData.id = item.id;
}
if (type) {
this.selectVipData.type = type;
}
this.selectVipData.title = item.title + "-" + item.year + "年";
this.selectVipData.lastFee = item.rebateFee;
this.orderModalShow = true;
console.log("-----selectVipData-----", this.selectVipData);
this.$nextTick(() => {
this.$refs.orderPay.initPrepareOrder();
});
},
//关闭
closeOrderModalShow() {
this.orderModalShow = false;
this.selectVipData = {};
},
},
};
</script>
<style>
.commonPageBox {
height: 100% !important;
}
.vip_block {
padding: 20rpx;
}
.vip_item {
width: 100%;
padding: 30rpx 20rpx;
background-color: #fff;
border-radius: 10px;
box-shadow: 0px 0px 5px 0px #a7bbe4;
margin-bottom: 20rpx;
position: relative;
}
.vip_item_title {
display: inline-block;
height: 46rpx;
line-height: 46rpx;
font-size: 24rpx;
font-weight: bold;
color: #fff;
padding: 0 12rpx;
border-radius: 15rpx;
background-image: linear-gradient(90deg, #3AB3AE 0%, #00e1ec 100%);
}
.vip_item_special .vip_item_title {
height: 50rpx;
line-height: 50rpx;
font-size: 26rpx;
background-image: linear-gradient(90deg, #ff1f00 0%, #fa9f93 100%);
}
.vip_price {
margin-top: 5rpx;
}
.vip_price text,
.vip_qx text,
.vip_qx_v {
display: inline-block;
font-size: 28rpx;
line-height: 40rpx;
}
.vip_item_used {
position: absolute;
right: 20rpx;
bottom: 20rpx;
font-size: 24rpx;
color: #427ec5;
font-weight: bold;
}
.vip_item_btn {
position: absolute;
right: 20rpx;
top: 30rpx;
font-size: 23rpx;
line-height: 40rpx;
border: 1rpx solid #ff1f00;
color: #ff1f00;
padding: 0 12rpx;
border-radius: 15rpx;
opacity: 0.8;
}
.font_bold {
font-weight: bold;
}
.vip_fee {
font-size: 34rpx !important;
color: #ff1f00;
font-weight: bold;
padding: 0 5rpx;
}
.vip_price_v {
font-size: 26rpx !important;
color: #ff1f00;
border: 1rpx solid #ff1f00;
border-radius: 10rpx;
margin-right: 15rpx;
margin-bottom: 10rpx;
padding: 0 10rpx;
}
.vip_price_yq {
font-size: 26rpx !important;
color: #427ec5;
border: 1rpx solid #427ec5;
border-radius: 10rpx;
margin-right: 15rpx;
margin-bottom: 10rpx;
padding: 0 10rpx;
}
.line {
text-decoration: line-through;
color: #3AB3AE ;
font-style: italic;
}
.vip_item_flag {
font-size: 26rpx;
color: #666;
padding-left: 20rpx;
}
.vip_item_flag text {
vertical-align: bottom;
}
.vip_item_overdue {
background: rgba(220, 223, 225, 0.9) !important;
opacity: 0.75;
}
.vip_item_overdue .vip_item_title {
background-image: none;
font-size: 32rpx;
color: #000;
padding: 0;
}
.vip_item_bg_1 {
background: rgba(227, 120, 125, 0.3) !important;
}
.vip_item_bg_2 {
background: rgba(64, 148, 222, 0.3) !important;
}
.vip_item_tip {
color: #ff1f00;
font-size: 26rpx;
padding-left: 20rpx;
}
.vip_item_tip text {
vertical-align: bottom;
}
</style>

View File

@@ -1,7 +1,6 @@
<template>
<view class="commonPageBox">
<z-nav-bar title="VIP"></z-nav-bar>
<z-nav-bar title="VIP" bgColor="#3AB3AE" fontColor="#fff"></z-nav-bar>
<view class="vip_block">
<view
class="vip_item"
@@ -22,7 +21,9 @@
<view>
<text class="vip_item_title">{{ item.title }}</text>
<text class="vip_item_tip" v-if="item.tip && item.tip < 100"
><uni-icons type="info" size="17" color="#ff1f00"></uni-icons>还有{{item.tip}}天到期</text
><uni-icons type="info" size="17" color="#ff1f00"></uni-icons>还有{{
item.tip
}}天到期</text
>
<text class="vip_item_flag" v-if="item.state == 1">
<uni-icons type="info" size="17" color="#999"></uni-icons>已过期
@@ -31,19 +32,22 @@
<view class="vip_price" style="padding-top: 10rpx">
<text class="font_bold">课程价格</text>
<view class="vip_qx_v">一年<text class="vip_fee line">{{ item.originalPrice || 0 }}</text></view>
<view class="vip_qx_v"
>一年<text class="vip_fee line">{{ item.originalPrice || 0 }}</text
></view
>
</view>
<view v-if="$platform != 'ios'">
<text
class="vip_item_btn"
v-if="item.state == null"
@click="openorderModal(item)"
>去办理</text
>
<text class="vip_item_btn" v-else @click="openorderModal(item)"
>去续费</text
>
</view>
<view v-if="$platform!='ios'">
<text
class="vip_item_btn"
v-if="item.state == null"
@click="openorderModal(item, 0)"
>去办理</text
>
<text class="vip_item_btn" v-else @click="openorderModal(item, 0)"
>去续费</text
>
</view>
<view class="vip_price" v-if="item.vcbList && item.vcbList.length > 0">
<text class="font_bold" v-if="item.type == 1 || item.type == 2"
@@ -54,7 +58,7 @@
class="vip_price_v"
v-for="(item_price, index_price) in item.vcbList"
:key="index_price"
@click="openorderModal(item_price)"
@click="openorderModal(item, index_price)"
>
{{ item_price.year }}<text>{{ item_price.rebateFee }}</text
>
@@ -69,14 +73,20 @@
class="vip_price_v"
v-for="(item_yq, index_yq) in item.yanqiList"
:key="index_yq"
@click="openorderModal(item_yq, 1)"
@click="openorderModal({ state: item.state, ...item }, index_yq)"
>
{{ item_yq.year }}<text>{{ item_yq.rebateFee }}</text
>
</text>
</view>
<view class="vip_qx">
<text class="font_bold" style="display: block">VIP权限</text>
<text
class="font_bold"
style="display: block"
v-if="item.type == 1 || item.type == 2"
>超级VIP权限</text
>
<text class="font_bold" style="display: block" v-else>VIP权限</text>
<view class="vip_qx_v" v-if="item.type == 1"
>无限制观看吴门医述APP中医学中西汇通学针灸学肿瘤学四个板块任意课程</view
>
@@ -101,33 +111,39 @@
class="vip_fee"
v-if="item.type == 1 || item.type == 2"
>8</text
><text class="vip_fee" v-else>9折</text>优惠
><text class="vip_fee" v-else>9折</text>优惠
</view>
<view class="vip_qx_v"
>疯子读书APP购书享受<text
class="vip_fee"
v-if="item.type == 1 || item.type == 2"
>8</text
><text class="vip_fee" v-else>9折</text>优惠</view
><text class="vip_fee" v-else>9折</text>优惠</view
>
</view>
</view>
</view>
<common-select-vip
type="vip"
:isCondition="true"
ref="commonSelectGoods"
:selectGoodsData="selectGoodsData"
:goodsList="goodsList"
:buyOptions="buyOptions"
:customButtonGroup1="customButtonGroup1"
@selectGoods="handleClickSelectGoods"
@onHandleClickBuy="goBuy()"
>
</common-select-vip>
<u-popup :show="orderModalShow" mode="bottom" :round="20">
<view class="orderModalShow popup_box">
<u-icon
name="close"
color="#333"
size="18"
@click="closeOrderModalShow"
style="
display: inline-block;
position: absolute;
right: 20rpx;
top: 20rpx;
"
></u-icon>
<!-- <u-icon name="close" color="#333" size="18" @click="closeOrderModalShow" style="
display: inline-block;
position: absolute;
right: 20rpx;
top: 20rpx;
"></u-icon> -->
<orderPay ref="orderPay" :dataInfo="selectVipData"></orderPay>
</view>
</u-popup>
@@ -143,6 +159,17 @@ export default {
type: 0,
text: "", //针对不同type展示文案
list: [],
buyOptions: [],
customButtonGroup1: [
{
with: 200,
text: "立即购买",
backgroundColor: "linear-gradient(90deg, #3AB3AE 0%,#3AB3AE 100%)",
color: "#fff",
},
],
goodsList: [],
selectGoodsData: {},
orderModalShow: false,
selectVipData: {},
};
@@ -155,6 +182,27 @@ export default {
},
onShow() {},
methods: {
handleClickSelectGoods(data) {
this.selectGoodsData = data;
console.log('this.selectGoodsData at line 186:', this.selectGoodsData)
this.$forceUpdate();
},
goBuy() {
// this.$refs.commonSelectGoods.close();
var mynavData = JSON.stringify({
goods:[this.selectGoodsData],
typeId: 0,
navTitle: "",
title: "",
isVip: true,
}); // 这里转换成 字符串
console.log('mynavData at line 192:', mynavData)
uni.navigateTo({
url: `/pages/goods/order/index?data=${mynavData}`,
});
},
//获取数据
getData() {
uni.showLoading({
@@ -179,37 +227,40 @@ export default {
},
//点击购买
openorderModal(item, type) {
if(this.$platform=='ios'){
return false
}
console.log("item at line 120:", item);
if (this.$platform == "ios") {
return false;
}
let text = "";
//如果是右侧按钮点击展示
//判断点击类型是vip价格还是延期价格
if (type == 0) {
if (item.state == null) {
//没有vip
this.selectVipData.list = item.vcbList;
this.selectVipData.id = item.vcbList[0].id;
} else {
this.selectVipData.list = item.yanqiList;
this.selectVipData.id = item.yanqiList[0].id;
}
} else {
this.selectVipData.id = item.id;
}
if (type) {
this.selectVipData.type = type;
if (item.state == null) {
//没有vip
this.selectVipData.list = item.vcbList;
// this.selectVipData.id = item.vcbList[0].id;
} else {
this.selectVipData.list = item.yanqiList;
// this.selectVipData.id = item.yanqiList[0].id;
}
this.selectVipData.title = item.title + "-" + item.year + "年";
this.selectVipData.lastFee = item.rebateFee;
this.selectVipData.state = item.state;
this.orderModalShow = true;
console.log("-----selectVipData-----", this.selectVipData);
this.$nextTick(() => {
this.$refs.orderPay.initPrepareOrder();
this.goodsList = this.selectVipData.list.map((e) => {
return { ...e };
});
this.selectGoodsData = this.selectVipData.list[type ? type : 0];
this.$refs.commonSelectGoods.open();
this.show = true;
// this.orderModalShow = true;
// console.log("-----selectVipData-----", this.selectVipData);
// this.$nextTick(() => {
// this.$refs.orderPay.initPrepareOrder();
// });
},
//关闭
closeOrderModalShow() {
@@ -245,7 +296,7 @@ export default {
color: #fff;
padding: 0 12rpx;
border-radius: 15rpx;
background-image: linear-gradient(90deg, #258feb 0%, #00e1ec 100%);
background-image: linear-gradient(90deg, #3AB3AE 0%, #00e1ec 100%);
}
.vip_item_special .vip_item_title {
height: 50rpx;
@@ -312,7 +363,7 @@ export default {
}
.line {
text-decoration: line-through;
color: #258feb;
color: #3AB3AE;
font-style: italic;
}
.vip_item_flag {

View File

@@ -285,8 +285,8 @@ export default {
detailInfo: {},
fdButtonStyle: {
width: "90rpx",
"border-color": "#258feb",
color: "#258feb",
"border-color": "#3AB3AE ",
color: "#3AB3AE ",
float: "right",
"margin-right": "20rpx",
"margin-left": "30rpx",
@@ -511,6 +511,14 @@ export default {
return;
}
let data = {
paymentMethod: this.payType, //1微信2支付宝3苹果支付4虚拟币
orderMoney: this.dataInfo.lastFee, //订单金额
realMoney: Number(this.dataInfo.lastFee - this.jfNumber), //实际金额
shippingMoney: 0, //运费
jfDeduction: this.jfNumber, //积分抵扣
vipBuyConfigId: this.dataInfo.id,
come: 2, //订单来源0疯子读书1国学众妙之门2医学吴门医
paymentMethod: this.payType, //1微信2支付宝3苹果支付4虚拟币
orderMoney: this.dataInfo.lastFee, //订单金额
realMoney: this.dataInfo.lastFee, //实际金额
@@ -536,55 +544,30 @@ export default {
icon: "none",
image: "../../../static/icon/ic_close.png",
});
} else {
if (that.payType == 2) {
// 常规支付
uni.showToast({
title: "正在支付",
icon: "loading",
});
await setPay(
{
typePay: "alipay",
subject: "vip",
totalAmount: res.money,
type: 2,
relevanceoid: res.orderSn,
customerId: that.userInfo.id,
},
(res) => {
uni.showLoading({
title: "加载中",
});
console.log(res, "支付支付");
if (res.success) {
uni.showToast({
title: "支付成功",
});
setTimeout(() => {
uni.switchTab({
url: "/pages/bookShop/orderList?type=order",
});
}, 1000);
} else {
setTimeout(() => {
console.log("延迟调用 失败提示");
uni.showToast({
title: "支付失败",
image: "../../../static/icon/ic_close.png",
});
}, 0);
}
},
);
} else if (this.payType == 1) {
// 微信支付
let data1 = {
orderSn: res.orderSn,
buyOrderId: null,
return;
}
if (that.payType == 2) {
// 常规支付
uni.showToast({
title: "正在支付",
icon: "loading",
});
await setPay(
{
typePay: "alipay",
subject: "vip",
totalAmount: res.money,
};
setWXPay(data1, (res) => {
type: 2,
relevanceoid: res.orderSn,
customerId: that.userInfo.id,
},
(res) => {
uni.showLoading({
title: "加载中",
});
console.log(res, "支付支付");
if (res.success) {
uni.showToast({
title: "支付成功",
@@ -595,33 +578,61 @@ export default {
});
}, 1000);
} else {
if (res.data.errMsg.indexOf("User canceled") != -1) {
uni.showToast({
title: "用户取消支付",
icon: "none",
image: "../../../static/icon/ic_close.png",
});
} else {
setTimeout(() => {
console.log("延迟调用 失败提示");
uni.showToast({
title: "支付失败",
icon: "none",
image: "../../../static/icon/ic_close.png",
});
}
}, 0);
}
});
} else if (this.payType == 4) {
// 天医币支付
uni.showToast({
title: "购买成功",
icon: "success",
});
setTimeout(() => {
uni.switchTab({
url: "/pages/bookShop/orderList?type=order",
}
);
} else if (this.payType == 1) {
// 微信支付
let data1 = {
orderSn: res.orderSn,
buyOrderId: null,
totalAmount: res.money,
};
setWXPay(data1, (res) => {
if (res.success) {
uni.showToast({
title: "支付成功",
});
}, 1000);
}
setTimeout(() => {
uni.switchTab({
url: "/pages/bookShop/orderList?type=order",
});
}, 1000);
} else {
if (res.data.errMsg.indexOf("User canceled") != -1) {
uni.showToast({
title: "用户取消支付",
icon: "none",
image: "../../../static/icon/ic_close.png",
});
} else {
uni.showToast({
title: "支付失败",
icon: "none",
image: "../../../static/icon/ic_close.png",
});
}
}
});
} else if (this.payType == 4) {
console.log('4 at line 624:', 4)
// 天医币支付
uni.showToast({
title: "购买成功",
icon: "success",
});
setTimeout(() => {
uni.switchTab({
url: "/pages/bookShop/orderList?type=order",
});
}, 1000);
}
}
});
@@ -1171,7 +1182,7 @@ export default {
border-color: #e6e6e6;
border-left-color: transparent;
border-style: solid;
// background-color: #258feb;
// background-color: #3AB3AE ;
border-top-right-radius: 10rpx;
border-bottom-right-radius: 10rpx;

View File

@@ -33,8 +33,8 @@
isNoIcon="true"
label="orderType"
>
<template slot="labelSlot" slot-scope="slotProps">
<view class="label_content AC_List">
<template slot="labelSlot" slot-scope="slotProps" >
<view class="label_content AC_List" @click="slotProps.row.relationId?goClick(slotProps.row.relationId):''">
<view class="left">
<view class="title">{{ slotProps.row.orderType }}</view>
</view>
@@ -247,7 +247,13 @@ export default {
musicPlay,
},
//方法
methods: {
methods: { goClick(id){
uni.navigateTo({
url: "/pages/bookShop/orderLCont?orderId=" +
id
});
},
// 获取
getData() {
var data = {
@@ -400,7 +406,7 @@ export default {
overflow: hidden;
.left {
width: calc(100% - 120rpx) !important;
width: calc(100% - 200rpx) !important;
font-weight: 700;
float: left;
color: #333;
@@ -431,13 +437,14 @@ export default {
}
}
.AC_mark {
.AC_mark {width: 100%;
font-size: 28rpx;
margin-top: 10rpx;
margin-bottom: 15rpx;
// white-space: nowrap;
color: #343434;
float: left;
overflow: hidden;
}
.AC_time {

View File

@@ -305,7 +305,7 @@ export default {
// console.log('中等密码-----',value)
this.note =
"请至少使用大小写字母、数字、符号两种类型组合的密码长度为8位。";
this.str2 = "<span style='color:#2979ff'>密码强度中等!</span>";
this.str2 = "<span style='color:#117e4c'>密码强度中等!</span>";
this.passwordOk = true;
} else if (enoughRegex.test(value)) {
// console.log('弱密码-----',value)