zhangwencui
6 小时以前 a1821feaddca051e1394ab7b3a3c87142c61328b
工序接口对接
已修改4个文件
513 ■■■■■ 文件已修改
src/api/productionManagement/productionProcess.js 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basicData/parameterMaintenance/index.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basicData/product/ProductSelectDialog.vue 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionProcess/index.vue 411 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/productionManagement/productionProcess.js
@@ -66,4 +66,38 @@
    method: "post",
    responseType: "blob",
  });
}
// 获取工序参数列表
export function getProcessParamList(processId) {
  return request({
    url: `/productProcessParam/list/${processId}`,
    method: "get",
  });
}
// 添加工序参数
export function addProcessParam(data) {
  return request({
    url: "/productProcessParam/add",
    method: "post",
    data: data,
  });
}
// 编辑工序参数
export function editProcessParam(data) {
  return request({
    url: "/productProcessParam/edit",
    method: "put",
    data: data,
  });
}
// 删除工序参数
export function deleteProcessParam(id) {
  return request({
    url: `/productProcessParam/${id}`,
    method: "delete",
  });
}
src/views/basicData/parameterMaintenance/index.vue
@@ -109,13 +109,6 @@
                       value="YYYY-MM-DD HH:mm:ss" />
          </el-select>
        </el-form-item>
        <el-form-item label="是否必填"
                      prop="isRequired">
          <el-radio-group v-model="formData.isRequired">
            <el-radio label="1">是</el-radio>
            <el-radio label="0">否</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="备注"
                      prop="remark">
          <el-input v-model="formData.remark"
@@ -263,17 +256,6 @@
      },
    },
    {
      label: "是否必填",
      prop: "isRequired",
      dataType: "tag",
      formatType: params => {
        return params === 1 ? "danger" : "info";
      },
      formatData: val => {
        return val === 1 ? "是" : "否";
      },
    },
    {
      label: "备注",
      prop: "remark",
    },
@@ -324,7 +306,6 @@
    paramType: "",
    valueMode: "1",
    unit: "",
    isRequired: "0",
    remark: "",
  });
  const rules = reactive({
@@ -496,7 +477,6 @@
    formData.paramType = "";
    formData.valueMode = "1";
    formData.unit = "";
    formData.isRequired = "0";
    formData.remark = "";
    dialogVisible.value = true;
  };
@@ -512,8 +492,6 @@
    formData.valueMode =
      row.valueMode !== undefined ? String(row.valueMode) : "1";
    formData.unit = row.unit || "";
    formData.isRequired =
      row.isRequired !== undefined ? String(row.isRequired) : "0";
    formData.remark = row.remark || "";
    dialogVisible.value = true;
  };
src/views/basicData/product/ProductSelectDialog.vue
@@ -1,28 +1,39 @@
<template>
  <el-dialog v-model="visible"
             title="选择产品"
             width="900px"
             width="1000px"
             destroy-on-close
             :close-on-click-modal="false">
    <el-form :inline="true"
             :model="query"
             class="mb-2">
             class="mb-2 search-form">
      <el-form-item label="产品名称">
        <el-input v-model="query.materialName"
                  size="small"
                  placeholder="输入产品名称"
                  clearable
                  @keyup.enter="onSearch" />
      </el-form-item>
      <el-form-item label="规格">
        <el-input v-model="query.specification"
                  size="small"
                  placeholder="输入规格"
                  clearable
                  @keyup.enter="onSearch" />
      </el-form-item>
      <el-form-item label="物料编码">
        <el-input v-model="query.materialCode"
                  size="small"
                  placeholder="输入物料编码"
                  clearable
                  @keyup.enter="onSearch" />
      </el-form-item>
      <el-form-item>
      <el-form-item style="200px">
        <el-button type="primary"
                   size="small"
                   @click="onSearch">搜索</el-button>
        <el-button @click="onReset">重置</el-button>
        <el-button size="small"
                   @click="onReset">重置</el-button>
      </el-form-item>
    </el-form>
    <!-- 列表 -->
