From 5d8ab9776fb95ec0b6eebcfaf3e6cf51932d7359 Mon Sep 17 00:00:00 2001 From: huliyong <2783385703@qq.com> Date: Wed, 21 May 2025 12:21:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=88=90=E5=B0=B1?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E5=B9=B6=E4=BC=98=E5=8C=96=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在api.js中添加成就模块 - 优化wxUserInfo.vue和Modifyinformation.vue中的绑定手机号逻辑 - 在novelDetail.vue中调整成就获取逻辑 - 新增achievement.js并移除index.js中相关成就接口 - 优化fetch.js的代码格式 - 在category.vue和bookshelf.vue中调整列表展示逻辑 - 优化Giftbox.vue和Giftpurchases.vue的礼物展示和购买逻辑 - 新增myCommentItem.vue组件并优化myComment.vue的评论展示 - 优化center.vue的样式 --- api/api.js | 2 +- api/fetch.js | 28 +- api/http.js | 2 +- api/model/achievement.js | 22 + api/model/index.js | 17 - pages/index/bookshelf.vue | 23 +- pages/index/category.vue | 8 +- pages/index/center.vue | 56 +-- pages_order/auth/Modifyinformation.vue | 2 +- pages_order/auth/wxUserInfo.vue | 2 +- pages_order/comment/myComment.vue | 133 +---- pages_order/components/comment/myCommentItem.vue | 113 +++++ pages_order/novel/Giftbox.vue | 19 +- pages_order/novel/Giftpurchases.vue | 600 +++++++++++++---------- pages_order/novel/novelDetail.vue | 6 +- 15 files changed, 530 insertions(+), 503 deletions(-) create mode 100644 api/model/achievement.js create mode 100644 pages_order/components/comment/myCommentItem.vue diff --git a/api/api.js b/api/api.js index 8ce5cd6..2df6a65 100644 --- a/api/api.js +++ b/api/api.js @@ -6,7 +6,7 @@ let limit = {} let debounce = {} const models = ['login', 'index', 'bookshelf', 'my_book', 'comment', 'task' -, 'order', 'writer'] +, 'order', 'writer', 'achievement'] const config = { // 示例 diff --git a/api/fetch.js b/api/fetch.js index 6443777..6f6d5d6 100644 --- a/api/fetch.js +++ b/api/fetch.js @@ -1,20 +1,20 @@ import api from './api.js' const fetch = (key, data = {}, transform = true, loadingTitle) => { - return new Promise(resolve => { - - const callback = (res) => { - if (!transform) { - resolve(res) - return - } - if (res.code == 200) { - resolve(res.result) - } - } + return new Promise(resolve => { - api(key, data, callback, loadingTitle) - }) + const callback = (res) => { + if (!transform) { + resolve(res) + return + } + if (res.code == 200) { + resolve(res.result) + } + } + + api(key, data, callback, loadingTitle) + }) } -export default fetch +export default fetch \ No newline at end of file diff --git a/api/http.js b/api/http.js index bc01a4c..d9dc4a4 100644 --- a/api/http.js +++ b/api/http.js @@ -37,7 +37,7 @@ function http(uri, data, callback, method = 'GET', showLoading, title) { res.data.message == '操作失败,用户不存在!'){ store.commit('logout', '登录过期了,你可以停留在此页面或去重新登录') console.error('登录过期'); - utils.toLogin() + // utils.toLogin() } if(res.statusCode == 200 && res.data.code != 200 diff --git a/api/model/achievement.js b/api/model/achievement.js new file mode 100644 index 0000000..3b40e48 --- /dev/null +++ b/api/model/achievement.js @@ -0,0 +1,22 @@ + +const api = { + // 设置读者成就等级名称 + setAchievementName: { + url: '/all_achievement/setAchievementName', + method: 'GET', + auth: true, + }, + // 根据用户标识和书籍标识查询该用户的成就等级 + getAchievement: { + url: '/all_achievement/getAchievement', + method: 'GET', + auth: true, + }, + // 获取读者成就列表 + getAchievementList: { + url: '/all_achievement/getAchievementList', + method: 'GET', + }, +} + +export default api \ No newline at end of file diff --git a/api/model/index.js b/api/model/index.js index d7d9ea1..6c674c1 100644 --- a/api/model/index.js +++ b/api/model/index.js @@ -7,17 +7,6 @@ const api = { method: 'GET', auth: true, }, - // 根据用户标识和书籍标识查询该用户的成就等级 - getAchievement: { - url: '/all_index/getAchievement', - method: 'GET', - auth: true, - }, - // 获取读者成就列表 - getAchievementList: { - url: '/all_index/getAchievementList', - method: 'GET', - }, // 获取首页banner getBanner: { url: '/all_index/getBanner', @@ -84,12 +73,6 @@ const api = { method: 'GET', auth: true, }, - // 设置读者成就等级名称 - setAchievementName: { - url: '/all_index/setAchievementName', - method: 'GET', - auth: true, - }, // 订阅章节 subscribeBook: { url: '/all_index/subscribeBook', diff --git a/pages/index/bookshelf.vue b/pages/index/bookshelf.vue index 747fee4..662f076 100644 --- a/pages/index/bookshelf.vue +++ b/pages/index/bookshelf.vue @@ -171,7 +171,7 @@ activeTab: 'read', isEditMode: false, selectedItems: [], // 统一选中项 - mixinsListApi : 'getReadBookPage', + mixinsListApi : '', apiMap : { read : 'getReadBookPage', work : 'getMyBookPage', @@ -196,20 +196,11 @@ }, onShow() { - // 检查是否需要弹窗 - const pages = getCurrentPages(); - const current = pages[pages.length - 1]; - if (current.options && current.options.fromPublish === '1') { - this.activeTab = 'work'; - uni.showToast({ - title: '发布成功', - icon: 'success' - }); - // 移除参数,防止返回时重复弹窗 - delete current.options.fromPublish; + // this.isEditMode = false; + // this.selectedItems = []; + if(this.isLogin){ + this.mixinsListApi = this.apiMap[tab] } - this.isEditMode = false; - this.selectedItems = []; }, onUnload() { // 移除事件监听 @@ -220,7 +211,9 @@ switchTab(tab) { this.activeTab = tab; - this.mixinsListApi = this.apiMap[tab] + if(this.isLogin){ + this.mixinsListApi = this.apiMap[tab] + } this.list = [] diff --git a/pages/index/category.vue b/pages/index/category.vue index 2d9ed6c..62d419e 100644 --- a/pages/index/category.vue +++ b/pages/index/category.vue @@ -33,14 +33,14 @@ @change="change"> - + - + @@ -66,7 +66,7 @@ }, data() { return { - mixinsListApi: '', + mixinsListApi: 'getRecommendList', current : 0, currentChildren : 0, categoryList: [], diff --git a/pages/index/center.vue b/pages/index/center.vue index 22bf6ec..5e0a98c 100644 --- a/pages/index/center.vue +++ b/pages/index/center.vue @@ -152,13 +152,11 @@ \ No newline at end of file diff --git a/pages_order/auth/Modifyinformation.vue b/pages_order/auth/Modifyinformation.vue index 7512289..ba5bd32 100644 --- a/pages_order/auth/Modifyinformation.vue +++ b/pages_order/auth/Modifyinformation.vue @@ -82,7 +82,7 @@ }, getPhone(e) { this.$api('bindPhone', { - phoneCode: e.detail.code + code: e.detail.code }, res => { if (res.code == 200) { let phoneObj = JSON.parse(res.result) diff --git a/pages_order/auth/wxUserInfo.vue b/pages_order/auth/wxUserInfo.vue index 6b64099..8133c4e 100644 --- a/pages_order/auth/wxUserInfo.vue +++ b/pages_order/auth/wxUserInfo.vue @@ -90,7 +90,7 @@ }, getPhone(e){ this.$api('bindPhone', { - phoneCode : e.detail.code + code : e.detail.code }, res => { if(res.code == 200){ let phoneObj = JSON.parse(res.result) diff --git a/pages_order/comment/myComment.vue b/pages_order/comment/myComment.vue index 9832832..4e09944 100644 --- a/pages_order/comment/myComment.vue +++ b/pages_order/comment/myComment.vue @@ -3,55 +3,45 @@ 未读评论·{{ unreadComments.length }} - - - - - {{ item.username }} - 来自《{{ item.bookTitle }}》 - - {{ item.content }} - - {{ item.time }} - - - 回复 - - - - + 历史评论 - - + + + @@ -117,78 +92,4 @@ font-weight: 500; margin-bottom: 16rpx; } - - .comment-card { - display: flex; - align-items: flex-start; - margin-bottom: 32rpx; - } - - .avatar { - width: 56rpx; - height: 56rpx; - border-radius: 50%; - margin-right: 16rpx; - flex-shrink: 0; - } - - .comment-main { - flex: 1; - display: flex; - flex-direction: column; - } - - .comment-header { - display: flex; - align-items: center; - gap: 12rpx; - margin-bottom: 4rpx; - } - - .username { - font-size: 26rpx; - color: #222; - font-weight: 500; - } - - .from { - font-size: 22rpx; - color: #bdbdbd; - } - - .comment-content { - font-size: 26rpx; - color: #333; - margin-bottom: 12rpx; - } - - .comment-footer { - display: flex; - align-items: center; - font-size: 22rpx; - color: #bdbdbd; - justify-content: space-between; - padding-right: 8rpx; - } - - .comment-time { - color: #bdbdbd; - } - - .reply-btn-wrap { - display: flex; - align-items: center; - cursor: pointer; - } - - .reply-btn { - color: #223a6b; - font-weight: 500; - margin-left: 0; - font-size: 24rpx; - } - - .history-section { - margin-top: 24rpx; - } \ No newline at end of file diff --git a/pages_order/components/comment/myCommentItem.vue b/pages_order/components/comment/myCommentItem.vue new file mode 100644 index 0000000..755d700 --- /dev/null +++ b/pages_order/components/comment/myCommentItem.vue @@ -0,0 +1,113 @@ + + + + + \ No newline at end of file diff --git a/pages_order/novel/Giftbox.vue b/pages_order/novel/Giftbox.vue index dc6b771..bd49e4a 100644 --- a/pages_order/novel/Giftbox.vue +++ b/pages_order/novel/Giftbox.vue @@ -20,12 +20,15 @@ - {{ gift.emoji }} + + + - {{ gift.name }} + {{ gift.title }} - x{{ gift.count }} - {{ gift.price }}豆豆 + + {{ gift.integerPrice }}豆豆 @@ -146,9 +149,9 @@ }, buyGift() { // 跳转到礼物购买页面,并传递选中礼物信息 - const gift = this.gifts[this.selectedIndex] + const gift = this.list[this.selectedIndex] uni.navigateTo({ - url: `/pages_order/novel/Giftpurchases?name=${encodeURIComponent(gift.name)}&price=${gift.price}&count=${this.buyCount}` + url: `/pages_order/novel/Giftpurchases?&id=${gift.id}&count=${this.buyCount}` }) }, }, @@ -199,6 +202,10 @@ .gift-emoji { font-size: 56rpx; + image{ + width: 80rpx; + height: 80rpx; + } } .gift-name { diff --git a/pages_order/novel/Giftpurchases.vue b/pages_order/novel/Giftpurchases.vue index 3453389..61ea321 100644 --- a/pages_order/novel/Giftpurchases.vue +++ b/pages_order/novel/Giftpurchases.vue @@ -1,278 +1,336 @@ + .gift-purchase-page { + min-height: 100vh; + background: #f8f8f8; + padding-bottom: 120rpx; + } + + .card { + background: #fff; + border-radius: 18rpx; + margin: 24rpx 16rpx 0 16rpx; + padding: 24rpx 24rpx 10rpx 24rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03); + } + + .card-title { + font-size: 24rpx; + font-weight: bold; + color: #222; + margin-bottom: 18rpx; + } + + .row { + display: flex; + align-items: center; + margin-bottom: 16rpx; + } + + .label { + color: #888; + font-size: 26rpx; + width: 160rpx; + } + + .label.required { + color: #222; + font-weight: 500; + } + + .value { + color: #222; + font-size: 26rpx; + } + + .input { + flex: 1; + border: none; + border-bottom: 1rpx solid #eee; + font-size: 26rpx; + padding: 8rpx 0; + background: transparent; + outline: none; + } + + .order-card { + border-radius: 20px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); + padding: 24px 20px 16px 20px; + margin: 16px; + position: relative; + } + + .order-title { + font-size: 18px; + font-weight: bold; + color: #222; + margin-bottom: 12px; + } + + .order-content { + color: #bbb; + font-size: 15px; + margin-bottom: 8px; + } + + .row.total-row { + display: flex; + align-items: center; + margin-bottom: 0; + } + + .order-total-label { + color: #222; + font-size: 18px; + font-weight: 500; + } + + .order-total { + color: #222; + font-size: 18px; + font-weight: 500; + margin-left: 8px; + } + + .order-total-highlight { + color: #ff7e00; + font-size: 18px; + font-weight: bold; + margin: 0 2px; + } + + .order-divider { + width: 100%; + height: 1px; + background: #f2f2f2; + margin-top: 16px; + } + + .tip-text { + color: #bbb; + font-size: 22rpx; + margin: 32rpx 32rpx 0 32rpx; + line-height: 1.6; + } + + .footer-bar { + position: fixed; + left: 0; + right: 0; + bottom: 90rpx; + background: #fff; + padding: 24rpx 32rpx 32rpx 32rpx; + box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05); + z-index: 10; + } + + .buy-btn { + width: 100%; + background: #223a7a; + color: #fff; + font-size: 32rpx; + border-radius: 32rpx; + height: 88rpx; + line-height: 88rpx; + border: none; + font-weight: 500; + } + + .card.gift-card { + border-radius: 20px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); + padding: 24px 20px 16px 20px; + margin: 16px; + position: relative; + } + + .card-title { + font-size: 18px; + font-weight: bold; + color: #222; + margin-bottom: 12px; + } + + .form-row { + display: flex; + flex-direction: column; + align-items: flex-start; + min-height: 36px; + padding: 0; + margin-top: 5rpx; + + } + + .form-label { + color: #888; + font-size: 14px; + margin-bottom: 9px; + font-weight: 400; + margin-top: 5px; + + } + + .form-label.required { + color: #222; + font-weight: 500; + display: flex; + align-items: center; + } + + .star { + color: #e94f7a; + margin-right: 2px; + font-size: 16px; + } + + .form-value { + color: #0e0e0e; + font-size: 14px; + font-weight: 600; + margin-bottom: 2px; + } + + .form-input { + flex: 1; + border: none; + background: transparent; + font-size: 14px; + outline: none; + padding: 0; + color: #222; + } + + .divider { + height: 1px; + background: #f2f2f2; + margin: 0 0 0 0; + border: none; + } + + .balance { + color: #0e0e0e; + font-size: 14px; + margin: 0 0 8px 0; + } + + .bean { + color: #222; + font-weight: 600; + } + \ No newline at end of file diff --git a/pages_order/novel/novelDetail.vue b/pages_order/novel/novelDetail.vue index 48aaf0a..c8e240b 100644 --- a/pages_order/novel/novelDetail.vue +++ b/pages_order/novel/novelDetail.vue @@ -204,9 +204,13 @@ }) { this.id = id this.queryParams.bookId = id + }, + onShow() { this.getDateil() - this.getAchievement() this.getBookCatalogList() + if(this.isLogin){ + this.getAchievement() + } }, methods: { updateVote() {