| | |
| | | <u-form @submit="sendForm" ref="formRef" :model="form" :rules="formRules" label-width="110"> |
| | | <!-- 基本信息 --> |
| | | <u-cell-group title="基本信息"> |
| | | <u-form-item label="设备编号" prop="uniqueCode" border-bottom> |
| | | <u-input |
| | | v-model="form.uniqueCode" |
| | | :disabled="form.autoGenerateUniqueCode || operationType === 'edit'" |
| | | :placeholder="form.autoGenerateUniqueCode ? '保存后自动生成' : '请输入设备编号'" |
| | | clearable |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item v-if="operationType !== 'edit'" label="自动生成编号" prop="autoGenerateUniqueCode" border-bottom> |
| | | <u-switch |
| | | v-model="form.autoGenerateUniqueCode" |
| | | :activeValue="true" |
| | | :inactiveValue="false" |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="设备名称" prop="deviceName" required border-bottom> |
| | | <u-input |
| | | v-model="form.deviceName" |
| | |
| | | clearable |
| | | /> |
| | | </u-form-item> |
| | | <!-- <u-form-item label="设备品牌" prop="deviceBrand" required border-bottom> |
| | | <u-form-item label="设备品牌" prop="deviceBrand" border-bottom> |
| | | <u-input |
| | | v-model="form.deviceBrand" |
| | | placeholder="请输入设备品牌" |
| | | clearable |
| | | /> |
| | | </u-form-item> --> |
| | | </u-form-item> |
| | | <u-form-item label="设备类型" prop="type" required border-bottom> |
| | | <FormPicker |
| | | v-model="form.type" |
| | | type="select" |
| | | title="选择设备类型" |
| | | :options="deviceTypeOptions" |
| | | placeholder="请选择设备类型" |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="出厂编号" prop="factoryNumber" border-bottom> |
| | | <u-input |
| | | v-model="form.factoryNumber" |
| | | placeholder="请输入出厂编号" |
| | | clearable |
| | | /> |
| | | </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" border-bottom> |
| | | <u-input |
| | | v-model="form.storageLocation" |
| | | placeholder="请输入存放位置" |
| | | clearable |
| | | /> |
| | | </u-form-item> --> |
| | | </u-form-item> |
| | | <u-form-item label="责任人" prop="responsiblePerson" border-bottom> |
| | | <u-input |
| | | v-model="form.responsiblePerson" |
| | | placeholder="请输入责任人" |
| | | clearable |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="建档日期" prop="filingDate" border-bottom> |
| | | <FormPicker |
| | | v-model="form.filingDate" |
| | | type="date" |
| | | placeholder="请选择建档日期" |
| | | /> |
| | | </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-switch |
| | | v-model="form.enableDepreciation" |
| | | :active-value="true" |
| | | :inactive-value="false" |
| | | /> |
| | | </u-form-item> --> |
| | | <u-form-item label="数量" prop="number" required border-bottom> |
| | | <u-input |
| | | v-model="form.number" |
| | |
| | | </template> |
| | | </u-form-item> |
| | | </u-cell-group> |
| | | |
| | | |
| | | <u-cell-group title="采购信息"> |
| | | <u-form-item label="制造厂商" prop="manufacturer" border-bottom> |
| | | <u-input |
| | | v-model="form.manufacturer" |
| | | placeholder="请输入制造厂商" |
| | | clearable |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="购置日期" prop="purchaseDate" border-bottom> |
| | | <FormPicker |
| | | v-model="form.purchaseDate" |
| | | type="date" |
| | | placeholder="请选择购置日期" |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="资产原值" prop="originalAssetValue" border-bottom> |
| | | <u-input |
| | | v-model="form.originalAssetValue" |
| | | type="number" |
| | | placeholder="请输入资产原值" |
| | | clearable |
| | | /> |
| | | </u-form-item> |
| | | </u-cell-group> |
| | | <u-cell-group title="技术参数"> |
| | | <u-form-item label="主要技术参数" prop="technicalParameters" border-bottom> |
| | | <up-textarea |
| | | v-model="form.technicalParameters" |
| | | placeholder="请输入主要技术参数" |
| | | :maxlength="500" |
| | | count |
| | | auto-height |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="主要用途" prop="mainPurpose" border-bottom> |
| | | <up-textarea |
| | | v-model="form.mainPurpose" |
| | | placeholder="请输入主要用途" |
| | | :maxlength="500" |
| | | count |
| | | auto-height |
| | | /> |
| | | </u-form-item> |
| | | </u-cell-group> |
| | | <u-cell-group title="运行管理"> |
| | | <u-form-item label="设备状态" prop="status" required border-bottom> |
| | | <FormPicker |
| | | v-model="form.status" |
| | | type="select" |
| | | title="选择设备状态" |
| | | :options="statusOptions" |
| | | placeholder="请选择设备状态" |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="启用日期" prop="activationDate" border-bottom> |
| | | <FormPicker |
| | | v-model="form.activationDate" |
| | | type="date" |
| | | placeholder="请选择启用日期" |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="预计运行时间" prop="planRuntimeTime" border-bottom> |
| | | <FormPicker |
| | | v-model="form.planRuntimeTime" |
| | | type="date" |
| | | placeholder="请选择预计运行时间" |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="启用折旧" prop="isDepr" border-bottom> |
| | | <u-switch |
| | | v-model="form.isDepr" |
| | | :activeValue="1" |
| | | :inactiveValue="2" |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item v-if="form.isDepr === 1" label="每年折旧金额" prop="annualDepreciationAmount" border-bottom> |
| | | <u-input |
| | | v-model="form.annualDepreciationAmount" |
| | | type="number" |
| | | placeholder="请输入每年折旧金额" |
| | | clearable |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="设备图片" border-bottom> |
| | | <CommonUpload |
| | | v-model="imageFiles" |
| | | :maxCount="20" |
| | | accept="image" |
| | | /> |
| | | </u-form-item> |
| | | </u-cell-group> |
| | | |
| | | <!-- 提交按钮 --> |
| | | <view class="footer-btns"> |
| | | <u-button class="cancel-btn" @click="goBack">取消</u-button> |
| | |
| | | import { ref, computed, onMounted } from 'vue'; |
| | | import { onShow } from '@dcloudio/uni-app'; |
| | | import PageHeader from '@/components/PageHeader.vue'; |
| | | import FormPicker from '@/components/FormPicker.vue'; |
| | | import CommonUpload from '@/components/CommonUpload.vue'; |
| | | import { getLedgerById, addLedger, editLedger } from '@/api/equipmentManagement/ledger'; |
| | | import { toFileList } from '@/utils/file'; |
| | | import dayjs from "dayjs"; |
| | | import { |
| | | calculateTaxIncludeTotalPrice, |
| | |
| | | const formRules = { |
| | | deviceName: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | deviceModel: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | deviceBrand: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | type: [{ required: true, trigger: "change", message: "请选择设备类型" }], |
| | | supplierName: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | storageLocation: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | unit: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | // 数字类型字段需要特殊处理,确保有数值时不会触发必填校验 |
| | | number: [{ |
| | |
| | | } |
| | | }], |
| | | createTime: [{ required: true, trigger: "change", message: "请选择" }], |
| | | status: [{ required: true, trigger: "change", message: "请选择设备状态" }], |
| | | planRuntimeTime: [{ required: true, trigger: "change", message: "请选择预计运行时间" }], |
| | | }; |
| | | |
| | | // 设备类型固定选项(与管理端一致,无法命中的值会由 FormPicker 的选项展示兜底) |
| | | const deviceTypeOptions = ref([ |
| | | { name: '生产设备', value: '生产设备' }, |
| | | { name: '办公设备', value: '办公设备' }, |
| | | { name: '检测设备', value: '检测设备' }, |
| | | { name: '运输设备', value: '运输设备' }, |
| | | { name: '其他设备', value: '其他设备' }, |
| | | ]); |
| | | const statusOptions = ref([ |
| | | { name: '停用', value: 0 }, |
| | | { name: '启用', value: 1 }, |
| | | ]); |
| | | |
| | | // 使用 ref 声明表单数据 |
| | | const form = ref({ |
| | | // 基本信息 |
| | | autoGenerateUniqueCode: true, // 自动生成编号 |
| | | uniqueCode: undefined, // 设备编号 |
| | | deviceName: undefined, // 设备名称 |
| | | deviceModel: undefined, // 规格型号 |
| | | deviceBrand: undefined, // 设备品牌 |
| | | supplierName: undefined, // 供应商 |
| | | type: undefined, // 设备类型 |
| | | factoryNumber: undefined, // 出厂编号 |
| | | storageLocation: undefined, // 存放位置 |
| | | responsiblePerson: undefined, // 责任人 |
| | | filingDate: dayjs().format("YYYY-MM-DD"), // 建档日期 |
| | | // 采购信息 |
| | | supplierName: undefined, // 供应商 |
| | | manufacturer: undefined, // 制造厂商 |
| | | purchaseDate: undefined, // 购置日期 |
| | | originalAssetValue: undefined, // 资产原值 |
| | | unit: undefined, // 单位 |
| | | enableDepreciation: false, // 启用折旧 |
| | | number: undefined, // 数量 |
| | | number: 1, // 数量 |
| | | taxIncludingPriceUnit: undefined, // 含税单价 |
| | | taxIncludingPriceTotal: undefined, // 含税总价 |
| | | taxRate: undefined, // 税率 |
| | | unTaxIncludingPriceTotal: undefined, // 不含税总价 |
| | | // 技术参数 |
| | | technicalParameters: undefined, // 主要技术参数 |
| | | mainPurpose: undefined, // 主要用途 |
| | | // 运行管理 |
| | | status: 1, // 设备状态 0停用 1启用 |
| | | activationDate: undefined, // 启用日期 |
| | | planRuntimeTime: dayjs().format("YYYY-MM-DD"), // 预计运行时间 |
| | | isDepr: 2, // 是否启用折旧 1是 2否 |
| | | annualDepreciationAmount: undefined, // 每年折旧金额 |
| | | storageBlobDTOs: undefined, // 设备图片(提交) |
| | | storageBlobVOs: undefined, // 设备图片(回显) |
| | | createTime: dayjs().format("YYYY-MM-DD"), // 录入日期 |
| | | }); |
| | | |
| | | // 设备图片:CommonUpload 绑 modelValue,改动时同时写回提交/回显两个字段 |
| | | const imageFiles = computed({ |
| | | get: () => form.value.storageBlobVOs || [], |
| | | set: val => { |
| | | form.value.storageBlobDTOs = val; |
| | | form.value.storageBlobVOs = val; |
| | | }, |
| | | }); |
| | | |
| | | |
| | |
| | | console.log(data); |
| | | |
| | | if (code == 200) { |
| | | // 基本信息 |
| | | form.value.autoGenerateUniqueCode = false; |
| | | form.value.uniqueCode = data.uniqueCode; |
| | | form.value.deviceName = data.deviceName; |
| | | form.value.deviceModel = data.deviceModel; |
| | | form.value.deviceBrand = data.deviceBrand || ''; |
| | | form.value.supplierName = data.supplierName; |
| | | form.value.type = data.type; |
| | | form.value.factoryNumber = data.factoryNumber; |
| | | form.value.storageLocation = data.storageLocation || ''; |
| | | form.value.responsiblePerson = data.responsiblePerson; |
| | | form.value.filingDate = data.filingDate |
| | | ? dayjs(data.filingDate).format("YYYY-MM-DD") |
| | | : undefined; |
| | | |
| | | // 采购信息 |
| | | form.value.supplierName = data.supplierName; |
| | | form.value.manufacturer = data.manufacturer; |
| | | form.value.purchaseDate = data.purchaseDate |
| | | ? dayjs(data.purchaseDate).format("YYYY-MM-DD") |
| | | : undefined; |
| | | form.value.originalAssetValue = data.originalAssetValue; |
| | | form.value.unit = data.unit; |
| | | form.value.enableDepreciation = !!data.enableDepreciation; |
| | | form.value.number = data.number; |
| | | form.value.taxIncludingPriceUnit = data.taxIncludingPriceUnit; |
| | | form.value.taxIncludingPriceTotal = data.taxIncludingPriceTotal; |
| | | form.value.taxRate = data.taxRate; |
| | | form.value.unTaxIncludingPriceTotal = data.unTaxIncludingPriceTotal; |
| | | |
| | | // 技术参数 |
| | | form.value.technicalParameters = data.technicalParameters; |
| | | form.value.mainPurpose = data.mainPurpose; |
| | | |
| | | // 运行管理 |
| | | form.value.status = data.status != null ? data.status : 1; |
| | | form.value.activationDate = data.activationDate |
| | | ? dayjs(data.activationDate).format("YYYY-MM-DD") |
| | | : undefined; |
| | | form.value.planRuntimeTime = data.planRuntimeTime |
| | | ? dayjs(data.planRuntimeTime).format("YYYY-MM-DD") |
| | | : undefined; |
| | | form.value.isDepr = data.isDepr != null ? data.isDepr : 2; |
| | | form.value.annualDepreciationAmount = data.annualDepreciationAmount; |
| | | form.value.storageBlobVOs = toFileList(data.storageBlobVOs); |
| | | form.value.storageBlobDTOs = form.value.storageBlobVOs; |
| | | |
| | | form.value.createTime = data.createTime; |
| | | |
| | | |
| | | // 数据加载完成后,重置表单验证状态 |
| | | setTimeout(() => { |
| | | clearValidate(); |
| | |
| | | |
| | | // 数学计算 |
| | | const mathNum = () => { |
| | | // 只有在新增模式或者字段确实为空时才显示提示 |
| | | if (operationType.value !== 'edit' || (form.value.taxIncludingPriceUnit === undefined || form.value.taxIncludingPriceUnit === '')) { |
| | | if (!form.value.taxIncludingPriceUnit) { |
| | | showToast("请输入单价"); |
| | | return; |
| | | } |
| | | if (operationType.value !== 'edit' || (form.value.number === undefined || form.value.number === '')) { |
| | | if (!form.value.number) { |
| | | showToast("请输入数量"); |
| | | return; |
| | | } |
| | |
| | | let errorMessage = ''; |
| | | |
| | | // 检查文本类型必填字段 |
| | | if (!form.value.deviceName) { |
| | | if (!form.value.autoGenerateUniqueCode && !form.value.uniqueCode) { |
| | | isValid = false; |
| | | errorMessage = '请输入设备编号'; |
| | | } else if (!form.value.deviceName) { |
| | | isValid = false; |
| | | errorMessage = '请输入设备名称'; |
| | | } else if (!form.value.deviceModel) { |
| | | isValid = false; |
| | | errorMessage = '请输入规格型号'; |
| | | } else if (!form.value.type) { |
| | | isValid = false; |
| | | errorMessage = '请选择设备类型'; |
| | | } else if (!form.value.supplierName) { |
| | | isValid = false; |
| | | errorMessage = '请输入供应商'; |
| | | } else if (!form.value.unit) { |
| | | isValid = false; |
| | | errorMessage = '请输入单位'; |
| | | } else if (form.value.status === undefined || form.value.status === null || form.value.status === '') { |
| | | isValid = false; |
| | | errorMessage = '请选择设备状态'; |
| | | } else if (form.value.isDepr === 1 && !form.value.annualDepreciationAmount) { |
| | | isValid = false; |
| | | errorMessage = '请输入每年折旧金额'; |
| | | } else if (!form.value.planRuntimeTime) { |
| | | isValid = false; |
| | | errorMessage = '请选择预计运行时间'; |
| | | } |
| | | |
| | | // 检查数字类型必填字段 |