Files
gterFang/src/components/seachModule/seachModule1.vue
2024-03-26 16:13:23 +08:00

1780 lines
69 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>
<div class="dis-f jus-x al-item" style="position: relative; z-index: 333;">
<div class="body-maxWidth">
<div class="s-w-100 seach-box-bg">
<div class="seach-box">
<div class="top-seach dis-f al-item">
<div style="position: absolute; left: -8px; top: 20px;">
<div class="location-box dis-f jus-x al-item">
<img src="../../assets/homeImage/addressImg.png" class="img" alt="" />
香港
</div>
<div class="triangle"></div>
</div>
<div class="dis-f al-item pos-r seek-input">
<el-input v-model="seachAllType.keyword" placeholder="搜索房源或输入房源ID" @keyup.enter="seachList" @blur="setHistoryShow" @focus="setHistoryShow" style="height: 40px; width: 460px; background: rgba(246, 246, 246, 1); border-radius: 8px;"></el-input>
<div class="seach-btn dis-f al-item jus-x" @click="seachList">
<img src="../../assets/homeImage/seachImg.svg" class="img" alt="" />
<!-- 搜索 -->
</div>
<div class="seach-hiosory-box" :class="{ 'seach-history-h': historyShow }">
<el-scrollbar height="375px">
<div class="seach-history-info">
<div>
<div class="title">
历史搜索
</div>
<div class="info-box">
<div v-for="(item, i) in historyArr.data" :key="i" class="btn" @click="setSeachVal(item)">{{ item }} <img src="../../assets/homeImage/closeIcon.svg" @click.stop="deleteSeachVal(i)" class="img" alt="" /></div>
</div>
</div>
<div style="margin-top: 30px;">
<div class="title">
热门推荐
</div>
<div class="info-box">
<div v-for="(item, i) in hotArr.data" :key="i" class="btn" @click="setHotSeach(item)">
{{ item }}
</div>
</div>
</div>
</div>
</el-scrollbar>
</div>
</div>
<!-- <div class="tool-btn dis-f jus-x al-item map-btn">
<img src="../assets/homeImage/mapImg.png" class="img" alt="">
地图找房
</div> -->
<div class="tool-btn dis-f jus-x al-item add-btn" :class="{ 'mg-l-10': routePath === '/' }" style="position: relative;">
<img style="margin-right: 5px;" src="../../assets/homeImage/addBtn.png" class="img" alt="" />
发布房源
<choosing-identity></choosing-identity>
</div>
<el-popover placement="bottom-end" popper-class="consult-popover flexcenter" :width="300" trigger="hover" :show-arrow="false" popper-style="background-color:transparent;border: none;box-shadow: none;padding:0;">
<template #reference>
<div class="tool-btn consult-btn flexcenter" v-if="routePath == '/needHousing'">
<img class="consult-icon" src="@/assets/img/publicImage/consult-icon.png" />
咨询方同学
</div>
</template>
<div class="consult-pop flexacenter">
<div class="consult-title flexacenter">
欢迎联系 <b>{{ wechat["nickname"] }}</b> 咨询公寓
</div>
<div class="consult-QRcode flexcenter">
<img class="consult-QRcode-img" :src="wechat['personalqrcode']" />
</div>
<div class="consult-hint">微信扫码添加好友</div>
<!-- <div class="consult-remark flexacenter">备注<b>寄托租房</b></div> -->
</div>
</el-popover>
<div class="dis-f jus-x al-item authentication-btn" v-if="routePath === '/personHousing'">
<img src="../../assets/homeImage/authenticationBtnImg.png" class="text-img" alt="" />
<img src="../../assets/homeImage/authenticationBtnCode.svg" class="code-img" alt="" />
<div class="btn-qrcode">
<authentication-info :type="1"></authentication-info>
</div>
</div>
<div class="dis-f jus-x al-item authentication-btn intermediary-btn" v-if="routePath === '/intermediaryHousing'">
<img src="../../assets/homeImage/intermediaryText.png" class="text-img" alt="" />
<img src="../../assets/homeImage/intermediaryCode.svg" class="code-img" alt="" />
<div class="btn-qrcode">
<authentication-info :type="2"></authentication-info>
</div>
</div>
</div>
<div class="seach-info-box dis-f" v-if="routePath === '/'">
<seachInfo title="学校附近" :btn="seachSchoolBtn.data" seachType="1" v-if="seachSchoolBtn.data.length" :checkBtn="checkBtn"> </seachInfo>
<seachInfo title="合租" seachType="2" :btn="hireType.data" v-if="hireType.data.length" :checkBtn="checkBtn"></seachInfo>
<seachInfo title="区域找房" seachType="3" style="margin-top: 30px;" :btn="seachArea.data" :checkBtn="checkBtn" v-if="seachArea.data.length"></seachInfo>
<seachInfo title="整租" seachType="2" style="margin-top: 30px;" :btn="allHireType.data" :checkBtn="checkBtn" v-if="allHireType.data.length"></seachInfo>
</div>
<!-- -->
<!-- {{ pitchValue }} -->
<div class="option-area flexflex" v-if="routePath === '/personHousing' || routePath === '/intermediaryHousing' || routePath === '/needHousing'">
<!-- <selectTabBox :setSeachCondition="setSeachConditions" :setLocation="setLocation"></selectTabBox> -->
<div class="option-left">
<!-- 地理位置时除 求房源 显示的 -->
<div class="option-item flexflex" v-if="routePath !== '/needHousing'">
<div class="option-title">地理位置</div>
<div class="option-box flexflex flex1" style="flex-direction: column;">
<div class="geography-tab flexacenter">
<div class="geography-item flexcenter" :class="{ 'pitch': geographicState == 'area' }" @click="setSelectPosition('area')">按区域</div>
<div class="geography-item flexcenter" :class="{ 'pitch': geographicState == 'school' }" @click="setSelectPosition('school')">按学校</div>
</div>
<!-- 区域的内容 -->
<div class="geography-box" v-if="geographicState == 'area'">
<img class="geography-bj" src="@/assets/homeImage/checkBG.svg" />
<div class="geography-list flexacenter">
<div class="geography-item flexacenter" :class="{ pitch: 0 == selectDistrictPitchShow }" @click="selectOption('location', [])">不限</div>
<div class="geography-item flexacenter" :class="{ pitch: selectDistrictPitchShow == index }" v-for="(item, index) in locationObj" :key="index" @click="selectOption('location', index)">
{{ item.name }}
<template v-if="districtUnlimited(index)">>&nbsp;不限</template>
<template v-if="districtQuantity(index)">
>&nbsp;
<div class="select-num">{{ pitchValue["location"].length }}</div>
</template>
<img class="item-icon" src="@/assets/homeImage/selectInfoTabIcon.svg" />
<img class="item-icon item-icon-pitch" src="@/assets/homeImage/selectImg.svg" />
</div>
</div>
</div>
<div class="district-pop" v-if="locationTemp.state" style="top: 120px;">
<div class="district-unlimited flexacenter" :class="{ 'pitch': locationTemp.value.length == 0 }" @click="selectDistrict(0)">
<img class="unlimited-yes" src="@/assets/homeImage/topTitleIcon.svg" />
<div class="unlimited-no"></div>
不限
</div>
<div class="district-option">
<el-checkbox-group v-model="locationTemp.value">
<el-checkbox :label="i" v-for="(item, i) in locationObj[locationTemp.key]?.children" :key="i">{{ item }}</el-checkbox>
</el-checkbox-group>
</div>
<div class="district-btn-box flexacenter">
<div class="district-btn flexcenter district-cancel" @click="selectDistrict(1)">取消</div>
<div class="district-btn flexcenter district-ok" @click="selectDistrict()">选好了</div>
</div>
</div>
<!-- 学校内容 -->
<div class="school-info-box" v-show="geographicState === 'school'">
<div class="lef-btn item-btn flexcenter" @click="prevSchoolData">
<img v-if="schoolPages === 0" class="img" src="@/assets/homeImage/selectInfoTabIcon.svg" />
<img v-else class="img" src="@/assets/homeImage/selectImg.svg" />
</div>
<div class="right-btn item-btn flexcenter" @click="nextSchoolData">
<img v-if="schoolPages === shcoolData.length - 1" class="img" src="@/assets/homeImage/selectInfoTabIcon.svg" />
<img v-else class="img" src="@/assets/homeImage/selectImg.svg" />
</div>
<el-carousel :autoplay="false" arrow="never" :loop="false" height="50px" indicator-position="none" class="s-w-100" ref="schoolData" :initial-index="schoolPages" :key="pitchValue.school">
<el-carousel-item v-for="(item, i) in shcoolData" :key="i">
<div class="school-carousel-box">
<div v-for="items in item" :key="items.id" @click="selectOption('school', items.id)" class="carousel-info-box" :class="{ 'pitch': pitchValue.school == items.id }">{{ items.name }}</div>
</div>
</el-carousel-item>
</el-carousel>
</div>
</div>
</div>
<div class="option-item flexacenter" style="height: 96px;" v-else>
<div class="option-title">目标区域</div>
<div class="option-box flexflex flex1">
<div class="item flexcenter" :class="{ pitch: 0 == selectDistrictPitchShow }" @click="selectOption('location', [])">不限</div>
<div v-for="(item, index) in locationObj" :key="index" class="item flexcenter location-item" :class="{ pitch: selectDistrictPitchShow == index }" @click="selectOption('location', index)">
{{ item.name }}
<template v-if="districtUnlimited(index)">>&nbsp;不限</template>
<template v-if="districtQuantity(index)">
>&nbsp;
<div class="select-num">{{ pitchValue["location"].length }}</div>
</template>
<img class="item-icon" src="@/assets/homeImage/selectInfoTabIcon.svg" />
<img class="item-icon item-icon-pitch" src="@/assets/homeImage/dropDownIcon.svg" />
</div>
<div class="district-pop" v-if="locationTemp.state">
<div class="district-unlimited flexacenter" :class="{ 'pitch': locationTemp.value.length == 0 }" @click="selectDistrict(0)">
<img class="unlimited-yes" src="@/assets/homeImage/topTitleIcon.svg" />
<div class="unlimited-no"></div>
不限
</div>
<div class="district-option">
<el-checkbox-group v-model="locationTemp.value">
<el-checkbox :label="i" v-for="(item, i) in locationObj[locationTemp.key]?.children" :key="i">{{ item }}</el-checkbox>
</el-checkbox-group>
</div>
<div class="district-btn-box flexacenter">
<div class="district-btn flexcenter district-cancel" @click="selectDistrict(1)">取消</div>
<div class="district-btn flexcenter district-ok" @click="selectDistrict()">选好了</div>
</div>
</div>
</div>
</div>
<div class="option-item flexflex">
<div class="option-title flexacenter">{{ routePath !== "/needHousing" ? "出租" : "求租" }}方式</div>
<div class="option-box flexacenter flex1">
<div class="item flexcenter" :class="{ pitch: 0 == pitchValue.types }" @click="selectType('')">不限</div>
<template v-for="(item, index) in typeObj" :key="index">
<el-dropdown popper-class="popover-sort" trigger="click">
<div class="item flexcenter" :class="{ pitch: Math.floor(pitchValue.types) == index }" @click="selectType(index, true)">
{{ item.name }}
<div class="select-type-text" v-if="pitchValue.types">&nbsp; > &nbsp;{{ pitchValue.types == index ? "不限" : typeKey[pitchValue.types] }}</div>
<img class="item-icon" src="@/assets/homeImage/selectInfoTabIcon.svg" />
<img class="item-icon item-icon-pitch" style="margin-left: 30px;" src="@/assets/homeImage/dropDownIcon.svg" />
</div>
<template #dropdown>
<el-dropdown-menu class="sort-box">
<el-dropdown-item class="sort-item" :class="{ pitch: index == pitchValue.types }" @click="selectType(index)">不限</el-dropdown-item>
<el-dropdown-item class="sort-item" :class="{ pitch: i == pitchValue.types }" @click="selectType(i)" v-for="(ite, i) in typeObj[Math.floor(pitchValue.types)]?.children" :key="i">{{ ite }}</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
</div>
</div>
<div class="option-item flexflex">
<div class="option-title flexacenter">租金{{ routePath !== "/needHousing" ? "" : "预算" }}</div>
<div class="option-box flexacenter flex1 option-input-box">
<div class="flex1"><input class="option-input" type="number" v-model="pitchValue['rent_min']" @blur="rentBlur" @input="rentInput" @keyup.enter="rentBlur" placeholder="请输入" /><span style="font-size: 18px;">~</span><input class="option-input" type="number" v-model="pitchValue['rent_max']" @blur="rentBlur" @input="rentInput" @keyup.enter="rentBlur" placeholder="请输入" />HK$/</div>
<div class="eliminate flexcenter" @click="clearingAmount" v-if="pitchValue['rent_min'] || pitchValue['rent_max']">
<img class="eliminate-icon" src="@/assets/img/publicImage/round-fork.svg" />
清除金额
</div>
</div>
</div>
</div>
<div class="option-right">
<div class="option-item flexflex">
<div class="option-title">租期</div>
<div class="option-box flexflex flex1">
<div class="item flexcenter" :class="{ pitch: item['id'] == pitchValue['leaseterm'] }" v-for="item in leasetermList" @click="selectOption('leaseterm', item.id)" :key="item.id">{{ item["name"] }}</div>
</div>
</div>
<div class="option-item flexflex">
<div class="option-title">{{ routePath !== "/needHousing" ? "性别要求" : "求租者性别" }}</div>
<div class="option-box flexflex flex1" :key="pitchValue['gender']">
<div class="item flexcenter" :class="{ pitch: item['id'] == pitchValue['gender'] }" v-for="item in genderList" @click="selectOption('gender', item.id)" :key="item.id">{{ item["name"] }}</div>
</div>
</div>
<div class="option-item flexflex">
<div class="option-title">发布时间</div>
<div class="option-box flexflex flex1" :key="pitchValue['publish']">
<div class="item flexcenter" :class="{ pitch: item['id'] == pitchValue['publish'] }" v-for="item in publishList" @click="selectOption('publish', item.id)" :key="item.id">{{ item["name"] }}</div>
</div>
</div>
<div class="option-item flexflex">
<div class="option-title">其他</div>
<div class="option-box flexacenter flex1">
<div class="item-checkbox flexacenter item-checkbox-housing" v-if="routePath == '/personHousing'" :class="{ pitch: pitchValue.isverified == 1 }" @click="selectCheckboxOption('isverified')">
<span class="item-checkbox__inner"></span>
认证房源
</div>
<div class="item-checkbox flexacenter" v-if="routePath == '/intermediaryHousing'" :class="{ pitch: pitchValue.isintermediary == 1 }" @click="selectCheckboxOption('isintermediary')">
<span class="item-checkbox__inner"></span>
认证中介
</div>
<div class="item-checkbox flexacenter" :class="{ pitch: pitchValue.iselevator == 1 }" @click="selectCheckboxOption('iselevator')">
<span class="item-checkbox__inner"></span>
有电梯
</div>
<div class="item-checkbox flexacenter" :class="{ pitch: pitchValue.issunshinearea == 1 }" @click="selectCheckboxOption('issunshinearea')">
<span class="item-checkbox__inner"></span>
有阳台
</div>
</div>
</div>
</div>
</div>
<div class="screen-footer flexacenter">
<div class="screen-footer-left flexacenter">
<div class="quantity flexacenter">
<b class="b">{{ count }}</b> {{ routePath === '/personHousing' ? '个人房源' : routePath === '/intermediaryHousing' ? '中介房源' : routePath === '/needHousing' ? '求房源' : '' }}
</div>
<template v-if="pitchValue['location'].length != 0">
<span style="color: rgb(170, 170, 170); margin: 0px 15px;">|</span>
<div class="screen-location flexacenter">
<div class="screen-location-name">{{ locationKey[selectDistrictPitchShow || 1] }}:</div>
<template v-if="pitchValue['location'][0] == selectDistrictPitchShow">
<div class="screen-location-list flexacenter">
<div class="screen-location-item flexacenter">
不限
<img class="screen-location-img" @click="closeLocationKey(0)" src="@/assets/homeImage/closeIcon.svg" />
</div>
</div>
</template>
<div v-else class="screen-location-list flexacenter">
<div class="screen-location-item flexacenter" v-for="(item, index) in pitchValue['location']" :key="index">
{{ locationKey[item] }}
<img class="screen-location-img" @click="closeLocationKey(index)" src="@/assets/homeImage/closeIcon.svg" />
</div>
</div>
</div>
</template>
</div>
<div class="screen-footer-rigth">
<el-dropdown popper-class="popover-sort" trigger="click">
<div class="sort-btn flexacenter">
<template v-for="item in orderbyList">{{ item.type == pitchValue.orderby ? item.name : "" }}</template>
<img class="sort-icon" src="@/assets/homeImage/sortIcon.png" />
</div>
<template #dropdown>
<el-dropdown-menu class="sort-box">
<el-dropdown-item class="sort-item" @click="selectOption('orderby', item.type)" v-for="item in orderbyList" :key="item.type">
<div :class="{ pitch: item.type === pitchValue.orderby }">{{ item.name }}</div>
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { onMounted, ref, toRefs, watchEffect, reactive, defineProps, inject, getCurrentInstance, watch, nextTick } from "vue"
import { useStore } from "vuex"
import seachInfo from "../indexSeachInfo/indexSeachInfo.vue"
import selectTabBox from "../selectTabBox/selectTabBox.vue"
import choosingIdentity from "@/components/edit/choosingIdentity.vue"
import { useRouter } from "vue-router"
import store from "../../store/index"
import api from "../../utils/api"
import authenticationInfo from "./authenticationInfo.vue"
const usestore = useStore()
const { wechat } = toRefs(usestore.state)
const { proxy } = getCurrentInstance()
const props = defineProps({
getDataList: {
type: Function,
},
})
let getDataList = props.getDataList
//搜索框
let historyShow = ref(false)
let setHistoryShow = () => {
if (historyShow.value) {
setTimeout(() => {
historyShow.value = !historyShow.value
}, 500)
return
}
historyShow.value = !historyShow.value
}
let seachSchoolBtn = reactive({ data: [] }) //学校地区
let hireType = {} //整租
let allHireType = {} //合租
let seachArea = {} //区域找房
let historyArr = reactive({ data: [] }) //历史查找记录
let hotArr = reactive({ data: [] })
let seachAllType = reactive({
keyword: "",
location: [],
orderby: "timestamp",
})
// const pitchValue = inject("pitchValue") || {}
let pitchValue = reactive({
location: [],
school: "",
rent_min: "",
rent_max: "",
leaseterm: "",
roomtype: 0,
gender: 0,
iselevator: 0,
issunshinearea: 0,
orderby: "timestamp",
publish: "",
types: "",
})
onMounted(() => {
if (routePath.value === "/personHousing") {
pitchValue = { ...pitchValue, ...store.state.personPitchValue }
const queryParams = getQueryParams()
if (queryParams["location"]) {
pitchValue["school"] = ""
const arr = queryParams["location"].split(",")
pitchValue["location"] = arr
// selectDistrictPitchShow.value = Math.floor(pitchValue["location"][0] || 0)
} else pitchValue = Object.assign({}, pitchValue, queryParams)
} else if (routePath.value === "/intermediaryHousing") pitchValue = { ...pitchValue, ...store.state.intermediaryPitchValue }
else pitchValue = { ...pitchValue, ...store.state.needPitchValue }
if (routePath.value !== "/needHousing" && pitchValue["school"]) {
pitchValue["location"] = []
geographicState.value = "school"
}
if (pitchValue["location"].length > 0) selectDistrictPitchShow.value = Math.floor(pitchValue["location"][0] || 0)
getDataList(pitchValue)
})
// 获取URL中的查询参数
const getQueryParams = () => {
const queryParams = {}
const urlParams = new URLSearchParams(window.location.search)
for (const [key, value] of urlParams) {
if (value) queryParams[key] = value
}
return queryParams
}
//获取区域下列数据
let getLocationData = data => {
for (let item in data) {
if (!seachArea.data[item.substring(0, 1) - 1].data) seachArea.data[item.substring(0, 1) - 1].data = []
if (item.length > 1) {
seachArea.data[item.substring(0, 1) - 1].data.push({
title: data[item],
id: item,
})
}
}
}
//监听路由
const route = useRouter()
let routePath = ref("")
routePath.value = route.currentRoute.value.meta.path
watchEffect(() => {
seachSchoolBtn.data = store.state.seachTypeData[0] ? store.state.seachTypeData[0].where : []
hireType.data = store.state.seachTypeData[2] ? store.state.seachTypeData[2].where[0].data : []
allHireType.data = store.state.seachTypeData[2] ? store.state.seachTypeData[2].where[1].data : []
seachArea.data = store.state.seachTypeData[1] ? store.state.seachTypeData[1].where : []
if (seachArea.data.length > 0 && !seachArea.data[0].data) getLocationData(store.state.indexData.config.location)
hotArr.data = store.state.indexData.hotSearcheWords
})
//获取历史搜索记录
historyArr.data = JSON.parse(localStorage.getItem("historyArr")) || []
//搜索数据
let seachList = item => {
let string = seachAllType.keyword
if (!string.replace(/\s/g, "")) return
if (historyArr.data.indexOf(seachAllType.keyword) === -1) {
historyArr.data.unshift(seachAllType.keyword)
}
if (historyArr.data.length > 10) historyArr.data.splice(historyArr.data.length - 1, 1)
localStorage.setItem("historyArr", JSON.stringify(historyArr.data))
sessionStorage.setItem("houseingPageType", routePath.value === "/needHousing" ? "6" : routePath.value === "/intermediaryHousing" ? "1" : routePath.value === "/personHousing" ? "0" : "0")
route.push({
path: "/seachPage",
query: {
keyword: seachAllType.keyword,
isNeedHousing: routePath.value === "/needHousing",
},
})
}
//设置点击一级区域 特殊的 选中区域的不限 需要修改值 并且去掉学校值
let setLocation = (type, data, isupdate = true) => {
seachAllType[type] = data
seachAllType["school"] = ""
if (isupdate) getDataList(seachAllType)
}
//设置搜索数据 type: 类型 data: 数据 second: 二级数据
let setSeachConditions = (type, data, second = null) => {
console.log("赋值前的数据:", seachAllType)
if (type === "rent") {
seachAllType["rent_min"] = data.min
seachAllType["rent_max"] = data.max
} else if (type !== "") {
// 这里是正常的数据 直接赋值
seachAllType[type] = data
} else if (type === "") {
// 电梯 阳台 认证 那些是传数组的
data.indexOf("isintermediary") !== -1 ? (seachAllType["isintermediary"] = 1) : (seachAllType["isintermediary"] = 0)
data.indexOf("isverified") !== -1 ? (seachAllType["isverified"] = 1) : (seachAllType["isverified"] = 0)
data.indexOf("iselevator") !== -1 ? (seachAllType["iselevator"] = 1) : (seachAllType["iselevator"] = 0)
data.indexOf("issunshinearea") !== -1 ? (seachAllType["issunshinearea"] = 1) : (seachAllType["issunshinearea"] = 0)
}
// 学校和区域是 二选一
if (type === "school") seachAllType.location = []
if (type === "location") seachAllType.school = ""
if (second) {
seachAllType[second.type] = second.id
}
console.log(type, data, second)
console.log("保存前的处理数据:", seachAllType)
getDataList(seachAllType)
}
//点击历史搜索记录
let setSeachVal = item => {
seachAllType.keyword = item
seachList()
// getDataList(seachAllType)
}
//删除历史记录
let deleteSeachVal = i => {
historyArr.data.splice(i, 1)
localStorage.setItem("historyArr", JSON.stringify(historyArr.data))
}
//点击热门地区
let setHotSeach = item => {
seachAllType.keyword = item
if (historyArr.data.indexOf(item) === -1) historyArr.data.unshift(item)
if (historyArr.data.length > 10) historyArr.data.slice(historyArr.data.length - 1, 1)
localStorage.setItem("historyArr", JSON.stringify(historyArr.data))
seachList()
}
//点击选项
let checkBtn = (data, type, areaItem) => {
getDataList(type, data, areaItem)
}
let locationObj = reactive({}) // 位置配置信息
let locationKey = reactive({}) // 位置配置信息 键值对
let typeObj = reactive({}) // 方式配置信息
let typeKey = reactive({}) // 方式配置信息 键值对
onMounted(() => {
locationObj = store.state.locationObj
locationKey = store.state.locationKey
typeObj = store.state.typeObj
typeKey = store.state.typeKey
setSchoolData()
})
//设置区域状态
let setSelectPosition = type => {
geographicState.value = type
if (type !== "school") return
locationTemp.key = 0
locationTemp.value = []
locationTemp.state = false
}
//学校区域状态
let schoolSelectObj = reactive({ id: "", title: "不限", page: 0 })
let schoolPages = ref(0) //页数
let shcoolData = reactive([]) // 学校数据
let geographicState = ref("area") // 地理位置tab状态 区域 area 学校 school
let setSchoolData = () => {
// let arr = routePath.value === "/" ? store.state.seachTypeData[0] && store.state.seachTypeData[0].where : store.state.schoolList
// if (arr[0] && arr[0].id) arr.unshift({ name: "不限", id: "" })
let arr = JSON.parse(JSON.stringify(store.state.schoolList)) || []
arr.unshift({ name: "不限", id: "" })
let num = 0
let accumulationWidth = 0
for (let i = 0; i < arr.length; i++) {
let width = accumulationWidth + getStrWidth(arr[i].name) + 20
if (width > 380) {
num++
accumulationWidth = getStrWidth(arr[i].name) + 20
} else accumulationWidth = width
if (!shcoolData[num]) shcoolData[num] = []
shcoolData[num].push(arr[i])
}
// 判断一下值有没有学校 如果有看一下ID是不是在第一页
if (pitchValue.school) {
for (let i = 0; i < shcoolData.length; i++) {
for (let j = 0; j < shcoolData[i].length; j++) {
if (shcoolData[i][j].id == pitchValue.school) {
schoolPages.value = i
break
}
}
}
}
}
// 计算字符串在屏幕的显示宽度
let getStrWidth = str => {
let width = 0
let fontSize = 14
let font = fontSize + "px Arial"
let canvas = document.createElement("canvas")
let context = canvas.getContext("2d")
context.font = font
width = context.measureText(str).width
return width
}
//学校轮播组件
let prevSchoolData = () => {
if (schoolPages.value === 0) return
const schoolData = proxy.$refs.schoolData
schoolPages.value--
schoolData.prev()
}
let nextSchoolData = () => {
if (schoolPages.value === shcoolData.length - 1) return
const schoolData = proxy.$refs.schoolData
schoolPages.value++
schoolData.next()
}
// 目标区域的临时值
let locationTemp = reactive({
key: 0,
value: [],
state: false,
})
// 目标区域的 选择 type 0 不限 1 取消 2 选择
const selectDistrict = type => {
// 不限
if (type == 0) locationTemp.value = []
else if (type == 1) {
locationTemp.value = []
selectDistrictPitchShow.value = Math.floor(pitchValue["location"][0] || 0)
locationTemp.key = 0
locationTemp.state = false
pitchValue["school"] = ""
} else {
// 点击选好了 数组为空代表 选择不限
if (locationTemp.value.length == 0) locationTemp.value = [selectDistrictPitchShow.value]
pitchValue["location"] = locationTemp.value
locationTemp.value = []
selectDistrictPitchShow.value = Math.floor(pitchValue["location"][0] || 0)
pitchValue["school"] = ""
locationTemp.key = 0
locationTemp.state = false
getDataList(pitchValue)
proxy.$forceUpdate()
}
}
// 目标区域的选中
let selectDistrictPitchShow = ref("")
// 处理输入筛选金额后
const rentBlur = () => {
getDataList(pitchValue)
proxy.$forceUpdate()
}
// 清除筛选的金额
const clearingAmount = () => {
pitchValue["rent_min"] = ""
pitchValue["rent_max"] = ""
getDataList(pitchValue)
proxy.$forceUpdate()
}
// 租期配置数据
let leasetermList = reactive([
{ name: "不限", id: 0 },
{ name: "一年以上", id: 1 },
{ name: "低于一年", id: 2 },
])
// //性别配置数据
let genderList = reactive([
{ name: "不限", id: 0 },
{ name: "女", id: 1 },
{ name: "男", id: 2 },
])
//发布时间配置数据
let publishList = reactive([
{ name: "不限", id: 0 },
{ name: "三天", id: "triduum" },
{ name: "一周", id: "hebdomad" },
{ name: "一个月内", id: "onemonth" },
{ name: "两个月内", id: "twomonth" },
{ name: "三个月内", id: "trimester" },
])
// 排序的选项
let orderbyList = reactive([
{ name: "最新发布", type: "timestamp" },
{ name: "热门", type: "hotnum" },
{ name: "价格从低到高", type: "rentasc" },
{ name: "价格从高到低", type: "rentdesc" },
])
// 排序弹窗的状态
let orderbyPopoverState = ref(false)
const itemText = ref(null)
// 筛选选中的中转
const selectOption = (key, value) => {
// 特殊处理 目标区域不等于 0 时 弹窗区域选择框
if (key == "location" && value != 0) {
// 再次同一个分区选中 通过 选中的值来判断
if (Math.floor(pitchValue["location"][0] || 0) == value) {
// 判断本来就是选择不限的 需要value等于空 不让会乱
if (pitchValue["location"][0] == value) {
locationTemp.value = []
} else {
locationTemp.value = [...new Set(pitchValue["location"])]
}
} else locationTemp.value = [] // 选择其他分区
locationTemp.key = value
locationTemp.state = true
selectDistrictPitchShow.value = value
return
} else if (key == "location" && value == 0) {
// 这里时直接点击 区域的不限的
locationTemp.state = false
selectDistrictPitchShow.value = 0
}
// 特殊的 学校和区域只能二选一
if (key == "school") pitchValue["location"] = []
else if (key == "location") pitchValue["school"] = ""
nextTick(() => {
pitchValue[key] = value
getDataList(pitchValue)
proxy.$forceUpdate()
})
}
const selectCheckboxOption = key => {
pitchValue[key] = pitchValue[key] == 1 ? 0 : 1
getDataList(pitchValue)
proxy.$forceUpdate()
}
// 特殊的 方式选中
const selectType = (value, isFirstFloor) => {
// if (isFirstFloor && Math.floor(pitchValue["types"]) == value) return
pitchValue.types = value
if (isFirstFloor) getDataList(pitchValue, true)
// 请求不要蒙版
else getDataList(pitchValue)
proxy.$forceUpdate()
}
// 区域判断不限
const districtUnlimited = index => {
if (selectDistrictPitchShow.value != index || pitchValue["location"].length == 0) return false
if (pitchValue["location"].length == 1 && pitchValue["location"][0] == index) return true
}
// 区域判断 显示数量
const districtQuantity = index => {
if (selectDistrictPitchShow.value != index && pitchValue["location"].length != 0) return false
// 排除 不限
if (selectDistrictPitchShow.value == pitchValue["location"][0]) return false
// 获取 location 值 判断和index 是否相等
if (Math.floor(pitchValue["location"][0]) == index) return true
return false
}
// 删除地区底部的选中
const closeLocationKey = index => {
if (pitchValue.location.length == 1 && pitchValue.location[0] != selectDistrictPitchShow.value) pitchValue.location = [selectDistrictPitchShow.value]
else pitchValue.location.splice(index, 1)
getDataList(pitchValue)
proxy.$forceUpdate()
}
//列表总数
const count = inject("count")
defineExpose({
historyShow,
})
</script>
<style scoped lang="less">
.dis-f {
display: flex;
}
.jus-x {
justify-content: center;
}
.al-item {
align-items: center;
}
.pos-r {
position: relative;
}
.body-maxWidth {
width: 1200px;
min-width: 1200px;
}
.s-w-100 {
width: 100%;
}
.jus-bet {
justify-content: space-between;
}
.authentication-btn:hover .btn-qrcode {
display: block;
}
.btn-qrcode {
height: 365px;
position: absolute;
right: 0;
top: 58px;
z-index: 333;
display: none;
}
.btn-qrcode .bj {
height: 100%;
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.2784313725490196);
border-radius: 10px;
}
.btn-qrcode .QR-code {
position: absolute;
width: 100px;
height: 110px;
border-radius: 50%;
bottom: 86px;
left: 50%;
transform: translateX(-50%);
}
.seach-box-bg {
background: #d7d7d7 !important;
background: inherit;
border: none;
border-radius: 16px;
-moz-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.117647058823529);
-webkit-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.117647058823529);
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.117647058823529);
font-size: 14px;
margin-top: 20px;
padding-top: 5px;
.seach-box {
background: #ffffff;
/* transform: translate(0, 5px); */
border-radius: 16px;
.top-seach {
padding: 20px;
position: relative;
justify-content: end;
border-bottom: 1px solid #ebebeb;
.intermediary-btn:hover {
background: #f4f7f9 !important;
}
.intermediary-btn {
background: rgba(241, 245, 247, 1) !important;
}
.authentication-btn:hover {
background: #f6f5ff;
}
.authentication-btn {
width: 160px;
height: 40px;
background: inherit;
background-color: rgba(244, 243, 255, 1);
border: none;
border-radius: 68px;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
margin-left: 20px;
cursor: pointer;
position: relative;
.text-img {
width: 100px;
height: 20px;
}
.code-img {
width: 20px;
height: 16px;
margin-left: 0px;
}
}
.seach-history-h {
max-height: 375px !important;
transition: max-height 0.5s ease-in-out;
}
.seach-hiosory-box {
position: absolute;
top: 55px;
z-index: 99;
max-height: 0;
overflow: hidden;
}
.seach-history-info {
width: 560px;
background: inherit;
background-color: rgba(255, 255, 255, 1);
box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: rgba(235, 235, 235, 1);
border-radius: 16px;
-moz-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.0784313725490196);
-webkit-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.0784313725490196);
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.0784313725490196);
padding: 20px 25px;
overflow-y: auto;
.title {
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
font-style: normal;
font-size: 16px;
color: #000000;
}
.info-box :hover .img {
display: block;
}
.info-box {
display: flex;
flex-wrap: wrap;
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
font-weight: 400;
font-style: normal;
font-size: 15px;
color: #555555;
text-align: left;
.img {
width: 8px;
height: 8px;
position: absolute;
top: 6px;
right: -8px;
cursor: pointer;
display: none;
}
.btn {
margin: 10px 30px 0 0;
padding: 0 10px 0 0;
cursor: pointer;
word-wrap: break-word;
max-width: 100%;
position: relative;
flex-wrap: wrap;
}
}
}
.location-box {
width: 64px;
height: 32px;
background: inherit;
background-color: rgba(68, 68, 68, 1);
border: none;
border-radius: 8px;
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
-moz-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.117647058823529);
-webkit-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.117647058823529);
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.117647058823529);
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
font-style: normal;
font-size: 14px;
color: #ffffff;
line-height: 48px;
position: absolute;
z-index: 666;
}
.triangle {
border: 7px solid;
border-color: transparent #000 transparent transparent;
width: 0;
height: 0;
position: absolute;
bottom: -39px;
left: -7px;
}
.seach-btn:hover {
background: #81c1ff !important;
}
.seach-btn {
width: 32px;
height: 32px;
background: inherit;
background-color: rgba(98, 177, 255, 1);
border: none;
border-right: 0px;
border-radius: 0 8px 8px 0;
line-height: 48px;
cursor: pointer;
transform: translateX(-3px);
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
font-weight: 400;
font-style: normal;
font-size: 16px;
color: #000000;
}
.img {
width: 20px;
// height: 20px;
object-fit: contain;
margin-right: 1px;
}
.map-btn {
background: rgba(80, 227, 194, 1);
margin-left: 20px;
}
.add-btn:hover {
background: #fde177 !important;
}
.add-btn {
background: rgba(253, 218, 85, 1);
margin-left: 20px;
cursor: pointer;
}
.mg-l-10 {
margin-left: 10px;
}
.tool-btn {
width: 160px;
height: 40px;
border: none;
border-radius: 68px;
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
font-weight: 400;
font-style: normal;
font-size: 16px;
color: #000000;
line-height: 48px;
img {
width: 15px;
margin-right: 5px;
}
&.consult-btn {
background: rgba(144, 216, 72, 1);
margin-left: 20px;
&:hover {
opacity: 0.8;
}
.consult-icon {
width: 22px;
height: 22px;
margin-right: 5px;
}
}
}
}
.seach-info-box {
padding: 20px 10px;
justify-content: space-around;
flex-wrap: wrap;
}
}
}
::v-deep .el-input__wrapper {
background: rgba(246, 246, 246, 1);
border-radius: 8px 0 0 8px;
}
.seek-input {
border-radius: 65px;
overflow: hidden;
background-color: #f6f6f6;
border: solid 1px var(--el-input-border-color, var(--el-border-color));
.seach-btn {
border-radius: 50% !important;
img {
width: 18px !important;
}
}
::v-deep .el-input__wrapper {
box-shadow: none;
background: none;
}
}
.el-popover.el-popper.consult-popover {
.consult-pop {
width: 300px;
height: 300px;
border-radius: 10px;
padding-top: 45px;
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
-moz-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.101960784313725);
-webkit-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.101960784313725);
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.101960784313725);
background-color: #fff;
flex-direction: column;
.consult-title {
font-size: 15px;
color: #555555;
margin-bottom: 24px;
b {
color: #000;
font-weight: 650;
margin: 0 5px;
}
}
.consult-QRcode {
width: 120px;
height: 120px;
border-radius: 20px;
-moz-box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.101960784313725);
-webkit-box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.101960784313725);
box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.101960784313725);
margin-bottom: 20px;
background: #fff;
.consult-QRcode-img {
width: 100px;
height: 100px;
}
}
.consult-hint {
margin-bottom: 6px;
}
.consult-hint,
.consult-remark {
font-size: 13px;
color: #555555;
line-height: 18px;
}
.consult-remark {
b {
font-weight: 650;
color: #000000;
}
}
}
}
.option-area {
flex-wrap: wrap;
transition: height 0.25s linear 0s;
border-bottom: 1px solid rgb(235, 235, 235);
.option-left,
.option-right {
width: 600px;
&:not(:last-of-type) {
border-right: 1px #ebebeb dotted;
}
.option-item {
// padding-top: 24px;
padding-top: 20px;
padding-bottom: 20px;
margin: 0 30px 0 20px;
position: relative;
&:not(:last-of-type) {
border-bottom: 1px #ebebeb dotted;
}
.option-title {
font-size: 14px;
color: #b5b5b5;
width: 90px;
line-height: 30px;
}
.option-box {
flex-wrap: wrap;
.item {
padding: 5px 10px;
height: 30px;
display: flex;
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
font-weight: 400;
font-size: 14px;
text-align: center;
line-height: 30px;
border-radius: 10px;
margin-right: 10px;
// margin-bottom: 10px;
cursor: pointer;
color: #7f7f7f;
border: 1px solid transparent;
&:hover {
border: 1px solid rgba(235, 235, 235, 1);
}
&.pitch {
color: #50e3c2;
border: 1px solid #50e3c2;
background: #eefcf9;
.item-icon {
display: none;
}
.item-icon-pitch {
display: block;
}
.select-type-text {
display: block;
}
}
.item-icon {
width: 10px;
height: 10px;
margin-left: 10px;
}
.item-icon-pitch {
display: none;
}
.select-type-text {
display: none;
}
.select-num {
padding: 0 10px;
background-color: #50e3c2;
border-radius: 13px;
color: #fff;
font-size: 14px;
height: 16px;
line-height: 16px;
margin-left: 5px;
}
}
&.option-input-box {
font-weight: 400;
font-size: 14px;
color: #555555;
line-height: 20px;
.eliminate {
width: 96px;
height: 30px;
background-color: rgba(246, 246, 246, 1);
border-radius: 50px;
font-size: 14px;
color: #7f7f7f;
cursor: pointer;
.eliminate-icon {
width: 14px;
height: 14px;
margin-right: 3px;
}
}
.option-input {
width: 100px;
height: 40px;
border: 1px solid rgba(179, 179, 179, 1);
border-radius: 10px;
// outline: none;
font-size: 14px;
margin: 0 10px;
padding: 10px;
&:first-of-type {
margin-left: 0;
}
}
}
.district-pop {
position: absolute;
top: 80px;
width: 459px;
background-color: #fff;
border: 1px solid #ebebeb;
border-radius: 16px;
z-index: 1;
.district-unlimited {
font-size: 14px;
color: #7f7f7f;
line-height: 20px;
margin: 25px 20px 0;
padding-bottom: 20px;
border-bottom: 1px dotted #ebebeb;
line-height: 20px;
cursor: pointer;
&.pitch {
color: #000;
font-weight: 650;
.unlimited-no {
display: none;
}
.unlimited-yes {
display: block;
}
}
.unlimited-no {
width: 14px;
height: 14px;
border: 1px solid #d9d9d9;
border-radius: 50%;
margin-right: 10px;
}
.unlimited-yes {
width: 14px;
height: 14px;
margin-right: 10px;
display: none;
}
}
.district-option {
/deep/ .el-checkbox-group {
padding: 15px 20px 20px;
}
border-bottom: 1px solid #ebebeb;
}
.district-btn-box {
justify-content: flex-end;
padding: 20px 20px 25px 0;
.district-btn {
width: 100px;
height: 40px;
border-radius: 150px;
cursor: pointer;
&.district-ok {
background-color: #62b1ff;
border: 1px solid #62b1ff;
color: #fff;
margin-left: 10px;
}
&.district-cancel {
border: 1px solid #aaa;
color: #555;
}
}
}
}
.geography-tab {
font-size: 14px;
text-align: center;
color: #7f7f7f;
.geography-item {
padding: 5px 10px;
height: 30px;
line-height: 30px;
border-radius: 10px;
margin-right: 10px;
cursor: pointer;
border: 1px solid transparent;
&:hover {
border: 1px solid #ebebeb;
}
&.pitch {
color: #50e3c2 !important;
border: 1px solid #50e3c2 !important;
background: #eefcf9;
}
}
}
.geography-box {
position: relative;
margin-top: 5px;
z-index: 1;
.geography-bj {
position: absolute;
top: 0;
left: 0;
width: 459px;
height: 55px;
z-index: -1;
}
.geography-list {
// position: absolute;
// z-index: 1;
margin-top: 5px;
top: 5px;
left: 0;
width: 100%;
height: 50px;
display: flex;
align-items: center;
padding: 20px;
.geography-item {
font-size: 14px;
color: #7f7f7f;
line-height: 20px;
text-align: center;
margin-right: 30px;
cursor: pointer;
&.pitch {
color: #000;
font-weight: 650;
.item-icon {
display: none;
}
.item-icon-pitch {
display: block;
}
}
.geography-item-icon {
width: 10px;
height: 10px;
margin-left: 10px;
}
.item-icon {
width: 10px;
height: 10px;
margin-left: 10px;
}
.item-icon-pitch {
display: none;
}
.select-num {
width: 24px;
height: 16px;
background: inherit;
background-color: #000;
border: none;
border-radius: 13px;
box-shadow: none;
color: #fff;
line-height: 16px;
padding: 0 5px;
}
}
}
}
.item-checkbox {
cursor: pointer;
margin-right: 20px;
color: #606266;
&.item-checkbox-housing {
color: #f95d5d;
}
&.pitch {
color: #000;
font-weight: 650;
.item-checkbox__inner {
background: #50e3c2;
border-color: #50e3c2;
&:after {
transform: rotate(45deg) scaleY(1);
}
}
}
.item-checkbox__inner {
display: inline-block;
position: relative;
border: 1px solid #dcdfe6;
border-radius: 2px;
box-sizing: border-box;
width: 14px;
height: 14px;
background-color: #fff;
transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46), outline 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46);
margin-right: 8px;
&::after {
box-sizing: content-box;
content: "";
border: 1px solid #fff;
border-left: 0;
border-top: 0;
height: 7px;
left: 4px;
position: absolute;
top: 1px;
transform: rotate(45deg) scaleY(0);
width: 3px;
transition: transform 0.15s ease-in 50ms;
transform-origin: center;
}
}
}
}
}
}
}
/deep/ .el-checkbox__input.is-checked .el-checkbox__inner {
background: #50e3c2;
border-color: #50e3c2;
}
/deep/ .el-checkbox__input.is-checked + .el-checkbox__label {
font-family: PingFangSC-Semibold, PingFang SC Semibold, PingFang SC, sans-serif;
font-weight: 650;
font-style: normal;
font-size: 14px;
color: #000;
}
/deep/ .el-dropdown-menu__item:not(.is-disabled):focus {
background-color: initial;
color: initial;
}
.screen-footer {
justify-content: space-between;
padding: 0 16px;
.screen-footer-left {
.quantity {
color: #555555;
font-size: 15px;
height: 72px;
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
.b {
font-weight: 700;
color: #000000;
margin: 0 5px;
}
}
.screen-location {
.screen-location-name {
font-weight: 650;
font-size: 14px;
color: #000;
}
.screen-location-list {
flex-wrap: wrap;
width: 800px;
.screen-location-item {
font-size: 14px;
color: #333;
margin-left: 20px;
.screen-location-img {
width: 8px;
height: 8px;
margin-left: 8px;
cursor: pointer;
}
}
}
}
}
.screen-footer-rigth {
.sort-btn {
cursor: pointer;
color: #000;
line-height: 24px;
font-size: 14px;
font-weight: 650;
.sort-icon {
width: 20px;
height: 20px;
margin-left: 10px;
}
}
}
}
.school-info-box {
// position: absolute;
position: relative;
margin-top: 10px;
left: 0;
width: 100%;
height: 50px;
display: flex;
align-items: center;
padding: 5px 0px;
z-index: 1;
&::after {
content: "";
width: 7px;
height: 7px;
border-left: 1px solid #ebebeb;
border-top: 1px solid #ebebeb;
position: absolute;
top: -4px;
left: 99px;
z-index: 1111;
transform: rotate(45deg);
background: #fff;
}
.school-carousel-box {
height: 100%;
padding: 0 40px;
display: flex;
align-items: center;
.mg-l-10 {
margin-left: 10px;
}
.mg-l-20 {
margin-left: 20px;
}
.carousel-info-box {
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
font-weight: 400;
font-size: 14px;
color: #7f7f7f;
line-height: 20px;
cursor: pointer;
&:first-of-type {
margin-left: 10px;
}
&:not(:first-of-type) {
margin-left: 20px;
}
&.pitch {
font-weight: 650;
color: #000000;
}
}
}
/deep/ .el-carousel__container {
height: 50px;
border: 1px solid #ebebeb;
border-radius: 10px;
overflow: hidden;
}
.item-btn {
width: 30px;
height: 48px;
z-index: 66;
cursor: pointer;
top: 50%;
transform: translateY(-50%);
position: absolute;
background: #fff;
.img {
width: 10px;
height: 10px;
}
&.lef-btn {
border-right: 1px dashed #ebebeb;
border-radius: 10px 0 0 10px;
left: 1px;
.img {
transform: rotate(90deg);
}
}
.middle-btn {
background-color: #000000;
}
&.right-btn {
border-left: 1px dashed #ebebeb;
border-radius: 0 10px 10px 0;
right: 1px;
.img {
transform: rotate(270deg);
}
}
}
}
</style>
<style lang="less">
.el-popper.popover-sort {
width: 150px;
padding: 0;
border-radius: 10px;
-moz-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.0784313725490196);
-webkit-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.0784313725490196);
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.0784313725490196);
.sort-box {
padding: 26px 20px 2px;
font-size: 14px;
color: #7f7f7f;
border-radius: 10px;
.sort-item {
margin-bottom: 30px;
cursor: pointer;
padding: 0;
.pitch {
width: 100%;
color: #000;
font-weight: 650;
position: relative;
&::before {
content: "";
width: 6px;
height: 14px;
background-color: rgba(80, 227, 194, 1);
border-radius: 3px;
display: block;
position: absolute;
top: 50%;
right: 0;
transform: translateY(-50%);
}
}
}
}
}
</style>