From 31b3a1b9a732e8f52788b2bc56ae36d06036c40f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?TOP=E7=B3=AF=E7=B1=B3?= <1130395124@qq.com> Date: Wed, 29 Mar 2023 15:41:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=8D=E5=8A=A1=E8=AF=84?= =?UTF-8?q?=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/appraise/group.vue | 291 ++++++++++++++-------------- src/components/appraise/section.vue | 51 +++-- src/core/apis.js | 16 +- src/core/models.js | 2 + src/core/models/appraise.js | 55 ++++++ src/pages/service/detail.vue | 89 ++++++++- 6 files changed, 323 insertions(+), 181 deletions(-) create mode 100644 src/core/models/appraise.js diff --git a/src/components/appraise/group.vue b/src/components/appraise/group.vue index 9983e2a..9c5fb3a 100644 --- a/src/components/appraise/group.vue +++ b/src/components/appraise/group.vue @@ -1,42 +1,46 @@ @@ -17,31 +17,21 @@ import AppraiseGroup from "@/components/appraise/group"; export default { name: "appraise-section", data() { - return { - total: 12345, - tags: [ - { - name: "技术专业", - count: 100, - }, - { - name: "礼貌热情", - count: 100, - }, - { - name: "认真负责", - count: 100, - }, - { - name: "快速完工", - count: 100, - }, - { - name: "按时上门", - count: 100, - }, - ], - }; + return {}; + }, + props: { + total: { + type: [Number, String], + default: 0, + }, + tags: { + type: Array, + default: [], + }, + cate: { + type: Array, + default: [], + }, }, components: { AppraiseGroup, @@ -49,7 +39,14 @@ export default { created() {}, mounted() {}, destroyed() {}, - methods: {}, + methods: { + /** + * 修改分类 + */ + changeCate(cate, index) { + this.$emit("changeCate", cate, index); + }, + }, }; diff --git a/src/core/apis.js b/src/core/apis.js index cccf9a5..3822e00 100644 --- a/src/core/apis.js +++ b/src/core/apis.js @@ -286,5 +286,19 @@ export default { showLoading: true, auth: true, } - } + }, + appraise: { + count: { + service: { + url: "/wxapp/index/seeworkerevaluation", + showLoading: true, + } + }, + list: { + service: { + url: "/wxapp/index/goodsevaluation", + showLoading: true, + } + } + }, } diff --git a/src/core/models.js b/src/core/models.js index 9fecd52..fcf35e3 100644 --- a/src/core/models.js +++ b/src/core/models.js @@ -4,6 +4,7 @@ import worker from "@/core/models/worker"; import service from "@/core/models/service"; import cart from "@/core/models/cart"; import system from "@/core/models/system"; +import appraise from "@/core/models/appraise"; export default { order, @@ -12,4 +13,5 @@ export default { service, cart, system, + appraise, } diff --git a/src/core/models/appraise.js b/src/core/models/appraise.js new file mode 100644 index 0000000..62b6c1a --- /dev/null +++ b/src/core/models/appraise.js @@ -0,0 +1,55 @@ +import Vue from "vue" +let prototype = Vue.prototype; + +export default { + count: { + service(id) { + return new Promise((resolve, reject) => { + prototype.$request({ + api: "appraise.count.service", + data: { + id: id, + } + }).then(response => { + if (response.code == 1) { + return resolve(response.data); + } + return reject(response.msg); + }).catch(e => { }); + }); + } + }, + list: { + /** + * 服务评价 + */ + service(data) { + return new Promise((resolve, reject) => { + prototype.$request({ + api: "appraise.list.service", + data: data + }).then(response => { + if (response.code == 1) { + let list = []; + response.data.forEach((data) => { + list.push({ + id: data.id, + avatar: data.u_avatar, + nickname: data.u_name, + createTime: data.time, + tags: data.msg.split(","), + area: "-", + worker: data.wid, + grade: data.score, + images: data.img, + content: data.desc, + }); + }); + return resolve(list); + } + return reject(response.msg); + }).catch(e => { }); + }); + } + }, +} diff --git a/src/pages/service/detail.vue b/src/pages/service/detail.vue index 6a0548c..8978aa5 100644 --- a/src/pages/service/detail.vue +++ b/src/pages/service/detail.vue @@ -61,7 +61,12 @@ - + @@ -76,10 +81,9 @@ export default { data() { return { pageConfig: {}, - tabIndex: 1, // 1评价 - tabHeight: 0, + tabIndex: 0, // 1评价 currentBanner: 1, - pageTitle: "服务详情", + pageTitle: "", timer: null, id: 0, detail: { @@ -89,13 +93,19 @@ export default { content: "", price: 0, }, + currentAppraiseCateIndex: 0, + appraise: { + total: 0, + tags: [], + cate: [], + }, }; }, components: { AppLayout, AppAppraiseSection, }, - onLoad(e) { + async onLoad(e) { this.pageConfig = getApp().globalData.pageConfig; if (e.id) { @@ -105,6 +115,7 @@ export default { return; } + // 详情 this.$models.service.getServiceDetail(this.id).then((response) => { this.detail = { title: response.goods.post_title, @@ -114,12 +125,43 @@ export default { price: response.goods.money, }; }); + + // 评价 + await this.$models.appraise.count.service(this.id).then((data) => { + data.tags.forEach((item) => { + this.appraise.tags.push({ + count: item.count, + name: item.name, + }); + }); + data.cate.forEach((item) => { + this.appraise.cate.push({ + name: item.name, + count: item.count, + status: item.status, + page: 1, + more: true, + list: [], + }); + }); + this.appraise.total = this.appraise.cate[0].count; + this.changeAppraiseCate(this.appraise.cate[0], 0); + }); }, onShow() {}, onReady() {}, - onReachBottom() {}, + onReachBottom() { + if (this.tabIndex == 0) return; + let currentCate = this.appraise.cate[this.currentAppraiseCateIndex]; + if (currentCate.more) { + this.loadAppraiseData(currentCate); + } + }, onPullDownRefresh() {}, methods: { + /** + * 分享 + */ share() { uni.showToast({ title: "分享", @@ -146,12 +188,47 @@ export default { ]; this.$utils.toPage("/pages/order/create?orderData=" + encodeURIComponent(JSON.stringify(orderdata))); }, + /** + * 切换详情/评价 + */ changeTab(e) { this.tabIndex = e.detail.current; }, + /** + * 滑动banner + */ changeBanner(e) { this.currentBanner = e.detail.current + 1; }, + /** + * 切换评价分类 + */ + changeAppraiseCate(currentCate, index) { + this.currentAppraiseCateIndex = index; + currentCate.list = []; + currentCate.more = true; + currentCate.page = 1; + this.loadAppraiseData(currentCate); + }, + /** + * 加载评价数据 + */ + loadAppraiseData(currentCate) { + this.$models.appraise.list + .service({ + id: this.id, + status: currentCate.status, + page: currentCate.page, + }) + .then((list) => { + if (list.length > 0) { + currentCate.page++; + currentCate.list = currentCate.list.concat(list); + } else { + currentCate.more = false; + } + }); + }, }, };