| | |
| | | <view class="work-order"> |
| | | <!-- 通用页面头部 --> |
| | | <PageHeader title="生产报工" @back="goBack" /> |
| | | |
| | | |
| | | <!-- 搜索区域 --> |
| | | <view class="search-section"> |
| | | <view class="search-bar"> |
| | |
| | | clearable |
| | | /> |
| | | </view> |
| | | |
| | | |
| | | <view class="filter-button" @click="handleQuery"> |
| | | <up-icon name="search" size="24" color="#999"></up-icon> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | |
| | | <!-- 工单列表 --> |
| | | <scroll-view |
| | | scroll-y |
| | |
| | | lower-threshold="80" |
| | | @scrolltolower="loadMore" |
| | | > |
| | | <view v-for="(item, index) in tableData" :key="item.id || index" class="ledger-item" @click="showTransferCard(item)"> |
| | | <view v-for="(item, index) in tableData" :key="item.id || index" class="ledger-item"> |
| | | <view class="item-header"> |
| | | <view class="item-left"> |
| | | <view class="document-icon"> |
| | |
| | | <text class="item-tag tag-type">{{ item.workOrderType || '无' }}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | |
| | | <up-divider></up-divider> |
| | | |
| | | |
| | | <view class="item-details"> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">产品名称</text> |
| | | <text class="detail-label">成品名称</text> |
| | | <text class="detail-value">{{ item.finalProductModel || '无' }}</text> |
| | | </view> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">加工品名称</text> |
| | | <text class="detail-value">{{ item.productName || '无' }}</text> |
| | | </view> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">规格型号</text> |
| | | <text class="detail-label">加工品型号</text> |
| | | <text class="detail-value">{{ item.model || '无' }}</text> |
| | | </view> |
| | | <view class="detail-row"> |
| | |
| | | <text class="detail-label">需求/完成数量</text> |
| | | <text class="detail-value">{{ item.planQuantity || '无' }} / {{ item.completeQuantity || '无' }}</text> |
| | | </view> |
| | | |
| | | |
| | | <view class="progress-section"> |
| | | <text class="detail-label">完成进度</text> |
| | | <view class="progress-bar"> |
| | | <up-line-progress |
| | | :percentage="toProgressPercentage(item.completionStatus)" |
| | | <up-line-progress |
| | | :percentage="toProgressPercentage(item.completionStatus)" |
| | | activeColor="#2979ff" |
| | | :showText="true" |
| | | ></up-line-progress> |
| | |
| | | </view> |
| | | <up-loadmore :status="loadStatus" /> |
| | | </scroll-view> |
| | | |
| | | |
| | | <view v-else-if="!loading" class="no-data"> |
| | | <up-empty mode="data" text="暂无工单数据"></up-empty> |
| | | </view> |
| | | |
| | | <!-- 流转卡弹窗 --> |
| | | <up-popup :show="transferCardVisible" mode="center" @close="transferCardVisible = false" round="10"> |
| | | <!-- 流转卡弹窗(报工审核记录 - 已禁用) --> |
| | | <!-- <up-popup :show="transferCardVisible" mode="center" @close="transferCardVisible = false" round="10"> |
| | | <view class="qr-popup"> |
| | | <text class="qr-info" v-if="transferCardRowData">{{ transferCardRowData.workOrderNo || '-' }}</text> |
| | | <view class="transfer-records"> |
| | |
| | | </view> |
| | | <up-button text="关闭" @click="transferCardVisible = false" style="margin-top: 20px;"></up-button> |
| | | </view> |
| | | </up-popup> |
| | | </up-popup> --> |
| | | |
| | | <!-- 报工弹窗 --> |
| | | <up-popup |
| | |
| | | </view> |
| | | </view> |
| | | |
| | | <scroll-view class="modal-content" scroll-y> |
| | | <scroll-view |
| | | class="modal-content" |
| | | scroll-y |
| | | :scroll-top="scrollTop" |
| | | :enhanced="true" |
| | | :bounces="false" |
| | | :show-scrollbar="true" |
| | | > |
| | | <!-- <view class="report-summary" v-if="endReportRow"> |
| | | <view class="summary-left"> |
| | | <text class="summary-title">{{ endReportRow.productName || '-' }}</text> |
| | |
| | | </up-form-item> |
| | | <up-form-item label="报废数量"> |
| | | <up-input v-model="endReportForm.scrapQty" type="number" placeholder="请输入" /> |
| | | </up-form-item> |
| | | <up-form-item label="加放数"> |
| | | <up-input v-model="endReportForm.addQty" type="number" placeholder="请输入" /> |
| | | </up-form-item> |
| | | <up-form-item label="开始时间" required> |
| | | <up-input |
| | |
| | | readonly |
| | | placeholder="请选择(可多选)" |
| | | @click="openTeamPicker" |
| | | suffixIcon="arrow-down" |
| | | /> |
| | | </up-form-item> |
| | | <up-form-item label="审核人" required> |
| | | <up-input |
| | | v-model="endReportForm.auditUserName" |
| | | readonly |
| | | placeholder="请选择" |
| | | @click="openAuditPicker" |
| | | suffixIcon="arrow-down" |
| | | /> |
| | | </up-form-item> |
| | |
| | | </view> |
| | | </up-popup> |
| | | |
| | | <!-- 审核人选择器 --> |
| | | <up-action-sheet |
| | | :show="auditPickerVisible" |
| | | :actions="auditActions" |
| | | title="选择审核人" |
| | | @select="onAuditSelect" |
| | | @close="auditPickerVisible = false" |
| | | /> |
| | | <!-- 机台选择器 --> |
| | | <up-action-sheet |
| | | :show="devicePickerVisible" |
| | | :actions="deviceActions" |
| | |
| | | const loading = ref(false); |
| | | const tableData = ref([]); |
| | | const loadStatus = ref('loadmore'); |
| | | const transferCardVisible = ref(false); |
| | | const transferCardRowData = ref(null); |
| | | const transferCardLoading = ref(false); |
| | | const transferCardRecords = ref([]); |
| | | const auditStatusOptions = ref([ |
| | | { label: "未审核", value: 0 }, |
| | | { label: "通过", value: 1 }, |
| | | { label: "不通过", value: 2 }, |
| | | ]); |
| | | const transferRecordFields = [ |
| | | { label: "报工人员", prop: "teamNames", wide: true }, |
| | | { label: "审核人", prop: "auditUserName" }, |
| | | { label: "最终审核人", prop: "sureAuditUserName" }, |
| | | { label: "工单编号", prop: "workOrderNo" }, |
| | | { label: "订单编号", prop: "salesContractNo" }, |
| | | { label: "产品名称", prop: "productName" }, |
| | | { label: "产品规格型号", prop: "productModelName" }, |
| | | { label: "产出数量", prop: "quantity" }, |
| | | { label: "报废数量", prop: "scrapQty" }, |
| | | { label: "单位", prop: "unit" }, |
| | | { label: "审核状态", prop: "auditStatus" }, |
| | | { label: "备注信息", prop: "auditOpinion", wide: true }, |
| | | { label: "创建时间", prop: "createTime", wide: true }, |
| | | ]; |
| | | |
| | | // 报工审核记录相关 - 已禁用 |
| | | // const transferCardVisible = ref(false); |
| | | // const transferCardRowData = ref(null); |
| | | // const transferCardLoading = ref(false); |
| | | // const transferCardRecords = ref([]); |
| | | // const auditStatusOptions = ref([ |
| | | // { label: "未审核", value: 0 }, |
| | | // { label: "通过", value: 1 }, |
| | | // { label: "不通过", value: 2 }, |
| | | // ]); |
| | | // const transferRecordFields = [ |
| | | // { label: "报工人员", prop: "teamNames", wide: true }, |
| | | // { label: "审核人", prop: "auditUserName" }, |
| | | // { label: "最终审核人", prop: "sureAuditUserName" }, |
| | | // { label: "工单编号", prop: "workOrderNo" }, |
| | | // { label: "订单编号", prop: "salesContractNo" }, |
| | | // { label: "产品名称", prop: "productName" }, |
| | | // { label: "产品规格型号", prop: "productModelName" }, |
| | | // { label: "产出数量", prop: "quantity" }, |
| | | // { label: "报废数量", prop: "scrapQty" }, |
| | | // { label: "单位", prop: "unit" }, |
| | | // { label: "审核状态", prop: "auditStatus" }, |
| | | // { label: "备注信息", prop: "auditOpinion", wide: true }, |
| | | // { label: "创建时间", prop: "createTime", wide: true }, |
| | | // ]; |
| | | |
| | | const workOrderFilesRef = ref(null); |
| | | const startSubmittingId = ref(null); |
| | | |
| | |
| | | quantity: "", |
| | | replenishQty: "0", |
| | | scrapQty: "0", |
| | | addQty: "0", |
| | | deviceLedgerId: "", |
| | | deviceName: "", |
| | | teamList: [], |
| | | startTime: "", |
| | | endTime: "", |
| | | auditUserId: "", |
| | | auditUserName: "", |
| | | userId: "", |
| | | userName: "", |
| | | workOrderId: "", |
| | |
| | | }); |
| | | |
| | | const userOptions = ref([]); |
| | | const auditPickerVisible = ref(false); |
| | | const auditActions = computed(() => userOptions.value.map(u => ({ name: u.name, value: u.value }))); |
| | | |
| | | const deviceOptions = ref([]); |
| | | const devicePickerVisible = ref(false); |
| | |
| | | const endTimePickerVisible = ref(false); |
| | | const startTimeValue = ref(Date.now()); |
| | | const endTimeValue = ref(Date.now()); |
| | | const scrollTop = ref(0); |
| | | |
| | | const routeOrderRow = ref(null); |
| | | |
| | |
| | | const getList = () => { |
| | | if (loading.value) return; |
| | | loading.value = true; |
| | | |
| | | |
| | | const params = { ...searchForm.value, ...page }; |
| | | |
| | | |
| | | productWorkOrderPage(params).then((res) => { |
| | | loading.value = false; |
| | | const records = res.data.records || []; |
| | | tableData.value = page.current === 1 ? records : [...tableData.value, ...records]; |
| | | page.total = res.data.total; |
| | | |
| | | |
| | | if (tableData.value.length >= page.total) { |
| | | loadStatus.value = 'nomore'; |
| | | } else { |
| | |
| | | tableData.value = data ? [data] : []; |
| | | page.total = tableData.value.length; |
| | | loadStatus.value = 'nomore'; |
| | | |
| | | // 扫码进入后自动打开报工弹窗 |
| | | if (data && routeOrderRow.value) { |
| | | // 等待数据渲染完成后打开报工弹窗 |
| | | setTimeout(() => { |
| | | openEndReport(data); |
| | | }, 300); |
| | | } |
| | | } catch { |
| | | tableData.value = []; |
| | | showToast("加载工单失败"); |
| | |
| | | return Math.round(n); |
| | | }; |
| | | |
| | | const getAuditStatusLabel = (val) => { |
| | | const target = auditStatusOptions.value.find(item => Number(item.value) === Number(val)); |
| | | return target?.label || "未知"; |
| | | }; |
| | | // 报工审核记录相关函数 - 已禁用 |
| | | // const getAuditStatusLabel = (val) => { |
| | | // const target = auditStatusOptions.value.find(item => Number(item.value) === Number(val)); |
| | | // return target?.label || "未知"; |
| | | // }; |
| | | |
| | | const getAuditStatusType = (val) => { |
| | | const typeMap = { 0: "info", 1: "success", 2: "danger" }; |
| | | return typeMap[Number(val)] || "default"; |
| | | }; |
| | | // const getAuditStatusType = (val) => { |
| | | // const typeMap = { 0: "info", 1: "success", 2: "danger" }; |
| | | // return typeMap[Number(val)] || "default"; |
| | | // }; |
| | | |
| | | const getTeamNameList = (val) => { |
| | | if (!val) return []; |
| | | return String(val) |
| | | .split(",") |
| | | .map(item => item.trim()) |
| | | .filter(Boolean); |
| | | }; |
| | | // const getTeamNameList = (val) => { |
| | | // if (!val) return []; |
| | | // return String(val) |
| | | // .split(",") |
| | | // .map(item => item.trim()) |
| | | // .filter(Boolean); |
| | | // }; |
| | | |
| | | const formatTransferRecordValue = (record, prop) => { |
| | | if (prop === "auditStatus") { |
| | | return getAuditStatusLabel(record?.[prop]); |
| | | } |
| | | // const formatTransferRecordValue = (record, prop) => { |
| | | // if (prop === "auditStatus") { |
| | | // return getAuditStatusLabel(record?.[prop]); |
| | | // } |
| | | |
| | | const value = record?.[prop]; |
| | | if (value === null || value === undefined || value === "") { |
| | | return "-"; |
| | | } |
| | | // const value = record?.[prop]; |
| | | // if (value === null || value === undefined || value === "") { |
| | | // return "-"; |
| | | // } |
| | | |
| | | return String(value); |
| | | }; |
| | | // return String(value); |
| | | // }; |
| | | |
| | | const getTransferCardParams = (row) => { |
| | | const params = { |
| | | current: 1, |
| | | size: 100, |
| | | }; |
| | | // const getTransferCardParams = (row) => { |
| | | // const params = { |
| | | // current: 1, |
| | | // size: 100, |
| | | // }; |
| | | |
| | | if (row?.id != null) { |
| | | params.workOrderId = row.id; |
| | | } |
| | | if (row?.workOrderNo) { |
| | | params.workOrderNo = row.workOrderNo; |
| | | } |
| | | if (row?.productMainId != null) { |
| | | params.productMainId = row.productMainId; |
| | | } |
| | | // if (row?.id != null) { |
| | | // params.workOrderId = row.id; |
| | | // } |
| | | // if (row?.workOrderNo) { |
| | | // params.workOrderNo = row.workOrderNo; |
| | | // } |
| | | // if (row?.productMainId != null) { |
| | | // params.productMainId = row.productMainId; |
| | | // } |
| | | |
| | | return params; |
| | | }; |
| | | // return params; |
| | | // }; |
| | | |
| | | const showTransferCard = async (row) => { |
| | | transferCardRowData.value = row; |
| | | transferCardVisible.value = true; |
| | | transferCardRecords.value = []; |
| | | transferCardLoading.value = true; |
| | | // const showTransferCard = async (row) => { |
| | | // transferCardRowData.value = row; |
| | | // transferCardVisible.value = true; |
| | | // transferCardRecords.value = []; |
| | | // transferCardLoading.value = true; |
| | | |
| | | try { |
| | | const res = await getProductionProductMain(getTransferCardParams(row)); |
| | | transferCardRecords.value = res?.data?.records || res?.records || []; |
| | | } catch { |
| | | transferCardRecords.value = []; |
| | | showToast("加载报工审核记录失败"); |
| | | } finally { |
| | | transferCardLoading.value = false; |
| | | } |
| | | }; |
| | | // try { |
| | | // const res = await getProductionProductMain(getTransferCardParams(row)); |
| | | // transferCardRecords.value = res?.data?.records || res?.records || []; |
| | | // } catch { |
| | | // transferCardRecords.value = []; |
| | | // showToast("加载报工审核记录失败"); |
| | | // } finally { |
| | | // transferCardLoading.value = false; |
| | | // } |
| | | // }; |
| | | |
| | | const getPendingQty = (row) => { |
| | | const plan = Number(row?.planQuantity) || 0; |
| | |
| | | endReportForm.quantity = String(getPendingQty(row)); |
| | | endReportForm.replenishQty = "0"; |
| | | endReportForm.scrapQty = "0"; |
| | | endReportForm.addQty = "0"; |
| | | endReportForm.deviceLedgerId = ""; |
| | | endReportForm.deviceName = ""; |
| | | endReportForm.teamList = []; |
| | |
| | | endReportForm.reportWork = row.reportWork; |
| | | endReportForm.productProcessRouteItemId = row.productProcessRouteItemId || ""; |
| | | endReportForm.productMainId = row.productMainId ?? null; |
| | | |
| | | endReportForm.auditUserId = ""; |
| | | endReportForm.auditUserName = ""; |
| | | |
| | | endReportForm.startTime = row.startProductTime || ""; |
| | | endReportForm.endTime = ""; |
| | |
| | | const closeEndReport = () => { |
| | | endReportVisible.value = false; |
| | | endReportRow.value = null; |
| | | }; |
| | | |
| | | const openAuditPicker = async () => { |
| | | await ensureUserOptions(); |
| | | auditPickerVisible.value = true; |
| | | }; |
| | | |
| | | const onAuditSelect = (e) => { |
| | | endReportForm.auditUserId = String(e?.value ?? ""); |
| | | endReportForm.auditUserName = String(e?.name ?? ""); |
| | | auditPickerVisible.value = false; |
| | | }; |
| | | |
| | | const openDevicePicker = async () => { |
| | |
| | | const onEndTimeConfirm = (e) => { |
| | | const end = e.value; |
| | | |
| | | if (end <= startTimeValue.value) { |
| | | showToast("结束时间必须大于开始时间"); |
| | | return; |
| | | } |
| | | // if (end <= startTimeValue.value) { |
| | | // showToast("结束时间必须大于开始时间"); |
| | | // return; |
| | | // } |
| | | |
| | | endReportForm.endTime = formatDateTime(end); |
| | | endTimePickerVisible.value = false; |
| | |
| | | showToast("报废数量必须为大于等于0的整数"); |
| | | return; |
| | | } |
| | | |
| | | const addQty = endReportForm.addQty === "" ? 0 : Number(endReportForm.addQty); |
| | | if (!Number.isFinite(addQty) || !Number.isInteger(addQty) || addQty < 0) { |
| | | showToast("加放数必须为大于等于0的整数"); |
| | | return; |
| | | } |
| | | |
| | | if (!endReportForm.startTime) { |
| | | showToast("请选择开始时间"); |
| | | return; |
| | |
| | | const start = new Date(endReportForm.startTime).getTime(); |
| | | const end = new Date(endReportForm.endTime).getTime(); |
| | | |
| | | if (end <= start) { |
| | | showToast("结束时间必须大于开始时间"); |
| | | return; |
| | | } |
| | | |
| | | if (!endReportForm.auditUserId) { |
| | | showToast("请选择审核人"); |
| | | return; |
| | | } |
| | | // if (end <= start) { |
| | | // showToast("结束时间必须大于开始时间"); |
| | | // return; |
| | | // } |
| | | |
| | | if (!endReportForm.deviceLedgerId) { |
| | | showToast("请选择机台"); |
| | |
| | | quantity, |
| | | replenishQty, |
| | | scrapQty, |
| | | addQty, |
| | | userId: endReportForm.userId || userStore.id, |
| | | userName: endReportForm.userName || userStore.nickName, |
| | | auditUserId: endReportForm.auditUserId, |
| | | auditUserName: endReportForm.auditUserName, |
| | | deviceLedgerId: endReportForm.deviceLedgerId, |
| | | deviceName: endReportForm.deviceName, |
| | | }; |
| | |
| | | gap: 10px; |
| | | padding: 12px 0; |
| | | border-top: 1px solid #f5f5f5; |
| | | |
| | | |
| | | :deep(.up-button) { |
| | | margin: 0; |
| | | width: auto; |
| | |
| | | font-size: 26rpx; |
| | | color: #666; |
| | | } |
| | | .transfer-records { |
| | | width: 100%; |
| | | margin-top: 28rpx; |
| | | } |
| | | .transfer-records-header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | gap: 16rpx; |
| | | margin-bottom: 16rpx; |
| | | } |
| | | .transfer-records-title { |
| | | font-size: 26rpx; |
| | | font-weight: 600; |
| | | color: #222; |
| | | } |
| | | .transfer-records-count { |
| | | font-size: 22rpx; |
| | | color: #8a8a8a; |
| | | } |
| | | .transfer-records-loading, |
| | | .transfer-records-empty { |
| | | padding: 28rpx 0; |
| | | font-size: 24rpx; |
| | | color: #8a8a8a; |
| | | text-align: center; |
| | | } |
| | | .transfer-records-list { |
| | | max-height: 500rpx; |
| | | overflow: auto; |
| | | } |
| | | .transfer-record-item { |
| | | padding: 20rpx 22rpx; |
| | | border-radius: 16rpx; |
| | | background: #f7f8fa; |
| | | } |
| | | |
| | | .transfer-record-item + .transfer-record-item { |
| | | margin-top: 16rpx; |
| | | } |
| | | .transfer-record-top { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: flex-start; |
| | | gap: 24rpx; |
| | | } |
| | | .transfer-record-top-main { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 8rpx; |
| | | min-width: 0; |
| | | } |
| | | .transfer-record-no { |
| | | font-size: 28rpx; |
| | | font-weight: 600; |
| | | color: #222; |
| | | word-break: break-all; |
| | | } |
| | | .transfer-record-sub { |
| | | font-size: 22rpx; |
| | | color: #8a8a8a; |
| | | word-break: break-all; |
| | | } |
| | | .transfer-record-grid { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 16rpx; |
| | | margin-top: 18rpx; |
| | | } |
| | | .transfer-record-cell { |
| | | width: 100%; // 原来一行两个 → 改成一行一个 |
| | | } |
| | | .transfer-record-cell.is-wide { |
| | | width: 100%; |
| | | } |
| | | .transfer-record-label { |
| | | display: block; |
| | | margin-bottom: 8rpx; |
| | | font-size: 22rpx; |
| | | color: #8a8a8a; |
| | | } |
| | | .transfer-record-content { |
| | | min-height: 36rpx; |
| | | } |
| | | .transfer-record-value { |
| | | display: block; |
| | | font-size: 24rpx; |
| | | color: #222; |
| | | word-break: break-all; |
| | | } |
| | | .transfer-tag-list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 10rpx; |
| | | } |
| | | .transfer-name-tag { |
| | | padding: 6rpx 14rpx; |
| | | border-radius: 999rpx; |
| | | background: #e9f2ff; |
| | | color: #2f6bff; |
| | | font-size: 22rpx; |
| | | } |
| | | .audit-status-tag { |
| | | display: inline-flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | min-height: 40rpx; |
| | | padding: 0 16rpx; |
| | | border-radius: 999rpx; |
| | | font-size: 22rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | .audit-status-info { |
| | | background: #edf1f5; |
| | | color: #6b7280; |
| | | } |
| | | .audit-status-success { |
| | | background: #e9f9ef; |
| | | color: #16a34a; |
| | | } |
| | | .audit-status-danger { |
| | | background: #feeeee; |
| | | color: #dc2626; |
| | | } |
| | | .audit-status-default { |
| | | background: #f4f4f5; |
| | | color: #606266; |
| | | } |
| | | /* 报工审核记录相关样式 - 已禁用 */ |
| | | // .transfer-records { |
| | | // width: 100%; |
| | | // margin-top: 28rpx; |
| | | // } |
| | | // .transfer-records-header { |
| | | // display: flex; |
| | | // justify-content: space-between; |
| | | // align-items: center; |
| | | // gap: 16rpx; |
| | | // margin-bottom: 16rpx; |
| | | // } |
| | | // .transfer-records-title { |
| | | // font-size: 26rpx; |
| | | // font-weight: 600; |
| | | // color: #222; |
| | | // } |
| | | |
| | | /* 报工审核记录相关样式 - 已禁用 */ |
| | | // .transfer-records-count { |
| | | // font-size: 22rpx; |
| | | // color: #8a8a8a; |
| | | // } |
| | | // .transfer-records-loading, |
| | | // .transfer-records-empty { |
| | | // padding: 28rpx 0; |
| | | // font-size: 24rpx; |
| | | // color: #8a8a8a; |
| | | // text-align: center; |
| | | // } |
| | | // .transfer-records-list { |
| | | // max-height: 500rpx; |
| | | // overflow: auto; |
| | | // } |
| | | // .transfer-record-item { |
| | | // padding: 20rpx 22rpx; |
| | | // border-radius: 16rpx; |
| | | // background: #f7f8fa; |
| | | // } |
| | | |
| | | // .transfer-record-item + .transfer-record-item { |
| | | // margin-top: 16rpx; |
| | | // } |
| | | // .transfer-record-top { |
| | | // display: flex; |
| | | // justify-content: space-between; |
| | | // align-items: flex-start; |
| | | // gap: 24rpx; |
| | | // } |
| | | // .transfer-record-top-main { |
| | | // display: flex; |
| | | // flex-direction: column; |
| | | // gap: 8rpx; |
| | | // min-width: 0; |
| | | // } |
| | | // .transfer-record-no { |
| | | // font-size: 28rpx; |
| | | // font-weight: 600; |
| | | // color: #222; |
| | | // word-break: break-all; |
| | | // } |
| | | // .transfer-record-sub { |
| | | // font-size: 22rpx; |
| | | // color: #8a8a8a; |
| | | // word-break: break-all; |
| | | // } |
| | | // .transfer-record-grid { |
| | | // display: flex; |
| | | // flex-wrap: wrap; |
| | | // gap: 16rpx; |
| | | // margin-top: 18rpx; |
| | | // } |
| | | // .transfer-record-cell { |
| | | // width: 100%; |
| | | // } |
| | | // .transfer-record-cell.is-wide { |
| | | // width: 100%; |
| | | // } |
| | | // .transfer-record-label { |
| | | // display: block; |
| | | // margin-bottom: 8rpx; |
| | | // font-size: 22rpx; |
| | | // color: #8a8a8a; |
| | | // } |
| | | // .transfer-record-content { |
| | | // min-height: 36rpx; |
| | | // } |
| | | // .transfer-record-value { |
| | | // display: block; |
| | | // font-size: 24rpx; |
| | | // color: #222; |
| | | // word-break: break-all; |
| | | // } |
| | | // .transfer-tag-list { |
| | | // display: flex; |
| | | // flex-wrap: wrap; |
| | | // gap: 10rpx; |
| | | // } |
| | | // .transfer-name-tag { |
| | | // padding: 6rpx 14rpx; |
| | | // border-radius: 999rpx; |
| | | // background: #e9f2ff; |
| | | // color: #2f6bff; |
| | | // font-size: 22rpx; |
| | | // } |
| | | // .audit-status-tag { |
| | | // display: inline-flex; |
| | | // align-items: center; |
| | | // justify-content: center; |
| | | // min-height: 40rpx; |
| | | // padding: 0 16rpx; |
| | | // border-radius: 999rpx; |
| | | // font-size: 22rpx; |
| | | // box-sizing: border-box; |
| | | // } |
| | | // .audit-status-info { |
| | | // background: #edf1f5; |
| | | // color: #6b7280; |
| | | // } |
| | | // .audit-status-success { |
| | | // background: #e9f9ef; |
| | | // color: #16a34a; |
| | | // } |
| | | // .audit-status-danger { |
| | | // background: #feeeee; |
| | | // color: #dc2626; |
| | | // } |
| | | // .audit-status-default { |
| | | // background: #f4f4f5; |
| | | // color: #606266; |
| | | // } |
| | | |
| | | .report-modal { |
| | | background: #fff; |
| | |
| | | flex-direction: column; |
| | | overflow: hidden; |
| | | } |
| | | /* #ifdef H5 */ |
| | | .report-modal { |
| | | max-height: 85vh; |
| | | min-height: 60vh; |
| | | } |
| | | /* #endif */ |
| | | .modal-header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | |
| | | height: 0; |
| | | padding: 12px 12px 0; |
| | | background: #f7f8fa; |
| | | max-height: 60vh; |
| | | overflow-y: auto; |
| | | } |
| | | /* #ifdef H5 */ |
| | | .modal-content { |
| | | max-height: 60vh; |
| | | -webkit-overflow-scrolling: touch; |
| | | } |
| | | /* #endif */ |
| | | .modal-footer { |
| | | display: flex; |
| | | gap: 12px; |
| | |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | |
| | | |
| | | .qr-title { |
| | | font-size: 18px; |
| | | font-weight: bold; |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | |
| | | .qr-box { |
| | | padding: 20px; |
| | | background-color: #fff; |
| | |
| | | border-radius: 8px; |
| | | margin-bottom: 15px; |
| | | } |
| | | |
| | | |
| | | .qr-info { |
| | | font-size: 14px; |
| | | color: #666; |