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