| | |
| | | <template> |
| | | <view class="list"> |
| | | <div class="inspection-report"> |
| | | <!-- 基本信息模块 --> |
| | | <wd-row> |
| | | <text class="title">{{ "基本信息" }}</text> |
| | | <wd-col :span="24"> |
| | | <wd-form-item label="日期" |
| | | prop="recordDate">{{ formatDate(recordData.fixedInfo?.recordDate)}}</wd-form-item> |
| | | <wd-form-item label="班次" |
| | | prop="workShift">{{formatValue(recordData.fixedInfo?.workShift)}}</wd-form-item> |
| | | <wd-form-item label="型号规格" prop="model">{{ formatValue(recordData.fixedInfo?.model)}}</wd-form-item> |
| | | <wd-form-item label="成品线盘号" |
| | | prop="systemNo">{{ formatValue(recordData.fixedInfo?.systemNo)}}</wd-form-item> |
| | | <wd-form-item label="记录人" |
| | | prop="createUserName">{{ formatValue(recordData.fixedInfo?.createUserName) }}</wd-form-item> |
| | | <wd-form-item label="机台" |
| | | prop="deviceModel">{{ formatValue(recordData.fixedInfo?.deviceModel)}}</wd-form-item> |
| | | <wd-form-item label="产品类别" |
| | | prop="productType">{{ formatValue(recordData.fixedInfo?.productType)}}</wd-form-item> |
| | | <wd-form-item label="生产长度" |
| | | prop="actuallyLength">{{ formatValue(recordData.fixedInfo?.actuallyLength, "m")}}</wd-form-item> |
| | | <wd-form-item label="张力设置" |
| | | prop="twistTension">{{ formatValue(recordData.fixedInfo?.twistTension, "N/m") }}</wd-form-item> |
| | | <wd-form-item label="绞制外径" |
| | | prop="twistDiameter">{{ formatValue(recordData.inspectionResult?.twistDiameter, "mm") }}</wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <!-- 自检记录详情模块 --> |
| | | <wd-row> |
| | | <text class="title">{{ "自检记录详情" }}</text> |
| | | <wd-col :span="24"> |
| | | <wd-form-item label="记录位置" |
| | | prop="recordPosition">{{ recordData.structureInfo?.recordPosition || "-" }}</wd-form-item> |
| | | <wd-form-item label="记录人" |
| | | prop="createUserName">{{ recordData.structureInfo?.createUserName || "-"}}</wd-form-item> |
| | | <wd-form-item label="状态" prop="status"> |
| | | <wd-tag custom-class="space" |
| | | :type="getStatusType(recordData.structureInfo?.status)">{{ getStatusText(recordData.structureInfo?.status) }}</wd-tag> |
| | | </wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <!-- 结构检查模块 --> |
| | | <wd-row> |
| | | <text class="title">{{ "结构检查" }}</text> |
| | | <wd-col :span="24"> |
| | | <wd-form-item label="成品结构" |
| | | prop="inspectStructure">{{recordData.structureInfo.structureRecordResult.inspectStructure.structureFormula || "-"}}</wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <wd-row v-if="recordData.structureInfo.structureRecordResult.inspectStructure.structureItems"> |
| | | <text class="title">{{ "结构标准值和实测" }}</text> |
| | | <wd-col :span="24" |
| | | v-for="(item, index) in recordData.structureInfo.structureRecordResult.inspectStructure.structureItems" |
| | | :key="index" style="padding-bottom: 10px;"> |
| | | <wd-form-item :label="formatValue(item.structureName)" label-width="400rpx" |
| | | style="color: red;"></wd-form-item> |
| | | <wd-form-item label="标准值" prop="structureValue">{{formatValue(item.structureValue)}}</wd-form-item> |
| | | <wd-form-item label="实测根数" |
| | | prop="actualValue1">{{formatValue(item.actualValue1, "根")}}</wd-form-item> |
| | | <wd-form-item label="实测直径" |
| | | prop="actualValue2">{{formatValue(item.actualValue2, "mm")}}</wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <!-- 绞线工艺质量控制模块 --> |
| | | <wd-row v-if="recordData.structureInfo?.structureRecordResult?.inspectTwist"> |
| | | <text class="title">{{ "绞线工艺质量控制" }}</text> |
| | | <wd-col :span="24" v-for="(item, index) in recordData.structureInfo.structureRecordResult.inspectTwist" |
| | | :key="index" style="padding-bottom: 10px;"> |
| | | <wd-form-item :label="formatValue(item.twistName)" label-width="400rpx" |
| | | style="color: red;"></wd-form-item> |
| | | <wd-form-item label="绞向" prop="direction">{{ formatValue(item.direction) }}</wd-form-item> |
| | | <wd-form-item label="节距" prop="pitch">{{ formatValue(item.pitch, "mm") }}</wd-form-item> |
| | | <wd-form-item label="节径比" prop="pitchRatio">{{ formatValue(item.pitchRatio) }}</wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <!-- 外观和结论模块 --> |
| | | <wd-row> |
| | | <text class="title">{{ "外观和结论" }}</text> |
| | | <wd-col :span="24"> |
| | | <wd-form-item label="结论" |
| | | prop="conclusion">{{formatValue(recordData.structureInfo.structureRecordResult.conclusion)}}</wd-form-item> |
| | | <wd-form-item label="产品外观" |
| | | prop="productAppearance">{{formatProductAppearance(recordData.structureInfo.structureRecordResult.productAppearance)}}</wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <!-- 巡检结果模块 --> |
| | | <wd-row> |
| | | <text class="title">{{ "巡检结果" }}</text> |
| | | <wd-col :span="24"> |
| | | <wd-form-item label="样品是否齐全" |
| | | prop="sampleComplete">{{formatValue(recordData.inspectionResult?.sampleComplete)}}</wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <!-- 附件模块 --> |
| | | <wd-row class="attachment-section"> |
| | | <text class="title">{{ "附件" }}</text> |
| | | <!-- 用 flex 容器包裹图片列,实现自动换行 --> |
| | | <view class="attachment-grid"> |
| | | <wd-col v-for="(file, index) in recordData.structureInfo.files" :key="index" |
| | | class="attachment-item"> |
| | | <wd-img :width="80" :height="80" :src="file.url" @click="previewImage(file.url)"> |
| | | <template #error> |
| | | <view class="error-wrap">加载失败</view> |
| | | </template> |
| | | <template #loading> |
| | | <view class="loading-wrap"> |
| | | <wd-loading /> |
| | | </view> |
| | | </template> |
| | | </wd-img> |
| | | </wd-col> |
| | | </view> |
| | | </wd-row> |
| | | </div> |
| | | <wd-popup v-model="show" custom-style="border-radius:32rpx;" @close="handleClose"> |
| | | <div class="image-preview"> |
| | | <img :src="previewImageUrl" alt="预览图片" style="width: 100%; height: auto" /> |
| | | </div> |
| | | </wd-popup> |
| | | </view> |
| | | <view class="fixed-header"> |
| | | <view class="header-container"> |
| | | <wd-button |
| | | icon="file-add" |
| | | :round="false" |
| | | size="small" |
| | | custom-class="add_btn" |
| | | @click="editList" |
| | | v-if="!isEdit" |
| | | > |
| | | 编辑 |
| | | </wd-button> |
| | | <wd-button |
| | | icon="close" |
| | | type="info" |
| | | :round="false" |
| | | size="small" |
| | | custom-class="add_btn" |
| | | @click="close" |
| | | v-if="isEdit" |
| | | > |
| | | 取消 |
| | | </wd-button> |
| | | <wd-button |
| | | icon="check" |
| | | type="success" |
| | | :round="false" |
| | | size="small" |
| | | custom-class="add_btn" |
| | | @click="saveList" |
| | | v-if="isEdit" |
| | | > |
| | | 保存 |
| | | </wd-button> |
| | | <view class="placeholder"></view> |
| | | <view class="scan-wrapper" @click="openScan"> |
| | | <wd-icon name="scan" size="24px" color="#0D867F"></wd-icon> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="list"> |
| | | <!-- 基本信息模块 --> |
| | | <wd-row> |
| | | <view style="margin: 10rpx"> |
| | | <text class="title">{{ "基本信息" }}</text> |
| | | </view> |
| | | <wd-col :span="24"> |
| | | <wd-form-item label="日期" prop="recordDate"> |
| | | {{ formatDate(recordData.fixedInfo?.recordDate) }} |
| | | </wd-form-item> |
| | | <wd-form-item label="班次" prop="workShift"> |
| | | {{ formatValue(recordData.fixedInfo?.workShift) }} |
| | | </wd-form-item> |
| | | <wd-form-item label="型号规格" prop="model"> |
| | | {{ formatValue(recordData.fixedInfo?.model) }} |
| | | </wd-form-item> |
| | | <wd-form-item label="成品线盘号" prop="systemNo"> |
| | | {{ formatValue(recordData.fixedInfo?.systemNo) }} |
| | | </wd-form-item> |
| | | <wd-form-item label="记录人" prop="createUserName"> |
| | | {{ formatValue(recordData.fixedInfo?.createUserName) }} |
| | | </wd-form-item> |
| | | <wd-form-item label="机台" prop="deviceModel"> |
| | | {{ formatValue(recordData.fixedInfo?.deviceModel) }} |
| | | </wd-form-item> |
| | | <wd-form-item label="产品类别" prop="productType"> |
| | | {{ formatValue(recordData.fixedInfo?.productType) }} |
| | | </wd-form-item> |
| | | <wd-form-item label="生产长度" prop="actuallyLength"> |
| | | {{ formatValue(recordData.fixedInfo?.actuallyLength, "m") }} |
| | | </wd-form-item> |
| | | <wd-form-item label="张力设置" prop="twistTension"> |
| | | {{ formatValue(recordData.fixedInfo?.twistTension, "N/m") }} |
| | | </wd-form-item> |
| | | <wd-form-item label="绞制外径" prop="twistDiameter"> |
| | | {{ formatValue(recordData.inspectionResult?.twistDiameter, "mm") }} |
| | | </wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <!-- 自检记录详情模块 --> |
| | | <wd-row> |
| | | <view style="margin: 10rpx"> |
| | | <text class="title">{{ "自检记录详情" }}</text> |
| | | </view> |
| | | <wd-col :span="24"> |
| | | <wd-form-item label="记录位置" prop="recordPosition"> |
| | | {{ recordData.structureInfo?.recordPosition || "-" }} |
| | | </wd-form-item> |
| | | <wd-form-item label="记录人" prop="createUserName"> |
| | | {{ recordData.structureInfo?.createUserName || "-" }} |
| | | </wd-form-item> |
| | | <wd-form-item label="状态" prop="status"> |
| | | <wd-tag custom-class="space" :type="getStatusType(recordData.structureInfo?.status)"> |
| | | {{ getStatusText(recordData.structureInfo?.status) }} |
| | | </wd-tag> |
| | | </wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <!-- 结构检查模块 --> |
| | | <wd-row> |
| | | <view style="margin: 10rpx"> |
| | | <text class="title">{{ "结构检查" }}</text> |
| | | </view> |
| | | <wd-col :span="24"> |
| | | <wd-form-item label="成品结构" prop="inspectStructure"> |
| | | {{ |
| | | recordData.structureInfo.structureRecordResult.inspectStructure.structureFormula || "-" |
| | | }} |
| | | </wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <wd-row v-if="recordData.structureInfo.structureRecordResult.inspectStructure.structureItems"> |
| | | <view style="margin: 10rpx"> |
| | | <text class="title">{{ "结构标准值和实测" }}</text> |
| | | </view> |
| | | <wd-col |
| | | :span="24" |
| | | v-for="(item, index) in recordData.structureInfo.structureRecordResult.inspectStructure |
| | | .structureItems" |
| | | :key="index" |
| | | style="padding-bottom: 10px" |
| | | > |
| | | <wd-form-item |
| | | :label="formatValue(item.structureName)" |
| | | label-width="400rpx" |
| | | style="color: red" |
| | | ></wd-form-item> |
| | | <wd-form-item label="标准值" prop="structureValue"> |
| | | {{ formatValue(item.structureValue) }} |
| | | </wd-form-item> |
| | | <wd-form-item label="实测根数" prop="actualValue1"> |
| | | {{ formatValue(item.actualValue1, "根") }} |
| | | </wd-form-item> |
| | | <wd-form-item label="实测直径" prop="actualValue2"> |
| | | {{ formatValue(item.actualValue2, "mm") }} |
| | | </wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <!-- 绞线工艺质量控制模块 --> |
| | | <wd-row v-if="recordData.structureInfo?.structureRecordResult?.inspectTwist"> |
| | | <view style="margin: 10rpx"> |
| | | <text class="title">{{ "绞线工艺质量控制" }}</text> |
| | | </view> |
| | | <wd-col |
| | | :span="24" |
| | | v-for="(item, index) in recordData.structureInfo.structureRecordResult.inspectTwist" |
| | | :key="index" |
| | | style="padding-bottom: 10px" |
| | | > |
| | | <wd-form-item |
| | | :label="formatValue(item.twistName)" |
| | | label-width="400rpx" |
| | | style="color: red" |
| | | ></wd-form-item> |
| | | <wd-form-item label="绞向" prop="direction"> |
| | | {{ formatValue(item.direction) }} |
| | | </wd-form-item> |
| | | <wd-form-item label="节距" prop="pitch">{{ formatValue(item.pitch, "mm") }}</wd-form-item> |
| | | <wd-form-item label="节径比" prop="pitchRatio"> |
| | | {{ formatValue(item.pitchRatio) }} |
| | | </wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <!-- 外观和结论模块 --> |
| | | <wd-row> |
| | | <view style="margin: 10rpx"> |
| | | <text class="title">{{ "外观和结论" }}</text> |
| | | </view> |
| | | <wd-col :span="24"> |
| | | <wd-form-item label="结论" prop="conclusion"> |
| | | {{ formatValue(recordData.structureInfo.structureRecordResult.conclusion) }} |
| | | </wd-form-item> |
| | | <wd-form-item label="产品外观" prop="productAppearance"> |
| | | {{ |
| | | formatProductAppearance( |
| | | recordData.structureInfo.structureRecordResult.productAppearance |
| | | ) |
| | | }} |
| | | </wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <!-- 巡检结果模块 --> |
| | | <wd-row> |
| | | <view style="margin: 10rpx"> |
| | | <text class="title">{{ "巡检结果" }}</text> |
| | | </view> |
| | | <wd-col :span="24"> |
| | | <wd-form-item label="样品是否齐全" prop="sampleComplete"> |
| | | {{ formatValue(recordData.inspectionResult?.sampleComplete) }} |
| | | </wd-form-item> |
| | | </wd-col> |
| | | </wd-row> |
| | | <!-- 附件模块 --> |
| | | <wd-row class="attachment-section"> |
| | | <view style="margin: 10rpx"> |
| | | <text class="title">{{ "附件" }}</text> |
| | | </view> |
| | | <!-- 用 flex 容器包裹图片列,实现自动换行 --> |
| | | <view class="attachment-grid"> |
| | | <wd-col |
| | | v-for="(file, index) in recordData.structureInfo.files" |
| | | :key="index" |
| | | class="attachment-item" |
| | | > |
| | | <wd-img :width="80" :height="80" :src="file.url" @click="previewImage(file.url)"> |
| | | <template #error> |
| | | <view class="error-wrap">加载失败</view> |
| | | </template> |
| | | <template #loading> |
| | | <view class="loading-wrap"> |
| | | <wd-loading /> |
| | | </view> |
| | | </template> |
| | | </wd-img> |
| | | </wd-col> |
| | | </view> |
| | | </wd-row> |
| | | <wd-popup v-model="show" custom-style="border-radius:32rpx;" @close="handleClose"> |
| | | <div class="image-preview"> |
| | | <img :src="previewImageUrl" alt="预览图片" style="width: 100%; height: auto" /> |
| | | </div> |
| | | </wd-popup> |
| | | </view> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { onLoad } from "@dcloudio/uni-app"; |
| | | import RoutingInspectionApi from "@/api/routingInspection/routingInspection"; |
| | | import { onLoad } from "@dcloudio/uni-app"; |
| | | import RoutingInspectionApi from "@/api/routingInspection/routingInspection"; |
| | | |
| | | const paramsId = ref(""); |
| | | const recordData = ref<any>({}); |
| | | const show = ref(false); |
| | | const paramsId = ref(""); |
| | | const recordData = ref<any>({}); |
| | | const show = ref(false); |
| | | const previewImageUrl = ref(""); |
| | | |
| | | // 状态类型映射 |
| | | const getStatusType = (status : number) => { |
| | | switch (status) { |
| | | case 0: |
| | | return "warning"; // 待巡检 |
| | | case 1: |
| | | return "danger"; // 已驳回 |
| | | case 2: |
| | | return "info"; // 待审核 |
| | | case 3: |
| | | return "success"; // 通过 |
| | | default: |
| | | return "info"; |
| | | } |
| | | }; |
| | | const isEdit = ref(false); |
| | | |
| | | // 状态文本映射 |
| | | const getStatusText = (status : number) => { |
| | | switch (status) { |
| | | case 0: |
| | | return "待巡检"; |
| | | case 1: |
| | | return "已驳回"; |
| | | case 2: |
| | | return "待审核"; |
| | | case 3: |
| | | return "通过"; |
| | | default: |
| | | return "未知"; |
| | | } |
| | | }; |
| | | // 状态类型映射 |
| | | const getStatusType = (status: number) => { |
| | | switch (status) { |
| | | case 0: |
| | | return "warning"; // 待巡检 |
| | | case 1: |
| | | return "danger"; // 已驳回 |
| | | case 2: |
| | | return "info"; // 待审核 |
| | | case 3: |
| | | return "success"; // 通过 |
| | | default: |
| | | return "info"; |
| | | } |
| | | }; |
| | | |
| | | // 获取外观文本 |
| | | const getAppearanceText = (appearance : string[]) => { |
| | | if (!appearance || appearance.length === 0) return "-"; |
| | | return appearance.join("、"); |
| | | }; |
| | | // 状态文本映射 |
| | | const getStatusText = (status: number) => { |
| | | switch (status) { |
| | | case 0: |
| | | return "待巡检"; |
| | | case 1: |
| | | return "已驳回"; |
| | | case 2: |
| | | return "待审核"; |
| | | case 3: |
| | | return "通过"; |
| | | default: |
| | | return "未知"; |
| | | } |
| | | }; |
| | | |
| | | // 格式化产品外观显示 |
| | | const formatProductAppearance = (productAppearance : string[]) => { |
| | | if (!productAppearance || productAppearance.length === 0) return "-"; |
| | | return productAppearance.join("、"); |
| | | }; |
| | | // 获取外观文本 |
| | | const getAppearanceText = (appearance: string[]) => { |
| | | if (!appearance || appearance.length === 0) return "-"; |
| | | return appearance.join("、"); |
| | | }; |
| | | |
| | | // 格式化数值显示 |
| | | const formatValue = (value : any, unit ?: string) => { |
| | | if (value === null || value === undefined || value === "") return "-"; |
| | | return unit ? `${value}${unit}` : value; |
| | | }; |
| | | // 格式化产品外观显示 |
| | | const formatProductAppearance = (productAppearance: string[]) => { |
| | | if (!productAppearance || productAppearance.length === 0) return "-"; |
| | | return productAppearance.join("、"); |
| | | }; |
| | | |
| | | // 格式化日期显示 |
| | | const formatDate = (date : string) => { |
| | | if (!date) return "-"; |
| | | return new Date(date).toLocaleDateString("zh-CN", { |
| | | year: "numeric", |
| | | month: "2-digit", |
| | | day: "2-digit" |
| | | }); |
| | | }; |
| | | // 格式化数值显示 |
| | | const formatValue = (value: any, unit?: string) => { |
| | | if (value === null || value === undefined || value === "") return "-"; |
| | | return unit ? `${value}${unit}` : value; |
| | | }; |
| | | |
| | | // 格式化结构值显示 |
| | | const formatStructureValue = (value1 : any, value2 : any) => { |
| | | const val1 = value1 || "-"; |
| | | const val2 = value2 ? `${value2}mm` : "-"; |
| | | return { count: val1, diameter: val2 }; |
| | | }; |
| | | // 格式化日期显示 |
| | | const formatDate = (date: string) => { |
| | | if (!date) return "-"; |
| | | return new Date(date).toLocaleDateString("zh-CN", { |
| | | year: "numeric", |
| | | month: "2-digit", |
| | | day: "2-digit", |
| | | }); |
| | | }; |
| | | |
| | | const getDetailData = async (id : string, deviceType : string) => { |
| | | try { |
| | | let response; |
| | | // 获取绞线单个结构 |
| | | response = await RoutingInspectionApi.getStrandedInspectionStructureInfoById({ |
| | | id: id, |
| | | }); |
| | | recordData.value = response.data; |
| | | console.log(recordData.value); |
| | | } catch (error) { |
| | | console.error("获取详情失败:", error); |
| | | } |
| | | }; |
| | | // 格式化结构值显示 |
| | | const formatStructureValue = (value1: any, value2: any) => { |
| | | const val1 = value1 || "-"; |
| | | const val2 = value2 ? `${value2}mm` : "-"; |
| | | return { count: val1, diameter: val2 }; |
| | | }; |
| | | |
| | | onLoad((options : any) => { |
| | | paramsId.value = options.id; |
| | | getDetailData(options.id, options.deviceType); |
| | | }); |
| | | const getDetailData = async (id: string, deviceType: string) => { |
| | | try { |
| | | let response; |
| | | // 获取绞线单个结构 |
| | | response = await RoutingInspectionApi.getStrandedInspectionStructureInfoById({ |
| | | id: id, |
| | | }); |
| | | recordData.value = response.data; |
| | | console.log(recordData.value); |
| | | } catch (error) { |
| | | console.error("获取详情失败:", error); |
| | | } |
| | | }; |
| | | |
| | | const previewImage = (url : string) => { |
| | | previewImageUrl.value = url; |
| | | show.value = true; |
| | | }; |
| | | onLoad((options: any) => { |
| | | paramsId.value = options.id; |
| | | getDetailData(options.id, options.deviceType); |
| | | }); |
| | | |
| | | const handleClose = () => { |
| | | show.value = false; |
| | | }; |
| | | const previewImage = (url: string) => { |
| | | previewImageUrl.value = url; |
| | | show.value = true; |
| | | }; |
| | | |
| | | const handleClose = () => { |
| | | show.value = false; |
| | | }; |
| | | |
| | | // 编辑列表 |
| | | const editList = () => {}; |
| | | |
| | | // 关闭 |
| | | const close = () => {}; |
| | | |
| | | // 保存列表 |
| | | const saveList = async () => { |
| | | // try { |
| | | // let response; |
| | | // // 保存列表 |
| | | // response = await RoutingInspectionApi.saveStrandedInspectionStructureInfo({ |
| | | // id: paramsId.value, |
| | | // structureInfo: recordData.value.structureInfo, |
| | | // }); |
| | | // if (response.code === 200) { |
| | | // uni.showToast({ |
| | | // title: "保存成功", |
| | | // icon: "success", |
| | | // }); |
| | | // // 刷新详情数据 |
| | | // getDetailData(paramsId.value, recordData.value.deviceType); |
| | | // } else { |
| | | // uni.showToast({ |
| | | // title: response.msg || "保存失败", |
| | | // icon: "error", |
| | | // }); |
| | | // } |
| | | // } catch (error) { |
| | | // console.error("保存列表失败:", error); |
| | | // uni.showToast({ |
| | | // title: "保存失败", |
| | | // icon: "error", |
| | | // }); |
| | | // } |
| | | }; |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | .list { |
| | | height: calc(100vh - 80px); |
| | | padding: 12px; |
| | | background: #f3f9f8; |
| | | .placeholder { |
| | | flex: 1; |
| | | } |
| | | .fixed-header { |
| | | position: fixed; |
| | | top: 44; |
| | | left: 0; |
| | | right: 0; |
| | | background: #f3f9f8; |
| | | z-index: 999; |
| | | padding: 12px; |
| | | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); |
| | | min-height: 60px; |
| | | box-sizing: border-box; |
| | | overflow: visible; |
| | | } |
| | | |
| | | :deep() { |
| | | .round { |
| | | border-radius: 4px; |
| | | } |
| | | } |
| | | } |
| | | .header-container { |
| | | display: flex; |
| | | align-items: center; |
| | | width: 100%; |
| | | gap: 10px; |
| | | } |
| | | |
| | | .title { |
| | | position: relative; |
| | | margin-left: 10px; |
| | | font-size: 16px; |
| | | font-weight: 500; |
| | | color: #0d867f; |
| | | } |
| | | .search-wrapper { |
| | | flex: 1; |
| | | min-width: 0; |
| | | } |
| | | |
| | | .title::after { |
| | | position: absolute; |
| | | content: ""; |
| | | top: 4px; |
| | | left: -10px; |
| | | width: 4px; |
| | | height: 16px; |
| | | background: #0d867f; |
| | | border-radius: 2px; |
| | | } |
| | | :deep(.search-wrapper .wd-search) { |
| | | width: 100% !important; |
| | | min-width: 0 !important; |
| | | } |
| | | |
| | | .attachment-section { |
| | | width: 100%; |
| | | } |
| | | .scan-wrapper { |
| | | width: 38px; |
| | | height: 38px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | padding: 6px; |
| | | flex-shrink: 0; |
| | | } |
| | | |
| | | .attachment-grid { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | /* 超出自动换行 */ |
| | | gap: 10px; |
| | | /* 图片之间的间距 */ |
| | | padding: 10px 0; |
| | | } |
| | | .list { |
| | | padding: 12px; |
| | | |
| | | .attachment-item { |
| | | width: calc(25% - 10px); |
| | | /* 每行4张,间距由gap控制,需计算宽度 */ |
| | | box-sizing: border-box; |
| | | } |
| | | padding-top: 84px; |
| | | background: #f3f9f8; |
| | | min-height: 100vh; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | /* 适配小屏幕,可调整每行数量(如每行2张) */ |
| | | @media (max-width: 768px) { |
| | | .attachment-item { |
| | | width: calc(25% - 10px); |
| | | } |
| | | } |
| | | .title { |
| | | position: relative; |
| | | margin-left: 10px; |
| | | font-size: 16px; |
| | | font-weight: 500; |
| | | color: #0d867f; |
| | | } |
| | | |
| | | .title::after { |
| | | position: absolute; |
| | | content: ""; |
| | | top: 4px; |
| | | left: -10px; |
| | | width: 4px; |
| | | height: 16px; |
| | | background: #0d867f; |
| | | border-radius: 2px; |
| | | } |
| | | |
| | | .attachment-section { |
| | | width: 100%; |
| | | } |
| | | |
| | | .attachment-grid { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 10px; |
| | | padding: 10px 0; |
| | | } |
| | | |
| | | .attachment-item { |
| | | width: calc(25% - 10px); |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | @media (max-width: 768px) { |
| | | .attachment-item { |
| | | width: calc(25% - 10px); |
| | | } |
| | | } |
| | | </style> |