feat: 新增心理论坛功能并优化订单相关文案;更新音视频播放组件版本;

- 新增心理论坛页面及文章详情页
- 更新订单状态文案:"待发货"改为"待发出","待收货"改为"待收到"
- 统一修改"收货地址"相关文案为"收件地址"
- 添加安卓应用包下载地址配置
- 更新依赖edu-core至v1.0.6版本
- 优化首页课程列表布局和样式
- 新增分享功能到我的页面
This commit is contained in:
2026-02-28 16:32:38 +08:00
parent 0f72e08dde
commit a64d538cd3
100 changed files with 21283 additions and 5094 deletions

View File

@@ -1,7 +1,7 @@
<template>
<view class="">
<view class="common_address_box" style="background-color: #fff">
<z-nav-bar :title="`${addressId ? '编辑' : '添加'}收地址`">
<z-nav-bar :title="`${addressId ? '编辑' : '添加'}收地址`">
<template slot="right">
<text @click="handleClickDelete" v-if="addressId" style="padding-right: 20rpx; color: red">删除</text>
</template>
@@ -16,7 +16,7 @@
<view v-for="(item, index) in argee" :key="index">
<radio class="agreeRadio" :value="item.id" :checked="item.id == radioValue"
color="#7dc1f0" @click="radioCheck(index)"></radio>
默认收地址
默认收地址
</view>
</radio-group>
</view>

View File

