From 5c48ef2b8267c38bae717202615e1618074ee31c Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 29 八月 2025 15:25:05 +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/api/cooperativeOffice/clientVisit.js                            |   45 
 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                            |   99 +
 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                  |  339 +++++
 src/pages/equipmentManagement/ledger/detail.vue                     |  202 +-
 src/pages/cooperativeOffice/clientVisit/index.vue                   |  406 +++++
 src/pages/procurementManagement/procurementInvoiceLedger/detail.vue |   79 
 33 files changed, 2,536 insertions(+), 1,295 deletions(-)

diff --git a/src/api/cooperativeOffice/clientVisit.js b/src/api/cooperativeOffice/clientVisit.js
new file mode 100644
index 0000000..35790e0
--- /dev/null
+++ b/src/api/cooperativeOffice/clientVisit.js
@@ -0,0 +1,45 @@
+// 瀹㈡埛鎷滆鐩稿叧鎺ュ彛
+import request from '@/utils/request'
+
+// 瀹㈡埛鎷滆绛惧埌
+export function clientVisitSignIn(data) {
+    return request({
+        url: '/customerVisits/add',
+        method: 'post',
+        data: data
+    })
+}
+
+// 鑾峰彇鎷滆璁板綍鍒楄〃
+export function getVisitRecords(query) {
+    return request({
+        url: '/customerVisits/listPage',
+        method: 'get',
+        params: query
+    })
+}
+
+// 鑾峰彇鎷滆璁板綍璇︽儏
+export function getVisitDetail(id) {
+    return request({
+        url: `/cooperative/clientVisit/detail/${id}`,
+        method: 'get'
+    })
+}
+
+// 鏇存柊鎷滆璁板綍
+export function updateVisitRecord(data) {
+    return request({
+        url: '/cooperative/clientVisit/update',
+        method: 'put',
+        data: data
+    })
+}
+
+// 鍒犻櫎鎷滆璁板綍
+export function deleteVisitRecord(id) {
+    return request({
+        url: `/cooperative/clientVisit/delete/${id}`,
+        method: 'delete'
+    })
+}
\ No newline at end of file
diff --git a/src/config.js b/src/config.js
index 65baaa4..47daed0 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 c866fb5..dfd7393 100644
--- a/src/main.js
+++ b/src/main.js
@@ -2,8 +2,9 @@
 import plugins from './plugins'
 import store from './store'
 import uviewPlus from 'uview-plus'
-import Vant from 'vant';
-import 'vant/lib/index.css';
+// 绉婚櫎浠ヤ笅涓よ Vant 鐩稿叧瀵煎叆
+// import Vant from 'vant';
+// import 'vant/lib/index.css';
 import { setupGlobalComponents } from './components'
 
 
@@ -23,7 +24,8 @@
   app.use(store)
   app.use(uviewPlus)
   app.use(plugins)
-  app.use(Vant)
+  // 绉婚櫎浠ヤ笅琛� Vant 娉ㄥ唽
+  // app.use(Vant)
   
   // 娉ㄥ唽鍏ㄥ眬缁勪欢
   setupGlobalComponents(app)
diff --git a/src/pages.json b/src/pages.json
index 66d15c2..700c2c3 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -294,6 +294,13 @@
       }
     },
     {
+      "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
new file mode 100644
index 0000000..e22638a
--- /dev/null
+++ b/src/pages/cooperativeOffice/clientVisit/detail.vue
@@ -0,0 +1,339 @@
+<template>
+  <view class="client-visit">
+    <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
+    <PageHeader title="瀹㈡埛鎷滆鐧昏" @back="goBack" />
+    
+    <!-- 绛惧埌琛ㄥ崟 -->
+    <van-form @submit="handleSignIn" ref="formRef" label-width="110px" 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>
+      
+      <!-- 鎷滆淇℃伅 -->
+      <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>
+      
+      <!-- 澶囨敞淇℃伅 -->
+      <van-cell-group title="澶囨敞淇℃伅" inset>
+        <van-field
+          v-model="form.remark"
+          label="澶囨敞"
+          name="remark"
+          type="textarea"
+          placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
+          rows="3"
+          autosize
+          clearable
+        />
+      </van-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>
+      </view>
+    </van-form>
+    
+    <!-- 鏃堕棿閫夋嫨鍣� -->
+    <van-popup v-model:show="showTime" position="bottom">
+      <van-date-picker
+        v-model="currentTime"
+        type="datetime"
+        @confirm="onTimeConfirm"
+        @cancel="showTime = false"
+        title="閫夋嫨鎷滆鏃堕棿"
+      />
+    </van-popup>
+  </view>
+</template>
+
+<script setup>
+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()
+
+// 琛ㄥ崟鏁版嵁
+const form = ref({
+  customerName: '',
+  contact: '',
+  contactPhone: '',
+  visitingPeople: '',
+  purposeVisit: '',
+  purposeDate: '',
+  visitAddress: '',
+  latitude: '',
+  longitude: '',
+  locationAddress: '',
+  remark: ''
+})
+
+// 椤甸潰鐘舵��
+const loading = ref(false)
+const formRef = ref(null)
+
+// 鏃堕棿鐩稿叧
+const currentTime = ref(new Date())
+const showTime = ref(false)
+
+// 杩斿洖涓婁竴椤�
+const goBack = () => {
+  uni.navigateBack()
+}
+
+// 鏄剧ず鏃堕棿閫夋嫨鍣�
+const showTimePicker = () => {
+  showTime.value = true
+}
+
+// 纭鏃堕棿閫夋嫨
+const onTimeConfirm = ({ selectedValues }) => {
+  form.value.purposeDate = selectedValues.join('-')
+  currentTime.value = selectedValues.join('-')
+  showTime.value = false
+}
+
+// 鑾峰彇褰撳墠浣嶇疆
+const getCurrentLocation = () => {
+  uni.showLoading({ title: '鑾峰彇浣嶇疆涓�...' })
+  
+  uni.getLocation({
+    type: 'gcj02',
+    success: (res) => {
+      form.value.latitude = res.latitude
+      form.value.longitude = res.longitude
+      
+      // 浣跨敤閫嗗湴鐞嗙紪鐮佽幏鍙栧湴鍧�淇℃伅
+      uni.request({
+        url: `https://restapi.amap.com/v3/geocode/regeo?key=c120a5dc69a9f61839f7763e6057005f&location=${res.longitude},${res.latitude}&radius=1000&extensions=all`,
+        success: (geoRes) => {
+          uni.hideLoading()
+          if (geoRes.data.status === '1' && geoRes.data.regeocode) {
+            const regeocode = geoRes.data.regeocode
+            const address = regeocode.formatted_address
+            
+            // 浼樺厛鏄剧ず璇︾粏鍦板潃
+            if (address) {
+              form.value.visitAddress = address
+              showToast('浣嶇疆鑾峰彇鎴愬姛')
+            } else {
+              // 濡傛灉娌℃湁璇︾粏鍦板潃锛屽皾璇曠粍鍚堝湴鍧�淇℃伅
+              const addressComponent = regeocode.addressComponent
+              const combinedAddress = `${addressComponent.province}${addressComponent.city}${addressComponent.district}${addressComponent.township}`
+              form.value.visitAddress = combinedAddress
+              showToast('浣嶇疆鑾峰彇鎴愬姛')
+            }
+          } else {
+            // API璋冪敤鎴愬姛浣嗘病鏈夎繑鍥炲湴鍧�淇℃伅
+            const fallbackAddress = `浣嶇疆: ${res.latitude.toFixed(4)}, ${res.longitude.toFixed(4)}`
+            form.value.visitAddress = fallbackAddress
+            showToast('鑾峰彇鍒颁綅缃紝浣嗗湴鍧�瑙f瀽澶辫触')
+          }
+        },
+        fail: (err) => {
+          uni.hideLoading()
+          console.error('閫嗗湴鐞嗙紪鐮佸け璐�:', err)
+          
+          // 閫嗗湴鐞嗙紪鐮佸け璐ユ椂锛屾樉绀虹畝鍖栫殑浣嶇疆淇℃伅
+          const fallbackAddress = `浣嶇疆: ${res.latitude.toFixed(4)}, ${res.longitude.toFixed(4)}`
+          form.value.visitAddress = fallbackAddress
+          showToast('浣嶇疆鑾峰彇鎴愬姛锛屼絾鍦板潃瑙f瀽澶辫触')
+        }
+      })
+    },
+    fail: (err) => {
+      uni.hideLoading()
+      showToast('鑾峰彇浣嶇疆澶辫触锛岃妫�鏌ュ畾浣嶆潈闄�')
+      console.error('鑾峰彇浣嶇疆澶辫触:', err)
+      
+      // 澶辫触鏃舵樉绀洪敊璇俊鎭�
+      form.value.visitAddress = '浣嶇疆鑾峰彇澶辫触'
+    }
+  })
+}
+
+// 鎻愪氦绛惧埌
+const handleSignIn = async () => {
+    console.log('form.value----', form.value);
+    
+  if (!form.value.customerName) {
+    showToast('璇疯緭鍏ュ鎴峰悕绉�')
+    return
+  }
+  
+  if (!form.value.purposeVisit) {
+    showToast('璇疯緭鍏ユ嫓璁跨洰鐨�')
+    return
+  }
+  
+  if (!form.value.purposeDate) {
+    showToast('璇烽�夋嫨鎷滆鏃堕棿')
+    return
+  }
+  if (!form.value.visitAddress) {
+    showToast('璇疯幏鍙栧綋鍓嶄綅缃�')
+    return
+  }
+  
+  try {
+    loading.value = true
+
+    // 浣跨敤瀹夊叏娴呮嫹璐濓紝閬垮厤瀵硅薄灞曞紑鍦ㄦ煇浜涜繍琛屾椂鎶涢敊
+    const source = (form.value && typeof form.value === 'object') ? form.value : {}
+    const submitData = {}
+    Object.keys(source).forEach((k) => {
+      submitData[k] = source[k]
+    })
+
+    console.log('鎻愪氦鏁版嵁:', submitData)
+    
+    const { code } = await clientVisitSignIn(submitData)
+    console.log('code----', code);
+    
+    if (code === 200) {
+      showToast('绛惧埌鎴愬姛')
+      setTimeout(() => {
+        uni.navigateBack()
+      }, 500)
+    } else {
+      loading.value = false
+      showToast('绛惧埌澶辫触锛岃閲嶈瘯')
+    }
+  } catch (e) {
+    loading.value = false
+    showToast('绛惧埌澶辫触锛岃妫�鏌ョ綉缁滆繛鎺�')
+    console.error('绛惧埌澶辫触:', e)
+  }
+}
+
+// 鍒濆鍖栭〉闈㈡暟鎹�
+const initPageData = () => {
+  // 璁剧疆榛樿鎷滆鏃堕棿涓哄綋鍓嶆椂闂�
+  form.value.purposeDate = dayjs().format('YYYY-MM-DD HH:mm:ss')
+  currentTime.value = new Date()
+  
+  // 璁剧疆鎷滆浜轰负褰撳墠鐧诲綍鐢ㄦ埛鐨勬樀绉�
+  form.value.visitingPeople = userStore.nickName || ''
+}
+
+onMounted(() => {
+  initPageData()
+})
+</script>
+
+<style scoped lang="scss">
+.client-visit {
+  min-height: 100vh;
+  background: #f8f9fa;
+  padding-bottom: 5rem;
+}
+
+.footer-btns {
+  position: fixed;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background: #fff;
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+  padding: 0.75rem 0;
+  box-shadow: 0 -0.125rem 0.5rem rgba(0,0,0,0.05);
+  z-index: 1000;
+}
+
+.cancel-btn {
+  font-weight: 400;
+  font-size: 1rem;
+  color: #666;
+  background: #f5f5f5;
+  border: 1px solid #ddd;
+  width: 45%;
+  height: 2.5rem;
+  border-radius: 2.5rem 2.5rem 2.5rem 2.5rem;
+}
+
+.sign-btn {
+  font-weight: 500;
+  font-size: 1rem;
+  color: #fff;
+  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+  border: none;
+  width: 45%;
+  height: 2.5rem;
+  border-radius: 2.5rem 2.5rem 2.5rem 2.5rem;
+}
+
+.location-icon {
+  color: #1989fa;
+  font-size: 1.2rem;
+}
+</style>
\ No newline at end of file
diff --git a/src/pages/cooperativeOffice/clientVisit/index.vue b/src/pages/cooperativeOffice/clientVisit/index.vue
index 6e22066..afcb5d6 100644
--- a/src/pages/cooperativeOffice/clientVisit/index.vue
+++ b/src/pages/cooperativeOffice/clientVisit/index.vue
@@ -1,59 +1,389 @@
-// 瀹㈡埛鎷滆
 <template>
-  <view>
-    <view class="page-header">
-      <view class="header-left">
-        <up-icon name="arrow-left" size="20" color="#333" @click="goBack"></up-icon>
+  <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="header-center">
-        <text class="page-title">瀹㈡埛鎷滆</text>
+    </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>
+    </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>
-export default {
-  data() {
-    return {
-      title: '瀹㈡埛鎷滆'
-    }
-  },
-  methods: {
-    goBack() {
-      uni.navigateBack({
-        delta: 1
-      })
-    }
-  }
+
+<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('鍒犻櫎澶辫触')
+      }
+    }
+  })
+}
+
+onMounted(() => {
+  getList()
+})
+
+onShow(() => {
+  getList()
+})
 </script>
