天医币和积分可以查看详情,vip延期支持积分购买

This commit is contained in:
liuyuan
2025-04-22 15:07:42 +08:00
parent 380ed58d17
commit ddbd8e74b6
14 changed files with 1774 additions and 41 deletions

View File

@@ -70,6 +70,9 @@ Vue.component('common-select-goods', commonSelectGoods);
import commonAnchorLink from '@/pages/component/commonComponents/anchorLink.vue'
Vue.component('common-anchor-link', commonAnchorLink);
import commonSelectVip from '@/pages/component/commonComponents/selectVip.vue'
Vue.component('common-select-vip', commonSelectVip);
App.mpType = 'app'
const app = new Vue({

View File

@@ -2,8 +2,8 @@
"name" : "心灵空间",
"appid" : "__UNI__BBBDFD2",
"description" : "心灵空间",
"versionName" : "1.0.22",
"versionCode" : 1022,
"versionName" : "1.0.23",
"versionCode" : 1023,
"transformPx" : false,
/* 5+App */
"app-plus" : {

View File

@@ -293,6 +293,18 @@
}
}
},
{
"path": "pages/place/order",
"style": {
"navigationBarTitleText": "确认订单",
"enablePullDownRefresh": false,
"app-plus": {
"bounce": "none",
"titleNView": false,
"popGesture": "none"
}
}
},
{
"path": "pages/curriculum/list/index",
"style": {

View File

@@ -226,12 +226,14 @@ export default {
.name {
font-size: 26rpx;
color: #333;
line-height: 36rpx;
}
.price {
font-size: 26rpx;
font-size: 30rpx;
color: #aaa;
display: flex;
align-items: center;
margin-top: 5rpx;
}
}
.isSelectGoods {

View File

@@ -0,0 +1,365 @@
<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">
<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">
<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 ><span style="color: #e97512;">{{Number(slotProps.row.rebateFee).toFixed(2)}}</span></text>
</view>
</view>
</view>
</template>
</common-list>
<view class="goods_nav_box">
<uni-goods-nav
:fill="true"
:options="buyOptions"
:button-group="customButtonGroup1"
@click="onHandleClickBuy"
@buttonClick="onHandleClickBuy"
/>
</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() {
},
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) {
},
},
});
},
close() {
this.show = false;
},
selectGoods(data) {
this.$emit("selectGoods", data);
},
open() {
this.show = true;
},
gotoDetail(v) {
this.$emit("hancleClick", v);
},
onHandleClickBuy() {
setTimeout(() => {
this.$emit("onHandleClickBuy");
}, 200);
},
},
onBackPress() {
// #ifdef APP-PLUS
plus.key.hideSoftKeybord();
// #endif
},
};
</script>
<style lang="scss" scoped>
@import "@/static/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>

View File

