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) + } + }); + }, } }