智慧农业后台管理页面
guoshilong
2022-08-01 f44b83b64c4c2b21d8deea7705a4e861dec87148
src/views/mapPattern/index.vue
@@ -1,12 +1,447 @@
<template>
    <div></div>
    <div style="position: relative; height: 100%;">
        <plot-map ref="plotMap" style="position: absolute; width: 100%; height: 100%;"></plot-map>
        <div class="top">
            <div class="logo">
                <img src="../../../public/mg.png" />
            </div>
            <div class="farm-info">
                <div class="farm-name">
                    <span>{{ farmInfo.farmName }}</span>
                </div>
                <div class="farm-area">
                    <span>地块总面积:</span>
                    <span style="font-size: 16px;font-weight: bold;">&nbsp;{{landAreaInfo.zarea}}亩</span>
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    <span>在田面积:</span>
                    <span style="font-size: 16px;font-weight: bold;">&nbsp;{{landAreaInfo.sarea}}亩</span>
                </div>
            </div>
            <div class="out" @click="goToBack">
                <img src="../../../public/img/out.png" />
                <span>&nbsp;&nbsp;返回</span>
            </div>
        </div>
        <div class="farm-plant">
            <div class="title">
                <span>种养品种 · {{ this.page.total }}种</span>
            </div>
            <div class="content">
                <div class="list-item" v-for="(item, index) in farmPlantList" :key="index">
                    <div class="item-img">
                        <img :src="item.url" />
                        <span>{{ item.strainName }}</span>
                    </div>
                    <div class="item-num">{{ item.area }}亩</div>
                </div>
            </div>
        </div>
        <div class="land-info">
            <div class="content">
                <div>
                    有轮廓的地块:
                    <span
                        style="font-size: 26px;font-weight: bold;color: #5ABF78;"
                    >{{landIsAreaStatistic[0]}}</span>
                </div>
                <div>
                    无轮廓的地块:
                    <span
                        style="font-size: 26px;font-weight: bold;color: #E3B745;"
                    >{{landIsAreaStatistic[1]}}</span>
                </div>
            </div>
        </div>
        <div class="farm-land">
            <div class="title">
                <span>地块 · {{ this.pageLand.total }}种</span>
            </div>
            <div class="content">
                <div class="list-item" v-for="(item, index) in landList" :key="index">
                    <div class="item-img">
                        <img :src="item.url" />
                        <span>{{ item.landName }}</span>
                    </div>
                    <div class="item-num">{{ item.landArea }}亩</div>
                </div>
            </div>
        </div>
    </div>
