gaoluyang
3 天以前 77861fcc5ee1c4f8e7c6412b373cb438c7313930
src/pages/equipmentManagement/ledger/detail.vue
@@ -1,10 +1,10 @@
<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>
@@ -22,13 +22,13 @@
                  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"
@@ -36,13 +36,13 @@
                  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"
@@ -50,13 +50,13 @@
                  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"
@@ -186,9 +186,46 @@
   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: "请选择" }],
};
@@ -218,6 +255,8 @@
   }
   try {
      const { code, data } = await getLedgerById(id);
      console.log(data);
      if (code == 200) {
         form.value.deviceName = data.deviceName;
         form.value.deviceModel = data.deviceModel;
@@ -232,6 +271,11 @@
         form.value.taxRate = data.taxRate;
         form.value.unTaxIncludingPriceTotal = data.unTaxIncludingPriceTotal;
         form.value.createTime = data.createTime;
         // 数据加载完成后,重置表单验证状态
         setTimeout(() => {
            clearValidate();
         }, 100);
      }
   } catch (e) {
      showToast('获取详情失败');
@@ -240,11 +284,12 @@
// 数学计算
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;
   }
@@ -265,47 +310,65 @@
   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);
      
@@ -316,47 +379,52 @@
         }, 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;
};
// 选择税率