0


电子信息毕业设计VUE+websocket+Echart+服务器的智能农业管理系统

一、作品介绍

  1. 现在农业在互联网的不断发展下,给到了农业生产带来了很多新的思路,本次毕业设计作品是在团队+自己敬爱的指导周老师+学长+本人(当然还要感谢我的母校,培养我很简单,管饱就好,哈哈哈),在诸多的指导帮助下设计出来的,设计不易,供大家码农朋友提供参考学习,本人来自于普通的农村家庭。也希望自己的作品能够为以后的乡村建设提供一份美丽的答卷。

对于我们的传统农业生产方式,对于农田的参数检测、病虫害预警、远程管控等的实时效果能力达不到,对于现在的农作物而言,我们知道,农作物最重要的生长标准环境就是农地里的光照、温湿度、病虫害等等的因素,但是我们现在的传统生产方式是远远达不到要求的,对于监管来说,达不到时效性,就没有生产性可言,而且现在的乡村,存在着农田分配不均匀、人工管理耗时费力等等,诸多的因素下,设计了本农业智能田地系统,实现的是可以通过远程操作农田设备,比如小型机器人、喷洒车等等,实现远程操作。

二、开发环境

毕业设计之Vue+WebSocket+ECharts+服务器的智能农业管理系统
开发语言:Java
框架:Vue3
数据库:mysql 5.6
数据库工具:Navicat11
开发软件:visual studio code
前端框架:vue.js+ECharts-Element-ui

三、系统功能截图

1.登录界面

当用户需要登录的时候,用户可以通过使用账号密码操作登录到系统,登录需要进行验证,当用户登录账号密码不对的时候会有错误提示。

2.设备管理

该界面给到向用户展示届满,罗列了一系列农田设备得到的数据信息,向我们用户提供数据,“搜索”button,可以由系统向数据库信息那边进行数据校验对比,在数据库得到数据索引即可对数据进行排序罗列出来。

3.配置管理界面

集体向用户展示现场农田传回来的设备的配置信息,用户可以实时监管看农田设备的数据信息,看看哪里有没有损坏什么的,比如设备运行的日期、分、设备号等等。

4.历史数据

本设计通过使用百度地图插件等处理,配合远程摄像头等操作,向用户展示地图现场传回的地理位置数据信息,该部分模块还配有温湿度折线图,采用的是ECharts可视化图表进行现场温湿度(近一周)的功能展示。

5.数据分析

用户通过点击导航栏,进入“数据分析”界面,展现界面模块数据分析现场传回病虫害图片展示、病虫害占比率以饼图展示、文本框形式展示最新病虫害信息以及未来十五天预测信息等。

6. 权限管理

智能农业管理系统权限管理界面,用户点击左边导航栏,进入“权限管理”界面,用户可以对任意模块权限进行管理;还可以进行超级管理员、管路员、用户分配权限增删改查功能。

7.远程管理

四、部分关键代码