@@ -101,6 +112,7 @@
  const query = reactive({
    specification: "",
    materialCode: "",
    materialName: "",
  });
  const page = reactive({
@@ -163,6 +175,7 @@
  function onReset() {
    query.specification = "";
    query.materialCode = "";
    query.materialName = "";
    page.pageNum = 1;
    loadData();
  }
@@ -194,6 +207,8 @@
      const res: any = await modelListPage({
        specification: query.specification.trim(),
        materialCode: query.materialCode.trim(),
        materialName: query.materialName.trim(),
        type: 1,
        current: page.pageNum,
        size: page.pageSize,
      });
@@ -218,3 +233,26 @@
    loadData();
  });
</script>
<style scoped>
  .search-form {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 10px;
  }
  .search-form .el-form-item {
    margin-bottom: 0;
  }
  .search-form .el-input {
    width: 180px;
  }
  .el-form--inline .el-form-item {
    margin-right: 5px;
  }
  .justify-end {
    margin-top: 10px;
  }
</style>
src/views/productionManagement/productionProcess/index.vue
@@ -83,7 +83,6 @@
                    :tableData="paramList"
                    :page="paramPage"
                    height="calc(100vh - 280px)"
                    :tableLoading="paramLoading"
                    :isSelection="false"
                    @pagination="handleParamPagination" />
          <div v-else
@@ -159,7 +158,7 @@
                      placeholder="请输入参数名称搜索"
                      clearable
                      size="small"
                      @input="handleParamSearch">
                      @input="handleSelectParam">
              <template #prefix>
                <el-icon>
                  <Search />
@@ -172,18 +171,14 @@
                    border
                    highlight-current-row
                    @current-change="handleParamSelect">
            <el-table-column prop="parameterCode"
                             label="参数编号"
                             width="100" />
            <el-table-column prop="paramName"
                             label="参数名称" />
            <el-table-column prop="paramType"
                             label="参数类型"
                             width="100">
                             label="参数类型">
              <template #default="scope">
                <el-tag size="small"
                        :type="getParamTypeTag(scope.row.paramType)">
                  {{ scope.row.paramType }}
                  {{ getParamTypeText(scope.row.paramType) }}
                </el-tag>
              </template>
            </el-table-column>
@@ -196,9 +191,6 @@
                   :model="selectedParam"
                   label-width="100px"
                   class="param-detail-form">
            <el-form-item label="参数编号">
              <span class="detail-text">{{ selectedParam.parameterCode }}</span>
            </el-form-item>
            <el-form-item label="参数名称">
              <span class="detail-text">{{ selectedParam.paramName }}</span>
            </el-form-item>
@@ -211,7 +203,7 @@
            <el-form-item label="参数类型">
              <el-tag size="small"
                      :type="getParamTypeTag(selectedParam.paramType)">
                {{ selectedParam.paramType }}
                {{ getParamTypeText(selectedParam.paramType) }}
              </el-tag>
            </el-form-item>
            <el-form-item label="参数格式">
@@ -220,20 +212,33 @@
            <el-form-item label="单位">
              <span class="detail-text">{{ selectedParam.unit || '-' }}</span>
            </el-form-item>
            <el-form-item label="默认值"
                          v-if="selectedParam.valueMode === '1'">
              <el-input v-model="selectedParam.defaultValue"
            <el-form-item label="标准值"
                          v-if="selectedParam.valueMode == '1'">
              <el-input v-model="selectedParam.standardValue"
                        type="number"
                        placeholder="请输入默认值" />
            </el-form-item>
            <el-form-item label="最小值"
                          v-if="selectedParam.valueMode === '2'">
              <el-input v-model="selectedParam.defaultMin"
                          v-if="selectedParam.valueMode == '2'">
              <el-input v-model="selectedParam.minValue"
                        type="number"
                        placeholder="请输入最小值" />
            </el-form-item>
            <el-form-item label="最大值"
                          v-if="selectedParam.valueMode === '2'">
              <el-input v-model="selectedParam.defaultMax"
                          v-if="selectedParam.valueMode == '2'">
              <el-input v-model="selectedParam.maxValue"
                        type="number"
                        placeholder="请输入最大值" />
            </el-form-item>
            <el-form-item label="排序">
              <el-input v-model="selectedParam.sort"
                        type="number"
                        placeholder="请输入排序" />
            </el-form-item>
            <el-form-item label="是否必填">
              <el-switch v-model="selectedParam.isRequired"
                         :active-value="1"
                         :inactive-value="0" />
            </el-form-item>
          </el-form>
          <el-empty v-else
