From 025e46e11cb2962fd7692adfa401333758cc779b Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 02 九月 2025 14:00:34 +0800
Subject: [PATCH] 修改组件

---
 src/pages/sales/invoicingRegistration/add.vue |  427 +++++++++++++++++++----------------------------------
 1 files changed, 152 insertions(+), 275 deletions(-)

diff --git a/src/pages/sales/invoicingRegistration/add.vue b/src/pages/sales/invoicingRegistration/add.vue
index b87cb7b..beee939 100644
--- a/src/pages/sales/invoicingRegistration/add.vue
+++ b/src/pages/sales/invoicingRegistration/add.vue
@@ -4,72 +4,70 @@
     <PageHeader title="鏂板寮�绁ㄧ櫥璁�" @back="goBack" />
     
     <!-- 琛ㄥ崟鍐呭 -->
-    <van-form @submit="submitForm" ref="formRef" label-width="110px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
+    <up-form @submit="submitForm" ref="formRef" label-width="130" :rules="rules" :model="form">
       <!-- 鍩烘湰淇℃伅 -->
-      <van-cell-group title="鍩烘湰淇℃伅" inset>
-        <van-field
-          v-model="form.salesContractNo"
-          label="閿�鍞悎鍚屽彿"
-          readonly
-          placeholder="鑷姩濉厖"
-        />
-        <van-field
-          v-model="form.customerName"
-          label="瀹㈡埛鍚嶇О"
-          readonly
-          placeholder="鑷姩濉厖"
-        />
-        <van-field
-          v-model="form.salesman"
-          label="涓氬姟鍛�"
-          readonly
-          placeholder="鑷姩濉厖"
-        />
-        <van-field
-          v-model="form.projectName"
-          label="椤圭洰鍚嶇О"
-          readonly
-          placeholder="鑷姩濉厖"
-        />
-        <van-field
-          v-model="form.createUer"
-          label="褰曞叆浜�"
-					readonly
-          placeholder="璇疯緭鍏ュ綍鍏ヤ汉"
-        />
-				<van-field
-					v-model="form.createTime"
-					label="褰曞叆鏃ユ湡"
-					readonly
-					placeholder="璇烽�夋嫨褰曞叆鏃ユ湡"
-					@click="showCreateTimePicker = true"
-				/>
-				<van-field
-					v-model="form.invoiceNo"
-					label="鍙戠エ鍙风爜"
-					required
-					placeholder="璇疯緭鍏ュ彂绁ㄥ彿鐮�"
-					:rules="[{ required: true, message: '璇疯緭鍏ュ彂绁ㄥ彿鐮�' }]"
-				/>
-        <van-field
-          v-model="form.issueDate"
-          label="寮�绁ㄦ棩鏈�"
-          readonly
-          placeholder="璇烽�夋嫨寮�绁ㄦ棩鏈�"
-					required
+      <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
+            @click="showCreateTimePicker = true"
+          />
+          <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"
-          :rules="[{ required: true, message: '璇烽�夋嫨寮�绁ㄦ棩鏈�' }]"
-        />
-      </van-cell-group>
+        >
+          <up-input 
+            v-model="form.issueDate" 
+            placeholder="璇烽�夋嫨寮�绁ㄦ棩鏈�" 
+            readonly
+            @click="showIssueDatePicker = true"
+          />
+          <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">
-          <van-empty description="鏆傛棤浜у搧鏁版嵁" />
+          <view class="empty-text">鏆傛棤浜у搧鏁版嵁</view>
         </view>
         
         <view v-else class="product-list">
@@ -81,116 +79,105 @@
             <!-- 浜у搧澶撮儴 -->
             <view class="product-header">
               <view class="product-title">
