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 = ""; let socketUrl = "";
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
// 开发环境 // 开发环境
// baseUrl = "http://192.168.110.100:9200/pb/"; // 张川川 baseUrl = "http://192.168.110.100:9200/pb/"; // 张川川
baseUrl = "https://api.nuttyreading.com/"; // 线上正式 // baseUrl = "https://api.nuttyreading.com/"; // 线上正式
} else if (process.env.NODE_ENV === 'production') { } else if (process.env.NODE_ENV === 'production') {
// 生产环境11 // 生产环境11
//baseUrl = "http://192.168.110.100:9200/pb/"; // 张川川 //baseUrl = "http://192.168.110.100:9200/pb/"; // 张川川

View File

@@ -84,11 +84,12 @@ $http.getAliToken = function(callback) {
//请求开始拦截器 //请求开始拦截器
$http.requestStart = function(options) { $http.requestStart = function(options) {
// console.log("请求开始", 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); store.commit("setLoadingShow", true);
} }
if (options.data.loadAnimate == 'none') { if (resData.loadAnimate == 'none') {
delete options.data.loadAnimate delete options.data.loadAnimate
} }
// 图片、视频上传大小限制 // 图片、视频上传大小限制

View File

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

11
package-lock.json generated
View File

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

View File

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

View File

@@ -1029,6 +1029,29 @@ export default {
orderTabCLi(e) { orderTabCLi(e) {
this.orderListTab = 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() { getOrderList() {
console.log("this.orderType", this.orderType); console.log("this.orderType", this.orderType);
@@ -1045,12 +1068,16 @@ export default {
"Content-Type": "application/json", "Content-Type": "application/json",
}, },
}) })
.then((res) => { .then(async (res) => {
this.customButton = []; this.customButton = [];
console.log("订单详情", res); console.log("订单详情", res);
this.orderContet = res.data.buyOrder; this.orderContet = res.data.buyOrder;
this.goodsList = res.data.productInfo; this.goodsList = res.data.productInfo;
this.consigneeShow = true; this.consigneeShow = true;
// 存在优惠券信息,就查询优惠券集体金额
if (this.orderContet.couponId && this.orderContet.couponId != null) {
await this.getCouponDetail(this.orderContet.couponId);
}
if ( if (
this.orderContet.orderStatus == 2 && this.orderContet.orderStatus == 2 &&
this.sheetList.length > 0 && this.sheetList.length > 0 &&

View File

@@ -520,6 +520,17 @@
</view> </view>
</view> </view>
</u-popup> </u-popup>
<u-modal
:show="presaleRemarkModalShow"
title="提示"
:content="presaleRemarkModalContent"
:showCancelButton="true"
confirmText="继续购买"
cancelText="取消"
@confirm="handlePresaleRemarkConfirm"
@cancel="handlePresaleRemarkCancel"
@close="handlePresaleRemarkCancel"
></u-modal>
</view> </view>
</template> </template>
@@ -621,6 +632,9 @@ export default {
orderModalShowInfo: {}, orderModalShowInfo: {},
orderModalShow: false, orderModalShow: false,
presaleRemarkModalShow: false,
presaleRemarkModalContent: "",
presaleRemarkModalResolve: null,
payType: 1, payType: 1,
freightNum: 0, freightNum: 0,
addressData: { addressData: {
@@ -1344,6 +1358,62 @@ export default {
this.content = this.remark; 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() { async goBuyJie() {
if (this.pageType == "vip") { if (this.pageType == "vip") {
if (this.radioValue != "1") { if (this.radioValue != "1") {
@@ -1449,6 +1519,11 @@ export default {
}); });
thisproduct = thisproduct.join(","); thisproduct = thisproduct.join(",");
} }
const passPresaleRemark = await this.checkPresaleRemark();
if (!passPresaleRemark) {
this.buyingFlag = false;
return;
}
if ( if (
this.historyOrderInfo && this.historyOrderInfo &&
thisproduct == this.historyOrderInfo.product && thisproduct == this.historyOrderInfo.product &&

View File

@@ -12,7 +12,7 @@
<CommonCourseVideo <CommonCourseVideo
:video-list="videoArray" :video-list="videoArray"
:current-index="currentVideoIndex !== null ? currentVideoIndex : 0" :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 || ''" :cover="options.curriculumImgUrl || ''"
:http="$http" :http="$http"
/> />

View File

@@ -750,7 +750,7 @@ export default {
}); });
const joinedText = this.textList.join("/"); 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", list: "app/phone.do?getCourseDetail_new",
initPrepareOrder: "common/buyOrder/initPrepareOrder", initPrepareOrder: "common/buyOrder/initPrepareOrder",
buyOrder: "book/buyOrder/placeOrder", buyOrder: "book/buyOrder/placeOrder",
presaleRemark: "book/buyOrder/presaleRemark",
curriculumInfo: "app/phone.do?getCourseInfo", curriculumInfo: "app/phone.do?getCourseInfo",
detailInfo: "app/phoneDoctor.do?getTaiHuClassInfo_new", detailInfo: "app/phoneDoctor.do?getTaiHuClassInfo_new",
userInfo: "common/user/getUserInfo", userInfo: "common/user/getUserInfo",

View File

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

View File

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

File diff suppressed because it is too large Load Diff