login.vue

  1. <template>
  2. <div class="login_container">
  3. <!-- 登录模块盒子 -->
  4. <div class="login-box">
  5. <!-- 图片盒子 -->
  6. <div class="avatar_box">
  7. <img src="../assets/1234.png" alt="">
  8. <h3 class="text">云 智 舟</h3>
  9. </div>
  10. <!-- 登陆表单区域 -->
  11. <el-form label-width="0px" class="login_form" :model="loginForm" :rules="loginFormRules" ref="loginFormRef">
  12. <!-- :model数据绑定对象,绑定到login from这个表单中,rules表单的验证规则对象 -->
  13. <!-- 用户登录 -->
  14. <el-form-item prop="username">
  15. <el-input prefix-icon="el-icon-user-solid" v-model="loginForm.username" size="mini" ></el-input>
  16. <!-- v-model双向绑定,绑定到用户名 -->
  17. </el-form-item>
  18. <!-- 密码 -->
  19. <el-form-item prop="password">
  20. <el-input prefix-icon="el-icon-lock" v-model="loginForm.password" type="password" size="mini" ></el-input>
  21. <!-- v-model双向绑定,绑定到用户登录密码,type="password可以使得密码隐藏"-->
  22. </el-form-item>
  23. <!-- 按钮区域 -->
  24. <el-form-item class="btns">
  25. <el-button type="primary" @click="login" size="mini" >登录</el-button>
  26. <!-- 为登录绑定一个单击事件,名为login -->
  27. <el-button type="info" @click="resetLoginForm" size="mini">重置</el-button>
  28. <!-- click绑定单击事件,名为resetloginfrom -->
  29. </el-form-item>
  30. </el-form>
  31. </div>
  32. </div>
  33. </template>
  34. <script>
  35. import {Login} from '../network/login'
  36. export default {
  37. data () {
  38. return {
  39. // 登录表单的数据绑定对象
  40. loginForm: {
  41. username: '',
  42. password: ''
  43. },
  44. // 表单的验证规则对象
  45. loginFormRules: {
  46. // 验证用户名是否合法
  47. username: [
  48. { required: true, message: '请输入登录名称', trigger: 'blur' },
  49. { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }
  50. // trigger便是失去焦点后出发这一次验证
  51. ],
  52. // 验证密码是否合法
  53. password: [
  54. { required: true, message: '请输入登录密码', trigger: 'blur' },
  55. { min: 3, max: 15, message: '长度在 3 到 15 个字符', trigger: 'blur' }
  56. ]
  57. }
  58. }
  59. },
  60. methods: {
  61. // 点击重置按钮,重置表单
  62. resetLoginForm () {
  63. this.$refs.loginFormRef.resetFields()
  64. },
  65. login () {
  66. this.$refs.loginFormRef.validate( valid => {
  67. if (!valid) {return this.$message.error('用户名密码不正确')}
  68. Login(this.loginForm).then( res => {
  69. console.log(res);
  70. if (res.code !== 0)
  71. {return this.$message.error('登录失败')}
  72. this.$message.success('登陆成功')
  73. window.sessionStorage.setItem('token', res.token)
  74. this.$router.push('/home')
  75. }).catch( error => {
  76. console.log(error);
  77. })
  78. // const { data: res } = await this..post('login', this.loginForm)
  79. // if (res.meta.status !== 200) return this.$message.error('登录失败')
  80. // this.$message.success('登陆成功')
  81. // // console.log(res)
  82. // window.sessionStorage.setItem('token', res.data.token)
  83. // this.$router.push('/home')
  84. // validate回调函数,完成登录表单前的预校验
  85. // 将登陆成功以后的token,保存到客户端的sessionstorage中
  86. // 项目中除了登陆之外的其他api接口,必须将token保存到客户端
  87. // this.$router.push('/home)是通过编程式导航跳转到后台,路由地址为/home
  88. })
  89. }
  90. }
  91. }
  92. </script>

