Browse Source

搭建项目

master
邓宏 2 years ago
parent
commit
9178cd1d78
  1. 2
      index.html
  2. 1331
      pnpm-lock.yaml
  3. BIN
      src/assets/img/bg.png
  4. BIN
      src/assets/img/company_left_2.png
  5. BIN
      src/assets/img/company_left_3.png
  6. BIN
      src/assets/img/company_left_4.png
  7. BIN
      src/assets/img/company_map_popover.png
  8. BIN
      src/assets/img/echarts_bg.png
  9. BIN
      src/assets/img/frame_title_bg.png
  10. BIN
      src/assets/img/goods-center-bg.png
  11. BIN
      src/assets/img/head_bg.png
  12. BIN
      src/assets/img/head_title_bg.png
  13. BIN
      src/assets/img/line.png
  14. BIN
      src/assets/img/login_bg.png
  15. BIN
      src/assets/img/login_bg1.png
  16. BIN
      src/assets/img/login_bg2.png
  17. BIN
      src/assets/img/login_form1.png
  18. BIN
      src/assets/img/login_form2.png
  19. BIN
      src/assets/img/login_form3.png
  20. BIN
      src/assets/img/map_bg.png
  21. BIN
      src/assets/img/park-bg.png
  22. BIN
      src/assets/img/park-center-bg.png
  23. BIN
      src/assets/img/park-center-popver-bg.png
  24. BIN
      src/assets/img/park-map-bg1.png
  25. BIN
      src/assets/img/park-map-bg2.png
  26. BIN
      src/assets/img/park-map-bg3.png
  27. BIN
      src/assets/img/park-map-bg4.png
  28. BIN
      src/assets/img/park-map-bg5.png
  29. 3570
      src/assets/map/yuanmou.json
  30. 87
      src/assets/style/index.less
  31. 19
      src/router/index.js
  32. 286
      src/view/company/center.vue
  33. 38
      src/view/company/index.vue
  34. 232
      src/view/company/left_1.vue
  35. 174
      src/view/company/left_2.vue
  36. 121
      src/view/company/left_3.vue
  37. 311
      src/view/company/mapPopover.vue
  38. 64
      src/view/company/popover.vue
  39. 174
      src/view/company/right_1.vue
  40. 128
      src/view/company/right_2.vue
  41. 314
      src/view/goods/center.vue
  42. 45
      src/view/goods/index.vue
  43. 244
      src/view/goods/left_1.vue
  44. 141
      src/view/goods/left_2.vue
  45. 129
      src/view/goods/left_3.vue
  46. 230
      src/view/goods/mapPopover.vue
  47. 221
      src/view/goods/right_1.vue
  48. 251
      src/view/goods/right_2.vue
  49. 275
      src/view/home.vue
  50. 137
      src/view/login.vue
  51. 71
      src/view/park/Label.js
  52. 101
      src/view/park/Point.js
  53. 757
      src/view/park/center.vue
  54. 43
      src/view/park/index.vue
  55. 245
      src/view/park/left_1.vue
  56. 145
      src/view/park/left_2.vue
  57. 69
      src/view/park/left_3.vue
  58. 91
      src/view/park/right_1.vue
  59. 234
      src/view/park/right_2.vue
  60. 108
      src/view/park/right_3.vue
  61. 102
      src/view/park/title.vue
  62. 77
      src/view/subTitle.vue
  63. 81
      src/view/title.vue
  64. 62
      src/view/yuanmou.js

2
index.html

@ -9,7 +9,7 @@
securityJsCode:'4ec2b8bccd776f70b38c06f5787f4614' securityJsCode:'4ec2b8bccd776f70b38c06f5787f4614'
} }
</script> </script>
<title>Vite App</title> <title>物业管理大屏</title>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

1331
pnpm-lock.yaml

File diff suppressed because it is too large

BIN
src/assets/img/bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
src/assets/img/company_left_2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

BIN
src/assets/img/company_left_3.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

BIN
src/assets/img/company_left_4.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

BIN
src/assets/img/company_map_popover.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

BIN
src/assets/img/echarts_bg.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
src/assets/img/frame_title_bg.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

BIN
src/assets/img/goods-center-bg.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

BIN
src/assets/img/head_bg.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

BIN
src/assets/img/head_title_bg.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

BIN
src/assets/img/line.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

BIN
src/assets/img/login_bg.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 438 KiB

BIN
src/assets/img/login_bg1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 548 KiB

BIN
src/assets/img/login_bg2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 414 KiB

BIN
src/assets/img/login_form1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

BIN
src/assets/img/login_form2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

BIN
src/assets/img/login_form3.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

BIN
src/assets/img/map_bg.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

BIN
src/assets/img/park-bg.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

BIN
src/assets/img/park-center-bg.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
src/assets/img/park-center-popver-bg.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

BIN
src/assets/img/park-map-bg1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

BIN
src/assets/img/park-map-bg2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

BIN
src/assets/img/park-map-bg3.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

BIN
src/assets/img/park-map-bg4.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
src/assets/img/park-map-bg5.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

3570
src/assets/map/yuanmou.json

File diff suppressed because it is too large

87
src/assets/style/index.less

@ -48,32 +48,29 @@
} }
} }
.el-select{ .el-select{
pointer-events: all;
position:absolute;
top:38px;
left:30px;
width:489px;
.el-input{ .el-input{
--el-input-border-radius:42px; --el-input-border-radius:4px;
--el-input-bg-color:rgba(1, 19, 48, 0.5); --el-input-bg-color:rgba(1, 19, 48, 0.5);
--el-input-icon-color:#68adf3; --el-input-icon-color:#fff;
--el-input-text-color:#67b3ff; --el-input-text-color:#03FAF6;
&.is-focus .el-input__wrapper{
&.is-focus>.el-input__wrapper{ box-shadow:inset 0 0 9px 1px #03FAF6!important;
box-shadow:0 0 3px 1px #0C7FF0!important;
} }
.el-input__wrapper{ .el-input__wrapper{
border:1px solid #0C7FF0; box-shadow:inset 0 0 7px 0.5px #03FAF6;
box-shadow: none;
&:hover{ &:hover{
box-shadow:0 0 3px 1px rgba(12, 126, 240, 0.5); box-shadow:inset 0 0 9px 1px #03FAF6;
}
&.is-focus{
box-shadow:inset 0 0 9px 1px #03FAF6!important;
} }
input{ input{
font-size:18px; font-size:18px;
height:41px!important; height:40px!important;
width:60px;
font-weight: bold!important; font-weight: bold!important;
&::-webkit-input-placeholder{ &::-webkit-input-placeholder{
color:rgba(71, 156, 241, 0.8); color:#fff;
font-size:16px; font-size:16px;
} }
} }
@ -81,25 +78,39 @@
} }
} }
.el-popper.search-popper{ .el-popper.search-popper{
--el-bg-color-overlay:rgb(1, 19, 48); --el-bg-color-overlay:#000;
--el-border-color-light:rgb(12, 126, 240); --el-color-primary:#07D0CD;
--el-fill-color-light:rgba(12, 126, 240, 0.2); --el-border-color-light:#03FAF6;
--el-fill-color-light:transparent;
--el-text-color-regular:#fff; --el-text-color-regular:#fff;
.selected{
position: relative;
&:before{
content:"";
width:3px;
height:18px;
position:absolute;
background:#03FAF6;
border-radius: 20px;
left:10px;
top:50%;
transform: translateY(-50%);
}
}
} }
.el-date-editor{ .el-date-editor{
pointer-events:all; --el-date-editor-width:240px;
position:absolute; --el-input-height:40px;
top:38px; --el-input-border-radius:4px;
left:30px+489px+10px;
--el-date-editor-width:120px;
--el-input-height:41px;
--el-input-border-radius:50px;
--el-input-bg-color:rgba(1, 19, 48, 0.5); --el-input-bg-color:rgba(1, 19, 48, 0.5);
--el-input-icon-color:#68adf3; // --el-input-icon-color:#68adf3;
--el-input-text-color:#67b3ff; // --el-input-text-color:#67b3ff;
&.is-focus>.el-input__wrapper{ --el-text-color-placeholder:#fff;
box-shadow:0 0 3px 1px #0C7FF0!important; --el-text-color-regular:#fff;
box-shadow: inset 0 0 7px 0.5px #03FAF6!important;
&.is-active,&:hover{
box-shadow: inset 0 0 9px 1px #03FAF6!important;
} }
.el-input__wrapper{ .el-input__wrapper{
border:1px solid #0C7FF0; border:1px solid #0C7FF0;
@ -109,14 +120,18 @@
} }
} }
} }
.el-popper.year-popper{ .el-popper.date-popper{
--el-bg-color-overlay:rgb(1, 19, 48); --el-bg-color-overlay:#000;
--el-border-color-light:rgb(12, 126, 240); --el-border-color-light:#03FAF6;
--el-fill-color-light:rgba(12, 126, 240, 0.2); --el-fill-color-light:rgba(12, 126, 240, 0.2);
--el-text-color-regular:#999; --el-text-color-regular:#999;
--el-color-primary:#3f72a5; --el-color-primary:#179795;
.el-date-picker{ .el-date-range-picker{
--el-datepicker-active-color:#1587FC; --el-datepicker-off-text-color:#999!important;
--el-datepicker-inrange-bg-color:#19a7a4;
--el-datepicker-active-color:#03FAF6;
--el-datepicker-inrange-hover-bg-color:#03FAF6;
color:#fff;
} }
} }

19
src/router/index.js

