2025-07-17 15:07:26 +08:00

270 lines
8.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div>
<common>
<template #main>
<el-card style="border-radius: 16px">
<div class="choose">
<div class="searchType">整机类型</div>
<div :class="{ active: chooseMoney === 0 }" class="chooseAll" @click="changeChoose('money', 0)">全部</div>
<div :class="{ active: chooseMoney === 1 }" class="chooseItem" @click="changeChoose('money', 1)">收割机</div>
<div :class="{ active: chooseMoney === 2 }" class="chooseItem" @click="changeChoose('money', 2)">插秧机</div>
<div :class="{ active: chooseMoney === 3 }" class="chooseItem" @click="changeChoose('money', 3)">播种机</div>
<div :class="{ active: chooseMoney === 4 }" class="chooseItem" @click="changeChoose('money', 4)">烘干机</div>
<div :class="{ active: chooseMoney === 5 }" class="chooseItem" @click="changeChoose('money', 5)">喷雾机</div>
<div :class="{ active: chooseMoney === 6 }" class="chooseItem" @click="changeChoose('money', 6)">饲料机</div>
<div :class="{ active: chooseMoney === 7 }" class="chooseItem" @click="changeChoose('money', 7)">拖拉机</div>
<div :class="{ active: chooseMoney === 8 }" class="chooseItem" @click="changeChoose('money', 8)">其他</div>
</div>
<div style="align-items: center" class="choose">
<div class="searchType">地理位置</div>
<div style="margin-left: 20px">
<el-cascader v-model="postArea" style="width: 100%" :props="props" :options="options" @change="handleChange" />
</div>
<div style="margin-left: 20px">
<el-input v-model="address" placeholder="输入详细位置" />
</div>
</div>
<div style="align-items: center" class="choose">
<div class="searchType">用车时间</div>
<div style="margin-left: 20px">
<el-date-picker v-model="value2" type="date" placeholder="开始日期" :size="size" />
</div>
<div style="margin-left: 20px">
<el-date-picker v-model="value3" type="date" placeholder="结束日期" :size="size" />
</div>
</div>
<div style="align-items: center" class="choose">
<div class="searchType">价格区间</div>
<div style="margin-left: 20px">
<el-input v-model="price1" placeholder="最低价格/天" />
</div>
<div style="margin-left: 20px">~</div>
<div style="margin-left: 20px">
<el-input v-model="price2" placeholder="最高价格/天" />
</div>
</div>
</el-card>
<div style="margin-top: 20px">
<el-card shadow="hover" style="border-radius: 16px; margin-top: 10px; background-color: #f5f5f5">
<!-- <h2 style="text-align: left">农业政策</h2> -->
<div style="width: 100%">
<div v-for="(item, index) in tableData" :key="index" class="card-item">
<div style="width: 100%; display: flex; align-items: center; justify-content: center">
<img :src="item.imgPath" alt="" width="200px" style="height: 200px" />
</div>
<div style="width: 100%; display: flex; flex-direction: column; justify-content: space-between; padding: 0 20px">
<div>
<div style="font-size: 16px; font-weight: bold; margin-top: 5px">{{ item.title }}</div>
<div style="font-size: 14px; margin-top: 5px">
{{ item.subtext }}
</div>
<div style="display: flex; justify-content: space-between; margin-top: 5px">
<div style="font-size: 12px">
<text style="color: #25bf82; font-size: 15px; font-weight: bold">{{ item.price }}</text
>/
</div>
<div style="font-size: 12px">可用时间{{ item.time }}</div>
</div>
</div>
<div style="width: 100%; display: flex; justify-content: space-between; margin-top: 5px">
<div style="display: flex; align-items: center">
<img style="width: 20px; height: 20px; border-radius: 100%" src="../../../assets/images/carton.png" alt="" />
<div style="margin-left: 5px">{{ item.name }}</div>
</div>
<el-button style="height: 30px; background-color: #25bf82; color: #ffffff; border-radius: 16px" @click="goDetail(item.id)"
>立即预约</el-button
>
</div>
</div>
</div>
</div>
</el-card>
</div>
</template>
</common>
</div>
</template>
<script setup>
import { ref, onMounted, reactive } from 'vue';
import common from '../components/common.vue';
import { getAssetsFile } from '@/utils/index.js';
import { useRouter } from 'vue-router';
import { informationList } from '@/apis/farmingService.js';
import options from '../../../assets/address.json';
import { ElMessage } from 'element-plus';
const router = useRouter();
let postArea = ref('');
let address = ref('');
let value2 = ref('');
let value3 = ref('');
let price1 = ref('');
let price2 = ref('');
const props = ref({
value: 'label',
});
/* --------------- data --------------- */
// #region
const tableData = ref([
{
id: 1,
title: '东风牌 1204 型拖拉机',
subtext: '拖拉机·广安市岳池县',
price: '1800',
time: '全年',
name: '王师傅',
imgPath: 'http://localhost:9526/sub-operation-service/src/assets/images/1.png',
},
{
id: 2,
title: '久保田 4LZ-5A1 收割机',
subtext: '收割机·广安市武胜县',
price: '2500',
time: '7-9月',
name: '李师傅',
imgPath: 'http://localhost:9526/sub-operation-service/src/assets/images/2.png',
},
{
id: 3,
title: '洋马 VP6D 高速插秧机',
subtext: '插秧机·广安市邻水县',
price: '1600',
time: '4-5月',
name: 'w王师傅',
imgPath: 'http://localhost:9526/sub-operation-service/src/assets/images/3.png',
},
{
id: 4,
title: '约翰迪尔 9B 播种机',
subtext: '播种机·广安市广安区',
price: '1200',
time: '3-4月',
name: '赵师傅',
imgPath: 'http://localhost:9526/sub-operation-service/src/assets/images/2.png',
},
]);
const chooseMoney = ref(0);
const chooseDate = ref(0);
const chooseWay = ref(0);
const chooseUse = ref(0);
const chooseType = ref(0);
const pagination = ref({
total: 0,
page: 1,
size: 10,
});
// #endregion
/* --------------- methods --------------- */
// #region
onMounted(() => {
// queryList();
});
const extractText = (htmlText, maxChars = 80) => {
// 去除 HTML 标签
const cleanText = htmlText.replace(/<[^>]+>/g, '');
// 去除多余空格和换行
const trimmedText = cleanText.replace(/\s+/g, ' ').trim();
// 取前 20 个字
return trimmedText.substring(0, maxChars);
};
const queryList = () => {
informationList({ current: pagination.value.page, size: pagination.value.size }).then((res) => {
if (res.code === 200) {
tableData.value = res.data.records;
for (let i in res.data.records) {
tableData.value[i].content = extractText(res.data.records[i].content);
if (tableData.value[i].content.length > 80) {
tableData.value[i].content += '...';
}
}
}
});
};
const changeChoose = (type, index) => {
switch (type) {
case 'money':
chooseMoney.value = index;
break;
case 'date':
chooseDate.value = index;
break;
case 'way':
chooseWay.value = index;
break;
case 'use':
chooseUse.value = index;
break;
case 'type':
chooseType.value = index;
break;
}
// getList();
};
const goDetail = (id) => {
ElMessage({
message: '功能正在维护中,请稍后点击',
type: 'warning',
});
// router.push('/sub-operation-service/farmService/consult/laborServicesDel?id=' + id);
};
// #endregion
</script>
<style lang="scss" scoped>
.framing_service_content {
margin: 0 auto;
padding: 0 32px;
width: 1200px;
min-height: 600px;
border: 1px solid skyblue;
box-sizing: border-box;
}
.card-item {
border-radius: 10px;
padding: 10px 0;
background-color: #fff;
float: left;
width: 250px;
display: flex;
flex-direction: column;
// justify-content: space-between;
margin: 20px 0;
text-align: left;
margin-left: 30px;
}
.choose {
display: flex;
justify-content: flex-start;
font-size: 18px;
font-weight: 400;
margin-bottom: 20px;
&:last-child {
margin-bottom: 0;
}
.searchType {
color: #999999;
}
.chooseAll {
margin: 0 30px;
cursor: pointer;
}
.chooseItem {
cursor: pointer;
margin-right: 20px;
}
}
.active {
color: #25bf82;
font-weight: bold;
}
</style>