From 3ce669d2206baec85837d618d49d2144b614227f Mon Sep 17 00:00:00 2001 From: zoujing Date: Wed, 27 May 2026 17:24:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=BC=94=E7=A4=BA=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-long-text-guide-detail-routes.mjs | 6 +- src/model/ChatModel.js | 2 + src/pages.json | 6 + src/pages/ChatMain/ChatMainList/index.vue | 3 +- .../LongTextGuideCardPreview/detailRoutes.mjs | 2 +- .../LongTextGuideCardPreview/fullDoc.vue | 177 ++++ .../LongTextGuideCardPreview/index.vue | 12 + .../styles/detail.scss | 182 ++++ .../长文本收纳组件_5类演示.html | 775 ++++++++++++++++++ 9 files changed, 1160 insertions(+), 5 deletions(-) create mode 100644 src/pages/ChatModule/LongTextGuideCardPreview/fullDoc.vue create mode 100644 src/pages/ChatModule/LongTextGuideCardPreview/长文本收纳组件_5类演示.html diff --git a/scripts/check-long-text-guide-detail-routes.mjs b/scripts/check-long-text-guide-detail-routes.mjs index cd77377..c3a8ac5 100644 --- a/scripts/check-long-text-guide-detail-routes.mjs +++ b/scripts/check-long-text-guide-detail-routes.mjs @@ -13,9 +13,10 @@ const rootDir = path.resolve(dirname, ".."); const expectedRoutes = { longTextCard: "/pages/ChatModule/LongTextGuideCardPreview/guide", - longTextCardSnap: "/pages/ChatModule/LongTextGuideCardPreview/poi", + longTextCardScenicSpot: "/pages/ChatModule/LongTextGuideCardPreview/poi", longTextCardRoute: "/pages/ChatModule/LongTextGuideCardPreview/route", - longTextCardScenicSpot: "/pages/ChatModule/LongTextGuideCardPreview/photo", + longTextCardSnap: "/pages/ChatModule/LongTextGuideCardPreview/photo", + longTextCardFullDoc: "/pages/ChatModule/LongTextGuideCardPreview/fullDoc", }; assert.deepEqual(DETAIL_ROUTE_BY_TYPE, expectedRoutes); @@ -38,4 +39,3 @@ for (const route of Object.values(expectedRoutes)) { `Route is not registered in src/pages.json: ${route}`, ); } - diff --git a/src/model/ChatModel.js b/src/model/ChatModel.js index 37a4483..4d9746d 100644 --- a/src/model/ChatModel.js +++ b/src/model/ChatModel.js @@ -56,8 +56,10 @@ export const CompName = { longTextCardSnap: "longTextCardSnap", longTextCardRoute: "longTextCardRoute", longTextCardScenicSpot: "longTextCardScenicSpot", + longTextCardFullDoc: "longTextCardFullDoc", // 生成合成图片 aigcPhotoGeneratorCard: "aigcPhotoGeneratorCard", + videoCard: "videoCard", }; /// 发送的指令类型 diff --git a/src/pages.json b/src/pages.json index 58b6d31..33c208b 100644 --- a/src/pages.json +++ b/src/pages.json @@ -68,6 +68,12 @@ "navigationStyle": "custom" } }, + { + "path": "pages/ChatModule/LongTextGuideCardPreview/fullDoc", + "style": { + "navigationStyle": "custom" + } + }, { "path": "pages/ChatMain/NoticeMessage/detail", "style": { diff --git a/src/pages/ChatMain/ChatMainList/index.vue b/src/pages/ChatMain/ChatMainList/index.vue index fa93094..1850de0 100644 --- a/src/pages/ChatMain/ChatMainList/index.vue +++ b/src/pages/ChatMain/ChatMainList/index.vue @@ -959,7 +959,8 @@ const isLongTextCard = (componentName) => { componentName === CompName.longTextCard || componentName === CompName.longTextCardSnap || componentName === CompName.longTextCardRoute || - componentName === CompName.longTextCardScenicSpot + componentName === CompName.longTextCardScenicSpot || + componentName === CompName.longTextCardFullDoc ); }; diff --git a/src/pages/ChatModule/LongTextGuideCardPreview/detailRoutes.mjs b/src/pages/ChatModule/LongTextGuideCardPreview/detailRoutes.mjs index bb992d4..ceb9416 100644 --- a/src/pages/ChatModule/LongTextGuideCardPreview/detailRoutes.mjs +++ b/src/pages/ChatModule/LongTextGuideCardPreview/detailRoutes.mjs @@ -3,9 +3,9 @@ export const DETAIL_ROUTE_BY_TYPE = { longTextCardScenicSpot: "/pages/ChatModule/LongTextGuideCardPreview/poi", longTextCardRoute: "/pages/ChatModule/LongTextGuideCardPreview/route", longTextCardSnap: "/pages/ChatModule/LongTextGuideCardPreview/photo", + longTextCardFullDoc: "/pages/ChatModule/LongTextGuideCardPreview/fullDoc", }; export const getLongTextGuideDetailRoute = (type) => { return DETAIL_ROUTE_BY_TYPE[type] || ""; }; - diff --git a/src/pages/ChatModule/LongTextGuideCardPreview/fullDoc.vue b/src/pages/ChatModule/LongTextGuideCardPreview/fullDoc.vue new file mode 100644 index 0000000..788d06f --- /dev/null +++ b/src/pages/ChatModule/LongTextGuideCardPreview/fullDoc.vue @@ -0,0 +1,177 @@ + + + + + + diff --git a/src/pages/ChatModule/LongTextGuideCardPreview/index.vue b/src/pages/ChatModule/LongTextGuideCardPreview/index.vue index 3a1b376..e69e6cc 100644 --- a/src/pages/ChatModule/LongTextGuideCardPreview/index.vue +++ b/src/pages/ChatModule/LongTextGuideCardPreview/index.vue @@ -70,6 +70,16 @@ const longTextCardSnap = { footer: "点击查看完整攻略", } +const longTextCardFullDoc = { + type: 'longTextCardFullDoc', + badge: "初游攻略", + badgeTone: "amber", + title: "第一次来小七孔,照着这条线走就对了", + summary: "第一次来,别犹豫,直接锁死「东门进、西门出」这条线…", + footer: "点击查看完整攻略", +} + + const item = computed(() => { switch (props.componentName) { case 'longTextCard': @@ -80,6 +90,8 @@ const item = computed(() => { return longTextCardRoute; case 'longTextCardScenicSpot': return longTextCardScenicSpot; + case 'longTextCardFullDoc': + return longTextCardFullDoc; default: return longTextCard; } diff --git a/src/pages/ChatModule/LongTextGuideCardPreview/styles/detail.scss b/src/pages/ChatModule/LongTextGuideCardPreview/styles/detail.scss index 1764faa..76c91e0 100644 --- a/src/pages/ChatModule/LongTextGuideCardPreview/styles/detail.scss +++ b/src/pages/ChatModule/LongTextGuideCardPreview/styles/detail.scss @@ -528,3 +528,185 @@ .aigc-button { background: linear-gradient(135deg, #8b5cf6, #6366f1); } + +.overview-image-card { + display: flex; + height: 160px; + margin: 4px 0 16px; + flex-direction: column; + align-items: center; + justify-content: center; + border-radius: 14px; + color: #fff; + background: linear-gradient(135deg, #1d9e75, #0f6e56); + font-size: 22px; + font-weight: 900; + line-height: 28px; + text-align: center; +} + +.overview-image-card.is-green-blue { + background: linear-gradient(135deg, #1d9e75, #185fa5); +} + +.overview-image-card.is-stone { + background: linear-gradient(135deg, #888780, #5f5e5a); +} + +.overview-image-card.is-green { + background: linear-gradient(135deg, #1d9e75, #0f6e56); +} + +.overview-image-card.is-forest { + background: linear-gradient(135deg, #639922, #3b6d11); +} + +.overview-image-subtitle { + margin-top: 8px; + color: rgba(255, 255, 255, 0.72); + font-size: 12px; + font-weight: 700; + line-height: 18px; +} + +.overview-spots-wrap { + padding: 0 16px; +} + +.overview-spot-card { + display: flex; + padding: 12px 14px; + align-items: center; + gap: 12px; + border: 1px solid #d8ebe0; + border-radius: 14px; + background: #f1f8f4; +} + +.overview-spot-index { + width: 22px; + height: 22px; + flex-shrink: 0; + border-radius: 50%; + color: #fff; + background: #0f6e56; + font-size: 11px; + font-weight: 900; + line-height: 22px; + text-align: center; +} + +.overview-spot-main { + flex: 1; + min-width: 0; +} + +.overview-spot-name { + color: #1e293b; + font-size: 14px; + font-weight: 900; + line-height: 20px; +} + +.overview-spot-tag { + margin-top: 2px; + color: #5f8a76; + font-size: 11px; + font-weight: 700; + line-height: 16px; +} + +.overview-spot-arrow { + padding: 3px 0; + color: #5dcaa5; + font-size: 16px; + font-weight: 900; + line-height: 18px; + text-align: center; +} + +.overview-combo-card { + margin: 0 16px 12px; + overflow: hidden; + border: 1px solid #fde68a; + border-radius: 18px; + background: #fff; +} + +.overview-combo-body { + display: flex; + gap: 12px; + padding: 12px; +} + +.overview-combo-cover { + display: flex; + width: 78px; + height: 78px; + flex-shrink: 0; + align-items: center; + justify-content: center; + border-radius: 12px; + color: #fff; + background: linear-gradient(135deg, #1d9e75, #185fa5); + font-size: 12px; + font-weight: 900; + line-height: 16px; + text-align: center; +} + +.overview-combo-info { + flex: 1; + min-width: 0; +} + +.overview-combo-name { + color: #1e293b; + font-size: 14px; + font-weight: 900; + line-height: 20px; +} + +.overview-combo-desc { + margin: 3px 0 6px; + color: #94a3b8; + font-size: 11px; + font-weight: 700; + line-height: 17px; +} + +.overview-combo-price { + color: #f43f5e; + font-size: 22px; + font-weight: 900; + line-height: 28px; +} + +.overview-combo-currency { + font-size: 12px; +} + +.overview-combo-original { + margin-left: 4px; + color: #cbd5e1; + font-size: 11px; + font-weight: 700; + text-decoration: line-through; +} + +.overview-combo-button { + width: 100%; + height: 40px; + padding: 0; + border: 0; + border-radius: 0; + color: #451a03; + background: #fbbf24; + font-size: 13px; + font-weight: 900; + line-height: 40px; +} + +.overview-combo-button::after { + border: 0; +} diff --git a/src/pages/ChatModule/LongTextGuideCardPreview/长文本收纳组件_5类演示.html b/src/pages/ChatModule/LongTextGuideCardPreview/长文本收纳组件_5类演示.html new file mode 100644 index 0000000..17fb509 --- /dev/null +++ b/src/pages/ChatModule/LongTextGuideCardPreview/长文本收纳组件_5类演示.html @@ -0,0 +1,775 @@ + + + + + +长文本收纳组件 · 4 类演示 + + + + +
+ + +
+
+
🐯
+ 小七 · 荔波小七孔 AI 伴游 +
+
+ 演示 + 长文本收纳组件 · 4 类 +
+

+ 点击卡片 = 折叠态展开为完整内容。
+ 展开后下半部分是「行动条」,挂载真实可点击的组件。 +

+
+ + +
+ + +
+ + +
+
+
+ 漂流攻略 + 长文本-攻略组件 +
+

下水之前,先听小七唠两句

+

+
+
+ 点击查看完整攻略 + +
+
+ + +
+
+
+ 景点故事 + 长文本-景点组件 +
+

小七孔古桥 · 走了三百年的石拱

+

+
+
+ 点击查看完整介绍 + +
+
+ + +
+
+
+ 路线指引 + 长文本-路线组件 +
+

漂完卧龙潭,顺道去鸳鸯湖

+

+
+
+ 点击查看完整路线 + +
+
+ + +
+
+
+ 拍照攻略 + 长文本-拍照组件 +
+

鸳鸯湖玻璃船,这样拍才不亏

+

+
+
+ 点击查看完整攻略 + +
+
+ + +
+
+
+ 初游攻略 + 长文本-攻略组件 · 发散模式 +
+

第一次来小七孔,这篇先看

+

+
+
+ 点击查看完整攻略 + +
+
+ +
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+ + + + + +
+ + + +