chenhj
4 小时以前 4b64310ae6edb6db229d1c72d5484ff947fb360f
Merge branch 'dev_长治_健齿齿科器材' of http://114.132.189.42:9002/r/product-inventory-management into dev_长治_健齿齿科器材
已添加1个文件
已修改4个文件
268 ■■■■■ 文件已修改
src/views/equipmentManagement/ledger/Form.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/ledger/index.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionProcess/index.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/workOrder/components/ProductionRecordForm.vue 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/workOrder/index.vue 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/ledger/Form.vue
@@ -2,6 +2,11 @@
  <el-form :model="form" label-width="120px" :rules="formRules" ref="formRef">
    <el-row :gutter="20">
      <el-col :span="12">
        <el-form-item label="设备编号" prop="deviceCode">
          <el-input v-model="form.deviceCode" placeholder="请输入设备编号" />
        </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>
@@ -40,6 +45,14 @@
      <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="转数(转/min)" prop="rpm">
          <el-input-number :min="0" style="width: 100%"
                           v-model="form.rpm"
                           placeholder="请输入转数"
          />
        </el-form-item>
      </el-col>
      <el-col :span="12">
@@ -147,8 +160,8 @@
          />
        </el-form-item>
      </el-col>
            <el-col :span="12">
                <el-form-item label="预计运行时间" prop="planRuntimeTime">
      <el-col :span="12">
        <el-form-item label="预计运行时间" prop="planRuntimeTime">
                    <el-date-picker
                        style="width: 100%"
                        v-model="form.planRuntimeTime"
