| | |
| | | placeholder="请输入" |
| | | @blur="inputTicketsAmount" /> |
| | | </up-form-item> |
| | | <view class="tip-text">未来票数:{{ formatAmount(form.futureTickets) }} 元</view> |
| | | <view class="tip-text">未来票数:{{ formatAmount(form.futureTickets) }} </view> |
| | | <!-- 使用公共底部按钮组件 --> |
| | | <FooterButtons show |
| | | cancelText="取消" |
| | |
| | | const fileList = ref([]); |
| | | const currentId = ref(""); |
| | | const temFutureTickets = ref(0); |
| | | const originalTicketsNum = ref(0); // 保存原始来票数 |
| | | |
| | | // 表单校验规则 |
| | | const rules = { |
| | |
| | | uni.navigateBack(); |
| | | }; |
| | | const inputTicketsNum = () => { |
| | | // 处理空值情况 |
| | | if (!form.value.ticketsNum || form.value.ticketsNum === "") { |
| | | form.value.ticketsNum = 0; |
| | | return; |
| | | } |
| | | |
| | | // 确保含税单价存在且不为零 |
| | | if ( |
| | | !form.value.taxInclusiveUnitPrice || |
| | |
| | | }); |
| | | return; |
| | | } |
| | | if (Number(form.value.ticketsNum) > Number(temFutureTickets.value)) { |
| | | |
| | | const newTicketsNum = Number(form.value.ticketsNum) || 0; |
| | | // 计算总可用票数:原始未来票数 + 原始来票数 |
| | | const totalAvailableTickets = Number(temFutureTickets.value) + Number(originalTicketsNum.value); |
| | | |
| | | // 验证来票数不能大于总可用票数 |
| | | if (newTicketsNum > totalAvailableTickets) { |
| | | uni.showToast({ |
| | | title: "来票数不得大于未来票数", |
| | | title: "来票数不得大于总可用票数", |
| | | icon: "none", |
| | | }); |
| | | form.value.ticketsNum = temFutureTickets.value; |
| | | form.value.ticketsNum = totalAvailableTickets; |
| | | // 重新计算未来票数 |
| | | const futureTickets = totalAvailableTickets - totalAvailableTickets; |
| | | form.value.futureTickets = Number(futureTickets.toFixed(2)); |
| | | form.value.ticketsAmount = Number((totalAvailableTickets * Number(form.value.taxInclusiveUnitPrice)).toFixed(2)); |
| | | return; |
| | | } |
| | | |
| | | // 确保所有数值都转换为数字类型进行计算 |
| | | const ticketsAmount = |
| | | Number(form.value.ticketsNum) * Number(form.value.taxInclusiveUnitPrice); |
| | | const futureTickets = |
| | | Number(temFutureTickets.value) - Number(form.value.ticketsNum); |
| | | newTicketsNum * Number(form.value.taxInclusiveUnitPrice); |
| | | // 计算未来票数:总可用票数 - 新来票数 |
| | | const futureTickets = totalAvailableTickets - newTicketsNum; |
| | | form.value.futureTickets = Number(futureTickets.toFixed(2)); |
| | | form.value.ticketsAmount = Number(ticketsAmount.toFixed(2)); |
| | | }; |
| | | const inputTicketsAmount = () => { |
| | | // 处理空值情况 |
| | | if (!form.value.ticketsAmount || form.value.ticketsAmount === "") { |
| | | form.value.ticketsAmount = 0; |
| | | } |
| | | |
| | | // 确保含税单价存在且不为零 |
| | | if ( |
| | | !form.value.taxInclusiveUnitPrice || |
| | |
| | | return; |
| | | } |
| | | |
| | | if ( |
| | | Number(form.value.ticketsAmount) > |
| | | Number(form.value.futureTickets * form.value.taxInclusiveUnitPrice) |
| | | ) { |
| | | const newTicketsAmount = Number(form.value.ticketsAmount) || 0; |
| | | // 计算总可用金额:原始未来票数 + 原始来票数 |
| | | const totalAvailableTickets = Number(temFutureTickets.value) + Number(originalTicketsNum.value); |
| | | const totalAvailableAmount = totalAvailableTickets * Number(form.value.taxInclusiveUnitPrice); |
| | | |
| | | if (newTicketsAmount > totalAvailableAmount) { |
| | | uni.showToast({ |
| | | title: "本次来票金额不得大于总金额", |
| | | icon: "none", |
| | | }); |
| | | form.value.ticketsAmount = ( |
| | | form.value.futureTickets * form.value.taxInclusiveUnitPrice |
| | | ).toFixed(2); |
| | | form.value.ticketsAmount = totalAvailableAmount.toFixed(2); |
| | | const ticketsNum = |
| | | Number(form.value.ticketsAmount) / |
| | | Number(form.value.taxInclusiveUnitPrice); |
| | | form.value.ticketsNum = Number(ticketsNum.toFixed(2)); |
| | | // 更新未来票数 |
| | | const futureTickets = totalAvailableTickets - form.value.ticketsNum; |
| | | form.value.futureTickets = Number(futureTickets.toFixed(2)); |
| | | return; |
| | | } |
| | | |
| | | // 确保所有数值都转换为数字类型进行计算 |
| | | const ticketsNum = |
| | | Number(form.value.ticketsAmount) / Number(form.value.taxInclusiveUnitPrice); |
| | | newTicketsAmount / Number(form.value.taxInclusiveUnitPrice); |
| | | form.value.ticketsNum = Number(ticketsNum.toFixed(2)); |
| | | // 更新未来票数 |
| | | const futureTickets = totalAvailableTickets - form.value.ticketsNum; |
| | | form.value.futureTickets = Number(futureTickets.toFixed(2)); |
| | | }; |
| | | const formatAmount = val => { |
| | | if (val === undefined || val === null || val === "") return "0.00"; |
| | |
| | | const data = res?.data || res; |
| | | form.value = { ...data }; |
| | | temFutureTickets.value = data.futureTickets; |
| | | originalTicketsNum.value = Number(data.ticketsNum) || 0; // 保存原始来票数 |
| | | fileList.value = data?.fileList || []; |
| | | if (!form.value.invoicePerson) { |
| | | form.value.invoicePerson = userStore.nickName; |
| | |
| | | }; |
| | | |
| | | // 表单提交 |
| | | const onSubmit = () => { |
| | | formRef.value |
| | | .validate() |
| | | .then(() => { |
| | | const onSubmit = async () => { |
| | | if (!formRef.value) { |
| | | console.log("表单引用不存在"); |
| | | return; |
| | | } |
| | | |
| | | try { |
| | | // 先调用 validate 方法 |
| | | const validateResult = formRef.value.validate(); |
| | | |
| | | // 如果 validate 返回 undefined 或 null,直接提交 |
| | | if (validateResult === undefined || validateResult === null) { |
| | | submitForm(); |
| | | return; |
| | | } |
| | | |
| | | // 如果返回 Promise,使用 await 和 catch |
| | | if (validateResult && typeof validateResult.then === 'function') { |
| | | const valid = await validateResult.catch(() => false); |
| | | if (valid) { |
| | | // 表单验证通过,提交表单 |
| | | submitForm(); |
| | | }) |
| | | .catch(error => { |
| | | } else { |
| | | // 表单验证失败 |
| | | console.log("表单验证失败"); |
| | | } |
| | | } else { |
| | | // 如果返回布尔值,直接判断 |
| | | if (validateResult) { |
| | | submitForm(); |
| | | } else { |
| | | console.log("表单验证失败"); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | // 如果 validate 方法不存在或抛出错误,直接提交 |
| | | console.log("表单验证失败", error); |
| | | }); |
| | | submitForm(); |
| | | } |
| | | }; |
| | | const purchaseLedgerId = ref(""); |
| | | const productModelId = ref({}); |