@ -3,22 +3,11 @@ import store from '@/store'
const routes=[] const routes=[]
export const menu = [ export const menu = [
{
path:"/login",
name:"login",
component:()=>import('@/view/login.vue'),
},
{ {
path:"/", path:"/",
name:"home", name:"home",
redirect:"/park",
component:()=>import('@/view/home.vue'), component:()=>import('@/view/home.vue'),
meta:{ }, meta:{ },
children:[
{path:"park",name:"park",meta:{title:"元谋县国家现代农业产业园"},component:()=>import('@/view/park/index.vue')},
{path:"company",name:"company",meta:{title:"企业专栏"},component:()=>import('@/view/company/index.vue')},
{path:"goods",name:"goods",meta:{title:"品种专栏"},component:()=>import('@/view/goods/index.vue')},
]
}, },
]; ];
const router = createRouter({ const router = createRouter({
@ -26,11 +15,11 @@ const router = createRouter({
routes: routes.concat(menu), routes: routes.concat(menu),
}); });
router.beforeEach((to, from ,next)=>{ router.beforeEach((to, from ,next)=>{
if(to.path!=='/login' && !store.getters['data/token']){ // if(to.path!=='/login' && !store.getters['data/token']){
next({path:'/login'}) // next({path:'/login'})
}else{ // }else{
next() next()
} // }
}) })
export default router; export default router;

286
src/view/company/center.vue

File diff suppressed because one or more lines are too long

38
src/view/company/index.vue

@ -1,38 +0,0 @@
<style lang="less" scoped>
.left,.right{
width:586px;
display:flex;
flex-direction: column;
justify-content: space-evenly;
}
.left{
margin-left:20px;
}
.right{
margin-right:20px;
}
</style>
<template>
<div class="left">
<left1 :base="base" :year="year"/>
<left2 :base="base" :year="year"/>
<left3 :base="base" :year="year"/>
</div>
<center v-model:base="base" v-model:year="year"/>
<div class="right">
<right1 :base="base" :year="year"/>
<right2 :base="base" :year="year"/>
</div>
</template>
<script setup>
import { ref, shallowRef } from 'vue'
import left1 from './left_1.vue'
import left2 from './left_2.vue'
import left3 from './left_3.vue'
import center from './center.vue'
import right1 from './right_1.vue'
import right2 from './right_2.vue'
var base=ref("")
var year=ref("")
</script>

232
src/view/company/left_1.vue

File diff suppressed because one or more lines are too long

174
src/view/company/left_2.vue

@ -1,174 +0,0 @@
<style lang="less" scoped>
.content{
display:flex;
align-items: center;
.echarts{
position: relative;
&:before{
content:"";
position:absolute;
top:11px;
left:11px;
width:117px;
height:117px;
background-image: url(@/assets/img/echarts_bg.png);
background-repeat: no-repeat;
background-position: center;
animation: BGrotate 6s linear infinite;
}
flex-shrink: 0;
}
.items{
flex-grow: 1;
margin-left:28px;
&>div{
display:flex;
align-items: center;
font-size:16px;
height:30px;
position:relative;
&:before{
content:"";
width:6px;
height:14px;
background:var(--c);
margin-right:14px;
margin-bottom:5px;
position:relative;
z-index: 10;
}
&:after{
content:"";
border:1px solid transparent;
border-bottom-color:rgba(12, 129, 239, 0.3);
border-left-color:rgba(12, 129, 239, 0.3);
position:absolute;
width:100%;
height:10px;
top: 18px;
left: 2px;
}
.name,.percent{
color:#99A4AE;
}
.value{
margin-left:auto;
color:#fff;
&:after{
content:"亩";
}
}
.lastYear{
margin-left: 10px;
color:#99A4AE;
}
.TB{
color:#FD2100;
min-width:83px;
margin-left:10px;
text-align: right;
&:before{
content:"+";
}
&.below{
color:#10CC40;
&:before{
content:"";
}
.plantBS-shangsheng{
display:inline-block;
transform: rotateX(180deg);
}
}
}
}
}
}
</style>
<template>
<div class="left_2">
<dTitle title="种植概况" icon="2"/>
<div class="content">
<v-echarts :option="pie" style="height:138px;width:138px;pointer-events: all;" autoresize/>
<div class="items">
<div v-for="(v,k) in list" :key="k" :style="{'--c':v.color}">
<span class="name">{{v.name}}</span><span class="percent">({{v.percent}}%)</span>
<span class="value">{{v.value}}</span>
<span class="lastYear">较上一年度</span>
<span class="TB" :class="{below:v.TB<=0}">{{v.TB}} <span class="plantBS-shangsheng"/></span>
</div>
</div>
</div>
</div>
</template>
<script setup>
import request from '@/config/request'
import { computed, inject, onMounted, shallowRef, watch } from 'vue'
import dTitle from '../title.vue'
var props=defineProps({
base:{
type:String,
default:""
},
year:{
type:String,
default:""
},
})
var msg=inject("msg")
var colors=['#029DFD','#00E4FF','#10CC40','#6ACBFA','#F66E97']
var pie=computed(()=>({
title:{
text:"种植情况",
textStyle:{
color:"#fff",
fontSize:16,
width:32,
overflow:"breakAll",
lineHeight:27,
},
left:'center',
top:"center",
},
series: [
{
type: "pie",
radius:[56,64],
label:{show:false},
data: [
{ value: 335, name: "Apple"},
{ value: 310, name: "Grapes"},
{ value: 234, name: "Pineapples"},
{ value: 135, name: "Oranges"},
{ value: 1548, name: "Bananas"}
]
}
]
}))
var list=shallowRef([])
watch([()=>props.base,()=>props.year], async n=>{
var res=await request("/api/company/leftcenter",{
method:"post",
data:{
categoryId: "",
date: n[1],
region: n[0],
}
})
if(res.statu){
var total=res.data.reduce((a,b)=>a+b.plantArea,0)
list.value=res.data.map(v=>({
name:v.plantName,
value:v.plantArea,
percent:Math.round(v.plantArea/total*10000)/100,
TB: v.lastArea==0?0:Math.round((v.plantArea-v.lastArea)/v.lastArea*10000)/100
}))
}else{
msg.error(res.msg||"获取种植概况失败!")
}
})
</script>

121
src/view/company/left_3.vue

@ -1,121 +0,0 @@
<style lang="less" scoped>
.left_3{
.title{
margin-top:22px;
color:#fff;
font-size:18px;
font-weight: bold;
background:rgba(12, 137, 254, 0.1);
box-shadow: inset 0 0 5px 1px #0C89FE;
height:42px;
line-height: 42px;
padding-left:13px+12px;
display:flex;
align-items: center;
span{
padding:0 4px;
text-align: center;
}
}
.item{
height:100%;
color:#A2B4C5;
display:flex;
align-items: center;
font-size:16px;
.kuang{
width:12px;
height:12px;
border:1px solid #0C80EF;
background-image:linear-gradient(#0C80EF,#0C80EF);
background-size:6px 6px;
background-position: center;
background-repeat: no-repeat;
margin-left:13px;
}
span{
padding:0 4px;
text-align: center;
&.state{
color:#fff;
&:deep span{
cursor: pointer;
}
}
}
&.egg{
background:rgba(12, 137, 254, 0.2);
}
}
}
</style>
<template>
<div class="left_3">
<dTitle title="农事记录" icon='3'/>
<div class="title">
<span style="width:110px;text-align:left;">品种</span>
<span style="width:50px;">事件</span>
<span style="width:120px;">操作日期</span>
<span style="width:80px;">负责人</span>
<span style="width:225px;">农资使用情况</span>
</div>
<dScrollBoard :data="list" :num="5" style="height:208px;pointer-events: all;" :delay="2000" ref="scrollBoard">
<template #default="{row,index}">
<div class="item" :class="{egg:index%2}" >
<span class="kuang"/>
<span class="name" style="width:110px;text-align:left;">{{row.plantType}}</span>
<span class="event" style="width:50px;">{{row.event}}</span>
<span class="date" style="width:120px;">{{new Date(row.operaDate).format('yyyy-MM-dd')}}</span>
<span class="people over" style="width:80px;">{{row.head}}</span>
<span class="state" style="width:225px;">
<popover @show="scrollBoard.stop()" @hide="scrollBoard.play()" :position="row.buwei" :content="row.materialsUse">
<span class="over" style="display:block">{{row.materialsUse}}</span>
</popover>
</span>
</div>
</template>
</dScrollBoard>
</div>
</template>
<script setup>
import request from '@/config/request'
import { inject, onMounted, ref, shallowRef, watch } from 'vue'
import dTitle from '../title.vue'
import {dScrollBoard} from 'black-knight/lib/components'
import popover from './popover.vue'
var props=defineProps({
base:{
type:String,
default:""
},
year:{
type:String,
default:""
},
})
var msg=inject("msg")
var scrollBoard=ref()
var list=shallowRef([])
watch([()=>props.base,()=>props.year], async n=>{
var res=await request("/api/company/leftbelow",{
method:"post",
data:{
categoryId: "",
date: n[1],
region: n[0],
}
})
if(res.statu){
list.value=res.data
}else{
msg.error(res.msg||'')
}
})
onMounted(async()=>{
})
</script>

311
src/view/company/mapPopover.vue

@ -1,311 +0,0 @@
<style lang="less">
.el-popover.mapPopover{
border-radius: 0;
background-size:100% 100%;
padding:0!important;
background-color:transparent;
border:none;
position:relative;
&.company{
height:245px;
box-shadow: 0 0 6px 0 #48b4ff;
.title{
position:absolute;
color:#fff;
font-weight: bold;
top:7px;
left:50%;
transform: translateX(-50%);
}
}
&>.content{
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
}
.plantBS-shangjiantou{
position:absolute;
font-weight: bold;
font-size:18px;
background-image:-webkit-linear-gradient(top, #fff,rgb(var(--c)));
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
top:46px;
cursor: pointer;
&:hover{
opacity: 0.7;
}
&:before{
text-shadow:1px -1px 2px rgba(var(--c),0.8);
margin-right:5px;
}
&.current{
left:80px;
}
&.past{
right:80px;
}
}
.dv-scroll-board{
position:absolute;
top:75px;
left:10px;
width:calc(100% - 20px);
height:154px;
.ceil,.header-item{
padding:0 3px;
font-size:16px;
}
.header-item{
color:#F1F5F9;
}
.ceil{
color:#A2B4C5;
}
}
}
</style>
<template>
<el-popover :visible="show" ref="popover" width="466px" :show-arrow="false" popper-class="mapPopover company" trigger="focus" placement="top" :virtual-ref="markerTarget">
<svg width="466.000000" height="245.000000" viewBox="0 0 466 245" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect id="画板 1" width="466.000000" height="245.000000" fill="#020920"/>
<g filter="url(#filter_7_15_dd)">
<path id="矢量 7" d="M12.5 0L0 11.5L0 232.5L12.5 244L452.5 244L465 232.5L465 11.5L452.5 0L12.5 0Z" fill-rule="evenodd" fill="#0C80EF" fill-opacity="0.100000"/>
<path id="矢量 7" d="M1 11.5L1 232.5L12.5 244L452.5 244L465 232.5L465 11.5L452.5 1L12.5 1L1 11.5Z" stroke="#0C80EF" stroke-opacity="0.300000"/>
</g>
<path id="矢量 1" d="M12 0L0 0L0 11L12 0Z" fill-rule="evenodd" fill="#0C80EF"/>
<path id="矢量 3" d="M454 0L466 0L466 11L454 0Z" fill-rule="evenodd" fill="#0C80EF"/>
<path id="矢量 2" d="M12 245L0 245L0 234L12 245Z" fill-rule="evenodd" fill="#0C80EF"/>
<path id="矢量 4" d="M454 245L466 245L466 234L454 245Z" fill-rule="evenodd" fill="#0C80EF"/>
<path id="矢量 8" d="M13.5 0.5C8.625 4.98499 5.875 7.51501 1 12" stroke="#0C80EF" stroke-linejoin="bevel" stroke-linecap="round" stroke-dasharray="0 0"/>
<path id="矢量 10" d="M453 0C457.875 4.48499 460.625 7.01501 465.5 11.5" stroke="#0C80EF" stroke-linejoin="bevel" stroke-linecap="round" stroke-dasharray="0 0"/>
<path id="矢量 9" d="M0 232C4.875 236.485 7.625 239.015 12.5 243.5" stroke="#0C80EF" stroke-linejoin="bevel" stroke-linecap="round" stroke-dasharray="0 0"/>
<path id="矢量 11" d="M466 233C461.125 237.485 458.375 240.015 453.5 244.5" stroke="#0C80EF" stroke-linejoin="bevel" stroke-linecap="round" stroke-dasharray="0 0"/>
<path id="矢量 8" d="M16.3118 3.47647C11.5102 7.75052 8.80164 10.1615 4 14.4356" stroke="#0C80EF" stroke-width="2.000000" stroke-linejoin="bevel" stroke-linecap="round" stroke-dasharray="0 0"/>
<path id="矢量 10" d="M449.196 3C453.997 7.27405 456.706 9.68506 461.507 13.9591" stroke="#0C80EF" stroke-width="2.000000" stroke-linejoin="bevel" stroke-linecap="round" stroke-dasharray="0 0"/>
<path id="矢量 9" d="M4 231.041C8.80164 235.315 11.5102 237.726 16.3118 242" stroke="#0C80EF" stroke-width="2.000000" stroke-linejoin="bevel" stroke-linecap="round" stroke-dasharray="0 0"/>
<path id="矢量 11" d="M462 231.041C457.198 235.315 454.49 237.726 449.688 242" stroke="#0C80EF" stroke-width="2.000000" stroke-linejoin="bevel" stroke-linecap="round" stroke-dasharray="0 0"/>
<path id="矢量 13" d="M113 0L352 0" stroke="#0C80EF"/>
<path id="矢量 14" d="M113 244L352 244" stroke="#0C80EF"/>
<path id="矢量 15" d="M44.5 4.5L50 10.5L55.5 4.5L44.5 4.5Z" fill-rule="evenodd" fill="#0C80EF"/>
<path id="矢量 17" d="M44.5 238L50 232L55.5 238L44.5 238Z" fill-rule="evenodd" fill="#0C80EF"/>
<path id="矢量 16" d="M409 4.5L414.5 10.5L420 4.5L409 4.5Z" fill-rule="evenodd" fill="#0C80EF"/>
<path id="矢量 18" d="M409 238L414.5 232L420 238L409 238Z" fill-rule="evenodd" fill="#0C80EF"/>
<path id="矢量 19" d="M119.789 43.114L123.289 38.614C123.633 38.1719 123.556 37.5544 123.114 37.2107C122.672 36.8669 122.054 36.944 121.711 37.386L118.511 41.5L1 41.5L1 43.5L119 43.5L119.789 43.114Z" stroke="url(#paint_linear_7_35_0)" stroke-width="2.000000" stroke-linejoin="bevel"/>
<path id="矢量 20" d="M347.211 43.114L343.711 38.614C343.367 38.1719 343.444 37.5544 343.886 37.2107C344.328 36.8669 344.946 36.944 345.289 37.386L348.489 41.5L466 41.5L466 43.5L348 43.5L347.211 43.114Z" stroke="url(#paint_linear_7_36_0)" stroke-width="2.000000" stroke-linejoin="bevel" stroke-linecap="round"/>
<path id="矢量 21" d="M128.636 36.4961L125.136 42.4961L126.864 43.5039L130.074 38L336.54 38L339.241 41.1508C339.605 41.576 340.226 41.6237 340.651 41.2592C341.076 40.8948 341.124 40.2744 340.759 39.8492L337.759 36.3492C337.56 36.1164 337.307 36 337 36L129.5 36C129.117 36 128.829 36.1654 128.636 36.4961Z" fill-rule="evenodd" fill="#0C80EF"/>
<path id="矢量 22" d="M31 1L6 28.5L19 28.5L46.5 1L31 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_39_0)"/>
<path id="矢量 23" d="M56 1L31 28.5L44 28.5L71.5 1L56 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_40_0)"/>
<path id="矢量 24" d="M81 1L56 28.5L69 28.5L96.5 1L81 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_41_0)"/>
<path id="矢量 25" d="M106 1L81 28.5L94 28.5L121.5 1L106 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_42_0)"/>
<path id="矢量 26" d="M131 1L106 28.5L119 28.5L146.5 1L131 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_43_0)"/>
<path id="矢量 27" d="M156 1L131 28.5L144 28.5L171.5 1L156 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_44_0)"/>
<path id="矢量 28" d="M181 1L156 28.5L169 28.5L196.5 1L181 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_45_0)"/>
<path id="矢量 29" d="M206 1L181 28.5L194 28.5L221.5 1L206 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_46_0)"/>
<path id="矢量 30" d="M231 1L206 28.5L219 28.5L246.5 1L231 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_47_0)"/>
<path id="矢量 31" d="M256 1L231 28.5L244 28.5L271.5 1L256 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_48_0)"/>
<path id="矢量 32" d="M281 1L256 28.5L269 28.5L296.5 1L281 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_49_0)"/>
<path id="矢量 33" d="M306 1L281 28.5L294 28.5L321.5 1L306 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_50_0)"/>
<path id="矢量 34" d="M331 1L306 28.5L319 28.5L346.5 1L331 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_51_0)"/>
<path id="矢量 35" d="M356 1L331 28.5L344 28.5L371.5 1L356 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_52_0)"/>
<path id="矢量 36" d="M381 1L356 28.5L369 28.5L396.5 1L381 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_53_0)"/>
<path id="矢量 37" d="M406 1L381 28.5L394 28.5L421.5 1L406 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_54_0)"/>
<path id="矢量 38" d="M431 1L406 28.5L419 28.5L446.5 1L431 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_55_0)"/>
<path id="矢量 39" d="M456 1L431 28.5L444 28.5L471.5 1L456 1Z" fill-rule="evenodd" fill="url(#paint_linear_7_56_0)"/>
<path id="矢量 40" d="M81 0L101.5 30L359.5 30L385 0.5L81 0Z" fill-rule="evenodd" fill="url(#paint_linear_7_58_0)" fill-opacity="0.300000"/>
<rect id="矩形 3" y="38.000000" width="465.000000" height="37.000000" fill="#0C80EF" fill-opacity="0.1"/>
<use xlink:href="#line">
<animate attributeName="opacity" values="0;1;1;0" begin="0s" dur="4s" repeatCount="indefinite"/>
<animateTransform attributeName="transform" begin="0s" dur="4s" type="translate" from="-130" to="130" repeatCount="indefinite" />
</use>
<path id="矢量 123" d="M1 11.5L1 232.5L12.5 244L452.5 244L465 232.5L465 11.5L452.5 1L12.5 1L1 11.5Z" stroke="#0C80EF" mask="url(#mask)" stroke-dasharray="20 1367">
<animate attributeName="stroke-dashoffset" begin="0s" dur="20s" from="0" to="1386" repeatCount="indefinite"/>
</path>
<defs>
<mask id="mask">
<circle cx="1" cy="1" r="20" fill="url(#RadialGradient2)">
<animateMotion path="M1 11.5L12.5 1L452.5 1L465 11.5L465 232.5L452.5 244L12.5 244L1 232.5L1 11.5Z" begin="0s" dur="20s" repeatCount="indefinite" />
</circle>
</mask>
<radialGradient id="RadialGradient2" >
<stop offset="10%" stop-color="#fff"/>
<stop offset="100%" stop-color="transparent"/>
</radialGradient>
<g id="line">
<path id="矢量 41" d="M105 74L360 74" stroke="url(#paint_linear_7_60_0)" stroke-width="2.000000"/>
<g filter="url(#filter_7_61_dd)">
<ellipse id="椭圆 1" cx="220.500000" cy="74.100006" rx="17.500000" ry="1.100000" fill="url(#paint_linear_7_61_0)"/>
</g>
</g>
<filter id="filter_7_15_dd" x="-0.500000" y="-0.500000" width="466.000000" height="245.000000" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dx="0" dy="0"/>
<feGaussianBlur stdDeviation="15"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.047059 0 0 0 0 0.50196 0 0 0 0 0.93725 0 0 0 0.6 0"/>
<feBlend mode="normal" in2="shape" result="effect_innerShadow_1"/>
</filter>
<filter id="filter_7_61_dd" x="198.000000" y="68.000000" width="45.000000" height="12.200012" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="0" dy="0"/>
<feGaussianBlur stdDeviation="1.66667"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.047059 0 0 0 0 0.50196 0 0 0 0 0.93725 0 0 0 1 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect_dropShadow_1"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect_dropShadow_1" result="shape"/>
</filter>
<linearGradient id="paint_linear_7_35_0" x1="122.500000" y1="36.772705" x2="1.000000" y2="40.250000" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_36_0" x1="344.500000" y1="36.772705" x2="466.000031" y2="40.250000" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_39_0" x1="9.499996" y1="28.499994" x2="46.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_40_0" x1="34.499996" y1="28.499994" x2="71.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_41_0" x1="59.500000" y1="28.499994" x2="96.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_42_0" x1="84.500000" y1="28.499994" x2="121.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_43_0" x1="109.500000" y1="28.499994" x2="146.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_44_0" x1="134.500000" y1="28.499994" x2="171.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_45_0" x1="159.500000" y1="28.499994" x2="196.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_46_0" x1="184.500000" y1="28.499994" x2="221.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_47_0" x1="209.500000" y1="28.499994" x2="246.500015" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_48_0" x1="234.500000" y1="28.499994" x2="271.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_49_0" x1="259.500000" y1="28.499994" x2="296.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_50_0" x1="284.500000" y1="28.499994" x2="321.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_51_0" x1="309.500000" y1="28.499994" x2="346.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_52_0" x1="334.500000" y1="28.499994" x2="371.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_53_0" x1="359.500000" y1="28.499994" x2="396.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_54_0" x1="384.500000" y1="28.499994" x2="421.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_55_0" x1="409.500000" y1="28.499994" x2="446.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_56_0" x1="434.500000" y1="28.499994" x2="471.500000" y2="1.000008" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.301961"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_58_0" x1="232.999847" y1="-34.999985" x2="232.999847" y2="29.999985" gradientUnits="userSpaceOnUse">
<stop stop-color="#0C80EF" stop-opacity="0.000000"/>
<stop offset="1.000000" stop-color="#0C80EF"/>
</linearGradient>
<linearGradient id="paint_linear_7_60_0" x1="nan" y1="-nan" x2="nan" y2="-nan" gradientUnits="userSpaceOnUse">
<stop offset="0.001147" stop-color="#0C80F0" stop-opacity="0.000000"/>
<stop offset="0.555046" stop-color="#0C80EE"/>
<stop offset="0.998039" stop-color="#0C80EF" stop-opacity="0.000000"/>
<stop offset="1.000000" stop-color="#0C80EF" stop-opacity="0.000000"/>
</linearGradient>
<linearGradient id="paint_linear_7_61_0" x1="236.500000" y1="73.000000" x2="204.500000" y2="73.000000" gradientUnits="userSpaceOnUse">
<stop offset="0.001147" stop-color="#0C80EF"/>
<stop offset="0.426411" stop-color="#79CEF6"/>
<stop offset="0.522177" stop-color="#E2F3FF" stop-opacity="0.800000"/>
<stop offset="0.631048" stop-color="#AAE0F6" stop-opacity="0.941176"/>
<stop offset="0.772176" stop-color="#79CEF6"/>
<stop offset="1.000000" stop-color="#0C80EF"/>
<stop offset="1.000000" stop-color="#0C80EF"/>
</linearGradient>
</defs>
</svg>
<div class="content" @click="$emit('click')">
<span class="title">{{detail.plotName}}</span>
<span class="plantBS-shangjiantou current" style="--c:16, 203, 65;" @click="trigger(true)">当前种植</span>
<span class="plantBS-shangjiantou past" style="--c:12, 129, 239;" @click="trigger(false)">往期种植</span>
<dvScrollBoard ref="scrollBoard" :config="config"/>
</div>
</el-popover>
</template>
<script setup>
import { inject, nextTick, reactive, ref, shallowRef, unref, watch } from "vue"
var route=inject("route")
var show=ref(false)
var markerTarget=ref()
var popover=ref()
var config=reactive({
header:['作物','种植面积','预估采收时间',"预估产量","已采收"],
data:[],
rowNum:4,
headerBGC:"transpatent",
oddRowBGC:"transpatent",
evenRowBGC:"transpatent",
columnWidth:[103.4,75,89.4+24,89.2,65],
align:['center','center','center','center','center'],
})
var scrollBoard=ref()
var detail=shallowRef({})
async function trigger(isNow){
config.data=[]
if(isNow){
scrollBoard.value.updateRows(detail.value.currentPlant.map(v=>[v.plantType, `${v.plantArea}面积`, new Date(v.harvestTime).format('yyyy/MM/dd'), `${v.estimateOutput}kg`, `${v.harvest}kg`]))
}else{
scrollBoard.value.updateRows(detail.value.beforPlant.map(v=>[v.plantType, `${v.plantArea}面积`, new Date(v.harvestTime).format('yyyy/MM/dd'), `${v.estimateOutput}kg`, `${v.harvest}kg`]))
}
}
defineExpose({
show: (dom,val)=>{
detail.value=val
markerTarget.value=dom
show.value=true
trigger(true)
},
hide:()=>{
show.value=false
}
})
</script>

64
src/view/company/popover.vue

File diff suppressed because one or more lines are too long

174
src/view/company/right_1.vue

File diff suppressed because one or more lines are too long

128
src/view/company/right_2.vue

@ -1,128 +0,0 @@
<style lang="less" scoped>
.right_2{
.d-title{
margin-bottom:10px;
.right{
span{
display:inline-flex;
align-items: center;
color:#fff;
font-size: 16px;
&+span{
margin-left:10px;
}
&:before{
content:"";
width:18px;
height:4px;
background:var(--c);
}
}
}
}
}
</style>
<template>
<div class="right_2">
<dTitle title="产量预估" icon="5">
<span style="--c:#0C81EF">预估产量</span>
<span style="--c:#10CC40">实际产量</span>
</dTitle>
<v-echarts :option="opt" style="height:260px;pointer-events: all;" autoresize/>
</div>
</template>
<script setup>
import request from '@/config/request'
import { computed, inject, onMounted, shallowRef, watch } from 'vue'
import dTitle from '../title.vue'
var props=defineProps({
base:{
type:String,
default:""
},
year:{
type:String,
default:""
},
})
var msg=inject('msg')
var {getters}=inject("store")
var list=shallowRef([])
var opt=computed(()=>({
tooltip: {
trigger: 'axis'
},
grid: {
left: 10,
right: 20,
bottom: 10,
top:35,
containLabel: true
},
xAxis: {
type: 'category',
boundaryGap: false,
axisLine:{show:false},
axisTick:{show:false},
axisLabel:{
color:"#E2EFFA",
fontSize:16,
},
data: list.value.map(v=>v.plantName)
},
yAxis: {
type: 'value',
name:"单位/kg",
nameTextStyle:{
color:"#E2EFFA",
fontSize:16,
},
axisLabel:{
color:"#E2EFFA",
fontSize:16,
},
splitLine:{
lineStyle:{
color:"#4E7C98",
type:"dashed",
}
}
},
series: [
{
name: '预估产量',
type: 'line',
itemStyle:{color:"#0C81EF"},
symbol: list.value.length>1?"none":'emptyCircle',
data: list.value.map(v=>v.output)
},
{
name: '实际产量',
type: 'line',
itemStyle:{color:"#10CC40"},
symbol: list.value.length>1?"none":'emptyCircle',
data: list.value.map(v=>v.realityPut)
},
]
}))
watch([()=>props.base,()=>props.year], async n=>{
var res=await request("/api/company/rightbelow",{
method:"post",
data:{
date: n[1],
region: n[0],
}
})
if(res.statu){
list.value=res.data
}else{
msg.error(res.msg||"获取产能预估失败!")
}
})
onMounted(async ()=>{
})
</script>

314
src/view/goods/center.vue

File diff suppressed because one or more lines are too long

45
src/view/goods/index.vue

@ -1,45 +0,0 @@
<style lang="less" scoped>
.left,.right{
width:586px;
display:flex;
flex-direction: column;
}
.left{
flex-shrink: 0;
margin-left:20px;
justify-content: space-evenly;
}
.right{
flex-shrink: 0;
margin-right:20px;
justify-content: center;
}
</style>
<template>
<div class="left">
<left1 :breed="breed" :year="year"/>
<left2 :breed="breed" :year="year"/>
<left3 :breed="breed" :year="year"/>
</div>
<center v-model:breed="breed" v-model:year="year"/>
<div class="right">
<dTitle title="病虫害分析" icon="7"/>
<right1 :breed="breed" :year="year"/>
<right2 :breed="breed" :year="year"/>
</div>
</template>
<script setup>
import left1 from './left_1.vue'
import left2 from './left_2.vue'
import left3 from './left_3.vue'
import center from './center.vue'
import right1 from './right_1.vue'
import right2 from './right_2.vue'
import dTitle from '../title.vue'
import { inject, ref } from 'vue'
var breed=ref('')
var year=ref('')
</script>

244
src/view/goods/left_1.vue

File diff suppressed because one or more lines are too long

141
src/view/goods/left_2.vue

@ -1,141 +0,0 @@
<style lang="less" scoped>
.content{
display:flex;
align-items: center;
.echarts{
flex-shrink: 0;
position:relative;
&:before{
content:"";
position:absolute;
top:11px;
left:11px;
width:117px;
height:117px;
background-image: url(@/assets/img/echarts_bg.png);
background-repeat: no-repeat;
background-position: center;
animation: BGrotate 6s linear infinite;
}
}
.items{
flex-grow: 1;
margin-left:28px;
&>div{
display:flex;
align-items: center;
font-size:16px;
height:30px;
position:relative;
&:before{
content:"";
width:6px;
height:14px;
background:var(--c);
margin-right:14px;
margin-bottom:5px;
position:relative;
z-index: 10;
}
&:after{
content:"";
border:1px solid transparent;
border-bottom-color:rgba(12, 129, 239, 0.3);
border-left-color:rgba(12, 129, 239, 0.3);
position:absolute;
width:100%;
height:10px;
top: 18px;
left: 2px;
}
.name{
color:#fff;
margin-right:auto;
}
.percent{
margin-left:20px;
color:var(--c);
font-weight: bold;
}
}
}
}
</style>
<template>
<div class="left_2">
<dTitle title="种植面积" icon="6"/>
<div class="content">
<v-echarts :option="pie" style="height:138px;width:138px;pointer-events: all;" autoresize/>
<div class="items">
<div v-for="(v,k) in list" :key="k" :style="{'--c':colors[k%colors.length]}">
<span class="name over">{{v.name}}({{v.value}})</span>
<span class="percent">{{v.percent}}%</span>
</div>
</div>
</div>
</div>
</template>
<script setup>
import request from '@/config/request'
import { computed, inject, shallowRef, watch } from 'vue'
import dTitle from '../title.vue'
var msg=inject("msg")
var props=defineProps({
breed:{
type:String,
default:""
},
year:{
type:String,
default:""
}
})
var colors=["#029DFD","#00E4FF","#10CC40","#6ACBFA","#F66E97"]
var pie=computed(()=>({
color:colors,
title:{
text:"种植情况",
textStyle:{
color:"#fff",
fontSize:16,
width:32,
overflow:"breakAll",
lineHeight:27,
},
left:'center',
top:"center",
},
series: [
{
type: "pie",
radius:[56,64],
label:{show:false},
data: list.value
}
]
}))
var list=shallowRef([])
watch([()=>props.breed,()=>props.year], async n=>{
var res=await request("/api/variety/leftcenter",{
method:"post",
data:{
varietyName:n[0],
date:n[1],
region:"",
}
})
if(res.statu){
var total=res.data.reduce((a,b)=>a+parseFloat(b.area),0)
list.value=res.data.map(v=>({
name:v.companyName,
value:parseFloat(v.area),
percent: Math.round(parseFloat(v.area)/total*10000)/100
}))
}else{
msg.error(res.msg||"获取种植面积失败!")
}
})
</script>

129
src/view/goods/left_3.vue

@ -1,129 +0,0 @@
<style lang="less" scoped>
.right_2{
.d-title{
margin-bottom:10px;
.right{
span{
display:inline-flex;
align-items: center;
color:#fff;
font-size: 16px;
&+span{
margin-left:10px;
}
&:before{
content:"";
width:18px;
height:4px;
background:var(--c);
}
}
}
}
}
</style>
<template>
<div class="right_2">
<dTitle title="产量预估" icon="5">
<span style="--c:#0C81EF">预估产量</span>
<span style="--c:#10CC40">实际产量</span>
</dTitle>
<v-echarts autoresize :option="opt" style="height:260px;pointer-events: all;"/>
</div>
</template>
<script setup>
import request from '@/config/request'
import { computed, inject, shallowRef, watch } from 'vue'
import dTitle from '../title.vue'
var msg=inject("msg")
var props=defineProps({
breed:{
type:String,
default:""
},
year:{
type:String,
default:""
}
})
var list=shallowRef([])
var opt=computed(()=>({
tooltip: {
trigger: 'axis',
axisPointer:{
type:"cross"
}
},
grid: {
left: 10,
right: 10,
bottom: 10,
top:35,
containLabel: true
},
xAxis: {
type: 'category',
boundaryGap: false,
axisLine:{show:false},
axisTick:{show:false},
axisLabel:{
color:"#E2EFFA",
fontSize:16,
},
data: list.value.map(v=>v.companyName),
},
yAxis: {
type: 'value',
name:"单位/kg",
nameTextStyle:{
color:"#E2EFFA",
fontSize:16,
},
axisLabel:{
color:"#E2EFFA",
fontSize:16,
},
splitLine:{
lineStyle:{
color:"#4E7C98",
type:"dashed",
}
}
},
series: [
{
name: '预估产量',
type: 'line',
itemStyle:{color:"#0C81EF"},
symbol:"path://M150.11839294433594,150.11839294433594C250.26559448242188,50.07360076904297,370.8927917480469,0,512,0c141.107177734375,0,261.734375,50.07360076904297,361.881591796875,150.11839294433594C973.9263916015625,250.26559448242188,1024,370.8927917480469,1024,512c0,141.2095947265625,-50.0736083984375,261.8367919921875,-150.118408203125,361.881591796875C773.734375,973.9263916015625,653.107177734375,1024,512,1024c-141.10720825195312,0,-261.7344055175781,-50.0736083984375,-361.88160705566406,-150.118408203125C50.07360076904297,773.8367919921875,0,653.2095947265625,0,512C0,370.8927917480469,50.07360076904297,250.26559448242188,150.11839294433594,150.11839294433594ZM512,41.88159942626953c-85.2991943359375,0,-164.14718627929688,20.889598846435547,-236.33920288085938,62.771202087402344C203.4687957763672,146.4320068359375,146.4320068359375,203.4687957763672,104.65280151367188,275.6607971191406C62.77119827270508,347.9552001953125,41.88159942626953,426.7008056640625,41.88159942626953,512c0,129.638427734375,45.97760009765625,240.4351806640625,137.83040618896484,332.28802490234375C271.5647888183594,936.2432250976562,382.3616027832031,982.118408203125,512,982.118408203125c129.638427734375,0,240.4351806640625,-45.87518310546875,332.28802490234375,-137.83038330078125C936.2432250976562,752.4351806640625,982.118408203125,641.638427734375,982.118408203125,512c0,-129.63839721679688,-45.97760009765625,-240.33279418945312,-137.83038330078125,-332.2879943847656C752.4351806640625,87.75679779052734,641.638427734375,41.88159942626953,512,41.88159942626953ZM512,256c-36.147186279296875,0,-70.14401245117188,7.06561279296875,-102.1951904296875,20.88958740234375C377.8559875488281,290.91839599609375,349.4912109375,309.35040283203125,324.9151916503906,332.2879943847656c-22.937591552734375,24.576019287109375,-41.47198486328125,52.9407958984375,-55.39837646484375,84.88961791992188S248.627197265625,483.3280029296875,248.627197265625,519.372802734375c0,36.147216796875,6.96319580078125,70.14398193359375,20.889617919921875,102.1951904296875s32.460784912109375,60.3135986328125,55.39837646484375,84.88958740234375C349.4912109375,729.4976196289062,377.8559875488281,747.9296264648438,409.8048095703125,761.8560180664062C441.8559875488281,775.7824096679688,475.8528137207031,782.74560546875,512,782.74560546875c36.147216796875,0,70.14398193359375,-6.96319580078125,102.1951904296875,-20.88958740234375C646.1439819335938,747.9296264648438,674.5087890625,729.4976196289062,699.0847778320312,706.4575805664062c22.9376220703125,-24.57598876953125,41.4720458984375,-52.9407958984375,55.3984375,-84.88958740234375s20.88958740234375,-66.0479736328125,20.88958740234375,-102.1951904296875c0,-36.0447998046875,-6.96319580078125,-70.14401245117188,-20.88958740234375,-102.1951904296875S722.0223999023438,356.9664001464844,699.0847778320312,332.2879943847656C674.5087890625,309.35040283203125,646.1439819335938,290.91839599609375,614.1951904296875,276.88958740234375C582.1439819335938,263.06561279296875,548.147216796875,256,512,256Z",
symbolSize:13,
data: list.value.map(v=>v.estimateOutput)
},
{
name: '实际产量',
type: 'line',
itemStyle:{color:"#10CC40"},
symbol:"path://M150.11839294433594,150.11839294433594C250.26559448242188,50.07360076904297,370.8927917480469,0,512,0c141.107177734375,0,261.734375,50.07360076904297,361.881591796875,150.11839294433594C973.9263916015625,250.26559448242188,1024,370.8927917480469,1024,512c0,141.2095947265625,-50.0736083984375,261.8367919921875,-150.118408203125,361.881591796875C773.734375,973.9263916015625,653.107177734375,1024,512,1024c-141.10720825195312,0,-261.7344055175781,-50.0736083984375,-361.88160705566406,-150.118408203125C50.07360076904297,773.8367919921875,0,653.2095947265625,0,512C0,370.8927917480469,50.07360076904297,250.26559448242188,150.11839294433594,150.11839294433594ZM512,41.88159942626953c-85.2991943359375,0,-164.14718627929688,20.889598846435547,-236.33920288085938,62.771202087402344C203.4687957763672,146.4320068359375,146.4320068359375,203.4687957763672,104.65280151367188,275.6607971191406C62.77119827270508,347.9552001953125,41.88159942626953,426.7008056640625,41.88159942626953,512c0,129.638427734375,45.97760009765625,240.4351806640625,137.83040618896484,332.28802490234375C271.5647888183594,936.2432250976562,382.3616027832031,982.118408203125,512,982.118408203125c129.638427734375,0,240.4351806640625,-45.87518310546875,332.28802490234375,-137.83038330078125C936.2432250976562,752.4351806640625,982.118408203125,641.638427734375,982.118408203125,512c0,-129.63839721679688,-45.97760009765625,-240.33279418945312,-137.83038330078125,-332.2879943847656C752.4351806640625,87.75679779052734,641.638427734375,41.88159942626953,512,41.88159942626953ZM512,256c-36.147186279296875,0,-70.14401245117188,7.06561279296875,-102.1951904296875,20.88958740234375C377.8559875488281,290.91839599609375,349.4912109375,309.35040283203125,324.9151916503906,332.2879943847656c-22.937591552734375,24.576019287109375,-41.47198486328125,52.9407958984375,-55.39837646484375,84.88961791992188S248.627197265625,483.3280029296875,248.627197265625,519.372802734375c0,36.147216796875,6.96319580078125,70.14398193359375,20.889617919921875,102.1951904296875s32.460784912109375,60.3135986328125,55.39837646484375,84.88958740234375C349.4912109375,729.4976196289062,377.8559875488281,747.9296264648438,409.8048095703125,761.8560180664062C441.8559875488281,775.7824096679688,475.8528137207031,782.74560546875,512,782.74560546875c36.147216796875,0,70.14398193359375,-6.96319580078125,102.1951904296875,-20.88958740234375C646.1439819335938,747.9296264648438,674.5087890625,729.4976196289062,699.0847778320312,706.4575805664062c22.9376220703125,-24.57598876953125,41.4720458984375,-52.9407958984375,55.3984375,-84.88958740234375s20.88958740234375,-66.0479736328125,20.88958740234375,-102.1951904296875c0,-36.0447998046875,-6.96319580078125,-70.14401245117188,-20.88958740234375,-102.1951904296875S722.0223999023438,356.9664001464844,699.0847778320312,332.2879943847656C674.5087890625,309.35040283203125,646.1439819335938,290.91839599609375,614.1951904296875,276.88958740234375C582.1439819335938,263.06561279296875,548.147216796875,256,512,256Z",
symbolSize:13,
data: list.value.map(v=>v.realityPut)
},
]
}))
watch([()=>props.breed,()=>props.year],async n=>{
var res=await request("/api/variety/leftbelow",{
method:"post",
data:{
varietyName:n[0],
date:n[1],
region:"",
}
})
if(res.statu){
list.value=res.data
}else{
msg.error(res.msg||"获取产量预估失败!")
}
})
</script>

230
src/view/goods/mapPopover.vue

@ -1,230 +0,0 @@
<style lang="less">
.el-popover.mapPopover{
border-radius: 0;
background-size:100% 100%;
padding:0!important;
background-color:transparent;
border:none;
position:relative;
&.goods{
height:189px;
.name{
position:absolute;
color:#057FFB;
font-size:18px;
top: 23px;
left: 82px;
}
.address{
color:#fff;
font-size:16px;
position: absolute;
top: 53px;
left: 124px;
width: 139px;
text-align: center;
}
.vegetable{
position:absolute;
top: 79px;
left: 27px;
width: 277px;
display:flex;
justify-content: space-between;
span{
&:first-child{
color:#99A4AE;
font-size:16px;
}
&:nth-child(2){
color:#fff;
font-weight: bold;
font-size:18px;
&:after{
content:"亩";
color:#99A4AE;
font-size:16px;
font-weight: normal;
}
}
&:nth-child(3){
font-size:16px;
font-weight: bold;
color:#0C7EF0;
&:after{
content:"%";
}
}
}
}
.value{
position:absolute;
display: flex;
justify-content: space-around;
top: 113px;
left: 27px;
width: 277px;
&>div{
color:var(--c);
display:flex;
align-items: center;
.svg-icon{
margin-right:7px;
}
.num{
display:flex;
flex-direction: column;
span{
&:nth-child(2){
font-size:18px;
&:after{
content:"kg";
color:#99A4AE;
font-size:16px;
}
}
}
}
}
}
}
&>.content{
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
}
.plantBS-shangjiantou{
position:absolute;
font-weight: bold;
font-size:18px;
background-image:-webkit-linear-gradient(top, #fff,rgb(var(--c)));
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
top:46px;
cursor: pointer;
&:hover{
opacity: 0.7;
}
&:before{
text-shadow:1px -1px 2px rgba(var(--c),0.8);
margin-right:5px;
}
&.current{
left:80px;
}
&.past{
right:80px;
}
}
.dv-scroll-board{
position:absolute;
top:75px;
left:10px;
width:calc(100% - 20px);
height:154px;
.ceil,.header-item{
padding:0 3px;
font-size:16px;
}
.header-item{
color:#F1F5F9;
}
.ceil{
color:#A2B4C5;
}
}
}
</style>
<template>
<el-popover :visible="show" ref="popover" width="328px" :show-arrow="false" :popper-class="`mapPopover ${$route.path.match(/(\w+)$/)[1]}`" trigger="focus" placement="top" :virtual-ref="markerTarget">
<svg width="324.000000" height="186.000000" viewBox="0 0 324 186" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<path id="矢量 42" d="M6 5.5L6 178M0 171L317 171" stroke="#057FFB"/>
<g filter="url(#filter_17_4_dd)">
<path id="矢量 43" d="M12.5 8L12.5 166.5L317 166.5L317 8L120.5 8L115 15.5L38 15.5L32.5 8L12.5 8Z" fill-rule="evenodd" fill="#001625"/>
<path id="矢量 43" d="M12.5 166.5L317 166.5L317 8L120.5 8L115 15.5L38 15.5L32.5 8L12.5 8L12.5 166.5Z" stroke="#057FFB"/>
</g>
<path id="矢量 44" d="M9 9.5L9 4.5L35.5 4.5L39 11.5L112.5 11.5L116 4.5L313 4.5" stroke="#057FFB"/>
<circle id="椭圆 2" cx="319.500000" cy="4.000000" r="3.500000" stroke="#057FFB"/>
<rect id="矩形 4" x="28.500000" y="36.000000" width="41.000000" height="33.000000" fill="#057FFB"/>
<path id="矢量 45" d="M32.5 33L26.5 33L26.5 39" stroke="#057FFB"/>
<path id="矢量 46" d="M66.5 71L72.5 71L72.5 65" stroke="#057FFB"/>
<path id="矢量 47" d="M57 28L77.5 28L77.5 51L303 51L303 61.5" stroke="#057FFB"/>
<path id="矢量 48" d="M98.5 60L103 65L98.5 70" stroke="#10C945" stroke-width="2.000000" stroke-linejoin="round" stroke-linecap="round"/>
<path id="矢量 49" d="M107.5 60L112 65L107.5 70" stroke="#10C945" stroke-width="2.000000" stroke-linejoin="round" stroke-linecap="round"/>
<path id="矢量 50" d="M116.5 60L121 65L116.5 70" stroke="#10C945" stroke-width="2.000000" stroke-linejoin="round" stroke-linecap="round"/>
<path id="矢量 50" d="M270 60L265.5 65L270 70" stroke="#10C945" stroke-width="2.000000" stroke-linejoin="round" stroke-linecap="round"/>
<path id="矢量 48" d="M288 60L283.5 65L288 70" stroke="#10C945" stroke-width="2.000000" stroke-linejoin="round" stroke-linecap="round"/>
<path id="矢量 49" d="M279 60L274.5 65L279 70" stroke="#10C945" stroke-width="2.000000" stroke-linejoin="round" stroke-linecap="round"/>
<path id="多边形 3" d="M164.601 180.471L158.244 172.051C157.995 171.722 158.23 171.25 158.643 171.25L171.357 171.25C171.77 171.25 172.005 171.722 171.756 172.051L165.399 180.471C165.199 180.736 164.801 180.736 164.601 180.471Z" fill-rule="evenodd" fill="#0C7EF0" fill-opacity="0.300000"/>
<path id="多边形 2" d="M164.601 185.471L158.244 177.051C157.995 176.722 158.23 176.25 158.643 176.25L171.357 176.25C171.77 176.25 172.005 176.722 171.756 177.051L165.399 185.471C165.199 185.736 164.801 185.736 164.601 185.471Z" fill-rule="evenodd" fill="#0C7EF0"/>
<path transform="scale(0.03)" transform-origin="34 38" d="M884.224 834.048h-20.992V381.952c0-17.408-14.336-32.256-32.256-32.256h-157.696c-4.608 0-7.68 3.584-7.68 7.68v476.16h-34.304V172.544c0-24.576-20.48-45.056-45.056-45.056h-373.76c-24.576 0-45.056 20.48-45.056 45.056v661.504h-19.456c-15.872 0-28.672 12.8-28.672 28.672s12.8 28.672 28.672 28.672h736.768c15.872 0 28.672-12.8 28.672-28.672s-13.312-28.672-29.184-28.672zM312.32 310.272h174.592c14.336 0 25.6 11.264 25.6 25.6s-11.264 25.6-25.6 25.6H312.32c-14.336 0-25.6-11.264-25.6-25.6 0.512-14.336 11.776-25.6 25.6-25.6zM312.32 450.56h174.592c14.336 0 25.6 11.264 25.6 25.6s-11.264 25.6-25.6 25.6H312.32c-14.336 0-25.6-11.264-25.6-25.6s11.776-25.6 25.6-25.6z m0 141.312h174.592c14.336 0 25.6 11.264 25.6 25.6s-11.264 25.6-25.6 25.6H312.32c-14.336 0-25.6-11.264-25.6-25.6s11.776-25.6 25.6-25.6z" fill="#fff"></path>
<defs>
<filter id="filter_17_4_dd" x="2.000000" y="-2.500000" width="325.500000" height="179.500000" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
<feOffset dx="0" dy="0"/>
<feGaussianBlur stdDeviation="3.33333"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.047059 0 0 0 0 0.49412 0 0 0 0 0.94118 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect_dropShadow_1"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect_dropShadow_1" result="shape"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dx="0" dy="0"/>
<feGaussianBlur stdDeviation="10"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.047059 0 0 0 0 0.49412 0 0 0 0 0.94118 0 0 0 0.4 0"/>
<feBlend mode="normal" in2="shape" result="effect_innerShadow_2"/>
</filter>
</defs>
</svg>
<div class="content" @click="$emit('click')">
<span class="name">{{detail.companyName}}</span>
<span class="address over">{{detail.baseName}}</span>
<div class="vegetable">
<span>{{detail.varietyName}}</span> <span>{{detail.plantArea}}</span> <span>{{detail.totalArea==0?0:Math.round(detail.plantArea/detail.totalArea*10000)/100}}</span>
</div>
<div class="value">
<div style="--c:#0C7EF0;">
<svg-icon name="bar"/>
<div class="num">
<span>预估产量</span>
<span>{{detail.estimateOutput}}</span>
</div>
</div>
<div style="--c:#10C945;">
<svg-icon name="bar"/>
<div class="num">
<span>已采收</span>
<span>{{detail.realityPut}}</span>
</div>
</div>
</div>
</div>
</el-popover>
</template>
<script setup>
import { inject, nextTick, reactive, ref, shallowRef, unref, watch } from "vue"
var route=inject("route")
var show=ref(false)
var markerTarget=ref()
var popover=ref()
var detail=shallowRef({})
watch(route,n=>{
show.value=false
})
defineExpose({
show:(dom,val)=>{
detail.value=val
markerTarget.value=dom
show.value=true
},
hide:()=>{
show.value=false
}
})
</script>

221
src/view/goods/right_1.vue

@ -1,221 +0,0 @@
<style lang="less" scoped>
.right_1{
.data{
display:flex;
align-items: center;
margin-top:16px;
.echarts{
flex-shrink: 0;
}
.items{
flex-grow: 1;
div{
display:flex;
align-items: center;
position:relative;
&+div{
margin-top:23px;
}
&:before{
content:"";
position:relative;
z-index: 10;
width:10px;
height:10px;
background:var(--c);
margin-right:18px;
}
&:after{
content:"";
position:absolute;
width:100%;
height:11px;
top:14px;
left:5px;
border-left:1px solid rgba(5, 128, 251, 0.3);
border-bottom:1px solid rgba(5, 128, 251, 0.3);
}
span{
font-size:16px;
&:first-child{
color:#FFFFFF;
}
&:nth-child(2){
margin-left:auto;
color:var(--c);
font-weight: bold;
}
}
}
}
}
&>.detail{
margin-top:20px;
&>div{
display:flex;
align-items: center;
&+div{
margin-top:10px;
}
.number{
flex-shrink: 0;
color:#fff;
width:30px;
height:20px;
line-height: 20px;
text-align: center;
margin-right:9px;
background:var(--c);
}
.img{
flex-shrink: 0;
width:39px;
height:39px;
line-height: 39px;
text-align: center;
border:2px solid var(--c);
background:rgba(0,0,0,0.4);
position:relative;
margin-right:10px;
&:before{
content:"";
position:absolute;
top:-4px;
left:-4px;
width:4px;
height:4px;
border-top:1px solid var(--c);
border-left:1px solid var(--c);
}
&:after{
content:"";
position:absolute;
bottom:-4px;
right:-4px;
width:4px;
height:4px;
border-bottom:1px solid var(--c);
border-right:1px solid var(--c);
}
}
.info{
color:#fff;
font-size:16px;
span{
color:var(--c);
}
}
}
}
}
</style>
<template>
<view class="right_1">
<subTitle color="12, 128, 239" text="病害分析">
<el-date-picker class="default" popper-class="monthRange" type="monthrange" :modelValue="['2023-09','2023-10']"/>
</subTitle>
<div class="data">
<v-echarts :option="opt" style="height:165px;width:165px;margin-right:40px;pointer-events: all;"/>
<div class="items">
<div v-for="(v,k) in list" :key="k" :style="{'--c':colors[k%colors.length]}">
<span>{{v.name}}</span> <span>{{v.value}}</span>
</div>
</div>
</div>
<div class="detail">
<div style="--c:#0C7EF0;">
<span class="number">01</span>
<span class="img">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAg5JREFUOE99kz1rFFEYhZ9zd3ajEk1U1Ihi7GxEg6BERFH/gpWV/0AQu0DYVQvBwhSCjQT0ByhoYWUnqCB+NOlSmBi/iEk0RGMyM/fIzKxhNwSnmrn3vM993znniuK54s00aCQ92THE2YxknFnm6UXl/hZMutyXJPVLiLcZySt+ssKYltVo+bBjesqhtpU8RtV0JEaeK3g7plECTGr0PYhhW5MEcsEf8vy1klb2iOgziFTWY/BvAkOODCFqJQCizITES0s9ti8AmxBvlDSzj7J3InKbCcQnpJOy+9rF7SZYAl5gCu1RmbphUfVWdtdml0ROdEDKy5NN3glArhEdEcLBDk5kzykZTUcI7MCUmwK5encXwEiiZogYIwIwX3Qwaegnduu7iv99BLGmC0Ur/FDSTL8IBjYs6Fg0WhL+bDQgvK0yh6+qN7MP4MH/AQy/bN1HPA2OLaTjlV5TqjdXp0AH2oBV7G9W6JXcX05qUuSHwjdtnbM0Ithd6T3dBbCZA8YKS5Euy95jeCZ5lBgOIa5jD5ZObAQAlkEPtJrfiY1wEXGayDWj3iDfwhSQdvEGHRT2WCwg7mVZMk6y4oTaQZkbwAkorev8tdNVEvH+rmUzi7iNeQdcFZzviPWa1GimuAszsvetd8FoQY6LSHuhfanWiUobk2b2BHu4nK2IcWWwsHuq2JISlK1LZTWKeP8X55v8Dg5d8ZAAAAAASUVORK5CYII="/>
</span>
<span class="info over">一年中<span>高发时段</span>678月份</span>
</div>
<div style="--c:#10C945;">
<span class="number">02</span>
<span class="img">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAAAXNSR0IArs4c6QAAAZVJREFUOE+d0jtrVFEUxfH/OnOTWEUiRifXQrESP4EIVgEzN136fAEVFHzg+MBCEMRe8YGVRTobYcJMCGn0A1iqYJegE41RIjoz954lN1MZBjNxNxsO5/zYe3HEgDrQyMZHEy4FMY95k+fca2eLHxHeeV2DgOpK7Zh6PBaaAX+N+IHth59nWj+HAtLm2RNW5YngjCHKfhkLXfg0u7g+FFBtTJ8Mycgz0GmgCyxoq3tldW55A+hPLWK/7axGNpZWPEfQfcxRTMfilfCLCHlwHLWCovU9TzrvNLkyWw05k7+KYnVfJx9JxpJph3AOOCVIwLa0BWzvLzuU3eg3pqm0mT1HPgI8QjpIpG44LlEZFPDfZ15T2qp9Mcpl3zJMIV0V7B/isUEfygk2LLrG9YAOY64jJnYHynC9pLSVrVvkjq4HbQP1YQCbH8JP/x/AbZmbJdC2KPY6AfC+wOf7IUq9PQLGft1TcVFTrdqmUA/iDVtVpGuC8X+FaJyXvxPlt5UuZW+xJwR3CnxIhMvSLoBpS9xd+7a58AdsX8afVzq8owAAAABJRU5ErkJggg=="/>
</span>
<span class="info over"><span>推荐使用肥料</span>xxx化肥xxx水溶性肥料</span>
</div>
<div style="--c:#00E4FF;">
<span class="number">03</span>
<span class="img">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAATCAYAAACgADyUAAAAAXNSR0IArs4c6QAAAi5JREFUOE+Nkd9rzXEcxl/P55ydnfM14QKNlmlk2WTGFREuRFKr1cqdKX8A7Wa0P0Bu3Ai1S1xwwYXkUsKIdhSTH0XKnDNEZDvb2TnfR9+zuLDleK4+9en1fj/v5xF2iPKFbktHhHYactjPSIUrpcnyLba3lFhAyjwtdKTsQaFDmMhyDFjWaJzS0PSru3fo66v+zSqbL54K+LhNJOmViSeF1huWgK+VrBN0N3+eB+byhasyh4DXlsewJLHYsFvmbVWV3pktLW8WAMfPyKHf0ktBCbzE8F54L2iExvSxqY3LC/Otjn7cFYIGDMsUEyUWBS/AWQcNlxq+3qCjozwPZMyZqFzcbNgj04doNlx2yjenf1Yf11K1Qw2U4iQ3DJqbZGWeFdpTFYaF1iENVirxg3Sgaaox/SFXdpuDs9NBz6PZaksMkRblP3ThBpczkJ6NzwrWEjiNvRWzJkaXJO3HrERcxO4FtyoaLdwmydHxdVCPRSvoArhXpg3CeSveJ1htc06i39CqXL7wQzBje1gKncbdwH3sTRIrsO5ZbhdaargrtB3coChf/AaeIeYCcqelA8nRQFombTENZGRC8pbJIiZ+gyXMeQc2Awdrn/+UxhPwu4VkHoJXYTYg0nXB3GhhRGKboSqTQqSSxv4DLB4WHkB0AXNF15XHxZOPUS5FD9KQEpt1t9WmTsxZGvvUlKvER2WfrBVdX1/+3JJ9VFwbMh4y3iGriqjOX+6kkiDz7heTQAYBNpj7bQAAAABJRU5ErkJggg=="/>
</span>
<span class="info over"><span>发生部位</span>大多发生在根茎部位症状多为变色烂叶以及根大多发生在根茎部位症状多为变色烂叶以及根</span>
</div>
</div>
</view>
</template>
<script setup>
import request from '@/config/request'
import { computed, inject, shallowRef, watch } from 'vue'
import subTitle from '../subTitle.vue'
var msg=inject("msg")
var props=defineProps({
breed:{
type:String,
default:""
},
year:{
type:String,
default:""
}
})
var colors=["#10C945","#057FFB","#fff","#00E4FF"]
var list=shallowRef([])
var opt=computed(()=>({
color:colors,
series: list.value.reverse().map((v,k)=>({
type: 'gauge',
startAngle: 90,
endAngle: -270,
radius:`${40+60/3*k}%`,
progress: {
show: true,
overlap: false,
roundCap: true,
clip: false,
},
axisLine: {
show:false,
lineStyle: {
width: 10
}
},
pointer: { show: false },
splitLine: { show: false },
axisTick: { show: false },
axisLabel: { show: false },
title: { show:false },
detail: { show:false },
data: [{
value: Math.round(v.value/list.value.reduce((a,b)=>a+b.value,0)*10000)/100,
itemStyle:{color:v.color},
name: v.name,
}],
}))
}))
watch([()=>props.breed,()=>props.year], async n=>{
var res=await request("/api/variety/righttop",{
method:"post",
data:{
varietyName:n[0],
date:n[1],
region:"",
}
})
if(res.statu){
list.value=res.data.map(v=>({
name:v.pestName,
value:v.pestNum
}))
}else{
msg.error(res.msg||"病害分析失败")
}
})
</script>

251
src/view/goods/right_2.vue

@ -1,251 +0,0 @@
<style lang="less" scoped>
.right_2{
margin-top:10px;
.data{
display:flex;
align-items: center;
margin-top:16px;
.echarts{
flex-shrink: 0;
}
}
&>.detail{
margin-top:20px;
&>div{
display:flex;
align-items: center;
&+div{
margin-top:10px;
}
.number{
flex-shrink: 0;
width:30px;
height:20px;
line-height: 20px;
text-align: center;
margin-right:9px;
color:#fff;
background:var(--c);
}
.img{
flex-shrink: 0;
width:39px;
height:39px;
line-height: 39px;
text-align: center;
border:2px solid var(--c);
background:rgba(0,0,0,0.4);
position:relative;
margin-right:10px;
&:before{
content:"";
position:absolute;
top:-4px;
left:-4px;
width:4px;
height:4px;
border-top:1px solid var(--c);
border-left:1px solid var(--c);
}
&:after{
content:"";
position:absolute;
bottom:-4px;
right:-4px;
width:4px;
height:4px;
border-bottom:1px solid var(--c);
border-right:1px solid var(--c);
}
}
.info{
color:#fff;
font-size:16px;
span{
color:var(--c);
}
}
}
}
}
</style>
<template>
<div class="right_2">
<subTitle color="16, 201, 69" text="虫害频率">
<el-date-picker class="default" popper-class="monthRange" type="monthrange" :modelValue="['2023-09','2023-10']"/>
</subTitle>
<div class="data" @mouseenter="isEnter=true" @mouseout="isEnter=false">
<v-echarts autoresize ref="echart" :option="opt" style="height:240px;pointer-events: all;"/>
</div>
<div class="detail">
<div style="--c:#0C7EF0;">
<span class="number">01</span>
<span class="img">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAg5JREFUOE99kz1rFFEYhZ9zd3ajEk1U1Ihi7GxEg6BERFH/gpWV/0AQu0DYVQvBwhSCjQT0ByhoYWUnqCB+NOlSmBi/iEk0RGMyM/fIzKxhNwSnmrn3vM993znniuK54s00aCQ92THE2YxknFnm6UXl/hZMutyXJPVLiLcZySt+ssKYltVo+bBjesqhtpU8RtV0JEaeK3g7plECTGr0PYhhW5MEcsEf8vy1klb2iOgziFTWY/BvAkOODCFqJQCizITES0s9ti8AmxBvlDSzj7J3InKbCcQnpJOy+9rF7SZYAl5gCu1RmbphUfVWdtdml0ROdEDKy5NN3glArhEdEcLBDk5kzykZTUcI7MCUmwK5encXwEiiZogYIwIwX3Qwaegnduu7iv99BLGmC0Ur/FDSTL8IBjYs6Fg0WhL+bDQgvK0yh6+qN7MP4MH/AQy/bN1HPA2OLaTjlV5TqjdXp0AH2oBV7G9W6JXcX05qUuSHwjdtnbM0Ithd6T3dBbCZA8YKS5Euy95jeCZ5lBgOIa5jD5ZObAQAlkEPtJrfiY1wEXGayDWj3iDfwhSQdvEGHRT2WCwg7mVZMk6y4oTaQZkbwAkorev8tdNVEvH+rmUzi7iNeQdcFZzviPWa1GimuAszsvetd8FoQY6LSHuhfanWiUobk2b2BHu4nK2IcWWwsHuq2JISlK1LZTWKeP8X55v8Dg5d8ZAAAAAASUVORK5CYII="/>
</span>
<span class="info over">一年中<span>高发时段</span>678月份</span>
</div>
<div style="--c:#10C945;">
<span class="number">02</span>
<span class="img">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAAAXNSR0IArs4c6QAAAZVJREFUOE+d0jtrVFEUxfH/OnOTWEUiRifXQrESP4EIVgEzN136fAEVFHzg+MBCEMRe8YGVRTobYcJMCGn0A1iqYJegE41RIjoz954lN1MZBjNxNxsO5/zYe3HEgDrQyMZHEy4FMY95k+fca2eLHxHeeV2DgOpK7Zh6PBaaAX+N+IHth59nWj+HAtLm2RNW5YngjCHKfhkLXfg0u7g+FFBtTJ8Mycgz0GmgCyxoq3tldW55A+hPLWK/7axGNpZWPEfQfcxRTMfilfCLCHlwHLWCovU9TzrvNLkyWw05k7+KYnVfJx9JxpJph3AOOCVIwLa0BWzvLzuU3eg3pqm0mT1HPgI8QjpIpG44LlEZFPDfZ15T2qp9Mcpl3zJMIV0V7B/isUEfygk2LLrG9YAOY64jJnYHynC9pLSVrVvkjq4HbQP1YQCbH8JP/x/AbZmbJdC2KPY6AfC+wOf7IUq9PQLGft1TcVFTrdqmUA/iDVtVpGuC8X+FaJyXvxPlt5UuZW+xJwR3CnxIhMvSLoBpS9xd+7a58AdsX8afVzq8owAAAABJRU5ErkJggg=="/>
</span>
<span class="info over"><span>推荐使用肥料</span>xxx化肥xxx水溶性肥料</span>
</div>
<div style="--c:#00E4FF;">
<span class="number">03</span>
<span class="img">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAATCAYAAACgADyUAAAAAXNSR0IArs4c6QAAAi5JREFUOE+Nkd9rzXEcxl/P55ydnfM14QKNlmlk2WTGFREuRFKr1cqdKX8A7Wa0P0Bu3Ai1S1xwwYXkUsKIdhSTH0XKnDNEZDvb2TnfR9+zuLDleK4+9en1fj/v5xF2iPKFbktHhHYactjPSIUrpcnyLba3lFhAyjwtdKTsQaFDmMhyDFjWaJzS0PSru3fo66v+zSqbL54K+LhNJOmViSeF1huWgK+VrBN0N3+eB+byhasyh4DXlsewJLHYsFvmbVWV3pktLW8WAMfPyKHf0ktBCbzE8F54L2iExvSxqY3LC/Otjn7cFYIGDMsUEyUWBS/AWQcNlxq+3qCjozwPZMyZqFzcbNgj04doNlx2yjenf1Yf11K1Qw2U4iQ3DJqbZGWeFdpTFYaF1iENVirxg3Sgaaox/SFXdpuDs9NBz6PZaksMkRblP3ThBpczkJ6NzwrWEjiNvRWzJkaXJO3HrERcxO4FtyoaLdwmydHxdVCPRSvoArhXpg3CeSveJ1htc06i39CqXL7wQzBje1gKncbdwH3sTRIrsO5ZbhdaargrtB3coChf/AaeIeYCcqelA8nRQFombTENZGRC8pbJIiZ+gyXMeQc2Awdrn/+UxhPwu4VkHoJXYTYg0nXB3GhhRGKboSqTQqSSxv4DLB4WHkB0AXNF15XHxZOPUS5FD9KQEpt1t9WmTsxZGvvUlKvER2WfrBVdX1/+3JJ9VFwbMh4y3iGriqjOX+6kkiDz7heTQAYBNpj7bQAAAABJRU5ErkJggg=="/>
</span>
<span class="info over"><span>发生部位</span>大多发生在根茎部位症状多为变色烂叶以及根大多发生在根茎部位症状多为变色烂叶以及根</span>
</div>
</div>
</div>
</template>
<script setup>
import request from "@/config/request"
import { computed, inject, ref, shallowRef, watch, onUnmounted } from 'vue'
import subTitle from '../subTitle.vue'
var msg=inject("msg")
var props=defineProps({
breed:{
type:String,
default:""
},
year:{
type:String,
default:""
}
})
var event=inject("event")
var list=shallowRef([])
var max=4
var opt=computed(()=>({
tooltip: {
trigger: 'axis',
formatter(params){
return ` ${params[0].marker} ${params[0].name} ${params[0].value} `
}
},
grid: {
left: 10,
right: 10,
bottom: 10,
top:35,
containLabel: true
},
dataZoom:{
type:"inside",
startValue:0,
endValue: max,
zoomOnMouseWheel:false,
moveOnMouseMove:true,
moveOnMouseWheel:true,
},
xAxis: {
type: 'category',
axisLine:{show:false},
axisTick:{show:false},
axisLabel:{
color:"#E2EFFA",
fontSize:16,
interval:0,
},
data: list.value.map(v=>v.name)
},
yAxis: {
type: 'value',
name:"频率/次",
nameTextStyle:{
color:"#E2EFFA",
fontSize:16,
},
axisLabel:{
color:"#E2EFFA",
fontSize:16,
},
splitLine:{
lineStyle:{
color:"#4E7C98",
type:"dashed",
}
}
},
series: [
{
type: 'bar',
itemStyle:{color:{
type: 'linear',
x: 0, y: 0, x2: 0, y2: 1,
colorStops: [
{offset: 0, color: '#10C945'},
{offset: 1, color: '#0C7FEF'}
],
global: false
}},
barWidth:20,
data: list.value.map(v=>v.value)
},
{
type:"pictorialBar",
symbolRepeat:"fixed",
itemStyle:{color:"rgba(0,0,0,0.6)"},
symbol:"rect",
symbolClip:true,
symbolMargin:3,
symbolSize:[20,2],
symbolPosition:"start",
z:5,
data:list.value.map(v=>v.value)
}
]
}))
var isEnter=ref(false)
var echart=ref()
watch([()=>props.breed,()=>props.year], async n=>{
var res=await request("/api/variety/rightbelow",{
method:"post",
data:{
varietyName:n[0],
date:n[1],
region:"",
}
})
if(res.statu){
list.value=res.data.map(v=>({
name:v.pestName,
value:v.pestNum
}))
}else{
msg.error(res.msg||"获取虫害频率失败!")
}
})
event.on("updateData",()=>{
if(list.value.length>max && !isEnter.value && echart.value){
var start=echart.value.getOption().dataZoom[0].startValue+1
if(start+max+1>list.value.length){
echart.value.dispatchAction({
type:"dataZoom",
startValue:0,
endValue:max,
})
}else{
echart.value.dispatchAction({
type:"dataZoom",
startValue:start,
endValue:max+start,
})
}
}
})
onUnmounted(()=>{
event.off('updateData')
})
</script>

275
src/view/home.vue

@ -1,194 +1,58 @@
<style lang="less" scoped> <style lang="less" scoped>
#map{
height:100%;
&:deep .amap-marker{
&>div{
position:relative;
&>img{
position:absolute;
transform: translateX(-50%);
bottom:0;
}
&>.name{
position:absolute;
width:max-content;
color:#fff;
transform: translateX(-50%);
font-size:14px;
top:0;
}
}
}
}
.container-box{ .container-box{
background:transparent; .content{
--bg:12, 44, 78; height:100%;
pointer-events: none; position:relative;
&>.head{ &>.search{
position:absolute; position:absolute;
top:0; top:100px;
left:0; left:40px;
z-index: 20;
width:100%;
height:99px;
background-color:rgb(var(--bg));
background-image:url(@/assets/img/head_bg.png);
background-size:100% 100%;
.home{
color:#0C7EF0;
font-size:37px;
position:absolute;
top:10px;
left:10px;
cursor: pointer;
pointer-events: all;
transition: all 0.3s;
&:hover{
opacity: 0.7;
}
}
.btns{
position:absolute;
top: 11px;
left: 22px;
display: flex;
align-items: center;
pointer-events: all;
span{
width:114px;
height:43px;
background-image:url(@/assets/img/head_title_bg.png);
background-size:100% 100%;
display:flex; display:flex;
justify-content: center;
align-items: center; align-items: center;
cursor: pointer; &>div{
transition: all 0.3s; margin-right:20px;
&:hover{
opacity: 0.7;
}
&:before{
content:attr(data-title);
font-size:18px;
background-image:-webkit-linear-gradient(top, #fff,#429EFA);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
} }
&+span{
margin-left:10px;
}
}
}
.title{
letter-spacing: 5px;
position:absolute;
font-weight: bold;
font-size:48px;
background-image:-webkit-linear-gradient(top, #fff,#429EFA);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
left:50%;
transform: translate(-50%,10px);
}
.time{
position:absolute;
right: 68px+40px;
top: 24px;
color:#1587FC;
font-size:18px;
}
.fullScreen{
pointer-events: all;
cursor: pointer;
position:absolute;
right:20px+40px;
top:20px;
color:#1587FC;
font-size:30px;
transition: all 0.3s;
&:hover{
opacity: 0.7;
}
}
.out{
pointer-events: all;
cursor: pointer;
position:absolute;
right:20px;
top:20px;
color:#1587FC;
font-size:30px;
transition: all 0.3s;
&:hover{
opacity: 0.7;
} }
} &>.time{
} position:absolute;
&>.el-select{ display:flex;
pointer-events: all; align-items: center;
position:absolute; top:50%;
top:99px+38px; left:40px;
left:50%; &:before{
transform: translateX(-50%); content:"";
width:589px; width:90px;
&:deep .el-input{ height:90px;
--el-input-border-radius:42px; background-image: url("data:image/svg+xml,%3Csvg width='90' height='90' viewBox='0 0 90 90' fill='none' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E %3Ccircle cx='45' cy='45' r='29' transform-origin='45 45' fill='%2303FAF6'%3E %3Canimate attributeName='opacity' from='0.5' to='0' begin='0s' dur='3s' repeatCount='indefinite'/%3E %3CanimateTransform attributeName='transform' type='scale' from='1.3' to='1.6' begin='0s' dur='3s' repeatCount='indefinite'/%3E %3C/circle%3E %3Ccircle cx='45' cy='45' r='29' transform-origin='45 45' fill='%2303FAF6'%3E %3Canimate attributeName='opacity' from='1' to='0.5' begin='0s' dur='3s' repeatCount='indefinite'/%3E %3CanimateTransform attributeName='transform' type='scale' from='1' to='1.3' begin='0s' dur='3s' repeatCount='indefinite'/%3E %3C/circle%3E %3Ccircle cx='45' cy='45' r='29' fill='%2303FAF6'/%3E %3Cpath d='M46.4527 28.8389L46.581 28.8468C54.8586 29.648 61.2292 36.6258 61.2292 45C61.2292 53.9633 53.9633 61.2292 45 61.2292C36.0367 61.2292 28.7708 53.9633 28.7708 45C28.7679 42.9748 29.1325 41.0181 29.8647 39.1299C30.5969 37.2416 31.6467 35.5506 33.0142 34.0568C33.1204 33.9405 33.2449 33.8489 33.3875 33.7821C33.5302 33.7153 33.6802 33.6783 33.8376 33.6712C33.995 33.6641 34.1477 33.6873 34.2958 33.741C34.444 33.7946 34.5762 33.8746 34.6925 33.9808C34.8088 34.087 34.9004 34.2115 34.9672 34.3542C35.034 34.4968 35.071 34.6469 35.0781 34.8042C35.0852 34.9616 35.062 35.1143 35.0083 35.2625C34.9547 35.4106 34.8747 35.5428 34.7685 35.6591C33.6008 36.934 32.7045 38.3773 32.0794 39.9891C31.4543 41.601 31.1431 43.2712 31.1458 45C31.1458 52.6515 37.3485 58.8542 45 58.8542C52.6515 58.8542 58.8542 52.6515 58.8542 45C58.8542 38.1204 53.8152 32.3428 47.1399 31.3097L46.9039 31.2757L46.9039 36.2917L46.8984 36.4057C46.8842 36.5526 46.844 36.6919 46.7778 36.8238C46.7116 36.9557 46.6239 37.0712 46.5146 37.1703C46.4053 37.2695 46.2819 37.3457 46.1443 37.3988C46.0066 37.452 45.864 37.4786 45.7164 37.4786C45.5689 37.4786 45.4263 37.452 45.2887 37.3988C45.151 37.3457 45.0276 37.2695 44.9183 37.1703C44.8091 37.0712 44.7213 36.9557 44.6551 36.8238C44.5889 36.6919 44.5487 36.5526 44.5345 36.4057L44.529 36.2917L44.529 30.7088C44.5291 30.4562 44.5783 30.2136 44.6767 29.9809C44.7751 29.7482 44.9149 29.5438 45.096 29.3677C45.2772 29.1916 45.4854 29.0577 45.7208 28.966C45.9562 28.8742 46.2002 28.8319 46.4527 28.8389Z' fill-rule='nonzero' fill='%23DEF8F8'/%3E %3Cpath d='M39.262 38.0397L46.098 43.5038C46.2313 43.6103 46.3516 43.7298 46.4589 43.8625C46.5661 43.9952 46.6579 44.1378 46.7341 44.2905C46.8103 44.4431 46.8692 44.6022 46.9108 44.7677C46.9523 44.9332 46.9756 45.1012 46.9807 45.2717C46.9857 45.4423 46.9723 45.6113 46.9405 45.779C46.9087 45.9466 46.8592 46.1088 46.7921 46.2657C46.725 46.4225 46.6418 46.5703 46.5425 46.7091C46.4432 46.8478 46.3301 46.9743 46.2033 47.0884C46.0776 47.2015 45.9411 47.2996 45.7939 47.3827C45.6466 47.4658 45.492 47.5318 45.3302 47.5809C45.1684 47.6299 45.0032 47.6608 44.8346 47.6735C44.666 47.6862 44.498 47.6805 44.3306 47.6562C44.1633 47.632 44.0006 47.5898 43.8425 47.5298C43.6845 47.4697 43.5348 47.3932 43.3936 47.3002C43.2524 47.2072 43.1229 47.1 43.0053 46.9785C42.8877 46.8571 42.7846 46.7243 42.6962 46.5802L38.0927 39.0712C37.9926 38.9073 37.9568 38.7303 37.9855 38.5404C38.0142 38.3505 38.1005 38.192 38.2446 38.0649C38.3886 37.9378 38.5566 37.8719 38.7487 37.8671C38.9407 37.8624 39.1118 37.9199 39.262 38.0397Z' fill-rule='nonzero' fill='%23DEF8F8'/%3E %3C/svg%3E ");
--el-input-bg-color:rgba(1, 19, 48, 0.5);
--el-input-icon-color:#68adf3;
--el-input-text-color:#67b3ff;
&.is-focus>.el-input__wrapper{
box-shadow:0 0 3px 1px #0C7FF0!important;
}
.el-input__wrapper{
border:1px solid #0C7FF0;
box-shadow: none;
&:hover{
box-shadow:0 0 3px 1px rgba(12, 126, 240, 0.5);
} }
input{ &:after{
font-size:18px; content:"";
height:41px!important; height:12px;
font-weight: bold!important; width:1706px;
&::-webkit-input-placeholder{ background:#03FAF6;
color:rgba(71, 156, 241, 0.8); transform: translateX(-5px);
font-size:16px;
}
} }
} }
} }
}
&>.content{
position:absolute;
top:99px;
left:0;
width:100%;
height: calc(100% - 99px);
display:flex;
justify-content: space-between;
&.bgShadow{
background:linear-gradient(to right, rgba(var(--bg), 1) 250px, transparent 40%, transparent 60%, rgba(var(--bg), 1) 1636px);
}
}
} }
</style> </style>
<template> <template>
<container :bg="!isMap?require('@/assets/img/park-bg.png'):''"> <container :bg="require('@/assets/img/bg.png')">
<template #ready> <template #ready>
<div class="head"> <div class="content">
<div class="btns" v-if="/park$/.test($route.path)"> <div class="search">
<span data-title="企业专栏" v-if="!/company$/.test($route.path)" @click="$router.push({path:'/company'})"/> <el-select v-model="demo" popper-class="search-popper">
<span data-title="品种专栏" v-if="!/goods$/.test($route.path)" @click="$router.push({path:'/goods'})"/> <el-option :value="1" label="1"/>
<el-option :value="2" label="2"/>
</el-select>
<el-date-picker
popper-class="date-popper"
type="daterange"
start-placeholder="开始时间"
end-placeholder="结束时间"
v-model="date"/>
</div> </div>
<svg-icon name="home" class="home" v-else @click="$router.push({path:'/park'})"/> <div class="time"/>
<span class="title">{{$route.meta.title}}</span>
<span class="time">{{time}}</span>
<svg-icon class="fullScreen" name="fullScreen" @click="fullscreen"/>
<svg-icon class="out" name="out" @click="out"/>
</div>
<div class="content" :class="{bgShadow:!/park$/.test($route.path)}">
<router-view/>
</div> </div>
</template> </template>
</container> </container>
@ -196,68 +60,15 @@
<script setup> <script setup>
import request from '@/config/request' import request from '@/config/request'
import { computed, inject, onMounted, onUnmounted, reactive, ref, shallowRef, watch } from 'vue' import { computed, inject, onMounted, onUnmounted, reactive, ref, shallowRef, watch } from 'vue'
import AMAPLoader from '@amap/amap-jsapi-loader'
import region from './yuanmou'
var event = inject("event") var event = inject("event")
var route=inject("route") var route=inject("route")
var {commit,getters}=inject('store') var {commit,getters}=inject('store')
var msg=inject("msg")
var box=inject('box')
var time=ref(new Date().format('yyyy-MM-dd hh:mm')) var demo=ref("")
var timeOut=null var date=ref([])
var interval=null
var isMap=computed(()=>/company$|goods$/.test(route.path))
function refreshTime(){
clearTimeout(timeOut)
time.value=new Date().format('yyyy-MM-dd hh:mm')
timeOut=setTimeout(()=>{
refreshTime()
},1000*59)
}
function fullscreen() {
if (document.fullscreenElement === null) {
if (document.mozFullScreenEnabled) {
return Promise.reject(new Error("全屏模式被禁用"));
}
if (document.body.requestFullscreen) {
document.body.requestFullscreen();
} else if (document.body.mozRequestFullScreen) {
document.body.mozRequestFullScreen();
} else if (document.body.msRequestFullscreen) {
document.body.msRequestFullscreen();
} else if (document.body.webkitRequestFullscreen) {
document.body.webkitRequestFullScreen();
}
} else {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
}
}
}
function out(){
box.confirm("确定退出大屏?",'提示').then(e=>{
commit('data/clearToken')
})
}
onMounted(async ()=>{ onMounted(async ()=>{
refreshTime()
interval=setInterval(()=>{
event.emit("updateData")
},2000)
})
onUnmounted(()=>{
clearTimeout(refreshTime)
clearInterval(interval)
}) })
</script> </script>

137
src/view/login.vue

@ -1,137 +0,0 @@
<style lang="less" scoped>
.content{
position:absolute;
top:50%;
left:50%;
transform: translate(-50%,-50%);
width:800px+608px;
padding:144px 242px 140px 747px;
height:772px;
background-image:url(@/assets/img/login_bg2.png),url(@/assets/img/login_bg1.png);
background-repeat: no-repeat;
background-position:513px center,left center;
display:flex;
flex-direction: column;
align-items: center;
justify-content: space-evenly;
.name{
color:#fff;
font-weight: bold;
position:absolute;
font-size:50px;
top:10px;
}
.title{
height:101px;
width:404px;
background-image:url(@/assets/img/login_form1.png);
font-weight: bold;
font-size:38px;
color:#fff;
line-height: 80px;
text-align: center;
text-indent: 28px;
letter-spacing: 15px;
}
.account{
background-image:url(@/assets/img/login_form2.png);
}
.password{
background-image:url(@/assets/img/login_form3.png);
}
.account,.password{
width:404px;
height:80px;
line-height: 80px;
padding: 0 23px 0 101px;
margin-bottom:20px;
input{
background: transparent;
border: none;
outline: none;
width: 100%;
height: 65%;
color:#1983fc;
font-size:24px;
&::-webkit-input-placeholder{
color:#034B9B;
font-family:MicrosoftYaHei;
}
&::-ms-reveal{
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='200' height='200'%3E%3Cpath d='M512.01228 775.73773c-176.824241 0-341.012697-96.55201-428.502308-251.965615l-6.616698-11.773138 6.616698-11.773138C170.998559 344.81428 335.188039 248.26227 512.01228 248.26227c176.847777 0 341.036233 96.55201 428.476724 251.989152l6.616698 11.748578-6.616698 11.747555c-87.440491 155.461701-251.628948 251.990175-428.476724 251.990175zM132.182508 512c80.536244 133.427872 224.824465 215.784578 379.853308 215.784578 155.054425 0 299.341622-82.33317 379.853307-215.784578-80.488149-133.451408-224.800929-215.784578-379.853307-215.784578-155.029866 0-299.341622 82.356706-379.853308 215.784578z' fill='%23034B9B' p-id='1909'%3E%3C/path%3E%3Cpath d='M364.582509 511.615237c0 80.999802 65.663512 146.662291 146.662291 146.662291s146.662291-65.663512 146.662291-146.662291-65.663512-146.662291-146.662291-146.662291-146.662291 65.663512-146.662291 146.662291z' fill='%23034B9B' p-id='1910'%3E%3C/path%3E%3C/svg%3E");
}
&:-webkit-autofill{
box-shadow:inset 0 0 0 1000px #06255A !important;
}
}
}
button{
width:414px;
height:84px;
color:#0091FF;
font-size:30px;
border-radius: 90px;
box-shadow: inset 0 0 1px 4px #0091FF;
background:transparent;
border:none;
cursor: pointer;
&:active{
transform: translate(2px, 2px);
}
}
}
</style>
<template>
<container :bg="require('@/assets/img/login_bg.png')">
<template #ready>
<div class="content">
<div class="name">元谋县国家现代农业产业园</div>
<div class="title">登录</div>
<div class="account">
<input placeholder="请输入账号" v-model="formData.username" autocomplete="off"/>
</div>
<div class="password">
<input type="password" v-model="formData.password" placeholder="请输入密码" autocomplete="new-password"/>
</div>
<button @click="login">登录</button>
</div>
</template>
</container>
</template>
<script setup>
import request from '@/config/request'
import { inject, onMounted, reactive } from 'vue'
var msg=inject('msg')
var {commit} = inject("store")
var formData=reactive({
captcha: "",
checkKey: "",
loginType: "screen",
password: "",
username: ""
})
async function login(){
if(!formData.username){
msg.error("请输入账号!")
}else if(!formData.password){
msg.error("请输入密码!")
}else{
var res= await request("/sys/login",{
method:"post",
data: formData
})
if(res.statu){
msg.success("登录成功!")
commit("data/setToken",res.data.token)
commit("data/setUserInfo",res.data.userInfo)
}else{
msg.error(res.msg||"登录失败!")
}
}
}
onMounted(()=>{
})
</script>

71
src/view/park/Label.js

@ -1,71 +0,0 @@
import * as THREE from 'three'
export default class Label extends THREE.Object3D{
#imgMesh
#pos
#nameMesh
#nameObj
constructor(pos,nameObj={}){
super()
this.#pos=pos
this.#nameObj=nameObj
this.refesh()
}
#update(){
var geometry=new THREE.PlaneGeometry(3,3)
var material=new THREE.MeshBasicMaterial({
transparent:true,
opacity:0,
side:THREE.DoubleSide,
map:new THREE.TextureLoader().load("data:image/svg+xml,%3Csvg width='32.000000' height='37.000000' viewBox='0 0 32 37' fill='none' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E %3Cellipse id='椭圆 1' cx='15.500000' cy='26.000000' rx='4.500000' ry='3.000000' filter='url(%23filter_38_6_dd)' fill='%23FED44C'/%3E %3Cellipse id='椭圆 1' cx='15.500000' cy='26.500000' rx='10.000000' ry='6.000000' stroke='%23FED44C'/%3E %3Cellipse id='椭圆 1' cx='16.000000' cy='27.000000' rx='14.500000' ry='9.500000' stroke='%23FED44C'/%3E %3Cpath id='path' d='M7.32259 17.6772C7.05646 17.4381 6.80397 17.1877 6.56514 16.926C6.32631 16.6644 6.10229 16.3927 5.89308 16.111C5.68388 15.8292 5.49051 15.5389 5.31296 15.2399C5.13542 14.9409 4.97458 14.6347 4.83041 14.3213C4.68626 14.0079 4.55951 13.6888 4.45015 13.3641C4.34079 13.0393 4.24936 12.7105 4.17586 12.3776C4.10236 12.0447 4.04713 11.7093 4.01021 11.3714C3.97327 11.0336 3.9548 10.6949 3.9548 10.3554C3.9548 10.0159 3.97327 9.67717 4.01021 9.33931C4.04713 9.00145 4.10236 8.66606 4.17586 8.33315C4.24936 8.00023 4.34079 7.6714 4.45015 7.34666C4.55951 7.02192 4.68626 6.70286 4.83041 6.38946C4.97458 6.07606 5.13542 5.76985 5.31296 5.47084C5.49051 5.17183 5.68388 4.88147 5.89308 4.59976C6.10229 4.31805 6.32631 4.04636 6.56514 3.7847C6.80397 3.52303 7.05646 3.27264 7.32259 3.03357C11.8135 -1.01118 19.0955 -1.01118 23.5864 3.03357C23.8526 3.27264 24.1051 3.52304 24.344 3.78471C24.5829 4.04639 24.8069 4.3181 25.0162 4.59982C25.2254 4.88155 25.4188 5.17193 25.5964 5.47095C25.774 5.76999 25.9349 6.07622 26.079 6.38963C26.2232 6.70306 26.35 7.02216 26.4594 7.34692C26.5687 7.67168 26.6602 8.00054 26.7337 8.33349C26.8072 8.66644 26.8625 9.00185 26.8994 9.33974C26.9363 9.67763 26.9548 10.0163 26.9548 10.3559C26.9548 10.6954 26.9363 11.0341 26.8994 11.372C26.8625 11.7099 26.8072 12.0453 26.7337 12.3783C26.6602 12.7112 26.5687 13.0401 26.4594 13.3648C26.35 13.6896 26.2232 14.0087 26.079 14.3221C25.9349 14.6356 25.774 14.9418 25.5964 15.2408C25.4188 15.5398 25.2254 15.8302 25.0162 16.1119C24.8069 16.3937 24.5829 16.6654 24.344 16.927C24.1051 17.1887 23.8526 17.4391 23.5864 17.6782L15.4545 25L7.32259 17.6772ZM15.4545 13.5418C15.6811 13.5419 15.9056 13.522 16.1278 13.482C16.3501 13.442 16.5659 13.3828 16.7753 13.3044C16.9847 13.2259 17.1836 13.1296 17.3721 13.0157C17.5606 12.9017 17.7349 12.7721 17.8952 12.627C18.0555 12.4819 18.1986 12.3241 18.3245 12.1534C18.4504 11.9828 18.5568 11.8027 18.6435 11.613C18.7303 11.4234 18.7958 11.228 18.84 11.0267C18.8842 10.8253 18.9063 10.6221 18.9063 10.4168C18.9063 10.2116 18.8842 10.0083 18.84 9.80698C18.7958 9.60567 18.7303 9.41021 18.6435 9.2206C18.5568 9.03098 18.4504 8.85085 18.3245 8.68021C18.1986 8.50957 18.0555 8.35169 17.8952 8.2066C17.7349 8.06149 17.5606 7.93195 17.3721 7.81797C17.1836 7.70399 16.9847 7.60777 16.7753 7.52929C16.5659 7.45081 16.3501 7.39159 16.1278 7.35164C15.9056 7.31168 15.6811 7.29175 15.4545 7.29185C15.228 7.29195 15.0038 7.31206 14.7817 7.35216C14.5596 7.39226 14.3439 7.4516 14.1347 7.53017C13.9255 7.60873 13.7268 7.70502 13.5385 7.81903C13.3503 7.93304 13.1761 8.06259 13.016 8.20767C12.8559 8.35275 12.713 8.51058 12.5872 8.68115C12.4614 8.85173 12.3552 9.03178 12.2685 9.2213C12.1819 9.41082 12.1165 9.60617 12.0723 9.80736C12.0282 10.0085 12.0061 10.2117 12.0061 10.4168C12.0061 10.6219 12.0282 10.8251 12.0723 11.0263C12.1165 11.2275 12.1819 11.4228 12.2685 11.6123C12.3552 11.8019 12.4614 11.9819 12.5872 12.1525C12.713 12.3231 12.8559 12.4809 13.016 12.626C13.1761 12.771 13.3503 12.9006 13.5385 13.0146C13.7268 13.1286 13.9255 13.2249 14.1347 13.3035C14.3439 13.382 14.5596 13.4414 14.7817 13.4815C15.0038 13.5216 15.228 13.5417 15.4545 13.5418Z' fill-rule='nonzero' fill='url(%23paint_linear_38_5_0)'/%3E %3Cdefs%3E %3Cfilter id='filter_38_6_dd' x='5.000000' y='17.000000' width='21.000000' height='18.000000' filterUnits='userSpaceOnUse' color-interpolation-filters='sRGB'%3E %3CfeFlood flood-opacity='0' result='BackgroundImageFix'/%3E %3CfeColorMatrix in='SourceAlpha' type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0'/%3E %3CfeMorphology radius='2' in='' result='BackgroundImageFix'/%3E %3CfeOffset dx='0' dy='0'/%3E %3CfeGaussianBlur stdDeviation='1.33333'/%3E %3CfeColorMatrix type='matrix' values='0 0 0 0 0.99608 0 0 0 0 0.83137 0 0 0 0 0.29804 0 0 0 0.25 0'/%3E %3CfeBlend mode='normal' in2='BackgroundImageFix' result='effect_dropShadow_1'/%3E %3CfeBlend mode='normal' in='SourceGraphic' in2='effect_dropShadow_1' result='shape'/%3E %3C/filter%3E %3CclipPath id='clip38_2'%3E %3Crect id='画板 1' width='32.000000' height='37.000000' fill='white'/%3E %3C/clipPath%3E %3ClinearGradient id='paint_linear_38_5_0' x1='15.500000' y1='0.000000' x2='15.500000' y2='25.000000' gradientUnits='userSpaceOnUse'%3E %3Cstop stop-color='%23FB7694'/%3E %3Cstop offset='1.000000' stop-color='%23FED44C'/%3E %3C/linearGradient%3E %3C/defs%3E %3C/svg%3E"),
})
this.#imgMesh=new THREE.Mesh(geometry,material)
this.#imgMesh.renderOrder=6
this.#imgMesh.position.set(0, 0, 115*-0.015)
this.add(this.#imgMesh)
var nameGeometry=new THREE.PlaneGeometry(this.#nameObj.box.width/16,this.#nameObj.box.height/16)
var nameMaterial=new THREE.MeshBasicMaterial({
transparent:true,
opacity:0,
side:THREE.DoubleSide,
map:new THREE.TextureLoader().load(this.#nameObj.img)
})
this.#nameMesh=new THREE.Mesh(nameGeometry, nameMaterial)
this.#nameMesh.renderOrder=6
this.#nameMesh.position.set(0, 0, 115*(0.015))
this.add(this.#nameMesh)
this.position.set(115*this.#pos[0],this.#pos[1],115*(this.#pos[2]))
}
refesh(){
this.dispose()
this.#update()
}
get img(){
return this.#imgMesh
}
get labelName(){
return this.#nameMesh
}
rotate({x,y,z}){
this.#imgMesh.rotation.x=x
this.#imgMesh.rotation.y=y
this.#imgMesh.rotation.z=z
this.#nameMesh.rotation.x=x
this.#nameMesh.rotation.y=y
this.#nameMesh.rotation.z=z
}
zoomOut(v){
this.scale.set(v,v,v)
}
dispose(){
for(var {geometry,material} of this.children){
geometry.dispose()
material.dispose()
}
while (this.children[0]){
this.remove(this.children[0])
}
}
}

101
src/view/park/Point.js

@ -1,101 +0,0 @@
import * as THREE from 'three'
import gsap from 'gsap'
export default class Point extends THREE.Object3D{
#point
#linePoints
#line
#popover
#timeLine=gsap.timeline()
#val
constructor (position,popover, val){
super()
this.#linePoints=[
[115*position.lng, 0.7, 115*position.lat],
[115*(position.lng -0.01), 6, 115*position.lat],
[115*(position.lng -0.2), 6, 115*position.lat],
]
this.#popover=popover
this.#val=val
this.refesh()
this.#timeLine=gsap.timeline()
this.#timeLine.pause()
var line1={x:this.#linePoints[0][0],y:this.#linePoints[0][1]}
this.#timeLine.to(line1,{x:this.#linePoints[1][0],y:this.#linePoints[1][1], duration:0.3,onUpdate:()=>{
this.#line.geometry.setAttribute("position",new THREE.Float32BufferAttribute([
...this.#linePoints[0],
line1.x,line1.y,this.#linePoints[1][2]
],3))
}})
var line2={x:this.#linePoints[1][0]}
this.#timeLine.to(line2,{x:this.#linePoints[2][0], duration:0.7,onUpdate:()=>{
this.#line.geometry.setAttribute("position",new THREE.Float32BufferAttribute([
...this.#linePoints[0],
...this.#linePoints[1],
line2.x,this.#linePoints[2][1],this.#linePoints[2][2]
],3))
},onComplete:()=>{
this.#popover.position.set(...this.#linePoints[2])
this.#popover.element.style.opacity=1
this.#popover.visible=true
}})
}
#update(){
const geometry = new THREE.SphereGeometry( 0.7, 20, 20 );
const material = new THREE.MeshPhysicalMaterial( {
clearcoat: 1.0,
clearcoatRoughness: 0.4,
metalness: 0.8,
roughness: 0.5,
color: 0x69E7FC,
emissive:0x24BBD4,
flatShading:false,
normalScale: new THREE.Vector2( 0.15, 0.15 ),
});
this.#point=new THREE.Mesh(geometry, material)
this.#point.scale.set(0,0,0)
this.#point.position.set(...this.#linePoints[0])
this.add(this.#point)//添加模型
//线
var lineGeometry=new THREE.BufferGeometry()
var lineMaterial=new THREE.LineBasicMaterial()
this.#line=new THREE.Line(lineGeometry,lineMaterial)
this.add(this.#line)
}
refesh(){
this.dispose()
this.#update()
}
dispose(){
for(var {geometry,material} of this.children){
geometry.dispose()
material.dispose()
}
while (this.children[0]){
this.remove(this.children[0])
}
}
show(){
this.#timeLine.play()
}
hide(){
this.#popover.element.style.opacity=0
this.#timeLine.reverse(null, false)
}
out(){
this.#point.scale.set(1,1,1)
}
hover(){
this.#point.scale.set(1.4,1.4,1.4)
}
get mesh(){
return this.#point
}
get time(){
return this.#timeLine
}
get val(){
return this.#val
}
}

757
src/view/park/center.vue

@ -1,757 +0,0 @@
<style lang="less" scoped>
.center{
flex-grow: 1;
display:flex;
flex-direction: column;
position:relative;
&:deep .el-date-editor{
top:10px;
left:20px;
}
&>.items{
flex-shrink: 0;
display:flex;
align-items: center;
justify-content: space-around;
margin-top:60px;
position:relative;
z-index: 20;
&>div{
background-image:url(@/assets/img/park-center-bg.png);
width:197px;
height:89px;
position:relative;
.icon{
position:absolute;
top:14px;
left:14px;
width:45px;
height:45px;
}
.value{
position:absolute;
top: 3px;
left: 72px;
height: 69px;
width: 123px;
display:flex;
flex-direction: column;
justify-content: center;
padding:8px;
span{
&:first-child{
color:#fff;
font-size:24px;
font-weight: bold;
&:after{
content:attr(data-unit);
font-size:16px;
color:#99A4AE;
}
}
&:nth-child(2){
margin-top:4px;
color:#99A4AE;
font-size:16px;
}
}
}
}
}
&>canvas,&>.mapCSS2D{
position:fixed;
pointer-events: all;
z-index: -10;
top:0;
left:0;
width:100%;
height:100%;
}
&>.mapCSS2D{
pointer-events: none;
z-index: 30;
}
.model{
transition: opacity 0.6s;
&>div{
position:absolute;
bottom:0;
right:calc(-289px/2);
width:289px;
height:149px;
background-image:url(@/assets/img/park-center-popver-bg.png);
&>.title{
font-weight: bold;
font-size:13px;
color:#50A7F9;
font-weight: bold;
position:absolute;
text-align: center;
top: 25px;
left: 28px;
width: 240px;
}
&>.ads{
position: absolute;
top: 49px;
left: 30px;
width: 241px;
display:flex;
align-items: center;
// justify-content: flex-end;
span{
// &.plantBS-dingwei{
// color:#F19149;
// margin-right:auto;
// }
&.item{
color:var(--c);
font-weight: bold;
font-size:14px;
&:before{
content:attr(data-title);
font-weight: normal;
color:#C0DBF7;
font-size:12px;
}
&:after{
content:"个";
color:#C0DBF7;
font-weight: normal;
font-size:12px;
}
&+.item{
margin-left:10px;
}
}
}
}
&>.line{
position:absolute;
top: 73px;
left: 30px;
width: 239px;
height: 1px;
background: linear-gradient(rgba(12, 137, 254, 0.3), rgba(9, 207, 251, 0.3));
&:before{
content:"";
background-image:url(@/assets/img/line.png);
width:152px;
height:29px;
position:absolute;
top: -17px;
left: -43px;
animation: move 4s linear infinite;
}
}
&>.scroll-board{
position:absolute;
top: 73px;
left: 30px;
width: 239px;
margin-top:5px;
height:55px;
&:deep>div{
display:flex;
align-items: center;
span{
font-size:12px;
color:#0C89FE;
&:first-child{
width:80px;
flex-shrink: 0;
}
&:nth-child(2){
flex-grow: 1;
&:after{
content:"亩";
}
}
&:nth-child(3){
width:120px;
text-align: right;
flex-shrink: 0;
&:before{
content:"预估产量";
}
&:after{
content:"kg";
}
}
&:before,&:after{
color:#C0DBF7;
}
}
}
}
}
}
svg{
opacity: 0;
}
}
@keyframes move {
0%{
left:-43px;
opacity: 0;
}
30%{
opacity: 1;
}
70%{
opacity: 1;
}
100%{
left:141px;
opacity: 0;
}
}
</style>
<template>
<div class="center">
<el-date-picker type="year" v-model="year" :clearable="false" popper-class="year-popper"/>
<div class="items">
<div>
<span class="icon" style="background-image:url(data:image/png;base64,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);"/>
<div class="value">
<span data-unit="">{{number.companyNum||0}}</span>
<span>企业数量</span>
</div>
</div>
<div>
<span class="icon" style="background-image:url(data:image/png;base64,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);"/>
<div class="value">
<span data-unit="">{{number.parkArea||0}}</span>
<span>基地面积</span>
</div>
</div>
</div>
<canvas ref="map" @mousemove="move" @click="showPopover"/>
<div ref="mapCSS2D" class="mapCSS2D"/>
<div ref="model" class="model">
<div>
<div class="title over">{{modelData?.companyName}}</div>
<div class="ads">
<!-- <span class="plantBS-dingwei">物茂乡</span> -->
<span class="item" data-title="基地" style="--c:#10CC40;">{{modelData?.baseNum}}</span>
<span class="item" data-title="品种" style="--c:#00E4FF;">{{modelData?.varietyNum}}</span>
</div>
<div class="line"/>
<d-scroll-board :data="modelData?.varietyList||[]" :num="3">
<template #default="{row}">
<span class="over" :style="`width:${239/10*3}px`">{{row.varietyName}}</span>
<span :style="`width:${239/10*2}px;text-align:right;`">{{row.plantArea}}</span>
<span :style="`width:${239/10*5}px`">{{row.outPut}}</span>
</template>
</d-scroll-board>
</div>
</div>
<svg ref="svg">
<text :fill="labelName.color" dominant-baseline="text-before-edge" font-size="28" font-weight="900" v-html="labelName.text"></text>
</svg>
</div>
</template>
<script setup>
import request from '@/config/request'
import * as THREE from 'three'
import {CSS2DRenderer, CSS2DObject} from 'three/examples/jsm/renderers/CSS2DRenderer'
import gsap from 'gsap'
import { MapControls } from 'three/examples/jsm/controls/MapControls'
import { inject, nextTick, onMounted, reactive, ref, resolveTransitionHooks, shallowRef, watch } from 'vue';
import yuanmou from '@/assets/map/yuanmou.json'
import {SVGToBase64} from 'black-knight/lib/config/tools'
import {dScrollBoard} from 'black-knight/lib/components'
import Point from './Point'
import Label from './Label'
var emit=defineEmits()
var msg=inject("msg")
var number=shallowRef({})
var modelData=shallowRef({})//
var year=ref('')
var time_line=gsap.timeline()
time_line.pause()
var svg=ref()
var labelName=reactive({
text:"",
color:"#fff"
})
var model=ref()
var map=ref();
var mapCSS2D=ref()
var scene,renderer,camera,modalRenderer,popover;
var raycaster= new THREE.Raycaster();//
var group=new THREE.Group()
var names=[]
var labels=[]
var items={select:null,show:null,list:[]}
var center=[101.863986 -0.02,25.776215 -0.01]
var distance=0
var region=reactive([
{name:"羊街镇",lan:101.9301474,lng:26.0574059},
{name:"老城乡",lan:101.8811474,lng:25.9254059},
{name:"凉山乡",lan:101.972559,lng:25.81227},
{name:"元马镇",lan:101.8701474,lng:25.8154059},
{name:"平田乡",lan:101.7647297,lng:25.7918077},
{name:"新华乡",lan:101.6910768,lng:25.7798770},
{name:"物茂乡",lan:101.7810768,lng:25.6308770},
{name:"黄瓜园镇",lan:101.8653983,lng:25.7235168},
{name:"江边乡",lan:101.9035691,lng:25.581815},
{name:"姜驿乡",lan:101.9960739,lng:25.500477},
])
function init(){
scene = new THREE.Scene()
renderer = new THREE.WebGLRenderer({ canvas: map.value, antialias: true, alpha: true })
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(map.value.clientWidth, map.value.clientHeight)
modalRenderer=new CSS2DRenderer({element: mapCSS2D.value})
modalRenderer.setSize(map.value.clientWidth, map.value.clientHeight)
camera = new THREE.PerspectiveCamera(40, map.value.clientWidth / map.value.clientHeight, 10, 1000)
camera.position.set(0, 100, 90)
distance=Math.sqrt(Math.pow(100,2)+Math.pow(90,2))
var directionalLight = new THREE.DirectionalLight(0xffffff, 0.6);
directionalLight.position.set(0, 0, 10).normalize();
scene.add(directionalLight);
var ambientLight = new THREE.AmbientLight(0xcccccc, 0.9);
scene.add(ambientLight);
scene.add(group)
group.scale.set(115,115,1)
group.rotation.x=-Math.PI/2
//
popover = new CSS2DObject(model.value)
popover.position.set(-10,7,0)
popover.element.style.opacity=0
scene.add(popover)
var controls = new MapControls(camera, map.value)
controls.maxPolarAngle=Math.PI/2
controls.minPolarAngle=0
controls.dispatchEvent=e=>{
var distance_now=Math.sqrt(Math.pow(camera.position.x,2)+Math.pow(camera.position.y,2)+Math.pow(camera.position.z,2))
names.forEach(v=>{
v.rotation.x=camera.rotation.x
v.rotation.y=camera.rotation.y
v.rotation.z=camera.rotation.z
})
labels.forEach(v=>{
v.rotate(camera.rotation)
if(distance_now<distance){
v.zoomOut(distance_now/distance)
}else{
v.zoomOut(1)
}
})
}
}
function addMap(){
var shape = new THREE.Shape()
shape.moveTo(...yuanmou[0])
for (var i of yuanmou.slice(1)){
shape.lineTo(...i)
}
//
var bottomGeometry=new THREE.ExtrudeBufferGeometry( shape, {
depth: 5, //
bevelEnabled: false,
} );
bottomGeometry.translate(-center[0],-center[1],-5)
var mian = new THREE.TextureLoader().load(require('@/assets/img/map_bg.png'))
mian.wrapS = mian.wrapT = THREE.RepeatWrapping;
mian.repeat.set(1.964, 1.346)
mian.offset.set(0.465,-0.141)
var materialUp=new THREE.MeshBasicMaterial({
transparent:true,
opacity:0,
map: mian,
})
var side = new THREE.TextureLoader().load("data:image/svg+xml,%3Csvg width='44.000000' height='24.000000' viewBox='0 0 44 24' fill='none' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E %3Crect id='矩形 1' y='3.000000' width='44.000000' height='3.000000' fill='%231EB5FC'/%3E %3Crect id='矩形 1' y='9.000000' width='44.000000' height='3.000000' fill='%231EB5FC'/%3E %3Crect id='矩形 1' y='15.000000' width='44.000000' height='3.000000' fill='%231EB5FC'/%3E %3Crect id='矩形 1' y='21.000000' width='44.000000' height='3.000000' fill='%231EB5FC'/%3E %3C/svg%3E")
side.wrapS = side.wrapT = THREE.RepeatWrapping;
side.repeat.set(0.1, 0.25)
var materialSide=new THREE.MeshBasicMaterial({
transparent:true,
opacity:0,
map:side,
opacity:0.8,
color:0x0C89FE,
})
var mesh=new THREE.Mesh(bottomGeometry,[materialUp,materialSide])
mesh.scale.set(0.5,0.5,0.5)
time_line.to(mesh.scale,{x:1,y:1,z:1, duration:2, onStart(){
group.add(mesh)
}})
time_line.to(mesh.rotation,{z:Math.PI*2, duration:2},'-=2')
time_line.to(materialUp,{opacity:1, duration:2},'-=2')
time_line.to(materialSide,{opacity:1, duration:2},'-=2')
}
async function addLabel(){
for(var v of region){
labelName.text=v.name;
labelName.color="#fff"
await new Promise(result=>{
nextTick(()=>{
var box=svg.value.children[0].getBBox()
var label=new Label(
[-center[0]+v.lan, 1.3, -center[1]+v.lng],
{box,img:SVGToBase64(`<svg height="${box.height}" width="${box.width}">${svg.value.innerHTML}</svg>`)}
)
label.rotate(camera.rotation)
scene.add(label)
labels.push(label)
time_line.to(label.img.material,{opacity:1, duration:0.15,delay:0.2},'-=0.2')
time_line.to(label.labelName.material,{opacity:1, duration:0.15,delay:0.2},'-=0.35')
result()
})
})
}
}
function addBG1(){
var bgGeometry=new THREE.PlaneGeometry(253/6,464/5.9)
var bgMaterial=new THREE.MeshBasicMaterial({
transparent:true,
depthWrite:false,
opacity:0,
side:THREE.DoubleSide,
map:new THREE.TextureLoader().load(require('@/assets/img/park-map-bg1.png'))
})
var bgMesh=new THREE.Mesh(bgGeometry,bgMaterial)
bgMesh.position.set(115*(-center[0]+101.859473),10,115*(-center[1]+25.825215))
bgMesh.rotation.x=-Math.PI/2
bgMesh.renderOrder=1
time_line.to(bgMaterial,{opacity:1,duration:1,onStart(){
scene.add(bgMesh)
}})
time_line.to(bgMesh.position,{y:0.1,duration:1},"-=1")
}
async function addBG2(){
var bgGeometry=new THREE.PlaneGeometry(316/9.1,599/9.1)
var bgMaterial=new THREE.MeshBasicMaterial({
transparent:true,
opacity:0,
side:THREE.DoubleSide,
map:new THREE.TextureLoader().load(require('@/assets/img/park-map-bg2.png'))
})
var bgMesh=new THREE.Mesh(bgGeometry,bgMaterial)
bgMesh.position.set(115*(-center[0]+101.855473),10,115*(-center[1]+25.827215))
bgMesh.rotation.x=-Math.PI/2
bgMesh.renderOrder=2
time_line.to(bgMaterial,{opacity:1,duration:1,onStart(){
scene.add(bgMesh)
}})
time_line.to(bgMesh.position,{y:0.2,duration:1},"-=1")
//
await setLine(
[101.800373,0.21,25.565215],
{text:"现代种业联农带农业示范区",color:"#10CC40",order:2},
[
0.02, 2, 0,
0.2, 2, 0
]
)
await setLine(
[101.750373,0.21,25.735215],
{text:"<tspan>现代冬早蔬菜联农</tspan><tspan x='0' y='36'>带农业产业示范区</tspan>",color:"#10CC40",order:2},
[
-0.02, 2, 0,
-0.16, 2, 0
]
)
await setLine(
[101.900373,0.21,26.065215],
{text:"<tspan>种业和蔬菜融合联农</tspan><tspan x='0' y='36'>带农业示范区</tspan>",color:"#10CC40",order:2},
[
-0.02, 2, 0,
-0.16, 2, 0
]
)
}
async function addBG3(){
var bgGeometry=new THREE.PlaneGeometry(431/9.1,654/9.1)
var bgMaterial=new THREE.MeshBasicMaterial({
transparent:true,
side:THREE.DoubleSide,
opacity:0,
map:new THREE.TextureLoader().load(require('@/assets/img/park-map-bg3.png'))
})
var bgMesh=new THREE.Mesh(bgGeometry,bgMaterial)
bgMesh.renderOrder=3
bgMesh.position.set(115*(-center[0]+101.886473),10,115*(-center[1]+25.770215))
bgMesh.rotation.x=-Math.PI/2
time_line.to(bgMaterial,{opacity:1,duration:1,onStart(){
scene.add(bgMesh)
}})
time_line.to(bgMesh.position,{y:0.3,duration:1},"-=1")
await setLine(
[101.820373,0.31,25.695215],
{text:"三产融合发展产业带",color:"#FFF100",order:3},
[
-0.02, 5, 0,
-0.16, 5, 0
]
)
}
async function addBG4(){
var bgGeometry=new THREE.PlaneGeometry(216/9.1,364/9.1)
var bgMaterial=new THREE.MeshBasicMaterial({
transparent:true,
side:THREE.DoubleSide,
opacity:0,
map:new THREE.TextureLoader().load(require('@/assets/img/park-map-bg4.png'))
})
var bgMesh=new THREE.Mesh(bgGeometry,bgMaterial)
bgMesh.renderOrder=4
bgMesh.position.set(115*(-center[0]+101.806473),10,115*(-center[1]+25.770215))
bgMesh.rotation.x=-Math.PI/2
time_line.to(bgMaterial,{opacity:1,duration:1,onStart(){
scene.add(bgMesh)
}})
time_line.to(bgMesh.position,{y:0.4,duration:1},"-=1")
await setLine(
[101.891373,0.41,25.664215],
{text:"<tspan>右廊-要素聚集特色产业</tspan><tspan x='0' y='36'>发展廊道</tspan>",color:"#F19149",order:4},
[
0.02, 5, 0,
0.16, 5, 0
]
)
await setLine(
[101.740373,0.41,25.905215],
{text:"<tspan>左廊-要素聚集特色</tspan><tspan x='0' y='36'>产业发展廊道</tspan>",color:"#F19149",order:4},
[
-0.02, 5, 0,
-0.12, 5, 0
],
0.04
)
}
async function addBG5(){
var bgGeometry=new THREE.CircleGeometry(95/19,32)
var bgMaterial=new THREE.MeshBasicMaterial({
transparent:true,
opacity:0,
side:THREE.DoubleSide,
map:new THREE.TextureLoader().load(require('@/assets/img/park-map-bg5.png'))
})
var bgMesh=new THREE.Mesh(bgGeometry,bgMaterial)
bgMesh.renderOrder=5
bgMesh.position.set(115*(-center[0]+101.869473),10,115*(-center[1]+25.827215))
bgMesh.rotation.x=-Math.PI/2
time_line.to(bgMaterial,{opacity:1,duration:2,onStart(){
scene.add(bgMesh)
}})
time_line.to(bgMesh.position,{y:0.5,duration:1,onComplete(){
}},"-=2")
await setLine(
[101.740373+0.13,0.51,25.905215-0.08],
{text:"科技示范引领发展核心区",color:"#E60012",order:5},
[
0.02, 3, 0,
0.16, 3, 0
]
)
}
async function setLine(label,{text,color,order},points,offset=0){
var point=new THREE.PlaneGeometry(1.2,1.2)
var pointMaterial=new THREE.MeshBasicMaterial({
map:new THREE.TextureLoader().load("data:image/svg+xml,%3Csvg width='100.000000' height='100.000000' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E %3Crect id='矩形 1' x='4.000000' y='4.000000' width='92.000000' height='92.000000' stroke='%23FFFFFF' stroke-width='8.000000'/%3E %3Crect id='矩形 2' x='20.000000' y='21.000000' width='60.000000' height='60.000000' fill='%23FFFFFF'/%3E %3C/svg%3E"),
transparent:true,
})
var pointMesh=new THREE.Mesh(point,pointMaterial)
pointMesh.position.set(115*(-center[0]+label[0]),label[1],115*(-center[1]+label[2]))
pointMesh.rotation.x=-Math.PI/2
pointMesh.renderOrder=order+0.1
var lineGeometry=new THREE.BufferGeometry()
var point1=[115*(-center[0]+label[0]), label[1], 115*(-center[1]+label[2])]
var point2=[115*(-center[0]+label[0]+points[0]), label[1]+points[1], 115*(-center[1]+label[2]+points[2])]
var point3=[115*(-center[0]+label[0]+points[3]), label[1]+points[4], 115*(-center[1]+label[2]+points[5])]
lineGeometry.setAttribute('position',new THREE.Float32BufferAttribute([
...point1,
...point1,
], 3))
//线
var value1={x:point1[0],y:point1[1]}
time_line.to(value1, {x:point2[0],y:point2[1], duration:0.5,onUpdate(){
lineGeometry.setAttribute('position',new THREE.Float32BufferAttribute([
...point1,
value1.x,value1.y,point2[2]
], 3))
},onStart(){
scene.add(pointMesh)//
}})
var value2={x:point2[0]}
time_line.to(value2,{x:point3[0], duration:1,onUpdate(){
lineGeometry.setAttribute('position',new THREE.Float32BufferAttribute([
...point1,
...point2,
value2.x,point3[1],point3[2]
], 3))
}})
var lineMaterial=new THREE.LineBasicMaterial({
color:color,
})
lineMaterial.renderOrder=7
scene.add(new THREE.Line(lineGeometry,lineMaterial))
labelName.text=text
labelName.color=color
await new Promise(resolve=>{
nextTick(()=>{
var box=svg.value.children[0].getBBox()
var times=17
var adsGeometry=new THREE.PlaneGeometry(box.width/times,box.height/times)
adsGeometry.translate(0,box.height/times/2,0)
var adsMaterial=new THREE.MeshBasicMaterial({
transparent:true,
opacity:0,
side:THREE.DoubleSide,
map:new THREE.TextureLoader().load(SVGToBase64(`<svg height="${box.height}" width="${box.width}">${svg.value.innerHTML}</svg>`))
})
var adsMesh=new THREE.Mesh(adsGeometry,adsMaterial)
adsMesh.name=labelName.text
names.push(adsMesh)
adsMesh.renderOrder=7
adsMesh.position.set(115*(-center[0]+label[0]+points[3]+offset +0.1*(points[3]>0?1:-1)), label[1]+points[4], 115*(-center[1]+label[2]+points[5]))
adsMesh.rotation.x=camera.rotation.x
scene.add(adsMesh)
time_line.to(adsMaterial,{opacity:1, duration:1})
time_line.to(adsMesh.position,{x:115*(-center[0]+label[0]+points[3]+offset), duration:2},'-=2')
resolve()
})
})
}
function addPoint(val){
var point=new Point({lng:-center[0]+val.lng,lat:-center[1]+val.lat}, popover, val)
scene.add(point)
items.list.push(point)
var option={scale:0}
time_line.to(option,{scale:1, duration:0.5,ease:"", onUpdate(){
point.mesh.scale.set(option.scale, option.scale, option.scale)
}})
}
function render(){
renderer.render(scene, camera);
modalRenderer.render(scene, camera);
requestAnimationFrame(render)
}
function move({clientX, clientY}){
raycaster.setFromCamera(
new THREE.Vector2(
clientX/window.innerWidth*2-1,
-clientY/window.innerHeight*2+1
),
camera
)
const intersects=raycaster.intersectObjects(items.list.map(v=>v.mesh), false)
if(intersects.length>0){
map.value.style.cursor="pointer"
if(items.select){
if(items.select!=intersects[0].object){
items.select.parent.out()
items.select=intersects[0].object
items.select.parent.hover()
}
}else{
items.select=intersects[0].object
items.select.parent.hover()
}
}else{
map.value.style.cursor="default"
if(items.select){
items.select.parent.out()
items.select=null
}
}
}
function showPopover(){
if(items.show!=items.select){
items.show?.parent?.hide?.()
items.show=items.select
items.show?.parent?.show?.()
setTimeout(()=>{
modelData.value=items.show?.parent?.val
},1000)
}
}
watch(year,async n=>{
emit('update:year',n.format('yyyy'))
//
var res=await request("/api/industrial/centertop",{
method:"post",
data:{date:n.format('yyyy'),region:""}
})
if(res.statu){
number.value=res.data
}else{
msg.error(res.msg||"获取数量失败!")
}
//
var res=await request("/api/industrial/centermap",{
method:"post",
data:{
date:n.format('yyyy'),
region:"",
}
})
if(res.statu){
for(var i of items.list){
i.dispose()
}
items.list=[]
for(var i of res.data){
var [lng,lat]=(i.lnglat||'').split(',').filter(v=>v).map(v=>parseFloat(v))
addPoint({...i,lng,lat})
}
}else{
msg.error(res.msg||"获取地图数据失败!")
}
})
nextTick(()=>{
year.value=new Date()
})
onMounted(async ()=>{
nextTick(async()=>{
init()
addMap()
render()
await addLabel()
await addBG1()
await addBG2()
await addBG3()
await addBG4()
await addBG5()
setTimeout(()=>{
time_line.play()
},1000)
})
})
</script>

43
src/view/park/index.vue

@ -1,43 +0,0 @@
<style lang="less" scoped>
.left,.right{
width:586px;
display:flex;
flex-direction: column;
justify-content: space-evenly;
position:relative;
z-index: 20;
}
.left{
flex-shrink: 0;
margin-left:20px;
}
.right{
flex-shrink: 0;
margin-right:20px;
}
</style>
<template>
<div class="left">
<left1 :year="year"/>
<left2 :year="year"/>
<left3 :year="year"/>
</div>
<center v-model:year="year"/>
<div class="right">
<right1 :year="year"/>
<right2 :year="year"/>
<right3 :year="year"/>
</div>
</template>
<script setup>
import left1 from './left_1.vue'
import left2 from './left_2.vue'
import left3 from './left_3.vue'
import center from './center.vue'
import right1 from './right_1.vue'
import right2 from './right_2.vue'
import right3 from './right_3.vue'
import { ref } from 'vue'
var year=ref('')
</script>

245
src/view/park/left_1.vue

File diff suppressed because one or more lines are too long

145
src/view/park/left_2.vue

@ -1,145 +0,0 @@
<style lang="less" scoped>
.left_2{
&>.content{
display:flex;
.echarts{
flex-shrink: 0;
margin-right:40px;
width:140px;
height:129px+28;
position:relative;
pointer-events:all;
&:before{
content:"";
position:absolute;
top:32px;
left:12px;
width:117px;
height:117px;
background-image: url(@/assets/img/echarts_bg.png);
background-repeat: no-repeat;
background-position: center;
animation: BGrotate 6s linear infinite;
}
}
.area{
flex-grow: 1;
.title{
color:#fff;
font-size:18px;
font-weight: bold;
margin-bottom:20px;
}
.items{
display:flex;
justify-content: space-between;
flex-wrap: wrap;
margin-bottom:-16px;
&>div{
margin-bottom:16px;
display:flex;
align-items: center;
width:40%;
font-size:16px;
&:before{
content:"";
width:17px;
height:17px;
border:1px solid var(--c);
background-image:linear-gradient(var(--c),var(--c));
background-size:8px 8px;
background-repeat: no-repeat;
background-position: center;
margin-right:6px;
}
.name{
color:#99A4AE;
margin-left:8px;
}
.value{
color:#fff;
font-weight: bold;
margin-left:auto;
&:after{
content:"亩";
color:#99A4AE;
font-weight: normal;
}
}
}
}
}
}
}
</style>
<template>
<div class="left_2">
<dTitle title="种植概况" icon="2"/>
<div class="content">
<v-echarts :option="opt"/>
<div class="area">
<div class="title">种植面积</div>
<div class="items">
<div v-for="(v,k) in list" :key="k" :style="{'--c':colors[k%colors.length]}">
<span class="name over">{{v.name}}</span> <span class="value">{{v.value}}</span>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import request from '@/config/request'
import { computed, inject, onMounted, shallowRef, watch } from 'vue'
import dTitle from '../title.vue'
var props=defineProps({
year:{
type:String,
default:""
}
})
var msg=inject("msg")
var colors=['#029DFD','#00E7F7','#F66E97','#10CC40','#F19149','#FFF100']
var list=shallowRef([])
var opt=computed(()=>({
tooltip:{
position:'right'
},
color:colors,
title:{
text:"种植情况",
textStyle:{
color:"#fff",
fontSize:16,
fontWeight:700,
},
},
series: [
{
type: "pie",
center:['50%',90],
radius:[56,62],
label:{show:false},
data: list.value,
}
]
}))
watch(()=>props.year, async n=>{
var res=await request("/api/industrial/leftcenter",{
method:"post",
data:{date:n,region:""}
})
if(res.statu){
list.value=res.data.map(v=>({name: v.plantName,value: v.plantArea}))
}else{
msg.error(res.msg||"获取种植概况失败!")
}
})
onMounted(async ()=>{
})
</script>

69
src/view/park/left_3.vue

@ -1,69 +0,0 @@
<style lang="less" scoped>
.left_3{
.dv-scroll-board{
pointer-events:all;
&:deep>.header{
background:rgba(12, 44, 78, 0.7)!important;
box-shadow: inset 0 0 10px 2px rgba(12, 137, 254, 0.5);
}
&:deep>.rows{
color:#A2B4C5;
.even{
background:transparent!important;
.ceil:nth-child(3){
color:#0C81EF;
}
}
.odd{
background: rgba(2, 157, 253, 0.1)!important;
.ceil:nth-child(3){
color:#00E7F7;
}
}
}
}
}
</style>
<template>
<div class="left_3">
<dTitle title="病虫害情况" icon="9"/>
<dvScrollBoard ref="scrollBoard" :config="config" style="height:246px"/>
</div>
</template>
<script setup>
import request from '@/config/request'
import { inject, onMounted, reactive, ref, shallowRef, watch } from 'vue'
import dTitle from '../title.vue'
var props=defineProps({
year:{
type:String,
default:""
}
})
var msg=inject('msg')
var config=reactive({
header:['类型','品种','病虫害类型','发生次数','病虫名称'],
data:[],
rowNum:5,
align:['center','center','center'],
})
var scrollBoard=ref()
watch(()=>props.year, async n=>{
var res=await request("/api/industrial/leftbelow",{
method:"post",
data:{date: n,region:""}
})
if(res.statu){
scrollBoard.value.updateRows(res.data.map(v=>[v.plantType,v.plantName,v.pestType,v.pestNum,v.pestName]))
}else{
msg.error(res.msg||"获取病虫害情况失败!")
}
})
onMounted(async ()=>{
})
</script>

91
src/view/park/right_1.vue

@ -1,91 +0,0 @@
<style lang="less" scoped>
.right_1{
.dv-scroll-board{
margin-top:8px;
&:deep>.header{
background:rgba(8, 34, 56, 0.7)!important;
color:#C0DBF7;
font-size:18px;
}
&:deep>.rows{
.row-item{
background:transparent!important;
color:#99A4AE;
.ceil:last-child{
color:#C0DBF7;
.up{
color:#fd2100;
}
.down{
color:#10cc40;
display:inline-block;
transform: rotateX(180deg);
}
}
&:first-child>.ceil:first-child{
color:#10CC40;
}
&:nth-child(2)>.ceil:first-child{
color:#00E4FF;
}
&:nth-child(3)>.ceil:first-child{
color:#0099FF;
}
}
}
}
}
</style>
<template>
<div class="right_1">
<dTitle title="价格行情" icon="10">
<span style="color:#00E4FF;font-size:18px;">单位统一为 10/kg</span>
</dTitle>
<swiper-btn :list="btns" v-model="btnIndex"/>
<dvScrollBoard ref="scrollBoard" :config="config" style="height:150px;"/>
</div>
</template>
<script setup>
import request from '@/config/request'
import { inject, onMounted, reactive, shallowRef, watch, ref } from 'vue'
import dTitle from '../title.vue'
var props=defineProps({
year:{
type:String,
default:"",
}
})
var msg=inject("msg")
var btns=shallowRef([])
var btnIndex=ref("")
var config=reactive({
header:['地区','最低价','最高价','均价','较上一日涨幅'],
data:[
['本地','2.32','2.32','2.32','0.25%<span class="plantBS-shangsheng up"/>'],
['本地','2.32','2.32','2.32','0.25%<span class="plantBS-shangsheng up"/>'],
['本地','2.32','2.32','2.32','0.25%<span class="plantBS-shangsheng down"/>'],
],
rowNum:3,
align:['center','center','center','center','center'],
columnWidth:[110,110,110,110,117+28],
})
watch(()=>props.year, async n=>{
var res=await request("/api/industrial/plantGoods",{
method:"post",
data:{
date: n,
region:"",
}
})
if(res.statu){
btns.value=res.data.map(v=>({label:v.plantName, value:v.plantName}))
btnIndex.value=btns.value[0].value
}else{
msg.error(res.msg||"获取品种失败!")
}
})
watch()
</script>

234
src/view/park/right_2.vue

@ -1,234 +0,0 @@
<style lang="less" scoped>
.right_2{
.number{
display:flex;
align-items: center;
table{
width:100%;
tr{
td{
color:#C0DBF7;
font-size:16px;
span{
&:not([class*=plantBS-]){
color:#fff;
font-weight: bold;
&:before{
content:attr(data-b);
color:#99A4AE;
font-weight: normal;
}
&:after{
content:attr(data-f);
color:#99A4AE;
font-weight: normal;
}
}
}
&.up span{
&[data-b]{
&:before{
content:"+",
}
}
&.plantBS-shangsheng{
color:#F02000;
}
}
&.down span.plantBS-shangsheng{
color:#10CC40;
display: inline-block;
transform: rotateX(180deg);
}
}
&:not(:first-child){
td{
padding-top:10px;
}
}
}
}
}
}
</style>
<template>
<div class="right_2">
<dTitle title="产量预估" icon="5"/>
<v-echarts :option="opt" ref="bar" style="height:194px;pointer-events:all;" @click='prodIndex=$event.dataIndex' autoresize/>
<div class="number" v-if="prod">
<sub-title :name="prod.name"/>
<table>
<tr>
<td>{{new Date().format('yyyy')}}<span data-f="kg">{{prod.output}}</span></td>
<td><span data-b="实际产量: " data-f="kg">{{prod.last}}</span></td>
<td :class="prod.tb>0?'up':'down'"><span data-b="较上年涨幅"/>{{prod.tb}}%<span class="plantBS-shangsheng"/></td>
</tr>
</table>
</div>
</div>
</template>
<script setup>
import request from '@/config/request'
import { computed, inject, onMounted, ref, shallowRef, watch } from 'vue'
import dTitle from '../title.vue'
import subTitle from './title.vue'
var props=defineProps({
year:{
type:String,
default:""
}
})
var event=inject("event")
var msg=inject("msg")
var list=shallowRef([])
var prodIndex=ref(0)
var prod = computed(()=>{
var val=list.value[prodIndex.value]
if(val){
return{
name:val.plantName,
output:val.output,
last:val.realityPut,
tb: val.output==0?0:Math.round((val.realityPut-val.output)/val.output*1000)/100
}
}
return false
})
var bar=ref()
var max=5
var opt=computed(()=>({
title:{
text:"单位/kg",
right:2,
textStyle:{
color:"#99A4AE",
fontSize:16,
}
},
tooltip:{
trigger:"axis",
axisPointer:{
type:"cross"
}
},
grid:{
left: 10,
right: 10,
bottom: 10,
top:35,
containLabel: true
},
dataZoom:{
type:"inside",
startValue:0,
endValue:max,
zoomOnMouseWheel:false,
moveOnMouseMove:true,
moveOnMouseWheel:true,
},
xAxis: {
type: 'category',
axisLine:{show:false},
axisTick:{show:false},
axisLabel:{
color:"#99A4AE",
fontSize:16,
interval:0,
},
data: list.value.map(v=>v.plantName)
},
yAxis: {
type: 'value',
axisLabel:{
color:"#99A4AE",
fontSize:16,
},
splitLine:{lineStyle:{
type:"dashed",
color:"#0B1A3D",
}}
},
series: [
{
data: list.value.map(v=>v.output),
type: 'bar',
showBackground: true,
barWidth:20,
itemStyle:{
opacity:0.45,
color:{
type: 'linear',
x: 0, y: 0, x2: 1, y2: 0,
colorStops: [
{offset: 0, color: 'rgba(12, 137, 254, 1)'},
{offset: 0.5, color: 'rgba(12, 137, 254, 0.35)'},
{offset: 1, color: 'rgba(12, 137, 254, 1)'}
],
global: false
}
},
label:{
show:true,
position:"top",
color:"#fff",
align:"center",
distance:2,
opacity:1,
formatter(e){
return `{a|${e.value}}\n{b|}`
},
rich:{
b:{
width:20,
height:4,
backgroundColor:"#0C89FE"
}
}
},
backgroundStyle: {
color: 'rgba(12, 137, 254, 0.15)'
}
}
]
}))
var isEnter=ref(false)
event.on("updateData",()=>{
if(list.value.length>max && !isEnter.value && bar.value){
var start=bar.value.getOption().dataZoom[0].startValue+1
if(start+max+1>list.value.length){
bar.value.dispatchAction({
type:"dataZoom",
startValue:0,
endValue:max,
})
}else{
bar.value.dispatchAction({
type:"dataZoom",
startValue:start,
endValue:max+start,
})
}
}
})
watch(()=>props.year, async n=>{
var res=await request("/api/industrial/rightcenter",{
method:"post",
data:{date:n,region:""}
})
if(res.statu){
list.value=res.data
}else{
msg.error(res.msg||"获取失败!")
}
})
onMounted(async()=>{
})
</script>

108
src/view/park/right_3.vue

@ -1,108 +0,0 @@
<style lang="less" scoped>
.right_3{
.d-title{
.right{
span{
display:inline-flex;
align-items: center;
color:#fff;
font-size:16px;
&+span{
margin-left:16px;
}
&:before{
content:"";
width:18px;
height:4px;
background:var(--c);
margin-right:6px;
}
&:after{
content:"年";
}
}
}
}
}
</style>
<template>
<div class="right_3">
<dTitle title="产值预估" icon="11">
<span style="--c:#0C81EF;">2021</span>
<span style="--c:#10CC40;">2022</span>
<span style="--c:#00E4FF;">2023</span>
</dTitle>
<v-echarts :option="opt" autoresize style="height:238px;pointer-events:all;"/>
</div>
</template>
<script setup>
import { computed } from 'vue'
import dTitle from '../title.vue'
var opt=computed(()=>({
title:{
text:"单位/kg",
textStyle:{
color:"#E2EFFA",
fontSize:16,
},
right:5,
top:2,
},
tooltip: {
trigger: 'axis',
axisPointer:{
type:"cross"
}
},
grid: {
left: 10,
right: 10,
bottom: 10,
top:35,
containLabel: true
},
xAxis: {
type: 'category',
boundaryGap: false,
axisLine:{show:false},
axisTick:{show:false},
axisLabel:{
color:"#E2EFFA",
fontSize:16,
},
data: ['西蓝花', '大白菜', '四季豆', '黄瓜', '苤蓝', '韭菜', '土豆','柑橘','苹果','萝卜']
},
yAxis: {
type: 'value',
axisLabel:{
color:"#E2EFFA",
fontSize:16,
},
splitLine:{
lineStyle:{
color:"#4E7C98",
type:"dashed",
}
}
},
series: [
{
name: '预估产量',
type: 'line',
itemStyle:{color:"#0C81EF"},
symbol:"path://M150.11839294433594,150.11839294433594C250.26559448242188,50.07360076904297,370.8927917480469,0,512,0c141.107177734375,0,261.734375,50.07360076904297,361.881591796875,150.11839294433594C973.9263916015625,250.26559448242188,1024,370.8927917480469,1024,512c0,141.2095947265625,-50.0736083984375,261.8367919921875,-150.118408203125,361.881591796875C773.734375,973.9263916015625,653.107177734375,1024,512,1024c-141.10720825195312,0,-261.7344055175781,-50.0736083984375,-361.88160705566406,-150.118408203125C50.07360076904297,773.8367919921875,0,653.2095947265625,0,512C0,370.8927917480469,50.07360076904297,250.26559448242188,150.11839294433594,150.11839294433594ZM512,41.88159942626953c-85.2991943359375,0,-164.14718627929688,20.889598846435547,-236.33920288085938,62.771202087402344C203.4687957763672,146.4320068359375,146.4320068359375,203.4687957763672,104.65280151367188,275.6607971191406C62.77119827270508,347.9552001953125,41.88159942626953,426.7008056640625,41.88159942626953,512c0,129.638427734375,45.97760009765625,240.4351806640625,137.83040618896484,332.28802490234375C271.5647888183594,936.2432250976562,382.3616027832031,982.118408203125,512,982.118408203125c129.638427734375,0,240.4351806640625,-45.87518310546875,332.28802490234375,-137.83038330078125C936.2432250976562,752.4351806640625,982.118408203125,641.638427734375,982.118408203125,512c0,-129.63839721679688,-45.97760009765625,-240.33279418945312,-137.83038330078125,-332.2879943847656C752.4351806640625,87.75679779052734,641.638427734375,41.88159942626953,512,41.88159942626953ZM512,256c-36.147186279296875,0,-70.14401245117188,7.06561279296875,-102.1951904296875,20.88958740234375C377.8559875488281,290.91839599609375,349.4912109375,309.35040283203125,324.9151916503906,332.2879943847656c-22.937591552734375,24.576019287109375,-41.47198486328125,52.9407958984375,-55.39837646484375,84.88961791992188S248.627197265625,483.3280029296875,248.627197265625,519.372802734375c0,36.147216796875,6.96319580078125,70.14398193359375,20.889617919921875,102.1951904296875s32.460784912109375,60.3135986328125,55.39837646484375,84.88958740234375C349.4912109375,729.4976196289062,377.8559875488281,747.9296264648438,409.8048095703125,761.8560180664062C441.8559875488281,775.7824096679688,475.8528137207031,782.74560546875,512,782.74560546875c36.147216796875,0,70.14398193359375,-6.96319580078125,102.1951904296875,-20.88958740234375C646.1439819335938,747.9296264648438,674.5087890625,729.4976196289062,699.0847778320312,706.4575805664062c22.9376220703125,-24.57598876953125,41.4720458984375,-52.9407958984375,55.3984375,-84.88958740234375s20.88958740234375,-66.0479736328125,20.88958740234375,-102.1951904296875c0,-36.0447998046875,-6.96319580078125,-70.14401245117188,-20.88958740234375,-102.1951904296875S722.0223999023438,356.9664001464844,699.0847778320312,332.2879943847656C674.5087890625,309.35040283203125,646.1439819335938,290.91839599609375,614.1951904296875,276.88958740234375C582.1439819335938,263.06561279296875,548.147216796875,256,512,256Z",
symbolSize:13,
data: [120, 132, 101, 134, 90, 230, 210, 132, 101, 134]
},
{
name: '实际产量',
type: 'line',
itemStyle:{color:"#10CC40"},
symbol:"path://M150.11839294433594,150.11839294433594C250.26559448242188,50.07360076904297,370.8927917480469,0,512,0c141.107177734375,0,261.734375,50.07360076904297,361.881591796875,150.11839294433594C973.9263916015625,250.26559448242188,1024,370.8927917480469,1024,512c0,141.2095947265625,-50.0736083984375,261.8367919921875,-150.118408203125,361.881591796875C773.734375,973.9263916015625,653.107177734375,1024,512,1024c-141.10720825195312,0,-261.7344055175781,-50.0736083984375,-361.88160705566406,-150.118408203125C50.07360076904297,773.8367919921875,0,653.2095947265625,0,512C0,370.8927917480469,50.07360076904297,250.26559448242188,150.11839294433594,150.11839294433594ZM512,41.88159942626953c-85.2991943359375,0,-164.14718627929688,20.889598846435547,-236.33920288085938,62.771202087402344C203.4687957763672,146.4320068359375,146.4320068359375,203.4687957763672,104.65280151367188,275.6607971191406C62.77119827270508,347.9552001953125,41.88159942626953,426.7008056640625,41.88159942626953,512c0,129.638427734375,45.97760009765625,240.4351806640625,137.83040618896484,332.28802490234375C271.5647888183594,936.2432250976562,382.3616027832031,982.118408203125,512,982.118408203125c129.638427734375,0,240.4351806640625,-45.87518310546875,332.28802490234375,-137.83038330078125C936.2432250976562,752.4351806640625,982.118408203125,641.638427734375,982.118408203125,512c0,-129.63839721679688,-45.97760009765625,-240.33279418945312,-137.83038330078125,-332.2879943847656C752.4351806640625,87.75679779052734,641.638427734375,41.88159942626953,512,41.88159942626953ZM512,256c-36.147186279296875,0,-70.14401245117188,7.06561279296875,-102.1951904296875,20.88958740234375C377.8559875488281,290.91839599609375,349.4912109375,309.35040283203125,324.9151916503906,332.2879943847656c-22.937591552734375,24.576019287109375,-41.47198486328125,52.9407958984375,-55.39837646484375,84.88961791992188S248.627197265625,483.3280029296875,248.627197265625,519.372802734375c0,36.147216796875,6.96319580078125,70.14398193359375,20.889617919921875,102.1951904296875s32.460784912109375,60.3135986328125,55.39837646484375,84.88958740234375C349.4912109375,729.4976196289062,377.8559875488281,747.9296264648438,409.8048095703125,761.8560180664062C441.8559875488281,775.7824096679688,475.8528137207031,782.74560546875,512,782.74560546875c36.147216796875,0,70.14398193359375,-6.96319580078125,102.1951904296875,-20.88958740234375C646.1439819335938,747.9296264648438,674.5087890625,729.4976196289062,699.0847778320312,706.4575805664062c22.9376220703125,-24.57598876953125,41.4720458984375,-52.9407958984375,55.3984375,-84.88958740234375s20.88958740234375,-66.0479736328125,20.88958740234375,-102.1951904296875c0,-36.0447998046875,-6.96319580078125,-70.14401245117188,-20.88958740234375,-102.1951904296875S722.0223999023438,356.9664001464844,699.0847778320312,332.2879943847656C674.5087890625,309.35040283203125,646.1439819335938,290.91839599609375,614.1951904296875,276.88958740234375C582.1439819335938,263.06561279296875,548.147216796875,256,512,256Z",
symbolSize:13,
data: [220, 182, 191, 234, 290, 330, 310, 191, 234, 29]
},
]
}))
</script>

102
src/view/park/title.vue

@ -1,102 +0,0 @@
<style lang="less" scoped>
.title{
flex-shrink: 0;
padding:0 5px;
margin-right:18px;
min-width:75px;
height:40px;
line-height: 40px;
text-align: center;
position:relative;
&:before{
content: "";
position:absolute;
width:58px;
height:17px;
background-image:url(data:image/png;base64,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);
bottom:-6px;
animation:move 5s infinite linear;
}
&:after{
content: "";
position:absolute;
width:58px;
height:17px;
background-image:url(data:image/png;base64,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);
top:-8px;
animation:move 5s infinite linear;
}
span{
font-size:18px;
background-image:-webkit-linear-gradient(top, #fff,#429EFA);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
}
svg{
position:absolute;
top:0;
left:0;
height:100%;
width:100%;
}
}
@keyframes move {
0%{
left:-10%;
opacity:0;
}
20%{
opacity: 1;
}
80%{
opacity: 1;
}
100%{
opacity:0;
left:calc(100% - 50px)
}
}
</style>
<template>
<div class="title" ref="frame">
<span>{{name}}</span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="76.5px" height="41.5px">
<path
fill-rule="evenodd"
stroke="rgb(15, 150, 245)"
stroke-width="1px"
stroke-linecap="butt"
stroke-linejoin="miter"
fill="rgb(15, 150, 245)"
:d="`M1.958,9.167 c0,-3.864 0,-7.598 0,-7.598 c0,0 2.143,0 4.592,0 M${width-4.253},1.569 c2.68,0 4.253,0 4.253,0 c0,0 0,3.049 0,7.412 M${width},32.298 c0,4.745 0,7.022 0,7.022 c0,0 -1.186,0 -4.373,0 M6.43,39.32 c-2.813,0 -4.472,0 -4.472,0 c0,0 0,-2.953 0,-7.207`"/>
<path
fill-rule="evenodd"
stroke-width="1px"
stroke="rgb(8, 153, 253)"
stroke-linecap="butt"
stroke-linejoin="miter"
fill-opacity="0.078"
fill="rgb(8, 153, 253)"
:d="`M2.317,15.408 c0,-7.288 0,-13.365 0,-13.365 l${width-3},0 c0,0 0,5.972 0,13.175 M${width-0.3},25.644 c0,8.099 0,14.313 0,14.313 l${-width+2.6},0 c0,0 0,-6.214 0,-14.313`"/>
</svg>
</div>
</template>
<script setup>
import { onMounted, ref, watch } from "vue"
var props=defineProps({
name:{
type:String,
default:""
}
})
var frame=ref()
var width=ref(0)
watch(()=>props.name,n=>{
width.value=frame.value.clientWidth
})
onMounted(()=>{
width.value=frame.value.clientWidth
})
</script>

77
src/view/subTitle.vue

File diff suppressed because one or more lines are too long

81
src/view/title.vue

@ -1,81 +0,0 @@
<style lang="less" scoped>
.d-title{
height:63px;
background-image:url(@/assets/img/frame_title_bg.png);
display:flex;
align-items: center;
padding-bottom:25px;
position:relative;
--t:v-bind(time);
&:before{
content:"";
width:152px;
height:29px;
background-image:url(@/assets/img/line.png);
position:absolute;
top:26px;
animation: move var(--t) linear infinite;
}
span{
margin-left:12px;
background-image:-webkit-linear-gradient(top, #fff,#429EFA);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
font-weight: bold;
font-size:28px;
}
.right{
margin-left:auto;
}
}
@keyframes move {
0%{
left:-40px;
opacity: 0;
}
10%{
opacity: 1;
}
90%{
opacity: 1;
}
100%{
left:480px;
opacity: 0;
}
}
</style>
<template>
<div class="d-title">
<img v-if="props.icon==1" src="data:image/png;base64,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"/>
<img v-else-if="props.icon==2" src="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5wQHDi0jJxEZdAAAAqtJREFUSMe11t2LFWUcB/DPrrOtqRjklrBliWCmmJVXJiFUKlGyiil64T9Q4I3ay5UgBEnI2kVpKxKEWGSQdCcR3dib2EWipoIvC6WGiguF2rpn5njxPMc9Mzvrnj0nvzDMzPM883zn+3v5zrStO5R140O8ggRVraEN7fgD7+EXZLXJJKvqxboWScrwIj7BapyvJ1x2H8hqeBaP5wmzYbn3AVWFFCVZ1nLOxiLMIUnzQ5fwEwaFxDej5hkhlKVI0uwu423swbYWVS3HF5hWTpjm7mfgKQw1qRDmCu01msK71w9gAxYibZKwipl4qBFC6MTzTQezASSVtPVNxkWYtt6FNzGpcYV5wlv4Hf9iQt14BV1YgI44dhg7cFyoyEXowVLBTwl1MCFHWFelQ9iFrcoNvB17sR4n8QauxbX98UU/i6Qf4EmcxpW8wnznj+U6tflPcR1r8X7c9BscwFe4KjT//ng9MSqttM3rq1zBI3UhPYob8m2RxpA+J7TPy/gVX+P1unUn8FYMN0zFCryGJ3Ck2PgPYsnYqfdfzNPkwvh8fIxV+Ad9MfQ1zC4WTaOYInxUr5XMLYgquwtkUCkqbBSz8QN+w5qS+Y3K7W2gqHBQqKzUcGkTiqVT8NkOrBQq+ltsNlwDNXSO8qKH6hv/Nr4U/m+K5p0J+d2OV/ESFuNnvI1ePDxGVPqxu+g0/Th1j4cux3MHdkalnwst0oM58Xi08Nw5vIkLbdO2D9W3xUX8OIrCSUIFd9WNf4d3cCzez8KWuPmfUcBJ7IvRGOGljxnfH9xyob8OCi5zFgNx7qM4/rfQ3wJhNVcczeBpbMJfkbBm5Jdwobg4ybJxf2jLkCmYtGBnI5CkmTN44X8grRbOHWWLkmrVu4IZT6epf9R2oW+nxvvvhbweK1t8B+ScwzA4PVeTAAAAAElFTkSuQmCC"/>
<img v-else-if="props.icon==3" src="data:img/png;base64,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"/>
<img v-else-if="props.icon==4" src="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAhCAYAAADOHBvaAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5wQHDi0wo69YqgAAA25JREFUSMfF1lmoVlUUB/Dfdz33qje18hqkDxEk+JAVVObNDKJeCipowIImspG0CeslH6oXI2ighCAb6KEIKW1ANApCSlFuqTk0aGkmmg0+lBA5nbV7OPva9UO/KaQ/rIez91rrv9baa5+1azd8FDrA5XgMo/As3sX+dhx0pUSL0pWSGSkZSMmylJydkvEpeTMlG1NyR0pGtOqvKxJNpDuSGZEMRLIwktMjmRvJxCz3Zr1XI9kQyV2RjG7mtxHx8EhmRrI+E06I5IFMNi+SPZH8FcnLkZwZyY2RHIpkQSRrI5ndKICuCOqkN8KdETZEeC1/3x9hUoT5EfYexeZghJURNufviVl3XYQ5EfrqbWpXf3i4ucbgNjyC07AVT+Et7GvQJ5MxG7eg9xg6OzEfb+A3qF35fvRlwvtwBr7G01iIAw0Iz8tBXofuFpt5N17BgtoVi8vFuCZvzMPcJsb9eBDXo2jnCg3BQFGGCSgxLJesFy/h+yGKNVyFRzG9Q7JBlOjritAT4YcI0yJ8GuGhCFtyY02OcG2EFRE+iDD9KI3VqiyNcFmERRFGFmVYgklYlUt+YS7lTNyes+0UCUvxAj7JazehqyjDduwYorwqyzNYhnEdEAbeyYSr6va6oChDMfhRhy+xB7uwArdidBPC/XgPLx6F8AgU5bFnxDBVo21UNd1zmIObVXd+KPbhbTyf9ZuiONR4OI0ckuU2zFJNo1lZCryu+jm0RNhKxmUu24a69W0586kYj7vbIVQda09RlqmR0j0N9g7gYJuk8DfWNMq4GWo6u2rL8c1/Ie4UB9DdrLmOB2o0bq7jiv+RuOzcVudj8XDGneS9BH2qM0tt2AUUkQ7/Gk/En204+BF72wx2JE5FrSjDVlyKh7E6yx8tOOnW+pOnFxeoRu5YrC7KSB9jMy7CJXnzixzAnjYzqscYnK96Lp2M77AYW4qoTvenLJ/h4hxEPwZU4+33Dgj7cxKj8K3q8bh1UKGII9tip2q8Lce0bDwVa7ESvzQhHJttpuTybsLn2F6vOJhxPXZjUSabhnNzydbkCuxSdWfKMjbrTVWd+6ZcvR2OgdqIJ1saMONyJv2qu7sep2C4akyek9fX5WB/buaw1vNEW5NtnKo7p+CEnO0hfJVL2uwo/iXufryTkeoknIWeXNZf23XwDx/xBzkD6LKAAAAAAElFTkSuQmCC"/>
<img v-else-if="props.icon==5" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAcCAYAAAB2+A+pAAAAAXNSR0IArs4c6QAABZBJREFUSEu9lluMXHUdx7/f/zlzzgytLVnZSHxBTfHSqKSRhAChRhJTtt1Ou5rd4AOktTEymAAvCEkhqQoW1BiUhEUNkAhNsSCZFm13kcQLGEzaREJYccdeIg+WUtiWXnZn5n/5mnPO7O50u9ndB8J5mZz5n3M++X5/Vw7u99sNOSTqD6VgHt61nmfwEVwc3B9eFXAdiIMhcOiFDfzvR8AFv/HH0ABwJYgjjtywr4/ji4H79istWVxairAse9Z6nLclnD6wnq3F3p0+58CL4S0BnyfxHyNWf7+R/17o5cE9StoVrCPCNwH2ZM8SOhVgnk+mMPrcENtLgbO6N4wBWE2gIbC6b9PCiteNqCdthZ+CvBlCWoDRFrS7lZq7R2/ixJLAG+oFGEDDk9WRRcDVvfqEl54AsR7KmIVkCPsjctu+TTyxJPBNL/iOYjbkWB0ZWlhx3x71KtbjgDYBiDoQD3AvHW87MMSTSwJ//bkCDLLhAqt/XgLYww+L3NwNplSPENWWDL7xd7OKAxcH37BHvbE0TOgCsMC6I2uvZIp3yFy/BssqLZhMvVkJ99I6TALUTFavfdaPUVgtsOEdq3+/ZWGrMzCDhqk5YLIuw9rlwMQJb78MRmshfCxPAWGC3r70lyPpUexgyP+7/pmOYrKhsDRwsAVYnRgT8CLrpsSaA3xkw04IGwUkIEhhUsDu89b8+PWtPJ2Dr/mtHyM6isnqoUUUr3lSvUk8v9Vtx5opIY6hZymt7U4ygaPBc8vBrXwnB3/lKT9GZuXEBjyrh7YtbHUGjoyGMSfGAOs+FGA6vxvkV7vAAvQyFd06A17zRGF1FuMAVt9YAhiaHwyy1rSI09jvIvi1GXBe5xy1gVve/E5R5/zir+0YwVwxI7MoeNWT6i07P0xgTlaj3oyjWslOxhGTi8FBozLxLPgLj9sxZGCyEbypjt++sNUZOLZ+GMJmdpJLgAdRd6UCLF0MljTaiuItx6YVX/mYHaM6iq2tjt9VHsceRZ86iV6qmQJlJIL1wvuH72Br1S/Vy3h+sFxUs34yTpNkFy6yWqPWxluO3dWx+jOPdhRnyUW78eh76eEreuxVhhygeFnRi3kWkfnT0Xfxt1U9WBmYdS5spoqWKcJTqBsV4ChKdoEXxlhBowhd4CsembXaw/ZPMj2xQmF7ALZRuiT/MOBJjLQY3Z7dp2F+cMtEtdRPxuD8ig26wJ/8eVdyOdsvl06gHB4RdDOBeLYk9BqsHfK+0orK/jERA3MV+ziqucxqpM9AuPGCrAZGLKOt705bffnPZq32wfYnLp1wif8FiCEKpa5a/Ec7iQaTc2gpdb8CWO0GQ3oRan7Xx8ujOPjdEGbrmJCEl0No3nry+8uLBnLZTzqKlce4v2nSU6kPj4IanM7ajt2HgqKBkkHbyz1FsK/YAfIra/4HaJvfDvGyiPTPA7h2znj8q2z0rfe283gO7tnZLsoJajiEDWfi9PjHvbtTwvdAdGJMR4W6S0v3xDEcJt39EG8BlW8gEFugnsYl8Y/cxJk4LlceEjgwGyo2JT0Nnn3w1L09H+TgFQ+28wYi4K22XF/zvvLbK3fi0wx+bRBX5CVqMEXh4GlbehOroeWH8bkI/lqFkC97NOa8R/TauVUYx7/AS439kmJcrYBKPhaNORu8e/WMT4/MTKflD2QxzlqmjkG8zfjwNiP5NlUsbVb5DFVcKZUMKtlJRDXbpbSFqanCzUoFiW2lXiwzSmQDpuim7IzVM+dpmWy7cz45zmU/bI8L/CyAcwBfIcIHgAkC2vkulVMDRVMyCnmyBcARpus8G7khMZ0qCDSWChY0nfez0RhSGBOHEJoA/sn0B/Z1AFd1EsR1fufkxYd6m02q/zHd4X4DqV9kOU/O6c3xQ2Vd8LEsdm/8H+HjFW64T7NFAAAAAElFTkSuQmCC"/>
<img v-else-if="props.icon==6" src="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5wQHDjsZ/YV1EQAAAzZJREFUSMed1z+IHVUUBvDf7k50s6YwGANC/IOgRrRIiAEREbSwsFAkyDYGQlzT2ChiIYnBf0EQTAgqBBsNhCypRATxD8TYKGIhooWNYqEoaAyKmmSzbz6LN/t2dndm3tud4s2c737nfOeee2fueWPTH5Zb8Dy2YwLBGOZxBodwTu3K4GdwI7VnJhPP4oGwTmRhLPE9XijwCh7VfO3Ar+G1LqEVicRD4WAltIQTtmFTgTtq/ufRS6zDZAVO44/E+ECzK4kosasmdBFzlf/6xHi4sQipvP4J9+E3cXeYrWLtTLyzLOsmwUEyy2b5VHgfVyQ+wbWJskj6wqGH78IF8UOTUEPZ2vHqHn4SP1fYXIUpytJYxStwvzib/toOF2qa5UpsR+JvrA9TC+NFubgVNyTe68i8VbwV699faog3UZTxmbh1xLKNhrUkVeN8U5SlA/gl7BLbMky8pbwjcj4Xn4ZjRRlnEy/jz8Sbw4J2CJ1ObAzb2xIIz4nTQdErBwEuW2X2C5xLiT04mSjCt2JrEz+pvg3p7+ru9WlYyxonYW/iZGXPh/k6ry120Rsm3B6gTMyEEzWfw+H2kYWXlaN7w/TtecwkjtfGjiSeXO7TZq8QHiHbMpVoZY+FY2LfsFnW7bUIz4TjNfv1sK+rUk1xVlPqS2GvOFHjvZF4YtgStQu3kRaf5xJ7wmyN+xYeX+XeWCo8QrZfhdka70gq0RHfgBX4qMJXhSsTF3FoYfeu8p1vFT7fUbat4evEHG5ew9dtAf938XXqWRcewYND1uuGUQ6FIR+ix3BT4lTRKx0IB9d0+nSsrWbe7sRu3Fn0yiWN2UjCqz2fWVGVe4teabwy/gtP46/EbWH/qKVcMbZU9GjiS1weXhVXI0WvHPDmqm7yQmIn9qe7bJ0NQ2384/BBBR6ISrjMINi4uCb99nZTQ+ads+zAN+r301OYWNzVpYnKYUM4o3+mTtUcv0gcjX5DP/gv0i5UJqbxcAUfFi9iPGypHMaLsvRjuKXq9K9rKNtHODXk34MaTGxIJYzNic2WXueKXukZTIbr9Y84GEsGDf7bdZGmmS5JqD/+Lu7BXfr9emp5/Y79/wOueO+UlZzpxgAAAABJRU5ErkJggg=="/>
<img v-else-if="props.icon==7" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAAXNSR0IArs4c6QAABQ9JREFUSEutlnmI1VUUx7/f+3ur88a9MLdUVChpAaXNP1wQLSGMymGwzESfkqGUqC1qPrUsl5wWNcxSQ5OYSssdjBRJkcisTLPMlMR9XN+M8+a9d+83fg5jo76Zp9n9995zPueee+73HOJ6lsS+y9CgZRvYE5VQocEASEMBWFD7nMwPFH5BFH9/3ovl9blkfZuPrFc4KrQwBh3l0IkO+yo8/FgADAGUABAjkBJQAeBXkWudxbcpg/0b+rMql++cwIGl8jKFaEOhN6QnSdwDwcqwJG2xNGJQLGkGgMa1nDoAFwDsgbgkG8Ha1X144mroNcCemxVpVIEelIYB6AXAI3BQ5C4Bnzhhp5F7luTrAJrkcOgccJLSZ/TMB6v6Yz9I1Zy7AtizVLFGUQyU0zgAbchLaVolYX06hWNlZ5Es7AyvMOniBKdC1wJrBZAEtNJaM3Pd49gHVEMvAx8sVbRpBIMoTZTQFOQKBywKHMfva0byYo0jPwMF5xCHUT6g77xc1AoaM23tozxyGei/WdKgHzzNhlMrGCywxszbNADHaiKrDYyecXEQU5UjpTkK5TRhZl/wsGDbACYv3bBvaWV7MbiQYHcHLGXIvLFpAI/mqrKeSxQJxFzc4LqBILHPORP/pgjb6Kcy7NwzhphBaG+G3qitRdxd13fxgSZafcNcRVOHXSXgFmYYmMHuK9TFo51PsAt9J5Xmoy1DmaoPqPCNAUWIwB+w7jl2X54dAnImxUMuwKe2F/NAfWLg3zAddnHqhm7oF9A5CSV8YJldBOAJOH2aSXmTdo7k+XzAlHFxGOSt0tp+RKQBbmK3pe47Qe0pTa4s8JbvKWI6HzBJNwLAVF6pNPlU2f+He3nvx/bApe/o7LCf4sEt+axaz1W0eRM3Ag6vXSVt+Ux9yhHetSh7UsB5wiveHefOfFZdEgqhte1HYJCRYvI7Rr3toVphJHmEKeOdC7OHBaZg7eDfRoV25AP6+61LFY0cR8y6CmPCBZd1MrdtORiOSVXlDNqYZef5dpegZgLG/nnK+woJZq8Her1n2i5QkxDRDpl0FRA6wA7vZ78A0QNOCyqqArNOjKff2/6X1fE9ha2xgymNEbijynjTeXuJHSujVyl87zxv+OHRuSXtv0TQ9k01QdTOBTAQ4hykzLts+XbmIdAsItVQFqOPlnurkaDfTG963TZHXY1xiwE1g7zBR8ZiCxvOVdMClx0v8HkB65xLvXhqQuz4zdIal6hxxGUnQxwJYWPWeWPKXuJRAmLzmehKZhcDbAFyWrDCLD6a+LcH3jB8oYK3nLePCZjtAwSMLmvnbUARbXUDnqto43RmOMXJhM7BmUlnyrw1KGHlf4E1PZvtDWE6yM6S5oGB2WdfrpbMyx0/lkje6oUj4yCMEHSMwDsuFPwyOQ6nr27CdQbxlho1ytq+oCaAuEPQStIlzr8S+avG5oqZJjLlYttgIPiCSH8MTENclaVWpLzAHlQhmfOPJmQgxAq8THsYFpMsotQc0NeiZpVPDO2pHfA1U1uDKRUtXSA0xEhxks0hHRHMVsFuthZ7vWDoLDOwAoxlumGA6ERjegjoRaGDyKSclkuBD1MJHLw6O7kH4ZkqjFRm7wf1NMA+BHz98gWhnMBFCBkAAVENANOAUKGEKhHbJC5Pw9uKBM/kSn3dk3dCJhpAK2vtfRQeFtSNYEtJURCEINBvZToO6GfRbDSZ7Paqu8OH/Gqs653/AXLEY/p18N+YAAAAAElFTkSuQmCC"/>
<img v-else-if="props.icon==8" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAAXNSR0IArs4c6QAABXlJREFUSEulll+M3FUdxT/n3t/MtoGWshgVNZnqCyVqlcT4oCZSFFP/xIR/qyhBBQtEQ2givhSxzaZbq1at2AhoNT60CWkDKo0PJug2NdqMgEEjmAYfGgO20AKyyC4787v3mPub2XbZtmuVOy8zv/u7c+73fM859wrgmj2OYTnvsvN1SB/ELAcy4DJ/hiGJjHna+MFaYe8Da3VkkfebKWHriodYFWs2Y39YcK4h/LeFc/MSfcxR43sUwj171+r5xdbqk7/0slbINxC10eb8swU6zXt/zdJXWv/mN3vHlM5Iyyf2+c2RvFHS9ZiR1wB43PbGF5eFn+5fo1fOCLj2517ZjnmLrKsNrf8bUBw3Hl/ySti5d0wziwJG8hakq3kNgBLPZmt8+jx+smiFH7vfHStPFLEa2kAfOAo6VkQqoWa3VgYXyjuGcxvBzRsSz2SHO48f42eP3qzyH6cduux+d0LOE4KxYYX/FPzYzpPEqhZ1LCtTqvqIC4L8VeH32zTP543jwLdph11K1DJxNuEKZh56gpfYVDYMumy3O6ryhOcAxXNk7yPoUUwtiI3kyncxGuBa4O2nsc4s8LjEky6suGCFjH3Y5F/49VV3/xrVet9ud6o4oFSmbcgS0zY9UVxaFjf8GRFtzpGoml+v4rQJiRIEmbk2DJKjR3Y35Lhh/9/5YwMoBoCYNqLGvCiYGeAMhsqeSyCYFYilpwAuLu9pyD+qQ7W1AcypAWx6aDiC2EnOk9kEhaqCGsWqF+q0wgq3gT8Ap/RwcUj59ymlm3XJbndC/6RoDM9idtmebKjJVAqxENjPTqNB4UvY75XOPv4GO/EjWelGXbJzYAtpSCnUFi9hXh5S2dBa+NQgY89HjPyPlJbXuylonS7e6U6V0wRDwEY0MG1RVIeG4rCwTECc09hn7vng/SOWn2w0gFYJRk/DbxfHdbp4hzuu0nwfPmfxoMgPy9FWavxmikW0HHOtpdXFZ0W/Qody9jfrUP8uJqoYW1fZvhV44wIVd01cp7fucKfSSUDDU7LvzjCZ5Tq6FUr45FDMrAuEbhesAapBIuUJ5davHPLHwVMhxAPZ9TqjL8ucNwdq6KY8BBRpAnMNw2gzel4wZbJF0OAsLp5UW+Z1hVbDjOx7Z1K1fSTWnxFaD7ws8zVcP+JYbRZcgQcHgkVXhdILd7jTTicBh8bv2bz6TCv2L30TSwYRy6/rFNeHmFYFcxeiM4gIDpLjrYoss+vvg1YP+91NsQBuc0cxTcjDLBUvYH5r+4mSHEGlwlJjToUiS1cK95K0PuR4VErfQVw6T7U9xH05xa/HmC63GQcu5ESF29zJhVIY08D4Twt9r1bYV+4srdyrSG2nQC9Rd6K0AWnSKexRSBsE1w1bcUIjhn/J3mqqPYR0h8xnwY87VF/Qim1DW5QsHfRwFnzI1uFBsDk05nATq6OWlyblG2KOKwV3I94wPKqKRwd5WhbYh6C6Xk5vQ9pu5WeSqs9pxeYBpeA5wOZq1XwWjibI9Y865E+TSRXhFotR2QX0nUjT2H9xEY84nEL1A+r+pUHhG+CnyPnzDWAORTTzABdLRTFD1q4U0vZK7enMbEWuLhLFey4evkvKx3pppN/K/Tep0rjhQ8CfUqhu1NKN02+pWtUWo08t7MWZcAeW4aDx34DHQp0P0go3mfhCP/fvaxE+0lSM3kHgPZiliIMof1FLNnmlYtosPDbnmcVj/8RsOfdmMQfAdxpdGcRUgm4wWxGrmwJOnpvdOuabNDKebsHpNtBFC+8pZwNs84ccuD2aq5yZUtDD4O8CqxasPyb4oUY21fcaLhduY5/xAnsqePGno6UDTvlbCvqo5Skn/TkE7pD0bkxvqNqAHAyP/QcXwcKiByHjHwAAAABJRU5ErkJggg=="/>
<img v-else-if="props.icon==9" src="data:image/png;base64,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"/>
<img v-else-if="props.icon==10" src="data:image/png;base64,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"/>
<img v-else-if="props.icon==11" src="data:image/png;base64,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"/>
<span>{{props.title}}</span>
<div class="right"><slot/></div>
</div>
</template>
<script setup>
import { ref } from "vue"
var props=defineProps({
icon:{
type:String,
default:"1",
},
title:{
type:String,
default:""
}
})
var time=ref(`${2+Math.round(Math.random()*3*10)/10}s`)
</script>

62
src/view/yuanmou.js

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save