From 633568cff8a45c9f92aec1ec5edb5a09a3b0d8a4 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期六, 14 三月 2026 13:26:38 +0800
Subject: [PATCH] fix: 隐患地点需要拍照而不是文字描述,需要可预览。
---
src/pages/equipmentManagement/upkeep/index.vue | 858 +++++++++++++++++++++++++++++---------------------------
1 files changed, 448 insertions(+), 410 deletions(-)
diff --git a/src/pages/equipmentManagement/upkeep/index.vue b/src/pages/equipmentManagement/upkeep/index.vue
index c879f52..7e043c3 100644
--- a/src/pages/equipmentManagement/upkeep/index.vue
+++ b/src/pages/equipmentManagement/upkeep/index.vue
@@ -1,458 +1,496 @@
<template>
- <view class="device-upkeep">
- <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
- <PageHeader title="璁惧淇濆吇" @back="goBack" />
-
- <!-- 鎼滅储鍖哄煙 -->
- <view class="search-filter-section">
- <view class="search-bar">
- <view class="search-input">
- <input
- class="search-text"
- placeholder="璇疯緭鍏ヨ澶囧悕绉�"
- v-model="searchKeyword"
- confirm-type="search"
- @confirm="getList"
- />
- </view>
- <view class="filter-button" @click="getList">
- <up-icon name="search" size="24" color="#999"></up-icon>
+ <view class="upkeep-page">
+ <PageHeader title="璁惧淇濆吇"
+ @back="goBack" />
+ <view class="toolbar">
+ <view class="search-section">
+ <view class="search-bar">
+ <view class="search-input">
+ <up-input class="search-text"
+ placeholder="璇疯緭鍏ヨ澶囧悕绉版悳绱�"
+ v-model="searchKeyword"
+ clearable />
+ </view>
+ <view class="search-button"
+ @click="handleQuery">
+ <up-icon name="search"
+ size="24"
+ color="#999"></up-icon>
+ </view>
</view>
</view>
+ <view class="meta-bar">
+ <text class="meta-text">鍏� {{ total }} 鏉�</text>
+ </view>
</view>
-
- <!-- 璁惧淇濆吇鍒楄〃 -->
- <view class="upkeep-list" v-if="upkeepList.length > 0">
- <view v-for="(item, index) in upkeepList" :key="index">
- <view class="upkeep-item" @click="toggleSelection(item)">
- <view class="item-header">
- <view class="item-left">
- <view class="document-icon">
- <up-icon name="file-text" size="16" color="#ffffff"></up-icon>
- </view>
- <text class="item-id">璁惧鍚嶇О锛歿{ item.deviceName }}</text>
+ <view class="list-section">
+ <view v-for="(item, index) in upkeepList"
+ :key="item.id || index"
+ class="ledger-item">
+ <view class="item-header">
+ <view class="item-left">
+ <view class="document-icon">
+ <up-icon name="file-text"
+ size="14"
+ color="#ffffff"></up-icon>
</view>
- <view class="status-tag">
- <u-tag v-if="item.status === 1" type="success">瀹岀粨</u-tag>
- <u-tag v-if="item.status === 0" type="error">寰呬繚鍏�</u-tag>
- </view>
+ <text class="item-id">{{ item.deviceName || "--" }}</text>
+ </view>
+ <view class="item-right">
+ <u-tag v-if="item.status === 1"
+ type="success">瀹岀粨</u-tag>
+ <u-tag v-if="item.status === 0"
+ type="warning">寰呬繚鍏�</u-tag>
+ <u-tag v-if="item.status === 2"
+ type="error">澶辫触</u-tag>
+ </view>
+ </view>
+ <up-divider></up-divider>
+ <view class="item-details">
+ <view class="detail-row">
+ <text class="detail-label">瑙勬牸鍨嬪彿</text>
+ <text class="detail-value">{{ item.deviceModel || "--" }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">璁″垝淇濆吇鏃ユ湡</text>
+ <text class="detail-value">{{ formatDate(item.maintenancePlanTime) || "--" }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">褰曞叆浜�</text>
+ <text class="detail-value">{{ item.createUserName || "--" }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">褰曞叆鏃ユ湡</text>
+ <text class="detail-value">{{ formatDateTime(item.createTime) || "--" }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">瀹為檯淇濆吇浜�</text>
+ <text class="detail-value">{{ item.maintenanceActuallyName || "--" }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">瀹為檯淇濆吇鏃ユ湡</text>
+ <text class="detail-value">{{ formatDateTime(item.maintenanceActuallyTime) || "--" }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">淇濆吇缁撴灉</text>
+ <text class="detail-value">{{ item.maintenanceResult || "--" }}</text>
</view>
<up-divider></up-divider>
-
- <view class="item-details">
- <view class="detail-row">
- <text class="detail-label">瑙勬牸鍨嬪彿</text>
- <text class="detail-value">{{ item.deviceModel || '-' }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">璁″垝淇濆吇鏃ユ湡</text>
- <text class="detail-value">{{ formatDate(item.maintenancePlanTime) || '-' }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">褰曞叆浜�</text>
- <text class="detail-value">{{ item.createUserName || '-' }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">褰曞叆鏃ユ湡</text>
- <text class="detail-value">{{ formatDateTime(item.createTime) || '-' }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">瀹為檯淇濆吇浜�</text>
- <text class="detail-value">{{ item.maintenanceActuallyName || '-' }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">瀹為檯淇濆吇鏃ユ湡</text>
- <text class="detail-value">{{ formatDateTime(item.maintenanceActuallyTime) || '-' }}</text>
- </view>
- <view class="detail-row">
- <text class="detail-label">淇濆吇缁撴灉</text>
- <view class="detail-value">
- <u-tag v-if="item.maintenanceResult === 1" type="success">
- 瀹屽ソ
- </u-tag>
- <u-tag v-if="item.maintenanceResult === 0" type="error">
- 缁翠慨
- </u-tag>
- <text v-if="item.maintenanceResult === undefined || item.maintenanceResult === null">-</text>
- </view>
- </view>
- </view>
-
- <!-- 鎸夐挳鍖哄煙 -->
- <view class="action-buttons">
- <u-button
- type="primary"
- size="small"
- class="action-btn"
- :disabled="item.status === 1"
- @click.stop="edit(item.id)"
- >
- 缂栬緫
- </u-button>
- <u-button
- type="warning"
- size="small"
- class="action-btn"
- :disabled="item.status === 1"
- @click.stop="addMaintain(item.id)"
- >
+ <view class="card-actions">
+ <u-button type="warning"
+ size="small"
+ class="action-btn"
+ :disabled="item.status === 1"
+ @click.stop="addMaintain(item.id, item)">
淇濆吇
</u-button>
- <u-button
- type="error"
- size="small"
- plain
- class="action-btn"
- @click.stop="delUpkeepByIds(item.id)"
- >
+ <u-button type="error"
+ size="small"
+ plain
+ class="action-btn"
+ @click.stop="delUpkeepByIds(item.id)">
鍒犻櫎
+ </u-button>
+ <u-button type="info"
+ size="small"
+ class="action-btn"
+ @click.stop="viewDetail(item)">
+ 璇︽儏
</u-button>
</view>
</view>
</view>
+ <view v-if="!loading && upkeepList.length === 0"
+ class="no-data">
+ <text>鏆傛棤璁惧淇濆吇鏁版嵁</text>
+ </view>
</view>
-
- <view v-else class="no-data">
- <text>鏆傛棤璁惧淇濆吇鏁版嵁</text>
- </view>
-
- <!-- 娴姩鏂板鎸夐挳 -->
- <view class="fab-button" @click="addPlan">
- <up-icon name="plus" size="24" color="#ffffff"></up-icon>
+ <view class="fab-button"
+ @click="addPlan">
+ <up-icon name="plus"
+ size="24"
+ color="#ffffff"></up-icon>
</view>
</view>
</template>
<script setup>
-import { ref, onMounted } from 'vue'
-import { onShow } from '@dcloudio/uni-app'
-import PageHeader from '@/components/PageHeader.vue'
-import { getUpkeepPage, delUpkeep } from '@/api/equipmentManagement/upkeep'
-import useUserStore from "@/store/modules/user"
-// 鏄剧ず鎻愮ず淇℃伅
-const showToast = (message) => {
- uni.showToast({
- title: message,
- icon: 'none'
- })
-};
-import dayjs from "dayjs"
+ import { ref, onMounted } from "vue";
+ import { onShow } from "@dcloudio/uni-app";
+ import PageHeader from "@/components/PageHeader.vue";
+ import { getUpkeepPage, delUpkeep } from "@/api/equipmentManagement/upkeep";
+ import useUserStore from "@/store/modules/user";
+ // 鏄剧ず鎻愮ず淇℃伅
+ const showToast = message => {
+ uni.showToast({
+ title: message,
+ icon: "none",
+ });
+ };
+ import dayjs from "dayjs";
-const userStore = useUserStore()
+ const userStore = useUserStore();
-// 鎼滅储鍏抽敭璇�
-const searchKeyword = ref('')
+ // 鎼滅储鍏抽敭璇�
+ const searchKeyword = ref("");
-// 璁惧淇濆吇鏁版嵁
-const upkeepList = ref([])
+ // 璁惧淇濆吇鏁版嵁
+ const upkeepList = ref([]);
-// 澶氶�夊垪琛�
-const multipleList = ref([])
+ const total = ref(0);
+ const loading = ref(false);
-// 杩斿洖涓婁竴椤�
-const goBack = () => {
- uni.navigateBack()
-}
+ // 澶氶�夊垪琛紙淇濆吇鎸夐挳鏈紶 id 鏃剁敤锛�
+ const multipleList = ref([]);
-// 鏍煎紡鍖栨棩鏈�
-const formatDate = (dateStr) => {
- if (!dateStr) return ''
- return dayjs(dateStr).format("YYYY-MM-DD")
-}
+ // 杩斿洖涓婁竴椤�
+ const goBack = () => {
+ uni.navigateBack();
+ };
-// 鏍煎紡鍖栨棩鏈熸椂闂�
-const formatDateTime = (dateStr) => {
- if (!dateStr) return ''
- return dayjs(dateStr).format("YYYY-MM-DD HH:mm:ss")
-}
+ // 鏍煎紡鍖栨棩鏈�
+ const formatDate = dateStr => {
+ if (!dateStr) return "";
+ return dayjs(dateStr).format("YYYY-MM-DD");
+ };
-// 鏌ヨ鍒楄〃
-const getList = () => {
- const params = {
- current: -1,
- size: -1,
- deviceName: searchKeyword.value || undefined
- }
- getUpkeepPage(params)
- .then((res) => {
- // 濡傛灉res.data涓嶆槸鏁扮粍锛岃缃负绌烘暟缁�
- upkeepList.value = res.records || res.data?.records || []
- })
- .catch(() => {
- showToast('鑾峰彇鏁版嵁澶辫触')
- })
-}
+ // 鏍煎紡鍖栨棩鏈熸椂闂�
+ const formatDateTime = dateStr => {
+ if (!dateStr) return "";
+ return dayjs(dateStr).format("YYYY-MM-DD HH:mm:ss");
+ };
-// 鍒囨崲閫夋嫨鐘舵��
-const toggleSelection = (item) => {
- const index = multipleList.value.findIndex(selected => selected.id === item.id)
- if (index > -1) {
- multipleList.value.splice(index, 1)
- } else {
- multipleList.value.push(item)
- }
-}
+ const handleQuery = () => {
+ getList();
+ };
-// 妫�鏌ユ槸鍚﹀凡閫夋嫨
-const isSelected = (item) => {
- return multipleList.value.some(selected => selected.id === item.id)
-}
+ // 鏌ヨ鍒楄〃
+ const getList = () => {
+ loading.value = true;
+ const params = {
+ current: -1,
+ size: -1,
+ deviceName: searchKeyword.value || undefined,
+ };
+ getUpkeepPage(params)
+ .then(res => {
+ const records = res?.records ?? res?.data?.records ?? [];
+ upkeepList.value = records;
+ total.value = Array.isArray(records) ? records.length : Number(res?.total ?? res?.data?.total ?? 0);
+ })
+ .catch(() => {
+ upkeepList.value = [];
+ showToast("鑾峰彇鏁版嵁澶辫触");
+ })
+ .finally(() => {
+ loading.value = false;
+ });
+ };
+ // 鏂板闄勪欢 - 璺宠浆鍒伴檮浠堕〉闈�
+ const addFile = id => {
+ // 浣跨敤鏈湴瀛樺偍浼犻�抜d
+ uni.setStorageSync("upkeepId", id);
+ uni.navigateTo({
+ url: "/pages/equipmentManagement/upkeep/fileList",
+ });
+ };
-// 鏂板淇濆吇 - 璺宠浆鍒颁繚鍏婚〉闈�
-const addMaintain = (id) => {
- if (!id && multipleList.value.length !== 1) {
- showToast('璇烽�夋嫨涓�鏉¤褰�')
- return
- }
- const targetId = id || multipleList.value[0].id
- uni.navigateTo({
- url: `/pages/equipmentManagement/upkeep/maintain?id=${targetId}`
- })
-}
+ // 鏄剧ず鍔犺浇鎻愮ず
+ const showLoadingToast = message => {
+ uni.showLoading({
+ title: message,
+ mask: true,
+ });
+ };
-// 鏂板璁″垝 - 璺宠浆鍒版柊澧為〉闈�
-const addPlan = () => {
- uni.navigateTo({
- url: '/pages/equipmentManagement/upkeep/add'
- })
-}
+ // 鍏抽棴鎻愮ず
+ const closeToast = () => {
+ uni.hideLoading();
+ };
-// 缂栬緫 - 璺宠浆鍒癮dd椤甸潰锛岄�氳繃id鍖哄垎鏂板杩樻槸缂栬緫
-const edit = (id) => {
- if (!id) return
- uni.navigateTo({
- url: `/pages/equipmentManagement/upkeep/add?id=${id}`
- })
-}
-
-// 鍒犻櫎淇濆吇鏁版嵁
-const delUpkeepByIds = async (ids) => {
- const deleteIds = Array.isArray(ids) ? ids : [ids]
- if (deleteIds.length === 0) {
- showToast('璇烽�夋嫨瑕佸垹闄ょ殑璁板綍')
- return
- }
-
- uni.showModal({
- title: '璀﹀憡',
- content: '纭鍒犻櫎淇濆吇鏁版嵁, 姝ゆ搷浣滀笉鍙��?',
- confirmText: '纭畾',
- cancelText: '鍙栨秷',
- success: async (res) => {
- if (!res.confirm) return
- try {
- // 閫愪釜鍒犻櫎
- for (const id of deleteIds) {
- const response = await delUpkeep(id)
- if (response.code !== 200) {
- showToast('鍒犻櫎澶辫触')
- return
- }
- }
- showToast('鍒犻櫎鎴愬姛')
- multipleList.value = []
- getList()
- } catch (e) {
- showToast('鍒犻櫎澶辫触')
- }
+ // 鍒囨崲閫夋嫨鐘舵��
+ const toggleSelection = item => {
+ const index = multipleList.value.findIndex(
+ selected => selected.id === item.id
+ );
+ if (index > -1) {
+ multipleList.value.splice(index, 1);
+ } else {
+ multipleList.value.push(item);
}
- })
-}
+ };
-onMounted(() => {
- getList()
-})
+ // 妫�鏌ユ槸鍚﹀凡閫夋嫨
+ const isSelected = item => {
+ return multipleList.value.some(selected => selected.id === item.id);
+ };
-onShow(() => {
- getList()
-})
+ // 鏂板淇濆吇 - 璺宠浆鍒颁繚鍏婚〉闈�
+ const addMaintain = (id, item) => {
+ if (!id && multipleList.value.length !== 1) {
+ showToast("璇烽�夋嫨涓�鏉¤褰�");
+ return;
+ }
+ const targetId = id || multipleList.value[0].id;
+ const targetItem = item || multipleList.value[0];
+ // 浣跨敤鏈湴瀛樺偍浼犻�抜d鍜屽畬鏁存暟鎹�
+ uni.setStorageSync("repairId", targetId);
+ uni.setStorageSync("upkeepItemData", JSON.stringify(targetItem));
+ uni.navigateTo({
+ url: "/pages/equipmentManagement/upkeep/maintain",
+ });
+ };
+
+ // 鏌ョ湅璇︽儏 - 璺宠浆鍒拌鎯呴〉闈�
+ const viewDetail = item => {
+ if (!item) {
+ showToast("鍙傛暟閿欒");
+ return;
+ }
+ // 浣跨敤鏈湴瀛樺偍浼犻�掓暣鏉℃暟鎹�
+ uni.setStorageSync("upkeepDetailData", JSON.stringify(item));
+ uni.navigateTo({
+ url: "/pages/equipmentManagement/upkeep/detail",
+ });
+ };
+
+ // 鏂板璁″垝 - 璺宠浆鍒版柊澧為〉闈�
+ const addPlan = () => {
+ uni.navigateTo({
+ url: "/pages/equipmentManagement/upkeep/add",
+ });
+ };
+
+ // 缂栬緫 - 璺宠浆鍒癮dd椤甸潰锛岄�氳繃id鍖哄垎鏂板杩樻槸缂栬緫
+ const edit = id => {
+ if (!id) return;
+ // 浣跨敤鏈湴瀛樺偍浼犻�抜d
+ uni.setStorageSync("repairId", id);
+ uni.navigateTo({
+ url: "/pages/equipmentManagement/upkeep/add",
+ });
+ };
+
+ // 鍒犻櫎淇濆吇鏁版嵁
+ const delUpkeepByIds = async ids => {
+ const deleteIds = Array.isArray(ids) ? ids : [ids];
+ if (deleteIds.length === 0) {
+ showToast("璇烽�夋嫨瑕佸垹闄ょ殑璁板綍");
+ return;
+ }
+
+ uni.showModal({
+ title: "璀﹀憡",
+ content: "纭鍒犻櫎淇濆吇鏁版嵁, 姝ゆ搷浣滀笉鍙��?",
+ confirmText: "纭畾",
+ cancelText: "鍙栨秷",
+ success: async res => {
+ if (!res.confirm) return;
+ try {
+ // 閫愪釜鍒犻櫎
+ for (const id of deleteIds) {
+ const response = await delUpkeep(id);
+ if (response.code !== 200) {
+ showToast("鍒犻櫎澶辫触");
+ return;
+ }
+ }
+ showToast("鍒犻櫎鎴愬姛");
+ multipleList.value = [];
+ getList();
+ } catch (e) {
+ showToast("鍒犻櫎澶辫触");
+ }
+ },
+ });
+ };
+
+ onMounted(() => {
+ getList();
+ });
+
+ onShow(() => {
+ getList();
+ });
</script>
<style scoped lang="scss">
-.u-divider {
- margin: 0 !important;
-}
-
-.device-upkeep {
- min-height: 100vh;
- background: #f8f9fa;
- position: relative;
- padding-bottom: 80px;
-}
-
-.search-filter-section {
- padding: 10px 20px;
- background: #ffffff;
-}
-
-.search-bar {
- display: flex;
- align-items: center;
- gap: 12px;
-}
-
-.search-input {
- flex: 1;
- background: #f5f5f5;
- border-radius: 24px;
- padding: 10px 16px;
- display: flex;
- align-items: center;
- gap: 8px;
-}
-
-.search-text {
- flex: 1;
- font-size: 14px;
- color: #333;
- background: transparent;
- border: none;
- outline: none;
-}
-
-.search-text::placeholder {
- color: #999;
-}
-
-.filter-button {
- width: 40px;
- height: 40px;
- border-radius: 8px;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-.action-section {
- padding: 10px 20px;
- background: #ffffff;
- border-bottom: 1px solid #f0f0f0;
-}
-
-.action-buttons {
- display: flex;
- gap: 8px;
- justify-content: flex-start;
-}
-
-.upkeep-list {
- padding: 20px;
-}
-
-.upkeep-item {
- background: #ffffff;
- border-radius: 12px;
- margin-bottom: 16px;
- overflow: hidden;
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
- padding: 0 16px;
-}
-
-.item-header {
- padding: 16px 0;
- display: flex;
- align-items: center;
- justify-content: space-between;
-}
-
-.item-left {
- display: flex;
- align-items: center;
- gap: 8px;
-}
-
-.checkbox-wrapper {
- display: flex;
- align-items: center;
-}
-
-.document-icon {
- width: 24px;
- height: 24px;
- background: #2979ff;
- border-radius: 4px;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-.item-id {
- font-size: 14px;
- color: #333;
- font-weight: 500;
-}
-
-.status-tag {
- display: flex;
- align-items: center;
-}
-
-.item-details {
- padding: 16px 0;
-}
-
-.detail-row {
- display: flex;
- align-items: flex-end;
- justify-content: space-between;
- margin-bottom: 8px;
-
- &:last-child {
- margin-bottom: 0;
+ .upkeep-page {
+ min-height: 100vh;
+ background: #f6f7fb;
}
-}
-.detail-label {
- font-size: 12px;
- color: #777777;
- min-width: 80px;
-}
+ .toolbar {
+ padding: 20rpx 24rpx;
+ background: #fff;
+ border-bottom: 1rpx solid #f0f0f0;
+ position: sticky;
+ top: 0;
+ z-index: 10;
+ }
-.detail-value {
- font-size: 12px;
- color: #000000;
- text-align: right;
- flex: 1;
- margin-left: 16px;
- display: flex;
- justify-content: flex-end;
- align-items: center;
-}
+ .search-section {
+ margin-top: 0;
+ }
-.detail-value.highlight {
- color: #2979ff;
- font-weight: 500;
-}
+ .search-bar {
+ display: flex;
+ align-items: center;
+ background: #f7f8fa;
+ border-radius: 14rpx;
+ padding: 8rpx 12rpx 8rpx 16rpx;
+ border: 1rpx solid #eef1f5;
+ }
-.no-data {
- padding: 40px 0;
- text-align: center;
- color: #999;
-}
+ .search-input {
+ flex: 1;
+ min-width: 0;
+ }
-.upkeep-item .action-buttons {
- display: flex;
- gap: 8px;
- padding: 0 0 16px 0;
- justify-content: space-between;
-}
+ .search-text {
+ background: transparent !important;
+ }
-.action-btn {
- flex: 1;
-}
+ :deep(.search-text .u-input__content),
+ :deep(.search-text .up-input__content) {
+ background: transparent !important;
+ padding: 0 !important;
+ }
-.fab-button {
- position: fixed;
- bottom: calc(30px + env(safe-area-inset-bottom));
- right: 30px;
- width: 56px;
- height: 56px;
- background: #667eea;
- border-radius: 50%;
- display: flex;
- align-items: center;
- justify-content: center;
- box-shadow: 0 4px 16px rgba(102, 126, 234, 0.3);
- z-index: 1000;
-}
+ .search-button {
+ width: 64rpx;
+ height: 64rpx;
+ border-radius: 12rpx;
+ background: #ffffff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ .meta-bar {
+ margin-top: 16rpx;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ background: #f7f9fc;
+ border-radius: 12rpx;
+ padding: 10rpx 16rpx;
+ }
+
+ .meta-text {
+ color: #5c6b8a;
+ font-size: 22rpx;
+ }
+
+ .list-section {
+ padding: 20rpx 24rpx;
+ padding-bottom: calc(132rpx + env(safe-area-inset-bottom));
+ }
+
+ .ledger-item {
+ background: #ffffff;
+ border-radius: 20rpx;
+ margin-bottom: 16rpx;
+ overflow: hidden;
+ box-shadow: 0 8rpx 20rpx rgba(0, 0, 0, 0.05);
+ padding: 0 20rpx;
+ }
+
+ .item-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 22rpx 0;
+ }
+
+ .item-left {
+ display: flex;
+ align-items: center;
+ gap: 10rpx;
+ flex: 1;
+ min-width: 0;
+ }
+
+ .item-right {
+ display: flex;
+ align-items: center;
+ }
+
+ .document-icon {
+ width: 38rpx;
+ height: 38rpx;
+ border-radius: 8rpx;
+ background: #2979ff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ .item-id {
+ font-size: 28rpx;
+ color: #1f1f1f;
+ font-weight: 600;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .item-details {
+ padding: 18rpx 0 20rpx;
+ }
+
+ .detail-row {
+ display: flex;
+ align-items: flex-end;
+ justify-content: space-between;
+ margin-bottom: 12rpx;
+ }
+
+ .detail-label {
+ min-width: 160rpx;
+ color: #777;
+ font-size: 24rpx;
+ }
+
+ .detail-value {
+ flex: 1;
+ color: #333;
+ font-size: 24rpx;
+ text-align: right;
+ word-break: break-all;
+ margin-left: 12rpx;
+ }
+
+ .card-actions {
+ padding-top: 8rpx;
+ display: flex;
+ justify-content: flex-end;
+ flex-wrap: wrap;
+ gap: 12rpx;
+ }
+
+ .action-btn {
+ min-width: 100rpx;
+ }
+
+ .fab-button {
+ position: fixed;
+ bottom: calc(30px + env(safe-area-inset-bottom));
+ right: 30px;
+ width: 56px;
+ height: 56px;
+ background: #2979ff;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ box-shadow: 0 4px 16px rgba(41, 121, 255, 0.3);
+ z-index: 1000;
+ }
+
+ .no-data {
+ padding: 40rpx 0;
+ text-align: center;
+ color: #999;
+ }
</style>
\ No newline at end of file
--
Gitblit v1.9.3