home.vue

  1. <template>
  2. <div class="login_container">
  3. <!-- 登录模块盒子 -->
  4. <div class="login-box">
  5. <!-- 图片盒子 -->
  6. <div class="avatar_box">
  7. <img src="../assets/1234.png" alt="">
  8. <h3 class="text">云 智 舟</h3>
  9. </div>
  10. <!-- 登陆表单区域 -->
  11. <el-form label-width="0px" class="login_form" :model="loginForm" :rules="loginFormRules" ref="loginFormRef">
  12. <!-- :model数据绑定对象,绑定到login from这个表单中,rules表单的验证规则对象 -->
  13. <!-- 用户登录 -->
  14. <el-form-item prop="username">
  15. <el-input prefix-icon="el-icon-user-solid" v-model="loginForm.username" size="mini" ></el-input>
  16. <!-- v-model双向绑定,绑定到用户名 -->
  17. </el-form-item>
  18. <!-- 密码 -->
  19. <el-form-item prop="password">
  20. <el-input prefix-icon="el-icon-lock" v-model="loginForm.password" type="password" size="mini" ></el-input>
  21. <!-- v-model双向绑定,绑定到用户登录密码,type="password可以使得密码隐藏"-->
  22. </el-form-item>
  23. <!-- 按钮区域 -->
  24. <el-form-item class="btns">
  25. <el-button type="primary" @click="login" size="mini" >登录</el-button>
  26. <!-- 为登录绑定一个单击事件,名为login -->
  27. <el-button type="info" @click="resetLoginForm" size="mini">重置</el-button>
  28. <!-- click绑定单击事件,名为resetloginfrom -->
  29. </el-form-item>
  30. </el-form>
  31. </div>
  32. </div>
  33. </template>
  34. <script>
  35. import {Login} from '../network/login'
  36. export default {
  37. data () {
  38. return {
  39. // 登录表单的数据绑定对象
  40. loginForm: {
  41. username: '',
  42. password: ''
  43. },
  44. // 表单的验证规则对象
  45. loginFormRules: {
  46. // 验证用户名是否合法
  47. username: [
  48. { required: true, message: '请输入登录名称', trigger: 'blur' },
  49. { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }
  50. // trigger便是失去焦点后出发这一次验证
  51. ],
  52. // 验证密码是否合法
  53. password: [
  54. { required: true, message: '请输入登录密码', trigger: 'blur' },
  55. { min: 3, max: 15, message: '长度在 3 到 15 个字符', trigger: 'blur' }
  56. ]
  57. }
  58. }
  59. },
  60. methods: {
  61. // 点击重置按钮,重置表单
  62. resetLoginForm () {
  63. this.$refs.loginFormRef.resetFields()
  64. },
  65. login () {
  66. this.$refs.loginFormRef.validate( valid => {
  67. if (!valid) {return this.$message.error('用户名密码不正确')}
  68. Login(this.loginForm).then( res => {
  69. console.log(res);
  70. if (res.code !== 0)
  71. {return this.$message.error('登录失败')}
  72. this.$message.success('登陆成功')
  73. window.sessionStorage.setItem('token', res.token)
  74. this.$router.push('/home')
  75. }).catch( error => {
  76. console.log(error);
  77. })
  78. // const { data: res } = await this..post('login', this.loginForm)
  79. // if (res.meta.status !== 200) return this.$message.error('登录失败')
  80. // this.$message.success('登陆成功')
  81. // // console.log(res)
  82. // window.sessionStorage.setItem('token', res.data.token)
  83. // this.$router.push('/home')
  84. // validate回调函数,完成登录表单前的预校验
  85. // 将登陆成功以后的token,保存到客户端的sessionstorage中
  86. // 项目中除了登陆之外的其他api接口,必须将token保存到客户端
  87. // this.$router.push('/home)是通过编程式导航跳转到后台,路由地址为/home
  88. })
  89. }
  90. }
  91. }
  92. </script>
  93. <style lang="less" scoped>
  94. .login_container {
  95. background-color: #2b4b6b;
  96. height: 100%;
  97. }
  98. .login-box {
  99. width: 360px;
  100. height: 240px;
  101. background-color: #fff;
  102. border-radius: 3px;
  103. position: absolute;
  104. left: 50%; //距离左侧50%
  105. top: 50%; // 距离顶部505
  106. transform: translate(-50%, -50%); //横轴上移动50%,纵移动50%
  107. }
  108. .avatar_box {
  109. height: 100px;
  110. width: 100px;
  111. border: 1px solid #eee;
  112. border-radius: 50%;
  113. padding: 10px;
  114. box-shadow: 0 0 10px #eee;
  115. position: absolute;
  116. left: 50%;
  117. top:-40%;
  118. transform: translate(-50%);
  119. background-color: rgb(32, 181, 201);
  120. img {
  121. width: 100%;
  122. height: 100%;
  123. border-radius: 50%;
  124. background-color: #eee;
  125. }
  126. }
  127. .login_form {
  128. position: absolute;
  129. bottom: 0;
  130. width: 100%;
  131. padding: 0 20px;
  132. box-sizing: border-box;
  133. }
  134. .btns {
  135. display: flex;
  136. justify-content: flex-end;
  137. }
  138. .text {
  139. text-align: center;
  140. margin-top: 10px;
  141. font-size: 20px;
  142. font-family: 宋体;
  143. }
  144. </style>

