deviceAdmin.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. <template>
  2. <div class="device-management">
  3. <!-- 设备管理 -->
  4. <div class="box">
  5. <div class="box_item" v-for="item in boxList" :key="item.id">
  6. <p>{{item.name}}</p>
  7. <p>{{item.value}}</p>
  8. </div>
  9. </div>
  10. <!-- 查询条件 -->
  11. <div class="conditions">
  12. <el-form ref="searchForm" inline :model="searchForm" size="mini">
  13. <el-form-item label="注册时间:" prop="registerStartTime">
  14. <!-- <el-input v-model="searchForm.registerTime" placeholder=""></el-input> -->
  15. <el-date-picker
  16. v-model="searchForm.registerStartTime"
  17. type="date"
  18. placeholder="选择日期"
  19. style="width: 130px">
  20. </el-date-picker>
  21. </el-form-item>
  22. <el-form-item label="省市县:" prop="countyName">
  23. <!-- 改用组件 -->
  24. <!-- FIXME: 等待组件,到底是 countName 还是对应的编码不清楚,但一定使用选择下拉框 -->
  25. <el-input v-model="searchForm.countyName" placeholder="地县/编码"></el-input>
  26. </el-form-item>
  27. <el-form-item label="牧场:" prop="farmCode">
  28. <!-- <el-input v-model="searchForm.farm" placeholder="牧场名/牧场编号"></el-input> -->
  29. <!-- FIXME: 牧场数据还没有,el-option 的具体内容也没修正 -->
  30. <el-select v-model="searchForm.farmCode" style="width: 100px">
  31. <el-option
  32. v-for="item in farmList"
  33. :key="item.id"
  34. :label="item.name"
  35. :value="item.id">
  36. </el-option>
  37. </el-select>
  38. </el-form-item>
  39. <el-form-item label="栋舍:" prop="pigsty">
  40. <el-input v-model="searchForm.pigsty" placeholder=""></el-input>
  41. </el-form-item>
  42. <el-form-item label="网络通信状态:" prop="networkStatus">
  43. <el-select v-model="searchForm.networkStatus" style="width: 100px">
  44. <el-option
  45. v-for="item in networkList"
  46. :key="item.value"
  47. :label="item.label"
  48. :value="item.value">
  49. </el-option>
  50. </el-select>
  51. </el-form-item>
  52. <el-form-item label="采集状态:" prop="acqStatus">
  53. <el-select v-model="searchForm.acqStatus" style="width: 100px">
  54. <el-option
  55. v-for="item in acqList"
  56. :key="item.value"
  57. :label="item.label"
  58. :value="item.value">
  59. </el-option>
  60. </el-select>
  61. </el-form-item>
  62. <el-form-item label="注销状态:" prop="canStatus">
  63. <el-select v-model="searchForm.canStatus" style="width: 100px">
  64. <el-option
  65. v-for="item in canList"
  66. :key="item.value"
  67. :label="item.label"
  68. :value="item.value">
  69. </el-option>
  70. </el-select>
  71. </el-form-item>
  72. <el-form-item label="设备编码:" prop="deviceCode">
  73. <el-input v-model="searchForm.deviceCode" placeholder=""></el-input>
  74. </el-form-item>
  75. <el-form-item style="margin-left: 20px">
  76. <el-button plain @click="init">查询</el-button>
  77. <el-button plain type="info" @click="resetForm('searchForm')">清空</el-button>
  78. </el-form-item>
  79. </el-form>
  80. </div>
  81. <!-- 按钮栏 -->
  82. <div class="title">
  83. <div class="title-left">
  84. <i class="el-icon-s-unfold"></i>
  85. <span>设备列表</span>
  86. <el-button plain size="mini" class="button-margin">批量上传</el-button>
  87. <el-button type="primary" plain size="mini" @click="handleAddOrEdit">新增设备</el-button>
  88. </div>
  89. </div>
  90. <!-- 表格 -->
  91. <el-table
  92. :data="tableData"
  93. style="width: 100%"
  94. height="700"
  95. border
  96. stripe
  97. :default-sort="{prop: 'date', order: 'descending'}"
  98. size="mini"
  99. v-loading="dataListLoading">
  100. <el-table-column
  101. type="selection"
  102. width="40"
  103. align="center">
  104. </el-table-column>
  105. <el-table-column
  106. prop="id"
  107. label="注册ID"
  108. width="60"
  109. align="center">
  110. </el-table-column>
  111. <el-table-column
  112. prop="registerTime"
  113. label="注册时间"
  114. width="90"
  115. align="center">
  116. </el-table-column>
  117. <el-table-column
  118. prop="deviceCode"
  119. label="设备编码"
  120. width="80"
  121. align="center">
  122. </el-table-column>
  123. <el-table-column
  124. prop="countyName"
  125. label="省市县"
  126. align="center">
  127. </el-table-column>
  128. <el-table-column
  129. prop="countyCode"
  130. label="省市县编码"
  131. align="center">
  132. </el-table-column>
  133. <el-table-column
  134. prop="farmName"
  135. label="牧场名称"
  136. width="90"
  137. align="center">
  138. </el-table-column>
  139. <el-table-column
  140. prop="farmCode"
  141. label="牧场编码"
  142. width="90"
  143. align="center">
  144. </el-table-column>
  145. <el-table-column
  146. label="阶段"
  147. sortable
  148. width="70"
  149. align="center">
  150. <template slot-scope="scope">
  151. <span>{{ stageList[scope.row.stage - 1].label }}</span>
  152. </template>
  153. </el-table-column>
  154. <el-table-column
  155. prop="pigpenName"
  156. label="栋舍"
  157. width="100"
  158. align="center">
  159. </el-table-column>
  160. <el-table-column
  161. prop="serverIp"
  162. label="上传服务器地址"
  163. width="105"
  164. align="center">
  165. </el-table-column>
  166. <el-table-column
  167. prop="port"
  168. label="端口"
  169. width="60"
  170. align="center">
  171. </el-table-column>
  172. <el-table-column
  173. prop="lastTime"
  174. label="最后上传时间"
  175. sortable
  176. align="center">
  177. </el-table-column>
  178. <el-table-column
  179. label="网络通信状态"
  180. width="70"
  181. align="center">
  182. <template slot-scope="scope">
  183. <span :class="{ 'normal': scope.row.networkStatus === 1, 'abnormal': scope.row.networkStatus === 0}">{{ networkList[1 - scope.row.networkStatus].label }}</span>
  184. </template>
  185. </el-table-column>
  186. <el-table-column
  187. label="采集状态"
  188. width="70"
  189. align="center">
  190. <template slot-scope="scope">
  191. <span :class="{ 'normal': scope.row.acqStatus === 1, 'abnormal': scope.row.acqStatus === 2}">{{ acqList[scope.row.acqStatus - 1].label }}</span>
  192. </template>
  193. </el-table-column>
  194. <el-table-column
  195. label="注销状态"
  196. width="70"
  197. align="center">
  198. <template slot-scope="scope">
  199. <span :class="{ 'normal': scope.row.canStatus === 1, 'logout': scope.row.canStatus === 0}">{{ canList[1 - scope.row.canStatus].label }}</span>
  200. </template>
  201. </el-table-column>
  202. <el-table-column
  203. label="操作"
  204. align="center">
  205. <template slot-scope="scope">
  206. <el-button type="text" size="small" @click="handleCheck(scope.row)">查看</el-button>
  207. <el-button type="text" size="small" @click="handleAddOrEdit(scope.row)">编辑</el-button>
  208. <el-button type="text" size="small" @click="handleLogout(scope.row.id)">注销</el-button>
  209. <el-button type="text" size="small">删除</el-button>
  210. </template>
  211. <!-- TODO: 按钮 -->
  212. </el-table-column>
  213. </el-table>
  214. <table-footer
  215. :totals="totalPages"
  216. :size="pageSize"
  217. @sizeChange="sizeChange"
  218. @pageChange="pageChange">
  219. </table-footer>
  220. <!-- 新增或者编辑设备弹出框 -->
  221. <add-or-update ref="addOrUpdate" @refreshData="init"></add-or-update>
  222. </div>
  223. </template>
  224. <script>
  225. import TableFooter from "../../components/TableFooter";
  226. import addOrUpdate from './addOrUpdate.vue'
  227. import {mapState} from 'vuex'
  228. export default {
  229. name: "deviceAdmin",
  230. data() {
  231. return {
  232. boxList: [ // 设备管理的方框
  233. {
  234. id: 1,
  235. name: '采集设备总数',
  236. value: 2500,
  237. },
  238. {
  239. id: 2,
  240. name: '正常设备总数',
  241. value: 2498
  242. },
  243. {
  244. id: 3,
  245. name: '异常设备总数',
  246. value: 1
  247. },
  248. {
  249. id: 4,
  250. name: '注销设备总数',
  251. value: 1
  252. }
  253. ],
  254. farmList: [ // 查询条件 - 牧场选择
  255. //
  256. ],
  257. searchForm: { // 查询条件
  258. farmCode: '',
  259. registerStartTime: '',
  260. registerEndTime: '',
  261. deviceCode: '',
  262. countyName: '',
  263. // farmName: '',
  264. pigsty: '',
  265. networkStatus: '',
  266. acqStatus: '',
  267. canStatus: '',
  268. // sortord: ''
  269. },
  270. pageSizeList: [ // 表格显示条数
  271. {
  272. value: 0,
  273. label: '显示条数'
  274. },
  275. {
  276. value: 10,
  277. label: '10条/页'
  278. },
  279. {
  280. value: 20,
  281. label: '20条/页'
  282. },
  283. {
  284. value: 50,
  285. label: '50条/页'
  286. }
  287. ],
  288. pageSize: 20, // 表格显示条数
  289. tableData: [], // 表格数据
  290. totalPages: 0, // 共 n 条数据
  291. pageIndex: 1, // 表格当前页数
  292. dataListLoading: true,
  293. stageList: [ // 状态
  294. {
  295. value: 1,
  296. label: '配怀'
  297. },
  298. {
  299. value: 2,
  300. label: '分娩'
  301. },
  302. {
  303. value: 3,
  304. label: '后备'
  305. },
  306. {
  307. value: 4,
  308. label: '空怀'
  309. },
  310. {
  311. value: 5,
  312. label: '公猪'
  313. }
  314. ],
  315. networkList: [ // 网络通信状态 —— 查询条件 + 表格通用
  316. {
  317. value: 1,
  318. label: '正常'
  319. },
  320. {
  321. value: 0,
  322. label: '异常'
  323. }
  324. ],
  325. acqList: [ // 采集状态 —— 查询条件 + 表格通用
  326. {
  327. value: 1,
  328. label: '正常'
  329. },
  330. {
  331. value: 2,
  332. label: '异常'
  333. }
  334. ],
  335. canList: [ // 注销状态 —— 查询条件 + 表格通用
  336. {
  337. value: 1,
  338. label: '正常'
  339. },
  340. {
  341. value: 0,
  342. label: '注销'
  343. }
  344. ]
  345. }
  346. },
  347. components: {
  348. TableFooter,
  349. addOrUpdate
  350. },
  351. computed: {
  352. ...mapState(['baseUrl'])
  353. },
  354. methods: {
  355. // 初始化
  356. init () {
  357. this.$http({
  358. url: this.$http.adornUrl(`${this.baseUrl}/manager/collectorregister/list`),
  359. method: 'get',
  360. params: this.$http.adornParams({
  361. 'page': this.pageIndex,
  362. 'limit': this.pageSize,
  363. 'farmCode': this.searchForm.farmCode || undefined,
  364. 'registerStartTime': this.searchForm.registerStartTime || undefined,
  365. 'registerEndTime': this.searchForm.registerEndTime || undefined,
  366. 'deviceCode': this.searchForm.deviceCode || undefined,
  367. 'countyName': this.searchForm.countyName || undefined,
  368. 'farmName': this.searchForm.farmName || undefined,
  369. 'acqStatus': this.searchForm.acqStatus || undefined,
  370. 'sortord': this.searchForm.sortord || undefined
  371. }, false)
  372. }).then(async({data}) => {
  373. console.log(data);
  374. this.tableData = data.page.list
  375. this.totalPages = data.page.totalPage
  376. this.dataListLoading = false
  377. }).catch(() => {
  378. this.dataListLoading = false
  379. })
  380. },
  381. // 显示条数改变
  382. sizeChange (val) {
  383. this.pageSize = val
  384. },
  385. // 页数改变
  386. pageChange (val) {
  387. this.pageIndex = val
  388. },
  389. // 清空 el-form
  390. resetForm(form) {
  391. this.$refs[form].resetFields()
  392. },
  393. // 点击新增设备 or 编辑按钮
  394. handleAddOrEdit (row) {
  395. this.$nextTick(() => {
  396. this.$refs.addOrUpdate.init(row)
  397. })
  398. },
  399. // 查看按钮
  400. handleCheck (row) {
  401. console.log(row)
  402. // 组件间传值`/deviceInfo/${row.id}`
  403. this.$router.push({
  404. name: 'deviceInfo',
  405. params: {
  406. id: row.id,
  407. deviceCode: row.deviceCode
  408. }
  409. })
  410. },
  411. // 注销按钮
  412. handleLogout (id) {
  413. console.log(id);
  414. // TODO: 明天再做.
  415. }
  416. },
  417. mounted() {
  418. this.init()
  419. }
  420. }
  421. </script>
  422. <style scoped>
  423. .box{
  424. width: 100%;
  425. height: 140px;
  426. background-color: #F9F9F9;
  427. display: flex;
  428. justify-content: space-around;
  429. align-items: center;
  430. margin-bottom: 10px;
  431. }
  432. .box_item {
  433. width: 198px;
  434. height: 78px;
  435. border: 1px solid #ddd;
  436. text-align: center;
  437. }
  438. .box_item p {
  439. height: 39px;
  440. line-height: 39px;
  441. margin: 0;
  442. }
  443. /** 选择条件 */
  444. .conditions {
  445. width: 100%;
  446. background-color: #fff;
  447. margin: 30px 0px 10px;
  448. border: 1px solid #ddd;
  449. padding: 20px;
  450. padding-bottom: 10px;
  451. }
  452. /** 设备列表 */
  453. .title {
  454. background-color: #f3f3f3;
  455. height: 50px;
  456. line-height: 50px;
  457. border: 1px solid #ddd;
  458. font-size: 12px;
  459. }
  460. .title-left {
  461. margin-left: 20px;
  462. display: inline-block;
  463. width: 300px;
  464. }
  465. .title-left span {
  466. margin-left: 2px;
  467. }
  468. .button-margin {
  469. margin: 0 5px 0 20px;
  470. }
  471. .title-right {
  472. float: right;
  473. }
  474. /* 正常 */
  475. .normal {
  476. color: #37c20ce1;
  477. }
  478. .abnormal {
  479. color: #ff0000d3;
  480. }
  481. .logout {
  482. color: #ffd900;
  483. }
  484. </style>