diff --git a/src/components/TopNavBar/index.vue b/src/components/TopNavBar/index.vue
index a6c19a2..5b8a8ee 100644
--- a/src/components/TopNavBar/index.vue
+++ b/src/components/TopNavBar/index.vue
@@ -4,8 +4,10 @@
-
+
@@ -32,7 +34,7 @@
diff --git a/src/pages-aigc/components/AigcTopBar/index.vue b/src/pages-aigc/components/AigcTopBar/index.vue
new file mode 100644
index 0000000..d0ca07e
--- /dev/null
+++ b/src/pages-aigc/components/AigcTopBar/index.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+ {{ zniconsMap["zn-nav-arrow-left"] }}
+
+
+
+
+
+ {{ rechargeLabel }}
+
+ {{ points }}
+ 积分
+
+
+
+
+
+ {{ zniconsMap["zn-clock"] }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-aigc/components/AigcTopBar/styles/index.scss b/src/pages-aigc/components/AigcTopBar/styles/index.scss
new file mode 100644
index 0000000..0fd2ef1
--- /dev/null
+++ b/src/pages-aigc/components/AigcTopBar/styles/index.scss
@@ -0,0 +1,138 @@
+@font-face {
+ font-family: znicons;
+ src: url("@/static/fonts/znicons.ttf");
+}
+
+.aigc-topbar {
+ position: relative;
+ z-index: 3;
+ flex: 0 0 auto;
+ padding: var(--aigc-status-height) 12px 8px;
+ box-sizing: border-box;
+ background: linear-gradient(
+ 180deg,
+ rgba(235, 249, 255, 0.92) 0%,
+ rgba(240, 251, 247, 0.72) 66%,
+ rgba(240, 251, 247, 0) 100%
+ );
+}
+
+.aigc-nav-row {
+ height: var(--aigc-nav-height);
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ padding-right: var(--aigc-capsule-safe-width);
+ box-sizing: border-box;
+}
+
+.aigc-topbar-back {
+ flex: 0 0 40px;
+ width: 40px;
+ height: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin: 0;
+ padding: 0;
+ border-radius: 50%;
+ background: rgba(255, 255, 255, 0.86);
+ color: #172033;
+ box-shadow: 0 8px 18px rgba(18, 48, 56, 0.08);
+}
+
+.aigc-back-icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transform: translateX(-1px);
+}
+
+.aigc-topbar-actions {
+ flex: 1 1 auto;
+ width: auto;
+ min-width: 0;
+ height: 40px;
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) 36px;
+ align-items: center;
+ gap: 6px;
+ padding: 2px 3px;
+ border: 1px solid rgba(255, 255, 255, 0.76);
+ border-radius: 999px;
+ background: rgba(255, 255, 255, 0.86);
+ box-shadow: 0 8px 18px rgba(18, 48, 56, 0.08);
+ box-sizing: border-box;
+}
+
+.aigc-history-button,
+.aigc-wallet-button {
+ height: 36px;
+ min-width: 0;
+ display: flex;
+ align-items: center;
+ margin: 0;
+ padding: 0;
+ border-radius: 16px;
+ box-sizing: border-box;
+}
+
+.aigc-history-button {
+ width: 36px;
+ flex: 0 0 36px;
+ justify-content: center;
+ border-radius: 50%;
+ background: transparent;
+ color: #436783;
+}
+
+.aigc-history-icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.aigc-wallet-button {
+ justify-content: space-between;
+ gap: 6px;
+ padding: 0 9px 0 8px;
+ background: #102942;
+ color: #ffffff;
+ box-shadow:
+ 0 8px 18px rgba(18, 48, 56, 0.1),
+ inset 0 1px 0 rgba(255, 255, 255, 0.12);
+}
+
+.aigc-wallet-label {
+ height: 24px;
+ flex: 0 0 auto;
+ display: inline-flex;
+ align-items: center;
+ padding: 0 8px;
+ border-radius: 999px;
+ background: rgba(32, 207, 117, 0.18);
+ color: #50e093;
+ font-size: 10px;
+ line-height: 24px;
+ font-weight: 900;
+ white-space: nowrap;
+}
+
+.aigc-wallet-points {
+ min-width: 0;
+ display: inline-flex;
+ align-items: baseline;
+ overflow: hidden;
+ color: #ffffff;
+ font-size: 10px;
+ line-height: 1;
+ font-weight: 800;
+ white-space: nowrap;
+}
+
+.aigc-wallet-number {
+ margin-right: 2px;
+ font-size: 15px;
+ line-height: 1;
+ font-weight: 900;
+}
diff --git a/src/pages-aigc/detail/components/ContinuationCard/index.vue b/src/pages-aigc/detail/components/ContinuationCard/index.vue
new file mode 100644
index 0000000..5f678c6
--- /dev/null
+++ b/src/pages-aigc/detail/components/ContinuationCard/index.vue
@@ -0,0 +1,29 @@
+
+
+
+ {{ info.title }}
+ {{ info.desc }}
+
+
+
+ {{ info.buttonText }}
+
+
+ {{ info.cost }}
+
+
+
+
+
+
diff --git a/src/pages-aigc/detail/components/ContinuationCard/styles/index.scss b/src/pages-aigc/detail/components/ContinuationCard/styles/index.scss
new file mode 100644
index 0000000..321d6fa
--- /dev/null
+++ b/src/pages-aigc/detail/components/ContinuationCard/styles/index.scss
@@ -0,0 +1,64 @@
+.continuation-card {
+ min-height: 84px;
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) 116px;
+ align-items: center;
+ gap: 8px;
+ margin-top: 12px;
+ padding: 14px;
+ border-radius: 18px;
+ background:
+ linear-gradient(135deg, rgba(32, 207, 117, 0.14), rgba(255, 255, 255, 0.82)),
+ rgba(255, 255, 255, 0.82);
+ box-sizing: border-box;
+}
+
+.continuation-copy {
+ min-width: 0;
+}
+
+.continuation-title,
+.continuation-desc,
+.continuation-cost {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.continuation-title {
+ color: #172033;
+ font-size: 14px;
+ line-height: 19px;
+ font-weight: 900;
+}
+
+.continuation-desc {
+ margin-top: 4px;
+ color: #667386;
+ font-size: 11px;
+ line-height: 16px;
+ font-weight: 800;
+}
+
+.continuation-button {
+ height: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 999px;
+ background: #172951;
+ color: #ffffff;
+ font-size: 12px;
+ line-height: 40px;
+ font-weight: 900;
+ white-space: nowrap;
+}
+
+.continuation-cost {
+ grid-column: 1 / -1;
+ color: #12a765;
+ font-size: 10px;
+ line-height: 13px;
+ font-weight: 900;
+}
diff --git a/src/pages-aigc/detail/components/ResultActions/index.vue b/src/pages-aigc/detail/components/ResultActions/index.vue
new file mode 100644
index 0000000..206a84e
--- /dev/null
+++ b/src/pages-aigc/detail/components/ResultActions/index.vue
@@ -0,0 +1,14 @@
+
+
+ 保存图片
+ 分享好友
+
+
+
+
+
+
diff --git a/src/pages-aigc/detail/components/ResultActions/styles/index.scss b/src/pages-aigc/detail/components/ResultActions/styles/index.scss
new file mode 100644
index 0000000..4b52974
--- /dev/null
+++ b/src/pages-aigc/detail/components/ResultActions/styles/index.scss
@@ -0,0 +1,28 @@
+.result-actions {
+ display: grid;
+ grid-template-columns: 1fr 1.2fr;
+ gap: 10px;
+ margin-top: 18px;
+}
+
+.result-action {
+ height: 48px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 999px;
+ font-size: 15px;
+ line-height: 20px;
+ font-weight: 900;
+}
+
+.result-action.is-primary {
+ background: #20cf75;
+ color: #ffffff;
+ box-shadow: 0 8px 16px rgba(32, 207, 117, 0.18);
+}
+
+.result-action.is-secondary {
+ background: rgba(255, 255, 255, 0.78);
+ color: #526073;
+}
diff --git a/src/pages-aigc/detail/components/ResultMeta/index.vue b/src/pages-aigc/detail/components/ResultMeta/index.vue
new file mode 100644
index 0000000..03092ae
--- /dev/null
+++ b/src/pages-aigc/detail/components/ResultMeta/index.vue
@@ -0,0 +1,21 @@
+
+
+
+ {{ item.label }}
+ {{ item.value }}
+
+
+
+
+
+
+
diff --git a/src/pages-aigc/detail/components/ResultMeta/styles/index.scss b/src/pages-aigc/detail/components/ResultMeta/styles/index.scss
new file mode 100644
index 0000000..9fab3df
--- /dev/null
+++ b/src/pages-aigc/detail/components/ResultMeta/styles/index.scss
@@ -0,0 +1,39 @@
+.result-meta {
+ margin-top: 14px;
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 8px;
+}
+
+.result-meta-item {
+ min-width: 0;
+ height: 62px;
+ padding: 10px 8px;
+ border-radius: 14px;
+ background: rgba(255, 255, 255, 0.78);
+ color: #172033;
+ font-size: 11px;
+ line-height: 15px;
+ font-weight: 900;
+ text-align: center;
+ box-sizing: border-box;
+}
+
+.result-meta-label,
+.result-meta-value {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.result-meta-label {
+ margin-bottom: 5px;
+ color: #8c98a8;
+ font-size: 10px;
+ line-height: 13px;
+}
+
+.result-meta-value {
+ color: #173252;
+}
diff --git a/src/pages-aigc/detail/components/ResultPreview/index.vue b/src/pages-aigc/detail/components/ResultPreview/index.vue
new file mode 100644
index 0000000..4b69b01
--- /dev/null
+++ b/src/pages-aigc/detail/components/ResultPreview/index.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ {{ result.variantLabel }}
+ {{ result.title }}
+ {{ result.desc }}
+
+
+
+
+
+
+
diff --git a/src/pages-aigc/detail/components/ResultPreview/styles/index.scss b/src/pages-aigc/detail/components/ResultPreview/styles/index.scss
new file mode 100644
index 0000000..6db177c
--- /dev/null
+++ b/src/pages-aigc/detail/components/ResultPreview/styles/index.scss
@@ -0,0 +1,79 @@
+.result-preview {
+ position: relative;
+ height: 360px;
+ overflow: hidden;
+ border-radius: 26px;
+ background: var(--result-accent, #0a4d46);
+ color: #ffffff;
+ box-shadow: 0 18px 34px rgba(17, 35, 49, 0.12);
+}
+
+.result-preview-image {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: block;
+}
+
+.result-preview-shade {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background: linear-gradient(
+ 180deg,
+ rgba(0, 0, 0, 0.02) 0%,
+ rgba(0, 0, 0, 0.16) 48%,
+ rgba(0, 0, 0, 0.74) 100%
+ );
+}
+
+.result-preview-caption {
+ position: absolute;
+ right: 18px;
+ bottom: 18px;
+ left: 18px;
+}
+
+.result-preview-badge {
+ height: 20px;
+ display: inline-flex;
+ align-items: center;
+ padding: 0 8px;
+ border-radius: 999px;
+ background: rgba(255, 255, 255, 0.2);
+ color: #ffffff;
+ font-size: 9px;
+ line-height: 20px;
+ font-weight: 900;
+ letter-spacing: 0.7px;
+}
+
+.result-preview-title,
+.result-preview-desc {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.result-preview-title {
+ margin-top: 12px;
+ color: #ffffff;
+ font-size: 23px;
+ line-height: 30px;
+ font-weight: 900;
+}
+
+.result-preview-desc {
+ margin-top: 6px;
+ color: rgba(255, 255, 255, 0.78);
+ font-size: 12px;
+ line-height: 18px;
+ font-weight: 800;
+}
diff --git a/src/pages-aigc/detail/data/result.js b/src/pages-aigc/detail/data/result.js
new file mode 100644
index 0000000..3f22992
--- /dev/null
+++ b/src/pages-aigc/detail/data/result.js
@@ -0,0 +1,16 @@
+import glassBoatPostcard from "../../home/assets/glass-boat-postcard.gif";
+
+export const aigcDetailResult = {
+ id: "glass-boat-postcard-result",
+ title: "鸳鸯湖明信片",
+ cover: glassBoatPostcard,
+ accent: "#0a4d46",
+ variantLabel: "图片版",
+ resultLabel: "图片版",
+ consumedText: "100积分",
+ desc: "已生成可保存、可分享的高清旅行图片",
+ continuationTitle: "创意续作",
+ continuationDesc: "让这张图动起来 · 5秒内动效视频",
+ continuationCost: "追加消耗 100积分",
+ continuationButtonText: "升级为动效视频",
+};
diff --git a/src/pages-aigc/detail/detail.vue b/src/pages-aigc/detail/detail.vue
new file mode 100644
index 0000000..8b0a2ab
--- /dev/null
+++ b/src/pages-aigc/detail/detail.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+ 再生成一版
+ 换个模板
+ 历史记录
+
+
+
+
+
+
+
+
diff --git a/src/pages-aigc/detail/styles/index.scss b/src/pages-aigc/detail/styles/index.scss
new file mode 100644
index 0000000..991aded
--- /dev/null
+++ b/src/pages-aigc/detail/styles/index.scss
@@ -0,0 +1,54 @@
+.aigc-detail-page {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ width: 100vw;
+ height: 100vh;
+ min-height: 812px;
+ overflow: hidden;
+ color: #172033;
+ background:
+ radial-gradient(
+ 130% 78% at 0% 0%,
+ rgba(255, 249, 226, 0.76),
+ rgba(255, 249, 226, 0) 42%
+ ),
+ linear-gradient(180deg, #effaf5 0%, #f4fbf7 58%, #eef8ff 100%);
+ box-sizing: border-box;
+}
+
+.aigc-detail-content {
+ flex: 1 1 auto;
+ min-height: 0;
+ overflow: hidden;
+ padding: 0 12px;
+ box-sizing: border-box;
+}
+
+.aigc-detail-text-actions {
+ height: 50px;
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ align-items: center;
+ gap: 0;
+ margin: 12px 22px 0;
+ border-radius: 50px;
+ background: rgba(255, 255, 255, 0.42);
+}
+
+.aigc-detail-text-action {
+ position: relative;
+ min-width: 0;
+ overflow: hidden;
+ color: #20a765;
+ font-size: 12px;
+ line-height: 18px;
+ font-weight: 900;
+ text-align: center;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.aigc-detail-text-action + .aigc-detail-text-action {
+ border-left: 1px solid rgba(32, 167, 101, 0.16);
+}
diff --git a/src/pages-aigc/home/assets/card-bridge.png b/src/pages-aigc/home/assets/card-bridge.png
new file mode 100644
index 0000000..f45f686
Binary files /dev/null and b/src/pages-aigc/home/assets/card-bridge.png differ
diff --git a/src/pages-aigc/home/assets/card-culture-1.png b/src/pages-aigc/home/assets/card-culture-1.png
new file mode 100644
index 0000000..439d94a
Binary files /dev/null and b/src/pages-aigc/home/assets/card-culture-1.png differ
diff --git a/src/pages-aigc/home/assets/card-waterfall.png b/src/pages-aigc/home/assets/card-waterfall.png
new file mode 100644
index 0000000..c9d493f
Binary files /dev/null and b/src/pages-aigc/home/assets/card-waterfall.png differ
diff --git a/src/pages-aigc/home/assets/glass-boat-postcard.gif b/src/pages-aigc/home/assets/glass-boat-postcard.gif
new file mode 100644
index 0000000..2fb01dd
Binary files /dev/null and b/src/pages-aigc/home/assets/glass-boat-postcard.gif differ
diff --git a/src/pages-aigc/home/components/FlowSteps/index.vue b/src/pages-aigc/home/components/FlowSteps/index.vue
new file mode 100644
index 0000000..4c310f2
--- /dev/null
+++ b/src/pages-aigc/home/components/FlowSteps/index.vue
@@ -0,0 +1,25 @@
+
+
+
+ {{ index + 1 }}
+ {{ step }}
+
+
+
+
+
+
+
diff --git a/src/pages-aigc/home/components/FlowSteps/styles/index.scss b/src/pages-aigc/home/components/FlowSteps/styles/index.scss
new file mode 100644
index 0000000..821ffb0
--- /dev/null
+++ b/src/pages-aigc/home/components/FlowSteps/styles/index.scss
@@ -0,0 +1,50 @@
+.flow-steps {
+ height: 55px;
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 0;
+ align-items: center;
+ margin: 12px 16px 0;
+ padding: 4px;
+ border-radius: 18px;
+ background: rgba(255, 255, 255, 0.62);
+ box-shadow: 0 8px 18px rgba(18, 48, 56, 0.05);
+ box-sizing: border-box;
+}
+
+.flow-step {
+ min-width: 0;
+ height: 38px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 5px;
+ padding: 0 4px;
+ border-radius: 14px;
+ background: transparent;
+ color: #576276;
+ font-size: 12px;
+ line-height: 14px;
+ font-weight: 900;
+ white-space: nowrap;
+ box-sizing: border-box;
+}
+
+.flow-index {
+ flex: 0 0 18px;
+ width: 18px;
+ height: 18px;
+ border-radius: 50%;
+ background: #20cf75;
+ color: #ffffff;
+ font-size: 12px;
+ line-height: 18px;
+ text-align: center;
+}
+
+.flow-label {
+ min-width: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
diff --git a/src/pages-aigc/home/components/TemplateCard/index.vue b/src/pages-aigc/home/components/TemplateCard/index.vue
new file mode 100644
index 0000000..2adb4f4
--- /dev/null
+++ b/src/pages-aigc/home/components/TemplateCard/index.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+ {{ template.badge }}
+ {{ template.title }}
+ {{ template.desc }}
+ {{ template.note }}
+
+
+
+
+
+
+
+
diff --git a/src/pages-aigc/home/components/TemplateCard/styles/index.scss b/src/pages-aigc/home/components/TemplateCard/styles/index.scss
new file mode 100644
index 0000000..4cd524f
--- /dev/null
+++ b/src/pages-aigc/home/components/TemplateCard/styles/index.scss
@@ -0,0 +1,147 @@
+.template-card {
+ position: relative;
+ flex: 0 0 318px;
+ width: 318px;
+ height: 494px;
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+ border-radius: 28px;
+ background: linear-gradient(180deg, #0f7069, #082226);
+ color: #ffffff;
+ text-align: left;
+ box-shadow: 0 18px 34px rgba(24, 37, 50, 0.18);
+ transform: scale(0.96);
+ transform-origin: center;
+ transition: box-shadow 0.18s ease, transform 0.18s ease;
+}
+
+.template-card.is-active {
+ box-shadow: 0 22px 42px rgba(24, 37, 50, 0.2);
+ transform: scale(1);
+}
+
+.template-card.is-postcard .template-copy {
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0) 34%),
+ linear-gradient(180deg, #0a4d46, #082226);
+}
+
+.template-card.is-postcard .template-copy::before {
+ background: linear-gradient(180deg, rgba(10, 77, 70, 0), #0a4d46);
+}
+
+.template-media {
+ position: relative;
+ flex: 0 0 358px;
+ height: 358px;
+ overflow: hidden;
+ background: var(--memory-accent);
+}
+
+.template-image {
+ width: 100%;
+ height: 100%;
+ display: block;
+}
+
+.template-media-shade {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background:
+ radial-gradient(92% 45% at 50% 28%, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0) 62%),
+ linear-gradient(180deg, rgba(4, 22, 24, 0), rgba(4, 22, 24, 0.02) 58%, rgba(4, 22, 24, 0.24));
+}
+
+.template-copy {
+ position: relative;
+ flex: 0 0 136px;
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: flex-start;
+ padding: 15px 18px 14px;
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0) 34%),
+ linear-gradient(180deg, #0f7069, #092128);
+ box-sizing: border-box;
+}
+
+.template-copy::before {
+ content: "";
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: -34px;
+ height: 34px;
+ background: linear-gradient(180deg, rgba(15, 112, 105, 0), #0f7069);
+ pointer-events: none;
+}
+
+.template-badge {
+ position: absolute;
+ top: 14px;
+ right: 18px;
+ height: 24px;
+ display: inline-flex;
+ align-items: center;
+ padding: 0 9px;
+ border-radius: 999px;
+ background: rgba(255, 255, 255, 0.16);
+ color: rgba(255, 255, 255, 0.9);
+ font-size: 10px;
+ line-height: 24px;
+ font-weight: 900;
+}
+
+.template-title {
+ width: 178px;
+ color: #ffffff;
+ font-size: 17px;
+ line-height: 22px;
+ font-weight: 900;
+}
+
+.template-desc {
+ width: 178px;
+ margin-top: 4px;
+ color: rgba(255, 255, 255, 0.76);
+ font-size: 11px;
+ line-height: 15px;
+ font-weight: 800;
+}
+
+.template-note {
+ max-width: 172px;
+ margin-top: 5px;
+ color: rgba(255, 255, 255, 0.86);
+ font-size: 9px;
+ line-height: 13px;
+ font-weight: 900;
+}
+
+.template-select {
+ position: absolute;
+ right: 16px;
+ bottom: 16px;
+ min-width: 108px;
+ height: 40px;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ margin: 0;
+ padding: 0 16px;
+ border-radius: 999px;
+ background: rgba(255, 255, 255, 0.9);
+ color: #172033;
+ font-size: 13px;
+ line-height: 20px;
+ font-weight: 900;
+}
+
+.template-select::after {
+ border: 0;
+}
diff --git a/src/pages-aigc/home/components/TemplateCarousel/index.vue b/src/pages-aigc/home/components/TemplateCarousel/index.vue
new file mode 100644
index 0000000..5366a01
--- /dev/null
+++ b/src/pages-aigc/home/components/TemplateCarousel/index.vue
@@ -0,0 +1,198 @@
+
+
+
+
+ 选择模板
+ 左右滑动预览效果
+
+ 同源双版本
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-aigc/home/components/TemplateCarousel/styles/index.scss b/src/pages-aigc/home/components/TemplateCarousel/styles/index.scss
new file mode 100644
index 0000000..a183846
--- /dev/null
+++ b/src/pages-aigc/home/components/TemplateCarousel/styles/index.scss
@@ -0,0 +1,86 @@
+.template-carousel {
+ max-width: 100vw;
+ overflow: hidden;
+}
+
+.template-heading {
+ height: 34px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin: 0 16px 20px;
+}
+
+.template-heading-title,
+.template-heading-subtitle {
+ display: block;
+}
+
+.template-heading-title {
+ color: #172033;
+ font-size: 16px;
+ line-height: 21px;
+ font-weight: 900;
+}
+
+.template-heading-subtitle {
+ margin-top: 1px;
+ color: #7a8596;
+ font-size: 10px;
+ line-height: 13px;
+ font-weight: 800;
+}
+
+.template-heading-badge {
+ height: 26px;
+ display: inline-flex;
+ align-items: center;
+ padding: 0 10px;
+ border-radius: 999px;
+ background: rgba(32, 207, 117, 0.12);
+ color: #10a765;
+ font-size: 11px;
+ line-height: 26px;
+ font-weight: 900;
+}
+
+.template-rail {
+ max-width: 100vw;
+ height: 560px;
+ overflow-x: auto;
+ overflow-y: hidden;
+ scrollbar-width: none;
+}
+
+.template-rail::-webkit-scrollbar {
+ display: none;
+}
+
+.template-track {
+ display: inline-flex;
+ align-items: flex-start;
+ gap: 12px;
+ height: 560px;
+ padding: 0 41px 0 16px;
+ box-sizing: border-box;
+}
+
+.template-dots {
+ height: 14px;
+ display: flex;
+ justify-content: center;
+ gap: 6px;
+ margin-top: 5px;
+}
+
+.template-dot {
+ width: 6px;
+ height: 6px;
+ border-radius: 999px;
+ background: rgba(23, 32, 51, 0.16);
+}
+
+.template-dot.is-active {
+ width: 18px;
+ background: #20cf75;
+}
diff --git a/src/pages-aigc/home/data/templates.js b/src/pages-aigc/home/data/templates.js
new file mode 100644
index 0000000..02d35ed
--- /dev/null
+++ b/src/pages-aigc/home/data/templates.js
@@ -0,0 +1,53 @@
+import glassBoatPostcard from "../assets/glass-boat-postcard.gif";
+import bridgeCover from "../assets/card-bridge.png";
+import waterfallCover from "../assets/card-waterfall.png";
+import cultureCover from "../assets/card-culture-1.png";
+
+export const aigcTemplates = [
+ {
+ id: "glass-boat-postcard",
+ title: "鸳鸯湖明信片",
+ desc: "适合朋友圈分享的旅行纪念内容",
+ note: "图片版100积分 · 动效视频版200积分/5秒内",
+ badge: "同源双版本",
+ buttonText: "选这个模板",
+ cover: glassBoatPostcard,
+ tone: "postcard",
+ accent: "#0a4d46",
+ },
+ {
+ id: "bridge-memory",
+ title: "小七孔古桥留影",
+ desc: "把古桥与湖光做成专属旅行大片",
+ note: "图片版100积分 · 动效视频版200积分/5秒内",
+ badge: "同源双版本",
+ buttonText: "选这个模板",
+ cover: bridgeCover,
+ tone: "emerald",
+ accent: "#0f7069",
+ },
+ {
+ id: "waterfall-story",
+ title: "翠谷瀑布旅拍",
+ desc: "适合清爽夏日氛围的动态内容",
+ note: "图片版100积分 · 动效视频版200积分/5秒内",
+ badge: "同源双版本",
+ buttonText: "选这个模板",
+ cover: waterfallCover,
+ tone: "aqua",
+ accent: "#155e75",
+ },
+ {
+ id: "culture-postcard",
+ title: "瑶山古寨印象",
+ desc: "把民族风情做成旅行收藏卡",
+ note: "图片版100积分 · 动效视频版200积分/5秒内",
+ badge: "同源双版本",
+ buttonText: "选这个模板",
+ cover: cultureCover,
+ tone: "forest",
+ accent: "#36563d",
+ },
+];
+
+export const aigcFlowSteps = ["选模板", "传素材", "添积分", "出结果"];
diff --git a/src/pages-aigc/home/home.vue b/src/pages-aigc/home/home.vue
new file mode 100644
index 0000000..dae1913
--- /dev/null
+++ b/src/pages-aigc/home/home.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-aigc/home/styles/index.scss b/src/pages-aigc/home/styles/index.scss
new file mode 100644
index 0000000..751c801
--- /dev/null
+++ b/src/pages-aigc/home/styles/index.scss
@@ -0,0 +1,26 @@
+.aigc-home-page {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ max-width: 100vw;
+ height: 812px;
+ overflow: hidden;
+ color: #172033;
+ background:
+ radial-gradient(
+ 130% 78% at 0% 0%,
+ rgba(255, 249, 226, 0.76),
+ rgba(255, 249, 226, 0) 42%
+ ),
+ linear-gradient(180deg, #effaf5 0%, #f4fbf7 58%, #eef8ff 100%);
+ box-sizing: border-box;
+}
+
+.aigc-home-browser {
+ position: relative;
+ flex: 1 1 auto;
+ min-height: 0;
+ overflow: hidden;
+ padding: 4px 0 0;
+ box-sizing: border-box;
+}
diff --git a/src/pages-aigc/record/components/RecordCard/index.vue b/src/pages-aigc/record/components/RecordCard/index.vue
new file mode 100644
index 0000000..1e99662
--- /dev/null
+++ b/src/pages-aigc/record/components/RecordCard/index.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+ {{ record.title }}
+ {{ record.time }}
+ {{ record.status }}
+
+
+
+ 查看
+
+
+
+
+
+
+
diff --git a/src/pages-aigc/record/components/RecordCard/styles/index.scss b/src/pages-aigc/record/components/RecordCard/styles/index.scss
new file mode 100644
index 0000000..3b99417
--- /dev/null
+++ b/src/pages-aigc/record/components/RecordCard/styles/index.scss
@@ -0,0 +1,79 @@
+.record-card {
+ height: 90px;
+ display: grid;
+ grid-template-columns: 64px minmax(0, 1fr) 54px;
+ align-items: center;
+ gap: 12px;
+ padding: 12px;
+ border-radius: 16px;
+ background: linear-gradient(180deg, #ffffff 0%, #fbfdfc 100%);
+ border: 1px solid rgba(224, 236, 230, 0.92);
+ box-shadow: 0 10px 24px rgba(29, 58, 47, 0.055);
+ box-sizing: border-box;
+}
+
+.record-card + .record-card {
+ margin-top: 0;
+}
+
+.record-card-image {
+ width: 64px;
+ height: 64px;
+ display: block;
+ border-radius: 10px;
+ background: #edf5f1;
+}
+
+.record-card-copy {
+ min-width: 0;
+}
+
+.record-card-title,
+.record-card-time,
+.record-card-status {
+ display: block;
+}
+
+.record-card-title {
+ color: #162235;
+ font-size: 15px;
+ line-height: 20px;
+ font-weight: 900;
+}
+
+.record-card-time {
+ margin-top: 6px;
+ color: #7d8c97;
+ font-size: 11px;
+ line-height: 15px;
+ font-weight: 700;
+}
+
+.record-card-status {
+ margin-top: 4px;
+ color: #10b86b;
+ font-size: 10px;
+ line-height: 13px;
+ font-weight: 900;
+}
+
+.record-card-action {
+ justify-self: end;
+ width: 48px;
+ height: 28px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 999px;
+ background: #eef8f3;
+ color: #263f52;
+ font-size: 11px;
+ line-height: 28px;
+ font-weight: 800;
+}
+
+.ellipsis-1 {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
diff --git a/src/pages-aigc/record/components/RecordList/index.vue b/src/pages-aigc/record/components/RecordList/index.vue
new file mode 100644
index 0000000..cc6e743
--- /dev/null
+++ b/src/pages-aigc/record/components/RecordList/index.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ 仅保留最近20天生成记录
+
+
+
+
+
+
diff --git a/src/pages-aigc/record/components/RecordList/styles/index.scss b/src/pages-aigc/record/components/RecordList/styles/index.scss
new file mode 100644
index 0000000..69b88e3
--- /dev/null
+++ b/src/pages-aigc/record/components/RecordList/styles/index.scss
@@ -0,0 +1,19 @@
+.record-list-wrap {
+ margin-top: 0;
+}
+
+.record-list {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+}
+
+.record-note {
+ display: block;
+ margin-top: 28px;
+ color: #9aa8b6;
+ font-size: 11px;
+ line-height: 16px;
+ font-weight: 700;
+ text-align: center;
+}
diff --git a/src/pages-aigc/record/data/records.js b/src/pages-aigc/record/data/records.js
new file mode 100644
index 0000000..81d2af7
--- /dev/null
+++ b/src/pages-aigc/record/data/records.js
@@ -0,0 +1,18 @@
+import glassBoatPostcard from "@/pages-aigc/home/assets/glass-boat-postcard.gif";
+
+export const aigcRecords = [
+ {
+ id: "record-lake-postcard",
+ title: "鸳鸯湖明信片",
+ time: "2026-06-29 15:46:12",
+ status: "图片版 · 已完成 · 可升级动效视频",
+ image: glassBoatPostcard,
+ },
+ {
+ id: "record-lake-postcard-video",
+ title: "鸳鸯湖明信片",
+ time: "2026-06-29 15:58:40",
+ status: "动效视频版 · 5秒内 · 由图片版升级",
+ image: glassBoatPostcard,
+ },
+];
diff --git a/src/pages-aigc/record/record.vue b/src/pages-aigc/record/record.vue
new file mode 100644
index 0000000..f600553
--- /dev/null
+++ b/src/pages-aigc/record/record.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages-aigc/record/styles/index.scss b/src/pages-aigc/record/styles/index.scss
new file mode 100644
index 0000000..6135a40
--- /dev/null
+++ b/src/pages-aigc/record/styles/index.scss
@@ -0,0 +1,41 @@
+.aigc-record-page {
+ position: relative;
+ width: 100vw;
+ min-height: 100vh;
+ overflow: hidden;
+ padding: 0 18px;
+ background: #ffffff;
+ color: #162235;
+ box-sizing: border-box;
+}
+
+.aigc-record-nav {
+ position: relative;
+ min-height: 82px;
+ margin-bottom: 12px;
+}
+
+.aigc-record-nav :deep(.top-nav-bar) {
+ background: transparent;
+}
+
+.aigc-record-nav :deep(.top-nav-bar > .flex) {
+ padding-right: 0;
+ padding-left: 0;
+}
+
+.aigc-record-nav :deep(.nav-bar-left),
+.aigc-record-nav :deep(.nav-bar-right) {
+ width: 34px;
+ height: 34px;
+}
+
+.aigc-record-nav :deep(.nav-bar-center) {
+ height: 34px;
+}
+
+.aigc-record-nav :deep(.nav-bar-center text) {
+ font-size: 16px;
+ line-height: 22px;
+ font-weight: 900;
+}
diff --git a/src/pages.json b/src/pages.json
index 0388f22..011f909 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -158,14 +158,26 @@
{
"root": "pages-aigc",
"pages": [
- {
- "path": "home",
- "style": {
- "navigationStyle": "custom"
- }
- }
- ]
- }
+ {
+ "path": "home/home",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "detail/detail",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "record/record",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ }
+ ]
+ }
],
"globalStyle": {
"navigationBarTextstyle": "black",