张诺
2025-07-25 50b6007b336a65b7deb6c77c9fdc608865067608
昭德改善销售数量
已修改4个文件
188 ■■■■■ 文件已修改
src/views/equipment/management/mould/equipmentRequisitionDialog.vue 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesOutbound/components/formDia.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesOutbound/index.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warehouseManagement/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipment/management/mould/equipmentRequisitionDialog.vue
@@ -1,7 +1,9 @@
<template>
  <el-dialog
    v-model="visible"
    :title="isReturnMode ? '设备归还' : (isEdit ? '编辑设备领用' : '新增设备领用')"
    :title="
      isReturnMode ? '设备归还' : isEdit ? '编辑设备领用' : '新增设备领用'
    "
    width="600px"
    @close="handleClose"
  >
@@ -35,7 +37,21 @@
          />
        </el-select>
      </el-form-item>
      <el-form-item label="设备库存" prop="equipmentStock" v-if="!isReturnMode && formData.status !== 2">
      <el-form-item label="是否为消耗品" prop="isConsumables">
        <el-select
          :model-value="currentConsumables"
          placeholder="请选择是否为耗材类型"
          :disabled="true"
        >
          <el-option label="是" :value="true" />
          <el-option label="否" :value="false" />
        </el-select>
      </el-form-item>
      <el-form-item
        label="设备库存"
        prop="equipmentStock"
        v-if="!isReturnMode && formData.status !== 2"
      >
        <el-input
          :value="
            equipmentList.find((item) => item.id == form.equipmentId)
@@ -52,14 +68,22 @@
          style="width: 100%"
        />
      </el-form-item>
      <el-form-item label="已归还数量" prop="returnedQuantity" v-if="isReturnMode">
      <el-form-item
        label="已归还数量"
        prop="returnedQuantity"
        v-if="isReturnMode"
      >
        <el-input
          :value="formData.totalReturnNo || 0"
          disabled
          style="width: 100%"
        />
      </el-form-item>
      <el-form-item label="领用数量" prop="usageQuantity" v-if="!isReturnMode && formData.status !== 2">
      <el-form-item
        label="领用数量"
        prop="usageQuantity"
        v-if="!isReturnMode && formData.status !== 2"
      >
        <el-input-number
          v-model="form.usageQuantity"
          :min="1"
@@ -73,7 +97,11 @@
          >(最多{{ maxQuantity }}台)</span
        >
      </el-form-item>
      <el-form-item label="本次归还数量" prop="returnQuantity" v-if="isReturnMode">
      <el-form-item
        label="本次归还数量"
        prop="returnQuantity"
        v-if="isReturnMode"
      >
        <el-input-number
          v-model="form.returnQuantity"
          :min="1"
@@ -86,21 +114,26 @@
          v-if="remainingReturnQuantity > 0"
          >(最多{{ remainingReturnQuantity }}台)</span
        >
        <span
          style="color: #67c23a; font-size: 12px; margin-left: 8px"
          v-else
        <span style="color: #67c23a; font-size: 12px; margin-left: 8px" v-else
          >(已全部归还)</span
        >
        <!-- 归还完成提示 -->
        <div
          v-if="remainingReturnQuantity > 0 && form.returnQuantity === remainingReturnQuantity"
        <div
          v-if="
            remainingReturnQuantity > 0 &&
            form.returnQuantity === remainingReturnQuantity
          "
          style="color: #67c23a; font-size: 12px; margin-top: 4px"
        >
          💡 提示:本次归还后将完成全部归还
        </div>
      </el-form-item>
      <!-- 使用开始时间 - 只在非归还模式显示 -->
      <el-form-item label="使用开始时间" prop="usageStartTime" v-if="!isReturnMode">
      <el-form-item
        label="使用开始时间"
        prop="usageStartTime"
        v-if="!isReturnMode"
      >
        <el-date-picker
          v-model="form.usageStartTime"
          type="datetime"
@@ -111,7 +144,7 @@
          :disabled="isViewMode"
        />
      </el-form-item>
      <!-- 归还结束时间 - 只在归还模式显示 -->
      <el-form-item label="归还时间" prop="returnTime" v-if="isReturnMode">
        <el-date-picker
