| | |
| | | <template> |
| | | <el-form :model="form" label-width="120px" :rules="formRules" ref="formRef"> |
| | | <el-divider content-position="left">基础信息</el-divider> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设备编号" prop="uniqueCode"> |
| | | <div style="display: flex; gap: 10px; width: 100%;"> |
| | | <el-checkbox |
| | | v-model="form.autoGenerateUniqueCode" |
| | | v-if="operationType === 'add'" |
| | | >自动生成 |
| | | </el-checkbox> |
| | | <el-input |
| | | v-model="form.uniqueCode" |
| | | :placeholder="form.autoGenerateUniqueCode ? '保存后自动生成' : '请输入设备编号'" |
| | | :disabled="form.autoGenerateUniqueCode || operationType === 'view'" |
| | | clearable |
| | | /> |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设备名称" prop="deviceName"> |
| | | <el-input v-model="form.deviceName" placeholder="请输入设备名称" /> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="供应商" prop="supplierName"> |
| | | <el-input v-model="form.supplierName" placeholder="请输入供应商" /> |
| | | <el-form-item label="出厂编号" prop="factoryNumber"> |
| | | <el-input v-model="form.factoryNumber" placeholder="请输入出厂编号" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="单位" prop="unit"> |
| | | <el-input v-model="form.unit" placeholder="请输入单位" /> |
| | | <el-form-item label="责任人" prop="responsiblePerson"> |
| | | <el-input v-model="form.responsiblePerson" placeholder="请输入责任人" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="启用折旧" prop="isDepr"> |
| | | <el-switch v-model="form.isDepr" :active-value="1" :inactive-value="2" /> |
| | | <el-form-item label="建档日期" prop="filingDate"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="form.filingDate" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | type="date" |
| | | placeholder="请选择建档日期" |
| | | clearable |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12" v-if="form.isDepr === 1"> |
| | | <el-form-item label="每年折旧金额" prop="annualDepreciationAmount"> |
| | | <el-input-number |
| | | :step="0.01" |
| | | :min="0" |
| | | </el-row> |
| | | |
| | | <el-divider content-position="left">采购信息</el-divider> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="供应商" prop="supplierName"> |
| | | <el-input v-model="form.supplierName" placeholder="请输入供应商" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="制造厂商" prop="manufacturer"> |
| | | <el-input v-model="form.manufacturer" placeholder="请输入制造厂商" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="购置日期" prop="purchaseDate"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="form.annualDepreciationAmount" |
| | | placeholder="请输入每年折旧金额" |
| | | v-model="form.purchaseDate" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | type="date" |
| | | placeholder="请选择购置日期" |
| | | clearable |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="资产原值" prop="originalAssetValue"> |
| | | <el-input-number :step="0.01" :min="0" style="width: 100%" |
| | | v-model="form.originalAssetValue" |
| | | placeholder="请输入资产原值" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="单位" prop="unit"> |
| | | <el-input v-model="form.unit" placeholder="请输入单位" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <!-- <el-col :span="12"> |
| | | <el-form-item label="录入人" prop="createUser"> |
| | | <el-input v-model="form.createUser" placeholder="请输入录入人" /> |
| | | </el-row> |
| | | |
| | | <el-divider content-position="left">技术参数</el-divider> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="主要技术参数" prop="technicalParameters"> |
| | | <el-input type="textarea" :rows="3" v-model="form.technicalParameters" placeholder="请输入主要技术参数" /> |
| | | </el-form-item> |
| | | </el-col> --> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="主要用途" prop="mainPurpose"> |
| | | <el-input type="textarea" :rows="3" v-model="form.mainPurpose" placeholder="请输入主要用途" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-divider content-position="left">运行管理</el-divider> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="录入日期" prop="createTime"> |
| | | <el-form-item label="设备状态" prop="status"> |
| | | <el-select |
| | | v-model="form.status" |
| | | placeholder="请选择" |
| | | :disabled="operationType === 'edit'" |
| | | style="width: 100%" |
| | | > |
| | | <el-option label="停用" :value="0" /> |
| | | <el-option label="启用" :value="1" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="启用日期" prop="activationDate"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="form.createTime" |
| | | v-model="form.activationDate" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | value-format="YYYY-MM-DD" |
| | | type="date" |
| | | placeholder="请选择录入日期" |
| | | placeholder="请选择启用日期" |
| | | clearable |
| | | /> |
| | | </el-form-item> |
| | |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | type="date" |
| | | placeholder="请选择录入日期" |
| | | placeholder="请选择预计运行时间" |
| | | clearable |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="启用折旧" prop="isDepr"> |
| | | <el-switch v-model="form.isDepr" :active-value="1" :inactive-value="2" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12" v-if="form.isDepr === 1"> |
| | | <el-form-item label="每年折旧金额" prop="annualDepreciationAmount"> |
| | | <el-input-number |
| | | :step="0.01" |
| | | :min="0" |
| | | style="width: 100%" |
| | | v-model="form.annualDepreciationAmount" |
| | | placeholder="请输入每年折旧金额" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | |
| | | <el-col :span="24"> |
| | | <el-form-item label="设备图片" prop="storageBlobDTOs"> |
| | | <AttachmentUploadImage |
| | |
| | | |
| | | <script setup> |
| | | import useFormData from "@/hooks/useFormData"; |
| | | // import useUserStore from "@/store/modules/user"; |
| | | import { getLedgerById } from "@/api/equipmentManagement/ledger"; |
| | | import dayjs from "dayjs"; |
| | | import { |
| | |
| | | name: "设备台账表单", |
| | | }); |
| | | const formRef = ref(null); |
| | | const operationType = ref(''); |
| | | const operationType = ref('add'); |
| | | // 设备类型固定选项 |
| | | const deviceTypeOptions = ref([ |
| | | '生产设备', |
| | |
| | | '其他设备' |
| | | ]); |
| | | const formRules = { |
| | | uniqueCode: [ |
| | | { |
| | | validator: (rule, value, callback) => { |
| | | if (!form.autoGenerateUniqueCode && (value === undefined || value === null || value === '')) { |
| | | callback(new Error('请输入设备编号')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }, |
| | | trigger: "blur" |
| | | } |
| | | ], |
| | | deviceName: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | deviceModel: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | type: [{ required: true, trigger: "change", message: "请选择或输入设备类型" }], |
| | |
| | | taxIncludingPriceUnit: [{ required: true, trigger: "blur", message: "请输入" }], |
| | | taxRate: [{ required: true, trigger: "change", message: "请输入" }], |
| | | planRuntimeTime: [{ required: true, trigger: "change", message: "请选择" }], |
| | | status: [{ required: true, trigger: "change", message: "请选择" }], |
| | | annualDepreciationAmount: [ |
| | | { |
| | | validator: (rule, value, callback) => { |
| | |
| | | } |
| | | |
| | | const { form, resetForm } = useFormData({ |
| | | // Basic Info |
| | | autoGenerateUniqueCode: true, |
| | | uniqueCode: undefined, // 唯一性编号 |
| | | deviceName: undefined, // 设备名称 |
| | | deviceModel: undefined, // 规格型号 |
| | | deviceBrand: undefined, // 设备品牌 |
| | | type: undefined, // 设备类型 |
| | | supplierName: undefined, // 供应商 |
| | | factoryNumber: undefined, // 出厂编号 |
| | | storageLocation: undefined, // 存放位置 |
| | | isDepr: 2, // 是否启用折旧 1-是 2-否 |
| | | annualDepreciationAmount: undefined, // 每年折旧金额 |
| | | responsiblePerson: undefined, // 责任人 |
| | | filingDate: dayjs().format("YYYY-MM-DD"), // 建档日期 |
| | | |
| | | // Purchase Info |
| | | supplierName: undefined, // 供应商 |
| | | manufacturer: undefined, // 制造厂商 |
| | | purchaseDate: undefined, // 购置日期 |
| | | originalAssetValue: undefined, // 资产原值 |
| | | unit: undefined, // 单位 |
| | | number: 1, // 数量 |
| | | taxIncludingPriceUnit: undefined, // 含税单价 |
| | | taxIncludingPriceTotal: undefined, // 含税总价 |
| | | taxRate: undefined, // 税率 |
| | | unTaxIncludingPriceTotal: undefined, // 不含税总价 |
| | | // createUser: useUserStore().nickName, // 录入人 |
| | | createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), // 录入日期 |
| | | planRuntimeTime: dayjs().format("YYYY-MM-DD"), // 录入日期 |
| | | |
| | | // Technical Specs |
| | | technicalParameters: undefined, // 主要技术参数 |
| | | mainPurpose: undefined, // 主要用途 |
| | | |
| | | // Operation Info |
| | | status: 1, // 设备状态 (0停用 1启用) |
| | | activationDate: undefined, // 启用日期 |
| | | planRuntimeTime: dayjs().format("YYYY-MM-DD"), // 预计运行时间 |
| | | isDepr: 2, // 是否启用折旧 1-是 2-否 |
| | | annualDepreciationAmount: undefined, // 每年折旧金额 |
| | | storageBlobDTOs: undefined, // 设备图片提交 |
| | | storageBlobVOs: undefined, // 设备图片展示 |
| | | }); |
| | |
| | | |
| | | const loadForm = async (id) => { |
| | | if (id) { |
| | | operationType.value = 'edit' |
| | | operationType.value = 'edit'; |
| | | } else { |
| | | operationType.value = 'add'; |
| | | } |
| | | const { code, data } = await getLedgerById(id); |
| | | if (code == 200) { |
| | | form.autoGenerateUniqueCode = false; |
| | | form.uniqueCode = data.uniqueCode; |
| | | form.deviceName = data.deviceName; |
| | | form.deviceModel = data.deviceModel; |
| | | form.deviceBrand = data.deviceBrand; |
| | | form.type = data.type; |
| | | form.supplierName = data.supplierName; |
| | | form.factoryNumber = data.factoryNumber; |
| | | form.storageLocation = data.storageLocation; |
| | | form.isDepr = data.isDepr; |
| | | form.annualDepreciationAmount = data.annualDepreciationAmount; |
| | | form.responsiblePerson = data.responsiblePerson; |
| | | form.filingDate = data.filingDate; |
| | | |
| | | form.supplierName = data.supplierName; |
| | | form.manufacturer = data.manufacturer; |
| | | if (data.purchaseDate) { |
| | | form.purchaseDate = dayjs(data.purchaseDate).format('YYYY-MM-DD'); |
| | | } |
| | | form.originalAssetValue = data.originalAssetValue; |
| | | form.unit = data.unit; |
| | | form.number = 1; |
| | | form.taxIncludingPriceUnit = data.taxIncludingPriceUnit; |
| | | form.taxIncludingPriceTotal = data.taxIncludingPriceTotal; |
| | | form.taxRate = data.taxRate; |
| | | form.unTaxIncludingPriceTotal = data.unTaxIncludingPriceTotal; |
| | | form.createTime = data.createTime; |
| | | |
| | | form.technicalParameters = data.technicalParameters; |
| | | form.mainPurpose = data.mainPurpose; |
| | | |
| | | form.status = data.status != null ? data.status : 1; |
| | | if (data.activationDate) { |
| | | form.activationDate = dayjs(data.activationDate).format('YYYY-MM-DD'); |
| | | } |
| | | form.isDepr = data.isDepr; |
| | | form.annualDepreciationAmount = data.annualDepreciationAmount; |
| | | |
| | | // 预计运行时间:后端返回后转为 YYYY-MM-DD 以便日期选择器正确展示 |
| | | if (data.planRuntimeTime) { |
| | | form.planRuntimeTime = dayjs(data.planRuntimeTime).format('YYYY-MM-DD'); |
| | |
| | | // 重置表单数据和校验状态 |
| | | const resetFormAndValidate = () => { |
| | | resetForm(); |
| | | operationType.value = 'add'; // 重置为新增 |
| | | clearValidate(); |
| | | }; |
| | | |