diff --git a/scripts/test-ParsedValueView-strict.mjs b/scripts/test-ParsedValueView-strict.mjs
index 140c5f8..35b1ce4 100644
--- a/scripts/test-ParsedValueView-strict.mjs
+++ b/scripts/test-ParsedValueView-strict.mjs
@@ -6,6 +6,10 @@ const source = await readFile(
resolve("src/pages/ChatMain/ChatLongAnswer/ParsedValueView.vue"),
"utf8"
);
+const styleSource = await readFile(
+ resolve("src/pages/ChatMain/ChatLongAnswer/styles/ParsedValueView.scss"),
+ "utf8"
+);
const forbiddenCompatibilitySnippets = [
"valueObj.image_url",
@@ -80,6 +84,52 @@ for (const snippet of requiredStrictRenderingSnippets) {
);
}
+const requiredSingleCommodityOverviewSnippets = [
+ ':scroll-x="!isSingleCommodity"',
+ "'overview-combo-card': isSingleCommodity",
+ 'v-if="isSingleCommodity"',
+ 'class="overview-combo-body"',
+ 'class="overview-combo-cover"',
+ 'class="overview-combo-info"',
+ 'class="overview-combo-name"',
+ 'class="overview-combo-desc"',
+ 'class="overview-combo-price"',
+ 'class="overview-combo-currency"',
+ 'class="overview-combo-button"',
+];
+
+for (const snippet of requiredSingleCommodityOverviewSnippets) {
+ assert.equal(
+ source.includes(snippet),
+ true,
+ `ParsedValueView single commodity should use overview combo layout: ${snippet}`
+ );
+}
+
+const requiredSingleCommodityOverviewStyleSnippets = [
+ ".overview-combo-card",
+ ".overview-combo-body",
+ "display: flex;",
+ ".overview-combo-cover",
+ "width: 78px;",
+ "height: 78px;",
+ ".overview-combo-info",
+ ".overview-combo-name",
+ ".overview-combo-desc",
+ ".overview-combo-price",
+ ".overview-combo-currency",
+ ".overview-combo-button",
+ "height: 40px;",
+];
+
+for (const snippet of requiredSingleCommodityOverviewStyleSnippets) {
+ assert.equal(
+ styleSource.includes(snippet),
+ true,
+ `ParsedValueView single commodity should define overview combo style: ${snippet}`
+ );
+}
+
const removedInnerSpecialEntrySnippets = [
"createSpecialFieldEntry",
"entry.type === 'question-suggest'",
diff --git a/src/pages/ChatMain/ChatLongAnswer/ParsedValueView.vue b/src/pages/ChatMain/ChatLongAnswer/ParsedValueView.vue
index 7f6ce02..c58b964 100644
--- a/src/pages/ChatMain/ChatLongAnswer/ParsedValueView.vue
+++ b/src/pages/ChatMain/ChatLongAnswer/ParsedValueView.vue
@@ -29,39 +29,71 @@
相关票务
-
+
-
-
-
- {{ commodity.commodity_tag }}
-
-
- {{ commodity.commodity_name }}
-
-
- ¥{{ commodity.commodity_price }}
+
+
+
+
+
+ {{ commodity.commodity_name }}
+
+
+ {{ commodity.commodity_tag }}
+
+
+ ¥{{ commodity.commodity_price }}
+
+
-
+
+
+
+
+
+
+ {{ commodity.commodity_tag }}
+
+
+ {{ commodity.commodity_name }}
+
+
+ ¥{{ commodity.commodity_price }}
+
+
+
+
@@ -307,11 +339,11 @@ const getCommodityItems = (value) => {
return value
.filter((item) => isObjectValue(item))
.map((commodity) => ({
- commodity_id: toTrimmedText(commodity.commodity_id),
- commodity_name: toTrimmedText(commodity.commodity_name),
- commodity_price: toTrimmedText(commodity.commodity_price),
- commodity_tag: toTrimmedText(commodity.commodity_tag),
- commodity_photo: toTrimmedText(commodity.commodity_photo),
+ commodity_id: toTrimmedText(commodity.commodity_id || commodity.commodityId),
+ commodity_name: toTrimmedText(commodity.commodity_name || commodity.commodityName),
+ commodity_price: toTrimmedText(commodity.commodity_price || commodity.commodityPrice),
+ commodity_tag: toTrimmedText(commodity.commodity_tag || commodity.commodityTag),
+ commodity_photo: toTrimmedText(commodity.commodity_photo || commodity.commodityIcon),
}))
.filter((commodity) => hasDisplayValue(commodity));
};
diff --git a/src/pages/ChatMain/ChatLongAnswer/styles/ParsedValueView.scss b/src/pages/ChatMain/ChatLongAnswer/styles/ParsedValueView.scss
index 65ba076..14bdc58 100644
--- a/src/pages/ChatMain/ChatLongAnswer/styles/ParsedValueView.scss
+++ b/src/pages/ChatMain/ChatLongAnswer/styles/ParsedValueView.scss
@@ -222,6 +222,85 @@
border: 0;
}
+.overview-combo-card {
+ width: 100%;
+ border-color: #0CCD58;
+ border-radius: 18px;
+ box-shadow: none;
+}
+
+.overview-combo-body {
+ display: flex;
+ gap: 12px;
+ padding: 12px;
+ white-space: normal;
+}
+
+.overview-combo-cover {
+ display: block;
+ width: 78px;
+ height: 78px;
+ flex-shrink: 0;
+ border-radius: 12px;
+ background: linear-gradient(135deg, #1d9e75, #185fa5);
+}
+
+.overview-combo-info {
+ flex: 1;
+ min-width: 0;
+}
+
+.overview-combo-name {
+ overflow: hidden;
+ color: #1e293b;
+ display: -webkit-box;
+ font-size: 14px;
+ font-weight: 900;
+ line-height: 20px;
+ text-overflow: ellipsis;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+}
+
+.overview-combo-desc {
+ margin: 3px 0 6px;
+ overflow: hidden;
+ color: #94a3b8;
+ font-size: 11px;
+ font-weight: 700;
+ line-height: 17px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.overview-combo-price {
+ color: #f43f5e;
+ font-size: 22px;
+ font-weight: 900;
+ line-height: 28px;
+}
+
+.overview-combo-currency {
+ font-size: 12px;
+}
+
+.overview-combo-button {
+ width: 100%;
+ height: 40px;
+ padding: 0;
+ border: 0;
+ border-radius: 0;
+ color: #FFFFFF;
+ background: #0CCD58;
+ font-size: 13px;
+ font-weight: 900;
+ line-height: 40px;
+}
+
+.overview-combo-button::after {
+ border: 0;
+}
+
.photo-card-swiper {
width: 100%;
height: 228px;