equip.vue

  1. </template>
  2. <script>
  3. import {getTable,getdetail} from '../../network/equip'
  4. // import { Login } from '../../network/login'
  5. export default {
  6. data () {
  7. return {
  8. //搜索的id
  9. id:null,
  10. SeriesNumber:'',
  11. queryInfo: {
  12. formart: 'josn',
  13. pagenum: 1,
  14. pagesize: 3,
  15. },
  16. total:7,
  17. input: '',
  18. input2: '',
  19. input3: '',
  20. coordinate: '',
  21. // 表格中的开关
  22. // valueswitch: true,
  23. // 定义tablelist这个为一个数组
  24. TableList: [],
  25. // 控制对话框的显示与隐藏
  26. ToMoreVisible: false,
  27. value: '',
  28. value2: '',
  29. // checked: false,
  30. currentPage1: 5,
  31. currentPage2: 5,
  32. currentPage3: 5,
  33. currentPage4: 5,
  34. }
  35. },
  36. // 创建一个表格数据
  37. created () {
  38. this.getTableList()
  39. },
  40. mounted () {
  41. },
  42. methods: {
  43. // 获取表格数据
  44. getTableList(){
  45. getTable(this.queryInfo).then(res => {
  46. this.TableList = res.results
  47. console.log(res);
  48. }).catch(err => {
  49. console.log(err);
  50. })
  51. },
  52. // 搜索框获取到表格里面的数据
  53. getssList(){
  54. getdetail(this.SeriesNumber).then(res => {
  55. // this.getssList.push()
  56. // 方法为:先清空,后push出去this.tablelist = [],再this.tablelist.push(res)
  57. this.TableList = []
  58. this.TableList.push(res)
  59. console.log(res)
  60. }).catch(err => {
  61. console.log(err);
  62. })
  63. },
  64. // 监听pagesize改变的事件
  65. handleSizeChange (newSize) {
  66. // console.log(newSize)
  67. this.queryInfo.pagesize = newSize
  68. this.getTableList()
  69. },
  70. // 监听页码值改变的事件
  71. handleCurrentChange (newPage) {
  72. this.queryInfo.pagenum = newPage
  73. this.getTableList()
  74. console.log(newPage)
  75. },
  76. // 点击跳转到配置管理的事件
  77. todeploy () {
  78. this.$router.push('/deploy')
  79. },
  80. // 点击跳转到远程管理界面
  81. toremote () {
  82. this.$router.push('/remote')
  83. },
  84. }
  85. }
  86. </script>

deloy.vue

  1. <template>
  2. <div>
  3. <el-row class="rowstyle">
  4. <el-col :span="3"><el-button type="primary" size="medium">参数获取</el-button></el-col>
  5. <el-col :span="3" ><el-button type="primary" size="medium">参数配置</el-button></el-col>
  6. </el-row>
  7. <!-- 设置一个卡片视图 -->
  8. <el-card style="width:100%;margin-top:20px">
  9. <el-table
  10. :data="tableData" style="width: 100%">
  11. <el-table-column prop="date" label="日期" width="180"></el-table-column>
  12. <el-table-column prop="name" label="姓名" width="180"></el-table-column>
  13. <el-table-column prop="address" label="地址"></el-table-column>
  14. <el-table-column width="180">
  15. <template>
  16. <el-select v-model="value" placeholder="选择设备" class="select1">
  17. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
  18. </el-select>
  19. </template></el-table-column>
  20. <el-table-column width="180">
  21. <el-button type="info" size="mini"><a href="javascript:location.reload()" style="text-decoration:none">刷新</a></el-button>
  22. </el-table-column>
  23. </el-table>
  24. </el-card>
  25. <!-- 表单 -->
  26. <el-form label-width="80px" style="margin-top:20px" :data="DataList">
  27. <el-row :gutter="80">
  28. <el-col :span="8">
  29. <el-form-item label="序号:">
  30. <el-select v-model="value" placeholder="请选择序号">
  31. <el-option
  32. v-for="item in options"
  33. :key="item.value"
  34. :label="item.label"
  35. :value="item.value">
  36. </el-option>
  37. </el-select>
  38. </el-form-item>
  39. </el-col>
  40. <el-col :span="8">
  41. <el-form-item label="名称:">
  42. <el-select v-model="value1" placeholder="请选择设备号">
  43. <el-option
  44. v-for="item in options1"
  45. :key="item.value1"
  46. :label="item.label1"
  47. :value="item.value1">
  48. </el-option>
  49. </el-select>
  50. </el-form-item>
  51. </el-col>
  52. </div>
  53. </template>
  54. <script>
  55. import {getData} from '../../network/deploy'
  56. export default {
  57. data () {
  58. return {
  59. input: '',
  60. options: [{
  61. }],
  62. value: '',
  63. value1: '',
  64. tableData: [{
  65. name: '王小明',
  66. date: '2010010',
  67. address: '2021年5月28日'
  68. }]
  69. }
  70. },
  71. created () {
  72. this.getDataList()
  73. },
  74. methods: {
  75. // 获取表格数据
  76. getDataList(){
  77. getData().then(res => {
  78. this.DataList = res
  79. console.log(res);
  80. }).catch(err => {
  81. console.log(err);
  82. })
  83. }
  84. }
  85. }
  86. </script>

