From 7a0ffb0048adeda9ebfbca1d0b525eb224c173e3 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 29 八月 2025 17:00:16 +0800
Subject: [PATCH] 修改组件

---
 src/pages/equipmentManagement/upkeep/index.vue                      |   63 
 src/pages/procurementManagement/invoiceEntry/add.vue                |  138 --
 src/pages.json                                                      |    7 
 src/pages/procurementManagement/paymentEntry/index.vue              |   23 
 src/pages/procurementManagement/paymentEntry/add.vue                |  188 +-
 src/pages/procurementManagement/paymentEntry/edit.vue               |  159 +-
 src/pages/procurementManagement/procurementLedger/detail.vue        |  285 ++--
 src/pages/sales/salesAccount/detail.vue                             |  330 ++---
 src/pages/equipmentManagement/repair/add.vue                        |  134 +-
 src/pages/equipmentManagement/upkeep/maintain.vue                   |   90 
 src/pages/sales/receiptPayment/edit.vue                             |  170 +-
 src/pages/cooperativeOffice/collaborativeApproval/approve.vue       |   21 
 src/pages/sales/receiptPayment/index.vue                            |   14 
 src/pages/sales/invoicingRegistration/add.vue                       |  303 ++--
 src/pages/equipmentManagement/repair/maintain.vue                   |   88 
 src/pages/sales/invoiceLedger/detail.vue                            |  103 -
 src/pages/cooperativeOffice/collaborativeApproval/index.vue         |   27 
 src/pages/equipmentManagement/ledger/index.vue                      |   25 
 src/pages/equipmentManagement/upkeep/add.vue                        |  100 
 src/pages/cooperativeOffice/collaborativeApproval/detail.vue        |  122 +
 src/pages/sales/invoicingRegistration/index.vue                     |   16 
 src/pages/sales/receiptPayment/add.vue                              |  174 +-
 src/pages/login.vue                                                 |    6 
 src/main.js                                                         |    8 
 src/pages_mine/pages/info/index.vue                                 |   60 
 src/pages/cooperativeOffice/collaborativeApproval/contactSelect.vue |   53 
 src/pages/equipmentManagement/repair/index.vue                      |   53 
 src/config.js                                                       |    4 
 src/pages/cooperativeOffice/clientVisit/detail.vue                  |  179 +-
 src/pages/equipmentManagement/ledger/detail.vue                     |  202 +-
 src/pages/cooperativeOffice/clientVisit/index.vue                   |  418 ------
 src/pages/procurementManagement/procurementInvoiceLedger/detail.vue |   79 
 32 files changed, 1,385 insertions(+), 2,257 deletions(-)

diff --git a/src/config.js b/src/config.js
index 47daed0..65baaa4 100644
--- a/src/config.js
+++ b/src/config.js
@@ -1,7 +1,7 @@
 // 搴旂敤鍏ㄥ眬閰嶇疆
 const config = {
-  // baseUrl: 'http://114.132.189.42:8089', // 娴嬭瘯搴�
-  baseUrl: 'http://192.168.1.147:7003', // 鏈湴鑱旇皟
+  baseUrl: 'http://114.132.189.42:8089', // 娴嬭瘯搴�
+  // baseUrl: 'http://192.168.1.147:7003', // 鏈湴鑱旇皟
    //cloud鍚庡彴缃戝叧鍦板潃
   //  baseUrl: 'http://192.168.10.3:8080',
    // 搴旂敤淇℃伅
diff --git a/src/main.js b/src/main.js
index dfd7393..c866fb5 100644
--- a/src/main.js
+++ b/src/main.js
@@ -2,9 +2,8 @@
 import plugins from './plugins'
 import store from './store'
 import uviewPlus from 'uview-plus'
-// 绉婚櫎浠ヤ笅涓よ Vant 鐩稿叧瀵煎叆
-// import Vant from 'vant';
-// import 'vant/lib/index.css';
+import Vant from 'vant';
+import 'vant/lib/index.css';
 import { setupGlobalComponents } from './components'
 
 
@@ -24,8 +23,7 @@
   app.use(store)
   app.use(uviewPlus)
   app.use(plugins)
-  // 绉婚櫎浠ヤ笅琛� Vant 娉ㄥ唽
-  // app.use(Vant)
+  app.use(Vant)
   
   // 娉ㄥ唽鍏ㄥ眬缁勪欢
   setupGlobalComponents(app)
diff --git a/src/pages.json b/src/pages.json
index 700c2c3..66d15c2 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -294,13 +294,6 @@
       }
     },
     {
-      "path": "pages/cooperativeOffice/clientVisit/detail",
-      "style": {
-        "navigationBarTitleText": "瀹㈡埛鎷滆鐧昏",
-        "navigationStyle": "custom"
-      }
-    },
-    {
       "path": "pages/equipmentManagement/ledger/index",
       "style": {
         "navigationBarTitleText": "璁惧鍙拌处",
diff --git a/src/pages/cooperativeOffice/clientVisit/detail.vue b/src/pages/cooperativeOffice/clientVisit/detail.vue
index e22638a..d429a6b 100644
--- a/src/pages/cooperativeOffice/clientVisit/detail.vue
+++ b/src/pages/cooperativeOffice/clientVisit/detail.vue
@@ -1,122 +1,107 @@
 <template>
-  <view class="client-visit">
-    <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-    <PageHeader title="瀹㈡埛鎷滆鐧昏" @back="goBack" />
+  <view class="client-visit-detail">
+    <PageHeader title="瀹㈡埛鎷滆璇︽儏" @back="goBack" />
     
-    <!-- 绛惧埌琛ㄥ崟 -->
-    <van-form @submit="handleSignIn" ref="formRef" label-width="110px" input-align="right" error-message-align="right">
+    <u-form @submit="handleSignIn" ref="formRef" label-width="110" input-align="right" error-message-align="right">
       <!-- 瀹㈡埛淇℃伅 -->
-      <van-cell-group title="瀹㈡埛淇℃伅" inset>
-        <van-field
-          v-model="form.customerName"
-          label="瀹㈡埛鍚嶇О"
-          placeholder="璇疯緭鍏ュ鎴峰悕绉�"
-          required
-          name="customerName"
-          clearable
-        />
-        <van-field
-          v-model="form.contact"
-          label="鑱旂郴浜�"
-          placeholder="璇疯緭鍏ヨ仈绯讳汉"
-          name="contact"
-          clearable
-        />
-        <van-field
-          v-model="form.contactPhone"
-          label="鑱旂郴鐢佃瘽"
-          placeholder="璇疯緭鍏ヨ仈绯荤數璇�"
-          name="contactPhone"
-          clearable
-        />
-      </van-cell-group>
-      
+      <u-cell-group title="瀹㈡埛淇℃伅">
+        <u-form-item label="瀹㈡埛鍚嶇О" prop="customerName" required border-bottom>
+          <u-input
+            v-model="form.customerName"
+            placeholder="璇疯緭鍏ュ鎴峰悕绉�"
+            readonly
+          />
+        </u-form-item>
+        <u-form-item label="鑱旂郴浜�" prop="contactPerson" border-bottom>
+          <u-input
+            v-model="form.contactPerson"
+            placeholder="璇疯緭鍏ヨ仈绯讳汉"
+            readonly
+          />
+        </u-form-item>
+        <u-form-item label="鑱旂郴鐢佃瘽" prop="contactPhone" border-bottom>
+          <u-input
+            v-model="form.contactPhone"
+            placeholder="璇疯緭鍏ヨ仈绯荤數璇�"
+            readonly
+          />
+        </u-form-item>
+      </u-cell-group>
+
       <!-- 鎷滆淇℃伅 -->
-      <van-cell-group title="鎷滆淇℃伅" inset>
-        <van-field
-          v-model="form.visitingPeople"
-          label="鎷滆浜�"
-          placeholder="鎷滆浜�"
-          name="visitingPeople"
-          readonly
-          clearable
-        />
-        <van-field
-          v-model="form.purposeVisit"
-          label="鎷滆鐩殑"
-          placeholder="璇疯緭鍏ユ嫓璁跨洰鐨�"
-          name="purposeVisit"
-          required
-          clearable
-        />
-        <van-field
-          v-model="form.purposeDate"
-          label="鎷滆鏃堕棿"
-          placeholder="璇烽�夋嫨鎷滆鏃堕棿"
-          name="purposeDate"
-          required
-          readonly
-          @click="showTimePicker"
-          clearable
-        />
-        <van-field
-          v-model="form.visitAddress"
-          label="褰撳墠浣嶇疆"
-          placeholder="鐐瑰嚮鑾峰彇褰撳墠浣嶇疆"
-          name="visitAddress"
-          :readonly="true"
-  :disabled="true" 
-          type="textarea"
-          @click="getCurrentLocation"
-          clearable
-        >
-          <template #right-icon>
-            <van-icon name="location-o" @click.stop="getCurrentLocation" class="location-icon" />
-          </template>
-        </van-field>
-      </van-cell-group>
-      
+      <u-cell-group title="鎷滆淇℃伅">
+        <u-form-item label="鎷滆鐩殑" prop="visitPurpose" required border-bottom>
+          <u-input
+            v-model="form.visitPurpose"
+            placeholder="璇疯緭鍏ユ嫓璁跨洰鐨�"
+          />
+        </u-form-item>
+        <u-form-item label="鎷滆鏃堕棿" prop="visitTime" required border-bottom>
+          <u-input
+            v-model="form.visitTime"
+            placeholder="璇烽�夋嫨鎷滆鏃堕棿"
+            readonly
+            @click="showTimePicker"
+          />
+        </u-form-item>
+        <u-form-item label="鎷滆鍦扮偣" prop="visitLocation" required border-bottom>
+          <u-input
+            v-model="form.visitLocation"
+            placeholder="璇疯緭鍏ユ嫓璁垮湴鐐�"
+          >
+            <template #suffix>
+              <u-icon name="map" @click.stop="getCurrentLocation" class="location-icon" />
+            </template>
+          </u-input>
+        </u-form-item>
+      </u-cell-group>
+
       <!-- 澶囨敞淇℃伅 -->
-      <van-cell-group title="澶囨敞淇℃伅" inset>
-        <van-field
-          v-model="form.remark"
-          label="澶囨敞"
-          name="remark"
-          type="textarea"
-          placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
-          rows="3"
-          autosize
-          clearable
-        />
-      </van-cell-group>
-      
+      <u-cell-group title="澶囨敞淇℃伅">
+        <u-form-item label="澶囨敞" prop="remark" border-bottom>
+          <u-textarea
+            v-model="form.remark"
+            placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
+            :maxlength="200"
+            count
+            :autoHeight="true"
+          />
+        </u-form-item>
+      </u-cell-group>
+
       <!-- 鎻愪氦鎸夐挳 -->
       <view class="footer-btns">
-        <van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
-        <van-button class="sign-btn" native-type="submit" form-type="submit" :loading="loading">绛惧埌</van-button>
+        <u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
+        <u-button class="sign-btn" type="primary" @click="handleSignIn" :loading="loading">绛惧埌</u-button>
       </view>
-    </van-form>
-    
+    </u-form>
+
     <!-- 鏃堕棿閫夋嫨鍣� -->
-    <van-popup v-model:show="showTime" position="bottom">
-      <van-date-picker
+    <u-popup v-model="showTime" mode="bottom">
+      <u-datetime-picker
         v-model="currentTime"
-        type="datetime"
+        title="閫夋嫨鏃堕棿"
         @confirm="onTimeConfirm"
         @cancel="showTime = false"
-        title="閫夋嫨鎷滆鏃堕棿"
       />
-    </van-popup>
+    </u-popup>
   </view>
 </template>
 
 <script setup>
+// 鏇挎崲 toast 鏂规硶
+const showToast = (message) => {
+  uni.showToast({
+    title: message,
+    icon: 'none'
+  })
+}
+
 import { ref, onMounted } from 'vue'
 import { onShow } from '@dcloudio/uni-app'
 import PageHeader from '@/components/PageHeader.vue'
 import { clientVisitSignIn } from '@/api/cooperativeOffice/clientVisit'
 import useUserStore from "@/store/modules/user"
-import { showToast } from 'vant'
 import dayjs from "dayjs"
 
 const userStore = useUserStore()
diff --git a/src/pages/cooperativeOffice/clientVisit/index.vue b/src/pages/cooperativeOffice/clientVisit/index.vue
index afcb5d6..6e22066 100644
--- a/src/pages/cooperativeOffice/clientVisit/index.vue
+++ b/src/pages/cooperativeOffice/clientVisit/index.vue
@@ -1,389 +1,59 @@
+// 瀹㈡埛鎷滆
 <template>
-  <view class="client-visit-list">
-    <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-    <PageHeader title="瀹㈡埛鎷滆" @back="goBack" />
-    
-    <!-- 鎼滅储鍜岀瓫閫夊尯鍩� -->
-    <view class="search-filter-section">
-      <view class="search-bar">
-        <view class="search-input">
-          <input
-            class="search-text"
-            placeholder="璇疯緭鍏ュ鎴峰悕绉�"
-            v-model="customerName"
-            confirm-type="search"
-            @confirm="getList"
-          />
-        </view>
-        <view class="filter-button" @click="getList">
-          <up-icon name="search" size="24" color="#999"></up-icon>
-        </view>
+  <view>
+    <view class="page-header">
+      <view class="header-left">
+        <up-icon name="arrow-left" size="20" color="#333" @click="goBack"></up-icon>
       </view>
-    </view>
-    
-    <!-- 鎷滆璁板綍鍒楄〃 -->
-    <view class="visit-list" v-if="visitList.length > 0">
-      <view v-for="(item, index) in visitList" :key="index">
-        <view class="visit-item">
-          <view class="item-header">
-            <view class="item-left">
-              <view class="document-icon">
-                <up-icon name="user" size="16" color="#ffffff"></up-icon>
-              </view>
-              <text class="item-id">瀹㈡埛锛歿{ item.customerName }}</text>
-            </view>
-            <view class="visit-status">
-              <!-- 鏇挎崲鏍囩鍜屾寜閽� -->
-              <template>
-                <u-tag type="success">宸插畬鎴�</u-tag>
-                
-                <!-- 鎿嶄綔鎸夐挳 -->
-                <view class="action-buttons">
-                  <u-button
-                    type="primary"
-                    size="small"
-                    class="action-btn"
-                    @click="openDetail(item)"
-                  >
-                    鏌ョ湅璇︽儏
-                  </u-button>
-                  <u-button
-                    type="warning"
-                    size="small"
-                    class="action-btn"
-                    @click="editVisit(item)"
-                  >
-                    缂栬緫
-                  </u-button>
-                </view>
-              </template>
-            </view>
-          </view>
-          <up-divider></up-divider>
-          
-          <view class="item-details">
-            <view class="detail-row">
-              <text class="detail-label">鑱旂郴浜�</text>
-              <text class="detail-value">{{ item.contact || '-' }}</text>
-            </view>
-            <view class="detail-row">
-              <text class="detail-label">鑱旂郴鐢佃瘽</text>
-              <text class="detail-value">{{ item.contactPhone || '-' }}</text>
-            </view>
-            <view class="detail-row">
-              <text class="detail-label">鎷滆鐩殑</text>
-              <text class="detail-value">{{ item.purposeVisit || '-' }}</text>
-            </view>
-            <view class="detail-row">
-              <text class="detail-label">鎷滆鏃堕棿</text>
-              <text class="detail-value">{{ item.purposeDate }}</text>
-            </view>
-            <view class="detail-row">
-              <text class="detail-label">鎷滆鍦板潃</text>
-              <text class="detail-value">{{ item.visitAddress || '-' }}</text>
-            </view>
-            <view class="detail-row">
-              <text class="detail-label">鎷滆浜�</text>
-              <text class="detail-value">{{ item.visitingPeople || '-' }}</text>
-            </view>
-            <view class="detail-row" v-if="item.remark">
-              <text class="detail-label">澶囨敞</text>
-              <text class="detail-value">{{ item.remark }}</text>
-            </view>
-          </view>
-          
-          <!-- 鎸夐挳鍖哄煙 -->
-          <view class="action-buttons">
-            <van-button
-              type="primary"
-              size="small"
-              class="action-btn"
-              @click="viewDetail(item.id)"
-            >
-              鏌ョ湅璇︽儏
-            </van-button>
-            <van-button
-              type="danger"
-              size="small"
-              plain
-              class="action-btn"
-              @click="deleteRecord(item.id)"
-            >
-              鍒犻櫎
-            </van-button>
-          </view>
-        </view>
+      <view class="header-center">
+        <text class="page-title">瀹㈡埛鎷滆</text>
       </view>
-    </view>
-    
-    <view v-else class="no-data">
-      <text>鏆傛棤鎷滆璁板綍</text>
-    </view>
-    
-    <!-- 娴姩鏂板鎸夐挳 -->
-    <view class="fab-button" @click="addVisit">
-      <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 { getVisitRecords, deleteVisitRecord } from '@/api/cooperativeOffice/clientVisit'
-import useUserStore from "@/store/modules/user"
-// 鏇挎崲 Vant 鐨� toast
-// import { showToast } from 'vant'
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
-import dayjs from "dayjs"
-
-const userStore = useUserStore()
-
-// 鎼滅储鍏抽敭璇�
-const customerName = ref('')
-
-// 鎷滆璁板綍鏁版嵁
-const visitList = ref([])
-
-// 杩斿洖涓婁竴椤�
-const goBack = () => {
-  uni.navigateBack()
-}
-
-// 鏍煎紡鍖栨棩鏈熸椂闂�
-const formatDateTime = (dateStr) => {
-  if (!dateStr) return ''
-  return dayjs(dateStr).format("YYYY-MM-DD HH:mm")
-}
-
-// 鏌ヨ鍒楄〃
-const getList = () => {
-  const params = {
-    current: -1,
-    size: -1,
-    customerName: customerName.value || undefined,
-  }
-  getVisitRecords(params)
-    .then((res) => {
-      visitList.value = res.records || res.data?.records || []
-    })
-    .catch(() => {
-      showToast('鑾峰彇鏁版嵁澶辫触')
-    })
-}
-
-// 鏂板鎷滆 - 璺宠浆鍒扮櫥璁伴〉闈�
-const addVisit = () => {
-  uni.navigateTo({
-    url: '/pages/cooperativeOffice/clientVisit/detail'
-  })
-}
-
-// 鏌ョ湅璇︽儏
-const viewDetail = (id) => {
-  if (!id) return
-  uni.navigateTo({
-    url: `/pages/cooperativeOffice/clientVisit/detail?id=${id}`
-  })
-}
-
-// 鍒犻櫎璁板綍
-const deleteRecord = async (id) => {
-  if (!id) return
-  uni.showModal({
-    title: '鎻愮ず',
-    content: '姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ嫓璁胯褰�, 鏄惁缁х画?',
-    success: async (res) => {
-      if (!res.confirm) return
-      try {
-        await deleteVisitRecord(id)
-        showToast('鍒犻櫎鎴愬姛')
-        getList()
-      } catch (e) {
-        showToast('鍒犻櫎澶辫触')
-      }
+<script>
+export default {
+  data() {
+    return {
+      title: '瀹㈡埛鎷滆'
     }
-  })
-}
-
-onMounted(() => {
-  getList()
-})
-
-onShow(() => {
-  getList()
-})
-</script>
-
-<style scoped lang="scss">
-.u-divider {
-  margin: 0 !important;
-}
-
-.client-visit-list {
-  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;
-}
-
-.visit-list {
-  padding: 20px;
-}
-
-.visit-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: #667eea;
-  border-radius: 4px;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}
-
-.item-id {
-  font-size: 14px;
-  color: #333;
-  font-weight: 500;
-}
-
-.visit-status {
-  display: flex;
-  align-items: center;
-}
-
-.item-details {
-  padding: 16px 0;
-}
-
-.detail-row {
-  display: flex;
-  align-items: flex-start;
-  justify-content: space-between;
-  margin-bottom: 8px;
-  
-  &:last-child {
-    margin-bottom: 0;
+  },
+  methods: {
+    goBack() {
+      uni.navigateBack({
+        delta: 1
+      })
+    }
   }
 }
-
-.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;
-  word-break: break-all;
-}
-
-.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;
-}
-
-.fab-button {
-  position: fixed;
-  bottom: calc(30px + env(safe-area-inset-bottom));
-  right: 30px;
-  width: 56px;
-  height: 56px;
-  background: #667eea;
-  border-radius: 50%;
+</script>
+<style>
+.page-header {
   display: flex;
   align-items: center;
+  justify-content: space-between;
+  padding: 10px 20px;
+  background-color: #f5f5f5;
+  position: relative;
+}
+.header-left {
+  display: flex;
+  align-items: center;
+}
+.header-center {
+  flex: 1;
+  display: flex;
   justify-content: center;
-  box-shadow: 0 4px 16px rgba(102, 126, 234, 0.3);
-  z-index: 1000;
+  align-items: center;
+  position: absolute;
+  left: 0;
+  right: 0;
+  pointer-events: none;
+}
+.page-title {
+  font-size: 18px;
+  font-weight: bold;
+  pointer-events: auto;
 }
 </style>
 
diff --git a/src/pages/cooperativeOffice/collaborativeApproval/approve.vue b/src/pages/cooperativeOffice/collaborativeApproval/approve.vue
index ced62d5..6011e7b 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/approve.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/approve.vue
@@ -516,23 +516,4 @@
   display: flex;
   justify-content: flex-end;
 }
-</style>
-
-<template>
-	<!-- 瀹℃壒鎰忚 -->
-	<u-form-item label="瀹℃壒鎰忚" prop="approveComment" border-bottom>
-		<u-textarea
-			v-model="form.approveComment"
-			placeholder="璇疯緭鍏ュ鎵规剰瑙�"
-			:maxlength="200"
-			count
-			:autoHeight="true"
-		/>
-	</u-form-item>
-	
-	<!-- 鎿嶄綔鎸夐挳 -->
-	<view class="footer-btns">
-		<u-button class="reject-btn" type="error" @click="handleReject">椹冲洖</u-button>
-		<u-button class="approve-btn" type="success" @click="handleApprove">閫氳繃</u-button>
-	</view>
-</template>
\ No newline at end of file
+</style>
\ No newline at end of file
diff --git a/src/pages/cooperativeOffice/collaborativeApproval/contactSelect.vue b/src/pages/cooperativeOffice/collaborativeApproval/contactSelect.vue
index 88282db..9259068 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/contactSelect.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/contactSelect.vue
@@ -30,7 +30,7 @@
         <view class="contact-details">
           <text class="contact-name">{{ selectedContact.nickName }}</text>
         </view>
-        <u-icon name="close" size="16" color="#999" @click="clearSelected" />
+        <van-icon name="cross" size="16" color="#999" @click="clearSelected" />
       </view>
     </view>
 
@@ -387,56 +387,5 @@
     transform: scale(1.2);
     opacity: 0;
   }
