perf: 优化新窗口打开的任务保存机制

This commit is contained in:
kuaifan 2022-03-07 01:15:10 +08:00
parent b9feeabfb3
commit c13f65611f
3 changed files with 48 additions and 14 deletions

View File

@ -19,7 +19,7 @@
:rows="1" :rows="1"
:autosize="{ minRows: 1, maxRows: 8 }" :autosize="{ minRows: 1, maxRows: 8 }"
:maxlength="255" :maxlength="255"
@on-blur="updateData('name')" @on-blur="updateBlur('name')"
@on-keydown="onNameKeydown"/> @on-keydown="onNameKeydown"/>
</div> </div>
<DatePicker <DatePicker
@ -141,7 +141,7 @@
:rows="1" :rows="1"
:autosize="{ minRows: 1, maxRows: 8 }" :autosize="{ minRows: 1, maxRows: 8 }"
:maxlength="255" :maxlength="255"
@on-blur="updateData('name')" @on-blur="updateBlur('name')"
@on-keydown="onNameKeydown"/> @on-keydown="onNameKeydown"/>
</div> </div>
<div class="desc"> <div class="desc">
@ -152,7 +152,7 @@
:options="taskOptions" :options="taskOptions"
:option-full="taskOptionFull" :option-full="taskOptionFull"
:placeholder="$L('详细描述...')" :placeholder="$L('详细描述...')"
@on-blur="updateData('content')" @on-blur="updateBlur('content')"
inline/> inline/>
</div> </div>
<Form class="items" label-position="left" label-width="auto" @submit.native.prevent> <Form class="items" label-position="left" label-width="auto" @submit.native.prevent>
@ -315,7 +315,8 @@
:key="key" :key="key"
:task-id="task.id" :task-id="task.id"
:open-task="task" :open-task="task"
:main-end-at="taskDetail.end_at"/> :main-end-at="taskDetail.end_at"
:can-update-blur="canUpdateBlur"/>
</ul> </ul>
<ul :class="['item-content', subList.length === 0 ? 'nosub' : '']"> <ul :class="['item-content', subList.length === 0 ? 'nosub' : '']">
<li> <li>
@ -452,6 +453,11 @@ export default {
mainEndAt: { mainEndAt: {
default: null default: null
}, },
//
canUpdateBlur: {
type: Boolean,
default: true
},
}, },
data() { data() {
return { return {
@ -795,6 +801,12 @@ export default {
return isModify; return isModify;
}, },
updateBlur(action, params) {
if (this.canUpdateBlur) {
this.updateData(action, params)
}
},
updateData(action, params) { updateData(action, params) {
let successCallback = null; let successCallback = null;
switch (action) { switch (action) {
@ -810,16 +822,15 @@ export default {
break; break;
case 'content': case 'content':
const newContent = this.$refs.desc.getContent(); const content = this.$refs.desc.getContent();
if (newContent == this.taskContent) { if (content == this.taskContent) {
return; return;
} }
this.$set(this.taskDetail, 'content', newContent) this.$set(this.taskDetail, 'content', content)
successCallback = () => { successCallback = () => {
let content = this.taskContents.find(({task_id}) => task_id == this.taskId)
this.$store.dispatch("saveTaskContent", { this.$store.dispatch("saveTaskContent", {
id: content.id, task_id: this.taskId,
content: newContent content
}) })
} }
break; break;

View File

@ -2,7 +2,7 @@
<div class="electron-task"> <div class="electron-task">
<PageTitle :title="taskInfo.name"/> <PageTitle :title="taskInfo.name"/>
<Loading v-if="loadIng > 0"/> <Loading v-if="loadIng > 0"/>
<TaskDetail v-else ref="taskDetail" :task-id="taskInfo.id" :open-task="taskInfo"/> <TaskDetail v-else ref="taskDetail" :task-id="taskInfo.id" :open-task="taskInfo" :can-update-blur="canUpdateBlur"/>
</div> </div>
</template> </template>
@ -39,16 +39,39 @@
<script> <script>
import TaskDetail from "../manage/components/TaskDetail"; import TaskDetail from "../manage/components/TaskDetail";
import {mapState} from "vuex"; import {mapState} from "vuex";
export default { export default {
components: {TaskDetail}, components: {TaskDetail},
data() { data() {
return { return {
loadIng: 0, loadIng: 0,
taskId: 0, taskId: 0,
canUpdateBlur: true
} }
}, },
mounted() { mounted() {
document.addEventListener('keydown', this.shortcutEvent); document.addEventListener('keydown', this.shortcutEvent);
//
if (this.$isSubElectron) {
window.__onBeforeUnload = () => {
if (this.$refs.taskDetail.checkUpdate()) {
this.canUpdateBlur = false;
$A.modalConfirm({
content: '修改的内容尚未保存,真的要放弃修改吗?',
cancelText: '取消',
okText: '放弃',
onOk: () => {
this.$Electron.sendMessage('windowDestroy');
},
onCancel: () => {
this.canUpdateBlur = true;
}
});
return true
}
}
}
}, },
beforeDestroy() { beforeDestroy() {
document.removeEventListener('keydown', this.shortcutEvent); document.removeEventListener('keydown', this.shortcutEvent);

View File

@ -1317,11 +1317,11 @@ export default {
$A.execMainDispatch("saveTaskContent", data) $A.execMainDispatch("saveTaskContent", data)
// //
if ($A.isArray(data)) { if ($A.isArray(data)) {
data.forEach((msg) => { data.forEach(item => {
dispatch("saveTaskContent", msg) dispatch("saveTaskContent", item)
}); });
} else if ($A.isJson(data)) { } else if ($A.isJson(data)) {
let index = state.taskContents.findIndex(({id}) => id == data.id); let index = state.taskContents.findIndex(({task_id}) => task_id == data.task_id);
if (index > -1) { if (index > -1) {
state.taskContents.splice(index, 1, Object.assign({}, state.taskContents[index], data)); state.taskContents.splice(index, 1, Object.assign({}, state.taskContents[index], data));
} else { } else {