From 1ff59aee56533c4730ec55e3b90c21d04d2ac899 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Fri, 28 Jan 2022 13:25:51 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81=E6=9C=AA=E4=BF=9D=E5=AD=98=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/js/components/DrawerOverlay.vue | 16 ++++++++++++- .../pages/manage/components/ProjectList.vue | 24 ++++++++++++++++++- .../manage/components/ProjectWorkflow.vue | 14 +++++++++++ 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/resources/assets/js/components/DrawerOverlay.vue b/resources/assets/js/components/DrawerOverlay.vue index e2ee5c9a..47f8a7ce 100644 --- a/resources/assets/js/components/DrawerOverlay.vue +++ b/resources/assets/js/components/DrawerOverlay.vue @@ -63,6 +63,7 @@ type: Boolean, default: false }, + beforeClose: Function }, data() { @@ -136,12 +137,25 @@ }, methods: { - mask () { + mask() { if (this.maskClosable) { this.close() } }, close() { + if (!this.beforeClose) { + return this.handleClose(); + } + + const before = this.beforeClose(); + + if (before && before.then) { + before.then(this.handleClose); + } else { + this.handleClose(); + } + }, + handleClose () { this.$emit("input", false) }, escClose(e) { diff --git a/resources/assets/js/pages/manage/components/ProjectList.vue b/resources/assets/js/pages/manage/components/ProjectList.vue index 79d8692d..19cc0a1a 100644 --- a/resources/assets/js/pages/manage/components/ProjectList.vue +++ b/resources/assets/js/pages/manage/components/ProjectList.vue @@ -407,8 +407,9 @@ - + @@ -1179,6 +1180,27 @@ export default { this.$store.dispatch('toggleProjectParameter', 'completedTask'); }, + workflowBeforeClose() { + return new Promise(resolve => { + if (!this.$refs.workflow.existDiff()) { + resolve() + return + } + $A.modalConfirm({ + content: '设置尚未保存,是否放弃修改?', + cancelText: '放弃', + okText: '保存', + onCancel: () => { + resolve() + }, + onOk: () => { + this.$refs.workflow.saveAll() + resolve() + } + }); + }) + }, + myFilter(task, chackCompleted = true) { if (task.archived_at) { return false; diff --git a/resources/assets/js/pages/manage/components/ProjectWorkflow.vue b/resources/assets/js/pages/manage/components/ProjectWorkflow.vue index 39c68656..d7eb2883 100644 --- a/resources/assets/js/pages/manage/components/ProjectWorkflow.vue +++ b/resources/assets/js/pages/manage/components/ProjectWorkflow.vue @@ -261,6 +261,12 @@ export default { return JSON.stringify(project_flow_item) != project_flow_bak }, + existDiff() { + return !!this.list.find(data => { + return this.contrast(data.project_flow_item, data.project_flow_bak) + }); + }, + onCreate() { let id = -1 * $A.randNum(1000, 10000); this.list.push({ @@ -468,6 +474,14 @@ export default { $A.modalError(msg); }); }, + + saveAll() { + this.list.some(data => { + if (this.contrast(data.project_flow_item, data.project_flow_bak)) { + this.onSave(data) + } + }); + }, } }