![]()
onPreviewError(e, s.hue)"
/>
@@ -58,6 +60,16 @@ import {
import PageHeader from '@/components/aicreate/PageHeader.vue'
import { useAicreateStore } from '@/stores/aicreate'
+// 导入画风图片:{style}-normal.png 未选中,{style}-active.png 选中
+import styleCartoonNormal from '@/assets/images/style-cartoon-normal.png'
+import styleCartoonActive from '@/assets/images/style-cartoon-active.png'
+import styleWatercolorNormal from '@/assets/images/style-watercolor-normal.png'
+import styleWatercolorActive from '@/assets/images/style-watercolor-active.png'
+import styleInkNormal from '@/assets/images/style-ink-normal.png'
+import styleInkActive from '@/assets/images/style-ink-active.png'
+import stylePencilNormal from '@/assets/images/style-pencil-normal.png'
+import stylePencilActive from '@/assets/images/style-pencil-active.png'
+
const router = useRouter()
const store = useAicreateStore()
const selected = ref('')
@@ -66,40 +78,26 @@ interface StyleItem {
styleId: string
styleName: string
desc: string
- /** 用于预览图加载失败时的 fallback 渐变色调(HSL 色相) */
- hue: number
+ /** 未选中态图片 */
+ img: string
+ /** 选中态图片 */
+ imgActive: string
+ /** hidden=true 时暂不展示,后续开发开放 */
+ hidden?: boolean
}
const styles: StyleItem[] = [
- { styleId: 'style_cartoon', styleName: '卡通风格', desc: '色彩鲜明,充满童趣', hue: 30 },
- { styleId: 'style_watercolor', styleName: '水彩风格', desc: '柔和透明,梦幻浪漫', hue: 200 },
- { styleId: 'style_ink', styleName: '水墨国风', desc: '古韵悠长,意境深远', hue: 270 },
- { styleId: 'style_pencil', styleName: '彩铅风格', desc: '细腻温暖,自然亲切', hue: 50 },
- { styleId: 'style_oilpaint', styleName: '油画风格', desc: '色彩浓郁,质感丰富', hue: 25 },
- { styleId: 'style_collage', styleName: '剪贴画', desc: '趣味拼贴,创意满满', hue: 320 },
+ { styleId: 'style_cartoon', styleName: '卡通风格', desc: '色彩鲜明,充满童趣', img: styleCartoonNormal, imgActive: styleCartoonActive },
+ { styleId: 'style_watercolor', styleName: '水彩风格', desc: '柔和透明,梦幻浪漫', img: styleWatercolorNormal, imgActive: styleWatercolorActive },
+ { styleId: 'style_ink', styleName: '水墨国风', desc: '古韵悠长,意境深远', img: styleInkNormal, imgActive: styleInkActive },
+ { styleId: 'style_pencil', styleName: '彩铅风格', desc: '细腻温暖,自然亲切', img: stylePencilNormal, imgActive: stylePencilActive },
+ // 油画、剪贴画暂不开放,后续开发后去掉 hidden 即可
+ { styleId: 'style_oilpaint', styleName: '油画风格', desc: '色彩浓郁,质感丰富', img: '', imgActive: '', hidden: true },
+ { styleId: 'style_collage', styleName: '剪贴画', desc: '趣味拼贴,创意满满', img: '', imgActive: '', hidden: true },
]
-/** 预览图路径约定:/public/aicreate/styles/{styleId}.jpg */
-const previewUrl = (id: string) => `/aicreate/styles/${id}.jpg`
-
-/** 加载失败时切换为对应色调的 SVG 渐变占位 */
-const fallbackSvg = (hue: number) =>
- 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(
- ``
- )
-
-const onPreviewError = (e: Event, hue: number) => {
- const img = e.target as HTMLImageElement
- if (img.dataset.fallback === '1') return // 防止 fallback 也失败导致死循环
- img.dataset.fallback = '1'
- img.src = fallbackSvg(hue)
-}
+/** 页面可见的风格列表 */
+const visibleStyles = styles.filter(s => !s.hidden)
const goNext = () => {
store.selectedStyle = selected.value