Commit 66413769 authored by 陈宗胤(贵阳日报)'s avatar 陈宗胤(贵阳日报)
parents 237b9070 db7ef839
import { request } from '../utils/request';
export function groupBuyList() {
return request({
url: '/sgyrdd/category/groupBuyList',
method: 'GET',
});
}
// 新增收货地址
export async function addAddress() {
return request({
url: '/sgyrdd/useraddr/add',
method: 'GET',
});
}
// 修改收货地址
export async function updateAddress() {
return request({
url: '/sgyrdd/useraddr/update',
method: 'GET',
});
}
// 删除收货地址
export async function deleteAddress(addrId) {
return request({
url: `/sgyrdd/useraddr/delete/${addrId}`,
method: 'GET',
});
}
// 查询收货地址列表
export async function getAddressList() {
return request({
url: '/sgyrdd/useraddr/list',
method: 'GET',
});
}
import { request } from '../../utils/request';
// 筑农首页-分类查询商品列表
export function shopCategoryByShop(data) {
return request({
url: `/sgyrdd/shopCategory/byShop`,
method: 'GET',
data,
});
}
// 筑农首页-店铺分类商品列表
export function searchProdPage(data) {
return request({
url: `/sgyrdd/search/prod/page`,
method: 'POST',
data,
});
}
...@@ -16,3 +16,4 @@ export function applyShop(data) { ...@@ -16,3 +16,4 @@ export function applyShop(data) {
data, data,
}); });
} }
<template> <template>
<view class="container"> <view class="container">
<template v-if="newAddressFlag"> <Header :title="newAddressFlag ? '新增收货地址' : '编辑收货地址'"></Header>
<Header title="新增收货地址"></Header>
</template>
<template v-else>
<Header title="编辑收货地址"></Header>
</template>
<view class="content"> <view class="content">
<wd-form ref="form" :model="model" id="form"> <wd-form ref="form" :model="model" id="form">
<wd-cell-group border> <wd-cell-group>
<wd-input <wd-input
label="联系人" label="联系人"
label-width="80px" label-width="80px"
prop="name" prop="receiver"
v-model="model.name" v-model="model.receiver"
placeholder="请输入联系人姓名" placeholder="请输入联系人姓名"
:rules="[{ required: false, validator: fieldNotEmpty, message: '姓名不能为空' }]" :rules="[{ required: false, validator: fieldNotEmpty, message: '姓名不能为空' }]"
/> />
<wd-input <wd-input
label="手机号" label="手机号"
label-width="80px" label-width="80px"
prop="phone" prop="mobile"
v-model="model.phone" v-model="model.mobile"
placeholder="请输入联系人手机号" placeholder="请输入联系人手机号"
:rules="[{ required: false, pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号' }]" :rules="[{ required: false, pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号' }]"
/> />
<wd-input <wd-input
label="详细地址" label="详细地址"
label-width="80px" label-width="80px"
prop="detailAddress" prop="addr"
v-model="model.detailAddress" v-model="model.addr"
placeholder="请输入详细地址" placeholder="请输入详细地址"
:rules="[{ required: false, validator: fieldNotEmpty, message: '详细地址不能为空' }]" :rules="[{ required: false, validator: fieldNotEmpty, message: '详细地址不能为空' }]"
/> />
...@@ -46,11 +42,11 @@ ...@@ -46,11 +42,11 @@
</view> </view>
</wd-cell> </wd-cell>
</wd-checkbox-group> </wd-checkbox-group>
<wd-checkbox-group v-model="model.isDefaultAddress" size="large"> <wd-checkbox-group v-model="model.commonAddr" size="large">
<wd-cell title="设置为默认地址" center clickable @click="setDefaultAddress"> <wd-cell title="设置为默认地址" center clickable @tap="setDefaultAddress">
<view> <view>
<wd-checkbox <wd-checkbox
model-value="1" modelValuee="1"
ref="checkBoxAdress" ref="checkBoxAdress"
checked-color="#fa5151" checked-color="#fa5151"
custom-style="margin-right:-18rpx" custom-style="margin-right:-18rpx"
...@@ -61,7 +57,7 @@ ...@@ -61,7 +57,7 @@
</wd-cell-group> </wd-cell-group>
<view class="footer"> <view class="footer">
<wd-button type="error" block class="addBtn" @click="handleSubmit">保存</wd-button> <wd-button type="error" block class="addBtn" @tap="handleSubmit">保存</wd-button>
</view> </view>
</wd-form> </wd-form>
</view> </view>
...@@ -70,8 +66,9 @@ ...@@ -70,8 +66,9 @@
<script setup> <script setup>
import Header from '@/pages/order/components/Header/index.vue'; import Header from '@/pages/order/components/Header/index.vue';
import { addAddress, updateAddress, deleteAddress } from '@/api/address';
const fileDomain = import.meta.env.VITE_APP_IMG_URL; const fileDomain = import.meta.env.VITE_APP_IMG_URL;
const newAddressFlag = ref(false); const newAddressFlag = ref(false);
const form = ref(); const form = ref();
const checkBoxAdress = ref(); const checkBoxAdress = ref();
...@@ -92,9 +89,9 @@ onLoad((options) => { ...@@ -92,9 +89,9 @@ onLoad((options) => {
isDefaultAddress: [], isDefaultAddress: [],
}); });
} else { } else {
model.value.name = '这是名字'; model.value.name = '';
model.value.phone = '13655844265'; model.value.phone = '';
model.value.detailAddress = '贵州省贵阳市南明区'; model.value.detailAddress = '';
model.value.isDefaultAddress = ['1']; model.value.isDefaultAddress = ['1'];
} }
}); });
...@@ -111,6 +108,10 @@ function fieldNotEmpty(val) { ...@@ -111,6 +108,10 @@ function fieldNotEmpty(val) {
return false; return false;
} }
} }
const submit = async () => {
const res = await addAddress(model.value);
console.log(res);
};
function handleSubmit() { function handleSubmit() {
form.value form.value
.validate() .validate()
...@@ -146,15 +147,19 @@ page { ...@@ -146,15 +147,19 @@ page {
font-family: Source Han Sans; font-family: Source Han Sans;
font-variation-settings: 'opsz' auto; font-variation-settings: 'opsz' auto;
font-feature-settings: 'kern' on; font-feature-settings: 'kern' on;
.content { .content {
padding-top: 88rpx; padding-top: 88rpx;
#form { #form {
width: 710rpx; width: 710rpx;
margin: 20rpx auto; margin: 20rpx auto;
} }
.wd-input__label.is-required::after { .wd-input__label.is-required::after {
display: none !important; display: none !important;
} }
.addBtn { .addBtn {
width: 630rpx; width: 630rpx;
height: 72rpx; height: 72rpx;
...@@ -171,10 +176,12 @@ page { ...@@ -171,10 +176,12 @@ page {
display: flex; display: flex;
width: 100%; width: 100%;
align-items: center; align-items: center;
.area_l { .area_l {
flex: 1; flex: 1;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.area_lt { .area_lt {
font-size: 24rpx; font-size: 24rpx;
font-weight: 500; font-weight: 500;
...@@ -183,6 +190,7 @@ page { ...@@ -183,6 +190,7 @@ page {
text-align: left; text-align: left;
margin-bottom: 10rpx; margin-bottom: 10rpx;
} }
.area_lb { .area_lb {
font-size: 24rpx; font-size: 24rpx;
font-weight: normal; font-weight: normal;
...@@ -191,6 +199,7 @@ page { ...@@ -191,6 +199,7 @@ page {
text-align: left; text-align: left;
} }
} }
.area_r { .area_r {
width: 40rpx; width: 40rpx;
} }
......
...@@ -7,41 +7,21 @@ ...@@ -7,41 +7,21 @@
<img src="@/static/address/address.png" /> <img src="@/static/address/address.png" />
<wd-button type="error" block class="addBtn" @tap="addNewAddress">新增地址</wd-button> <wd-button type="error" block class="addBtn" @tap="addNewAddress">新增地址</wd-button>
</view> </view>
<view class="full_list" v-else> <view class="full_list" v-else>
<view class="additem"> <view class="additem" v-for="(item, index) in addressList" :key="index">
<view class="additem_l">
<view class="address">这是地址这是地址这是地址这是地址这是地 址这是地址这是地址</view>
<view class="info">
<view class="name">这是姓名</view>
<view class="phone">123456789258</view>
</view>
<view class="address_status">
<view v-if="mainAddFlag" class="box active">
<wd-icon name="check-circle-filled" size="12px"></wd-icon>
<view class="txt">默认</view>
</view>
<view v-else class="box">
<wd-icon name="circle1" size="12px"></wd-icon>
<view class="txt">默认</view>
</view>
</view>
</view>
<view class="additem_r">
<wd-icon name="edit-outline" size="14px" @tap="editAddress"></wd-icon>
</view>
</view>
<view class="additem">
<view class="additem_l"> <view class="additem_l">
<view class="address">这是地址这是地址这是地址这是地址这是地 址这是地址这是地址</view> <view class="address">{{ item.addr }}</view>
<view class="info"> <view class="info">
<view class="name">这是姓名</view> <view class="name">{{ item.receiver }}</view>
<view class="phone">123456789258</view> <view class="phone">{{ item.mobile }}</view>
</view> </view>
<view class="address_status"> <view class="address_status">
<view v-if="mainAddFlag" class="box active"> <view v-if="item.commonAddr === 1" class="box active">
<wd-icon name="check-circle-filled" size="12px"></wd-icon> <wd-icon name="check-circle-filled" size="12px"></wd-icon>
<view class="txt">默认</view> <view class="txt">默认</view>
</view> </view>
<view v-else class="box"> <view v-else class="box">
<wd-icon name="circle1" size="12px"></wd-icon> <wd-icon name="circle1" size="12px"></wd-icon>
<view class="txt">默认</view> <view class="txt">默认</view>
...@@ -52,6 +32,7 @@ ...@@ -52,6 +32,7 @@
<wd-icon name="edit-outline" size="14px" @tap="editAddress"></wd-icon> <wd-icon name="edit-outline" size="14px" @tap="editAddress"></wd-icon>
</view> </view>
</view> </view>
<wd-button type="error" block class="addBtn" @tap="addNewAddress">新增地址</wd-button> <wd-button type="error" block class="addBtn" @tap="addNewAddress">新增地址</wd-button>
</view> </view>
</view> </view>
...@@ -60,9 +41,23 @@ ...@@ -60,9 +41,23 @@
<script setup> <script setup>
import Header from '@/pages/order/components/Header/index.vue'; import Header from '@/pages/order/components/Header/index.vue';
const fileDomain = import.meta.env.VITE_APP_IMG_URL;
import { getAddressList, deleteAddress } from '@/api/address';
const isAdressEmpty = ref(false); const isAdressEmpty = ref(false);
const mainAddFlag = ref(false); const mainAddFlag = ref(false);
const addressList = ref([]);
const getAddressListData = async () => {
const { data: res } = await getAddressList();
console.log(res);
if (res) {
addressList.value = res;
res.length === 0 ? (isAdressEmpty.value = true) : (isAdressEmpty.value = false);
}
};
getAddressListData();
const addNewAddress = () => { const addNewAddress = () => {
xma.navigateTo({ url: '/pages/address/addressEdit?new=true' }); xma.navigateTo({ url: '/pages/address/addressEdit?new=true' });
...@@ -97,6 +92,7 @@ page { ...@@ -97,6 +92,7 @@ page {
.full_list { .full_list {
margin-top: 20rpx; margin-top: 20rpx;
.additem { .additem {
width: 710rpx; width: 710rpx;
padding: 20rpx; padding: 20rpx;
...@@ -109,17 +105,20 @@ page { ...@@ -109,17 +105,20 @@ page {
font-family: Source Han Sans; font-family: Source Han Sans;
font-variation-settings: 'opsz' auto; font-variation-settings: 'opsz' auto;
font-feature-settings: 'kern' on; font-feature-settings: 'kern' on;
.additem_l { .additem_l {
width: 600rpx; width: 600rpx;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.additem_r { .additem_r {
flex: 1; flex: 1;
padding-top: 30rpx; padding-top: 30rpx;
box-sizing: border-box; box-sizing: border-box;
text-align: right; text-align: right;
} }
.address { .address {
font-size: 24rpx; font-size: 24rpx;
font-weight: 500; font-weight: 500;
...@@ -136,6 +135,7 @@ page { ...@@ -136,6 +135,7 @@ page {
color: #abaaaa; color: #abaaaa;
display: flex; display: flex;
margin-bottom: 30rpx; margin-bottom: 30rpx;
.phone { .phone {
margin-left: 10rpx; margin-left: 10rpx;
} }
...@@ -146,11 +146,13 @@ page { ...@@ -146,11 +146,13 @@ page {
display: flex; display: flex;
font-size: 18rpx; font-size: 18rpx;
align-items: center; align-items: center;
.txt { .txt {
margin-left: 5rpx; margin-left: 5rpx;
color: #abaaaa; color: #abaaaa;
} }
} }
.box.active { .box.active {
color: #fa5151; color: #fa5151;
} }
...@@ -172,12 +174,13 @@ page { ...@@ -172,12 +174,13 @@ page {
.empty_list { .empty_list {
margin-top: 20rpx; margin-top: 20rpx;
img { img {
width: 566rpx; width: 566rpx;
height: 566rpx; height: 566rpx;
margin: 40rpx auto 60rpx; margin: 40rpx auto 60rpx;
display: block; display: block;
border: 1px dashed rgb(182, 182, 182); // border: 1px dashed rgb(182, 182, 182);
} }
.addBtn { .addBtn {
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
<view style="display: flex; flex-direction: row"> <view style="display: flex; flex-direction: row">
<view <view
class="borderClass" class="borderClass"
@tap="chooseTab(item.categoryId)" @tap="chooseTab(index, item.categoryId)"
v-for="(item, index) in sortList" v-for="(item, index) in sortList"
:key="index" :key="index"
> >
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
<view> <view>
<scroll-view class="tabs" show-scrollbar="false" scroll-x :scroll-with-animation="true"> <scroll-view class="tabs" show-scrollbar="false" scroll-x :scroll-with-animation="true">
<text <text
@tap="choice(index, item.categoryId)" @tap="chooseBTab(index, item.categoryId)"
v-for="(item, index) in tabsData" v-for="(item, index) in tabsData"
:key="index" :key="index"
class="text" class="text"
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
</text> </text>
</scroll-view> </scroll-view>
</view> </view>
<view class="tab-list" v-for="(item, index) in sortDataList" :key="index" @tap="toDetail"> <view class="tab-list" v-for="(item, index) in buyList" :key="index" @tap="toDetail">
<img class="buy-list" :src="item.img" style="width: 670rpx; height: 670rpx" /> <img class="buy-list" :src="item.img" style="width: 670rpx; height: 670rpx" />
<view> <view>
<text class="retail-price">零售价:¥{{ item.oriPrice }}/盒</text> <text class="retail-price">零售价:¥{{ item.oriPrice }}/盒</text>
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
<view class="wt-left wt-list"> <view class="wt-left wt-list">
<view class="wt-item" v-for="(good, index) in buyList" :key="index" @tap="toDetail"> <view class="wt-item" v-for="(good, index) in buyList" :key="index" @tap="toDetail">
<view class="item-img"> <view class="item-img">
<image :src="good.img" mode="widthFix"></image> <image :src="good.img" mode="widthFix" style="border-radius: 16rpx"></image>
<image <image
class="presale-img" class="presale-img"
src="/static/assistingAgriculture/presale/presale.png" src="/static/assistingAgriculture/presale/presale.png"
...@@ -100,6 +100,7 @@ ...@@ -100,6 +100,7 @@
<text class="good-detail">{{ good.detail }}</text> <text class="good-detail">{{ good.detail }}</text>
<text class="introduction">{{ good.introduction }}</text> <text class="introduction">{{ good.introduction }}</text>
<text class="good-price">{{ good.price }}</text> <text class="good-price">{{ good.price }}</text>
<img class="add" src="/static/assistingAgriculture/presale/add.png" />
</view> </view>
</view> </view>
</view> </view>
...@@ -137,62 +138,7 @@ const light = ref(0); ...@@ -137,62 +138,7 @@ const light = ref(0);
const sortList = ref([]); const sortList = ref([]);
const tabsData = ref([]); const tabsData = ref([]);
const buyList = ref([]); const buyList = ref([]);
const sortDataList = ref([]);
const shopList = ref([
{ img: '/static/assistingAgriculture/presale/img7.png', price: '29.9', text: '应季好物' },
{ img: '/static/assistingAgriculture/presale/img7.png', price: '29.9', text: '应季好物' },
{ img: '/static/assistingAgriculture/presale/img7.png', price: '29.9', text: '应季好物' },
{ img: '/static/assistingAgriculture/presale/img7.png', price: '29.9', text: '应季好物' },
{ img: '/static/assistingAgriculture/presale/img7.png', price: '29.9', text: '应季好物' },
{ img: '/static/assistingAgriculture/presale/img7.png', price: '29.9', text: '应季好物' },
]);
// 声明需要的数据
const data = reactive({
leftList: [], // 左边列图片
rightList: [], // 右边列图片
leftHeight: 0, // 左边列高度
rightHeight: 0, // 右边列高度
columnWidth: 0, // 列宽度
});
// 总商品数据列表 // 总商品数据列表
const goodList = ref([
{
id: 1,
name: '这是一个商品',
image: '/static/assistingAgriculture/presale/buy.png',
introduction: '商品简介商品简介',
price: 69.9,
},
{
id: 2,
name: '商品二',
image: '/static/assistingAgriculture/presale/img7.png',
introduction: '商品简介商品简介',
price: 69.9,
},
{
id: 3,
name: '商品三',
image: '/static/assistingAgriculture/assets/fruit.png',
introduction: '商品简介商品简介',
price: 69.9,
},
{
id: 4,
name: '商品四',
image: '/static/assistingAgriculture/presale/buy.png',
introduction: '商品简介商品简介',
price: 69.9,
},
{
id: 5,
name: '商品五',
image: '/static/assistingAgriculture/presale/buy.png',
introduction: '商品简介商品简介',
price: 69.9,
},
]);
const router = useRoute(); const router = useRoute();
const params = { const params = {
current: 1, current: 1,
...@@ -202,10 +148,8 @@ const params = { ...@@ -202,10 +148,8 @@ const params = {
const tabsList = ref([]); const tabsList = ref([]);
onMounted(async () => { onMounted(async () => {
getPresale(); getPresale();
getPresaleProd(); // getPresaleProd();
presaleSortList(); presaleSortList();
chooseTab('3287');
choice(0, '3292');
}); });
// 预售板块轮播图 // 预售板块轮播图
const getPresale = () => { const getPresale = () => {
...@@ -230,46 +174,48 @@ const presaleSortList = () => { ...@@ -230,46 +174,48 @@ const presaleSortList = () => {
sortList.value = res.data.map((item) => { sortList.value = res.data.map((item) => {
return item.imgUrl; return item.imgUrl;
}); });
console.log(res.data, 111);
sortList.value = res.data; sortList.value = res.data;
chooseTab(0, sortList.value[0].categoryId);
}); });
}; };
const chooseTab = (index) => { const chooseTab = (index, categoryId) => {
getStrictSelection({ parentId: index }).then((res) => { getStrictSelection({ parentId: categoryId }).then((res) => {
res.data.forEach((item, index) => { res.data.forEach((item, index) => {
item.imgUrl = import.meta.env.VITE_APP_IMG_URL + item.pic; item.imgUrl = import.meta.env.VITE_APP_IMG_URL + item.pic;
}); });
tabsData.value = res.data; tabsData.value = res.data;
chooseBTab(0, tabsData.value[0].categoryId);
}); });
}; };
const chooseBTab = (index, categoryId) => {
// 筑农首页-分类查询商品列表 getPresaleProdList({ current: 1, size: 10, categoryId }).then((res) => {
const getPresaleProd = () => {
getPresaleProdList(params).then((res) => {
res.data.records.forEach((item) => { res.data.records.forEach((item) => {
item.img = import.meta.env.VITE_APP_IMG_URL + item.pic; item.img = import.meta.env.VITE_APP_IMG_URL + item.pic;
}); });
buyList.value = res.data.records; buyList.value = res.data.records;
}); });
light.value = index;
}; };
// 筑农首页-分类查询商品列表
// const getPresaleProd = () => {
// getPresaleProdList(params).then((res) => {
// res.data.records.forEach((item) => {
// item.img = import.meta.env.VITE_APP_IMG_URL + item.pic;
// });
// buyList.value = res.data.records;
// });
// };
// 二级分类点击事件 // 二级分类点击事件
const choice = (index, categoryId) => { const choice = (index, categoryId) => {
sortDataList.value = tabsData.value[index]; getPresaleProdList({ current: 1, size: 10, categoryId }).then((res) => {
res.data.records.forEach((item) => {
item.img = import.meta.env.VITE_APP_IMG_URL + item.pic;
});
buyList.value = res.data.records;
});
light.value = index; light.value = index;
}; };
// 左侧数据列表
const LeftList = ref([]);
// 右侧数据列表
const RightList = ref([]);
// 将商品信息列表分为左侧右侧两个部分
for (let i = 0; i < goodList.value.length; i++) {
if (i % 2 === 0) {
LeftList.value.push(goodList.value[i]);
} else {
RightList.value.push(goodList.value[i]);
}
}
// 点击商品 跳转详情 // 点击商品 跳转详情
function ToDetail(id) { function ToDetail(id) {
...@@ -530,4 +476,9 @@ page { ...@@ -530,4 +476,9 @@ page {
width: 56rpx; width: 56rpx;
height: 56rpx; height: 56rpx;
} }
img.add {
position: relative;
left: 200rpx;
top: 30rpx;
}
</style> </style>
<template> <template>
<div class="page"> <view class="page">
<div class="banner"> <view class="banner">
<img src="/static/assistingAgriculture/shop/banner.png" alt="" /> <img src="/static/assistingAgriculture/shop/banner.png" alt="" />
</div> </view>
<div class="commodity-wrap"> <view class="commodity-wrap">
<div class="top-bar"> <view class="top-bar">
<div class="header">分类</div> <view class="header">分类</view>
<div class="search"> <view class="search">
<wd-search hide-cancel placeholder="请输入要搜索的内容" /> <wd-search hide-cancel placeholder="请输入要搜索的内容" />
</div> </view>
</div> </view>
<div class="content"> <view class="content">
<div class="nav"> <view class="nav">
<p <p
v-for="(v, i) in navList" v-for="(v, i) in listOfDishCategories"
:key="i" :key="i"
@click="acitveNav = v.id" @click="changeCate(v)"
:class="{ active: acitveNav == v.id }" :class="{ active: acitveNav == v.categoryId }"
> >
{{ v.name }} {{ v.categoryName }}
</p> </p>
</div> </view>
<div class="list"> <view class="list">
<div class="list-top"> <view class="list-top">
<div class="subclass"> <!-- <view class="subclass">
<div v-for="v in 10" :key="v"></div> <view v-for="v in 10" :key="v"></view>
</div> </view>
<div class="filter" @click="activeFilter = true" v-if="!activeFilter"> <view class="filter" @click="activeFilter = true" v-if="!activeFilter">
筛选 筛选
<img src="/static/assistingAgriculture/shop/filter.png" alt="" /> <img src="/static/assistingAgriculture/shop/filter.png" alt="" />
</div> </view>
<div class="sort" v-else> <view class="sort" v-else>
<Sort>销量</Sort> <Sort>销量</Sort>
<Sort>交割</Sort> <Sort>交割</Sort>
</div> </view> -->
</div> </view>
<div class="commodity-list"> <view class="commodity-list">
<CommodityItem v-for="v in 50" :key="v" /> <scroll-view
</div> :scroll-top="scrollTop"
</div> scroll-y="true"
</div> class="scroll-Y"
</div> lower-threshold="50"
@scrolltolower="scrolltolowerFn"
@scrolltoupper="upper"
@scroll="scroll"
>
<view class="item" v-for="(item, i) in prodList" :key="i">
<view class="image-wrap" :class="{ border: isPreSale }">
<img :src="imgUrl + item.pic" alt="" />
<view class="count-down-wrop">
距离结束:
<wd-count-down
custom-class="date"
:format="format"
:millisecond="true"
:time="item.prodPresale.presaleEndTimeStamp * 1000 - new Date().getTime()"
/>
</view>
<view class="type">预售</view>
<img src="/src/static/assistingAgriculture/shop/commodityBorder.png" alt="" />
</view>
<view class="commodity-info">
<view class="name">{{ item.prodName }}</view>
<view class="wrap">
<view class="describe">{{ item.brief }}</view>
<view class="date">预计{{ item.sendGoodTime }}发货</view>
</view>
<view class="price">
<span style="font-size: 22rpx"></span>
{{ item.price }}
<span class="unit">/只</span>
</view>
</view>
<view class="add-shopping-cart">
<img src="/src/static/assistingAgriculture/shop/add.png" alt="" />
</view>
</view>
</scroll-view>
</view>
</view>
</view>
</view>
<!-- 购物车悬浮按钮 --> <!-- 购物车悬浮按钮 -->
<div class="cart-floating"> <view class="cart-floating">
<img class="cart" @tap="toCart" src="/static/assistingAgriculture/presale/cart.png" /> <wd-badge modelValue="12">
</div> <img class="cart" @tap="toCart" src="/static/assistingAgriculture/presale/cart.png" />
<!-- <div class="shopping-cart">--> </wd-badge>
<!-- <div>--> </view>
<!-- <view class="shopping-cart">-->
<!-- <view>-->
<!-- <img src="/src/static/assistingAgriculture/shop/shoppingCart.png" alt="" />--> <!-- <img src="/src/static/assistingAgriculture/shop/shoppingCart.png" alt="" />-->
<!-- 购物车--> <!-- 购物车-->
<!-- </div>--> <!-- </view>-->
<!-- <img src="/src/static/assistingAgriculture/shop/doubleArrow.png" alt="" />--> <!-- <img src="/src/static/assistingAgriculture/shop/doubleArrow.png" alt="" />-->
<!-- </div>--> <!-- </view>-->
</div> </view>
</template> </template>
<script setup> <script setup>
import { ref } from 'vue'; import { ref } from 'vue';
import CommodityItem from './commodityItem.vue'; import { shopCategoryByShop, searchProdPage } from '@/api/assistingAgriculture/shop';
import Sort from './sort.vue'; const format = ref('DD-HH:mm:ss');
const navList = ref([ const imgUrl = import.meta.env.VITE_APP_IMG_URL;
{ const currentShopId = ref('');
id: 1, const scrollTop = ref(0);
name: '鲜货家禽', const prodList = ref([]);
}, const listOfDishCategories = ref([]);
{ const params = ref({
id: 2, isEnd: false,
name: '鲜货家禽', current: 1,
}, size: 15,
{ prodName: '',
id: 3, shopCategoryId: '',
name: '鲜货家禽', deliveryType: '3',
}, prodType: '7',
{ });
id: 4, onLoad((options) => {
name: '鲜货家禽', currentShopId.value = options.shopId;
}, shopCategoryByShopFn(options.shopId).then((res) => {
{ searchProdPageFn();
id: 5, });
name: '鲜货家禽', });
}, const shopCategoryByShopFn = (shopId) => {
]); return new Promise((resolve, reject) => {
shopCategoryByShop({ shopId }).then((res) => {
if (res.code === 0) {
listOfDishCategories.value = res.data;
params.value.shopCategoryId = res.data[0].categoryId;
resolve();
}
});
});
};
const acitveNav = ref(1); const acitveNav = ref(1);
const changeCate = (item) => {
acitveNav.value = item.categoryId;
};
const activeFilter = ref(false); const activeFilter = ref(false);
function toCart() { function toCart() {
// TODO: 跳转到购物车 // TODO: 跳转到购物车
...@@ -90,6 +144,30 @@ function toCart() { ...@@ -90,6 +144,30 @@ function toCart() {
url: '/pages/assistingAgriculture/cart/cart', url: '/pages/assistingAgriculture/cart/cart',
}); });
} }
const scrolltolowerFn = () => {
console.log('触底了');
searchProdPageFn();
};
const searchProdPageFn = () => {
if (params.value.isEnd === true)
return new Promise((resolve) => {
resolve();
});
xma.showLoading({
title: '加载中...',
mask: true,
});
return searchProdPage(params.value).then((res) => {
if (res.code === 0) {
if (res.data.data.length < params.value.size) {
params.value.isEnd = true;
}
params.value.current += 1;
prodList.value = prodList.value.concat(res.data.data);
xma.hideLoading();
}
});
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -146,6 +224,8 @@ uni-page-body { ...@@ -146,6 +224,8 @@ uni-page-body {
.content { .content {
display: flex; display: flex;
flex: 1; flex: 1;
max-height: 528 * 2rpx;
overflow-y: scroll;
.nav { .nav {
width: 180rpx; width: 180rpx;
border-right: 2rpx solid #f6f6f6; border-right: 2rpx solid #f6f6f6;
...@@ -205,10 +285,103 @@ uni-page-body { ...@@ -205,10 +285,103 @@ uni-page-body {
.commodity-list { .commodity-list {
padding: 0 20rpx; padding: 0 20rpx;
overflow-y: scroll; overflow-y: scroll;
height: 200rpx;
flex-grow: 1; flex-grow: 1;
.item { .scroll-Y {
margin-bottom: 20rpx; height: 100%;
.item {
display: flex;
position: relative;
margin-top: 50rpx;
.image-wrap {
width: 160rpx;
height: 160rpx;
margin-right: 20rpx;
position: relative;
&.border {
border: 2rpx solid #fcdbdb;
box-sizing: border-box;
border-radius: 12rpx;
}
.count-down-wrop {
display: flex;
justify-content: center;
align-items: center;
position: absolute;
top: 0;
left: 0;
font-size: 16rpx;
color: #fa5151;
z-index: 1;
height: 24rpx;
width: 100%;
text-wrap: nowrap;
.date {
font-size: 16rpx;
text-wrap: nowrap;
color: #fa5151;
}
}
.type {
position: absolute;
bottom: 4rpx;
right: 10rpx;
font-size: 18rpx;
color: #fff;
z-index: 1;
}
img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
.commodity-info {
display: flex;
flex-direction: column;
color: #3d3d3d;
padding-bottom: 20rpx;
box-sizing: border-box;
.name {
font-size: 24rpx;
}
.wrap {
flex: 1;
}
.describe {
color: #abaaaa;
font-size: 22rpx;
}
.date {
color: #fa5151;
font-size: 22rpx;
}
.price {
color: #fa5151;
font-size: 36rpx;
span {
font-size: 22rpx;
}
.unit {
color: #3d3d3d;
}
}
}
.add-shopping-cart {
display: flex;
justify-content: center;
align-items: center;
position: absolute;
bottom: 16rpx;
right: 0;
img {
width: 52rpx;
height: 52rpx;
}
}
}
} }
} }
} }
...@@ -231,7 +404,7 @@ uni-page-body { ...@@ -231,7 +404,7 @@ uni-page-body {
height: 20rpx; height: 20rpx;
margin-right: 70rpx; margin-right: 70rpx;
} }
div { view {
margin-right: 10rpx; margin-right: 10rpx;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
...@@ -248,7 +421,10 @@ uni-page-body { ...@@ -248,7 +421,10 @@ uni-page-body {
} }
.cart-floating { .cart-floating {
position: fixed; position: fixed;
display: flex;
text-align: center; text-align: center;
justify-content: center;
align-items: center;
bottom: 10%; bottom: 10%;
width: 80rpx; width: 80rpx;
height: 80rpx; height: 80rpx;
...@@ -258,10 +434,7 @@ uni-page-body { ...@@ -258,10 +434,7 @@ uni-page-body {
margin-left: 10px; margin-left: 10px;
} }
.cart { .cart {
position: relative; width: 40rpx;
top: 20rpx; height: 40rpx;
left: 16rpx;
width: 48rpx;
height: 46rpx;
} }
</style> </style>
<template>
<div>
<wd-rate
custom-class="icon-statr"
color="#fff"
readonly
v-model="grade"
size="22rpx"
space="8rpx"
:active-color="['#FA5151']"
/>
</div>
</template>
<script setup>
const grade = ref(5);
</script>
<style lang="scss" scoped>
.icon-statr {
:deep(.wd-icon-star-on) {
display: block !important;
}
}
</style>
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
class="pubList" class="pubList"
v-for="item in list" v-for="item in list"
:key="item.shopId" :key="item.shopId"
@click="item.shopStatus != [1, 2, 3] ? shopGto(item.shopId) : ''" @click="item.shopStatus != [1, 2, 3] ? shopGto(item) : ''"
> >
<!-- 列表头部 --> <!-- 列表头部 -->
<view class="titlecon"> <view class="titlecon">
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
</view> </view>
</view> </view>
<view class="shbox" v-if="list.length > 0">审核被拒可点击修改重新提交</view> <view class="shbox" v-if="list.length > 0">审核被拒可点击修改重新提交</view>
<wd-status-tip image="content" tip="暂无内容" v-else />
</view> </view>
<view class="butCon"><button class="butXz" @click="shopGto()">申请入驻</button></view> <view class="butCon"><button class="butXz" @click="shopGto()">申请入驻</button></view>
</view> </view>
...@@ -70,8 +71,12 @@ const getList = async () => { ...@@ -70,8 +71,12 @@ const getList = async () => {
} }
}; };
const shopGto = (item) => { const shopGto = (item) => {
xma.redirectTo({ xma.navigateTo({
url: `/pages/storeEntry/detail${item ? `?id=${item}` : ''}`, url: `/pages/storeEntry/detail${item ? `?content=0` : ''}`,
success: function (res) {
// 通过eventChannel向被打开页面传送数据
res.eventChannel.emit('acceptDataFromOpenerPage', { data: item });
},
}); });
}; };
getList(); getList();
......
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