-}
-</style>
-
-<style lang="scss">
-/* 鏇存柊鏍峰紡绫诲悕 */
-:deep(.u-radio) {
-	.u-radio__icon {
-		width: 20px;
-		height: 20px;
-		border: 2px solid #ddd;
-		border-radius: 50%;
-		background: #fff;
-		position: relative;
-		transition: all 0.2s;
-		
-		&::before {
-			content: '';
-			position: absolute;
-			top: 50%;
-			left: 50%;
-			transform: translate(-50%, -50%) scale(0);
-			width: 8px;
-			height: 8px;
-			background: #006cfb;
-			border-radius: 50%;
-			transition: transform 0.2s;
-		}
-	}
-	
-	&.u-radio--checked {
-		.u-radio__icon {
-			border-color: #006cfb;
-			background: #fff;
-			
-			&::before {
-				transform: translate(-50%, -50%) scale(1);
-			}
-			
-			&::after {
-				content: '';
-				position: absolute;
-				top: -2px;
-				left: -2px;
-				right: -2px;
-				bottom: -2px;
-				border: 2px solid rgba(0, 108, 251, 0.2);
-				border-radius: 50%;
-				animation: ripple 0.6s ease-out;
-			}
-		}
-	}
 }
 </style>
\ No newline at end of file
diff --git a/src/pages/cooperativeOffice/collaborativeApproval/detail.vue b/src/pages/cooperativeOffice/collaborativeApproval/detail.vue
index 6fa0c13..f8ecb68 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/detail.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/detail.vue
@@ -4,61 +4,73 @@
 
     <!-- 琛ㄥ崟鍖哄煙 -->
     <view class="form-section">
-      <u-form ref="formRef" @submit="submitForm" input-align="right" error-message-align="right">
-        <u-cell-group style="margin-bottom: 16px;">
-          <u-form-item label="鐢宠浜嬬敱" prop="approveReason" required>
-            <u-textarea
-              v-model="form.approveReason"
-              placeholder="璇疯緭鍏ョ敵璇蜂簨鐢�"
-              :maxlength="200"
-              count
-              :autoHeight="true"
-            />
-          </u-form-item>
-        </u-cell-group>
-        <u-cell-group>
-          <u-form-item label="鐢宠閮ㄩ棬" prop="approveDeptName" required>
-            <u-input
-              v-model="form.approveDeptName"
-              readonly
-              placeholder="璇烽�夋嫨鐢宠閮ㄩ棬"
-              @click="showPicker = true"
-            />
-          </u-form-item>
-          <u-form-item label="鐢宠浜�" prop="approveUserName" required>
-            <u-input
-              v-model="form.approveUserName"
-              placeholder="璇疯緭鍏ョ敵璇蜂汉"
-              readonly
-            />
-          </u-form-item>
-          <u-popup v-model="showPicker" mode="bottom">
-            <u-picker
+      <van-form ref="formRef" @submit="submitForm" :rules="rules" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
+				<van-cell-group style="margin-bottom: 16px;">
+					<van-field
+						v-model="form.approveReason"
+						name="approveReason"
+						rows="2"
+						autosize
+						label="鐢宠浜嬬敱"
+						type="textarea"
+						maxlength="200"
+						:rules="[{ required: true, message: '鐢宠浜嬬敱涓嶈兘涓虹┖' }]"
+						placeholder="璇疯緭鍏ョ敵璇蜂簨鐢�"
+						show-word-limit
+						required
+					/>
+				</van-cell-group>
+				<van-cell-group>
+					<van-field
+						v-model="form.approveDeptName"
+						readonly
+						name="picker"
+						label="鐢宠閮ㄩ棬"
+						placeholder="璇烽�夋嫨鐢宠閮ㄩ棬"
+						:rules="[{ required: true, message: '璇烽�夋嫨鐢宠閮ㄩ棬' }]"
+						@click="showPicker = true"
+						required
+					/>
+          <van-field
+            v-model="form.approveUserName"
+            name="taxPrice"
+            label="鐢宠浜�"
+            placeholder="璇疯緭鍏ョ敵璇蜂汉"
+            :rules="[{ required: true, message: '鐢宠浜轰笉鑳戒负绌�' }]"
+            required
+            readonly
+          />
+          <van-popup
+            v-model:show="showPicker"
+            position="bottom"
+          >
+            <van-picker
               :columns="productOptions"
-              v-model="pickerValue"
+              :model-value="pickerValue"
               @confirm="onConfirm"
               @cancel="showPicker = false"
             />
-          </u-popup>
-          <u-form-item label="鐢宠鏃ユ湡" prop="approveTime" required>
-            <u-input
-              v-model="form.approveTime"
-              placeholder="璇烽�夋嫨"
-              readonly
-              @click="showDatePicker"
-            />
-          </u-form-item>
-          <!-- 鏃ユ湡閫夋嫨鍣� -->
-          <u-popup v-model="showDate" mode="bottom">
-            <u-datetime-picker
-              v-model="currentDate"
-              title="閫夋嫨鏃ユ湡"
-              @confirm="onDateConfirm"
-              @cancel="showDate = false"
-            />
-          </u-popup>
-        </u-cell-group>
-      </u-form>
+          </van-popup>
+					<van-field
+						v-model="form.approveTime"
+						label="鐢宠鏃ユ湡"
+						placeholder="璇烽�夋嫨"
+						readonly
+						required
+						@click="showDatePicker"
+						:rules="[{ required: true, message: '璇烽�夋嫨鏉ユ鏃ユ湡' }]"
+					/>
+					<!-- 鏃ユ湡閫夋嫨鍣� -->
+					<van-popup v-model:show="showDate" position="bottom">
+						<van-date-picker
+							v-model="currentDate"
+							title="閫夋嫨鏃ユ湡"
+							@confirm="onDateConfirm"
+							@cancel="showDate = false"
+						/>
+					</van-popup>
+        </van-cell-group>
+      </van-form>
     </view>
     <!-- 瀹℃牳娴佺▼鍖哄煙 -->
     <view class="approval-process">
@@ -86,13 +98,17 @@
             </view>
             <view v-else class="add-approver-btn" @click="addApprover(stepIndex)">
               <view class="add-circle">+</view>
-              <text class="add-text">娣诲姞瀹℃壒浜�</text>
+              <text class="add-label">閫夋嫨瀹℃壒浜�</text>
             </view>
           </view>
+          <view class="step-line" v-if="stepIndex < approverNodes.length - 1"></view>
+          <view class="delete-step-btn" v-if="approverNodes.length > 1" @click="removeApprovalStep(stepIndex)">鍒犻櫎鑺傜偣</view>
         </view>
       </view>
 
-      <u-button icon="plus" plain type="primary" style="width: 100%" @click="addApprovalStep">鏂板鑺傜偣</u-button>
+      <view class="add-step-btn">
+				<van-button icon="plus" plain type="primary" style="width: 100%" @click="addApprovalStep">鏂板鑺傜偣</van-button>
+      </view>
     </view>
 
     <!-- 搴曢儴鎸夐挳 -->
diff --git a/src/pages/cooperativeOffice/collaborativeApproval/index.vue b/src/pages/cooperativeOffice/collaborativeApproval/index.vue
index 180b802..708be76 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/index.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/index.vue
@@ -31,27 +31,8 @@
 							</view>
 							<text class="item-id">{{ item.approveId }}</text>
 						</view>
-						<!-- 瀹℃壒鐘舵�佹爣绛� -->
-						<u-tag :type="getTagClass(item.approveStatus)" size="medium">{{ formatReceiptType(item.approveStatus) }}</u-tag>
-						
-						<!-- 鎿嶄綔鎸夐挳 -->
-						<view class="action-buttons">
-							<u-button
-								type="primary"
-								size="small"
-								class="action-btn"
-								@click="openDetail(item)"
-							>
-								鏌ョ湅璇︽儏
-							</u-button>
-							<u-button
-								type="success"
-								size="small"
-								class="action-btn"
-								@click="approve(item)"
-							>
-								瀹℃壒
-							</u-button>
+						<view class="item-tag">
+							<van-tag :type="getTagClass(item.approveStatus)" size="medium">{{ formatReceiptType(item.approveStatus) }}</van-tag>
 						</view>
 					</view>
 					<up-divider></up-divider>
@@ -117,6 +98,7 @@
 		<view v-else class="no-data">
 			<text>鏆傛棤瀹℃壒鏁版嵁</text>
 		</view>
+<!--		<van-floating-bubble icon="plus" @click="handleAdd"/>-->
 		<!-- 娴姩鎿嶄綔鎸夐挳 -->
 		<view class="fab-button" @click="handleAdd">
 			<up-icon name="plus" size="24" color="#ffffff"></up-icon>
@@ -479,4 +461,7 @@
 	.action-btn.approve {
 		/* success 鏍峰紡鏉ヨ嚜缁勪欢锛岃繖閲屼繚鐣欓挬瀛愪互渚垮悗缁渶瑕佹墿灞� */
 	}
+	:deep(.van-floating-bubble) {
+		background: #ed8d05;
+	}
 </style>
\ No newline at end of file
diff --git a/src/pages/equipmentManagement/ledger/detail.vue b/src/pages/equipmentManagement/ledger/detail.vue
index 9757730..97d76aa 100644
--- a/src/pages/equipmentManagement/ledger/detail.vue
+++ b/src/pages/equipmentManagement/ledger/detail.vue
@@ -1,132 +1,128 @@
 <template>
-	<view class="equipment-detail">
+	<view class="ledger-detail">
 		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-		<PageHeader title="璁惧鍙拌处璇︽儏" @back="goBack" />
+		<PageHeader :title="operationType === 'edit' ? '缂栬緫璁惧鍙拌处' : '鏂板璁惧鍙拌处'" @back="goBack" />
 		
 		<!-- 琛ㄥ崟鍐呭 -->
-		<u-form @submit="sendForm" ref="formRef" label-width="110" input-align="right" error-message-align="right">
+		<van-form @submit="sendForm" ref="formRef" label-width="110px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
 			<!-- 鍩烘湰淇℃伅 -->
-			<u-cell-group title="鍩烘湰淇℃伅">
-				<u-form-item label="璁惧鍚嶇О" prop="deviceName" required border-bottom>
-					<u-input
-						v-model="form.deviceName"
-						placeholder="璇疯緭鍏ヨ澶囧悕绉�"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="瑙勬牸鍨嬪彿" prop="deviceModel" required border-bottom>
-					<u-input
-						v-model="form.deviceModel"
-						placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="璁惧缂栧彿" prop="deviceNumber" required border-bottom>
-					<u-input
-						v-model="form.deviceNumber"
-						placeholder="璇疯緭鍏ヨ澶囩紪鍙�"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="璐拱鏃ユ湡" prop="purchaseDate" required border-bottom>
-					<u-input
-						v-model="form.purchaseDate"
-						placeholder="璇烽�夋嫨璐拱鏃ユ湡"
-						readonly
-						@click="showDatePicker"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="璐拱浠锋牸" prop="purchasePrice" required border-bottom>
-					<u-input
-						v-model="form.purchasePrice"
-						type="number"
-						placeholder="璇疯緭鍏ヨ喘涔颁环鏍�"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="渚涘簲鍟�" prop="supplier" required border-bottom>
-					<u-input
-						v-model="form.supplier"
-						placeholder="璇疯緭鍏ヤ緵搴斿晢"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="浣跨敤閮ㄩ棬" prop="department" required border-bottom>
-					<u-input
-						v-model="form.department"
-						placeholder="璇疯緭鍏ヤ娇鐢ㄩ儴闂�"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="绋庣巼" prop="taxRate" required border-bottom>
-					<u-input
-						v-model="form.taxRate"
-						placeholder="璇烽�夋嫨绋庣巼"
-						readonly
-						@click="showTaxRatePicker"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="浣跨敤鐘舵��" prop="status" required border-bottom>
-					<u-input
-						v-model="form.status"
-						placeholder="璇疯緭鍏ヤ娇鐢ㄧ姸鎬�"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="澶囨敞" border-bottom>
-					<u-textarea
-						v-model="form.remark"
-						placeholder="璇疯緭鍏ュ娉�"
-						:maxlength="200"
-						count
-						:autoHeight="true"
-					/>
-				</u-form-item>
-			</u-cell-group>
+			<van-cell-group title="鍩烘湰淇℃伅" inset>
+				<van-field
+					v-model="form.deviceName"
+					label="璁惧鍚嶇О"
+					placeholder="璇疯緭鍏ヨ澶囧悕绉�"
+					:rules="formRules.deviceName"
+					required
+					clearable
+				/>
+				<van-field
+					v-model="form.deviceModel"
+					label="瑙勬牸鍨嬪彿"
+					placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
+					:readonly="form.deviceModel != null && operationType === 'edit'"
+					:rules="formRules.deviceModel"
+					required
+					clearable
+				/>
+				<van-field
+					v-model="form.supplierName"
+					label="渚涘簲鍟�"
+					required
+					placeholder="璇疯緭鍏ヤ緵搴斿晢"
+					:rules="formRules.supplierName"
+					clearable
+				/>
+				<van-field
+					v-model="form.unit"
+					label="鍗曚綅"
+					required
+					placeholder="璇疯緭鍏ュ崟浣�"
+					:rules="formRules.unit"
+					clearable
+				/>
+				<van-field
+					v-model="form.taxRate"
+					required
+					label="绋庣巼(%)"
+					placeholder="璇烽�夋嫨"
+					readonly
+					:rules="formRules.taxRate"
+					@click="showTaxRatePicker"
+					clearable
+				/>
+				<van-field
+					v-model="form.number"
+					label="鏁伴噺"
+					required
+					type="number"
+					placeholder="璇疯緭鍏ユ暟閲�"
+					:rules="formRules.number"
+					@blur="mathNum"
+					clearable
+				/>
+				<van-field
+					v-model="form.taxIncludingPriceUnit"
+					label="鍚◣鍗曚环"
+					required
+					type="number"
+					placeholder="璇疯緭鍏ュ惈绋庡崟浠�"
+					:rules="formRules.taxIncludingPriceUnit"
+					@blur="mathNum"
+					clearable
+				/>
+				<van-field
+					v-model="form.taxIncludingPriceTotal"
+					label="鍚◣鎬讳环"
+					placeholder="鑷姩鐢熸垚"
+					readonly
+				/>
+				<van-field
+					v-model="form.unTaxIncludingPriceTotal"
+					label="涓嶅惈绋庢�讳环"
+					placeholder="鑷姩鐢熸垚"
+					readonly
+				/>
+				<van-field
+					v-model="form.createTime"
+					label="褰曞叆鏃ユ湡"
+					placeholder="璇烽�夋嫨"
+					readonly
+					@click="showDatePicker"
+					required
+					clearable
+				/>
+			</van-cell-group>
 			
 			<!-- 鎻愪氦鎸夐挳 -->
 			<view class="footer-btns">
-				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
-				<u-button class="save-btn" type="primary" @click="sendForm" :loading="loading">淇濆瓨</u-button>
+				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
+				<van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
 			</view>
-		</u-form>
+		</van-form>
 
 		<!-- 绋庣巼閫夋嫨鍣� -->
-		<u-popup v-model="showTaxRate" mode="bottom">
-			<u-picker
-				v-model="taxRatePickerValue"
+		<van-popup v-model:show="showTaxRate" position="bottom">
+			<van-picker
+				:model-value="taxRatePickerValue"
 				:columns="taxRateOptions"
 				@confirm="onTaxRateConfirm"
 				@cancel="showTaxRate = false"
 			/>
-		</u-popup>
+		</van-popup>
 
 		<!-- 鏃ユ湡閫夋嫨鍣� -->
-		<u-popup v-model="showDate" mode="bottom">
-			<u-datetime-picker
+		<van-popup v-model:show="showDate" position="bottom">
+			<van-date-picker
 				v-model="currentDate"
 				title="閫夋嫨鏃ユ湡"
 				@confirm="onDateConfirm"
 				@cancel="showDate = false"
 			/>
