完善订单详情部分功能
This commit is contained in:
parent
54a93f9c5a
commit
fcdc39e724
|
@ -1,8 +1,8 @@
|
||||||
<template>
|
<template>
|
||||||
<view class="component-order-item">
|
<view class="component-order-item">
|
||||||
<view class="order-header">
|
<view class="order-header">
|
||||||
<view class="state-text" :style="{ color: titleColor }">
|
<view class="state-text" :style="{ color: stateTextColor }">
|
||||||
<text>{{ title }}</text>
|
<text>{{ stateText }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="more">
|
<view class="more">
|
||||||
<text class="text">详情</text>
|
<text class="text">详情</text>
|
||||||
|
@ -31,23 +31,41 @@
|
||||||
<text class="title">服务时间:</text>
|
<text class="title">服务时间:</text>
|
||||||
<text class="text">{{ order.serviceTime }}</text>
|
<text class="text">{{ order.serviceTime }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="order-worker-box">
|
<!-- 购买订单|报/议价订单|货运订单 可展示师傅信息 -->
|
||||||
<view class="worker-item-box">
|
<block v-if="order.listType == listType.T1 || order.listType == listType.T2 || order.listType == listType.T3">
|
||||||
<worker-item :data="order.worker" />
|
<view class="order-worker-box">
|
||||||
</view>
|
<!-- 报价订单未选择师傅 展示师傅列表 -->
|
||||||
<view class="worker-list-group">
|
<block
|
||||||
<view class="list-group">
|
v-if="order.listType == listType.T2 && order.orderType == 2 && order.state == state[order.listType].S1"
|
||||||
<view class="list-item" v-for="(item, index) in previewWorkerList" :key="index">
|
>
|
||||||
<image class="cover" :src="item.cover" mode="aspectFill" />
|
<view class="worker-list-group">
|
||||||
<text class="price">¥ {{ item.price }}</text>
|
<view class="list-group">
|
||||||
|
<view class="list-item" v-for="(item, index) in previewWorkerList" :key="index">
|
||||||
|
<image class="cover" :src="item.cover" mode="aspectFill" />
|
||||||
|
<text class="price">¥ {{ item.price }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="more-worker">
|
||||||
|
<text class="worker-num">{{ order.workerList.length }}位师傅已报价</text>
|
||||||
|
<text class="iconfont icon-jinru"></text>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</block>
|
||||||
<view class="more-worker">
|
<!-- 购买订单|报/议价订单已选择师傅 展示师傅简介 -->
|
||||||
<text class="worker-num">{{ order.workerList.length }}位师傅已报价</text>
|
<block
|
||||||
<text class="iconfont icon-jinru"></text>
|
v-if="
|
||||||
</view>
|
(order.listType == listType.T1 &&
|
||||||
|
order.state != state[order.listType].S1 &&
|
||||||
|
order.state != state[order.listType].S2) ||
|
||||||
|
(order.listType == listType.T2 && order.state != state[order.listType].S1)
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<view class="worker-item-box">
|
||||||
|
<worker-item :data="order.worker" />
|
||||||
|
</view>
|
||||||
|
</block>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
<view class="order-footer">
|
<view class="order-footer">
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
|
@ -81,13 +99,15 @@ export default {
|
||||||
for (let index = 0; index < 3; index++) {
|
for (let index = 0; index < 3; index++) {
|
||||||
if (this.order.workerList[index]) {
|
if (this.order.workerList[index]) {
|
||||||
this.previewWorkerList.push(this.order.workerList[index]);
|
this.previewWorkerList.push(this.order.workerList[index]);
|
||||||
} else {
|
} else break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
let [title, color] = this.$models.order.stateText(this.order.listType, this.order.orderType, this.order.state);
|
let [stateText, stateDesc, stateTextColor] = this.$models.order.stateText(
|
||||||
this.title = title;
|
this.order.listType,
|
||||||
this.titleColor = typeof color === "undefined" ? "#000000" : color;
|
this.order.orderType,
|
||||||
|
this.order.state
|
||||||
|
);
|
||||||
|
this.stateText = stateText;
|
||||||
|
this.stateTextColor = stateTextColor || "#000000";
|
||||||
},
|
},
|
||||||
mounted() {},
|
mounted() {},
|
||||||
destroyed() {},
|
destroyed() {},
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<view class="component-worker-item">
|
<view class="component-worker-item">
|
||||||
<view class="head">
|
<view class="head">
|
||||||
<image class="cover" :src="data.cover" mode="aspectFill" />
|
<image class="cover" :src="data.cover" mode="aspectFill" />
|
||||||
<text v-if="showPrice" class="price">¥ {{ data.price }}</text>
|
<text v-if="showPrice" class="price">¥ {{ utils.formatNumber(data.price || 0, 2) }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="desc">
|
<view class="desc">
|
||||||
<view class="name">
|
<view class="name">
|
||||||
|
@ -12,9 +12,9 @@
|
||||||
<text>{{ models.worker.getWorkerTypeText(data.type) }}</text>
|
<text>{{ models.worker.getWorkerTypeText(data.type) }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="detail">
|
<view class="detail">
|
||||||
<text class="section-text">服务{{ data.times }}次</text>
|
<text class="section-text">服务{{ data.times || 0 }}次</text>
|
||||||
<text class="section-text">好评率{{ data.favorable_rate }}%</text>
|
<text class="section-text">好评率{{ data.favorable_rate || 0 }}%</text>
|
||||||
<text class="section-text">评分{{ data.grade }}/5.0 </text>
|
<text class="section-text">评分{{ data.grade || 0 }}/5.0 </text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
@ -25,6 +25,7 @@ export default {
|
||||||
name: "component-worker-item",
|
name: "component-worker-item",
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
utils: this.$utils,
|
||||||
models: this.$models,
|
models: this.$models,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
|
@ -46,7 +46,7 @@ export default {
|
||||||
let current = this.state[listType];
|
let current = this.state[listType];
|
||||||
if (listType == this.listType.T1) {
|
if (listType == this.listType.T1) {
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case current.S1: return ['待支付'];
|
case current.S1: return ['待支付', '为保证师傅按时上门,建议尽快选择师傅并完成支付'];
|
||||||
case current.S2: return ['待师傅接单'];
|
case current.S2: return ['待师傅接单'];
|
||||||
case current.S3: return ['服务中'];
|
case current.S3: return ['服务中'];
|
||||||
case current.S4: return ['待支付尾款'];
|
case current.S4: return ['待支付尾款'];
|
||||||
|
@ -59,12 +59,12 @@ export default {
|
||||||
if (orderType == 1) {
|
if (orderType == 1) {
|
||||||
return ['待师傅接单'];
|
return ['待师傅接单'];
|
||||||
}
|
}
|
||||||
return ['待师傅报价'];
|
return ['待选择师傅'];
|
||||||
case current.S2:
|
case current.S2:
|
||||||
if (orderType == 1) {
|
if (orderType == 1) {
|
||||||
return ['师傅已接单,待支付'];
|
return ['师傅已接单,待支付'];
|
||||||
}
|
}
|
||||||
return ['待支付'];
|
return ['已选择师傅,待支付'];
|
||||||
case current.S3: return ['服务中'];
|
case current.S3: return ['服务中'];
|
||||||
case current.S4: return ['待支付尾款'];
|
case current.S4: return ['待支付尾款'];
|
||||||
case current.S5: return ['服务已完成,待确认'];
|
case current.S5: return ['服务已完成,待确认'];
|
||||||
|
@ -120,13 +120,7 @@ export default {
|
||||||
*/
|
*/
|
||||||
orderList(options) {
|
orderList(options) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
prototype.$request({
|
prototype.$request(options.request).then(response => {
|
||||||
api: options.api,
|
|
||||||
data: {
|
|
||||||
page: options.page,
|
|
||||||
status: options.status,
|
|
||||||
},
|
|
||||||
}).then(response => {
|
|
||||||
if (response.code == 1) {
|
if (response.code == 1) {
|
||||||
let list = [];
|
let list = [];
|
||||||
response.data.forEach((item) => {
|
response.data.forEach((item) => {
|
||||||
|
@ -140,7 +134,7 @@ export default {
|
||||||
serviceTime: item.times,
|
serviceTime: item.times,
|
||||||
orderType: item.types,
|
orderType: item.types,
|
||||||
state: item.status,
|
state: item.status,
|
||||||
worker: item.shifu || {},
|
worker: item.shifu,
|
||||||
workerList: [],
|
workerList: [],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -149,5 +143,31 @@ export default {
|
||||||
return reject(response.msg);
|
return reject(response.msg);
|
||||||
}).catch(e => { });
|
}).catch(e => { });
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 订单详情
|
||||||
|
*/
|
||||||
|
orderDetail(options) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
prototype.$request(options.request).then(response => {
|
||||||
|
if (response.code == 1) {
|
||||||
|
return resolve({
|
||||||
|
id: response.data.id,
|
||||||
|
address: response.data.address,
|
||||||
|
orderId: response.data.order,
|
||||||
|
cate: "待返数据",
|
||||||
|
content: response.data.desc,
|
||||||
|
createTime: response.data.time,
|
||||||
|
serviceTime: response.data.times,
|
||||||
|
orderType: response.data.types,
|
||||||
|
state: response.data.status,
|
||||||
|
images: [],
|
||||||
|
worker: [],
|
||||||
|
workerList: [],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return reject(response.msg);
|
||||||
|
}).catch(e => { });
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
<template>
|
<template>
|
||||||
<app-layout title="订单详情">
|
<app-layout title="订单详情">
|
||||||
<view class="state-textbox">
|
<view class="state-textbox">
|
||||||
<text class="state-text">等待您选择师傅</text>
|
<text class="state-text">{{ stateText }}</text>
|
||||||
<text class="state-desc">为保证师傅按时上门,建议尽快选择师傅并完成支付 </text>
|
<text class="state-desc" v-if="stateDesc">{{ stateDesc }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="order-detail-header">
|
<view class="order-detail-header">
|
||||||
<view class="select-group">
|
<view class="select-group">
|
||||||
<view class="select-item" :class="{ active: tabIndex == 0 }" @click="tabIndex = 0">
|
<view class="select-item" :class="{ active: tabIndex == 0 }" @click="switchTab(0)">
|
||||||
<text class="text">服务师傅</text>
|
<text class="text">服务师傅</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="select-item" :class="{ active: tabIndex == 1 }" @click="tabIndex = 1">
|
<view class="select-item" :class="{ active: tabIndex == 1 }" @click="switchTab(1)">
|
||||||
<text class="text">订单详情</text>
|
<text class="text">订单详情</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
class="list-tab-list"
|
class="list-tab-list"
|
||||||
:current="tabIndex"
|
:current="tabIndex"
|
||||||
:duration="300"
|
:duration="300"
|
||||||
@change="changeTab"
|
@change="switchTab($event.detail.current)"
|
||||||
:style="{ height: tabHeight + 'px' }"
|
:style="{ height: tabHeight + 'px' }"
|
||||||
>
|
>
|
||||||
<swiper-item>
|
<swiper-item>
|
||||||
|
@ -132,72 +132,13 @@ export default {
|
||||||
pageConfig: {},
|
pageConfig: {},
|
||||||
tabIndex: 0,
|
tabIndex: 0,
|
||||||
tabHeight: 0,
|
tabHeight: 0,
|
||||||
order: {
|
stateText: "",
|
||||||
id: 1,
|
stateDesc: "",
|
||||||
orderId: "xxgfdkgn1223",
|
stateTextColor: "",
|
||||||
cate: "家具安装",
|
id: 0,
|
||||||
content: "我想要安装一个书柜,需要上墙啊啊啊啊",
|
listType: "",
|
||||||
createTime: "2022-10-18 10:56:34",
|
orderType: 0,
|
||||||
serviceTime: "2022-10-18 10:56:34",
|
order: {},
|
||||||
images: [
|
|
||||||
{
|
|
||||||
src: require("@/static/temp/cate/1.png"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: require("@/static/temp/cate/1.png"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: require("@/static/temp/cate/1.png"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: require("@/static/temp/cate/1.png"),
|
|
||||||
},
|
|
||||||
],
|
|
||||||
orderType: 2,
|
|
||||||
state: 1,
|
|
||||||
worker: {
|
|
||||||
id: 1,
|
|
||||||
name: "张师傅",
|
|
||||||
cover: require("@/static/temp/order/1.png"),
|
|
||||||
price: 306.0,
|
|
||||||
type: 1,
|
|
||||||
times: 687,
|
|
||||||
favorable_rate: 99.8,
|
|
||||||
grade: 4.5,
|
|
||||||
},
|
|
||||||
workerList: [
|
|
||||||
{
|
|
||||||
id: 1,
|
|
||||||
name: "张师傅",
|
|
||||||
cover: require("@/static/temp/order/1.png"),
|
|
||||||
price: 306.0,
|
|
||||||
type: 1,
|
|
||||||
times: 687,
|
|
||||||
favorable_rate: 99.8,
|
|
||||||
grade: 4.5,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 2,
|
|
||||||
name: "王师傅",
|
|
||||||
cover: require("@/static/temp/order/1.png"),
|
|
||||||
price: 306.0,
|
|
||||||
type: 1,
|
|
||||||
times: 687,
|
|
||||||
favorable_rate: 99.8,
|
|
||||||
grade: 4.5,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 3,
|
|
||||||
name: "李师傅",
|
|
||||||
cover: require("@/static/temp/order/1.png"),
|
|
||||||
price: 306.0,
|
|
||||||
type: 1,
|
|
||||||
times: 687,
|
|
||||||
favorable_rate: 99.8,
|
|
||||||
grade: 4.5,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
|
@ -209,26 +150,38 @@ export default {
|
||||||
onLoad(e) {
|
onLoad(e) {
|
||||||
this.pageConfig = getApp().globalData.pageConfig;
|
this.pageConfig = getApp().globalData.pageConfig;
|
||||||
|
|
||||||
if (e.type && e.type == "detail") {
|
if (e.id && e.id > 0) {
|
||||||
|
this.id = e.id;
|
||||||
|
} else {
|
||||||
|
return this.$utils.toast("参数错误").then(() => {
|
||||||
|
this.$utils.toPage("", {}, "back");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (e.tab && e.tab == "detail") {
|
||||||
this.switchTab(1);
|
this.switchTab(1);
|
||||||
} else {
|
} else {
|
||||||
this.switchTab(0);
|
this.switchTab(0);
|
||||||
}
|
}
|
||||||
|
if (e.list) {
|
||||||
|
this.listType = e.list;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.loadDetail();
|
||||||
},
|
},
|
||||||
onShow() {},
|
onShow() {},
|
||||||
onReady() {},
|
onReady() {},
|
||||||
onReachBottom() {},
|
onReachBottom() {},
|
||||||
onPullDownRefresh() {},
|
onPullDownRefresh() {},
|
||||||
methods: {
|
methods: {
|
||||||
|
/**
|
||||||
|
* 切换Tab
|
||||||
|
*/
|
||||||
switchTab(index) {
|
switchTab(index) {
|
||||||
this.tabIndex = index;
|
this.tabIndex = index;
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.setTabHeight();
|
this.setTabHeight();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
changeTab(e) {
|
|
||||||
this.switchTab(e.detail.current);
|
|
||||||
},
|
|
||||||
setTabHeight() {
|
setTabHeight() {
|
||||||
let element = ".tab" + this.tabIndex;
|
let element = ".tab" + this.tabIndex;
|
||||||
let query = uni.createSelectorQuery().in(this);
|
let query = uni.createSelectorQuery().in(this);
|
||||||
|
@ -239,6 +192,7 @@ export default {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
// 复制订单号
|
||||||
copyOrderId(orderId) {
|
copyOrderId(orderId) {
|
||||||
const that = this;
|
const that = this;
|
||||||
uni.setClipboardData({
|
uni.setClipboardData({
|
||||||
|
@ -251,9 +205,15 @@ export default {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* 师傅详情
|
||||||
|
*/
|
||||||
workerDetail(id) {
|
workerDetail(id) {
|
||||||
this.$utils.toPage("/pages/worker/detail?id=" + id);
|
this.$utils.toPage("/pages/worker/detail?id=" + id);
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* 选择师傅
|
||||||
|
*/
|
||||||
chooseWorker(id) {
|
chooseWorker(id) {
|
||||||
const that = this;
|
const that = this;
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
|
@ -265,6 +225,36 @@ export default {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
loadDetail() {
|
||||||
|
this.$models.order
|
||||||
|
.orderDetail({
|
||||||
|
request: {
|
||||||
|
api: "order.detail.t1",
|
||||||
|
data: {
|
||||||
|
id: this.id,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.then((detail) => {
|
||||||
|
let [stateText, stateDesc, stateTextColor] = this.$models.order.stateText(
|
||||||
|
this.listType,
|
||||||
|
detail.orderType,
|
||||||
|
detail.state
|
||||||
|
);
|
||||||
|
this.stateText = stateText;
|
||||||
|
this.stateDesc = stateDesc;
|
||||||
|
this.stateTextColor = stateTextColor;
|
||||||
|
this.order = {
|
||||||
|
...detail,
|
||||||
|
listType: this.listType,
|
||||||
|
};
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
this.$utils.toast(e).then(() => {
|
||||||
|
this.$utils.toPage("", {}, "back");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
@ -282,12 +272,12 @@ export default {
|
||||||
font-size: 40rpx;
|
font-size: 40rpx;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
line-height: 40rpx;
|
line-height: 40rpx;
|
||||||
margin-bottom: 26rpx;
|
|
||||||
}
|
}
|
||||||
.state-desc {
|
.state-desc {
|
||||||
display: block;
|
display: block;
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
line-height: 24rpx;
|
line-height: 24rpx;
|
||||||
|
margin-top: 26rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.select-group {
|
.select-group {
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
class="order-item"
|
class="order-item"
|
||||||
v-for="(item, index) in tabItem.list"
|
v-for="(item, index) in tabItem.list"
|
||||||
:key="index"
|
:key="index"
|
||||||
@click="toDetail(item.id, item.state)"
|
@click="toDetail(item.id, item.state, item.listType, item.orderType)"
|
||||||
>
|
>
|
||||||
<order-item :order="item" :index="index">
|
<order-item :order="item" :index="index">
|
||||||
<view class="action-group">
|
<view class="action-group">
|
||||||
|
@ -89,7 +89,7 @@ export default {
|
||||||
{
|
{
|
||||||
listType: this.$models.order.listType.T4,
|
listType: this.$models.order.listType.T4,
|
||||||
name: "退款记录",
|
name: "退款记录",
|
||||||
api: "order.list.t1",
|
api: "order.list.t4",
|
||||||
status: 1,
|
status: 1,
|
||||||
page: 1,
|
page: 1,
|
||||||
more: true,
|
more: true,
|
||||||
|
@ -149,9 +149,13 @@ export default {
|
||||||
}
|
}
|
||||||
this.$models.order
|
this.$models.order
|
||||||
.orderList({
|
.orderList({
|
||||||
api: currentTab.api,
|
request: {
|
||||||
page: currentTab.page,
|
api: currentTab.api,
|
||||||
status: currentTab.status,
|
data: {
|
||||||
|
page: currentTab.page,
|
||||||
|
status: currentTab.status,
|
||||||
|
},
|
||||||
|
},
|
||||||
listType: currentTab.listType,
|
listType: currentTab.listType,
|
||||||
})
|
})
|
||||||
.then((orderList) => {
|
.then((orderList) => {
|
||||||
|
@ -171,12 +175,13 @@ export default {
|
||||||
/**
|
/**
|
||||||
* 跳转详情
|
* 跳转详情
|
||||||
*/
|
*/
|
||||||
toDetail(id, state) {
|
toDetail(id, state, listType, orderType) {
|
||||||
let type = "detail";
|
let tab = "detail";
|
||||||
if (state == this.$models.order.state.NO_SELECT_WORKER) {
|
// 报价订单未选择师傅 跳转后切换到师傅列表
|
||||||
type = "worker";
|
if (listType == this.$models.order.listType.T2 && orderType == 2 && state == this.$models.order.state[listType].T1) {
|
||||||
|
tab = "worker";
|
||||||
}
|
}
|
||||||
this.$utils.toPage("/pages/order/detail?type=" + type + "&id=" + id);
|
this.$utils.toPage("/pages/order/detail?list=" + listType + "&tab=" + tab + "&id=" + id);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue