index.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. <!--
  2. * @LastEditors: gcz
  3. -->
  4. <template>
  5. <div class=''>
  6. <Map></Map>
  7. <Header></Header>
  8. <section class="nav-wrap">
  9. <div class="nav-item" :class="{active:(index+1)==page}" v-for="(item,index) in navList" @click="navClick(index+1)" :key="index">
  10. {{item.text}}
  11. </div>
  12. </section>
  13. <Alarm v-if="page==6&&alarmData.length>1" :data="alarmData" />
  14. <section class="left-wrap " v-if="page==1">
  15. <Numerical class="" :data="page1numerical" />
  16. <MyEcharts class="blur-wrap u-p-t" mid="page1Char1" ref="page1Char1" :option="page1Char1" height="30vh" style="padding-left:20px" />
  17. <MyEcharts class="blur-wrap u-m-t u-p-t" mid="page1Char2" ref="page1Char2" :option="page1Char2" height="30vh" style="padding-left:20px" />
  18. </section>
  19. <section class="left-wrap " v-if="page==2">
  20. <MyEcharts class="blur-wrap u-p-t" mid="page2Char1" :option="page2Char1" ref="page2Char1" height="30vh" />
  21. <MyEcharts class="blur-wrap u-m-t u-p-t" mid="page2Char2" :option="page2Char2" ref="page2Char2" height="40vh" />
  22. </section>
  23. <!-- 林业经济 -->
  24. <section class="left-wrap " v-if="page==5">
  25. <Typeslide :data="typeSlideData" />
  26. <Numerical class="" :data="page5numerical" />
  27. <MyEcharts class="blur-wrap u-p-t" mid="page5Char1" ref="page5Char1" :option="page5Char1" height="30vh" />
  28. <MyEcharts class="blur-wrap u-m-t u-p-t" mid="page5Char2" ref="page5Char2" :option="page5Char2" height="30vh" />
  29. </section>
  30. <!-- 事件信息 -->
  31. <section class="left-wrap " v-if="page==6">
  32. <Numerical class="" :data="page6numerical" />
  33. <MyEcharts class="blur-wrap u-p-t" mid="page6Char1" ref="page6Char1" :option="page6Char1" height="30vh" />
  34. </section>
  35. <section class="right-wrap">
  36. <PickerAddr />
  37. <div class="xiaoban u-flex">
  38. <div class="title">小班查询:</div>
  39. <el-input v-model="xiaobaninput" placeholder="请输入小班号">
  40. <i class="el-icon-search el-input__icon" slot="suffix" @click="xiaobansearch">
  41. </i>
  42. </el-input>
  43. </div>
  44. <section class="scroll-board-wrap blur-wrap">
  45. <dv-scroll-board class="scroll-board-01" :config="scrollBoardConfig" ref="scrollBoard" @click="scrollBoardClick" style="width:100%;height:25vh" />
  46. </section>
  47. </section>
  48. </div>
  49. </template>
  50. <script>
  51. import Map from "../components/amap.vue";
  52. import Header from "../components/header";
  53. import MyEcharts from "../components/echarts";
  54. import Numerical from "../components/numerical";
  55. import Alarm from "../components/alarm";
  56. import PickerAddr from "../components/pickerAddr";
  57. import Typeslide from "../components/typeslide";
  58. import { Message } from 'element-ui';
  59. import { debounce } from '@/utils/mdebounce';
  60. import {sliceArray} from '@/utils/sliceArray';
  61. import {
  62. page1numerical,
  63. page1echarts01,
  64. page1echarts02,
  65. rightScrollData,
  66. alarmDataApi,
  67. page2echarts01,
  68. page2echarts02,
  69. page5numerical,
  70. typeSlideApi,
  71. page5echarts01,
  72. page5echarts02,
  73. page6numerical,
  74. page6echarts01,
  75. } from "../service/index";
  76. import scrollBoardSchema from '../dataSchema/scrollBoardSchema';
  77. import page1Char1Schema from '../dataSchema/page1Char1Schema';
  78. import page1Char2Schema from '../dataSchema/page1Char2Schema';
  79. import page2Char1Schema from '../dataSchema/page2Char1Schema';
  80. import page2Char2Schema from '../dataSchema/page2Char2Schema';
  81. import page6Char1Schema from '../dataSchema/page6Char1Schema';
  82. // import { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, CodeToText, TextToCode } from 'element-china-area-data';
  83. export default {
  84. name: '',
  85. components: {
  86. Map,
  87. Header,
  88. MyEcharts,
  89. Numerical,
  90. Alarm,
  91. PickerAddr,
  92. Typeslide
  93. },
  94. data () {
  95. return {
  96. page:1,
  97. // addrOptions: regionDataPlus,
  98. addrSelectedOptions: ['520000',''],
  99. navList:[
  100. {text:'森林资源'},
  101. {text:'树种'},
  102. {text:'碳汇管理'},
  103. {text:'土地流转'},
  104. {text:'林业经济'},
  105. {text:'事件信息'},
  106. ],
  107. scrollBoardConfig:scrollBoardSchema,
  108. page1numerical:[
  109. {name:'储蓄量',number:'2309',unit:'立方米'},
  110. {name:'储蓄量',number:'2309',unit:'立方米'},
  111. {name:'占地面积',number:'55.4',unit:'万亩'}
  112. ],
  113. alarmData:[
  114. // {msg:'三都林场01小班于15:00:00发现火情,请尽快处理!'},
  115. // {msg:'测试1!'},
  116. // {msg:'测试22222222!'},
  117. ],
  118. page1Char1:page1Char1Schema,
  119. page1Char2:page1Char2Schema,
  120. page2Char1:page2Char1Schema,
  121. page2Char2:page2Char2Schema,
  122. page5numerical:[],
  123. typeSlideData:[],
  124. page5Char1:{},
  125. page5Char2:{},
  126. page6numerical:[],
  127. page6Char1:page6Char1Schema,
  128. xiaobaninput:'',
  129. };
  130. },
  131. created(){
  132. //第一屏统计
  133. page1numerical().then(res=>{
  134. // console.log('res',res);
  135. this.page1numerical = res.data;
  136. }).catch(err=>{
  137. console.log('echarts01 err',err);
  138. })
  139. this.getPage1echarts01();
  140. this.getPage1echarts02();
  141. this.getRightScrollData();
  142. this.getAlarmData();
  143. // this.getPage2echarts01();
  144. // this.getPage2echarts02();
  145. },
  146. mounted(){
  147. setInterval(() => {
  148. this.getPageData();
  149. }, 111115000);
  150. },
  151. watch: {
  152. xiaobaninput: {
  153. handler: function() {
  154. debounce(this.xiaobansearch, 500, false)
  155. }
  156. },
  157. },
  158. methods: {
  159. addrChange(value){
  160. console.log('addrChange',value);
  161. },
  162. navClick(index){
  163. // console.log('index',index);
  164. if(index==3||index==4){
  165. Message('暂未开放!')
  166. return
  167. }
  168. this.page = index;
  169. this.getPageData();
  170. },
  171. getPageData(){
  172. if(this.page==1){
  173. this.getPage1echarts01();
  174. this.getPage1echarts02();
  175. }else if(this.page==2){
  176. this.getPage2echarts01();
  177. this.getPage2echarts02();
  178. }else if(this.page==5){
  179. this.getPage5numerical();
  180. this.getTypeSlideData();
  181. this.getPage5echarts01();
  182. this.getPage5echarts02();
  183. }
  184. else if(this.page==6){
  185. this.getPage6numerical();
  186. this.getPage6echarts01();
  187. this.getAlarmData();
  188. }
  189. },
  190. getPage1echarts01(){
  191. let param = {
  192. cityId:this.vuexSelectCity,
  193. countyId:this.vuexSelectDistrict,
  194. townId:this.vuexSelectStreet,
  195. }
  196. page1echarts01(param).then(res=>{
  197. this.page1Char1.xAxis.data = res.data.map(item => {
  198. return item.name
  199. })
  200. this.page1Char1.series[0].data = res.data.map(item => {
  201. return item.number
  202. })
  203. let charUuid = this.$refs.page1Char1.mid;
  204. this.$refs.page1Char1.intChar(charUuid)
  205. }).catch(err=>{
  206. console.log('getPage1echarts01 err',err);
  207. })
  208. },
  209. getPage1echarts02(){
  210. page1echarts02().then(res=>{
  211. // console.log('res',res);
  212. let charUuid = this.$refs.page1Char2.mid;
  213. this.$refs.page1Char2.intChar(charUuid)
  214. this.page1Char2 = res.data;
  215. }).catch(err=>{
  216. console.log('getPage1echarts02 err',err);
  217. })
  218. },
  219. getRightScrollData(){
  220. let param = {
  221. smallNumber : this.xiaobaninput
  222. }
  223. rightScrollData(param).then(res=>{
  224. // console.log('this.scrollBoardConfig',this.scrollBoardConfig);
  225. this.scrollBoardConfig.data = [];
  226. res.rows.forEach(element => {
  227. this.scrollBoardConfig.data.push([element.smallNumber,element.treeComp,element.perAcreStock,element.landArea])
  228. });
  229. this.$refs.scrollBoard.updateRows(this.scrollBoardConfig.data)
  230. // console.log('this.scrollBoardConfig.data', this.scrollBoardConfig.data);
  231. // this.scrollBoardConfig = res.data;
  232. }).catch(err=>{
  233. console.log('echarts01 err',err);
  234. })
  235. },
  236. getAlarmData(){
  237. alarmDataApi().then(res=>{
  238. // console.log('res',res);
  239. this.alarmData = res.data;
  240. }).catch(err=>{
  241. console.log('echarts01 err',err);
  242. })
  243. },
  244. getPage2echarts01(){
  245. let param = {
  246. smallNumber:this.xiaobaninput,
  247. cityId:this.vuexSelectCity,
  248. countyId:this.vuexSelectDistrict,
  249. townId:this.vuexSelectStreet,
  250. }
  251. page2echarts01(param).then(res=>{
  252. // console.log('res',res);
  253. this.page2Char1.series[0].data = [];
  254. this.page2Char1.series[0].data = res.data;
  255. let charUuid = this.$refs.page2Char1.mid;
  256. this.$refs.page2Char1.intChar(charUuid)
  257. }).catch(err=>{
  258. console.log('getPage2echarts01 err',err);
  259. })
  260. },
  261. getPage2echarts02(){
  262. let param = {
  263. smallNumber:this.xiaobaninput,
  264. cityId:this.vuexSelectCity,
  265. countyId:this.vuexSelectDistrict,
  266. townId:this.vuexSelectStreet,
  267. }
  268. page2echarts02(param).then(res=>{
  269. // console.log('res',res);
  270. // this.page2Char2 = res.data;
  271. // console.log('this.page2Char2.series', this.page2Char2.series);
  272. this.page2Char2.xAxis.data = [];
  273. this.page2Char2.series = [];
  274. const rows = res.rows;
  275. console.log(rows)
  276. // x坐标
  277. this.page2Char2.xAxis.data = rows.map(item => {
  278. return item.smallNumber
  279. })
  280. console.log('x坐标', this.page2Char2.xAxis.data)
  281. // 获取所有项
  282. let seriesList = rows.map(item => {
  283. return item.treeList
  284. })
  285. // 数组扁平化
  286. seriesList = seriesList.flat()
  287. // 去重
  288. let obj = {};
  289. seriesList = seriesList.reduce((newArr, next) => {
  290. obj[next.name] ? "" : (obj[next.name] = true && newArr.push(next));
  291. return newArr;
  292. }, []);
  293. seriesList = seriesList.map(item => {
  294. return {
  295. name : item.name,
  296. type: 'bar',
  297. stack: 'total',
  298. label: {
  299. show: false
  300. },
  301. emphasis: {
  302. focus: 'series'
  303. },
  304. data: []
  305. }
  306. })
  307. console.log(seriesList)
  308. rows.forEach(item => {
  309. seriesList.forEach((jtem, index) => {
  310. let num = 0
  311. item.treeList.map(ktem => {
  312. if (ktem.name.indexOf(jtem.name) > (-1)) {
  313. num = ktem.value
  314. }
  315. })
  316. seriesList[index].data.push(num)
  317. })
  318. })
  319. console.log(seriesList)
  320. this.page2Char2.series = seriesList;
  321. let charUuid = this.$refs.page2Char2.mid;
  322. this.$refs.page2Char2.intChar(charUuid)
  323. }).catch(err=>{
  324. console.log('getPage2echarts02 err',err);
  325. })
  326. },
  327. getPage5numerical(){
  328. page5numerical().then(res=>{
  329. // console.log('res',res);
  330. this.page5numerical = res.data;
  331. }).catch(err=>{
  332. console.log('echarts01 err',err);
  333. })
  334. },
  335. getTypeSlideData(){
  336. typeSlideApi().then(res=>{
  337. this.typeSlideData = sliceArray(res.data,3);
  338. // console.log(' this.typeSlideData', this.typeSlideData);
  339. }).catch(err=>{
  340. console.log('getTypeSlideData err',err);
  341. })
  342. },
  343. getPage5echarts01(){
  344. page5echarts01().then(res=>{
  345. // console.log('res',res);
  346. this.page5Char1 = res.data;
  347. let charUuid = this.$refs.page5Char1.mid;
  348. this.$refs.page5Char1.intChar(charUuid)
  349. }).catch(err=>{
  350. console.log('getPage5echarts01 err',err);
  351. })
  352. },
  353. getPage5echarts02(){
  354. page5echarts02().then(res=>{
  355. // console.log('res',res);
  356. this.page5Char2 = res.data;
  357. let charUuid = this.$refs.page5Char2.mid;
  358. this.$refs.page5Char1.intChar(charUuid)
  359. }).catch(err=>{
  360. console.log('getPage5echarts02 err',err);
  361. })
  362. },
  363. getPage6numerical(){
  364. //第一屏统计
  365. page6numerical().then(res=>{
  366. // console.log('res',res);
  367. this.page6numerical = res.data;
  368. }).catch(err=>{
  369. console.log('getPage6numerical err',err);
  370. })
  371. },
  372. getPage6echarts01(){
  373. let param = {
  374. cityId:this.vuexSelectCity,
  375. countyId:this.vuexSelectDistrict,
  376. townId:this.vuexSelectStreet,
  377. }
  378. page6echarts01(param).then(res=>{
  379. // console.log('res',res);
  380. // this.page6Char1 = res.data;
  381. this.page6Char1.xAxis[0].data = [];
  382. this.page6Char1.series[0].data = [];
  383. this.page6Char1.series[1].data = [];
  384. this.page6Char1.series[2].data = [];
  385. res.data&&res.data.forEach(element=>{
  386. this.page6Char1.xAxis[0].data.push(element.villageName);
  387. this.page6Char1.series[0].data.push(element.fireCount);
  388. this.page6Char1.series[1].data.push(element.cutCount);
  389. this.page6Char1.series[2].data.push(element.pestCount);
  390. })
  391. let charUuid = this.$refs.page6Char1.mid;
  392. this.$refs.page6Char1.intChar(charUuid)
  393. }).catch(err=>{
  394. console.log('getPage6echarts01 err',err);
  395. })
  396. },
  397. xiaobansearch(){
  398. // console.log('xiaobansearch');
  399. this.getRightScrollData();
  400. this.getPageData()
  401. },
  402. scrollBoardClick(e){
  403. console.log('scrollBoardClick',e);
  404. }
  405. },
  406. }
  407. </script>
  408. <style lang='scss' scoped>
  409. @import url(./index.scss);
  410. </style>