仓储物流 - 物流列表-在线寄货-货车资源匹配页面开发

This commit is contained in:
郭永超 2025-07-17 15:53:34 +08:00
parent 415b64bf2b
commit 62c7fc674a
11 changed files with 873 additions and 819 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -2,65 +2,128 @@
<section>
<common>
<template #main>
<el-card shadow="none" style="border-radius: 14px">
<div class="title" @click="toBack(-1)">
<el-icon><ArrowLeftBold /></el-icon>物流 · <span style="color: rgba(37, 191, 130, 1)">查看详情</span>
<div class="warehouse-detail">
<div class="title">
<span @click="toBack(-1)">物流</span>
<span class="mx-10"> > </span>
<span style="color: rgba(37, 191, 130, 1)">查看详情</span>
</div>
<div class="max-w-7xl mx-auto p-4">
<img src="@/assets/images/warehouseLogistics/img20.png" fit="cover" class="storage-image" @click="toLink" />
<!-- <div class="flex items-center mb-8">
<div class="flex items-center mr-4">
<img :src="state.data.imgPath" fit="cover" class="rounded-lg shadow image-box" />
<div class="detail-content-box">
<div class="detail-content-box-left">
<img :src="state.data.imageUrl" fit="cover" />
</div>
<div class="detail-content-box-center">
<p class="center-title">
{{ state.data.title }}
</p>
<div class="center-text">
<div class="center-text-lable" style="line-height: 32px; color: #000">参考价格</div>
<div class="flex-1">
<p class="top-text" style="line-height: 32px">{{ state.data.price }}</p>
</div>
</div>
<div class="flex-1">
<h3 class="text-xl font-bold mb-2">{{ state.data.name }}</h3>
<div class="text-gray-600 mb-2">
<span>{{ state.data.parentTitle }}</span>
<img :src="getAssetsFile('images/warehouseLogistics/认证.png')" alt="" style="width: 20px; margin: 0 5px" />
<img :src="getAssetsFile('images/warehouseLogistics/优先级.png')" alt="" style="width: 20px" />
</div>
<div class="storage-tags">
<el-tag
v-for="(tags, indexT) in state.data.tag"
:key="indexT"
effect="plain"
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 class="center-text">
<div class="center-text-lable">发布企业</div>
<div class="flex-1">{{ state.data.operationUnit }}</div>
</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 ? 'kg' : state.data.priceSpec === 2 ? '件' : state.data.priceSpec === 3 ? 'm³' : ''
}}
</span>
</div>
<div>
<el-button size="large" type="primary" @click="goDei">
<el-icon class="el-icon--right"><ChatLineRound /></el-icon>
留下信息
</el-button>
</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">{{ state.data.contactNumber }}</div>
</div>
<div class="center-text">
<div class="center-text-lable">成功服务</div>
<div class="flex-1">{{ state.data.serviceTimes }}</div>
</div>
<p style="color: #25bf82; font-size: 14px">距离指定位置30km</p>
<div style="position: absolute; right: 20px; top: 190px">
<el-button size="large" type="primary" @click="reservation">立即预约</el-button>
</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>
<div class="warehouse-detail-title">
<img :src="getAssetsFile('images/warehouseLogistics/car-icon.png')" alt="" style="width: 30px" draggable="false" />
<div class="center-title page-title">车辆信息</div>
</div>
<div class="warehouse-content-align">
<div class="center-text">
<div class="center-text-lable">车牌</div>
<div class="flex-1">{{ state.carInfor.licensePlate }}</div>
<div class="center-text-lable">车长</div>
<div class="flex-1">{{ state.carInfor.conductor }}</div>
</div>
<div class="center-text">
<div class="center-text-lable">车辆性质</div>
<div class="flex-1">{{ state.carInfor.vehicleNature }}</div>
<div class="center-text-lable">车型</div>
<div class="flex-1">{{ state.carInfor.vehicleModel }}</div>
</div>
<div class="center-text">
<div class="center-text-lable">最大载重</div>
<div class="flex-1">{{ state.carInfor.maximumPayload }}</div>
<div class="center-text-lable">空闲时间</div>
<div class="flex-1">{{ state.carInfor.freeTime }}</div>
</div>
</div>
<div class="warehouse-detail-title">
<img :src="getAssetsFile('images/warehouseLogistics/location.png')" alt="" style="width: 30px" />
<div class="center-title page-title">服务区域</div>
</div>
<p class="body-text">云南昆明 玉溪 普洱 红河 保山 大理 丽江 临沧贵州毕节 六盘水 遵义 安顺</p>
<div class="warehouse-detail-title">
<img :src="getAssetsFile('images/warehouseLogistics/product.png')" alt="" style="width: 30px" />
<div class="center-title page-title">公司简介</div>
</div>
<p class="body-text">
昌盛伟业运输有限公司是一家专注于农产品物流领域的现代化企业凭借多年深耕公司已构建起源盖全国主要农产品产区与消费市场的物流网络旨在为农产品的流涌保驾护航确保从田间到餐桌的高效安全运输
</p>
<p class="body-text">
<b>服务范围</b>
1.生鲜农产品配送:涵需蔬菜水果肉类禽蛋水产等各类牛鲜食材与众多农户农业合作社以及大型牛鲜供万商建立紧密合作关系确保货源稳定目新鲜无论是超市日常补货餐饮企业批量采购还是电商生鲜订单都能精准及时送达2.千货农产品运输:针对粮食坚果干苗菇干辣椒等干货农产品公司配备专业的干货仓储设施与运输车辆根据产品特性制定适宜的运输方案有效防止受潮虫虻等问题保障干货品质在长途运输与长期储存中不受损农产品加工辅助物流;为农产品加工企业提供原材料入厂与成品出厂的配套物流服务例如协助果汁厂运输新鲜水果原料助3.力面粉厂配送小麦等深度参与农产品产业链各环节提高产业协同效率
</p>
<p class="body-text">
<b>核心优势</b>
1.冷链物流实力:公司投入巨资打造先进的冷链物流体系冷藏车冷冻车数量充足目配备先进的温度监探设备可实现全程精准控温对于生鲜农产品如低温保鲜的奶制品运输途中温度波动控制在
+2以内确保产品新鲜度与品质极大降低损耗率专业仓储设施:拥有多样化的仓储资源包括常温库冷藏库冷冻库气调库等以满足不同农产品的储存需求气调库能2精准调节气体成分延长果蔬保鲜期:冷冻库温度可低至:25为肉类水产等冷冻产品提供优质储存环境3.高效配送网络:通过大数据与物流优化算法构建智能配送路线规划系统结合公司在全国各地的物流节点实现农产品配送的快速与精准以北京为中心向周边城市配送农产品当日达或次日达的配送比例高达%大幅提升客户满意度4:农产品追湖体系:自主研发农产品追溯平台利用物联网区块链等技术为每件农产品赋予唯一的身份标识消费者通过扫码或输入编码即可查询农产品的产地种枯!养殖过程采摘)居宰时间物流轨迹等详细信息实现全程透明化保障食品安全
</p>
<p class="body-text">
<b>专业团队</b>
公司员工队伍由物流专家农产品保鲜技术人员农业知识顾问等专业人才组成物流专家确保运输配送高效5.顺畅:保鲜技术人员为合储保鲜提供技术支持:农业知识顾问深入产地指导农户规范生产科学包装提升农产品源头质量
</p>
<p class="body-text">
<b>质量控制</b>
1.源头把控:派遣专业团队深入农产品产地对农户的种植养殖环境进行评估检测土壤水质空气质量确保符合绿色有机标准协助农户采用科学的病虫害防治方法避免农药残留超标从源头上保障农产品质量2.仓储保鲜监控:,在仓储环节利用传感器实时监测仓库内温湿度气体成分等关键参数一旦出现异常立即启动预警机制及时调整仓储条件防止农产品变质
3.运输涂中监管:冷藏车冷冻车搭载的温度监控设备实时向监控中心传输温度数据若温度偏离设定范围系统自动涌知司机采取措施纠正同时调度中心远程协助确保运输过程农产品质量稳定
</p>
<div class="warehouse-detail-title">
<img :src="getAssetsFile('images/warehouseLogistics/image.png')" alt="" style="width: 30px" />
<div class="center-title page-title">仓库图片</div>
</div>
<img :src="getAssetsFile('images/warehouseLogistics/company-vehicles1.png')" alt="" class="fill-img" draggable="false" />
<img :src="getAssetsFile('images/warehouseLogistics/company-vehicles2.png')" alt="" class="fill-img" draggable="false" />
<img :src="getAssetsFile('images/warehouseLogistics/company-vehicles3.png')" alt="" class="fill-img" draggable="false" />
</div>
<el-dialog v-model="dialogVisible" title="立即预约" width="500">
<div style="min-height: 50px">
<span style="color: #666">联系人</span>{{ state.data.contacts }} <span style="margin-left: 20px; color: #666">联系电话</span
>{{ state.data.contactNumber }}
</div>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="dialogVisible = false">确认</el-button>
<el-button @click="dialogVisible = false">取消</el-button>
</div>
</template>
</el-dialog>
</template>
</common>
</section>
@ -75,15 +138,44 @@ import { logisticDetail } from '@/apis/warehouseLogistics.js';
const route = useRoute();
const router = useRouter();
import img1 from './images/big-xiangshi.png';
const state = reactive({
query: {},
data: {},
data: {
imageUrl: img1,
typeId: 1,
typeName: '普通仓储',
title: '长途大车',
operationUnit: '昌盛伟业运输有限公司 ',
pricingUnit: '元/㎡·月',
storageArea: '8,600㎡',
usableArea: '2,300㎡',
location: '孟定镇中缅大道8号',
price: '¥12元/㎡/月',
contacts: '张强',
contactNumber: '13356846589',
serviceTimes: '206次',
},
carInfor: {
title: '长途大车',
licensePlate: '云AL6AB7',
conductor: '15m',
vehicleNature: '物流公司',
vehicleModel: '厢式',
maximumPayload: '1000吨',
freeTime: '2025.05.05',
price: '¥20元/吨/公里',
},
});
const dialogVisible = ref(false);
const reservation = () => {
dialogVisible.value = true;
};
const toBack = (level) => {
router.go(level);
};
const queryDetail = () => {
logisticDetail(state.query.id).then((res) => {
if (res.code === 200) {
@ -97,10 +189,15 @@ const queryDetail = () => {
onMounted(() => {
state.query.id = route.query.id;
queryDetail();
// queryDetail();
});
</script>
<style lang="scss" scoped>
.warehouse-detail {
border-radius: 14px;
background-color: #fff;
padding: 20px 20px 0 20px;
}
.title {
text-align: left;
font-size: 18px;
@ -114,79 +211,9 @@ $text-dark: #25bf82; // 深色文字
$text-regular: #606266; //
$border-color: #dcdfe6; //
//
:deep(.custom-inquiry-dialog) {
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
.el-dialog__header {
padding: 20px;
border-bottom: 1px solid #f2f6fc;
.el-dialog__title {
font-size: 18px;
color: $text-dark;
font-weight: 600;
}
}
.el-dialog__body {
padding: 20px 28px;
}
.el-form-item__label {
color: $text-regular;
font-size: 14px;
padding-bottom: 6px;
}
}
.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) {
.el-input__inner {
height: 40px;
line-height: 40px;
border-radius: 4px;
&:focus {
border-color: $primary-color;
}
}
.el-input__suffix {
color: $text-regular;
right: 12px;
}
}
//
:deep(.custom-select-dropdown) {
.el-select-dropdown__item {
color: $text-regular;
&.selected {
color: $primary-color;
}
}
}
//
.dialog-footer {
text-align: right;
text-align: center;
.el-button {
padding: 10px 24px;
border-radius: 4px;
@ -207,137 +234,91 @@ $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 {
width: 300px;
height: 300px;
}
.text-gray-500 {
height: 300px;
.warehouse-detail-title {
font-size: 22px;
font-weight: bold;
text-align: left;
margin: 20px 0 15px 0;
display: flex;
flex-direction: column;
justify-content: space-between;
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 {
flex-direction: row;
justify-content: flex-start;
align-items: center;
}
.mb-4 {
margin-bottom: 1rem;
.body-text {
font-size: 16px;
text-align: left;
margin-bottom: 10px;
}
.mr-4 {
margin-right: 1rem;
.detail-content-box {
height: 276px;
margin-top: 20px;
display: flex;
gap: 20px;
}
.text-green-500 {
color: #25bf82;
.detail-content-box-left {
height: 100%;
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-lg {
font-size: 1.125rem;
.detail-content-box-center {
flex: 1;
text-align: left;
position: relative;
}
.center-title {
font-size: 22px;
font-weight: bold;
text-align: left;
margin-bottom: 10px;
.highlight {
color: #25bf82;
}
}
.page-title {
margin: 0 0 4px 10px;
}
.warehouse-content-align {
text-align: left;
}
.font-bold {
font-weight: 700;
.center-text {
font-size: 16px;
display: flex;
margin-bottom: 10px;
.center-text-lable {
color: #666;
width: 86px;
}
.flex-1 {
flex: 1;
text-align: left;
}
}
.top-text {
font-size: 22px;
color: #25bf82;
font-weight: bold;
}
.fill-img {
width: 100%;
margin-bottom: 20px;
}
.rounded-lg {
border-radius: 0.5rem;
background-color: #f5f5f5;
}
.shadow {
box-shadow:
0 4px 6px -1px rgba(0, 0, 0, 0.1),
0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
.text-xl {
font-size: 24px;
}
.text-gray-600 {
color: #757575;
}
.text-gray-700 {
color: #000000;
font-size: 18px;
}
.text-sm {
font-size: 0.875rem;
}
.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;
.dialog-custom-title {
font-size: 20px;
font-weight: bold;
margin-bottom: 20px;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

View File

@ -18,25 +18,20 @@
</div>
</div>
<div style="display: flex">
<div style="flex: 1">
<el-form inline style="margin-left: -50px; margin-top: 10px">
<el-form-item>
<el-cascader
v-model="state.query.selectedAddress"
:options="addressOptions"
:props="cascaderProps"
placeholder="请选择省市区"
:size="formSize"
style="width: 300px"
/>
</el-form-item>
<el-form-item>
<el-input v-model="state.query.detailAddress" :size="formSize" placeholder="详细位置(如街道、门牌号等)" style="width: 300px" />
</el-form-item>
</el-form>
<div style="flex: 1; text-align: left">
<el-cascader
v-model="state.query.selectedAddress"
:options="addressOptions"
:props="cascaderProps"
placeholder="请选择省市区"
:size="formSize"
style="width: 500px; margin-bottom: 20px"
/>
<el-input v-model="state.query.detailAddress" :size="formSize" placeholder="详细位置(如街道、门牌号等)" style="width: 500px" />
</div>
<div style="width: 150px; margin-top: 10px; text-align: right">
<div style="width: 150px; text-align: right">
<el-button type="primary" size="large" style="width: 100px">查询</el-button>
<el-button type="primary" size="large" style="width: 100px; margin-top: 20px" @click="shippingGoods">在线寄货</el-button>
</div>
</div>
</el-card>

View File

@ -2,74 +2,82 @@
<section>
<common>
<template #main>
<el-card shadow="none" style="border-radius: 14px">
<el-card shadow="never" style="border-radius: 14px">
<div class="title">
<span @click="toBack(-2)">物流</span>
<span class="mx-10"> > </span>
<span @click="toBack(-1)">在线寄货</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 class="max-w-7xl mx-auto p-4">
<img src="@/assets/images/warehouseLogistics/img22.png" fit="cover" class="storage-image" @click="toLink" />
<!-- <div class="flex items-center mb-8">
<div class="flex items-center mr-4">
<img :src="state.data.imgPath" fit="cover" class="rounded-lg shadow image-box" />
</div>
<div class="flex-1">
<h3 class="text-xl font-bold mb-2">{{ state.data.name }}</h3>
<div class="text-gray-600 mb-2">
<span>{{ state.data.parentTitle }}</span>
<img :src="getAssetsFile('images/warehouseLogistics/认证.png')" alt="" style="width: 20px; margin: 0 5px" />
<img :src="getAssetsFile('images/warehouseLogistics/优先级.png')" alt="" style="width: 20px" />
</div>
<div class="storage-tags">
<el-tag
v-for="(tags, indexT) in state.data.tag"
:key="indexT"
effect="plain"
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 ? 'kg' : state.data.priceSpec === 2 ? '件' : state.data.priceSpec === 3 ? 'm³' : ''
}}
</span>
</div>
<div>
<el-button size="large" type="primary" @click="goDei">
<el-icon class="el-icon--right"><ChatLineRound /></el-icon>
留下信息
</el-button>
</div>
<div style="display: flex">
<div style="width: 60%">
<el-descriptions title="发货信息" :column="3" style="margin-top: 20px">
<el-descriptions-item label="姓名:">张超</el-descriptions-item>
<el-descriptions-item label="电话:">15684968769</el-descriptions-item>
<el-descriptions-item label="位置:">临沧市-耿马县</el-descriptions-item>
</el-descriptions>
<el-descriptions title="收货信息" :column="3">
<el-descriptions-item label="姓名:">刘美丽</el-descriptions-item>
<el-descriptions-item label="电话:">13375869426</el-descriptions-item>
<el-descriptions-item label="位置:">临沧市-耿马县</el-descriptions-item>
</el-descriptions>
<el-descriptions title="收货信息" :column="3">
<el-descriptions-item label="货物名称:">西红柿</el-descriptions-item>
<el-descriptions-item label="货物重量:">500</el-descriptions-item>
</el-descriptions>
</div>
<div style="flex: 1; text-align: right">
<el-button type="primary" size="large" style="width: 100px; margin-top: 100px">重新匹配</el-button>
</div>
</div>
</el-card>
<div class="storage-content">
<div class="content-custom-title">平台匹配仓储资源</div>
<div class="tabs">
<div class="tab cursor">
<div
v-for="(item, index) in tab1"
:key="index"
class="tab_list_li"
:class="{ active: currentTab1 === index }"
@click="handleTab1Click(item, index)"
>
{{ item }}
</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>
<el-row :gutter="20">
<el-col v-for="(item, index) in allData" :key="index" :span="8">
<div class="resource-item">
<div class="resource-item-img">
<img :src="item.imageUrl" fit="cover" draggable="false" class="storage-image" />
</div>
<p class="center-title">
{{ item.title }}
</p>
<div class="resource-custom-text">距离您的位置{{ item.distance }}</div>
<div class="center-text">
<div class="center-text-lable">发布企业</div>
<div class="flex-1" :title="item.operationUnit">{{ item.operationUnit }}</div>
</div>
<div class="center-text">
<div class="center-text-lable">联系电话</div>
<div class="flex-1" :title="item.phoneNumber">{{ item.phoneNumber }}</div>
</div>
<div class="center-text" style="margin: 10px 0">
<div class="center-text-lable" style="color: 000; font-weight: bold">参考价格</div>
<div class="flex-1" style="font-size: 20px; color: #25bf82; font-weight: bold">{{ item.price }}</div>
</div>
<div style="display: flex">
<el-button type="primary" size="large" style="flex: 1; margin: 10px 20px">立即查看</el-button>
</div>
</div>
</div> -->
</div>
</el-card>
<el-card shadow="none" style="border-radius: 14px; margin-top: 20px">
<div class="max-w-7xl mx-auto p-4" style="padding: 0">
<img src="@/assets/images/warehouseLogistics/img23.png" fit="cover" class="storage-image" />
</div>
</el-card>
</el-col>
</el-row>
</div>
</template>
</common>
</section>
@ -79,33 +87,76 @@ import { ref, reactive, watch, onMounted } from 'vue';
import { getAssetsFile } from '@/utils';
import { useRoute, useRouter } from 'vue-router';
import Common from '../components/common.vue';
import { logisticDetail } from '@/apis/warehouseLogistics.js';
import { warehouseDetail } from '@/apis/warehouseLogistics.js';
const route = useRoute();
const router = useRouter();
const state = reactive({
query: {},
data: {},
});
const tab1 = reactive(['全部', '距离最近', '价格最便宜']);
const currentTab1 = ref(0);
const handleTab1Click = (item, index) => {
currentTab1.value = index;
};
import img1 from './images/car1.png';
import img2 from './images/car2.png';
import img3 from './images/car3.png';
const allData = ref([
{
imageUrl: img1,
title: '长途货车',
operationUnit: '昌盛伟业运输有限公司 ',
phoneNumber: '15684968769',
pricingUnit: '元/㎡·月',
location: '孟定镇中缅大道8号',
cargoVolume: '61.2m³',
price: '¥19元/吨/公里',
distance: '9.1km',
},
{
imageUrl: img2,
title: '长途货车',
operationUnit: '昌盛伟业运输有限公司',
phoneNumber: '13375869426',
pricingUnit: '元/吨·天',
location: '绿色食品园区二期',
cargoVolume: '63m³',
price: '¥20元/吨/公里',
distance: '10.3km',
},
{
imageUrl: img3,
title: '长途货车',
operationUnit: '昌盛伟业运输有限公司',
phoneNumber: '15958621375',
pricingUnit: '元/托·月',
location: '耿马糖厂东侧',
cargoVolume: '63m³',
price: '¥20元/吨/公里',
distance: '12.6km',
},
]);
const toBack = (level) => {
router.go(level);
};
const param = ref({
id: '100',
});
const queryDetail = () => {
logisticDetail(state.query.id).then((res) => {
warehouseDetail(param).then((res) => {
if (res.code === 200) {
state.data = res.data;
for (let i in state.data) {
state.data[i].tag = state.data[i].tags.split(',');
allData.value = res.data;
for (let i in allData.value) {
allData.value[i].tag = allData.value[i].tags.split(',');
}
}
});
};
onMounted(() => {
state.query.id = route.query.id;
param.value.id = route.query.id ?? '100';
// queryDetail();
});
</script>
@ -116,238 +167,129 @@ onMounted(() => {
font-weight: bold;
cursor: pointer;
}
/* 根据需要添加样式,这里仅提供基础样式 */
//
$primary-color: #25bf82; //
$text-dark: #25bf82; //
$text-regular: #606266; //
$border-color: #dcdfe6; //
//
:deep(.custom-inquiry-dialog) {
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
.el-dialog__header {
padding: 20px;
border-bottom: 1px solid #f2f6fc;
.el-dialog__title {
font-size: 18px;
color: $text-dark;
font-weight: 600;
}
}
.el-dialog__body {
padding: 20px 28px;
}
.el-form-item__label {
color: $text-regular;
font-size: 14px;
padding-bottom: 6px;
}
}
.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) {
.el-input__inner {
height: 40px;
line-height: 40px;
border-radius: 4px;
&:focus {
border-color: $primary-color;
}
}
.el-input__suffix {
color: $text-regular;
right: 12px;
}
}
//
:deep(.custom-select-dropdown) {
.el-select-dropdown__item {
color: $text-regular;
&.selected {
color: $primary-color;
}
}
}
//
.dialog-footer {
text-align: right;
.el-button {
padding: 10px 24px;
border-radius: 4px;
font-size: 14px;
}
.cancel-btn {
color: $text-regular;
&:hover {
color: $primary-color;
border-color: $primary-color;
}
}
.submit-btn {
color: #fff;
background: $primary-color;
&:hover {
background: mix($primary-color, #fff, 85%);
}
}
}
.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 {
width: 300px;
height: 300px;
}
.text-gray-500 {
height: 300px;
display: flex;
flex-direction: column;
justify-content: space-between;
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;
.storage-content {
padding: 20px 20px 0 20px;
margin-top: 20px;
border-radius: 14px;
background-color: #fff;
border-radius: 10px;
.storage-image {
width: 100%;
}
.content-custom-title {
font-size: 20px;
font-weight: bold;
text-align: left;
margin-bottom: 10px;
}
.tabs {
//height: 160px;
line-height: 50px;
display: flex;
flex-direction: column;
font-size: 18px;
align-items: flex-start;
justify-content: space-between;
margin-bottom: 10px;
}
.tabs0 {
padding: 0;
}
.tab {
// height: 100px;
width: 850px;
display: flex;
align-items: center;
justify-content: flex-start;
overflow-x: auto;
overflow: auto; /* 启用滚动 */
white-space: nowrap; /* 强制单行显示 */
-ms-overflow-style: none; /* IE/Edge 兼容 */
scrollbar-width: none; /* 隐藏滚动条 */
.tab_list {
color: #999999;
font-size: 20px;
font-weight: 400;
}
.tab_list_li {
margin-left: 40px;
color: #666;
font-size: 18px;
font-weight: 400;
transition: color 0.3s ease;
}
.tab_list_li:first-child {
margin-left: 0px;
}
.tab_list_li.active {
color: #25bf82;
font-weight: bold;
}
}
.mx-auto {
margin-left: auto;
margin-right: auto;
.cursor {
cursor: pointer;
}
.p-4 {
padding: 1rem;
padding-bottom: 0;
}
.flex {
display: flex;
}
.items-center {
align-items: center;
}
.mb-4 {
margin-bottom: 1rem;
}
.mr-4 {
margin-right: 1rem;
}
.text-green-500 {
.active {
color: #25bf82;
font-weight: bold;
}
.text-lg {
font-size: 1.125rem;
.resource-item {
width: 100%;
min-height: 300px;
display: flex;
flex-direction: column;
margin-bottom: 20px;
text-align: left;
}
.font-bold {
font-weight: 700;
}
.rounded-lg {
border-radius: 0.5rem;
background-color: #f5f5f5;
}
.shadow {
box-shadow:
0 4px 6px -1px rgba(0, 0, 0, 0.1),
0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
.text-xl {
font-size: 24px;
}
.text-gray-600 {
color: #757575;
}
.text-gray-700 {
color: #000000;
font-size: 18px;
}
.text-sm {
font-size: 0.875rem;
}
.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;
.resource-item-img {
width: 100%;
height: 250px;
border-radius: 14px;
position: relative;
overflow: hidden;
background-color: rgb(102 102 102 / 10%);
img {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
min-width: 100%;
min-height: 100%;
object-fit: cover;
}
}
.center-title {
color: #666;
font-size: 18px;
font-weight: bold;
text-align: left;
margin-top: 10px;
margin-bottom: 10px;
.highlight {
color: #25bf82;
}
}
.resource-custom-text {
margin-bottom: 10px;
font-size: 16px;
color: #25bf82;
}
.center-text {
font-size: 16px;
display: flex;
margin-bottom: 10px;
.center-text-lable {
color: #666;
width: 86px;
line-height: 20px;
}
.flex-1 {
flex: 1;
line-height: 20px;
text-align: left;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
}
</style>

View File

@ -2,72 +2,155 @@
<section>
<common>
<template #main>
<el-card shadow="none" style="border-radius: 14px">
<div class="title" @click="toBack(-1)">
<el-icon><ArrowLeftBold /></el-icon>物流 · <span style="color: rgba(37, 191, 130, 1)">在线寄货</span>
<div class="warehouse-detail">
<div class="title">
<span @click="toBack(-1)">物流</span>
<span class="mx-10"> > </span>
<span style="color: rgba(37, 191, 130, 1)">在线寄货</span>
</div>
<!-- <div class="max-w-7xl mx-auto p-4">
<img src="@/assets/images/warehouseLogistics/img21.png" fit="cover" class="storage-image" @click="toLink" />
<div class="flex items-center mb-8">
<div class="flex items-center mr-4">
<img :src="state.data.imgPath" fit="cover" class="rounded-lg shadow image-box" />
<div class="storage-content">
<el-form ref="formRef" :model="formInline" :rules="dialogRules" required class="dialog-form-container" :label-width="'80'">
<div class="shipping-custom-title" style="margin-top: 0">
<img :src="getAssetsFile('images/warehouseLogistics/shipper.png')" alt="" draggable="false" />
<div class="page-title">发货地址</div>
</div>
<div class="flex-1">
<h3 class="text-xl font-bold mb-2">{{ state.data.name }}</h3>
<div class="text-gray-600 mb-2">
<span>{{ state.data.parentTitle }}</span>
<img :src="getAssetsFile('images/warehouseLogistics/认证.png')" alt="" style="width: 20px; margin: 0 5px" />
<img :src="getAssetsFile('images/warehouseLogistics/优先级.png')" alt="" style="width: 20px" />
<el-form-item label="发货人" prop="shipperName">
<el-input
v-model="formInline.shipperName"
:size="formSize"
clearable
placeholder="请输入发货人姓名"
:style="{ width: unifiedWidth }"
></el-input>
</el-form-item>
<el-form-item label="联系电话" prop="shipperPhone">
<el-input
v-model="formInline.shipperPhone"
:size="formSize"
clearable
placeholder="请输入发货人电话"
:style="{ width: unifiedWidth }"
></el-input>
</el-form-item>
<el-form-item label="发货地址" required>
<div style="display: flex; gap: 16px">
<el-form-item prop="selectedAddress">
<el-cascader
v-model="formInline.selectedAddress"
:options="addressOptions"
:props="cascaderProps"
placeholder="请选择省市区"
:size="formSize"
:style="{ width: unifiedWidth }"
/>
</el-form-item>
<el-form-item prop="detailAddress">
<el-input
v-model="formInline.detailAddress"
:size="formSize"
placeholder="详细地址(如街道、门牌号等)"
:style="{ width: unifiedWidth }"
/>
</el-form-item>
</div>
<div class="storage-tags">
<el-tag
v-for="(tags, indexT) in state.data.tag"
:key="indexT"
effect="plain"
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>
</el-form-item>
<div class="shipping-custom-title">
<img :src="getAssetsFile('images/warehouseLogistics/consignee.png')" alt="" draggable="false" />
<div class="page-title">收货地址</div>
</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 ? 'kg' : state.data.priceSpec === 2 ? '件' : state.data.priceSpec === 3 ? 'm³' : ''
}}
</span>
</div>
<div>
<el-button size="large" type="primary" @click="goDei">
<el-icon class="el-icon--right"><ChatLineRound /></el-icon>
留下信息
</el-button>
<el-form-item label="收货人" prop="consigneeName">
<el-input
v-model="formInline.consigneeName"
:size="formSize"
clearable
placeholder="请输入收货人姓名"
:style="{ width: unifiedWidth }"
></el-input>
</el-form-item>
<el-form-item label="联系电话" prop="consigneePhone">
<el-input
v-model="formInline.consigneePhone"
:size="formSize"
clearable
placeholder="请输入收货人电话"
:style="{ width: unifiedWidth }"
></el-input>
</el-form-item>
<el-form-item label="收货地址" required>
<div style="display: flex; gap: 16px">
<el-form-item prop="consigneeArea">
<el-cascader
v-model="formInline.consigneeArea"
:options="addressOptions"
:props="cascaderProps"
placeholder="请选择省市区"
:size="formSize"
:style="{ width: unifiedWidth }"
/>
</el-form-item>
<el-form-item prop="consigneeAddress">
<el-input
v-model="formInline.consigneeAddress"
:size="formSize"
placeholder="详细地址(如街道、门牌号等)"
:style="{ width: unifiedWidth }"
/>
</el-form-item>
</div>
</el-form-item>
<div class="shipping-custom-title">
<img :src="getAssetsFile('images/warehouseLogistics/goods.png')" alt="" draggable="false" />
<div class="page-title">货物信息</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> -->
<div class="max-w-7xl mx-auto p-4">
<img src="@/assets/images/warehouseLogistics/img21.png" fit="cover" class="storage-image" />
<div>
<el-button style="padding: 10px 40px" size="default" type="primary" @click="application">提交</el-button>
<el-button style="padding: 10px 40px" size="default" type="plain">取消</el-button>
</div>
<el-form-item label="货物名称" prop="goodsName">
<el-input
v-model="formInline.goodsName"
:size="formSize"
clearable
placeholder="请输入货物名称"
:style="{ width: unifiedWidth }"
></el-input>
</el-form-item>
<!-- <el-form-item label="货物类型" prop="goodsType">
<el-select v-model="formInline.goodsType" placeholder="请选择" :size="formSize" :style="{ width: unifiedWidth }">
<el-option v-for="item in goodsList" :key="item.id" :value="item.id" :label="item.name" />
</el-select>
</el-form-item> -->
<el-form-item label="货物重量" prop="goodsWeight">
<el-input v-model="formInline.goodsWeight" :size="formSize" clearable placeholder="请输入货物重量" :style="{ width: unifiedWidth }">
<template #append>Kg</template>
</el-input>
</el-form-item>
<el-form-item label="货物体积" prop="goodsVolume">
<el-input v-model="formInline.goodsVolume" :size="formSize" clearable placeholder="请输入货物体积" :style="{ width: unifiedWidth }">
<template #append></template>
</el-input>
</el-form-item>
<el-form-item label="货物数量" prop="goodsQuantity">
<el-input v-model="formInline.goodsQuantity" :size="formSize" clearable placeholder="请输入货物数量" :style="{ width: unifiedWidth }">
<template #append></template>
</el-input>
</el-form-item>
<el-form-item label="货物高度" prop="goodsHeight">
<el-input v-model="formInline.goodsHeight" :size="formSize" clearable placeholder="请输入货物高度" :style="{ width: unifiedWidth }">
<template #append>m</template>
</el-input>
</el-form-item>
<el-form-item label="货物长度" prop="goodsLength">
<el-input v-model="formInline.goodsLength" :size="formSize" clearable placeholder="请输入货物长度" :style="{ width: unifiedWidth }">
<template #append>m</template>
</el-input>
</el-form-item>
</el-form>
</div>
</el-card>
<div>
<el-button style="width: 150px" size="large" type="primary" @click="application">提交</el-button>
<el-button style="width: 150px" size="large" type="plain">取消</el-button>
</div>
</div>
</template>
</common>
</section>
@ -78,6 +161,8 @@ import { getAssetsFile } from '@/utils';
import { useRoute, useRouter } from 'vue-router';
import Common from '../components/common.vue';
import { logisticDetail } from '@/apis/warehouseLogistics.js';
import { ElMessage } from 'element-plus';
import { getRegion } from '@/apis/common';
const route = useRoute();
const router = useRouter();
@ -87,7 +172,226 @@ const state = reactive({
data: {},
});
const application = () => {
const unifiedWidth = '300px';
const formSize = 'large';
const formRef = ref(null);
const formInline = reactive({
shipperName: '', //
shipperPhone: '', //
selectedAddress: [], //
detailAddress: '', //
consigneeName: '', //
consigneePhone: '', //
consigneeArea: '', //
consigneeAddress: '', //
goodsName: '', //
goodsType: '', //
goodsWeight: '', //
goodsVolume: '', //
goodsQuantity: '', //
goodsHeight: '', //
goodsLength: '', //
});
const dialogRules = reactive({
//
shipperName: [
{ required: true, message: '请输入发货人姓名', trigger: 'blur' },
{ min: 2, max: 20, message: '姓名长度在2到20个字符', trigger: 'blur' },
],
shipperPhone: [
{ required: true, message: '请输入发货人电话', trigger: 'blur' },
{
pattern: /^1[3-9]\d{9}$|^0\d{2,3}-?\d{7,8}$/,
message: '请输入正确的手机号或固话如010-12345678',
trigger: 'blur',
},
],
// +
selectedAddress: [
{
required: true,
validator: (_, value, callback) => {
if (!value || value.length !== 3) {
callback(new Error('请选择完整的省市区'));
} else {
callback();
}
},
trigger: 'change',
},
],
detailAddress: [
{ required: true, message: '请输入详细地址', trigger: 'blur' },
{ min: 3, max: 100, message: '地址长度在3到100个字符', trigger: 'blur' },
],
//
consigneeName: [
{ required: true, message: '请输入收货人姓名', trigger: 'blur' },
{ min: 2, max: 20, message: '姓名长度在2到20个字符', trigger: 'blur' },
],
consigneePhone: [
{ required: true, message: '请输入收货人电话', trigger: 'blur' },
{
pattern: /^1[3-9]\d{9}$|^0\d{2,3}-?\d{7,8}$/,
message: '请输入正确的手机号或固话如010-12345678',
trigger: 'blur',
},
],
// +
consigneeArea: [
{
required: true,
validator: (_, value, callback) => {
if (!value || value.length !== 3) {
callback(new Error('请选择完整的省市区'));
} else {
callback();
}
},
trigger: 'change',
},
],
consigneeAddress: [
{ required: true, message: '请输入详细地址', trigger: 'blur' },
{ min: 3, max: 100, message: '地址长度在3到100个字符', trigger: 'blur' },
],
//
goodsName: [
{ required: true, message: '请输入货物名称', trigger: 'blur' },
{ min: 2, max: 50, message: '名称长度在2到50个字符', trigger: 'blur' },
],
goodsType: [{ required: true, message: '请选择货物类型', trigger: 'change' }],
goodsWeight: [
{
required: true,
validator: (_, value, callback) => {
if (!value) {
callback(new Error('请输入货物重量'));
} else if (!/^\d+(\.\d{1,2})?$/.test(value)) {
callback(new Error('请输入有效数字(最多两位小数)'));
} else if (Number(value) <= 0) {
callback(new Error('重量必须大于0'));
} else {
callback();
}
},
trigger: 'blur',
},
],
goodsVolume: [
{
required: true,
validator: (_, value, callback) => {
if (!value) {
callback(new Error('请输入货物体积'));
} else if (value && !/^\d+(\.\d{1,2})?$/.test(value)) {
callback(new Error('请输入有效数字(最多两位小数)'));
} else {
callback();
}
},
trigger: 'blur',
},
],
goodsQuantity: [
{
required: true,
validator: (_, value, callback) => {
if (!value) {
callback(new Error('请输入货物数量'));
} else if (!/^\d+$/.test(value)) {
callback(new Error('请输入正整数'));
} else if (Number(value) <= 0) {
callback(new Error('数量必须大于0'));
} else {
callback();
}
},
trigger: 'blur',
},
],
goodsHeight: [
{
required: true,
validator: (_, value, callback) => {
if (!value) {
callback(new Error('请输入货物高度'));
} else if (value && !/^\d+(\.\d{1,2})?$/.test(value)) {
callback(new Error('请输入有效数字(最多两位小数)'));
} else if (value && Number(value) <= 0) {
callback(new Error('高度必须大于0'));
} else {
callback();
}
},
trigger: 'blur',
},
],
goodsLength: [
{
required: true,
validator: (_, value, callback) => {
if (!value) {
callback(new Error('请输入货物长度'));
} else if (value && !/^\d+(\.\d{1,2})?$/.test(value)) {
callback(new Error('请输入有效数字(最多两位小数)'));
} else if (value && Number(value) <= 0) {
callback(new Error('长度必须大于0'));
} else {
callback();
}
},
trigger: 'blur',
},
],
});
const resetForm = ref({ ...formInline });
//
const cascaderProps = ref({
label: 'areaName', //
value: 'areaCode', //
children: 'areaChildVOS', //
emitPath: true,
expandTrigger: 'hover',
});
//
const addressOptions = ref([]);
const getArea = async () => {
const res = await getRegion();
if (res.code === 200) {
addressOptions.value = res.data;
} else {
ElMessage.error(res.message);
}
};
const goodsList = ref([
{
id: 1,
name: '普通货物',
},
{
id: 2,
name: '特殊货物',
},
{
id: 3,
name: '冷藏货物',
},
]);
const application = async () => {
// await formRef.value.validate();
// ElMessage.success('');
// console.log(formInline);
//
//
router.push({
name: 'logistics-match',
});
@ -111,9 +415,15 @@ const queryDetail = () => {
onMounted(() => {
state.query.id = route.query.id;
// queryDetail();
getArea();
});
</script>
<style lang="scss" scoped>
.warehouse-detail {
border-radius: 14px;
background-color: #fff;
padding: 20px 20px 20px 20px;
}
.title {
text-align: left;
font-size: 18px;
@ -127,76 +437,6 @@ $text-dark: #25bf82; // 深色文字
$text-regular: #606266; //
$border-color: #dcdfe6; //
//
:deep(.custom-inquiry-dialog) {
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
.el-dialog__header {
padding: 20px;
border-bottom: 1px solid #f2f6fc;
.el-dialog__title {
font-size: 18px;
color: $text-dark;
font-weight: 600;
}
}
.el-dialog__body {
padding: 20px 28px;
}
.el-form-item__label {
color: $text-regular;
font-size: 14px;
padding-bottom: 6px;
}
}
.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) {
.el-input__inner {
height: 40px;
line-height: 40px;
border-radius: 4px;
&:focus {
border-color: $primary-color;
}
}
.el-input__suffix {
color: $text-regular;
right: 12px;
}
}
//
:deep(.custom-select-dropdown) {
.el-select-dropdown__item {
color: $text-regular;
&.selected {
color: $primary-color;
}
}
}
//
.dialog-footer {
text-align: right;
@ -220,137 +460,32 @@ $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 {
width: 300px;
height: 300px;
}
.text-gray-500 {
height: 300px;
display: flex;
flex-direction: column;
justify-content: space-between;
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;
.storage-content {
padding: 20px;
border-radius: 14px;
background-color: #fff;
border-radius: 10px;
.storage-image {
width: 100%;
.storage-content-title {
font-size: 26px;
font-weight: bold;
text-align: center;
margin-bottom: 10px;
}
.shipping-custom-title {
font-size: 20px;
font-weight: bold;
text-align: left;
margin: 40px 0 20px -20px;
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
img {
width: 30px;
}
.page-title {
margin-left: 10px;
}
}
}
.mx-auto {
margin-left: auto;
margin-right: auto;
}
.p-4 {
padding: 1rem;
}
.flex {
display: flex;
}
.items-center {
align-items: center;
}
.mb-4 {
margin-bottom: 1rem;
}
.mr-4 {
margin-right: 1rem;
}
.text-green-500 {
color: #25bf82;
}
.text-lg {
font-size: 1.125rem;
text-align: left;
}
.font-bold {
font-weight: 700;
}
.rounded-lg {
border-radius: 0.5rem;
background-color: #f5f5f5;
}
.shadow {
box-shadow:
0 4px 6px -1px rgba(0, 0, 0, 0.1),
0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
.text-xl {
font-size: 24px;
}
.text-gray-600 {
color: #757575;
}
.text-gray-700 {
color: #000000;
font-size: 18px;
}
.text-sm {
font-size: 0.875rem;
}
.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>

View File

@ -8,7 +8,7 @@
<span class="mx-10"> > </span>
<span @click="toBack(-1)">发布需求</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 class="content-custom-title" style="margin-top: 20px">耿马县农业公司</div>
<div style="display: flex">
@ -96,7 +96,7 @@ import { warehouseDetail } from '@/apis/warehouseLogistics.js';
const route = useRoute();
const router = useRouter();
const tab1 = reactive(['全部', '距离最近仓储', '价格最便宜仓储']);
const tab1 = reactive(['全部', '距离最近', '价格最便宜']);
const currentTab1 = ref(0);
const handleTab1Click = (item, index) => {
currentTab1.value = index;
@ -227,7 +227,7 @@ onMounted(() => {
font-size: 18px;
align-items: flex-start;
justify-content: space-between;
// padding: 0 20px;
margin-bottom: 10px;
}
.tabs0 {
padding: 0;
@ -299,6 +299,7 @@ onMounted(() => {
font-size: 18px;
font-weight: bold;
text-align: left;
margin-top: 10px;
margin-bottom: 10px;
.highlight {
color: #25bf82;