@@ -190,6 +203,7 @@
  '其他设备'
]);
const formRules = {
    deviceCode: [{ required: true, trigger: "blur", message: "请输入设备编号" }],
    deviceName: [{ required: true, trigger: "blur", message: "请输入" }],
    deviceModel: [{ required: true, trigger: "blur", message: "请输入" }],
    type: [{ required: true, trigger: "change", message: "请选择或输入设备类型" }],
@@ -214,6 +228,7 @@
}
const { form, resetForm } = useFormData({
  deviceCode: undefined, // è®¾å¤‡ç¼–号
  deviceName: undefined, // è®¾å¤‡åç§°
  deviceModel: undefined, // è§„格型号
  deviceBrand: undefined, // è®¾å¤‡å“ç‰Œ
@@ -239,6 +254,7 @@
    }
  const { code, data } = await getLedgerById(id);
  if (code == 200) {
    form.deviceCode = data.deviceCode;
    form.deviceName = data.deviceName;
    form.deviceModel = data.deviceModel;
    form.deviceBrand = data.deviceBrand;
src/views/equipmentManagement/ledger/index.vue
@@ -122,6 +122,10 @@
  },
  [
    {
      label: "设备编号",
      prop: "deviceCode",
    },
    {
      label: "设备名称",
      prop: "deviceName",
    },
@@ -142,6 +146,10 @@
      prop: "supplierName",
    },
    {
      label: "转数(转/min)",
      prop: "rpm",
    },
    {
      label: "存放位置",
      prop: "storageLocation",
    },
src/views/productionManagement/productionProcess/index.vue
@@ -223,7 +223,7 @@
      width: 350,
      operation: [
        {
          name: "查看",
          name: "生产参数",
          type: "text",
          clickFun: row => {
            showProcessParamModal(row);
@@ -293,6 +293,7 @@
  // è®¾å¤‡åˆ—表列配置
  const deviceColumns = ref([
    { label: "设备编号", prop: "deviceCode" },
    { label: "设备名称", prop: "deviceName" },
    { label: "规格型号", prop: "deviceModel" },
    { label: "设备品牌", prop: "deviceBrand" },
@@ -318,6 +319,7 @@
  // å¯é€‰è®¾å¤‡åˆ—表列配置
  const selectDeviceColumns = ref([
    { label: "设备编号", prop: "deviceCode" },
    { label: "设备名称", prop: "deviceName" },
    { label: "规格型号", prop: "deviceModel" },
    { label: "设备品牌", prop: "deviceBrand" },
src/views/productionManagement/workOrder/components/ProductionRecordForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,128 @@
<script setup lang="ts">
import {computed, reactive, ref, watch} from "vue";
defineOptions({
  name: "ProductionRecordForm"
});
const props = defineProps({
  list: {
    type: Array,
    default() {
      return [];
    }
  },
  labelWidth: {
    type: Number,
    default: 120
  }
});
const formRef = ref();
const formData = reactive({
  list: [] as any[],
});
const fieldLabel = (item: any) => {
  if (!item.unit || item.unit === "/") {
    return item.parameterItem;
  }
  return `${item.parameterItem}(${item.unit})`;
};
const getType = (item: any) => item.type || "文本格式";
const rules = computed(() => {
  const result: Record<string, any[]> = {};
  formData.list.forEach((item, index) => {
    if (String(item.isRequired) === "1") {
      result[`list.${index}.value`] = [{required: true, message: `请输入${item.parameterItem}`, trigger: "blur"}];
    }
  });
  return result;
});
const initData = () => {
  formData.list = props.list || [];
  formData.list.forEach(item => {
    if (item.value === undefined) {
      item.value = null;
    }
  });
};
const submitData = async () => {
  const valid = await formRef.value.validate().catch(() => false)
  if (valid) {
    return formData.list
  } else {
    return null
  }
}
watch(
    () => props.list,
    () => {
      initData();
    },
    {immediate: true, deep: true}
);
defineExpose({
  submitData
})
</script>
<template>
  <el-form ref="formRef" :model="formData" :rules="rules" :label-width="`${labelWidth}px`">
    <el-form-item
        v-for="(item, index) in formData.list"
        :key="item.id"
        :label="fieldLabel(item)"
        :prop="`list.${index}.value`"
    >
      <el-input-number
          v-if="getType(item) === '数值格式'"
          v-model="item.value"
          :controls="false"
          style="width: 100%"
          placeholder="请输入"
      />
      <el-date-picker
          v-else-if="getType(item) === '时间格式'"
          v-model="item.value"
          type="datetime"
          value-format="YYYY-MM-DD HH:mm:ss"
          format="YYYY-MM-DD HH:mm:ss"
          placeholder="请选择"
          style="width: 100%"
      />
      <el-date-picker
          v-else-if="getType(item) === '日期格式'"
          v-model="item.value"
          type="date"
          value-format="YYYY-MM-DD"
          format="YYYY-MM-DD"
          placeholder="请选择"
          style="width: 100%"
      />
      <el-select
          v-else-if="getType(item) === '是/否选框'"
          v-model="item.value"
          placeholder="请选择"
          clearable
          style="width: 100%"
      >
        <el-option label="是" value="是"/>
        <el-option label="否" value="否"/>
      </el-select>
      <el-input
          v-else
          v-model="item.value"
          placeholder="请输入"
          clearable
      />
    </el-form-item>
  </el-form>
</template>
src/views/productionManagement/workOrder/index.vue
@@ -229,6 +229,30 @@
                       :value="user.userId" />
          </el-select>
        </el-form-item>
        <el-form-item label="设备选择">
          <el-select v-model="reportForm.deviceId"
                     style="width: 300px"
                     placeholder="请选择设备"
                     clearable
                     filterable
                     @change="handleDeviceChange">
            <el-option v-for="device in deviceOptions"
                       :key="device.id"
                       :label="device.deviceName"
                       :value="device.id" />
          </el-select>
        </el-form-item>
        <el-form-item v-if="currentDevice" label="设备编号">
          <el-input v-model="currentDevice.deviceCode"
                    disabled
                    style="width: 300px" />
        </el-form-item>
        <el-form-item v-if="currentDevice" label="转数">
          <el-input v-model="currentDevice.rpm"
                    disabled
                    style="width: 300px" />
        </el-form-item>
        <ProductionRecordForm ref="productionRecordFormRef" :list="processParamList"/>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
@@ -243,7 +267,7 @@
</template>
<script setup>
  import { onMounted, ref, nextTick } from "vue";
  import { onMounted, ref, nextTick, computed } from "vue";
  import { ElMessageBox } from "element-plus";
  import dayjs from "dayjs";
  import {
@@ -253,10 +277,17 @@
    downProductWorkOrder,
  } from "@/api/productionManagement/workOrder.js";
  import { getUserProfile, userListNoPageByTenantId } from "@/api/system/user.js";
  import { getBindDevices } from "@/api/productionManagement/productionProcess.js";
  import QRCode from "qrcode";
  import { getCurrentInstance, reactive, toRefs } from "vue";
  import FilesDia from "./components/filesDia.vue";
  import {
    listPage as listProcessParamPage,
  } from "@/api/productionManagement/productProcessParameter.js";
  const { proxy } = getCurrentInstance();
  const ProductionRecordForm = defineAsyncComponent(() => import("./components/ProductionRecordForm.vue"));
  const tableColumn = ref([
    {
@@ -384,6 +415,7 @@
  const workOrderFilesRef = ref(null);
  const reportFormRef = ref(null);
  const userOptions = ref([]);
  const deviceOptions = ref([]);
  const reportForm = reactive({
    planQuantity: 0,
    totalInvestment: 0,
@@ -396,6 +428,16 @@
    productProcessRouteItemId: "",
    userId: "",
    productMainId: null,
    deviceId: null,
    otherData: {
      rows: []
    },
  });
  const productionRecordFormRef = ref();
  const currentDevice = computed(() => {
    if (!reportForm.deviceId) return null;
    return deviceOptions.value.find(device => device.id === reportForm.deviceId) || null;
  });
  // æŠ•入总量验证规则
@@ -715,8 +757,24 @@
      });
  };
  const showReportDialog = row => {
  const processParamPage = reactive({
    current: 1,
    size: 9999,
    total: 0,
  });
  const getProcessParamList = async (row) => {
    const params = {
      processId: row.processId,
      ...processParamPage,
    };
    const res = await listProcessParamPage(params)
    return res.data.records
  };
  const processParamList = ref([])
  const showReportDialog = async row => {
    currentReportRowData.value = row;
    processParamList.value = await getProcessParamList(row)
    reportForm.planQuantity = row.planQuantity;
    reportForm.totalInvestment = row.totalInvestment;
    reportForm.quantity =
@@ -728,6 +786,11 @@
    reportForm.inspectedQuantity = row.inspectedQuantity;
    reportForm.scrapQty =
      row.scrapQty !== undefined && row.scrapQty !== null ? row.scrapQty : null;
    reportForm.deviceId = row.deviceId || null;
    // èŽ·å–å·¥åºç»‘å®šè®¾å¤‡åˆ—è¡¨
    getDeviceList(row.processId);
    nextTick(() => {
      reportFormRef.value?.clearValidate();
    });
@@ -750,7 +813,16 @@
    workOrderFilesRef.value?.openDialog(row);
  };
  const handleReport = () => {
  const handleReport = async () => {
    try {
      const data = await productionRecordFormRef.value.submitData();
      console.log("生产记录表单数据:", data);
      reportForm.otherData.rows = data || [];
    } catch (error) {
      console.error("获取生产记录表单数据失败", error);
      return;
    }
    reportFormRef.value?.validate(valid => {
      if (!valid) {
        return false;
@@ -810,9 +882,9 @@
        ...reportForm,
        quantity: quantity,
        scrapQty: scrapQty,
        otherData: JSON.stringify(reportForm.otherData)
      };
      // console.log(submitData);
      addProductMain(submitData).then(res => {
        if (res.code === 200) {
          proxy.$modal.msgSuccess("报工成功");
@@ -823,6 +895,11 @@
            confirmButtonText: "确定",
          });
        }
      }).catch(err => {
        console.error("报工失败", err);
        ElMessageBox.alert("报工失败", "提示", {
          confirmButtonText: "确定",
        });
      });
    });
  };
@@ -840,6 +917,24 @@
      });
  };
  // èŽ·å–è®¾å¤‡åˆ—è¡¨
  const getDeviceList = (processId) => {
    if (!processId) {
      deviceOptions.value = [];
      return;
    }
    getBindDevices(processId)
      .then(res => {
        if (res.code === 200) {
          deviceOptions.value = res.data || [];
        }
      })
      .catch(err => {
        console.error("获取设备列表失败", err);
        deviceOptions.value = [];
      });
  };
  // ç”¨æˆ·é€‰æ‹©å˜åŒ–æ—¶æ›´æ–° userName
  const handleUserChange = userId => {
    if (userId) {
@@ -852,6 +947,11 @@
    }
  };
  // è®¾å¤‡é€‰æ‹©å˜åŒ–æ—¶æ›´æ–° deviceId
  const handleDeviceChange = deviceId => {
    reportForm.deviceId = deviceId;
  };
  onMounted(() => {
    getList();
    getUserList();