deviceInfo-detail.vue 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <style scoped>
  2. .user-panel {
  3. margin: 10px auto;
  4. }
  5. </style>
  6. <template>
  7. <el-dialog
  8. :visible.sync="showDialog"
  9. :title="title"
  10. :modal-append-to-body="false"
  11. style="text-align:left;"
  12. @close="closeDialog"
  13. :close-on-click-modal="false"
  14. >
  15. <div class="user-panel" v-loading="loading">
  16. <el-form ref="form" :model="formModel" :rules="ruleValidate" :label-width="'100px'">
  17. <el-row>
  18. <el-col :span="12">
  19. <el-form-item label="单位" prop="companyId">
  20. <!-- <el-select
  21. v-model="formModel.companyId"
  22. filterable
  23. placeholder="请选择"
  24. style="width:90%"
  25. >
  26. <el-option
  27. v-for="company in companyResult"
  28. :key="company.id"
  29. :label="company.name"
  30. :value="company.id"
  31. ></el-option>
  32. </el-select>-->
  33. <el-select-tree
  34. :props="props"
  35. :options="companyResult"
  36. :value="formModel.companyId"
  37. @getValue="getSelectedValue($event)"
  38. height="200"
  39. ></el-select-tree>&nbsp;
  40. </el-form-item>
  41. </el-col>
  42. </el-row>
  43. <el-row>
  44. <el-col :span="12">
  45. <el-form-item label="ip地址" prop="ipAddress">
  46. <el-input
  47. v-model="formModel.ipAddress"
  48. @blur="queryDeviceNo"
  49. placeholder="请输入ip地址"
  50. style="width:80%"
  51. ></el-input>
  52. </el-form-item>
  53. </el-col>
  54. <el-col :span="12">
  55. <el-form-item label="端口" prop="port">
  56. <el-input
  57. v-model="formModel.port"
  58. @blur="queryDeviceNo"
  59. placeholder="请输入端口"
  60. style="width:80%"
  61. ></el-input>
  62. </el-form-item>
  63. </el-col>
  64. </el-row>
  65. <el-row>
  66. <el-col :span="12">
  67. <el-form-item label="设备编号" prop="deviceNo">
  68. <el-input v-model="formModel.deviceNo" placeholder="请输入设备编号" style="width:80%"></el-input>
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="12">
  72. <el-form-item label="设备别名" prop="aliasName">
  73. <el-input v-model="formModel.aliasName" placeholder="请输入设备别名" style="width:80%"></el-input>
  74. </el-form-item>
  75. </el-col>
  76. </el-row>
  77. <el-row>
  78. <el-col :span="12">
  79. <el-form-item label="类型" prop="type">
  80. <el-select v-model="formModel.type" filterable placeholder="请选择" style="width:90%">
  81. <el-option
  82. v-for="result in typeData"
  83. :key="result.id"
  84. :label="result.name"
  85. :value="result.value"
  86. ></el-option>
  87. </el-select>
  88. </el-form-item>
  89. </el-col>
  90. <el-col :span="12">
  91. <el-form-item label="开锁密码" prop="unlockPassword">
  92. <el-input v-model="formModel.unlockPassword" placeholder="请输入开锁密码" style="width:80%"></el-input>
  93. </el-form-item>
  94. </el-col>
  95. </el-row>
  96. <el-row>
  97. <el-col :span="12">
  98. <el-form-item label="二维码地址" prop="codeAddress">
  99. <el-input v-model="formModel.codeAddress" placeholder="请输入二维码地址" style="width:80%"></el-input>
  100. </el-form-item>
  101. </el-col>
  102. </el-row>
  103. </el-form>
  104. </div>
  105. <span slot="footer" class="dialog-footer">
  106. <el-button @click="closeDialog">取 消</el-button>
  107. <el-button type="primary" @click="handleSubmit" :loading="submitting">确 定</el-button>
  108. </span>
  109. </el-dialog>
  110. </template>
  111. <script>
  112. import Constant from "@/constant";
  113. import deviceInfoApi from "@/api/base/deviceInfo";
  114. import companyInfoApi from "@/api/base/companyInfo";
  115. import SelectTree from "@/components/SelectTree";
  116. export default {
  117. props: ["businessKey", "title", "typeData", "companyResult"],
  118. data() {
  119. return {
  120. formModel: {},
  121. ruleValidate: {
  122. aliasName: [
  123. { required: true, message: "设备别名不能为空", trigger: "blur" }
  124. ],
  125. isOnline: [
  126. {
  127. required: true,
  128. message: "运行状态不能为空",
  129. trigger: "blur"
  130. }
  131. ],
  132. // unlockPassword: [
  133. // { required: true, message: "开锁密码不能为空", trigger: "blur" }
  134. // ],
  135. // codeAddress: [
  136. // { required: true, message: "二维码地址不能为空", trigger: "blur" }
  137. // ],
  138. ipAddress: [
  139. { required: true, message: "ip地址不能为空", trigger: "blur" }
  140. ],
  141. port: [{ required: true, message: "端口不能为空", trigger: "blur" }],
  142. type: [{ required: true, message: "类型不能为空", trigger: "blur" }]
  143. },
  144. showDialog: true,
  145. loading: false,
  146. submitting: false,
  147. canQuery: true,
  148. treeData: [],
  149. props: {
  150. // 配置项(必选)
  151. value: "id",
  152. label: "name",
  153. children: "children"
  154. }
  155. };
  156. },
  157. created() {
  158. this.loadTree();
  159. },
  160. methods: {
  161. getSelectedValue(value) {
  162. this.formModel.companyId = value;
  163. },
  164. loadTree() {
  165. var formData = new FormData();
  166. companyInfoApi.loadChildren(formData).then(resp => {
  167. var jsonData = resp.data;
  168. if (jsonData.result) {
  169. this.treeData = jsonData.data;
  170. } else {
  171. this.$message.error(jsonData.message + "");
  172. }
  173. });
  174. },
  175. loadChildren(tree, treeNode, resolve) {
  176. console.log(tree);
  177. var formData = new FormData();
  178. formData.append("parentId", tree.id);
  179. companyInfoApi.loadChildren(formData).then(resp => {
  180. var jsonData = resp.data;
  181. if (jsonData.result) {
  182. resolve(jsonData.data);
  183. } else {
  184. this.$message.error(jsonData.message + "");
  185. }
  186. });
  187. },
  188. closeDialog() {
  189. this.$emit("close", false);
  190. },
  191. handleSubmit() {
  192. var self = this;
  193. this.$refs["form"].validate(valid => {
  194. if (valid) {
  195. (function() {
  196. var id = self.formModel.id;
  197. if (self.formModel.companyId == null) {
  198. self.formModel.companyId = "";
  199. }
  200. if (id == null || id.length == 0) {
  201. return deviceInfoApi.add(self.formModel);
  202. } else {
  203. return deviceInfoApi.update(self.formModel);
  204. }
  205. })().then(function(response) {
  206. var jsonData = response.data;
  207. if (jsonData.result) {
  208. self.$message({
  209. message: "保存成功!",
  210. type: "success"
  211. });
  212. self.$emit("close", true);
  213. } else {
  214. self.$message({
  215. message: jsonData.message + "",
  216. type: "warning"
  217. });
  218. //self.$emit("close", false);
  219. }
  220. });
  221. }
  222. });
  223. },
  224. queryDeviceNo() {
  225. var self = this;
  226. if (self.canQuery) {
  227. self.canQuery = false;
  228. var formData = new FormData();
  229. formData.append("ipAddress", self.formModel.ipAddress);
  230. formData.append("port", self.formModel.port);
  231. deviceInfoApi.getByIpAddressAndPort(formData).then(function(response) {
  232. var jsonData = response.data;
  233. setTimeout(() => {
  234. self.canQuery = true;
  235. //延迟1秒
  236. }, 1000);
  237. if (jsonData.result) {
  238. if (jsonData.data != null) {
  239. let deviceNo = jsonData.data.deviceNo;
  240. self.formModel.deviceNo = deviceNo;
  241. }
  242. }
  243. });
  244. }
  245. }
  246. },
  247. mounted: function() {
  248. var self = this;
  249. (function() {
  250. if (self.businessKey.length == 0) {
  251. return deviceInfoApi.create();
  252. } else {
  253. return deviceInfoApi.edit(self.businessKey);
  254. }
  255. })()
  256. .then(response => {
  257. var jsonData = response.data;
  258. self.loading = false;
  259. if (jsonData.result) {
  260. self.formModel = jsonData.data;
  261. } else {
  262. self.$message.error(jsonData.message + "");
  263. }
  264. })
  265. .catch(error => {
  266. self.$message.error(error + "");
  267. });
  268. },
  269. components: {
  270. "el-select-tree": SelectTree
  271. }
  272. };
  273. </script>