|
@@ -21,35 +21,9 @@
|
|
|
<el-icon class="arrow-icon cursor-pointer" color="#141414"
|
|
|
><DArrowLeft
|
|
|
/></el-icon>
|
|
|
- <div class="edit-btn cursor-pointer">编辑</div>
|
|
|
+ <div class="edit-btn cursor-pointer" @click="toFilePage">编辑</div>
|
|
|
</template>
|
|
|
- <div class="file-chart">
|
|
|
- <div
|
|
|
- v-for="(item, index) in fileData"
|
|
|
- :key="index"
|
|
|
- class="item-container"
|
|
|
- >
|
|
|
- <div class="file-label">{{ item.name }}</div>
|
|
|
- <div class="file-bar">
|
|
|
- <div
|
|
|
- v-for="(value, subIndex) in item.data"
|
|
|
- :key="subIndex"
|
|
|
- class="bar-block"
|
|
|
- :class="'bg-'+value.level"
|
|
|
- :style="{ width: computedWidths[index][subIndex] + 'px' }"
|
|
|
- >
|
|
|
- <el-tooltip
|
|
|
- class="tooltip-item"
|
|
|
- effect="light"
|
|
|
- :content="value.tag"
|
|
|
- placement="top"
|
|
|
- >
|
|
|
- <div class="cursor-pointer">{{ value.tag }}</div>
|
|
|
- </el-tooltip>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <file-bar></file-bar>
|
|
|
</chart-box>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -65,14 +39,16 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { onMounted, ref, computed } from "vue";
|
|
|
+import { onMounted, ref } from "vue";
|
|
|
import fnHeader from "@/components/fnHeader.vue";
|
|
|
import chartBox from "@/components/chartBox.vue";
|
|
|
import toolList from "@/components/toolList.vue";
|
|
|
+import fileBar from "@/components/fileBar.vue";
|
|
|
import HomeMap from "./homeMap";
|
|
|
import homePage from "./components/homePage.vue";
|
|
|
import weatherPage from "./components/weatherPage.vue";
|
|
|
import phenologyPage from "./components/phenologyPage.vue";
|
|
|
+import { useRouter } from "vue-router";
|
|
|
const components = {
|
|
|
homePage,
|
|
|
weatherPage,
|
|
@@ -80,6 +56,7 @@ const components = {
|
|
|
};
|
|
|
|
|
|
let homeMap = new HomeMap();
|
|
|
+const router = useRouter();
|
|
|
const mapRef = ref();
|
|
|
onMounted(() => {
|
|
|
let location = "POINT (113.78049350268851 23.419886891845312)";
|
|
@@ -124,48 +101,10 @@ const rightToolList = [
|
|
|
},
|
|
|
];
|
|
|
|
|
|
-const fileData = ref([
|
|
|
- { name: '高产级', data: [
|
|
|
- { value: 325, level: 4, tag: '325棵' },
|
|
|
- { value: 325, level: 3, tag: '325棵' },
|
|
|
- { value: 325, level: 2, tag: '325棵' },
|
|
|
- { value: 325, level: 1, tag: '325棵' },
|
|
|
- ]},
|
|
|
- { name: '稳产级', data: [
|
|
|
- { value: 160, level: 4, tag: '160棵' },
|
|
|
- { value: 170, level: 3, tag: '170棵' },
|
|
|
- { value: 170, level: 2, tag: '170棵' },
|
|
|
- { value: 170, level: 1, tag: '170棵' },
|
|
|
- ]},
|
|
|
- { name: '休养-幼树', data: [
|
|
|
- { value: 380, level: 0, tag: '新嫁接1年 380棵' },
|
|
|
- { value: 330, level: 0, tag: '2年 330棵' },
|
|
|
- { value: 200, level: 0, tag: '3年 200棵' },
|
|
|
- ]},
|
|
|
- { name: '休养-病虫', data: [
|
|
|
- { value: 350, level: 3, tag: '蒂蛀虫 350棵' },
|
|
|
- { value: 350, level: 1, tag: '其他病 350棵' },
|
|
|
- ]},
|
|
|
- { name: '休养-生长', data: [
|
|
|
- { value: 300, level: 2, tag: '花芽 300棵' },
|
|
|
- { value: 280, level: 2, tag: '花穗 280棵' },
|
|
|
- { value: 320, level: 2, tag: '小果 320棵' },
|
|
|
- ]},
|
|
|
-]);
|
|
|
-// 计算所有 data 中 value 属性的总和最大值
|
|
|
-const maxSum = computed(() => {
|
|
|
- return Math.max(...fileData.value.map(item => item.data.reduce((sum, dataPoint) => sum + dataPoint.value, 0)));
|
|
|
-});
|
|
|
-
|
|
|
-// 计算每个 dataPoint 的值在所有 data 中 value 总和最大值中所占的百分比
|
|
|
-const computedWidths = computed(() => {
|
|
|
- const max = maxSum.value;
|
|
|
- return fileData.value.map(item => {
|
|
|
- // 258是右侧容器总宽度
|
|
|
- return item.data.map(dataPoint => ((dataPoint.value / max) * 258).toFixed(0)); // 保留两位小数
|
|
|
- });
|
|
|
-});
|
|
|
-
|
|
|
+// 跳转果园档案
|
|
|
+const toFilePage = () => {
|
|
|
+ router.push('/garden-file')
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
@@ -231,54 +170,6 @@ const computedWidths = computed(() => {
|
|
|
background: #2199f8;
|
|
|
border-radius: 4px;
|
|
|
}
|
|
|
- .file-chart {
|
|
|
- padding: 0 6px;
|
|
|
- height: 100%;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- .item-container {
|
|
|
- display: flex;
|
|
|
- width: 100%;
|
|
|
- color: #FFFFFF;
|
|
|
- margin-bottom: 12px;
|
|
|
- .file-label {
|
|
|
- width: 60px;
|
|
|
- text-align: right;
|
|
|
- font-size: 12px;
|
|
|
- }
|
|
|
- .file-bar {
|
|
|
- width: calc(100% - 56px);
|
|
|
- display: flex;
|
|
|
- padding-left: 6px;
|
|
|
- height: 18px;
|
|
|
- font-size: 10px;
|
|
|
- .bar-block {
|
|
|
- text-align: center;
|
|
|
- border-radius: 0px 4px 4px 0px;
|
|
|
- // border-image: linear-gradient(90deg, rgba(255, 223, 223, 0), rgba(234, 232, 232, 1)) 1 1;
|
|
|
- white-space: nowrap;
|
|
|
- overflow: hidden;
|
|
|
- text-overflow: ellipsis;
|
|
|
- &::before {
|
|
|
- content: "";
|
|
|
- position: absolute;
|
|
|
- top: -2px; /* 边框宽度的一半,且方向相反 */
|
|
|
- left: -2px; /* 边框宽度的一半,且方向相反 */
|
|
|
- right: -2px; /* 边框宽度的一半,且方向相反 */
|
|
|
- bottom: -2px; /* 边框宽度的一半,且方向相反 */
|
|
|
- background-image: linear-gradient(to right, rgba(255, 223, 223, 0), rgba(234, 232, 232, 1)); /* 渐变背景 */
|
|
|
- border-radius: 0px 4px 4px 0px; /* 继承容器的圆角半径 */
|
|
|
- z-index: -1; /* 放在容器内容之下 */
|
|
|
- }
|
|
|
- }
|
|
|
- .bg-0 {
|
|
|
- background-image: linear-gradient(to right, #042921, #0CBA93);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
}
|