@@ -246,6 +251,65 @@
          <el-button type="primary"
                     :disabled="!selectedParam"
                     @click="handleParamSubmit">确定</el-button>
        </span>
      </template>
    </el-dialog>
    <!-- 编辑参数对话框 -->
    <el-dialog v-model="editParamDialogVisible"
               title="编辑参数"
               width="600px">
      <el-form :model="editParamForm"
               :rules="editParamRules"
               ref="editParamFormRef"
               label-width="120px">
        <el-form-item label="参数名称">
          <span class="detail-text">{{ editParamForm.paramName }}</span>
        </el-form-item>
        <el-form-item label="参数模式">
          <el-tag size="small"
                  :type="editParamForm.valueMode == '1' ? 'success' : 'warning'">
            {{ editParamForm.valueMode == '1' ? '单值' : '区间' }}
          </el-tag>
        </el-form-item>
        <el-form-item label="标准值"
                      v-if="editParamForm.valueMode == '1'"
                      prop="standardValue">
          <el-input v-model="editParamForm.standardValue"
                    type="number"
                    placeholder="请输入标准值" />
        </el-form-item>
        <el-form-item label="最小值"
                      v-if="editParamForm.valueMode == '2'"
                      prop="minValue">
          <el-input v-model="editParamForm.minValue"
                    type="number"
                    placeholder="请输入最小值" />
        </el-form-item>
        <el-form-item label="最大值"
                      v-if="editParamForm.valueMode == '2'"
                      prop="maxValue">
          <el-input v-model="editParamForm.maxValue"
                    type="number"
                    placeholder="请输入最大值" />
        </el-form-item>
        <el-form-item label="排序"
                      prop="sort">
          <el-input v-model="editParamForm.sort"
                    type="number"
                    placeholder="请输入排序" />
        </el-form-item>
        <el-form-item label="是否必填"
                      prop="isRequired">
          <el-switch v-model="editParamForm.isRequired"
                     :active-value="1"
                     :inactive-value="0" />
        </el-form-item>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="editParamDialogVisible = false">取消</el-button>
          <el-button type="primary"
                     @click="handleEditParamSubmit">确定</el-button>
        </span>
      </template>
    </el-dialog>
@@ -264,7 +328,12 @@
    del,
    list as getProcessListApi,
    processList,
    getProcessParamList,
    addProcessParam,
    editProcessParam,
    deleteProcessParam,
  } from "@/api/productionManagement/productionProcess.js";
  import { getBaseParamList } from "@/api/basicData/parameterMaintenance.js";
  // 工序列表数据
  const processValueList = ref([]);
