deviceInfo-channelList.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <template>
  2. <el-dialog
  3. :visible.sync="showDialog"
  4. title="设备连接列表"
  5. append-to-body
  6. :modal="true"
  7. style="text-align:left;"
  8. @close="closeDialog"
  9. :close-on-click-modal="false"
  10. width="980px"
  11. >
  12. <div>
  13. <!--
  14. 要resetFields起作用,必须配置:model和prop
  15. -->
  16. <el-divider></el-divider>
  17. <el-row class="button-group">
  18. <el-button
  19. type="primary"
  20. size="small"
  21. plain
  22. icon="el-icon"
  23. :disabled="multipleSelection.length==0"
  24. @click="showChangeNo"
  25. >修改IP地址</el-button>
  26. </el-row>
  27. <el-table
  28. :data="tableData"
  29. style="min-height:400px;"
  30. height="450px"
  31. v-loading="loading"
  32. stripe
  33. @selection-change="handleSelectionChange"
  34. >
  35. <el-table-column type="selection" width="45"></el-table-column>
  36. <el-table-column prop="index" label="序号" width="60"></el-table-column>
  37. <el-table-column prop="deviceNo" label="设备编号" width="190"></el-table-column>
  38. <el-table-column prop="aliasName" label="设备名称" width="200"></el-table-column>
  39. <el-table-column prop="companyName" label="所属单位" width="180"></el-table-column>
  40. <el-table-column prop="remoteAddress" label="连接地址" width="180"></el-table-column>
  41. <el-table-column prop="isOpen" label="是否开启" width="80">
  42. <template slot-scope="{row}">{{row.isOpen? "是" : "否"}}</template>
  43. </el-table-column>
  44. </el-table>
  45. <!-------------设备验证规则start------------------>
  46. <el-dialog
  47. title="修改设备IP及端口"
  48. :visible.sync="changeDialogStatus"
  49. :close-on-click-modal="false"
  50. append-to-body
  51. width="500px"
  52. :modal-append-to-body="false"
  53. style="text-align: left;"
  54. element-loading-text="正在操作,请稍等"
  55. element-loading-spinner="el-icon-loading"
  56. element-loading-background="rgba(0, 0, 0, 0.8)"
  57. >
  58. <el-form
  59. :model="changeModel"
  60. ref="changeForm"
  61. :rules="changeValidate"
  62. inline
  63. :label-width="'100px'"
  64. style="text-align:left;"
  65. v-loading="boundDeviceDisabled"
  66. >
  67. <el-row>
  68. <el-col>
  69. <el-form-item label="新IP" prop="newAddress">
  70. <el-input
  71. v-model="changeModel.newAddress"
  72. placeholder="请输入新IP地址"
  73. style="width:200px"
  74. ></el-input>
  75. </el-form-item>
  76. </el-col>
  77. </el-row>
  78. <el-row>
  79. <el-col>
  80. <el-form-item label="新端口" prop="newPort">
  81. <el-input v-model="changeModel.newPort" placeholder="请输入新端口" style="width:100px"></el-input>
  82. </el-form-item>
  83. </el-col>
  84. </el-row>
  85. </el-form>
  86. <span slot="footer" class="dialog-footer">
  87. <el-button @click="hideChangeDialog">取 消</el-button>
  88. <el-button type="primary" @click="saveNewDeviceNo">确 定</el-button>
  89. </span>
  90. </el-dialog>
  91. <!-------------设备验证规则end------------------>
  92. </div>
  93. </el-dialog>
  94. </template>
  95. <script>
  96. import Constant from "@/constant";
  97. import deviceInfoApi from "@/api/base/deviceInfo";
  98. import NProgress from "nprogress"; // progress bar
  99. import "nprogress/nprogress.css"; // progress bar style
  100. export default {
  101. data() {
  102. var self = this;
  103. return {
  104. changeValidate: {
  105. newAddress: [{ required: true, message: "不能为空", trigger: "blur" }],
  106. newPort: [{ required: true, message: "不能为空", trigger: "blur" }]
  107. },
  108. formModel: {},
  109. tableData: [],
  110. showDialog: true,
  111. loading: false,
  112. multipleSelection: [],
  113. newAddress: "",
  114. newPort: "",
  115. changeDialogStatus: false,
  116. changeModel: {
  117. newAddress: "",
  118. newPort: ""
  119. },
  120. boundDeviceDisabled: false
  121. };
  122. },
  123. methods: {
  124. closeDialog() {
  125. this.$emit("close", false);
  126. },
  127. changePage() {
  128. var self = this;
  129. self.loading = true;
  130. deviceInfoApi
  131. .channelList()
  132. .then(function(response) {
  133. self.loading = false;
  134. var jsonData = response.data;
  135. self.tableData = jsonData.data;
  136. })
  137. .catch(error => {
  138. self.loading = false;
  139. });
  140. },
  141. handleSelectionChange(val) {
  142. this.multipleSelection = val;
  143. },
  144. showChangeNo() {
  145. this.changeDialogStatus = true;
  146. },
  147. hideChangeDialog() {
  148. this.changeModel.newAddress = "";
  149. this.changeModel.newPort = "";
  150. this.changeDialogStatus = false;
  151. },
  152. saveNewDeviceNo() {
  153. var self = this;
  154. this.$refs["changeForm"].validate(valid => {
  155. if (valid) {
  156. self.boundDeviceDisabled = true;
  157. var noList = this.multipleSelection.map(record => {
  158. return record.deviceNo;
  159. });
  160. var formData = new FormData();
  161. formData.append("deviceNos", noList);
  162. formData.append("newAddress", self.changeModel.newAddress);
  163. formData.append("newPort", self.changeModel.newPort);
  164. deviceInfoApi.updateDeviceData(formData).then(function(response) {
  165. self.boundDeviceDisabled = false;
  166. var jsonData = response.data;
  167. if (jsonData.result) {
  168. self.$message({
  169. type: "success",
  170. message: "修改成功"
  171. });
  172. self.changePage();
  173. self.hideChangeDialog();
  174. } else {
  175. self.$message({
  176. type: "warning",
  177. message: jsonData.message
  178. });
  179. }
  180. });
  181. }
  182. });
  183. }
  184. },
  185. mounted: function() {
  186. this.changePage();
  187. }
  188. };
  189. </script>
  190. <style lang="scss" scoped>
  191. .el-breadcrumb {
  192. margin: 10px;
  193. line-height: 20px;
  194. }
  195. .el-divider {
  196. margin: 5px 0;
  197. }
  198. .demo-form-inline {
  199. margin-left: 10px;
  200. text-align: left;
  201. }
  202. .button-group {
  203. margin-left: 10px;
  204. text-align: left;
  205. }
  206. </style>