Commit aa95b16a authored by 彭佳妮(贵阳日报)'s avatar 彭佳妮(贵阳日报)
parents d8069a5c 7684fe96
......@@ -174,7 +174,10 @@
{
"path": "pages/assistingAgriculture/detail/detail",
"style": {
"navigationBarTitleText": "详情页"
"navigationBarTitleText": "商品详情",
"navigationBarBackgroundColor": "#ffffff",
"navigationStyle": "custom",
"onReachBottomDistance": 50,
}
},
{
......@@ -264,4 +267,4 @@
"globalStyle": {
"navigationStyle": "custom"
}
}
\ No newline at end of file
}
<template>
<view class="container">
<Search :showTitle="true" :title="newAddressFlag ? '新增收货地址' : '编辑收货地址'" backgroundBox="white"></Search>
<Search
:showTitle="true"
:title="newAddressFlag ? '新增收货地址' : '编辑收货地址'"
backgroundBox="white"
></Search>
<view class="content">
<wd-form ref="reForm" :model="forMData" id="form">
<wd-cell-group>
......@@ -117,7 +121,6 @@ const hdSubmit = async () => {
uni.navigateBack();
},
});
} catch (error) {
console.log(error, 'error');
}
......@@ -176,7 +179,7 @@ page {
font-feature-settings: 'kern' on;
.content {
// padding-top: 88rpx;
// padding-top: 88rpx;
#form {
width: 710rpx;
......
<template>
<div class="route-details">
<Search></Search>
<scroll-view class="container" scroll-y>
<Search :backgroundBox="backgroundBox"></Search>
<scroll-view class="container" scroll-y @scroll="onScroll">
<!-- <img class="back-img" src="/static/assistingAgriculture/assets/left.png" @tap="back" /> -->
<!-- 轮播 -->
<div class="banner">
......@@ -148,7 +148,7 @@
<div class="date-wrap">
<div class="date-title">选择日期</div>
<div class="date-list flex-between">
<div class="list">
<div class="list" style="margin-top: 20rpx">
<div
class="item"
:class="{ active: activePrice === v }"
......@@ -328,9 +328,19 @@ import {
getItinerary,
getStoreInformation,
} from '@/api/assistingAgriculture/route';
import { groupBuyConfirm, groupBuyUpdate } from '@/api/confirmOrder';
import { sgyOrderOrderInfo } from '@/api/assistingAgriculture/shop';
import { groupBuyConfirm, groupBuyUpdate, groupBuyCreate } from '@/api/confirmOrder';
import { getCollect } from '@/api/packageDetail';
/* 监听滑动改变顶部颜色 */
const backgroundBox = ref('');
const onScroll = (e) => {
const { scrollTop } = e.detail;
if (scrollTop > 20) {
backgroundBox.value = '#fff';
} else {
backgroundBox.value = '';
}
};
const swiperList = ref([
'https://registry.npmmirror.com/wot-design-uni-assets/*/files/redpanda.jpg',
]);
......@@ -344,12 +354,13 @@ const firstEvaluation = ref({});
const photoList = ref([]);
// 套餐列表
const mealList = ref([]);
const activeMeal = ref(null);
const activeMeal = ref({});
const orderInfo = ref({});
const onActiveMeal = (item) => {
activeMeal.value = item;
getPriceListFn(item.mealId);
};
// 日历
const priceList = ref([]);
const viewPriceList = ref([]);
......@@ -363,6 +374,41 @@ watch(show, (value) => {
index = Math.min(priceList.value.length - 3, index);
viewPriceList.value = priceList.value.slice(index - 1, index + 3);
});
onShow(() => {
if (outTradeNos.value) {
// 查询订单状态决定是否支付
sgyOrderOrderInfo({ orderNumber: outTradeNos.value }).then((res) => {
switch (res.data.baseOrder.subStatus) {
case '1':
xma.showToast({
title: '支付失败',
icon: 'error',
duration: 1000,
success() {
setTimeout(() => {
xma.redirectTo({
url: `/pages/order/order?status=not_pay`,
});
}, 1500);
},
});
break;
case '2':
xma.redirectTo({
url: `/pages/order/detail?orderNumber=${outTradeNos.value}`,
});
break;
case '3':
xma.redirectTo({
url: `/pages/order/detail?orderNumber=${outTradeNos.value}`,
});
break;
default:
break;
}
});
}
});
const getWeek = (date) => {
const week = ['日', '一', '二', '三', '四', '五', '六'];
return week[new Date(date).getDay()];
......@@ -383,7 +429,7 @@ function jumpPage() {
}
function groupBuyConfirmFn(prodId, skuId) {
return new Promise((resolve, reject) => {
groupBuyConfirm({ prodId, skuId }).then((res) => {
groupBuyConfirm({ prodId, skuId, orderType: 'store' }).then((res) => {
if (res.code === 0) {
orderInfo.value = res.data;
resolve(res.data.shopId);
......@@ -418,33 +464,51 @@ function formatDate(inputDate) {
}
const payNow = async (data) => {
groupBuyConfirmFn(activeMeal.value.prodId, activeMeal.value.skuId).then((res) => {
groupBuyUpdateFnQg().then(() => {});
groupBuyUpdateFnQg().then(() => {
const qgParams = {
id: orderInfo.value.key,
placeOrderWay: 'sgy',
payWayCode: 5,
tradeType: data.selectType,
};
groupBuyCreate(qgParams).then((res) => {
if (res.code === 0) {
openUrl(res.data.result);
} else {
groupBuyConfirmFn(activeMeal.value.prodId, activeMeal.value.skuId);
}
});
});
});
params.value.id = orderInfo.value.key;
params.value.tradeType = data.selectType;
params.value.basketIds = basketIds.value;
const qgParams = {
id: orderInfo.value.key,
placeOrderWay: 'sgy',
payWayCode: 5,
tradeType: data.selectType,
};
// groupBuyCreate(qgParams).then((res) => {
// if (res.code === 0) {
// openUrl(res.data.result);
// } else {
// groupBuyConfirmFn(prodIds.value, skuIds.value);
// }
// });
};
function groupBuyUpdateFnQg(couponUserId = '') {
const outTradeNos = ref(null);
const openUrl = (result) => {
const { paymentUrl, outTradeNo } = result;
outTradeNos.value = outTradeNo;
window.location.href = paymentUrl;
// 设置一个延时器
const start = Date.now();
setTimeout(() => {
const end = Date.now();
if (end - start < 1200) {
// 如果 iframe 加载时间小于 1.2 秒,说明应用没有安装
xma.showToast({
title: '未安装App',
icon: 'error',
});
// 这里可以跳转到应用下载页面
}
}, 1600);
};
function groupBuyUpdateFnQg() {
return new Promise((resolve, reject) => {
groupBuyUpdate({
key: orderInfo.value.key,
receiverTime: formatDate(activePrice.value.priceDay),
receiverTime: activePrice.value.priceDay.replace(' ', '-'),
}).then((res) => {
if (res.code === 0) {
orderInfo.value = res.data;
resolve();
}
});
});
......
......@@ -55,15 +55,16 @@
style="width: 32rpx; height: 32rpx"
/>
<video
:class="{ 'no-progress-bar': !isFullScreen }"
:show-fullscreen-btn="true"
:show-play-btn="true"
:show-enter-play-btn="true"
class="spe-img1"
id="videoId"
:src="videoList[0].videoUrl"
@error="videoErrorCallback"
:danmu-list="danmuList"
enable-danmu
danmu-btn
@play="play"
@fullscreenchange="fullscreenchange"
@fullscreenchange="handleFullscreenChange"
></video>
<!-- <img-->
<!-- class="spe-img"-->
......@@ -188,6 +189,7 @@
</view>
</view>
</view>
<view v-if="!hasMoreData" class="no-more-data">没有更多了</view>
</view>
</view>
<fab position="3" />
......@@ -230,7 +232,7 @@ const screenRef = ref(null);
const backgroundBox = ref('');
const border = ref('');
const videoList = ref([]);
const isFullScreen = ref(false);
const locationFiltering = (index) => {
switch (index) {
case 0:
......@@ -311,6 +313,9 @@ function fullscreenchange(e) {
uni.createVideoContext('videoId').pause();
}
}
function handleFullscreenChange(event) {
isFullScreen.value = !isFullScreen.value;
}
// //退出全屏时停止
// function fullscreenchange (e){
// if(!e.detail.fullScreen){
......@@ -362,16 +367,15 @@ const screenParams = (selectedItems, type) => {
}
};
// 搜索
// 搜索
const toSearch = () => {
xma.navigateTo({ url: '/pages/assistingAgriculture/searchPage/searchPage?prodTypes=10' });
};
const currentPage = ref(1);
// 查询列表
const getProd = (searchKeyword = '') => {
const params = {
current: 1,
size: 10,
current: currentPage.value,
size: 3,
...(sortType.value && { sortType: sortType.value.sortMode }),
...(attractionIdList.value &&
attractionIdList.value.length > 0 &&
......@@ -394,9 +398,25 @@ const getProd = (searchKeyword = '') => {
item.img = import.meta.env.VITE_APP_IMG_URL + item.pic;
item.serveList = item.serviceList.slice(0, 3);
});
cardList.value = res.data.records;
if (currentPage.value === 1) {
cardList.value = res.data.records;
} else {
cardList.value = cardList.value.concat(res.data.records);
}
// 判断是否还有更多数据
if (res.data.records.length < params.size) {
hasMoreData.value = false; // 没有更多数据
}
});
};
// 页面滚动到底部触发加载更多
onReachBottom(() => {
if (hasMoreData.value) {
currentPage.value++;
getProd();
}
});
const hasMoreData = ref(true);
const resetParams = () => {
if (sortRef.value || departureDateRef.value || scenicSpotsRef.value || screenRef.value) {
sortType.value = null;
......@@ -639,6 +659,10 @@ page {
font-weight: normal;
line-height: 30rpx;
color: #666666;
height: 30rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.tag .wd-tag {
margin-right: 10px;
......@@ -653,11 +677,12 @@ page {
color: #0974f5;
}
.price {
position: absolute;
font-size: 28rpx;
font-weight: bold;
line-height: 28rpx;
color: #fa5151;
margin-left: 160rpx;
margin-left: 300rpx;
}
.venue {
display: flex;
......@@ -672,7 +697,7 @@ page {
}
.tag {
margin-top: 10rpx;
width: 400rpx;
width: 600rpx;
}
.detail-score {
margin-top: 30rpx;
......@@ -686,7 +711,7 @@ page {
display: flex;
align-items: center;
padding-left: 20rpx;
margin-left: 80rpx;
margin-left: 60rpx;
text-align: start;
.magnifyingGlass {
width: 26rpx;
......@@ -721,4 +746,12 @@ uni-video {
left: 20rpx;
border-radius: 16rpx;
}
::v-deep .uni-video-controls {
margin: 0;
}
.no-more-data {
text-align: center;
padding: 20rpx;
color: #999;
}
</style>
......@@ -265,6 +265,7 @@ const toStore = (item) => {
background-color: #fff;
padding: 0 15rpx 0 23rpx;
box-sizing: border-box;
z-index: 999;
.left {
.check-box {
font-size: 24rpx;
......
......@@ -3,12 +3,11 @@
<!-- 顶部搜索框-->
<view class="top">
<view class="top">
<Search
background="rgba(255, 255, 255, 0.8)"
backIcon="black"
iconSrc="/static/assistingAgriculture/assets/blackLeft.png"
placeholderText="请输入要搜索的内容"
></Search>
<Search style="z-index: 99; width: 100%" :type="2" backgroundBox="#fff">
<view style="width: 100%; text-align: center; font-size: 36rpx; font-weight: bold">
商品详情
</view>
</Search>
</view>
</view>
<!-- 图片-->
......@@ -56,7 +55,7 @@
<view class="bottom" style="display: flex; flex-direction: row">
<view class="borderClass" @tap="toStore">
<img
src="/static/assistingAgriculture/detail/img7.png"
src="/static/assistingAgriculture/detail/home.png"
style="width: 40rpx; height: 40rpx"
/>
<view class="sort-text">店铺</view>
......@@ -71,7 +70,7 @@
<view class="borderClass" @tap="toCart">
<wd-badge :modelValue="subscript">
<img
src="/static/assistingAgriculture/detail/car.png"
src="/static/assistingAgriculture/detail/carImg.png"
style="width: 40rpx; height: 40rpx"
/>
</wd-badge>
......@@ -97,7 +96,6 @@
</template>
<script setup>
import Search from '../../../components/assistingAgriculture/index/Search.vue';
import { ref } from 'vue';
import { onShow } from '@dcloudio/uni-app';
import {
......@@ -237,18 +235,6 @@ function toSettle() {
page {
background-color: #f3f3f3;
}
.container {
position: relative;
left: 0rpx;
top: -45rpx;
opacity: 1;
}
.top {
width: 750rpx;
height: 128rpx;
margin-top: 40rpx;
background: #ffffff;
}
.nav {
width: 750rpx;
}
......@@ -438,13 +424,13 @@ page {
}
.detail-bottom {
width: 750rpx;
height: 216rpx;
height: 140rpx;
border-radius: 16rpx 16px 0rpx 0rpx;
background: #ffffff;
box-shadow: 0rpx -8rpx 20rpx 0rpx rgba(0, 0, 0, 0.12);
z-index: 10;
position: fixed;
top: 88%;
top: 91%;
}
.sort {
width: 750rpx;
......@@ -470,8 +456,4 @@ page {
margin-top: -90rpx;
margin-left: 400rpx;
}
::v-deep.icon {
width: 56rpx;
height: 56rpx;
}
</style>
......@@ -497,7 +497,7 @@ img.rice {
display: flex;
align-items: center;
padding-left: 20rpx;
margin-left: 80rpx;
margin-left: 60rpx;
text-align: start;
.magnifyingGlass {
width: 26rpx;
......
......@@ -302,7 +302,7 @@ page {
display: flex;
align-items: center;
padding-left: 20rpx;
margin-left: 80rpx;
margin-left: 60rpx;
text-align: start;
.magnifyingGlass {
width: 26rpx;
......
......@@ -527,7 +527,7 @@ page {
display: flex;
align-items: center;
padding-left: 20rpx;
margin-left: 80rpx;
margin-left: 60rpx;
text-align: start;
.magnifyingGlass {
width: 26rpx;
......
<template>
<view class="search-page">
<view
class="search"
style="background: linear-gradient(180deg, #71c456 0%, rgba(243, 243, 243, 0) 100%)"
>
<wd-icon
name="thin-arrow-left"
class="icon"
@tap="back"
:style="{ color: '#FFFAE8' }"
></wd-icon>
<slot></slot>
<view class="searchBox">
<wd-icon name="search" size="22rpx"></wd-icon>
<input
type="text"
:value="test"
class="text"
@confirm="toSearch"
placeholder="请输入搜索内容"
confirm-type="搜索"
/>
</view>
<Search
backIcon="white"
backgroundBox="linear-gradient(180deg, #71c456 0%, rgba(243, 243, 243, 0) 100%)"
>
<view class="searchBox">
<wd-icon name="search" size="22rpx"></wd-icon>
<input
type="text"
:value="test"
class="text"
@confirm="toSearch"
placeholder="请输入搜索内容"
confirm-type="搜索"
/>
</view>
</view>
<wd-tabs custom-class="tabss" v-model="tab">
</Search>
<!-- <wd-tabs custom-class="tabss" v-model="tab">
<block v-for="(item, index) in tabs" :key="index">
<wd-tab :title="item">
<view class="content1" v-show="tab === 0">
......@@ -62,7 +53,16 @@
</view>
</wd-tab>
</block>
</wd-tabs>
</wd-tabs> -->
<view class="shopitem" v-for="(item, index) in commoditys" :key="index" @tap="toDetail(item)">
<image class="img" :src="item.imgUrl" mode="aspectFill" />
<view class="middle">
<text class="text">{{ item.prodName }}</text>
<text class="text2">{{ item.price }}</text>
<text class="collection">月销量{{ item.soldNum }}</text>
</view>
</view>
<wd-status-tip image="content" tip="暂无商品" v-if="commoditys.length === 0 && active" />
</template>
<script setup>
......@@ -74,6 +74,7 @@ const value = ref(5);
const commoditys = ref([]);
const shops = ref([]);
const baseImgurl = import.meta.env.VITE_APP_IMG_URL;
const active = ref(false);
function changeValue({ value }) {
console.log(value);
}
......@@ -99,9 +100,12 @@ const toSearch = (data) => {
// 商品搜索
params.prodName = keyword;
searchCommodity(params).then((res) => {
active.value = true;
res.data.data.forEach((item) => {
const imgs = item.imgs.split(',');
item.imgUrl = baseImgurl + imgs[0];
if (item.imgs) {
const imgs = item.imgs.split(',');
item.imgUrl = baseImgurl + imgs[0];
}
});
commoditys.value = res.data.data;
});
......@@ -134,43 +138,68 @@ function toDetail(item) {
page {
background: #f6f6f6;
}
.search-page {
.search {
width: 100%;
height: 124rpx;
opacity: 0.8;
margin: 0 auto;
.searchBox {
opacity: 1;
width: 350rpx;
height: 56rpx;
background: #ffffff;
border-radius: 28rpx 28rpx 28rpx 28rpx;
display: flex;
align-items: center;
padding-left: 20rpx;
margin-left: 50rpx;
.magnifyingGlass {
width: 26rpx;
height: 26rpx;
}
.text {
margin-left: 10rpx;
font-size: 24rpx;
}
}
.shopitem {
padding: 0 20rpx;
display: flex;
height: 200rpx;
background-color: white;
align-items: center;
border-bottom: 1rpx solid rgb(225, 223, 223);
.img {
width: 200rpx;
height: 150rpx;
border-radius: 16rpx;
flex-shrink: 0;
}
.middle {
height: 150rpx;
margin-left: 20rpx;
display: flex;
align-items: center;
padding-left: 20rpx;
box-sizing: border-box;
.arrow {
width: 15rpx;
height: 24rpx;
flex-direction: column;
justify-content: space-around;
.text {
font-weight: bold;
font-size: 26rpx;
}
.icon {
font-size: 28rpx;
.text2 {
font-weight: bold;
font-size: 22rpx;
color: red;
}
.searchBox {
opacity: 1;
width: 350rpx;
height: 56rpx;
background: #ffffff;
border-radius: 28rpx 28rpx 28rpx 28rpx;
display: flex;
align-items: center;
padding-left: 20rpx;
margin-left: 20rpx;
.magnifyingGlass {
width: 26rpx;
height: 26rpx;
}
.text {
margin-left: 10rpx;
font-size: 24rpx;
}
.collection {
font-size: 22rpx;
color: rgb(147, 145, 145);
}
}
.btn {
text-align: center;
border-radius: 50rpx;
background: #2fb641;
font-size: 22rpx;
padding: 8rpx 15rpx;
color: white;
box-sizing: border-box;
}
}
:deep(.wd-tabs__line) {
......
......@@ -807,7 +807,7 @@ page {
box-shadow: 0rpx 4rpx 16rpx 0rpx rgba(0, 0, 0, 0.08);
margin: 0 auto;
margin-top: 10rpx;
// position: sticky;
position: relative;
// top: 0;
z-index: 99;
uni-scroll-view .uni-scroll-view::-webkit-scrollbar {
......
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