From a26e8d708ab3c8899bee5cae4167ccc3be9b58cd Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期三, 03 九月 2025 14:00:23 +0800 Subject: [PATCH] 销售管理整体样式优化,搜索条件修改 --- src/pages/sales/receiptPayment/index.vue | 217 ------ src/pages/sales/invoiceLedger/detail.vue | 36 src/pages/sales/receiptPaymentLedger/detail.vue | 11 src/pages/procurementManagement/paymentLedger/index.vue | 4 src/pages/sales/invoicingRegistration/index.vue | 220 ------ src/pages/sales/salesAccount/index.vue | 278 +------- src/pages/sales/invoiceLedger/index.vue | 208 ----- src/styles/sales-common.scss | 337 ++++++++++ src/pages/sales/receiptPaymentHistory/index.vue | 198 ------ src/pages/sales/receiptPaymentLedger/index.vue | 340 +++------- src/pages/procurementManagement/paymentLedger/detail.vue | 11 11 files changed, 597 insertions(+), 1,263 deletions(-) diff --git a/src/pages/procurementManagement/paymentLedger/detail.vue b/src/pages/procurementManagement/paymentLedger/detail.vue index e292597..dfe4752 100644 --- a/src/pages/procurementManagement/paymentLedger/detail.vue +++ b/src/pages/procurementManagement/paymentLedger/detail.vue @@ -89,17 +89,16 @@ // 杩斿洖涓婁竴椤� const goBack = () => { + uni.removeStorageSync('supplierId') uni.navigateBack(); }; // 鑾峰彇椤甸潰鍙傛暟 const getPageParams = () => { - const pages = getCurrentPages(); - const currentPage = pages[pages.length - 1]; - const options = currentPage.options; - - if (options.supplierId) { - supplierId.value = options.supplierId; + // 浠庢湰鍦板瓨鍌ㄨ幏鍙栦緵搴斿晢ID + const storedSupplierId = uni.getStorageSync('supplierId'); + if (storedSupplierId) { + supplierId.value = storedSupplierId; } }; diff --git a/src/pages/procurementManagement/paymentLedger/index.vue b/src/pages/procurementManagement/paymentLedger/index.vue index cdeab16..1d15da4 100644 --- a/src/pages/procurementManagement/paymentLedger/index.vue +++ b/src/pages/procurementManagement/paymentLedger/index.vue @@ -116,9 +116,11 @@ const rowClickMethod = (row) => { + // 浣跨敤 uni.setStorageSync 瀛樺偍渚涘簲鍟嗕俊鎭� + uni.setStorageSync('supplierId', row.supplierId); // 璺宠浆鍒板洖娆捐褰曟槑缁嗛〉闈� uni.navigateTo({ - url: `/pages/procurementManagement/paymentLedger/detail?supplierId=${row.supplierId}` + url: '/pages/procurementManagement/paymentLedger/detail' }); }; diff --git a/src/pages/sales/invoiceLedger/detail.vue b/src/pages/sales/invoiceLedger/detail.vue index 8848730..93e622a 100644 --- a/src/pages/sales/invoiceLedger/detail.vue +++ b/src/pages/sales/invoiceLedger/detail.vue @@ -26,24 +26,24 @@ </u-form-item> </u-cell-group> - <u-cell-group title="闄勪欢鏉愭枡锛堜粎鏀寔 pdf锛�"> - <u-upload - accept=".pdf" - multiple - :afterRead="afterReadUpload" - :beforeRead="beforeReadPdf" - > - <u-button class="upload-btn" type="primary"> - 涓婁紶鏂囦欢 - </u-button> - </u-upload> - <view class="uploaded-list" v-if="fileList.length"> - <view class="uploaded-item" v-for="(f, idx) in fileList" :key="idx"> - <text class="file-name">{{ f.name || getFileNameFromUrl(f.url) }}</text> - <u-button size="mini" type="error" plain @click="removeUploaded(idx)">绉婚櫎</u-button> - </view> - </view> - </u-cell-group> +<!-- <u-cell-group title="闄勪欢鏉愭枡锛堜粎鏀寔 pdf锛�">--> +<!-- <u-upload--> +<!-- accept=".pdf"--> +<!-- multiple--> +<!-- :afterRead="afterReadUpload"--> +<!-- :beforeRead="beforeReadPdf"--> +<!-- >--> +<!-- <u-button class="upload-btn" type="primary">--> +<!-- 涓婁紶鏂囦欢--> +<!-- </u-button>--> +<!-- </u-upload>--> +<!-- <view class="uploaded-list" v-if="fileList.length">--> +<!-- <view class="uploaded-item" v-for="(f, idx) in fileList" :key="idx">--> +<!-- <text class="file-name">{{ f.name || getFileNameFromUrl(f.url) }}</text>--> +<!-- <u-button size="mini" type="error" plain @click="removeUploaded(idx)">绉婚櫎</u-button>--> +<!-- </view>--> +<!-- </view>--> +<!-- </u-cell-group>--> <!-- 鎻愪氦鎸夐挳 --> <view class="footer-btns"> diff --git a/src/pages/sales/invoiceLedger/index.vue b/src/pages/sales/invoiceLedger/index.vue index 9b814a4..82c0b80 100644 --- a/src/pages/sales/invoiceLedger/index.vue +++ b/src/pages/sales/invoiceLedger/index.vue @@ -2,28 +2,28 @@ <view class="sales-account"> <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 --> <PageHeader title="寮�绁ㄥ彴璐�" @back="goBack" /> - + <!-- 鎼滅储鍜岀瓫閫夊尯鍩燂紙淇濇寔涓庨攢鍞彴璐﹂鏍间竴鑷达級 --> - <view class="search-filter-section"> + <view class="search-section"> <view class="search-bar"> <view class="search-input"> - <input + <up-input class="search-text" - placeholder="瀹㈡埛鍚嶇О/閿�鍞悎鍚屽彿" + placeholder="璇疯緭鍏ュ鎴峰悕绉�/鍚堝悓鍙锋悳绱�" v-model="searchForm.searchText" - confirm-type="search" - @confirm="handleQuery" + @change="handleQuery" + clearable /> </view> -<!-- <view class="filter-button" @click="showFilter = true">--> -<!-- <up-icon name="list" size="24" color="#999"></up-icon>--> -<!-- </view>--> + <!-- <view class="filter-button" @click="showFilter = true">--> + <!-- <up-icon name="list" size="24" color="#999"></up-icon>--> + <!-- </view>--> <view class="filter-button" @click="handleQuery"> <up-icon name="search" size="24" color="#999"></up-icon> </view> </view> </view> - + <!-- 鍒楄〃鍖哄煙 --> <view class="ledger-list" v-if="ledgerList.length > 0"> <view v-for="(item, index) in ledgerList" :key="index"> @@ -112,16 +112,16 @@ > 鏌ョ湅闄勪欢 </up-button> - <up-button - type="primary" - size="small" - class="action-btn" - v-else - :disabled="item.invoicePerson !== userStore.nickName" - @click="openUpload(item)" - > - 涓婁紶 - </up-button> +<!-- <up-button--> +<!-- type="primary"--> +<!-- size="small"--> +<!-- class="action-btn"--> +<!-- v-else--> +<!-- :disabled="item.invoicePerson !== userStore.nickName"--> +<!-- @click="openUpload(item)"--> +<!-- >--> +<!-- 涓婁紶--> +<!-- </up-button>--> </view> </view> </view> @@ -129,7 +129,7 @@ <view v-else class="no-data"> <text>鏆傛棤寮�绁ㄥ彴璐︽暟鎹�</text> </view> - + <!-- 绛涢�夊脊绐� --> <up-popup v-model="showFilter" mode="bottom" round><up-transition> <view class="filter-popup"> @@ -158,7 +158,7 @@ </view> </view> </up-transition></up-popup> - + <!-- 鏃ュ巻锛氬紑绁ㄦ棩鏈熻寖鍥� --> <up-popup v-model="showInvoiceRange" mode="bottom"><up-transition> <up-datetime-picker @@ -169,7 +169,7 @@ @cancel="showInvoiceRange = false" /> </up-transition></up-popup> - + <!-- 鏃ユ湡锛氬綍鍏ユ棩鏈� --> <up-popup v-model="showCreateDatePicker" mode="bottom"><up-transition> <up-datetime-picker @@ -181,9 +181,9 @@ @cancel="showCreateDatePicker = false" /> </up-transition></up-popup> - - + + <!-- 鍗曡涓婁紶寮圭獥锛堟棤琛ㄥ崟锛� --> <up-popup v-model="showUpload" mode="bottom" round><up-transition> <view class="upload-container"> @@ -210,7 +210,7 @@ </view> </view> </up-transition></up-popup> - + <!-- 闄勪欢鍒楄〃閫夋嫨 --> <up-action-sheet v-model="showFileSheet" :actions="fileActions" cancel-text="鍙栨秷" close-on-click-action @select="onSelectFile"> <view class="up-action-sheet__cancel" @click="showFileSheet = false"> @@ -530,165 +530,15 @@ </script> <style scoped lang="scss"> -.u-divider { - margin: 0 !important; -} -.sales-account { - min-height: 100vh; - background: #f8f9fa; - position: relative; -} +@import '@/styles/sales-common.scss'; -.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; -} - -.ledger-list { - padding: 20px; -} - -.ledger-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; -} - -.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; -} - -.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; - } -} - -.detail-label { - font-size: 12px; - color: #777777; - min-width: 60px; -} - -.detail-value { - font-size: 12px; - color: #000000; - text-align: right; - flex: 1; - margin-left: 16px; -} - -.detail-value.highlight { - color: #2979ff; - font-weight: 500; -} - -.no-data { - padding: 40px 0; - text-align: center; - color: #999; -} - -.action-buttons { - display: flex; - gap: 12px; - padding: 0 0 16px 0; - justify-content: space-between; -} - -.action-btn { - flex: 1; -} - +// 寮�绁ㄥ彴璐︾壒鏈夋牱寮� .filter-popup { padding: 12px 12px 20px; } .switch-row { padding: 12px 16px; - display: flex; - align-items: center; - justify-content: space-between; -} - -.switch-label { - font-size: 14px; - color: #333; } .filter-actions { @@ -743,6 +593,7 @@ box-shadow: 0 -0.125rem 0.5rem rgba(0,0,0,0.05); z-index: 1000; } + .cancel-btn { font-weight: 400; font-size: 1rem; @@ -752,6 +603,7 @@ box-shadow: 0 0.25rem 0.625rem 0 rgba(3,88,185,0.2); border-radius: 2.5rem 2.5rem 2.5rem 2.5rem; } + .save-btn { font-weight: 400; font-size: 1rem; diff --git a/src/pages/sales/invoicingRegistration/index.vue b/src/pages/sales/invoicingRegistration/index.vue index e7af8a9..0b5d6a6 100644 --- a/src/pages/sales/invoicingRegistration/index.vue +++ b/src/pages/sales/invoicingRegistration/index.vue @@ -4,13 +4,15 @@ <PageHeader title="寮�绁ㄧ櫥璁�" @back="goBack" /> <!-- 鎼滅储鍜岀瓫閫夊尯鍩� --> - <view class="search-filter-section"> + <view class="search-section"> <view class="search-bar"> <view class="search-input"> - <input + <up-input class="search-text" - placeholder="璇疯緭鍏ラ攢鍞悎鍚屽彿/瀹㈡埛鍚嶇О" - v-model="searchKeyword" + placeholder="璇疯緭鍏ュ鎴峰悕绉版悳绱�" + v-model="customerName" + clearable + @change="getList" /> </view> <view class="filter-button" @click="getList"> @@ -67,21 +69,21 @@ <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> <view class="action-buttons"> <up-button - type="primary" - size="small" - @click="handleAddInvoice(item)" - class="action-btn" - :disabled="item.noInvoiceAmountTotal == 0" - > - 鏂板寮�绁� - </up-button> - <up-button - size="small" - @click="handleViewDetail(item)" - class="action-btn" - > - 鏌ョ湅璇︽儏 - </up-button> + type="primary" + size="small" + @click="handleAddInvoice(item)" + class="action-btn" + :disabled="item.noInvoiceAmountTotal == 0" + > + 鏂板寮�绁� + </up-button> + <up-button + size="small" + @click="handleViewDetail(item)" + class="action-btn" + > + 鏌ョ湅璇︽儏 + </up-button> </view> </view> </view> @@ -100,7 +102,7 @@ const userStore = useUserStore() // 鎼滅储鍏抽敭璇� -const searchKeyword = ref(''); +const customerName = ref(''); // 閿�鍞彴璐︽暟鎹� const ledgerList = ref([]); @@ -116,7 +118,7 @@ current: -1, size: -1 } - ledgerListPage({...page}).then((res) => { + ledgerListPage({...page, customerName: customerName.value}).then((res) => { ledgerList.value = res.records; total.value = res.total; }).catch(() => { @@ -169,15 +171,9 @@ </script> <style scoped lang="scss"> -.u-divider { - margin: 0 !important; -} -.sales-account { - min-height: 100vh; - background: #f8f9fa; - position: relative; -} +@import '@/styles/sales-common.scss'; +// 寮�绁ㄧ櫥璁扮壒鏈夋牱寮� .nav-icon { width: 24px; height: 24px; @@ -230,176 +226,12 @@ border-radius: 2px; } -.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; -} - -.ledger-list { - padding: 20px; -} - -.ledger-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; -} - -.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; -} - -.item-tag { - background: #4caf50; - border-radius: 4px; - padding: 2px 4px; -} - -.tag-text { - font-size: 11px; - color: #ffffff; - font-weight: 500; -} - -.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; - } -} -.detail-info { - margin-top: 10px; - display: flex; - align-items: flex-start; - justify-content: space-between; -} - -.detail-label { - font-size: 12px; - color: #777777; - min-width: 60px; -} - -.detail-value { - font-size: 12px; - color: #000000; - text-align: right; - flex: 1; - margin-left: 16px; -} - -.detail-value.highlight { - color: #2979ff; - font-weight: 500; -} .detail-value.redlight { color: red; font-weight: 500; } -.action-buttons { - display: flex; - gap: 12px; - padding: 0 0 16px 0; - justify-content: space-between; -} - -.action-btn { - flex: 1; -} - -.no-data { - padding: 40px 0; - text-align: center; - color: #999; -} - .fab-button { - position: fixed; - bottom: 30px; - 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; + bottom: 30px; // 涓庡叾浠栭〉闈㈢殑 calc(30px + env(safe-area-inset-bottom)) 涓嶅悓 } </style> diff --git a/src/pages/sales/receiptPayment/index.vue b/src/pages/sales/receiptPayment/index.vue index ee5a4e7..a98b3db 100644 --- a/src/pages/sales/receiptPayment/index.vue +++ b/src/pages/sales/receiptPayment/index.vue @@ -2,16 +2,17 @@ <view class="sales-account"> <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 --> <PageHeader title="鍥炴鐧昏" @back="goBack" /> - + <!-- 鎼滅储鍜岀瓫閫夊尯鍩� --> - <view class="search-filter-section"> + <view class="search-section"> <view class="search-bar"> <view class="search-input"> - <input + <up-input class="search-text" - placeholder="瀹㈡埛鍚嶇О/鍚堝悓鍙�/椤圭洰鍚嶇О" - v-model="searchForm.searchText" - confirm-type="search" + placeholder="璇疯緭鍏ュ鎴峰悕绉版悳绱�" + v-model="searchForm.customerName" + @change="getList" + clearable /> </view> <view class="filter-button" @click="getList"> @@ -25,9 +26,9 @@ <up-switch v-model="searchForm.status" @change="getList" size="18"/> </view> </view> - - - + + + <!-- 鍒楄〃鍖哄煙 --> <view class="ledger-list" v-if="tableData.length > 0"> <view v-for="(item, index) in tableData" :key="index"> @@ -95,7 +96,7 @@ </view> </view> </view> - + <!-- 鏃犳暟鎹彁绀� --> <view class="no-data" v-else> <text>鏆傛棤鍥炴鏁版嵁</text> @@ -145,9 +146,8 @@ // 鎼滅储琛ㄥ崟 const searchForm = ref({ - searchText: '', - status: true, customerName: '', + status: true, customerContractNo: '', projectName: '' }) @@ -193,201 +193,12 @@ </script> <style scoped lang="scss"> -.u-divider { - margin: 0 !important; -} +@import '@/styles/sales-common.scss'; -.sales-account { - min-height: 100vh; - background: #f8f9fa; - position: relative; -} - -.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; -} - -.switch-row { - padding: 8px; - display: flex; - align-items: center; - justify-content: space-between; - margin-top: 8px; -} - -.switch-label { - font-size: 14px; - color: #333; -} - - - -.ledger-list { - padding: 20px; -} - -.ledger-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; -} - -.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; -} - - - -.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; - } -} - -.detail-label { - font-size: 12px; - color: #777777; - min-width: 60px; -} - +// 鍥炴鐧昏鐗规湁鏍峰紡 .detail-value { - font-size: 12px; - color: #000000; - text-align: right; - flex: 1; - margin-left: 16px; display: flex; align-items: center; justify-content: flex-end; -} - -.detail-value.highlight { - color: #2979ff; - font-weight: 500; -} - -.detail-value.danger { - color: #ee0a24; - font-weight: 500; -} - -.children-list { - .children-title { - font-size: 14px; - font-weight: 500; - color: #333; - padding: 12px 0 8px 0; - border-top: 1px solid #f0f0f0; - } -} - -.child-item { - .child-details { - padding: 12px 0; - } - - .child-actions { - display: flex; - gap: 8px; - padding: 8px 0 16px 0; - justify-content: flex-end; - } -} - -.action-buttons { - display: flex; - gap: 12px; - padding: 0 0 16px 0; - justify-content: space-between; -} - -.action-btn { - flex: 1; - display: flex; - align-items: center; - justify-content: center; - gap: 8px; -} - -.no-data { - padding: 40px 0; - text-align: center; - color: #999; } </style> \ No newline at end of file diff --git a/src/pages/sales/receiptPaymentHistory/index.vue b/src/pages/sales/receiptPaymentHistory/index.vue index b26eb1a..159bae5 100644 --- a/src/pages/sales/receiptPaymentHistory/index.vue +++ b/src/pages/sales/receiptPaymentHistory/index.vue @@ -1,17 +1,18 @@ <template> <view class="receipt-payment-history"> <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 --> - <PageHeader title="鍥炴鍘嗗彶" @back="goBack" /> + <PageHeader title="鍥炴娴佹按" @back="goBack" /> <!-- 鎼滅储鍖哄煙 --> <view class="search-section"> <view class="search-bar"> <view class="search-input"> - <input + <up-input class="search-text" - placeholder="璇疯緭鍏ュ鎴峰悕绉�/瀹㈡埛鍚堝悓鍙�" + placeholder="璇疯緭鍏ュ鎴峰悕绉版悳绱�" v-model="searchForm.searchText" - @input="getList" + @change="getList" + clearable /> </view> <view class="search-button" @click="getList"> @@ -186,118 +187,21 @@ </script> <style scoped lang="scss"> -.u-divider { - margin: 0 !important; -} +@import '@/styles/sales-common.scss'; +// 鍥炴娴佹按鐗规湁鏍峰紡 .receipt-payment-history { min-height: 100vh; background: #f8f9fa; position: relative; } - - -.search-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; -} - -.search-button { - width: 40px; - height: 40px; - border-radius: 8px; - display: flex; - align-items: center; - justify-content: center; -} - -.history-list { - padding: 20px; -} - -.history-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; -} .action-buttons { - display: flex; - gap: 12px; - padding: 12px 0 0 0; - justify-content: space-between; -} -.action-btn { - flex: 1; - display: flex; - align-items: center; - justify-content: center; - gap: 8px; -} -.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; + padding: 12px 0 0 0; // 涓庡叕鍏辨牱寮忎腑鐨� 0 0 16px 0 涓嶅悓 } .item-tag { - border-radius: 4px; - padding: 2px 8px; + padding: 2px 8px; // 涓庡叕鍏辨牱寮忎腑鐨� 2px 4px 涓嶅悓 } .tag-electric { @@ -313,90 +217,8 @@ } .tag-text { - font-size: 14px; + font-size: 14px; // 涓庡叕鍏辨牱寮忎腑鐨� 11px 涓嶅悓 color: #ffffff; font-weight: 500; -} - -.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; - } -} - -.detail-info { - margin-top: 10px; - display: flex; - align-items: flex-start; - justify-content: space-between; -} - -.detail-label { - font-size: 12px; - color: #777777; - min-width: 60px; -} - -.detail-value { - font-size: 12px; - color: #000000; - text-align: right; - flex: 1; - margin-left: 16px; -} - -.detail-value.highlight { - color: #2979ff; - font-weight: 500; -} - -.no-data { - padding: 40px 0; - text-align: center; - color: #999; -} - -.summary-info { - background: #ffffff; - margin: 20px 20px 0 20px; - border-radius: 12px; - padding: 16px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); -} - -.summary-item { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 8px; - - &:last-child { - margin-bottom: 0; - } -} - -.summary-label { - font-size: 14px; - color: #666; -} - -.summary-value { - font-size: 14px; - color: #333; - font-weight: 500; -} - -.summary-value.highlight { - color: #2979ff; - font-weight: 600; } </style> \ No newline at end of file diff --git a/src/pages/sales/receiptPaymentLedger/detail.vue b/src/pages/sales/receiptPaymentLedger/detail.vue index d366154..d549311 100644 --- a/src/pages/sales/receiptPaymentLedger/detail.vue +++ b/src/pages/sales/receiptPaymentLedger/detail.vue @@ -89,17 +89,16 @@ // 杩斿洖涓婁竴椤� const goBack = () => { + uni.removeStorageSync('customerId') uni.navigateBack(); }; // 鑾峰彇椤甸潰鍙傛暟 const getPageParams = () => { - const pages = getCurrentPages(); - const currentPage = pages[pages.length - 1]; - const options = currentPage.options; - - if (options.customerId) { - customerId.value = options.customerId; + // 浠庢湰鍦板瓨鍌ㄨ幏鍙栧鎴稩D + const storedCustomerId = uni.getStorageSync('customerId'); + if (storedCustomerId) { + customerId.value = storedCustomerId; } }; diff --git a/src/pages/sales/receiptPaymentLedger/index.vue b/src/pages/sales/receiptPaymentLedger/index.vue index 068f4e6..d913f34 100644 --- a/src/pages/sales/receiptPaymentLedger/index.vue +++ b/src/pages/sales/receiptPaymentLedger/index.vue @@ -1,67 +1,68 @@ <template> - <view class="receipt-payment-ledger"> - <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 --> - <PageHeader title="瀹㈡埛寰�鏉�" @back="goBack" /> - - <!-- 鎼滅储鍖哄煙 --> - <view class="search-section"> - <view class="search-bar"> - <view class="search-input"> - <input - class="search-text" - placeholder="璇疯緭鍏ュ鎴峰悕绉�" - v-model="searchForm.searchText" - @input="handleQuery" - /> - </view> - <view class="search-button" @click="handleQuery"> - <up-icon name="search" size="24" color="#999"></up-icon> - </view> - </view> - </view> - - <!-- 瀹㈡埛鍒楄〃 --> - <view class="customer-list-container"> - <view class="customer-list" v-if="tableData.length > 0"> - <view - v-for="(item, index) in tableData" - :key="item.id" - class="customer-item" - @click="rowClickMethod(item)" - > - <view class="item-header"> - <view class="item-left"> - <view class="customer-icon"> + <view class="sales-account"> + <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 --> + <PageHeader title="瀹㈡埛寰�鏉�" @back="goBack" /> + + <!-- 鎼滅储鍖哄煙 --> + <view class="search-section"> + <view class="search-bar"> + <view class="search-input"> + <up-input + class="search-text" + placeholder="璇疯緭鍏ュ鎴峰悕绉�" + v-model="searchForm.customerName" + @change="handleQuery" + clearable + /> + </view> + <view class="search-button" @click="handleQuery"> + <up-icon name="search" size="24" color="#999"></up-icon> + </view> + </view> + </view> + + <!-- 瀹㈡埛鍒楄〃 --> + <view class="customer-list-container"> + <view class="customer-list" v-if="tableData.length > 0"> + <view + v-for="(item, index) in tableData" + :key="item.id" + class="customer-item" + @click="rowClickMethod(item)" + > + <view class="item-header"> + <view class="item-left"> + <view class="customer-icon"> <up-icon name="file-text" size="16" color="#ffffff"></up-icon> - </view> - <text class="customer-name">{{ item.customerName }}</text> - </view> - <view class="item-right"> - <up-icon name="arrow-right" size="16" color="#999"></up-icon> - </view> - </view> - <up-divider></up-divider> - <view class="item-details"> - <view class="detail-row"> - <text class="detail-label">寮�绁ㄩ噾棰�(鍏�)</text> - <text class="detail-value">{{ formattedNumber(item.invoiceTotal) }}</text> - </view> - <view class="detail-row"> - <text class="detail-label">鍥炴閲戦(鍏�)</text> - <text class="detail-value">{{ formattedNumber(item.receiptPaymentAmount) }}</text> - </view> - <view class="detail-row"> - <text class="detail-label">搴旀敹閲戦(鍏�)</text> - <text class="detail-value highlight danger">{{ formattedNumber(item.unReceiptPaymentAmount) }}</text> - </view> - </view> - </view> - </view> - <view v-else class="no-data"> - <text>鏆傛棤瀹㈡埛鏁版嵁</text> - </view> - </view> - </view> + </view> + <text class="customer-name">{{ item.customerName }}</text> + </view> + <view class="item-right"> + <up-icon name="arrow-right" size="16" color="#999"></up-icon> + </view> + </view> + <up-divider></up-divider> + <view class="item-details"> + <view class="detail-row"> + <text class="detail-label">寮�绁ㄩ噾棰�(鍏�)</text> + <text class="detail-value">{{ formattedNumber(item.invoiceTotal) }}</text> + </view> + <view class="detail-row"> + <text class="detail-label">鍥炴閲戦(鍏�)</text> + <text class="detail-value">{{ formattedNumber(item.receiptPaymentAmount) }}</text> + </view> + <view class="detail-row"> + <text class="detail-label">搴旀敹閲戦(鍏�)</text> + <text class="detail-value highlight danger">{{ formattedNumber(item.unReceiptPaymentAmount) }}</text> + </view> + </view> + </view> + </view> + <view v-else class="no-data"> + <text>鏆傛棤瀹㈡埛鏁版嵁</text> + </view> + </view> + </view> </template> <script setup> @@ -73,228 +74,73 @@ const tableData = ref([]); const page = reactive({ - current: -1, - size: -1, + current: -1, + size: -1, }); const data = reactive({ - searchForm: { - searchText: "", - invoiceDate: "", - }, + searchForm: { + customerName: "", + invoiceDate: "", + }, }); const { searchForm } = toRefs(data); // 杩斿洖涓婁竴椤� const goBack = () => { - uni.navigateBack(); + uni.navigateBack(); }; // 鏌ヨ鍒楄〃 const handleQuery = () => { - getList(); + getList(); }; const getList = () => { - invoiceLedgerSalesAccount({ ...searchForm.value, ...page }).then((res) => { - tableData.value = res.data.records; - }).catch(() => { - uni.showToast({ - title: '鏌ヨ澶辫触', - icon: 'error' - }); - }); + invoiceLedgerSalesAccount({ ...searchForm.value, ...page }).then((res) => { + tableData.value = res.data.records; + }).catch(() => { + uni.showToast({ + title: '鏌ヨ澶辫触', + icon: 'error' + }); + }); }; const formattedNumber = (value) => { - return parseFloat(value || 0).toFixed(2); + return parseFloat(value || 0).toFixed(2); }; const rowClickMethod = (row) => { - // 璺宠浆鍒板洖娆捐褰曟槑缁嗛〉闈� - uni.navigateTo({ - url: `/pages/sales/receiptPaymentLedger/detail?customerId=${row.id}` - }); + // 浣跨敤 uni.setStorageSync 瀛樺偍瀹㈡埛淇℃伅 + uni.setStorageSync('customerId', row.id); + // 璺宠浆鍒板洖娆捐褰曟槑缁嗛〉闈� + uni.navigateTo({ + url: '/pages/sales/receiptPaymentLedger/detail' + }); }; onShow(() => { - // 椤甸潰鏄剧ず鏃跺埛鏂板垪琛� - getList(); + // 椤甸潰鏄剧ず鏃跺埛鏂板垪琛� + getList(); }); onMounted(() => { - getList(); + getList(); }); </script> <style scoped lang="scss"> -.u-divider { - margin: 0 !important; -} +@import '@/styles/sales-common.scss'; -.receipt-payment-ledger { - min-height: 100vh; - background: #f8f9fa; - position: relative; -} - -.search-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; -} - -.search-button { - width: 40px; - height: 40px; - border-radius: 8px; - display: flex; - align-items: center; - justify-content: center; -} - -.customer-list-container { - padding: 20px; -} - -.customer-list { - display: flex; - flex-direction: column; - gap: 16px; -} - -.customer-item { - background: #ffffff; - border-radius: 12px; - overflow: hidden; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); - padding: 0 16px; - transition: all 0.3s ease; - - &:active { - transform: scale(0.98); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1); - } -} - -.item-header { - padding: 16px 0; - display: flex; - align-items: center; - justify-content: space-between; -} - -.item-left { - display: flex; - align-items: center; - gap: 8px; -} - -.item-right { - display: flex; - align-items: center; - gap: 8px; -} - -.customer-icon { - width: 24px; - height: 24px; - background: #2979ff; - border-radius: 4px; - display: flex; - align-items: center; - justify-content: center; -} - -.customer-name { - font-size: 14px; - color: #333; - font-weight: 500; -} - -.item-index { - font-size: 12px; - color: #999; - background: #f5f5f5; - padding: 2px 8px; - border-radius: 12px; -} - -.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; - } -} - -.detail-label { - font-size: 12px; - color: #777777; - min-width: 60px; -} - -.detail-value { - font-size: 12px; - color: #000000; - text-align: right; - flex: 1; - margin-left: 16px; -} - -.detail-value.highlight { - color: #2979ff; - font-weight: 500; -} - +// 瀹㈡埛寰�鏉ョ壒鏈夋牱寮� .detail-value.danger { - color: #ff4757; - font-weight: 500; -} - -.no-data { - padding: 40px 0; - text-align: center; - color: #999; + color: #ff4757; // 涓庡叕鍏辨牱寮忎腑鐨� #ee0a24 涓嶅悓 + font-weight: 500; } </style> \ No newline at end of file diff --git a/src/pages/sales/salesAccount/index.vue b/src/pages/sales/salesAccount/index.vue index 47f3e30..83ed3dd 100644 --- a/src/pages/sales/salesAccount/index.vue +++ b/src/pages/sales/salesAccount/index.vue @@ -4,13 +4,15 @@ <PageHeader title="閿�鍞彴璐�" @back="goBack" /> <!-- 鎼滅储鍜岀瓫閫夊尯鍩� --> - <view class="search-filter-section"> + <view class="search-section"> <view class="search-bar"> <view class="search-input"> - <input + <up-input class="search-text" - placeholder="璇疯緭鍏ラ攢鍞悎鍚屽彿/瀹㈡埛鍚嶇О" - v-model="searchKeyword" + placeholder="璇疯緭鍏ラ攢鍞悎鍚屽彿鎼滅储" + v-model="salesContractNo" + @change="getList" + clearable /> </view> <view class="filter-button" @click="getList"> @@ -109,7 +111,7 @@ } // 鎼滅储鍏抽敭璇� -const searchKeyword = ref(''); +const salesContractNo = ref(''); // 閿�鍞彴璐︽暟鎹� const ledgerList = ref([]); @@ -126,7 +128,7 @@ current: -1, size: -1 } - ledgerListPage({...page}).then((res) => { + ledgerListPage({...page, salesContractNo: salesContractNo.value}).then((res) => { ledgerList.value = res.records; total.value = res.total; closeToast() @@ -137,227 +139,59 @@ // 澶勭悊鍙拌处淇℃伅鎿嶄綔锛堟煡鐪�/缂栬緫/鏂板锛� const handleInfo = (type, row) => { - try { - // 璁剧疆鎿嶄綔绫诲瀷 - uni.setStorageSync('operationType', type); - - // 濡傛灉鏄煡鐪嬫垨缂栬緫鎿嶄綔 - if (type !== 'add') { - // 楠岃瘉琛屾暟鎹槸鍚﹀瓨鍦� - if (!row) { - uni.showToast({ - title: '鏁版嵁涓嶅瓨鍦�', - icon: 'error' - }); - return; - } - - // 妫�鏌ユ潈闄愶細鍙湁褰曞叆浜烘墠鑳界紪杈� - if (row.entryPerson != userStore.id) { - // 闈炲綍鍏ヤ汉璺宠浆鍒板彧璇昏鎯呴〉闈� - uni.setStorageSync('editData', JSON.stringify(row)); - uni.navigateTo({ - url: '/pages/sales/salesAccount/view' - }); - return; - } - - // 褰曞叆浜虹紪杈戯細瀛樺偍鏁版嵁骞惰烦杞埌缂栬緫椤甸潰 - uni.setStorageSync('editData', JSON.stringify(row)); - uni.navigateTo({ - url: '/pages/sales/salesAccount/detail' - }); - return; - } - - // 鏂板鎿嶄綔锛氱洿鎺ヨ烦杞埌缂栬緫椤甸潰 - uni.navigateTo({ - url: '/pages/sales/salesAccount/detail' - }); - - } catch (error) { - console.error('澶勭悊鍙拌处淇℃伅鎿嶄綔澶辫触:', error); - uni.showToast({ - title: '鎿嶄綔澶辫触锛岃閲嶈瘯', - icon: 'error' - }); - } + try { + // 璁剧疆鎿嶄綔绫诲瀷 + uni.setStorageSync('operationType', type); + + // 濡傛灉鏄煡鐪嬫垨缂栬緫鎿嶄綔 + if (type !== 'add') { + // 楠岃瘉琛屾暟鎹槸鍚﹀瓨鍦� + if (!row) { + uni.showToast({ + title: '鏁版嵁涓嶅瓨鍦�', + icon: 'error' + }); + return; + } + + // 妫�鏌ユ潈闄愶細鍙湁褰曞叆浜烘墠鑳界紪杈� + if (row.entryPerson != userStore.id) { + // 闈炲綍鍏ヤ汉璺宠浆鍒板彧璇昏鎯呴〉闈� + uni.setStorageSync('editData', JSON.stringify(row)); + uni.navigateTo({ + url: '/pages/sales/salesAccount/view' + }); + return; + } + + // 褰曞叆浜虹紪杈戯細瀛樺偍鏁版嵁骞惰烦杞埌缂栬緫椤甸潰 + uni.setStorageSync('editData', JSON.stringify(row)); + uni.navigateTo({ + url: '/pages/sales/salesAccount/detail' + }); + return; + } + + // 鏂板鎿嶄綔锛氱洿鎺ヨ烦杞埌缂栬緫椤甸潰 + uni.navigateTo({ + url: '/pages/sales/salesAccount/detail' + }); + + } catch (error) { + console.error('澶勭悊鍙拌处淇℃伅鎿嶄綔澶辫触:', error); + uni.showToast({ + title: '鎿嶄綔澶辫触锛岃閲嶈瘯', + icon: 'error' + }); + } }; onShow(() => { - // 椤甸潰鏄剧ず鏃跺埛鏂板垪琛� - getList(); + // 椤甸潰鏄剧ず鏃跺埛鏂板垪琛� + getList(); }); </script> <style scoped lang="scss"> -.u-divider { - margin: 0 !important; -} -.sales-account { - min-height: 100vh; - background: #f8f9fa; - position: relative; -} - - - -.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; -} - -.ledger-list { - padding: 20px; -} - -.ledger-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; -} - -.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; -} - -.item-tag { - background: #4caf50; - border-radius: 4px; - padding: 2px 4px; -} - -.tag-text { - font-size: 11px; - color: #ffffff; - font-weight: 500; -} - -.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; - } -} -.detail-info { - margin-top: 10px; - display: flex; - align-items: flex-start; - justify-content: space-between; -} - -.detail-label { - font-size: 12px; - color: #777777; - min-width: 60px; -} - -.detail-value { - font-size: 12px; - color: #000000; - text-align: right; - flex: 1; - margin-left: 16px; -} - -.detail-value.highlight { - color: #2979ff; - font-weight: 500; -} - -.no-data { - padding: 40px 0; - text-align: center; - color: #999; -} - -.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; - /* 纭繚娴姩鎸夐挳涓嶈搴曢儴瀹夊叏鍖哄煙閬尅 */ -} +@import '@/styles/sales-common.scss'; </style> diff --git a/src/styles/sales-common.scss b/src/styles/sales-common.scss new file mode 100644 index 0000000..da0aa13 --- /dev/null +++ b/src/styles/sales-common.scss @@ -0,0 +1,337 @@ +// 閿�鍞ā鍧楀叕鍏辨牱寮� +// 鐢ㄤ簬缁熶竴閿�鍞浉鍏抽〉闈㈢殑鏍峰紡椋庢牸 + +// 椤甸潰瀹瑰櫒鏍峰紡 +.sales-account { + min-height: 100vh; + background: #f8f9fa; + position: relative; +} + +.receipt-payment-ledger { + min-height: 100vh; + background: #f8f9fa; + position: relative; +} + +// 鎼滅储鍜岀瓫閫夊尯鍩熸牱寮� +.search-filter-section, +.search-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: 0 16px; + display: flex; + align-items: center; + gap: 8px; +} + +.search-text { + flex: 1; + font-size: 14px; + color: #333; + background: transparent; + border: none; + outline: none; + + &::placeholder { + color: #999; + } +} + +.filter-button, +.search-button { + width: 40px; + height: 40px; + border-radius: 8px; + display: flex; + align-items: center; + justify-content: center; +} + +// 寮�鍏宠鏍峰紡 +.switch-row { + padding: 8px; + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 8px; +} + +.switch-label { + font-size: 14px; + color: #333; +} + +// 鍒楄〃瀹瑰櫒鏍峰紡 +.ledger-list, +.history-list, +.customer-list-container { + padding: 20px; +} + +.customer-list { + display: flex; + flex-direction: column; + gap: 16px; +} + +// 鍒楄〃椤规牱寮� +.ledger-item, +.history-item, +.customer-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; + + &:active { + transform: scale(0.98); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1); + } +} + +.customer-item { + transition: all 0.3s ease; + margin-bottom: 0; +} + +// 椤圭洰澶撮儴鏍峰紡 +.item-header { + padding: 16px 0; + display: flex; + align-items: center; + justify-content: space-between; +} + +.item-left { + display: flex; + align-items: center; + gap: 8px; +} + +.item-right { + display: flex; + align-items: center; + gap: 8px; +} + +// 鍥炬爣鏍峰紡 +.document-icon, +.customer-icon { + width: 24px; + height: 24px; + background: #2979ff; + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; +} + +// 鏂囨湰鏍峰紡 +.item-id, +.customer-name { + font-size: 14px; + color: #333; + font-weight: 500; +} + +.item-index { + font-size: 12px; + color: #999; + background: #f5f5f5; + padding: 2px 8px; + border-radius: 12px; +} + +// 鏍囩鏍峰紡 +.item-tag { + border-radius: 4px; + padding: 2px 4px; + + &.tag-electric { + background: #4caf50; + } + + &.tag-acceptance { + background: #ff9800; + } + + &.tag-unknown { + background: #9e9e9e; + } +} + +.tag-text { + font-size: 11px; + color: #ffffff; + font-weight: 500; +} + +// 璇︽儏鍖哄煙鏍峰紡 +.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; + } +} + +.detail-info { + margin-top: 10px; + display: flex; + align-items: flex-start; + justify-content: space-between; +} + +.detail-label { + font-size: 12px; + color: #777777; + min-width: 60px; +} + +.detail-value { + font-size: 12px; + color: #000000; + text-align: right; + flex: 1; + margin-left: 16px; + + &.highlight { + color: #2979ff; + font-weight: 500; + } + + &.danger { + color: #ee0a24; + font-weight: 500; + } +} + +// 瀛愬垪琛ㄦ牱寮� +.children-list { + .children-title { + font-size: 14px; + font-weight: 500; + color: #333; + padding: 12px 0 8px 0; + border-top: 1px solid #f0f0f0; + } +} + +.child-item { + .child-details { + padding: 12px 0; + } + + .child-actions { + display: flex; + gap: 8px; + padding: 8px 0 16px 0; + justify-content: flex-end; + } +} + +// 鎿嶄綔鎸夐挳鏍峰紡 +.action-buttons { + display: flex; + gap: 12px; + padding: 0 0 16px 0; + justify-content: space-between; + + &.action-buttons-top { + padding: 12px 0 0 0; + } +} + +.action-btn { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; +} + +// 娴姩鎸夐挳鏍峰紡 +.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: 40px 0; + text-align: center; + color: #999; +} + +// 姹囨�讳俊鎭牱寮� +.summary-info { + background: #ffffff; + margin: 20px 20px 0 20px; + border-radius: 12px; + padding: 16px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); +} + +.summary-item { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + + &:last-child { + margin-bottom: 0; + } +} + +.summary-label { + font-size: 14px; + color: #666; +} + +.summary-value { + font-size: 14px; + color: #333; + font-weight: 500; + + &.highlight { + color: #2979ff; + font-weight: 600; + } +} + +// uView缁勪欢鏍峰紡閲嶇疆 +.u-divider { + margin: 0 !important; +} \ No newline at end of file -- Gitblit v1.9.3