chenhj
3 天以前 55853d1a56d123b798bb30b53cb0dfefbeacb1a2
报工详情
已添加1个文件
已修改2个文件
194 ■■■■■ 文件已修改
src/views/productionManagement/productionReporting/components/Detail.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/workOrder/components/ProductionRecordForm.vue 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/workOrder/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionReporting/components/Detail.vue
@@ -1,5 +1,5 @@
<script setup lang="ts">
import {computed} from "vue";
import {computed, onMounted} from "vue";
defineOptions({
  name: "ReportingDetail"
@@ -23,6 +23,17 @@
  set: (value: boolean) => emits("update:isShow", value),
});
const otherData = ref([])
const init = () => {
  if (props.row.otherData !== null && props.row.otherData !== '') {
    otherData.value = JSON.parse(props.row.otherData);
  }
};
onMounted(() => {
  init();
})
</script>
<template>
@@ -40,6 +51,12 @@
      <el-descriptions-item label="报废数量">{{ row.quantity || '-' }}</el-descriptions-item>
      <el-descriptions-item label="单位">{{ row.scrapQty || '-' }}</el-descriptions-item>
      <el-descriptions-item label="创建时间">{{ row.createTime || '-' }}</el-descriptions-item>
      <el-descriptions-item
          v-for="item in otherData"
          :label="`${item.parameterItem}`"
      >
        {{ item.value || '-' }}
      </el-descriptions-item>
    </el-descriptions>
    <template #footer>
        <span class="dialog-footer">
src/views/productionManagement/workOrder/components/ProductionRecordForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,146 @@
<script setup lang="ts">
import {computed, reactive, ref, watch} from "vue";
import {getDeviceLedger} from "@/api/equipmentManagement/ledger";
defineOptions({
  name: "ProductionRecordForm"
});
const props = defineProps({
  list: {
    type: Array,
    default() {
      return [];
    }
  }
});
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 deviceOptions = ref([]);
const loadDeviceName = async () => {
  const {data} = await getDeviceLedger();
  deviceOptions.value = data;
};
const initData = () => {
  formData.list = props.list || [];
  formData.list.forEach(item => {
    if (item.value === undefined) {
      item.value = null;
    }
  });
  loadDeviceName()
};
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="120px">
    <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-select
          v-else-if="getType(item) === '机台选择'"
          v-model="item.value"
          placeholder="请选择"
          clearable
          style="width: 100%"
      >
        <el-option
            v-for="(item, index) in deviceOptions"
            :key="index"
            :label="item.deviceName"
            :value="item.deviceName"
        ></el-option>
      </el-select>
      <el-input
          v-else
          v-model="item.value"
          placeholder="请输入"
          clearable
      />
    </el-form-item>
  </el-form>
</template>
src/views/productionManagement/workOrder/index.vue
@@ -211,6 +211,7 @@
                       :value="user.userId"/>
          </el-select>
        </el-form-item>
        <ProductionRecordForm ref="productionRecordFormRef" :list="processParamList"/>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
@@ -250,12 +251,16 @@
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 {priority_type} = proxy.useDict("priority_type");
const CopperPrintingForm = defineAsyncComponent(() => import("./components/CopperPrintingForm.vue"));
const VoltageSortingForm = defineAsyncComponent(() => import("./components/VoltageSortingForm.vue"));
const ProductionRecordForm = defineAsyncComponent(() => import("./components/ProductionRecordForm.vue"));
const tableColumn = ref([
  {
    label: "优先级",
@@ -401,7 +406,9 @@
  productProcessRouteItemId: "",
  userId: "",
  productMainId: null,
  otherData: {}
});
const productionRecordFormRef = ref();
// æœ¬æ¬¡ç”Ÿäº§æ•°é‡éªŒè¯è§„则
const validateQuantity = (rule, value, callback) => {
@@ -631,7 +638,22 @@
      });
};
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;
  if (row.processName === '印铜' || row.processName === '印银') {
    copperPrintingFormVisible.value = true
@@ -641,6 +663,7 @@
    voltageSortingFormVisible.value = true
    return;
  }
  processParamList.value = await getProcessParamList(row)
  reportForm.planQuantity = row.planQuantity;
  reportForm.quantity = row.quantity !== undefined && row.quantity !== null ? row.quantity : null;
  reportForm.productProcessRouteItemId = row.productProcessRouteItemId;
@@ -670,7 +693,9 @@
  workOrderFilesRef.value?.openDialog(row);
};
const handleReport = () => {
const handleReport = async () => {
  const data = await productionRecordFormRef.value.submitData()
  reportForm.otherData = JSON.stringify(data || {});
  reportFormRef.value?.validate((valid) => {
    if (!valid) {
      return false;