@@ -166,7 +199,6 @@
    ElMessage.error("获取设备列表失败");
  }
};
const props = defineProps({
  modelValue: Boolean,
  formData: {
@@ -177,6 +209,23 @@
    type: String,
    default: "add",
  },
});
// 默认表单初始值
const defaultForm = {
  userId: "",
  equipmentId: "",
  usageQuantity: 1,
  usageStartTime: "",
  returnQuantity: 1,
  returnTime: "",
  remarks: "",
};
const form = ref({ ...defaultForm });
const currentConsumables = computed(() => {
  const eq = equipmentList.value.find(item => item.id == form.value.equipmentId);
  return eq ? !!eq.isConsumables : false;
});
const maxQuantity = computed(() => {
  if (!form.value.equipmentId) return 0;
@@ -192,10 +241,18 @@
  get: () => props.modelValue,
  set: (v) => emit("update:modelValue", v),
});
// 监听设备选择变化
watch(
  () => form.value.equipmentId,
  (newId) => {
    if (newId) {
      const eq = equipmentList.value.find(item => item.id == newId);
    }
  }
);
const isViewMode = computed(
  () =>
    props.addOrEdit === "view" ||
    props.addOrEdit === "viewRow"
  () => props.addOrEdit === "view" || props.addOrEdit === "viewRow"
);
// 判断是否为归还模式
@@ -204,35 +261,23 @@
// 计算剩余可归还数量
const remainingReturnQuantity = computed(() => {
  if (!isReturnMode.value || !props.formData.usageQuantity) return 0;
  const totalUsageQuantity = props.formData.usageQuantity || 0; // 总使用数量
  const alreadyReturnedQuantity = props.formData.totalReturnNo || 0; // 已归还数量
  const remaining = totalUsageQuantity - alreadyReturnedQuantity; // 剩余可归还数量
  return Math.max(0, remaining); // 确保不为负数
});
const isEdit = computed(() => !!props.formData?.id);
const formRef = ref();
// 默认表单初始值
const defaultForm = {
  userId: "",
  equipmentId: "",
  usageQuantity: 1,
  usageStartTime: "",
  returnQuantity: 1,
  returnTime: "",
  remarks: "",
};
const form = ref({ ...defaultForm });
// 获取当前日期(YYYY-MM-DD格式)
const getCurrentDate = () => {
  const now = new Date();
  const year = now.getFullYear();
  const month = String(now.getMonth() + 1).padStart(2, '0');
  const day = String(now.getDate()).padStart(2, '0');
  const month = String(now.getMonth() + 1).padStart(2, "0");
  const day = String(now.getDate()).padStart(2, "0");
  return `${year}-${month}-${day}`;
};
@@ -246,12 +291,13 @@
  (val) => {
    if (val && Object.keys(val).length > 0) {
      form.value = { ...val };
      // 归还模式初始化
      if (isReturnMode.value) {
        form.value.returnTime = getCurrentDate();
        const maxReturnQuantity = remainingReturnQuantity.value;
        form.value.returnQuantity = maxReturnQuantity > 0 ? Math.min(1, maxReturnQuantity) : 0;
        form.value.returnQuantity =
          maxReturnQuantity > 0 ? Math.min(1, maxReturnQuantity) : 0;
      }
    } else {
      form.value = { ...defaultForm };
@@ -279,7 +325,9 @@
            if (remaining <= 0) {
              callback(new Error("已全部归还,无法继续归还"));
            } else if (value > remaining) {
              callback(new Error(`归还数量不能大于剩余可归还数量(${remaining}台)`));
              callback(
                new Error(`归还数量不能大于剩余可归还数量(${remaining}台)`)
              );
            } else {
              callback();
            }
@@ -335,60 +383,63 @@
// 防抖后的提交方法
const debouncedSubmit = debounce(handleSubmit, 800);
function handleSubmit () {
function handleSubmit() {
  formRef.value.validate(async (valid) => {
    if (!valid) return;
    let submitData = { ...form.value };
    // 归还模式处理
    if (isReturnMode.value) {
      const currentReturnQuantity = form.value.returnQuantity;
      const totalUsageQuantity = props.formData.usageQuantity;
      const alreadyReturnedQuantity = props.formData.totalReturnNo || 0;
      const newTotalReturnedQuantity = alreadyReturnedQuantity + currentReturnQuantity;
      const newTotalReturnedQuantity =
        alreadyReturnedQuantity + currentReturnQuantity;
      // 判断是否全部归还完成
      let equipmentStatus = 2; // 默认为部分归还
      let isFullyReturned = newTotalReturnedQuantity >= totalUsageQuantity;
      if (isFullyReturned) {
        equipmentStatus = 3; // 全部归还完成
        // 全部归还时的确认提示
        try {
          await ElMessageBox.confirm(
            `确认将设备"${props.formData.equipmentName || '未知设备'}"全部归还吗?归还后设备状态将变为"已归还"。`,
            '确认全部归还',
            `确认将设备"${
              props.formData.equipmentName || "未知设备"
            }"全部归还吗?归还后设备状态将变为"已归还"。`,
            "确认全部归还",
            {
              confirmButtonText: '确认归还',
              cancelButtonText: '取消',
              type: 'success',
              confirmButtonText: "确认归还",
              cancelButtonText: "取消",
              type: "success",
            }
          );
        } catch (error) {
          if (error === 'cancel') {
            ElMessage.info('已取消归还操作');
          if (error === "cancel") {
            ElMessage.info("已取消归还操作");
            return;
          }
        }
        console.log('设备归还完成:', {
        console.log("设备归还完成:", {
          设备名称: props.formData.equipmentName,
          总使用数量: totalUsageQuantity,
          新的归还总数: newTotalReturnedQuantity,
          状态: '已全部归还'
          状态: "已全部归还",
        });
      } else {
        console.log('设备部分归还:', {
        console.log("设备部分归还:", {
          设备名称: props.formData.equipmentName,
          总使用数量: totalUsageQuantity,
          已归还数量: newTotalReturnedQuantity,
          剩余未归还: totalUsageQuantity - newTotalReturnedQuantity,
          状态: '部分归还'
          状态: "部分归还",
        });
      }
      submitData = {
        ...props.formData,
        totalReturnNo: newTotalReturnedQuantity,
@@ -396,22 +447,22 @@
        returnTime: form.value.returnTime,
        equipmentStatus: equipmentStatus,
        remarks: form.value.remarks,
        usageQuantity: totalUsageQuantity
        usageQuantity: totalUsageQuantity,
      };
    }
    try {
      let {code,data} = await addOrEditUsageRecord(submitData);
      let { code, data } = await addOrEditUsageRecord(submitData);
      if (code !== 200) {
        ElMessage.error(data.msg || "操作失败");
        return;
      }
      if(code == 200 && data == 1){
      if (code == 200 && data == 1) {
        emit("submit", submitData);
      }
      handleClose();
    } catch (error) {
      console.error('提交失败:', error);
      console.error("提交失败:", error);
      ElMessage.error("操作失败,请稍后再试");
    }
  });
src/views/salesOutbound/components/formDia.vue
@@ -53,7 +53,7 @@
        <el-row>
          <el-col :span="12">
            <el-form-item label="库存数量" prop="inventoryQuantity">
              <el-input v-model="form.inventoryQuantity" placeholder="请输入销售数量" maxlength="30" type="number" :disabled="operationType === 'view'"/>
              <el-input v-model="form.inventoryQuantity" placeholder="请输入销售数量" maxlength="30" type="number" :disabled="true"/>
            </el-form-item>
          </el-col>
          <el-col :span="12">
src/views/salesOutbound/index.vue
@@ -72,6 +72,7 @@
import {ref, reactive, onMounted} from "vue";
const { proxy } = getCurrentInstance()
import {Delete, Download, Plus} from "@element-plus/icons-vue";
import { ElMessage } from "element-plus";
import ETable from "@/components/Table/ETable.vue";
import Pagination from "@/components/Pagination/index.vue";
import FormDia from "@/views/salesOutbound/components/formDia.vue";
@@ -97,7 +98,8 @@
  { prop: "saleQuantity", label: "销售数量", minWidth: 120 },
  { prop: "salePrice", label: "销售单价(含税)", minWidth: 150 },
  { prop: "totalAmount", label: "销售总价(含税)", minWidth: 120 },
  { prop: "freight", label: "运费", minWidth: 90 },
  { prop: "salesFreight", label: "销售运费", minWidth: 90 },
  { prop: "purchasingFreight", label: "采购运费", minWidth: 90 },
  { prop: "taxCoal", label: "购销煤税率(%)", minWidth: 120 },
  { prop: "taxTrans", label: "运输税率(%)", minWidth: 120 },
  { prop: "grossProfit", label: "毛利润", minWidth: 90 },
@@ -179,12 +181,12 @@
        "数据?"
    )
    .then((res) => {
      if (res) {
        ElMessage.success("正在导出数据,请稍候...");
      if (!res) return;
        exportData(config.api, config.name);
      }
    })
    .catch(() => {});
    .catch(() => {
      ElMessage.error("导出失败,请重试");
    });
};
const exportData = (api, name) => {
  proxy.download(
src/views/warehouseManagement/index.vue
@@ -724,6 +724,7 @@
        "数据?"
    )
    .then((res) => {
      console.log(res);
      if (res) {
        ElMessage.success("正在导出数据,请稍候...");
        exportData(config.api, config.name);
@@ -742,9 +743,9 @@
const mergeRows = (type, row) => {
  getDropdownData();
  coalPlanListOptions();
  if (type === "edit") {
  if (type === "edit" || type === "view") {
    mergeVisible.value = true;
  }
  }
  operationType.value = type;
  if (type !== "merge") {
    mergeForm.value = { ...row };