-<style>
-.page-header {
+
+<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;
-  padding: 10px 20px;
-  background-color: #f5f5f5;
-  position: relative;
 }
-.header-left {
+
+.item-left {
   display: flex;
   align-items: center;
+  gap: 8px;
 }
-.header-center {
-  flex: 1;
+
+.document-icon {
+  width: 24px;
+  height: 24px;
+  background: #667eea;
+  border-radius: 4px;
   display: flex;
+  align-items: center;
   justify-content: center;
-  align-items: center;
-  position: absolute;
-  left: 0;
-  right: 0;
-  pointer-events: none;
 }
-.page-title {
-  font-size: 18px;
-  font-weight: bold;
-  pointer-events: auto;
+
+.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;
+  }
+}
+
+.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%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  box-shadow: 0 4px 16px rgba(102, 126, 234, 0.3);
+  z-index: 1000;
 }
 </style>
 
diff --git a/src/pages/cooperativeOffice/collaborativeApproval/approve.vue b/src/pages/cooperativeOffice/collaborativeApproval/approve.vue
index 6011e7b..ced62d5 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/approve.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/approve.vue
@@ -516,4 +516,23 @@
   display: flex;
   justify-content: flex-end;
 }
-</style>
\ No newline at end of file
+</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
diff --git a/src/pages/cooperativeOffice/collaborativeApproval/contactSelect.vue b/src/pages/cooperativeOffice/collaborativeApproval/contactSelect.vue
index 9259068..88282db 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>
-        <van-icon name="cross" size="16" color="#999" @click="clearSelected" />
+        <u-icon name="close" size="16" color="#999" @click="clearSelected" />
       </view>
     </view>
 
@@ -388,4 +388,55 @@
     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 f8ecb68..6fa0c13 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/detail.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/detail.vue
@@ -4,73 +4,61 @@
 
     <!-- 琛ㄥ崟鍖哄煙 -->
     <view class="form-section">
-      <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
+      <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
               :columns="productOptions"
-              :model-value="pickerValue"
+              v-model="pickerValue"
               @confirm="onConfirm"
               @cancel="showPicker = false"
             />
-          </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>
+          </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>
     </view>
     <!-- 瀹℃牳娴佺▼鍖哄煙 -->
     <view class="approval-process">
@@ -98,17 +86,13 @@
             </view>
             <view v-else class="add-approver-btn" @click="addApprover(stepIndex)">
               <view class="add-circle">+</view>
-              <text class="add-label">閫夋嫨瀹℃壒浜�</text>
+              <text class="add-text">娣诲姞瀹℃壒浜�</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>
 
-      <view class="add-step-btn">
-				<van-button icon="plus" plain type="primary" style="width: 100%" @click="addApprovalStep">鏂板鑺傜偣</van-button>
-      </view>
+      <u-button icon="plus" plain type="primary" style="width: 100%" @click="addApprovalStep">鏂板鑺傜偣</u-button>
     </view>
 
     <!-- 搴曢儴鎸夐挳 -->
diff --git a/src/pages/cooperativeOffice/collaborativeApproval/index.vue b/src/pages/cooperativeOffice/collaborativeApproval/index.vue
index 708be76..180b802 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/index.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/index.vue
@@ -31,8 +31,27 @@
 							</view>
 							<text class="item-id">{{ item.approveId }}</text>
 						</view>
-						<view class="item-tag">
-							<van-tag :type="getTagClass(item.approveStatus)" size="medium">{{ formatReceiptType(item.approveStatus) }}</van-tag>
+						<!-- 瀹℃壒鐘舵�佹爣绛� -->
+						<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>
 					</view>
 					<up-divider></up-divider>
@@ -98,7 +117,6 @@
 		<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>
@@ -460,8 +478,5 @@
 	}
 	.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 97d76aa..9757730 100644
--- a/src/pages/equipmentManagement/ledger/detail.vue
+++ b/src/pages/equipmentManagement/ledger/detail.vue
@@ -1,128 +1,132 @@
 <template>
-	<view class="ledger-detail">
+	<view class="equipment-detail">
 		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-		<PageHeader :title="operationType === 'edit' ? '缂栬緫璁惧鍙拌处' : '鏂板璁惧鍙拌处'" @back="goBack" />
+		<PageHeader title="璁惧鍙拌处璇︽儏" @back="goBack" />
 		
 		<!-- 琛ㄥ崟鍐呭 -->
-		<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-form @submit="sendForm" ref="formRef" label-width="110" input-align="right" error-message-align="right">
 			<!-- 鍩烘湰淇℃伅 -->
-			<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>
+			<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>
 			
 			<!-- 鎻愪氦鎸夐挳 -->
 			<view class="footer-btns">
-				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
-				<van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
+				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
+				<u-button class="save-btn" type="primary" @click="sendForm" :loading="loading">淇濆瓨</u-button>
 			</view>
-		</van-form>
+		</u-form>
 
 		<!-- 绋庣巼閫夋嫨鍣� -->
-		<van-popup v-model:show="showTaxRate" position="bottom">
-			<van-picker
-				:model-value="taxRatePickerValue"
+		<u-popup v-model="showTaxRate" mode="bottom">
+			<u-picker
+				v-model="taxRatePickerValue"
 				:columns="taxRateOptions"
 				@confirm="onTaxRateConfirm"
 				@cancel="showTaxRate = false"
 			/>
-		</van-popup>
+		</u-popup>
 
 		<!-- 鏃ユ湡閫夋嫨鍣� -->