-                <van-icon name="description" 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">
-              <van-field
-                v-model="item.productCategory"
-                label="浜у搧澶х被"
-                readonly
-              />
-              <van-field
-                v-model="item.specificationModel"
-                label="瑙勬牸鍨嬪彿"
-                readonly
-              />
-              <van-field
-                v-model="item.unit"
-                label="鍗曚綅"
-                readonly
-              />
-              <van-field
-                v-model="item.quantity"
-                label="鏁伴噺"
-                readonly
-              />
-              <van-field
-                v-model="item.taxRate"
-								label="绋庣巼(%)"
-                readonly
-              />
-              <van-field
-                v-model="item.taxInclusiveUnitPrice"
-                label="鍚◣鍗曚环(鍏�)"
-                readonly
-              />
-              <van-field
-                v-model="item.taxInclusiveTotalPrice"
-                label="鍚◣鎬讳环(鍏�)"
-                readonly
-              />
-              <van-field
-                v-model="item.taxExclusiveTotalPrice"
-                label="涓嶅惈绋庢�讳环(鍏�)"
-                readonly
-              />
+              <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>
               
               <!-- 鏈寮�绁ㄤ俊鎭� -->
-              <van-field
-                v-model="item.currentInvoiceNum"
-                label="鏈寮�绁ㄦ暟"
-                type="number"
-                placeholder="璇疯緭鍏ュ紑绁ㄦ暟閲�"
-                @blur="invoiceNumBlur(item)"
-              />
-              <van-field
-                v-model="item.currentInvoiceAmount"
-                label="鏈寮�绁ㄩ噾棰�(鍏�)"
-                type="number"
-                placeholder="璇疯緭鍏ュ紑绁ㄩ噾棰�"
-                @blur="invoiceAmountBlur(item)"
-              />
+              <up-form-item label="鏈寮�绁ㄦ暟" prop="currentInvoiceNum">
+                <up-input 
+                  v-model="item.currentInvoiceNum" 
+                  type="number" 
+                  placeholder="璇疯緭鍏ュ紑绁ㄦ暟閲�"
+                  @blur="invoiceNumBlur(item)"
+                />
+              </up-form-item>
+              <up-form-item label="鏈寮�绁ㄩ噾棰�(鍏�)" prop="currentInvoiceAmount">
+                <up-input 
+                  v-model="item.currentInvoiceAmount" 
+                  type="number" 
+                  placeholder="璇疯緭鍏ュ紑绁ㄩ噾棰�"
+                  @blur="invoiceAmountBlur(item)"
+                />
+              </up-form-item>
               
               <!-- 鏈紑绁ㄤ俊鎭� -->
-              <van-field
-                v-model="item.noInvoiceNum"
-                label="鏈紑绁ㄦ暟"
-                readonly
-              />
-              <van-field
-                v-model="item.noInvoiceAmount"
-                label="鏈紑绁ㄩ噾棰�(鍏�)"
-                readonly
-              />
+              <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">
-				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
-				<van-button class="save-btn" native-type="submit" form-type="submit">淇濆瓨</van-button>
-			</view>
-    </van-form>
+      <!-- 浣跨敤鍏叡搴曢儴鎸夐挳缁勪欢 -->
+		<FooterButtons
+			show
+			cancelText="鍙栨秷"
+			confirmText="淇濆瓨"
+			@cancel="goBack"
+			@confirm="submitForm"
+		/>
+    </up-form>
 
     <!-- 鏃ユ湡閫夋嫨鍣� -->
-    <van-popup v-model:show="showIssueDatePicker" position="bottom">
-      <van-date-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"
       />
-    </van-popup>
+    </up-popup>
 
-    <van-popup v-model:show="showCreateTimePicker" position="bottom">
-      <van-date-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"
       />
-    </van-popup>
+    </up-popup>
   </view>
 </template>
 
 <script setup>
-import { ref, reactive, onMounted } from 'vue'
+import { ref, onMounted } from 'vue'
 // 鏇挎崲 toast 鏂规硶
 const showToast = (message) => {
 	uni.showToast({
@@ -211,6 +198,8 @@
 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);
@@ -230,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)
@@ -314,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) => {
@@ -441,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