From b4ad20eac3500d830abca6d388dcf698e5938d8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?TOP=E7=B3=AF=E7=B1=B3?= <1130395124@qq.com> Date: Tue, 14 Mar 2023 01:12:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=8E=A5=E5=8D=95=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/get/action.vue | 18 +- src/components/get/post-price.vue | 18 +- src/components/order/item.vue | 12 +- src/core/apis.js | 55 ++++- src/core/models.js | 4 +- src/core/models/get.js | 60 +++++ src/core/models/order.js | 31 +-- src/pages.json | 9 +- src/pages/get/detail.vue | 374 ++++++++++++++++++++++++++++++ src/pages/get/index.vue | 195 +++++++++------- src/pages/order/detail.vue | 10 +- 11 files changed, 658 insertions(+), 128 deletions(-) create mode 100644 src/core/models/get.js create mode 100644 src/pages/get/detail.vue diff --git a/src/components/get/action.vue b/src/components/get/action.vue index 8ab56f1..bfc44a3 100644 --- a/src/components/get/action.vue +++ b/src/components/get/action.vue @@ -1,11 +1,15 @@ @@ -35,7 +39,7 @@ export default { destroyed() {}, methods: { getOrder() { - console.log("获取" + this.order.id); + this.$emit("getOrder"); }, postPrice() { this.$emit("postPrice"); diff --git a/src/components/get/post-price.vue b/src/components/get/post-price.vue index dee155a..8b73227 100644 --- a/src/components/get/post-price.vue +++ b/src/components/get/post-price.vue @@ -14,7 +14,7 @@ 1)哈哈哈哈 2)哈哈哈哈哈哈哈哈 - 确认 + 确认 @@ -42,16 +42,20 @@ export default { created() {}, mounted() {}, destroyed() {}, - watch: {}, + watch: { + postId() { + this.price = 0; + }, + }, methods: { closeModal() { - this.$store.commit("order/setConfirmId", 0); - this.price = 0; this.$emit("close"); }, - confirmPrice() { - console.log("当前id:" + this.postId + ",价格:" + this.price); - this.$emit("confirm"); + postPrice() { + this.$emit("post", { + id: this.postId, + price: this.price, + }); }, }, }; diff --git a/src/components/order/item.vue b/src/components/order/item.vue index abfb046..02670ac 100644 --- a/src/components/order/item.vue +++ b/src/components/order/item.vue @@ -2,8 +2,8 @@ - - {{ models.order.getOrderTypeText(order.orderType) }} + + {{ typeText }} {{ order.username }}-{{ order.cate }} @@ -49,6 +49,8 @@ export default { data() { return { models: this.$models, + typeText: "", + typeTextBg: "", }; }, props: { @@ -59,7 +61,11 @@ export default { }, components: {}, created() {}, - mounted() {}, + mounted() { + let [typeText, typeTextBg] = this.$models.order.getOrderTypeText(this.order.listType, this.order.orderType); + this.typeText = typeText; + this.typeTextBg = typeTextBg ? typeTextBg : "#8b9beb"; + }, destroyed() {}, methods: {}, }; diff --git a/src/core/apis.js b/src/core/apis.js index 6134745..960fc99 100644 --- a/src/core/apis.js +++ b/src/core/apis.js @@ -37,7 +37,60 @@ const apis = { carType: { url: "/wxapp/index/getallcar" }, - } + }, + get: { + list: { + t1: { + url: "/user/workerorderb/getallorder", + showLoading: true, + auth: true, + }, + t2: { + url: "/user/workerorderc/getallorder", + showLoading: true, + auth: true, + }, + t3: { + url: "/user/workerorder/getallcarorder", + showLoading: true, + auth: true, + } + }, + detail: { + t1: { + url: "/user/workerorderb/orderinfo", + showLoading: true, + auth: true, + }, + t2: { + url: "/user/workerorderc/orderinfobyid", + showLoading: true, + auth: true, + }, + t3: { + url: "/user/workerorder/getcarorderinfobyid", + showLoading: true, + auth: true, + }, + }, + getOrder: { + t1: { + url: "/user/workerorderb/workerorderbyid", + showLoading: true, + auth: true, + }, + t2: { + url: "/user/workerorderc/joinorder", + showLoading: true, + auth: true, + }, + t3: { + url: "/user/workerorder/workerorderbyid", + showLoading: true, + auth: true, + }, + } + }, } export default apis diff --git a/src/core/models.js b/src/core/models.js index 200779e..e4943da 100644 --- a/src/core/models.js +++ b/src/core/models.js @@ -3,11 +3,13 @@ import user from "@/core/models/user"; import worker from "@/core/models/worker"; import system from "@/core/models/system"; import service from "@/core/models/service"; +import get from "@/core/models/get"; export default { order, user, worker, system, - service + service, + get } diff --git a/src/core/models/get.js b/src/core/models/get.js new file mode 100644 index 0000000..25e2830 --- /dev/null +++ b/src/core/models/get.js @@ -0,0 +1,60 @@ +import Vue from "vue" +let prototype = Vue.prototype; + +export default { + /** + * 获取列表 + */ + getList(options) { + return new Promise((resolve, reject) => { + prototype.$request(options.request).then(response => { + if (response.code == 1) { + let list = []; + response.data.forEach(item => { + list.push({ + listType: options.listType, + id: item.id, + orderId: item.order, + username: "用户名称", + cate: "待返数据", + content: item.desc, + createTime: item.time, + serviceTime: item.times, + orderType: item.types, + state: item.status, + price: item.money, + }); + }); + return resolve(list); + } + return reject(response.msg); + }).catch(e => { }); + }); + }, + /** + * 获取详情 + */ + getDetail(options) { + return new Promise((resolve, reject) => { + prototype.$request(options.request).then(response => { + if (response.code == 1) { + return resolve(response.data); + } + return reject(response.msg); + }).catch(e => { }); + }); + }, + /** + * 接单 + */ + getOrder(options) { + return new Promise((resolve, reject) => { + prototype.$request(options).then(response => { + if (response.code == 1) { + return resolve(response.msg); + } + return reject(response.msg); + }).catch(e => { }); + }); + } +} diff --git a/src/core/models/order.js b/src/core/models/order.js index e52d360..147c3ae 100644 --- a/src/core/models/order.js +++ b/src/core/models/order.js @@ -26,28 +26,15 @@ export default { // 无法退款 CAN_NOT_REFUND: 8, }, - getOrderTypeColor(type) { - switch (type) { - case this.type.NORMAL: - return '#0ec4ad'; - case this.state.WORKER_PRICE: - return '#0ec4ad'; - case this.state.CUSTOM_PRICE: - return '#0ec4ad'; - default: - return '#ff0000'; - } - }, - getOrderTypeText(type) { - switch (type) { - case this.type.NORMAL: - return '一口价'; - case this.state.WORKER_PRICE: - return '报价'; - case this.state.CUSTOM_PRICE: - return '议价'; - default: - return '未知'; + getOrderTypeText(listType, orderType) { + switch (listType) { + case "t1": return ["购买服务", "#3ABCF6"]; + case "t2": + if (orderType == 1) { + return ["一口价", "#3ABCF6"]; + } + return ["报价"]; + case "t3": return ["货运", "#628BE7"]; } }, getOrderStateTextColor(state) { diff --git a/src/pages.json b/src/pages.json index 2958e11..56e1c6f 100644 --- a/src/pages.json +++ b/src/pages.json @@ -69,7 +69,14 @@ { "path": "pages/get/index", "style": { - "navigationBarTitleText": "接单大厅" + "navigationBarTitleText": "接单大厅", + "enablePullDownRefresh": true + } + }, + { + "path": "pages/get/detail", + "style": { + "navigationBarTitleText": "单子详情" } } ], diff --git a/src/pages/get/detail.vue b/src/pages/get/detail.vue new file mode 100644 index 0000000..989c07f --- /dev/null +++ b/src/pages/get/detail.vue @@ -0,0 +1,374 @@ + + + + + \ No newline at end of file diff --git a/src/pages/get/index.vue b/src/pages/get/index.vue index 4abbca4..2bf4a44 100644 --- a/src/pages/get/index.vue +++ b/src/pages/get/index.vue @@ -17,14 +17,18 @@ - + ¥ 306.00 - + @@ -43,7 +47,7 @@ 刷新列表 - + @@ -63,73 +67,24 @@ export default { tabHeight: 0, tabList: [ { - id: 1, - name: "一口价订单", - list: [ - { - id: 1, - orderId: "xxgfdkgn1223", - cate: "家具安装", - content: "我想要安装一个书柜,需要上墙啊啊啊啊", - createTime: "2022-10-18 10:56:34", - serviceTime: "2022-10-18 10:56:34", - orderType: 1, - state: 1, - price: 306, - username: "李先生", - }, - { - id: 2, - orderId: "xxgfdkgn1223", - cate: "家具安装", - content: "我想要安装一个书柜,需要上墙啊啊啊啊", - createTime: "2022-10-18 10:56:34", - serviceTime: "2022-10-18 10:56:34", - orderType: 1, - state: 1, - price: 306, - username: "李先生", - }, - { - id: 3, - orderId: "xxgfdkgn1223", - cate: "家具安装", - content: "我想要安装一个书柜,需要上墙啊啊啊啊", - createTime: "2022-10-18 10:56:34", - serviceTime: "2022-10-18 10:56:34", - orderType: 1, - state: 1, - price: 306, - username: "李先生", - }, - ], - }, - { - id: 2, - name: "报价订单", - list: [ - { - id: 2, - orderId: "xxgfdkgn1223", - cate: "家具安装", - content: "我想要安装一个书柜,需要上墙啊啊啊啊", - createTime: "2022-10-18 10:56:34", - serviceTime: "2022-10-18 10:56:34", - orderType: 2, - state: 1, - price: 306, - username: "李先生", - }, - ], - }, - { - id: 3, - name: "指派订单", + listType: "t1", + name: "购买订单", + page: 1, + more: true, list: [], }, { - id: 4, + listType: "t2", + name: "报/议价订单", + page: 1, + more: true, + list: [], + }, + { + listType: "t3", name: "配送订单", + page: 1, + more: true, list: [], }, ], @@ -142,23 +97,28 @@ export default { GetPostPrice, }, onLoad() { - this.$nextTick(() => { - this.setTabHeight(); - }); + this.switchTab(0); }, onShow() {}, onReady() {}, - onReachBottom() {}, - onPullDownRefresh() {}, + onReachBottom() { + this.loadData(); + }, + onPullDownRefresh() { + this.switchTab(this.tabIndex); + uni.stopPullDownRefresh(); + }, methods: { + /** + * 切换列表 + */ switchTab(index) { this.tabIndex = index; - this.$nextTick(() => { - this.setTabHeight(); - }); - }, - changeTab(e) { - this.switchTab(e.detail.current); + let currentTab = this.tabList[index]; + currentTab.page = 1; + currentTab.more = true; + currentTab.list = []; + this.loadData(); }, setTabHeight() { let query = uni.createSelectorQuery().in(this); @@ -169,18 +129,95 @@ export default { } }); }, + /** + * 加载数据 + */ + loadData() { + let currentTab = this.tabList[this.tabIndex]; + return new Promise((resolve, reject) => { + if (!currentTab.more) { + return; + } + this.$models.get + .getList({ + request: { + api: "get.list." + currentTab.listType, + data: { + page: currentTab.page, + }, + }, + listType: currentTab.listType, + }) + .then((list) => { + if (list.length == 0) { + currentTab.more = false; + } else { + currentTab.page++; + currentTab.list = currentTab.list.concat(list); + } + this.$nextTick(() => { + this.setTabHeight(); + }); + }); + }); + }, + /** + * 报价 + */ postPrice(id) { this.$store.commit("order/setPostId", id); this.showPriceModal = true; }, + /** + * 确认价格 + */ + rcvPostPrice(e) { + this.showPriceModal = false; + this.getOrder({ + id: e.id, + listType: "t2", + price: e.price, + }); + }, + /** + * 接单 + */ + getOrder(order) { + let requestData = { + id: order.id, + }; + if (order.price) { + requestData.money = order.price; + } + this.$models.get + .getOrder({ + api: "get.getOrder." + order.listType, + data: requestData, + }) + .then((message) => { + this.$utils.toast(message).then(() => { + this.switchTab(this.tabIndex); + }); + }) + .catch((e) => { + this.$utils.toast(e); + }); + }, setting() { console.log("设置"); }, + /** + * 刷新列表 + */ refresh() { - console.log("刷新"); + this.switchTab(this.tabIndex); }, + /** + * 查看详情 + */ toDetail(id) { - this.$utils.toPage("/pages/order/detail?type=preview&id=" + id); + let currentTab = this.tabList[this.tabIndex]; + this.$utils.toPage("/pages/get/detail?list=" + currentTab.listType + "&id=" + id); }, }, }; diff --git a/src/pages/order/detail.vue b/src/pages/order/detail.vue index f50bdda..6b5cb5f 100644 --- a/src/pages/order/detail.vue +++ b/src/pages/order/detail.vue @@ -72,7 +72,7 @@ ¥ {{ utils.formatNumber(order.price, 2) }} - + 客服 @@ -97,13 +97,13 @@ import OrderAction from "@/components/order/action"; import GetAction from "@/components/get/action"; import OrderConfirmPrice from "@/components/order/confirm-price"; import GetPostPrice from "@/components/get/post-price"; -import { mapState } from "vuex"; export default { name: "order-detail", data() { return { utils: this.$utils, models: this.$models, + pageConfig: {}, showPriceModal: false, showConfirmModal: false, type: "detail", @@ -145,12 +145,8 @@ export default { OrderConfirmPrice, GetPostPrice, }, - computed: { - ...mapState({ - config: (state) => state.system.config, - }), - }, onLoad(e) { + this.pageConfig = getApp().globalData.pageConfig; if (e.id && e.id > 0) { this.id = e.id; } else {