vmf
Version:
vue micro service frame
67 lines (65 loc) • 1.98 kB
JavaScript
/**
* Created by henian.xu on 2020/4/14.
*
*/
export default {
data() {
return {
isSaveReminder: false,
};
},
async beforeRouteLeave(to, form, next) {
const { isSaveReminder } = this;
// console.log(isSaveReminder);
if (isSaveReminder) {
this.$confirm(
this.$$t('vmf_change_tips2', '系统可能不会保存您所做的更改, 是否确定要离开?'),
this.$$t('vmf_friendly_reminder', '温馨提示'),
{
closeOnHashChange: false,
confirmButtonText: this.$$t('vmf_confirm', '确定'),
cancelButtonText: this.$$t('vmf_cancel', '取消'),
type: 'warning',
},
)
.then(() => {
next();
})
.catch(() => {
next(false);
});
} else {
next();
}
},
computed: {
formModelChangeListener() {
const { formModel } = this;
return formModel;
},
},
watch: {
formModelChangeListener: {
handler() {
this.isSaveReminder = true;
},
deep: true,
},
},
methods: {
beforeUnloadDelegate(e) {
const { isSaveReminder } = this;
if (isSaveReminder) {
// browsers are all a little bit special about this: https://developer.mozilla.org/en-US/docs/Web/API/BeforeUnloadEvent
e.preventDefault();
e.returnValue = isSaveReminder;
}
},
},
created() {
window.addEventListener('beforeunload', this.beforeUnloadDelegate);
},
beforeDestroy() {
window.removeEventListener('beforeunload', this.beforeUnloadDelegate);
},
};