|
@@ -9,108 +9,106 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="content-panel">
|
|
<div class="content-panel">
|
|
|
- <div v-show="activeNav === 'patrol'">
|
|
|
|
|
- <div
|
|
|
|
|
- v-for="item in patrolList"
|
|
|
|
|
- :key="item.id"
|
|
|
|
|
- class="tracking-item"
|
|
|
|
|
- :class="`tracking-item--${item.theme}`"
|
|
|
|
|
- @click="goGrowthTrack(item)"
|
|
|
|
|
- >
|
|
|
|
|
- <div class="tracking-item__header">
|
|
|
|
|
- <div class="tracking-item__header-row">
|
|
|
|
|
- <div class="tracking-item__header-left">
|
|
|
|
|
- <span class="tracking-item__level">
|
|
|
|
|
- <el-icon class="tracking-item__level-icon"><Bell /></el-icon>
|
|
|
|
|
- {{ item.level }}
|
|
|
|
|
- </span>
|
|
|
|
|
- <span class="tracking-item__title van-ellipsis">{{ item.title }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="tracking-item__share" @click.stop>
|
|
|
|
|
- <el-icon><Right /></el-icon>
|
|
|
|
|
- <span>{{ t("agriFile.forward") }}</span>
|
|
|
|
|
|
|
+ <div v-show="activeNav === 'patrol'">
|
|
|
|
|
+ <div v-for="item in patrolList" :key="item.id" class="tracking-item"
|
|
|
|
|
+ :class="`tracking-item--${item.theme}`" @click="goGrowthTrack(item)">
|
|
|
|
|
+ <div class="tracking-item__header">
|
|
|
|
|
+ <div class="tracking-item__header-row">
|
|
|
|
|
+ <div class="tracking-item__header-left">
|
|
|
|
|
+ <span class="tracking-item__level">
|
|
|
|
|
+ <el-icon><BellFilled /></el-icon>
|
|
|
|
|
+ {{ item.level }}
|
|
|
|
|
+ </span>
|
|
|
|
|
+ <span class="tracking-item__title van-ellipsis">
|
|
|
|
|
+ {{ item.title }}<span v-if="item.zone" class="tracking-item__zone"> ({{ item.zone }})</span>
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="tracking-item__share" @click.stop>
|
|
|
|
|
+ <Icon size="14" color="#2199F8" name="share" />
|
|
|
|
|
+ <span>{{ t("agriFile.forward") }}</span>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- </div>
|
|
|
|
|
- <div class="tracking-item__body">
|
|
|
|
|
- <div class="tracking-item__action">
|
|
|
|
|
- <div class="tracking-item__action-main">
|
|
|
|
|
- <div class="tracking-item__icon">
|
|
|
|
|
- <img :src="item.icon" alt="" />
|
|
|
|
|
- <span class="tracking-item__reason">{{ item.subject }}</span>
|
|
|
|
|
|
|
+ <div class="tracking-item__body">
|
|
|
|
|
+ <div class="tracking-item__action">
|
|
|
|
|
+ <div class="tracking-item__action-main">
|
|
|
|
|
+ <div class="tracking-item__icon">
|
|
|
|
|
+ <img :src="item.icon" alt="" />
|
|
|
|
|
+ <span class="tracking-item__reason">{{ item.subject }}</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="tracking-item__issue">{{ item.issue }}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="tracking-item__btn" @click.stop="openUploadPopup">
|
|
|
|
|
+ <el-icon>
|
|
|
|
|
+ <Plus />
|
|
|
|
|
+ </el-icon>
|
|
|
|
|
+ <span>{{ t("agriFile.uploadPhoto") }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="tracking-item__issue">{{ item.issue }}</div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="tracking-item__btn" @click.stop="openUploadPopup">
|
|
|
|
|
- <el-icon><Plus /></el-icon>
|
|
|
|
|
- <span>{{ t("agriFile.uploadPhoto") }}</span>
|
|
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- </div>
|
|
|
|
|
- <div class="crop-archive">
|
|
|
|
|
- <div class="crop-archive__title">{{ t("agriFile.cropArchive") }}</div>
|
|
|
|
|
- <div class="crop-archive__year">{{ t("agriFile.yearLabel", { year: 2025 }) }}</div>
|
|
|
|
|
- <PhenologyTrackTimelineItem :list="cropArchiveList" />
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div v-show="activeNav === 'album'">
|
|
|
|
|
- <div class="map-card" @click="goAlbumMap">
|
|
|
|
|
- <div ref="mapContainer" class="map-container"></div>
|
|
|
|
|
- <div class="add-zone-btn" @click.stop="goAddZone">
|
|
|
|
|
- <el-icon>
|
|
|
|
|
- <Plus />
|
|
|
|
|
- </el-icon>
|
|
|
|
|
- <span>{{ t("agriFile.addZone") }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div v-for="item in zoneList" :key="item.id" :ref="(el) => setMarkerEl(item.id, el)"
|
|
|
|
|
- class="zone-marker">
|
|
|
|
|
- <div class="zone-marker__label">{{ item.name }}</div>
|
|
|
|
|
- <div class="zone-marker__thumb">
|
|
|
|
|
- <img :src="item.cover" alt="" />
|
|
|
|
|
- <span class="zone-marker__badge">{{ item.count }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="zone-marker__arrow"></div>
|
|
|
|
|
|
|
+ <div class="crop-archive">
|
|
|
|
|
+ <div class="crop-archive__title">{{ t("agriFile.cropArchive") }}</div>
|
|
|
|
|
+ <PhenologyTrackTimelineItem :list="cropArchiveList" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="album-grid">
|
|
|
|
|
- <div class="album-add">
|
|
|
|
|
- <el-icon class="album-add__icon">
|
|
|
|
|
- <Plus />
|
|
|
|
|
- </el-icon>
|
|
|
|
|
- <span>{{ t("agriFile.addAlbum") }}</span>
|
|
|
|
|
|
|
+ <div v-show="activeNav === 'album'">
|
|
|
|
|
+ <div class="map-card" @click="goAlbumMap">
|
|
|
|
|
+ <div ref="mapContainer" class="map-container"></div>
|
|
|
|
|
+ <div class="add-zone-btn" @click.stop="goAddZone">
|
|
|
|
|
+ <el-icon>
|
|
|
|
|
+ <Plus />
|
|
|
|
|
+ </el-icon>
|
|
|
|
|
+ <span>{{ t("agriFile.addZone") }}</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div v-for="item in zoneList" :key="item.id" :ref="(el) => setMarkerEl(item.id, el)"
|
|
|
|
|
+ class="zone-marker">
|
|
|
|
|
+ <div class="zone-marker__label">{{ item.name }}</div>
|
|
|
|
|
+ <div class="zone-marker__thumb">
|
|
|
|
|
+ <img :src="item.cover" alt="" />
|
|
|
|
|
+ <span class="zone-marker__badge">{{ item.count }}</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="zone-marker__arrow"></div>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div v-for="item in albumList" :key="item.id" class="album-card">
|
|
|
|
|
- <div class="album-card__cover">
|
|
|
|
|
- <img :src="item.cover" alt="" />
|
|
|
|
|
- <span class="album-card__count">{{ t("agriFile.photoCount", { count: item.count }) }}</span>
|
|
|
|
|
- <div class="album-card__add">
|
|
|
|
|
- <el-icon>
|
|
|
|
|
- <Plus />
|
|
|
|
|
- </el-icon>
|
|
|
|
|
|
|
+ <div class="album-grid">
|
|
|
|
|
+ <div class="album-add">
|
|
|
|
|
+ <el-icon class="album-add__icon">
|
|
|
|
|
+ <Plus />
|
|
|
|
|
+ </el-icon>
|
|
|
|
|
+ <span>{{ t("agriFile.addAlbum") }}</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div v-for="item in albumList" :key="item.id" class="album-card">
|
|
|
|
|
+ <div class="album-card__cover">
|
|
|
|
|
+ <img :src="item.cover" alt="" />
|
|
|
|
|
+ <span class="album-card__count">{{ t("agriFile.photoCount", { count: item.count }) }}</span>
|
|
|
|
|
+ <div class="album-card__add">
|
|
|
|
|
+ <el-icon>
|
|
|
|
|
+ <Plus />
|
|
|
|
|
+ </el-icon>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+ <div class="album-card__name">{{ item.name }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="album-card__name">{{ item.name }}</div>
|
|
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- </div>
|
|
|
|
|
- <div v-show="activeNav === 'report'">
|
|
|
|
|
- <div v-for="item in reportList" :key="item.id" class="report-card">
|
|
|
|
|
- <div class="report-card__cover">
|
|
|
|
|
- <img :src="item.cover" alt="" />
|
|
|
|
|
- <span class="report-card__date">{{ item.date }}</span>
|
|
|
|
|
- <span class="report-card__status">
|
|
|
|
|
- <i class="report-card__dot"></i>
|
|
|
|
|
- {{ t("agriFile.reportUpdate") }}
|
|
|
|
|
- </span>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="report-card__body">
|
|
|
|
|
- <div class="report-card__title">{{ item.title }}</div>
|
|
|
|
|
- <div class="report-card__desc">{{ item.desc }}</div>
|
|
|
|
|
|
|
+ <div v-show="activeNav === 'report'">
|
|
|
|
|
+ <div v-for="item in reportList" :key="item.id" class="report-card">
|
|
|
|
|
+ <div class="report-card__cover">
|
|
|
|
|
+ <img :src="item.cover" alt="" />
|
|
|
|
|
+ <span class="report-card__date">{{ item.date }}</span>
|
|
|
|
|
+ <span class="report-card__status">
|
|
|
|
|
+ <i class="report-card__dot"></i>
|
|
|
|
|
+ {{ t("agriFile.reportUpdate") }}
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="report-card__body">
|
|
|
|
|
+ <div class="report-card__title">{{ item.title }}</div>
|
|
|
|
|
+ <div class="report-card__desc">{{ item.desc }}</div>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- </div>
|
|
|
|
|
<album-upload-popup v-model:show="showUploadPopup" />
|
|
<album-upload-popup v-model:show="showUploadPopup" />
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
@@ -119,9 +117,9 @@
|
|
|
import { computed, nextTick, onActivated, onBeforeUnmount, onMounted, ref, watch } from "vue";
|
|
import { computed, nextTick, onActivated, onBeforeUnmount, onMounted, ref, watch } from "vue";
|
|
|
import { useStore } from "vuex";
|
|
import { useStore } from "vuex";
|
|
|
import { useRouter } from "vue-router";
|
|
import { useRouter } from "vue-router";
|
|
|
-import { Switch, Plus, Bell, Right } from "@element-plus/icons-vue";
|
|
|
|
|
import Overlay from "ol/Overlay";
|
|
import Overlay from "ol/Overlay";
|
|
|
import { useI18n } from "@/i18n";
|
|
import { useI18n } from "@/i18n";
|
|
|
|
|
+import { Icon } from 'vant';
|
|
|
import FileMap from "./fileMap";
|
|
import FileMap from "./fileMap";
|
|
|
import * as util from "@/common/ol_common.js";
|
|
import * as util from "@/common/ol_common.js";
|
|
|
import farmHeader from "@/components/farmHeader.vue";
|
|
import farmHeader from "@/components/farmHeader.vue";
|
|
@@ -184,21 +182,23 @@ const showUploadPopup = ref(false);
|
|
|
const patrolList = ref([
|
|
const patrolList = ref([
|
|
|
{
|
|
{
|
|
|
id: 1,
|
|
id: 1,
|
|
|
|
|
+ type: "growth",
|
|
|
theme: "blue",
|
|
theme: "blue",
|
|
|
level: "",
|
|
level: "",
|
|
|
title: "",
|
|
title: "",
|
|
|
subject: "",
|
|
subject: "",
|
|
|
issue: "",
|
|
issue: "",
|
|
|
- icon: require("@/assets/img/report/yc-icon.png"),
|
|
|
|
|
|
|
+ icon: require("@/assets/img/report/wh-icon.png"),
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
id: 2,
|
|
id: 2,
|
|
|
|
|
+ type: "abnormal",
|
|
|
theme: "blue",
|
|
theme: "blue",
|
|
|
level: "",
|
|
level: "",
|
|
|
title: "",
|
|
title: "",
|
|
|
subject: "",
|
|
subject: "",
|
|
|
issue: "",
|
|
issue: "",
|
|
|
- icon: require("@/assets/img/report/bh-icon.png"),
|
|
|
|
|
|
|
+ icon: require("@/assets/img/report/wh-icon.png"),
|
|
|
},
|
|
},
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
@@ -276,7 +276,8 @@ const fillMockLabels = () => {
|
|
|
patrolList.value = patrolList.value.map((item, index) => ({
|
|
patrolList.value = patrolList.value.map((item, index) => ({
|
|
|
...item,
|
|
...item,
|
|
|
level: t("agriFile.riskLevel2"),
|
|
level: t("agriFile.riskLevel2"),
|
|
|
- title: t(index === 0 ? "agriFile.patrolGrowthTitle" : "agriFile.patrolAbnormalTitle", { zone: albumName }),
|
|
|
|
|
|
|
+ title: t(index === 0 ? "agriFile.patrolGrowthTitle" : "agriFile.patrolAbnormalTitle"),
|
|
|
|
|
+ zone: albumName,
|
|
|
subject: t("agriFile.patrolSubject"),
|
|
subject: t("agriFile.patrolSubject"),
|
|
|
issue: t("agriFile.patrolIssue"),
|
|
issue: t("agriFile.patrolIssue"),
|
|
|
}));
|
|
}));
|
|
@@ -298,7 +299,7 @@ const goAlbumMap = () => {
|
|
|
const goGrowthTrack = (item) => {
|
|
const goGrowthTrack = (item) => {
|
|
|
router.push({
|
|
router.push({
|
|
|
path: "/growth_track",
|
|
path: "/growth_track",
|
|
|
- query: { id: item?.id },
|
|
|
|
|
|
|
+ query: { id: item?.id, type: item?.type || "growth" },
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -339,7 +340,7 @@ watch(activeNav, (key) => {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
justify-content: space-around;
|
|
justify-content: space-around;
|
|
|
padding: 10px 10px;
|
|
padding: 10px 10px;
|
|
|
- margin-bottom: 0;
|
|
|
|
|
|
|
+ margin-bottom: 10px;
|
|
|
|
|
|
|
|
.nav-card {
|
|
.nav-card {
|
|
|
position: relative;
|
|
position: relative;
|
|
@@ -461,352 +462,323 @@ watch(activeNav, (key) => {
|
|
|
border-top: 6px solid #fff;
|
|
border-top: 6px solid #fff;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .add-zone-btn {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- right: 5px;
|
|
|
|
|
- bottom: 10px;
|
|
|
|
|
- z-index: 5;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- gap: 2px;
|
|
|
|
|
- padding: 5px 10px;
|
|
|
|
|
- border-radius: 4px;
|
|
|
|
|
- background: #fff;
|
|
|
|
|
- color: #2199F8;
|
|
|
|
|
- font-weight: 500;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .album-grid {
|
|
|
|
|
- display: grid;
|
|
|
|
|
- grid-template-columns: 1fr 1fr;
|
|
|
|
|
- gap: 16px;
|
|
|
|
|
- margin-top: 16px;
|
|
|
|
|
- box-sizing: border-box;
|
|
|
|
|
|
|
|
|
|
- .album-add {
|
|
|
|
|
- align-self: start;
|
|
|
|
|
|
|
+ .add-zone-btn {
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ right: 5px;
|
|
|
|
|
+ bottom: 10px;
|
|
|
|
|
+ z-index: 5;
|
|
|
display: flex;
|
|
display: flex;
|
|
|
- flex-direction: column;
|
|
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
- justify-content: center;
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- aspect-ratio: 1;
|
|
|
|
|
- border-radius: 5px;
|
|
|
|
|
- background: #F5F5F7;
|
|
|
|
|
- color: #969494;
|
|
|
|
|
- font-size: 16px;
|
|
|
|
|
|
|
+ gap: 2px;
|
|
|
|
|
+ padding: 5px 10px;
|
|
|
|
|
+ border-radius: 4px;
|
|
|
|
|
+ background: #fff;
|
|
|
|
|
+ color: #2199F8;
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- &__icon {
|
|
|
|
|
- margin-bottom: 6px;
|
|
|
|
|
- font-size: 20px;
|
|
|
|
|
|
|
+ .album-grid {
|
|
|
|
|
+ display: grid;
|
|
|
|
|
+ grid-template-columns: 1fr 1fr;
|
|
|
|
|
+ gap: 16px;
|
|
|
|
|
+ margin-top: 16px;
|
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
|
+
|
|
|
|
|
+ .album-add {
|
|
|
|
|
+ align-self: start;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ aspect-ratio: 1;
|
|
|
|
|
+ border-radius: 5px;
|
|
|
|
|
+ background: #F5F5F7;
|
|
|
|
|
+ color: #969494;
|
|
|
|
|
+ font-size: 16px;
|
|
|
|
|
+
|
|
|
|
|
+ &__icon {
|
|
|
|
|
+ margin-bottom: 6px;
|
|
|
|
|
+ font-size: 20px;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .album-card {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+
|
|
|
|
|
+ &__cover {
|
|
|
|
|
+ position: relative;
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ aspect-ratio: 1;
|
|
|
|
|
+
|
|
|
|
|
+ img {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ height: 100%;
|
|
|
|
|
+ object-fit: cover;
|
|
|
|
|
+ border-radius: 6px;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__count {
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ top: 1px;
|
|
|
|
|
+ right: 0;
|
|
|
|
|
+ padding: 1px 5px;
|
|
|
|
|
+ border-radius: 0 5px 0 5px;
|
|
|
|
|
+ background: rgba(0, 0, 0, 0.4);
|
|
|
|
|
+ backdrop-filter: blur(4px);
|
|
|
|
|
+ color: #fff;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__add {
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ right: 8px;
|
|
|
|
|
+ bottom: 8px;
|
|
|
|
|
+ z-index: 1;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ width: 44px;
|
|
|
|
|
+ height: 44px;
|
|
|
|
|
+ border-radius: 50%;
|
|
|
|
|
+ background: #2199F8;
|
|
|
|
|
+ color: #fff;
|
|
|
|
|
+ font-size: 20px;
|
|
|
|
|
+ box-shadow: 0 2px 8px rgba(33, 153, 248, 0.35);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__name {
|
|
|
|
|
+ margin-top: 10px;
|
|
|
|
|
+ color: #1F1F1F;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- .album-card {
|
|
|
|
|
- width: 100%;
|
|
|
|
|
|
|
+ .report-card {
|
|
|
|
|
+ margin-bottom: 10px;
|
|
|
|
|
+ border-radius: 8px;
|
|
|
|
|
+ background: #fff;
|
|
|
|
|
+
|
|
|
|
|
+ &:last-child {
|
|
|
|
|
+ margin-bottom: 0;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
&__cover {
|
|
&__cover {
|
|
|
position: relative;
|
|
position: relative;
|
|
|
width: 100%;
|
|
width: 100%;
|
|
|
- aspect-ratio: 1;
|
|
|
|
|
|
|
+ height: 158px;
|
|
|
|
|
+
|
|
|
img {
|
|
img {
|
|
|
|
|
+ display: block;
|
|
|
width: 100%;
|
|
width: 100%;
|
|
|
height: 100%;
|
|
height: 100%;
|
|
|
object-fit: cover;
|
|
object-fit: cover;
|
|
|
- border-radius: 6px;
|
|
|
|
|
|
|
+ border-radius: 5px;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- &__count {
|
|
|
|
|
|
|
+ &__date {
|
|
|
position: absolute;
|
|
position: absolute;
|
|
|
- top: 1px;
|
|
|
|
|
- right: 0;
|
|
|
|
|
- padding: 1px 5px;
|
|
|
|
|
- border-radius: 0 5px 0 5px;
|
|
|
|
|
- background: rgba(0, 0, 0, 0.4);
|
|
|
|
|
|
|
+ top: 0;
|
|
|
|
|
+ padding: 5px 12px;
|
|
|
|
|
+ border-radius: 4px;
|
|
|
|
|
+ background: rgba(0, 0, 0, 0.45);
|
|
|
backdrop-filter: blur(4px);
|
|
backdrop-filter: blur(4px);
|
|
|
color: #fff;
|
|
color: #fff;
|
|
|
|
|
+ font-size: 16px;
|
|
|
|
|
+ border-radius: 5px 0 5px 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- &__add {
|
|
|
|
|
|
|
+ &__status {
|
|
|
position: absolute;
|
|
position: absolute;
|
|
|
- right: 8px;
|
|
|
|
|
- bottom: 8px;
|
|
|
|
|
- z-index: 1;
|
|
|
|
|
|
|
+ top: 10px;
|
|
|
|
|
+ right: 0;
|
|
|
display: flex;
|
|
display: flex;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
- justify-content: center;
|
|
|
|
|
- width: 44px;
|
|
|
|
|
- height: 44px;
|
|
|
|
|
- border-radius: 50%;
|
|
|
|
|
- background: #2199F8;
|
|
|
|
|
|
|
+ gap: 4px;
|
|
|
|
|
+ padding: 2px 13px;
|
|
|
|
|
+ border-radius: 20px 0 0 20px;
|
|
|
|
|
+ background: #FF5454;
|
|
|
color: #fff;
|
|
color: #fff;
|
|
|
- font-size: 20px;
|
|
|
|
|
- box-shadow: 0 2px 8px rgba(33, 153, 248, 0.35);
|
|
|
|
|
|
|
+ font-size: 12px;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- &__name {
|
|
|
|
|
- margin-top: 10px;
|
|
|
|
|
- color: #1F1F1F;
|
|
|
|
|
|
|
+ &__dot {
|
|
|
|
|
+ width: 6px;
|
|
|
|
|
+ height: 6px;
|
|
|
|
|
+ border-radius: 50%;
|
|
|
|
|
+ background: #fff;
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .report-card {
|
|
|
|
|
- overflow: hidden;
|
|
|
|
|
- margin-bottom: 12px;
|
|
|
|
|
- border-radius: 12px;
|
|
|
|
|
- background: #fff;
|
|
|
|
|
-
|
|
|
|
|
- &:last-child {
|
|
|
|
|
- margin-bottom: 0;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__cover {
|
|
|
|
|
- position: relative;
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- height: 148px;
|
|
|
|
|
|
|
|
|
|
- img {
|
|
|
|
|
- display: block;
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- height: 100%;
|
|
|
|
|
- object-fit: cover;
|
|
|
|
|
|
|
+ &__body {
|
|
|
|
|
+ padding: 10px;
|
|
|
|
|
+ margin-top: 4px;
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- &__date {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- top: 8px;
|
|
|
|
|
- left: 8px;
|
|
|
|
|
- padding: 2px 8px;
|
|
|
|
|
- border-radius: 4px;
|
|
|
|
|
- background: rgba(0, 0, 0, 0.45);
|
|
|
|
|
- color: #fff;
|
|
|
|
|
- font-size: 12px;
|
|
|
|
|
- line-height: 18px;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__status {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- top: 8px;
|
|
|
|
|
- right: 8px;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- gap: 4px;
|
|
|
|
|
- padding: 2px 8px 2px 6px;
|
|
|
|
|
- border-radius: 20px;
|
|
|
|
|
- background: #FF4D4F;
|
|
|
|
|
- color: #fff;
|
|
|
|
|
- font-size: 12px;
|
|
|
|
|
- line-height: 18px;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__dot {
|
|
|
|
|
- width: 6px;
|
|
|
|
|
- height: 6px;
|
|
|
|
|
- border-radius: 50%;
|
|
|
|
|
- background: #fff;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__body {
|
|
|
|
|
- padding: 10px 12px 12px;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__title {
|
|
|
|
|
- color: #1F1F1F;
|
|
|
|
|
- font-size: 16px;
|
|
|
|
|
- font-weight: 600;
|
|
|
|
|
- line-height: 22px;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ &__title {
|
|
|
|
|
+ font-size: 16px;
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- &__desc {
|
|
|
|
|
- margin-top: 6px;
|
|
|
|
|
- color: rgba(0, 0, 0, 0.45);
|
|
|
|
|
- font-size: 13px;
|
|
|
|
|
- line-height: 20px;
|
|
|
|
|
|
|
+ &__desc {
|
|
|
|
|
+ margin-top: 4px;
|
|
|
|
|
+ color: #9E9B9B;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- .tracking-item {
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- margin-bottom: 12px;
|
|
|
|
|
- border: 1px solid #fff;
|
|
|
|
|
- border-radius: 10px;
|
|
|
|
|
- box-shadow: 0 4px 4px 0 var(--tracking-shadow);
|
|
|
|
|
- cursor: pointer;
|
|
|
|
|
|
|
+ .tracking-item {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ margin-bottom: 16px;
|
|
|
|
|
+ box-shadow: 0px 4px 4px 0px rgba(33, 153, 248, 0.1);
|
|
|
|
|
|
|
|
- &:last-of-type {
|
|
|
|
|
- margin-bottom: 0;
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- &--blue {
|
|
|
|
|
- --tracking-header-bg: linear-gradient(90deg, #5BB8FF 0%, #2199F8 100%);
|
|
|
|
|
- --tracking-primary: #2199f8;
|
|
|
|
|
- --tracking-action-border: rgba(33, 153, 248, 0.2);
|
|
|
|
|
- --tracking-shadow: #2199f81a;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ &:last-of-type {
|
|
|
|
|
+ margin-bottom: 0;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- &__header {
|
|
|
|
|
- position: relative;
|
|
|
|
|
- padding: 10px 10px 18px;
|
|
|
|
|
- border-radius: 10px 10px 0 0;
|
|
|
|
|
- background: var(--tracking-header-bg);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ &__header {
|
|
|
|
|
+ position: relative;
|
|
|
|
|
+ padding: 10px 10px 20px;
|
|
|
|
|
+ border-radius: 10px 10px 0 0;
|
|
|
|
|
+ background: linear-gradient(180deg, #86CAFF 0%, #2199F8 48.5%);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- &__header-row {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- justify-content: space-between;
|
|
|
|
|
- gap: 8px;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ &__header-row {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- &__header-left {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- min-width: 0;
|
|
|
|
|
- gap: 6px;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ &__header-left {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: 5px;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- &__level {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- flex-shrink: 0;
|
|
|
|
|
- gap: 2px;
|
|
|
|
|
- padding: 1px 8px;
|
|
|
|
|
- border-radius: 20px;
|
|
|
|
|
- background: #fff;
|
|
|
|
|
- color: #FF6A6A;
|
|
|
|
|
- font-size: 12px;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ &__level {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: 4px;
|
|
|
|
|
+ padding: 1px 4px;
|
|
|
|
|
+ border-radius: 2px;
|
|
|
|
|
+ background: #fff;
|
|
|
|
|
+ color: #FF6A6A;
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- &__level-icon {
|
|
|
|
|
- font-size: 12px;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ &__title {
|
|
|
|
|
+ color: #fff;
|
|
|
|
|
+ font-size: 16px;
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- &__title {
|
|
|
|
|
- min-width: 0;
|
|
|
|
|
- color: #fff;
|
|
|
|
|
- font-size: 15px;
|
|
|
|
|
- font-weight: 500;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ &__zone {
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- &__share {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- flex-shrink: 0;
|
|
|
|
|
- gap: 2px;
|
|
|
|
|
- padding: 3px 10px;
|
|
|
|
|
- border-radius: 16px;
|
|
|
|
|
- background: #fff;
|
|
|
|
|
- color: #2199F8;
|
|
|
|
|
- font-size: 12px;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ &__share {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: 4px;
|
|
|
|
|
+ padding: 2px 10px;
|
|
|
|
|
+ border-radius: 25px;
|
|
|
|
|
+ background: #fff;
|
|
|
|
|
+ color: #2199F8;
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- &__body {
|
|
|
|
|
- position: relative;
|
|
|
|
|
- padding: 14px 10px 10px;
|
|
|
|
|
- margin-top: -8px;
|
|
|
|
|
- border-radius: 10px;
|
|
|
|
|
- background: #fff;
|
|
|
|
|
|
|
+ &__body {
|
|
|
|
|
+ position: relative;
|
|
|
|
|
+ padding: 10px;
|
|
|
|
|
+ margin-top: -8px;
|
|
|
|
|
+ border-radius: 10px;
|
|
|
|
|
+ background: #fff;
|
|
|
|
|
|
|
|
- &::before {
|
|
|
|
|
- content: "";
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- top: -7px;
|
|
|
|
|
- left: 50%;
|
|
|
|
|
- width: 0;
|
|
|
|
|
- height: 0;
|
|
|
|
|
- border-left: 7px solid transparent;
|
|
|
|
|
- border-right: 7px solid transparent;
|
|
|
|
|
- border-bottom: 7px solid #fff;
|
|
|
|
|
- transform: translateX(-50%);
|
|
|
|
|
|
|
+ &::before {
|
|
|
|
|
+ content: "";
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ top: -7px;
|
|
|
|
|
+ left: 21%;
|
|
|
|
|
+ width: 0;
|
|
|
|
|
+ height: 0;
|
|
|
|
|
+ border-left: 7px solid transparent;
|
|
|
|
|
+ border-right: 7px solid transparent;
|
|
|
|
|
+ border-bottom: 7px solid #fff;
|
|
|
|
|
+ transform: translateX(-50%);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- &__action {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- justify-content: space-between;
|
|
|
|
|
- gap: 8px;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ &__action {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ border: 1px solid rgba(33, 153, 248, 0.2);
|
|
|
|
|
+ border-radius: 6px;
|
|
|
|
|
+ padding: 8px;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- &__action-main {
|
|
|
|
|
- min-width: 0;
|
|
|
|
|
- flex: 1;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ &__icon {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: 5px;
|
|
|
|
|
|
|
|
- &__icon {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- gap: 4px;
|
|
|
|
|
|
|
+ img {
|
|
|
|
|
+ width: 18px;
|
|
|
|
|
+ height: 16px;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- img {
|
|
|
|
|
- width: 18px;
|
|
|
|
|
- height: 16px;
|
|
|
|
|
|
|
+ &__reason {
|
|
|
|
|
+ color: #2199f8;
|
|
|
|
|
+ font-weight: 500;
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- &__reason {
|
|
|
|
|
- color: var(--tracking-primary);
|
|
|
|
|
- font-weight: 500;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ &__issue {
|
|
|
|
|
+ margin-top: 2px;
|
|
|
|
|
+ color: #2199f8;
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- &__issue {
|
|
|
|
|
- margin-top: 4px;
|
|
|
|
|
- color: var(--tracking-primary);
|
|
|
|
|
- font-size: 12px;
|
|
|
|
|
- line-height: 17px;
|
|
|
|
|
|
|
+ &__btn {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: 2px;
|
|
|
|
|
+ padding: 7px 10px;
|
|
|
|
|
+ border-radius: 5px;
|
|
|
|
|
+ background: #2199f8;
|
|
|
|
|
+ color: #fff;
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- &__btn {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- flex-shrink: 0;
|
|
|
|
|
- gap: 2px;
|
|
|
|
|
- padding: 8px 10px;
|
|
|
|
|
- border-radius: 6px;
|
|
|
|
|
- background: var(--tracking-primary);
|
|
|
|
|
- color: #fff;
|
|
|
|
|
- font-size: 13px;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ .crop-archive {
|
|
|
|
|
+ padding: 10px;
|
|
|
|
|
+ border-radius: 10px;
|
|
|
|
|
+ background: #fff;
|
|
|
|
|
|
|
|
- .crop-archive {
|
|
|
|
|
- margin-top: 16px;
|
|
|
|
|
- padding: 16px 12px;
|
|
|
|
|
- border-radius: 12px;
|
|
|
|
|
- background: #fff;
|
|
|
|
|
|
|
+ &__title {
|
|
|
|
|
+ position: relative;
|
|
|
|
|
+ display: inline-block;
|
|
|
|
|
+ z-index: 1;
|
|
|
|
|
+ font-size: 16px;
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+ margin-bottom: 5px;
|
|
|
|
|
|
|
|
- &__title {
|
|
|
|
|
- position: relative;
|
|
|
|
|
- display: inline-block;
|
|
|
|
|
- z-index: 1;
|
|
|
|
|
- color: #1F1F1F;
|
|
|
|
|
- font-size: 16px;
|
|
|
|
|
- font-weight: 600;
|
|
|
|
|
- line-height: 22px;
|
|
|
|
|
-
|
|
|
|
|
- &::after {
|
|
|
|
|
- content: "";
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- left: 0;
|
|
|
|
|
- bottom: 2px;
|
|
|
|
|
- z-index: -1;
|
|
|
|
|
- width: 2em;
|
|
|
|
|
- height: 6px;
|
|
|
|
|
- border-radius: 2px;
|
|
|
|
|
- background: rgba(91, 184, 255, 0.55);
|
|
|
|
|
|
|
+ &::after {
|
|
|
|
|
+ content: "";
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ left: 0;
|
|
|
|
|
+ bottom: 2px;
|
|
|
|
|
+ z-index: -1;
|
|
|
|
|
+ width: 90px;
|
|
|
|
|
+ height: 6px;
|
|
|
|
|
+ border-radius: 25px;
|
|
|
|
|
+ background: linear-gradient(90deg, #2199f8 0%, rgba(255, 255, 255, 0.37) 100%);
|
|
|
|
|
+ opacity: 0.4;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- &__year {
|
|
|
|
|
- margin: 4px 0 12px;
|
|
|
|
|
- color: rgba(0, 0, 0, 0.45);
|
|
|
|
|
- font-size: 12px;
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
</style>
|
|
</style>
|