-		</u-popup>
+		</van-popup>
 	</view>
 </template>
 
 <script setup>
-// 鏇挎崲 Vant 鐨� toast
-// import { showToast } from 'vant';
-
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
-
 import { ref, computed, onMounted } from 'vue';
 import { onShow } from '@dcloudio/uni-app';
 import PageHeader from '@/components/PageHeader.vue';
diff --git a/src/pages/equipmentManagement/ledger/index.vue b/src/pages/equipmentManagement/ledger/index.vue
index 59efa72..0114c15 100644
--- a/src/pages/equipmentManagement/ledger/index.vue
+++ b/src/pages/equipmentManagement/ledger/index.vue
@@ -78,25 +78,25 @@
             </view>
           </view>
           
-          <!-- 鎸夐挳鍖哄煙 - 鏇挎崲涓� uview-plus 鎸夐挳 -->
+          <!-- 鎸夐挳鍖哄煙锛屽弬鑰� invoiceLedger 鐨勬牱寮� -->
           <view class="action-buttons">
-            <u-button
+            <van-button
               type="primary"
               size="small"
               class="action-btn"
               @click="edit(item.id)"
             >
               缂栬緫
-            </u-button>
-            <u-button
-              type="error"
+            </van-button>
+            <van-button
+              type="danger"
               size="small"
               plain
               class="action-btn"
               @click="deleteRow(item.id)"
             >
               鍒犻櫎
-            </u-button>
+            </van-button>
           </view>
         </view>
       </view>
@@ -119,16 +119,7 @@
 import PageHeader from '@/components/PageHeader.vue'
 import { getLedgerPage, delLedger } from '@/api/equipmentManagement/ledger'
 import useUserStore from "@/store/modules/user"
-// 鏇挎崲 Vant 鐨� toast
-// import { showToast } from 'vant';
-
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
+import { showToast } from 'vant';
 
 const userStore = useUserStore()
 
@@ -339,7 +330,7 @@
   color: #999;
 }
 
