Files
client-web/src/modules/first-leg/components/FirstLegOrderEditorShell.vue
T
2026-08-12 17:46:46 +08:00

63 lines
2.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script setup lang="ts">
import { ArrowLeft } from '@lucide/vue'
defineProps<{
modelValue: boolean
page: boolean
title: string
beforeClose: (done: () => void) => void | Promise<void>
}>()
const emit = defineEmits<{
'update:modelValue': [value: boolean]
back: []
}>()
</script>
<template>
<section v-if="page" class="first-leg-editor-page">
<div class="editor-page-nav">
<el-button link type="primary" @click="emit('back')"><ArrowLeft :size="17" />返回订单列表</el-button>
<span>可先保存草稿,确认无误后再提交平台审核</span>
</div>
<div class="editor-page-body"><slot /></div>
<footer class="editor-page-footer"><slot name="footer" /></footer>
</section>
<el-drawer
v-else
class="first-leg-editor"
:model-value="modelValue"
:title="title"
size="1080px"
destroy-on-close
:before-close="beforeClose"
@update:model-value="emit('update:modelValue', $event)"
>
<slot />
<template #footer><slot name="footer" /></template>
</el-drawer>
</template>
<style scoped>
.first-leg-editor-page { min-width: 0; border: 1px solid #edf0f5; background: #fff; box-shadow: 0 5px 18px rgba(15, 31, 58, .04); }
.editor-page-nav { display: flex; min-height: 52px; align-items: center; justify-content: space-between; gap: 16px; padding: 8px 24px; border-bottom: 1px solid #edf0f5; }
.editor-page-nav span { color: var(--muted); font-size: 12px; }
.editor-page-body { padding: 26px 32px 34px; }
.editor-page-footer { position: sticky; z-index: 3; bottom: 0; display: flex; justify-content: center; padding: 12px 24px; border-top: 1px solid #edf0f5; background: rgba(255, 255, 255, 0.96); box-shadow: 0 -6px 18px rgba(15, 31, 58, .06); backdrop-filter: blur(10px); }
.editor-page-footer :deep(.editor-actions) { width: min(100%, 900px); justify-content: flex-start; }
.editor-page-footer :deep(.editor-actions > .el-button) { min-width: 132px; min-height: 42px; }
.editor-page-footer :deep(.editor-actions > .el-button:last-child) { min-width: 172px; }
@media (max-width: 720px) {
.editor-page-nav { align-items: flex-start; flex-direction: column; gap: 2px; padding: 10px 16px; }
.editor-page-nav span { padding-left: 1px; line-height: 1.5; }
.editor-page-body { padding: 18px 16px 24px; }
.editor-page-footer { padding: 10px 16px; }
}
@media (max-width: 480px) {
.editor-page-footer { position: static; }
}
</style>