lanan-old/lanan-master-uniapp/subCarPages/index/index.vue

605 lines
17 KiB
Vue
Raw Normal View History

2024-07-17 14:16:22 +08:00
<template>
<view class="page flex-col">
<view class="section_1 flex-col">
<view class="section_3 flex-col">
<view class="w700 flex-row align-center justify-between padding-left padding-right radius"
style="margin:20rpx auto 0;height: 180rpx;background-image: linear-gradient(-81deg,rgba(255, 255, 255, 1) 0,rgba(255, 255, 255, 1) 0,rgba(225, 235, 255, 1) 100%,rgba(225, 235, 255, 1) 100%);"
@click="this.$tab.navigateTo('/subNoticePages/list/list?noticeType=1')">
<u--image :src="imagesUrl+'notice.png'" width="127rpx" height="123rpx"></u--image>
<view class="margin-top" style="width: 480rpx;">
<u-notice-bar :text="notice" direction="column" speed="250" color="#000" bgColor="none"
icon="false" fontSize="32rpx" :customStyle="{}"></u-notice-bar>
<text class="text-lg text-bold">{{notice.noticeTitle}}</text>
</view>
</view>
<view class="group_3 flex-col" @click="getdetlis()">
<u--image :src="imagesUrl+'guide.png'" width="730rpx" height="207rpx" @click="click"></u--image>
</view>
<view class="group_5 flex justify-between flex-wrap">
<view style="margin-left: 22rpx;" @click="this.$tab.navigateTo('/subCarPages/buy/buy')">
<u--image :src="imagesUrl+'buy.png'" width="325rpx" height="170rpx"></u--image>
</view>
<view style="float: right;" @click="this.$tab.navigateTo('/subCarPages/sell/sell')">
<u--image :src="imagesUrl+'sell.png'" width="325rpx" height="170rpx"></u--image>
</view>
<view style="margin-left: 22rpx;" @click="this.$tab.navigateTo('/subCarPages/userPost/userPost')">
<u--image :src="imagesUrl+'car1.png'" width="325rpx" height="170rpx"></u--image>
</view>
<view style="float: right;"
@click="this.$tab.navigateTo('/subInspectionPages/details/details?id=888')">
<u--image :src="imagesUrl+'guohu.png'" width="325rpx" height="170rpx"></u--image>
</view>
</view>
</view>
<view class="section_4 flex-col">
<view class=" w700 flex-row justify-between align-end" style="margin: 0 auto;height: 70rpx;">
<view class="box_2 flex-row align-end justify-between">
<image class="image_8" :src="imagesUrl+'reg.png'" v-show="tab1Show" />
<text class="tab_text" v-show="tab2Show" @click="changeTab(2)">注册经销商</text>
<image class="image_9" :src="imagesUrl+'user_post.png'" v-show="tab2Show" />
<text class="tab_text" v-show="tab1Show" @click="changeTab(1)">会员发布</text>
</view>
<view class="margin-left" @click="this.$tab.navigateTo('/subCarPages/buyList/buyList')">
<text>二手车求购信息</text>
</view>
</view>
<view class="box_3 flex-col" :style="{marginLeft:tab1Show ? '35rpx' :'200rpx' }"></view>
<view class="box_4 flex-row">
<u-search placeholder="品牌/车系/型号" v-model="keyword" :clearabled="true" @search="filterList"
@clear="filterList" :show-action="false"></u-search>
</view>
<view class="box_5 flex-row justify-between">
<view class="image-text_4 flex-col">
<view class="flex-row justify-between" @click="showPriceDownList">
<text class="text-group_4">排序</text>
<image class="thumbnail_3" :src="imagesUrl+'downarr.png'" />
</view>
<view class="downList flex-row flex-wrap" v-show="priceDownListShow">
<view class="btn" :style="{ 'background': orderBy == 'priceAsc' ? '#feebb2' :''}"
@click="orderBySelect('priceAsc')">
<text>价格最低</text>
</view>
<view class="btn" :style="{ 'background': orderBy == 'priceDesc' ? '#feebb2' :''}"
@click="orderBySelect('priceDesc')">
<text>价格最高</text>
</view>
<view class="btn" :style="{ 'background': orderBy == 'kilometersAsc' ? '#feebb2' :''}"
@click="orderBySelect('kilometersAsc')">
<text>里程最少</text>
</view>
<view class="btn" :style="{ 'background': orderBy == 'kilometersDesc' ? '#feebb2' :''}"
@click="orderBySelect('kilometersDesc')">
<text>里程最多</text>
</view>
<view class="btn" :style="{ 'background': orderBy == 'carRecordDateDesc' ? '#feebb2' :''}"
@click="orderBySelect('carRecordDateDesc')">
<text>车龄最短</text>
</view>
<view class="btn" :style="{ 'background': orderBy == 'carRecordDateAsc' ? '#feebb2' :''}"
@click="orderBySelect('carRecordDateAsc')">
<text>车龄最长</text>
</view>
<view class="btn" style="align-self: flex-end;" @click="orderBySelect('')">
<text>重置排序</text>
</view>
</view>
</view>
<view class="image-text_7 flex-col">
<view class="flex-row justify-between" @click="showSelectDownList">
<image class="label_2" :src="imagesUrl+'select.png'" />
<text class="text-group_7">筛选</text>
</view>
<view v-show="selectDownListShow" class="flex-col "
style="position:relative;top:20rpx; height: auto; left:-650rpx; width: 750rpx; padding: 10rpx; background-color: #fff; z-index: 9999; border-radius: 5rpx; text-align: left;">
<view style="padding: 20rpx 0;">
<view style="margin: 20rpx;">
<text class="text-bold">价格区间</text>
</view>
<view style="margin: 20rpx;">
<u-radio-group class="flex-row justify-between" style="width: 750rpx;"
@change="setPriceRangeParams" placement="row">
<u-radio size="30rpx" labelSize="30rpx" v-for="(item, index) in priceRange"
shape="square" :key="index" :label="item.name" :name="item.value"
:customStyle="{marginRight: '35rpx'}">
</u-radio>
</u-radio-group>
</view>
</view>
<u-line></u-line>
<view style="padding: 20rpx 0;">
<view style="margin: 20rpx;">
<text class="text-bold">公里数区间</text>
</view>
<view style="margin: 20rpx;">
<u-radio-group class="flex-row justify-between" style="width: 750rpx;"
@change="setKilometersParams" placement="row">
<u-radio :labelDisabled="true" size="30rpx" labelSize="30rpx"
v-for="(item, index) in kilometersRange" shape="square" :key="index"
:label="item.name" :name="item.value" :customStyle="{marginRight: '35rpx'}">
</u-radio>
</u-radio-group>
</view>
</view>
<u-line></u-line>
<view style="padding: 20rpx 0;">
<view style="margin: 20rpx; " class="flex-row justify-between">
<u-button :plain="true" shape="circle" text="重置"
@click="resetFilterList"></u-button>
<u-button type="primary" shape="circle" text="确定" color="#ff5500"
@click="filterList()"></u-button>
</view>
</view>
</view>
</view>
</view>
<view class="carList" style="min-height: 250rpx;">
<view class="w700" style="margin: 0 auto;">
<u-loading-icon size="80" :show="loadingShow"></u-loading-icon>
</view>
<view class="goods" v-for="item,index in carList" :key="index" @click="goCarInfo(item.carId)">
<u--image class="goodImg" radius="10rpx" width="330rpx" height="180rpx" :showLoading="true"
:src=" baseUrl + firstSubstring(item.carPics)"></u--image>
<view class="hot">
<u--image :src=" imagesUrl + 'hot.png'" width="53rpx" height="30rpx"></u--image>
</view>
<view class="carTitle u-line-2">
<text>
{{ item.carBrand + item.carModel }}
</text>
</view>
<view class="carAge">
<text>
{{ getDurationFromDate(item.carRecordDate) }}
</text>
</view>
<view class="flex-row justify-between align-center">
<view class="text-wrapper_4" v-if="item.carPrice == '面议'">
<text class="text_10">价格面议</text>
</view>
<view v-else>
<text class="text_11">{{ formatAmountToWan(item.carPrice) }}</text>
<text class="text_12"></text>
</view>
<view>
<text class="text_11">{{ item.carKilometers }}</text>
<text class="text_12">Km</text>
</view>
</view>
</view>
</view>
<!-- <u-loadmore :status="status" /> -->
<view class="jsx">
<view class="xian"></view>
<view class="dian">·</view>
<view class="xian"></view>
</view>
<view class="q-box" @click="gettel()">
<view class="baizi">{{rtel}}</view>
<image :src="imagesUrl + 'carTel.png'" mode=""></image>
</view>
<view class="box_28 flex-row justify-between">
<text class="text_70">免责声明</text>
<image class="image_27" :src="imagesUrl+'mian.png'" />
</view>
<text class="paragraph_12">
本平台仅提供交易信息不对车辆进行任何评估或检测请自行对车辆进行判断
</text>
</view>
</view>
<!-- <view class="bai-yuan">
<view style="width: 100%; text-align: center; line-height: 36px;">
<uni-icons type="phone-filled" size="34" color="#4282D8"></uni-icons>
</view>
</view> -->
</view>
</template>
<script>
import Decimal from "decimal.js"; // 具体文件中引入
export default {
data() {
return {
imagesUrl: getApp().globalData.config.imagesUrl,
baseUrl: getApp().globalData.config.baseUrl,
notice: null,
constants: {},
status: 'loadmore',
keyword: '',
carType: '',
indexList: [],
priceRange: [{
name: '5万以下',
value: [0, 50000]
},
{
name: '5-10万',
value: [50001, 100000]
},
{
name: '10-15万',
value: [100001, 150000]
}, {
name: '15万以上',
value: [150001, 9999999]
}
],
priceRangeParams: [],
kilometersRange: [{
name: '3万以下',
value: [0, 30000]
},
{
name: '3-5万',
value: [30001, 50000]
},
{
name: '5-10万',
value: [50001, 100000]
}, {
name: '10万以上',
value: [100001, 9999999]
}
],
kilometersParams: [],
tab1Show: true,
tab2Show: false,
tab3Show: false,
priceDownListShow: false,
selectDownListShow: false,
carList: [],
orderBy: '',
loadingShow: true,
isLoadMore: false, //是否加载中
params: {
pageSize: 10,
pageNum: 1,
},
rtel: '18715738821',
};
},
onLoad() {
this.getNotice();
this.getCarList()
this.getConfig()
},
onReachBottom() {
if (!this.isLoadMore) { //此处判断,上锁,防止重复请求
this.status = 'loading';
this.isLoadMore = true
this.params.pageNum++
this.getCarList()
}
},
methods: {
async getConfig() {
const res = await this.$request({
url: '/system/shopconfig/listWx'
})
// console.log('电话号码', res.rows[0]);
let num = res.rows[0].carTel
this.rtel = this.addHyphenEveryThreeChars(num)
},
addHyphenEveryThreeChars(str) {
let modifiedPhoneNumber = str.replace(/(\d{3})(\d{4})(\d{4})/, "$1-$2-$3");
return modifiedPhoneNumber;
},
gettel() {
uni.makePhoneCall({
phoneNumber: this.rtel //仅为示例
});
},
getdetlis() {
uni.navigateTo({
url: '/subCarPages/details/details'
})
},
// 获取公告
async getNotice() {
const res = await this.$request({
url: '/system/notice/listWx',
data: {
noticeType: 1,
pageSize: 5
}
})
let notice = []
for (let i = 0; i < res.rows.length; i++) {
notice.push(
res.rows[i].noticeTitle
)
}
this.notice = notice;
},
// 获取注册经销商二手车列表
async getCarList() {
let carType = this.tab1Show ? '经销商' : '会员'
const res = await this.$request({
url: '/system/car/listWx',
data: {
carBrand: this.keyword,
orderBy: this.orderBy,
carType,
pageSize: this.params.pageSize,
pageNum: this.params.pageNum,
beginCarKilometers: this.kilometersParams.length > 0 ? this.kilometersParams[0] : '',
endCarKilometers: this.kilometersParams.length > 0 ? this.kilometersParams[1] : '',
beginCarPrice: this.priceRangeParams.length > 0 ? this.priceRangeParams[0] : '',
endCarPrice: this.priceRangeParams.length > 0 ? this.priceRangeParams[1] : '',
}
})
this.carList = this.carList.concat(res.rows);
if (res.rows.length < this.params.pageSize) { //判断接口返回数据量小于请求数据量,则表示此为最后一页
this.status = 'nomore';
this.isLoadMore = true
} else {
this.isLoadMore = false
}
this.loadingShow = false
// console.log(res);
},
// 筛选过滤
filterList() {
this.params.pageNum = 1
this.carList = []
this.getCarList()
this.selectDownListShow = false
},
resetFilterList() {
this.orderBy = ''
this.params.pageNum = 1
this.carList = []
this.kilometersParams = []
this.priceRangeParams = []
this.getCarList()
this.selectDownListShow = false
},
// 按逗号分隔字符串,获取第一个元素,用于图片展示
firstSubstring(string) {
if (string.includes(',')) {
return string.split(',')[0];
} else {
return string;
}
},
// 参数日期,获取据今天时间差
getDurationFromDate(dateString) {
// 将传入的日期字符串转换为 Date 对象
var inputDate = new Date(dateString);
// 获取当前日期
var currentDate = new Date();
// 计算年份差值
var yearDiff = currentDate.getFullYear() - inputDate.getFullYear();
// 计算月份差值
var monthDiff = (currentDate.getMonth() + 1) - (inputDate.getMonth() + 1);
// 如果月份差值为负数,年份差值减 1月份差值加 12
if (monthDiff < 0) {
yearDiff--;
monthDiff += 12;
}
// 判断年份等于 0 且月份不等于 0 的情况,只返回月份
if (yearDiff === 0 && monthDiff !== 0) {
return monthDiff + '个月';
}
// 判断年份等于 0 且月份等于 0 的情况,返回"准新车"
if (yearDiff === 0 && monthDiff === 0) {
return "准新车";
}
// 返回年份和月份
return yearDiff + '年' + monthDiff + '个月';
},
// 格式化金额,转为万元单位
formatAmountToWan(num) {
num = Number(num);
if (num == 0) {
return num + "";
} else {
return new Decimal(num).div(new Decimal(10000)).toString();
}
},
// 切换tab页
changeTab(tabIndex) {
if (tabIndex == 1) {
this.tab1Show = false
this.tab2Show = true
}
if (tabIndex == 2) {
this.tab1Show = true
this.tab2Show = false
}
this.carList = []
this.params.pageNum = 1
this.params.pageSize = 10
this.getCarList()
},
// 价格下拉菜单
showPriceDownList() {
this.priceDownListShow = !this.priceDownListShow
},
// 筛选下拉菜单
showSelectDownList() {
this.selectDownListShow = !this.selectDownListShow
},
orderBySelect(orderBy) {
this.orderBy = orderBy
this.carList = []
this.params.pageNum = 1
this.getCarList()
this.priceDownListShow = false
this.kilometersDownListShow = false
this.selectDownListShow = false
},
setPriceRangeParams(e) {
this.priceRangeParams = e
},
setKilometersParams(e) {
this.kilometersParams = e
},
goCarInfo(id) {
this.$tab.navigateTo(`/subCarPages/carInfo/carInfo?id=${id}`)
}
},
};
</script>
<style lang="scss" scoped>
@import './index.rpx.css';
.jsx {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.xian {
border: 1px solid black;
width: 30%;
height: 0px;
}
.dian {
font-size: 55px;
font-weight: bold;
margin: 0 10px;
}
.q-box {
width: 95%;
height: 103px;
border-radius: 8px;
margin: 0 auto;
overflow: hidden;
position: relative;
image {
width: 100%;
height: 100%;
}
margin-top: 10px;
}
.baizi {
position: absolute;
width: 100%;
text-align: center;
transform: translate(-50%);
left: 50%;
top: 35px;
// left: 25%;
font-size: 26px;
text-shadow: 0px 0px 7px #42464C;
font-family: HuXiaoBo-NanShen;
font-weight: 600;
z-index: 99;
color: white;
font-style: italic
}
.bai-yuan {
box-shadow: 0px 0px 13px 5px rgba(216, 216, 216, 0.61);
width: 40px;
height: 40px;
border-radius: 50%;
background-color: white;
position: fixed;
bottom: 60px;
right: 20px;
z-index: 99;
overflow: hidden;
padding: 0px;
}
.text-top {
color: rgba(67, 67, 67, 1);
font-size: 32rpx;
font-weight: 700;
line-height: 32rpx;
}
.carList {
margin-top: 20rpx;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
width: 700rpx;
margin: 0 auto;
.goods {
width: 330rpx;
margin: 20rpx 0;
.hot {
position: relative;
top: -170rpx;
left: 10rpx
}
.carTitle {}
.carAge {
font-size: 12px;
color: #b5b5b5;
margin: 10rpx 0;
}
.goodImg {
border-radius: 25rpx;
margin: 10rpx 0;
}
}
}
.downList {
width: 750rpx;
position: relative;
top: 20rpx;
padding: 20rpx;
background-color: #fff;
z-index: 9999;
border-radius: 5rpx;
.btn {
width: 160rpx;
height: 50rpx;
padding: 10rpx;
font-size: 24rpx;
text-align: center;
margin-bottom: 10rpx;
margin-right: 10rpx;
background-color: #e5e5e5;
}
}
.postBtn {
padding: 10rpx 20rpx;
background: linear-gradient(to left, #4c78b5, #8cbdff);
border-radius: 15rpx;
color: #FFF;
}
</style>