</template>
<script>
import { mapGetters } from "vuex"
import { getList } from "@/api/farmplant/farmplant"
import { getList as getLandList, selectCount, getLandIsAreaStatistic } from "@/api/land/land"
import { getDetails } from "@/api/farm/farm"
export default {
    components: {
    },
    data () {
        return {
            page: {
                pageSize: 10,
                currentPage: 1,
                total: 0,
            },
            pageLand: {
                pageSize: 10,
                currentPage: 1,
                total: 0,
            },
            farmPlantList: [],
            landList: [],
            farmInfo: {},
            landAreaInfo: {},
            landIsAreaStatistic: [0, 0],
        }
    },
    computed: {
        ...mapGetters(["userInfo"]),
    },
    created () {
        //获取种样品列表
        this.getFarmPlantList(this.page)
        //获取地块列表
        this.getLandList(this.pageLand)
        //获取农场信息
        this.getFarmInfo()
        //获取统计面积信息
        this.getLandCount()
        //获取地块轮廓统计信息
        this.getLandIsAreaStatistic()
    },
    methods: {
        //获取种养品列表
        getFarmPlantList (page, params = {}) {
            params['farmId'] = this.userInfo.farmId
            this.loading = true
            getList(
                page.currentPage,
                page.pageSize,
                Object.assign(params)
            ).then((res) => {
                const data = res.data.data
                this.page.total = data.total
                this.farmPlantList = data.records
                this.loading = false
                // this.selectionClear()
            })
        },
        //获取地块列表
        getLandList (page, params = {}) {
            params['farmId'] = this.userInfo.farmId
            params['tenantId'] = this.userInfo.tenant_id
            this.loading = true
            getLandList(
                page.currentPage,
                page.pageSize,
                Object.assign(params)
            ).then((res) => {
                const data = res.data.data
                data.records.forEach(item => {
                    if (item.landRange != '' || item.landRange != null) {
                        item.landRange = item.landRange.replace(/POLYGON\(\(/g, '')
                        item.landRange = item.landRange.replace(/\)\)/g, '')
                        const arr = item.landRange.split(',')
                        var brr = []
                        arr.forEach(it => {
                            brr.push(it.split(' '))
                        })
                        this.$refs.plotMap.addPlotPolygon(brr, item)
                    }
                })
                this.pageLand.total = data.total
                this.landList = data.records
                this.loading = false
                // this.selectionClear()
            })
        },
        //返回上一页
        goToBack () {
            this.$router.go(-1)
        },
        //获取农场信息
        getFarmInfo () {
            var that = this
            getDetails(this.userInfo.farmId).then(res => {
                that.farmInfo = res.data.data
            })
        },
        //获取统计面积信息
        getLandCount () {
            selectCount(this.userInfo.farmId).then(res => {
                this.landAreaInfo = res.data.data
            })
        },
        //获取地块轮廓统计信息
        getLandIsAreaStatistic () {
            getLandIsAreaStatistic(this.userInfo.farmId).then(res => {
                console.log(res)
                this.landIsAreaStatistic = res.data.data
            })
        }
    }
}
</script>
<style lang="scss" scope>
.top {
    position: absolute;
    top: 0;
    width: 100%;
    height: 80px;
    background: rgba(0, 0, 0, 0.5);
    z-index: 9;
<style>
</style>
    .logo {
        position: absolute;
        left: 36px;
        top: 12px;
        img {
            height: 55px;
        }
    }
    .farm-info {
        height: 100%;
        width: 100%;
        .farm-name {
            width: 100%;
            height: 33px;
            font-size: 25px;
            font-weight: bold;
            color: #5abf78;
            text-align: center;
            padding-top: 13px;
        }
        .farm-area {
            width: 100%;
            height: 19px;
            font-size: 14px;
            font-weight: 400;
            color: #ffffff;
            text-align: center;
            padding-top: 6px;
        }
    }
    .out {
        width: 136px;
        height: 33px;
        line-height: 33px;
        background: rgba(236, 95, 89, 0.8);
        border-radius: 4px 4px 4px 4px;
        opacity: 1;
        border: 1px solid #ec5f59;
        position: absolute;
        top: 24px;
        right: 33px;
        text-align: center;
        cursor: pointer;
        img {
            width: 12px;
            height: 18px;
            position: relative;
            top: 4px;
        }
        span {
            font-size: 14px;
            color: #ffffff;
            font-weight: 400;
        }
    }
}
.land-info {
    width: 100%;
    position: absolute;
    top: 112px;
    .content {
        display: flex;
        align-items: center;
        justify-content: space-between;
        margin: auto;
        padding: 0 40px;
        width: 431px;
        height: 56px;
        background: rgba(0, 0, 0, 0.5);
        border-radius: 28px 28px 28px 28px;
        font-size: 16px;
        font-weight: 400;
        color: #ffffff;
        & > div {
            display: flex;
            align-items: center;
        }
    }
}
.farm-plant {
    position: absolute;
    left: 30px;
    top: 242px;
    z-index: 99;
    width: 292px;
    height: 550px;
    .title {
        width: 292px;
        height: 50px;
        background: #5abf78;
        border-radius: 4px 4px 0px 0px;
        opacity: 1;
        line-height: 50px;
        font-size: 17px;
        font-weight: bold;
        color: #ffffff;
        span {
            margin-left: 20px;
        }
    }
    .content {
        width: 292px;
        height: calc(100% - 50px);
        background: rgba(8, 85, 30, 0.9);
        // height: 500px;
        border-radius: 4px 4px 0px 0px;
        opacity: 0.9;
        padding-bottom: 30px;
        overflow-x: hidden;
        overflow-y: auto;
        .list-item {
            width: 252px;
            margin: auto;
            display: flex;
            height: 64px;
            line-height: 64px;
            border-bottom: 1px solid #cccccc;
            flex-flow: row nowrap;
            justify-content: space-between;
            .item-img {
                margin-left: 5px;
                display: flex;
                img {
                    margin-top: 12px;
                    width: 40px;
                    height: 40px;
                    background: #2389ef;
                    border-radius: 84px 84px 84px 84px;
                    opacity: 1;
                }
                span {
                    margin-left: 11px;
                    font-size: 14px;
                    font-weight: 400;
                    color: #ffffff;
                }
            }
            .item-num {
                font-size: 14px;
                font-weight: 400;
                color: #ffffff;
            }
        }
    }
}
.farm-land {
    position: absolute;
    right: 30px;
    top: 242px;
    z-index: 99;
    width: 292px;
    height: 550px;
    .title {
        width: 292px;
        height: 50px;
        background: #5abf78;
        border-radius: 4px 4px 0px 0px;
        opacity: 1;
        line-height: 50px;
        font-size: 17px;
        font-weight: bold;
        color: #ffffff;
        span {
            margin-left: 20px;
        }
    }
    .content {
        width: 292px;
        height: calc(100% - 50px);
        background: rgba(8, 85, 30, 0.9);
        // height: 500px;
        border-radius: 4px 4px 0px 0px;
        opacity: 0.9;
        padding-bottom: 30px;
        overflow-x: hidden;
        overflow-y: auto;
        .list-item {
            width: 252px;
            margin: auto;
            display: flex;
            height: 64px;
            line-height: 64px;
            border-bottom: 1px solid #cccccc;
            flex-flow: row nowrap;
            justify-content: space-between;
            .item-img {
                margin-left: 5px;
                display: flex;
                img {
                    margin-top: 12px;
                    width: 40px;
                    height: 40px;
                    background: #2389ef;
                    border-radius: 84px 84px 84px 84px;
                    opacity: 1;
                }
                span {
                    margin-left: 11px;
                    font-size: 14px;
                    font-weight: 400;
                    color: #ffffff;
                }
            }
            .item-num {
                font-size: 14px;
                font-weight: 400;
                color: #ffffff;
            }
        }
    }
}
</style>