@@ -8,7 +8,7 @@
>
<z-nav-bar
navFontAlign="left"
title="我的收地址"
title="我的收地址"
>
<template slot="right"></template>
</z-nav-bar>
@@ -114,7 +114,7 @@ import { mapState } from "vuex";
export default {
components: {
courseDescription, //课程说明
editAddress, //编辑收地址
editAddress, //编辑收地址
},
props: ["backState", "type"],
data() {
@@ -126,7 +126,7 @@ export default {
customButtonGroup1: [
{
with: 200,
text: "+ 添加收地址",
text: "+ 添加收地址",
backgroundColor: "linear-gradient(90deg, #294a97 0%, #7dc1f0 80%)",
color: "#fff",
},

View File

@@ -23,7 +23,7 @@
</view>
<view class="normal_box" v-else>
<view class="normal_box_top">
<view class="curriulum_title">请添加收地址 </view>
<view class="curriulum_title">请添加收地址 </view>
</view>
</view>
<view class="right">
@@ -1401,7 +1401,7 @@
} else {
if (this.options.goods[0].goodsType != "05") {
if (!this.addressData.id) {
this.$commonJS.showToast("请选择收地址");
this.$commonJS.showToast("请选择收地址");
return false;
}
}
@@ -1411,8 +1411,8 @@
userId: this.userInfo.id, //下单人ID
shippingUser: this.addressData
? this.addressData.consigneeName
: "111", //收人姓名
userPhone: this.addressData.consigneePhone, //收人手机号
: "111", //收人姓名
userPhone: this.addressData.consigneePhone, //收人手机号
jfDeduction: this.jfNumber,
paymentMethod: this.payType, //支付方式 2支付宝1微信3ios内购 4天医币购买
orderMoney: this.totalPrice, //订单金额

View File

@@ -59,10 +59,10 @@
v-if="orderContet.orderStatus == 0">待支付</text>
<text
class="orderState orderState1"
v-if="orderContet.orderStatus == 1">待发</text>
v-if="orderContet.orderStatus == 1">待发</text>
<text
class="orderState orderState2"
v-if="orderContet.orderStatus == 2">待收</text>
v-if="orderContet.orderStatus == 2">待收</text>
<text
class="orderState orderState3"
v-if="orderContet.orderStatus == 3">已完成</text>
@@ -452,7 +452,7 @@
plain
type="success"
/></view>
<view class="">发时间:{{ item.createTime }}</view>
<view class="">发时间:{{ item.createTime }}</view>
</view>
</view>
</view>
@@ -553,7 +553,7 @@ export default {
this.goPay(this.orderContet);
} else if (data.text == "取消订单") {
this.canceOrder();
} else if (data.text == "确认收") {
} else if (data.text == "确认收") {
this.OverOrder();
} else if (data.text == "查看物流") {
this.seeExpressDetail(this.orderContet);
@@ -773,10 +773,10 @@ export default {
});
},
OverOrder() {
// 确认收
// 确认收到商品
uni.showModal({
title: "提示",
content: "确认收",
content: "确认收到商品",
success: (res) => {
let data = {
orderId: this.orderID,
@@ -796,7 +796,7 @@ export default {
if (res.code == 0) {
uni.hideLoading();
uni.showToast({
title: "收成功",
title: "收成功",
icon: "success",
duration: 1000,
});
@@ -846,7 +846,7 @@ export default {
if (this.orderContet.orderStatus == 2) {
this.customButton.push({
width: "160rpx",
text: "确认收",
text: "确认收",
color: "#fff",
});
@@ -868,9 +868,9 @@ export default {
if (this.orderContet.orderStatus == 0) {
this.titleStat = "待支付";
} else if (this.orderContet.orderStatus == 1) {
this.titleStat = "待发";
this.titleStat = "待发";
} else if (this.orderContet.orderStatus == 2) {
this.titleStat = "待收";
this.titleStat = "待收";
} else if (this.orderContet.orderStatus == 3) {
this.titleStat = "已完成";
}

71
pages/forum/details.vue Normal file
View File

@@ -0,0 +1,71 @@
<template>
<view>
<z-nav-bar title="文章详情"></z-nav-bar>
<web-view :webview-styles="webviewStyles" :src="surl"></web-view>
</view>
</template>
<script>
import { mapState } from 'vuex';
export default {
data() {
return {
surl:'',
webviewStyles: {
progress: {
color: '#55aaff'
}
},
};
},
//第一次加载
onLoad(e) {
// 隐藏原生的tabbar
uni.hideTabBar();
this.surl = e.url
console.log(e, '------')
// #ifdef APP-PLUS
const pages = getCurrentPages()
const page = pages[pages.length - 1];
const currentWebview = page.$getAppWebview()
currentWebview.setStyle({
titleNView: {
buttons: [{
float: 'right',
type: 'close',
onclick: function() {
uni.navigateBack({
delta: 1
});
}
}]
}
})
// #endif
},
computed: {
...mapState(['userInfo'])
},
//页面显示
onShow() {
// 隐藏原生的tabbar
uni.hideTabBar();
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
},
//方法
methods: {
},
};
</script>
<style lang="scss" scoped>
.box {
background-color: #fff;
min-height: calc(100vh - 270rpx);
}
.title{font-size: 32rpx; font-weight: bold; display: block; text-align: center;}
.content { font-size: 26rpx; line-height: 48rpx; margin-top: 10rpx;}
</style>

216
pages/forum/list.vue Normal file
View File

@@ -0,0 +1,216 @@
<template>
<view class="commonPageBox">
<z-paging ref="paging" v-model="dataList" auto-show-back-to-top @query="getDataList">
<template #top>
<z-nav-bar title="心理论坛"></z-nav-bar>
<view class="search_box">
<u-search placeholder="请输入文章标题" v-model="query.title" @search="handleSearch" @custom="handleSearch"></u-search>
</view>
</template>
<view class="list_item"
v-for="(item, index) in dataList" :key="index"
v-if="dataList&&dataList.length>0"
@click="goToDetail(item)"
>
<view class="list_item_image">
<image v-if="item.imgurl" :src="item.imgurl" mode="aspectFill"></image>
<text class="image_null" v-else>暂无封面图</text>
</view>
<view class="list_item_right">
<view class="list_item_title">{{item.title}}</view>
<view class="list_item_content" v-html="item.description"></view>
<view class="list_item_time">{{item.createTime}}</view>
<view class="list_item_study">查看详情</view>
</view>
</view>
</z-paging>
</view>
</template>
<script>
export default {
data(){
return {
query: {
page: 1,
limit: 10,
title: '',
},
dataList: [], //列表数据
statusNull: null, //暂无数据显示
}
},
mounted(){
},
onLoad() {
// this.getDataList(this.query.page, this.query.limit)
},
methods: {
//免费课程数据
getDataList(pageNo, pageSize){
this.$http.request({
url: 'common/wxPublicAccount/getWxPublicAccountArticleList',
method: "POST",
data: {
...this.query,
page: pageNo,
limit: pageSize,
},
header: {
"Content-Type": "application/json",
},
})
.then(res=> {
if (res.code == 0) {
if(res.page.records && res.page.records.length>0){
this.$refs.paging.complete(res.page.records);
}else{
this.$refs.paging.complete(false);
}
}
});
},
//搜索
handleSearch(){
this.$refs.paging.reload();
},
//跳转课程详情
goToDetail(item) {
uni.navigateTo({
url: `/pages/forum/details?url=${item.url}`,
});
},
},
}
</script>
<style lang="scss">
.commonPageBox{
background: #eff5f8;
height: 100vh;
}
.search_box{
background: #fff;
padding: 0 20rpx 20rpx;
}
.cateList {
width: 100%;
}
.flexbox {
position: fixed;
left: 0;
z-index: 9999;
}
.list_item{
position: relative;
background: #fff;
box-shadow: 0px 0px 10px 0px #CBDBF7;
padding: 30rpx 20rpx 30rpx;
display: flex;
border-radius: 10rpx;
margin: 30rpx 30rpx 0;
}
.list_item_image,.image_null{
width: 250rpx;
height: 220rpx;
background-color: rgba(125, 193, 240, 0.1);
display: flex;
justify-content: center;
align-items: center;
}
.list_item_image image{
width: 100%;
height: 100%;
}
.list_item_right{
margin-left: 30rpx;
width: calc(100% - 250rpx);
}
.list_item_title{
font-size: 30rpx;
line-height: 36rpx;
font-weight: bold;
color: #333;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}
.list_item_content{
margin-top: 15rpx;
font-size: 26rpx;
line-height: 36rpx;
color: #999;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}
.list_item_time{
margin-top: 15rpx;
font-size: 24rpx;
line-height: 36rpx;
color: #999;
}
.list_item_study{
line-height: 48rpx;
position: absolute;
right: 20rpx;
bottom: 20rpx;
background: #7dc1f0;
color: #fff;
border-radius: 40rpx;
font-size: 24rpx;
padding: 0 20rpx;
}
.list_item_study_out{
line-height: 48rpx;
position: absolute;
right: 20rpx;
bottom: 30rpx;
background: #294a97;
color: #fff;
border-radius: 40rpx;
font-size: 24rpx;
padding: 0 20rpx;
}
.text_null{
display: block;
width: 100%;
text-align: center;
font-size: 26rpx;
color: #999;
margin: 150rpx 0;
}
.image_null{
color: #999;
font-size: 22rpx;
}
::v-deep ::-webkit-scrollbar {
/*滚动条整体样式*/
width: 4px !important;
height: 1px !important;
overflow: auto !important;
background: #ccc !important;
-webkit-appearance: auto !important;
display: block;
}
::v-deep ::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius: 10px !important;
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2) !important;
background: #7b7979 !important;
}
::v-deep ::-webkit-scrollbar-track {
/*滚动条里面轨道*/
// box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2) !important;
// border-radius: 10px !important;
background: #FFFFFF !important;
}
</style>

View File

@@ -132,7 +132,6 @@ export default {
data() {
return {
isShowTaihu:false,
curriculumList: [],
curriculumList: [
{
name: "我的课程",
@@ -149,6 +148,11 @@ export default {
url: "/pages/vip/index",
imgUrl: require("@/static/icon/home_bg3.png")
},
{
name: "心理论坛",
url: "/pages/forum/list",
imgUrl: require("@/static/icon/home_bg4.png")
},
],
cateList: [],
noticeList: [], //通知消息
@@ -449,9 +453,10 @@ export default {
display: flex;
align-items: center;
justify-content: space-around;
gap: 10rpx;
.curriculum_item_box{
padding: 20rpx;
padding: 20rpx 0rpx;
display: flex;
align-items: center;
position: relative;
@@ -464,7 +469,7 @@ export default {
}
.curriculum_item_name{
font-size: 30rpx;
font-size: 28rpx;
padding-left: 12rpx;
color: #294a97;
font-weight: bold;

View File

@@ -130,6 +130,11 @@
</view>
</view>
<!-- 分享弹窗 -->
<uni-popup ref="share" type="share" safeArea backgroundColor="#fff">
<uni-popup-share @select="haveSelected"></uni-popup-share>
</uni-popup>
<u-popup :show="infoShow" mode="center" round="6" backgroundColor="#fff">
<view class="popup_box">
<view class="title">温馨提示</view>
@@ -195,7 +200,11 @@ export default {
url: "/pages/component/commonComponents/address/index",
type: "pageJump",
},
{
name: "分享App",
url: "newOnShare",
type: "function",
},
{
name: "关于我们",
url: "/pages/my/aboutUs",
@@ -252,8 +261,49 @@ export default {
case "switchTab":
this.switchTab(v.url);
break;
case "function":
this[v.url]();
break;
}
},
//分享app
newOnShare(){
this.$refs.share.open();
},
haveSelected(data) {
console.log("选择的是", data);
let scene = "WXSceneSession";
switch (data.index) {
case 0:
// WXSceneSession: 分享到好友
scene = "WXSceneSession";
break;
case 1:
// WXSceneTimeline: 分享到朋友圈
scene = "WXSceneTimeline";
break;
}
uni.share({
provider: "weixin",
scene: scene,
type: 0,
href: this.$apkUrl,
title: "心灵空间",
summary: "我正在使用心灵空间提升自己,赶紧跟我一起来体验吧!",
imageUrl: "static/fengziIcon.jpg",
success: function (res) {
console.log("success:" + JSON.stringify(res));
},
fail: function (err) {
uni.showToast({
title: "分享失败,请检查您的微信客户端",
icon: "none",
});
console.log("fail:" + JSON.stringify(err));
},
});
},
//判断过期的vip
isExpired(dateString){
const dataTime = new Date(dateString.replace(' ', 'T'));

View File

@@ -77,9 +77,9 @@ export default {
if (this.orderContet.orderStatus == 0) {
this.titleStat = '待支付'
} else if (this.orderContet.orderStatus == 1) {
this.titleStat = '待发'
this.titleStat = '待发'
} else if (this.orderContet.orderStatus == 2) {
this.titleStat = '待收'
this.titleStat = '待收'
} else if (this.orderContet.orderStatus == 3) {
this.titleStat = '已完成'
}

View File

@@ -37,8 +37,8 @@
<view class="source_app"></view>
<view style="text-align: left">
<text class="orderstatus" v-show="slotProps.row.orderStatus == 0">未付款</text>
<text class="orderstatus" v-show="slotProps.row.orderStatus == 1">待发</text>
<text class="orderstatus" v-show="slotProps.row.orderStatus == 2">已发</text>
<text class="orderstatus" v-show="slotProps.row.orderStatus == 1">待发</text>
<text class="orderstatus" v-show="slotProps.row.orderStatus == 2">已发</text>
<text class="orderstatus" v-show="slotProps.row.orderStatus == 3">交易成功</text>
<text class="orderstatus" v-show="slotProps.row.orderStatus == 4">交易失败</text>
<text class="orderstatus" v-show="slotProps.row.orderStatus == 5">已过期</text>
@@ -259,11 +259,11 @@
<view class="orderstatusbtn orderstatusbtn_success"
v-if="slotProps.row.orderStatus == 0"
@click.stop="goPay(slotProps.row)">继续付款</view>
<view class="orderstatusbtn" v-if="slotProps.row.orderStatus == 1">催发</view>
<view class="orderstatusbtn" v-if="slotProps.row.orderStatus == 1">催发</view>
<view class="orderstatusbtn" v-if="slotProps.row.orderStatus == 2"
@click.stop="seeExpressDetail(slotProps.row)">查看物流</view>
<view class="orderstatusbtn" v-if="slotProps.row.orderStatus == 2"
@click.stop="OverOrder(slotProps.row)">确认收</view>
@click.stop="OverOrder(slotProps.row)">确认收</view>
<view class="orderstatusbtn" v-if="slotProps.row.orderStatus == 3">申请售后</view>
</view>
</view>
@@ -333,12 +333,12 @@
badge: {},
},
{
name: "待发",
name: "待发",
value: 1,
badge: {},
},
{
name: "待收",
name: "待收",
value: 2,
badge: {},
},
@@ -456,8 +456,8 @@
.then((res) => {
//订单状态
// * 0: 待付款
// * 1: 待发
// * 2: 已发货
// * 1: 待发
// * 2: 待收到
// * 3已完成
// * 4: 交易失败
// * 5: 已过期
@@ -489,7 +489,7 @@
var params = {
userId: this.userInfo.id,
come: this.come,
orderStatus: flag == -1 ? "" : flag, //传null为全部订单状态 0-未付款 1-待发 2-已发货 3-交易成功 4-交易失败 5-过期
orderStatus: flag == -1 ? "" : flag, //传null为全部订单状态 0-未付款 1-待发 2-待收到 3-交易成功 4-交易失败 5-过期
...this.pagination
}
this.$http.request({
@@ -635,11 +635,11 @@
item.expressList[0].expressOrderSn,
});
},
// 确认收
// 确认收到商品
OverOrder(item) {
uni.showModal({
title: "提示",
content: "确认收",
content: "确认收到商品",
success: (res) => {
let data = {
orderId: item.orderId,
@@ -659,7 +659,7 @@
if (res.code == 0) {
uni.hideLoading();
uni.showToast({
title: "收成功",
title: "收成功",
icon: "success",
duration: 1000,
});

View File

@@ -504,7 +504,7 @@ export default {
let that = this;
let data = {
userId: that.userInfo.id, //下单人ID
userPhone: that.userInfo.tel, //收人手机号
userPhone: that.userInfo.tel, //收人手机号
paymentMethod: that.payType, //2支付宝1微信3ios内购
orderMoney: that.stepsCj.money * 1, //订单金额
districtMoney: 0, //优惠金额