list.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. <template>
  2. <div id="project">
  3. <el-container>
  4. <el-main>
  5. <div style="margin-bottom: 10px">
  6. <el-button size="medium" icon="el-icon-back" type="text" @click="back">返回</el-button>
  7. <span style="margin-left: 20px; font-size: 18px">设备列表</span>
  8. </div>
  9. <el-button size="medium" icon="el-icon-search" style="margin-bottom: 15px" @click="search(searchFormData)">
  10. 查询
  11. </el-button>
  12. <el-button size="medium" icon="el-icon-plus" @click="showAdd" style="margin-left: 0">新增</el-button>
  13. <div style="padding: 10px;background-color: white">
  14. <el-form :inline="true" :model="searchFormData" style="background-color: white;">
  15. <el-form-item label="设备名称">
  16. <el-input placeholder="设备名称" size="mini" v-model="searchFormData.name"></el-input>
  17. </el-form-item>
  18. <el-form-item label="设备ip">
  19. <el-input placeholder="设备ip" size="mini" v-model="searchFormData.ip"></el-input>
  20. </el-form-item>
  21. <el-form-item label="设备SN">
  22. <el-input placeholder="设备SN" size="mini" v-model="searchFormData.sn"></el-input>
  23. </el-form-item>
  24. <el-form-item label="设备类型">
  25. <el-input placeholder="设备类型" size="mini" v-model="searchFormData.type"></el-input>
  26. </el-form-item>
  27. <el-form-item label="运营商编号" style="margin-top: 6px" size="mini">
  28. <el-select v-model="searchFormData.operatorNumber" placeholder="运营商编号" style="width: 180px"
  29. clearable>
  30. <el-option :value="i.number" v-for="(i,index) in operators" :key="index" :label="i.number"></el-option>
  31. </el-select>
  32. </el-form-item>
  33. <el-form-item label="项目编号" style="margin-top: 6px" size="mini">
  34. <el-select v-model="searchFormData.projectNumber" placeholder="项目编号" style="width: 180px;" clearable
  35. :disabled="!searchFormData.operatorNumber">
  36. <el-option v-for="(item) in projects" :key="item.number" :label="item.number"
  37. :value="item.number"></el-option>
  38. </el-select>
  39. </el-form-item>
  40. <el-form-item label="网关编号" style="margin-top: 6px" size="mini">
  41. <el-select v-model="searchFormData.gatewayNumber" placeholder="网关编号" style="width: 180px;" clearable
  42. :disabled="!searchFormData.projectNumber">
  43. <el-option v-for="(item) in gateways" :key="item.number" :label="item.number"
  44. :value="item.number"></el-option>
  45. </el-select>
  46. </el-form-item>
  47. <el-dialog title="设备" :visible.sync="dialogFormVisible" style="width: 70% ; margin-left: 300px ;">
  48. <el-form label-position="left" :model="formData" :rules="rules" ref="formData">
  49. <el-row style="margin-left: 15px">
  50. <el-form-item label="设备名称" style="margin-left: 16px" prop="name">
  51. <el-input v-model="formData.name"></el-input>
  52. </el-form-item>
  53. <el-form-item label="设备ip" style="margin-left: 26px" prop="ip">
  54. <el-input v-model="formData.ip"></el-input>
  55. </el-form-item>
  56. </el-row>
  57. <el-row style="margin-left: 15px ; margin-top: 20px;margin-bottom: 20px">
  58. <el-form-item label="设备sn" style="margin-left: 28px" prop="sn">
  59. <el-input v-model="formData.sn"></el-input>
  60. </el-form-item>
  61. <el-form-item label="设备类型" prop="type">
  62. <el-input v-model="formData.type"></el-input>
  63. </el-form-item>
  64. </el-row>
  65. <el-row style="margin-left: 15px ;margin-bottom: 20px">
  66. <el-form-item label="运营商编号" style="margin-left: 0px" prop="operatorNumber">
  67. <el-select v-model="formData.operatorNumber" placeholder="运营商编号" style="width: 202px"
  68. clearable>
  69. <el-option :value="i.number" v-for="(i,index) in operators" :key="index"
  70. :label="i.number"></el-option>
  71. </el-select>
  72. </el-form-item>
  73. <el-form-item label="项目编号" prop="projectNumber">
  74. <el-select v-model="formData.projectNumber" placeholder="项目编号" style="width: 202px"
  75. :disabled="!formData.operatorNumber" clearable>
  76. <el-option :value="i.number" v-for="(i,index) in projects" :key="index"
  77. :label="i.number"></el-option>
  78. </el-select>
  79. </el-form-item>
  80. </el-row>
  81. <el-form-item label="网关编号" style="margin-left: 30px" prop="gatewayNumber">
  82. <el-select v-model="formData.gatewayNumber" placeholder="网关编号" style="width: 202px"
  83. :disabled="!formData.projectNumber" clearable>
  84. <el-option :value="i.number" v-for="(i,index) in gateways" :key="index"
  85. :label="i.number"></el-option>
  86. </el-select>
  87. </el-form-item>
  88. </el-form>
  89. <div slot="footer" class="dialog-footer" style="text-align: center">
  90. <el-button @click="cancel()">取 消</el-button>
  91. <el-button type="primary" @click="addOrEditMehtond('formData')">确 定</el-button>
  92. </div>
  93. </el-dialog>
  94. </el-form>
  95. <el-table :data="tableData">
  96. <el-table-column type="selection"></el-table-column>
  97. <el-table-column prop="name" label="设备名称"></el-table-column>
  98. <el-table-column prop="ip" label="设备ip"></el-table-column>
  99. <el-table-column prop="sn" label="设备sn"></el-table-column>
  100. <el-table-column prop="type" label="设备类型"></el-table-column>
  101. <el-table-column label="设备状态">
  102. <template slot-scope="scope">
  103. {{ String(scope.row.deviceStatus) === '0' ? '已禁用' : '正常' }}
  104. </template>
  105. </el-table-column>
  106. <el-table-column label="操作">
  107. <template slot-scope="scope">
  108. <el-button type="text" size="medium" @click="showEdit(scope.row)">编辑</el-button>
  109. <el-button type="text" size="medium" @click="manage(scope.row)">管理</el-button>
  110. <el-button type="text" size="medium" @click="del(scope.row)" style="color: #c01920">删除</el-button>
  111. <el-button
  112. style="color: #c01920"
  113. type="text"
  114. size="medium"
  115. class="delBut non"
  116. @click="statusHandle(scope.row)"
  117. >
  118. {{ scope.row.deviceStatus == '1' ? '禁用' : '启用' }}
  119. </el-button>
  120. </template>
  121. </el-table-column>
  122. </el-table>
  123. <el-pagination
  124. style="margin-top: 15px;text-align: center"
  125. background
  126. layout="prev, pager, next"
  127. :page-size="pager.pageSize"
  128. :current-page="pager.pageIndex"
  129. :total="pager.itemCount"
  130. @current-change="handleCurrentChange"
  131. >
  132. </el-pagination>
  133. </div>
  134. </el-main>
  135. </el-container>
  136. </div>
  137. </template>
  138. <script>
  139. export default {
  140. name: 'project',
  141. data() {
  142. return {
  143. rules: {
  144. operatorNumber: [
  145. {required: true, message: '请输入运营商编号', trigger: 'change'}
  146. ],
  147. projectNumber: [
  148. {required: true, message: '请输入项目编号', trigger: 'change'}
  149. ],
  150. gatewayNumber: [
  151. {required: true, message: '请输入网关编号', trigger: 'change'}
  152. ],
  153. name: [
  154. {required: true, message: '请输入设备名称', trigger: 'blur'}
  155. ],
  156. ip: [
  157. {required: true, message: '请输入网关ip', trigger: 'blur'}
  158. ],
  159. sn: [
  160. {required: true, message: '请输入设备sn', trigger: 'blur'}
  161. ],
  162. type: [
  163. {required: true, message: '请输入设备类型', trigger: 'blur'}
  164. ],
  165. },
  166. gateways: [],
  167. projects: [],
  168. operators: [],
  169. operatorProject: '',
  170. projectGateway: '',
  171. api: {
  172. list: this.$api.device.list,
  173. delete: this.$api.device.delete,
  174. add: this.$api.device.add,
  175. update: this.$api.device.update,
  176. },
  177. value: true,
  178. addOrEdit: 1,
  179. dialogFormVisible: false,
  180. pager: {
  181. pageSize: 2,
  182. pageIndex: 1,
  183. itemCount: 0,
  184. },
  185. tableData:
  186. [{
  187. name: '',
  188. ip: '',
  189. sn: '',
  190. type: '',
  191. deviceStatus: '1'
  192. }],
  193. formData: {
  194. name: '',
  195. ip: '',
  196. sn: '',
  197. type: '',
  198. deviceStatus: '1',
  199. operatorNumber: '',
  200. projectNumber: '',
  201. gatewayNumber: ''
  202. },
  203. searchFormData:
  204. {
  205. name: '',
  206. ip: '',
  207. sn: '',
  208. type: '',
  209. deviceStatus: '1',
  210. operatorNumber: '',
  211. projectNumber: '',
  212. gatewayNumber: ''
  213. }
  214. }
  215. },
  216. created: function () {
  217. this.loadData();
  218. this.getOperator();
  219. },
  220. watch: {
  221. 'searchFormData.operatorNumber'(oldValue, newValue) {
  222. console.log(oldValue)
  223. console.log(newValue)
  224. this.searchFormData.projectNumber = ''
  225. this.operatorProject = oldValue;
  226. console.log(this.operatorProject)
  227. this.getProjectNumber();
  228. },
  229. 'searchFormData.projectNumber'(oldValue, newValue) {
  230. console.log(oldValue)
  231. console.log(newValue)
  232. this.searchFormData.gatewayNumber = ''
  233. this.projectGateway = oldValue;
  234. console.log(this.projectGateway)
  235. this.getGateway();
  236. },
  237. 'formData.operatorNumber'(oldValue, newValue) {
  238. console.log(oldValue)
  239. console.log(newValue)
  240. this.operatorProject = oldValue;
  241. console.log(this.operatorProject)
  242. this.getProjectNumber();
  243. },
  244. 'formData.projectNumber'(oldValue, newValue) {
  245. console.log(oldValue)
  246. console.log(newValue)
  247. this.projectGateway = oldValue;
  248. console.log(this.projectGateway)
  249. this.getGateway();
  250. }
  251. },
  252. methods: {
  253. //切换页码
  254. handleCurrentChange(index) {
  255. this.loadData(index)
  256. },
  257. getOperator() {
  258. const vm = this;
  259. vm.$http.get(vm.$api.operator.list).then((resp) => {
  260. vm.operators = resp.data.data.operators
  261. })
  262. },
  263. getProjectNumber() {
  264. const vm = this;
  265. vm.$http.get(vm.$api.project.list, {
  266. params: {
  267. operatorNumber: this.operatorProject,
  268. }
  269. }).then((resp) => {
  270. console.log(resp.data.data.projects)
  271. vm.projects = resp.data.data.projects
  272. })
  273. },
  274. getGateway() {
  275. const vm = this;
  276. vm.$http.get(vm.$api.gateway.list, {
  277. params: {
  278. projectNumber: this.projectGateway,
  279. }
  280. }).then((resp) => {
  281. console.log(resp.data.data.gateways)
  282. vm.gateways = resp.data.data.gateways
  283. })
  284. },
  285. loadData(index) {
  286. const vm = this;
  287. vm.$http.get(vm.api.list, {
  288. params: {
  289. pageSize: 5,
  290. pageIndex: index ? index : 1,
  291. name: this.searchFormData.name,
  292. ip: this.searchFormData.ip,
  293. sn: this.searchFormData.sn,
  294. type: this.searchFormData.type,
  295. operatorNumber: this.searchFormData.operatorNumber,
  296. projectNumber: this.searchFormData.projectNumber,
  297. gatewayNumber: this.searchFormData.gatewayNumber,
  298. }
  299. })
  300. .then((response) => {
  301. // vm.paper = response.data.data.paper;
  302. console.log(response.data.data);
  303. vm.pager = response.data.data.pager
  304. vm.tableData = response.data.data.devices;
  305. })
  306. },
  307. search() {
  308. //console.log(this.searchFormData)
  309. this.loadData();
  310. },
  311. showAdd() {
  312. this.dialogFormVisible = true;
  313. this.formData.name = '',
  314. this.formData.ip = '',
  315. this.formData.sn = '',
  316. this.formData.type = '',
  317. this.formData.operatorNumber = '',
  318. this.formData.projectNumber = '',
  319. this.formData.gatewayNumber = ''
  320. this.addOrEdit = 1
  321. },
  322. showEdit(row) {
  323. console.log(row)
  324. this.dialogFormVisible = true;
  325. this.editRow = JSON.parse(JSON.stringify(row));
  326. this.formData = this.editRow
  327. this.addOrEdit = 2
  328. },
  329. addOrEditMehtond(formName) {
  330. this.$refs[formName].validate((valid) => {
  331. if (valid) {
  332. const vm = this;
  333. if (this.addOrEdit == 2) {
  334. vm.$http.get(vm.api.update, {
  335. params: {
  336. code: this.editRow.code,
  337. name: this.formData.name,
  338. ip: this.formData.ip,
  339. sn: this.formData.sn,
  340. type: this.formData.type,
  341. deviceStatus:1,
  342. operatorNumber: this.formData.operatorNumber,
  343. projectNumber: this.formData.projectNumber,
  344. gatewayNumber: this.formData.gatewayNumber,
  345. operatorCode: this.formData.operatorCode,
  346. projectCode: this.formData.projectCode,
  347. gatewayCode: this.formData.gatewayCode,
  348. }
  349. })
  350. .then((response) => {
  351. console.log(response)
  352. if (response.data.status == 200) {
  353. this.$message({
  354. type: 'success',
  355. showClose: true,
  356. message: response.data.desc
  357. })
  358. }
  359. this.dialogFormVisible = false;
  360. this.loadData();
  361. })
  362. .catch(() => {
  363. });
  364. }
  365. if (this.addOrEdit == 1) {
  366. vm.$http.get(vm.api.add, {
  367. params: {
  368. name: this.formData.name,
  369. ip: this.formData.ip,
  370. sn: this.formData.sn,
  371. type: this.formData.type,
  372. deviceStatus: 1,
  373. operatorNumber: this.formData.operatorNumber,
  374. projectNumber: this.formData.projectNumber,
  375. gatewayNumber: this.formData.gatewayNumber,
  376. operatorCode: this.formData.operatorCode,
  377. projectCode: this.formData.projectCode,
  378. gatewayCode: this.formData.gatewayCode,
  379. }
  380. })
  381. .then((response) => {
  382. if (response.data.status == 200) {
  383. this.dialogFormVisible = false;
  384. this.$message({
  385. type: 'success',
  386. showClose: true,
  387. message: response.data.desc
  388. })
  389. this.loadData();
  390. }
  391. })
  392. }
  393. } else {
  394. console.log('error submit!!');
  395. return false;
  396. }
  397. });
  398. },
  399. del(row) {
  400. const vm = this;
  401. this.$confirm('确认删除', '提示', {
  402. type: 'warning'
  403. }).then(() => {
  404. vm.$http.get(vm.api.delete, {
  405. params: {
  406. code: row.code,
  407. }
  408. })
  409. .then((response) => {
  410. console.log(response)
  411. if (response.data.status == 200) {
  412. this.$message({
  413. type: 'success',
  414. showClose: true,
  415. message: response.data.desc
  416. })
  417. }
  418. this.loadData();
  419. })
  420. })
  421. .catch(() => {
  422. this.$message({
  423. type: 'info',
  424. showClose: true,
  425. message: '取消删除'
  426. })
  427. });
  428. },
  429. cancel() {
  430. this.$message({
  431. message: '操作取消',
  432. showClose: true,
  433. type: 'info'
  434. });
  435. this.$refs.formData.clearValidate();
  436. this.dialogFormVisible = false;
  437. },
  438. //启用/停用设备
  439. statusHandle(row) {
  440. const vm = this;
  441. this.$confirm('是否进行此操作', '提示', {
  442. type: 'warning'
  443. }).then(() => {
  444. vm.$http.get(vm.api.update, {
  445. params: {
  446. name: row.name,
  447. sn: row.sn,
  448. type: row.type,
  449. ip: row.ip,
  450. operatorNumber: row.operatorNumber,
  451. projectNumber: row.projectNumber,
  452. operatorCode: row.operatorCode,
  453. projectCode: row.projectCode,
  454. gatewayCode: row.gatewayCode,
  455. gatewayNumber: row.gatewayNumber,
  456. code: row.code,
  457. valid: row.valid,
  458. deviceStatus: row.deviceStatus == 1 ? 0 : 1,
  459. }
  460. })
  461. .then((response) => {
  462. console.log(row)
  463. // console.log(response)
  464. if (response.data.status == 200) {
  465. this.$message({
  466. type: 'success',
  467. showClose: true,
  468. message: response.data.desc
  469. })
  470. }
  471. this.loadData();
  472. })
  473. })
  474. .catch(() => {
  475. this.$message({
  476. type: 'info',
  477. showClose: true,
  478. message: '操作取消'
  479. })
  480. });
  481. },
  482. manage() {
  483. let vm = this;
  484. vm.$router.push('/')
  485. },
  486. back() {
  487. let vm = this;
  488. vm.$router.back()
  489. },
  490. }
  491. }
  492. </script>
  493. <style scoped>
  494. .el-form-item {
  495. margin-right: 10px;
  496. margin-left: 10px;
  497. margin-bottom: 10px;
  498. margin-top: 0px;
  499. }
  500. </style>