history.vue

  1. <template>
  2. <div>
  3. <el-row class="rowstyle">
  4. <el-col :span="3"><el-button type="primary" size="medium">参数获取</el-button></el-col>
  5. <el-col :span="3" ><el-button type="primary" size="medium">参数配置</el-button></el-col>
  6. </el-row>
  7. <!-- 设置一个卡片视图 -->
  8. <el-card style="width:100%;margin-top:20px">
  9. <el-table
  10. :data="tableData" style="width: 100%">
  11. <el-table-column prop="date" label="日期" width="180"></el-table-column>
  12. <el-table-column prop="name" label="姓名" width="180"></el-table-column>
  13. <el-table-column prop="address" label="地址"></el-table-column>
  14. <el-table-column width="180">
  15. <template>
  16. <el-select v-model="value" placeholder="选择设备" class="select1">
  17. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
  18. </el-select>
  19. </template></el-table-column>
  20. <el-table-column width="180">
  21. <el-button type="info" size="mini"><a href="javascript:location.reload()" style="text-decoration:none">刷新</a></el-button>
  22. </el-table-column>
  23. </el-table>
  24. </el-card>
  25. <!-- 表单 -->
  26. <el-form label-width="80px" style="margin-top:20px" :data="DataList">
  27. <el-row :gutter="80">
  28. <el-col :span="8">
  29. <el-form-item label="序号:">
  30. <el-select v-model="value" placeholder="请选择序号">
  31. <el-option
  32. v-for="item in options"
  33. :key="item.value"
  34. :label="item.label"
  35. :value="item.value">
  36. </el-option>
  37. </el-select>
  38. </el-form-item>
  39. </el-col
  40. <el-col :span="8">
  41. <el-form-item label="名称:">
  42. <el-select v-model="value1" placeholder="请选择设备号">
  43. <el-option
  44. v-for="item in options1"
  45. :key="item.value1"
  46. :label="item.label1"
  47. :value="item.value1">
  48. </el-option>
  49. </el-select>
  50. </el-form-item>
  51. </el-col>
  52. <el-col :span="8">
  53. <el-form-item label="类型:">
  54. <el-select v-model="value" placeholder="请选择类型号">
  55. <el-option
  56. v-for="item in options"
  57. :key="item.value"
  58. :label="item.label"
  59. :value="item.value"> </el-option> </el-select></el-form-item </el-col>
  60. </el-row>
  61. </el-form> <el-button class="save">保存</el-button><el-button class="recover">恢复默认</el-button>
  62. </div
  63. </template>
  64. <script>
  65. import {getData} from '../../network/deploy'
  66. export default {
  67. data () {
  68. return {
  69. input: '',
  70. address: '2021年5月28日'
  71. }]
  72. }
  73. },
  74. created () {
  75. this.getDataList()
  76. },
  77. methods: {
  78. // 获取表格数据
  79. getDataList(){
  80. getData().then(res => {
  81. this.DataList = res
  82. console.log(res);
  83. }).catch(err => {
  84. console.log(err);
  85. })
  86. }
  87. }
  88. }
  89. </script>

power.vue

  1. <template>
  2. <div>
  3. <el-table
  4. :data="tableData"
  5. style="width: 100%"
  6. height="350" border stripe>
  7. <el-table-column type="index"></el-table-column>
  8. <el-table-column prop="powername" label="权限名称" width="200"></el-table-column>
  9. <el-table-column prop="poweraddress" label="位置" width="120"></el-table-column>
  10. <el-table-column prop="level" label="权限等级" width="350">
  11. <template>
  12. <el-tag closable @click="remove">超级管理员</el-tag>
  13. <el-tag type="success" closable @click="remove">管理员</el-tag>
  14. <el-tag type="warning" closable @click="remove">用户</el-tag>
  15. </template>
  16. </el-table-column>
  17. <el-table-column label="操作" width="400">
  18. <template>
  19. <el-button type="primary" icon="el-icon-edit" size="mini">查看</el-button>
  20. <el-button type="danger" icon="el-icon-delete" size="mini">删除</el-button>
  21. <el-button type="warning" icon="el-icon-setting" size="mini" @click="showsetpowerdialog">分配添加</el-button>
  22. </template>
  23. </el-table-column>
  24. </el-table>
  25. <!-- 添加分配对话框 -->
  26. <el-dialog
  27. title="添加分配"
  28. :visible.sync="setpowerdialogVisible"
  29. width="50%">
  30. <span>您所要添加分配的权限</span>
  31. <span slot="footer" class="dialog-footer">
  32. <el-button @click="setpowerdialogVisible = false">取 消</el-button>
  33. <el-button type="primary" @click="setpowerdialogVisible = false">确 定</el-button>
  34. </span>
  35. </el-dialog>
  36. </div>
  37. </template>
  38. <script>
  39. export default {
  40. data () {
  41. return {
  42. tableData: [{
  43. powername: '设备管理权限',
  44. poweraddress: 'equip',
  45. level: ''
  46. }, {
  47. powername: '配置管理权限',
  48. poweraddress: 'deploy',
  49. level: ''
  50. }, {
  51. powername: '历史数据权限',
  52. poweraddress: 'history',
  53. level: ''
  54. }, {
  55. powername: '数据分析权限',
  56. poweraddress: 'analysis',
  57. level: ''
  58. }, {
  59. powername: '权限管理权限',
  60. poweraddress: 'power',
  61. level: ''
  62. }, {
  63. powername: '远程管理权限',
  64. poweraddress: 'remote',
  65. level: ''
  66. }],
  67. // 控制对话框的显示与隐藏
  68. setpowerdialogVisible: false
  69. }
  70. },
  71. created () {},
  72. methods: {
  73. async remove () {
  74. // 根据弹框删除
  75. const confirmResult = await this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
  76. confirmButtonText: '确定',
  77. cancelButtonText: '取消',
  78. type: 'warning'
  79. }).catch(err => err)
  80. if (confirmResult !== 'comfirm') {
  81. return this.$message.info('取消删除')
  82. }
  83. console.log('确认了删除')
  84. },
  85. // 展示分配添加对话框
  86. showsetpowerdialog () {
  87. this.setpowerdialogVisible = true
  88. }
  89. }
  90. }
  91. </script>
  92. <style lang="less" scoped>
  93. </style>

