首页以及装备共享大厅页面完善

This commit is contained in:
BianLzhaoMin 2024-11-25 18:00:42 +08:00
parent eecfd0c0e0
commit c2f44146c4
13 changed files with 1519 additions and 1226 deletions

9
components.d.ts vendored
View File

@ -25,12 +25,8 @@ declare module 'vue' {
ElImage: typeof import('element-plus/es')['ElImage'] ElImage: typeof import('element-plus/es')['ElImage']
ElInput: typeof import('element-plus/es')['ElInput'] ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption'] ElOption: typeof import('element-plus/es')['ElOption']
ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
ElPagination: typeof import('element-plus/es')['ElPagination'] ElPagination: typeof import('element-plus/es')['ElPagination']
ElProgress: typeof import('element-plus/es')['ElProgress']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton'] ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRow: typeof import('element-plus/es')['ElRow'] ElRow: typeof import('element-plus/es')['ElRow']
@ -40,16 +36,13 @@ declare module 'vue' {
ElTabPane: typeof import('element-plus/es')['ElTabPane'] ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs'] ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag'] ElTag: typeof import('element-plus/es')['ElTag']
ElTimeline: typeof import('element-plus/es')['ElTimeline']
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
ElUpload: typeof import('element-plus/es')['ElUpload']
EquipCard: typeof import('./src/components/equipCard.vue')['default'] EquipCard: typeof import('./src/components/equipCard.vue')['default']
EquipCardHall: typeof import('./src/components/equipCardHall/index.vue')['default']
EquipCardNew: typeof import('./src/components/equipCardNew/index.vue')['default'] EquipCardNew: typeof import('./src/components/equipCardNew/index.vue')['default']
EquipDetailTable: typeof import('./src/components/equipDetailTable.vue')['default'] EquipDetailTable: typeof import('./src/components/equipDetailTable.vue')['default']
FooterInfo: typeof import('./src/components/FooterInfo/index.vue')['default'] FooterInfo: typeof import('./src/components/FooterInfo/index.vue')['default']
FormComponent: typeof import('./src/components/FormComponent/index.vue')['default'] FormComponent: typeof import('./src/components/FormComponent/index.vue')['default']
Header: typeof import('./src/components/header/index.vue')['default'] Header: typeof import('./src/components/header/index.vue')['default']
Hearder: typeof import('./src/components/hearder/index.vue')['default']
Navmenu: typeof import('./src/components/Navmenu/index.vue')['default'] Navmenu: typeof import('./src/components/Navmenu/index.vue')['default']
PagingComponent: typeof import('./src/components/PagingComponent/index.vue')['default'] PagingComponent: typeof import('./src/components/PagingComponent/index.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink'] RouterLink: typeof import('vue-router')['RouterLink']

View File

@ -0,0 +1,191 @@
<template>
<div class="equipCard" @click="cardClick">
<img :src="url" alt="" />
<ul class="item-details">
<li style="margin: 10px 0">
<span class="item_1_span"> {{ name }} </span>
<!-- <span class="item_2_span"> 待租 </span> -->
</li>
<li style="color: #b6b6b6">{{ company }}</li>
<li style="color: #b6b6b6">
<el-icon style="margin-right: 3px; color: #25ac9c"><PhoneFilled /></el-icon>
{{ personPhone }}
</li>
</ul>
<div style="margin: 10px 0; padding-right: 15px; text-align: right">
<span style="text-align: right; color: #ff4800">
<i style="font-size: 10px"></i>
<i style="margin: 0 6px; font-size: 17px; font-weight: bold">{{ price }}</i>
<i style="font-size: 10px">/ </i>
</span>
</div>
</div>
</template>
<script lang="ts" setup>
const props: any = defineProps({
url: {
type: String,
default:
'https://img1.baidu.com/it/u=2080801041,3349735074&fm=253&app=120&size=w931&n=0&f=JPEG&fmt=auto?sec=1701536400&t=117e17eae3082b7b524f890245f7826f',
},
name: {
type: String,
default: '测试装备',
},
tags: {
type: Array,
default: ['待租', '合肥市'],
},
company: {
type: String,
default: '安徽某科技有限公司',
},
price: {
type: [String, Number],
default: 99,
},
timeUnit: {
type: String,
default: '月',
},
id: {
type: [String, Number],
default: '',
},
personPhone: {
type: String,
default: '',
},
})
const emit = defineEmits(['onClick'])
const cardClick = () => {
const data = {
id: props.id,
}
emit('onClick', data)
}
const onHandelLessee = () => {
console.log('立即租赁')
}
</script>
<style lang="scss" scoped>
.equipCard {
width: 100%;
background: #f7f9fa;
display: flex;
flex-direction: column;
img {
height: 140px;
}
.title {
padding: 16px 2px;
font-size: 18px;
font-weight: bold;
color: #333333;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.item-details {
padding: 0 10px 0 10px;
.address {
padding-right: 15px;
}
.address span {
width: 50%;
}
.item_1_span {
font-size: 16px;
font-weight: bold;
}
.item_2_span {
margin-left: 20px;
padding: 4px 10px;
color: #005af2;
border-radius: 4px;
background-color: #fff;
border: 1px solid #005af2;
}
}
.item-details li {
padding: 4px 0;
display: flex;
align-items: center;
font-size: 12px;
span:first-child {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.avatar {
width: 37%;
overflow: hidden;
border-radius: 15px;
.showImg {
width: 100%;
padding-bottom: 100%;
position: relative;
img {
position: absolute;
left: 0;
top: 0;
object-fit: cover;
width: 100%;
height: 100%;
}
}
}
.desc {
box-sizing: border-box;
margin-left: 10px;
flex: 1;
overflow: hidden;
.tag {
display: flex;
margin-top: 8px;
.item {
background: white;
font-size: 14px;
font-weight: 400;
color: #005af2;
padding: 2px 3px;
border: 1px solid #005af2;
margin-right: 10px;
border-radius: 4px;
}
}
.company {
margin-top: 10px;
font-size: 14px;
font-weight: 400;
color: #a5a4a4;
line-height: 20px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.price {
font-size: 14px;
font-weight: 400;
color: #ff4800;
margin-top: 20px;
span {
font-size: 25px;
font-weight: 600;
}
}
}
}
</style>

View File

@ -14,7 +14,7 @@ const isShowLogout = computed(() => {
return store.token return store.token
}) })
const placeholderText = ref('请输入关键字') const placeholderText = ref('搜索设备关键词')
// 退 // 退
const handlerLogout = () => { const handlerLogout = () => {

View File

@ -1,66 +1,71 @@
<template> <template>
<div class="uploadImg" :style="`width:${width}px;height:${width}px`"> <div class="uploadImg" :style="`width:${width}px;height:${width}px`">
<el-upload :disabled="disable" class="avatar-uploader" action="#" :show-file-list="false" <el-upload
:on-change="handleAvatarSuccess"> :disabled="disable"
<img v-if="imageUrl" :src="imageUrl" @click="clickImg" class="avatar"> class="avatar-uploader"
<!-- <el-icon v-else class="avatar-uploader-icon" :style="`line-height: ${width}px`"><Plus /></el-icon>--> action="#"
<el-icon v-else class="avatar-uploader-icon"> :show-file-list="false"
<Plus /> :on-change="handleAvatarSuccess"
</el-icon> >
</el-upload> <img v-if="imageUrl" :src="imageUrl" @click="clickImg" class="avatar" />
</div> <!-- <el-icon v-else class="avatar-uploader-icon" :style="`line-height: ${width}px`"><Plus /></el-icon>-->
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
</div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref } from "vue"; import { ref } from 'vue'
import { Plus } from '@element-plus/icons-vue' import { Plus } from '@element-plus/icons-vue'
const props = defineProps(['disable', 'width']) const props = defineProps(['disable', 'width'])
const imageUrl = ref('') const imageUrl = ref('')
const handleAvatarSuccess = (res, file) => { const handleAvatarSuccess = (res, file) => {
imageUrl.value = URL.createObjectURL(res.raw); imageUrl.value = URL.createObjectURL(res.raw)
} }
const emit = defineEmits(['onClick']) const emit = defineEmits(['onClick'])
const clickImg = () => { const clickImg = () => {
if (!props.disable) { if (!props.disable) {
emit('onClick', { emit('onClick', {
...this.file, ...this.file,
baseUrl: this.imageUrl baseUrl: this.imageUrl,
}) })
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.uploadImg { .uploadImg {
::v-deep .avatar-uploader { :deep .avatar-uploader {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid #dfdfdf;
overflow: hidden;
.el-upload--text {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
.avatar-uploader-icon {
width: 100%; width: 100%;
height: 100%; height: 100%;
} display: flex;
} align-items: center;
justify-content: center;
border: 1px solid #dfdfdf;
overflow: hidden;
.avatar { .el-upload--text {
width: 100%; display: flex;
height: 100%; align-items: center;
object-fit: cover; justify-content: center;
width: 100%;
height: 100%;
.avatar-uploader-icon {
width: 100%;
height: 100%;
}
}
.avatar {
width: 100%;
height: 100%;
object-fit: cover;
}
} }
}
} }
</style> </style>

View File

@ -1,11 +1,13 @@
import { post, get, put } from '../index' import { post, get, put } from '../index'
// 获取装备分类/maType/getTypeList
export const getTypeListApi = () => {
return get(`/material-mall/maType/getTypeList`, {})
}
// 获取装备列表 // 获取装备列表
export const getList = (params = {}) => { export const getDeviceListApi = (data: any) => {
return post('/zlpt-equip/dev/list', { return post('/material-mall/dev/list', data)
...params,
maStatus: 16
})
} }
//获取装备详情 //获取装备详情

View File

@ -3,6 +3,9 @@ import { get, post } from '../../index'
export const getGoodsClassListApi = () => { export const getGoodsClassListApi = () => {
return get('/material-mall/maType/getEquipmentType', {}) return get('/material-mall/maType/getEquipmentType', {})
} }
export const getCompanyListApi = () => {
return get('/material-mall/dev/companyList', {})
}
export const getHotSearchListApi = () => { export const getHotSearchListApi = () => {
return get('/material-mall/maType/getHotSearch', {}) return get('/material-mall/maType/getHotSearch', {})
} }

View File

@ -15,7 +15,7 @@ const isShowLogout = computed(() => {
return store.token return store.token
}) })
const placeholderText = ref('请输入关键字') const placeholderText = ref('搜索设备关键词')
// 退 // 退
const handlerLogout = () => { const handlerLogout = () => {
@ -75,7 +75,7 @@ const searchKeywordBtn = () => {
} else { } else {
router.push({ router.push({
name: 'equipList', name: 'equipList',
state: { keyWord: keywordIptValue.value }, query: { keyWord: keywordIptValue.value },
}) })
} }
} }
@ -196,7 +196,7 @@ const onCarts = () => {
@keydown.enter="searchKeywordBtn" @keydown.enter="searchKeywordBtn"
ref="inputRef" ref="inputRef"
@focus="placeholderText = ''" @focus="placeholderText = ''"
@blur="placeholderText = '请输入关键字'" @blur="placeholderText = '搜索设备关键词'"
/> />
<button class="search-btn" @click="searchKeywordBtn">搜索</button> <button class="search-btn" @click="searchKeywordBtn">搜索</button>

View File

@ -84,7 +84,7 @@ const routes: Array<RouteRecordRaw> = [
component: () => import('views/home/index.vue'), component: () => import('views/home/index.vue'),
meta: { meta: {
title: '首页', title: '首页',
keepAlive: false, keepAlive: true,
AuthFlag: false, AuthFlag: false,
activeName: 'home', activeName: 'home',
}, },

File diff suppressed because it is too large Load Diff

View File

@ -53,13 +53,13 @@
</div> </div>
</el-col> </el-col>
<el-col :span="22" class="cart-user-info"> <el-col :span="22" class="cart-user-info">
<div>{{ item.company_name }}</div> <div>{{ item.companyPersonPhoneKey.companyName }}</div>
<div class="user-name">{{ item.user_name }}</div> <div class="user-name">{{ item.companyPersonPhoneKey.person }}</div>
<div class="user-phone">{{ item.user_phone }}</div> <div class="user-phone">{{ item.companyPersonPhoneKey.personPhone }}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row class="cart-list" v-for="(goods, j) in item.good_list" :key="j"> <el-row class="cart-list" v-for="(goods, j) in item.devInfoVoList" :key="j">
<el-col :span="1"> <el-col :span="1">
<div style="text-align: center"> <div style="text-align: center">
<el-checkbox v-model="goods.isChecked" @change="onChangeGoods(index)"> <el-checkbox v-model="goods.isChecked" @change="onChangeGoods(index)">
@ -67,11 +67,14 @@
</div> </div>
</el-col> </el-col>
<el-col :span="9" class="goods-info"> <el-col :span="9" class="goods-info">
<img :src="goods.goods_pic" alt="" /> <img
src="https://fc1tn.baidu.com/it/u=4185529537,1682541874&fm=202&src=766&fc=tdmatt&mola=new&crop=v1"
alt=""
/>
<div class="goods-code"> <div class="goods-code">
<div style="font-size: 14px; font-weight: bold">{{ goods.goods_name }}</div> <div style="font-size: 14px; font-weight: bold">{{ goods.deviceName }}</div>
<div>装备编号 {{ goods.goods_code }}</div> <div>装备编号 {{ goods.code }}</div>
<div>装备型号 {{ goods.goods_type }}</div> <div>装备型号 {{ goods.typeName }}</div>
</div> </div>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
@ -176,122 +179,29 @@ import moment from 'moment'
const protocolChecked = ref<boolean>(false) const protocolChecked = ref<boolean>(false)
const cardList = ref([ const cardList = ref<any>([])
{
company_name: '安徽博诺斯有限公司',
user_name: '王先生',
user_phone: '18725632356',
isChecked: false,
good_list: [
{
goods_pic:
'https://fc1tn.baidu.com/it/u=4185529537,1682541874&fm=202&src=766&fc=tdmatt&mola=new&crop=v1',
goods_name: 'W190挖掘机',
goods_code: '995221_JHL',
goods_type: '挖地型号996',
lease_date: '',
lease_pic: 300,
lease_day: 1,
goods_num: 0,
totalAmount: 0,
isChecked: false,
lease_date_string: '',
},
],
},
{
company_name: '安徽博诺斯有限公司',
user_name: '王先生',
user_phone: '18725632356',
isChecked: false,
good_list: [
{
goods_pic:
'https://fc1tn.baidu.com/it/u=4185529537,1682541874&fm=202&src=766&fc=tdmatt&mola=new&crop=v1',
goods_name: 'W190挖掘机',
goods_code: '995221_JHL',
goods_type: '挖地型号996',
lease_date: '',
lease_pic: 300,
lease_day: 0,
goods_num: 0,
totalAmount: 0,
isChecked: false,
lease_date_string: '',
},
{
goods_pic:
'https://fc1tn.baidu.com/it/u=4185529537,1682541874&fm=202&src=766&fc=tdmatt&mola=new&crop=v1',
goods_name: 'W190挖掘机',
goods_code: '995221_JHL',
goods_type: '挖地型号996',
lease_date: '',
lease_pic: 300,
lease_day: 0,
goods_num: 0,
totalAmount: 0,
isChecked: false,
lease_date_string: '',
},
{
goods_pic:
'https://fc1tn.baidu.com/it/u=4185529537,1682541874&fm=202&src=766&fc=tdmatt&mola=new&crop=v1',
goods_name: 'W190挖掘机',
goods_code: '995221_JHL',
goods_type: '挖地型号996',
lease_date: '',
lease_pic: 300,
lease_day: 0,
goods_num: 0,
totalAmount: 0,
isChecked: false,
lease_date_string: '',
},
],
},
{
company_name: '安徽博诺斯有限公司',
user_name: '王先生',
user_phone: '18725632356',
isChecked: false,
good_list: [
{
goods_pic:
'https://fc1tn.baidu.com/it/u=4185529537,1682541874&fm=202&src=766&fc=tdmatt&mola=new&crop=v1',
goods_name: 'W190挖掘机',
goods_code: '995221_JHL',
goods_type: '挖地型号996',
lease_date: '',
lease_pic: 300,
lease_day: 0,
goods_num: 0,
totalAmount: 0,
isChecked: false,
lease_date_string: '',
},
{
goods_pic:
'https://fc1tn.baidu.com/it/u=4185529537,1682541874&fm=202&src=766&fc=tdmatt&mola=new&crop=v1',
goods_name: 'W190挖掘机',
goods_code: '995221_JHL',
goods_type: '挖地型号996',
lease_date: '',
lease_pic: 300,
lease_day: 0,
goods_num: 0,
totalAmount: 0,
isChecked: false,
lease_date_string: '',
},
],
},
])
const getBookCarDetailsData = async () => { const getBookCarDetailsData = async () => {
const res = await getBookCarDetailsApi() const res: any = await getBookCarDetailsApi()
console.log(res, '购物车详情') console.log(res, '----')
cardList.value = res.data
cardList.value.forEach((e: any) => {
e.isChecked = false
e.devInfoVoList.forEach((j: any) => {
j.isChecked = false
})
})
console.log(cardList.value, '***********')
// console.log(res, '')
} }
getBookCarDetailsData()
onMounted(() => {
getBookCarDetailsData()
})
// change // change
const onLeaseDateChange = (e: any, item: any) => { const onLeaseDateChange = (e: any, item: any) => {
item.lease_date_string = `${e[0]}${e[1]}` item.lease_date_string = `${e[0]}${e[1]}`
@ -305,9 +215,9 @@ const onDeleteGoods = (index: number) => {
// change // change
const onChangeAll = (e: boolean) => { const onChangeAll = (e: boolean) => {
cardList.value.forEach((item) => { cardList.value.forEach((item: any) => {
item.isChecked = e item.isChecked = e
item.good_list.forEach((j) => { item.devInfoVoList.forEach((j: any) => {
j.isChecked = e j.isChecked = e
}) })
}) })
@ -315,33 +225,33 @@ const onChangeAll = (e: boolean) => {
// //
const onChangeGoods = (index: number) => { const onChangeGoods = (index: number) => {
cardList.value[index].isChecked = cardList.value[index].good_list.every( cardList.value[index].isChecked = cardList.value[index].devInfoVoList.every(
(e) => e.isChecked === true, (e: any) => e.isChecked === true,
) )
} }
// //
const onChangeCompany = (e: boolean, index: number, item: any) => { const onChangeCompany = (e: boolean, index: number, item: any) => {
cardList.value[index].good_list.every((j) => (j.isChecked = e)) cardList.value[index].devInfoVoList.every((j) => (j.isChecked = e))
} }
// //
const amountNum = computed(() => { const amountNum = computed(() => {
let amountNum = 0 let amountNum = 0
cardList.value.forEach((e) => { cardList.value.forEach((e) => {
amountNum = e.good_list.length + amountNum amountNum = e.devInfoVoList.length + amountNum
}) })
return amountNum return amountNum
}) })
// //
const allChecked = computed(() => { const allChecked = computed(() => {
return cardList.value.every((e) => e.isChecked === true) return cardList.value.every((e: any) => e.isChecked === true)
}) })
// //
const amountDevice = computed(() => { const amountDevice = computed(() => {
let amountNum = 0 let amountNum = 0
cardList.value.forEach((e) => { cardList.value.forEach((e) => {
e.good_list.forEach((g) => { e.devInfoVoList.forEach((g) => {
if (g.isChecked) { if (g.isChecked) {
amountNum++ amountNum++
} }
@ -354,7 +264,7 @@ const amountDevice = computed(() => {
const orderAmountPice = computed(() => { const orderAmountPice = computed(() => {
let orderAmountPice = 0 let orderAmountPice = 0
cardList.value.forEach((e) => { cardList.value.forEach((e) => {
e.good_list.forEach((g) => { e.devInfoVoList.forEach((g) => {
if (g.isChecked) { if (g.isChecked) {
orderAmountPice = g.goods_num * g.lease_pic * g.lease_day + orderAmountPice orderAmountPice = g.goods_num * g.lease_pic * g.lease_day + orderAmountPice
} }

File diff suppressed because it is too large Load Diff

View File

@ -2,15 +2,20 @@
import EquipCard from 'components/equipCard.vue' import EquipCard from 'components/equipCard.vue'
import EquipCardNew from 'components/equipCardNew/index.vue' import EquipCardNew from 'components/equipCardNew/index.vue'
import NavMenu from 'components/Navmenu/index.vue' import NavMenu from 'components/Navmenu/index.vue'
import { getGoodsClassListApi } from 'http/api/home' import { getGoodsClassListApi, getCompanyListApi } from 'http/api/home'
import { mainStore } from 'store/main' import { mainStore } from 'store/main'
import { getHotList } from 'http/api/equip' import { getHotList } from 'http/api/equip'
import { reactive, ref } from 'vue' import { reactive, ref } from 'vue'
import baseData from '@/assets/baseInformation.json' import baseData from '@/assets/baseInformation.json'
const router = useRouter() const router: any = useRouter()
const leftNavList: any = ref([]) // const leftNavList: any = ref([])
const companyList: any = ref([])
const classList: any = ref([])
const selectOptions = ref<boolean>(false) //
const selectOptionsValue = ref<string>('分类筛选')
const loopList = ref([ const loopList = ref([
'https://zlpt-1259760603.cos.ap-nanjing.myqcloud.com/488bab245180ebf9f1f3d7db5301be4.png', 'https://zlpt-1259760603.cos.ap-nanjing.myqcloud.com/488bab245180ebf9f1f3d7db5301be4.png',
@ -21,13 +26,42 @@ const getGoodsClassList = async () => {
const res: any = await getGoodsClassListApi() const res: any = await getGoodsClassListApi()
console.log(res, '商品分类列表') console.log(res, '商品分类列表')
leftNavList.value = res.rows // leftNavList.value = res.rows
classList.value = res.data
} }
getGoodsClassList() getGoodsClassList()
const handlerGoodsDetails = (...arg) => { //
const arr = arg.map((key, index) => { const getCompanyListData = async () => {
const res: any = await getCompanyListApi()
companyList.value = res.data
console.log('res公司名称', res)
}
getCompanyListData()
//
const onSharedHall = (level: number, typeId: any) => {
router.push({
name: 'equipList',
query: {
level,
typeId,
},
})
}
const onSharedHallByCompany = (companyId: any) => {
router.push({
name: 'equipList',
query: {
companyId,
},
})
}
const handlerGoodsDetails = (...arg: any) => {
const arr = arg.map((key: any, index: number) => {
return { return {
level: index + 1 + '', level: index + 1 + '',
typeId: key.id, typeId: key.id,
@ -76,6 +110,21 @@ getHotDeviceList()
const onClick = (val: any) => { const onClick = (val: any) => {
router.push(`/equipDetail/${val.id}`) router.push(`/equipDetail/${val.id}`)
} }
//
const onSelectOptions = () => {
selectOptions.value = !selectOptions.value
}
//
const onSelectItem = (type: number) => {
if (type === 1) {
selectOptionsValue.value = '分类筛选'
} else {
selectOptionsValue.value = '公司筛选'
}
selectOptions.value = false
}
</script> </script>
<template> <template>
@ -85,60 +134,83 @@ const onClick = (val: any) => {
<div class="home-goods"> <div class="home-goods">
<ul class="left-nav"> <ul class="left-nav">
<!-- 左侧机械名称菜单按钮 --> <!-- 左侧机械名称菜单按钮 -->
<li class="item-nav" v-for="item in leftNavList" :key="item.name"> <li class="left-filter" @click="onSelectOptions">
{{ item.name }} {{ selectOptionsValue }}
<ul class="sub-goods"> <el-icon style="margin-left: 10px"><ArrowDownBold /></el-icon>
<!-- 级联框内 类别名称 -->
<li v-for="child in item.children" :key="child.id">
<!-- 第二级 -->
<span class="second-name">
{{ child.name }}
</span>
<span <div class="select-options" v-if="selectOptions">
style=" <div @click.stop="onSelectItem(1)">分类筛选</div>
display: flex; <div @click.stop="onSelectItem(2)">公司筛选</div>
flex: 1; </div>
flex-direction: column; </li>
flex-wrap: wrap;
" <template v-if="selectOptionsValue === '分类筛选'">
> <div v-for="item in classList" :key="item.name" class="item-container">
<span <li class="item-nav" @click="onSharedHall(1, item.id)">
v-for="son in child.children" {{ item.name }}
:key="son.id" <ul class="sub-goods">
style=" <!-- 级联框内 类别名称 -->
font-size: 14px; <li
font-weight: bold; v-for="child in item.children"
width: 100%; :key="child.id"
display: flex; @click="onSharedHall(2, child.id)"
"
> >
<!-- {{ son.name }} --> <!-- 第二级 -->
<span class="second-name">
<span style="width: 30%"> {{ child.name }}
{{ son.name }}
</span> </span>
<span style="width: 70%; display: flex; flex-wrap: wrap"> <span
style="
display: flex;
flex: 1;
flex-direction: column;
flex-wrap: wrap;
"
>
<span <span
v-for="son_1 in son.children" v-for="son in child.children"
:key="son_1.id" :key="son.id"
style=" style="
font-size: 12px; font-size: 14px;
font-weight: normal; font-weight: bold;
padding: 0 2px; width: 100%;
border-bottom: 1px solid #ccc; display: flex;
" "
class="last-level" @click="onSharedHall(3, son.id)"
@click="handlerGoodsDetails(item, child, son)"
> >
{{ son_1.name }} <!-- {{ son.name }} -->
<span style="width: 30%">
{{ son.name }}
</span>
<span
style="
width: 70%;
display: flex;
flex-wrap: wrap;
"
>
<span
v-for="son_1 in son.children"
:key="son_1.id"
style="
font-size: 12px;
font-weight: normal;
padding: 0 2px;
border-bottom: 1px solid #ccc;
"
class="last-level"
@click="onSharedHall(4, son_1.id)"
>
{{ son_1.name }}
</span>
</span>
</span> </span>
</span> </span>
</span>
</span>
<!-- <span>{{ child.name }}</span> <!-- <span>{{ child.name }}</span>
<span> <span>
<a <a
v-for="son in child.children" v-for="son in child.children"
@ -148,9 +220,23 @@ const onClick = (val: any) => {
{{ son.name }} {{ son.name }}
</a> </a>
</span> --> </span> -->
</li>
</ul>
</li> </li>
</ul> </div>
</li> </template>
<template v-else>
<div
v-for="item in companyList"
:key="item.companyId"
class="item-container"
>
<li class="item-nav" @click="onSharedHallByCompany(item.companyId)">
{{ item.companyName }}
</li>
</div>
</template>
</ul> </ul>
<div class="right-content"> <div class="right-content">
<!-- 轮播图上方导航按钮 --> <!-- 轮播图上方导航按钮 -->
@ -273,80 +359,131 @@ const onClick = (val: any) => {
.home-goods { .home-goods {
height: 500px; height: 500px;
display: flex; display: flex;
position: relative;
.left-nav { .left-nav {
position: relative; // padding: 10px 0;
// margin-top: 8px; // margin-top: 8px;
width: 200px; width: 200px;
height: 100%; height: 100%;
display: flex; display: flex;
// background-color: #f7f9fa;
background-color: #6599ed;
flex-direction: column; flex-direction: column;
// justify-content: space-around; align-items: center;
background-color: #f7f9fa;
overflow: hidden;
overflow-y: auto;
.item-nav { .left-filter {
// text-align: left; margin-top: 10px;
// padding-left: 50px; padding: 3px 0;
color: #fff; position: relative;
height: 46px; display: flex;
line-height: 46px; align-content: center;
text-align: center; justify-content: center;
font-size: 16px !important; color: #38b2a4;
// height: 46px;
// line-height: 46px;
// text-align: center;
font-weight: bold;
cursor: pointer;
&:hover { .select-options {
cursor: pointer; position: absolute;
// color: #2282ff; width: 120%;
// font-weight: bold; left: 50%;
background-color: #1abc9c; bottom: -65px;
border-radius: 4px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
transform: translateX(-50%);
background-color: #fff;
.sub-goods { div {
display: block; padding: 8px 6px;
text-align: left;
font-size: 14px;
font-weight: normal;
cursor: pointer;
color: #333;
}
div:hover {
color: #38b2a4;
} }
} }
} }
.sub-goods { .item-container {
position: absolute; width: 100%;
display: none; text-align: center;
top: 0; .item-nav {
left: 200px; // text-align: left;
width: 915px; // padding-left: 50px;
max-height: 100%; display: inline-block;
background-color: #f5f4f4; margin-top: 10px;
z-index: 999; padding: 0 10px;
// opacity: 0.9; color: #000;
border: 1px solid #333; height: 32px;
overflow-y: auto; line-height: 32px;
box-sizing: border-box; text-align: center;
font-size: 16px !important;
li { &:hover {
// margin: 10px 0; cursor: pointer;
color: #333; // color: #2282ff;
font-weight: bold; // font-weight: bold;
display: flex; background-color: #1abc9c;
border-radius: 18px;
.second-name { color: #fff;
width: 160px;
margin-left: 10px;
} }
}
span a { .sub-goods {
margin: 0 15px; position: absolute;
font-size: 14px; display: none;
font-weight: normal; top: 0;
} left: 200px;
width: 915px;
max-height: 100%;
background-color: #f5f4f4;
z-index: 999;
// opacity: 0.9;
border: 1px solid #333;
overflow-y: auto;
box-sizing: border-box;
.last-level { li {
margin-left: 3px; // margin: 10px 0;
} color: #333;
font-weight: bold;
display: flex;
.last-level:hover { .second-name {
color: #1abc9c; width: 160px;
border-bottom: 1px solid #1abc9c !important; margin-left: 10px;
}
span a {
margin: 0 15px;
font-size: 14px;
font-weight: normal;
}
.last-level {
margin-left: 3px;
}
.last-level:hover {
color: #1abc9c;
border-bottom: 1px solid #1abc9c !important;
}
} }
} }
} }
.item-container:hover {
.sub-goods {
display: block !important;
z-index: 9999;
}
}
} }
.right-content { .right-content {
@ -467,7 +604,7 @@ const onClick = (val: any) => {
} }
} }
::v-deep .el-carousel__container { :deep(.el-carousel__container) {
height: 100%; height: 100%;
} }

View File

@ -132,7 +132,8 @@ export default ({ mode }: any) => {
drop_console: isProduction, //生产正式 去除 drop_console: isProduction, //生产正式 去除
drop_debugger: isProduction //生产正式 去除 drop_debugger: isProduction //生产正式 去除
} }
} },
minify: 'terser',
/* /*
rollupOptions: { rollupOptions: {
output: { output: {