| | |
| | | <template> |
| | | <view class="equipment-detail"> |
| | | <view class="account-detail"> |
| | | <!-- 使用通用页面头部组件 --> |
| | | <PageHeader title="设备台账详情" @back="goBack" /> |
| | | |
| | | <!-- 表单内容 --> |
| | | <u-form @submit="sendForm" ref="formRef" :rules="formRules" label-width="110"> |
| | | <u-form @submit="sendForm" ref="formRef" :model="form" :rules="formRules" label-width="110"> |
| | | <!-- 基本信息 --> |
| | | <u-cell-group title="基本信息"> |
| | | <u-form-item label="设备名称" prop="deviceName" required border-bottom> |
| | |
| | | clearable |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="设备品牌" prop="deviceBrand" required border-bottom> |
| | | <!-- <u-form-item label="设备品牌" prop="deviceBrand" required border-bottom> |
| | | <u-input |
| | | v-model="form.deviceBrand" |
| | | placeholder="请输入设备品牌" |
| | | clearable |
| | | /> |
| | | </u-form-item> |
| | | </u-form-item> --> |
| | | <u-form-item label="供应商" prop="supplierName" required border-bottom> |
| | | <u-input |
| | | v-model="form.supplierName" |
| | |
| | | clearable |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="存放位置" prop="storageLocation" required border-bottom> |
| | | <!-- <u-form-item label="存放位置" prop="storageLocation" required border-bottom> |
| | | <u-input |
| | | v-model="form.storageLocation" |
| | | placeholder="请输入存放位置" |
| | | clearable |
| | | /> |
| | | </u-form-item> |
| | | </u-form-item> --> |
| | | <u-form-item label="单位" prop="unit" required border-bottom> |
| | | <u-input |
| | | v-model="form.unit" |
| | |
| | | clearable |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="启用折旧" prop="enableDepreciation" required border-bottom> |
| | | <!-- <u-form-item label="启用折旧" prop="enableDepreciation" required border-bottom> |
| | | <u-switch |
| | | v-model="form.enableDepreciation" |
| | | :active-value="true" |
| | | :inactive-value="false" |
| | | /> |
| | | </u-form-item> |
| | | </u-form-item> --> |
| | | <u-form-item label="数量" prop="number" required border-bottom> |
| | | <u-input |
| | | v-model="form.number" |
| | |
| | | supplierName: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | storageLocation: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | unit: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | number: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | taxIncludingPriceUnit: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | taxRate: [{ required: true, trigger: "change", message: "请输入" }], |
| | | // 数字类型字段需要特殊处理,确保有数值时不会触发必填校验 |
| | | number: [{ |
| | | required: true, |
| | | trigger: "blur", |
| | | message: "请输入", |
| | | validator: (rule, value, callback) => { |
| | | // 对于数字类型,检查是否为有效数字(包括0) |
| | | if (value !== undefined && value !== null && value !== '' && !isNaN(value)) { |
| | | callback(); |
| | | } else { |
| | | callback(new Error('请输入数量')); |
| | | } |
| | | } |
| | | }], |
| | | taxIncludingPriceUnit: [{ |
| | | required: true, |
| | | trigger: "blur", |
| | | message: "请输入", |
| | | validator: (rule, value, callback) => { |
| | | // 对于数字类型,检查是否为有效数字(包括0) |
| | | if (value !== undefined && value !== null && value !== '' && !isNaN(value)) { |
| | | callback(); |
| | | } else { |
| | | callback(new Error('请输入含税单价')); |
| | | } |
| | | } |
| | | }], |
| | | taxRate: [{ |
| | | required: true, |
| | | trigger: "change", |
| | | message: "请选择", |
| | | validator: (rule, value, callback) => { |
| | | // 检查税率是否为有效数字 |
| | | if (value !== undefined && value !== null && value !== '' && !isNaN(value)) { |
| | | callback(); |
| | | } else { |
| | | callback(new Error('请选择税率')); |
| | | } |
| | | } |
| | | }], |
| | | createTime: [{ required: true, trigger: "change", message: "请选择" }], |
| | | }; |
| | | |
| | |
| | | } |
| | | try { |
| | | const { code, data } = await getLedgerById(id); |
| | | console.log(data); |
| | | |
| | | if (code == 200) { |
| | | form.value.deviceName = data.deviceName; |
| | | form.value.deviceModel = data.deviceModel; |
| | |
| | | form.value.taxRate = data.taxRate; |
| | | form.value.unTaxIncludingPriceTotal = data.unTaxIncludingPriceTotal; |
| | | form.value.createTime = data.createTime; |
| | | |
| | | // 数据加载完成后,重置表单验证状态 |
| | | setTimeout(() => { |
| | | clearValidate(); |
| | | }, 100); |
| | | } |
| | | } catch (e) { |
| | | showToast('获取详情失败'); |
| | |
| | | |
| | | // 数学计算 |
| | | const mathNum = () => { |
| | | if (!form.value.taxIncludingPriceUnit) { |
| | | // 只有在新增模式或者字段确实为空时才显示提示 |
| | | if (operationType.value !== 'edit' || (form.value.taxIncludingPriceUnit === undefined || form.value.taxIncludingPriceUnit === '')) { |
| | | showToast("请输入单价"); |
| | | return; |
| | | } |
| | | if (!form.value.number) { |
| | | if (operationType.value !== 'edit' || (form.value.number === undefined || form.value.number === '')) { |
| | | showToast("请输入数量"); |
| | | return; |
| | | } |
| | |
| | | formRef.value?.clearValidate(); |
| | | }; |
| | | |
| | | // 重置表单数据和校验状态 |
| | | const resetForm = () => { |
| | | form.value = { |
| | | deviceName: undefined, |
| | | deviceModel: undefined, |
| | | deviceBrand: undefined, |
| | | supplierName: undefined, |
| | | storageLocation: undefined, |
| | | unit: undefined, |
| | | enableDepreciation: false, |
| | | number: undefined, |
| | | taxIncludingPriceUnit: undefined, |
| | | taxIncludingPriceTotal: undefined, |
| | | taxRate: undefined, |
| | | unTaxIncludingPriceTotal: undefined, |
| | | createTime: dayjs().format("YYYY-MM-DD"), |
| | | }; |
| | | }; |
| | | |
| | | const resetFormAndValidate = () => { |
| | | resetForm(); |
| | | clearValidate(); |
| | | }; |
| | | |
| | | // 提交表单 |
| | | const sendForm = async () => { |
| | | try { |
| | | // 手动验证表单 |
| | | await formRef.value?.validate(); |
| | | // 检查必填字段 |
| | | let isValid = true; |
| | | let errorMessage = ''; |
| | | |
| | | // 检查文本类型必填字段 |
| | | if (!form.value.deviceName || form.value.deviceName.trim() === '') { |
| | | isValid = false; |
| | | errorMessage = '请输入设备名称'; |
| | | } else if (!form.value.deviceModel || form.value.deviceModel.trim() === '') { |
| | | isValid = false; |
| | | errorMessage = '请输入规格型号'; |
| | | } else if (!form.value.deviceBrand || form.value.deviceBrand.trim() === '') { |
| | | isValid = false; |
| | | errorMessage = '请输入设备品牌'; |
| | | } else if (!form.value.supplierName || form.value.supplierName.trim() === '') { |
| | | isValid = false; |
| | | errorMessage = '请输入供应商'; |
| | | } else if (!form.value.storageLocation || form.value.storageLocation.trim() === '') { |
| | | isValid = false; |
| | | errorMessage = '请输入存放位置'; |
| | | } else if (!form.value.unit || form.value.unit.trim() === '') { |
| | | isValid = false; |
| | | errorMessage = '请输入单位'; |
| | | } |
| | | |
| | | // 检查数字类型必填字段 |
| | | else if (form.value.number === undefined || form.value.number === null || form.value.number === '' || isNaN(form.value.number)) { |
| | | isValid = false; |
| | | errorMessage = '请输入数量'; |
| | | } else if (form.value.taxIncludingPriceUnit === undefined || form.value.taxIncludingPriceUnit === null || form.value.taxIncludingPriceUnit === '' || isNaN(form.value.taxIncludingPriceUnit)) { |
| | | isValid = false; |
| | | errorMessage = '请输入含税单价'; |
| | | } else if (form.value.taxRate === undefined || form.value.taxRate === null || form.value.taxRate === '' || isNaN(form.value.taxRate)) { |
| | | isValid = false; |
| | | errorMessage = '请选择税率'; |
| | | } else if (!form.value.createTime || form.value.createTime.trim() === '') { |
| | | isValid = false; |
| | | errorMessage = '请选择录入日期'; |
| | | } |
| | | |
| | | // 如果验证失败,显示错误提示 |
| | | if (!isValid) { |
| | | showToast(errorMessage); |
| | | return; |
| | | } |
| | | |
| | | // 验证通过,显示提交中提示 |
| | | showToast('正在提交表单...'); |
| | | |
| | | loading.value = true; |
| | | const id = getPageId(); |
| | | |
| | | // 准备提交数据,createTime 加上当前时分秒 |
| | | const submitData = { ...form.value }; |
| | | if (submitData.createTime && !submitData.createTime.includes(':')) { |
| | | // 如果 createTime 只包含日期,添加当前时分秒 |
| | | submitData.createTime = submitData.createTime + ' ' + dayjs().format('HH:mm:ss'); |
| | | } |
| | | |
| | | const { code } = id |
| | | const { code, res } = id |
| | | ? await editLedger({ id: id, ...submitData }) |
| | | : await addLedger(submitData); |
| | | |
| | |
| | | }, 1500); |
| | | } else { |
| | | loading.value = false; |
| | | console.log(res); |
| | | } |
| | | } catch (e) { |
| | | loading.value = false; |
| | | showToast('表单验证失败'); |
| | | showToast('提交失败'); |
| | | } |
| | | }; |
| | | |
| | | // 返回上一页 |
| | | const goBack = () => { |
| | | // 使用后清除storage中的ID,避免数据残留 |
| | | uni.removeStorageSync('ledgerId'); |
| | | uni.navigateBack(); |
| | | }; |
| | | |
| | | // 获取页面参数 |
| | | const getPageParams = () => { |
| | | const pages = getCurrentPages(); |
| | | const currentPage = pages[pages.length - 1]; |
| | | const options = currentPage.options; |
| | | try { |
| | | // 优先从storage中获取ID |
| | | const ledgerId = uni.getStorageSync('ledgerId'); |
| | | |
| | | if (options.id) { |
| | | if (ledgerId) { |
| | | // 编辑模式,获取详情 |
| | | loadForm(options.id); |
| | | loadForm(ledgerId); |
| | | } else { |
| | | // 新增模式 |
| | | operationType.value = 'add'; |
| | | } |
| | | } catch (e) { |
| | | operationType.value = 'add'; |
| | | } |
| | | }; |
| | | |
| | | // 获取页面ID |
| | | const getPageId = () => { |
| | | const pages = getCurrentPages(); |
| | | const currentPage = pages[pages.length - 1]; |
| | | const options = currentPage.options; |
| | | return options.id; |
| | | }; |
| | | try { |
| | | // 优先从storage中获取ID |
| | | const ledgerId = uni.getStorageSync('ledgerId'); |
| | | |
| | | |
| | | |
| | | // 确认税率选择 |
| | | const onTaxRateConfirm = (e) => { |
| | | form.value.taxRate = e.value; |
| | | mathNum(); // 重新计算 |
| | | if (ledgerId) { |
| | | return ledgerId; |
| | | } |
| | | } catch (e) { |
| | | console.error('获取页面ID出错:', e); |
| | | } |
| | | return null; |
| | | }; |
| | | |
| | | // 选择税率 |