-// 鎸夐挳鏍峰紡
+// 鎸夐挳鏍峰紡锛屽弬鑰� invoiceLedger
 .action-buttons {
   display: flex;
   gap: 12px;
diff --git a/src/pages/equipmentManagement/repair/add.vue b/src/pages/equipmentManagement/repair/add.vue
index e9a9dfb..d48202d 100644
--- a/src/pages/equipmentManagement/repair/add.vue
+++ b/src/pages/equipmentManagement/repair/add.vue
@@ -4,83 +4,88 @@
 		<PageHeader :title="operationType === 'edit' ? '缂栬緫鎶ヤ慨' : '鏂板鎶ヤ慨'" @back="goBack" />
 		
 		<!-- 琛ㄥ崟鍐呭 -->
-		<u-form @submit="sendForm" ref="formRef" label-width="110" input-align="right" error-message-align="right">
+		<van-form @submit="sendForm" ref="formRef" label-width="110px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
 			<!-- 鍩烘湰淇℃伅 -->
-			<u-cell-group title="鍩烘湰淇℃伅">
-				<u-form-item label="璁惧鍚嶇О" prop="deviceLedgerId" required>
-					<u-input
-						v-model="deviceNameText"
-						placeholder="璇烽�夋嫨璁惧鍚嶇О"
-						readonly
-						@click="showDevicePicker"
-						clearable
-					>
-						<template #suffix>
-							<u-icon name="scan" @click.stop="startScan" class="scan-icon" />
-						</template>
-					</u-input>
-				</u-form-item>
-				<u-form-item label="瑙勬牸鍨嬪彿">
-					<u-input
-						v-model="form.deviceModel"
-						placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
-						readonly
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="鎶ヤ慨鏃ユ湡" prop="repairTime" required>
-					<u-input
-						v-model="form.repairTime"
-						placeholder="璇烽�夋嫨鎶ヤ慨鏃ユ湡"
-						readonly
-						@click="showDatePicker"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="鎶ヤ慨浜�" prop="repairName" required>
-					<u-input
-						v-model="form.repairName"
-						placeholder="璇疯緭鍏ユ姤淇汉"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="鏁呴殰鐜拌薄" prop="remark" required>
-					<u-textarea
-						v-model="form.remark"
-						placeholder="璇疯緭鍏ユ晠闅滅幇璞�"
-						:maxlength="200"
-						count
-						:autoHeight="true"
-					/>
-				</u-form-item>
-			</u-cell-group>
+			<van-cell-group title="鍩烘湰淇℃伅" inset>
+				<van-field
+					v-model="deviceNameText"
+					label="璁惧鍚嶇О"
+					placeholder="璇烽�夋嫨璁惧鍚嶇О"
+					:rules="formRules.deviceLedgerId"
+					required
+					readonly
+					@click="showDevicePicker"
+					clearable
+				>
+					<template #right-icon>
+						<van-icon name="scan" @click.stop="startScan" class="scan-icon" />
+					</template>
+				</van-field>
+				<van-field
+					v-model="form.deviceModel"
+					label="瑙勬牸鍨嬪彿"
+					placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
+					readonly
+					clearable
+				/>
+				<van-field
+					v-model="form.repairTime"
+					label="鎶ヤ慨鏃ユ湡"
+					placeholder="璇烽�夋嫨鎶ヤ慨鏃ユ湡"
+					:rules="formRules.repairTime"
+					required
+					readonly
+					@click="showDatePicker"
+					clearable
+				/>
+				<van-field
+					v-model="form.repairName"
+					label="鎶ヤ慨浜�"
+					placeholder="璇疯緭鍏ユ姤淇汉"
+					:rules="formRules.repairName"
+					required
+					clearable
+				/>
+				<van-field
+					v-model="form.remark"
+					label="鏁呴殰鐜拌薄"
+					type="textarea"
+					rows="3"
+					placeholder="璇疯緭鍏ユ晠闅滅幇璞�"
+					:rules="formRules.remark"
+					required
+					clearable
+					maxlength="200"
+					show-word-limit
+				/>
+			</van-cell-group>
 			
 			<!-- 鎻愪氦鎸夐挳 -->
 			<view class="footer-btns">
-				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
-				<u-button class="save-btn" type="primary" @click="sendForm" :loading="loading">淇濆瓨</u-button>
+				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
+				<van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
 			</view>
-		</u-form>
+		</van-form>
 
 		<!-- 璁惧閫夋嫨鍣� -->
-		<u-popup v-model="showDevice" mode="bottom">
-			<u-picker
-				v-model="devicePickerValue"
+		<van-popup v-model:show="showDevice" position="bottom">
+			<van-picker
+				:model-value="devicePickerValue"
 				:columns="deviceColumns"
 				@confirm="onDeviceConfirm"
 				@cancel="showDevice = false"
 			/>
-		</u-popup>
+		</van-popup>
 
 		<!-- 鏃ユ湡閫夋嫨鍣� -->
-		<u-popup v-model="showDate" mode="bottom">
-			<u-datetime-picker
+		<van-popup v-model:show="showDate" position="bottom">
+			<van-date-picker
 				v-model="currentDate"
 				title="閫夋嫨鏃ユ湡"
 				@confirm="onDateConfirm"
 				@cancel="showDate = false"
 			/>
-		</u-popup>
+		</van-popup>
 	</view>
 </template>
 
@@ -91,16 +96,7 @@
 import { getDeviceLedger } from '@/api/equipmentManagement/ledger';
 import { addRepair, editRepair, getRepairById } from '@/api/equipmentManagement/repair';
 import dayjs from "dayjs";
-// 鏇挎崲 Vant 鐨� toast
-// import { showToast } from 'vant';
-
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
+import { showToast } from 'vant';
 
 defineOptions({
 	name: "璁惧鎶ヤ慨琛ㄥ崟",
diff --git a/src/pages/equipmentManagement/repair/index.vue b/src/pages/equipmentManagement/repair/index.vue
index d4ce7be..0662172 100644
--- a/src/pages/equipmentManagement/repair/index.vue
+++ b/src/pages/equipmentManagement/repair/index.vue
@@ -33,38 +33,8 @@
               <text class="item-id">璁惧鍚嶇О锛歿{ item.deviceName }}</text>
             </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 class="action-buttons">
-                <u-button
-                  type="primary"
-                  size="small"
-                  class="action-btn"
-                  @click="openForm('add')"
-                >
-                  鏂板鎶ヤ慨
-                </u-button>
-                <u-button
-                  type="warning"
-                  size="small"
-                  class="action-btn"
-                  @click="openForm('edit', item)"
-                >
-                  缂栬緫
-                </u-button>
-                <u-button
-                  type="success"
-                  size="small"
-                  class="action-btn"
-                  @click="maintain(item)"
-                >
-                  缁翠慨
-                </u-button>
-              </view>
+              <van-tag v-if="item.status === 1" type="success">瀹岀粨</van-tag>
+              <van-tag v-if="item.status === 0" type="danger">寰呯淮淇�</van-tag>
             </view>
           </view>
           <up-divider></up-divider>
@@ -138,9 +108,11 @@
     </view>
     
     <!-- 娴姩姘旀场鎸夐挳 -->
-    <view class="fab-button" @click="addRepair">
-			<up-icon name="plus" size="24" color="#ffffff"></up-icon>
-		</view>
+    <van-floating-bubble
+      axis="xy"
+      icon="plus"
+      @click="addRepair"
+    />
   </view>
 </template>
 
@@ -150,16 +122,7 @@
 import PageHeader from '@/components/PageHeader.vue'
 import { getRepairPage, delRepair } from '@/api/equipmentManagement/repair'
 import useUserStore from "@/store/modules/user"
-// 鏇挎崲 Vant 鐨� toast
-// import { showToast } from 'vant';
-
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
+import { showToast } from 'vant';
 
 const userStore = useUserStore()
 
diff --git a/src/pages/equipmentManagement/repair/maintain.vue b/src/pages/equipmentManagement/repair/maintain.vue
index 9900220..64d08cb 100644
--- a/src/pages/equipmentManagement/repair/maintain.vue
+++ b/src/pages/equipmentManagement/repair/maintain.vue
@@ -1,55 +1,60 @@
 <template>
 	<view class="repair-maintain">
 		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-		<PageHeader title="璁惧缁翠慨" @back="goBack" />
+		<PageHeader title="鏂板缁翠慨" @back="goBack" />
 		
 		<!-- 琛ㄥ崟鍐呭 -->
-		<u-form @submit="sendForm" ref="formRef" label-width="110" input-align="right" error-message-align="right">
-			<!-- 缁翠慨淇℃伅 -->
-			<u-cell-group title="缁翠慨淇℃伅">
-				<u-form-item label="瀹為檯缁翠慨浜�" prop="repairPerson" required border-bottom>
-					<u-input
-						v-model="form.repairPerson"
-						placeholder="璇疯緭鍏ュ疄闄呯淮淇汉"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="瀹為檯缁翠慨鏃ユ湡" prop="repairDate" required border-bottom>
-					<u-input
-						v-model="form.repairDate"
-						placeholder="璇烽�夋嫨瀹為檯缁翠慨鏃ユ湡"
-						readonly
-						@click="showDatePicker"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="缁翠慨缁撴灉" prop="repairResult" required border-bottom>
-					<u-textarea
-						v-model="form.repairResult"
-						placeholder="璇疯緭鍏ョ淮淇粨鏋�"
-						:maxlength="200"
-						count
-						:autoHeight="true"
-					/>
-				</u-form-item>
-			</u-cell-group>
+		<van-form @submit="sendForm" ref="formRef" label-width="110px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
+			<!-- 鍩烘湰淇℃伅 -->
+			<van-cell-group title="缁翠慨淇℃伅" inset>
+				<van-field
+					v-model="form.maintenanceName"
+					label="缁翠慨浜�"
+					placeholder="璇疯緭鍏ョ淮淇汉"
+					:rules="formRules.maintenanceName"
+					required
+					clearable
+				/>
+				<van-field
+					v-model="form.maintenanceResult"
+					label="缁翠慨缁撴灉"
+					type="textarea"
+					rows="3"
+					placeholder="璇疯緭鍏ョ淮淇粨鏋�"
+					:rules="formRules.maintenanceResult"
+					required
+					clearable
+					maxlength="200"
+					show-word-limit
+				/>
+				<van-field
+					v-model="form.maintenanceTime"
+					label="缁翠慨鏃ユ湡"
+					placeholder="璇烽�夋嫨缁翠慨鏃ユ湡"
+					:rules="formRules.maintenanceTime"
+					required
+					readonly
+					@click="showDatePicker"
+					clearable
+				/>
+			</van-cell-group>
 			
 			<!-- 鎻愪氦鎸夐挳 -->
 			<view class="footer-btns">
-				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
-				<u-button class="save-btn" type="primary" @click="sendForm" :loading="loading">淇濆瓨</u-button>
+				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
+				<van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
 			</view>
-		</u-form>
+		</van-form>
 
 		<!-- 鏃ユ湡閫夋嫨鍣� -->
-		<u-popup v-model="showDate" mode="bottom">
-			<u-datetime-picker
+		<van-popup v-model:show="showDate" position="bottom">
+			<van-date-picker
 				v-model="currentDate"
 				title="閫夋嫨鏃ユ湡"
 				@confirm="onDateConfirm"
 				@cancel="showDate = false"
 			/>
-		</u-popup>
+		</van-popup>
 	</view>
 </template>
 
@@ -60,16 +65,7 @@
 import { addMaintain } from '@/api/equipmentManagement/repair';
 import useUserStore from "@/store/modules/user";
 import dayjs from "dayjs";
-// 鏇挎崲 Vant 鐨� toast
-// import { showToast } from 'vant';
-
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
+import { showToast } from 'vant';
 
 defineOptions({
 	name: "璁惧缁翠慨琛ㄥ崟",
diff --git a/src/pages/equipmentManagement/upkeep/add.vue b/src/pages/equipmentManagement/upkeep/add.vue
index fc6c5f7..82892ad 100644
--- a/src/pages/equipmentManagement/upkeep/add.vue
+++ b/src/pages/equipmentManagement/upkeep/add.vue
@@ -1,85 +1,75 @@
 <template>
 	<view class="upkeep-add">
 		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-		<PageHeader title="鏂板淇濆吇" @back="goBack" />
+		<PageHeader :title="operationType === 'edit' ? '缂栬緫淇濆吇璁″垝' : '鏂板淇濆吇璁″垝'" @back="goBack" />
 		
 		<!-- 琛ㄥ崟鍐呭 -->
-		<u-form @submit="sendForm" ref="formRef" label-width="110" input-align="right" error-message-align="right">
+		<van-form @submit="sendForm" ref="formRef" label-width="110px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
 			<!-- 鍩烘湰淇℃伅 -->
-			<u-cell-group title="鍩烘湰淇℃伅">
-				<u-form-item label="璁惧鍚嶇О" prop="deviceName" required border-bottom>
-					<u-input
-						v-model="deviceNameText"
-						placeholder="璇烽�夋嫨璁惧鍚嶇О"
-						readonly
-						@click="showDevicePicker"
-						clearable
-					>
-						<template #suffix>
-							<u-icon name="scan" @click.stop="startScan" class="scan-icon" />
-						</template>
-					</u-input>
-				</u-form-item>
-				<u-form-item label="瑙勬牸鍨嬪彿" border-bottom>
-					<u-input
-						v-model="form.deviceModel"
-						placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
-						readonly
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="淇濆吇鏃ユ湡" prop="upkeepDate" required border-bottom>
-					<u-input
-						v-model="form.upkeepDate"
-						placeholder="璇烽�夋嫨淇濆吇鏃ユ湡"
-						readonly
-						@click="showDatePicker"
-						clearable
-					/>
-				</u-form-item>
-			</u-cell-group>
+			<van-cell-group title="鍩烘湰淇℃伅" inset>
+				<van-field
+					v-model="deviceNameText"
+					label="璁惧鍚嶇О"
+					placeholder="璇烽�夋嫨璁惧鍚嶇О"
+					:rules="formRules.deviceLedgerId"
+					required
+					readonly
+					@click="showDevicePicker"
+					clearable
+				>
+					<template #right-icon>
+						<van-icon name="scan" @click.stop="startScan" class="scan-icon" />
+					</template>
+				</van-field>
+				<van-field
+					v-model="form.deviceModel"
+					label="瑙勬牸鍨嬪彿"
+					placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
+					readonly
+					clearable
+				/>
+				<van-field
+					v-model="form.maintenancePlanTime"
+					label="璁″垝淇濆吇鏃ユ湡"
+					placeholder="璇烽�夋嫨璁″垝淇濆吇鏃ユ湡"
+					:rules="formRules.maintenancePlanTime"
+					required
+					readonly
+					@click="showDatePicker"
+					clearable
+				/>
+			</van-cell-group>
 			
 			<!-- 鎻愪氦鎸夐挳 -->
 			<view class="footer-btns">
-				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
-				<u-button class="save-btn" type="primary" @click="sendForm" :loading="loading">淇濆瓨</u-button>
+				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
+				<van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
 			</view>
-		</u-form>
+		</van-form>
 
 		<!-- 璁惧閫夋嫨鍣� -->
-		<u-popup v-model="showDevice" mode="bottom">
-			<u-picker
-				v-model="devicePickerValue"
+		<van-popup v-model:show="showDevice" position="bottom">
+			<van-picker
+				:model-value="devicePickerValue"
 				:columns="deviceColumns"
 				@confirm="onDeviceConfirm"
 				@cancel="showDevice = false"
 			/>
-		</u-popup>
+		</van-popup>
 
 		<!-- 鏃ユ湡閫夋嫨鍣� -->
-		<u-popup v-model="showDate" mode="bottom">
-			<u-datetime-picker
+		<van-popup v-model:show="showDate" position="bottom">
+			<van-date-picker
 				v-model="currentDate"
 				title="閫夋嫨鏃ユ湡"
 				@confirm="onDateConfirm"
 				@cancel="showDate = false"
 			/>
-		</u-popup>
+		</van-popup>
 	</view>
 </template>
 
 <script setup>
-// 鏇挎崲 Vant 鐨� toast
-// import { showToast } from 'vant';
-
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
-
 import { ref, computed, onMounted, onUnmounted } from 'vue';
 import { onShow } from '@dcloudio/uni-app';
 import PageHeader from '@/components/PageHeader.vue';
diff --git a/src/pages/equipmentManagement/upkeep/index.vue b/src/pages/equipmentManagement/upkeep/index.vue
index 028f542..9ae34cd 100644
--- a/src/pages/equipmentManagement/upkeep/index.vue
+++ b/src/pages/equipmentManagement/upkeep/index.vue
@@ -33,46 +33,8 @@
               <text class="item-id">璁惧鍚嶇О锛歿{ item.deviceName }}</text>
             </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>
-              
-              <!-- 淇濆吇缁撴灉鏍囩 -->
-              <u-tag v-if="item.maintenanceResult === 1" type="success">
-                瀹屽ソ
-              </u-tag>
-              <u-tag v-if="item.maintenanceResult === 0" type="error">
-                缁翠慨
-              </u-tag>
-              
-              <!-- 鎿嶄綔鎸夐挳 -->
-              <view class="action-buttons">
-                <u-button
-                  type="primary"
-                  size="small"
-                  class="action-btn"
-                  @click="openForm('add')"
-                >
-                  鏂板淇濆吇
-                </u-button>
-                <u-button
-                  type="warning"
-                  size="small"
-                  class="action-btn"
-                  @click="openForm('edit', item)"
-                >
-                  缂栬緫
-                </u-button>
-                <u-button
-                  type="success"
-                  size="small"
-                  class="action-btn"
-                  @click="maintain(item)"
-                >
-                  淇濆吇
-                </u-button>
-              </view>
+              <van-tag v-if="item.status === 1" type="success">瀹岀粨</van-tag>
+              <van-tag v-if="item.status === 0" type="danger">寰呬繚鍏�</van-tag>
             </view>
           </view>
           <up-divider></up-divider>
@@ -152,10 +114,13 @@
     <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>
+    
+    <!-- 娴姩姘旀场鎸夐挳 -->
+    <van-floating-bubble
+      axis="xy"
+      icon="plus"
+      @click="addPlan"
+    />
   </view>
 </template>
 
@@ -165,15 +130,7 @@
 import PageHeader from '@/components/PageHeader.vue'
 import { getUpkeepPage, delUpkeep } from '@/api/equipmentManagement/upkeep'
 import useUserStore from "@/store/modules/user"
-// 鏇挎崲 Vant 鐨� toast
-// import { showToast } from 'vant';
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
+import { showToast } from 'vant';
 import dayjs from "dayjs"
 
 const userStore = useUserStore()
diff --git a/src/pages/equipmentManagement/upkeep/maintain.vue b/src/pages/equipmentManagement/upkeep/maintain.vue
index 28b7186..c70ec14 100644
--- a/src/pages/equipmentManagement/upkeep/maintain.vue
+++ b/src/pages/equipmentManagement/upkeep/maintain.vue
@@ -4,62 +4,65 @@
 		<PageHeader title="鏂板淇濆吇" @back="goBack" />
 		
 		<!-- 琛ㄥ崟鍐呭 -->
-		<u-form @submit="sendForm" ref="formRef" label-width="110" input-align="right" error-message-align="right">
+		<van-form @submit="sendForm" ref="formRef" label-width="110px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
 			<!-- 鍩烘湰淇℃伅 -->
-			<u-cell-group title="淇濆吇淇℃伅">
-				<u-form-item label="瀹為檯淇濆吇浜�" prop="maintenanceActuallyName" required>
-					<u-input
-						v-model="form.maintenanceActuallyName"
-						placeholder="璇疯緭鍏ュ疄闄呬繚鍏讳汉"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="瀹為檯淇濆吇鏃ユ湡" prop="maintenanceActuallyTime" required>
-					<u-input
-						v-model="form.maintenanceActuallyTime"
-						placeholder="璇烽�夋嫨瀹為檯淇濆吇鏃ユ湡"
-						readonly
-						@click="showDatePicker"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="淇濆吇缁撴灉" prop="maintenanceResult" required>
-					<u-input
-						v-model="maintenanceResultText"
-						placeholder="璇烽�夋嫨淇濆吇缁撴灉"
-						readonly
-						@click="showResultPicker"
-						clearable
-					/>
-				</u-form-item>
-			</u-cell-group>
+			<van-cell-group title="淇濆吇淇℃伅" inset>
+				<van-field
+					v-model="form.maintenanceActuallyName"
+					label="瀹為檯淇濆吇浜�"
+					placeholder="璇疯緭鍏ュ疄闄呬繚鍏讳汉"
+					:rules="formRules.maintenanceActuallyName"
+					required
+					clearable
+				/>
+				<van-field
+					v-model="form.maintenanceActuallyTime"
+					label="瀹為檯淇濆吇鏃ユ湡"
+					placeholder="璇烽�夋嫨瀹為檯淇濆吇鏃ユ湡"
+					:rules="formRules.maintenanceActuallyTime"
+					required
+					readonly
+					@click="showDatePicker"
+					clearable
+				/>
+				<van-field
+					v-model="maintenanceResultText"
+					label="淇濆吇缁撴灉"
+					placeholder="璇烽�夋嫨淇濆吇缁撴灉"
+					:rules="formRules.maintenanceResult"
+					required
+					readonly
+					@click="showResultPicker"
+					clearable
+				/>
+			</van-cell-group>
 			
 			<!-- 鎻愪氦鎸夐挳 -->
 			<view class="footer-btns">
-				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
-				<u-button class="save-btn" type="primary" @click="sendForm" :loading="loading">淇濆瓨</u-button>
+				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
+				<van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
 			</view>
-		</u-form>
+		</van-form>
 
 		<!-- 鏃ユ湡閫夋嫨鍣� -->
-		<u-popup v-model="showDate" mode="bottom">
-			<u-datetime-picker
+		<van-popup v-model:show="showDate" position="bottom">
+			<van-date-picker
 				v-model="currentDate"
 				title="閫夋嫨鏃ユ湡"
 				@confirm="onDateConfirm"
 				@cancel="showDate = false"
 			/>
-		</u-popup>
+		</van-popup>
 
 		<!-- 淇濆吇缁撴灉閫夋嫨鍣� -->
-		<u-popup v-model="showResult" mode="bottom">
-			<u-picker
-				v-model="resultPickerValue"
+		<van-popup v-model:show="showResult" position="bottom">
+			<van-picker
+				:model-value="resultPickerValue"
 				:columns="resultColumns"
 				@confirm="onResultConfirm"
 				@cancel="showResult = false"
 			/>
-		</u-popup>
+		</van-popup>
 	</view>
 </template>
 
@@ -70,16 +73,7 @@
 import { addMaintenance } from '@/api/equipmentManagement/upkeep';
 import useUserStore from "@/store/modules/user";
 import dayjs from "dayjs";
-// 鏇挎崲 Vant 鐨� toast
-// import { showToast } from 'vant';
-
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
+import { showToast } from 'vant';
 
 defineOptions({
 	name: "璁惧淇濆吇琛ㄥ崟",
diff --git a/src/pages/login.vue b/src/pages/login.vue
index 485f53a..d970266 100644
--- a/src/pages/login.vue
+++ b/src/pages/login.vue
@@ -101,7 +101,8 @@
 }
 
 function getUserLoginFacotryList() {
-	userLoginFacotryList({userName:loginForm.value.username}).then(res => {
+	if(loginForm.value.username){
+		userLoginFacotryList({userName:loginForm.value.username}).then(res => {
 			// 妫�鏌es.data鏄惁涓烘暟缁�
 			if (res.data && Array.isArray(res.data)) {
 				// 閲嶆柊缁勮鏁版嵁鏍煎紡锛歞eptId鍙樻垚id锛宒eptName鍙樻垚name
@@ -117,6 +118,9 @@
 			modal.msgError('鑾峰彇鍏徃鍒楄〃澶辫触:', error)
 			factoryList.value = []
 		})
+	}else {
+		factoryList.value = []
+	}
 }
 
 async function handleLogin() {
diff --git a/src/pages/procurementManagement/invoiceEntry/add.vue b/src/pages/procurementManagement/invoiceEntry/add.vue
index 54a3ede..2fdcb2b 100644
--- a/src/pages/procurementManagement/invoiceEntry/add.vue
+++ b/src/pages/procurementManagement/invoiceEntry/add.vue
@@ -540,141 +540,3 @@
   }
 }
 </style>
-
-<template>
-	<view class="invoice-add">
-		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-		<PageHeader title="鏂板鍙戠エ" @back="goBack" />
-		
-		<!-- 琛ㄥ崟鍐呭 -->
-		<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 />
-				</u-form-item>
-				<u-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierName" required border-bottom>
-					<u-input v-model="form.supplierName" placeholder="璇疯緭鍏ヤ緵搴斿晢鍚嶇О" clearable />
-				</u-form-item>
-				<u-form-item label="鍙戠エ鍙�" prop="invoiceNo" required border-bottom>
-					<u-input v-model="form.invoiceNo" placeholder="璇疯緭鍏ュ彂绁ㄥ彿" clearable />
-				</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>
-				<u-form-item label="绋庣巼" prop="taxRate" required border-bottom>
-					<u-input v-model="form.taxRate" 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>
-				<u-form-item label="褰曞叆浜�" border-bottom>
-					<u-input v-model="form.recorder" placeholder="鑷姩濉厖" readonly />
-				</u-form-item>
-				<u-form-item label="鍒涘缓鏃堕棿" border-bottom>
-					<u-input v-model="form.createTime" placeholder="璇烽�夋嫨鍒涘缓鏃堕棿" readonly @click="showCreateTimePicker = true" clearable />
-				</u-form-item>
-			</u-cell-group>
-			
-			<!-- 浜у搧淇℃伅 -->
-			<view class="product-section" v-if="!productData || productData.length === 0">
-				<u-empty description="鏆傛棤浜у搧鏁版嵁" />
-			</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>
-					
-					<!-- 浜у搧淇℃伅琛ㄥ崟 -->
-					<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>
-			</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>
-
-		<!-- 寮�绁ㄦ棩鏈熼�夋嫨鍣� -->
-		<u-popup v-model="showIssueDatePicker" mode="bottom">
-			<u-datetime-picker
-				v-model="issueDateValue"
-				title="閫夋嫨寮�绁ㄦ棩鏈�"
-				@confirm="onIssueDateConfirm"
-				@cancel="showIssueDatePicker = false"
-			/>
-		</u-popup>
-
-		<!-- 鍒涘缓鏃堕棿閫夋嫨鍣� -->
-		<u-popup v-model="showCreateTimePicker" mode="bottom">
-			<u-datetime-picker
-				v-model="createTimeValue"
-				title="閫夋嫨鍒涘缓鏃堕棿"
-				@confirm="onCreateTimeConfirm"
-				@cancel="showCreateTimePicker = false"
-			/>
-		</u-popup>
-	</view>
-</template>
-
-<script setup>
-// 鏇挎崲 Vant 鐨� toast 鏂规硶
-// import { showToast, showLoadingToast, closeToast } from 'vant'
-
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
-
-const showLoadingToast = (message) => {
-  uni.showLoading({
-    title: message || '鍔犺浇涓�...'
-  })
-}
-
-const closeToast = () => {
-  uni.hideLoading()
-}
-</script>
diff --git a/src/pages/procurementManagement/paymentEntry/add.vue b/src/pages/procurementManagement/paymentEntry/add.vue
index 1b65455..4c83048 100644
--- a/src/pages/procurementManagement/paymentEntry/add.vue
+++ b/src/pages/procurementManagement/paymentEntry/add.vue
@@ -4,137 +4,115 @@
     <PageHeader title="鏂板浠樻" @back="onClickLeft" />
     
     <!-- 琛ㄥ崟鍐呭 -->
-    <u-form @submit="onSubmit" ref="formRef" label-width="110" input-align="right" error-message-align="right">
+    <van-form @submit="onSubmit" ref="formRef" label-width="110px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
       <!-- 鍩烘湰淇℃伅 -->
-      <u-cell-group title="鍩烘湰淇℃伅">
-        <u-form-item label="閲囪喘鍚堝悓鍙�" border-bottom>
-          <u-input
-            v-model="form.purchaseContractNumber"
-            placeholder="鑷姩濉厖"
-            readonly
-          />
-        </u-form-item>
-        <u-form-item label="閿�鍞悎鍚屽彿" border-bottom>
-          <u-input
-            v-model="form.salesContractNo"
-            placeholder="鑷姩濉厖"
-            readonly
-          />
-        </u-form-item>
-        <u-form-item label="渚涘簲鍟嗗悕绉�" border-bottom>
-          <u-input
-            v-model="form.supplierName"
-            placeholder="鑷姩濉厖"
-            readonly
-          />
-        </u-form-item>
-        <u-form-item label="鍙戠エ鍙�" border-bottom>
-          <u-input
-            v-model="form.invoiceNumber"
-            placeholder="鑷姩濉厖"
-            readonly
-          />
-        </u-form-item>
-        <u-form-item label="鍙戠エ閲戦(鍏�)" border-bottom>
-          <u-input
-            v-model="form.invoiceAmount"
-            placeholder="鑷姩濉厖"
-            readonly
-          />
-        </u-form-item>
-        <view class="tip-text">寰呬粯娆鹃噾棰濓細{{ currentNoReceiptAmount }} 鍏�</view>
-        <u-form-item label="鏈浠樻閲戦" prop="currentPaymentAmount" required border-bottom>
-          <u-input
-            v-model="form.currentPaymentAmount"
-            type="number"
-            placeholder="璇疯緭鍏�"
-            @blur="changeNum"
-            clearable
-          />
-        </u-form-item>
-        <u-form-item label="浠樻褰㈠紡" prop="paymentMethod" required border-bottom>
-          <u-input
-            v-model="form.paymentMethod"
-            placeholder="璇烽�夋嫨"
-            readonly
-            @click="showPaymentTypePicker"
-          />
-        </u-form-item>
-        <u-form-item label="浠樻鏃ユ湡" prop="paymentDate" required border-bottom>
-          <u-input
-            v-model="form.paymentDate"
-            placeholder="璇烽�夋嫨"
-            readonly
-            @click="showDatePicker"
-          />
-        </u-form-item>
-        <u-form-item label="鐧昏浜�" border-bottom>
-          <u-input
-            v-model="form.registrant"
-            placeholder="鑷姩濉厖"
-            readonly
-          />
-        </u-form-item>
-        <u-form-item label="鐧昏鏃ユ湡" prop="registrationtDate" required border-bottom>
-          <u-input
-            v-model="form.registrationtDate"
-            placeholder="璇烽�夋嫨"
-            readonly
-          />
-        </u-form-item>
-      </u-cell-group>
+      <van-cell-group title="鍩烘湰淇℃伅" inset>
+        <van-field
+          v-model="form.purchaseContractNumber"
+          label="閲囪喘鍚堝悓鍙�"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+        <van-field
+          v-model="form.salesContractNo"
+          label="閿�鍞悎鍚屽彿"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+        <van-field
+          v-model="form.supplierName"
+          label="渚涘簲鍟嗗悕绉�"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+        <van-field
+          v-model="form.invoiceNumber"
+          label="鍙戠エ鍙�"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+        <van-field
+          v-model="form.invoiceAmount"
+          label="鍙戠エ閲戦(鍏�)"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+				<view class="tip-text">寰呬粯娆鹃噾棰濓細{{ currentNoReceiptAmount }} 鍏�</view>
+        <van-field
+          v-model="form.currentPaymentAmount"
+          label="鏈浠樻閲戦"
+          type="number"
+          placeholder="璇疯緭鍏�"
+					@blur="changeNum"
+          :rules="[{ required: true, message: '璇疯緭鍏ヤ粯娆鹃噾棰�' }]"
+          clearable
+        />
+        <van-field
+          v-model="form.paymentMethod"
+          label="浠樻褰㈠紡"
+          placeholder="璇烽�夋嫨"
+          readonly
+          @click="showPaymentTypePicker"
+          :rules="[{ required: true, message: '璇烽�夋嫨浠樻褰㈠紡' }]"
+        />
+				<van-field
+					v-model="form.paymentDate"
+					label="浠樻鏃ユ湡"
+					placeholder="璇烽�夋嫨"
+					readonly
+					@click="showDatePicker"
+					:rules="[{ required: true, message: '璇烽�夋嫨鏉ユ鏃ユ湡' }]"
+				/>
+        <van-field
+          v-model="form.registrant"
+          label="鐧昏浜�"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+				<van-field
+					v-model="form.registrationtDate"
+					label="鐧昏鏃ユ湡"
+					placeholder="璇烽�夋嫨"
+					readonly
+					:rules="[{ required: true, message: '璇烽�夋嫨鏉ユ鏃ユ湡' }]"
+				/>
+      </van-cell-group>
       
       <!-- 鎻愪氦鎸夐挳 -->
       <view class="footer-btns">
-        <u-button class="cancel-btn" @click="onClickLeft">鍙栨秷</u-button>
-        <u-button class="save-btn" type="primary" @click="onSubmit" :loading="loading">淇濆瓨</u-button>
+        <van-button class="cancel-btn" @click="onClickLeft">鍙栨秷</van-button>
+        <van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
       </view>
-    </u-form>
+    </van-form>
 
     <!-- 浠樻鏂瑰紡閫夋嫨鍣� -->
-    <u-popup v-model="showPaymentType" mode="bottom">
-      <u-picker
-        v-model="pickerValue"
+    <van-popup v-model:show="showPaymentType" position="bottom">
+      <van-picker
+				:model-value="pickerValue"
         :columns="receipt_payment_type"
         @confirm="onPaymentTypeConfirm"
         @cancel="showPaymentType = false"
       />
-    </u-popup>
+    </van-popup>
 
     <!-- 鏃ユ湡閫夋嫨鍣� -->
-    <u-popup v-model="showDate" mode="bottom">
-      <u-datetime-picker
+    <van-popup v-model:show="showDate" position="bottom">
+      <van-date-picker
         v-model="currentDate"
         title="閫夋嫨鏃ユ湡"
         @confirm="onDateConfirm"
         @cancel="showDate = false"
       />
-    </u-popup>
+    </van-popup>
   </view>
 </template>
 
 <script setup>
 import { ref, onMounted, computed } from 'vue'
 import useUserStore from '@/store/modules/user'
-// 鏇挎崲 Vant 鐨� toast 鍜� notify
-// import { showToast, showNotify } from 'vant'
+import { showToast, showNotify } from 'vant'
 import { useDict } from '@/utils/dict'
 import {paymentRegistrationAdd} from "@/api/procurementManagement/paymentEntry";
-
-// 鏇挎崲 toast 鍜� notify 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
-
-const showNotify = ({ type, message }) => {
-  uni.showToast({
-    title: message,
-    icon: type === 'warning' ? 'none' : 'success'
-  })
-}
 
 const userStore = useUserStore()
 
diff --git a/src/pages/procurementManagement/paymentEntry/edit.vue b/src/pages/procurementManagement/paymentEntry/edit.vue
index ba0415f..082c945 100644
--- a/src/pages/procurementManagement/paymentEntry/edit.vue
+++ b/src/pages/procurementManagement/paymentEntry/edit.vue
@@ -1,83 +1,94 @@
 <template>
-	<view class="payment-edit">
-		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-		<PageHeader title="缂栬緫浠樻" @back="onClickLeft" />
-		
-		<!-- 琛ㄥ崟鍐呭 -->
-		<u-form @submit="onSubmit" ref="formRef" label-width="110" input-align="right" error-message-align="right">
-			<!-- 鍩烘湰淇℃伅 -->
-			<u-cell-group title="鍩烘湰淇℃伅">
-				<u-form-item label="閲囪喘鍚堝悓鍙�" border-bottom>
-					<u-input v-model="form.contractNo" placeholder="鑷姩濉厖" readonly />
-				</u-form-item>
-				<u-form-item label="渚涘簲鍟嗗悕绉�" border-bottom>
-					<u-input v-model="form.supplierName" placeholder="鑷姩濉厖" readonly />
-				</u-form-item>
-				<u-form-item label="鍙戠エ鍙�" border-bottom>
-					<u-input v-model="form.invoiceNo" placeholder="鑷姩濉厖" readonly />
-				</u-form-item>
-				<u-form-item label="鍙戠エ閲戦(鍏�)" border-bottom>
-					<u-input v-model="form.invoiceAmount" placeholder="鑷姩濉厖" readonly />
-				</u-form-item>
-				<u-form-item label="鏈浠樻閲戦" prop="paymentAmount" required border-bottom>
-					<u-input v-model="form.paymentAmount" type="number" placeholder="璇疯緭鍏�" @blur="changeNum" clearable />
-				</u-form-item>
-				<u-form-item label="浠樻褰㈠紡" prop="paymentType" required border-bottom>
-					<u-input v-model="form.paymentType" placeholder="璇烽�夋嫨" readonly @click="showPaymentTypePicker" />
-				</u-form-item>
-				<u-form-item label="浠樻鏃ユ湡" prop="paymentDate" required border-bottom>
-					<u-input v-model="form.paymentDate" placeholder="璇烽�夋嫨" readonly @click="showDatePicker" />
-				</u-form-item>
-			</u-cell-group>
-			
-			<!-- 鎻愪氦鎸夐挳 -->
-			<view class="footer-btns">
-				<u-button class="cancel-btn" @click="onClickLeft">鍙栨秷</u-button>
-				<u-button class="save-btn" type="primary" @click="onSubmit" :loading="loading">淇濆瓨</u-button>
-			</view>
-		</u-form>
+  <view class="account-detail">
+    <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
+    <PageHeader title="鏂板浠樻" @back="onClickLeft" />
+    
+    <!-- 琛ㄥ崟鍐呭 -->
+    <van-form @submit="onSubmit" ref="formRef" label-width="110px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
+      <!-- 鍩烘湰淇℃伅 -->
+      <van-cell-group title="鍩烘湰淇℃伅" inset>
+        <van-field
+          v-model="form.purchaseContractNumber"
+          label="閲囪喘鍚堝悓鍙�"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+        <van-field
+          v-model="form.supplierName"
+          label="渚涘簲鍟嗗悕绉�"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+        <van-field
+          v-model="form.invoiceNumber"
+          label="鍙戠エ鍙�"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+        <van-field
+          v-model="form.invoiceAmount"
+          label="鍙戠エ閲戦(鍏�)"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+				<view class="tip-text">寰呬粯娆鹃噾棰濓細{{ currentNoReceiptAmount }} 鍏�</view>
+				<van-field
+					v-model="form.currentPaymentAmount"
+					label="鏈浠樻閲戦"
+					type="number"
+					placeholder="璇疯緭鍏�"
+					@blur="changeNum"
+					:rules="[{ required: true, message: '璇疯緭鍏ヤ粯娆鹃噾棰�' }]"
+					clearable
+				/>
+        <van-field
+          v-model="form.paymentMethod"
+          label="浠樻褰㈠紡"
+          placeholder="璇烽�夋嫨"
+          readonly
+          @click="showPaymentTypePicker"
+          :rules="[{ required: true, message: '璇烽�夋嫨浠樻褰㈠紡' }]"
+        />
+				<van-field
+					v-model="form.paymentDate"
+					label="浠樻鏃ユ湡"
+					placeholder="璇烽�夋嫨"
+					readonly
+					@click="showDatePicker"
+					:rules="[{ required: true, message: '璇烽�夋嫨鏉ユ鏃ユ湡' }]"
+				/>
+      </van-cell-group>
+      
+      <!-- 鎻愪氦鎸夐挳 -->
+      <view class="footer-btns">
+        <van-button class="cancel-btn" @click="onClickLeft">鍙栨秷</van-button>
+        <van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
+      </view>
+    </van-form>
 
-		<!-- 浠樻鏂瑰紡閫夋嫨鍣� -->
-		<u-popup v-model="showPaymentType" mode="bottom">
-			<u-picker
-				v-model="pickerValue"
-				:columns="paymentTypeOptions"
-				@confirm="onPaymentTypeConfirm"
-				@cancel="showPaymentType = false"
-			/>
-		</u-popup>
+    <!-- 浠樻鏂瑰紡閫夋嫨鍣� -->
+    <van-popup v-model:show="showPaymentType" position="bottom">
+      <van-picker
+				:model-value="pickerValue"
+        :columns="receipt_payment_type"
+        @confirm="onPaymentTypeConfirm"
+        @cancel="showPaymentType = false"
+      />
+    </van-popup>
 
-		<!-- 鏃ユ湡閫夋嫨鍣� -->
-		<u-popup v-model="showDate" mode="bottom">
-			<u-datetime-picker
-				v-model="currentDate"
-				title="閫夋嫨鏃ユ湡"
-				@confirm="onDateConfirm"
-				@cancel="showDate = false"
-			/>
-		</u-popup>
-	</view>
+    <!-- 鏃ユ湡閫夋嫨鍣� -->
+    <van-popup v-model:show="showDate" position="bottom">
+      <van-date-picker
+        v-model="currentDate"
+        title="閫夋嫨鏃ユ湡"
+        @confirm="onDateConfirm"
+        @cancel="showDate = false"
+      />
+    </van-popup>
+  </view>
 </template>
 
 <script setup>
-// 鏇挎崲 Vant 鐨� toast 鍜� notify
-// import { showToast, showNotify } from 'vant'
-
-// 鏇挎崲 toast 鍜� notify 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
-
-const showNotify = ({ type, message }) => {
-  uni.showToast({
-    title: message,
-    icon: type === 'warning' ? 'none' : 'success'
-  })
-}
-
 import { ref, onMounted, computed } from 'vue'
 import { receiptPaymentSaveOrUpdate, invoiceInfo } from '@/api/salesManagement/receiptPayment'
 import useUserStore from '@/store/modules/user'
diff --git a/src/pages/procurementManagement/paymentEntry/index.vue b/src/pages/procurementManagement/paymentEntry/index.vue
index b3424c8..6083918 100644
--- a/src/pages/procurementManagement/paymentEntry/index.vue
+++ b/src/pages/procurementManagement/paymentEntry/index.vue
@@ -15,14 +15,14 @@
 					/>
 				</view>
 				<view class="filter-button" @click="getList">
-					<u-icon name="search" size="24" color="#999"></u-icon>
+					<up-icon name="search" size="24" color="#999"></up-icon>
 				</view>
 			</view>
 			
 			<!-- 绛涢�夊紑鍏� -->
 			<view class="switch-row">
 				<text class="switch-label">涓嶆樉绀哄緟浠樻涓�0</text>
-				<u-switch v-model="searchForm.status" @change="getList" size="18"/>
+				<van-switch v-model="searchForm.status" @change="getList" size="18"/>
 			</view>
 		</view>
 
@@ -35,12 +35,12 @@
 					<view class="item-header">
 						<view class="item-left">
 							<view class="document-icon">
-								<u-icon name="file-text" size="16" color="#ffffff"></u-icon>
+								<up-icon name="file-text" size="16" color="#ffffff"></up-icon>
 							</view>
 							<text class="item-id">{{ item.purchaseContractNumber }}</text>
 						</view>
 					</view>
-					<u-divider></u-divider>
+					<up-divider></up-divider>
 					<view class="item-details">
 						<view class="detail-row">
 							<text class="detail-label">閿�鍞悎鍚屽彿</text>
@@ -70,7 +70,7 @@
 					
 					<!-- 鎿嶄綔鎸夐挳 -->
 					<view class="action-buttons">
-						<u-button
+						<van-button
 							type="primary"
 							size="small"
 							class="action-btn"
@@ -78,7 +78,7 @@
 							@click="openForm('add', item)"
 						>
 							鏂板浠樻
-						</u-button>
+						</van-button>
 					</view>
 				</view>
 			</view>
@@ -94,18 +94,9 @@
 <script setup>
 import { ref } from 'vue'
 import useUserStore from '@/store/modules/user'
-// 鏇挎崲 Vant 鐨� toast
-// import { showToast } from 'vant'
+import { showToast } from 'vant'
 import {onShow} from "@dcloudio/uni-app";
 import {invoiceListPage} from "@/api/procurementManagement/procurementInvoiceLedger";
-
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
 
 // 鍝嶅簲寮忔暟鎹�
 const tableData = ref([])
diff --git a/src/pages/procurementManagement/procurementInvoiceLedger/detail.vue b/src/pages/procurementManagement/procurementInvoiceLedger/detail.vue
index d1ad85c..ec31d69 100644
--- a/src/pages/procurementManagement/procurementInvoiceLedger/detail.vue
+++ b/src/pages/procurementManagement/procurementInvoiceLedger/detail.vue
@@ -3,68 +3,53 @@
 		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
 		<PageHeader title="缂栬緫鏉ョエ鍙拌处" @back="goBack" />
 
-		<u-form @submit="submitForm" ref="formRef" label-width="120" input-align="right" error-message-align="right">
-			<u-cell-group title="鍩烘湰淇℃伅">
-				<u-form-item label="閲囪喘鍚堝悓鍙�" border-bottom>
-					<u-input v-model="form.purchaseContractNumber" readonly />
-				</u-form-item>
-				<u-form-item label="閿�鍞悎鍚屽彿" border-bottom>
-					<u-input v-model="form.salesContractNo" readonly />
-				</u-form-item>
-				<u-form-item label="鍚◣鍗曚环(鍏�)" border-bottom>
-					<u-input v-model="form.taxInclusiveUnitPrice" readonly />
-				</u-form-item>
-				<u-form-item label="鍒涘缓鏃堕棿" border-bottom>
-					<u-input v-model="form.createdAt" readonly />
-				</u-form-item>
-				<u-form-item label="鍙戠エ鍙�" border-bottom>
-					<u-input v-model="form.invoiceNumber" placeholder="璇疯緭鍏�" readonly />
-				</u-form-item>
-				<u-form-item label="鏉ョエ鏁�" prop="ticketsNum" required border-bottom>
-					<u-input v-model="form.ticketsNum" type="number" placeholder="璇疯緭鍏�" @change="inputTicketsNum"/>
-				</u-form-item>
-				<u-form-item label="鏈鏉ョエ閲戦(鍏�)" prop="ticketsAmount" required border-bottom>
-					<u-input v-model="form.ticketsAmount" type="number" placeholder="璇疯緭鍏�" @change="inputTicketsAmount"/>
-				</u-form-item>
+		<van-form @submit="submitForm" ref="formRef" label-width="120px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
+			<van-cell-group title="鍩烘湰淇℃伅" inset>
+				<van-field v-model="form.purchaseContractNumber" label="閲囪喘鍚堝悓鍙�" readonly />
+				<van-field v-model="form.salesContractNo" label="閿�鍞悎鍚屽彿" readonly />
+				<van-field v-model="form.taxInclusiveUnitPrice" label="鍚◣鍗曚环(鍏�)" readonly />
+				<van-field v-model="form.createdAt" label="鍒涘缓鏃堕棿" readonly />
+				<van-field v-model="form.invoiceNumber" label="鍙戠エ鍙�" placeholder="璇疯緭鍏�" readonly />
+				<van-field v-model="form.ticketsNum" label="鏉ョエ鏁�" type="number" placeholder="璇疯緭鍏�" required :rules="[{ required: true, message: '璇疯緭鍏ユ潵绁ㄦ暟' }]" @change="inputTicketsNum"/>
+				<van-field v-model="form.ticketsAmount" label="鏈鏉ョエ閲戦(鍏�)" type="number" placeholder="璇疯緭鍏�" required :rules="[{ required: true, message: '璇疯緭鍏ユ湰娆℃潵绁ㄩ噾棰�' }]" @change="inputTicketsAmount"/>
 				<view class="tip-text">鏈潵绁ㄦ暟锛歿{ formatAmount(form.futureTickets) }} 鍏�</view>
-			</u-cell-group>
+<!--				<van-field v-model="form.invoicePerson" label="鏈潵绁ㄦ暟" readonly />-->
+			</van-cell-group>
+
+<!--			<van-cell-group title="闄勪欢鏉愭枡锛堜粎鏀寔 pdf锛�" inset>-->
+<!--				<van-uploader-->
+<!--					accept=".pdf"-->
+<!--					multiple-->
+<!--					:after-read="afterReadUpload"-->
+<!--					:before-read="beforeReadPdf"-->
+<!--				>-->
+<!--					<van-button class="upload-btn" icon="plus" type="primary" block>涓婁紶鏂囦欢</van-button>-->
+<!--				</van-uploader>-->
+<!--				<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>-->
+<!--						<van-button size="mini" type="danger" plain @click="removeUploaded(idx)">绉婚櫎</van-button>-->
+<!--					</view>-->
+<!--				</view>-->
+<!--			</van-cell-group>-->
 
 			<view class="footer-btns">
-				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
-				<u-button class="save-btn" type="primary" @click="submitForm">淇濆瓨</u-button>
+				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
+				<van-button class="save-btn" native-type="submit" form-type="submit">淇濆瓨</van-button>
 			</view>
-		</u-form>
+		</van-form>
 	</view>
 </template>
 
 <script setup>
 import { ref, onMounted } from 'vue'
-// 鏇挎崲 Vant 鐨� toast 鏂规硶
-// import { showToast, showLoadingToast, closeToast } from 'vant'
+import { showToast, showLoadingToast, closeToast } from 'vant'
 import dayjs from 'dayjs'
 import useUserStore from '@/store/modules/user'
 import { getToken } from '@/utils/auth'
 import { invoiceLedgerSaveOrUpdate } from '@/api/salesManagement/invoiceLedger.js'
 import config from '@/config.js'
 import {getProductRecordById, updateRegistration} from "@/api/procurementManagement/procurementInvoiceLedger";
-
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
-
-const showLoadingToast = (message) => {
-  uni.showLoading({
-    title: message || '鍔犺浇涓�...'
-  })
-}
-
-const closeToast = () => {
-  uni.hideLoading()
-}
 
 const userStore = useUserStore()
 
diff --git a/src/pages/procurementManagement/procurementLedger/detail.vue b/src/pages/procurementManagement/procurementLedger/detail.vue
index 9292d1d..52aa35c 100644
--- a/src/pages/procurementManagement/procurementLedger/detail.vue
+++ b/src/pages/procurementManagement/procurementLedger/detail.vue
@@ -4,57 +4,58 @@
 		<PageHeader title="鍙拌处璇︽儏" @back="goBack" />
 
          <!-- 琛ㄥ崟鍖哄煙 -->
-		<u-form @submit="onSubmit" label-width="110" input-align="right" style="margin-top: 10px" error-message-align="right">
-			<u-form-item label="閲囪喘鍚堝悓鍙�" prop="purchaseContractNumber" required border-bottom>
-				<u-input v-model="form.purchaseContractNumber" placeholder="鑷姩鐢熸垚" />
-			</u-form-item>
-			<u-form-item label="閿�鍞悎鍚屽彿" prop="salesContractNo" required border-bottom>
-				<u-input
-					v-model="form.salesContractNo"
-					readonly
-					placeholder="鐐瑰嚮閫夋嫨閿�鍞悎鍚屽彿"
-					@click="showPicker = true"
-				/>
-			</u-form-item>
-			<u-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierName" required border-bottom>
-				<u-input
-					v-model="form.supplierName"
-					readonly
-					placeholder="鐐瑰嚮閫夋嫨渚涘簲鍟�"
-					@click="showCustomerPicker = true"
-				/>
-			</u-form-item>
-			<u-form-item label="椤圭洰鍚嶇О" prop="projectName" required border-bottom>
-				<u-input v-model="form.projectName" placeholder="璇疯緭鍏ラ」鐩悕绉�" />
-			</u-form-item>
-			<u-form-item label="浠樻鏂瑰紡" border-bottom>
-				<u-input v-model="form.paymentMethod" placeholder="璇疯緭鍏ヤ粯娆炬柟寮�" />
-			</u-form-item>
-			<u-form-item label="褰曞叆浜�" border-bottom>
-				<u-input v-model="form.recorderName" placeholder="璇疯緭鍏�" disabled />
-			</u-form-item>
-			<u-form-item label="褰曞叆鏃ユ湡" border-bottom>
-				<u-input v-model="form.entryDate" placeholder="璇疯緭鍏�" disabled />
-			</u-form-item>
-			<u-popup v-model="showPicker" mode="bottom">
-				<u-picker
+		<van-form @submit="onSubmit" label-width="110px" input-align="right" style="margin-top: 10px" error-message-align="right" scroll-to-error scroll-to-error-position="center">
+			<van-field label="閲囪喘鍚堝悓鍙�" name="purchaseContractNumber" borderBottom="true" v-model="form.purchaseContractNumber" placeholder="鑷姩鐢熸垚" :rules="[{ required: true, message: '璇疯緭鍏�' }]">
+			</van-field>
+			<van-field
+				v-model="form.salesContractNo"
+				is-link
+				readonly
+				name="salesContractNo"
+				label="閿�鍞悎鍚屽彿"
+				required
+				placeholder="鐐瑰嚮閫夋嫨閿�鍞悎鍚屽彿"
+				:rules="[{ required: true, message: '璇烽�夋嫨閿�鍞悎鍚屽彿' }]"
+				@click="showPicker = true"
+			/>
+			<van-field
+				v-model="form.supplierName"
+				is-link
+				readonly
+				required
+				name="supplierName"
+				label="渚涘簲鍟嗗悕绉�"
+				placeholder="鐐瑰嚮閫夋嫨渚涘簲鍟�"
+				:rules="[{ required: true, message: '璇烽�夋嫨渚涘簲鍟�' }]"
+				@click="showCustomerPicker = true"
+			/>
+			<van-field label="椤圭洰鍚嶇О" name="projectName" borderBottom="true" v-model="form.projectName" placeholder="璇疯緭鍏ラ」鐩悕绉�" :rules="[{ required: true, message: '椤圭洰鍚嶇О涓嶈兘涓虹┖' }]" required>
+			</van-field>
+			<van-field label="浠樻鏂瑰紡" name="paymentMethod" borderBottom="true" v-model="form.paymentMethod" placeholder="璇疯緭鍏ヤ粯娆炬柟寮�">
+			</van-field>
+			<van-field label="褰曞叆浜�" name="recorderName" borderBottom="true" v-model="form.recorderName" placeholder="璇疯緭鍏�" disabled>
+			</van-field>
+			<van-field label="褰曞叆鏃ユ湡" name="entryDate" borderBottom="true" v-model="form.entryDate" placeholder="璇疯緭鍏�" disabled>
+			</van-field>
+			<van-popup v-model:show="showPicker" destroy-on-close position="bottom">
+				<van-picker
 					:columns="salesContractList"
 					v-model="pickerValue"
 					@confirm="onConfirm"
 					@cancel="showPicker = false"
 				/>
-			</u-popup>
-			<u-popup v-model="showCustomerPicker" mode="bottom">
-				<u-picker
+			</van-popup>
+			<van-popup v-model:show="showCustomerPicker" destroy-on-close position="bottom">
+				<van-picker
 					:columns="supplierList"
 					v-model="pickerCustomerValue"
 					@confirm="onCustomerConfirm"
 					@cancel="showCustomerPicker = false"
 				/>
-			</u-popup>
+			</van-popup>
 			
 			<!-- 浜у搧澶х被閫夋嫨鍣� -->
-			<u-popup v-model="showCategoryPicker" mode="bottom">
+			<van-popup v-model:show="showCategoryPicker" destroy-on-close position="bottom">
 				<!-- 澶撮儴鎸夐挳鍖哄煙 -->
 				<view class="popup-header">
 					<view @click="showCategoryPicker = false" class="cancelButton">鍙栨秷</view>
@@ -68,159 +69,175 @@
 					check-strictly
 					@check-change="onCategoryConfirm"
 				/>
-			</u-popup>
+			</van-popup>
 			
 			<!-- 瑙勬牸鍨嬪彿閫夋嫨鍣� -->
-			<u-popup v-model="showSpecificationPicker" mode="bottom">
-				<u-picker
+			<van-popup v-model:show="showSpecificationPicker" destroy-on-close position="bottom">
+				<van-picker
 					:columns="modelOptions"
 					v-model="pickerSpecificationValue"
 					@confirm="onSpecificationConfirm"
 					@cancel="showSpecificationPicker = false"
 				/>
-			</u-popup>
+			</van-popup>
 			
 			<!-- 绋庣巼閫夋嫨鍣� -->
-			<u-popup v-model="showTaxRatePicker" mode="bottom">
-				<u-picker
+			<van-popup v-model:show="showTaxRatePicker" destroy-on-close position="bottom">
+				<van-picker
 					:columns="taxRateOptions"
 					v-model="pickerTaxRateValue"
 					@confirm="onTaxRateConfirm"
 					@cancel="showTaxRatePicker = false"
 				/>
-			</u-popup>
+			</van-popup>
 			
 			<!-- 鍙戠エ绫诲瀷閫夋嫨鍣� -->
-			<u-popup v-model="showInvoiceTypePicker" mode="bottom">
-				<u-picker
+			<van-popup v-model:show="showInvoiceTypePicker" destroy-on-close position="bottom">
+				<van-picker
 					:columns="invoiceTypeOptions"
 					v-model="pickerInvoiceTypeValue"
 					@confirm="onInvoiceTypeConfirm"
 					@cancel="showInvoiceTypePicker = false"
 				/>
-			</u-popup>
+			</van-popup>
 			<!-- 浜у搧淇℃伅 -->
 			<view class="product-section">
 				<view class="section-header">
 					<text class="section-title">浜у搧淇℃伅</text>
-					<u-button type="primary" size="small" @click="addProduct" class="add-btn" v-if="operationType !== 'view'">
-						<u-icon name="plus" size="14" />
-						鏂板
-					</u-button>
+					<van-button type="primary" size="small" @click="addProduct" class="add-btn" icon="plus"  v-if="operationType !== 'view'">鏂板</van-button>
 				</view>
 				<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" />
+							<van-icon name="description" color="#2979ff" size="15" />
 							<text class="product-productCategory">浜у搧 {{ idx + 1 }}</text>
 						</view>
 						<!-- 鎿嶄綔鎸夐挳 -->
-						<view class="product-actions" v-if="operationType !== 'view'">
-							<u-button type="error" size="mini" @click="removeProduct(idx)" class="del-btn">
-								<u-icon name="trash" size="12" />
-								鍒犻櫎
-							</u-button>
+						<view class="product-actions"  v-if="operationType !== 'view'">
+							<van-button type="danger" size="mini" @click="removeProduct(idx)" class="del-btn" icon="delete">鍒犻櫎</van-button>
 						</view>
 					</view>
 					
 					<!-- 浜у搧淇℃伅琛ㄥ崟 -->
 					<view class="product-form">
 						<!-- 浜у搧澶х被 -->
-						<view class="product-category" prop="productCategory" required border-bottom>
-							<u-input
-								v-model="product.productCategory"
-								readonly
-								placeholder="璇烽�夋嫨"
-								@click="openCategoryPicker(idx)"
-							/>
-						</view>
+						<van-field
+							v-model="product.productCategory"
+							is-link
+							readonly
+							name="productCategory"
+							label="浜у搧澶х被"
+							required
+							placeholder="璇烽�夋嫨"
+							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
+							@click="openCategoryPicker(idx)"
+						/>
 						
 						<!-- 瑙勬牸鍨嬪彿 -->
-						<view class="product-specificationModel" prop="specificationModel" required border-bottom>
-							<u-input
-								v-model="product.specificationModel"
-								readonly
-								placeholder="璇烽�夋嫨"
-								@click="openSpecificationPicker(idx)"
-							/>
-						</view>
+						<van-field
+							v-model="product.specificationModel"
+							is-link
+							readonly
+							name="specificationModel"
+							label="瑙勬牸鍨嬪彿"
+							required
+							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
+							placeholder="璇烽�夋嫨"
+							@click="openSpecificationPicker(idx)"
+						/>
 						
 						<!-- 鍗曚綅 -->
-						<view class="product-unit" prop="unit" required border-bottom>
-							<u-input
-								v-model="product.unit"
-								placeholder="璇疯緭鍏�"
-							/>
-						</view>
+						<van-field
+							v-model="product.unit"
+							name="unit"
+							label="鍗曚綅"
+							required
+							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
+							placeholder="璇疯緭鍏�"
+						/>
 						
 						<!-- 绋庣巼 -->
-						<view class="product-taxRate" prop="taxRate" required border-bottom>
-							<u-input
-								v-model="product.taxRate"
-								readonly
-								placeholder="璇烽�夋嫨"
-								@click="openTaxRatePicker(idx)"
-							/>
-						</view>
+						<van-field
+							v-model="product.taxRate"
+							is-link
+							readonly
+							name="taxRate"
+							label="绋庣巼(%)"
+							required
+							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
+							placeholder="璇烽�夋嫨"
+							@click="openTaxRatePicker(idx)"
+						/>
 						
 						<!-- 鍚◣鍗曚环 -->
-						<view class="product-taxInclusiveUnitPrice" prop="taxInclusiveUnitPrice" required border-bottom>
-							<u-input
-								v-model="product.taxInclusiveUnitPrice"
-								type="number"
-								placeholder="璇疯緭鍏�"
-								@blur="formatTaxPrice(idx)"
-							/>
-						</view>
+						<van-field
+							v-model="product.taxInclusiveUnitPrice"
+							name="taxInclusiveUnitPrice"
+							label="鍚◣鍗曚环(鍏�)"
+							type="number"
+							required
+							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
+							placeholder="璇疯緭鍏�"
+							@blur="formatTaxPrice(idx)"
+						/>
 						
 						<!-- 鏁伴噺 -->
-						<view class="product-quantity" prop="quantity" required border-bottom>
-							<u-input
-								v-model="product.quantity"
-								type="number"
-								placeholder="璇疯緭鍏�"
-								@blur="formatAmount(idx)"
-							/>
-						</view>
+						<van-field
+							v-model="product.quantity"
+							name="quantity"
+							label="鏁伴噺"
+							type="number"
+							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
+							required
+							placeholder="璇疯緭鍏�"
+							@blur="formatAmount(idx)"
+						/>
 						
 						<!-- 鍚◣鎬讳环 -->
-						<view class="product-taxInclusiveTotalPrice" prop="taxInclusiveTotalPrice" required border-bottom>
-							<u-input
-								v-model="product.taxInclusiveTotalPrice"
-								type="number"
-								placeholder="璇疯緭鍏�"
-								@blur="formatTaxTotal(idx)"
-							/>
-						</view>
+						<van-field
+							v-model="product.taxInclusiveTotalPrice"
+							name="taxInclusiveTotalPrice"
+							label="鍚◣鎬讳环(鍏�)"
+							type="number"
+							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
+							required
+							placeholder="璇疯緭鍏�"
+							@blur="formatTaxTotal(idx)"
+						/>
 						
 						<!-- 涓嶅惈绋庢�讳环 -->
-						<view class="product-taxExclusiveTotalPrice" prop="taxExclusiveTotalPrice" required border-bottom>
-							<u-input
-								v-model="product.taxExclusiveTotalPrice"
-								type="number"
-								placeholder="璇疯緭鍏�"
-								@blur="formatNoTaxTotal(idx)"
-							/>
-						</view>
+						<van-field
+							v-model="product.taxExclusiveTotalPrice"
+							name="taxExclusiveTotalPrice"
+							label="涓嶅惈绋庢�讳环(鍏�)"
+							type="number"
+							required
+							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
+							placeholder="璇疯緭鍏�"
+							@blur="formatNoTaxTotal(idx)"
+						/>
 						
 						<!-- 鍙戠エ绫诲瀷 -->
-						<view class="product-invoiceType" prop="invoiceType" required border-bottom>
-							<u-input
-								v-model="product.invoiceType"
-								readonly
-								placeholder="璇烽�夋嫨"
-								@click="openInvoiceTypePicker(idx)"
-							/>
-						</view>
+						<van-field
+							v-model="product.invoiceType"
+							is-link
+							readonly
+							name="invoiceType"
+							label="鍙戠エ绫诲瀷"
+							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
+							required
+							placeholder="璇烽�夋嫨"
+							@click="openInvoiceTypePicker(idx)"
+						/>
 					</view>
 				</view>
 			</view>
 			<view class="footer-btns" v-if="operationType !== 'view'">
-				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
-				<u-button class="save-btn" type="primary" @click="onSubmit">淇濆瓨</u-button>
+				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
+				<van-button class="save-btn" native-type="submit" form-type="submit">淇濆瓨</van-button>
 			</view>
-		</u-form>
+		</van-form>
   </view>
 </template>
 
@@ -720,10 +737,10 @@
 .form-section {
 	margin-top: 1rem;
 }
-.u-form-item {
+.van-field {
 	height: 3.4rem;
 }
-.u-cell {
+.van-cell {
 	align-items: center;
 }
 .product-section {
diff --git a/src/pages/sales/invoiceLedger/detail.vue b/src/pages/sales/invoiceLedger/detail.vue
index b7f6fe8..d8913d3 100644
--- a/src/pages/sales/invoiceLedger/detail.vue
+++ b/src/pages/sales/invoiceLedger/detail.vue
@@ -1,93 +1,56 @@
 <template>
-	<view class="invoice-detail">
+	<view class="account-detail">
 		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-		<PageHeader title="鍙戠エ璇︽儏" @back="goBack" />
-		
-		<!-- 琛ㄥ崟鍐呭 -->
-		<u-form @submit="submitForm" ref="formRef" label-width="110" input-align="right" error-message-align="right">
-			<u-cell-group title="鍩烘湰淇℃伅">
-				<u-form-item label="閿�鍞悎鍚屽彿" border-bottom>
-					<u-input v-model="form.salesContractNo" readonly />
-				</u-form-item>
-				<u-form-item label="瀹㈡埛鍚嶇О" border-bottom>
-					<u-input v-model="form.customerName" readonly />
-				</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="invoiceTotal" required border-bottom>
-					<u-input v-model="form.invoiceTotal" type="number" placeholder="璇疯緭鍏�" />
-				</u-form-item>
-				<u-form-item label="寮�绁ㄤ汉" border-bottom>
-					<u-input v-model="form.invoicePerson" readonly />
-				</u-form-item>
-				<u-form-item label="寮�绁ㄦ棩鏈�" prop="invoiceDate" required border-bottom>
-					<u-input v-model="form.invoiceDate" readonly placeholder="璇烽�夋嫨" @click="showInvoiceDatePicker = true" />
-				</u-form-item>
-			</u-cell-group>
-			
-			<u-cell-group title="闄勪欢鏉愭枡锛堜粎鏀寔 pdf锛�">
-				<u-upload
+		<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">
+			<van-cell-group title="鍩烘湰淇℃伅" inset>
+				<van-field v-model="form.salesContractNo" label="閿�鍞悎鍚屽彿" readonly />
+				<van-field v-model="form.customerName" label="瀹㈡埛鍚嶇О" readonly />
+				<van-field v-model="form.invoiceNo" label="鍙戠エ鍙�" placeholder="璇疯緭鍏�" required :rules="[{ required: true, message: '璇疯緭鍏ュ彂绁ㄥ彿' }]" />
+				<van-field v-model="form.invoiceTotal" label="鍙戠エ閲戦(鍏�)" type="number" placeholder="璇疯緭鍏�" required :rules="[{ required: true, message: '璇疯緭鍏ュ彂绁ㄩ噾棰�' }]" />
+				<view class="tip-text" v-if="form.taxInclusiveTotalPrice">鍚堝悓鎬婚锛歿{ formatAmount(form.taxInclusiveTotalPrice) }} 鍏�</view>
+				<van-field v-model="form.invoicePerson" label="寮�绁ㄤ汉" readonly />
+				<van-field v-model="form.invoiceDate" label="寮�绁ㄦ棩鏈�" readonly placeholder="璇烽�夋嫨" @click="showInvoiceDatePicker = true" required :rules="[{ required: true, message: '璇烽�夋嫨寮�绁ㄦ棩鏈�' }]" />
+			</van-cell-group>
+
+			<van-cell-group title="闄勪欢鏉愭枡锛堜粎鏀寔 pdf锛�" inset>
+				<van-uploader
 					accept=".pdf"
 					multiple
-					:afterRead="afterReadUpload"
-					:beforeRead="beforeReadPdf"
+					:after-read="afterReadUpload"
+					:before-read="beforeReadPdf"
 				>
-					<u-button class="upload-btn" type="primary">
-						<u-icon name="plus" size="14" />
-						涓婁紶鏂囦欢
-					</u-button>
-				</u-upload>
+					<van-button class="upload-btn" icon="plus" type="primary" block>涓婁紶鏂囦欢</van-button>
+				</van-uploader>
 				<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>
+						<van-button size="mini" type="danger" plain @click="removeUploaded(idx)">绉婚櫎</van-button>
 					</view>
 				</view>
-			</u-cell-group>
-			
-			<!-- 鎻愪氦鎸夐挳 -->
-			<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>
+			</van-cell-group>
 
-		<!-- 寮�绁ㄦ棩鏈熼�夋嫨鍣� -->
-		<u-popup v-model="showInvoiceDatePicker" mode="bottom">
-			<u-datetime-picker
-				v-model="invoiceDateValue"
+			<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>
+
+		<van-popup v-model:show="showInvoiceDatePicker" position="bottom">
+			<van-date-picker
+				v-model="currentInvoiceDate"
 				title="閫夋嫨寮�绁ㄦ棩鏈�"
 				@confirm="onInvoiceDateConfirm"
 				@cancel="showInvoiceDatePicker = false"
 			/>
-		</u-popup>
+		</van-popup>
 	</view>
 </template>
 
 <script setup>
-// 鏇挎崲 Vant 鐨� toast 鏂规硶
-// import { showToast, showLoadingToast, closeToast } from 'vant'
-
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
-
-const showLoadingToast = (message) => {
-  uni.showLoading({
-    title: message || '鍔犺浇涓�...'
-  })
-}
-
-const closeToast = () => {
-  uni.hideLoading()
-}
-
 import { ref, onMounted } from 'vue'
+import { showToast, showLoadingToast, closeToast } from 'vant'
 import dayjs from 'dayjs'
 import useUserStore from '@/store/modules/user'
 import { getToken } from '@/utils/auth'
diff --git a/src/pages/sales/invoicingRegistration/add.vue b/src/pages/sales/invoicingRegistration/add.vue
index 1156f6e..64c1931 100644
--- a/src/pages/sales/invoicingRegistration/add.vue
+++ b/src/pages/sales/invoicingRegistration/add.vue
@@ -4,67 +4,63 @@
     <PageHeader title="鏂板寮�绁ㄧ櫥璁�" @back="goBack" />
     
     <!-- 琛ㄥ崟鍐呭 -->
-    <u-form @submit="submitForm" ref="formRef" label-width="110" input-align="right" error-message-align="right">
+    <van-form @submit="submitForm" ref="formRef" label-width="110px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
       <!-- 鍩烘湰淇℃伅 -->
-      <u-cell-group title="鍩烘湰淇℃伅">
-        <u-form-item label="閿�鍞悎鍚屽彿" border-bottom>
-          <u-input
-            v-model="form.salesContractNo"
-            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"
-            readonly
-            placeholder="璇烽�夋嫨寮�绁ㄦ棩鏈�"
-            @click="showIssueDatePicker = true"
-          />
-        </u-form-item>
-      </u-cell-group>
+      <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
+          @click="showIssueDatePicker = true"
+          :rules="[{ required: true, message: '璇烽�夋嫨寮�绁ㄦ棩鏈�' }]"
+        />
+      </van-cell-group>
 
       <!-- 浜у搧淇℃伅 -->
       <view class="product-section">
@@ -73,7 +69,7 @@
         </view>
         
         <view v-if="productData.length === 0" class="empty-state">
-          <u-empty text="鏆傛棤浜у搧鏁版嵁" />
+          <van-empty description="鏆傛棤浜у搧鏁版嵁" />
         </view>
         
         <view v-else class="product-list">
@@ -85,151 +81,120 @@
             <!-- 浜у搧澶撮儴 -->
             <view class="product-header">
               <view class="product-title">
-                <u-icon name="file-text" color="#2979ff" size="15" />
+                <van-icon name="description" color="#2979ff" size="15" />
                 <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>
+              <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
+              />
               
               <!-- 鏈寮�绁ㄤ俊鎭� -->
-              <u-form-item label="鏈寮�绁ㄦ暟" border-bottom>
-                <u-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"
-                  placeholder="璇疯緭鍏ュ紑绁ㄩ噾棰�"
-                  @blur="invoiceAmountBlur(item)"
-                />
-              </u-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)"
+              />
               
               <!-- 鏈紑绁ㄤ俊鎭� -->
-              <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>
+              <van-field
+                v-model="item.noInvoiceNum"
+                label="鏈紑绁ㄦ暟"
+                readonly
+              />
+              <van-field
+                v-model="item.noInvoiceAmount"
+                label="鏈紑绁ㄩ噾棰�(鍏�)"
+                readonly
+              />
             </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>
+			<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>
 
     <!-- 鏃ユ湡閫夋嫨鍣� -->
-    <u-popup v-model="showIssueDatePicker" mode="bottom">
-      <u-datetime-picker
+    <van-popup v-model:show="showIssueDatePicker" position="bottom">
+      <van-date-picker
         v-model="currentIssueDate"
         title="閫夋嫨寮�绁ㄦ棩鏈�"
         @confirm="onIssueDateConfirm"
         @cancel="showIssueDatePicker = false"
       />
-    </u-popup>
+    </van-popup>
 
-    <u-popup v-model="showCreateTimePicker" mode="bottom">
-      <u-datetime-picker
+    <van-popup v-model:show="showCreateTimePicker" position="bottom">
+      <van-date-picker
         v-model="currentCreateTime"
         title="閫夋嫨褰曞叆鏃ユ湡"
         @confirm="onCreateTimeConfirm"
         @cancel="showCreateTimePicker = false"
       />
-    </u-popup>
+    </van-popup>
   </view>
 </template>
 
 <script setup>
 import { ref, reactive, onMounted } from 'vue'
-// 鏇挎崲 Vant 鐨� toast 涓� uni 鍘熺敓鎴� uview-plus 鐨勬柟娉�
-// import { showToast, showLoadingToast, closeToast } from 'vant'
+import { showToast, showLoadingToast, closeToast } from 'vant'
 import { invoiceRegistrationSave } from '@/api/salesManagement/invoiceRegistration'
 import useUserStore from '@/store/modules/user'
 import {getSalesLedgerWithProducts} from "@/api/salesManagement/salesLedger";
-
-// 鏇挎崲 toast 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
-
-const showLoadingToast = (message) => {
-  uni.showLoading({
-    title: message || '鍔犺浇涓�...'
-  })
-}
-
-const closeToast = () => {
-  uni.hideLoading()
-}
 
 const userStore = useUserStore()
 const editData = ref(null);
diff --git a/src/pages/sales/invoicingRegistration/index.vue b/src/pages/sales/invoicingRegistration/index.vue
index a89af00..2f4c344 100644
--- a/src/pages/sales/invoicingRegistration/index.vue
+++ b/src/pages/sales/invoicingRegistration/index.vue
@@ -14,7 +14,7 @@
 					/>
 				</view>
 				<view class="filter-button" @click="getList">
-					<u-icon name="search" size="24" color="#999"></u-icon>
+					<up-icon name="search" size="24" color="#999"></up-icon>
 				</view>
 			</view>
 		</view>
@@ -26,12 +26,12 @@
 					<view class="item-header">
 						<view class="item-left">
 							<view class="document-icon">
-								<u-icon name="file-text" size="16" color="#ffffff"></u-icon>
+								<up-icon name="file-text" size="16" color="#ffffff"></up-icon>
 							</view>
 							<text class="item-id">{{ item.salesContractNo }}</text>
 						</view>
 					</view>
-					<u-divider></u-divider>
+					<up-divider></up-divider>
 					
 					<view class="item-details">
 						<view class="detail-row">
@@ -66,7 +66,7 @@
 					
 					<!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
 					<view class="action-buttons">
-						<u-button
+						<van-button
 							type="primary"
 							size="small"
 							@click="handleAddInvoice(item)"
@@ -74,15 +74,15 @@
 							:disabled="item.noInvoiceAmountTotal == 0"
 						>
 							鏂板寮�绁�
-						</u-button>
-						<u-button
-							type="info"
+						</van-button>
+						<van-button
+							type="default"
 							size="small"
 							@click="handleViewDetail(item)"
 							class="action-btn"
 						>
 							鏌ョ湅璇︽儏
-						</u-button>
+						</van-button>
 					</view>
 				</view>
 			</view>
diff --git a/src/pages/sales/receiptPayment/add.vue b/src/pages/sales/receiptPayment/add.vue
index 4d9befc..150c570 100644
--- a/src/pages/sales/receiptPayment/add.vue
+++ b/src/pages/sales/receiptPayment/add.vue
@@ -4,105 +4,99 @@
     <PageHeader title="鏂板鍥炴" @back="onClickLeft" />
     
     <!-- 琛ㄥ崟鍐呭 -->
-    <u-form @submit="onSubmit" ref="formRef" label-width="110" input-align="right" error-message-align="right">
+    <van-form @submit="onSubmit" ref="formRef" label-width="110px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
       <!-- 鍩烘湰淇℃伅 -->
-      <u-cell-group title="鍩烘湰淇℃伅">
-        <u-form-item label="閿�鍞悎鍚屽彿" border-bottom>
-          <u-input
-            v-model="form.salesContractNo"
-            placeholder="鑷姩濉厖"
-            readonly
-          />
-        </u-form-item>
-        <u-form-item label="瀹㈡埛鍚嶇О" border-bottom>
-          <u-input
-            v-model="form.customerName"
-            placeholder="鑷姩濉厖"
-            readonly
-          />
-        </u-form-item>
-        <u-form-item label="鍙戠エ鍙�" border-bottom>
-          <u-input
-            v-model="form.invoiceNo"
-            placeholder="鑷姩濉厖"
-            readonly
-          />
-        </u-form-item>
-        <u-form-item label="鍙戠エ閲戦(鍏�)" border-bottom>
-          <u-input
-            v-model="form.invoiceTotal"
-            placeholder="鑷姩濉厖"
-            readonly
-          />
-        </u-form-item>
-        <u-form-item label="绋庣巼" border-bottom>
-          <u-input
-            v-model="form.taxRate"
-            placeholder="鑷姩濉厖"
-            readonly
-          />
-        </u-form-item>
-        <view class="tip-text">寰呭洖娆鹃噾棰濓細{{ currentNoReceiptAmount }} 鍏�</view>
-        <u-form-item label="鏈鍥炴閲戦" prop="receiptPaymentAmount" required border-bottom>
-          <u-input
-            v-model="form.receiptPaymentAmount"
-            type="number"
-            placeholder="璇疯緭鍏�"
-            @blur="changeNum"
-            clearable
-          />
-        </u-form-item>
-        <u-form-item label="鍥炴褰㈠紡" prop="receiptPaymentTypeName" required border-bottom>
-          <u-input
-            v-model="form.receiptPaymentTypeName"
-            placeholder="璇烽�夋嫨"
-            readonly
-            @click="showPaymentTypePicker"
-          />
-        </u-form-item>
-        <u-form-item label="鏉ユ鏃ユ湡" prop="receiptPaymentDate" required border-bottom>
-          <u-input
-            v-model="form.receiptPaymentDate"
-            placeholder="璇烽�夋嫨"
-            readonly
-            @click="showDatePicker"
-          />
-        </u-form-item>
-        <u-form-item label="鐧昏浜�" border-bottom>
-          <u-input
-            v-model="form.registrant"
-            placeholder="鑷姩濉厖"
-            readonly
-          />
-        </u-form-item>
-      </u-cell-group>
+      <van-cell-group title="鍩烘湰淇℃伅" inset>
+        <van-field
+          v-model="form.salesContractNo"
+          label="閿�鍞悎鍚屽彿"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+        <van-field
+          v-model="form.customerName"
+          label="瀹㈡埛鍚嶇О"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+        <van-field
+          v-model="form.invoiceNo"
+          label="鍙戠エ鍙�"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+        <van-field
+          v-model="form.invoiceTotal"
+          label="鍙戠エ閲戦(鍏�)"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+        <van-field
+          v-model="form.taxRate"
+          label="绋庣巼"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+				<view class="tip-text">寰呭洖娆鹃噾棰濓細{{ currentNoReceiptAmount }} 鍏�</view>
+        <van-field
+          v-model="form.receiptPaymentAmount"
+          label="鏈鍥炴閲戦"
+          type="number"
+          placeholder="璇疯緭鍏�"
+					@blur="changeNum"
+          :rules="[{ required: true, message: '璇疯緭鍏ュ洖娆鹃噾棰�' }]"
+          clearable
+        />
+        <van-field
+          v-model="form.receiptPaymentTypeName"
+          label="鍥炴褰㈠紡"
+          placeholder="璇烽�夋嫨"
+          readonly
+          @click="showPaymentTypePicker"
+          :rules="[{ required: true, message: '璇烽�夋嫨鍥炴褰㈠紡' }]"
+        />
+				<van-field
+					v-model="form.receiptPaymentDate"
+					label="鏉ユ鏃ユ湡"
+					placeholder="璇烽�夋嫨"
+					readonly
+					@click="showDatePicker"
+					:rules="[{ required: true, message: '璇烽�夋嫨鏉ユ鏃ユ湡' }]"
+				/>
+        <van-field
+          v-model="form.registrant"
+          label="鐧昏浜�"
+          placeholder="鑷姩濉厖"
+          readonly
+        />
+      </van-cell-group>
       
       <!-- 鎻愪氦鎸夐挳 -->
       <view class="footer-btns">
-        <u-button class="cancel-btn" @click="onClickLeft">鍙栨秷</u-button>
-        <u-button class="save-btn" type="primary" @click="onSubmit" :loading="loading">淇濆瓨</u-button>
+        <van-button class="cancel-btn" @click="onClickLeft">鍙栨秷</van-button>
+        <van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
       </view>
-    </u-form>
+    </van-form>
 
     <!-- 鍥炴鏂瑰紡閫夋嫨鍣� -->
-    <u-popup v-model="showPaymentType" mode="bottom">
-      <u-picker
-        v-model="pickerValue"
+    <van-popup v-model:show="showPaymentType" position="bottom">
+      <van-picker
+				:model-value="pickerValue"
         :columns="receipt_payment_type"
         @confirm="onPaymentTypeConfirm"
         @cancel="showPaymentType = false"
       />
-    </u-popup>
+    </van-popup>
 
     <!-- 鏃ユ湡閫夋嫨鍣� -->
-    <u-popup v-model="showDate" mode="bottom">
-      <u-datetime-picker
+    <van-popup v-model:show="showDate" position="bottom">
+      <van-date-picker
         v-model="currentDate"
         title="閫夋嫨鏃ユ湡"
         @confirm="onDateConfirm"
         @cancel="showDate = false"
       />
-    </u-popup>
+    </van-popup>
   </view>
 </template>
 
@@ -110,24 +104,8 @@
 import { ref, onMounted, computed } from 'vue'
 import { receiptPaymentSaveOrUpdate, invoiceInfo } from '@/api/salesManagement/receiptPayment'
 import useUserStore from '@/store/modules/user'
-// 鏇挎崲 Vant 鐨� toast 鍜� notify
-// import { showToast, showNotify } from 'vant'
+import { showToast, showNotify } from 'vant'
 import { useDict } from '@/utils/dict'
-
-// 鏇挎崲 toast 鍜� notify 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
-
-const showNotify = ({ type, message }) => {
-  uni.showToast({
-    title: message,
-    icon: type === 'warning' ? 'none' : 'success'
-  })
-}
 
 const userStore = useUserStore()
 
diff --git a/src/pages/sales/receiptPayment/edit.vue b/src/pages/sales/receiptPayment/edit.vue
index 8c54a03..c035a9b 100644
--- a/src/pages/sales/receiptPayment/edit.vue
+++ b/src/pages/sales/receiptPayment/edit.vue
@@ -4,104 +4,98 @@
 		<PageHeader title="缂栬緫鍥炴" @back="onClickLeft" />
 		
 		<!-- 琛ㄥ崟鍐呭 -->
-		<u-form @submit="onSubmit" ref="formRef" label-width="110" input-align="right" error-message-align="right">
+		<van-form @submit="onSubmit" ref="formRef" label-width="110px" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center">
 			<!-- 鍩烘湰淇℃伅 -->
-			<u-cell-group title="鍩烘湰淇℃伅">
-				<u-form-item label="閿�鍞悎鍚屽彿" border-bottom>
-					<u-input
-						v-model="form.salesContractNo"
-						placeholder="鑷姩濉厖"
-						readonly
-					/>
-				</u-form-item>
-				<u-form-item label="瀹㈡埛鍚嶇О" border-bottom>
-					<u-input
-						v-model="form.customerName"
-						placeholder="鑷姩濉厖"
-						readonly
-					/>
-				</u-form-item>
-				<!--				<u-form-item label="鍙戠エ鍙�" border-bottom>-->
-				<!--					<u-input-->
-				<!--						v-model="form.invoiceNo"-->
-				<!--						placeholder="鑷姩濉厖"-->
-				<!--						readonly-->
-				<!--					/>-->
-				<!--				</u-form-item>-->
-				<!--				<u-form-item label="鍙戠エ閲戦(鍏�)" border-bottom>-->
-				<!--					<u-input-->
-				<!--						v-model="form.invoiceTotal"-->
-				<!--						placeholder="鑷姩濉厖"-->
-				<!--						readonly-->
-				<!--					/>-->
-				<!--				</u-form-item>-->
-				<!--				<u-form-item label="绋庣巼" border-bottom>-->
-				<!--					<u-input-->
-				<!--						v-model="form.taxRate"-->
-				<!--						placeholder="鑷姩濉厖"-->
-				<!--						readonly-->
-				<!--					/>-->
-				<!--				</u-form-item>-->
+			<van-cell-group title="鍩烘湰淇℃伅" inset>
+				<van-field
+					v-model="form.salesContractNo"
+					label="閿�鍞悎鍚屽彿"
+					placeholder="鑷姩濉厖"
+					readonly
+				/>
+				<van-field
+					v-model="form.customerName"
+					label="瀹㈡埛鍚嶇О"
+					placeholder="鑷姩濉厖"
+					readonly
+				/>
+<!--				<van-field-->
+<!--					v-model="form.invoiceNo"-->
+<!--					label="鍙戠エ鍙�"-->
+<!--					placeholder="鑷姩濉厖"-->
+<!--					readonly-->
+<!--				/>-->
+<!--				<van-field-->
+<!--					v-model="form.invoiceTotal"-->
+<!--					label="鍙戠エ閲戦(鍏�)"-->
+<!--					placeholder="鑷姩濉厖"-->
+<!--					readonly-->
+<!--				/>-->
+<!--				<van-field-->
+<!--					v-model="form.taxRate"-->
+<!--					label="绋庣巼"-->
+<!--					placeholder="鑷姩濉厖"-->
+<!--					readonly-->
+<!--				/>-->
 				<view class="tip-text">寰呭洖娆鹃噾棰濓細{{ currentNoReceiptAmount }} 鍏�</view>
-				<u-form-item label="鏈鍥炴閲戦" prop="receiptPaymentAmount" required border-bottom>
-					<u-input
-						v-model="form.receiptPaymentAmount"
-						type="number"
-						placeholder="璇疯緭鍏�"
-						@blur="changeNum"
-						clearable
-					/>
-				</u-form-item>
-				<u-form-item label="鍥炴褰㈠紡" prop="receiptPaymentTypeName" required border-bottom>
-					<u-input
-						v-model="form.receiptPaymentTypeName"
-						placeholder="璇烽�夋嫨"
-						readonly
-						@click="showPaymentTypePicker"
-					/>
-				</u-form-item>
-				<u-form-item label="鏉ユ鏃ユ湡" prop="receiptPaymentDate" required border-bottom>
-					<u-input
-						v-model="form.receiptPaymentDate"
-						placeholder="璇烽�夋嫨"
-						readonly
-					/>
-				</u-form-item>
-				<u-form-item label="鐧昏浜�" border-bottom>
-					<u-input
-						v-model="form.registrant"
-						placeholder="鑷姩濉厖"
-						readonly
-					/>
-				</u-form-item>
-			</u-cell-group>
+				<van-field
+					v-model="form.receiptPaymentAmount"
+					label="鏈鍥炴閲戦"
+					type="number"
+					placeholder="璇疯緭鍏�"
+					@blur="changeNum"
+					:rules="[{ required: true, message: '璇疯緭鍏ュ洖娆鹃噾棰�' }]"
+					clearable
+				/>
+				<van-field
+					v-model="form.receiptPaymentTypeName"
+					label="鍥炴褰㈠紡"
+					placeholder="璇烽�夋嫨"
+					readonly
+					@click="showPaymentTypePicker"
+					:rules="[{ required: true, message: '璇烽�夋嫨鍥炴褰㈠紡' }]"
+				/>
+				<van-field
+					v-model="form.receiptPaymentDate"
+					label="鏉ユ鏃ユ湡"
+					placeholder="璇烽�夋嫨"
+					readonly
+					:rules="[{ required: true, message: '璇烽�夋嫨鏉ユ鏃ユ湡' }]"
+				/>
+				<van-field
+					v-model="form.registrant"
+					label="鐧昏浜�"
+					placeholder="鑷姩濉厖"
+					readonly
+				/>
+			</van-cell-group>
 			
 			<!-- 鎻愪氦鎸夐挳 -->
 			<view class="footer-btns">
-				<u-button class="cancel-btn" @click="onClickLeft">鍙栨秷</u-button>
-				<u-button class="save-btn" type="primary" @click="onSubmit" :loading="loading">淇濆瓨</u-button>
+				<van-button class="cancel-btn" @click="onClickLeft">鍙栨秷</van-button>
+				<van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
 			</view>
-		</u-form>
+		</van-form>
 		
 		<!-- 鍥炴鏂瑰紡閫夋嫨鍣� -->
-		<u-popup v-model="showPaymentType" mode="bottom">
-			<u-picker
-				v-model="pickerValue"
+		<van-popup v-model:show="showPaymentType" position="bottom">
+			<van-picker
+				:model-value="pickerValue"
 				:columns="receipt_payment_type"
 				@confirm="onPaymentTypeConfirm"
 				@cancel="showPaymentType = false"
 			/>
-		</u-popup>
+		</van-popup>
 		
 		<!-- 鏃ユ湡閫夋嫨鍣� -->
-		<u-popup v-model="showDate" mode="bottom">
-			<u-datetime-picker
+		<van-popup v-model:show="showDate" position="bottom">
+			<van-date-picker
 				v-model="currentDate"
 				title="閫夋嫨鏃ユ湡"
 				@confirm="onDateConfirm"
 				@cancel="showDate = false"
 			/>
-		</u-popup>
+		</van-popup>
 	</view>
 </template>
 
@@ -109,24 +103,8 @@
 import { ref, onMounted, computed } from 'vue'
 import { receiptPaymentSaveOrUpdate, invoiceInfo } from '@/api/salesManagement/receiptPayment'
 import useUserStore from '@/store/modules/user'
-// 鏇挎崲 Vant 鐨� toast 鍜� notify
-// import { showToast, showNotify } from 'vant'
+import { showToast, showNotify } from 'vant'
 import { useDict } from '@/utils/dict'
-
-// 鏇挎崲 toast 鍜� notify 鏂规硶
-const showToast = (message) => {
-  uni.showToast({
-    title: message,
-    icon: 'none'
-  })
-}
-
-const showNotify = ({ type, message }) => {
-  uni.showToast({
-    title: message,
-    icon: type === 'warning' ? 'none' : 'success'
-  })
-}
 
 const userStore = useUserStore()
 
diff --git a/src/pages/sales/receiptPayment/index.vue b/src/pages/sales/receiptPayment/index.vue
index a30d42e..4cf0a30 100644
--- a/src/pages/sales/receiptPayment/index.vue
+++ b/src/pages/sales/receiptPayment/index.vue
@@ -15,14 +15,14 @@
 					/>
 				</view>
 				<view class="filter-button" @click="getList">
-					<u-icon name="search" size="24" color="#999"></u-icon>
+					<up-icon name="search" size="24" color="#999"></up-icon>
 				</view>
 			</view>
 			
 			<!-- 绛涢�夊紑鍏� -->
 			<view class="switch-row">
 				<text class="switch-label">涓嶆樉绀哄緟鍥炴涓�0</text>
-				<u-switch v-model="searchForm.status" @change="getList" size="18"/>
+				<van-switch v-model="searchForm.status" @change="getList" size="18"/>
 			</view>
 		</view>
 
@@ -35,12 +35,12 @@
 					<view class="item-header">
 						<view class="item-left">
 							<view class="document-icon">
-								<u-icon name="file-text" size="16" color="#ffffff"></u-icon>
+								<up-icon name="file-text" size="16" color="#ffffff"></up-icon>
 							</view>
 							<text class="item-id">{{ item.salesContractNo }}</text>
 						</view>
 					</view>
-					<u-divider></u-divider>
+					<up-divider></up-divider>
 					<view class="item-details">
 						<view class="detail-row">
 							<text class="detail-label">瀹㈡埛鍚嶇О</text>
@@ -82,7 +82,7 @@
 					
 					<!-- 鎿嶄綔鎸夐挳 -->
 					<view class="action-buttons">
-						<u-button
+						<van-button
 							type="primary"
 							size="small"
 							class="action-btn"
@@ -90,7 +90,7 @@
 							@click="openForm(item)"
 						>
 							鏂板鍥炴
-						</u-button>
+						</van-button>
 					</view>
 				</view>
 			</view>
@@ -98,7 +98,7 @@
 
 		<!-- 鏃犳暟鎹彁绀� -->
 		<view class="no-data" v-else>
-			<text>鏆傛棤鏁版嵁</text>
+			<text>鏆傛棤鍥炴鏁版嵁</text>
 		</view>
 	</view>
 </template>
diff --git a/src/pages/sales/salesAccount/detail.vue b/src/pages/sales/salesAccount/detail.vue
index 3991e5d..bca5e36 100644
--- a/src/pages/sales/salesAccount/detail.vue
+++ b/src/pages/sales/salesAccount/detail.vue
@@ -4,93 +4,80 @@
 		<PageHeader title="鍙拌处璇︽儏" @back="goBack" />
 
          <!-- 琛ㄥ崟鍖哄煙 -->
-		<u-form @submit="onSubmit" label-width="110" input-align="right" style="margin-top: 10px" error-message-align="right">
-			<u-form-item label="閿�鍞悎鍚屽彿" prop="salesContractNo" border-bottom>
-				<u-input v-model="form.salesContractNo" placeholder="鑷姩鐢熸垚" disabled />
-			</u-form-item>
-			<u-form-item
+		<van-form @submit="onSubmit" label-width="110px" input-align="right" style="margin-top: 10px" error-message-align="right" scroll-to-error scroll-to-error-position="center">
+			<van-field label="閿�鍞悎鍚屽彿" name="salesContractNo" borderBottom="true" v-model="form.salesContractNo" placeholder="鑷姩鐢熸垚" disabled>
+			</van-field>
+			<van-field
+				v-model="form.salesman"
+				is-link
+				readonly
+				name="salesman"
 				label="涓氬姟鍛�"
-				prop="salesman"
 				required
-				border-bottom
-			>
-				<u-input
-					v-model="form.salesman"
-					readonly
-					placeholder="鐐瑰嚮閫夋嫨涓氬姟鍛�"
-					@click="showPicker = true"
-				/>
-			</u-form-item>
-			<u-form-item label="瀹㈡埛鍚堝悓鍙�" prop="customerContractNo" required border-bottom>
-				<u-input
-					v-model="form.customerContractNo"
-					placeholder="璇疯緭鍏ュ鎴峰悎鍚屽彿"
-				/>
-			</u-form-item>
-			<u-form-item
+				placeholder="鐐瑰嚮閫夋嫨涓氬姟鍛�"
+				:rules="[{ required: true, message: '璇烽�夋嫨涓氬姟鍛�' }]"
+				@click="showPicker = true"
+			/>
+			<van-field label="瀹㈡埛鍚堝悓鍙�" name="customerContractNo" borderBottom="true"
+								 v-model="form.customerContractNo" required
+								 placeholder="璇疯緭鍏ュ鎴峰悎鍚屽彿" :rules="[{ required: true, message: '瀹㈡埛鍚堝悓鍙蜂笉鑳戒负绌�' }]">
+			</van-field>
+			<van-field
+				v-model="form.customerName"
+				is-link
+				readonly
+				required
+				name="customerName"
 				label="瀹㈡埛鍚嶇О"
-				prop="customerName"
+				placeholder="鐐瑰嚮閫夋嫨瀹㈡埛"
+				:rules="[{ required: true, message: '璇烽�夋嫨瀹㈡埛' }]"
+				@click="showCustomerPicker = true"
+			/>
+			<van-field label="椤圭洰鍚嶇О" name="projectName" borderBottom="true" v-model="form.projectName" placeholder="璇疯緭鍏ラ」鐩悕绉�" :rules="[{ required: true, message: '椤圭洰鍚嶇О涓嶈兘涓虹┖' }]" required>
+			</van-field>
+			<van-field
+				v-model="form.executionDate"
+				is-link
+				readonly
 				required
-				border-bottom
-			>
-				<u-input
-					v-model="form.customerName"
-					readonly
-					placeholder="鐐瑰嚮閫夋嫨瀹㈡埛"
-					@click="showCustomerPicker = true"
-				/>
-			</u-form-item>
-			<u-form-item label="椤圭洰鍚嶇О" prop="projectName" required border-bottom>
-				<u-input v-model="form.projectName" placeholder="璇疯緭鍏ラ」鐩悕绉�" />
-			</u-form-item>
-			<u-form-item
+				name="executionDate"
 				label="绛捐鏃ユ湡"
-				prop="executionDate"
-				required
-				border-bottom
-			>
-				<u-input
-					v-model="form.executionDate"
-					readonly
-					placeholder="鐐瑰嚮閫夋嫨鏃堕棿"
-					@click="showDatePicker = true"
-				/>
-			</u-form-item>
-			<u-popup v-model="showDatePicker" mode="bottom">
-				<u-datetime-picker
+				placeholder="鐐瑰嚮閫夋嫨鏃堕棿"
+				:rules="[{ required: true, message: '绛捐鏃ユ湡涓嶈兘涓虹┖' }]"
+				@click="showDatePicker = true"
+			/>
+			<van-popup v-model:show="showDatePicker" destroy-on-close position="bottom">
+				<van-date-picker
 					v-model="pickerDateValue"
 					@confirm="onDateConfirm"
 					@cancel="showDatePicker = false"
 				/>
-			</u-popup>
-			<u-form-item label="浠樻鏂瑰紡" prop="paymentMethod" border-bottom>
-				<u-input v-model="form.paymentMethod" placeholder="璇疯緭鍏ヤ粯娆炬柟寮�" />
-			</u-form-item>
-			<u-form-item label="褰曞叆浜�" prop="entryPersonName" border-bottom>
-				<u-input v-model="form.entryPersonName" placeholder="璇疯緭鍏�" disabled />
-			</u-form-item>
-			<u-form-item label="褰曞叆鏃ユ湡" prop="entryDate" border-bottom>
-				<u-input v-model="form.entryDate" placeholder="璇疯緭鍏�" disabled />
-			</u-form-item>
-			<u-popup v-model="showPicker" mode="bottom">
-				<u-picker
+			</van-popup>
+			<van-field label="浠樻鏂瑰紡" name="paymentMethod" borderBottom="true" v-model="form.paymentMethod" placeholder="璇疯緭鍏ヤ粯娆炬柟寮�">
+			</van-field>
+			<van-field label="褰曞叆浜�" name="entryPersonName" borderBottom="true" v-model="form.entryPersonName" placeholder="璇疯緭鍏�" disabled>
+			</van-field>
+			<van-field label="褰曞叆鏃ユ湡" name="entryDate" borderBottom="true" v-model="form.entryDate" placeholder="璇疯緭鍏�" disabled>
+			</van-field>
+			<van-popup v-model:show="showPicker" destroy-on-close position="bottom">
+				<van-picker
 					:columns="userList"
 					v-model="pickerValue"
 					@confirm="onConfirm"
 					@cancel="showPicker = false"
 				/>
-			</u-popup>
-			<u-popup v-model="showCustomerPicker" mode="bottom">
-				<u-picker
+			</van-popup>
+			<van-popup v-model:show="showCustomerPicker" destroy-on-close position="bottom">
+				<van-picker
 					:columns="customerOption"
 					v-model="pickerCustomerValue"
 					@confirm="onCustomerConfirm"
 					@cancel="showCustomerPicker = false"
 				/>
-			</u-popup>
+			</van-popup>
 			
 			<!-- 浜у搧澶х被閫夋嫨鍣� -->
-			<u-popup v-model="showCategoryPicker" mode="bottom">
+			<van-popup v-model:show="showCategoryPicker" destroy-on-close position="bottom">
 				<!-- 澶撮儴鎸夐挳鍖哄煙 -->
 				<view class="popup-header">
 					<view @click="showCategoryPicker = false" class="cancelButton">鍙栨秷</view>
@@ -104,204 +91,175 @@
 					check-strictly
 					@check-change="onCategoryConfirm"
 				/>
-			</u-popup>
+			</van-popup>
 			
 			<!-- 瑙勬牸鍨嬪彿閫夋嫨鍣� -->
-			<u-popup v-model="showSpecificationPicker" mode="bottom">
-				<u-picker
+			<van-popup v-model:show="showSpecificationPicker" destroy-on-close position="bottom">
+				<van-picker
 					:columns="modelOptions"
 					v-model="pickerSpecificationValue"
 					@confirm="onSpecificationConfirm"
 					@cancel="showSpecificationPicker = false"
 				/>
-			</u-popup>
+			</van-popup>
 			
 			<!-- 绋庣巼閫夋嫨鍣� -->
-			<u-popup v-model="showTaxRatePicker" mode="bottom">
-				<u-picker
+			<van-popup v-model:show="showTaxRatePicker" destroy-on-close position="bottom">
+				<van-picker
 					:columns="taxRateOptions"
 					v-model="pickerTaxRateValue"
 					@confirm="onTaxRateConfirm"
 					@cancel="showTaxRatePicker = false"
 				/>
-			</u-popup>
+			</van-popup>
 			
 			<!-- 鍙戠エ绫诲瀷閫夋嫨鍣� -->
-			<u-popup v-model="showInvoiceTypePicker" mode="bottom">
-				<u-picker
+			<van-popup v-model:show="showInvoiceTypePicker" destroy-on-close position="bottom">
+				<van-picker
 					:columns="invoiceTypeOptions"
 					v-model="pickerInvoiceTypeValue"
 					@confirm="onInvoiceTypeConfirm"
 					@cancel="showInvoiceTypePicker = false"
 				/>
-			</u-popup>
+			</van-popup>
 			<!-- 浜у搧淇℃伅 -->
 			<view class="product-section">
 				<view class="section-header">
 					<text class="section-title">浜у搧淇℃伅</text>
-					<u-button type="primary" size="small" @click="addProduct" class="add-btn" v-if="operationType !== 'view'">
-						<u-icon name="plus" size="14" />
-						鏂板
-					</u-button>
+					<van-button type="primary" size="small" @click="addProduct" class="add-btn" icon="plus"  v-if="operationType !== 'view'">鏂板</van-button>
 				</view>
 				<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" />
+							<van-icon name="description" color="#2979ff" size="15" />
 							<text class="product-productCategory">浜у搧 {{ idx + 1 }}</text>
 						</view>
 						<!-- 鎿嶄綔鎸夐挳 -->
-						<view class="product-actions" v-if="operationType !== 'view'">
-							<u-button type="error" size="mini" @click="removeProduct(idx)" class="del-btn">
-								<u-icon name="trash" size="12" />
-								鍒犻櫎
-							</u-button>
+						<view class="product-actions"  v-if="operationType !== 'view'">
+							<van-button type="danger" size="mini" @click="removeProduct(idx)" class="del-btn" icon="delete">鍒犻櫎</van-button>
 						</view>
 					</view>
 					
 					<!-- 浜у搧淇℃伅琛ㄥ崟 -->
 					<view class="product-form">
 						<!-- 浜у搧澶х被 -->
-						<u-form-item
+						<van-field
+							v-model="product.productCategory"
+							is-link
+							readonly
+							name="productCategory"
 							label="浜у搧澶х被"
-							prop="productCategory"
 							required
-							border-bottom
-						>
-							<u-input
-								v-model="product.productCategory"
-								readonly
-								placeholder="璇烽�夋嫨"
-								@click="openCategoryPicker(idx)"
-							/>
-						</u-form-item>
+							placeholder="璇烽�夋嫨"
+							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
+							@click="openCategoryPicker(idx)"
+						/>
 						
 						<!-- 瑙勬牸鍨嬪彿 -->
-						<u-form-item
+						<van-field
+							v-model="product.specificationModel"
+							is-link
+							readonly
+							name="specificationModel"
 							label="瑙勬牸鍨嬪彿"
-							prop="specificationModel"
 							required
-							border-bottom
-						>
-							<u-input
-								v-model="product.specificationModel"
-								readonly
-								placeholder="璇烽�夋嫨"
-								@click="openSpecificationPicker(idx)"
-							/>
-						</u-form-item>
+							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
+							placeholder="璇烽�夋嫨"
+							@click="openSpecificationPicker(idx)"
+						/>
 						
 						<!-- 鍗曚綅 -->
-						<u-form-item
+						<van-field
+							v-model="product.unit"
+							name="unit"
 							label="鍗曚綅"
-							prop="unit"
 							required
-							border-bottom
-						>
-							<u-input
-								v-model="product.unit"
-								placeholder="璇疯緭鍏�"
-							/>
-						</u-form-item>
+							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
+							placeholder="璇疯緭鍏�"
+						/>
 						
 						<!-- 绋庣巼 -->
-						<u-form-item
+						<van-field
+							v-model="product.taxRate"
+							is-link
+							readonly
+							name="taxRate"
 							label="绋庣巼(%)"
-							prop="taxRate"
 							required
-							border-bottom
-						>
-							<u-input
-								v-model="product.taxRate"
-								readonly
-								placeholder="璇烽�夋嫨"
-								@click="openTaxRatePicker(idx)"
-							/>
-						</u-form-item>
+							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
+							placeholder="璇烽�夋嫨"
+							@click="openTaxRatePicker(idx)"
+						/>
 						
 						<!-- 鍚◣鍗曚环 -->
-						<u-form-item
+						<van-field
+							v-model="product.taxInclusiveUnitPrice"
+							name="taxInclusiveUnitPrice"
 							label="鍚◣鍗曚环(鍏�)"
-							prop="taxInclusiveUnitPrice"
+							type="number"
 							required
-							border-bottom
-						>
-							<u-input
-								v-model="product.taxInclusiveUnitPrice"
-								type="number"
-								placeholder="璇疯緭鍏�"
-								@blur="formatTaxPrice(idx)"
-							/>
-						</u-form-item>
+							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
+							placeholder="璇疯緭鍏�"
+							@blur="formatTaxPrice(idx)"
+						/>
 						
 						<!-- 鏁伴噺 -->
-						<u-form-item
+						<van-field
+							v-model="product.quantity"
+							name="quantity"
 							label="鏁伴噺"
-							prop="quantity"
+							type="number"
+							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
 							required
-							border-bottom
-						>
-							<u-input
-								v-model="product.quantity"
-								type="number"
-								placeholder="璇疯緭鍏�"
-								@blur="formatAmount(idx)"
-							/>
-						</u-form-item>
+							placeholder="璇疯緭鍏�"
+							@blur="formatAmount(idx)"
+						/>
 						
 						<!-- 鍚◣鎬讳环 -->
-						<u-form-item
+						<van-field
+							v-model="product.taxInclusiveTotalPrice"
+							name="taxInclusiveTotalPrice"
 							label="鍚◣鎬讳环(鍏�)"
-							prop="taxInclusiveTotalPrice"
+							type="number"
+							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
 							required
-							border-bottom
-						>
-							<u-input
-								v-model="product.taxInclusiveTotalPrice"
-								type="number"
-								placeholder="璇疯緭鍏�"
-								@blur="formatTaxTotal(idx)"
-							/>
-						</u-form-item>
+							placeholder="璇疯緭鍏�"
+							@blur="formatTaxTotal(idx)"
+						/>
 						
 						<!-- 涓嶅惈绋庢�讳环 -->
-						<u-form-item
+						<van-field
+							v-model="product.taxExclusiveTotalPrice"
+							name="taxExclusiveTotalPrice"
 							label="涓嶅惈绋庢�讳环(鍏�)"
-							prop="taxExclusiveTotalPrice"
+							type="number"
 							required
-							border-bottom
-						>
-							<u-input
-								v-model="product.taxExclusiveTotalPrice"
-								type="number"
-								placeholder="璇疯緭鍏�"
-								@blur="formatNoTaxTotal(idx)"
-							/>
-						</u-form-item>
+							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
+							placeholder="璇疯緭鍏�"
+							@blur="formatNoTaxTotal(idx)"
+						/>
 						
 						<!-- 鍙戠エ绫诲瀷 -->
-						<u-form-item
+						<van-field
+							v-model="product.invoiceType"
+							is-link
+							readonly
+							name="invoiceType"
 							label="鍙戠エ绫诲瀷"
-							prop="invoiceType"
+							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
 							required
-							border-bottom
-						>
-							<u-input
-								v-model="product.invoiceType"
-								readonly
-								placeholder="璇烽�夋嫨"
-								@click="openInvoiceTypePicker(idx)"
-							/>
-						</u-form-item>
+							placeholder="璇烽�夋嫨"
+							@click="openInvoiceTypePicker(idx)"
+						/>
 					</view>
 				</view>
 			</view>
 			<view class="footer-btns" v-if="operationType !== 'view'">
-				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
-				<u-button class="save-btn" type="primary" @click="onSubmit">淇濆瓨</u-button>
+				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
+				<van-button class="save-btn" native-type="submit" form-type="submit">淇濆瓨</van-button>
 			</view>
-		</u-form>
+		</van-form>
   </view>
 </template>
 
diff --git a/src/pages_mine/pages/info/index.vue b/src/pages_mine/pages/info/index.vue
index dfdae6b..6fb2356 100644
--- a/src/pages_mine/pages/info/index.vue
+++ b/src/pages_mine/pages/info/index.vue
@@ -1,38 +1,14 @@
 <template>
   <view class="container">
     <view class="card">
-      <u-cell-group>
-        <u-cell title="鏄电О" :value="user.nickName">
-          <template #icon>
-            <u-icon name="account" size="18" />
-          </template>
-        </u-cell>
-        <u-cell title="鎵嬫満鍙风爜" :value="user.phonenumber">
-          <template #icon>
-            <u-icon name="phone" size="18" />
-          </template>
-        </u-cell>
-        <u-cell title="閭" :value="user.email">
-          <template #icon>
-            <u-icon name="email" size="18" />
-          </template>
-        </u-cell>
-        <u-cell title="宀椾綅" :value="postGroup">
-          <template #icon>
-            <u-icon name="star" size="18" />
-          </template>
-        </u-cell>
-        <u-cell title="瑙掕壊" :value="roleGroup">
-          <template #icon>
-            <u-icon name="account-circle" size="18" />
-          </template>
-        </u-cell>
-        <u-cell title="鍒涘缓鏃ユ湡" :value="user.createTime">
-          <template #icon>
-            <u-icon name="calendar" size="18" />
-          </template>
-        </u-cell>
-      </u-cell-group>
+      <van-cell-group>
+        <van-cell icon="user" title="鏄电О" :value="user.nickName" />
+        <van-cell icon="phone" title="鎵嬫満鍙风爜" :value="user.phonenumber" />
+        <van-cell icon="invitation" title="閭" :value="user.email" />
+        <van-cell icon="medal" title="宀椾綅" :value="postGroup" />
+        <van-cell icon="friends" title="瑙掕壊" :value="roleGroup" />
+        <van-cell icon="notes" title="鍒涘缓鏃ユ湡" :value="user.createTime" />
+      </van-cell-group>
     </view>
 
     <!-- <u-button @click="register()">缁戝畾寰俊</u-button> -->
@@ -78,29 +54,31 @@
 
 .container {
   min-height: 100vh;
-  padding: 0;
+  padding: 0; /* 24rpx -> 0.75rem */
   box-sizing: border-box;
 }
 
 /* 鍒楄〃鍗$墖瀹瑰櫒 */
 .card {
   background-color: #ffffff;
-  box-shadow: 0 0.375rem 1rem rgba(0, 0, 0, 0.06);
+  box-shadow: 0 0.375rem 1rem rgba(0, 0, 0, 0.06); /* 0 12rpx 32rpx -> 0 0.375rem 1rem */
   overflow: hidden;
 }
 
-/* 閫傞厤 uview-plus Cell */
-:deep(.u-cell) {
-  min-height: 3rem;
+/* 閫傞厤 Vant Cell */
+:deep(.van-cell) {
+  min-height: 3rem; /* 92rpx -> 2.875rem */
 	align-items: center;
 }
 
-:deep(.u-cell__title) {
+:deep(.van-cell__title) {
   font-weight: 500;
-  color: #1f2937;
+  color: #1f2937; /* 娣辩伆 */
 }
 
-:deep(.u-cell__value) {
-  color: #6b7280;
+:deep(.van-cell__value) {
+  color: #6b7280; /* 娆¤鐏� */
 }
+
+/* 绉婚櫎涓嶅啀浣跨敤鐨� .cell-icon 鏍峰紡 */
 </style>

--
Gitblit v1.9.3