广丰卷烟厂数采质量分析系统
baoshiwei
5 小时以前 e97b55310155a2dd691bd698a10295a4d867f60c
ruoyi-plus-soybean/src/views/qm/judge/modules/judge-operate-drawer.vue
@@ -1,10 +1,11 @@
<script setup lang="ts">
import { computed, ref, watch, onMounted } from 'vue';
import { NSelect, SelectOption } from 'naive-ui';
import { computed, ref, watch } from 'vue';
import type { SelectOption } from 'naive-ui';
import { NSelect } from 'naive-ui';
import { jsonClone } from '@sa/utils';
import { fetchCreateJudge, fetchUpdateJudge } from '@/service/api/qm/judge';
import { fetchGetStdList } from '@/service/api/qm/std';
import { fetchGetMatList } from '@/service/api/md/mat';
import { useFormRules, useNaiveForm } from '@/hooks/common/form';
import { $t } from '@/locales';
@@ -52,8 +53,8 @@
  { label: '辅料', value: 1 }
];
const stdOptions = ref<SelectOption[]>([]);
const matOptions = ref<SelectOption[]>([]);
type Model = Api.Qm.JudgeOperateParams;
@@ -61,27 +62,23 @@
function createDefaultModel(): Model {
  return {
      matCode: '',
      matName: '',
      status: null,
      stdCod: '',
      cdate: null,
      oper: '',
      des: '',
      category: null,
      typeCode: '',
      typeName: '',
      judgeName: ''
    matCode: '',
    matName: '',
    status: null,
    stdCod: '',
    cdate: null,
    oper: '',
    des: '',
    category: null,
    typeCode: '',
    typeName: '',
    judgeName: ''
  };
}
type RuleKey = Extract<
  keyof Model,
  | 'id'
>;
type RuleKey = Extract<keyof Model, 'id'>;
const rules: Record<RuleKey, App.Global.FormRule> = {
};
const rules: Record<RuleKey, App.Global.FormRule> = {};
function handleUpdateModelWhenEdit() {
  model.value = createDefaultModel();
@@ -96,14 +93,28 @@
}
async function fetchStdOptions() {
    const response = await fetchGetStdList({ category: model.value.category });
  const response = await fetchGetStdList({ category: model.value.category });
  const stdListData = response.data?.rows || [];
  if (stdListData.length > 0) {
    stdOptions.value = stdListData.map((item: Api.Qm.Std) => ({
        label: item.stdName + item.stdCode,
        value: String(item.id)
      }));
      label: item.stdName + item.stdCode,
      value: String(item.id)
    }));
  }
}
async function fetchMatOptions() {
  if (model.value.category === 1) {
    matOptions.value = [];
    return;
  }
  const { data } = await fetchGetMatList({ tid: 1, pageSize: 1000 });
  if (data) {
    matOptions.value = data.rows.map(item => ({
      label: item.name,
      value: item.code
    }));
  }
}
@@ -114,12 +125,36 @@
  // request
  if (props.operateType === 'add') {
    const { error } = await fetchCreateJudge({ matCode, matName, status, stdCod, cdate, oper, des, category, typeCode, typeName, judgeName });
    const { error } = await fetchCreateJudge({
      matCode,
      matName,
      status,
      stdCod,
      cdate,
      oper,
      des,
      category,
      typeCode,
      typeName,
      judgeName
    });
    if (error) return;
  }
  if (props.operateType === 'edit') {
    const { error } = await fetchUpdateJudge({ matCode, matName, status, stdCod, cdate, oper, des, category, typeCode, typeName, judgeName });
    const { error } = await fetchUpdateJudge({
      matCode,
      matName,
      status,
      stdCod,
      cdate,
      oper,
      des,
      category,
      typeCode,
      typeName,
      judgeName
    });
    if (error) return;
  }
@@ -128,19 +163,41 @@
  emit('submitted');
}
watch(visible, () => {
watch(visible, async () => {
  if (visible.value) {
    handleUpdateModelWhenEdit();
    restoreValidation();
    // Fetch stdOptions when the drawer becomes visible
    fetchStdOptions();
    await fetchStdOptions();
    await fetchMatOptions();
  }
});
watch(() => model.value.category, () => {
  fetchStdOptions();
});
watch(
  () => model.value.category,
  async () => {
    fetchStdOptions();
    model.value.matName = '';
    model.value.matCode = '';
    await fetchMatOptions();
  }
);
watch(
  () => model.value.matCode,
  val => {
    if (val) {
      const selectedOption = matOptions.value.find(opt => opt.value === val);
      if (selectedOption && typeof selectedOption.label === 'string') {
        const name = selectedOption.label as string;
        model.value.matName = name;
        model.value.judgeName = name;
      }
    } else {
      model.value.matName = '';
    }
  }
);
</script>
<template>
@@ -150,32 +207,22 @@
        <NFormItem label="判定名称" path="judgeName">
          <NInput v-model:value="model.judgeName" placeholder="请输入判定名称" />
        </NFormItem>
        <NFormItem label="物料牌号代码" path="matCode">
          <NInput v-model:value="model.matCode" placeholder="请输入物料牌号代码" />
        <NFormItem label="物料类型" path="category">
          <NSelect v-model:value="model.category" :options="categoryOptions" placeholder="请选择物料类型" />
        </NFormItem>
        <NFormItem label="物料牌号" path="matName">
          <NInput v-model:value="model.matName" placeholder="请输入物料牌号" />
        </NFormItem>
        <NFormItem label="物料类型" path="category">
          <NSelect
            v-model:value="model.category"
            :options="categoryOptions"
            placeholder="请选择物料类型"
            v-model:value="model.matCode"
            :options="matOptions"
            placeholder="请选择物料牌号"
            :disabled="model.category === 1"
          />
        </NFormItem>
        <NFormItem label="状态" path="status">
          <NSelect
            v-model:value="model.status"
            :options="statusOptions"
            placeholder="请选择状态"
          />
          <NSelect v-model:value="model.status" :options="statusOptions" placeholder="请选择状态" />
        </NFormItem>
        <NFormItem label="判定规程" path="stdCod">
          <NSelect
            v-model:value="model.stdCod"
            :options="stdOptions"
            placeholder="请选择判定规程"
          />
          <NSelect v-model:value="model.stdCod" :options="stdOptions" placeholder="请选择判定规程" />
        </NFormItem>
        <NFormItem label="创建时间" path="cdate">
          <NDatePicker