-		<van-popup v-model:show="showDate" position="bottom">
-			<van-date-picker
+		<u-popup v-model="showDate" mode="bottom">
+			<u-datetime-picker
 				v-model="currentDate"
 				title="閫夋嫨鏃ユ湡"
 				@confirm="onDateConfirm"
 				@cancel="showDate = false"
 			/>
-		</van-popup>
+		</u-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 0114c15..59efa72 100644
--- a/src/pages/equipmentManagement/ledger/index.vue
+++ b/src/pages/equipmentManagement/ledger/index.vue
@@ -78,25 +78,25 @@
             </view>
           </view>
           
-          <!-- 鎸夐挳鍖哄煙锛屽弬鑰� invoiceLedger 鐨勬牱寮� -->
+          <!-- 鎸夐挳鍖哄煙 - 鏇挎崲涓� uview-plus 鎸夐挳 -->
           <view class="action-buttons">
-            <van-button
+            <u-button
               type="primary"
               size="small"
               class="action-btn"
               @click="edit(item.id)"
             >
               缂栬緫
-            </van-button>
-            <van-button
-              type="danger"
+            </u-button>
+            <u-button
+              type="error"
               size="small"
               plain
               class="action-btn"
               @click="deleteRow(item.id)"
             >
               鍒犻櫎
-            </van-button>
+            </u-button>
           </view>
         </view>
       </view>
@@ -119,7 +119,16 @@
 import PageHeader from '@/components/PageHeader.vue'
 import { getLedgerPage, delLedger } from '@/api/equipmentManagement/ledger'
 import useUserStore from "@/store/modules/user"
-import { showToast } from 'vant';
+// 鏇挎崲 Vant 鐨� toast
+// import { showToast } from 'vant';
+
+// 鏇挎崲 toast 鏂规硶
+const showToast = (message) => {
+  uni.showToast({
+    title: message,
+    icon: 'none'
+  })
+}
 
 const userStore = useUserStore()
 
@@ -330,7 +339,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 d48202d..e9a9dfb 100644
--- a/src/pages/equipmentManagement/repair/add.vue
+++ b/src/pages/equipmentManagement/repair/add.vue
@@ -4,88 +4,83 @@
 		<PageHeader :title="operationType === 'edit' ? '缂栬緫鎶ヤ慨' : '鏂板鎶ヤ慨'" @back="goBack" />
 		
 		<!-- 琛ㄥ崟鍐呭 -->
-		<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-form @submit="sendForm" ref="formRef" label-width="110" input-align="right" error-message-align="right">
 			<!-- 鍩烘湰淇℃伅 -->
-			<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>
+			<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>
 			
 			<!-- 鎻愪氦鎸夐挳 -->
 			<view class="footer-btns">
-				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
-				<van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
+				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
+				<u-button class="save-btn" type="primary" @click="sendForm" :loading="loading">淇濆瓨</u-button>
 			</view>
-		</van-form>
+		</u-form>
 
 		<!-- 璁惧閫夋嫨鍣� -->
-		<van-popup v-model:show="showDevice" position="bottom">
-			<van-picker
-				:model-value="devicePickerValue"
+		<u-popup v-model="showDevice" mode="bottom">
+			<u-picker
+				v-model="devicePickerValue"
 				:columns="deviceColumns"
 				@confirm="onDeviceConfirm"
 				@cancel="showDevice = false"
 			/>
-		</van-popup>
+		</u-popup>
 
 		<!-- 鏃ユ湡閫夋嫨鍣� -->
-		<van-popup v-model:show="showDate" position="bottom">
-			<van-date-picker
+		<u-popup v-model="showDate" mode="bottom">
+			<u-datetime-picker
 				v-model="currentDate"
 				title="閫夋嫨鏃ユ湡"
 				@confirm="onDateConfirm"
 				@cancel="showDate = false"
 			/>
-		</van-popup>
+		</u-popup>
 	</view>
 </template>
 
@@ -96,7 +91,16 @@
 import { getDeviceLedger } from '@/api/equipmentManagement/ledger';
 import { addRepair, editRepair, getRepairById } from '@/api/equipmentManagement/repair';
 import dayjs from "dayjs";
