|
@@ -1,36 +1,37 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div class="service-records-page">
|
|
<div class="service-records-page">
|
|
|
<custom-header name="服务记录"></custom-header>
|
|
<custom-header name="服务记录"></custom-header>
|
|
|
- <div class="select-group">
|
|
|
|
|
- <el-select class="select-item" v-model="dateValue" placeholder="Select">
|
|
|
|
|
- <el-option v-for="item in dateOptions" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
|
|
- </el-select>
|
|
|
|
|
- <el-select class="select-item" v-model="areaValue" placeholder="Select">
|
|
|
|
|
- <el-option v-for="item in areaOptions" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
|
|
- </el-select>
|
|
|
|
|
- </div>
|
|
|
|
|
<div class="record-list">
|
|
<div class="record-list">
|
|
|
- <farm-info-card
|
|
|
|
|
- v-for="(item, index) in recordList"
|
|
|
|
|
|
|
+ <div
|
|
|
|
|
+ v-for="(item, index) in renderList"
|
|
|
:key="index"
|
|
:key="index"
|
|
|
- :data="{
|
|
|
|
|
- farmName: item.farmName,
|
|
|
|
|
- area: item.mianji + '亩',
|
|
|
|
|
- variety: item.typeName,
|
|
|
|
|
- address: item.address,
|
|
|
|
|
- serviceCount: item.serviceCount,
|
|
|
|
|
- }"
|
|
|
|
|
- @click="handleItemClick(item)"
|
|
|
|
|
- class="record-item"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ class="record-card"
|
|
|
|
|
+ @click="handleItemClick(item.raw)"
|
|
|
|
|
+ >
|
|
|
|
|
+ <img class="thumb" :src="item.thumb" alt="农场缩略图" @error="handleImgError" />
|
|
|
|
|
+ <div class="card-body">
|
|
|
|
|
+ <div class="card-header">
|
|
|
|
|
+ <div class="title van-ellipsis">{{ item.title }}</div>
|
|
|
|
|
+ <div class="date">2025.05.28</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="line">
|
|
|
|
|
+ <span class="label">农场名称:</span>
|
|
|
|
|
+ <span class="text van-ellipsis">{{ item.farmName }}</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="line">
|
|
|
|
|
+ <span class="label">药肥处方:</span>
|
|
|
|
|
+ <span class="text van-ellipsis">{{ item.prescription }}</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
<script setup>
|
|
<script setup>
|
|
|
-import { ref, onMounted } from "vue";
|
|
|
|
|
|
|
+import { ref, onMounted, computed } from "vue";
|
|
|
import customHeader from "@/components/customHeader.vue";
|
|
import customHeader from "@/components/customHeader.vue";
|
|
|
-import FarmInfoCard from "@/components/pageComponents/FarmInfoCard.vue";
|
|
|
|
|
import { useRouter } from "vue-router";
|
|
import { useRouter } from "vue-router";
|
|
|
|
|
+import defaultThumb from "@/assets/img/home/farm.png";
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
|
|
|
|
|
// 服务记录列表数据
|
|
// 服务记录列表数据
|
|
@@ -43,64 +44,91 @@ onMounted(() => {
|
|
|
const getUserList = async () => {
|
|
const getUserList = async () => {
|
|
|
const { data } = await VE_API.user.userList();
|
|
const { data } = await VE_API.user.userList();
|
|
|
if (data.length) {
|
|
if (data.length) {
|
|
|
- recordList.value = data.filter(item => item.serviceCount != 0);
|
|
|
|
|
|
|
+ recordList.value = data.filter((item) => item.serviceCount != 0);
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
+const formatDate = (dateStr) => {
|
|
|
|
|
+ if (!dateStr) return "--";
|
|
|
|
|
+ const date = new Date(dateStr);
|
|
|
|
|
+ if (Number.isNaN(date.getTime())) return dateStr;
|
|
|
|
|
+ const y = date.getFullYear();
|
|
|
|
|
+ const m = `${date.getMonth() + 1}`.padStart(2, "0");
|
|
|
|
|
+ const d = `${date.getDate()}`.padStart(2, "0");
|
|
|
|
|
+ return `${y}.${m}.${d}`;
|
|
|
|
|
+};
|
|
|
|
|
+const renderList = computed(() =>
|
|
|
|
|
+ recordList.value.map((item) => {
|
|
|
|
|
+ const title = item.workName || item.typeName || item.variety || "农事服务";
|
|
|
|
|
+ const farmName = item.farmName || item.name || "未填写";
|
|
|
|
|
+ const prescription = item.prescription || item.drugPrescription || item.drugName || item.remark || "暂无信息";
|
|
|
|
|
+ const date = formatDate(item.serviceDate || item.planDate || item.updateTime || item.createTime);
|
|
|
|
|
+ const thumb = item.cover || item.imageUrl || item.imgUrl || item.thumb || defaultThumb;
|
|
|
|
|
+ return {
|
|
|
|
|
+ raw: item,
|
|
|
|
|
+ title,
|
|
|
|
|
+ farmName,
|
|
|
|
|
+ prescription,
|
|
|
|
|
+ date,
|
|
|
|
|
+ thumb,
|
|
|
|
|
+ };
|
|
|
|
|
+ })
|
|
|
|
|
+);
|
|
|
// 处理列表项点击
|
|
// 处理列表项点击
|
|
|
const handleItemClick = (data) => {
|
|
const handleItemClick = (data) => {
|
|
|
router.push(`/service_detail?farmId=${data.farmId}`);
|
|
router.push(`/service_detail?farmId=${data.farmId}`);
|
|
|
};
|
|
};
|
|
|
-
|
|
|
|
|
-const dateValue = ref("1");
|
|
|
|
|
-const dateOptions = [
|
|
|
|
|
- { value: "1", label: "农事类型" },
|
|
|
|
|
- { value: "2", label: "2" },
|
|
|
|
|
- { value: "3", label: "3" },
|
|
|
|
|
-];
|
|
|
|
|
-const areaValue = ref("1");
|
|
|
|
|
-const areaOptions = [
|
|
|
|
|
- { value: "1", label: "区域筛选" },
|
|
|
|
|
- { value: "2", label: "2" },
|
|
|
|
|
- { value: "3", label: "3" },
|
|
|
|
|
-];
|
|
|
|
|
|
|
+const handleImgError = (e) => {
|
|
|
|
|
+ e.target.src = defaultThumb;
|
|
|
|
|
+};
|
|
|
</script>
|
|
</script>
|
|
|
<style lang="scss" scoped>
|
|
<style lang="scss" scoped>
|
|
|
.service-records-page {
|
|
.service-records-page {
|
|
|
width: 100%;
|
|
width: 100%;
|
|
|
min-height: 100vh;
|
|
min-height: 100vh;
|
|
|
- background: #f7f7f7;
|
|
|
|
|
- .select-group {
|
|
|
|
|
|
|
+ background: #f5f5f5;
|
|
|
|
|
+ .record-list {
|
|
|
|
|
+ padding: 10px 12px 20px;
|
|
|
display: flex;
|
|
display: flex;
|
|
|
- padding-top: 6px;
|
|
|
|
|
- .select-item {
|
|
|
|
|
- ::v-deep {
|
|
|
|
|
- .el-select__wrapper {
|
|
|
|
|
- text-align: center;
|
|
|
|
|
- gap: 2px;
|
|
|
|
|
- box-shadow: none;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- background: none;
|
|
|
|
|
- }
|
|
|
|
|
- .el-select__selection {
|
|
|
|
|
- flex: none;
|
|
|
|
|
- width: fit-content;
|
|
|
|
|
- }
|
|
|
|
|
- .el-select__placeholder {
|
|
|
|
|
- position: static;
|
|
|
|
|
- transform: none;
|
|
|
|
|
- width: fit-content;
|
|
|
|
|
- color: rgba(0, 0, 0, 0.2);
|
|
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ gap: 14px;
|
|
|
|
|
+ }
|
|
|
|
|
+ .record-card {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ gap: 16px;
|
|
|
|
|
+ padding: 10px;
|
|
|
|
|
+ background: #ffffff;
|
|
|
|
|
+ border-radius: 16px;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ .thumb {
|
|
|
|
|
+ width: 64px;
|
|
|
|
|
+ height: 64px;
|
|
|
|
|
+ border-radius: 8px;
|
|
|
|
|
+ object-fit: cover;
|
|
|
|
|
+ }
|
|
|
|
|
+ .card-body {
|
|
|
|
|
+ width: calc(100% - 64px - 16px);
|
|
|
|
|
+ .card-header {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ .title {
|
|
|
|
|
+ font-size: 16px;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ margin-bottom: 4px;
|
|
|
}
|
|
}
|
|
|
- .el-select__caret {
|
|
|
|
|
- color: rgba(0, 0, 0, 0.2);
|
|
|
|
|
|
|
+ .date {
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ color: #999999;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ .line {
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ color: #666;
|
|
|
|
|
+ }
|
|
|
|
|
+ .label {
|
|
|
|
|
+ color: #bbb;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- .record-list {
|
|
|
|
|
- padding: 6px 12px;
|
|
|
|
|
- height: calc(100vh - 100px);
|
|
|
|
|
- overflow: auto;
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
</style>
|
|
</style>
|