仓储物流 - 仓储服务模块开发
@ -326,13 +326,20 @@
|
|||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
}
|
}
|
||||||
// 弹性布局-左对齐-上对齐(通用)
|
// 弹性布局-左对齐-上下居中(通用)
|
||||||
.flex-left-center {
|
.flex-left-center {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
// 弹性布局-左右居中-上下居中(通用)
|
||||||
|
.flex-center-center {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
// 溢出隐藏(通用)
|
// 溢出隐藏(通用)
|
||||||
.text-ellipsis {
|
.text-ellipsis {
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 508 KiB |
After Width: | Height: | Size: 142 KiB |
After Width: | Height: | Size: 333 KiB |
After Width: | Height: | Size: 991 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 136 KiB |
After Width: | Height: | Size: 184 KiB |
After Width: | Height: | Size: 295 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 333 KiB |
After Width: | Height: | Size: 478 KiB |
After Width: | Height: | Size: 534 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 251 KiB |
After Width: | Height: | Size: 140 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 191 KiB |
After Width: | Height: | Size: 177 KiB |
After Width: | Height: | Size: 179 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 135 KiB |
After Width: | Height: | Size: 164 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 389 KiB |
After Width: | Height: | Size: 34 KiB |
@ -2,90 +2,75 @@
|
|||||||
<section>
|
<section>
|
||||||
<common>
|
<common>
|
||||||
<template #main>
|
<template #main>
|
||||||
<el-card shadow="none" style="border-radius: 14px">
|
<div class="warehouse-detail">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<span @click="toBack(-1)">仓储</span>
|
<span @click="toBack(-1)">仓储</span>
|
||||||
<span class="mx-10"> > </span>
|
<span class="mx-10"> > </span>
|
||||||
<span style="color: rgba(37, 191, 130, 1)">查看详情</span>
|
<span style="color: rgba(37, 191, 130, 1)">查看详情</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="max-w-7xl mx-auto p-4" style="padding-bottom: 0">
|
|
||||||
<div style="width: 100%; position: relative">
|
<div class="detail-content-box">
|
||||||
<img src="@/assets/images/warehouseLogistics/img14.png" fit="cover" class="storage-image" @click="toLink" />
|
<div class="detail-content-box-left">
|
||||||
<el-button
|
<img :src="state.data.imageUrl" fit="cover" />
|
||||||
type="primary"
|
</div>
|
||||||
style="
|
<div class="detail-content-box-center">
|
||||||
width: 250px;
|
<p class="center-title">
|
||||||
height: 80px;
|
<span class="highlight">【{{ state.data.typeName }}】</span>{{ state.data.title }}
|
||||||
background-color: rgba(37, 191, 130, 0);
|
</p>
|
||||||
border: none;
|
<div class="center-text">
|
||||||
position: absolute;
|
<div class="center-text-lable" style="line-height: 32px">参考价格:</div>
|
||||||
top: 9%;
|
<div class="flex-1">
|
||||||
left: 35%;
|
<p class="top-text" style="line-height: 32px">{{ state.data.price }}</p>
|
||||||
z-index: 999;
|
</div>
|
||||||
"
|
</div>
|
||||||
@click="dialogVisible = true"
|
<div class="center-text">
|
||||||
>
|
<div class="center-text-lable">仓库面积:</div>
|
||||||
</el-button>
|
<div class="flex-1">{{ state.data.storageArea }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="center-text">
|
||||||
|
<div class="center-text-lable">仓库区域:</div>
|
||||||
|
<div class="flex-1">{{ state.data.location }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="center-text">
|
||||||
|
<div class="center-text-lable">启动年月:</div>
|
||||||
|
<div class="flex-1">2025年6月</div>
|
||||||
|
</div>
|
||||||
|
<div class="center-text">
|
||||||
|
<div class="center-text-lable">计价单位:</div>
|
||||||
|
<div class="flex-1">{{ state.data.pricingUnit }}</div>
|
||||||
|
</div>
|
||||||
|
<div style="margin-top: 20px">
|
||||||
|
<el-button size="large" type="primary" @click="dialogVisible = true">立即预约</el-button>
|
||||||
|
<el-button size="large" plain style="width: 96px">收藏</el-button>
|
||||||
|
<el-button size="large" plain style="width: 96px">分享</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- <div class="flex items-center mb-8">
|
<div class="warehouse-detail-title">
|
||||||
<div class="flex items-center mr-4">
|
<img :src="getAssetsFile('images/warehouseLogistics/product.png')" alt="" style="width: 30px" />
|
||||||
<img :src="state.data.imgPath" fit="cover" class="rounded-lg shadow image-box" />
|
<div class="center-title" style="margin: 0 0 4px 10px">仓储信息</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-1">
|
<div class="warehouse-content-align">
|
||||||
<h3 class="text-xl font-bold mb-2">{{ state.data.name }}</h3>
|
<div class="center-text">
|
||||||
<div class="text-gray-600 mb-2">
|
<div class="center-text-lable">预计租期:</div>
|
||||||
<span>{{ state.data.parentTitle }}</span>
|
<div class="flex-1">{{ state.storageInfor.leaseTerm }}</div>
|
||||||
<img :src="getAssetsFile('images/warehouseLogistics/认证.png')" alt="" style="width: 20px; margin: 0 5px" />
|
<div class="center-text-lable">货品类型:</div>
|
||||||
<img :src="getAssetsFile('images/warehouseLogistics/优先级.png')" alt="" style="width: 20px" />
|
<div class="flex-1">{{ state.storageInfor.productType }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="storage-tags">
|
<div class="center-text">
|
||||||
<el-tag
|
<div class="center-text-lable">仓库面积:</div>
|
||||||
v-for="(tags, indexT) in state.data.tag"
|
<div class="flex-1">{{ state.data.storageArea }}</div>
|
||||||
:key="indexT"
|
<div class="center-text-lable">可用面积:</div>
|
||||||
effect="plain"
|
<div class="flex-1">{{ state.data.usableArea }}</div>
|
||||||
round
|
|
||||||
style="background-color: rgba(37, 191, 130, 0.2); color: #25bf82"
|
|
||||||
>
|
|
||||||
{{ tags }}
|
|
||||||
</el-tag>
|
|
||||||
</div>
|
|
||||||
<p class="mt-2 text-gray-700">联系人:{{ state.data.contactName }}</p>
|
|
||||||
<p class="mt-2 text-gray-700">联系电话:{{ state.data.contactPhone }}</p>
|
|
||||||
<p class="mt-2 text-gray-700">
|
|
||||||
<el-icon><Location /></el-icon> {{ state.data.address }}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="text-gray-500 text-sm flex items-center" style="text-align: right">
|
|
||||||
<div>
|
|
||||||
<span style="color: #999999">报价:</span>
|
|
||||||
<span class="ml-2 text-green-500 font-bold">
|
|
||||||
¥{{ state.data.price }}/{{
|
|
||||||
state.data.priceSpec === 1 ? 'm³' : state.data.priceSpec === 2 ? '间' : state.data.priceSpec === 3 ? '㎡' : ''
|
|
||||||
}}/{{ state.data.timeSpec === 1 ? '天' : state.data.timeSpec === 2 ? '月' : state.data.timeSpec === 3 ? '年' : '' }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button size="large" type="primary" @click="goDei">
|
|
||||||
<el-icon class="el-icon--right"><ChatLineRound /></el-icon>
|
|
||||||
留下信息
|
|
||||||
</el-button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-6">
|
|
||||||
<h3 class="text-lg font-bold mb-4" style="margin-top: 30px">产品详细介绍</h3>
|
|
||||||
<div class="bg-white p-4 rounded-lg shadow-sm">
|
|
||||||
<p style="text-align: left" class="mb-4 text-gray-700" v-html="state.data.content ? state.data.content : '暂无介绍内容'"></p>
|
|
||||||
</div>
|
|
||||||
</div> -->
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
</template>
|
</template>
|
||||||
</common>
|
</common>
|
||||||
<el-dialog v-model="dialogVisible" title="立即预约" width="1000" :before-close="handleClose" center>
|
<el-dialog v-model="dialogVisible" title="立即预约" width="1000" center>
|
||||||
<!-- <h3>立即预约</h3> -->
|
<!-- <h3>立即预约</h3> -->
|
||||||
<img src="@/assets/images/warehouseLogistics/img28.png" fit="cover" class="storage-image" @click="toLink" />
|
<img src="@/assets/images/warehouseLogistics/img28.png" fit="cover" class="storage-image" />
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
@ -106,10 +91,97 @@ import { warehouseDetail } from '@/apis/warehouseLogistics.js';
|
|||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
|
import img1 from './../images/普通仓储/1.jpg';
|
||||||
|
import img2 from './../images/普通仓储/2.jpg';
|
||||||
|
import img3 from './../images/恒温仓储/1.jpg';
|
||||||
|
import img4 from './../images/冷库/4.jpg';
|
||||||
|
import img5 from './../images/气调仓储/1.jpg';
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
query: {},
|
query: {},
|
||||||
data: {},
|
data: {
|
||||||
|
imageUrl: img1,
|
||||||
|
typeId: 1,
|
||||||
|
typeName: '普通仓储',
|
||||||
|
title: '孟定边贸仓储中心',
|
||||||
|
operationUnit: '耿马宏泰物流有限公司 ',
|
||||||
|
pricingUnit: '元/㎡·月',
|
||||||
|
storageArea: '8,600㎡',
|
||||||
|
usableArea: '2,300㎡',
|
||||||
|
location: '孟定镇中缅大道8号',
|
||||||
|
price: '¥12元/㎡/月',
|
||||||
|
},
|
||||||
|
storageInfor: {
|
||||||
|
leaseTerm: '1-3年(可分段报价)', //预计租期
|
||||||
|
productType: '水果(需控温0-5℃,湿度85%-90%)', //货品类型
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
const allData = ref([
|
||||||
|
{
|
||||||
|
imageUrl: img1,
|
||||||
|
typeId: 1,
|
||||||
|
typeName: '普通仓储',
|
||||||
|
title: '孟定边贸仓储中心',
|
||||||
|
operationUnit: '耿马宏泰物流有限公司 ',
|
||||||
|
pricingUnit: '元/㎡·月',
|
||||||
|
storageArea: '8,600㎡',
|
||||||
|
usableArea: '2,300㎡',
|
||||||
|
location: '孟定镇中缅大道8号',
|
||||||
|
price: '¥12元/㎡/月',
|
||||||
|
rank: '1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
imageUrl: img2,
|
||||||
|
typeId: 2,
|
||||||
|
typeName: '普通仓储',
|
||||||
|
title: '绿色食品园区集散仓',
|
||||||
|
operationUnit: '耿马县供销集团',
|
||||||
|
pricingUnit: '元/吨·天',
|
||||||
|
storageArea: '12,000㎡',
|
||||||
|
usableArea: '4,500㎡',
|
||||||
|
location: '绿色食品园区二期',
|
||||||
|
price: '¥1.5元/吨/月',
|
||||||
|
rank: '2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
imageUrl: img3,
|
||||||
|
typeId: 3,
|
||||||
|
typeName: '恒温仓储',
|
||||||
|
title: '蔗糖储备恒温库',
|
||||||
|
operationUnit: '耿马糖业有限公司',
|
||||||
|
pricingUnit: '元/托·月',
|
||||||
|
storageArea: '3,200㎡',
|
||||||
|
usableArea: '800㎡',
|
||||||
|
location: '耿马糖厂东侧',
|
||||||
|
price: '¥28元/托/月',
|
||||||
|
rank: '3',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
imageUrl: img4,
|
||||||
|
typeId: 4,
|
||||||
|
typeName: '冷库',
|
||||||
|
title: '孟定果蔬冷链中心',
|
||||||
|
operationUnit: '临沧边境合作区管委会 ',
|
||||||
|
pricingUnit: '元/板·天',
|
||||||
|
storageArea: '5,000㎡',
|
||||||
|
usableArea: '1,200㎡',
|
||||||
|
location: '孟定海关监管区旁',
|
||||||
|
price: '¥2.8元/板/月',
|
||||||
|
rank: '4',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
imageUrl: img5,
|
||||||
|
typeId: 5,
|
||||||
|
typeName: '气调仓储',
|
||||||
|
title: '高原蔬菜气调保鲜库',
|
||||||
|
operationUnit: '耿马高原农业合作社 ',
|
||||||
|
pricingUnit: '元/吨·月',
|
||||||
|
storageArea: '1,800㎡',
|
||||||
|
usableArea: '300㎡',
|
||||||
|
location: '勐撒镇蔬菜基地',
|
||||||
|
price: '¥45元/吨/月',
|
||||||
|
rank: '5',
|
||||||
|
},
|
||||||
|
]);
|
||||||
const dialogVisible = ref(false);
|
const dialogVisible = ref(false);
|
||||||
|
|
||||||
const toBack = (level) => {
|
const toBack = (level) => {
|
||||||
@ -129,10 +201,20 @@ const queryDetail = () => {
|
|||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
state.query.id = route.query.id;
|
state.query.id = route.query.id;
|
||||||
queryDetail();
|
// queryDetail();
|
||||||
|
|
||||||
|
if (route.query.typeId) {
|
||||||
|
state.data = allData.value.find((item) => item.typeId === route.query.typeId);
|
||||||
|
console.log(state.data);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
.warehouse-detail {
|
||||||
|
border-radius: 14px;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 16px;
|
||||||
|
}
|
||||||
.title {
|
.title {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
@ -172,24 +254,6 @@ $border-color: #dcdfe6; // 边框颜色
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.info-section {
|
|
||||||
padding: 0px 50px;
|
|
||||||
margin-bottom: 24px;
|
|
||||||
.info-item {
|
|
||||||
margin-bottom: 12px;
|
|
||||||
.label {
|
|
||||||
color: $text-regular;
|
|
||||||
margin-right: 8px;
|
|
||||||
font-size: 20px;
|
|
||||||
}
|
|
||||||
.value {
|
|
||||||
color: $text-dark;
|
|
||||||
font-weight: 500;
|
|
||||||
font-size: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 输入框样式覆盖
|
// 输入框样式覆盖
|
||||||
:deep(.el-input) {
|
:deep(.el-input) {
|
||||||
.el-input__inner {
|
.el-input__inner {
|
||||||
@ -239,137 +303,72 @@ $border-color: #dcdfe6; // 边框颜色
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.bac {
|
|
||||||
background: rgba(37, 191, 130, 0.1);
|
|
||||||
border: 1px solid rgba(37, 191, 130, 0.5);
|
|
||||||
border-radius: 8px;
|
|
||||||
padding: 2px 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.image-box {
|
.warehouse-detail-title {
|
||||||
width: 300px;
|
font-size: 22px;
|
||||||
height: 300px;
|
font-weight: bold;
|
||||||
}
|
text-align: left;
|
||||||
|
margin: 16px 0;
|
||||||
.text-gray-500 {
|
|
||||||
height: 300px;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: row;
|
||||||
justify-content: space-between;
|
justify-content: flex-start;
|
||||||
align-items: start !important;
|
|
||||||
font-size: 20px !important;
|
|
||||||
color: #000000 !important;
|
|
||||||
padding-top: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-gray-600 {
|
|
||||||
font-size: 20px;
|
|
||||||
color: #000000 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.flex-1 {
|
|
||||||
width: 40%;
|
|
||||||
height: 300px;
|
|
||||||
flex-direction: column;
|
|
||||||
display: flex;
|
|
||||||
align-items: flex-start;
|
|
||||||
justify-content: space-evenly;
|
|
||||||
}
|
|
||||||
|
|
||||||
.max-w-7xl {
|
|
||||||
max-width: 80rem;
|
|
||||||
background-color: #fff;
|
|
||||||
border-radius: 10px;
|
|
||||||
.storage-image {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx-auto {
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-4 {
|
|
||||||
padding: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.flex {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
.items-center {
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mb-4 {
|
.detail-content-box {
|
||||||
margin-bottom: 1rem;
|
height: 276px;
|
||||||
|
margin-top: 20px;
|
||||||
|
display: flex;
|
||||||
|
gap: 20px;
|
||||||
}
|
}
|
||||||
|
.detail-content-box-left {
|
||||||
.mr-4 {
|
height: 100%;
|
||||||
margin-right: 1rem;
|
width: 40%;
|
||||||
|
border-radius: 14px;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
img {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
min-width: 100%;
|
||||||
|
min-height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-green-500 {
|
|
||||||
color: #25bf82;
|
|
||||||
}
|
}
|
||||||
|
.detail-content-box-center {
|
||||||
.text-lg {
|
flex: 1;
|
||||||
font-size: 1.125rem;
|
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
.center-title {
|
||||||
.font-bold {
|
font-size: 22px;
|
||||||
font-weight: 700;
|
font-weight: bold;
|
||||||
|
text-align: left;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
.highlight {
|
||||||
|
color: #25bf82;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rounded-lg {
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
}
|
}
|
||||||
|
.warehouse-content-align {
|
||||||
.shadow {
|
text-align: left;
|
||||||
box-shadow:
|
|
||||||
0 4px 6px -1px rgba(0, 0, 0, 0.1),
|
|
||||||
0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
|
||||||
}
|
}
|
||||||
|
.center-text {
|
||||||
.text-xl {
|
font-size: 16px;
|
||||||
font-size: 24px;
|
display: flex;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
.center-text-lable {
|
||||||
|
color: #666;
|
||||||
|
width: 86px;
|
||||||
}
|
}
|
||||||
|
.flex-1 {
|
||||||
.text-gray-600 {
|
flex: 1;
|
||||||
color: #757575;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-gray-700 {
|
|
||||||
color: #000000;
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
}
|
||||||
|
.top-text {
|
||||||
.text-sm {
|
font-size: 22px;
|
||||||
font-size: 0.875rem;
|
color: #25bf82;
|
||||||
}
|
font-weight: bold;
|
||||||
|
|
||||||
.space-x-2 {
|
|
||||||
gap: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-green-500 {
|
|
||||||
background-color: #4caf50;
|
|
||||||
}
|
|
||||||
|
|
||||||
.py-2 {
|
|
||||||
padding-top: 0.5rem;
|
|
||||||
padding-bottom: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.px-4 {
|
|
||||||
padding-left: 1rem;
|
|
||||||
padding-right: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mt-4 {
|
|
||||||
margin-top: 1rem;
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<section>
|
<section>
|
||||||
<common>
|
<common>
|
||||||
<template #main>
|
<template #main>
|
||||||
<el-card shadow="none" style="border-radius: 14px">
|
<el-card shadow="never" style="border-radius: 14px; position: relative">
|
||||||
<div class="tabs tabs0">
|
<div class="tabs tabs0">
|
||||||
<div class="tab cursor">
|
<div class="tab cursor">
|
||||||
<div
|
<div
|
||||||
@ -12,11 +12,7 @@
|
|||||||
class="tab_list_li"
|
class="tab_list_li"
|
||||||
style="margin-left: 20px; margin-bottom: 10px"
|
style="margin-left: 20px; margin-bottom: 10px"
|
||||||
:class="{ active: currentTab0 === index, tab_list_li0: currentTab0 === index }"
|
:class="{ active: currentTab0 === index, tab_list_li0: currentTab0 === index }"
|
||||||
@click.stop="
|
@click="handleClick(index)"
|
||||||
currentTab0 = index;
|
|
||||||
currentTab1 = 0;
|
|
||||||
currentTab2 = 0;
|
|
||||||
"
|
|
||||||
>
|
>
|
||||||
{{ item }}
|
{{ item }}
|
||||||
</div>
|
</div>
|
||||||
@ -29,49 +25,49 @@
|
|||||||
:key="index"
|
:key="index"
|
||||||
class="tab_list_li"
|
class="tab_list_li"
|
||||||
:class="{ active: currentTab1 === index }"
|
:class="{ active: currentTab1 === index }"
|
||||||
@click.stop="currentTab1 = index"
|
@click="handleTab1Click(item, index)"
|
||||||
>
|
>
|
||||||
{{ item }}
|
{{ item }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
<div style="position: absolute; right: 30px; top: 30px">
|
||||||
<el-row :gutter="20" style="margin-top: 10px">
|
|
||||||
<el-col v-if="currentTab0 === 0" :span="24">
|
|
||||||
<el-card class="storage-card" shadow="hover" body-style="padding: 0">
|
|
||||||
<div class="storage-content">
|
|
||||||
<div class="storage-content-top">
|
|
||||||
<img src="@/assets/images/warehouseLogistics/img7.png" fit="cover" class="storage-image storage-image1" @click="toLink" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
<el-card class="storage-card" shadow="hover" body-style="padding: 0">
|
|
||||||
<div class="storage-content">
|
|
||||||
<div class="storage-content-top">
|
|
||||||
<img src="@/assets/images/warehouseLogistics/img8.png" fit="cover" class="storage-image storage-image1" @click="toLink" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
</el-col>
|
|
||||||
<el-col v-else :span="24">
|
|
||||||
<el-card class="storage-card" shadow="hover" body-style="padding: 0">
|
|
||||||
<div class="storage-content">
|
|
||||||
<div class="storage-content-top">
|
|
||||||
<img src="@/assets/images/warehouseLogistics/img9.png" fit="cover" class="storage-image storage-image1" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
<el-card class="storage-card" shadow="hover" body-style="padding: 0">
|
|
||||||
<div class="storage-content">
|
|
||||||
<div class="storage-content-top">
|
|
||||||
<img src="@/assets/images/warehouseLogistics/img10.png" fit="cover" class="storage-image storage-image1" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
</el-col>
|
|
||||||
<div style="position: fixed; left: 50%; bottom: 7%">
|
|
||||||
<el-button v-if="currentTab0 === 0" style="padding: 10px 50px" size="large" type="primary" @click="application">发布需求</el-button>
|
<el-button v-if="currentTab0 === 0" style="padding: 10px 50px" size="large" type="primary" @click="application">发布需求</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<div v-if="state.data == 0" class="warehouse-content-box no-data">暂无数据</div>
|
||||||
|
<div v-else style="padding-bottom: 20px">
|
||||||
|
<div v-for="(item, index) in state.data" :key="index" class="warehouse-content-box">
|
||||||
|
<div class="warehouse-content-box-left">
|
||||||
|
<img :src="item.imageUrl" fit="cover" />
|
||||||
|
</div>
|
||||||
|
<div class="warehouse-content-box-center">
|
||||||
|
<p class="center-title">
|
||||||
|
<span class="highlight">【{{ item.typeName }}】</span>{{ item.title }}
|
||||||
|
</p>
|
||||||
|
<div class="center-text">
|
||||||
|
<div class="center-text-lable">运营单位:</div>
|
||||||
|
<div class="flex-1">{{ item.operationUnit }}</div>
|
||||||
|
<div class="center-text-lable">计价单位:</div>
|
||||||
|
<div class="center-text-cont">{{ item.pricingUnit }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="center-text">
|
||||||
|
<div class="center-text-lable">仓库面积:</div>
|
||||||
|
<div class="flex-1">{{ item.storageArea }}</div>
|
||||||
|
<div class="center-text-lable">可用面积:</div>
|
||||||
|
<div class="center-text-cont">{{ item.usableArea }}</div>
|
||||||
|
</div>
|
||||||
|
<p class="center-location">
|
||||||
|
<el-icon size="20px"><LocationFilled /></el-icon>{{ item.location }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="warehouse-content-box-right">
|
||||||
|
<p class="top-text">{{ item.price }}</p>
|
||||||
|
<el-button size="large" type="primary" class="right-button" @click="toLink(item)">预约</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- <el-pagination
|
<!-- <el-pagination
|
||||||
:size="'large'"
|
:size="'large'"
|
||||||
:page-size="paginations.size"
|
:page-size="paginations.size"
|
||||||
@ -81,7 +77,6 @@
|
|||||||
layout="prev, pager, next"
|
layout="prev, pager, next"
|
||||||
@current-change="currentChange"
|
@current-change="currentChange"
|
||||||
/> -->
|
/> -->
|
||||||
</el-row>
|
|
||||||
</template>
|
</template>
|
||||||
</common>
|
</common>
|
||||||
</section>
|
</section>
|
||||||
@ -107,9 +102,26 @@ const tab0 = reactive(['仓储服务']);
|
|||||||
const tab1 = reactive(['全部', '普通仓储', '恒温仓储', '冷库', '气调仓储']);
|
const tab1 = reactive(['全部', '普通仓储', '恒温仓储', '冷库', '气调仓储']);
|
||||||
const currentTab0 = ref(0);
|
const currentTab0 = ref(0);
|
||||||
const currentTab1 = ref(0);
|
const currentTab1 = ref(0);
|
||||||
const currentTab2 = ref(0);
|
const handleClick = (index) => {
|
||||||
const currentTab3 = ref(0);
|
currentTab0.value = index;
|
||||||
|
currentTab1.value = 0;
|
||||||
|
console.log(currentTab0.value);
|
||||||
|
};
|
||||||
|
const handleTab1Click = (item, index) => {
|
||||||
|
currentTab1.value = index;
|
||||||
|
console.log(currentTab1.value);
|
||||||
|
if (item === '全部') {
|
||||||
|
state.data = allData.value;
|
||||||
|
} else {
|
||||||
|
state.data = allData.value.filter((el) => el.typeName === item);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
import img1 from './../images/普通仓储/1.jpg';
|
||||||
|
import img2 from './../images/普通仓储/2.jpg';
|
||||||
|
import img3 from './../images/恒温仓储/1.jpg';
|
||||||
|
import img4 from './../images/冷库/4.jpg';
|
||||||
|
import img5 from './../images/气调仓储/1.jpg';
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
menus: warehouseLogisticsRoutes[0].children,
|
menus: warehouseLogisticsRoutes[0].children,
|
||||||
query: {
|
query: {
|
||||||
@ -117,76 +129,96 @@ const state = reactive({
|
|||||||
},
|
},
|
||||||
data: [
|
data: [
|
||||||
{
|
{
|
||||||
imageUrl: '/storage1.jpg',
|
imageUrl: img1,
|
||||||
title: '果蔬保鲜仓储',
|
typeId: 1,
|
||||||
description: '绿鲜蔬选果蔬仓储中心 ',
|
typeName: '普通仓储',
|
||||||
location: '临沧市-耿马县',
|
title: '孟定边贸仓储中心',
|
||||||
price: '600.0',
|
operationUnit: '耿马宏泰物流有限公司 ',
|
||||||
|
pricingUnit: '元/㎡·月',
|
||||||
|
storageArea: '8,600㎡',
|
||||||
|
usableArea: '2,300㎡',
|
||||||
|
location: '孟定镇中缅大道8号',
|
||||||
|
price: '¥12元/㎡/月',
|
||||||
rank: '1',
|
rank: '1',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
imageUrl: '/storage2.jpg',
|
imageUrl: img2,
|
||||||
title: '果蔬保鲜仓储',
|
typeId: 2,
|
||||||
description: '绿鲜蔬选果蔬仓储中心',
|
typeName: '普通仓储',
|
||||||
location: '临沧市-耿马县',
|
title: '绿色食品园区集散仓',
|
||||||
price: '600.0',
|
operationUnit: '耿马县供销集团',
|
||||||
|
pricingUnit: '元/吨·天',
|
||||||
|
storageArea: '12,000㎡',
|
||||||
|
usableArea: '4,500㎡',
|
||||||
|
location: '绿色食品园区二期',
|
||||||
|
price: '¥1.5元/吨/月',
|
||||||
rank: '2',
|
rank: '2',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
imageUrl: '/storage3.jpg',
|
imageUrl: img3,
|
||||||
title: '果蔬保鲜仓储',
|
typeId: 3,
|
||||||
description: '绿鲜蔬选果蔬仓储中心 ',
|
typeName: '恒温仓储',
|
||||||
location: '临沧市-耿马县',
|
title: '蔗糖储备恒温库',
|
||||||
price: '600.0',
|
operationUnit: '耿马糖业有限公司',
|
||||||
|
pricingUnit: '元/托·月',
|
||||||
|
storageArea: '3,200㎡',
|
||||||
|
usableArea: '800㎡',
|
||||||
|
location: '耿马糖厂东侧',
|
||||||
|
price: '¥28元/托/月',
|
||||||
rank: '3',
|
rank: '3',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
imageUrl: '/storage3.jpg',
|
imageUrl: img4,
|
||||||
title: '果蔬保鲜仓储',
|
typeId: 4,
|
||||||
description: '绿鲜蔬选果蔬仓储中心 ',
|
typeName: '冷库',
|
||||||
location: '临沧市-耿马县',
|
title: '孟定果蔬冷链中心',
|
||||||
price: '600.0',
|
operationUnit: '临沧边境合作区管委会 ',
|
||||||
rank: '',
|
pricingUnit: '元/板·天',
|
||||||
|
storageArea: '5,000㎡',
|
||||||
|
usableArea: '1,200㎡',
|
||||||
|
location: '孟定海关监管区旁',
|
||||||
|
price: '¥2.8元/板/月',
|
||||||
|
rank: '4',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
imageUrl: '/storage3.jpg',
|
imageUrl: img5,
|
||||||
title: '果蔬保鲜仓储',
|
typeId: 5,
|
||||||
description: '绿鲜蔬选果蔬仓储中心 ',
|
typeName: '气调仓储',
|
||||||
location: '临沧市-耿马县',
|
title: '高原蔬菜气调保鲜库',
|
||||||
price: '600.0',
|
operationUnit: '耿马高原农业合作社 ',
|
||||||
rank: '',
|
pricingUnit: '元/吨·月',
|
||||||
},
|
storageArea: '1,800㎡',
|
||||||
{
|
usableArea: '300㎡',
|
||||||
imageUrl: '/storage3.jpg',
|
location: '勐撒镇蔬菜基地',
|
||||||
title: '果蔬保鲜仓储',
|
price: '¥45元/吨/月',
|
||||||
description: '绿鲜蔬选果蔬仓储中心 ',
|
rank: '5',
|
||||||
location: '临沧市-耿马县',
|
|
||||||
price: '600.0',
|
|
||||||
rank: '',
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
const allData = ref([...state.data]);
|
||||||
|
|
||||||
const formData = reactive({});
|
const formData = reactive({});
|
||||||
const paginations = reactive({
|
const paginations = reactive({
|
||||||
page: 1,
|
page: 1,
|
||||||
size: 2,
|
size: 2,
|
||||||
total: 0,
|
total: 0,
|
||||||
});
|
});
|
||||||
|
const currentChange = (current) => {
|
||||||
|
paginations.page = current;
|
||||||
|
getWarehouseList(currentTab.value + 1);
|
||||||
|
};
|
||||||
|
|
||||||
const dialogFormVisible = ref(false);
|
const dialogFormVisible = ref(false);
|
||||||
const formLabelWidth = ref('120px');
|
const formLabelWidth = ref('120px');
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getWarehouseList('1');
|
// getWarehouseList('1');
|
||||||
|
|
||||||
|
setMockData();
|
||||||
});
|
});
|
||||||
|
|
||||||
const currentTab = ref(0);
|
const currentTab = ref(0);
|
||||||
|
|
||||||
const currentChange = (current) => {
|
|
||||||
paginations.page = current;
|
|
||||||
getWarehouseList(currentTab.value + 1);
|
|
||||||
};
|
|
||||||
|
|
||||||
const getWarehouseList = (type) => {
|
const getWarehouseList = (type) => {
|
||||||
warehouseList({ type: type, current: paginations.page, size: paginations.size }).then((res) => {
|
warehouseList({ type: type, current: paginations.page, size: paginations.size }).then((res) => {
|
||||||
state.data = [];
|
state.data = [];
|
||||||
@ -199,12 +231,20 @@ const getWarehouseList = (type) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
const setMockData = () => {
|
||||||
|
let testData = state.data;
|
||||||
|
console.log(testData);
|
||||||
|
if (testData.length === 0) return;
|
||||||
|
};
|
||||||
|
|
||||||
// 跳转详情页
|
// 跳转详情页
|
||||||
const toLink = (row) => {
|
const toLink = (row) => {
|
||||||
router.push({
|
router.push({
|
||||||
name: 'warehouse-detail',
|
name: 'warehouse-detail',
|
||||||
query: { id: row?.id ?? '100' },
|
query: {
|
||||||
|
id: row?.id ?? '100',
|
||||||
|
typeId: row?.typeId ?? '1',
|
||||||
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
// 跳转申请仓储需求
|
// 跳转申请仓储需求
|
||||||
@ -294,6 +334,7 @@ const priceConfirm = () => {
|
|||||||
color: #000000;
|
color: #000000;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
|
transition: color 0.3s ease;
|
||||||
}
|
}
|
||||||
.tab_list_li:first-child {
|
.tab_list_li:first-child {
|
||||||
margin-left: 20px;
|
margin-left: 20px;
|
||||||
@ -302,7 +343,19 @@ const priceConfirm = () => {
|
|||||||
color: rgba(37, 191, 130, 1);
|
color: rgba(37, 191, 130, 1);
|
||||||
}
|
}
|
||||||
.tab_list_li0 {
|
.tab_list_li0 {
|
||||||
border-bottom: 2px solid rgba(37, 191, 130, 1);
|
position: relative;
|
||||||
|
transition: color 0.3s ease;
|
||||||
|
}
|
||||||
|
.tab_list_li0::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 25%;
|
||||||
|
bottom: 0;
|
||||||
|
width: 50%;
|
||||||
|
height: 4px;
|
||||||
|
background: rgba(37, 191, 130, 1);
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: all 0.3s ease;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.cursor {
|
.cursor {
|
||||||
@ -421,4 +474,87 @@ const priceConfirm = () => {
|
|||||||
width: 80px;
|
width: 80px;
|
||||||
height: 80px;
|
height: 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.warehouse-content-box {
|
||||||
|
min-height: 150px;
|
||||||
|
margin-top: 20px;
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 14px;
|
||||||
|
background-color: #fff;
|
||||||
|
display: flex;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
.no-data {
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
.warehouse-content-box-left {
|
||||||
|
height: 120px;
|
||||||
|
width: 120px;
|
||||||
|
border-radius: 14px;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
img {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
min-width: 100%;
|
||||||
|
min-height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.warehouse-content-box-center {
|
||||||
|
flex: 1;
|
||||||
|
text-align: left;
|
||||||
|
.center-title {
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: left;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
.highlight {
|
||||||
|
color: #25bf82;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.center-text {
|
||||||
|
font-size: 14px;
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
.center-text-lable {
|
||||||
|
color: #666;
|
||||||
|
width: 70px;
|
||||||
|
}
|
||||||
|
.flex-1 {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.center-text-cont {
|
||||||
|
width: 120px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.center-location {
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 20px;
|
||||||
|
.el-icon {
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.warehouse-content-box-right {
|
||||||
|
width: 160px;
|
||||||
|
font-size: 20px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: flex-end;
|
||||||
|
justify-content: space-between;
|
||||||
|
.top-text {
|
||||||
|
font-size: 22px;
|
||||||
|
color: #25bf82;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.right-button {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|