feat(aigc): add travel postcard AIGC feature

Add complete travel postcard AIGC creation workflow including:
- New AIGC pages: template selection home, result detail, and history records
- Reusable UI components: template card, flow steps, result preview, action buttons, record lists
- Static assets including template images, fonts and styles
- Updated TopNavBar component to support menu button alignment
- Register new AIGC page routes in pages.json
- Add mock data for templates, user records and result details
This commit is contained in:
duanshuwen
2026-07-05 17:47:37 +08:00
parent ca680ab41b
commit f47f68e19b
35 changed files with 1716 additions and 18 deletions

View File

@@ -0,0 +1,44 @@
<template>
<view
class="template-card"
:class="[
active ? 'is-active' : '',
template.tone ? `is-${template.tone}` : '',
]"
:style="{ '--memory-accent': template.accent || '#0f7069' }"
>
<view class="template-media">
<image class="template-image" :src="template.cover" mode="aspectFill" />
<view class="template-media-shade" />
</view>
<view class="template-copy">
<text class="template-badge">{{ template.badge }}</text>
<text class="template-title ellipsis-1">{{ template.title }}</text>
<text class="template-desc ellipsis-1">{{ template.desc }}</text>
<text class="template-note ellipsis-1">{{ template.note }}</text>
<button class="template-select" type="default" @tap.stop="emit('select')">
{{ template.buttonText }}
</button>
</view>
</view>
</template>
<script setup>
defineProps({
template: {
type: Object,
default: () => ({}),
},
active: {
type: Boolean,
default: false,
},
});
const emit = defineEmits(["select"]);
</script>
<style scoped lang="scss">
@import "./styles/index.scss";
</style>