chore: release updated anxinyan version
This commit is contained in:
@@ -357,6 +357,7 @@ export interface ReportDetailData {
|
||||
}>;
|
||||
};
|
||||
trace_info: {
|
||||
visible: boolean;
|
||||
nodes: Array<{
|
||||
code: "inbound" | "appraisal" | "return";
|
||||
title: string;
|
||||
@@ -377,6 +378,7 @@ export interface ReportDetailData {
|
||||
zhongjian_report_no: string;
|
||||
report_entry_admin_name: string;
|
||||
report_entered_at: string;
|
||||
trace_info_visible: boolean;
|
||||
};
|
||||
result_info: Record<string, any>;
|
||||
product_info: Record<string, any>;
|
||||
|
||||
@@ -390,6 +390,7 @@ export const reportDetailFallback: ReportDetailData = {
|
||||
],
|
||||
},
|
||||
trace_info: {
|
||||
visible: false,
|
||||
nodes: [
|
||||
{
|
||||
code: "inbound",
|
||||
@@ -426,6 +427,7 @@ export const reportDetailFallback: ReportDetailData = {
|
||||
zhongjian_report_no: "ZJ-20260418-0001",
|
||||
report_entry_admin_name: "王师傅",
|
||||
report_entered_at: "2026-04-18 18:20:00",
|
||||
trace_info_visible: false,
|
||||
},
|
||||
result_info: {
|
||||
result_status: "authentic",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<script setup lang="ts">
|
||||
import { computed, ref } from "vue";
|
||||
import { computed, ref, watch } from "vue";
|
||||
import { onLoad } from "@dcloudio/uni-app";
|
||||
import { appApi, type EvidenceAttachmentAsset, type ReportDetailData } from "../../api/app";
|
||||
import { reportDetailFallback } from "../../mocks/app";
|
||||
@@ -17,6 +17,9 @@ const antiModalVisible = ref(false);
|
||||
const antiCode = ref("");
|
||||
const antiVerifying = ref(false);
|
||||
const antiResult = ref<null | { passed: boolean; message: string }>(null);
|
||||
const imagePreviewVisible = ref(false);
|
||||
const imagePreviewUrls = ref<string[]>([]);
|
||||
const imagePreviewIndex = ref(0);
|
||||
|
||||
const reportImages = computed(() => {
|
||||
const images = detail.value.report_media?.images || [];
|
||||
@@ -41,7 +44,31 @@ const productItems = computed(() => {
|
||||
{ label: "品牌", value: detail.value.product_info.brand_name || "-" },
|
||||
];
|
||||
});
|
||||
const traceNodes = computed(() => detail.value.trace_info?.nodes || []);
|
||||
const publishTime = computed(() => detail.value.report_header.publish_time || "-");
|
||||
const resultItem = computed(() => {
|
||||
const item = productItems.value.find((entry) => entry.label.includes("结论"));
|
||||
return {
|
||||
label: item?.label || "检测结论",
|
||||
value: item?.value || detail.value.result_info.result_text || "-",
|
||||
remark: item?.remark || detail.value.result_info.result_desc || "",
|
||||
};
|
||||
});
|
||||
const productSpecItems = computed(() => {
|
||||
const items = productItems.value
|
||||
.filter((item) => !item.label.includes("结论"))
|
||||
.map((item) => ({ label: item.label, value: item.value, remark: item.remark || "" }));
|
||||
if (items.length) return items;
|
||||
|
||||
return [
|
||||
{ label: "品类", value: detail.value.product_info.category_name || "-", remark: "" },
|
||||
{ label: "品牌", value: detail.value.product_info.brand_name || "-", remark: "" },
|
||||
{ label: "颜色", value: detail.value.product_info.color || "-", remark: "" },
|
||||
{ label: "规格/尺寸", value: detail.value.product_info.size_spec || "-", remark: "" },
|
||||
{ label: "序列号/编码", value: detail.value.product_info.serial_no || "-", remark: "" },
|
||||
].filter((item) => item.value && item.value !== "-");
|
||||
});
|
||||
const traceInfoVisible = computed(() => Boolean(detail.value.trace_info?.visible || detail.value.report_header.trace_info_visible));
|
||||
const traceNodes = computed(() => (traceInfoVisible.value ? detail.value.trace_info?.nodes || [] : []));
|
||||
const zhongjianReportFiles = computed(() => detail.value.zhongjian_report_files || []);
|
||||
const zhongjianImageFiles = computed(() => zhongjianReportFiles.value.filter((item) => item.file_type === "image"));
|
||||
const zhongjianOtherFiles = computed(() => zhongjianReportFiles.value.filter((item) => item.file_type !== "image"));
|
||||
@@ -59,9 +86,23 @@ function assetDisplayName(item: EvidenceAttachmentAsset, index: number) {
|
||||
}
|
||||
|
||||
function previewImages(files: EvidenceAttachmentAsset[], current: string) {
|
||||
const urls = files.filter((item) => item.file_type === "image").map((item) => item.file_url);
|
||||
const urls = files
|
||||
.filter((item) => item.file_type === "image" && item.file_url)
|
||||
.map((item) => item.file_url);
|
||||
if (!urls.length) return;
|
||||
uni.previewImage({ urls, current });
|
||||
|
||||
const currentIndex = urls.indexOf(current);
|
||||
imagePreviewUrls.value = urls;
|
||||
imagePreviewIndex.value = currentIndex >= 0 ? currentIndex : 0;
|
||||
imagePreviewVisible.value = true;
|
||||
}
|
||||
|
||||
function closeImagePreview() {
|
||||
imagePreviewVisible.value = false;
|
||||
}
|
||||
|
||||
function handleImagePreviewChange(event: { detail?: { current?: number } }) {
|
||||
imagePreviewIndex.value = Number(event.detail?.current || 0);
|
||||
}
|
||||
|
||||
function openAsset(item: EvidenceAttachmentAsset, files: EvidenceAttachmentAsset[]) {
|
||||
@@ -209,6 +250,12 @@ function downloadPdf() {
|
||||
});
|
||||
}
|
||||
|
||||
watch(traceInfoVisible, (visible) => {
|
||||
if (!visible && activeTab.value === "trace") {
|
||||
activeTab.value = "product";
|
||||
}
|
||||
});
|
||||
|
||||
onLoad(async (options) => {
|
||||
const id = Number(options?.id || 0);
|
||||
const currentReportNo = String(options?.report_no || "");
|
||||
@@ -237,7 +284,7 @@ onLoad(async (options) => {
|
||||
<view class="app-page report-page">
|
||||
<view v-if="!pageReady && loading" class="section notice-card">
|
||||
<view class="notice-card__title">正在加载报告详情</view>
|
||||
<view class="notice-card__desc">请稍候,我们正在同步报告正文、追溯信息与 PDF 文件。</view>
|
||||
<view class="notice-card__desc">请稍候,我们正在同步报告正文与 PDF 文件。</view>
|
||||
</view>
|
||||
|
||||
<view v-else-if="!pageReady && loadError" class="section notice-card">
|
||||
@@ -247,48 +294,67 @@ onLoad(async (options) => {
|
||||
|
||||
<template v-else>
|
||||
<view class="report-shell">
|
||||
<view class="report-carousel">
|
||||
<swiper v-if="reportImages.length" class="report-carousel__swiper" indicator-dots circular>
|
||||
<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">
|
||||
<image
|
||||
class="report-carousel__image"
|
||||
class="report-cover__image"
|
||||
:src="item.thumbnail_url || item.file_url"
|
||||
mode="aspectFill"
|
||||
@click="previewImages(reportImages, item.file_url)"
|
||||
/>
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
<view v-else class="report-carousel__empty">暂无鉴定图片</view>
|
||||
<view v-else class="report-cover__empty">暂无鉴定图片</view>
|
||||
</view>
|
||||
|
||||
<view class="report-summary">
|
||||
<view class="report-summary__row">
|
||||
<text class="report-summary__label">产品名称</text>
|
||||
<text class="report-summary__value">{{ productName }}</text>
|
||||
<view class="report-meta">
|
||||
<view class="report-meta__row">
|
||||
<text class="report-meta__label">产品名称</text>
|
||||
<text class="report-meta__value">{{ productName }}</text>
|
||||
</view>
|
||||
<view class="report-summary__row">
|
||||
<text class="report-summary__label">检测机构</text>
|
||||
<text class="report-summary__value">{{ institutionName }}</text>
|
||||
<view class="report-meta__row">
|
||||
<text class="report-meta__label">检测机构</text>
|
||||
<text class="report-meta__value">{{ institutionName }}</text>
|
||||
</view>
|
||||
<view class="report-summary__tools">
|
||||
<text class="report-summary__chip">报告编号 {{ detail.report_header.report_no }}</text>
|
||||
<text class="report-summary__chip">出具日期 {{ detail.report_header.publish_time || "-" }}</text>
|
||||
<text class="report-summary__download" @click="downloadPdf">{{ downloading ? "下载中..." : "下载 PDF" }}</text>
|
||||
<view class="report-meta__row">
|
||||
<text class="report-meta__label">报告编号</text>
|
||||
<text class="report-meta__value">{{ reportNo || "-" }}</text>
|
||||
</view>
|
||||
<view class="report-meta__row report-meta__row--date">
|
||||
<text class="report-meta__label">出具日期</text>
|
||||
<text class="report-meta__download" @click="downloadPdf">{{ downloading ? "下载中" : "下载PDF" }}</text>
|
||||
<text class="report-meta__value">{{ publishTime }}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="report-tabs">
|
||||
<view :class="['report-tab', activeTab === 'product' ? 'report-tab--active' : '']" @click="activeTab = 'product'">产品信息</view>
|
||||
<view :class="['report-tab', activeTab === 'trace' ? 'report-tab--active' : '']" @click="activeTab = 'trace'">追溯信息</view>
|
||||
<view v-if="traceInfoVisible" :class="['report-tab', activeTab === 'trace' ? 'report-tab--active' : '']" @click="activeTab = 'trace'">追溯信息</view>
|
||||
</view>
|
||||
|
||||
<view v-if="activeTab === 'product'" class="report-panel">
|
||||
<view v-for="(item, index) in productItems" :key="`${item.label}-${index}`" class="product-row">
|
||||
<view class="product-row__label">{{ item.label }}</view>
|
||||
<view class="product-row__value" :class="item.label === '检测结论' ? 'product-row__value--result' : ''">
|
||||
{{ item.value || "-" }}
|
||||
<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>
|
||||
<view class="report-result__value">{{ resultItem.value || "-" }}</view>
|
||||
<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>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="product-spec">
|
||||
<view v-for="(item, index) in productSpecItems" :key="`${item.label}-${index}`" class="product-spec__row">
|
||||
<view class="product-spec__label">{{ item.label }}</view>
|
||||
<view class="product-spec__line"></view>
|
||||
<view class="product-spec__value">{{ item.value || "-" }}</view>
|
||||
<view v-if="item.remark" class="product-spec__remark">{{ item.remark }}</view>
|
||||
</view>
|
||||
<view v-if="item.remark" class="product-row__remark">{{ item.remark }}</view>
|
||||
</view>
|
||||
|
||||
<view v-if="zhongjianReportFiles.length" class="inline-section">
|
||||
@@ -317,7 +383,8 @@ onLoad(async (options) => {
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view v-else class="report-panel">
|
||||
<view v-else-if="traceInfoVisible" class="report-panel report-panel--trace">
|
||||
<view v-if="traceNodes.length === 0" class="trace-empty">暂无追溯信息</view>
|
||||
<view v-for="node in traceNodes" :key="node.code" class="trace-node">
|
||||
<view class="trace-node__head">
|
||||
<view>
|
||||
@@ -353,6 +420,24 @@ onLoad(async (options) => {
|
||||
<view class="btn btn--primary" @click="openAntiModal">防伪查询</view>
|
||||
</view>
|
||||
|
||||
<view v-if="imagePreviewVisible" class="image-preview-mask" @click="closeImagePreview">
|
||||
<view class="image-preview__close" @click.stop="closeImagePreview">×</view>
|
||||
<swiper
|
||||
class="image-preview__swiper"
|
||||
:current="imagePreviewIndex"
|
||||
:circular="imagePreviewUrls.length > 1"
|
||||
@change="handleImagePreviewChange"
|
||||
@click.stop
|
||||
>
|
||||
<swiper-item v-for="url in imagePreviewUrls" :key="url" class="image-preview__item">
|
||||
<image class="image-preview__image" :src="url" mode="aspectFit" />
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
<view v-if="imagePreviewUrls.length > 1" class="image-preview__counter">
|
||||
{{ imagePreviewIndex + 1 }} / {{ imagePreviewUrls.length }}
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view v-if="antiModalVisible" class="anti-modal-mask" @click="closeAntiModal">
|
||||
<view class="anti-modal" @click.stop>
|
||||
<view class="anti-modal__title">防伪查询</view>
|
||||
@@ -388,115 +473,121 @@ onLoad(async (options) => {
|
||||
|
||||
<style scoped>
|
||||
.report-page {
|
||||
padding-bottom: 148rpx;
|
||||
background: #eef6ff;
|
||||
width: 100vw;
|
||||
max-width: 100vw;
|
||||
box-sizing: border-box;
|
||||
overflow-x: hidden;
|
||||
padding: 28rpx 32rpx 170rpx;
|
||||
background: #f1f3f6;
|
||||
color: #3c3f45;
|
||||
}
|
||||
|
||||
.report-shell {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
border: 1px solid rgba(33, 94, 160, 0.12);
|
||||
border-radius: 8rpx;
|
||||
background: rgba(255, 255, 255, 0.96);
|
||||
box-shadow: 0 18rpx 42rpx rgba(30, 76, 130, 0.12);
|
||||
border-radius: 28rpx;
|
||||
background: #ffffff;
|
||||
box-shadow: 0 18rpx 48rpx rgba(31, 36, 48, 0.08);
|
||||
}
|
||||
|
||||
.report-carousel {
|
||||
margin: 0 24rpx;
|
||||
height: 392rpx;
|
||||
.report-cover {
|
||||
height: 356rpx;
|
||||
margin: 28rpx 28rpx 0;
|
||||
overflow: hidden;
|
||||
background: #eaf0f6;
|
||||
border-radius: 10rpx;
|
||||
background: #e8eaee;
|
||||
}
|
||||
|
||||
.report-carousel__swiper,
|
||||
.report-carousel__image,
|
||||
.report-carousel__empty {
|
||||
.report-cover__swiper,
|
||||
.report-cover__image,
|
||||
.report-cover__empty {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.report-carousel__image {
|
||||
.report-cover__image {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.report-carousel__empty {
|
||||
.report-cover__empty {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--color-text-muted);
|
||||
color: #8c919b;
|
||||
font-size: var(--font-size-sm);
|
||||
}
|
||||
|
||||
.report-summary {
|
||||
padding: 34rpx 40rpx 22rpx;
|
||||
.report-meta {
|
||||
padding: 34rpx 28rpx 12rpx;
|
||||
}
|
||||
|
||||
.report-summary__row {
|
||||
.report-meta__row {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
gap: 20rpx;
|
||||
align-items: flex-start;
|
||||
gap: 18rpx;
|
||||
min-width: 0;
|
||||
min-height: 48rpx;
|
||||
}
|
||||
|
||||
.report-summary__row + .report-summary__row {
|
||||
margin-top: 24rpx;
|
||||
.report-meta__row + .report-meta__row {
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
|
||||
.report-summary__label {
|
||||
flex: 0 0 128rpx;
|
||||
color: var(--color-text-muted);
|
||||
font-size: 30rpx;
|
||||
.report-meta__label {
|
||||
flex: 0 0 138rpx;
|
||||
display: block;
|
||||
color: #7d828a;
|
||||
font-size: 28rpx;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.report-summary__value {
|
||||
.report-meta__value {
|
||||
flex: 1;
|
||||
display: block;
|
||||
min-width: 0;
|
||||
color: var(--color-heading);
|
||||
font-size: 34rpx;
|
||||
font-weight: 900;
|
||||
color: #44474d;
|
||||
font-size: 28rpx;
|
||||
font-weight: 700;
|
||||
line-height: 1.35;
|
||||
word-break: break-word;
|
||||
text-align: right;
|
||||
white-space: normal;
|
||||
word-break: break-all;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.report-summary__tools {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 12rpx;
|
||||
margin-top: 28rpx;
|
||||
.report-meta__row--date .report-meta__value {
|
||||
flex: 0 1 auto;
|
||||
margin-left: auto;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
.report-summary__chip,
|
||||
.report-summary__download {
|
||||
padding: 10rpx 14rpx;
|
||||
.report-meta__download {
|
||||
flex: 0 0 auto;
|
||||
display: block;
|
||||
min-height: 38rpx;
|
||||
padding: 0 16rpx;
|
||||
border: 1px solid rgba(221, 179, 47, 0.74);
|
||||
border-radius: 6rpx;
|
||||
font-size: 22rpx;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.report-summary__chip {
|
||||
background: #f3f7fb;
|
||||
color: var(--color-text-muted);
|
||||
}
|
||||
|
||||
.report-summary__download {
|
||||
border: 1px solid var(--color-accent);
|
||||
background: #fff9e6;
|
||||
color: var(--color-accent);
|
||||
font-weight: 800;
|
||||
font-size: 22rpx;
|
||||
font-weight: 700;
|
||||
line-height: 36rpx;
|
||||
}
|
||||
|
||||
.report-tabs {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 112rpx;
|
||||
padding: 10rpx 40rpx 28rpx;
|
||||
gap: 104rpx;
|
||||
padding: 26rpx 40rpx 34rpx;
|
||||
}
|
||||
|
||||
.report-tab {
|
||||
position: relative;
|
||||
color: #8b929d;
|
||||
font-size: 34rpx;
|
||||
font-weight: 800;
|
||||
color: #8e9298;
|
||||
font-size: 32rpx;
|
||||
font-weight: 700;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
@@ -507,9 +598,9 @@ onLoad(async (options) => {
|
||||
.report-tab--active::after {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
bottom: -8rpx;
|
||||
width: 42rpx;
|
||||
height: 8rpx;
|
||||
bottom: -10rpx;
|
||||
width: 44rpx;
|
||||
height: 6rpx;
|
||||
border-radius: 999rpx;
|
||||
background: var(--color-accent);
|
||||
content: "";
|
||||
@@ -517,63 +608,185 @@ onLoad(async (options) => {
|
||||
}
|
||||
|
||||
.report-panel {
|
||||
position: relative;
|
||||
min-height: 440rpx;
|
||||
padding: 18rpx 40rpx 46rpx;
|
||||
padding: 18rpx 28rpx 48rpx;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.product-row {
|
||||
padding: 22rpx 0;
|
||||
border-bottom: 1px solid rgba(104, 121, 141, 0.14);
|
||||
.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;
|
||||
}
|
||||
|
||||
.product-row__label {
|
||||
color: var(--color-text-muted);
|
||||
font-size: 30rpx;
|
||||
line-height: 1.4;
|
||||
.report-result {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 24rpx;
|
||||
padding: 10rpx 0 30rpx;
|
||||
border: 0;
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
border-radius: 0;
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.product-row__value {
|
||||
margin-top: 10rpx;
|
||||
color: var(--color-heading);
|
||||
font-size: 32rpx;
|
||||
.report-result__content {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.report-result__label {
|
||||
color: #3d3f44;
|
||||
font-size: 28rpx;
|
||||
font-weight: 800;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.report-result__value {
|
||||
margin-top: 14rpx;
|
||||
color: #e04135;
|
||||
font-size: 38rpx;
|
||||
font-weight: 900;
|
||||
line-height: 1.4;
|
||||
word-break: break-word;
|
||||
line-height: 1.22;
|
||||
letter-spacing: 0;
|
||||
}
|
||||
|
||||
.product-row__value--result {
|
||||
color: #d83b4c;
|
||||
}
|
||||
|
||||
.product-row__remark {
|
||||
margin-top: 8rpx;
|
||||
color: var(--color-text-muted);
|
||||
.report-result__desc {
|
||||
margin-top: 10rpx;
|
||||
color: #6f747c;
|
||||
font-size: 24rpx;
|
||||
line-height: 1.5;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.report-seal {
|
||||
flex: 0 0 auto;
|
||||
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);
|
||||
border-radius: 999rpx;
|
||||
color: #39a54b;
|
||||
transform: rotate(-10deg);
|
||||
}
|
||||
|
||||
.report-seal__brand {
|
||||
font-size: 16rpx;
|
||||
font-weight: 800;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.report-seal__main {
|
||||
margin-top: 8rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: 900;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.product-spec {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
padding-top: 20rpx;
|
||||
}
|
||||
|
||||
.product-spec__row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 10rpx;
|
||||
min-height: 54rpx;
|
||||
}
|
||||
|
||||
.product-spec__label {
|
||||
flex: 0 0 auto;
|
||||
display: block;
|
||||
color: #858991;
|
||||
font-size: 24rpx;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.product-spec__line {
|
||||
flex: 1;
|
||||
min-width: 32rpx;
|
||||
height: 1px;
|
||||
border-bottom: 1px dotted #b9bdc4;
|
||||
}
|
||||
|
||||
.product-spec__value {
|
||||
flex: 0 1 auto;
|
||||
display: block;
|
||||
max-width: 58%;
|
||||
color: #5b5f67;
|
||||
font-size: 24rpx;
|
||||
font-weight: 700;
|
||||
line-height: 1.4;
|
||||
text-align: right;
|
||||
word-break: break-all;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.product-spec__remark {
|
||||
flex-basis: 100%;
|
||||
display: block;
|
||||
margin: -2rpx 0 12rpx 0;
|
||||
color: #8b9098;
|
||||
font-size: 22rpx;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.inline-section {
|
||||
margin-top: 30rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-top: 32rpx;
|
||||
padding-top: 24rpx;
|
||||
border-top: 1px solid #ececec;
|
||||
}
|
||||
|
||||
.inline-section__title {
|
||||
color: var(--color-heading);
|
||||
font-size: 30rpx;
|
||||
font-weight: 900;
|
||||
color: #3f4248;
|
||||
font-size: 28rpx;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.report-panel--trace {
|
||||
padding-top: 2rpx;
|
||||
}
|
||||
|
||||
.trace-empty {
|
||||
padding: 58rpx 0;
|
||||
color: #8b9098;
|
||||
font-size: 26rpx;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.trace-node {
|
||||
position: relative;
|
||||
padding: 24rpx 0 26rpx 34rpx;
|
||||
padding: 26rpx 0 28rpx 38rpx;
|
||||
}
|
||||
|
||||
.trace-node::before {
|
||||
position: absolute;
|
||||
left: 8rpx;
|
||||
top: 34rpx;
|
||||
bottom: -20rpx;
|
||||
left: 9rpx;
|
||||
top: 38rpx;
|
||||
bottom: -22rpx;
|
||||
width: 2rpx;
|
||||
background: #d9e5f2;
|
||||
background: #e4e0d3;
|
||||
content: "";
|
||||
}
|
||||
|
||||
@@ -584,7 +797,7 @@ onLoad(async (options) => {
|
||||
.trace-node::after {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 34rpx;
|
||||
top: 36rpx;
|
||||
width: 18rpx;
|
||||
height: 18rpx;
|
||||
border-radius: 999rpx;
|
||||
@@ -595,28 +808,28 @@ onLoad(async (options) => {
|
||||
.trace-node__head {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
gap: 18rpx;
|
||||
gap: 20rpx;
|
||||
}
|
||||
|
||||
.trace-node__title {
|
||||
color: var(--color-heading);
|
||||
font-size: 30rpx;
|
||||
font-weight: 900;
|
||||
color: #3f4248;
|
||||
font-size: 28rpx;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.trace-node__time,
|
||||
.trace-node__empty {
|
||||
margin-top: 8rpx;
|
||||
color: var(--color-text-muted);
|
||||
font-size: 24rpx;
|
||||
color: #8b9098;
|
||||
font-size: 23rpx;
|
||||
}
|
||||
|
||||
.trace-node__status {
|
||||
align-self: flex-start;
|
||||
padding: 8rpx 12rpx;
|
||||
border-radius: 6rpx;
|
||||
background: #f3f5f8;
|
||||
color: var(--color-text-muted);
|
||||
background: #f5f2e9;
|
||||
color: #9f8433;
|
||||
font-size: 22rpx;
|
||||
font-weight: 800;
|
||||
}
|
||||
@@ -629,7 +842,7 @@ onLoad(async (options) => {
|
||||
.asset-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
gap: 14rpx;
|
||||
gap: 12rpx;
|
||||
margin-top: 18rpx;
|
||||
}
|
||||
|
||||
@@ -637,9 +850,9 @@ onLoad(async (options) => {
|
||||
position: relative;
|
||||
aspect-ratio: 1;
|
||||
overflow: hidden;
|
||||
border: 1px solid rgba(104, 121, 141, 0.16);
|
||||
border: 1px solid rgba(127, 119, 94, 0.16);
|
||||
border-radius: 8rpx;
|
||||
background: #f4f7fa;
|
||||
background: #f5f3ee;
|
||||
}
|
||||
|
||||
.asset-tile__image {
|
||||
@@ -656,7 +869,7 @@ onLoad(async (options) => {
|
||||
height: 100%;
|
||||
color: var(--color-accent);
|
||||
font-size: 24rpx;
|
||||
font-weight: 900;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.asset-tile__play {
|
||||
@@ -686,10 +899,10 @@ onLoad(async (options) => {
|
||||
gap: 16rpx;
|
||||
padding: 18rpx;
|
||||
border-radius: 8rpx;
|
||||
background: #f6f8fb;
|
||||
color: var(--color-heading);
|
||||
background: #faf8f1;
|
||||
color: #3f4248;
|
||||
font-size: 26rpx;
|
||||
font-weight: 800;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.asset-list__type {
|
||||
@@ -700,6 +913,92 @@ onLoad(async (options) => {
|
||||
.report-actions {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 28rpx;
|
||||
width: 100vw;
|
||||
box-sizing: border-box;
|
||||
padding: 22rpx 32rpx calc(22rpx + env(safe-area-inset-bottom));
|
||||
background: rgba(241, 243, 246, 0.96);
|
||||
border-top: 0;
|
||||
box-shadow: 0 -10rpx 34rpx rgba(31, 36, 48, 0.05);
|
||||
}
|
||||
|
||||
.report-actions .btn {
|
||||
min-width: 0;
|
||||
min-height: 76rpx;
|
||||
border-radius: 999rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: 700;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.report-actions .btn--secondary {
|
||||
border: 0;
|
||||
background: #ffffff;
|
||||
color: #4f535a;
|
||||
}
|
||||
|
||||
.report-actions .btn--primary {
|
||||
background: #dfb733;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.image-preview-mask {
|
||||
position: fixed;
|
||||
z-index: 200;
|
||||
inset: 0;
|
||||
background: rgba(0, 0, 0, 0.88);
|
||||
touch-action: none;
|
||||
}
|
||||
|
||||
.image-preview__swiper {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.image-preview__item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.image-preview__image {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.image-preview__close {
|
||||
position: fixed;
|
||||
z-index: 201;
|
||||
top: calc(110rpx + env(safe-area-inset-top));
|
||||
right: 34rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 72rpx;
|
||||
height: 72rpx;
|
||||
color: #ffffff;
|
||||
font-size: 72rpx;
|
||||
font-weight: 300;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.image-preview__counter {
|
||||
position: fixed;
|
||||
z-index: 201;
|
||||
left: 50%;
|
||||
bottom: calc(42rpx + env(safe-area-inset-bottom));
|
||||
min-width: 96rpx;
|
||||
padding: 10rpx 22rpx;
|
||||
border-radius: 999rpx;
|
||||
background: rgba(0, 0, 0, 0.42);
|
||||
color: #ffffff;
|
||||
font-size: 24rpx;
|
||||
line-height: 1.3;
|
||||
text-align: center;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
.anti-modal-mask {
|
||||
@@ -710,19 +1009,19 @@ onLoad(async (options) => {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 48rpx;
|
||||
background: rgba(13, 30, 48, 0.46);
|
||||
background: rgba(31, 36, 48, 0.42);
|
||||
}
|
||||
|
||||
.anti-modal {
|
||||
width: 100%;
|
||||
max-width: 620rpx;
|
||||
padding: 34rpx;
|
||||
border-radius: 8rpx;
|
||||
border-radius: 20rpx;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.anti-modal__title {
|
||||
color: var(--color-heading);
|
||||
color: #2f3238;
|
||||
font-size: 36rpx;
|
||||
font-weight: 900;
|
||||
line-height: 1.35;
|
||||
@@ -730,7 +1029,7 @@ onLoad(async (options) => {
|
||||
|
||||
.anti-modal__desc {
|
||||
margin-top: 12rpx;
|
||||
color: var(--color-text-muted);
|
||||
color: #7e838b;
|
||||
font-size: 26rpx;
|
||||
line-height: 1.5;
|
||||
}
|
||||
@@ -742,7 +1041,7 @@ onLoad(async (options) => {
|
||||
.anti-result {
|
||||
margin-top: 20rpx;
|
||||
padding: 18rpx;
|
||||
border-radius: 8rpx;
|
||||
border-radius: 10rpx;
|
||||
background: #f7f8fa;
|
||||
}
|
||||
|
||||
@@ -755,14 +1054,14 @@ onLoad(async (options) => {
|
||||
}
|
||||
|
||||
.anti-result__title {
|
||||
color: var(--color-heading);
|
||||
color: #2f3238;
|
||||
font-size: 28rpx;
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
.anti-result__desc {
|
||||
margin-top: 8rpx;
|
||||
color: var(--color-text-muted);
|
||||
color: #7e838b;
|
||||
font-size: 24rpx;
|
||||
line-height: 1.5;
|
||||
}
|
||||
@@ -776,9 +1075,9 @@ onLoad(async (options) => {
|
||||
|
||||
.anti-modal__button {
|
||||
height: 82rpx;
|
||||
border-radius: 8rpx;
|
||||
border-radius: 999rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: 900;
|
||||
font-weight: 800;
|
||||
line-height: 82rpx;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user