pagetype通用详情页实现ctrl+s快捷保存功能
This commit is contained in:
parent
cdad09373a
commit
14ed65e067
@ -147,7 +147,7 @@
|
||||
</template>
|
||||
|
||||
<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 { 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'
|
||||
@ -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() {
|
||||
// 直接跳转到列表页,保持URL友好格式
|
||||
@ -749,6 +761,8 @@ function goBack() {
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
// 注册快捷键监听
|
||||
window.addEventListener('keydown', handleKeydownSave, { capture: true })
|
||||
// 优先解析 apps 中的覆盖组件(使用 URL 原始 slug,解析器内部会做 - 到 _ 的转换)
|
||||
const comp = await resolvePagetypeDetailOverride(originalSlug.value)
|
||||
overrideComponent.value = comp ? markRaw(comp) : null
|
||||
@ -761,6 +775,10 @@ onMounted(async () => {
|
||||
await loadDetail()
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
window.removeEventListener('keydown', handleKeydownSave)
|
||||
})
|
||||
|
||||
// 监听路由参数变化
|
||||
watch(() => route.params.id, async (newId, oldId) => {
|
||||
if (newId && newId !== oldId) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user