gaoluyang
2026-09-20 e449a5408265e4bd1f6c66f5be28a42efac444ee
src/pages/equipmentManagement/ledger/detail.vue
@@ -7,6 +7,21 @@
      <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"
@@ -22,13 +37,29 @@
                  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"
@@ -36,13 +67,27 @@
                  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"
@@ -50,13 +95,6 @@
                  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"
@@ -122,7 +160,99 @@
               </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>
@@ -148,7 +278,10 @@
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,
@@ -182,9 +315,8 @@
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: [{
@@ -227,23 +359,68 @@
      }
   }],
   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;
   },
});
@@ -258,20 +435,53 @@
      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();
@@ -284,12 +494,11 @@
// 数学计算
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;
   }
@@ -318,18 +527,33 @@
      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 = '请选择预计运行时间';
      }
      
      // 检查数字类型必填字段