chore: prepare anxinyan release

This commit is contained in:
wushumin
2026-05-25 14:53:59 +08:00
parent 21360a6a2c
commit fa8c9015d9
26 changed files with 2124 additions and 120 deletions

View File

@@ -57,6 +57,7 @@ const productSpecItems = computed(() => {
appendSpecItem(items, "序列号/编码", product.serial_no);
for (const point of normalizedKeyPoints(result.key_points)) {
if (hasSpecItem(items, point.point_name)) continue;
appendSpecItem(items, point.point_name, point.point_value, point.point_remark);
}
@@ -92,6 +93,11 @@ function appendSpecItem(
});
}
function hasSpecItem(items: Array<{ label: string }>, label: unknown) {
const labelText = textValue(label);
return Boolean(labelText && items.some((item) => item.label === labelText));
}
function textValue(value: unknown) {
return String(value ?? "").trim();
}
@@ -276,6 +282,7 @@ onShow(() => {
</view>
<view class="report-shell">
<view class="report-shell__watermark" aria-hidden="true"></view>
<view class="report-cover">
<swiper v-if="reportImages.length" class="report-cover__swiper" indicator-dots circular>
<swiper-item v-for="item in reportImages" :key="item.file_url || item.file_id">
@@ -316,8 +323,6 @@ onShow(() => {
</view>
<view v-if="activeTab === 'product'" class="report-panel">
<view class="report-watermark" aria-hidden="true"></view>
<view class="report-result">
<view class="report-result__content">
<view class="report-result__label">{{ resultItem.label }}</view>
@@ -325,8 +330,8 @@ onShow(() => {
<view v-if="resultItem.remark" class="report-result__desc">{{ resultItem.remark }}</view>
</view>
<view class="report-seal">
<text class="report-seal__brand">ANXINYAN</text>
<text class="report-seal__main">可信</text>
<text class="report-seal__brand">安心验</text>
<text class="report-seal__main">鉴定</text>
</view>
</view>
@@ -496,6 +501,26 @@ onShow(() => {
box-shadow: 0 18rpx 48rpx rgba(31, 36, 48, 0.08);
}
.report-shell__watermark {
position: absolute;
z-index: 0;
top: 374rpx;
left: 28rpx;
right: 28rpx;
height: 560rpx;
background: url("../../static/report/report-watermark.svg") center / 100% 100% no-repeat;
opacity: 1;
pointer-events: none;
}
.report-cover,
.report-meta,
.report-tabs,
.report-panel {
position: relative;
z-index: 1;
}
.report-cover {
height: 356rpx;
margin: 28rpx 28rpx 0;
@@ -620,28 +645,14 @@ onShow(() => {
overflow: hidden;
}
.report-watermark {
position: absolute;
top: -6rpx;
left: 50%;
width: 520rpx;
height: 430rpx;
border-radius: 50%;
opacity: 0.46;
transform: translateX(-50%);
background:
repeating-radial-gradient(ellipse at center, rgba(230, 195, 79, 0.2) 0, rgba(230, 195, 79, 0.2) 2rpx, transparent 3rpx, transparent 17rpx),
repeating-conic-gradient(from 0deg, rgba(230, 195, 79, 0.12) 0deg 8deg, transparent 8deg 16deg);
pointer-events: none;
}
.report-result {
position: relative;
z-index: 1;
display: flex;
align-items: flex-start;
gap: 24rpx;
padding: 10rpx 0 30rpx;
min-height: 132rpx;
padding: 10rpx 136rpx 30rpx 0;
border-bottom: 1px solid #e5e5e5;
}
@@ -674,29 +685,57 @@ onShow(() => {
}
.report-seal {
flex: 0 0 auto;
position: absolute;
right: 2rpx;
bottom: 22rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 104rpx;
height: 104rpx;
margin-top: 2rpx;
border: 4rpx solid rgba(56, 164, 73, 0.8);
width: 106rpx;
height: 106rpx;
border: 4rpx solid rgba(40, 151, 73, 0.82);
border-radius: 999rpx;
color: #39a54b;
transform: rotate(-10deg);
background: rgba(255, 255, 255, 0.42);
color: #239245;
box-shadow: inset 0 0 0 4rpx rgba(40, 151, 73, 0.1);
transform: rotate(-9deg);
}
.report-seal::before {
position: absolute;
inset: 10rpx;
border: 2rpx solid rgba(40, 151, 73, 0.58);
border-radius: inherit;
content: "";
}
.report-seal::after {
position: absolute;
left: 50%;
bottom: 12rpx;
width: 34rpx;
height: 5rpx;
border-radius: 999rpx;
background: currentColor;
content: "";
opacity: 0.7;
transform: translateX(-50%);
}
.report-seal__brand {
font-size: 16rpx;
font-weight: 800;
position: relative;
z-index: 1;
font-size: 18rpx;
font-weight: 900;
line-height: 1;
}
.report-seal__main {
margin-top: 8rpx;
font-size: 28rpx;
position: relative;
z-index: 1;
margin-top: 9rpx;
font-size: 26rpx;
font-weight: 900;
line-height: 1;
}