pagetype通用详情页实现ctrl+s快捷保存功能
This commit is contained in:
parent
cdad09373a
commit
14ed65e067
@ -147,7 +147,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, ref, shallowRef, markRaw, computed, watch } from 'vue'
|
import { onMounted, onUnmounted, ref, shallowRef, markRaw, computed, watch } from 'vue'
|
||||||
import { useRoute, useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
import { NButton, NSpace, NIcon, NProgress, NInput, NSelect, NInputNumber, NCheckbox, NDatePicker, NTimePicker, NRate, NColorPicker, NAutoComplete, NTag, useMessage } from 'naive-ui'
|
import { NButton, NSpace, NIcon, NProgress, NInput, NSelect, NInputNumber, NCheckbox, NDatePicker, NTimePicker, NRate, NColorPicker, NAutoComplete, NTag, useMessage } from 'naive-ui'
|
||||||
import FieldRenderer from '@/core/components/form/FieldRenderer.vue'
|
import FieldRenderer from '@/core/components/form/FieldRenderer.vue'
|
||||||
@ -742,6 +742,18 @@ async function handleSave() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ctrl/Cmd + S 快捷保存
|
||||||
|
function handleKeydownSave(e: KeyboardEvent) {
|
||||||
|
// 仅在按下 Ctrl/Cmd + S 时触发
|
||||||
|
if ((e.ctrlKey || e.metaKey) && (e.key === 's' || e.key === 'S')) {
|
||||||
|
e.preventDefault()
|
||||||
|
if (canEdit.value && !loading.value) {
|
||||||
|
// 不等待,保持与按钮点击一致的交互
|
||||||
|
handleSave()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 简化的返回逻辑
|
// 简化的返回逻辑
|
||||||
function goBack() {
|
function goBack() {
|
||||||
// 直接跳转到列表页,保持URL友好格式
|
// 直接跳转到列表页,保持URL友好格式
|
||||||
@ -749,6 +761,8 @@ function goBack() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
|
// 注册快捷键监听
|
||||||
|
window.addEventListener('keydown', handleKeydownSave, { capture: true })
|
||||||
// 优先解析 apps 中的覆盖组件(使用 URL 原始 slug,解析器内部会做 - 到 _ 的转换)
|
// 优先解析 apps 中的覆盖组件(使用 URL 原始 slug,解析器内部会做 - 到 _ 的转换)
|
||||||
const comp = await resolvePagetypeDetailOverride(originalSlug.value)
|
const comp = await resolvePagetypeDetailOverride(originalSlug.value)
|
||||||
overrideComponent.value = comp ? markRaw(comp) : null
|
overrideComponent.value = comp ? markRaw(comp) : null
|
||||||
@ -761,6 +775,10 @@ onMounted(async () => {
|
|||||||
await loadDetail()
|
await loadDetail()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
window.removeEventListener('keydown', handleKeydownSave)
|
||||||
|
})
|
||||||
|
|
||||||
// 监听路由参数变化
|
// 监听路由参数变化
|
||||||
watch(() => route.params.id, async (newId, oldId) => {
|
watch(() => route.params.id, async (newId, oldId) => {
|
||||||
if (newId && newId !== oldId) {
|
if (newId && newId !== oldId) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user