Compare commits

..

4 Commits

Author SHA1 Message Date
bb1d9ef281 feat: 新增预售书重复购买提示
- 将manifest.json中的版本号更新至1.0.60
- 在订单提交页面中新增预售备注弹窗功能,支持用户确认预售备注
- 添加presaleRemark API接口以获取预售备注内容
- 删除不再使用的订单页面副本文件
2026-03-25 11:39:44 +08:00
1f01ceb3ee feat: 修改学术传承分类
修改manifest.json版本号至1.0.59
在VIP购买提示中增加论坛不包含说明
调整开发环境API配置
优化mine页面flex布局和vip类型显示
重构medicaldes页面网格布局,支持3列/4列切换
2026-03-24 18:46:37 +08:00
02436fe222 chore: 添加记录观看时长;个人资料添加身份项;
- 将应用版本从1.0.57更新至1.0.58
- 将edu-core依赖从本地路径更新至git仓库地址
- 调整baseUrl配置以使用线上正式环境
- 在用户信息页面中新增用户观看时间标签
2026-03-24 14:26:48 +08:00
ff66593f4f feat: 添加优惠券金额查询功能
- 将manifest.json中的版本号从1.0.56更新至1.0.57
- 在开发环境恢复使用本地测试API地址
- 在订单详情页新增优惠券金额查询功能,当订单包含优惠券时自动查询并显示优惠金额
2026-03-12 11:48:07 +08:00
14 changed files with 236 additions and 3987 deletions

View File

