From feaf0a9778879ef211c5587a513ba4cbdabb52d0 Mon Sep 17 00:00:00 2001
From: ZZJ <10913410+zzj2100@user.noreply.gitee.com>
Date: 星期四, 23 六月 2022 17:42:58 +0800
Subject: [PATCH] bug修复
---
src/pages/settings/views/NetSettings.vue | 352 ++++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 277 insertions(+), 75 deletions(-)
diff --git a/src/pages/settings/views/NetSettings.vue b/src/pages/settings/views/NetSettings.vue
index 84a1f90..a318da7 100644
--- a/src/pages/settings/views/NetSettings.vue
+++ b/src/pages/settings/views/NetSettings.vue
@@ -17,7 +17,7 @@
<!-- <span v-if="showStatus && i == 2" class="status">宸茶繛鎺�</span> -->
</div>
</div>
- <div class="net-right">
+ <div class="net-right" v-loading="configLoading">
<div class="net-set" v-if="activePage == 0">
<div class="title">缃戠粶璁剧疆</div>
<el-form
@@ -79,7 +79,11 @@
</div>
</div>
</div>
- <div class="wifi-detail" v-if="activePage == 1 && inWifiDetail">
+ <div
+ class="wifi-detail"
+ v-if="activePage == 1 && inWifiDetail"
+ ref="ipvHolder"
+ >
<div class="title">鏃犵嚎缃戠粶</div>
<div class="btns">
<div class="cancel">鍒犻櫎</div>
@@ -89,12 +93,7 @@
<div class="general-box">
<div class="in-title">閫氱敤</div>
- <el-form
- :model="wifiForm"
- :rules="wifiFormRules"
- ref="wifiForm"
- class="join-form"
- >
+ <el-form :model="wifiForm" ref="wifiForm" class="join-form">
<el-form-item prop="name">
<div class="p-title">鍚嶇О</div>
<!-- <div class="wifi-name">{{ 12123 }}</div> -->
@@ -117,20 +116,27 @@
</el-form>
</div>
- <switchBar
- :barName="`楂樼骇璁剧疆`"
- @switchChange="highClassSetting"
- :value="isHighClass"
- ></switchBar>
+ <switchBar :barName="`楂樼骇璁剧疆`" :value="isHighClass"></switchBar>
- <div class="general-box" style="margin-bottom: 20px">
- <div class="in-title">IPV4</div>
+ <div class="general-box fold" :class="{ hidden: IPV4_hid }">
+ <div class="in-title">
+ IPV4
+ <span
+ class="icon iconfont icon-fold"
+ @click="toggleFold('IPV4_hid')"
+ ></span
+ >
+ </div>
<el-form :model="ipv4Form" :rules="ipv4FormRules" ref="ipv4Form">
<el-form-item>
<div class="p-title">鏂规硶</div>
- <el-select v-model="value" placeholder="璇烽�夋嫨" size="small"
- :popper-append-to-body="false">
+ <el-select
+ v-model="value"
+ placeholder="璇烽�夋嫨"
+ size="small"
+ :popper-append-to-body="false"
+ >
<el-option
v-for="item in options"
:key="item.value"
@@ -178,13 +184,29 @@
</el-form>
</div>
- <div class="general-box" style="margin-bottom: 20px">
- <div class="in-title">IPV6</div>
+ <div
+ class="general-box fold"
+ :class="{ hidden: IPV6_hid }"
+ ref="ipv6Holder"
+ >
+ <div class="in-title">
+ IPV6
+ <span
+ class="icon iconfont icon-fold"
+ @click="toggleFold('IPV6_hid')"
+ ></span
+ >
+ </div>
- <el-form :model="ipv6Form" :rules="ipv6FormRules" ref="ipv4Form">
+ <el-form :model="ipv6Form" :rules="ipv6FormRules" ref="ipv6Form">
<el-form-item>
<div class="p-title">鏂规硶</div>
- <el-select v-model="value" placeholder="璇烽�夋嫨" size="small" :popper-append-to-body="false">
+ <el-select
+ v-model="value"
+ placeholder="璇烽�夋嫨"
+ size="small"
+ :popper-append-to-body="false"
+ >
<el-option
v-for="item in options"
:key="item.value"
@@ -204,18 +226,26 @@
<div class="p-title">鍓嶇紑</div>
<div style="display: flex; width: 100%">
<el-input
- v-model="wifiForm.password"
+ v-model="ipv6Form.prefix"
placeholder
size="small"
></el-input>
<div class="ad">
- <i class="el-icon-remove-outline"></i>
+ <i class="el-icon-remove-outline" @click="minusPrefix"></i>
</div>
<div class="ad">
- <i class="el-icon-circle-plus-outline"></i>
+ <i
+ class="el-icon-circle-plus-outline"
+ @click="+ipv6Form.prefix++"
+ ></i>
</div>
- <div class="ad"><i class="el-icon-refresh-left"></i></div>
+ <div class="ad">
+ <i
+ class="el-icon-refresh-left"
+ @click="ipv6Form.prefix = ''"
+ ></i>
+ </div>
</div>
</el-form-item>
@@ -326,6 +356,9 @@
<div class="ok" @click="saveWire">淇濆瓨</div>
</div>
</div>
+ <WifiGateway v-if="activePage == 3"></WifiGateway>
+ <LoraGateway v-if="activePage == 4"></LoraGateway>
+ <MqttGateway v-if="activePage == 5"></MqttGateway>
</div>
</div>
</div>
@@ -345,10 +378,19 @@
import ipInput from "../components/IPInput";
import switchBar from "../components/switchBar";
+import WifiGateway from "../components/WifiGateway";
+import LoraGateway from "../components/LoraGateway";
+import MqttGateway from "../components/MqttGateway";
+
+import { isIPv4 } from "@/scripts/validate";
+
export default {
components: {
ipInput,
switchBar,
+ WifiGateway,
+ LoraGateway,
+ MqttGateway,
},
data() {
const checkPwd = (rule, value, callback) => {
@@ -387,7 +429,43 @@
gateway: "",
ip: "",
},
- wireFormRules: {},
+ originalConfig: {},
+ wireFormRules: {
+ ip: [
+ {
+ required: true,
+ message: "璇疯緭鍏P鍦板潃",
+ trigger: "change",
+ },
+ { validator: isIPv4, trigger: "change" },
+ ],
+
+ gateway: [
+ {
+ required: true,
+ message: "璇疯緭鍏ョ綉鍏�",
+ trigger: "change",
+ },
+ { validator: isIPv4, trigger: "change" },
+ ],
+ dns: [
+ {
+ required: true,
+ message: "璇疯緭鍏ns鍦板潃",
+ trigger: "change",
+ },
+ { validator: isIPv4, trigger: "change" },
+ ],
+
+ subMask: [
+ {
+ required: true,
+ message: "璇疯緭鍏ュ瓙缃戞帺鐮�",
+ trigger: "change",
+ },
+ { validator: isIPv4, trigger: "change" },
+ ],
+ },
activePage: 0,
activeWireItem: {},
rules: {
@@ -402,6 +480,9 @@
{ name: "缃戠粶璁剧疆", icon: "\ue6dd" },
{ name: "鏃犵嚎缃戠粶", icon: "\uea13" },
{ name: "鏈夌嚎缃戠粶", icon: "\ue73b" },
+ { name: "WiFi缃戝叧", icon: "\ue73b" },
+ { name: "LORA缃戝叧", icon: "\ue73b" },
+ { name: "MQTT缃戝叧", icon: "\ue73b" },
],
ipv6FormRules: {},
options: [
@@ -415,17 +496,20 @@
},
],
value: "",
+ IPV4_hid: false,
+ IPV6_hid: false,
+ configLoading: false,
};
- },
- components: {
- ipInput,
- switchBar,
},
mounted() {
this.getCurServer();
this.fetchWireList();
},
methods: {
+ minusPrefix() {
+ debugger;
+ this.ipv6Form.prefix;
+ },
switchNetCard(item) {
if (item.active) {
upNetCard({ ifname: item.name }).then(
@@ -478,6 +562,7 @@
this.wireForm.gateway = "";
this.wireForm.dns = "";
this.wireForm.subMask = "";
+ this.originalConfig = this.wireForm;
},
saveServerName() {
setServerName({
@@ -490,29 +575,86 @@
});
},
openRight(i) {
- this.activePage = i;
+ if (i == 0) {
+ this.ruleForm.deviceName = "";
+ this.ruleForm.port = "";
+ this.getCurServer();
+ }
if (i == 1) {
this.inWifiDetail = false;
}
+ this.activePage = i;
},
saveWire(ifname) {
- let data = {
- ip: this.wireForm.ip,
- gateway: this.wireForm.gateway,
- dns: this.wireForm.dns,
- subMask: this.wireForm.subMask,
- ifname: this.activeWireItem.name,
- };
- setNetWorkCard(data).then(
- (res) => {
- if (res && res.success) {
- this.$message.success(res.data);
- }
- },
- (err) => {
- this.$message.error("淇濆瓨澶辫触锛�" + err.msg);
+ this.$refs["wireForm"].validate((valid) => {
+ if (valid) {
+ let data = {
+ ip: this.wireForm.ip,
+ gateway: this.wireForm.gateway,
+ dns: this.wireForm.dns,
+ subMask: this.wireForm.subMask,
+ ifname: this.activeWireItem.name,
+ };
+
+ let newUri =
+ location.protocol +
+ "//" +
+ data.ip +
+ (location.port == 80 ? "" : ":" + location.port);
+
+ this.$confirm("纭闇�瑕佷慨鏀规湇鍔″櫒閰嶇疆鍚楋紵", {
+ center: true,
+ cancelButtonClass: "comfirm-class-cancle",
+ confirmButtonClass: "comfirm-class-sure",
+ })
+ .then(() => {
+ this.configLoading = true;
+ if (this.wireForm.ip !== this.originalConfig.ip) {
+ this.configLoading = false;
+ var changeIPTimer = setTimeout(() => {
+ this.$alert(
+ '<strong>鎮ㄥ凡淇敼浜嗘湇鍔″櫒ip, 璇烽噸鏂扮櫥褰�</strong><a target="_parent" href="' +
+ newUri +
+ '"> ' +
+ newUri +
+ "<a/>",
+ "鎻愮ず",
+ {
+ dangerouslyUseHTMLString: true,
+ customClass: "noticeBox",
+ }
+ );
+ }, 10000);
+ }
+
+ setNetWorkCard(data)
+ .then((rsp) => {
+ this.configLoading = false;
+ if (rsp && rsp.success) {
+ this.$notify({
+ type: "success",
+ message: "鏈嶅姟鍣ㄩ厤缃垚鍔�",
+ });
+ }
+ })
+ .catch((err) => {
+ clearTimeout(changeIPTimer);
+ this.configLoading = false;
+ this.$notify({
+ type: "error",
+ message: "淇濆瓨澶辫触",
+ });
+ });
+ this.$message({
+ message: "鎿嶄綔瀹屾垚,璇风◢鍚�",
+ type: "success",
+ });
+ })
+ .catch((err) => {});
+ } else {
+ return false;
}
- );
+ });
},
wifiControl(val) {},
checkWifi() {
@@ -530,6 +672,7 @@
this.wireForm.gateway = res.data.gateway;
this.wireForm.dns = res.data.dns;
this.wireForm.subMask = res.data.subMask;
+ this.originalConfig = JSON.parse(JSON.stringify(this.wireForm));
}
},
(err) => {
@@ -546,9 +689,23 @@
confirmButtonText: "纭畾",
cancelButtonText: "鍙栨秷",
type: "warning",
+ customClass: "confirmBox",
}).then(() => {
this.openWireDetail(item);
});
+ },
+ toggleFold(tog) {
+ const demo = this.$refs.ipvHolder;
+ if (!(this.IPV4_hid && !this.IPV6_hid)) {
+ setTimeout(() => {
+ demo.scrollIntoView({
+ block: "end",
+ inline: "nearest",
+ behavior: "smooth",
+ });
+ }, 300);
+ }
+ this[tog] = !this[tog];
},
},
computed: {
@@ -562,12 +719,12 @@
.all {
width: 100%;
}
-.wire{
- width: 460px;
+.wire {
+ width: 456px;
margin: 0 auto;
}
.wire-detail {
- width: 460px;
+ width: 456px;
margin: 0 auto;
.title {
font-size: 16px;
@@ -605,7 +762,7 @@
}
}
.net-set {
- max-width: 600px;
+ max-width: 456px;
margin: 0 auto;
.title {
font-size: 16px;
@@ -638,10 +795,11 @@
box-sizing: border-box;
flex-shrink: 0;
padding: 10px;
+ padding-top: 6px;
border-right: 4px solid #f2f2f7;
border-left: 4px solid #f2f2f7;
+ border-top: 4px solid #f2f2f7;
.menu-item {
- background: #f2f2f7;
height: 56px;
margin-bottom: 4px;
border-radius: 8px;
@@ -652,6 +810,11 @@
padding: 0 20px;
display: flex;
justify-content: space-between;
+
+ &:hover {
+ background: #f2f2f7;
+ }
+
.item-left {
display: flex;
align-items: center;
@@ -666,7 +829,7 @@
}
}
.menu-item-active {
- background-color: var(--colorCard);
+ background-color: var(--colorCard) !important;
color: #ffffff;
}
}
@@ -677,14 +840,20 @@
box-sizing: border-box;
position: relative;
padding: 10px;
+ padding-top: 6px;
+ border-top: 4px solid #f2f2f7;
+ overflow-y: overlay;
+ overflow-x: hidden;
+
.title {
height: 48px;
font-size: 16px;
line-height: 48px;
- color: #333333;
- font-weight: bold; background: #F2F2F7;
- border-radius: 8px;
- margin-bottom: 10px;
+ color: #4f4f4f;
+ font-weight: bold;
+ background: #f2f2f7;
+ border-radius: 8px;
+ margin-bottom: 4px;
}
.el-form-item.is-required:not(.is-no-asterisk)
> .el-form-item__label:before,
@@ -697,7 +866,7 @@
width: 100%;
}
.el-form-item {
- margin-bottom: 16px;
+ margin-bottom: 14px;
}
.el-form-item__content {
line-height: 48px;
@@ -711,7 +880,7 @@
border: 2px solid #409eff !important;
}
.el-select-dropdown__item {
- color: #333333;
+ color: #4f4f4f;
height: 32px;
font-size: 12px;
line-height: 32px;
@@ -760,7 +929,7 @@
width: 100%;
}
.el-select .el-input .el-select__caret {
- color: #333333;
+ color: #4f4f4f;
font-size: 14px;
font-weight: 600;
}
@@ -769,7 +938,7 @@
max-width: none !important;
}
.wifi-set {
- max-width: 600px;
+ max-width: 456px;
margin: 0 auto;
.switch-bar {
background: #f2f2f7;
@@ -777,7 +946,7 @@
}
.switch-bar .name {
font-size: 14px;
- color: #333;
+ color: #4f4f4f;
font-weight: bold;
}
.wifi-option {
@@ -788,12 +957,12 @@
align-items: center;
box-sizing: border-box;
padding: 0 20px;
- margin-bottom: 10px;
+ margin-bottom: 4px;
background: #f2f2f7;
border-radius: 8px;
.name {
font-size: 14px;
- color: #333;
+ color: #4f4f4f;
font-weight: bold;
.icon {
color: #4e94ff;
@@ -822,17 +991,30 @@
.wifi-detail {
max-width: 454px;
margin: 0 auto;
- .title {
- background: #f2f2f7;
- border-radius: 8px;
- height: 48px;
- margin-bottom: 4px;
- }
+ transition: all 0.3s linear 0s;
.general-box {
+ overflow: hidden;
+ transition: all 0.3s linear 0s;
background: #f2f2f7;
border-radius: 8px;
padding-bottom: 10px;
-
+ margin-bottom: 20px;
+ &.fold {
+ height: 342px;
+ .icon-fold {
+ display: inline-block;
+ font-size: 14px;
+ margin-left: 360px;
+ transition: all 0.3s linear 0s;
+ cursor: pointer;
+ }
+ }
+ &.hidden {
+ height: 34px;
+ .icon-fold {
+ transform: rotate(180deg);
+ }
+ }
.el-form-item {
margin-bottom: 0px;
}
@@ -841,7 +1023,7 @@
padding: 14px 20px;
font-weight: bold;
font-size: 14px;
- color: #333333;
+ color: #4f4f4f;
}
.ip-input-container {
max-width: none !important;
@@ -901,13 +1083,13 @@
align-items: center;
box-sizing: border-box;
padding: 0 20px;
- margin-bottom: 10px;
+ margin-bottom: 4px;
border-radius: 8px;
.name {
font-size: 15px;
font-weight: bold;
font-size: 14px;
- color: #333333;
+ color: #4f4f4f;
}
.right {
display: flex;
@@ -918,6 +1100,11 @@
.el-switch.is-checked .el-switch__core::after {
left: 100%;
margin-left: -12px;
+ }
+
+ .el-switch.is-checked .el-switch__core {
+ background-color: var(--colorCard) !important;
+ border-color: var(--colorCard) !important;
}
.el-switch__core:after {
@@ -936,7 +1123,7 @@
margin-right: 15px;
}
.good {
- color: #4e94ff;
+ color: var(--colorCard);
font-size: 16px;
}
.bad {
@@ -955,4 +1142,19 @@
}
}
}
+.noticeBox p {
+ text-align: center;
+}
+
+.confirmBox {
+ text-align: center;
+
+ p {
+ text-align: center;
+ }
+
+ .el-message-box__status.el-icon-warning {
+ margin-left: 75px;
+ }
+}
</style>
--
Gitblit v1.8.0