-import { showToast } from 'vant';
+// 鏇挎崲 Vant 鐨� toast
+// import { showToast } from 'vant';
+
+// 鏇挎崲 toast 鏂规硶
+const showToast = (message) => {
+  uni.showToast({
+    title: message,
+    icon: 'none'
+  })
+}
 
 defineOptions({
 	name: "璁惧鎶ヤ慨琛ㄥ崟",
diff --git a/src/pages/equipmentManagement/repair/index.vue b/src/pages/equipmentManagement/repair/index.vue
index 0662172..d4ce7be 100644
--- a/src/pages/equipmentManagement/repair/index.vue
+++ b/src/pages/equipmentManagement/repair/index.vue
@@ -33,8 +33,38 @@
               <text class="item-id">璁惧鍚嶇О锛歿{ item.deviceName }}</text>
             </view>
             <view class="status-tag">
-              <van-tag v-if="item.status === 1" type="success">瀹岀粨</van-tag>
-              <van-tag v-if="item.status === 0" type="danger">寰呯淮淇�</van-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>
             </view>
           </view>
           <up-divider></up-divider>
@@ -108,11 +138,9 @@
     </view>
     
     <!-- 娴姩姘旀场鎸夐挳 -->
-    <van-floating-bubble
-      axis="xy"
-      icon="plus"
-      @click="addRepair"
-    />
+    <view class="fab-button" @click="addRepair">
+			<up-icon name="plus" size="24" color="#ffffff"></up-icon>
+		</view>
   </view>
 </template>
 
@@ -122,7 +150,16 @@
 import PageHeader from '@/components/PageHeader.vue'
 import { getRepairPage, delRepair } from '@/api/equipmentManagement/repair'
 import useUserStore from "@/store/modules/user"
-import { showToast } from 'vant';
+// 鏇挎崲 Vant 鐨� toast
+// import { showToast } from 'vant';
+
+// 鏇挎崲 toast 鏂规硶
+const showToast = (message) => {
+  uni.showToast({
+    title: message,
+    icon: 'none'
+  })
+}
 
 const userStore = useUserStore()
 
diff --git a/src/pages/equipmentManagement/repair/maintain.vue b/src/pages/equipmentManagement/repair/maintain.vue
index 64d08cb..9900220 100644
--- a/src/pages/equipmentManagement/repair/maintain.vue
+++ b/src/pages/equipmentManagement/repair/maintain.vue
@@ -1,60 +1,55 @@
 <template>
 	<view class="repair-maintain">
 		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-		<PageHeader title="鏂板缁翠慨" @back="goBack" />
+		<PageHeader title="璁惧缁翠慨" @back="goBack" />
 		
 		<!-- 琛ㄥ崟鍐呭 -->
-		<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>
+		<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>
 			
 			<!-- 鎻愪氦鎸夐挳 -->
 			<view class="footer-btns">
-				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
-				<van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
+				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
+				<u-button class="save-btn" type="primary" @click="sendForm" :loading="loading">淇濆瓨</u-button>
 			</view>
-		</van-form>
+		</u-form>
 
 		<!-- 鏃ユ湡閫夋嫨鍣� -->
-		<van-popup v-model:show="showDate" position="bottom">
-			<van-date-picker
+		<u-popup v-model="showDate" mode="bottom">
+			<u-datetime-picker
 				v-model="currentDate"
 				title="閫夋嫨鏃ユ湡"
 				@confirm="onDateConfirm"
 				@cancel="showDate = false"
 			/>
-		</van-popup>
+		</u-popup>
 	</view>
 </template>
 
@@ -65,7 +60,16 @@
 import { addMaintain } from '@/api/equipmentManagement/repair';
 import useUserStore from "@/store/modules/user";
 import dayjs from "dayjs";
-import { showToast } from 'vant';
+// 鏇挎崲 Vant 鐨� toast
+// import { showToast } from 'vant';
+
+// 鏇挎崲 toast 鏂规硶
+const showToast = (message) => {
+  uni.showToast({
+    title: message,
+    icon: 'none'
+  })
+}
 
 defineOptions({
 	name: "璁惧缁翠慨琛ㄥ崟",
diff --git a/src/pages/equipmentManagement/upkeep/add.vue b/src/pages/equipmentManagement/upkeep/add.vue
index 82892ad..fc6c5f7 100644
--- a/src/pages/equipmentManagement/upkeep/add.vue
+++ b/src/pages/equipmentManagement/upkeep/add.vue
@@ -1,75 +1,85 @@
 <template>
 	<view class="upkeep-add">
 		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-		<PageHeader :title="operationType === 'edit' ? '缂栬緫淇濆吇璁″垝' : '鏂板淇濆吇璁″垝'" @back="goBack" />
+		<PageHeader title="鏂板淇濆吇" @back="goBack" />
 		
 		<!-- 琛ㄥ崟鍐呭 -->
-		<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-form @submit="sendForm" ref="formRef" label-width="110" input-align="right" error-message-align="right">
 			<!-- 鍩烘湰淇℃伅 -->
-			<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>
+			<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>
 			
 			<!-- 鎻愪氦鎸夐挳 -->
 			<view class="footer-btns">
-				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
-				<van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
+				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
+				<u-button class="save-btn" type="primary" @click="sendForm" :loading="loading">淇濆瓨</u-button>
 			</view>
-		</van-form>
+		</u-form>
 
 		<!-- 璁惧閫夋嫨鍣� -->
-		<van-popup v-model:show="showDevice" position="bottom">
-			<van-picker
-				:model-value="devicePickerValue"
+		<u-popup v-model="showDevice" mode="bottom">
+			<u-picker
+				v-model="devicePickerValue"
 				:columns="deviceColumns"
 				@confirm="onDeviceConfirm"
 				@cancel="showDevice = false"
 			/>
-		</van-popup>
+		</u-popup>
 
 		<!-- 鏃ユ湡閫夋嫨鍣� -->
-		<van-popup v-model:show="showDate" position="bottom">
-			<van-date-picker
+		<u-popup v-model="showDate" mode="bottom">
+			<u-datetime-picker
 				v-model="currentDate"
 				title="閫夋嫨鏃ユ湡"
 				@confirm="onDateConfirm"
 				@cancel="showDate = false"
 			/>
-		</van-popup>
+		</u-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 9ae34cd..028f542 100644
--- a/src/pages/equipmentManagement/upkeep/index.vue
+++ b/src/pages/equipmentManagement/upkeep/index.vue
@@ -33,8 +33,46 @@
               <text class="item-id">璁惧鍚嶇О锛歿{ item.deviceName }}</text>
             </view>
             <view class="status-tag">
-              <van-tag v-if="item.status === 1" type="success">瀹岀粨</van-tag>
-              <van-tag v-if="item.status === 0" type="danger">寰呬繚鍏�</van-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>
             </view>
           </view>
           <up-divider></up-divider>
@@ -114,13 +152,10 @@
     <view v-else class="no-data">
       <text>鏆傛棤璁惧淇濆吇鏁版嵁</text>
     </view>
-    
-    <!-- 娴姩姘旀场鎸夐挳 -->
-    <van-floating-bubble
-      axis="xy"
-      icon="plus"
-      @click="addPlan"
-    />
+
+    <view class="fab-button" @click="addPlan">
+			<up-icon name="plus" size="24" color="#ffffff"></up-icon>
+		</view>
   </view>
 </template>
 
@@ -130,7 +165,15 @@
 import PageHeader from '@/components/PageHeader.vue'
 import { getUpkeepPage, delUpkeep } from '@/api/equipmentManagement/upkeep'
 import useUserStore from "@/store/modules/user"
-import { showToast } from 'vant';
+// 鏇挎崲 Vant 鐨� toast
+// import { showToast } from 'vant';
+// 鏇挎崲 toast 鏂规硶
+const showToast = (message) => {
+  uni.showToast({
+    title: message,
+    icon: 'none'
+  })
+}
 import dayjs from "dayjs"
 
 const userStore = useUserStore()
diff --git a/src/pages/equipmentManagement/upkeep/maintain.vue b/src/pages/equipmentManagement/upkeep/maintain.vue
index c70ec14..28b7186 100644
--- a/src/pages/equipmentManagement/upkeep/maintain.vue
+++ b/src/pages/equipmentManagement/upkeep/maintain.vue
@@ -4,65 +4,62 @@
 		<PageHeader title="鏂板淇濆吇" @back="goBack" />
 		
 		<!-- 琛ㄥ崟鍐呭 -->
-		<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-form @submit="sendForm" ref="formRef" label-width="110" input-align="right" error-message-align="right">
 			<!-- 鍩烘湰淇℃伅 -->
-			<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>
+			<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>
 			
 			<!-- 鎻愪氦鎸夐挳 -->
 			<view class="footer-btns">
-				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
-				<van-button class="save-btn" native-type="submit" form-type="submit" :loading="loading">淇濆瓨</van-button>
+				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
+				<u-button class="save-btn" type="primary" @click="sendForm" :loading="loading">淇濆瓨</u-button>
 			</view>
-		</van-form>
+		</u-form>
 
 		<!-- 鏃ユ湡閫夋嫨鍣� -->
-		<van-popup v-model:show="showDate" position="bottom">
-			<van-date-picker
+		<u-popup v-model="showDate" mode="bottom">
+			<u-datetime-picker
 				v-model="currentDate"
 				title="閫夋嫨鏃ユ湡"
 				@confirm="onDateConfirm"
 				@cancel="showDate = false"
 			/>
-		</van-popup>
+		</u-popup>
 
 		<!-- 淇濆吇缁撴灉閫夋嫨鍣� -->
-		<van-popup v-model:show="showResult" position="bottom">
-			<van-picker
-				:model-value="resultPickerValue"
+		<u-popup v-model="showResult" mode="bottom">
+			<u-picker
+				v-model="resultPickerValue"
 				:columns="resultColumns"
 				@confirm="onResultConfirm"
 				@cancel="showResult = false"
 			/>
-		</van-popup>
+		</u-popup>
 	</view>
 </template>
 
@@ -73,7 +70,16 @@
 import { addMaintenance } from '@/api/equipmentManagement/upkeep';
 import useUserStore from "@/store/modules/user";
 import dayjs from "dayjs";
-import { showToast } from 'vant';
+// 鏇挎崲 Vant 鐨� toast
+// import { showToast } from 'vant';
+
+// 鏇挎崲 toast 鏂规硶
+const showToast = (message) => {
+  uni.showToast({
+    title: message,
+    icon: 'none'
+  })
+}
 
 defineOptions({
 	name: "璁惧淇濆吇琛ㄥ崟",
diff --git a/src/pages/login.vue b/src/pages/login.vue
index d970266..485f53a 100644
--- a/src/pages/login.vue
+++ b/src/pages/login.vue
@@ -101,8 +101,7 @@
 }
 
 function getUserLoginFacotryList() {
-	if(loginForm.value.username){
-		userLoginFacotryList({userName:loginForm.value.username}).then(res => {
+	userLoginFacotryList({userName:loginForm.value.username}).then(res => {
 			// 妫�鏌es.data鏄惁涓烘暟缁�
 			if (res.data && Array.isArray(res.data)) {
 				// 閲嶆柊缁勮鏁版嵁鏍煎紡锛歞eptId鍙樻垚id锛宒eptName鍙樻垚name
@@ -118,9 +117,6 @@
 			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 2fdcb2b..54a3ede 100644
--- a/src/pages/procurementManagement/invoiceEntry/add.vue
+++ b/src/pages/procurementManagement/invoiceEntry/add.vue
@@ -540,3 +540,141 @@
   }
 }
 </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 4c83048..1b65455 100644
--- a/src/pages/procurementManagement/paymentEntry/add.vue
+++ b/src/pages/procurementManagement/paymentEntry/add.vue
@@ -4,116 +4,138 @@
     <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">
+    <u-form @submit="onSubmit" ref="formRef" label-width="110" input-align="right" error-message-align="right">
       <!-- 鍩烘湰淇℃伅 -->
-      <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>
+      <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>
       
       <!-- 鎻愪氦鎸夐挳 -->
       <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>
+        <u-button class="cancel-btn" @click="onClickLeft">鍙栨秷</u-button>
+        <u-button class="save-btn" type="primary" @click="onSubmit" :loading="loading">淇濆瓨</u-button>
       </view>
-    </van-form>
+    </u-form>
 
     <!-- 浠樻鏂瑰紡閫夋嫨鍣� -->
-    <van-popup v-model:show="showPaymentType" position="bottom">
-      <van-picker
-				:model-value="pickerValue"
+    <u-popup v-model="showPaymentType" mode="bottom">
+      <u-picker
+        v-model="pickerValue"
         :columns="receipt_payment_type"
         @confirm="onPaymentTypeConfirm"
         @cancel="showPaymentType = false"
       />
-    </van-popup>
+    </u-popup>
 
     <!-- 鏃ユ湡閫夋嫨鍣� -->
-    <van-popup v-model:show="showDate" position="bottom">
-      <van-date-picker
+    <u-popup v-model="showDate" mode="bottom">
+      <u-datetime-picker
         v-model="currentDate"
         title="閫夋嫨鏃ユ湡"
         @confirm="onDateConfirm"
         @cancel="showDate = false"
       />
-    </van-popup>
+    </u-popup>
   </view>
 </template>
 
 <script setup>
 import { ref, onMounted, computed } from 'vue'
 import useUserStore from '@/store/modules/user'
-import { showToast, showNotify } from 'vant'
+// 鏇挎崲 Vant 鐨� toast 鍜� notify
+// 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 082c945..ba0415f 100644
--- a/src/pages/procurementManagement/paymentEntry/edit.vue
+++ b/src/pages/procurementManagement/paymentEntry/edit.vue
@@ -1,94 +1,83 @@
 <template>
-  <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>
+	<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>
 
-    <!-- 浠樻鏂瑰紡閫夋嫨鍣� -->
-    <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="showPaymentType" mode="bottom">
+			<u-picker
+				v-model="pickerValue"
+				:columns="paymentTypeOptions"
+				@confirm="onPaymentTypeConfirm"
+				@cancel="showPaymentType = false"
+			/>
+		</u-popup>
 
-    <!-- 鏃ユ湡閫夋嫨鍣� -->
-    <van-popup v-model:show="showDate" position="bottom">
-      <van-date-picker
-        v-model="currentDate"
-        title="閫夋嫨鏃ユ湡"
-        @confirm="onDateConfirm"
-        @cancel="showDate = false"
-      />
-    </van-popup>
-  </view>
+		<!-- 鏃ユ湡閫夋嫨鍣� -->
+		<u-popup v-model="showDate" mode="bottom">
+			<u-datetime-picker
+				v-model="currentDate"
+				title="閫夋嫨鏃ユ湡"
+				@confirm="onDateConfirm"
+				@cancel="showDate = false"
+			/>
+		</u-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 6083918..b3424c8 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">
-					<up-icon name="search" size="24" color="#999"></up-icon>
+					<u-icon name="search" size="24" color="#999"></u-icon>
 				</view>
 			</view>
 			
 			<!-- 绛涢�夊紑鍏� -->
 			<view class="switch-row">
 				<text class="switch-label">涓嶆樉绀哄緟浠樻涓�0</text>
-				<van-switch v-model="searchForm.status" @change="getList" size="18"/>
+				<u-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">
-								<up-icon name="file-text" size="16" color="#ffffff"></up-icon>
+								<u-icon name="file-text" size="16" color="#ffffff"></u-icon>
 							</view>
 							<text class="item-id">{{ item.purchaseContractNumber }}</text>
 						</view>
 					</view>
-					<up-divider></up-divider>
+					<u-divider></u-divider>
 					<view class="item-details">
 						<view class="detail-row">
 							<text class="detail-label">閿�鍞悎鍚屽彿</text>
@@ -70,7 +70,7 @@
 					
 					<!-- 鎿嶄綔鎸夐挳 -->
 					<view class="action-buttons">
-						<van-button
+						<u-button
 							type="primary"
 							size="small"
 							class="action-btn"
@@ -78,7 +78,7 @@
 							@click="openForm('add', item)"
 						>
 							鏂板浠樻
-						</van-button>
+						</u-button>
 					</view>
 				</view>
 			</view>
@@ -94,10 +94,19 @@
 <script setup>
 import { ref } from 'vue'
 import useUserStore from '@/store/modules/user'
-import { showToast } from 'vant'
+// 鏇挎崲 Vant 鐨� toast
+// 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([])
 const tableLoading = ref(false)
diff --git a/src/pages/procurementManagement/procurementInvoiceLedger/detail.vue b/src/pages/procurementManagement/procurementInvoiceLedger/detail.vue
index ec31d69..d1ad85c 100644
--- a/src/pages/procurementManagement/procurementInvoiceLedger/detail.vue
+++ b/src/pages/procurementManagement/procurementInvoiceLedger/detail.vue
@@ -3,47 +3,44 @@
 		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
 		<PageHeader title="缂栬緫鏉ョエ鍙拌处" @back="goBack" />
 
-		<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"/>
+		<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>
 				<view class="tip-text">鏈潵绁ㄦ暟锛歿{ formatAmount(form.futureTickets) }} 鍏�</view>
-<!--				<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>-->
+			</u-cell-group>
 
 			<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>
+				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
+				<u-button class="save-btn" type="primary" @click="submitForm">淇濆瓨</u-button>
 			</view>
-		</van-form>
+		</u-form>
 	</view>
 </template>
 
 <script setup>
 import { ref, onMounted } from 'vue'
-import { showToast, showLoadingToast, closeToast } from 'vant'
+// 鏇挎崲 Vant 鐨� toast 鏂规硶
+// import { showToast, showLoadingToast, closeToast } from 'vant'
 import dayjs from 'dayjs'
 import useUserStore from '@/store/modules/user'
 import { getToken } from '@/utils/auth'
@@ -51,6 +48,24 @@
 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()
 
 const formRef = ref()
diff --git a/src/pages/procurementManagement/procurementLedger/detail.vue b/src/pages/procurementManagement/procurementLedger/detail.vue
index 52aa35c..9292d1d 100644
--- a/src/pages/procurementManagement/procurementLedger/detail.vue
+++ b/src/pages/procurementManagement/procurementLedger/detail.vue
@@ -4,58 +4,57 @@
 		<PageHeader title="鍙拌处璇︽儏" @back="goBack" />
 
          <!-- 琛ㄥ崟鍖哄煙 -->
-		<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
+		<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
 					:columns="salesContractList"
 					v-model="pickerValue"
 					@confirm="onConfirm"
 					@cancel="showPicker = false"
 				/>
-			</van-popup>
-			<van-popup v-model:show="showCustomerPicker" destroy-on-close position="bottom">
-				<van-picker
+			</u-popup>
+			<u-popup v-model="showCustomerPicker" mode="bottom">
+				<u-picker
 					:columns="supplierList"
 					v-model="pickerCustomerValue"
 					@confirm="onCustomerConfirm"
 					@cancel="showCustomerPicker = false"
 				/>
-			</van-popup>
+			</u-popup>
 			
 			<!-- 浜у搧澶х被閫夋嫨鍣� -->
-			<van-popup v-model:show="showCategoryPicker" destroy-on-close position="bottom">
+			<u-popup v-model="showCategoryPicker" mode="bottom">
 				<!-- 澶撮儴鎸夐挳鍖哄煙 -->
 				<view class="popup-header">
 					<view @click="showCategoryPicker = false" class="cancelButton">鍙栨秷</view>
@@ -69,175 +68,159 @@
 					check-strictly
 					@check-change="onCategoryConfirm"
 				/>
-			</van-popup>
+			</u-popup>
 			
 			<!-- 瑙勬牸鍨嬪彿閫夋嫨鍣� -->
-			<van-popup v-model:show="showSpecificationPicker" destroy-on-close position="bottom">
-				<van-picker
+			<u-popup v-model="showSpecificationPicker" mode="bottom">
+				<u-picker
 					:columns="modelOptions"
 					v-model="pickerSpecificationValue"
 					@confirm="onSpecificationConfirm"
 					@cancel="showSpecificationPicker = false"
 				/>
-			</van-popup>
+			</u-popup>
 			
 			<!-- 绋庣巼閫夋嫨鍣� -->
-			<van-popup v-model:show="showTaxRatePicker" destroy-on-close position="bottom">
-				<van-picker
+			<u-popup v-model="showTaxRatePicker" mode="bottom">
+				<u-picker
 					:columns="taxRateOptions"
 					v-model="pickerTaxRateValue"
 					@confirm="onTaxRateConfirm"
 					@cancel="showTaxRatePicker = false"
 				/>
-			</van-popup>
+			</u-popup>
 			
 			<!-- 鍙戠エ绫诲瀷閫夋嫨鍣� -->
-			<van-popup v-model:show="showInvoiceTypePicker" destroy-on-close position="bottom">
-				<van-picker
+			<u-popup v-model="showInvoiceTypePicker" mode="bottom">
+				<u-picker
 					:columns="invoiceTypeOptions"
 					v-model="pickerInvoiceTypeValue"
 					@confirm="onInvoiceTypeConfirm"
 					@cancel="showInvoiceTypePicker = false"
 				/>
-			</van-popup>
+			</u-popup>
 			<!-- 浜у搧淇℃伅 -->
 			<view class="product-section">
 				<view class="section-header">
 					<text class="section-title">浜у搧淇℃伅</text>
-					<van-button type="primary" size="small" @click="addProduct" class="add-btn" icon="plus"  v-if="operationType !== 'view'">鏂板</van-button>
+					<u-button type="primary" size="small" @click="addProduct" class="add-btn" v-if="operationType !== 'view'">
+						<u-icon name="plus" size="14" />
+						鏂板
+					</u-button>
 				</view>
 				<view class="product-card" v-for="(product, idx) in productData" :key="idx">
 					<!-- 浜у搧绫� -->
 					<view class="product-header">
 						<view class="product-title">
-							<van-icon name="description" color="#2979ff" size="15" />
+							<u-icon name="file-text" color="#2979ff" size="15" />
 							<text class="product-productCategory">浜у搧 {{ idx + 1 }}</text>
 						</view>
 						<!-- 鎿嶄綔鎸夐挳 -->
-						<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 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>
 					</view>
 					
 					<!-- 浜у搧淇℃伅琛ㄥ崟 -->
 					<view class="product-form">
 						<!-- 浜у搧澶х被 -->
-						<van-field
-							v-model="product.productCategory"
-							is-link
-							readonly
-							name="productCategory"
-							label="浜у搧澶х被"
-							required
-							placeholder="璇烽�夋嫨"
-							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
-							@click="openCategoryPicker(idx)"
-						/>
+						<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.specificationModel"
-							is-link
-							readonly
-							name="specificationModel"
-							label="瑙勬牸鍨嬪彿"
-							required
-							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
-							placeholder="璇烽�夋嫨"
-							@click="openSpecificationPicker(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.unit"
-							name="unit"
-							label="鍗曚綅"
-							required
-							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
-							placeholder="璇疯緭鍏�"
-						/>
+						<view class="product-unit" prop="unit" required border-bottom>
+							<u-input
+								v-model="product.unit"
+								placeholder="璇疯緭鍏�"
+							/>
+						</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-taxRate" prop="taxRate" required border-bottom>
+							<u-input
+								v-model="product.taxRate"
+								readonly
+								placeholder="璇烽�夋嫨"
+								@click="openTaxRatePicker(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-taxInclusiveUnitPrice" prop="taxInclusiveUnitPrice" required border-bottom>
+							<u-input
+								v-model="product.taxInclusiveUnitPrice"
+								type="number"
+								placeholder="璇疯緭鍏�"
+								@blur="formatTaxPrice(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-quantity" prop="quantity" required border-bottom>
+							<u-input
+								v-model="product.quantity"
+								type="number"
+								placeholder="璇疯緭鍏�"
+								@blur="formatAmount(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-taxInclusiveTotalPrice" prop="taxInclusiveTotalPrice" required border-bottom>
+							<u-input
+								v-model="product.taxInclusiveTotalPrice"
+								type="number"
+								placeholder="璇疯緭鍏�"
+								@blur="formatTaxTotal(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-taxExclusiveTotalPrice" prop="taxExclusiveTotalPrice" required border-bottom>
+							<u-input
+								v-model="product.taxExclusiveTotalPrice"
+								type="number"
+								placeholder="璇疯緭鍏�"
+								@blur="formatNoTaxTotal(idx)"
+							/>
+						</view>
 						
 						<!-- 鍙戠エ绫诲瀷 -->
-						<van-field
-							v-model="product.invoiceType"
-							is-link
-							readonly
-							name="invoiceType"
-							label="鍙戠エ绫诲瀷"
-							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
-							required
-							placeholder="璇烽�夋嫨"
-							@click="openInvoiceTypePicker(idx)"
-						/>
+						<view class="product-invoiceType" prop="invoiceType" required border-bottom>
+							<u-input
+								v-model="product.invoiceType"
+								readonly
+								placeholder="璇烽�夋嫨"
+								@click="openInvoiceTypePicker(idx)"
+							/>
+						</view>
 					</view>
 				</view>
 			</view>
 			<view class="footer-btns" v-if="operationType !== 'view'">
-				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
-				<van-button class="save-btn" native-type="submit" form-type="submit">淇濆瓨</van-button>
+				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
+				<u-button class="save-btn" type="primary" @click="onSubmit">淇濆瓨</u-button>
 			</view>
-		</van-form>
+		</u-form>
   </view>
 </template>
 
@@ -737,10 +720,10 @@
 .form-section {
 	margin-top: 1rem;
 }
-.van-field {
+.u-form-item {
 	height: 3.4rem;
 }
-.van-cell {
+.u-cell {
 	align-items: center;
 }
 .product-section {
diff --git a/src/pages/sales/invoiceLedger/detail.vue b/src/pages/sales/invoiceLedger/detail.vue
index d8913d3..b7f6fe8 100644
--- a/src/pages/sales/invoiceLedger/detail.vue
+++ b/src/pages/sales/invoiceLedger/detail.vue
@@ -1,56 +1,93 @@
 <template>
-	<view class="account-detail">
+	<view class="invoice-detail">
 		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-		<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
+		<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
 					accept=".pdf"
 					multiple
-					:after-read="afterReadUpload"
-					:before-read="beforeReadPdf"
+					:afterRead="afterReadUpload"
+					:beforeRead="beforeReadPdf"
 				>
-					<van-button class="upload-btn" icon="plus" type="primary" block>涓婁紶鏂囦欢</van-button>
-				</van-uploader>
+					<u-button class="upload-btn" type="primary">
+						<u-icon name="plus" size="14" />
+						涓婁紶鏂囦欢
+					</u-button>
+				</u-upload>
 				<view class="uploaded-list" v-if="fileList.length">
 					<view class="uploaded-item" v-for="(f, idx) in fileList" :key="idx">
 						<text class="file-name">{{ f.name || getFileNameFromUrl(f.url) }}</text>
-						<van-button size="mini" type="danger" plain @click="removeUploaded(idx)">绉婚櫎</van-button>
+						<u-button size="mini" type="error" plain @click="removeUploaded(idx)">绉婚櫎</u-button>
 					</view>
 				</view>
-			</van-cell-group>
-
+			</u-cell-group>
+			
+			<!-- 鎻愪氦鎸夐挳 -->
 			<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>
+				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
+				<u-button class="save-btn" type="primary" @click="submitForm">淇濆瓨</u-button>
 			</view>
-		</van-form>
+		</u-form>
 
-		<van-popup v-model:show="showInvoiceDatePicker" position="bottom">
-			<van-date-picker
-				v-model="currentInvoiceDate"
+		<!-- 寮�绁ㄦ棩鏈熼�夋嫨鍣� -->
+		<u-popup v-model="showInvoiceDatePicker" mode="bottom">
+			<u-datetime-picker
+				v-model="invoiceDateValue"
 				title="閫夋嫨寮�绁ㄦ棩鏈�"
 				@confirm="onInvoiceDateConfirm"
 				@cancel="showInvoiceDatePicker = false"
 			/>
-		</van-popup>
+		</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()
+}
+
 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 64c1931..1156f6e 100644
--- a/src/pages/sales/invoicingRegistration/add.vue
+++ b/src/pages/sales/invoicingRegistration/add.vue
@@ -4,63 +4,67 @@
     <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">
+    <u-form @submit="submitForm" ref="formRef" label-width="110" input-align="right" error-message-align="right">
       <!-- 鍩烘湰淇℃伅 -->
-      <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>
+      <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>
 
       <!-- 浜у搧淇℃伅 -->
       <view class="product-section">
@@ -69,7 +73,7 @@
         </view>
         
         <view v-if="productData.length === 0" class="empty-state">
-          <van-empty description="鏆傛棤浜у搧鏁版嵁" />
+          <u-empty text="鏆傛棤浜у搧鏁版嵁" />
         </view>
         
         <view v-else class="product-list">
@@ -81,121 +85,152 @@
             <!-- 浜у搧澶撮儴 -->
             <view class="product-header">
               <view class="product-title">
-                <van-icon name="description" color="#2979ff" size="15" />
+                <u-icon name="file-text" color="#2979ff" size="15" />
                 <text class="product-productCategory">浜у搧 {{ index + 1 }}</text>
               </view>
             </view>
             
             <!-- 浜у搧淇℃伅琛ㄥ崟 -->
             <view class="product-form">
-              <van-field
-                v-model="item.productCategory"
-                label="浜у搧澶х被"
-                readonly
-              />
-              <van-field
-                v-model="item.specificationModel"
-                label="瑙勬牸鍨嬪彿"
-                readonly
-              />
-              <van-field
-                v-model="item.unit"
-                label="鍗曚綅"
-                readonly
-              />
-              <van-field
-                v-model="item.quantity"
-                label="鏁伴噺"
-                readonly
-              />
-              <van-field
-                v-model="item.taxRate"
-								label="绋庣巼(%)"
-                readonly
-              />
-              <van-field
-                v-model="item.taxInclusiveUnitPrice"
-                label="鍚◣鍗曚环(鍏�)"
-                readonly
-              />
-              <van-field
-                v-model="item.taxInclusiveTotalPrice"
-                label="鍚◣鎬讳环(鍏�)"
-                readonly
-              />
-              <van-field
-                v-model="item.taxExclusiveTotalPrice"
-                label="涓嶅惈绋庢�讳环(鍏�)"
-                readonly
-              />
+              <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.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.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.noInvoiceNum"
-                label="鏈紑绁ㄦ暟"
-                readonly
-              />
-              <van-field
-                v-model="item.noInvoiceAmount"
-                label="鏈紑绁ㄩ噾棰�(鍏�)"
-                readonly
-              />
+              <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>
             </view>
           </view>
         </view>
       </view>
 
       <!-- 鎻愪氦鎸夐挳 -->
-			<view class="footer-btns">
-				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
-				<van-button class="save-btn" native-type="submit" form-type="submit">淇濆瓨</van-button>
-			</view>
-    </van-form>
+      <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-popup v-model:show="showIssueDatePicker" position="bottom">
-      <van-date-picker
+    <u-popup v-model="showIssueDatePicker" mode="bottom">
+      <u-datetime-picker
         v-model="currentIssueDate"
         title="閫夋嫨寮�绁ㄦ棩鏈�"
         @confirm="onIssueDateConfirm"
         @cancel="showIssueDatePicker = false"
       />
-    </van-popup>
+    </u-popup>
 
-    <van-popup v-model:show="showCreateTimePicker" position="bottom">
-      <van-date-picker
+    <u-popup v-model="showCreateTimePicker" mode="bottom">
+      <u-datetime-picker
         v-model="currentCreateTime"
         title="閫夋嫨褰曞叆鏃ユ湡"
         @confirm="onCreateTimeConfirm"
         @cancel="showCreateTimePicker = false"
       />
-    </van-popup>
+    </u-popup>
   </view>
 </template>
 
 <script setup>
 import { ref, reactive, onMounted } from 'vue'
-import { showToast, showLoadingToast, closeToast } from 'vant'
+// 鏇挎崲 Vant 鐨� toast 涓� uni 鍘熺敓鎴� uview-plus 鐨勬柟娉�
+// import { showToast, showLoadingToast, closeToast } from 'vant'
 import { invoiceRegistrationSave } from '@/api/salesManagement/invoiceRegistration'
 import useUserStore from '@/store/modules/user'
 import {getSalesLedgerWithProducts} from "@/api/salesManagement/salesLedger";
 
+// 鏇挎崲 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 2f4c344..a89af00 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">
-					<up-icon name="search" size="24" color="#999"></up-icon>
+					<u-icon name="search" size="24" color="#999"></u-icon>
 				</view>
 			</view>
 		</view>
@@ -26,12 +26,12 @@
 					<view class="item-header">
 						<view class="item-left">
 							<view class="document-icon">
-								<up-icon name="file-text" size="16" color="#ffffff"></up-icon>
+								<u-icon name="file-text" size="16" color="#ffffff"></u-icon>
 							</view>
 							<text class="item-id">{{ item.salesContractNo }}</text>
 						</view>
 					</view>
-					<up-divider></up-divider>
+					<u-divider></u-divider>
 					
 					<view class="item-details">
 						<view class="detail-row">
@@ -66,7 +66,7 @@
 					
 					<!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
 					<view class="action-buttons">
-						<van-button
+						<u-button
 							type="primary"
 							size="small"
 							@click="handleAddInvoice(item)"
@@ -74,15 +74,15 @@
 							:disabled="item.noInvoiceAmountTotal == 0"
 						>
 							鏂板寮�绁�
-						</van-button>
-						<van-button
-							type="default"
+						</u-button>
+						<u-button
+							type="info"
 							size="small"
 							@click="handleViewDetail(item)"
 							class="action-btn"
 						>
 							鏌ョ湅璇︽儏
-						</van-button>
+						</u-button>
 					</view>
 				</view>
 			</view>
diff --git a/src/pages/sales/receiptPayment/add.vue b/src/pages/sales/receiptPayment/add.vue
index 150c570..4d9befc 100644
--- a/src/pages/sales/receiptPayment/add.vue
+++ b/src/pages/sales/receiptPayment/add.vue
@@ -4,99 +4,105 @@
     <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">
+    <u-form @submit="onSubmit" ref="formRef" label-width="110" input-align="right" error-message-align="right">
       <!-- 鍩烘湰淇℃伅 -->
-      <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>
+      <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>
       
       <!-- 鎻愪氦鎸夐挳 -->
       <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>
+        <u-button class="cancel-btn" @click="onClickLeft">鍙栨秷</u-button>
+        <u-button class="save-btn" type="primary" @click="onSubmit" :loading="loading">淇濆瓨</u-button>
       </view>
-    </van-form>
+    </u-form>
 
     <!-- 鍥炴鏂瑰紡閫夋嫨鍣� -->
-    <van-popup v-model:show="showPaymentType" position="bottom">
-      <van-picker
-				:model-value="pickerValue"
+    <u-popup v-model="showPaymentType" mode="bottom">
+      <u-picker
+        v-model="pickerValue"
         :columns="receipt_payment_type"
         @confirm="onPaymentTypeConfirm"
         @cancel="showPaymentType = false"
       />
-    </van-popup>
+    </u-popup>
 
     <!-- 鏃ユ湡閫夋嫨鍣� -->
-    <van-popup v-model:show="showDate" position="bottom">
-      <van-date-picker
+    <u-popup v-model="showDate" mode="bottom">
+      <u-datetime-picker
         v-model="currentDate"
         title="閫夋嫨鏃ユ湡"
         @confirm="onDateConfirm"
         @cancel="showDate = false"
       />
-    </van-popup>
+    </u-popup>
   </view>
 </template>
 
@@ -104,9 +110,25 @@
 import { ref, onMounted, computed } from 'vue'
 import { receiptPaymentSaveOrUpdate, invoiceInfo } from '@/api/salesManagement/receiptPayment'
 import useUserStore from '@/store/modules/user'
-import { showToast, showNotify } from 'vant'
+// 鏇挎崲 Vant 鐨� toast 鍜� notify
+// 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 c035a9b..8c54a03 100644
--- a/src/pages/sales/receiptPayment/edit.vue
+++ b/src/pages/sales/receiptPayment/edit.vue
@@ -4,98 +4,104 @@
 		<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">
+		<u-form @submit="onSubmit" ref="formRef" label-width="110" input-align="right" error-message-align="right">
 			<!-- 鍩烘湰淇℃伅 -->
-			<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-->
-<!--				/>-->
+			<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>
-				<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>
+				<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>
 			
 			<!-- 鎻愪氦鎸夐挳 -->
 			<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>
+				<u-button class="cancel-btn" @click="onClickLeft">鍙栨秷</u-button>
+				<u-button class="save-btn" type="primary" @click="onSubmit" :loading="loading">淇濆瓨</u-button>
 			</view>
-		</van-form>
+		</u-form>
 		
 		<!-- 鍥炴鏂瑰紡閫夋嫨鍣� -->
-		<van-popup v-model:show="showPaymentType" position="bottom">
-			<van-picker
-				:model-value="pickerValue"
+		<u-popup v-model="showPaymentType" mode="bottom">
+			<u-picker
+				v-model="pickerValue"
 				:columns="receipt_payment_type"
 				@confirm="onPaymentTypeConfirm"
 				@cancel="showPaymentType = false"
 			/>
-		</van-popup>
+		</u-popup>
 		
 		<!-- 鏃ユ湡閫夋嫨鍣� -->
-		<van-popup v-model:show="showDate" position="bottom">
-			<van-date-picker
+		<u-popup v-model="showDate" mode="bottom">
+			<u-datetime-picker
 				v-model="currentDate"
 				title="閫夋嫨鏃ユ湡"
 				@confirm="onDateConfirm"
 				@cancel="showDate = false"
 			/>
-		</van-popup>
+		</u-popup>
 	</view>
 </template>
 
@@ -103,9 +109,25 @@
 import { ref, onMounted, computed } from 'vue'
 import { receiptPaymentSaveOrUpdate, invoiceInfo } from '@/api/salesManagement/receiptPayment'
 import useUserStore from '@/store/modules/user'
-import { showToast, showNotify } from 'vant'
+// 鏇挎崲 Vant 鐨� toast 鍜� notify
+// 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 4cf0a30..a30d42e 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">
-					<up-icon name="search" size="24" color="#999"></up-icon>
+					<u-icon name="search" size="24" color="#999"></u-icon>
 				</view>
 			</view>
 			
 			<!-- 绛涢�夊紑鍏� -->
 			<view class="switch-row">
 				<text class="switch-label">涓嶆樉绀哄緟鍥炴涓�0</text>
-				<van-switch v-model="searchForm.status" @change="getList" size="18"/>
+				<u-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">
-								<up-icon name="file-text" size="16" color="#ffffff"></up-icon>
+								<u-icon name="file-text" size="16" color="#ffffff"></u-icon>
 							</view>
 							<text class="item-id">{{ item.salesContractNo }}</text>
 						</view>
 					</view>
-					<up-divider></up-divider>
+					<u-divider></u-divider>
 					<view class="item-details">
 						<view class="detail-row">
 							<text class="detail-label">瀹㈡埛鍚嶇О</text>
@@ -82,7 +82,7 @@
 					
 					<!-- 鎿嶄綔鎸夐挳 -->
 					<view class="action-buttons">
-						<van-button
+						<u-button
 							type="primary"
 							size="small"
 							class="action-btn"
@@ -90,7 +90,7 @@
 							@click="openForm(item)"
 						>
 							鏂板鍥炴
-						</van-button>
+						</u-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 bca5e36..3991e5d 100644
--- a/src/pages/sales/salesAccount/detail.vue
+++ b/src/pages/sales/salesAccount/detail.vue
@@ -4,80 +4,93 @@
 		<PageHeader title="鍙拌处璇︽儏" @back="goBack" />
 
          <!-- 琛ㄥ崟鍖哄煙 -->
-		<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"
+		<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
 				label="涓氬姟鍛�"
+				prop="salesman"
 				required
-				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"
+				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
 				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
-				v-model="form.executionDate"
-				is-link
-				readonly
+				prop="customerName"
 				required
-				name="executionDate"
+				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
 				label="绛捐鏃ユ湡"
-				placeholder="鐐瑰嚮閫夋嫨鏃堕棿"
-				:rules="[{ required: true, message: '绛捐鏃ユ湡涓嶈兘涓虹┖' }]"
-				@click="showDatePicker = true"
-			/>
-			<van-popup v-model:show="showDatePicker" destroy-on-close position="bottom">
-				<van-date-picker
+				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
 					v-model="pickerDateValue"
 					@confirm="onDateConfirm"
 					@cancel="showDatePicker = false"
 				/>
-			</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
+			</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
 					:columns="userList"
 					v-model="pickerValue"
 					@confirm="onConfirm"
 					@cancel="showPicker = false"
 				/>
-			</van-popup>
-			<van-popup v-model:show="showCustomerPicker" destroy-on-close position="bottom">
-				<van-picker
+			</u-popup>
+			<u-popup v-model="showCustomerPicker" mode="bottom">
+				<u-picker
 					:columns="customerOption"
 					v-model="pickerCustomerValue"
 					@confirm="onCustomerConfirm"
 					@cancel="showCustomerPicker = false"
 				/>
-			</van-popup>
+			</u-popup>
 			
 			<!-- 浜у搧澶х被閫夋嫨鍣� -->
-			<van-popup v-model:show="showCategoryPicker" destroy-on-close position="bottom">
+			<u-popup v-model="showCategoryPicker" mode="bottom">
 				<!-- 澶撮儴鎸夐挳鍖哄煙 -->
 				<view class="popup-header">
 					<view @click="showCategoryPicker = false" class="cancelButton">鍙栨秷</view>
@@ -91,175 +104,204 @@
 					check-strictly
 					@check-change="onCategoryConfirm"
 				/>
-			</van-popup>
+			</u-popup>
 			
 			<!-- 瑙勬牸鍨嬪彿閫夋嫨鍣� -->
-			<van-popup v-model:show="showSpecificationPicker" destroy-on-close position="bottom">
-				<van-picker
+			<u-popup v-model="showSpecificationPicker" mode="bottom">
+				<u-picker
 					:columns="modelOptions"
 					v-model="pickerSpecificationValue"
 					@confirm="onSpecificationConfirm"
 					@cancel="showSpecificationPicker = false"
 				/>
-			</van-popup>
+			</u-popup>
 			
 			<!-- 绋庣巼閫夋嫨鍣� -->
-			<van-popup v-model:show="showTaxRatePicker" destroy-on-close position="bottom">
-				<van-picker
+			<u-popup v-model="showTaxRatePicker" mode="bottom">
+				<u-picker
 					:columns="taxRateOptions"
 					v-model="pickerTaxRateValue"
 					@confirm="onTaxRateConfirm"
 					@cancel="showTaxRatePicker = false"
 				/>
-			</van-popup>
+			</u-popup>
 			
 			<!-- 鍙戠エ绫诲瀷閫夋嫨鍣� -->
-			<van-popup v-model:show="showInvoiceTypePicker" destroy-on-close position="bottom">
-				<van-picker
+			<u-popup v-model="showInvoiceTypePicker" mode="bottom">
+				<u-picker
 					:columns="invoiceTypeOptions"
 					v-model="pickerInvoiceTypeValue"
 					@confirm="onInvoiceTypeConfirm"
 					@cancel="showInvoiceTypePicker = false"
 				/>
-			</van-popup>
+			</u-popup>
 			<!-- 浜у搧淇℃伅 -->
 			<view class="product-section">
 				<view class="section-header">
 					<text class="section-title">浜у搧淇℃伅</text>
-					<van-button type="primary" size="small" @click="addProduct" class="add-btn" icon="plus"  v-if="operationType !== 'view'">鏂板</van-button>
+					<u-button type="primary" size="small" @click="addProduct" class="add-btn" v-if="operationType !== 'view'">
+						<u-icon name="plus" size="14" />
+						鏂板
+					</u-button>
 				</view>
 				<view class="product-card" v-for="(product, idx) in productData" :key="idx">
 					<!-- 浜у搧绫� -->
 					<view class="product-header">
 						<view class="product-title">
-							<van-icon name="description" color="#2979ff" size="15" />
+							<u-icon name="file-text" color="#2979ff" size="15" />
 							<text class="product-productCategory">浜у搧 {{ idx + 1 }}</text>
 						</view>
 						<!-- 鎿嶄綔鎸夐挳 -->
-						<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 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>
 					</view>
 					
 					<!-- 浜у搧淇℃伅琛ㄥ崟 -->
 					<view class="product-form">
 						<!-- 浜у搧澶х被 -->
-						<van-field
-							v-model="product.productCategory"
-							is-link
-							readonly
-							name="productCategory"
+						<u-form-item
 							label="浜у搧澶х被"
+							prop="productCategory"
 							required
-							placeholder="璇烽�夋嫨"
-							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
-							@click="openCategoryPicker(idx)"
-						/>
+							border-bottom
+						>
+							<u-input
+								v-model="product.productCategory"
+								readonly
+								placeholder="璇烽�夋嫨"
+								@click="openCategoryPicker(idx)"
+							/>
+						</u-form-item>
 						
 						<!-- 瑙勬牸鍨嬪彿 -->
-						<van-field
-							v-model="product.specificationModel"
-							is-link
-							readonly
-							name="specificationModel"
+						<u-form-item
 							label="瑙勬牸鍨嬪彿"
+							prop="specificationModel"
 							required
-							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
-							placeholder="璇烽�夋嫨"
-							@click="openSpecificationPicker(idx)"
-						/>
+							border-bottom
+						>
+							<u-input
+								v-model="product.specificationModel"
+								readonly
+								placeholder="璇烽�夋嫨"
+								@click="openSpecificationPicker(idx)"
+							/>
+						</u-form-item>
 						
 						<!-- 鍗曚綅 -->
-						<van-field
-							v-model="product.unit"
-							name="unit"
+						<u-form-item
 							label="鍗曚綅"
+							prop="unit"
 							required
-							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
-							placeholder="璇疯緭鍏�"
-						/>
+							border-bottom
+						>
+							<u-input
+								v-model="product.unit"
+								placeholder="璇疯緭鍏�"
+							/>
+						</u-form-item>
 						
 						<!-- 绋庣巼 -->
-						<van-field
-							v-model="product.taxRate"
-							is-link
-							readonly
-							name="taxRate"
+						<u-form-item
 							label="绋庣巼(%)"
+							prop="taxRate"
 							required
-							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
-							placeholder="璇烽�夋嫨"
-							@click="openTaxRatePicker(idx)"
-						/>
+							border-bottom
+						>
+							<u-input
+								v-model="product.taxRate"
+								readonly
+								placeholder="璇烽�夋嫨"
+								@click="openTaxRatePicker(idx)"
+							/>
+						</u-form-item>
 						
 						<!-- 鍚◣鍗曚环 -->
-						<van-field
-							v-model="product.taxInclusiveUnitPrice"
-							name="taxInclusiveUnitPrice"
+						<u-form-item
 							label="鍚◣鍗曚环(鍏�)"
-							type="number"
+							prop="taxInclusiveUnitPrice"
 							required
-							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
-							placeholder="璇疯緭鍏�"
-							@blur="formatTaxPrice(idx)"
-						/>
+							border-bottom
+						>
+							<u-input
+								v-model="product.taxInclusiveUnitPrice"
+								type="number"
+								placeholder="璇疯緭鍏�"
+								@blur="formatTaxPrice(idx)"
+							/>
+						</u-form-item>
 						
 						<!-- 鏁伴噺 -->
-						<van-field
-							v-model="product.quantity"
-							name="quantity"
+						<u-form-item
 							label="鏁伴噺"
-							type="number"
-							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
+							prop="quantity"
 							required
-							placeholder="璇疯緭鍏�"
-							@blur="formatAmount(idx)"
-						/>
+							border-bottom
+						>
+							<u-input
+								v-model="product.quantity"
+								type="number"
+								placeholder="璇疯緭鍏�"
+								@blur="formatAmount(idx)"
+							/>
+						</u-form-item>
 						
 						<!-- 鍚◣鎬讳环 -->
-						<van-field
-							v-model="product.taxInclusiveTotalPrice"
-							name="taxInclusiveTotalPrice"
+						<u-form-item
 							label="鍚◣鎬讳环(鍏�)"
-							type="number"
-							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
+							prop="taxInclusiveTotalPrice"
 							required
-							placeholder="璇疯緭鍏�"
-							@blur="formatTaxTotal(idx)"
-						/>
+							border-bottom
+						>
+							<u-input
+								v-model="product.taxInclusiveTotalPrice"
+								type="number"
+								placeholder="璇疯緭鍏�"
+								@blur="formatTaxTotal(idx)"
+							/>
+						</u-form-item>
 						
 						<!-- 涓嶅惈绋庢�讳环 -->
-						<van-field
-							v-model="product.taxExclusiveTotalPrice"
-							name="taxExclusiveTotalPrice"
+						<u-form-item
 							label="涓嶅惈绋庢�讳环(鍏�)"
-							type="number"
+							prop="taxExclusiveTotalPrice"
 							required
-							:rules="[{ required: true, message: '璇疯緭鍏�' }]"
-							placeholder="璇疯緭鍏�"
-							@blur="formatNoTaxTotal(idx)"
-						/>
+							border-bottom
+						>
+							<u-input
+								v-model="product.taxExclusiveTotalPrice"
+								type="number"
+								placeholder="璇疯緭鍏�"
+								@blur="formatNoTaxTotal(idx)"
+							/>
+						</u-form-item>
 						
 						<!-- 鍙戠エ绫诲瀷 -->
-						<van-field
-							v-model="product.invoiceType"
-							is-link
-							readonly
-							name="invoiceType"
+						<u-form-item
 							label="鍙戠エ绫诲瀷"
-							:rules="[{ required: true, message: '璇烽�夋嫨' }]"
+							prop="invoiceType"
 							required
-							placeholder="璇烽�夋嫨"
-							@click="openInvoiceTypePicker(idx)"
-						/>
+							border-bottom
+						>
+							<u-input
+								v-model="product.invoiceType"
+								readonly
+								placeholder="璇烽�夋嫨"
+								@click="openInvoiceTypePicker(idx)"
+							/>
+						</u-form-item>
 					</view>
 				</view>
 			</view>
 			<view class="footer-btns" v-if="operationType !== 'view'">
-				<van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button>
-				<van-button class="save-btn" native-type="submit" form-type="submit">淇濆瓨</van-button>
+				<u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button>
+				<u-button class="save-btn" type="primary" @click="onSubmit">淇濆瓨</u-button>
 			</view>
-		</van-form>
+		</u-form>
   </view>
 </template>
 
diff --git a/src/pages_mine/pages/info/index.vue b/src/pages_mine/pages/info/index.vue
index 6fb2356..dfdae6b 100644
--- a/src/pages_mine/pages/info/index.vue
+++ b/src/pages_mine/pages/info/index.vue
@@ -1,14 +1,38 @@
 <template>
   <view class="container">
     <view class="card">
-      <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>
+      <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>
     </view>
 
     <!-- <u-button @click="register()">缁戝畾寰俊</u-button> -->
@@ -54,31 +78,29 @@
 
 .container {
   min-height: 100vh;
-  padding: 0; /* 24rpx -> 0.75rem */
+  padding: 0;
   box-sizing: border-box;
 }
 
 /* 鍒楄〃鍗$墖瀹瑰櫒 */
 .card {
   background-color: #ffffff;
-  box-shadow: 0 0.375rem 1rem rgba(0, 0, 0, 0.06); /* 0 12rpx 32rpx -> 0 0.375rem 1rem */
+  box-shadow: 0 0.375rem 1rem rgba(0, 0, 0, 0.06);
   overflow: hidden;
 }
 
-/* 閫傞厤 Vant Cell */
-:deep(.van-cell) {
-  min-height: 3rem; /* 92rpx -> 2.875rem */
+/* 閫傞厤 uview-plus Cell */
+:deep(.u-cell) {
+  min-height: 3rem;
 	align-items: center;
 }
 
-:deep(.van-cell__title) {
+:deep(.u-cell__title) {
   font-weight: 500;
-  color: #1f2937; /* 娣辩伆 */
+  color: #1f2937;
 }
 
-:deep(.van-cell__value) {
-  color: #6b7280; /* 娆¤鐏� */
+:deep(.u-cell__value) {
+  color: #6b7280;
 }
-
-/* 绉婚櫎涓嶅啀浣跨敤鐨� .cell-icon 鏍峰紡 */
 </style>

--
Gitblit v1.9.3