From ee42bf1badae06026efa79dc17d2a541297ab49b Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期三, 03 九月 2025 17:43:31 +0800 Subject: [PATCH] 采购管理整体样式优化,搜索条件修改 --- src/pages/sales/invoicingRegistration/add.vue | 446 +++++++++++++++++++------------------------------------ 1 files changed, 152 insertions(+), 294 deletions(-) diff --git a/src/pages/sales/invoicingRegistration/add.vue b/src/pages/sales/invoicingRegistration/add.vue index 1156f6e..beee939 100644 --- a/src/pages/sales/invoicingRegistration/add.vue +++ b/src/pages/sales/invoicingRegistration/add.vue @@ -4,76 +4,70 @@ <PageHeader title="鏂板寮�绁ㄧ櫥璁�" @back="goBack" /> <!-- 琛ㄥ崟鍐呭 --> - <u-form @submit="submitForm" ref="formRef" label-width="110" input-align="right" error-message-align="right"> + <up-form @submit="submitForm" ref="formRef" label-width="130" :rules="rules" :model="form"> <!-- 鍩烘湰淇℃伅 --> - <u-cell-group title="鍩烘湰淇℃伅"> - <u-form-item label="閿�鍞悎鍚屽彿" border-bottom> - <u-input - v-model="form.salesContractNo" + <view class="form-section"> + <up-form-item label="閿�鍞悎鍚屽彿" prop="salesContractNo"> + <up-input v-model="form.salesContractNo" placeholder="鑷姩濉厖" disabled /> + </up-form-item> + <up-form-item label="瀹㈡埛鍚嶇О" prop="customerName"> + <up-input v-model="form.customerName" placeholder="鑷姩濉厖" disabled /> + </up-form-item> + <up-form-item label="涓氬姟鍛�" prop="salesman"> + <up-input v-model="form.salesman" placeholder="鑷姩濉厖" disabled /> + </up-form-item> + <up-form-item label="椤圭洰鍚嶇О" prop="projectName"> + <up-input v-model="form.projectName" placeholder="鑷姩濉厖" disabled /> + </up-form-item> + <up-form-item label="褰曞叆浜�" prop="createUer"> + <up-input v-model="form.createUer" placeholder="璇疯緭鍏ュ綍鍏ヤ汉" disabled /> + </up-form-item> + <up-form-item + label="褰曞叆鏃ユ湡" + prop="createTime" + @click="showCreateTimePicker = true" + > + <up-input + v-model="form.createTime" + placeholder="璇烽�夋嫨褰曞叆鏃ユ湡" readonly - placeholder="鑷姩濉厖" - /> - </u-form-item> - <u-form-item label="瀹㈡埛鍚嶇О" border-bottom> - <u-input - v-model="form.customerName" - readonly - placeholder="鑷姩濉厖" - /> - </u-form-item> - <u-form-item label="涓氬姟鍛�" border-bottom> - <u-input - v-model="form.salesman" - readonly - placeholder="鑷姩濉厖" - /> - </u-form-item> - <u-form-item label="椤圭洰鍚嶇О" border-bottom> - <u-input - v-model="form.projectName" - readonly - placeholder="鑷姩濉厖" - /> - </u-form-item> - <u-form-item label="褰曞叆浜�" border-bottom> - <u-input - v-model="form.createUer" - readonly - placeholder="璇疯緭鍏ュ綍鍏ヤ汉" - /> - </u-form-item> - <u-form-item label="褰曞叆鏃ユ湡" border-bottom> - <u-input - v-model="form.createTime" - readonly - placeholder="璇烽�夋嫨褰曞叆鏃ユ湡" @click="showCreateTimePicker = true" /> - </u-form-item> - <u-form-item label="鍙戠エ鍙风爜" prop="invoiceNo" required border-bottom> - <u-input - v-model="form.invoiceNo" - placeholder="璇疯緭鍏ュ彂绁ㄥ彿鐮�" - /> - </u-form-item> - <u-form-item label="寮�绁ㄦ棩鏈�" prop="issueDate" required border-bottom> - <u-input - v-model="form.issueDate" + <template #right> + <up-icon name="arrow-right" @click="showCreateTimePicker = true"></up-icon> + </template> + </up-form-item> + <up-form-item label="鍙戠エ鍙风爜" prop="invoiceNo" required> + <up-input v-model="form.invoiceNo" placeholder="璇疯緭鍏ュ彂绁ㄥ彿鐮�" /> + </up-form-item> + <up-form-item + label="寮�绁ㄦ棩鏈�" + prop="issueDate" + required + @click="showIssueDatePicker = true" + > + <up-input + v-model="form.issueDate" + placeholder="璇烽�夋嫨寮�绁ㄦ棩鏈�" readonly - placeholder="璇烽�夋嫨寮�绁ㄦ棩鏈�" @click="showIssueDatePicker = true" /> - </u-form-item> - </u-cell-group> + <template #right> + <up-icon name="arrow-right" @click="showIssueDatePicker = true"></up-icon> + </template> + </up-form-item> + </view> <!-- 浜у搧淇℃伅 --> <view class="product-section"> <view class="section-header"> - <text class="section-title">浜у搧淇℃伅</text> + <view> + <text class="section-title">浜у搧淇℃伅</text> + </view> </view> <view v-if="productData.length === 0" class="empty-state"> - <u-empty text="鏆傛棤浜у搧鏁版嵁" /> + <view class="empty-text">鏆傛棤浜у搧鏁版嵁</view> </view> <view v-else class="product-list"> @@ -85,151 +79,127 @@ <!-- 浜у搧澶撮儴 --> <view class="product-header"> <view class="product-title"> - <u-icon name="file-text" color="#2979ff" size="15" /> + <view class="document-icon"> + <up-icon name="file-text" size="16" color="#ffffff"></up-icon> + </view> <text class="product-productCategory">浜у搧 {{ index + 1 }}</text> </view> </view> <!-- 浜у搧淇℃伅琛ㄥ崟 --> <view class="product-form"> - <u-form-item label="浜у搧澶х被" border-bottom> - <u-input - v-model="item.productCategory" - readonly - /> - </u-form-item> - <u-form-item label="瑙勬牸鍨嬪彿" border-bottom> - <u-input - v-model="item.specificationModel" - readonly - /> - </u-form-item> - <u-form-item label="鍗曚綅" border-bottom> - <u-input - v-model="item.unit" - readonly - /> - </u-form-item> - <u-form-item label="鏁伴噺" border-bottom> - <u-input - v-model="item.quantity" - readonly - /> - </u-form-item> - <u-form-item label="绋庣巼(%)" border-bottom> - <u-input - v-model="item.taxRate" - readonly - /> - </u-form-item> - <u-form-item label="鍚◣鍗曚环(鍏�)" border-bottom> - <u-input - v-model="item.taxInclusiveUnitPrice" - readonly - /> - </u-form-item> - <u-form-item label="鍚◣鎬讳环(鍏�)" border-bottom> - <u-input - v-model="item.taxInclusiveTotalPrice" - readonly - /> - </u-form-item> - <u-form-item label="涓嶅惈绋庢�讳环(鍏�)" border-bottom> - <u-input - v-model="item.taxExclusiveTotalPrice" - readonly - /> - </u-form-item> + <up-form-item label="浜у搧澶х被" prop="productCategory"> + <up-input v-model="item.productCategory" placeholder="" disabled /> + </up-form-item> + <up-form-item label="瑙勬牸鍨嬪彿" prop="specificationModel"> + <up-input v-model="item.specificationModel" placeholder="" disabled /> + </up-form-item> + <up-form-item label="鍗曚綅" prop="unit"> + <up-input v-model="item.unit" placeholder="" disabled /> + </up-form-item> + <up-form-item label="鏁伴噺" prop="quantity"> + <up-input v-model="item.quantity" placeholder="" disabled /> + </up-form-item> + <up-form-item label="绋庣巼(%)" prop="taxRate"> + <up-input v-model="item.taxRate" placeholder="" disabled /> + </up-form-item> + <up-form-item label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice"> + <up-input v-model="item.taxInclusiveUnitPrice" placeholder="" disabled /> + </up-form-item> + <up-form-item label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice"> + <up-input v-model="item.taxInclusiveTotalPrice" placeholder="" disabled /> + </up-form-item> + <up-form-item label="涓嶅惈绋庢�讳环(鍏�)" prop="taxExclusiveTotalPrice"> + <up-input v-model="item.taxExclusiveTotalPrice" placeholder="" disabled /> + </up-form-item> <!-- 鏈寮�绁ㄤ俊鎭� --> - <u-form-item label="鏈寮�绁ㄦ暟" border-bottom> - <u-input - v-model="item.currentInvoiceNum" - type="number" + <up-form-item label="鏈寮�绁ㄦ暟" prop="currentInvoiceNum"> + <up-input + v-model="item.currentInvoiceNum" + type="number" placeholder="璇疯緭鍏ュ紑绁ㄦ暟閲�" @blur="invoiceNumBlur(item)" /> - </u-form-item> - <u-form-item label="鏈寮�绁ㄩ噾棰�(鍏�)" border-bottom> - <u-input - v-model="item.currentInvoiceAmount" - type="number" + </up-form-item> + <up-form-item label="鏈寮�绁ㄩ噾棰�(鍏�)" prop="currentInvoiceAmount"> + <up-input + v-model="item.currentInvoiceAmount" + type="number" placeholder="璇疯緭鍏ュ紑绁ㄩ噾棰�" @blur="invoiceAmountBlur(item)" /> - </u-form-item> + </up-form-item> <!-- 鏈紑绁ㄤ俊鎭� --> - <u-form-item label="鏈紑绁ㄦ暟" border-bottom> - <u-input - v-model="item.noInvoiceNum" - readonly - /> - </u-form-item> - <u-form-item label="鏈紑绁ㄩ噾棰�(鍏�)" border-bottom> - <u-input - v-model="item.noInvoiceAmount" - readonly - /> - </u-form-item> + <up-form-item label="鏈紑绁ㄦ暟" prop="noInvoiceNum"> + <up-input v-model="item.noInvoiceNum" placeholder="" disabled /> + </up-form-item> + <up-form-item label="鏈紑绁ㄩ噾棰�(鍏�)" prop="noInvoiceAmount"> + <up-input v-model="item.noInvoiceAmount" placeholder="" disabled /> + </up-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> - </u-form> + <!-- 浣跨敤鍏叡搴曢儴鎸夐挳缁勪欢 --> + <FooterButtons + show + cancelText="鍙栨秷" + confirmText="淇濆瓨" + @cancel="goBack" + @confirm="submitForm" + /> + </up-form> <!-- 鏃ユ湡閫夋嫨鍣� --> - <u-popup v-model="showIssueDatePicker" mode="bottom"> - <u-datetime-picker - v-model="currentIssueDate" - title="閫夋嫨寮�绁ㄦ棩鏈�" + <up-popup :show="showIssueDatePicker" mode="bottom" @close="showIssueDatePicker = false"> + <up-datetime-picker + :show="true" + v-model="pickerIssueDateValue" @confirm="onIssueDateConfirm" @cancel="showIssueDatePicker = false" + mode="date" /> - </u-popup> + </up-popup> - <u-popup v-model="showCreateTimePicker" mode="bottom"> - <u-datetime-picker - v-model="currentCreateTime" - title="閫夋嫨褰曞叆鏃ユ湡" + <up-popup :show="showCreateTimePicker" mode="bottom" @close="showCreateTimePicker = false"> + <up-datetime-picker + :show="true" + v-model="pickerCreateTimeValue" @confirm="onCreateTimeConfirm" @cancel="showCreateTimePicker = false" + mode="date" /> - </u-popup> + </up-popup> </view> </template> <script setup> -import { ref, reactive, onMounted } from 'vue' -// 鏇挎崲 Vant 鐨� toast 涓� uni 鍘熺敓鎴� uview-plus 鐨勬柟娉� -// import { showToast, showLoadingToast, closeToast } from 'vant' -import { invoiceRegistrationSave } from '@/api/salesManagement/invoiceRegistration' -import useUserStore from '@/store/modules/user' -import {getSalesLedgerWithProducts} from "@/api/salesManagement/salesLedger"; - +import { ref, onMounted } from 'vue' // 鏇挎崲 toast 鏂规硶 const showToast = (message) => { - uni.showToast({ - title: message, - icon: 'none' - }) + uni.showToast({ + title: message, + icon: 'none' + }) } const showLoadingToast = (message) => { - uni.showLoading({ - title: message || '鍔犺浇涓�...' - }) + uni.showLoading({ + title: message || '鍔犺浇涓�...' + }) } const closeToast = () => { - uni.hideLoading() + uni.hideLoading() } +import { invoiceRegistrationSave } from '@/api/salesManagement/invoiceRegistration' +import useUserStore from '@/store/modules/user' +import {getSalesLedgerWithProducts} from "@/api/salesManagement/salesLedger"; +import FooterButtons from '@/components/FooterButtons.vue'; +import { formatDateToYMD } from '@/utils/ruoyi' const userStore = useUserStore() const editData = ref(null); @@ -249,14 +219,24 @@ invoiceNo: '' }) +// 琛ㄥ崟鏍¢獙瑙勫垯 +const rules = { + invoiceNo: [ + { required: true, message: '璇疯緭鍏ュ彂绁ㄥ彿鐮�', trigger: 'blur' } + ], + issueDate: [ + { required: true, message: '璇烽�夋嫨寮�绁ㄦ棩鏈�', trigger: 'blur' } + ] +}; + // 浜у搧鏁版嵁 const productData = ref([]) // 鏃ユ湡閫夋嫨鍣ㄧ姸鎬� const showIssueDatePicker = ref(false) const showCreateTimePicker = ref(false) -const currentIssueDate = ref([new Date().getFullYear(), new Date().getMonth() + 1, new Date().getDate()]) -const currentCreateTime = ref([new Date().getFullYear(), new Date().getMonth() + 1, new Date().getDate()]) +const pickerIssueDateValue = ref(Date.now()) +const pickerCreateTimeValue = ref(Date.now()) // 鎻愪氦鐘舵�� const submitting = ref(false) @@ -333,42 +313,20 @@ } // 寮�绁ㄦ棩鏈熺‘璁� -const onIssueDateConfirm = ({ selectedValues }) => { - console.log('selectedValues--', selectedValues) - form.value.issueDate = selectedValues.join('-'); - currentIssueDate.value = selectedValues; +const onIssueDateConfirm = (e) => { + form.value.issueDate = formatDateToYMD(e.value) + pickerIssueDateValue.value = e.value showIssueDatePicker.value = false; }; // 褰曞叆鏃ユ湡纭 -const onCreateTimeConfirm = (value) => { - try { - // 澶勭悊涓嶅悓鐨勫�兼牸寮� - let year, month, day; - - if (Array.isArray(value)) { - // 鏁扮粍鏍煎紡 [year, month, day] - [year, month, day] = value; - } else if (value && typeof value === 'object') { - // Date瀵硅薄鏍煎紡 - year = value.getFullYear(); - month = value.getMonth() + 1; - day = value.getDate(); - } else { - // 鍏朵粬鏍煎紡锛屼娇鐢ㄥ綋鍓嶆棩鏈� - const now = new Date(); - year = now.getFullYear(); - month = now.getMonth() + 1; - day = now.getDate(); - } - - form.value.createTime = `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`; - showCreateTimePicker.value = false; - } catch (error) { - console.error('鏃ユ湡澶勭悊閿欒:', error); - showToast('鏃ユ湡閫夋嫨澶辫触锛岃閲嶈瘯'); - } -} +const onCreateTimeConfirm = (e) => { + form.value.createTime = formatDateToYMD(e.value) + pickerCreateTimeValue.value = e.value + showCreateTimePicker.value = false; +}; + + // 鏍煎紡鍖栨棩鏈� const formatDate = (date) => { @@ -460,106 +418,6 @@ }) </script> -<style scoped lang="scss"> -.account-detail { - min-height: 100vh; - background: #f8f9fa; - padding-bottom: 5rem; -} - -.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 lang="scss"> +@import '@/static/scss/form-common.scss'; </style> -- Gitblit v1.9.3