remote.vue

  1. <script>
  2. // 引入video样式
  3. import 'video.js/dist/video-js.css'
  4. import 'vue-video-player/src/custom-theme.css'
  5. export default {
  6. data () {
  7. const self = this
  8. return {
  9. //喷杀控制显示隐藏
  10. PS:true,
  11. // 摄像头部分的显示与隐藏
  12. camera:false,
  13. // 视频流
  14. playerOptions: {
  15. playbackRates: [0.7, 1.0, 1.5, 2.0], // 播放速度
  16. autoplay: false, // 如果true,浏览器准备好时开始回放。
  17. controls: true, // 控制条
  18. preload: 'auto', // 视频预加载
  19. muted: false, // 默认情况下将会消除任何音频。
  20. loop: false, // 导致视频一结束就重新开始。
  21. language: 'zh-CN',
  22. aspectRatio: '16:9', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
  23. fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
  24. sources: [{
  25. type: 'video/mp4',
  26. src: ''// 你所放置的视频的地址,最好是放在服务器上
  27. }],
  28. poster: 'http://192.168.1.2:8081/', // 你的封面地址(覆盖在视频上面的图片)
  29. width: document.documentElement.clientWidth,
  30. notSupportedMessage: '此视频暂无法播放,请稍后再试' // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
  31. },
  32. input: '',
  33. // 地图部分代码
  34. center: [121.59996, 31.197646],
  35. lng: 0,
  36. lat: 0,
  37. loaded: false,
  38. plugin: [
  39. {
  40. enableHighAccuracy: true,
  41. timeout: 100,
  42. maximumAge: 0,
  43. convert: true,
  44. showButton: true,
  45. buttonPosition: 'RB',
  46. showMarker: true,
  47. showCircle: true,
  48. panToLocation: true,
  49. zoomToAccuracy: true,
  50. extensions: 'all',
  51. pName: 'Geolocation',
  52. events: {
  53. init (o) {
  54. // o 是高德地图定位插件实例
  55. o.getCurrentPosition((status, result) => {
  56. console.log(result)
  57. if (result && result.position) {
  58. self.lng = result.position.lng
  59. self.lat = result.position.lat
  60. self.center = [self.lng, self.lat]
  61. self.loaded = true
  62. self.$nextTick()
  63. }
  64. })
  65. }
  66. }
  67. }
  68. ]
  69. }
  70. },
  71. methods:{
  72. PsIsShow(){
  73. this.PS = true
  74. },
  75. cameraisshow(){
  76. this.camera = !this.camera
  77. }
  78. }
  79. }
  80. </script>

总结:工程我会放在“资源”一栏,大家可以供参考,谢谢!


本文转载自: https://blog.csdn.net/Lushengshi/article/details/126084648
版权归原作者 丘比特惩罚陆 所有, 如有侵权,请联系我们删除。

“电子信息毕业设计VUE+websocket+Echart+服务器的智能农业管理系统”的评论:

还没有评论