|
@@ -22,7 +22,53 @@
|
|
|
<span class="nav-card__label">{{ t(item.labelKey) }}</span>
|
|
<span class="nav-card__label">{{ t(item.labelKey) }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div v-show="activeNav === 'album'" 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>
|
|
|
|
|
+ </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>
|
|
|
|
|
+ <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 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 class="map-card" @click="goAlbumMap">
|
|
|
<div ref="mapContainer" class="map-container"></div>
|
|
<div ref="mapContainer" class="map-container"></div>
|
|
|
<div class="add-zone-btn" @click.stop="goAddZone">
|
|
<div class="add-zone-btn" @click.stop="goAddZone">
|
|
@@ -62,6 +108,24 @@
|
|
|
</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>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <album-upload-popup v-model:show="showUploadPopup" />
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
@@ -69,11 +133,13 @@
|
|
|
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 } from "@element-plus/icons-vue";
|
|
|
|
|
|
|
+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 FileMap from "./fileMap";
|
|
import FileMap from "./fileMap";
|
|
|
import * as util from "@/common/ol_common.js";
|
|
import * as util from "@/common/ol_common.js";
|
|
|
|
|
+import albumUploadPopup from "./components/albumUploadPopup.vue";
|
|
|
|
|
+import PhenologyTrackTimelineItem from "@/components/pageComponents/PhenologyTrackTimelineItem.vue";
|
|
|
|
|
|
|
|
const { t } = useI18n();
|
|
const { t } = useI18n();
|
|
|
const store = useStore();
|
|
const store = useStore();
|
|
@@ -87,7 +153,7 @@ const defaultAvatar = require("@/assets/img/home/banner.png");
|
|
|
const farmName = ref("");
|
|
const farmName = ref("");
|
|
|
const farmLocation = ref("");
|
|
const farmLocation = ref("");
|
|
|
const circleUrl = ref(defaultAvatar);
|
|
const circleUrl = ref(defaultAvatar);
|
|
|
-const activeNav = ref("album");
|
|
|
|
|
|
|
+const activeNav = ref("patrol");
|
|
|
const mapContainer = ref(null);
|
|
const mapContainer = ref(null);
|
|
|
const fileMap = new FileMap();
|
|
const fileMap = new FileMap();
|
|
|
const markerEls = {};
|
|
const markerEls = {};
|
|
@@ -124,6 +190,41 @@ const albumList = ref([
|
|
|
{ id: 3, name: "", count: 125, cover: defaultCover },
|
|
{ id: 3, name: "", count: 125, cover: defaultCover },
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
|
|
+const reportCover = require("@/assets/img/common/sd-1.jpg");
|
|
|
|
|
+const reportList = ref([
|
|
|
|
|
+ { id: 1, title: "", desc: "", date: "", cover: reportCover },
|
|
|
|
|
+ { id: 2, title: "", desc: "", date: "", cover: require("@/assets/img/common/sd-2.jpg") },
|
|
|
|
|
+ { id: 3, title: "", desc: "", date: "", cover: require("@/assets/img/common/sd-3.jpg") },
|
|
|
|
|
+]);
|
|
|
|
|
+
|
|
|
|
|
+const showUploadPopup = ref(false);
|
|
|
|
|
+const patrolList = ref([
|
|
|
|
|
+ {
|
|
|
|
|
+ id: 1,
|
|
|
|
|
+ theme: "blue",
|
|
|
|
|
+ level: "",
|
|
|
|
|
+ title: "",
|
|
|
|
|
+ subject: "",
|
|
|
|
|
+ issue: "",
|
|
|
|
|
+ icon: require("@/assets/img/report/yc-icon.png"),
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ id: 2,
|
|
|
|
|
+ theme: "blue",
|
|
|
|
|
+ level: "",
|
|
|
|
|
+ title: "",
|
|
|
|
|
+ subject: "",
|
|
|
|
|
+ issue: "",
|
|
|
|
|
+ icon: require("@/assets/img/report/bh-icon.png"),
|
|
|
|
|
+ },
|
|
|
|
|
+]);
|
|
|
|
|
+
|
|
|
|
|
+const cropArchiveList = ref([
|
|
|
|
|
+ { id: 1, date: "2025-04-18", zone_name: "", content: "" },
|
|
|
|
|
+ { id: 2, date: "2025-04-18", zone_name: "", content: "" },
|
|
|
|
|
+ { id: 3, date: "2025-04-10", zone_name: "", content: "" },
|
|
|
|
|
+]);
|
|
|
|
|
+
|
|
|
const setMarkerEl = (id, el) => {
|
|
const setMarkerEl = (id, el) => {
|
|
|
if (el) markerEls[id] = el;
|
|
if (el) markerEls[id] = el;
|
|
|
else delete markerEls[id];
|
|
else delete markerEls[id];
|
|
@@ -183,6 +284,24 @@ const fillMockLabels = () => {
|
|
|
const albumName = t("agriFile.zoneOne");
|
|
const albumName = t("agriFile.zoneOne");
|
|
|
zoneList.value = zoneList.value.map((item) => ({ ...item, name: zoneName }));
|
|
zoneList.value = zoneList.value.map((item) => ({ ...item, name: zoneName }));
|
|
|
albumList.value = albumList.value.map((item) => ({ ...item, name: albumName }));
|
|
albumList.value = albumList.value.map((item) => ({ ...item, name: albumName }));
|
|
|
|
|
+ reportList.value = reportList.value.map((item) => ({
|
|
|
|
|
+ ...item,
|
|
|
|
|
+ title: t("agriFile.reportTitle"),
|
|
|
|
|
+ desc: t("agriFile.reportDesc"),
|
|
|
|
|
+ date: t("agriFile.reportDate"),
|
|
|
|
|
+ }));
|
|
|
|
|
+ patrolList.value = patrolList.value.map((item, index) => ({
|
|
|
|
|
+ ...item,
|
|
|
|
|
+ level: t("agriFile.riskLevel2"),
|
|
|
|
|
+ title: t(index === 0 ? "agriFile.patrolGrowthTitle" : "agriFile.patrolAbnormalTitle", { zone: albumName }),
|
|
|
|
|
+ subject: t("agriFile.patrolSubject"),
|
|
|
|
|
+ issue: t("agriFile.patrolIssue"),
|
|
|
|
|
+ }));
|
|
|
|
|
+ cropArchiveList.value = cropArchiveList.value.map((item, index) => ({
|
|
|
|
|
+ ...item,
|
|
|
|
|
+ zone_name: albumName,
|
|
|
|
|
+ content: t(index % 2 === 0 ? "agriFile.cropArchiveMetric" : "agriFile.cropArchiveAbnormal"),
|
|
|
|
|
+ }));
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const loadFarmInfo = () => {
|
|
const loadFarmInfo = () => {
|
|
@@ -206,6 +325,17 @@ const goAlbumMap = () => {
|
|
|
router.push("/album_map");
|
|
router.push("/album_map");
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+const goGrowthTrack = (item) => {
|
|
|
|
|
+ router.push({
|
|
|
|
|
+ path: "/growth_track",
|
|
|
|
|
+ query: { id: item?.id },
|
|
|
|
|
+ });
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const openUploadPopup = () => {
|
|
|
|
|
+ showUploadPopup.value = true;
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
fillMockLabels();
|
|
fillMockLabels();
|
|
|
loadFarmInfo();
|
|
loadFarmInfo();
|
|
@@ -275,7 +405,7 @@ watch(activeNav, (key) => {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
justify-content: space-around;
|
|
justify-content: space-around;
|
|
|
padding: 10px 10px;
|
|
padding: 10px 10px;
|
|
|
- margin-bottom: 6px;
|
|
|
|
|
|
|
+ margin-bottom: 0;
|
|
|
|
|
|
|
|
.nav-card {
|
|
.nav-card {
|
|
|
position: relative;
|
|
position: relative;
|
|
@@ -316,6 +446,7 @@ watch(activeNav, (key) => {
|
|
|
border-left: 6px solid transparent;
|
|
border-left: 6px solid transparent;
|
|
|
border-right: 6px solid transparent;
|
|
border-right: 6px solid transparent;
|
|
|
border-top: 6px solid #2199F8;
|
|
border-top: 6px solid #2199F8;
|
|
|
|
|
+ z-index: 3;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -488,5 +619,260 @@ watch(activeNav, (key) => {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ .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;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__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;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__desc {
|
|
|
|
|
+ margin-top: 6px;
|
|
|
|
|
+ color: rgba(0, 0, 0, 0.45);
|
|
|
|
|
+ font-size: 13px;
|
|
|
|
|
+ line-height: 20px;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .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;
|
|
|
|
|
+
|
|
|
|
|
+ &: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;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__header {
|
|
|
|
|
+ position: relative;
|
|
|
|
|
+ padding: 10px 10px 18px;
|
|
|
|
|
+ border-radius: 10px 10px 0 0;
|
|
|
|
|
+ background: var(--tracking-header-bg);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__header-row {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ gap: 8px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__header-left {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ min-width: 0;
|
|
|
|
|
+ gap: 6px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__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-icon {
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__title {
|
|
|
|
|
+ min-width: 0;
|
|
|
|
|
+ color: #fff;
|
|
|
|
|
+ font-size: 15px;
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__share {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ flex-shrink: 0;
|
|
|
|
|
+ gap: 2px;
|
|
|
|
|
+ padding: 3px 10px;
|
|
|
|
|
+ border-radius: 16px;
|
|
|
|
|
+ background: #fff;
|
|
|
|
|
+ color: #2199F8;
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__body {
|
|
|
|
|
+ position: relative;
|
|
|
|
|
+ padding: 14px 10px 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%);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__action {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ gap: 8px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__action-main {
|
|
|
|
|
+ min-width: 0;
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__icon {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: 4px;
|
|
|
|
|
+
|
|
|
|
|
+ img {
|
|
|
|
|
+ width: 18px;
|
|
|
|
|
+ height: 16px;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__reason {
|
|
|
|
|
+ color: var(--tracking-primary);
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__issue {
|
|
|
|
|
+ margin-top: 4px;
|
|
|
|
|
+ color: var(--tracking-primary);
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ line-height: 17px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__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 {
|
|
|
|
|
+ margin-top: 16px;
|
|
|
|
|
+ padding: 16px 12px;
|
|
|
|
|
+ border-radius: 12px;
|
|
|
|
|
+ background: #fff;
|
|
|
|
|
+
|
|
|
|
|
+ &__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);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__year {
|
|
|
|
|
+ margin: 4px 0 12px;
|
|
|
|
|
+ color: rgba(0, 0, 0, 0.45);
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
</style>
|
|
</style>
|