9 Commits

Author SHA1 Message Date
6274ac6cd6 feat(订单): 添加退款功能及相关页面
- 新增退款申请功能,用户可申请订单内所有商品退款
- 更新订单状态显示,增加“已退款”和“退款中”状态
- 新增退款去向页面,展示退款信息
- 更新依赖版本至v1.0.13
- 提升用户体验,优化多个页面的文本提示和样式
- 更新应用版本至2.0.49
2026-05-09 11:12:34 +08:00
a38187c13f chore: 视频播放下一集自动保持倍速设置;增加2.5倍速 2026-04-14 10:24:41 +08:00
3b5920cfa5 chore: 更新edu-core依赖至v1.0.11 2026-03-27 09:36:40 +08:00
6fddc1cb4a chore: 小班作业心得思考题等编辑框提示修改
- 将应用版本从2.0.46提升至2.0.47
- 更新edu-core依赖版本至1.0.10
- 在manifest.json中新增读取外部存储和媒体图片的权限
- 修改多个页面的文本提示以提高用户体验
2026-03-27 09:34:02 +08:00
32c625ab2a fix: 修复固定分类逻辑以确保正确处理当前索引和项目
- 优化了固定分类的判断逻辑,确保在当前索引为 null 或 undefined 时正确初始化,并在固定分类存在时调用 curseClick 方法。
2026-03-25 17:44:35 +08:00
2fd84c57e0 fix: 更新订单重复购买的确认按钮文本为继续购买
- 将订单提交组件中的确认按钮文本从“确定”修改为“继续购买”,以更清晰地表达用户操作意图。
2026-03-25 17:44:22 +08:00
ddb8bf6cab chore: remove launch.json configuration file
- Deleted the launch.json file which contained debugging configurations for various app types and launch types.
2026-03-25 17:42:56 +08:00
03e031ac81 feat(订单): 添加预售商品提示功能
- 在订单提交组件中添加预售商品提示弹窗
- 新增预售商品备注接口调用
- 修改VIP购买提示文本,明确不包含论坛权益
- 调整开发环境API配置
2026-03-24 18:46:08 +08:00
2b208f5dd6 chore: 用户观看时长上传和统计
- 在用户信息页面中,增加用户资料的显示,包括今日观看和总观看时长
- 优化课程详情页中视频组件的传递参数,确保课程ID和目录ID的正确传递
- 注释掉不必要的样式代码以提升可读性
2026-03-24 14:23:48 +08:00
26 changed files with 1411 additions and 2146 deletions

View File

@@ -1,38 +0,0 @@
{
// launch.json 配置了启动调试时相关设置configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
// launchtype项可配置值为local或remote, local代表前端连本地云函数remote代表前端连云端云函数
"version" : "0.0",
"configurations" : [
{
"app" : {
"launchtype" : "remote"
},
"app-plus" : {
"launchtype" : "remote"
},
"default" : {
"launchtype" : "local"
},
"h5" : {
"launchtype" : "remote"
},
"mp-weixin" : {
"launchtype" : "local"
},
"provider" : "aliyun",
"type" : "uniCloud"
},
{
"playground" : "custom",
"type" : "uni-app:app-ios"
},
{
"playground" : "custom",
"type" : "uni-app:app-android"
},
{
"playground" : "standard",
"type" : "uni-app:app-ios_simulator"
}
]
}

View File

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

View File

@@ -92,6 +92,9 @@ Vue.component('common-order-submit', commonOrderSubmit);
import CommonCourseVideo from 'edu-core/components/course-video'
Vue.component('CommonCourseVideo', CommonCourseVideo);
import CommonRefundDestination from 'edu-core/components/order/refund-destination.vue'
Vue.component('common-refund-destination', CommonRefundDestination);
import commonCoupon from '@/pages/component/commonComponents/coupon/index.vue'
Vue.component('common-coupon', commonCoupon);
import commonGoodsList from '@/pages/component/commonComponents/goodsList.vue'

View File

@@ -12,8 +12,8 @@
"src" : "图片路径"
}
],
"versionName" : "2.0.43",
"versionCode" : 2043,
"versionName" : "2.0.49",
"versionCode" : 2049,
"sassImplementationName" : "node-sass",
"app-plus" : {
"nvueCompiler" : "uni-app",
@@ -63,6 +63,7 @@
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"",
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
@@ -70,6 +71,8 @@
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\"/>",
"<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",
@@ -437,7 +440,9 @@
"uniStatistics" : {
"enable" : true
}
}
},
"fallbackLocale" : "zh-Hans",
"locale" : "zh-Hans"
}
// 小程序特有相关

20
package-lock.json generated
View File

