mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-15 05:12:49 +00:00
perf: 优化新窗口打开的任务保存机制
This commit is contained in:
parent
b9feeabfb3
commit
c13f65611f
@ -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;
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
6
resources/assets/js/store/actions.js
vendored
6
resources/assets/js/store/actions.js
vendored
@ -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 {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user