Commit 61a12582 authored by 陈宗胤(贵阳日报)'s avatar 陈宗胤(贵阳日报)
parents 919e2d25 05249844
......@@ -3,32 +3,22 @@
<view class="date">景点</view>
<ul class="ul">
<li
v-for="(item, index) in items"
v-for="(item, index) in placeList"
:key="index"
:class="{ active: selectedItem === index }"
@tap="selectItem(index)"
>
{{ item }}
{{ item.brief }}
</li>
</ul>
</view>
</template>
<script setup>
import { defineProps } from 'vue';
const items = reactive([
'智能排序',
'距离优先',
'好评优先',
'销量优先',
'低价优先',
'低价优先',
'距离优先',
'好评优先',
'销量优先',
'低价优先',
'距离优先',
]);
import { defineProps, onMounted } from 'vue';
import { getTour } from '@/api/assistingAgriculture/village';
const placeList = ref([]);
const emit = defineEmits(['sortParams']);
const selectedItem = ref(null);
const props = defineProps({
width: {
......@@ -36,15 +26,24 @@ const props = defineProps({
default: '100%',
},
});
const selectItem = (selectItem) => {
selectedItem.value = selectItem;
onMounted(async () => {
getTourList();
});
const selectItem = (index, item) => {
selectedItem.value = index;
emit('sortParams', item);
};
// 查询景点
const getTourList = () => {
getTour({ prodId: 0 }).then((res) => {
placeList.value = res.data;
});
};
</script>
<style lang="scss" scoped>
.sort {
width: 710rpx;
height: 192rpx;
position: absolute;
top: 100%;
// width: 100%;
......@@ -78,7 +77,6 @@ const selectItem = (selectItem) => {
flex-flow: wrap;
li {
width: 154rpx;
height: 20rpx;
border-radius: 8rpx;
flex-direction: column;
justify-content: center;
......@@ -87,10 +85,10 @@ const selectItem = (selectItem) => {
margin-left: 20rpx;
background: #f3f3f3;
font-size: 24rpx;
line-height: 20rpx;
text-align: center;
list-style-type: none;
margin-top: 20rpx;
display: flex;
}
.active {
color: #fa5151;
......
......@@ -7,7 +7,7 @@
:class="{ active: selectedItem === index }"
@tap="selectItem(index)"
>
{{ item }}
{{ item.name }}
</li>
</ul>
</view>
......@@ -15,7 +15,14 @@
<script setup>
import { defineProps } from 'vue';
const items = reactive(['智能排序', '距离优先', '好评优先', '销量优先', '低价优先', '低价优先']);
const items = ref([
{ name: '距离优先', sortModel: 1 },
{ name: '好评优先', sortModel: 2 },
{ name: '销量优先', sortModel: 3 },
{ name: '低价优先', sortModel: 4 },
{ name: '高价优先', sortModel: 5 },
]);
const emit = defineEmits(['sortParams']);
const selectedItem = ref(null);
const props = defineProps({
width: {
......@@ -23,8 +30,9 @@ const props = defineProps({
default: '100%',
},
});
const selectItem = (selectItem) => {
selectedItem.value = selectItem;
const selectItem = (index, item) => {
selectedItem.value = index;
emit('sortParams', item);
};
</script>
......
......@@ -40,3 +40,27 @@ export function znsgyOrderCreate(data) {
data,
});
}
// 筑农首页-查询用户默认收货地址
export function useraddrDefaultUserAddr(data) {
return request({
url: `/sgyrdd/useraddr/defaultUserAddr`,
method: 'GET',
data,
});
}
// 筑农首页-修改临时订单
export function previewOrderBasketUpdate(data) {
return request({
url: `/sgyrdd/previewOrder/basket/update`,
method: 'POST',
data,
});
}
// 筑农首页-3、订单详情
export function sgyOrderOrderInfo(data) {
return request({
url: `/sgyrdd/sgyOrder/orderInfo`,
method: 'GET',
data,
});
}
import { request } from '../../utils/request';
// 查询景点
export function getTour(data) {
return request({
url: `/sgyrdd/znprod/tour/list`,
method: 'GET',
data,
});
}
// 查询热门路线
export function getPopularList(data) {
return request({
url: `/sgyrdd/prod/popular`,
method: 'GET',
data,
});
}
// 查询商品列表
export function getProdList(data) {
return request({
url: `/sgyrdd/prod/prodList`,
method: 'GET',
data,
});
}
......@@ -55,17 +55,13 @@
:scroll-with-animation="true"
@scroll="scroll"
>
<view class="foodCard" v-for="(item, index) in 5" :key="index">
<view class="foodCard" v-for="(item, index) in popularRouterData" :key="index">
<!-- <img-->
<!-- class="img-icon"-->
<!-- src="/static/assistingAgriculture/rural/icon.png"-->
<!-- style="width: 118rpx; height: 32rpx"-->
<!-- />-->
<image
class="test5"
src="/static/assistingAgriculture/rural/img4.png"
mode="widthFix"
/>
<image class="test5" :src="item.imgUrl" mode="widthFix" />
</view>
</scroll-view>
<!-- 列表-->
......@@ -114,7 +110,7 @@
></wd-icon>
</view>
</view>
<Sort v-show="rotate" />
<Sort v-show="rotate" @sortParams="sortParams" />
<DepartureDate v-show="rotate2" />
<ScenicSpots v-show="rotate3" />
<Screen v-show="rotate4" />
......@@ -128,8 +124,8 @@
>
<img class="card-img" :src="item.img" style="width: 248rpx; height: 240rpx" />
<view class="detail-text">
<text class="detail-title">{{ item.title }}</text>
<text class="give">{{ item.give }}</text>
<text class="detail-title">{{ item.prodName }}</text>
<text class="give">{{ item.prodName }}</text>
<view class="tag">
<wd-tag
bg-color="#EEEEEE"
......@@ -141,11 +137,11 @@
</wd-tag>
</view>
<view class="detail-score">
<text class="score">{{ item.score }}</text>
<text class="num">月销{{ item.num }}</text>
<text class="score">{{ item.deliveryAmount }}</text>
<text class="num">月销{{ item.deliveryAmount }}</text>
</view>
<view class="venue">
<text class="place">{{ item.place }}</text>
<text class="place">{{ item.prodName }}</text>
<text class="price">{{ item.price }}</text>
</view>
</view>
......@@ -162,53 +158,24 @@ import Sort from '../../../components/assistingAgriculture/index/Sort.vue';
import DepartureDate from '../../../components/assistingAgriculture/index/DepartureDate.vue';
import ScenicSpots from '../../../components/assistingAgriculture/index/ScenicSpots.vue';
import Screen from '../../../components/assistingAgriculture/index/Screen.vue';
import { getPopularList, getProdList, getTour } from '@/api/assistingAgriculture/village';
import { getPresaleList } from '@/api/assistingAgriculture/building';
import { onMounted } from 'vue';
onMounted(async () => {
getProd();
getPopular();
});
const rotate = ref(false);
const rotate2 = ref(false);
const rotate3 = ref(false);
const rotate4 = ref(false);
const cardList = ref([
{
img: '/static/assistingAgriculture/rural/img2.png',
title: '红枫湖+青岩古镇+云漫湖+云顶高坡景区一日游',
give: '赠价值59元特产伴手礼一份',
tag: ['可定明日', '无购物', '含保险'],
score: '4.9',
num: '2000',
place: '云岩出发',
price: '299.00',
},
{
img: '/static/assistingAgriculture/rural/img2.png',
title: '红枫湖+青岩古镇+云漫湖+云顶高坡景区一日游',
give: '赠价值59元特产伴手礼一份',
tag: ['可定明日', '无购物', '含保险'],
score: '4.9',
num: '2000',
place: '云岩出发',
price: '299.00',
},
{
img: '/static/assistingAgriculture/rural/img2.png',
title: '红枫湖+青岩古镇+云漫湖+云顶高坡景区一日游',
give: '赠价值59元特产伴手礼一份',
tag: ['可定明日', '无购物', '含保险'],
score: '4.9',
num: '2000',
place: '云岩出发',
price: '299.00',
},
{
img: '/static/assistingAgriculture/rural/img2.png',
title: '红枫湖+青岩古镇+云漫湖+云顶高坡景区一日游',
give: '赠价值59元特产伴手礼一份',
tag: ['可定明日', '无购物', '含保险'],
score: '4.9',
num: '2000',
place: '云岩出发',
price: '299.00',
},
]);
const cardList = ref([]);
const popularRouterData = ref([]);
const params = ref({
current: 1,
size: 10,
});
const sortType = ref(null);
const locationFiltering = (index) => {
switch (index) {
case 0:
......@@ -237,6 +204,25 @@ const locationFiltering = (index) => {
break;
}
};
// 查询热门路线
const getPopular = () => {
getPopularList({ current: 1, size: 10 }).then((res) => {
res.data.records.forEach((item) => {
item.imgUrl = import.meta.env.VITE_APP_IMG_URL + item.pic;
});
popularRouterData.value = res.data.records;
});
};
// 查询列表
const getProd = () => {
getProdList({ current: 1, size: 10 }).then((res) => {
res.data.records.forEach((item) => {
item.img = import.meta.env.VITE_APP_IMG_URL + item.pic;
});
cardList.value = res.data.records;
console.log(res, 222);
});
};
function toRouteDetails() {
// TODO: 跳转到线路详情
xma.navigateTo({
......@@ -312,6 +298,7 @@ page {
background: #ffffff;
margin-top: 20rpx;
margin-left: 20rpx;
padding-bottom: 30rpx;
}
.scroll-x {
width: 100%;
......@@ -482,4 +469,7 @@ page {
width: 56rpx;
height: 56rpx;
}
.detail-score {
margin-top: 90rpx;
}
</style>
<template>
<view class="confirm-order">
<view class="information-view">
<view class="order-typers">
<view class="home-delivery-service">送货上门</view>
<view class="hypotenuse-view"></view>
</view>
<view class="location">
<img
class="location-pic"
src="/src/static/assistingAgriculture/assets/location.png"
alt=""
/>
<view class="location-text">贵州省贵阳市南明区花果园中环广场3号楼 1718</view>
<img
class="location-icon"
src="/src/static/assistingAgriculture/assets/right-arrow.png"
alt=""
/>
<view class="customer-information">
<view class="customer-name">张三</view>
<view class="customer-phone">187****5632</view>
</view>
</view>
<!-- <view class="estimated-time-view">
<text class="send-time">立即送出</text>
<view class="estimated-time">大约13:45送达</view>
<view class="estimated-icon"></view>
<img
class="estimated-icon"
src="/src/static/assistingAgriculture/assets/right-arrow.png"
alt=""
/>
</view> -->
</view>
<view class="commordity-information-view">
<view class="trade-name">杨家黄焖鸡</view>
<view class="commordity-content">
<view class="commordity-details">
<img
class="commodity-picture"
src="/src/static/assistingAgriculture/assets/img1.png"
alt=""
/>
<view class="commodity-name">招牌黄焖鸡+米饭(土豆+生菜)</view>
<view class="price-information">
<text class="price-symbol"></text>
<text class="price">28.8</text>
<text class="conmmodity-amount">x1</text>
</view>
<view class="label">约1000克</view>
</view>
<view class="commordity-details">
<img
class="commodity-picture"
src="/src/static/assistingAgriculture/assets/img1.png"
alt=""
/>
<view class="commodity-name">招牌黄焖鸡+米饭(土豆+生菜)</view>
<view class="price-information">
<text class="price-symbol"></text>
<text class="price">28.8</text>
<text class="conmmodity-amount">x1</text>
</view>
<view class="label">约1000克</view>
</view>
</view>
<view class="optional-view">
<view class="discount-coupon-view">
<view class="discount-coupon"></view>
<view class="discount-coupon-text">商家优惠券</view>
<view class="discount-coupon-price">¥0</view>
<img
class="discount-coupon-icon"
src="/src/static/assistingAgriculture/assets/right-arrow.png"
alt=""
/>
</view>
</view>
<view class="freight-view">
<text>运费</text>
<view class="freight-price">¥0</view>
</view>
<view class="remark-view">
<text>备注</text>
<view class="remark">
<wd-popup
v-model="showpopup"
position="bottom"
custom-style="height: 50%;border-radius: 16rpx 16rpx 0 0 ;box-sizing:border-box;padding:20rpx;"
@close="handleClose"
:safe-area-inset-bottom="true"
custom-class="popup"
>
<view class="title-box">
<text class="title">选择优惠券</text>
<wd-icon
@click="showpopup = false"
color="#D8D8D8"
name="close-bold"
size="30rpx"
></wd-icon>
</view>
<view class="popup-content">
<view
class="ticket-item"
:class="activeCouponId === item.couponId ? 'active-ticket' : ''"
v-for="(item, index) in orderInfo.shopCoupon"
:key="index"
@click.stop="selectShopCoupon(item)"
>
<view class="ticket-box">
<view class="normal ticket-left">
<view class="ticket-box">
<view class="ticket-price">
<text class="price"></text>
<text class="num">{{ item.reduceAmount }}</text>
</view>
<view class="ticket-desc">
<text class="desc">{{ item.cashCondition }}元可用</text>
<text class="desc">数量:{{ item.count }}</text>
</view>
</view>
</view>
<view class="ticket-right">
<view class="head">
<text class="title">{{ item.couponName }}</text>
<view class="headbox">
<text class="time">{{ item.userEndTime }}过期</text>
</view>
</view>
</view>
</view>
<view class="detail" v-if="item.showDetail">
<view class="line"></view>
<view class="detail-box" style="font-size: 16rpx">
{{ item.activityNotes }}
</view>
</view>
</view>
<wd-status-tip v-if="orderInfo.shopCoupon.length === 0" image="content" tip="暂无优惠券" />
</view>
</wd-popup>
<view class="address-card">
<view class="title">
<text class="home-delivery-service">送货上门</text>
<view class="icon"></view>
</view>
<view class="address-content" @click="jumpToAddressList">
<image class="location-pic" src="@/static/assistingAgriculture/assets/location.png"></image>
<view class="location-text">{{ addressInfo.areaAddr }} {{ addressInfo.areaName }}</view>
<wd-icon custom-class="my-icon" color="#666" name="arrow-right" size="22px"></wd-icon>
</view>
<view class="address-user-info">
<text>{{ addressInfo.receiver }} {{ addressInfo.mobiles }}</text>
</view>
</view>
<view class="prod-card">
<view class="prod-shop-name">{{ orderInfo.shopName }}</view>
<view class="prod-list">
<view class="prod-item" v-for="(item, index) in orderInfo.orderItems" :key="index">
<image mode="aspectFill" :src="imgUrl + item.pic"></image>
<view class="center">
<text class="prod-name">{{ item.prodName }}</text>
<view class="tag-list">
<wd-tag color="#333333" bg-color="#F2F2F2" custom-class="space">约1000克</wd-tag>
</view>
</view>
<view class="price-prod">
<text class="prod-price">{{ item.price }}</text>
<text class="prod-count">x{{ item.prodCount }}</text>
</view>
</view>
</view>
<view class="merchant-coupons">
<view class="quan-icon"></view>
商家优惠券
<view class="view-coupons">
<text v-if="activeCouponInfo.reduceAmount">{{ activeCouponInfo.reduceAmount }}</text>
<wd-icon
@click="showpopup = true"
color="#696969"
name="chevron-right"
size="22px"
></wd-icon>
</view>
</view>
<view class="merchant-coupons">
运费
<view class="view-coupons">
<text>{{ orderInfo.freightFee }}</text>
</view>
</view>
<view class="merchant-coupons">备注</view>
<view class="uni-textarea">
<view class="textarea-box">
<textarea
class="content"
placeholder="请输入你的问题"
maxlength="200"
placeholder-class="placeholder-style"
v-model="textInputs"
@input="inputRemake"
></textarea>
<view class="current-word">{{ inputLength }}/{{ wordMax }}</view>
</view>
<view class="xj-content">
<text class="t">已优惠¥{{ orderInfo.reduceAmount }} 小计</text>
<text class="n">{{ orderInfo.actualTotal }}</text>
</view>
</view>
<view class="total-prices-view">
<view class="discounts">已优惠¥0 &ensp;小计</view>
<view class="total-prices">¥86.4</view>
</view>
<view class="foot">
<view class="total">
<view class="hj-box">
<text>合计:</text>
<text class="num">{{ orderInfo.actualTotal }}</text>
</view>
<view class="submit-order-view">
<view class="total-view">
<view class="total">合计:</view>
<view class="total-price-symbol"></view>
<view class="total-price">86.4</view>
<view class="total-price">总共优惠 ¥{{ orderInfo.reduceAmount }}</view>
</view>
<view class="total-discounts">总共优惠&ensp;¥0.00</view>
<view class="btn" @click="openZfType">提交订单</view>
</view>
<button class="submit-button" @click="openZfType">提交订单</button>
<Payment ref="PaymentRef" @payment="payNow"></Payment>
</view>
</template>
......@@ -115,25 +144,152 @@
<script setup>
import { ref, computed } from 'vue';
import Payment from '@/pages/order/components/Payment/index.vue';
import { sgyrddBasketConfirm, znsgyOrderCreate } from '@/api/assistingAgriculture/shop';
const wordMax = ref(200);
import {
sgyrddBasketConfirm,
znsgyOrderCreate,
useraddrDefaultUserAddr,
previewOrderBasketUpdate,
sgyOrderOrderInfo,
} from '@/api/assistingAgriculture/shop';
const imgUrl = import.meta.env.VITE_APP_IMG_URL;
const textInputs = ref('');
const basketIds = ref([]);
const activeCouponId = ref('');
const changeAddress = ref(false);
const addressParams = ref({});
const showpopup = ref(false);
const outTradeNos = ref(null);
const inputLength = computed(() => {
return textInputs.value.length;
});
onLoad((options) => {
const { ids } = options;
basketIds.value = ids.split(',');
sgyrddBasketConfirmFn(basketIds.value);
sgyrddBasketConfirmFn(basketIds.value).then(() => {
useraddrDefaultUserAddrFn().then(() => {
groupBuyUpdateFn();
});
});
});
onShow(() => {
if (changeAddress.value) {
sgyrddBasketConfirmFn(basketIds.value).then(() => {
useraddrDefaultUserAddrFn().then(() => {
groupBuyUpdateFn();
});
});
}
if (outTradeNos.value) {
// 查询订单状态决定是否支付
sgyOrderOrderInfo({ orderNumber: outTradeNos.value }).then((res) => {
// switch (res.data.baseOrder.subStatus) {
// case '1':
// xma.showToast({
// title: '支付失败',
// icon: 'error',
// duration: 2000,
// success() {
// groupBuyConfirmFn(prodIds.value, skuIds.value);
// },
// });
// break;
// case '2':
// xma.redirectTo({
// url: `/pages/shop/paymentSuccessful?outTradeNos=${outTradeNos.value}`,
// });
// break;
// case '3':
// xma.redirectTo({
// url: `/pages/shop/paymentSuccessful?outTradeNos=${outTradeNos.value}`,
// });
// break;
// default:
// break;
// }
});
}
});
const orderInfo = ref({});
const sgyrddBasketConfirmFn = (basketIds) => {
return new Promise((resolve, reject) => {
sgyrddBasketConfirm({ basketIds, orderType: 'logistics' }).then((res) => {
if (res.code === 0) {
console.log('11');
orderInfo.value = res.data;
resolve();
}
});
});
};
/**
* 选择优惠券
*/
const activeCouponInfo = ref({});
function selectShopCoupon(item) {
if (item.cashCondition <= orderInfo.value.orderItems[0].price) {
activeCouponId.value = item.couponId;
activeCouponInfo.value = item;
showpopup.value = false;
groupBuyUpdateFn(item.couponUserId);
} else {
xma.showToast({
title: '不满足优惠券使用条件',
icon: 'none',
});
}
}
const jumpToAddressList = () => {
changeAddress.value = true;
wx.navigateTo({
url: '/pages/address/list',
});
};
function groupBuyUpdateFn(couponUserId) {
const { receiverName, receiverMobile, receiverAddress } = addressParams.value;
console.log(
'receiverName, receiverMobile, receiverAddress',
receiverName,
receiverMobile,
receiverAddress,
);
previewOrderBasketUpdate({
receiverName,
receiverMobile,
receiverAddress,
key: orderInfo.value.key,
couponUserId,
}).then((res) => {
if (res.code === 0) {
orderInfo.value = res.data;
}
});
}
function encryptPhoneNumber(phoneNumber) {
// 检查电话号码是否有效
if (typeof phoneNumber !== 'string' || phoneNumber.length < 7) {
throw new Error('无效的电话号码');
}
// 处理电话号码,保留前3位和后4位,中间替换为****
const encryptedPhoneNumber = phoneNumber.slice(0, 3) + '****' + phoneNumber.slice(-4);
return encryptedPhoneNumber;
}
const addressInfo = ref({});
const useraddrDefaultUserAddrFn = () => {
return new Promise((resolve, reject) => {
useraddrDefaultUserAddr().then((res) => {
if (res.code === 0) {
res.data.mobiles = encryptPhoneNumber(res.data.mobile);
addressInfo.value = res.data;
addressParams.value.receiverName = res.data.receiver;
addressParams.value.receiverMobile = res.data.mobile;
addressParams.value.receiverAddress = res.data.areaAddr;
resolve();
}
});
});
};
const inputRemake = (e) => {
const { value } = e.detail;
......@@ -151,14 +307,13 @@ const openZfType = () => {
PaymentRef.value.open();
};
const payNow = async (data) => {
params.value.id = data.orderNumber;
params.value.id = orderInfo.value.key;
params.value.tradeType = data.selectType;
params.value.basketIds = [];
const res = await znsgyOrderCreate(params);
params.value.basketIds = basketIds.value;
znsgyOrderCreate(params.value).then((res) => {
if (res.code === 0) {
const { paymentUrl, outTradeNo } = res.data.result;
// 修改列表待付款订单号
dataList.value[changeIndex.value].orderNumber = outTradeNo;
pendingPaymentOrder.value = outTradeNo;
outTradeNos.value = outTradeNo;
window.location.href = paymentUrl;
// 设置一个延时器
const start = Date.now();
......@@ -172,7 +327,11 @@ const payNow = async (data) => {
});
// 这里可以跳转到应用下载页面
}
}, 1000);
}, 1600);
} else {
groupBuyConfirmFn(prodIds.value, skuIds.value);
}
});
};
</script>
......@@ -184,343 +343,455 @@ page {
}
.confirm-order {
width: 750rpx;
display: flex;
flex-direction: column;
align-items: center;
padding-bottom: 200rpx;
.title-box {
display: flex;
align-items: center;
justify-content: space-between;
background: #fff;
position: relative;
top: 0;
width: 100%;
.title {
font-size: 15 * 2rpx;
font-weight: bold;
color: #3d3d3d;
}
}
.popup-content {
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
margin-top: 20rpx;
.ticket-item {
width: 100%;
background-color: #fff;
border-radius: 16rpx;
display: flex;
flex-direction: column;
margin-top: 12rpx;
border: 1 * 2rpx solid #f3f3f3;
.ticket-box {
display: flex;
.normal {
background: url('../../static/ticket/ticket-normal.png') no-repeat;
background-size: 100% 100%;
}
.past {
background: url('../../static/ticket/ticket-past.png') no-repeat;
background-size: 100% 100%;
}
.ticket-left {
width: 200rpx;
height: 200rpx;
.ticket-box {
width: 94%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 30rpx;
.ticket-price {
display: flex;
align-items: last baseline;
text {
font-size: 24rpx;
line-height: 24rpx;
font-family: PingFang SC;
color: #fff;
}
.num {
font-size: 52rpx;
}
}
.ticket-desc {
display: flex;
flex-direction: column;
align-items: center;
gap: 24rpx;
.desc {
font-size: 24rpx;
line-height: 24rpx;
font-family: PingFang SC;
color: #fff;
}
}
}
}
.ticket-right {
display: flex;
flex-direction: column;
width: 504rpx;
position: relative;
.img {
width: 126rpx;
height: 94rpx;
position: absolute;
right: 28rpx;
top: 26rpx;
}
.head {
display: flex;
flex-direction: column;
padding: 30rpx 22rpx 26rpx 32rpx;
gap: 4rpx;
.title {
font-family: PingFang SC Heavy-Regular;
font-size: 32rpx;
color: #333333;
line-height: 32rpx;
}
.headbox {
display: flex;
justify-content: space-between;
align-items: end;
height: 50rpx;
.time {
font-family: PingFang SC Heavy-Regular;
font-size: 20rpx;
color: #999999;
line-height: 20rpx;
}
.btn {
padding: 20rpx;
}
.information-view {
box-sizing: border-box;
border-radius: 26rpx;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(90deg, #ff7051 0%, #ff382e 100%);
color: #fff;
font-size: 24rpx;
line-height: 24rpx;
}
}
}
.foot {
display: flex;
flex-direction: column;
padding: 0 22rpx 14rpx 32rpx;
gap: 14rpx;
.line {
border-top: 2rpx solid #f2f2f2;
}
.footbox {
display: flex;
align-items: center;
justify-content: space-between;
.more {
margin-left: auto;
font-size: 8 * 2rpx;
color: #abaaaa;
}
.desc {
font-family: PingFang SC Heavy-Regular;
font-size: 20rpx;
color: #999999;
line-height: 20rpx;
}
}
}
}
}
.detail {
display: flex;
flex-direction: column;
padding: 24rpx 0rpx 56rpx 0rpx;
gap: 30rpx;
.line {
border-top: 2rpx solid #e7e7e7;
}
.detail-box {
display: flex;
flex-direction: column;
gap: 40rpx;
padding: 0 40rpx 0 22rpx;
.rowbox {
display: flex;
flex-direction: row;
gap: 48rpx;
text {
font-family: PingFang SC Regular;
font-size: 28rpx;
color: #666666;
line-height: 28rpx;
}
.desc {
width: 476rpx;
}
}
}
}
}
.active-ticket {
width: 100%;
background-color: #fff;
border-radius: 16rpx;
display: flex;
flex-direction: column;
margin-top: 12rpx;
border: 1 * 2rpx solid #fa5151;
}
}
.address-card {
width: 710rpx;
// height: 365rpx;
background: #fff;
border-radius: 16rpx;
// display: flex;
margin-top: 20rpx;
.title {
width: 100%;
text-align: center;
box-sizing: border-box;
display: flex;
align-content: center;
justify-content: space-between;
overflow: hidden;
background: #ffffff;
}
.order-typers {
width: 710rpx;
height: 82rpx;
}
.home-delivery-service {
width: 355rpx;
height: 82rpx;
.home-delivery-service {
width: 50%;
display: flex;
align-items: center;
justify-content: center;
background: #ffffff;
font-size: 32rpx;
line-height: 82rpx;
text-align: center;
font-weight: bold;
color: #333333;
}
.hypotenuse-view {
width: 355rpx;
}
.icon {
width: 50%;
height: 82rpx;
background: #ffebeb;
// position: static;
margin-left: 365rpx;
margin-top: -82rpx;
transform: skew(15deg, -0deg);
}
.location {
width: 695rpx;
height: 166rpx;
margin-left: 15rpx;
padding-top: 20rpx;
position: relative;
right: -6rpx;
}
}
.address-content {
box-sizing: border-box;
padding: 0 30rpx;
margin-top: 40rpx;
display: flex;
}
.location-pic {
align-items: flex-start;
.location-pic {
width: 35rpx;
height: 35rpx;
}
.location-text {
width: 595rpx;
height: 64rpx;
flex-shrink: 0;
}
.location-text {
font-size: 32rpx;
line-height: 32rpx;
color: #333333;
}
.location-icon {
width: 32rpx;
height: 32rpx;
margin-left: 25rpx;
margin-top: 5rpx;
}
.customer-information {
width: 400rpx;
height: 60rpx;
margin-top: 70rpx;
margin-left: -650rpx;
font-weight: bold;
margin-left: 10rpx;
}
.my-icon {
margin-left: auto;
}
}
.address-user-info {
width: 100%;
display: flex;
}
.customer-name {
width: 56rpx;
height: 28rpx;
align-content: center;
box-sizing: border-box;
padding: 34rpx 68rpx;
font-size: 28rpx;
line-height: 28rpx;
color: #999999;
margin-top: 14rpx;
}
.customer-phone {
width: 250rpx;
height: 28rpx;
font-size: 24rpx;
line-height: 28rpx;
color: #999999;
margin-top: 14rpx;
margin-left: 19rpx;
}
.estimated-time-view {
}
}
.prod-card {
width: 710rpx;
height: 150rpx;
margin-left: 15rpx;
display: flex;
}
.send-time {
font-size: 28rpx;
line-height: 28rpx;
color: #333333;
margin-top: 30rpx;
}
.estimated-time {
width: 178rpx;
height: 24rpx;
font-size: 24rpx;
line-height: 24rpx;
margin-left: 353rpx;
margin-top: 30rpx;
color: #f12a2a;
}
.estimated-icon {
width: 32rpx;
height: 32rpx;
margin-left: -10rpx;
margin-top: 25rpx;
}
.commordity-information-view {
width: 691rpx;
height: auto;
box-sizing: border-box;
background: #fff;
border-radius: 16rpx;
padding-left: 19rpx;
padding-top: 23rpx;
padding-bottom: 40rpx;
margin-top: 26rpx;
background: #ffffff;
}
.trade-name {
width: 140rpx;
height: 28rpx;
.prod-shop-name {
width: 100%;
padding-top: 23rpx;
padding-left: 19rpx;
padding-bottom: 19rpx;
box-sizing: border-box;
font-size: 28rpx;
line-height: 28rpx;
font-weight: bold;
color: #333333;
}
.commordity-content {
width: 691rpx;
height: auto;
border-top: 1px solid #f2f2f2;
margin-top: 19rpx;
}
.commordity-details {
width: 691rpx;
height: 128rpx;
margin-top: 20rpx;
border-bottom: 1rpx solid #f2f2f2;
}
.prod-list {
width: 100%;
box-sizing: border-box;
padding: 20rpx;
.prod-item {
width: 100%;
display: flex;
}
.commodity-picture {
margin-top: 20rpx;
image {
width: 129rpx;
height: 128rpx;
border-radius: 8rpx;
border: 1px solid #f6f6f6;
}
.commodity-name {
width: 407rpx;
height: 28rpx;
box-sizing: border-box;
border: 1rpx solid #f6f6f6;
flex-shrink: 0;
}
.center {
display: flex;
flex-direction: column;
margin-left: 21rpx;
.prod-name {
font-size: 28rpx;
line-height: 28rpx;
font-weight: bold;
color: #333333;
margin-left: 21rpx;
}
.price-information {
width: 88rpx;
height: 66rpx;
font-size: 32rpx;
line-height: 32rpx;
color: #f12a2a;
margin-left: 38rpx;
}
.tag-list {
display: flex;
}
.price-symbol {
font-weight: 400;
font-size: 24rpx;
}
.price {
font-weight: 400;
flex-wrap: wrap;
}
}
.price-prod {
display: flex;
flex-direction: column;
margin-left: auto;
.prod-price {
font-weight: 900;
font-size: 32rpx;
}
.conmmodity-amount {
}
.prod-count {
font-size: 24rpx;
margin-top: 40rpx;
margin-left: -20rpx;
color: #999999;
}
.label {
width: 125rpx;
height: 40rpx;
border-radius: 8rpx;
background: #f2f2f2;
font-size: 24rpx;
line-height: 40rpx;
text-align: center;
color: #333333;
margin-left: -535rpx;
margin-top: 52rpx;
}
.discount-coupon-view {
width: 691rpx;
height: 24rpx;
margin-top: 62rpx;
}
}
}
}
.merchant-coupons {
display: flex;
}
.discount-coupon {
width: 24rpx;
height: 24rpx;
border-radius: 5rpx;
width: 100%;
box-sizing: border-box;
padding: 20rpx;
align-items: center;
font-weight: bold;
font-size: 24rpx;
.quan-icon {
border-radius: 5 * 2rpx;
padding: 8rpx;
background: #fc2828;
font-size: 16rpx;
line-height: 24rpx;
text-align: center;
opacity: 1;
font-size: 8 * 2rpx;
color: #ffffff;
}
.discount-coupon-text {
width: 120rpx;
height: 24rpx;
font-size: 24rpx;
line-height: 24rpx;
color: #333333;
margin-left: 10rpx;
}
.discount-coupon-price {
width: 38rpx;
font-size: 24rpx;
line-height: 24rpx;
color: #333333;
margin-left: 450rpx;
}
.discount-coupon-icon {
width: 32rpx;
height: 32rpx;
margin-left: 10rpx;
margin-top: -5rpx;
}
.freight-view {
width: 691rpx;
height: 24rpx;
margin-top: 31rpx;
margin-right: 6px;
}
.view-coupons {
margin-left: auto;
display: flex;
align-items: center;
font-size: 24rpx;
line-height: 24rpx;
color: #333333;
}
.freight-price {
margin-left: 590rpx;
}
.remark-view {
width: 691rpx;
height: 24rpx;
margin-top: 31rpx;
font-size: 24rpx;
line-height: 24rpx;
color: #333333;
}
.remark {
}
}
.uni-textarea {
margin: 0 auto;
width: 674rpx;
height: 243rpx;
border-radius: 12rpx;
background: #fafafa;
font-size: 24rpx;
line-height: 24rpx;
color: #999999;
margin-top: 20rpx;
}
.content {
width: 640rpx;
height: 180rpx;
.textarea-box {
background: #fafafa;
box-sizing: border-box;
padding: 20rpx;
.content {
font-size: 24rpx;
font-weight: 500;
max-height: 243rpx;
background: #fafafa;
color: #77818f;
top: 23rpx;
margin-left: 22rpx;
}
.current-word {
width: 120rpx;
height: 50rpx;
line-height: 50rpx;
font-size: 28rpx;
color: gray;
margin-top: 12rpx;
margin-left: 540rpx;
}
.total-prices-view {
width: 691rpx;
height: 32rpx;
margin-top: 310rpx;
box-sizing: border-box;
border-radius: 12rpx;
margin: 0 auto;
}
}
.xj-content {
display: flex;
line-height: 32rpx;
text-align: center;
}
.discounts {
font-weight: 400;
align-items: center;
margin-top: 56rpx;
justify-content: flex-end;
padding-bottom: 40rpx;
.t {
font-size: 28rpx;
color: #333333;
margin-left: 356rpx;
}
.total-prices {
font-weight: 400;
}
.n {
font-weight: 700;
font-size: 32rpx;
}
.submit-order-view {
width: 750rpx;
height: 131rpx;
padding-left: 18rpx;
padding-top: 21rpx;
margin-top: 15%;
background: #ffffff;
margin-left: -20rpx;
}
.total-view {
width: 142rpx;
height: 32rpx;
line-height: 32rpx;
text-align: center;
color: #f12a2a;
}
}
}
}
.foot {
width: 100%;
position: fixed;
display: flex;
}
.total {
align-items: center;
bottom: 0;
box-sizing: border-box;
background: #fff;
padding: 20rpx 18rpx;
.total {
display: flex;
flex-direction: column;
.hj-box {
display: flex;
align-items: center;
font-weight: 400;
font-size: 24rpx;
color: #333333;
}
.total-price-symbol {
font-weight: 400;
font-size: 24rpx;
color: #f12a2a;
}
.total-price {
font-weight: 400;
.num {
font-weight: 700;
font-size: 32rpx;
color: #f12a2a;
}
.total-discounts {
width: 200rpx;
height: 24rpx;
}
}
.total-price {
font-size: 24rpx;
line-height: 24rpx;
color: #999999;
margin-top: 15rpx;
}
.submit-button {
width: 188rpx;
height: 75rpx;
}
}
}
.btn {
box-sizing: border-box;
padding: 23rpx 38rpx;
border-radius: 40rpx;
background: linear-gradient(90deg, #f73f3f 1%, #ec1a1a 98%);
margin-left: auto;
font-size: 28rpx;
line-height: 75rpx;
text-align: center;
color: #ffffff;
margin-left: 520rpx;
margin-top: -120rpx;
background: linear-gradient(90deg, #f73f3f 1%, #ec1a1a 98%);
}
}
</style>
......@@ -63,6 +63,7 @@
color="#ABAAAA"
style="position: relative; float: right; top: -42rpx"
></wd-icon>
<view class="buy-img">
<view class="hot-img" v-for="(item, index) in hotImgList" :key="index">
<img
class="rice"
......@@ -72,6 +73,7 @@
/>
</view>
</view>
</view>
<!-- tabs-->
<scroll-view class="tabs" show-scrollbar="false" scroll-x :scroll-with-animation="true">
<text
......@@ -98,7 +100,11 @@
:key="index"
style="margin-left: 20rpx"
>
<img @tap="toDetail(item)" :src="item.imgUrl" style="width: 330rpx; height: 330rpx" />
<img
@tap="toDetail(item)"
:src="item.imgUrl"
style="width: 330rpx; height: 330rpx; border-radius: 16rpx"
/>
<view class="detail-title">{{ whh }}</view>
<view class="price-page">
<text class="price">{{ item.price }}</text>
......@@ -249,18 +255,19 @@ page {
}
.hot-sale {
width: 710rpx;
height: 532rpx;
//height: 532rpx;
border-radius: 16rpx;
background: #ffffff;
margin: 20rpx;
}
.top-title {
top: 5px;
top: 20rpx;
position: relative;
margin: 25rpx;
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 10rpx;
}
.left-title {
font-family: Source Han Sans;
......@@ -444,7 +451,9 @@ page {
img.rice {
border-radius: 16rpx 16rpx 16rpx 16rpx;
margin-left: 20rpx;
margin-top: -40rpx;
padding-bottom: 40rpx;
}
.buy-img {
position: relative;
top: -20rpx;
}
</style>
......@@ -43,7 +43,10 @@
:key="index"
@click="toDetail(item)"
>
<img :src="item.commodityImg" style="width: 216rpx; height: 176rpx" />
<img
:src="item.commodityImg"
style="width: 216rpx; height: 176rpx; border-radius: 16rpx"
/>
<view class="detail-title">{{ item.prodName }}</view>
<view class="jiage-page">
<text class="jiage">{{ item.price }}</text>
......
......@@ -48,7 +48,11 @@
</scroll-view>
</view>
<view class="tab-list" v-for="(item, index) in buyList" :key="index" @tap="toDetail(item)">
<img class="buy-list" :src="item.img" style="width: 670rpx; height: 670rpx" />
<img
class="buy-list"
:src="item.img"
style="width: 670rpx; height: 670rpx; border-radius: 16rpx"
/>
<view>
<text class="retail-price">零售价:¥{{ item.oriPrice }}/盒</text>
<text class="presale-price">预售价:¥{{ item.price }}/盒</text>
......@@ -83,7 +87,7 @@
z-index: 10;
margin-left: 18rpx;
top: -70rpx;
left: -14rpx;
left: -19rpx;
"
/>
<image
......@@ -148,7 +152,6 @@ const params = {
const tabsList = ref([]);
onMounted(async () => {
getPresale();
// getPresaleProd();
presaleSortList();
});
// 预售板块轮播图
......@@ -332,7 +335,7 @@ page {
height: 730rpx;
margin-top: -64rpx;
margin-left: 20rpx;
border-radius: 0px 0px 8px 8px;
border-radius: 16rpx;
background: #ffffff;
margin-top: 6rpx;
}
......
......@@ -234,7 +234,7 @@
<!-- 底部 -->
<view class="bottom-operation-bar">
<view class="start" @click="collectionFn">
<image v-if="shopInfo.isCollect === 0" src="@/static/shop/start.png"></image>
<wd-icon v-if="shopInfo.isCollect === 0" name="star" size="22px"></wd-icon>
<wd-icon v-else color="red" name="star-on" size="22px"></wd-icon>
{{ shopInfo.privateIntFcount || 0 }}
</view>
......@@ -1014,6 +1014,7 @@ page {
padding: 20rpx 20rpx 96rpx 42rpx;
position: fixed;
justify-content: space-between;
align-items: center;
bottom: 0;
.start {
font-size: 11 * 2rpx;
......@@ -1033,7 +1034,7 @@ page {
background: #fa5151;
box-sizing: border-box;
padding: 20rpx 208rpx;
max-height: 72rpx;
height: 72rpx;
}
}
}
......
......@@ -231,6 +231,10 @@ function groupBuyConfirmFn(prodId, skuId) {
res.data.orderItems[0].pic = imgUrl + res.data.orderItems[0].pic;
orderInfo.value = res.data;
resolve(res.data.shopId);
}else {
wx.showToast({
title:res.msg
})
}
});
});
......
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