@@ -324,13 +393,85 @@
  const selectedParam = ref(null);
  const paramSearchKeyword = ref("");
  // 编辑参数对话框
  const editParamDialogVisible = ref(false);
  const editParamFormRef = ref(null);
  const editParamForm = reactive({
    id: null,
    processId: null,
    paramId: null,
    paramName: "",
    valueMode: "1",
    standardValue: null,
    minValue: null,
    maxValue: null,
    sort: 1,
    isRequired: 0,
    tenantId: 1,
  });
  const editParamRules = {
    standardValue: [
      {
        required: true,
        message: "请输入标准值",
        trigger: "blur",
        validator: (rule, value, callback) => {
          if (value === null || value === undefined || value === "") {
            callback(new Error("请输入标准值"));
          } else {
            callback();
          }
        },
      },
    ],
    minValue: [
      {
        required: true,
        message: "请输入最小值",
        trigger: "blur",
        validator: (rule, value, callback) => {
          if (value === null || value === undefined || value === "") {
            callback(new Error("请输入最小值"));
          } else {
            callback();
          }
        },
      },
    ],
    maxValue: [
      {
        required: true,
        message: "请输入最大值",
        trigger: "blur",
        validator: (rule, value, callback) => {
          if (value === null || value === undefined || value === "") {
            callback(new Error("请输入最大值"));
          } else {
            callback();
          }
        },
      },
    ],
    sort: [
      {
        required: true,
        message: "请输入排序",
        trigger: "blur",
        validator: (rule, value, callback) => {
          if (value === null || value === undefined || value === "") {
            callback(new Error("请输入排序"));
          } else if (isNaN(value) || value < 1) {
            callback(new Error("排序必须是大于0的整数"));
          } else {
            callback();
          }
        },
      },
    ],
  };
  // 参数表格列配置
  const paramColumn = ref([
    {
      label: "参数编号",
      prop: "parameterCode",
      className: "code-cell",
    },
    {
      label: "参数名称",
      prop: "paramName",
@@ -346,44 +487,55 @@
      label: "参数类型",
      prop: "paramType",
      dataType: "tag",
      formatType: row => {
      formatType: params => {
        const typeMap = {
          数值格式: "primary",
          文本格式: "info",
          下拉选项: "warning",
          时间格式: "success",
          1: "primary",
          2: "info",
          3: "warning",
          4: "success",
        };
        return typeMap[row.paramType] || "default";
        return typeMap[params] || "default";
      },
      formatData: val => {
        const labelMap = {
          1: "数值格式",
          2: "文本格式",
          3: "下拉选项",
          4: "时间格式",
        };
        return labelMap[val] || val;
      },
    },
    {
      label: "参数格式",
      label: "取值格式",
      prop: "paramFormat",
      formatData: (val, row) => {
        if (row.paramType == "3") {
          const dict = dictTypes.value.find(item => item.dictType === val);
          return dict ? "字典:" + dict.dictName : val;
        }
        return val;
      },
    },
    {
      label: "标准值",
      prop: "defaultValue",
      className: row => (row.paramType === "数值格式" ? "quantity-cell" : ""),
    },
    {
      label: "默认值",
      prop: "defaultValue",
      prop: "standardValue",
      formatData: (val, row) => {
        return row.valueMode === "1" ? val : "-";
        return row.valueMode == "1" ? val : "-";
      },
    },
    {
      label: "最小值",
      prop: "defaultMin",
      prop: "minValue",
      formatData: (val, row) => {
        return row.valueMode === "2" ? val : "-";
        return row.valueMode == "2" ? val : "-";
      },
    },
    {
      label: "最大值",
      prop: "defaultMax",
      prop: "maxValue",
      formatData: (val, row) => {
        return row.valueMode === "2" ? val : "-";
        return row.valueMode == "2" ? val : "-";
      },
    },
    {
@@ -391,10 +543,25 @@
      prop: "unit",
    },
    {
      label: "排序",
      prop: "sort",
    },
    {
      label: "是否必填",
      prop: "isRequired",
      dataType: "tag",
      formatType: row => (row.isRequired === 1 ? "success" : "info"),
      formatData: row => (row.isRequired === 1 ? "是" : "否"),
    },
    {
      label: "操作",
      dataType: "action",
      width: "100",
      width: "150",
      operation: [
        {
          name: "编辑",
          clickFun: row => handleEditParam(row),
        },
        {
          name: "删除",
          clickFun: row => handleDeleteParam(row),
@@ -509,81 +676,16 @@
      ElMessage.warning("请先选择一个工序");
      return;
    }
    // 获取可选参数列表(假数据)
    availableParamList.value = [
      {
        id: 101,
        parameterCode: "P101",
        paramName: "温度",
        valueMode: "2",
        paramType: "数值格式",
        paramFormat: "",
        defaultValue: "20-30",
        unit: "℃",
      },
      {
        id: 102,
        parameterCode: "P102",
        paramName: "压力",
        valueMode: "1",
        paramType: "数值格式",
        paramFormat: "",
        defaultValue: "0.5",
        unit: "MPa",
      },
      {
        id: 103,
        parameterCode: "P103",
        paramName: "湿度",
        valueMode: "2",
        paramType: "数值格式",
        paramFormat: "",
        defaultValue: "40-60",
        unit: "%",
      },
      {
        id: 104,
        parameterCode: "P104",
        paramName: "速度",
        valueMode: "1",
        paramType: "数值格式",
        paramFormat: "",
        defaultValue: "100",
        unit: "m/min",
      },
      {
        id: 105,
        parameterCode: "P105",
        paramName: "状态",
        valueMode: "1",
        paramType: "下拉选项",
        paramFormat: "status",
        defaultValue: "正常",
        unit: "",
      },
      {
        id: 106,
        parameterCode: "P106",
        paramName: "记录时间",
        valueMode: "1",
        paramType: "时间格式",
        paramFormat: "YYYY-MM-DD HH:mm:ss",
        defaultValue: "2024-01-01 08:00:00",
        unit: "",
      },
      {
        id: 107,
        parameterCode: "P107",
        paramName: "备注",
        valueMode: "1",
        paramType: "文本格式",
        paramFormat: "",
        defaultValue: "无",
        unit: "",
      },
    ];
    filteredParamList.value = availableParamList.value;
    paramSearchKeyword.value = "";
    // 获取可选参数列表
    getBaseParamList({ paramName: paramSearchKeyword.value }).then(res => {
      if (res.code === 200) {
        filteredParamList.value = res.data || [];
        page.total = res.data?.length || 0;
      } else {
        ElMessage.error(res.msg || "查询失败");
      }
    });
    console.log(filteredParamList.value, "可选参数列表");
    selectedParam.value = null;
    paramDialogVisible.value = true;
  };
@@ -602,13 +704,21 @@
      );
    }
  };
  const getParamTypeText = type => {
    const typeMap = {
      1: "数值格式",
      2: "文本格式",
      3: "下拉选项",
      4: "时间格式",
    };
    return typeMap[type] || "未知参数类型";
  };
  const getParamTypeTag = type => {
    const typeMap = {
      数值格式: "primary",
      文本格式: "info",
      下拉选项: "warning",
      时间格式: "success",
      1: "primary",
      2: "info",
      3: "warning",
      4: "success",
    };
    return typeMap[type] || "default";
  };
@@ -630,6 +740,37 @@
    });
  };
  const handleEditParam = row => {
    editParamForm.id = row.id;
    editParamForm.processId = row.processId;
    editParamForm.paramId = row.paramId;
    editParamForm.paramName = row.paramName;
    editParamForm.valueMode = row.valueMode;
    editParamForm.standardValue = row.standardValue;
    editParamForm.minValue = row.minValue;
    editParamForm.maxValue = row.maxValue;
    editParamForm.sort = row.sort || 1;
    editParamForm.isRequired = row.isRequired || 0;
    editParamForm.tenantId = 1;
    editParamDialogVisible.value = true;
  };
  const handleEditParamSubmit = () => {
    editParamFormRef.value.validate(valid => {
      if (valid) {
        editProcessParam(editParamForm)
          .then(() => {
            ElMessage.success("编辑成功");
            editParamDialogVisible.value = false;
            getParamList(selectedProcess.value.id);
          })
          .catch(() => {
            ElMessage.error("编辑失败");
          });
      }
    });
  };
  const handleParamSubmit = () => {
    if (!selectedParam.value) {
      ElMessage.warning("请先选择一个参数");
@@ -638,9 +779,12 @@
    addProcessParam({
      processId: selectedProcess.value.id,
      paramId: selectedParam.value.id,
      defaultValue: selectedParam.value.defaultValue,
      defaultMin: selectedParam.value.defaultMin,
      defaultMax: selectedParam.value.defaultMax,
      sort: selectedParam.value.sort || 1,
      standardValue: selectedParam.value.standardValue,
      minValue: selectedParam.value.minValue,
      maxValue: selectedParam.value.maxValue,
      isRequired: selectedParam.value.isRequired || 0,
      tenantId: 1,
    })
      .then(() => {
        ElMessage.success("添加成功");
@@ -687,6 +831,8 @@
  // 左侧工序列表
  .process-list-section {
    width: 370px;
    min-width: 370px;
    flex-shrink: 0;
    background: #fff;
    border-radius: 8px;
    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
@@ -802,7 +948,12 @@
  .param-table-wrapper {
    flex: 1;
    padding: 0 20px 20px;
    overflow: hidden;
    overflow: auto;
  }
  /* 表格横向滚动 */
  :deep(.el-table) {
    // min-width: 800px;
  }
  .empty-tip {
@@ -872,7 +1023,8 @@
    height: 450px;
    .param-list-area {
      flex: 1;
      // flex: 1;
      width: 380px;
      display: flex;
      flex-direction: column;
@@ -895,7 +1047,8 @@
    }
    .param-detail-area {
      width: 380px;
      // width: 380px;
      flex: 1;
      display: flex;
      flex-direction: column;
      background: #f5f7fa;