2025-12-04 09:58:14 +08:00

250 lines
6.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="container">
<div class="banner">
<swiper @animationfinish="swipers" autoplay circular>
<swiper-item
v-for="(item, index) in bannerList"
:key="index"
@click="lookImage(item, index)"
>
<image :src="item.pic_src" mode="aspectFill" />
</swiper-item>
</swiper>
<view class="cirList">
<view
:class="['cir', currentIdx == index ? 'active' : '']"
v-for="(item, index) in bannerList"
:key="index"
>
</view>
</view>
</div>
<div class="line"></div>
<div class="serverTitBox">
<div class="serverTit">
<div class="serverTit_left">
<div class="tit">空调清洗</div>
<div class="msg">平台保障</div>
</div>
<div class="serverTit_right">已预约100+</div>
</div>
<div class="serverCon">
专业保洁团队全屋深度清洁去除顽固污渍还您清新居所还您清新居所
</div>
</div>
<div class="line"></div>
<div class="serverList">
<div class="serverListTit">找到8个匹配服务商</div>
<view class="tabs">
<view
v-for="(item, index) in categoryList"
:key="index"
:class="['tabItem', selectedTab === index ? 'active2' : '']"
@click="selectTab(index, item)"
>
{{ item.category_name }}
</view>
</view>
<div class="FilterMore" v-if="showPrice">
<div class="filter-section">
<div class="price-range">
<input
type="number"
v-model="minPrice"
placeholder="最低价"
class="price-input"
@input="validatePriceRange"
/>
<span class="price-separator"></span>
<input
type="number"
v-model="maxPrice"
placeholder="最高价"
class="price-input"
@input="validatePriceRange"
/>
</div>
</div>
<div class="filter-buttons">
<button class="reset-button" @click="resetFilters">重置</button>
<button class="confirm-button" @click="applyFilters">确定</button>
</div>
</div>
<div class="serverItem" @click="selectVendor">
<div class="serverItem_left">
<image src="https://static.hshuishang.com/test.png"></image>
</div>
<div class="serverItem_right">
<div class="serverItem_right_msg">
<div class="msg_tit">
<view>安心家政</view>
<div class="serverItem_right_btn" @click="selectMaster">
选择服务
</div>
</div>
<div class="msg_meta">
<span class="rating">
<image
class="infoImage"
src="https://static.hshuishang.com/serverInfo_xing.png"
/>
4.8
</span>
<span class="distance">
<image
class="infoImage"
src="https://static.hshuishang.com/serverInfo_weizhi.png"
/>3.3km</span
>
<span class="served">
<image
class="infoImage"
src="https://static.hshuishang.com/serverInfo_fuwu.png"
/>服务12226人</span
>
</div>
<div class="msg_price">价格范围 <span>80-150</span></div>
</div>
</div>
</div>
</div>
</view>
</template>
<script>
import {
request,
picUrl,
NavgateTo,
menuButtonInfo,
} from "../../../utils/index";
import { apiArr } from "../../../api/reservation";
import SliderRange from "@/components/primewind-sliderrange/components/primewind-sliderrange/index.vue";
export default {
components: {
// 注册组件
SliderRange,
},
data() {
return {
bannerList: [
{
pic_src: "https://static.hshuishang.com/test.png",
},
{
pic_src:
"https://static.hshuishang.com/property-img-file/homeServer_banner.png",
},
{
pic_src: "https://static.hshuishang.com/test.png",
},
],
currentIdx: 0,
top: "",
localHeight: "",
rangeMin: 5,
rangeMax: 200,
rangeValue: [10, 50],
selectedTab: 0,
categoryList: [
{ category_name: "推荐" },
{ category_name: "评分优先" },
{ category_name: "距离最近" },
{ category_name: "价格最低" },
{ category_name: "服务最多" },
{ category_name: "价格范围" },
],
showPrice: false,
minPrice: "",
maxPrice: "",
};
},
methods: {
swipers(e) {
this.currentIdx = e.detail.current;
},
format(val) {
return val + "%";
},
handleRangeChange(e) {
this.rangeValue = e;
},
selectVendor() {
// NavgateTo("../vendor/index");
NavgateTo("../searchInfo/index");
},
selectMaster() {
NavgateTo("../searchInfo/index");
},
lookImage(item, index) {
// 提取所有图片URL
const urls = this.bannerList.map((item) => item.pic_src);
// 调用UniApp预览图片API
uni.previewImage({
current: index,
urls: urls,
loop: true,
});
},
selectTab(index, item) {
this.selectedTab = index;
if (item.category_name === "价格范围") {
this.showPrice = !this.showPrice;
} else {
this.showPrice = false;
}
},
validatePriceRange() {
// 确保最小值在0-99999之间
if (this.minPrice < 0) this.minPrice = 0;
if (this.minPrice > 99999) this.minPrice = 99999;
// 确保最大值在0-99999之间且不小于最小值
if (
this.maxPrice &&
(this.maxPrice < this.minPrice || this.maxPrice > 99999)
) {
this.maxPrice = Math.min(Math.max(this.maxPrice, this.minPrice), 99999);
}
},
resetFilters() {
this.minPrice = "";
this.maxPrice = "";
},
applyFilters() {
const filterData = {
priceRange: {
min: this.minPrice || 0,
max: this.maxPrice || 99999,
},
};
console.log("筛选条件:", filterData);
this.showPrice = false;
},
},
onReady() {},
onLoad(options) {
const meun = menuButtonInfo();
this.top = meun.top;
this.localHeight = meun.height;
},
onShow() {},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {},
};
</script>
<style>
@import url("./index.css");
</style>