From 3a86d19862b7f436195e255833f094dfb5e4881d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9Cyiyousong=E2=80=9D?= <鈥測ousong_yi@foxmail.com鈥�>
Date: Wed, 21 Jun 2023 15:57:42 +0800
Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0=E8=AE=BE=E5=A4=87?=
 =?UTF-8?q?=E7=BC=96=E8=BE=91=EF=BC=8C=E6=8C=89=E8=AE=BE=E5=A4=87mac?=
 =?UTF-8?q?=E5=92=8C=E8=AE=BE=E5=A4=87ip=E6=90=9C=E7=B4=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../admin/src/api/device.js                   |  27 ++++
 .../src/pages/hardware/NumberWriteDevice.vue  | 104 ++++++++++---
 .../src/pages/hardware/modal/AddDevice.vue    | 142 +++++++++++++-----
 3 files changed, 214 insertions(+), 59 deletions(-)

diff --git a/sample-form-manager-ui/admin/src/api/device.js b/sample-form-manager-ui/admin/src/api/device.js
index 545215c..70e0656 100644
--- a/sample-form-manager-ui/admin/src/api/device.js
+++ b/sample-form-manager-ui/admin/src/api/device.js
@@ -36,3 +36,30 @@ export const delDeviceMatter = (params) => {
     params,
   });
 };
+
+// 淇敼淇濆瓨璁惧淇℃伅
+export const saveDevice = (data) => {
+  return request({
+    url: `/sampleform/device/save`,
+    method: "post",
+    data,
+  });
+};
+
+// 璁惧婵€娲�
+export const saveDeviceActive = (data) => {
+  return request({
+    url: `/sampleform/device/active`,
+    method: "post",
+    data,
+  });
+};
+
+// 璁惧鍚仠鐢�
+export const saveDeviceEnable = (data) => {
+  return request({
+    url: `/sampleform/device/enable`,
+    method: "post",
+    data,
+  });
+};
diff --git a/sample-form-manager-ui/admin/src/pages/hardware/NumberWriteDevice.vue b/sample-form-manager-ui/admin/src/pages/hardware/NumberWriteDevice.vue
index 1592c19..ae1caaf 100644
--- a/sample-form-manager-ui/admin/src/pages/hardware/NumberWriteDevice.vue
+++ b/sample-form-manager-ui/admin/src/pages/hardware/NumberWriteDevice.vue
@@ -21,11 +21,21 @@
           -->
         </div>
         <div slot="right" class="flex">
+          <el-select
+            class="select"
+            size="small"
+            v-model="type"
+            placeholder="璇烽€夋嫨鎼滅储绫诲瀷"
+          >
+            <el-option label="鎸夎澶囧悕绉�" :value="1"> </el-option>
+            <el-option label="鎸塵ac鍦板潃" :value="2"> </el-option>
+            <el-option label="鎸夎澶嘔P" :value="3"> </el-option>
+          </el-select>
           <el-input
             size="small"
             v-model="searchVal"
             class="ml10 mr10"
-            placeholder="璇疯緭鍏ヨ澶囧悕绉版悳绱�"
+            placeholder="璇疯緭鍏ュ叧閿瓧鎼滅储"
             @keyup.native.enter="handleSearch"
           ></el-input>
           <el-button size="small" type="primary" @click="handleSearch"
@@ -114,37 +124,44 @@
               <el-tag size="small" v-else type="danger">绂荤嚎</el-tag>
             </template>
           </el-table-column>
-          <!-- <el-table-column align="center" prop="enabled" label="鍚敤/鍋滅敤">
+          <el-table-column align="center" prop="enabled" label="鍚敤/鍋滅敤">
             <template slot-scope="scope">
-              <el-tag
-                size="small"
-                :type="scope.row.enabled === 1 ? 'success' : 'danger'"
-                >{{ scope.row.enabled === 1 ? "鏄�" : "鍚�" }}</el-tag
+              <el-switch
+                class="tableScopeSwitch"
+                :active-value="1"
+                :inactive-value="0"
+                v-model="scope.row.enabled"
+                @change="handleChange(scope.row)"
+                inactive-text="鍋滅敤"
+                active-text="鍚敤"
               >
+              </el-switch>
             </template>
-          </el-table-column> -->
-          <el-table-column align="center" label="鎿嶄綔" width="100">
+          </el-table-column>
+          <el-table-column align="center" prop="deviceRemark" label="澶囨敞">
+          </el-table-column>
+          <el-table-column align="center" label="鎿嶄綔" width="160">
             <template slot-scope="scope">
               <div class="flex jca">
-                <!-- <span
-                  v-if="scope.row.active !== 1"
+                <span
+                  v-if="scope.row.deviceStatus == 0"
                   class="primary pointer"
                   @click="handleActive(scope.row)"
                   >婵€娲�</span
                 >
                 <span
-                  v-if="scope.row.active == 1"
+                  v-if="scope.row.active != 0"
                   style="opacity: 0"
                   class="primary"
                   >婵€娲�</span
-                > -->
+                >
                 <span class="primary pointer" @click="handleBound(scope.row)"
                   >缁戝畾琛ㄥ崟</span
                 >
-                <!-- <span class="primary pointer" @click="handleEdit(scope.row)"
+                <span class="primary pointer" @click="handleEdit(scope.row)"
                   >缂栬緫</span
                 >
-                <span class="delete pointer" @click="handleDel(scope.row.id)"
+                <!-- <span class="delete pointer" @click="handleDel(scope.row.id)"
                   >鍒犻櫎</span
                 > -->
               </div>
@@ -162,9 +179,11 @@
     </el-card>
     <!-- 鏂板璁惧 -->
     <AddDevice
+      :dict="dict"
       :dialogVisible.sync="dialogVisible"
       :title="title"
       ref="AddDevice"
+      @addSuccess="getDeviceList"
     ></AddDevice>
     <!-- 鍏宠仈浜嬮」 -->
     <AddMatter ref="AddMatter" :matterDrawer.sync="matterDrawer"></AddMatter>
@@ -176,7 +195,11 @@ import TableHeader from "@/components/TableHeader.vue";
 import Pagination from "@/components/Pagination.vue";
 import AddMatter from "./modal/AddMatter.vue";
 import AddDevice from "./modal/AddDevice.vue";