@@ -11,7 +11,7 @@
"dependencies": {
"animate.css": "^4.1.1",
"e-peanut": "file:",
"edu-core": "file:../edu-core",
"edu-core": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#v1.0.13",
"element-plus": "^2.9.6",
"epubjs": "^0.3.93",
"jquery": "^2.2.4",
@@ -23,11 +23,6 @@
" ../edu-core": {
"extraneous": true
},
"../edu-core": {
"version": "1.0.7",
"license": "ISC",
"devDependencies": {}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
@@ -440,8 +435,9 @@
"link": true
},
"node_modules/edu-core": {
"resolved": "../edu-core",
"link": true
"version": "1.0.13",
"resolved": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#b5ece8b8abfeba98428f6e2191efae3312b5036f",
"license": "ISC"
},
"node_modules/element-plus": {
"version": "2.11.5",
@@ -4177,7 +4173,7 @@
"requires": {
"animate.css": "^4.1.1",
"e-peanut": "file:",
"edu-core": "file:../edu-core",
"edu-core": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#v1.0.13",
"element-plus": "^2.9.6",
"epubjs": "^0.3.93",
"jquery": "^2.2.4",
@@ -4498,7 +4494,8 @@
}
},
"edu-core": {
"version": "file:../edu-core"
"version": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#b5ece8b8abfeba98428f6e2191efae3312b5036f",
"from": "edu-core@git+https://git.nuttyreading.com/chenghuan/edu-core.git#v1.0.13"
},
"element-plus": {
"version": "2.11.5",
@@ -7259,7 +7256,8 @@
}
},
"edu-core": {
"version": "file:../edu-core"
"version": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#b5ece8b8abfeba98428f6e2191efae3312b5036f",
"from": "edu-core@git+https://git.nuttyreading.com/chenghuan/edu-core.git#v1.0.13"
},
"element-plus": {
"version": "2.11.5",

View File

@@ -7,7 +7,7 @@
"dependencies": {
"animate.css": "^4.1.1",
"e-peanut": "file:",
"edu-core": "file:../edu-core",
"edu-core": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#v1.0.13",
"element-plus": "^2.9.6",
"epubjs": "^0.3.93",
"jquery": "^2.2.4",

View File

@@ -170,6 +170,18 @@
}
}
},
{
"path": "pages/bookShop/refundDestination",
"style": {
"navigationBarTitleText": "钱款去向",
"enablePullDownRefresh": false,
"app-plus": {
"bounce": "none",
"titleNView": false,
"popGesture": "none"
}
}
},
{
"path": "pages/hufen/hufen",
"style": {

View File

@@ -90,6 +90,16 @@
v-if="orderContet.orderStatus == 5"
>已超时</text
>
<text
class="orderState orderState6"
v-if="orderContet.orderStatus == 6"
>已退款</text
>
<text
class="orderState orderState7"
v-if="orderContet.orderStatus == 7"
>退款中</text
>
</view>
<view
class="orderContent"
@@ -775,6 +785,8 @@ export default {
this.OverOrder();
} else if (data.text == "查看物流") {
this.seeExpressDetail(this.orderContet);
} else if (data.text == "申请退款") {
this.confirmApplyRefund();
}
},
async clickIcon(data) {
@@ -783,6 +795,53 @@ export default {
this.kefu();
}
},
confirmApplyRefund() {
uni.showModal({
title: "提示",
content: "确认申请订单内所有商品退款吗?",
confirmText: "确认",
cancelText: "取消",
success: (res) => {
if (res.confirm) {
this.submitOrderRefund();
}
},
});
},
submitOrderRefund() {
if (!this.orderContet || !this.orderContet.orderId) return;
this.$http
.request({
url: "book/buyOrder/refundOrder",
method: "POST",
data: {
order_id: this.orderContet.orderId,
},
header: {
"Content-Type": "application/json",
},
})
.then((res) => {
if (res.code == 0) {
uni.showToast({
icon: "none",
title: "退款成功",
});
this.getOrderList();
return;
}
uni.showToast({
icon: "none",
title: (res && (res.msg || res.errMsg)) || "退款失败",
});
})
.catch((e) => {
uni.showToast({
icon: "none",
title: (e && (e.msg || e.errMsg)) || "退款失败",
});
});
},
// 复制到剪切板
copyData(data) {
uni.setClipboardData({
@@ -1188,10 +1247,19 @@ export default {
text: "继续付款",
});
}
if (this.orderContet.orderStatus == 0) {
// medicine注释取消订单按钮
// if (this.orderContet.orderStatus == 0) {
// this.customButton.push({
// width: "160rpx",
// text: "取消订单",
// color: "#333",
// backgroundColor: "#f0f0f0",
// });
// }
if (this.orderContet.refundableStatus === true) {
this.customButton.push({
width: "160rpx",
text: "取消订单",
text: "申请退款",
color: "#333",
backgroundColor: "#f0f0f0",
});
@@ -1214,6 +1282,10 @@ export default {
this.titleStat = "待收到";
} else if (this.orderContet.orderStatus == 3) {
this.titleStat = "已完成";
} else if (this.orderContet.orderStatus == 6) {
this.titleStat = "已退款";
} else if (this.orderContet.orderStatus == 7) {
this.titleStat = "退款中";
}
if (
this.orderContet.orderStatus >= 2 &&
@@ -1256,10 +1328,28 @@ export default {
},
});
},
checkPayTimeout(payItem) {
const createTime = payItem && payItem.createTime;
if (!createTime) return true;
const createdAt = new Date(String(createTime).replace(/-/g, "/")).getTime();
if (!createdAt) return true;
const expired = Date.now() - createdAt > 10 * 60 * 1000;
if (expired) {
uni.showModal({
title: "提示",
content: "订单已超时,不能继续支付,请重新下单",
confirmText: "知道了",
showCancel: false,
});
return false;
}
return true;
},
// 支付
goPay(payItem) {
console.log(payItem, "订单数据");
if (!this.checkPayTimeout(payItem)) return;
if (payItem.paymentMethod == 2) {
console.log("阿里支付");
setPay(
@@ -1403,6 +1493,12 @@ export default {
.orderState5 {
background-color: #787878;
}
.orderState6 {
background-color: #f56c6c;
}
.orderState7 {
background-color: #f56c6c;
}
.guoqi {
font-size: 28rpx;
align-items: center;

View File

@@ -12,7 +12,7 @@
</z-nav-bar>
<view class="cateList flexbox">
<common-sticky
itemStyle="width:20%; height: 68rpx;font-size:24rpx;"
itemStyle="width:auto; padding: 0 20rpx; height: 68rpx;font-size:22rpx;"
:list="ordersTabs"
label="name"
:currentCateIndex="currentCateIndex"
@@ -111,6 +111,16 @@
v-show="slotProps.row.orderStatus == 5"
>已过期</text
>
<text
class="orderstatus"
v-show="slotProps.row.orderStatus == 6"
>已退款</text
>
<text
class="orderstatus"
v-show="slotProps.row.orderStatus == 7"
>退款中</text
>
</view>
</view>
<view v-if="slotProps.row.orderType == 'trainingClass'" class="bookinfolist">
@@ -392,17 +402,12 @@
</view>
<view
class="operation_box boxShadow"
v-if="slotProps.row.isShowMore == true"
class="btns flexbox"
:class="{ 'btns-no-more': !hasMoreActions(slotProps.row) }"
style="margin-top: 10rpx"
>
<view
v-if="slotProps.row.orderStatus == 0"
@click.native.stop="canceOrder(slotProps.row)"
>取消订单</view
>
</view>
<view class="btns flexbox" style="margin-top: 10rpx">
<view
v-if="hasMoreActions(slotProps.row)"
class="left"
style="color: #c0c4cc"
@click.native.stop="
@@ -442,6 +447,21 @@
v-if="slotProps.row.orderStatus == 3"
>申请售后</view
>
<view
class="orderstatusbtn"
v-if="
slotProps.row.orderStatus == 6 ||
slotProps.row.orderStatus == 7
"
@click.stop="goRefundDestination(slotProps.row)"
>钱款去向</view
>
<view
class="orderstatusbtn"
v-if="slotProps.row.refundableStatus === true"
@click.stop="confirmApplyRefund(slotProps.row)"
>申请退款</view
>
<!-- <view
class="orderstatusbtn"
v-if="item.orderStatus == 3 && userRecordid == null"
@@ -615,12 +635,7 @@ export default {
come: "2",
isShowTab: false,
isLoadingHide: false,
moreList: [
{
name: "取消订单",
key: "false",
},
],
moreList: [],
currentCateIndex: 0,
pagination: {
// 请求参数
@@ -671,6 +686,16 @@ export default {
value: 3,
badge: {},
},
{
name: "已退款",
value: 6,
badge: {},
},
{
name: "退款中",
value: 7,
badge: {},
},
],
selectOrderInfo: {},
ordersListTab: 1,
@@ -742,15 +767,26 @@ export default {
},
selectClick(index) {
console.log("index at line 609:", index);
if (index.key == "false") {
if (index.key == "cancelOrder") {
this.isShowMore = false;
this.canceOrder(this.selectOrderInfo);
}
},
openMore(row, index) {
const actions = this.getMoreActions(row);
if (!actions.length) return;
this.moreList = actions;
this.selectOrderInfo = row;
this.isShowMore = true;
},
hasMoreActions(row) {
return this.getMoreActions(row).length > 0;
},
getMoreActions(row) {
const actions = [];
// 取消订单功能已屏蔽,更多操作为空时不展示“更多”按钮
return actions;
},
handleCopy(value, title) {
this.$commonJS.handleCopy(value, title);
},
@@ -813,6 +849,60 @@ export default {
val.orderSn,
});
},
goRefundDestination(row) {
uni.navigateTo({
url: "/pages/bookShop/refundDestination?orderId=" + row.orderId,
});
},
confirmApplyRefund(row) {
uni.showModal({
title: "提示",
content: "确认申请订单内所有商品退款吗?",
confirmText: "确认",
cancelText: "取消",
success: (res) => {
if (res.confirm) {
this.submitOrderRefund(row);
}
},
});
},
submitOrderRefund(orderRow) {
if (!orderRow || !orderRow.orderId) return;
this.$http
.request({
url: "book/buyOrder/refundOrder",
method: "POST",
data: {
orderId: orderRow.orderId,
},
header: {
"Content-Type": "application/json",
},
})
.then((res) => {
if (res.code == 0) {
uni.showToast({
icon: "none",
title: "退款成功",
});
this.pagination.page = 1;
this.newList = [];
this.getBookList(this.ordersListTab, false);
return;
}
uni.showToast({
icon: "none",
title: (res && (res.msg || res.errMsg)) || "退款失败",
});
})
.catch((e) => {
uni.showToast({
icon: "none",
title: (e && (e.msg || e.errMsg)) || "退款失败",
});
});
},
getBookList(flag, refreshflag) {
this.isLoadingHide = false;
var that = this;
@@ -843,6 +933,8 @@ export default {
// * 3已完成
// * 4: 交易失败
// * 5: 已过期
// * 6: 已退款
// * 7: 退款中
console.log("res at line 757:", res);
that.map = res.data;
@@ -872,7 +964,7 @@ export default {
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-过期 6-已退款 7-退款中
...this.pagination,
// limit: 10,
// page: this.newestpage,
@@ -908,9 +1000,27 @@ export default {
console.log(e);
});
},
checkPayTimeout(payItem) {
const createTime = payItem && payItem.createTime;
if (!createTime) return true;
const createdAt = new Date(String(createTime).replace(/-/g, "/")).getTime();
if (!createdAt) return true;
const expired = Date.now() - createdAt > 10 * 60 * 1000;
if (expired) {
uni.showModal({
title: "提示",
content: "订单已超时,不能继续支付,请重新下单",
confirmText: "知道了",
showCancel: false,
});
return false;
}
return true;
},
// 支付
goPay(payItem) {
console.log(payItem, "订单数据");
if (!this.checkPayTimeout(payItem)) return;
if (payItem.paymentMethod == 2) {
console.log("阿里支付");
setPay(
@@ -1542,6 +1652,15 @@ export default {
}
}
}
.btns.btns-no-more {
justify-content: flex-end;
.right {
width: auto;
max-width: 100%;
}
}
}
.mb30 {
@@ -1584,7 +1703,7 @@ export default {
}
/deep/.u-tabs__wrapper__nav__item {
padding: 0 !important;
// padding: 0 !important;
}
.commonDetailPage {

View File

@@ -0,0 +1,27 @@
<template>
<view class="page-wrap">
<public-module></public-module>
<common-refund-destination :order-id="orderId" :http="$http" />
</view>
</template>
<script>
export default {
data() {
return {
orderId: '',
}
},
onLoad(options) {
if (options && options.orderId != null) {
this.orderId = options.orderId
}
},
}
</script>
<style scoped>
.page-wrap {
min-height: 100vh;
}
</style>

View File

@@ -519,6 +519,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>
@@ -616,6 +627,9 @@
orderModalShowInfo: {},
orderModalShow: false,
presaleRemarkModalShow: false,
presaleRemarkModalContent: "",
presaleRemarkModalResolve: null,
payType: 1,
freightNum: 0,
addressData: {
@@ -1350,6 +1364,62 @@
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") {
@@ -1457,6 +1527,11 @@
});
thisproduct = thisproduct.join(",");
}
const passPresaleRemark = await this.checkPresaleRemark();
if (!passPresaleRemark) {
this.buyingFlag = false;
return;
}
if (
this.historyOrderInfo &&
thisproduct == this.historyOrderInfo.product &&

View File

@@ -249,9 +249,9 @@ export default {
gotoDetail(v) {
this.$emit("hancleClick", v);
},
onHandleClickBuy() {
onHandleClickBuy(e) {
this.$emit("selectGoodsData", this.selectGoodsData);
this.$emit("onHandleClickBuy");
this.$emit("onHandleClickBuy", e);
},
},
onBackPress() {
@@ -430,4 +430,8 @@ export default {
font-weight: 700;
}
}
.title_list {
margin-bottom: 20rpx;
}
</style>

View File

@@ -1,6 +1,6 @@
<template>
<!-- <scroll-view class="scroll-view_H cateList" scroll-x="true" scroll-left="0"> -->
<view class="" style="background-color: #fff; width: 100%">
<view class="" style="background-color: #fff; width: 100%; padding: 0 20rpx;">
<u-tabs
lineWidth="30"
lineColor="#258feb"

View File

@@ -17,7 +17,7 @@
<CommonCourseVideo
:video-list="videoArray"
:current-index="currentCateIndex !== null ? currentCateIndex : 0"
:course="{courseTitle:options.navTitle, chapterTitle: curriculumData.title}"
:course="{courseTitle:options.navTitle, chapterTitle: curriculumData.title, catalogueId: curriculumData.catalogueId || '', courseId: curriculumData.courseId || options.courseId || ''}"
:cover="options.curriculumImgUrl || ''"
:http="$http"
/>
@@ -120,7 +120,7 @@
<view class="page-body">
<view class='wrapper'>
<view class="editor-wrapper">
<editor @input="editorIput" id="editor" class="ql-container" placeholder="请输入您的见解..."
<editor @input="editorIput" id="editor" class="ql-container" placeholder="请您一次性提交答题内容,提交后会进入评分流程"
show-img-size show-img-toolbar show-img-resize
@statuschange="onStatusChange" :read-only="readOnly"
@ready="onEditorReady">
@@ -934,9 +934,9 @@
}
.u-grid-list {
// height: 40rpx;
}
// .u-grid-list {
// // height: 40rpx;
// }
.searchList {
.item {
@@ -1133,7 +1133,8 @@
button {
font-size: 32rpx;
@include theme('btn_bg') color: #fff;
@include theme('btn_bg');
color: #fff;
height: 80rpx;
line-height: 80rpx;
border-radius: 50rpx;
@@ -1236,11 +1237,11 @@
// align-items: center;
}
.headImage {
// height: 400rpx !important;
}
// .headImage {
// // height: 400rpx !important;
// }
.commonDetailPage {}
// .commonDetailPage {}
.curriulum_box {
margin-top: 20rpx;
@@ -1263,9 +1264,9 @@
}
}
/deep/.titleItem {
// width: calc(100% - 120rpx) !important;
}
// /deep/.titleItem {
// // width: calc(100% - 120rpx) !important;
// }
/deep/.scroll-view-item:nth-child(2n-1) {
background-color: transparent !important;
@@ -1396,7 +1397,7 @@
width: calc(100% - 150rpx) !important;
.aui-text-danger {
display: inline-block;
// display: inline-block;
float: right;
}
}

View File

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

View File

@@ -790,8 +790,13 @@ export default {
this.$refs.commonSelectGoods.open();
},
//点击下单按钮
onHandleClickBuy() {
if(this.buttonType==0){ //如果是加入购物车
onHandleClickBuy(e) {
if (e && e.content && e.content.text === "购物车") {
this.onHandleClick();
return;
}
const clickType = typeof (e && e.index) === "number" ? e.index : this.buttonType;
if(clickType==0){ //如果是加入购物车
console.log('剩余', this.selectGoodsData.productStock)
if(this.selectGoodsData.productStock==0){
uni.showToast({

View File

@@ -132,6 +132,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

@@ -1,8 +1,12 @@
<template>
<view class="container">
<view
class="container commonPageBox"
style="background-color: #fff !important"
>
<!-- 公共组件-每个页面必须引入 -->
<public-module></public-module>
<z-nav-bar title="吴门医述1111"></z-nav-bar>
<z-nav-bar title="吴门医述"></z-nav-bar>
<!-- <uni-search-bar @confirm="search" :focus="true" v-model="searchValue" @blur="blur" @focus="focus" @input="input"
@cancel="cancel" @clear="clear">
</uni-search-bar> -->
@@ -10,8 +14,13 @@
<view class="contentBox">
<!-- <scroll-view class="scroll-view_H oneCateList" scroll-x="true" scroll-left="0"> -->
<view class="oneCateList flexbox">
<text :class="[curOneCateIndex == index ? 'cur' : '']" @click="setOneCateIndex(item,index)"
v-for="(item, index) in oneCateList" :key="item.type">{{item.title}}</text>
<text
:class="[curOneCateIndex == index ? 'cur' : '']"
@click="setOneCateIndex(item, index)"
v-for="(item, index) in oneCateList"
:key="item.type"
>{{ item.title }}</text
>
</view>
<!-- <view class="search_box" v-if="oneCateList.length > 0">
<u-search @click="checkDisable" placeholder="请输入方剂名" @focus="focus" @clear="clear" v-model="searchValue"
@@ -28,70 +37,144 @@
</view>
</view> -->
<!-- </scroll-view> -->
<view v-show="!showSearchList">
<template v-if="!showSearchList">
<view class="grid twoCateList" v-if="twoCateList.length > 0">
<u-grid :col="3" border class="u-grid-list">
<u-grid-item v-for="(item, index) in twoCateList" :key="item.dictType"
@click="setTwoCateIndex(item, index)">
<view :class="['grid-text',curTwoCateIndex == index ? 'cur' : '']">{{item.dictValue}}</view>
</u-grid-item>
</u-grid>
<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)"
>
<view
:class="['grid-text', curTwoCateIndex == index ? 'cur' : '']"
>{{ item.dictValue }}
</view>
</view>
</view>
</view>
<view
:class="` titleList`"
:style="`height:calc(100% - ${scrollViewHeight * 2}rpx;`"
>
<scroll-view
scroll-y="true"
class="scroll-Y"
v-if="titleList.length > 0"
>
<template v-if="curOneCateIndex == 2 && curTwoCateIndex == 2">
<!-- 吴门缘起-吴门之徽 -->
<view class="titleList" v-if="curOneCateIndex == 2&&curTwoCateIndex == 2">
<u-grid :col="3" v-if="titleList.length > 0">
<u-grid-item v-for="(item, index) in titleList" :key="item.id" @click="previewImage(item.url)"
style="align-items: flex-start;">
<!-- <view :class="['titleItem']">{{item.name}}</view> -->
<img :src="item.url" alt="" class="wmzhimg" mode="aspectFit">
<u-grid :col="3">
<u-grid-item
class="scroll-view-item"
v-for="(item, index) in titleList"
:key="item.id"
@click="previewImage(item.url)"
style="align-items: flex-start"
>
<img
:src="item.url"
alt=""
class="wmzhimg"
mode="aspectFit"
/>
</u-grid-item>
</u-grid>
<u-divider v-else text="暂无数据哦~"></u-divider>
</view>
</template>
<template
v-else-if="
curOneCateIndex == 0 &&
(curTwoCateIndex == 0 || curTwoCateIndex == 2)
"
>
<common-list
:dataList="titleList"
@hancleClick="gotoDetail"
label="title"
>
</common-list>
<!-- 学术贡献-学术思想和学术平台 -->
<view class="titleList" v-else-if="curOneCateIndex == 0&&(curTwoCateIndex == 0||curTwoCateIndex == 2)">
<u-grid :col="1" v-if="titleList.length > 0">
<u-grid-item v-for="(item, index) in titleList" :key="item.id" @click="gotoDetail(item)"
</template>
<template v-else-if="curOneCateIndex == 0 && curTwoCateIndex == 1">
<u-divider text="点击标签进入出版专著"></u-divider>
</template>
<template v-else-if="curOneCateIndex == 0 || curOneCateIndex == 2">
<common-list
:dataList="titleList"
@hancleClick="gotoDetail"
label="name"
>
</common-list>
<!-- <u-grid :col="1">
<u-grid-item class="scroll-view-item " v-for="(item, index) in titleList" :key="item.id"
@click="gotoDetail(item)"
style="align-items: flex-start;border-bottom: 2px solid #fff;">
<view :class="['titleItem']">{{ item.name }}</view>
</u-grid-item>
</u-grid> -->
</template>
<template v-if="curOneCateIndex == 3">
<common-list
:dataList="titleList"
@hancleClick="gotoDetail"
label="title"
>
</common-list>
<!-- <u-grid :col="1">
<scroll-view class="scroll-Y" scroll-y="true">
<u-grid-item class="scroll-view-item " v-for="(item, index) in titleList"
:key="item.id" @click="gotoDetail(item)"
style="align-items: flex-start;border-bottom: 2px solid #fff;">
<view :class="['titleItem']">{{ item.title }}</view>
</u-grid-item>
</u-grid>
</u-grid-item></scroll-view>
</u-grid> -->
</template>
<template v-if="curOneCateIndex == 1">
<view
class="scroll-view-item"
v-for="(item, index) in titleList"
:key="item.id"
@click="gotoDetail(item)"
style="
align-items: flex-start;
border-bottom: 2px solid #fff;
display: flex;
padding: 20rpx 0;
"
>
<view style="width: 280rpx; text-align: center">
<img
src=""
v-if="item.imageslist && item.imageslist.length == 0"
class="chImage"
/>
<img
:src="item.imageslist && item.imageslist[0]"
v-else
class="chImage"
/>
</view>
<view :class="['titleItem']">{{ item.name }}</view>
</view>
</template>
</scroll-view>
<u-divider v-else text="暂无数据哦~"></u-divider>
</view>
<!-- 学术贡献-出版专著 -->
<view class="titleList" v-else-if="curOneCateIndex == 0&&(curTwoCateIndex == 1)">
<u-divider text="点击标签进入出版专著"></u-divider>
</template>
</view>
<!-- 其他 -->
<view class="titleList" v-else>
<u-grid :col="1" v-if="titleList.length > 0&&(curOneCateIndex==0||curOneCateIndex==2)">
<u-grid-item v-for="(item, index) in titleList" :key="item.id" @click="gotoDetail(item)"
style="align-items: flex-start;border-bottom: 2px solid #fff;">
<view :class="['titleItem']">{{item.name}}</view>
</u-grid-item>
</u-grid>
<u-grid :col="1" v-if="titleList.length > 0&&curOneCateIndex==3">
<u-grid-item v-for="(item, index) in titleList" :key="item.id" @click="gotoDetail(item)"
style="align-items: flex-start;border-bottom: 2px solid #fff;">
<view :class="['titleItem']">{{item.title}}</view>
</u-grid-item>
</u-grid>
<view :col="1" v-if="titleList.length > 0&&curOneCateIndex==1">
<view v-for="(item, index) in titleList" :key="item.id" @click="gotoDetail(item)"
style="align-items: flex-start;border-bottom: 2px solid #fff;display: flex;padding: 20rpx 0;">
<view style="width: 280rpx;text-align: center;">
<img src="" v-if="item.imageslist&&item.imageslist.length==0" class="chImage">
<img :src="item.imageslist&&item.imageslist[0]" v-else class="chImage">
</view>
<view :class="['titleItem']">{{item.name}}</view>
</view>
</view>
<u-divider text="暂无数据哦~" v-if="titleList.length==0"></u-divider>
</view>
</view>
</view>
<!-- <view class="search_box flexbox" @click="">
<view class="search">
@@ -115,33 +198,34 @@
</view>
</u-modal> -->
<z-navigation></z-navigation>
</view>
</template>
<script>
import $http from '@/config/requestConfig.js';
import {
mapState
} from 'vuex';
import $http from "@/config/requestConfig.js";
import { mapState } from "vuex";
export default {
data() {
return {
playData: {},
searchValue: '',
oneCateList: [{
searchValue: "",
oneCateList: [
{
title: "学术贡献",
type: 'medicaldesBookType'
}, {
type: "medicaldesBookType",
},
{
title: "学术传承",
type: 'inheritType'
}, {
type: "inheritType",
},
{
title: "吴门缘起",
type: 'lightType'
type: "lightType",
// }, {
// title: "吴门纪实",
// type: 'recordType'
}], // 一级分类标题1
},
], // 一级分类标题1
twoCateList: [], // 二级分类标题
titleList: [], // 方剂标题
curOneCateIndex: 0, // 当前选中的一级分类
@@ -151,26 +235,26 @@
userMes: {}, // 用户信息
searchDisable: false, // 搜索不可用
limitShow: false,
limitTitle: '提示',
limitContent: ''
}
limitTitle: "提示",
limitContent: "",
scrollViewHeight: 0,
};
},
onLoad() {
this.getUserInfo()
this.getUserInfo();
// this.getCateList()
},
onHide() {
// this.showSearchList = false
// this.searchList = []
},
computed: {
...mapState(['userInfo']),
...mapState(["userInfo"]),
},
methods: {
// 检查是有权限使用搜索功能
checkDisable() {
console.log('点击了')
console.log("点击了");
},
// 显示无权限弹窗
// showNoRights() {
@@ -191,174 +275,183 @@
getUserInfo() {
// 用户详情
if (this.userInfo.id != undefined) {
this.$http
.post('book/user/info/' + this.userInfo.id)
.then(res => {
this.userMes = res.user
this.getCateList()
console.log(this.userMes, '呼呼')
this.$http.post("book/user/info/" + this.userInfo.id).then((res) => {
this.userMes = res.user;
this.getCateList();
console.log(this.userMes, "呼呼");
});
}
},
// 详情
gotoDetail(item) {
console.log('111', item)
console.log('this.curOneCateIndex', this.curOneCateIndex)
console.log('this.curTwoCateIndex', this.curTwoCateIndex)
console.log("111", item);
console.log("this.curOneCateIndex", this.curOneCateIndex);
console.log("this.curTwoCateIndex", this.curTwoCateIndex);
if (this.curOneCateIndex == 0) {
if(item.contentType == 2){
uni.navigateTo({
// url: '../bookShop/commodityDetail?id=' + item.id
url: './xueshuwebView?id=' + item.id
})
}else{
uni.navigateTo({
// url: '../bookShop/commodityDetail?id=' + item.id
url: './xueshugongxianDetail?id=' + item.id
})
}
return
url: "./xueshugongxianDetail?id=" + item.id,
});
return;
}
if (this.curOneCateIndex == 1) {
uni.navigateTo({
url: "./medicaldesDetail?id=" + item.id
})
return
url: "./medicaldesDetail?id=" + item.id,
});
return;
}
if (this.curOneCateIndex == 2) {
console.log('111', item)
console.log("111", item);
uni.navigateTo({
url: './video?title=' + item.name + '&src=' + item.url
})
return
url: "./video?title=" + item.name + "&src=" + item.url,
});
return;
}
if (this.curOneCateIndex == 3) {
console.log('111', item)
console.log("111", item);
uni.navigateTo({
url: "./recordDetail?id=" + item.id
})
return
url: "./recordDetail?id=" + item.id,
});
return;
}
},
// 获取名称
getTitles(dictType) {
console.log('dictType', dictType)
console.log("dictType", dictType);
if (this.curOneCateIndex == 0) {
if (dictType == 2) {
uni.navigateTo({
url: './zhuanzhuchuban'
})
return
url: "./zhuanzhuchuban",
});
return;
}
$http.request({
$http
.request({
url: "book/generalArticle/articleByPage",
method: "POST",
data: {
// loadAnimate: 'none', // 请求加载动画
"type": dictType==1?'1':'2',
"limit": 1000,
"current": 1,
type: dictType == 1 ? "1" : "2",
limit: 1000,
current: 1,
},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
}).then(res => {
console.log(res, '内容获取成功')
if (res.code == 0 && res.result && res.result.records.length > 0) {
this.titleList = res.result.records
} else {
this.titleList = []
}
}).catch(e => {
this.titleList = []
console.log(e)
})
.then((res) => {
console.log(res, "内容获取成功");
if (res.code == 0 && res.result && res.result.records.length > 0) {
this.titleList = res.result.records;
} else {
this.titleList = [];
}
})
.catch((e) => {
this.titleList = [];
console.log(e);
});
}
if (this.curOneCateIndex == 1) {
$http.request({
$http
.request({
url: "book/medicaldes/inheritListByPage",
method: "POST",
data: {
// loadAnimate: 'none', // 请求加载动画
'dictType': dictType,
"limit": 1000,
"current": 1
dictType: dictType,
limit: 1000,
current: 1,
},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
}).then(res => {
console.log(res, '内容获取成功')
})
.then((res) => {
console.log(res, "内容获取成功");
if (res.code == 0 && res.result.records.length > 0) {
this.titleList = res.result.records
this.titleList = res.result.records;
for (let i = 0; i < this.titleList.length; i++) {
this.titleList[i].imageslist = [];
this.titleList[i].imageslist = this.titleList[i].img.split(";");
}
} else {
this.titleList = []
this.titleList = [];
}
}).catch(e => {
this.titleList = []
console.log(e)
})
.catch((e) => {
this.titleList = [];
console.log(e);
});
}
if (this.curOneCateIndex == 2) {
$http.request({
$http
.request({
url: "book/medicaldes/lightListByType?type=" + dictType,
method: "POST",
data: {
// loadAnimate: 'none', // 请求加载动画
"limit": 1000,
"page": 1,
limit: 1000,
page: 1,
},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
}).then(res => {
console.log(res, '内容获取成功')
if (res.code == 0 && res.result.length > 0) {
this.titleList = res.result
} else {
this.titleList = []
}
}).catch(e => {
this.titleList = []
console.log(e)
})
.then((res) => {
console.log(res, "内容获取成功");
if (res.code == 0 && res.result.length > 0) {
this.titleList = res.result;
} else {
this.titleList = [];
}
})
.catch((e) => {
this.titleList = [];
console.log(e);
});
}
if (this.curOneCateIndex == 3) {
$http.request({
$http
.request({
url: "book/medicaldes/recordByType?type=" + dictType,
method: "POST",
data: {
// loadAnimate: 'none', // 请求加载动画
"limit": 1000,
"page": 1,
limit: 1000,
page: 1,
},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
}).then(res => {
console.log(res, '内容获取成功')
if (res.code == 0 && res.result.length > 0) {
this.titleList = res.result
} else {
this.titleList = []
}
}).catch(e => {
this.titleList = []
console.log(e)
})
.then((res) => {
console.log(res, "内容获取成功");
if (res.code == 0 && res.result.length > 0) {
this.titleList = res.result;
} else {
this.titleList = [];
}
})
.catch((e) => {
this.titleList = [];
console.log(e);
});
}
},
setTwoCateIndex(item, index) {
let dictType = item.dictType
this.curTwoCateIndex = index
this.getTitles(dictType)
let dictType = item.dictType;
this.curTwoCateIndex = index;
this.getTitles(dictType);
},
setOneCateIndex(item, index) {
async setOneCateIndex(item, index) {
console.log(index, 99999);
var that = this;
// if(this.userMes.tgdzPower == 0){
// let that = this
// uni.showModal({
@@ -379,86 +472,136 @@
// })
// return
// }
let type = item.type
this.curOneCateIndex = index
this.curTwoCateIndex = 0
this.searchValue = ''
this.searchList = []
this.showSearchList = false
let type = item.type;
this.curOneCateIndex = index;
this.curTwoCateIndex = 0;
this.searchValue = "";
this.searchList = [];
this.showSearchList = false;
// if (index != 2) {
this.getTowCateList(type)
await this.getTowCateList(type);
// uni.createSelectorQuery().select('.oneCateList').boundingClientRect(function (rect) {
// var height = rect.height
// console.log('元素高度:',);
// }).exec();
// } else {
// this.getJFList(dictType)
// }
},
getTowCateList(type) {
$http.request({
async getTowCateList(type) {
var that = this;
$http
.request({
url: "book/medicaldes/typeList?label=" + type,
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data: {
loadAnimate: 'none', // 请求加载动画
loadAnimate: "none", // 请求加载动画
// 'categoryId': id
},
// header: { //默认 无 说明:请求头
// 'Content-Type': 'application/json'
// },
}).then(res => {
console.log(res, '二级分类获取成功')
})
.then((res) => {
console.log(res, "二级分类获取成功");
if (res.code == 0 && res.result.length >= 0) {
this.twoCateList = res.result
this.twoCateList = res.result;
if (this.curOneCateIndex == 0) {
this.twoCateList = [{
'dictType': "1",
"dictValue": "学术思想"
}, {
'dictType': "2",
"dictValue": "出版专著"
}, {
'dictType': "3",
"dictValue": "学术平台"
}]
this.twoCateList = [
{
dictType: "1",
dictValue: "学术思想",
},
{
dictType: "2",
dictValue: "出版专著",
},
{
dictType: "3",
dictValue: "学术平台",
},
];
}
if (this.curOneCateIndex == 2) {
this.twoCateList = [{
'dictType': "1",
"dictValue": "吴门之歌"
}, {
'dictType': "2",
"dictValue": "巴山夜语"
}, {
'dictType': "3",
"dictValue": "吴门之徽"
}]
this.twoCateList = [
{
dictType: "1",
dictValue: "吴门之歌",
},
{
dictType: "2",
dictValue: "巴山夜语",
},
{
dictType: "3",
dictValue: "吴门之徽",
},
];
}
if (this.curOneCateIndex == 3) {
this.twoCateList = [{
'dictType': "1",
"dictValue": "学术贡献"
}, {
'dictType': "2",
"dictValue": "抗疫纪实"
}, {
'dictType': "3",
"dictValue": "吴门公益"
}]
this.twoCateList = [
{
dictType: "1",
dictValue: "学术贡献",
},
{
dictType: "2",
dictValue: "抗疫纪实",
},
{
dictType: "3",
dictValue: "吴门公益",
},
];
}
this.getTitles(this.twoCateList[0].dictType)
} else {
this.twoCateList = []
this.titleList = []
this.getTitles(this.twoCateList[0].dictType);
this.$nextTick(async () => {
// await uni.createSelectorQuery().select('.uni-tabbar').boundingClientRect(function (rect) {
// console.log(rect.height, '3333')
// // var height = 42 + rect.height + 10;
// // that.scrollViewHeight = height;
// // console.log(that.scrollViewHeight, '111111')
// // that.$forceUpdate()
// // console.log('元素高度2', height);
// }).exec();
await uni
.createSelectorQuery()
.in(this)
.select(".twoCateList")
.boundingClientRect(function (rect) {
if (!rect || typeof rect.height !== "number") {
return;
}
}).catch(e => {
this.twoCateList = []
this.titleList = []
console.log(e)
console.log(rect.height, "22222");
var height = 42 + rect.height + 20;
that.scrollViewHeight = height;
console.log(that.scrollViewHeight, "111111");
that.$forceUpdate();
console.log("元素高度2", height);
})
.exec();
});
} else {
this.twoCateList = [];
this.titleList = [];
}
})
.catch((e) => {
this.twoCateList = [];
this.titleList = [];
console.log(e);
});
},
transformData(inputData) {
const result = {};
inputData.forEach(item => {
const {
letter
} = item;
inputData.forEach((item) => {
const { letter } = item;
if (!result[letter]) {
result[letter] = [];
}
@@ -494,9 +637,9 @@
// })
// },
getCateList(id) {
id ? '' : id = 0
this.twoCateList = []
this.curTwoCateIndex = 0
id ? "" : (id = 0);
this.twoCateList = [];
this.curTwoCateIndex = 0;
// 0为获取顶级分类其他为搜索下级分类目前的逻辑顶级是写死的所以可能只会涉及到搜索第二级
// $http.request({
// url: "book/prescript/prescriptCategoryList",
@@ -512,7 +655,7 @@
// console.log(res, '脉穴分类获取成功')
// if (res.code == 0 && res.list.length > 0) {
// this.oneCateList = res.list
this.getTowCateList(this.oneCateList[0].type)
this.getTowCateList(this.oneCateList[0].type);
// } else {
// this.oneCateList = []
// }
@@ -524,15 +667,15 @@
// 放大图片
previewImage(url) {
console.log(url)
console.log(url);
uni.previewImage({
urls: [url],
longPressActions: {
itemList: ['很抱歉,暂不支持保存图片到本地'],
itemList: ["很抱歉,暂不支持保存图片到本地"],
success: function (res) {
// console.log(res,'+++++')
}
}
},
},
});
},
// getSearch() {
@@ -623,13 +766,46 @@
plus.key.hideSoftKeybord();
// #endif
},
components: {
},
}
components: {},
};
</script>
<style lang="scss" scoped>
.u-grid-list {
// 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;
@@ -645,15 +821,18 @@
}
.contentBox {
height: auto;
height: calc(100% - 50px);
.oneCateList {
padding: 10rpx;
box-sizing: border-box;
justify-content: space-between;
text {
text-align: center;
display: inline-block;
width: 32%;
padding: 20rpx 0;
padding: 16rpx 0;
font-size: 34rpx;
border-radius: 10rpx;
}
@@ -661,15 +840,16 @@
.cur {
background-color: #55aaff;
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 {
padding: 30rpx 20rpx;
padding: 10rpx 0rpx;
text-align: center;
}
@@ -687,19 +867,11 @@
border-radius: 10rpx;
background-color: #f8f9fa;
.titleItem {
padding: 20rpx 10rpx;
}
.JFtitleItem {
background-color: #ffffff;
padding: 20rpx 10rpx;
width: 100%;
border-bottom: 0.5px solid #f8f9fa;
&:last-child {
border-bottom: 0;
}
}
.wmzhimg {
@@ -709,13 +881,6 @@
}
}
.container {
padding: 10rpx;
min-height: 100vh;
background-color: #fff;
}
.search_box {
margin: 0 auto;
overflow: hidden;
@@ -733,17 +898,16 @@
padding: 0upx 40upx;
background-color: #fff;
border-radius: 20upx;
box-shadow: 0 0px 10px 1px #54a96633;
box-shadow: 0 0px 10px 1px #3ab3ae33;
}
.prompt {
color: #838383;
font-size: 24rpx;
}
.icon_search {
background-image: url('@/static/icon/map_ic_search.png');
background-image: url("@/static/icon/map_ic_search.png");
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
@@ -770,7 +934,36 @@
height: 100rpx;
}
.android-bottom-space {
height: 120rpx;
.scroll-Y {
height: 100%;
}
.scroll-view_H {
white-space: nowrap;
width: 100%;
}
.scroll-view-item {
// height: 300rpx;
// line-height: 300rpx;
// text-align: center;
// font-size: 36rpx;
}
.scroll-view-item_H {
display: inline-block;
width: 100%;
// height: 300rpx;
// line-height: 300rpx;
// text-align: center;
// font-size: 36rpx;
}
.titleList {
height: 100%;
}
.titleList2 {
height: calc(100% - 170rpx);
}
</style>

View File

@@ -29,7 +29,12 @@
</view>
<view class="userInfoBox" style="margin-left: 20rpx;">
<template>
<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>
<!-- <u-tag v-if="userMes.profile" :text="userMes.profile" size="mini" plain plainFill type="success"></u-tag> -->
</template>
<template v-if="userMes.tel">
<view class="phone">手机号({{ userMes.tel }})</view>
@@ -41,6 +46,12 @@
</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>
</template>
</view>
</view>
@@ -128,13 +139,14 @@
<view class="xiugai boxShadow box_fillet">
<common-list :dataList="pageList" @hancleClick="handleClickTab" label="name">
<template slot="rightSlot" slot-scope="slotProps">
              <text
                class="fdButtonBox aui-text-success"
                v-if="slotProps.row.contentType&&slotProps.row.contentType == 'hufen'&&hufenNumber>0"
                style="line-height: 40rpx; font-size: 40rpx;color: #258feb;float: right;"
                >{{ hufenNumber }}<text style="font-size: 30rpx;margin-left: 4rpx;">湖分</text></text
              >
            </template>
<text
v-if="slotProps.row.contentType&&slotProps.row.contentType == 'hufen'&&hufenNumber>0"
class="fdButtonBox aui-text-success"
style="line-height: 40rpx; font-size: 40rpx;color: #258feb;float: right;"
>
{{ hufenNumber }}<text style="font-size: 30rpx;margin-left: 4rpx;">湖分</text>
</text>
</template>
</common-list>
</view>
</view>
@@ -483,6 +495,9 @@
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 || '';
});
}
},
@@ -636,15 +651,23 @@
view {
.name {
width: 100%;
width: 90%;
font-weight: bold;
font-size: 32rpx;
color: #6990c7 !important;
line-height: 1.2;
}
.user-profile{
font-size: 28rpx;
font-weight: normal;
display: inline-block;
}
.phone {
font-size: 26rpx;
color: #6990c7 !important;
margin: 6rpx 0;
}
.per_user_img {
@@ -654,6 +677,12 @@
margin-left: 10rpx;
vertical-align: super;
}
.watch-time {
margin-top: 6rpx;
display: inline-block;
margin-right: 10rpx;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -71,9 +71,9 @@
>
<template slot="labelSlot" slot-scope="slotProps">
<view class="label_content AC_List">
<view style=" display: flex; align-items: center; justify-content: space-between;">
<view class="left">
<view class="title" v-if="slotProps.row.productName">{{ slotProps.row.productName }}</view>
<view class="title" v-else>{{ slotProps.row.orderType }}</view>
<view class="title">{{ slotProps.row.productName || slotProps.row.orderType}}</view>
</view>
<view
:class="`right ${
@@ -81,7 +81,9 @@
}`"
>
<text v-if="slotProps.row.changeAmount > 0">+</text>
<text>{{ slotProps.row.changeAmount }}</text> </view>
<text>{{ slotProps.row.changeAmount }}</text>
</view>
</view>
<view class="AC_mark" v-if="slotProps.row.remark">{{slotProps.row.remark}}</view>
<view class="AC_note" v-if="slotProps.row.note&&slotProps.row.note!='null'">说明{{slotProps.row.note}}</view>
<view class="AC_time">{{ slotProps.row.createTime }}</view>
@@ -339,6 +341,12 @@ export default {
.AC_List {
overflow: hidden;
.title,
.AC_note,
.AC_mark {
word-break: break-word;
overflow-wrap: break-word;
}
.left {
width: calc(100% - 120rpx) !important;
font-weight: 700;
@@ -356,6 +364,19 @@ export default {
font-weight: 700;
color: #333;
}
> view:first-child {
.left {
flex: 1;
min-width: 0;
width: auto !important;
float: none;
}
.right {
flex-shrink: 0;
float: none;
width: auto !important;
}
}
.AC_title {
font-size: 32rpx;

View File

@@ -46,9 +46,9 @@
<view class="in">
<view class="uni-textarea">
<textarea v-show="false" placeholder-style="font-size:26rpx" v-model="form.content"
auto-height placeholder="请输入内容" />
auto-height placeholder="请您一次性提交答题内容,提交后会进入评分流程" />
<view class="editor-wrapper">
<editor @input="editorIput" id="editor" class="ql-container" placeholder="请输入内容..." show-img-size
<editor @input="editorIput" id="editor" class="ql-container" placeholder="请您一次性提交答题内容,提交后会进入评分流程" show-img-size
show-img-toolbar show-img-resize @statuschange="onStatusChange"
:read-only="readOnly" @ready="onEditorReady">
</editor>

View File

@@ -111,7 +111,7 @@
<view class="in">
<view class="uni-textarea">
<textarea placeholder-style="font-size:26rpx" v-model="form.content" maxlength="-1"
auto-height placeholder="请输入内容" />
auto-height placeholder="请您一次性提交答题内容,提交后会进入评分流程" />
</view>
</view>

View File

@@ -642,11 +642,16 @@ export default {
//存储的需要固定分类
this.fixed = uni.getStorageSync("fixed");
//固定分类
if (this.fixed) {
this.curseClick(this.currentItem, this.currentIndex);
} else {
if (this.currentIndex === null || this.currentIndex === undefined) {
this.currentIndex = 0;
this.currentItem = null;
}
if (
this.fixed &&
this.currentItem &&
this.currentIndex !== null &&
this.currentIndex !== undefined
) {
this.curseClick(this.currentItem, this.currentIndex);
}
uni.hideTabBar();
// #ifdef APP-PLUS

View File

@@ -389,4 +389,6 @@ button::after {
}
}
uni-text {
white-space: normal;
}

Binary file not shown.