Commit 2940f9a8 authored by 石建新(贵阳日报)'s avatar 石建新(贵阳日报)
parents aef6f641 9a266770
...@@ -14,14 +14,12 @@ ...@@ -14,14 +14,12 @@
<text class="one-text">{{ item.evaluationVos[0].evaluation }}</text> <text class="one-text">{{ item.evaluationVos[0].evaluation }}</text>
</view> </view>
<view class="labelBox"> <view class="labelBox">
<view>卤味爱好者最佳选择</view> <view v-for="(item, index) in item.labels" :key="index">{{ item }}</view>
<view>免费wifi</view>
<view>服务态度很好</view>
</view> </view>
<view class="groupPurchasePrice"> <view class="groupPurchasePrice">
<image class="img" src="../../static/index/groupBuying.png" mode="widthFix" /> <image class="img" src="../../static/index/groupBuying.png" mode="widthFix" />
<text class="one-text">¥19</text> <text class="one-text">¥19</text>
<view class="two-text">7.8折</view> <!-- <view class="two-text">7.8折</view> -->
<text class="three-text">¥29.8</text> <text class="three-text">¥29.8</text>
<text class="four-text">深夜加班续命套餐</text> <text class="four-text">深夜加班续命套餐</text>
</view> </view>
......
...@@ -18,6 +18,23 @@ export function getOrderDetail(data) { ...@@ -18,6 +18,23 @@ export function getOrderDetail(data) {
}); });
} }
// 删除订单 data:orderNumber
export function deleteOrderApi(data) {
return request({
url: '/sgyrdd/sgyOrder/del/' + data,
method: 'POST',
});
}
// 取消订单 data:orderNumber
export function cancelOrderApi(data) {
return request({
url: '/sgyrdd/sgyOrder/cancel',
method: 'GET',
data,
});
}
// 商品详情接口 // 商品详情接口
export function getProdDetail(data) { export function getProdDetail(data) {
return request({ return request({
......
...@@ -87,7 +87,7 @@ import Search from '../../components/index/Search.vue'; ...@@ -87,7 +87,7 @@ import Search from '../../components/index/Search.vue';
import Classification from '../../components/index/Classification.vue'; import Classification from '../../components/index/Classification.vue';
import Position from '../../components/index/Position.vue'; import Position from '../../components/index/Position.vue';
import Sort from '../../components/index/Sort.vue'; import Sort from '../../components/index/Sort.vue';
import { getByParentId } from '../../api/index'; import { getByParentId, merchantList } from '../../api/index';
const business = reactive(['优选商家', '超值半价', '今日可订', '经典单人']); const business = reactive(['优选商家', '超值半价', '今日可订', '经典单人']);
const active = ref(null); const active = ref(null);
...@@ -98,7 +98,9 @@ onLoad((option) => { ...@@ -98,7 +98,9 @@ onLoad((option) => {
const { parentId } = option; const { parentId } = option;
query(parentId); query(parentId);
}); });
onMounted(() => {
getMerchantList();
});
// 根据父级分类id查询子分类列表 // 根据父级分类id查询子分类列表
const query = (parentId) => { const query = (parentId) => {
getByParentId(parentId).then((res) => { getByParentId(parentId).then((res) => {
...@@ -113,7 +115,7 @@ const query = (parentId) => { ...@@ -113,7 +115,7 @@ const query = (parentId) => {
const choice = (index) => { const choice = (index) => {
active.value = index; active.value = index;
}; };
const cardData = reactive([ const cardData = ref([
{ {
text: '测试', text: '测试',
}, },
...@@ -144,6 +146,29 @@ const locationFiltering = (index) => { ...@@ -144,6 +146,29 @@ const locationFiltering = (index) => {
break; break;
} }
}; };
// 商家列表分页-搜索列表
const getMerchantList = () => {
const data = {
current: 1,
size: 10,
lon: 106.68650025025502,
lat: 26.567192352601154,
};
merchantList(data).then((res) => {
console.log('商家列表', res);
res.data.content.forEach((item) => {
item.shopLogo = import.meta.env.VITE_APP_IMG_URL + item.shopLogo;
if (item.evaluationVos.length > 0) {
item.evaluationVos[0].avatar =
import.meta.env.VITE_APP_IMG_URL + item.evaluationVos[0].avatar;
}
if (item.labels) {
item.labels = item.labels.split(',');
}
});
cardData.value = res.data.content;
});
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -274,6 +274,9 @@ const getMerchantList = () => { ...@@ -274,6 +274,9 @@ const getMerchantList = () => {
item.evaluationVos[0].avatar = item.evaluationVos[0].avatar =
import.meta.env.VITE_APP_IMG_URL + item.evaluationVos[0].avatar; import.meta.env.VITE_APP_IMG_URL + item.evaluationVos[0].avatar;
} }
if (item.labels) {
item.labels = item.labels.split(',');
}
}); });
cardData.value = res.data.content.slice(0, 2); cardData.value = res.data.content.slice(0, 2);
cardData1.value = res.data.content.slice(2, 4); cardData1.value = res.data.content.slice(2, 4);
......
...@@ -63,7 +63,11 @@ import FoodDetails from '../../components/index/FoodDetails.vue'; ...@@ -63,7 +63,11 @@ import FoodDetails from '../../components/index/FoodDetails.vue';
import Classification from '../../components/index/Classification.vue'; import Classification from '../../components/index/Classification.vue';
import Position from '../../components/index/Position.vue'; import Position from '../../components/index/Position.vue';
import Sort from '../../components/index/Sort.vue'; import Sort from '../../components/index/Sort.vue';
import { merchantList } from '../../api/index';
onMounted(() => {
getMerchantList();
});
const business = reactive(['优选商家', '超值半价', '今日可订', '经典单人']); const business = reactive(['优选商家', '超值半价', '今日可订', '经典单人']);
const active = ref(null); const active = ref(null);
...@@ -75,10 +79,33 @@ const back = () => { ...@@ -75,10 +79,33 @@ const back = () => {
delta: 1, delta: 1,
}); });
}; };
// 商家列表分页-搜索列表
const getMerchantList = () => {
const data = {
current: 1,
size: 10,
lon: 106.68650025025502,
lat: 26.567192352601154,
};
merchantList(data).then((res) => {
console.log('商家列表', res);
res.data.content.forEach((item) => {
item.shopLogo = import.meta.env.VITE_APP_IMG_URL + item.shopLogo;
if (item.evaluationVos.length > 0) {
item.evaluationVos[0].avatar =
import.meta.env.VITE_APP_IMG_URL + item.evaluationVos[0].avatar;
}
if (item.labels) {
item.labels = item.labels.split(',');
}
});
cardData.value = res.data.content;
});
};
const choice = (index) => { const choice = (index) => {
active.value = index; active.value = index;
}; };
const cardData = reactive([ const cardData = ref([
{ {
text: '测试', text: '测试',
}, },
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<view class="info" @click="handleDetail(item.orderNumber)"> <view class="info" @click="handleDetail(item.orderNumber)">
<image mode="aspectFill" :src="fileDomain + item.orderItems[0].pic" /> <image mode="aspectFill" :src="fileDomain + item.orderItems[0].pic" />
<view class="info-box"> <view class="info-box">
<view class="text">下单时间:{{ item.createTime }}</view> <view class="text">下单时间:{{ item.createTime.slice(0, 16) }}</view>
<view class="text">预约时间:{{ item.receiverTime }}</view> <view class="text">预约时间:{{ item.receiverTime }}</view>
<view class="text">数量:{{ item.orderItems[0].prodCount }}</view> <view class="text">数量:{{ item.orderItems[0].prodCount }}</view>
<view class="text">实付:¥{{ item.actualTotal }}</view> <view class="text">实付:¥{{ item.actualTotal }}</view>
...@@ -20,14 +20,22 @@ ...@@ -20,14 +20,22 @@
</view> </view>
<view class="btn"> <view class="btn">
<view class="btn-info" v-if="item.status == 5 || item.status == 6">删除</view> <view
<view class="btn-info" v-if="item.status == 3" @click="handleDetail(item.orderNumber)"> class="btn-info"
v-if="item.status == 5 || item.status == 6"
@tap="handleDelete(item.orderNumber)"
>
删除
</view>
<view class="btn-info" v-if="item.status == 3" @tap="handleDetail(item.orderNumber)">
查看预约 查看预约
</view> </view>
<view class="btn-info" v-if="item.status == 1">取消订单</view> <view class="btn-info" @tap="handleCancel(item.orderNumber)" v-if="item.status == 1">
<view class="btn-info">联系商家</view> 取消订单
</view>
<view class="btn-info" v-if="item.status == 4" @tap="handleRemark(item)">评价</view>
<view class="btn-info" @tap="callShopPhone(item.shopTel)">联系商家</view>
<view class="btn-error" v-if="item.status == 7">售后详情</view> <view class="btn-error" v-if="item.status == 7">售后详情</view>
<view class="btn-error" v-if="item.status == 2 || item.status == 3 || item.status == 4"> <view class="btn-error" v-if="item.status == 2 || item.status == 3 || item.status == 4">
申请退款 申请退款
</view> </view>
...@@ -42,7 +50,7 @@ ...@@ -42,7 +50,7 @@
</template> </template>
<script setup> <script setup>
import { getOrderList } from '@/api/order'; import { getOrderList, deleteOrderApi, cancelOrderApi } from '@/api/order';
const fileDomain = import.meta.env.VITE_APP_IMG_URL; const fileDomain = import.meta.env.VITE_APP_IMG_URL;
const emits = defineEmits(['refresh']); const emits = defineEmits(['refresh']);
const state = ref('loading'); const state = ref('loading');
...@@ -73,13 +81,13 @@ const getList = async () => { ...@@ -73,13 +81,13 @@ const getList = async () => {
if (res.data.records.length > 0) { if (res.data.records.length > 0) {
dataList.value.push(...res.data.records); dataList.value.push(...res.data.records);
total.value = res.data.total; total.value = res.data.total;
console.log(total.value);
} else { } else {
state.value = 'finished'; state.value = 'finished';
} }
} else { } else {
state.value = 'error'; state.value = 'error';
} }
state.value = 'finished';
}; };
getList(); getList();
...@@ -108,6 +116,78 @@ const handleRefresh = (e) => { ...@@ -108,6 +116,78 @@ const handleRefresh = (e) => {
getList(); getList();
}; };
/**
* 拨打商家电话
* @param {*} phoneNumber
*/
function callShopPhone(phoneNumber) {
xma.makePhoneCall({
phoneNumber, // 仅为示例
});
}
/**
* 删除订单
* @param {*} ordrerNumber
*/
const handleDelete = (ordrerNumber) => {
uni.showModal({
title: '提示',
content: '确定要删除订单吗?',
success: async (res) => {
if (res.confirm) {
const res = await deleteOrderApi(ordrerNumber);
if (res.code === 0) {
uni.showToast({
title: '删除成功',
icon: 'success',
});
handleRefresh(catalog.status);
} else {
uni.showToast({
title: '删除失败',
icon: 'error',
});
}
}
},
});
};
/**
* 取消订单
* @param {*} ordrerNumber
*/
const handleCancel = (ordrerNumber) => {
uni.showModal({
title: '提示',
content: '确定要取消订单吗?',
success: async (res) => {
if (res.confirm) {
const res = await cancelOrderApi({ ordrerNumber });
if (res.code === 0) {
uni.showToast({
title: '取消成功',
icon: 'success',
});
handleRefresh(catalog.status);
} else {
uni.showToast({
title: '取消失败',
icon: 'error',
});
}
}
},
});
};
const handleRemark = (item) => {
uni.navigateTo({
url: `/pages/order/remark?orderNumber=${item.orderNumber}&shopName=${item.shopName}`,
});
};
defineExpose({ defineExpose({
refresh: handleRefresh, refresh: handleRefresh,
}); });
......
<template>
<wd-popup
v-model="show"
position="bottom"
:safe-area-inset-bottom="true"
custom-style="border-radius: 16rpx 16rpx 0 0"
@close="showPayment = false"
lockScroll
>
<view class="pay-card">
<view class="header">
<view class="title">立即支付</view>
<wd-icon name="close" size="20" color="#999"></wd-icon>
</view>
<radio-group style="width: 100%" @change="radioChange">
<view class="pay-item">
<view class="icon">
<image src="@/static/shop/wx-icon.png"></image>
微信
</view>
<radio class="radio" color="#F12A2A" value="'wx'" :checked="'wx' == selectType" />
</view>
<view class="pay-item">
<view class="icon">
<image src="@/static/shop/yzf-icon.png"></image>
翼支付
</view>
<radio class="radio" color="#F12A2A" value="'yzf'" :checked="'yzf' == selectType" />
</view>
</radio-group>
<view class="footer">
<wd-button type="error">危险按钮</wd-button>
</view>
</view>
</wd-popup>
</template>
<script setup>
const selectType = ref('wx');
const show = ref(true);
function radioChange(evt) {
const { value } = evt.detail;
selectType.value = value;
}
const open = () => {
show.value = true;
};
const close = () => {
show.value = false;
};
defineExpose({
open,
close,
});
</script>
<style lang="scss" scoped>
.pay-card {
display: flex;
flex-direction: column;
background: #fff;
padding: 30rpx 20rpx;
box-sizing: border-box;
margin: 0 auto;
.header {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #e7e7e7;
padding-bottom: 30rpx;
.title {
font-size: 32rpx;
color: #333;
}
}
radio-group {
padding: 30rpx 0;
}
.pay-item {
display: flex;
align-items: center;
width: 100%;
justify-content: space-between;
.icon {
display: flex;
align-items: center;
font-size: 28rpx;
color: #333333;
gap: 10rpx;
image {
width: 45rpx;
height: 45rpx;
margin-right: 12rpx;
}
}
.radio {
margin-left: auto;
}
}
.pay-item:nth-child(2) {
margin-top: 40rpx;
}
.footer {
width: 100%;
margin-top: 30rpx;
&:deep(.wd-button.is-medium.is-round) {
width: 100%;
}
}
}
</style>
...@@ -47,11 +47,11 @@ ...@@ -47,11 +47,11 @@
<view class="rectangle-with-semicircles"></view> <view class="rectangle-with-semicircles"></view>
<view class="qrcode line"> <view class="qrcode line">
<!-- 二维码 --> <!-- 二维码 -->
<view class="qr-box"> <view class="qr-box" v-if="qrcode">
<image :src="qrcode" class="qr"></image> <image :src="qrcode" class="qr"></image>
</view> </view>
<view class="info-box"> <view class="info-box">
<view class="between"> <view class="between" v-if="orderDetail.status == 2 || orderDetail.status == 3">
<view class="column"> <view class="column">
<text class="title">券码信息(1张可用)</text> <text class="title">券码信息(1张可用)</text>
<text class="text">{{ orderDetail.receiverTime }} 到期</text> <text class="text">{{ orderDetail.receiverTime }} 到期</text>
...@@ -59,15 +59,21 @@ ...@@ -59,15 +59,21 @@
<view class="btn">申请退款</view> <view class="btn">申请退款</view>
</view> </view>
<view class="between"> <view class="between">
<text <view class="column">
:class=" <text class="title1" v-if="orderDetail.status != 2 || orderDetail.status != 3">
orderDetail.status == 5 || orderDetail.status == 6 || orderDetail.status == 7 券码信息
? 'linethrough' </text>
: 'phone' <text
" :class="
> orderDetail.status == 5 || orderDetail.status == 6 || orderDetail.status == 7
{{ orderDetail.orderNumber.slice(6) }} ? 'linethrough'
</text> : 'phone'
"
>
{{ orderDetail.orderNumber.slice(6) }}
</text>
</view>
<text class="text">{{ orderStatusList[orderDetail.status] }}</text> <text class="text">{{ orderStatusList[orderDetail.status] }}</text>
</view> </view>
</view> </view>
...@@ -167,7 +173,7 @@ ...@@ -167,7 +173,7 @@
<text class="colon"></text> <text class="colon"></text>
<view class="copybox"> <view class="copybox">
<text class="text">{{ orderDetail.orderNumber }}</text> <text class="text">{{ orderDetail.orderNumber }}</text>
<view class="copy">复制</view> <view class="copy" @tap="copyTextToClipboard(orderDetail.orderNumber)">复制</view>
</view> </view>
</view> </view>
<view class="row"> <view class="row">
...@@ -175,7 +181,7 @@ ...@@ -175,7 +181,7 @@
<text class="colon"></text> <text class="colon"></text>
<text class="text">{{ maskPhoneNumber(orderDetail.receiverMobile) }}</text> <text class="text">{{ maskPhoneNumber(orderDetail.receiverMobile) }}</text>
</view> </view>
<view class="row"> <view class="row" v-if="orderDetail.payTime">
<text class="name">付款时间</text> <text class="name">付款时间</text>
<text class="colon"></text> <text class="colon"></text>
<text class="text">{{ orderDetail.payTime }}</text> <text class="text">{{ orderDetail.payTime }}</text>
...@@ -255,23 +261,28 @@ const orderStatusList = ref({ ...@@ -255,23 +261,28 @@ const orderStatusList = ref({
const orderNumber = ref(''); const orderNumber = ref('');
onLoad((options) => { onLoad((options) => {
orderNumber.value = options.orderNumber; orderNumber.value = options.orderNumber;
console.log(orderNumber.value);
getDetail(); getDetail();
}); });
// 获取订单详情 /**
* 获取订单详情
*/
const orderDetail = ref(); const orderDetail = ref();
const getDetail = async () => { const getDetail = async () => {
const res = await getOrderDetail({ orderNumber: orderNumber.value }); const res = await getOrderDetail({ orderNumber: orderNumber.value });
if (res.code === 0) { if (res.code === 0) {
orderDetail.value = res.data; orderDetail.value = res.data;
codeDetail(orderDetail.value.orderNumber); if (orderDetail.value.orderStatus === 2 || orderDetail.value.orderStatus === 3) {
codeDetail(orderDetail.value.orderNumber);
}
getProductDetail(orderDetail.value.orderItems[0].prodId); getProductDetail(orderDetail.value.orderItems[0].prodId);
getShopMailDetail(orderDetail.value.shopId); getShopMailDetail(orderDetail.value.shopId);
} }
}; };
// 生成二维码 /**
* 生成二维码
*/
const qrcode = ref(''); const qrcode = ref('');
const codeDetail = (item) => { const codeDetail = (item) => {
const data = { const data = {
...@@ -283,7 +294,9 @@ const codeDetail = (item) => { ...@@ -283,7 +294,9 @@ const codeDetail = (item) => {
}); });
}; };
// 获取商品详情 /**
* 获取商品详情
*/
const prodDetail = ref(); const prodDetail = ref();
const getProductDetail = async (id) => { const getProductDetail = async (id) => {
const res = await getProdDetail({ prodId: id }); const res = await getProdDetail({ prodId: id });
...@@ -292,7 +305,9 @@ const getProductDetail = async (id) => { ...@@ -292,7 +305,9 @@ const getProductDetail = async (id) => {
} }
}; };
// 获取商铺信息 /**
* 获取商铺信息
*/
const shopDetail = ref(); const shopDetail = ref();
const getShopMailDetail = async (id) => { const getShopMailDetail = async (id) => {
const res = await getShopDetail({ shopId: id }); const res = await getShopDetail({ shopId: id });
...@@ -311,7 +326,7 @@ function getLocationFn() { ...@@ -311,7 +326,7 @@ function getLocationFn() {
success: function (res) { success: function (res) {
const myLatitude = currentLatitudeAndLongitude.value.latitude; const myLatitude = currentLatitudeAndLongitude.value.latitude;
const myLongitude = currentLatitudeAndLongitude.value.longitude; const myLongitude = currentLatitudeAndLongitude.value.longitude;
const distance = getDistance(res.latitude, res.longitude, myLatitude, myLongitude); const distance = getDistance(res.latitude, res.longitude, myLatitude, myLongitude, 1);
shopDetail.value.distance = distance; shopDetail.value.distance = distance;
}, },
fail: function (err) { fail: function (err) {
...@@ -329,6 +344,24 @@ function callShopPhone(phoneNumber) { ...@@ -329,6 +344,24 @@ function callShopPhone(phoneNumber) {
phoneNumber, // 仅为示例 phoneNumber, // 仅为示例
}); });
} }
/**
* 复制到剪切板
* @param {*} text
*/
function copyTextToClipboard(text) {
xma.setClipboardData({
data: text,
success: function () {
// 可以添加用户友好的提示,例如使用uni.showToast提示复制成功
xma.showToast({
title: '复制成功',
icon: 'success',
duration: 2000,
});
},
});
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
...@@ -514,6 +547,11 @@ page { ...@@ -514,6 +547,11 @@ page {
font-weight: bold; font-weight: bold;
} }
.title1 {
font-size: 32rpx;
line-height: 32rpx;
}
.text { .text {
font-size: 24rpx; font-size: 24rpx;
line-height: 24rpx; line-height: 24rpx;
......
...@@ -9,12 +9,14 @@ ...@@ -9,12 +9,14 @@
</wd-tabs> </wd-tabs>
<OrderList ref="OrderListRef"></OrderList> <OrderList ref="OrderListRef"></OrderList>
</view> </view>
<Payment ref="PaymentRef"></Payment>
</view> </view>
</template> </template>
<script setup> <script setup>
import Header from './components/Header/index.vue'; import Header from './components/Header/index.vue';
import OrderList from './components/OrderList/index.vue'; import OrderList from './components/OrderList/index.vue';
import Payment from './components/Payment/index.vue';
const tabs = ref([ const tabs = ref([
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment