From cdb5393f2a4cbff2d663cd012f75130cecf2fb76 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A3=B7=E5=8F=B6?=
 <14103883+leaf-phos@user.noreply.gitee.com>
Date: Wed, 4 Dec 2024 15:19:40 +0800
Subject: [PATCH] =?UTF-8?q?=E8=BF=9C=E7=A8=8B=E9=85=8D=E7=BD=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/api/system/device.js                      |  9 ++
 .../device/components/DeviceSetWifiDialog.vue | 86 +++++++++++++++++++
 src/views/system/device/detail.vue            | 16 +++-
 3 files changed, 110 insertions(+), 1 deletion(-)
 create mode 100644 src/views/system/device/components/DeviceSetWifiDialog.vue

diff --git a/src/api/system/device.js b/src/api/system/device.js
index f8d3691..8285caf 100644
--- a/src/api/system/device.js
+++ b/src/api/system/device.js
@@ -186,3 +186,12 @@ export function updateDeviceServiceRate(deviceId, serviceRate) {
     }
   })
 }
+
+// 远程配网
+export function deviceSetWifi(data) {
+  return request({
+    url: "/system/device/setWifi",
+    method: 'put',
+    data
+  })
+}
diff --git a/src/views/system/device/components/DeviceSetWifiDialog.vue b/src/views/system/device/components/DeviceSetWifiDialog.vue
new file mode 100644
index 0000000..8127957
--- /dev/null
+++ b/src/views/system/device/components/DeviceSetWifiDialog.vue
@@ -0,0 +1,86 @@
+<template>
+  <el-dialog :visible.sync="visible" title="远程配网" width="400px">
+    <el-form :model="form" ref="form" :rules="rules" label-position="top">
+      <el-row>
+        <form-col :span="24" label="WIFI名称" prop="wifiName">
+          <el-input v-model="form.wifiName" placeholder="请输入WIFI名称"/>
+        </form-col>
+        <form-col :span="24" label="WIFI密码" prop="wifiPwd">
+          <el-input v-model="form.wifiPwd" placeholder="请输入WIFI密码" type="password"/>
+        </form-col>
+      </el-row>
+    </el-form>
+
+    <template #footer>
+      <el-button plain @click="cancel">取 消</el-button>
+      <el-button plain type="primary" @click="submit" :loading="submitLoading">确 定</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+import { deviceSetWifi } from '@/api/system/device'
+
+export default {
+  name: "DeviceSetWifiDialog",
+  props: {
+    show: {
+      type: Boolean,
+      default: false
+    },
+    deviceId: {
+      type: String,
+      default: null,
+    }
+  },
+  data() {
+    return {
+      submitLoading: false,
+      form: {
+        wifiName: null,
+        wifiPwd: null
+      },
+      rules: {
+        wifiName: [
+          { required: true, message: '请输入WIFI名称', trigger: 'blur' }
+        ],
+        wifiPwd: [
+          { required: true, message: '请输入WIFI密码', trigger: 'blur' }
+        ]
+      }
+    }
+  },
+  computed: {
+    visible: {
+      set(val) {
+        this.$emit('update:show', val);
+      },
+      get() {
+        return this.show;
+      }
+    }
+  },
+  methods: {
+    cancel() {
+      this.visible = false
+    },
+    submit(){
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          let data = {deviceId: this.deviceId, ...this.form};
+          this.submitLoading = true;
+          deviceSetWifi(data).then(res => {
+            if (res.code === 200) {
+              this.$message.success(`配网成功!新的WIFI为:${data.wifiName}`);
+              this.$emit('success', data);
+              this.visible = false;
+            }
+          }).finally(() => {
+            this.submitLoading = false;
+          })
+        }
+      })
+    }
+  }
+}
+</script>
diff --git a/src/views/system/device/detail.vue b/src/views/system/device/detail.vue
index 6e404b1..7646be3 100644
--- a/src/views/system/device/detail.vue
+++ b/src/views/system/device/detail.vue
@@ -103,7 +103,10 @@
               <el-descriptions-item label="版本号">
                 {{deviceData.version | defaultValue}}
               </el-descriptions-item>
-              <el-descriptions-item label="WIFI">{{deviceData.wifi | defaultValue}}</el-descriptions-item>
+              <el-descriptions-item label="WIFI" v-if="deviceData.modelTags.includes(ModelTag.WIFI)">
+                {{deviceData.wifi | defaultValue}}
+                <el-link @click="handleSetWifi" type="primary" icon="el-icon-link" style="margin-left: 0.5em">远程配网</el-link>
+              </el-descriptions-item>
               <el-descriptions-item label="开关状态">
                 <el-tag :type="isOpen ? 'success' : 'danger'" size="mini">{{isOpen ? '已开启' : '已关闭'}}</el-tag>
               </el-descriptions-item>
@@ -183,6 +186,8 @@
         <el-button plain @click="showAddElectricity = false">取消</el-button>
       </template>
     </el-dialog>
+
+    <device-set-wifi-dialog :show.sync="showSetWifi" :device-id="deviceData.deviceId" @success="onSetWifiSuccess"/>
   </div>
 </template>
 
@@ -221,12 +226,14 @@ import { isEmpty } from '@/utils'
 import BindMchButton from '@/views/system/device/components/BindMchButton.vue'
 import BindAgentButton from '@/views/system/device/components/BindAgentButton.vue'
 import LineField from '@/components/LineField/index.vue'
+import DeviceSetWifiDialog from '@/views/system/device/components/DeviceSetWifiDialog.vue'
 
 export default {
   name: 'Device/:deviceId',
   mixins: [$serviceType, $view],
   dicts: ['sm_device_status', 'sm_device_outage_way', 'sm_device_notice_way', 'sm_model_tag', 'sm_device_online_status', 'service_type', 'device_service_mode', 'time_unit', 'bonus_arrival_type'],
   components: {
+    DeviceSetWifiDialog,
     LineField,
     BindAgentButton,
     BindMchButton,
@@ -240,6 +247,7 @@ export default {
     TenantList, ResetRecord, BindRecord, ReadingRecord, MeterRecordReport, QrCode, RechargeRecord, LineChart},
   data() {
     return {
+      showSetWifi: false,
       loading: false,
       deviceData: {
         modelTags: [],
@@ -300,6 +308,12 @@ export default {
     clearInterval(this.timer);
   },
   methods: {
+    onSetWifiSuccess(data) {
+      this.deviceData.wifi = data.wifiName;
+    },
+    handleSetWifi() {
+      this.showSetWifi = true;
+    },
     isEmpty,
     handleUnbind() {
       this.$confirm('是否强制解绑该商户?', '警告', {