@@ -980,7 +980,7 @@
}
.price {
font-size: 26rpx;
font-size: 30rpx;
color: #aaa;
font-weight: 600;
}
@@ -1265,7 +1265,7 @@
.price {
color: #ff582e;
font-size: 32rpx;
font-size: 30rpx;
i {
font-style: normal;

View File

@@ -76,6 +76,7 @@
:key="index"
@click="goDetail(item.productId, item)"
v-if="goodsList.length > 0"
style=" display: flex; align-items: center; justify-content: center;"
>
<view class="feng" style="position: relative">
<view v-if="item.delFlag == -1" class="delisted">已下架</view>
@@ -106,20 +107,17 @@
<br clear="both" />
</view>
<view class="orderContent" v-if="orderContet.orderType == 'vip'">
<view class="orderContent" v-if="orderContet.orderType == 'vip'" style=" display: flex; align-items: center; justify-content: center;">
<image
src="/static/icon/vip.png"
mode="aspectFill"
style="width: 100rpx; height: 100rpx"
style="width: 100rpx; height: 100rpx;"
></image>
<view class="itemJian">
<view class="orderTitle" style="line-height: 100rpx">
<view class="orderTitle" style="line-height: 46rpx; margin-bottom: 0;">
{{ orderContet.vipBuyConfigEntity.title }}
<text class="vip_year" v-if="orderContet.vipBuyConfigEntity.year">({{ orderContet.vipBuyConfigEntity.year }}年)</text>
</view>
<view class="orderPrice">
<text style="font-weight: bold"></text>
</view>
<br clear="both" />
</view>
<br clear="both" />
@@ -136,7 +134,6 @@
<view class="orderTitle" style="line-height: 100rpx">
<text>充值 {{ orderContet.bookBuyConfigEntity.money }}天医币</text>
</view>
<br clear="both" />
</view>
<br clear="both" />
@@ -191,7 +188,7 @@
>¥ {{ orderContet.bookBuyConfigEntity.realMoney }}</b
>
<b style="color: #dd3c0c" v-else>
<template v-if="orderContet.realMoney > 0&&orderContet.jfDeduction>0">
<template v-if="orderContet.realMoney">
¥{{ orderContet.realMoney }}
<text style="font-size: 24rpx;margin-left: 10rpx;">
@@ -257,9 +254,9 @@
></u-tag>
</view>
<view class="orderReal" style=" width: 100%;
display: flex;
align-items: center;
justify-content: space-between;">
display: flex;
align-items: center;
justify-content: space-between;">
<span style="color: #666; margin-right: 10rpx; float: left">
创建时间 :
</span>
@@ -1228,7 +1225,7 @@ view,uni-view {
font-size: 30rpx;
margin: 0 0 20rpx 0;
float: left;
width: 410rpx;
width: 540rpx;
}
.orderPrice {

View File

@@ -1161,7 +1161,6 @@
.name {
font-size: 26rpx;
// font-weight: 600;
color: #333;
}

View File

@@ -214,12 +214,10 @@
<!-- leftSlot -->
<template slot="leftSlot" slot-scope="slotProps">
<view class="price_box order_bottom_box">
<text class="price">合计:
<text class="total">
<template v-if="actualPayment>0">
{{ Number(actualPayment).toFixed(2) }}
</template>
<text class="price">合计
<text class="total" v-if="actualPayment==0">{{jfNumber}}积分</text>
<text class="totacl" v-else>
{{actualPayment}}
<text style="margin: 0 4rpx;" v-if="actualPayment>0&&jfNumber>0">
+
</text>
@@ -1399,8 +1397,9 @@ import parse from "../../uni_modules/uview-ui/libs/config/props/parse";
}
.price {
font-size: 30rpx;
.total {
font-size: 34rpx;
font-size: 30rpx;
color: red;
}
}

1297
pages/place/order.vue Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -27,13 +27,13 @@
<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)">
<text class="vip_price_v" v-for="(item_price, index_price) in item.vcbList" :key="index_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)">
<text class="vip_price_v" v-for="(item_yq, index_yq) in item.yanqiList" :key="index_yq">
{{item_yq.year}}<text>{{item_yq.rebateFee}}</text>
</text>
</view>
@@ -53,7 +53,20 @@
</view>
</view>
<u-popup :show="orderModalShow" mode="bottom" :round="20">
<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;
@@ -63,7 +76,7 @@
"></u-icon>
<orderPay ref="orderPay" :dataInfo="selectVipData"></orderPay>
</view>
</u-popup>
</u-popup> -->
</view>
</template>
@@ -77,7 +90,18 @@ export default{
text: '', //针对不同type展示文案
list: [],
orderModalShow: false,
selectVipData: {}
selectVipData: {},
selectGoodsData: {},
goodsList: [],
customButtonGroup1: [
{
with: 200,
text: "立即购买",
backgroundColor: "linear-gradient(90deg, #294a97 0%,#7dc1f0 100%)",
color: "#fff",
},
],
buyOptions: []
}
},
components: {
@@ -90,6 +114,12 @@ export default{
},
methods: {
//选择vip
handleClickSelectGoods(data) {
console.log(data)
this.selectGoodsData = data;
this.$forceUpdate();
},
//获取数据
getData(){
uni.showLoading({
@@ -124,11 +154,13 @@ export default{
}else{
this.selectVipData.list = item.yanqiList;
this.selectVipData.id = item.yanqiList[0].id;
this.selectVipData.list.forEach(item => {
item.yanqiStatus = true;
});
}
}else{
this.selectVipData.id = item.id;
}
if(type){
this.selectVipData.type = type;
}
@@ -136,9 +168,24 @@ export default{
this.selectVipData.title = item.title + '-' + item.year + '年';
this.selectVipData.lastFee = item.rebateFee;
this.orderModalShow = true;
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();
},
//组件点击购买
goBuy() {
var data = {
id: this.selectGoodsData.id,
title: this.selectGoodsData.title + '-' + this.selectGoodsData.year + '年',
price: this.selectGoodsData.rebateFee,
orderType: 'vip',
yanqiStatus: this.selectGoodsData.yanqiStatus
}
this.$refs.commonSelectGoods.close();
uni.navigateTo({
url: '/pages/place/order?data='+JSON.stringify(data),
});
},
//关闭

View File

@@ -31,6 +31,7 @@
isCondition="true"
isNoIcon="true"
label="orderType"
@hancleClick="goClick"
>
<template slot="labelSlot" slot-scope="slotProps">
<view class="label_content AC_List">
@@ -115,6 +116,14 @@ export default {
},
//方法
methods: {
//列表跳转到详情
goClick(data){
if(data.relationId){
uni.navigateTo({
url: "/pages/detail/orderLCont?orderId=" + data.relationId
});
}
},
// 获取
getData() {
var data = {

View File

@@ -10,16 +10,17 @@
label="orderType"
>
<template slot="labelSlot" slot-scope="slotProps">
<view class="label_content AC_List">
<view class="label_content AC_List" @click="slotProps.row.relationId?goClick(slotProps.row.relationId):''">
<view class="point_box">
<view class="title">{{slotProps.row.orderType}}</view>
<view class="title"><view class="AC_time">{{slotProps.row.createTime}}</view></view>
<view class="Hot">
<text v-if="slotProps.row.changeAmount > 0">+</text>
<text>{{slotProps.row.changeAmount}}</text>
</view>
</view>
<view class="AC_mark" v-if="slotProps.row.remark">{{slotProps.row.remark}}</view>
<view class="AC_time">{{slotProps.row.createTime}}</view>
</view>
</template>
</common-list>
@@ -91,6 +92,12 @@ export default {
},
//方法
methods: {
//列表进入详情
goClick(id){
uni.navigateTo({
url: "/pages/detail/orderLCont?orderId=" + id
});
},
// 获取
getData() {
var data = {
@@ -408,9 +415,6 @@ export default {
display: block;
font-size: 28rpx;
color: #343434;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
padding-top: 10rpx;
}

View File

@@ -36,7 +36,6 @@ $themeBgColor: #eff5f8 !important;
}
.goods_nav_box {
box-shadow: 0 4rpx 48rpx 0 rgba(0, 0, 0, .15);
width: 100%;
position: fixed;