diff --git a/nezha-fronted/src/components/cli/webSSH.vue b/nezha-fronted/src/components/cli/webSSH.vue
index e84f2d4d3..3c760bfa0 100644
--- a/nezha-fronted/src/components/cli/webSSH.vue
+++ b/nezha-fronted/src/components/cli/webSSH.vue
@@ -235,7 +235,7 @@
:rules="[
{ required: customConnect.authType ===1, message:$t('validate.required'), trigger: 'change'},
]">
-
+
-
+
{
+ if (!binding.expression) return
+ const unsavedChange = localStorage.getItem('nz-unsaved-change')
+ let oldValue
+ try {
+ oldValue = JSON.parse(JSON.stringify(binding.value.obj))
+ el.__newValue__ = oldValue
+ } catch (e) {
- }
- function documentHandler (e) {
- if (el.contains(e.target)) {
- return false
- } else {
- let flag = true
- const path = e.path || (e.composedPath && e.composedPath())
- // eslint-disable-next-line no-labels
- top: for (let i = 0; i < path.length; i++) {
- for (let j = 0; j < exceptClassName.length; j++) {
- if (path[i].className && path[i].className.indexOf && path[i].className.indexOf(exceptClassName[j]) !== -1) {
- flag = false
- // eslint-disable-next-line no-labels
- break top
+ }
+ function documentHandler (e) {
+ if (el.contains(e.target)) {
+ return false
+ } else {
+ let flag = true
+ const path = e.path || (e.composedPath && e.composedPath())
+ // eslint-disable-next-line no-labels
+ top: for (let i = 0; i < path.length; i++) {
+ for (let j = 0; j < exceptClassName.length; j++) {
+ if (path[i].className && path[i].className.indexOf && path[i].className.indexOf(exceptClassName[j]) !== -1) {
+ flag = false
+ // eslint-disable-next-line no-labels
+ break top
+ }
}
}
- }
- if (!flag) {
- return false
- }
- if (oldValue) {
- // const newValue = JSON.parse(JSON.stringify(binding.value.obj))
- if (unsavedChange == 'on' && !isEqual(oldValue, el.__newValue__) && !el.isShow) {
- el.isShow = true
- MessageBox.confirm(i18n.t('tip.confirmCancel'), {
- confirmButtonText: i18n.t('tip.yes'),
- cancelButtonText: i18n.t('tip.no'),
- type: 'warning'
- }).then(() => {
- el.isShow = false
- if (binding.value.func) {
- binding.value.func()
- }
- }).catch(err => {
- el.isShow = false
- console.log(err)
- })
- } else if (!el.isShow) {
- binding.value.func()
+ if (!flag) {
+ return false
}
- } else {
- if (binding.arg) {
- binding.value(e, binding.arg)
+ if (oldValue) {
+ console.log(oldValue, el.__newValue__)
+ // const newValue = JSON.parse(JSON.stringify(binding.value.obj))
+ if (unsavedChange == 'on' && !isEqual(oldValue, el.__newValue__) && !el.isShow) {
+ el.isShow = true
+ MessageBox.confirm(i18n.t('tip.confirmCancel'), {
+ confirmButtonText: i18n.t('tip.yes'),
+ cancelButtonText: i18n.t('tip.no'),
+ type: 'warning'
+ }).then(() => {
+ el.isShow = false
+ if (binding.value.func) {
+ binding.value.func()
+ }
+ }).catch(err => {
+ el.isShow = false
+ })
+ } else if (!el.isShow) {
+ binding.value.func()
+ }
} else {
- if (binding.value) {
- binding.value(e)
+ if (binding.arg) {
+ binding.value(e, binding.arg)
+ } else {
+ if (binding.value) {
+ binding.value(e)
+ }
}
}
}
}
- }
- // 给当前元素绑定个私有变量,方便在unbind中可以解除事件监听
- el.__vueClickOutside__ = documentHandler
- document.addEventListener('mousedown', documentHandler)
+ // 给当前元素绑定个私有变量,方便在unbind中可以解除事件监听
+ el.__vueClickOutside__ = documentHandler
+ document.addEventListener('mousedown', documentHandler)
+ }, 100)
},
update (el, binding, vnode) {
el.__newValue__ = binding.value.obj
@@ -208,27 +210,29 @@ function myLoadingFunctionUpdate (el, binding, vnode) {
}
export const cancelWithChange = {
bind: function (el, binding) {
- if (!binding.value || !binding.value.obj) return
- const unsavedChange = localStorage.getItem('nz-unnsaved-change')
- const oldValue = JSON.parse(JSON.stringify(binding.value.obj))
- el.__newValue__ = oldValue
- function domClick (e) {
- if (unsavedChange == 'on' && !isEqual(oldValue, el.__newValue__)) {
- MessageBox.confirm(i18n.t('tip.confirmCancel'), {
- confirmButtonText: i18n.t('tip.yes'),
- cancelButtonText: i18n.t('tip.no'),
- type: 'warning'
- }).then(() => {
- if (binding.value.func) {
- binding.value.func()
- }
- })
- } else {
- binding.value.func()
+ setTimeout(() => {
+ if (!binding.value || !binding.value.obj) return
+ const unsavedChange = localStorage.getItem('nz-unsaved-change')
+ const oldValue = JSON.parse(JSON.stringify(binding.value.obj))
+ el.__newValue__ = oldValue
+ function domClick (e) {
+ if (unsavedChange == 'on' && !isEqual(oldValue, el.__newValue__)) {
+ MessageBox.confirm(i18n.t('tip.confirmCancel'), {
+ confirmButtonText: i18n.t('tip.yes'),
+ cancelButtonText: i18n.t('tip.no'),
+ type: 'warning'
+ }).then(() => {
+ if (binding.value.func) {
+ binding.value.func()
+ }
+ })
+ } else {
+ binding.value.func()
+ }
}
- }
- el.__vueDomClick__ = domClick
- el.addEventListener('click', domClick)
+ el.__vueDomClick__ = domClick
+ el.addEventListener('click', domClick)
+ }, 100)
},
update (el, binding, vnode) {
el.__newValue__ = binding.value.obj
diff --git a/nezha-fronted/src/components/common/login.vue b/nezha-fronted/src/components/common/login.vue
index 87a529339..16e7464aa 100644
--- a/nezha-fronted/src/components/common/login.vue
+++ b/nezha-fronted/src/components/common/login.vue
@@ -38,7 +38,7 @@
-
+
{{$t('profile.twoFactorAuthentication')}}
@@ -101,7 +101,7 @@
-
+
diff --git a/nezha-fronted/src/components/page/config/profileChangePin.vue b/nezha-fronted/src/components/page/config/profileChangePin.vue
index 2167af9cd..76d6369a5 100644
--- a/nezha-fronted/src/components/page/config/profileChangePin.vue
+++ b/nezha-fronted/src/components/page/config/profileChangePin.vue
@@ -4,13 +4,13 @@
-
+
-
+
-
+
diff --git a/nezha-fronted/src/components/page/config/setup.vue b/nezha-fronted/src/components/page/config/setup.vue
index 20a52b28f..421a9263e 100644
--- a/nezha-fronted/src/components/page/config/setup.vue
+++ b/nezha-fronted/src/components/page/config/setup.vue
@@ -102,7 +102,7 @@
-
+
@@ -125,7 +125,7 @@
-
+
@@ -145,7 +145,7 @@
-
+
diff --git a/nezha-fronted/src/components/page/config/system.vue b/nezha-fronted/src/components/page/config/system.vue
index a2a34e49f..56b4f77f6 100644
--- a/nezha-fronted/src/components/page/config/system.vue
+++ b/nezha-fronted/src/components/page/config/system.vue
@@ -253,7 +253,7 @@
autocomplete="off"
-
+
{{$t("config.system.email.pinTip")}}
@@ -319,7 +319,7 @@
-
+
@@ -368,7 +368,7 @@
-
+
{{$t('overall.reset')}}
diff --git a/nezha-fronted/src/components/page/config/terminal.vue b/nezha-fronted/src/components/page/config/terminal.vue
index 7d12161da..65ed17a4a 100644
--- a/nezha-fronted/src/components/page/config/terminal.vue
+++ b/nezha-fronted/src/components/page/config/terminal.vue
@@ -40,7 +40,7 @@
-
+
diff --git a/nezha-fronted/src/store/user.js b/nezha-fronted/src/store/user.js
index c0a5424f9..1e963bffc 100644
--- a/nezha-fronted/src/store/user.js
+++ b/nezha-fronted/src/store/user.js
@@ -98,7 +98,7 @@ const user = {
localStorage.setItem('nz-sys-default-cabinet-usize', res.data.defaultCabinetUsize)
localStorage.setItem('nz-sys-max-terminal-num', res.data.maxTerminalNum)
localStorage.setItem('nz-sys-asset-ping-switch', res.data.assetPingSwitch)
- localStorage.setItem('nz-unnsaved-change', res.data.unsavedChange)
+ localStorage.setItem('nz-unsaved-change', res.data.unsavedChange)
localStorage.setItem('nz-mfa-enable', Number(res.data.mfaAuthEnable) ? 1 : 0)
store.commit('setLanguage', res.data.user.lang || defaultAppearance.language)
store.commit('setTimeFormatMain', localStorage.getItem('nz-default-dateFormat') || 'YYYY-MM-DD HH:mm:ss')