From a266a501b2022a8db19a3621b9c7f30345a9180b Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 16 九月 2025 15:41:54 +0800
Subject: [PATCH] 结果验证
---
src/pages/procurementManagement/invoiceEntry/add.vue | 590 ++++++++++++++++++++++++++++++++++++++++------------------
1 files changed, 407 insertions(+), 183 deletions(-)
diff --git a/src/pages/procurementManagement/invoiceEntry/add.vue b/src/pages/procurementManagement/invoiceEntry/add.vue
index 8b4e229..a68d6fb 100644
--- a/src/pages/procurementManagement/invoiceEntry/add.vue
+++ b/src/pages/procurementManagement/invoiceEntry/add.vue
@@ -6,118 +6,188 @@
<!-- 琛ㄥ崟鍐呭 -->
<u-form @submit="submitForm" ref="formRef" label-width="110" input-align="right" error-message-align="right">
<!-- 鍩烘湰淇℃伅 -->
- <u-cell-group title="鍩烘湰淇℃伅">
- <u-form-item label="閲囪喘鍚堝悓鍙�" prop="contractNo" required border-bottom>
- <u-input v-model="form.contractNo" placeholder="璇疯緭鍏ラ噰璐悎鍚屽彿" clearable />
+ <view class="form-section">
+ <u-form-item label="閲囪喘鍚堝悓鍙�" prop="purchaseLedgerNo" required>
+ <u-input v-model="form.purchaseLedgerNo" placeholder="鑷姩濉厖" disabled />
</u-form-item>
- <u-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierName" required border-bottom>
- <u-input v-model="form.supplierName" placeholder="璇疯緭鍏ヤ緵搴斿晢鍚嶇О" clearable />
+ <u-form-item label="閿�鍞悎鍚屽彿" prop="salesContractNo" required>
+ <u-input v-model="form.salesContractNo" placeholder="鑷姩濉厖" disabled />
</u-form-item>
- <u-form-item label="鍙戠エ鍙�" prop="invoiceNo" required border-bottom>
- <u-input v-model="form.invoiceNo" placeholder="璇疯緭鍏ュ彂绁ㄥ彿" clearable />
+ <u-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierName" required>
+ <u-input v-model="form.supplierName" placeholder="鑷姩濉厖" disabled />
</u-form-item>
- <u-form-item label="鍙戠エ閲戦" prop="invoiceAmount" required border-bottom>
- <u-input v-model="form.invoiceAmount" type="number" placeholder="璇疯緭鍏ュ彂绁ㄩ噾棰�" clearable />
+ <u-form-item label="椤圭洰鍚嶇О" prop="projectName" required>
+ <u-input v-model="form.projectName" placeholder="鑷姩濉厖" disabled />
</u-form-item>
- <u-form-item label="绋庣巼" prop="taxRate" required border-bottom>
- <u-input v-model="form.taxRate" placeholder="璇疯緭鍏ョ◣鐜�" clearable />
+ <u-form-item label="鍙戠エ鍙�" prop="invoiceNumber" required>
+ <u-input v-model="form.invoiceNumber" placeholder="璇疯緭鍏�" clearable />
</u-form-item>
- <u-form-item label="寮�绁ㄦ棩鏈�" prop="issueDate" required border-bottom>
- <u-input v-model="form.issueDate" placeholder="璇烽�夋嫨寮�绁ㄦ棩鏈�" readonly @click="showIssueDatePicker = true" clearable />
+ <u-form-item label="鍙戠エ閲戦(鍏�)" prop="invoiceAmount" required>
+ <u-input v-model="form.invoiceAmount" type="number" placeholder="鑷姩濉厖" disabled />
</u-form-item>
- <u-form-item label="褰曞叆浜�" border-bottom>
- <u-input v-model="form.recorder" placeholder="鑷姩濉厖" readonly />
+ <u-form-item label="褰曞叆浜�">
+ <u-input v-model="form.issUer" placeholder="鑷姩濉厖" disabled />
</u-form-item>
- <u-form-item label="鍒涘缓鏃堕棿" border-bottom>
- <u-input v-model="form.createTime" placeholder="璇烽�夋嫨鍒涘缓鏃堕棿" readonly @click="showCreateTimePicker = true" clearable />
+ <u-form-item
+ label="寮�绁ㄦ棩鏈�"
+ prop="entryDate"
+ required
+ @click="showEntryDatePicker = true"
+ >
+ <u-input
+ v-model="form.entryDate"
+ placeholder="璇烽�夋嫨寮�绁ㄦ棩鏈�"
+ readonly
+ @click="showEntryDatePicker = true"
+ />
+ <template #right>
+ <u-icon name="arrow-right" @click="showEntryDatePicker = true"></u-icon>
+ </template>
</u-form-item>
- </u-cell-group>
-
- <!-- 浜у搧淇℃伅 -->
- <view class="product-section" v-if="!productData || productData.length === 0">
- <u-empty description="鏆傛棤浜у搧鏁版嵁" />
+ <u-form-item
+ label="褰曞叆鏃ユ湡"
+ prop="enterDate"
+ required
+ @click="showEnterDatePicker = true"
+ >
+ <u-input
+ v-model="form.enterDate"
+ placeholder="璇烽�夋嫨褰曞叆鏃ユ湡"
+ readonly
+ @click="showEnterDatePicker = true"
+ />
+ <template #right>
+ <u-icon name="arrow-right" @click="showEnterDatePicker = true"></u-icon>
+ </template>
+ </u-form-item>
</view>
- <!-- 浜у搧鍒楄〃 -->
- <view class="product-list" v-if="productData && productData.length > 0">
- <view class="product-card" v-for="(product, idx) in productData" :key="idx">
- <view class="product-header">
- <view class="product-title">
- <u-icon name="file-text" color="#2979ff" size="15" />
- <text class="product-name">浜у搧 {{ idx + 1 }}</text>
- </view>
+ <!-- 浜у搧淇℃伅 -->
+ <view class="product-section">
+ <view class="section-header">
+ <view>
+ <text class="section-title">浜у搧淇℃伅</text>
</view>
-
- <!-- 浜у搧淇℃伅琛ㄥ崟 -->
- <view class="product-form">
- <u-form-item label="浜у搧鍚嶇О" border-bottom>
- <u-input v-model="product.productName" placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�" />
- </u-form-item>
- <u-form-item label="瑙勬牸鍨嬪彿" border-bottom>
- <u-input v-model="product.specification" placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�" />
- </u-form-item>
- <u-form-item label="鍗曚綅" border-bottom>
- <u-input v-model="product.unit" placeholder="璇疯緭鍏ュ崟浣�" />
- </u-form-item>
- <u-form-item label="鏁伴噺" border-bottom>
- <u-input v-model="product.quantity" type="number" placeholder="璇疯緭鍏ユ暟閲�" />
- </u-form-item>
- <u-form-item label="鍗曚环" border-bottom>
- <u-input v-model="product.unitPrice" type="number" placeholder="璇疯緭鍏ュ崟浠�" />
- </u-form-item>
- <u-form-item label="閲戦" border-bottom>
- <u-input v-model="product.amount" type="number" placeholder="璇疯緭鍏ラ噾棰�" />
- </u-form-item>
- <u-form-item label="绋庣巼" border-bottom>
- <u-input v-model="product.taxRate" placeholder="璇疯緭鍏ョ◣鐜�" />
- </u-form-item>
- <u-form-item label="绋庨" border-bottom>
- <u-input v-model="product.taxAmount" type="number" placeholder="璇疯緭鍏ョ◣棰�" />
- </u-form-item>
- <u-form-item label="鍚◣閲戦" border-bottom>
- <u-input v-model="product.totalAmount" type="number" placeholder="璇疯緭鍏ュ惈绋庨噾棰�" />
- </u-form-item>
- <u-form-item label="澶囨敞" border-bottom>
- <u-textarea v-model="product.remark" placeholder="璇疯緭鍏ュ娉�" :maxlength="200" count :autoHeight="true" />
- </u-form-item>
+ </view>
+
+ <view v-if="!productData || productData.length === 0" class="empty-state">
+ <view class="empty-text">鏆傛棤浜у搧鏁版嵁</view>
+ </view>
+
+ <view v-else class="product-list">
+ <view
+ v-for="(item, index) in productData"
+ :key="index"
+ class="product-card"
+ >
+ <!-- 浜у搧澶撮儴 -->
+ <view class="product-header">
+ <view class="product-title">
+ <view class="document-icon">
+ <u-icon name="file-text" size="16" color="#ffffff"></u-icon>
+ </view>
+ <text class="product-productCategory">浜у搧 {{ index + 1 }}</text>
+ </view>
+ </view>
+
+ <!-- 浜у搧淇℃伅琛ㄥ崟 -->
+ <view class="product-form">
+ <u-form-item label="浜у搧澶х被" prop="productCategory" border-bottom>
+ <u-input v-model="item.productCategory" placeholder="" disabled />
+ </u-form-item>
+ <u-form-item label="瑙勬牸鍨嬪彿" prop="specificationModel" border-bottom>
+ <u-input v-model="item.specificationModel" placeholder="" disabled />
+ </u-form-item>
+ <u-form-item label="鍗曚綅" prop="unit" border-bottom>
+ <u-input v-model="item.unit" placeholder="" disabled />
+ </u-form-item>
+ <u-form-item label="鏁伴噺" prop="quantity" border-bottom>
+ <u-input v-model="item.quantity" placeholder="" disabled />
+ </u-form-item>
+ <u-form-item label="绋庣巼(%)" prop="taxRate" border-bottom>
+ <u-input v-model="item.taxRate" placeholder="" disabled />
+ </u-form-item>
+ <u-form-item label="褰曞叆鏃ユ湡" prop="registerDate" border-bottom>
+ <u-input v-model="item.registerDate" placeholder="" disabled />
+ </u-form-item>
+ <u-form-item label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" border-bottom>
+ <u-input v-model="item.taxInclusiveUnitPrice" placeholder="" disabled />
+ </u-form-item>
+ <u-form-item label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" border-bottom>
+ <u-input v-model="item.taxInclusiveTotalPrice" placeholder="" disabled />
+ </u-form-item>
+ <u-form-item label="涓嶅惈绋庢�讳环(鍏�)" prop="taxExclusiveTotalPrice" border-bottom>
+ <u-input v-model="item.taxExclusiveTotalPrice" placeholder="" disabled />
+ </u-form-item>
+
+ <!-- 鏈鏉ョエ淇℃伅 -->
+ <u-form-item label="鏈鏉ョエ鏁�" prop="ticketsNum" border-bottom>
+ <u-input
+ v-model="item.ticketsNum"
+ type="number"
+ placeholder="璇疯緭鍏ユ潵绁ㄦ暟閲�"
+ @blur="invoiceNumBlur(item)"
+ />
+ </u-form-item>
+ <u-form-item label="鏈鏉ョエ閲戦(鍏�)" prop="ticketsAmount" border-bottom>
+ <u-input
+ v-model="item.ticketsAmount"
+ type="number"
+ placeholder="璇疯緭鍏ユ潵绁ㄩ噾棰�"
+ @blur="invoiceAmountBlur(item)"
+ />
+ </u-form-item>
+
+ <!-- 鏈潵绁ㄤ俊鎭� -->
+ <u-form-item label="鏈潵绁ㄦ暟" prop="futureTickets" border-bottom>
+ <u-input v-model="item.futureTickets" placeholder="" disabled />
+ </u-form-item>
+ <u-form-item label="鏈潵绁ㄩ噾棰�(鍏�)" prop="futureTicketsAmount" border-bottom>
+ <u-input v-model="item.futureTicketsAmount" placeholder="" disabled />
+ </u-form-item>
+ </view>
</view>
</view>
</view>
- <!-- 鎻愪氦鎸夐挳 -->
- <view class="footer-btns">
- <u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
- <u-button class="save-btn" type="primary" @click="submitForm">淇濆瓨</u-button>
- </view>
+ <!-- 浣跨敤FooterButtons缁勪欢 -->
+ <FooterButtons
+ @cancel="goBack"
+ @confirm="submitForm"
+ :loading="submitting"
+ />
+
+ <!-- 涓哄簳閮ㄦ寜閽暀鍑虹┖闂� -->
+ <view style="height: 80px;"></view>
</u-form>
<!-- 寮�绁ㄦ棩鏈熼�夋嫨鍣� -->
- <u-popup v-model="showIssueDatePicker" mode="bottom">
+ <u-popup :show="showEntryDatePicker" mode="bottom" @close="showEntryDatePicker = false">
<u-datetime-picker
- v-model="issueDateValue"
- title="閫夋嫨寮�绁ㄦ棩鏈�"
- @confirm="onIssueDateConfirm"
- @cancel="showIssueDatePicker = false"
+ :show="true"
+ v-model="entryDateValue"
+ @confirm="onEntryDateConfirm"
+ @cancel="showEntryDatePicker = false"
+ mode="date"
/>
</u-popup>
- <!-- 鍒涘缓鏃堕棿閫夋嫨鍣� -->
- <u-popup v-model="showCreateTimePicker" mode="bottom">
+ <!-- 褰曞叆鏃ユ湡閫夋嫨鍣� -->
+ <u-popup :show="showEnterDatePicker" mode="bottom" @close="showEnterDatePicker = false">
<u-datetime-picker
- v-model="createTimeValue"
- title="閫夋嫨鍒涘缓鏃堕棿"
- @confirm="onCreateTimeConfirm"
- @cancel="showCreateTimePicker = false"
+ :show="true"
+ v-model="enterDateValue"
+ @confirm="onEnterDateConfirm"
+ @cancel="showEnterDatePicker = false"
+ mode="date"
/>
</u-popup>
</view>
</template>
<script setup>
-// 鏇挎崲 Vant 鐨� toast 鏂规硶
-// import { showToast, showLoadingToast, closeToast } from 'vant'
-
-// 鏇挎崲 toast 鏂规硶
+import { ref, onMounted } from 'vue'
+import FooterButtons from '@/components/FooterButtons.vue'
const showToast = (message) => {
uni.showToast({
title: message,
@@ -134,108 +204,262 @@
const closeToast = () => {
uni.hideLoading()
}
+import useUserStore from '@/store/modules/user'
+import {addOrUpdateRegistration, getPurchaseNoById} from "@/api/procurementManagement/invoiceEntry";
+import {getInfo} from "@/api/procurementManagement/invoiceEntry.js";
+import { formatDateToYMD } from '@/utils/ruoyi'
+
+const userStore = useUserStore()
+const editData = ref(null);
+
+// 琛ㄥ崟寮曠敤
+const formRef = ref()
+
+// 琛ㄥ崟鏁版嵁
+let form = ref({
+ purchaseLedgerNo: '',
+ salesContractNo: '',
+ supplierName: '',
+ projectName: '',
+ issUer: '',
+ entryDate: '',
+ enterDate: '',
+ invoiceAmount: '',
+ invoiceNumber: '',
+ fileIds: []
+})
+
+// 浜у搧鏁版嵁
+const productData = ref([])
+
+// 鏂囦欢涓婁紶鐩稿叧
+const action = ref('/dev-api/common/upload')
+const getToken = () => {
+ return userStore.token || ''
+}
+
+// 鏃ユ湡閫夋嫨鍣ㄧ姸鎬�
+const showEntryDatePicker = ref(false)
+const showEnterDatePicker = ref(false)
+const entryDateValue = ref(Date.now())
+const enterDateValue = ref(Date.now())
+
+// 鎻愪氦鐘舵��
+const submitting = ref(false)
+
+// 杩斿洖涓婁竴椤�
+const goBack = () => {
+ // 娓呯悊鏈湴瀛樺偍鐨勬暟鎹�
+ uni.removeStorageSync('editData');
+ uni.navigateBack()
+}
+
+// 鏍煎紡鍖栨暟瀛�
+const formatNumber = (value, precision = 2) => {
+ if (!value && value !== 0) return '0.00'
+ return Number(value).toFixed(precision)
+}
+
+// 鏇存柊鏈潵绁ㄦ暟鎹�
+const updateFutureTicketData = (row) => {
+ const totalQuantity = parseFloat(row.quantity) || 0
+ const currentTicketNum = parseFloat(row.ticketsNum) || 0
+ const totalAmount = parseFloat(row.taxInclusiveTotalPrice) || 0
+ const currentTicketAmount = parseFloat(row.ticketsAmount) || 0
+
+ row.futureTickets = Math.max(0, totalQuantity - currentTicketNum).toFixed(2)
+ row.futureTicketsAmount = Math.max(0, totalAmount - currentTicketAmount).toFixed(2)
+}
+
+// 鏉ョエ鏁伴噺鍙樺寲澶勭悊
+const invoiceNumBlur = (row) => {
+ if (!row.ticketsNum || row.ticketsNum === "") {
+ row.ticketsNum = 0;
+ }
+ if (Number(row.ticketsNum) > Number(row.tempFutureTickets)) {
+ showToast("鏈寮�绁ㄦ暟涓嶅緱澶т簬鏈紑绁ㄦ暟");
+ row.ticketsNum = 0;
+ return;
+ }
+ // 璁$畻鏈鏉ョエ閲戦
+ row.ticketsAmount = row.ticketsNum * row.taxInclusiveUnitPrice;
+ // 璁$畻鏈潵绁ㄦ暟
+ row.futureTickets = row.tempFutureTickets - row.ticketsNum;
+ // 璁$畻鏈潵绁ㄩ噾棰�
+ row.futureTicketsAmount = row.tempFutureTicketsAmount - row.ticketsAmount;
+ calculateinvoiceAmount();
+}
+
+// 鏉ョエ閲戦鍙樺寲澶勭悊
+const invoiceAmountBlur = (row) => {
+ if (!row.ticketsAmount) {
+ row.ticketsAmount = 0;
+ }
+ // 璁$畻鏄惁瓒呰繃鏉ョエ鎬婚噾棰�
+ if (Number(row.ticketsAmount) > Number(row.taxInclusiveTotalPrice)) {
+ showToast('鏈鏉ョエ閲戦涓嶅緱澶т簬鍚◣鎬婚噾棰�');
+ row.ticketsAmount = 0;
+ }
+ // 璁$畻鏈鏉ョエ鏁�
+ row.ticketsNum = Number(
+ (row.ticketsAmount / row.taxInclusiveUnitPrice).toFixed(2)
+ );
+ // 璁$畻鏈潵绁ㄦ暟鍜屾湭鏉ョエ閲戦
+ updateFutureTicketData(row)
+ calculateinvoiceAmount();
+}
+
+const calculateinvoiceAmount = () => {
+ let invoiceAmountTotal = 0;
+ productData.value.forEach((item) => {
+ if (item.ticketsAmount) {
+ invoiceAmountTotal += Number(item.ticketsAmount);
+ }
+ });
+ form.value.invoiceAmount = invoiceAmountTotal.toFixed(2);
+}
+
+// 鏂囦欢涓婁紶鎴愬姛鍥炶皟
+const uploadSuccess = (res) => {
+ if (res && res.data && res.data.fileId) {
+ form.value.fileIds.push(res.data.fileId)
+ }
+}
+
+// 鏂囦欢鍒犻櫎鍥炶皟
+const removeFile = (index, file) => {
+ if (file.fileId) {
+ const fileIndex = form.value.fileIds.indexOf(file.fileId)
+ if (fileIndex > -1) {
+ form.value.fileIds.splice(fileIndex, 1)
+ }
+ }
+}
+
+
+
+// 寮�绁ㄦ棩鏈熺‘璁�
+const onEntryDateConfirm = (e) => {
+ form.value.entryDate = formatDateToYMD(e.value)
+ entryDateValue.value = e.value
+ showEntryDatePicker.value = false;
+};
+
+// 褰曞叆鏃ユ湡纭
+const onEnterDateConfirm = (e) => {
+ form.value.enterDate = formatDateToYMD(e.value)
+ enterDateValue.value = e.value
+ showEnterDatePicker.value = false;
+}
+
+// 鏍煎紡鍖栨棩鏈�
+const formatDate = (date) => {
+ const year = date.getFullYear()
+ const month = String(date.getMonth() + 1).padStart(2, '0')
+ const day = String(date.getDate()).padStart(2, '0')
+ return `${year}-${month}-${day}`
+}
+
+// 鑾峰彇浜у搧鍒楄〃
+const getProductList = async () => {
+ try {
+ showLoadingToast('鍔犺浇涓�...')
+ const res = await getPurchaseNoById({ id: editData.value.id })
+ form.value.purchaseLedgerNo = res.data.purchaseContractNumber;
+ form.value.invoiceAmount = res.data.invoiceAmount;
+ form.value.invoiceNumber = res.data.invoiceNumber;
+ const data = await getInfo({ id: editData.value.id });
+ productData.value = data.data.productData;
+ form.value.salesContractNo = data.data.salesContractNo;
+ form.value.projectName = data.data.projectName;
+ form.value.supplierName = data.data.supplierName;
+ form.value.productData = data.data.productData;
+ // 璁剧疆榛樿褰曞叆浜�
+ form.value.issUer = userStore.nickName
+
+ // 璁剧疆榛樿鏃ユ湡
+ const today = new Date()
+ form.value.enterDate = formatDate(today)
+ form.value.entryDate = formatDate(today)
+
+ closeToast()
+ } catch (error) {
+ closeToast()
+ showToast('鑾峰彇浜у搧鍒楄〃澶辫触')
+ }
+}
+
+// 鎻愪氦琛ㄥ崟
+const submitForm = async () => {
+ try {
+ submitting.value = true
+
+ // 楠岃瘉鍙戠エ鍙锋槸鍚﹀~鍐�
+ if (!form.value.invoiceNumber) {
+ showToast('璇疯緭鍏ュ彂绁ㄥ彿')
+ return
+ }
+
+ // 楠岃瘉浜у搧鏁版嵁
+ if (productData.value.length === 0) {
+ showToast('璇峰厛娣诲姞浜у搧淇℃伅')
+ return
+ }
+
+ // 楠岃瘉鏉ョエ鏁版嵁
+ const hasInvoiceData = productData.value.some(item => {
+ const num = parseFloat(item.ticketsNum) || 0
+ const amount = parseFloat(item.ticketsAmount) || 0
+ return num > 0 || amount > 0
+ })
+
+ if (!hasInvoiceData) {
+ showToast('璇疯嚦灏戣緭鍏ヤ竴涓骇鍝佺殑鏉ョエ淇℃伅')
+ return
+ }
+
+ const submitData = {
+ ...form.value,
+ productData: productData.value
+ }
+
+ await addOrUpdateRegistration(submitData)
+ showToast('鎻愪氦鎴愬姛')
+
+ // 杩斿洖涓婁竴椤�
+ setTimeout(() => {
+ goBack()
+ }, 800)
+
+ } catch (error) {
+ showToast('鎻愪氦澶辫触锛岃閲嶈瘯')
+ } finally {
+ submitting.value = false
+ }
+}
+
+// 椤甸潰鍔犺浇鏃跺垵濮嬪寲鏁版嵁
+onMounted(() => {
+ // 浠庨〉闈㈠弬鏁版垨缂撳瓨涓幏鍙栭攢鍞悎鍚屼俊鎭�
+ const contractInfo = uni.getStorageSync('editData')
+ if (contractInfo) {
+ editData.value = JSON.parse(contractInfo);
+ const contract = JSON.parse(contractInfo)
+ form.value.purchaseLedgerNo = contract.purchaseLedgerNo || ''
+ form.value.salesContractNo = contract.salesContractNo || ''
+ form.value.supplierName = contract.supplierName || ''
+ form.value.projectName = contract.projectName || ''
+ form.value.invoiceAmount = contract.invoiceAmount || ''
+ form.value.invoiceNumber = contract.invoiceNumber || ''
+ form.value.purchaseLedgerId = contract.id || ''
+
+ // 鑾峰彇浜у搧鍒楄〃
+ getProductList()
+ }
+})
</script>
<style scoped lang="scss">
-.account-detail {
- min-height: 100vh;
- background: #f8f9fa;
- padding-bottom: 5rem;
-}
+@import '@/static/scss/form-common.scss';
-.empty-state {
- padding: 40px 0;
-}
-
-.product-section {
- background: #fff;
- margin-top: 1rem;
- padding: 1rem;
- box-shadow: 0 0.125rem 0.5rem rgba(0,0,0,0.04);
-}
-
-.section-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 1rem;
-}
-
-.section-title {
- font-size: 1rem;
- font-weight: 600;
- color: #333;
-}
-
-.product-list {
- .product-card {
- background: #FFFFFF;
- box-shadow: 0 0 1.25rem 0 rgba(0,57,117,0.08);
- border-radius: 0.5rem 0.5rem 0.5rem 0.5rem;
- padding: 1rem 0.5rem 0 0.5rem;
- position: relative;
- margin-bottom: 1rem;
- }
-}
-
-.product-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 0 0.5rem 0.75rem 0.5rem;
- border-bottom: 0.0625rem solid #e8e8e8;
-}
-
-.product-title {
- display: flex;
- align-items: center;
-}
-
-.product-productCategory {
- margin-left: 0.5rem;
- font-size: 0.875rem;
- font-weight: 500;
- color: #333;
-}
-
-.product-form {
- margin-bottom: 1rem;
-}
-.footer-btns {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 0;
- background: #fff;
- display: flex;
- justify-content: space-around;
- align-items: center;
- padding: 0.75rem 0;
- box-shadow: 0 -0.125rem 0.5rem rgba(0,0,0,0.05);
- z-index: 1000;
-}
-.cancel-btn {
- font-weight: 400;
- font-size: 1rem;
- color: #FFFFFF;
- width: 6.375rem;
- background: #C7C9CC;
- 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;
- color: #FFFFFF;
- width: 14rem;
- background: linear-gradient( 140deg, #00BAFF 0%, #006CFB 100%);
- box-shadow: 0 0.25rem 0.625rem 0 rgba(3,88,185,0.2);
- border-radius: 2.5rem 2.5rem 2.5rem 2.5rem;
-}
-// 鍝嶅簲寮忚皟鏁�
-@media (max-width: 768px) {
- .submit-section {
- padding: 12px;
- }
-}
</style>
--
Gitblit v1.9.3