@@ -2,8 +2,8 @@ let baseUrl = "";
let socketUrl = "";
if (process.env.NODE_ENV === 'development') {
// 开发环境
// baseUrl = "http://192.168.110.100:9200/pb/"; // 张川川
baseUrl = "https://api.nuttyreading.com/"; // 线上正式
baseUrl = "http://192.168.110.100:9200/pb/"; // 张川川
// baseUrl = "https://api.nuttyreading.com/"; // 线上正式
} else if (process.env.NODE_ENV === 'production') {
// 生产环境11
//baseUrl = "http://192.168.110.100:9200/pb/"; // 张川川

View File

@@ -84,11 +84,12 @@ $http.getAliToken = function(callback) {
//请求开始拦截器
$http.requestStart = function(options) {
// console.log("请求开始", options);
if (options.load && options.data.loadAnimate != 'none') {
const resData = options.data || {}
if (options.load && resData.loadAnimate != 'none') {
//打开加载动画
store.commit("setLoadingShow", true);
}
if (options.data.loadAnimate == 'none') {
if (resData.loadAnimate == 'none') {
delete options.data.loadAnimate
}
// 图片、视频上传大小限制

View File

@@ -13,8 +13,8 @@
"src" : "图片路径"
}
],
"versionName" : "1.0.56",
"versionCode" : 1056,
"versionName" : "1.0.60",
"versionCode" : 1060,
"app-plus" : {
"nvueCompiler" : "weex",
"compatible" : {

11
package-lock.json generated
View File

@@ -9,7 +9,7 @@
"version": "3.4.5",
"license": "MIT",
"dependencies": {
"edu-core": "file:../edu-core",
"edu-core": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#v1.0.9",
"jquery": "^3.7.1",
"tcplayer.js": "^5.1.0"
},
@@ -19,6 +19,7 @@
},
"../edu-core": {
"version": "1.0.8",
"extraneous": true,
"license": "ISC",
"devDependencies": {}
},
@@ -73,8 +74,9 @@
"integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
},
"node_modules/edu-core": {
"resolved": "../edu-core",
"link": true
"version": "1.0.8",
"resolved": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#f815e7660e0645ca4393205b30986c4bc7aa4d9f",
"license": "ISC"
},
"node_modules/es5-shim": {
"version": "4.6.7",
@@ -397,7 +399,8 @@
"integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
},
"edu-core": {
"version": "file:../edu-core"
"version": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#f815e7660e0645ca4393205b30986c4bc7aa4d9f",
"from": "edu-core@git+https://git.nuttyreading.com/chenghuan/edu-core.git#v1.0.9"
},
"es5-shim": {
"version": "4.6.7",

View File

@@ -21,7 +21,7 @@
},
"homepage": "https://github.com/dcloudio/hello-uniapp#readme",
"dependencies": {
"edu-core": "file:../edu-core",
"edu-core": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#v1.0.9",
"jquery": "^3.7.1",
"tcplayer.js": "^5.1.0"
},

View File

@@ -1029,6 +1029,29 @@ export default {
orderTabCLi(e) {
this.orderListTab = e;
},
async getCouponDetail(id) {
await this.$http
.request({
url: "common/coupon/getCouponHistoryInfo",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data: {
id,
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then(async (res) => {
if (res.code != 0) return this.$commonJS.showToast(res.errMsg);
this.orderContet.couponAmount =
res.couponHistory.couponEntity.couponAmount;
})
.catch((e) => {
console.log(e);
this.$commonJS.showToast(e.errMsg);
});
},
// 获取订单详情
getOrderList() {
console.log("this.orderType", this.orderType);
@@ -1045,12 +1068,16 @@ export default {
"Content-Type": "application/json",
},
})
.then((res) => {
.then(async (res) => {
this.customButton = [];
console.log("订单详情", res);
this.orderContet = res.data.buyOrder;
this.goodsList = res.data.productInfo;
this.consigneeShow = true;
// 存在优惠券信息,就查询优惠券集体金额
if (this.orderContet.couponId && this.orderContet.couponId != null) {
await this.getCouponDetail(this.orderContet.couponId);
}
if (
this.orderContet.orderStatus == 2 &&
this.sheetList.length > 0 &&

View File

@@ -520,6 +520,17 @@
</view>
</view>
</u-popup>
<u-modal
:show="presaleRemarkModalShow"
title="提示"
:content="presaleRemarkModalContent"
:showCancelButton="true"
confirmText="继续购买"
cancelText="取消"
@confirm="handlePresaleRemarkConfirm"
@cancel="handlePresaleRemarkCancel"
@close="handlePresaleRemarkCancel"
></u-modal>
</view>
</template>
@@ -621,6 +632,9 @@ export default {
orderModalShowInfo: {},
orderModalShow: false,
presaleRemarkModalShow: false,
presaleRemarkModalContent: "",
presaleRemarkModalResolve: null,
payType: 1,
freightNum: 0,
addressData: {
@@ -1344,6 +1358,62 @@ export default {
this.content = this.remark;
}
},
openPresaleRemarkModal(content) {
this.presaleRemarkModalContent = content;
this.presaleRemarkModalShow = true;
return new Promise((resolve) => {
this.presaleRemarkModalResolve = resolve;
});
},
handlePresaleRemarkConfirm() {
this.presaleRemarkModalShow = false;
if (this.presaleRemarkModalResolve) {
const resolve = this.presaleRemarkModalResolve;
this.presaleRemarkModalResolve = null;
resolve(true);
}
},
handlePresaleRemarkCancel() {
this.presaleRemarkModalShow = false;
if (this.presaleRemarkModalResolve) {
const resolve = this.presaleRemarkModalResolve;
this.presaleRemarkModalResolve = null;
resolve(false);
}
},
async checkPresaleRemark() {
if (this.pageType != "goods") {
return true;
}
const productIds = this.goodsDataList
.map((e) => e.productId)
.filter((id) => id)
.join(",");
if (!productIds || !this.urlList.presaleRemark) {
return true;
}
try {
const res = await this.$http.request({
url: `${this.urlList.presaleRemark}`,
method: "POST",
data: {
productIds,
},
header: {
"Content-Type": "application/json",
},
});
const remark =
res && typeof res.remark == "string" ? res.remark.trim() : "";
if (!remark) {
return true;
}
return await this.openPresaleRemarkModal(remark);
} catch (error) {
console.log("presaleRemark error:", error);
return true;
}
},
async goBuyJie() {
if (this.pageType == "vip") {
if (this.radioValue != "1") {
@@ -1449,6 +1519,11 @@ export default {
});
thisproduct = thisproduct.join(",");
}
const passPresaleRemark = await this.checkPresaleRemark();
if (!passPresaleRemark) {
this.buyingFlag = false;
return;
}
if (
this.historyOrderInfo &&
thisproduct == this.historyOrderInfo.product &&

View File

@@ -12,7 +12,7 @@
<CommonCourseVideo
:video-list="videoArray"
:current-index="currentVideoIndex !== null ? currentVideoIndex : 0"
:course="{courseTitle:options.navTitle, chapterTitle: curriculumData.title}"
:course="{courseTitle:options.navTitle, chapterTitle: curriculumData.title, catalogueId: curriculumData.catalogueId || '', courseId: curriculumData.courseId || ''}"
:cover="options.curriculumImgUrl || ''"
:http="$http"
/>

View File

@@ -750,7 +750,7 @@ export default {
});
const joinedText = this.textList.join("/");
this.goBuyTitle = "购买" + joinedText + "VIP即可畅享更多专属权益";
this.goBuyTitle = "购买" + joinedText + "VIP即可畅享更多专属权益(不包含论坛)";
}
});
},

File diff suppressed because it is too large Load Diff

View File

@@ -145,6 +145,7 @@ export default {
list: "app/phone.do?getCourseDetail_new",
initPrepareOrder: "common/buyOrder/initPrepareOrder",
buyOrder: "book/buyOrder/placeOrder",
presaleRemark: "book/buyOrder/presaleRemark",
curriculumInfo: "app/phone.do?getCourseInfo",
detailInfo: "app/phoneDoctor.do?getTaiHuClassInfo_new",
userInfo: "common/user/getUserInfo",

View File

@@ -39,19 +39,22 @@
<!-- </scroll-view> -->
<template v-if="!showSearchList">
<view class="grid twoCateList" v-if="twoCateList.length > 0">
<u-grid :col="3" border class="u-grid-list cateList">
<u-grid-item
<view
class="custom-grid"
:class="curOneCateIndex == 1 ? 'col-4' : 'col-3'"
>
<view
v-for="(item, index) in twoCateList"
:key="item.dictType"
class="grid-item"
@click="setTwoCateIndex(item, index)"
>
<!-- <u-button :type="success">成功按钮</u-button> -->
<view
:class="['grid-text', curTwoCateIndex == index ? 'cur' : '']"
>{{ item.dictValue }}
</view>
</u-grid-item>
</u-grid>
</view>
</view>
</view>
<view
@@ -199,7 +202,6 @@
</view>
</u-modal> -->
<z-navigation></z-navigation>
</view>
</template>
@@ -773,6 +775,37 @@ export default {
// height: 40rpx;
}
.custom-grid {
display: flex;
flex-wrap: wrap;
// border: 1px solid #dadbde;
// border-bottom: 0;
&.col-3 {
.grid-item {
min-width: 33.33%;
flex: 1;
}
}
&.col-4 {
.grid-item {
min-width: 25%;
flex: 1;
}
}
.grid-item {
// border-right: 1px solid #dadbde;
// border-bottom: 1px solid #dadbde;
padding: 10rpx 0;
text-align: center;
font-size: 30rpx;
cursor: pointer;
box-sizing: border-box;
}
}
.searchList {
.item {
font-size: 28rpx;
@@ -799,20 +832,20 @@ export default {
text-align: center;
display: inline-block;
width: 32%;
padding: 20rpx 0;
padding: 16rpx 0;
font-size: 34rpx;
border-radius: 10rpx;
}
.cur {
background-color: #3ab3ae;
background-color: #3AB3AE;
color: #fff;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
}
}
.twoCateList {
font-size: 28rpx;
font-size: 30rpx;
margin-top: 20rpx;
.grid-text {

View File

@@ -65,9 +65,10 @@
</view>
<view class="userInfoBox" style="margin-left: 20rpx">
<view class="name"
>昵称{{ userMes.nickname ? userMes.nickname : "未设置" }}</view
>
<view class="name">
{{ userMes.nickname ? userMes.nickname : "未设置" }}
<text v-if="userMes.profile" class="user-profile">({{userMes.profile}})</text>
</view>
<view
class="name"
style="
@@ -91,13 +92,18 @@
</view>
</view>
</template>
<view>
<u-tag v-if="userMes.todayWatch" :text="userMes.todayWatch" size="mini" plain plainFill type="success" class="watch-time"></u-tag>
<u-tag v-if="userMes.totalWatch" :text="userMes.totalWatch" size="mini" plain plainFill class="watch-time"></u-tag>
</view>
</view>
</view>
<view
style="
padding: 20rpx 20rpx 0;
margin-top: 50rpx;
margin-top: 25rpx;
height: auto;
display: flex;
align-items: center;
@@ -637,6 +643,9 @@ export default {
if (this.userInfo.id != undefined) {
this.$http.post("common/user/getUserInfo").then((res) => {
this.userMes = res.result;
this.userMes.profile = res.des || '';
this.userMes.todayWatch = res.todayWatch || '';
this.userMes.totalWatch = res.totalWatch || '';
if (this.userMes.userVip) {
}
});
@@ -792,30 +801,43 @@ export default {
view {
.name {
width: 100%;
font-weight: bold;
font-size: 32rpx;
color: #333 !important;
}
width: 100%;
font-weight: bold;
font-size: 32rpx;
color: #6990c7 !important;
line-height: 1.2;
margin-bottom: 6rpx;
}
.user-profile{
font-size: 28rpx;
font-weight: normal;
display: inline-block;
}
.phone {
font-weight: bold;
font-size: 28rpx;
color: #333;
}
.phone {
font-size: 26rpx;
color: #6990c7 !important;
margin: 6rpx 0;
}
.tong {
color: #999;
font-size: 25upx;
}
.per_user_img {
display: inline-block;
width: 40upx;
height: 40upx;
margin-left: 10rpx;
vertical-align: super;
}
.per_user_img {
display: inline-block;
width: 40upx;
height: 40upx;
margin-left: 10rpx;
vertical-align: super;
}
.watch-time {
margin-top: 10rpx;
display: inline-block;
margin-right: 10rpx;
}
}
.userInfoBox {
flex: 1;
}
}
@@ -1033,9 +1055,9 @@ export default {
background-color: transparent !important;
}
uni-page-body {
// background: #d8f8e4 !important;
}
// uni-page-body {
// // background: #d8f8e4 !important;
// }
.bg_top {
padding: 0 30rpx;
@@ -1406,8 +1428,8 @@ uni-page-body {
// margin-right: 10rpx;
}
.zhanghu {
}
// .zhanghu {
// }
.quanyi {
border-top: 1rpx solid #f2d494;
@@ -1448,6 +1470,7 @@ uni-page-body {
.vip_type {
display: flex;
align-items: center;
flex-wrap: wrap;
}
.vip_type_item {
display: flex;
@@ -1462,6 +1485,7 @@ uni-page-body {
font-weight: bold;
color: #fff;
margin-right: 8rpx;
margin-bottom: 4rpx;
}
.vip_type_item_len {
padding: 0 7rpx;

File diff suppressed because it is too large Load Diff