-import { getDeviceList } from "@/api/device";
+import {
+  getDeviceList,
+  saveDeviceEnable,
+  saveDeviceActive,
+} from "@/api/device";
 import local from "@/utils/local";
 export default {
   components: {
@@ -199,6 +222,8 @@ export default {
       title: "鏂板鏁板瓧鏍疯〃璁惧",
       loading: false,
       matterDrawer: false,
+      dict: {}, // 瀛楀吀
+      type: 1,
     };
   },
   created() {
@@ -208,18 +233,29 @@ export default {
     // 鑾峰彇璁惧鍒楄〃
     async getDeviceList() {
       this.loading = true;
-      let res = await getDeviceList({
+      let obj = {
         siteId: this.siteId,
         page: this.current,
         size: this.size,
-        deviceName: `%${this.searchVal}%`,
         productName: "鏍疯〃鏈�",
-      });
+      };
+      if (this.type == 1) {
+        obj.deviceName = `%${this.searchVal}%`;
+      } else if (this.type == 2) {
+        obj.deviceMac = `%${this.searchVal}%`;
+      } else if (this.type == 3) {
+        obj.ip = `%${this.searchVal}%`;
+      }
+
+      let res = await getDeviceList(obj);
       this.loading = false;
-      let { data, total } = res.data.data;
-      this.total = total;
-      this.tableData = data;
-      this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
+      if (res.data.code == 1) {
+        let { data, total, dict } = res.data.data;
+        this.total = total;
+        this.tableData = data;
+        this.dict = dict;
+        this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
+      }
     },
     // 鏂板
     handleAdd() {
@@ -237,6 +273,7 @@ export default {
     searchReset() {
       this.searchVal = "";
       this.current = 1;
+      this.type = 1;
       this.getDeviceList();
     },
     // 缈婚〉
@@ -262,7 +299,12 @@ export default {
         type: "warning",
       })
         .then(async () => {
-          console.log(row);
+          let res = await saveDeviceActive({ deviceCode: row.deviceCode });
+          let { code, msg } = res.data;
+          if (code == 1) {
+            this.$message.success(msg);
+            this.getDeviceList();
+          }
         })
         .catch(() => {
           console.log("鍙栨秷鎴愬姛锛�");
@@ -290,8 +332,17 @@ export default {
         });
     },
     // 鍚仠鐢�
-    handleChange(row) {
-      console.log(row);
+    async handleChange(row) {
+      let obj = {
+        id: row.id,
+        enabled: row.enabled,
+      };
+      let res = await saveDeviceEnable(obj);
+      let { code } = res.data;
+      if (code == 1) {
+        this.$message.success("淇敼鎴愬姛");
+        this.getDeviceList();
+      }
     },
     // 缁戝畾琛ㄥ崟
     handleBound(row) {
@@ -312,6 +363,9 @@ export default {
   :deep(.el-card) {
     height: auto;
   }
+  .select {
+    width: 220px !important;
+  }
 }
 // .table-content {
 //   height: 550px;
diff --git a/sample-form-manager-ui/admin/src/pages/hardware/modal/AddDevice.vue b/sample-form-manager-ui/admin/src/pages/hardware/modal/AddDevice.vue
index c7782e4..06f9afc 100644
--- a/sample-form-manager-ui/admin/src/pages/hardware/modal/AddDevice.vue
+++ b/sample-form-manager-ui/admin/src/pages/hardware/modal/AddDevice.vue
@@ -6,37 +6,48 @@
       width="50%"
       @close="handleClose"
     >
-      <el-form ref="form" size="small" :model="form" label-width="80px">
+      <el-form
+        ref="form"
+        size="small"
+        :model="form"
+        :rules="rules"
+        label-width="80px"
+      >
         <el-row :gutter="20">
           <el-col :span="12"
-            ><el-form-item label="璁惧鍚嶇О" prop="name">
+            ><el-form-item label="璁惧鍚嶇О" prop="deviceName">
               <el-input
-                v-model="form.name"
+                v-model="form.deviceName"
                 placeholder="璇疯緭鍏ヨ澶囧悕绉�"
               ></el-input> </el-form-item
           ></el-col>
           <el-col :span="12"
-            ><el-form-item label="璁惧绫诲瀷" prop="name">
-              <el-input
-                v-model="form.name"
-                placeholder="璇疯緭鍏ヨ澶囧悕绉�"
-              ></el-input> </el-form-item
+            ><el-form-item label="璁惧绫诲瀷">
+              <el-input disabled value="鏁板瓧鏍疯〃"></el-input> </el-form-item
           ></el-col>
         </el-row>
         <el-row :gutter="20">
           <el-col :span="12"
-            ><el-form-item label="mac鍦板潃" prop="name">
+            ><el-form-item label="mac鍦板潃" prop="deviceMac">
               <el-input
-                v-model="form.name"
+                v-model="form.deviceMac"
                 placeholder="璇疯緭鍏ac鍦板潃"
               ></el-input> </el-form-item
           ></el-col>
           <el-col :span="12"
-            ><el-form-item label="璁惧鍘傚晢" prop="name">
-              <el-input
-                v-model="form.name"
-                placeholder="璇疯緭鍏ヨ澶囧巶鍟�"
-              ></el-input> </el-form-item
+            ><el-form-item label="璁惧鍘傚晢" prop="deviceFirmId">
+              <el-select
+                v-model="form.deviceFirmId"
+                placeholder="璇烽€夋嫨璁惧鍘傚晢"
+              >
+                <el-option
+                  v-for="(v, key) in dict.deviceFirmId"
+                  :key="key"
+                  :label="v"
+                  :value="Number(key)"
+                >
+                </el-option>
+              </el-select> </el-form-item
           ></el-col>
         </el-row>
         <el-row :gutter="20">
@@ -53,60 +64,70 @@
               </el-select> </el-form-item
           ></el-col>
           <el-col :span="12"
-            ><el-form-item label="璁惧IP" prop="name">
+            ><el-form-item label="璁惧IP" prop="ip">
               <el-input
-                v-model="form.name"
+                v-model="form.ip"
                 placeholder="璇疯緭鍏ヨ澶嘔P"
               ></el-input> </el-form-item
           ></el-col>
         </el-row>
         <el-row :gutter="20">
           <el-col :span="12"
-            ><el-form-item label="绔彛鍙�" prop="name">
+            ><el-form-item label="绔彛鍙�" prop="port">
               <el-input
-                v-model="form.name"
+                v-model="form.port"
                 placeholder="璇疯緭鍏ョ鍙e彿"
               ></el-input> </el-form-item
           ></el-col>
           <el-col :span="12"
-            ><el-form-item label="璐熻矗浜�" prop="name">
+            ><el-form-item label="璐熻矗浜�" prop="leadingOfficial">
               <el-input
-                v-model="form.name"
+                v-model="form.leadingOfficial"
                 placeholder="璇疯緭鍏ヨ矗浠讳汉濮撳悕"
               ></el-input> </el-form-item
           ></el-col>
         </el-row>
         <el-row :gutter="20">
           <el-col :span="12"
-            ><el-form-item label="鎵嬫満鍙�" prop="name">
+            ><el-form-item label="鎵嬫満鍙�" prop="leadingOfficialTelephone">
               <el-input
-                v-model="form.name"
+                v-model="form.leadingOfficialTelephone"
                 placeholder="璇疯緭鍏ヨ矗浠讳汉鎵嬫満鍙�"
               ></el-input> </el-form-item
           ></el-col>
           <el-col :span="12"
-            ><el-form-item label="璁惧浣嶇疆" prop="name">
+            ><el-form-item label="璁惧缁忓害" prop="lon">
               <el-input
-                v-model="form.name"
-                placeholder="璇疯緭鍏ヨ澶囦綅缃紙X鍧愭爣锛孻鍧愭爣锛�"
+                v-model="form.lon"
+                placeholder="璇疯緭鍏ヨ澶囩粡搴�"
               ></el-input> </el-form-item
           ></el-col>
         </el-row>
         <el-row :gutter="20">
           <el-col :span="12"
-            ><el-form-item label="鎵€鍦ㄦゼ鏍�" prop="name">
+            ><el-form-item label="璁惧绾害" prop="lati">
+              <el-input
+                v-model="form.lati"
+                placeholder="璇疯緭鍏ヨ澶囩含搴�"
+              ></el-input> </el-form-item
+          ></el-col>
+
+          <el-col :span="12"
+            ><el-form-item label="鎵€鍦ㄦゼ鏍�" prop="deviceInBuilding">
               <el-input-number
-                v-model="form.num"
+                v-model="form.deviceInBuilding"
                 controls-position="right"
                 :min="1"
                 :max="100"
                 placeholder="璇疯緭鍏ユゼ鏍�"
               ></el-input-number> </el-form-item
           ></el-col>
+        </el-row>
+        <el-row :gutter="20">
           <el-col :span="12"
-            ><el-form-item label="鎵€鍦ㄦゼ灞�" prop="name">
+            ><el-form-item label="鎵€鍦ㄦゼ灞�" prop="deviceInFloor">
               <el-input-number
-                v-model="form.num"
+                v-model="form.deviceInFloor"
                 controls-position="right"
                 :min="1"
                 :max="100"
@@ -116,13 +137,13 @@
         </el-row>
         <el-row :gutter="20">
           <el-col :span="24"
-            ><el-form-item label="澶囨敞" prop="name">
+            ><el-form-item label="澶囨敞" prop="deviceRemark">
               <el-input
                 type="textarea"
                 :autosize="{ minRows: 4, maxRows: 4 }"
                 clearable
                 placeholder="璇疯緭鍏ュ娉�"
-                v-model="form.textarea"
+                v-model="form.deviceRemark"
                 resize="none"
               >
               </el-input> </el-form-item
@@ -140,6 +161,7 @@
 </template>
 
 <script>
+import { saveDevice } from "@/api/device";
 export default {
   props: {
     title: {
@@ -152,11 +174,53 @@ export default {
       required: true,
       default: false,
     },
+    dict: {
+      type: Object,
+      required: true,
+      default: () => {},
+    },
   },
   data() {
     return {
       form: {
-        name: "",
+        deviceId: "", // 璁惧id
+        deviceName: "", // 璁惧鍚嶇О
+        deviceCode: "", // 璁惧缂栫爜
+        deviceMac: "", // 璁惧鐨凪AC鍦板潃
+        siteId: "", // 绔欑偣Id
+        siteCode: "", // 绔欑偣缂栧彿
+        siteName: "", // 绔欑偣鍚嶇О
+        productCode: "", // 浜у搧缂栫爜
+        productName: "", // 浜у搧鍚嶇О
+        deviceSrc: "", // 璁惧鏉ユ簮(0.瀛愯澶囷紝1.缃戝叧璁惧锛�2.鐩磋繛璁惧)
+        lon: "", // 缁忓害
+        lati: "", // 绾害
+        leadingOfficial: "", // 璐熻矗浜�
+        leadingOfficialTelephone: "", // 鑱旂郴鐢佃瘽
+        // deviceStatus: "", // 璁惧鐘舵€� (0.鏈縺娲伙紝1.绂荤嚎,2.鍦ㄧ嚎)
+        deviceRemark: "", // 澶囨敞
+        source: "", // 璁惧鏉ユ簮(0.鏃ц澶囷紝1.鏂拌澶�)
+        deviceFirmId: "", // 璁惧鐢熶骇鍘傚晢ID
+        deviceFirmname: "", // 璁惧鐢熶骇鍘傚晢鍚嶇О
+        ip: "", // 璁惧璁块棶ip
+        port: "", // 绔彛
+        // enabled: "", // 鍚敤鐘舵€� (0.鍋滄锛�1.鍚敤)
+        deviceInBuilding: "", // 鎵€鍦ㄦゼ瀹�
+        deviceInFloor: "", // 鎵€鍦ㄦゼ灞�
+      },
+      rules: {
+        deviceName: [
+          { required: true, message: "璇疯緭鍏ヨ澶囧悕绉�", trigger: "blur" },
+        ],
+        deviceMac: [
+          { required: true, message: "璇疯緭鍏ヨ澶噈ac鍦板潃", trigger: "blur" },
+        ],
+        leadingOfficial: [
+          { required: true, message: "璇疯緭鍏ヨ礋璐d汉濮撳悕", trigger: "blur" },
+        ],
+        leadingOfficialTelephone: [
+          { required: true, message: "璇疯緭鍏ヨ礋璐d汉鎵嬫満鍙风爜", trigger: "blur" },
+        ],
       },
       options: [
         {
@@ -185,7 +249,17 @@ export default {
       this.$refs.form.resetFields();
     },
     handleOk() {
-      console.log(1);
+      this.$refs.form.validate(async (valid) => {
+        if (valid) {
+          let res = await saveDevice(this.form);
+          let { code, msg } = res.data;
+          if (code == 1) {
+            this.$message.success(msg);
+            this.$emit("addSuccess");
+            this.handleClose();
+          }
+        }
+      });
     },
     // 鏂板
     onAdd() {
-- 
2.24.3