智慧农业后台管理页面
shuishen
2022-08-02 5d39c1041c0c5094d140623e5fb3ac388b8d2691
src/views/mapPattern/index.vue
@@ -1,5 +1,5 @@
<template>
    <div style="position: relative; height: 100%;">
    <div @click="bodyClick($event)" style="position: relative; height: 100%;">
        <plot-map ref="plotMap" style="position: absolute; width: 100%; height: 100%;"></plot-map>
        <div class="top">
            <div class="logo">
@@ -24,10 +24,10 @@
        </div>
        <div class="farm-plant">
            <div class="title">
                <span>种养品种 · {{ this.page.total }}种</span>
                <span>种养品种 · {{ this.plotPlantBreed.length }}种</span>
            </div>
            <div class="content">
                <div class="list-item" v-for="(item, index) in farmPlantList" :key="index">
                <div class="list-item" v-for="(item, index) in plotPlantBreed" :key="index">
                    <div class="item-img">
                        <img :src="item.url" />
                        <span>{{ item.strainName }}</span>
@@ -42,14 +42,14 @@
                    有轮廓的地块:
                    <span
                        style="font-size: 26px;font-weight: bold;color: #5ABF78;"
                    >{{landIsAreaStatistic[0]}}</span>
                    >{{landIsAreaStatistic.length > 0 ? landIsAreaStatistic[0] : 0}}</span>
                </div>
                <div>
                    无轮廓的地块:
                    <span
                        style="font-size: 26px;font-weight: bold;color: #E3B745;"
                    >{{landIsAreaStatistic[1]}}</span>
                    >{{landIsAreaStatistic.length > 1 ? landIsAreaStatistic[1] : 0}}</span>
                </div>
            </div>
        </div>
@@ -58,12 +58,50 @@
                <span>地块 · {{ this.pageLand.total }}种</span>
            </div>
            <div class="content">
                <div class="list-item" v-for="(item, index) in landList" :key="index">
                <div
                    class="list-item"
                    v-for="(item, index) in landList"
                    :key="index"
                    @click="setCenter(item)"
                >
                    <div class="item-img">
                        <img :src="item.url" />
                        <span>{{ item.landName }}</span>
                    </div>
                    <div class="item-num">{{ item.landArea }}亩</div>
                </div>
            </div>
        </div>
        <div class="plot-detail-popup" v-show="cPShow" ref="showCP">
            <div class="header">
                <div class="plot-name">
                    <div class="name">{{ currentPlotDetails.landName }}</div>
                    <i class="el-icon-edit-outline" title="编辑地块名称"></i>
                </div>
                <div class="plot-area-type">
                    <div class="l">
                        占地面积:{{ currentPlotDetails.landArea }}{{ currentPlotDetails.dica }}
                        <span
                            class="type"
                        >{{ currentPlotDetails.dic }}</span>
                    </div>
                    <div class="r">
                        进入地块
                        <i class="el-icon-arrow-right"></i>
                    </div>
                </div>
            </div>
            <div class="body">
                <div class="list" v-for="(item, index) in cPPBreed" :key="index">
                    <div class="l">
                        <img :src="item.url" />
                        {{ item.strainName }}
                    </div>
                    <div
                        class="r"
                    >{{ item.createTime }}{{ item.plantingWay == 0 ? "移摘" : item.plantingWay == 1 ? "播种" : "秧苗" }}</div>
                </div>
            </div>
        </div>
@@ -91,10 +129,25 @@
                total: 0,
            },
            farmPlantList: [],
            // 数据合并后的种养品种
            plotPlantBreed: [],
            // 当前地块种养品种
            cPPBreed: [],
            // 当前地块对应弹框
            cPShow: false,
            // 当前点击地块详情
            currentPlotDetails: {},
            plotClickNum: 0,
            landList: [],
            farmInfo: {},
            landAreaInfo: {},
            landIsAreaStatistic: [0, 0],
            landIsAreaStatistic: [],
        }
    },
@@ -126,7 +179,41 @@
                const data = res.data.data
                this.page.total = data.total
                this.farmPlantList = data.records
                let arr = []
                this.farmPlantList.forEach(item => {
                    if (arr.length > 0) {
                        let result = arr.some(it => {
                            if (item.strainName == it.strainName) {
                                it.area += Number(item.area)
                                return true
                            }
                        })
                        if (!result) {
                            arr.push({
                                strainName: item.strainName,
                                area: Number(item.area),
                                url: item.url
                            })
                        }
                    } else {
                        arr.push({
                            strainName: item.strainName,
                            area: Number(item.area),
                            url: item.url
                        })
                    }
                })
                this.plotPlantBreed = arr
                this.loading = false
                // this.selectionClear()
            })
        },
@@ -186,10 +273,48 @@
                console.log(res)
                this.landIsAreaStatistic = res.data.data
            })
        },
        // 地块定位
        setCenter (item) {
            this.$refs.plotMap.setPlotCenter(item.landName)
        },
        plotDetailsPopupShow (params) {
            this.currentPlotDetails = params
            let arr = []
            this.farmPlantList.forEach((item, index) => {
                if (params.id == item.landId) {
                    arr.push(item)
                }
            })
            this.cPPBreed = arr
            this.cPShow = true
        },
        bodyClick (e) {
            if (this.plotClickNum == 0) {
                this.plotClickNum++
                return
            }
            if (this.$refs.showCP) {
                console.log(1)
                let isSelf = this.$refs.showCP.contains(e.target)
                if (!isSelf) {
                    this.plotClickNum = 0
                    this.cPShow = false
                }
            }
        }
    }
}
</script>
<style lang="scss" scope>
.top {
    position: absolute;
@@ -414,6 +539,7 @@
            border-bottom: 1px solid #cccccc;
            flex-flow: row nowrap;
            justify-content: space-between;
            cursor: pointer;
            .item-img {
                margin-left: 5px;
@@ -444,4 +570,81 @@
        }
    }
}
.plot-detail-popup {
    position: fixed;
    top: 50%;
    left: 50%;
    width: 462px;
    height: 262px;
    transform: translate(-50%, -50%);
    z-index: 11;
    background: rgba(255, 255, 255, 0.9);
    border-radius: 8px;
    overflow: hidden;
    .header {
        display: flex;
        flex-direction: column;
        padding: 0 20px;
        height: 80px;
        background: #2cd2a9;
        color: #fff;
        & > div {
            flex: 1;
            display: flex;
            align-items: center;
        }
        .plot-name {
        }
        .plot-area-type {
            justify-content: space-between;
        }
    }
    .body {
        padding: 10px 20px;
        height: calc(100% - 80px);
        background: rgba(0, 0, 0, 0);
        box-sizing: border-box;
        overflow-x: hidden;
        overflow-y: auto;
        .list:first-child {
            margin: 0;
        }
        .list {
            margin-top: 10px;
            padding: 0 10px;
            display: flex;
            justify-content: space-between;
            align-items: center;
            height: 50px;
            background: #fff;
            font-size: 14px;
            .l {
                display: flex;
                align-items: center;
                color: #2cd2a9;
                img {
                    margin-right: 10px;
                    width: 30px;
                    height: 30px;
                }
            }
            .r {
                color: #999;
            }
        }
    }
}
</style>