ソースを参照

feat:修改飞巡展示页面

wangsisi 2 ヶ月 前
コミット
7ab08597c5

+ 5 - 1
src/api/modules/farm.js

@@ -33,8 +33,12 @@ module.exports = {
         url: config.base_dev_url + "farm/getById?key="+config.mini_key,
         type: "get",
     },
+    // fetchFarmWorkList: {
+    //     url: config.base_dev_url + "farm/farm_work_list?key="+config.mini_key,
+    //     type: "get",
+    // },
     fetchFarmWorkList: {
-        url: config.base_dev_url + "farm/farm_work_list?key="+config.mini_key,
+        url: config.base_url + "farm_work/list",
         type: "get",
     },
     fetchFarmImgs: {

+ 20 - 0
src/api/modules/feixun.js

@@ -0,0 +1,20 @@
+const config = require("../config");
+
+module.exports = {
+    getSteps: {
+        url: config.base_url + "cfg/get",
+        type: "post",
+    },
+    editStep: {
+        url: config.base_url + "cfg/step_edit",
+        type: "get",
+    },
+    editBlueStep: {
+        url: config.base_url + "cfg/blue_step_edit",
+        type: "get",
+    },
+    sampleList: {
+        url: config.base_url + "lz_sample/list",
+        type: "post",
+    },
+};

BIN
src/assets/images/home/gyda-bg.png


BIN
src/assets/images/home/search.png


+ 1 - 1
src/components/charts/options/oneLineOption.js

@@ -111,7 +111,7 @@ export const oneLine = {
                         yAxis: '',
                         symbolOffset: [0, "-50%"],
                         label: {
-                            offset: [0, -15],
+                            offset: [0, -8],
                             backgroundColor: "#FF7219",
                             padding: [0, 8, 0, 8],
                             color: "#fff",

+ 1 - 1
src/components/common/stepBox.vue

@@ -1,5 +1,5 @@
 <template>
-    <div class="step-content" :class="`step-${orderStatus}`">
+    <div class="step-content" :class="`step-${orderStatus}`" v-if="orderStatus>0">
         <div class="step-text t-r">专家</div>
         <div class="step-text b-l">农服</div>
         <div class="step-text b-r">农资</div>

+ 13 - 6
src/components/fnHeader.vue

@@ -55,13 +55,14 @@ const props = defineProps({
     },
 });
 
-const farmVal = ref(sessionStorage.getItem("farmId")*1 || "");
+// const farmVal = ref(sessionStorage.getItem("farmId")*1 || "");
+const farmVal = ref(90263);
 const toggleFarm = (val) => {
     sessionStorage.setItem("farmId", farmVal.value);
-    const curGarden = options.value.filter(item =>item.organId === val)
-    sessionStorage.setItem("point", curGarden[0].wkt);
+    // const curGarden = options.value.filter(item =>item.organId === val)
+    sessionStorage.setItem("point", 'POINT (113.67884027228604 23.511176408307904)');
     eventBus.emit('garden:organId',val)
-    router.push({ name: "Home" });
+    // router.push({ name: "Home" });
 };
 
 function getCurrentFormattedTime(type) {
@@ -96,7 +97,12 @@ function formatTimeToHHmmss(date) {
     return `${hours}.${minutes}.${seconds}`;
 }
 
-const options = ref([]);
+const options = ref([
+    {
+        organId:90263,
+        name:'从化井岗基地'
+    }
+]);
 const userInfo = JSON.parse(sessionStorage.getItem("userinfo"));
 const getGardenList = () => {
     const location = convertPointToArray(userInfo.location);
@@ -113,7 +119,8 @@ const getGardenList = () => {
 const time = ref("");
 const timer = ref(null);
 onMounted(() => {
-    getGardenList();
+    toggleFarm(90263)
+    // getGardenList();
     timer.value = setInterval(() => {
         time.value = getCurrentFormattedTime(new Date());
     }, 1000);

+ 87 - 72
src/components/navigation.vue

@@ -25,7 +25,18 @@
                 {{ item }}
             </el-checkbox>
         </el-checkbox-group>
-        <!-- <div class="btn" @click="toPage">农场确权</div> -->
+        <div class="btn">
+            <span>果树档案</span>
+            <el-switch
+                class="switch"
+                v-model="switchValue"
+                size="large"
+                inline-prompt
+                active-text="开"
+                inactive-text="关"
+                @change="changeValue"
+            />
+        </div>
     </div>
 </template>
 
@@ -35,68 +46,78 @@ import { onMounted, onUnmounted, ref } from "vue";
 import eventBus from "@/api/eventBus";
 const router = useRouter();
 
+const switchValue = ref(false);
+const changeValue = (e) =>{
+    eventBus.emit("handleSwitchValue", e);
+}
+
 const areaId = ref("");
 const options = ref([]);
-eventBus.off('garden:organId', gardenOrganId)
-eventBus.on('garden:organId',gardenOrganId)
-
-const organId = ref(null)
-function gardenOrganId(farmId){
-    organId.value = farmId
-    VE_API.region.list({farmId}).then(res =>{
-        options.value = res.data
-        areaId.value = res.data[0].id
-        eventBus.emit('area:id',{areaId:areaId.value,farmId})
-        sessionStorage.setItem('regionId',areaId.value)
-    })
-}
+eventBus.off("garden:organId", gardenOrganId);
+eventBus.on("garden:organId", gardenOrganId);
 
-const changeSelect = (e) =>{
-    eventBus.emit('area:id',{areaId:areaId.value,farmId:organId.value})
-    sessionStorage.setItem('regionId',e)
+const organId = ref(null);
+function gardenOrganId(farmId) {
+    organId.value = farmId;
+    VE_API.region.list({ farmId }).then((res) => {
+        options.value = res.data;
+        areaId.value = res.data[0].id;
+        eventBus.emit("area:id", { areaId: areaId.value, farmId });
+        sessionStorage.setItem("regionId", areaId.value);
+    });
 }
 
-onMounted(()=>{
-    gardenOrganId(sessionStorage.getItem('farmId')*1)
-    eventBus.on('handleActive',handleActive)
-})
+const changeSelect = (e) => {
+    eventBus.emit("area:id", { areaId: areaId.value, farmId: organId.value });
+    sessionStorage.setItem("regionId", e);
+};
 
-onUnmounted(()=>{
-    eventBus.off('handleActive',handleActive)
-})
+onMounted(() => {
+    gardenOrganId(sessionStorage.getItem("farmId") * 1);
+    eventBus.on("handleActive", handleActive);
+});
 
-const emit = defineEmits(["handleTab","handleTabItem"])
+onUnmounted(() => {
+    eventBus.off("handleActive", handleActive);
+});
+
+const emit = defineEmits(["handleTab", "handleTabItem","handleTabFeiXun"]);
 
 const checkedChildren = ref([]);
 const childrenData = ref([]);
 const handleCheckedChange = (e) => {
-    if(e.length){
-        checkedChildren.value = [e[e.length -1]];
-        emit('handleTabItem',checkedChildren.value[0])
-        eventBus.emit('handleTabItem',checkedChildren.value[0])
+    if (e.length) {
+        checkedChildren.value = [e[e.length - 1]];
+        emit("handleTabItem", checkedChildren.value[0]);
+        eventBus.emit("handleTabItem", checkedChildren.value[0]);
     }
 };
 
-function handleActive({name,key}){
-    childrenData.value = []
-    const arr = list.value[0].filter(item =>item.name===key)
+function handleActive({ name, key }) {
+    childrenData.value = [];
+    const arr = list.value[0].filter((item) => item.name === key);
     active.value = arr[0].id;
-    childrenData.value = arr[0].children
-    checkedChildren.value = [name]
+    childrenData.value = arr[0].children;
+    checkedChildren.value = [name];
 
-    emit('handleTab',{name:arr[0].name,id:active.value,isUpdate:true,params:name})
+    emit("handleTab", { name: arr[0].name, id: active.value, isUpdate: true, params: name });
 }
 
 const active = ref(0);
-const handleTab = ({ id, name,children }) => {
+const curName = ref('')
+const handleTab = ({ id, name, children }) => {
     active.value = id;
-    childrenData.value = []
-    if(children){
+    childrenData.value = [];
+    if (children) {
         childrenData.value = children;
-        checkedChildren.value = [children[0]];
+        checkedChildren.value = [children[1]];
+    }
+    if(name === '处方图'){
+        emit("handleTab", { name, id });
+        eventBus.emit("handleTab", name);
+    }else{
+        emit("handleTabFeiXun", name);
     }
-    emit('handleTab',{name,id})
-    eventBus.emit('handleTab',name)
 };
 
 const list = ref([
@@ -106,29 +127,17 @@ const list = ref([
             id: 0,
         },
         {
-            name: "基本指标",
+            name: "查看遥感信息",
             id: 1,
-            children: ["树高", "冠幅"],
+            children: ["荔枝分布", "地形因子","推测物候期"],
         },
         {
-            name: "物候指标",
+            name: "查看飞巡结果",
             id: 2,
-            children: ["花穗长度", "单树花穗率"],
         },
         {
-            name: "生态指标",
+            name: "精细检测",
             id: 3,
-            children: ["通风率", "清园程度","益草覆盖度"],
-        },
-        {
-            name: "生长指标",
-            id: 4,
-            children: ["生长缓慢", "花量大","花带叶"],
-        },
-        {
-            name: "病虫指标",
-            id: 5,
-            children: ["病害比例", "虫害比例"],
         },
     ],
     [
@@ -153,25 +162,25 @@ const toPage = () => {
     display: flex;
     justify-content: center;
     align-items: center;
-    .select{
+    .select {
         width: 120px;
         height: 50px;
         margin-right: 21px;
-        ::v-deep{
-            .el-select__wrapper{
+        ::v-deep {
+            .el-select__wrapper {
                 height: 100%;
                 background: rgba(0, 0, 0, 0.3);
-                box-shadow: 0 0 0 1px #F7BE5A;
+                box-shadow: 0 0 0 1px #f7be5a;
                 border-radius: 2px;
                 text-align: center;
             }
-            .el-select__placeholder{
-                color: #F7BE5A;
+            .el-select__placeholder {
+                color: #f7be5a;
                 font-size: 20px;
                 font-family: "PangMenZhengDao";
             }
-            .el-select__caret{
-                color: #F7BE5A;
+            .el-select__caret {
+                color: #f7be5a;
                 font-size: 20px;
             }
         }
@@ -234,13 +243,19 @@ const toPage = () => {
     }
 
     .btn {
-        width: 80px;
-        height: 30px;
-        text-align: center;
-        line-height: 28px;
-        border-radius: 5px;
-        cursor: pointer;
-        background: rgba(255, 255, 255, 0.5);
+        border-radius: 8px;
+        display: flex;
+        align-items: center;
+        font-size: 16px;
+        color: rgba(255, 255, 255, 0.8);
+        padding: 7px 12px 9px 12px;
+        font-family: "PangMenZhengDao";
+        background: rgba(35, 35, 35, 0.8);
+        border: 1px solid #555555;
+        margin-left: 12px;
+        .switch {
+            margin-left: 8px;
+        }
     }
 }
 </style>

+ 9 - 9
src/components/static_map_change/Layers.js

@@ -57,10 +57,10 @@ class StaticMapLayers {
             }
             // that.autoTest()
             // 时间轴
-            eventBus.on("weatherTime:changeTime", ({index}) => {
-                this.timeIndex = index
-                this.show(this.layerName)
-            })
+            // eventBus.on("weatherTime:changeTime", ({index}) => {
+            //     this.timeIndex = index
+            //     this.show(this.layerName)
+            // })
         })
     }
 
@@ -72,8 +72,8 @@ class StaticMapLayers {
         this.hideAll()
         let keyText = key+this.timeIndex
         let layer = this.layerData[keyText].layer
-        eventBus.emit("alarmList:changeMapLayer", {legendUrl:layer.layer.get("legend"),
-            colors:layer.layer.get("colors"), labels:layer.layer.get("labels")});
+        // eventBus.emit("alarmList:changeMapLayer", {legendUrl:layer.layer.get("legend"),
+        //     colors:layer.layer.get("colors"), labels:layer.layer.get("labels")});
         layer.show()
         if(isFit && layer.layer.getExtent){
             let extent = layer.layer.getExtent();
@@ -87,13 +87,13 @@ class StaticMapLayers {
         this.layerName = key
         this.hideAll()
         let layer = this.layerData[key].layer
-        eventBus.emit("alarmList:changeMapLayer", {legendUrl:layer.layer.get("legend"),
-            colors:layer.layer.get("colors"), labels:layer.layer.get("labels")});
+        // eventBus.emit("alarmList:changeMapLayer", {legendUrl:layer.layer.get("legend"),
+        //     colors:layer.layer.get("colors"), labels:layer.layer.get("labels")});
         layer.show()
         if(isFit && layer.layer.getExtent){
             let extent = layer.layer.getExtent();
             if(extent && extent[0] != Infinity){
-                layer.mapInstance.fit(extent,{padding:[-200,-200,-200,-200]})
+                layer.mapInstance.fit(extent,{padding:[0,0,0,0]})
             }
         }
     }

+ 2 - 2
src/views/Login.vue

@@ -114,8 +114,8 @@ const onSubmit = () => {
                 res.data["pwd"] = undefined
                 store.commit(`app/${SET_USER_INFO}`, JSON.stringify(res.data));
                 success.value = true;
-                // router.push({ name: "Home" });
-                router.push({ name: "warningHome" });
+                router.push({ name: "Home" });
+                // router.push({ name: "warningHome" });
             }
         } else {
             return;

+ 3 - 3
src/views/home/album/index.vue

@@ -87,15 +87,15 @@
                                                 未触发
                                             </div>
                                             <div
-                                                v-if="card.execute === 2"
+                                                v-if="card.execute === 2 || card.execute === 4"
                                                 class="add-btn unactive"
                                             >
                                                 未激活
                                             </div>
                                             <div v-if="card.execute === 3" class="add-btn">待执行</div>
-                                            <div v-if="card.execute === 4" class="add-btn recheck">
+                                            <!-- <div v-if="card.execute === 4" class="add-btn recheck">
                                                 已完成
-                                            </div>
+                                            </div> -->
                                             <div v-if="card.execute === 5" class="add-btn recheck">
                                                 已复核
                                             </div>

+ 107 - 12
src/views/home/album_compoents/albumCarousel.vue

@@ -1,14 +1,54 @@
 <template>
   <el-dialog
       v-model="dialogVisible"
-      width="60%"
-      height="80%"
+      :width="switchValue?'870px':'60%'"
+      align-center
       class="picture-preview-wrap v-dialog"
       :show-close="false"
-      top="10vh"
       append-to-body
   >
-    <album-carousel-item v-if="images" :farmId="farmId" :images="images" :lock="lock"></album-carousel-item>
+    <album-carousel-item v-if="images&&!switchValue" :farmId="farmId" :images="images" :lock="lock"></album-carousel-item>
+    <div class="card-box" v-if="switchValue">
+      <div class="title">果树编号-2585</div>
+      <div class="content">
+        <div class="base-list content-top">
+          <div class="base-item">
+            <span>{{gerdenObj.pz}}</span>
+            <div>树种</div>
+          </div>
+          <div class="base-item">
+            <span>{{gerdenObj.sgbmj}}m²</span>
+            <div>树冠表面积</div>
+          </div>
+          <div class="base-item">
+            <span>{{gerdenObj.gd}}m</span>
+            <div>高度</div>
+          </div>
+          <div class="base-item">
+            <span>{{gerdenObj.sl}}</span>
+            <div>树龄</div>
+          </div>
+        </div>
+        <div class="base-list content-bottom">
+          <div class="base-item">
+            <span>{{gerdenObj.tfl}}%</span>
+            <div>通风率</div>
+          </div>
+          <div class="base-item">
+            <span>{{gerdenObj.tgl}}%</span>
+            <div>透光率</div>
+          </div>
+          <div class="base-item">
+            <span>{{gerdenObj.cl}}斤</span>
+            <div>产量</div>
+          </div>
+          <div class="base-item">
+            <span>{{gerdenObj.spgl}}%</span>
+            <div>商品果率</div>
+          </div>
+        </div>
+      </div>
+    </div>
   </el-dialog>
 </template>
 
@@ -33,21 +73,76 @@ startDate.setMonth(currentDate.getMonth() - 1);
 // 格式化日期
 const formattedStartDate = dateFormat(startDate, 'YY-mm-dd');
 const formattedEndDate = dateFormat(currentDate, 'YY-mm-dd');
+const switchValue = ref(false)
 
-eventBus.on("click:point",function({farmId,sampleId}){
+const gerdenObj = ref({})
+eventBus.on("click:point",function({farmId,sampleId,data}){
+  gerdenObj.value = data.values_
   let params = {sampleId,farmId}
-  VE_API.miniimage.list(params).then(res => {
-    if(res.code === 0){
-      images.value = res.data
-      dialogVisible.value = true
-    }
-  })
+  dialogVisible.value = true
+  if(!switchValue.value){
+    VE_API.miniimage.list(params).then(res => {
+      if(res.code === 0){
+        images.value = res.data
+      }
+    })
+  }
 })
 
-
+eventBus.on('handleSwitchValue',(e)=>{
+  switchValue.value = e
+})
 
 </script>
 
 <style lang="scss" scoped>
 @import "src/styles/index";
+.card-box{
+  width: 100%;
+  padding: 20px 25px;
+  box-sizing: border-box;
+  background: url('@/assets/images/home/gyda-bg.png') no-repeat center center /100% 100%;
+  .title{
+    font-size: 30px;
+    font-family: "PangMenZhengDao";
+    margin-bottom: 30px;
+    background: linear-gradient(to bottom, #F3C11D, #FFFFFF);
+    -webkit-background-clip: text; /* Safari/Chrome */
+    background-clip: text;
+  
+    /* 3. 隐藏原始文字颜色 */
+    color: transparent;
+  }
+  .content{
+    .content-top{
+      border-radius: 18px 18px 0 0;
+    }
+    .content-bottom{
+      border-radius: 0 0 18px 18px;
+      margin-top: 10px;
+    }
+    .base-list{
+      background: rgba(255, 255, 255, 0.1);
+      display: flex;
+      padding: 20px 0;
+      color: #999999;
+      .base-item{
+        flex: 1;
+        text-align: center;
+        font-size: 25px;
+        span{
+          color: #FFFFFF;
+        }
+      }
+      .base-item + .base-item{
+        border-left: 2px solid rgba(102, 102, 102, 0.42);
+      }
+    }
+  }
+}
+</style>
+<style lang="scss">
+.picture-preview-wrap{
+  background: transparent;
+}
 </style>

+ 112 - 61
src/views/home/components/homePage.vue

@@ -5,17 +5,22 @@
                 <template #title-right>
                     <div class="button" @click="gybg">果园报告</div>
                 </template>
-                <div class="base-wrap">
-                    <div
-                        class="base-item"
-                        v-for="(item, index) in baseData.labels"
-                        :key="index"
-                    >
-                        <div class="label">{{ item }}风险</div>
-                        <div class="value">{{ baseData.valueMaxList[index].toFixed(0)}}<span>%</span></div>
-                    </div>
+                <div class="box-wrap" v-if="stepsValue==='0'">
+                    暂无数据
                 </div>
-                <one-line-chart class="line-chart" :yData="lineYdata" :minData="minData"></one-line-chart>
+                <template v-else>
+                    <div class="base-wrap">
+                        <div
+                            class="base-item"
+                            v-for="(item, index) in baseData.labels"
+                            :key="index"
+                        >
+                            <div class="label">{{ item }}风险</div>
+                            <div class="value">{{ baseData.valueMaxList[index].toFixed(0)}}<span>%</span></div>
+                        </div>
+                    </div>
+                    <one-line-chart class="line-chart" :yData="lineYdata" :minData="minData"></one-line-chart>
+                </template>
             </chart-box>
         </div>
         <div class="chart-item phenology">
@@ -23,13 +28,16 @@
                 <template #title-right>
                     <tabs :list="btnGroup"></tabs>
                 </template>
+                <div class="box-wrap" v-if="stepsValue==='0'">
+                    暂无数据
+                </div>
                 <!-- <bar-chart class="bar-chart" styleName="styleName3" :xData="phenologyXData" :yData="phenologyYData"></bar-chart>
                   <div class="tips box-bg">
                   <div class="text" v-for="item in 3" :key="item">
                     桂味:<span>占比30%,分布在2区、5区</span>
                   </div>
                 </div> -->
-                <div class="box-flex">
+                <div class="box-flex" v-else>
                     <div class="box-card">
                         <div class="box-desc">当前分区无品种信息,请确权</div>
                         <div class="box-button" @click="handlePage">立即确权</div>
@@ -42,17 +50,22 @@
                 <template #title-right>
                     <tabs :list="phenologyObj.btnGroup" keyStr="物候指标" :active="activeKey"></tabs>
                 </template>
-                <bar-chart
-                    class="bar-chart"
-                    styleName="styleName1"
-                    :xData="phenologyObj.xData"
-                    :yData="phenologyObj.yData"
-                ></bar-chart>
-                <div class="tips box-bg">
-                    <div class="text" v-for="(item, index) in phenologyObj.text" :key="index">
-                        {{ item[0] }}:<span>{{ item[1] }}{{ item[2] }},占比{{ item[3] }}%</span>
-                    </div>
+                <div class="box-wrap" v-if="stepsValue==='0'">
+                    暂无数据
                 </div>
+                <template v-else>
+                    <bar-chart
+                        class="bar-chart"
+                        styleName="styleName1"
+                        :xData="phenologyObj.xData"
+                        :yData="phenologyObj.yData"
+                    ></bar-chart>
+                    <div class="tips box-bg">
+                        <div class="text" v-for="(item, index) in phenologyObj.text" :key="index">
+                            {{ item[0] }}:<span>{{ item[1] }}{{ item[2] }},占比{{ item[3] }}%</span>
+                        </div>
+                    </div>
+                </template>
             </chart-box>
         </div>
         <div class="chart-item phenology">
@@ -60,17 +73,22 @@
                 <template #title-right>
                     <tabs :list="diseasesObj.btnGroup" keyStr="病虫指标" :active="activeKey"></tabs>
                 </template>
-                <bar-chart
-                    class="bar-chart"
-                    styleName="styleName1"
-                    :xData="diseasesObj.xData"
-                    :yData="diseasesObj.yData"
-                ></bar-chart>
-                <div class="tips box-bg">
-                    <div class="text" v-for="(item, index) in diseasesObj.text" :key="index">
-                        {{ item[0] }}:<span>{{ item[1] }}{{ item[2] }},占比{{ item[3] }}%</span>
-                    </div>
+                <div class="box-wrap" v-if="stepsValue==='0'">
+                    暂无数据
                 </div>
+                <template v-else>
+                    <bar-chart
+                        class="bar-chart"
+                        styleName="styleName1"
+                        :xData="diseasesObj.xData"
+                        :yData="diseasesObj.yData"
+                    ></bar-chart>
+                    <div class="tips box-bg">
+                        <div class="text" v-for="(item, index) in diseasesObj.text" :key="index">
+                            {{ item[0] }}:<span>{{ item[1] }}{{ item[2] }},占比{{ item[3] }}%</span>
+                        </div>
+                    </div>
+                </template>
             </chart-box>
         </div>
         <div class="chart-item evaluate">
@@ -78,26 +96,31 @@
                 <template #title-right>
                     <tabs :list="growObj.btnGroup" keyStr="生长指标" :active="activeKey"></tabs>
                 </template>
-                <div class="content">
-                    <bar-chart
-                        style="width: 52%"
-                        styleName="styleName1"
-                        :xData="growObj.xData"
-                        :yData="growObj.yData"
-                    ></bar-chart>
-                    <div class="box-bg text" v-html="growObj.content"></div>
+                <div class="box-wrap" v-if="stepsValue==='0'">
+                    暂无数据
                 </div>
-                <div class="text-list box-bg">
-                    <div class="text-item" v-for="(item, index) in growObj.text" :key="index">
-                        <div class="circle"></div>
-                        <div class="txt">
-                            {{ item[0].slice(0, 2) }}占比<span>{{ item[3] }}%</span>
+                <template v-else>
+                    <div class="content">
+                        <bar-chart
+                            style="width: 52%"
+                            styleName="styleName1"
+                            :xData="growObj.xData"
+                            :yData="growObj.yData"
+                        ></bar-chart>
+                        <div class="box-bg text" v-html="growObj.content"></div>
+                    </div>
+                    <div class="text-list box-bg">
+                        <div class="text-item" v-for="(item, index) in growObj.text" :key="index">
+                            <div class="circle"></div>
+                            <div class="txt">
+                                {{ item[0].slice(0, 2) }}占比<span>{{ item[3] }}%</span>
+                            </div>
                         </div>
+                        <!-- <div class="text" v-for="(item,index) in growObj.text" :key="index">
+                {{item[0]}}:<span>{{item[1]}}{{item[2]}},占比{{item[3]}}%</span>
+            </div> -->
                     </div>
-                    <!-- <div class="text" v-for="(item,index) in growObj.text" :key="index">
-            {{item[0]}}:<span>{{item[1]}}{{item[2]}},占比{{item[3]}}%</span>
-          </div> -->
-                </div>
+                </template>
             </chart-box>
         </div>
         <div class="chart-item phenology">
@@ -105,17 +128,22 @@
                 <template #title-right>
                     <tabs :list="ecologyObj.btnGroup" keyStr="生态指标" :active="activeKey"></tabs>
                 </template>
-                <bar-chart
-                    class="bar-chart"
-                    styleName="styleName1"
-                    :xData="ecologyObj.xData"
-                    :yData="ecologyObj.yData"
-                ></bar-chart>
-                <div class="tips box-bg">
-                    <div class="text" v-for="(item, index) in ecologyObj.text" :key="index">
-                        {{ item[0] }}:<span>{{ item[1] }}{{ item[2] }},占比{{ item[3] }}%</span>
-                    </div>
+                <div class="box-wrap" v-if="stepsValue==='0'">
+                    暂无数据
                 </div>
+                <template v-else>
+                    <bar-chart
+                        class="bar-chart"
+                        styleName="styleName1"
+                        :xData="ecologyObj.xData"
+                        :yData="ecologyObj.yData"
+                    ></bar-chart>
+                    <div class="tips box-bg">
+                        <div class="text" v-for="(item, index) in ecologyObj.text" :key="index">
+                            {{ item[0] }}:<span>{{ item[1] }}{{ item[2] }},占比{{ item[3] }}%</span>
+                        </div>
+                    </div>
+                </template>
             </chart-box>
         </div>
     </div>
@@ -155,14 +183,25 @@ onMounted(() => {
     eventBus.on("handleTabItem", handleTabItem);
     eventBus.on("handleActive", handleActive);
     eventBus.on("area:id", areaId);
+    eventBus.on("steps", handleSteps);
 });
 
 onUnmounted(() => {
+    eventBus.off("steps", handleSteps);
     eventBus.off("handleTabItem", handleTabItem);
     eventBus.off("handleActive", handleActive);
     eventBus.off("area:id", areaId);
 });
 
+const stepsValue = ref('0')
+function handleSteps(data){
+    stepsValue.value = data
+    if(data!=='0'){
+        getReoprt(areaIdValue.value, farmIdValue.value);
+        getBaseData()
+    }
+}
+
 const reportData = ref([]);
 
 const curIndex = ref(0);
@@ -209,9 +248,13 @@ function handleData(name) {
     return obj;
 }
 
+const areaIdValue = ref(0)
+const farmIdValue = ref(0)
 function areaId({ areaId, farmId }) {
-    getReoprt(areaId, farmId);
-    getBaseData()
+    areaIdValue.value =  areaId
+    farmIdValue.value =  farmId
+    // getReoprt(areaId, farmId);
+    // getBaseData()
 }
 
 const getReoprt = (areaId, farmId) => {
@@ -230,7 +273,7 @@ const handlePage = () => {
 
 const activeKey = ref("");
 function handleTabItem(e) {
-    activeKey.value = e;
+    // activeKey.value = e;
 }
 
 //基本指标
@@ -277,6 +320,14 @@ const gybg = () => {
         height: calc(100% / 4.15);
         box-sizing: border-box;
         margin-bottom: 10px;
+        .box-wrap{
+            width: 100%;
+            height: 100%;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            font-size: 24px;
+        }
         .box-flex {
             width: 100%;
             height: 100%;

+ 158 - 59
src/views/home/index.vue

@@ -2,7 +2,7 @@
   <div class="base-container no-events">
     <fnHeader showDate></fnHeader>
     <div class="content">
-      <navigation @handleTab="handleTab"></navigation>
+      <navigation @handleTab="handleTab" @handleTabFeiXun="handleTabFeiXun"></navigation>
       <div class="left yes-events">
         <tool-list
           direction="left"
@@ -16,42 +16,15 @@
         </div>
       </div>
       <div class="home-bottom">
-        <time-line class="time-wrap yes-events"></time-line>
-        <img class="fly-icon" src="@/assets/images/home/fly-icon.png" alt="">
-        <!-- <div class="log-box yes-events">
-          <chart-box class="overflow">
-            <template #title-name>
-              <div class="box-name" @click="handleSelectArea">果园日志</div>
-            </template>
-            <div class="log-content">
-              2月13日,共抽样193棵树,拍摄了193张照片,{{indicatorChartData.content}}
-            </div>
-            <div class="chart-wrap">
-              <indicator-chart :key="0 + 'log'" type="feature" :chartData="indicatorChartData"></indicator-chart>
-            </div>
-          </chart-box>
-        </div> -->
-        <!-- <div class="file-box yes-events">
-          <chart-box name="果园档案">
-            <template #title-right>
-              <el-icon class="arrow-icon cursor-pointer" color="#141414"
-                ><DArrowLeft
-              /></el-icon>
-              <div class="edit-btn cursor-pointer" @click="toFilePage">编辑</div>
-            </template>
-            <file-bar></file-bar>
-          </chart-box>
-        </div> -->
+        <!-- <time-line class="time-wrap yes-events"></time-line> -->
+        <!-- <img class="fly-icon" src="@/assets/images/home/fly-icon.png" alt=""> -->
+        <div class="bottom-button" v-show="curName==='查看遥感信息'" @click="handleSetps">生成采样航线</div>
       </div>
       <div class="right yes-events">
         <div class="list">
           <chart-box name="农事列表" arrow="arrow-left" :class="{'list-wrap': rightIndex===0}">
             <template v-if="rightIndex===0">
               <album></album>
-              <!-- <img class="tabs" src="@/assets/images/home/ns-tabs.png" alt="">
-              <div class="img-box">
-                <img @click="handleAct(item)" v-for="item in 2" :key="item" :src="require(`@/assets/images/home/0${act<=2&&act==item?item+'-act':item}.png`)" alt="">
-              </div> -->
             </template>
             <template v-if="rightIndex===1">
               <div class="img-box1">
@@ -81,7 +54,7 @@
       </div>
 
       <!-- 图例 -->
-      <img class="legend yes-events" src="@/assets/images/home/legend.png" alt="">
+      <!-- <img class="legend yes-events" src="@/assets/images/home/legend.png" alt=""> -->
     </div>
   </div>
   <div ref="mapRef" class="bottom-map"></div>
@@ -91,8 +64,21 @@
     :imageUrl="urls"
     :curIndex="urlsIndex"
   ></PicturePreview>
+    <!--  -->
     <album-carousel></album-carousel>
+    <!-- 果园报告 -->
   <PdfDialog title="果园报告" ></PdfDialog>
+
+  <el-dialog
+    v-model="dialogVisible"
+    width="450"
+    align-center
+  >
+    <div class="dialog-box" style="text-align: center;">
+      <img style="width:65px;height:65px;margin-bottom:12px" src="@/assets/images/home/search.png" alt="">
+      <div style="font-size:25px">正在分析中...</div>
+    </div>
+  </el-dialog>
 </template>
 
 <script setup>
@@ -103,6 +89,7 @@ import PicturePreview from "@/components/PicturePreview.vue";
 import fnHeader from "@/components/fnHeader.vue";
 import navigation from "@/components/navigation.vue";
 import chartBox from "@/components/chartBox.vue";
+import StaticMapLayers from "@/components/static_map_change/Layers.js"
 import toolList from "@/components/toolList.vue";
 import fileBar from "@/components/fileBar.vue";
 import HomeMap from "./map/homeMap";
@@ -141,12 +128,14 @@ let regionLayer = null
 let blueRegionLayer = null
 const router = useRouter();
 const mapRef = ref();
+let staticMapLayers = null;
 onMounted(() => {
-  homeMap.initMap("POINT(113.61448114737868 23.585550924763083)", mapRef.value);
+  homeMap.initMap("POINT (113.67884027228604 23.511176408307904)", mapRef.value);
   // homeMap.initMap(store.getters.userinfo.location, mapRef.value);
   // regionLayer = new RegionLayer(homeMap.kmap.map, currentFarm, currentRegion)
-  samplePointLayer = new SamplePointLayer(homeMap.kmap.map)
+  samplePointLayer = new SamplePointLayer(homeMap.kmap.map,homeMap.kmap)
   blueRegionLayer = new BlueRegionLayer(homeMap.kmap)
+  staticMapLayers = new StaticMapLayers(homeMap.kmap);
 
   getYellow()
   // getFarmLog()
@@ -155,6 +144,21 @@ onMounted(() => {
   eventBus.on('area:id',areaId)
   //选项卡子项事件监听
   eventBus.on('handleTabItem',handleTabItem)
+
+  // editStep(0)
+  // eventBus.emit('steps','0')
+  VE_API.feixun.getSteps({"k": "step",resultType:"json"}).then(res =>{
+    if(res.data.step!=='0'){
+      setTimeout(()=>{
+        getSteps('all')
+      },500)
+    }else{
+      setTimeout(()=>{
+        editStep(res.data)
+      },500)
+      eventBus.emit('steps','0')
+    }
+  })
 });
 
 onUnmounted(()=>{
@@ -162,18 +166,77 @@ onUnmounted(()=>{
   eventBus.off('handleTabItem',handleTabItem)
 })
 
+const getSteps = (type) =>{
+  VE_API.feixun.getSteps({"k": "step",resultType:"json"}).then(res =>{
+    eventBus.emit('steps:value',{data:res.data})
+    if(type=='area'){
+      getBlueRegionList(()=>{},res.data.blue_step)
+      return 
+    }
+    if(type=='all'){
+        
+        getBlueRegionList(()=>{},res.data.blue_step)
+        samplePointLayer.initData(organId.value,regionId.value)
+      return
+    }
+    if(type=='point'){
+      samplePointLayer.initData(organId.value,regionId.value)
+      return 
+    }
+  })
+}
+
+const dialogVisible = ref(false)
+
+const curName = ref('异常总览')
+function handleTabFeiXun(name){
+  staticMapLayers.hideAll()
+  curName.value = name
+  if(name==='查看飞巡结果'){
+    editStep(1,2,'area')
+    eventBus.emit('steps','1')
+    getSteps('all')
+  }
+  if(name==='精细检测'){
+    editStep(2,2,'point')
+  }
+  if(name==='查看遥感信息'){
+    handleTabItem('地形因子')
+  }
+}
+
+const handleSetps = () =>{
+  dialogVisible.value = true
+  setTimeout(()=>{
+    dialogVisible.value = false
+    staticMapLayers.hideAll()
+    editStep(1,1,'all')
+  },1000)
+}
+
+async function editStep(step,blue_step,type){
+    await VE_API.feixun.editStep({step,blue_step})
+    getSteps(type)
+  // VE_API.feixun.editStep({step}).then(res =>{
+  //   getSteps(type)
+  // })
+}
+
 const blueList = ref([])
-const getBlueRegionList = (callback) =>{
-  VE_API.farm.blueRegionList({farmId:organId.value,regionId:regionId.value}).then(({ data }) => {
+const getBlueRegionList = (callback,step) =>{
+  VE_API.farm.blueRegionList({farmId:organId.value,selectAll:1}).then(({ data }) => {
       blueList.value = data.map(item =>{
-        let color = 'rgba(255, 255, 255, 0.5)' //失效区域
-        if(item.status===2){ //物候期风险
-          color = 'rgba(63, 255, 53, 0.5)'
+        let color = 'rgba(255, 255, 255, 0)' //失效区域
+        if(item.stepStatus===1){ //物候期风险
+          color = 'rgba(255, 255, 255, 0.5)'
+        }
+        if(item.stepStatus===0){ //物候期风险
+          color = 'rgba(255, 255, 255, 0.5)'
         }
-        if(item.status===3){ //生长异常
+        if(item.stepStatus===2){ //生长异常
           color = 'rgba(255, 252, 61, 0.5)'
         }
-        if(item.status===4){ //病虫害
+        if(item.stepStatus===3){ //病虫害
           color = 'rgba(255, 73, 73, 0.5)'
         }
         return {
@@ -181,7 +244,7 @@ const getBlueRegionList = (callback) =>{
           color
         }
       })
-      blueRegionLayer.initData(blueList.value)
+      blueRegionLayer.initData(blueList.value,'',step!=='0'?true:false)
       callback && callback()
   });
 }
@@ -195,11 +258,11 @@ const handleTab = async ({name,id,isUpdate,params}) =>{
     tabName.value = name
     tabId.value = id
     if(id===0){
-      getBlueRegionList(()=>{
-        if(isUpdate){
-          handleTabItem(params)
-        }
-      })
+      // getBlueRegionList(()=>{
+      //   if(isUpdate){
+      //     handleTabItem(params)
+      //   }
+      // })
     }else{
       getFarmIndexReport((()=>{
         if(isUpdate){
@@ -213,24 +276,49 @@ const handleTab = async ({name,id,isUpdate,params}) =>{
 function areaId({areaId,farmId}){
   organId.value = farmId
   regionId.value = areaId
-  samplePointLayer.initData(farmId,areaId)
+  setTimeout(()=>{
+    samplePointLayer.initData(farmId,areaId)
+  },350)
   if(tabId.value===0){
-    getBlueRegionList()
+    // getBlueRegionList()
+    // VE_API.feixun.getSteps({"k": "step",}).then(res =>{
+    //   if(res.data!=='0'){
+    //     setTimeout(()=>{
+    //       getSteps('all')
+    //     },450)
+    //   }else{
+    //     setTimeout(()=>{
+    //       editStep(0)
+    //     },450)
+    //     eventBus.emit('steps','0')
+    //   }
+    // })
   }else{
     getFarmIndexReport()
   }
 }
 
 //选项卡子项事件监听
-const handleTabItem = (e) =>{
-  if(reportData.value.blueZoneList){
-    const index = reportData.value.blueZoneList.findIndex(item => item.key===e)
-    let arr = []
-    if(reportData.value.blueZoneList.length){
-      arr = blueListConvert(reportData.value.blueZoneList[index].obj,index)
-    }
-    blueRegionLayer.initData(arr,'87')
+const handleTabItem = (name) =>{
+  let text = '井岗荔枝分布'
+  if(name==='地形因子'){
+      text = '井岗地形因子'
+  }else if(name==='推测物候期'){
+      text = '井岗推测物候期'
   }
+  if(text!==''){
+    staticMapLayers.showSingle(text,true)
+  }else{
+    staticMapLayers.hideAll()
+  }
+  // if(reportData.value.blueZoneList){
+  //   const index = reportData.value.blueZoneList.findIndex(item => item.key===e)
+  //   let arr = []
+  //   if(reportData.value.blueZoneList.length){
+  //     arr = blueListConvert(reportData.value.blueZoneList[index].obj,index)
+  //   }
+  //   blueRegionLayer.initData(arr,'87')
+  // }
 }
 
 const reportData = ref({})
@@ -274,7 +362,6 @@ const indicatorChartData = ref({})
 const blueZone = ref('ws0y1meyhxp4')
 
 const getFarmLog = () =>{
-  console.log('getfarmlog')
   const params = {
     id: null,
     farmId: 766,
@@ -598,9 +685,21 @@ const toFilePage = () => {
     .home-bottom {
       display: flex;
       align-items: flex-end;
+      justify-content: flex-end;
       width: calc(100% -  60px - 430px * 2 );
-      height: 152px;
+      // height: 152px;
       align-self: flex-end;
+      .bottom-button{
+        background: linear-gradient(0deg,#FFD887,#ED9E1E);
+        border: 1px solid rgba(255, 255, 255, 0.61);
+        border-radius: 12px;
+        font-size: 20px;
+        font-family: "PangMenZhengDao";
+        padding: 15px 39px 16px 39px;
+        color: #000;
+        cursor: pointer;
+        pointer-events: auto;
+      }
       .time-wrap{
         height: 85px;
       }

+ 3 - 3
src/views/home/map/blueRegionLayer.js

@@ -18,18 +18,18 @@ class BlueRegionLayer {
         this.kmap = map
     }
 
-    initData(arr,opacity='') {
+    initData(arr,opacity='',isShow = true) {
         if (this.blueRegionLayer) {
             this.blueRegionLayer.source.clear();
         }
-        if(arr.length>0){
+        if(arr.length>0 && isShow){
             for (let item of arr) {
                 let feature = newAreaFeature(item);
                 let strokeColor = "#FFFFFF";
                 feature.setStyle(this.vectorStyle.getPolygonStyle(item.color+opacity, strokeColor, 1));
                 this.blueRegionLayer.addFeature(feature);
             }
-            this.kmap.fit(this.blueRegionLayer.source.getExtent(), {padding:[100,100,100,100]});
+            // this.kmap.fit(this.blueRegionLayer.source.getExtent(), {padding:[100,100,100,100]});
         }
     }
 }

+ 11 - 11
src/views/home/map/homeMap.js

@@ -12,18 +12,18 @@ import eventBus from "@/api/eventBus";
  * @description 地图层对象
  */
 class HomeMap {
-  constructor() {
-    let that = this;
-    let vectorStyle = new KMap.VectorStyle();
-    this.vectorStyle = vectorStyle;
-  }
+    constructor() {
+        let that = this;
+        let vectorStyle = new KMap.VectorStyle();
+        this.vectorStyle = vectorStyle;
+    }
 
-  initMap(location, target) {
-    let level = 19.2;
-    let coordinate = util.wktCastGeom(location).getFirstCoordinate();
-    this.kmap = new KMap.Map(target, level, coordinate[0], coordinate[1], null, 6, 22);
-    eventBus.emit('homeMap:init', this.kmap);
-  }
+    initMap(location, target) {
+        let level = 19.2;
+        let coordinate = util.wktCastGeom(location).getFirstCoordinate();
+        this.kmap = new KMap.Map(target, level, coordinate[0], coordinate[1], null, 6, 22);
+        eventBus.emit("homeMap:init", this.kmap);
+    }
 }
 
 export default HomeMap;

+ 0 - 22
src/views/home/map/regionLayer.js

@@ -46,28 +46,6 @@ class RegionLayer {
             style: (f) => {
                 const color = colorObj[f.get("bgColor")]
                 const style1 = this.vectorStyle.getPolygonStyle(color[0], color[1], 2);
-                // let style2 = null
-                // if(f.get("id")==0){
-                //     style2 = new Style({
-                //         image: new Icon({
-                //             src: require("@/assets/images/map/yellow-block.png"),
-                //             scale: 0.4,
-                //         }),
-                //         // text: new Text({
-                //         //     text: f.get("id"),
-                //         //     color: "#120046",
-                //         //     stroke: new Stroke({
-                //         //         color: "#FFFFFF",
-                //         //         width: 2,
-                //         //     }),
-                //         //     backgroundFill: new Fill({
-                //         //         color: "#f8f9fa10",
-                //         //         width: 2,
-                //         //     }),
-                //         //     font: "30px sans-serif",
-                //         // }),
-                //     });
-                // }
                 return [style1];
             },
         });

+ 10 - 8
src/views/home/map/samplePointLayer.js

@@ -18,9 +18,9 @@ import eventBus from "@/api/eventBus";
  * @description 地图层对象
  */
 class SamplePointLayer {
-  constructor(map, organId, regionId) {
+  constructor(map, kmap, regionId) {
     let that = this;
-    this.farmId = organId
+    // this.farmId = organId
     this.regionId = regionId
     let vectorStyle = new KMap.VectorStyle();
     this.vectorStyle = vectorStyle;
@@ -62,6 +62,7 @@ class SamplePointLayer {
     // this.yellowBlockLayer.addFeature(point2);
 
     this.addMapSingerClick(map);
+    this.mapRef = kmap
   }
   getIconStyle(feature){
     let style = new Style({
@@ -92,7 +93,8 @@ class SamplePointLayer {
 
   initData(farmId, regionId){
     let that = this
-    VE_API.image.pointByRegionId({farmId,regionId}).then(({data})=>{
+    VE_API.feixun.sampleList({farmId}).then(({data})=>{
+    // VE_API.image.pointByRegionId({farmId,regionId}).then(({data})=>{
       let features = []
       for(let item of data){
         item.iconName='defalut'
@@ -104,6 +106,7 @@ class SamplePointLayer {
         features: features,
       });
       that.clusterSource.setSource(source)
+      that.mapRef.fit(this.treeClusterLayer.source.getExtent(), {padding:[100,100,100,100]})
     })
   }
 
@@ -123,7 +126,7 @@ class SamplePointLayer {
           if(that.isUpdatePoint){
             fs.set("iconName", "active");
           }
-          eventBus.emit("click:point",{farmId:fs.get("farmId"),sampleId:fs.get("sampleId")})
+          eventBus.emit("click:point",{farmId:fs.get("farmId"),sampleId:fs.get("sampleId"),data:fs})
         }
         if (layer instanceof VectorLayer && layer.get("name") === "yellow-block") {
           hasFeature = true
@@ -169,13 +172,13 @@ class SamplePointLayer {
     // let imgSrc = require(`@/assets/images/map/${item.iconName}-icon.png`)
     let imgSrc = require('@/assets/images/map/status/status-zc.png')
     let scale = 0.8
-    if(item.status == 1){
+    if(item.stepStatus == 1){
       imgSrc = require('@/assets/images/map/status/status-szyc.png')
     }
-    if(item.status == 2){
+    if(item.stepStatus == 2){
       imgSrc = require('@/assets/images/map/status/status-bh.png')
     }
-    if(item.status == 3){
+    if(item.stepStatus == 3){
       imgSrc = require('@/assets/images/map/status/status-ch.png')
     }
     item["icon"] = imgSrc
@@ -183,7 +186,6 @@ class SamplePointLayer {
   }
 
   reset(farm, region){
-    console.log('farm',farm);
     this.clearCluster()
     this.initData(farm.id, region.id)
   }