From 83b1f5ccd0c425dc0dfff922347e9ec136bac430 Mon Sep 17 00:00:00 2001
From: guanqb <18720758508@163.com>
Date: Mon, 15 Aug 2022 14:12:45 +0800
Subject: [PATCH] 小程序地图页面
---
src/views/v/index.vue | 639 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 638 insertions(+), 1 deletions(-)
diff --git a/src/views/v/index.vue b/src/views/v/index.vue
index 80f303c..134013b 100644
--- a/src/views/v/index.vue
+++ b/src/views/v/index.vue
@@ -7,9 +7,646 @@
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
- <div></div>
+ <div class="container">
+ <div class="current-header">
+ <div class="hasOutline">
+ 有轮廓的地块:
+ <span
+ class="hasOutline-count"
+ >{{landIsAreaStatistic.length > 0 ? landIsAreaStatistic[0] : 0}}</span>
+ </div>
+ <div class="noOutline">
+ 无轮廓的地块:
+ <span
+ class="noOutline-count"
+ >{{landIsAreaStatistic.length > 1 ? landIsAreaStatistic[1] : 0}}</span>
+ </div>
+ </div>
+ <div class="current-footer" v-show="isShowFooter">
+ <div class="tab-btn">
+ <div>
+ <div :class="{on: zydksb == 'zy'}" @click="choosedk = -1">
+ <div @click="zydksb = 'zy'" class="title">品种</div>
+ <span></span>
+ </div>
+ </div>
+
+ <div>
+ <div :class="{on: zydksb == 'dk'}" @click="choosepz = -1">
+ <div @click="zydksb = 'dk'" class="title">地块</div>
+ <span></span>
+ </div>
+ </div>
+ </div>
+ <div v-show="zydksb == 'zy'" class="list-box">
+ <div class="transverse">
+ <div v-for="(item,index) in plotPlantBreed" :key="index">
+ <div
+ v-if="index < Math.ceil(plotPlantBreed.length/2)"
+ class="item"
+ @click="choosepz = index"
+ :class="{choose: choosepz == index}"
+ >
+ <div class="tupian">
+ <img :src="item.url" alt />
+ </div>
+ <div class="pz-name">{{item.strainName}}</div>
+ </div>
+ </div>
+ </div>
+ <div class="transverse">
+ <div v-for="(item,index) in plotPlantBreed" :key="index">
+ <div
+ v-if="index >= Math.ceil(plotPlantBreed.length/2)"
+ class="item"
+ @click="choosepz = index"
+ :class="{choose: choosepz == index}"
+ >
+ <div class="tupian">
+ <img :src="item.url" alt />
+ </div>
+ <div class="pz-name">{{item.strainName}}</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div v-show="zydksb == 'dk'" class="list-box">
+ <div class="transverse">
+ <div
+ v-for="(item,index) in landList"
+ :key="index"
+ @click="goTODetails(page,item.id)"
+ >
+ <div
+ v-if="index < Math.ceil(landList.length/2)"
+ class="item"
+ @click="choosedk = index"
+ :class="{choose: choosedk == index}"
+ >
+ <div class="tupian">
+ <img :src="item.url" alt />
+ </div>
+ <div class="dk-data">
+ <div class="dk-name">{{item.landName}}</div>
+ <div class="dk-state" :class="{dkstateon:dkState == item.type}">
+ <span v-if="item.type == 1">闲置中</span>
+ <span v-if="item.type == 0">使用中</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="transverse">
+ <div
+ v-for="(item,index) in landList"
+ :key="index"
+ @click="goTODetails(page,item.id)"
+ >
+ <div
+ v-if="index >= Math.ceil(landList.length/2)"
+ class="item"
+ @click="choosedk = index"
+ :class="{choose: choosedk == index}"
+ >
+ <div class="tupian">
+ <img :src="item.url" alt />
+ </div>
+ <div class="dk-data">
+ <div class="dk-name">{{item.landName}}</div>
+ <div class="dk-state" :class="{dkstateon:dkState == item.type}">
+ <span v-if="item.type == 1">闲置中</span>
+ <span v-if="item.type == 0">使用中</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="landDetail" v-show="isShowLandDetails">
+ <div class="landDetail-header">
+ <div class="close" @click="closeLandDetail">
+ <span>×</span>
+ </div>
+ <div class="title">
+ <div class="landName">{{landDetails.landName}}</div>
+ <div class="landContent">
+ <div class="landArea">占地面积:{{landDetails.landSize}}</div>
+ <div class="landtype">{{landDetails.dic}}</div>
+ </div>
+ </div>
+ <div class="inLand">
+ 进入地块
+ <i class="el-icon-arrow-right in-plot"></i>
+ </div>
+ </div>
+ <div class="landDetail-show">
+ <div v-for="(item,index) in farmPlantList" :key="index" class="item">
+ <div class="tupian">
+ <img :src="item.url" alt />
+ </div>
+ <div class="itemContent">
+ <div class="name">{{item.strainName}}</div>
+ <div class="pinzhong">品种:{{item.varieties?item.varieties:'空'}}</div>
+ <div class="time">{{item.transplanTime}}移栽</div>
+ </div>
+ </div>
+ <div v-show="farmPlantList.length == 0" class="landNoUse">该地块暂未使用</div>
+ </div>
+ </div>
+ </div>
</template>
<script>
+import { getLandIsAreaStatistic, getList, getLandList } from "@/api/v/index"
+export default {
+ data () {
+ return {
+ zydksb: 'zy',
+ choosepz: -1,
+ choosedk: -1,
+ dkState: 0,
+ landIsAreaStatistic: [],
+ page: {
+ pageSize: 20,
+ currentPage: 1,
+ total: 0,
+ },
+ pageLand: {
+ pageSize: 20,
+ currentPage: 1,
+ total: 0,
+ },
+ plotPlantBreed: [],
+ landList: [],
+ farmPlantList: [],
+ landDetails: {},
+ isShowLandDetails: false,
+ isShowFooter: true
+ }
+ },
+ created () {
+ // 获取有无轮廓地块数量
+ this.getLandIsAreaStatistic()
+ // 获取农产品列表
+ this.getFarmPlantList(this.page)
+ //获取地块列表
+ this.getLandList(this.pageLand)
+ },
+ methods: {
+ //获取地块轮廓统计信息
+ getLandIsAreaStatistic () {
+ getLandIsAreaStatistic(1).then(res => {
+ this.landIsAreaStatistic = res.data.data
+ })
+ },
+ //获取种养品列表
+ getFarmPlantList (page, params = {}) {
+ params['farmId'] = 1
+ getList(
+ page.currentPage,
+ page.pageSize,
+ Object.assign(params)
+ ).then((res) => {
+ const data = res.data.data
+ this.page.total = data.total
+ this.farmPlantList = data.records
+ console.log('records:', 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
+
+ })
+ },
+ //获取地块列表
+ getLandList (page, params = {}) {
+ params['farmId'] = 1
+ params['tenantId'] = '000000'
+ 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.pageLand.total = data.total
+ this.landList = data.records
+ })
+ },
+ // 获取对应地块农产品
+ goTODetails (page, id, params = {}) {
+ this.isShowFooter = false
+ this.isShowLandDetails = true
+ console.log(page, id)
+ params['farmId'] = 1
+ params['landId'] = id
+ getList(
+ page.currentPage,
+ page.pageSize,
+ Object.assign(params)
+ ).then((res) => {
+ this.farmPlantList = res.data.data.records
+ console.log('records:', this.farmPlantList)
+ })
+ this.landList.forEach(item => {
+ if (item.id == id) {
+ this.landDetails = Object.assign({}, this.landDetails, { landName: item.landName, landSize: item.landArea + item.dica, dic: item.dic })
+ }
+ })
+ },
+ // 关闭按钮
+ closeLandDetail () {
+ this.isShowLandDetails = false
+ this.isShowFooter = true
+ }
+
+
+
+ }
+}
</script>
+<style lang="scss" scoped>
+.container {
+ position: fixed;
+ top: 0;
+ left: 0;
+ background-image: url(https://img.zcool.cn/community/01ab145b840a2ba8012190f26e8bd2.jpg@1280w_1l_2o_100sh.jpg);
+ background-size: 100% 100%;
+ width: 100%;
+ height: 100%;
+ .current-header {
+ display: flex;
+ position: absolute;
+ top: 149px;
+ left: 40px;
+ width: calc(100% - 80px);
+ height: 60px;
+ line-height: 60px;
+
+ box-sizing: border-box;
+ background: rgba(0, 0, 0, 0.5);
+ color: #fff;
+ border-radius: 61px;
+ font-size: 24px;
+
+ & > div {
+ flex: 1;
+ display: flex;
+ justify-content: center;
+ }
+
+ .hasOutline-count {
+ color: #52aa6e;
+ }
+ .noOutline-count {
+ color: #d89d48;
+ }
+ }
+
+ .current-footer {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ height: 435px;
+ background: #2d6d3f;
+ border-radius: 4px 4px 0px 0px;
+ opacity: 0.8;
+
+ .tab-btn {
+ height: 80px;
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
+ border-bottom: 2px solid #1c522d;
+ box-sizing: border-box;
+
+ & > div:first-child {
+ margin-right: 110px;
+ justify-content: flex-end;
+ }
+
+ & > div:last-child {
+ justify-content: flex-start;
+ }
+
+ & > div {
+ flex: 1;
+ display: flex;
+ height: 100%;
+ font-size: 26px;
+ background: #2d6d3f;
+
+ & > div {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ width: 66px;
+ height: 100%;
+ }
+ .title {
+ cursor: pointer;
+ }
+
+ .on {
+ color: #fff;
+
+ span {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 4px;
+ border-radius: 4px;
+ background: #fff;
+ }
+ }
+ }
+ }
+ .list-box {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: calc(100% - 80px);
+ box-sizing: border-box;
+ overflow: scroll;
+ &::-webkit-scrollbar {
+ display: none;
+ }
+
+ .transverse {
+ margin: 30px;
+ flex: 1;
+ display: flex;
+ // flex-wrap: wrap;
+
+ .item {
+ margin-right: 30px;
+ width: 278px;
+ height: 100%;
+ background: rgba(6, 43, 15, 0.3);
+ border-radius: 10px 10px 10px 10px;
+ opacity: 1;
+ border: 1px solid #074818;
+ box-sizing: border-box;
+ padding: 15px;
+ display: flex;
+
+ .pz-name {
+ color: #fff;
+ font-size: 26px;
+ margin-left: 30px;
+ margin-top: 23px;
+ }
+
+ .dk-data {
+ margin-left: 30px;
+ .dk-name {
+ color: #fff;
+ font-size: 26px;
+ font-weight: 700;
+ margin-top: 5px;
+ overflow: hidden;
+ max-width: 140px;
+ text-overflow: ellipsis;
+ }
+ .dk-state {
+ font-size: 24px;
+ color: #89ad8e;
+ margin-top: 11px;
+ }
+ .dkstateon {
+ margin-top: 11px;
+ font-size: 24px;
+ color: #ffff54;
+ }
+ }
+ .tupian {
+ width: 82px;
+ height: 82px;
+ border-radius: 50%;
+ overflow: hidden;
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+ .choose {
+ flex-shrink: 0;
+ width: 278px;
+ height: 100%;
+ background: rgba(6, 43, 15, 0.3);
+ border-radius: 10px 10px 10px 10px;
+ opacity: 1;
+ border: 2px solid #ffffff;
+ box-shadow: inset 0px 0px 30px 1px #ffffff;
+ box-sizing: border-box;
+ padding: 15px;
+ margin-right: 30px;
+ display: flex;
+ }
+ }
+
+ .transverse:first-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+ .landDetail {
+ position: absolute;
+ bottom: 0px;
+ width: 100%;
+ height: 435px;
+ background: #2d6d3f;
+ border-radius: 4px 4px 0px 0px;
+ opacity: 0.8;
+
+ .landDetail-header {
+ width: 100%;
+ height: 120px;
+ display: flex;
+ justify-content: space-between;
+ border-bottom: 2px solid #1c522d;
+ box-sizing: border-box;
+ color: #fff;
+ flex-shrink: 0;
+
+ .close {
+ flex: 1;
+ display: flex;
+ align-items: center;
+
+ span {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-left: 22px;
+ width: 48px;
+ height: 48px;
+ background: rgba(29, 81, 42, 1);
+ font-size: 24px;
+ border-radius: 50%;
+ }
+ }
+ .title {
+ width: 392px;
+ display: flex;
+ flex-direction: column;
+ text-align: center;
+
+ .landName {
+ margin-top: 20px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 38px;
+ font-size: 26px;
+ }
+ .landContent {
+ margin-top: 10px;
+ display: flex;
+ align-items: center;
+ height: 34px;
+ font-size: 24px;
+ opacity: 0.5;
+
+ .landArea {
+ font-size: 24px;
+ // flex: 4;
+ }
+ .landtype {
+ // flex: 1;
+ margin-left: 40px;
+ // width: 48px;
+ padding: 0 18px;
+ height: 33px;
+ line-height: 33px;
+ // opacity: 0.8;
+ background: #0a130c;
+ border-radius: 33px;
+ }
+ }
+ }
+ .inLand {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ font-size: 26px;
+
+ .in-plot {
+ margin-left: 20px;
+ margin-right: 30px;
+ }
+ }
+ }
+
+ .landDetail-show {
+ height: calc(100% - 120px);
+ padding: 30px;
+ display: flex;
+ overflow-x: auto;
+ overflow-y: hidden;
+ box-sizing: border-box;
+
+ &::-webkit-scrollbar {
+ display: none;
+ }
+
+ .item {
+ margin-right: 30px;
+ width: 470px;
+ height: 100%;
+ display: flex;
+ flex-shrink: 0;
+ background: rgba(6, 43, 15, 0.3);
+ border-radius: 10px 10px 10px 10px;
+ opacity: 1;
+ border: 2px solid #074818;
+ box-sizing: border-box;
+ padding: 30px;
+
+ .tupian {
+ width: 160px;
+ height: 160px;
+ border-radius: 50%;
+ overflow: hidden;
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ }
+ .itemContent {
+ margin-left: 40px;
+ color: #fff;
+ flex-direction: column;
+ justify-content: space-between;
+ display: flex;
+ .name {
+ font-size: 26px;
+ }
+ .pinzhong {
+ font-size: 24px;
+ opacity: 0.5;
+ }
+ .time {
+ font-size: 24px;
+ opacity: 0.5;
+ }
+ }
+ }
+
+ .item:nth-last-child(2) {
+ margin-right: 0;
+ }
+
+ .landNoUse {
+ text-align: center;
+ font-size: 40px;
+ margin: 60px 0 0 200px;
+ }
+ }
+ }
+}
+</style>>
+
--
Gitblit v1.9.3