From 3471290659516cf21db3211a9053daff5f283e03 Mon Sep 17 00:00:00 2001
From: zhuguifei <312353457@qq.com>
Date: 星期五, 20 三月 2026 15:50:18 +0800
Subject: [PATCH] feat: 基础数据仪器管理、判定依据、判定依据明细

---
 ruoyi-plus-soybean/src/views/qm/std/modules/std-operate-drawer.vue |  179 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 179 insertions(+), 0 deletions(-)

diff --git a/ruoyi-plus-soybean/src/views/qm/std/modules/std-operate-drawer.vue b/ruoyi-plus-soybean/src/views/qm/std/modules/std-operate-drawer.vue
new file mode 100755
index 0000000..6316192
--- /dev/null
+++ b/ruoyi-plus-soybean/src/views/qm/std/modules/std-operate-drawer.vue
@@ -0,0 +1,179 @@
+<script setup lang="ts">
+import { computed, ref, watch } from 'vue';
+import { jsonClone } from '@sa/utils';
+import { fetchCreateStd, fetchUpdateStd } from '@/service/api/qm/std';
+import { useFormRules, useNaiveForm } from '@/hooks/common/form';
+import { $t } from '@/locales';
+
+defineOptions({
+  name: 'StdOperateDrawer'
+});
+
+interface Props {
+  /** the type of operation */
+  operateType: NaiveUI.TableOperateType;
+  /** the edit row data */
+  rowData?: Api.Qm.Std | null;
+}
+
+const props = defineProps<Props>();
+
+interface Emits {
+  (e: 'submitted'): void;
+}
+
+const emit = defineEmits<Emits>();
+
+const visible = defineModel<boolean>('visible', {
+  default: false
+});
+
+const { formRef, validate, restoreValidation } = useNaiveForm();
+const { createRequiredRule } = useFormRules();
+
+const title = computed(() => {
+  const titles: Record<NaiveUI.TableOperateType, string> = {
+    add: '鏂板鍒ゅ畾瑙勭▼',
+    edit: '缂栬緫鍒ゅ畾瑙勭▼'
+  };
+  return titles[props.operateType];
+});
+
+type Model = Api.Qm.StdOperateParams;
+
+const model = ref<Model>(createDefaultModel());
+
+function createDefaultModel(): Model {
+  return {
+      id: '',
+      stdCode: '',
+      stdName: '',
+      cdate: null,
+      ver: null,
+      enable: null,
+      itemCod: '',
+      itemNam: '',
+      typ: null,
+      stdDes: '',
+      checkLevel: null,
+      category: null,
+      matfltype: '',
+      matflname: ''
+  };
+}
+
+type RuleKey = Extract<
+  keyof Model,
+  | 'id'
+>;
+
+const rules: Record<RuleKey, App.Global.FormRule> = {
+  id: createRequiredRule('缂栫爜涓嶈兘涓虹┖'),
+};
+
+function handleUpdateModelWhenEdit() {
+  model.value = createDefaultModel();
+
+  if (props.operateType === 'edit' && props.rowData) {
+    Object.assign(model.value, jsonClone(props.rowData));
+  }
+}
+
+function closeDrawer() {
+  visible.value = false;
+}
+
+async function handleSubmit() {
+  await validate();
+
+  const { id, stdCode, stdName, cdate, ver, enable, itemCod, itemNam, typ, stdDes, checkLevel, category, matfltype, matflname } = model.value;
+
+  // request
+  if (props.operateType === 'add') {
+    const { error } = await fetchCreateStd({ stdCode, stdName, cdate, ver, enable, itemCod, itemNam, typ, stdDes, checkLevel, category, matfltype, matflname });
+    if (error) return;
+  }
+
+  if (props.operateType === 'edit') {
+    const { error } = await fetchUpdateStd({ id, stdCode, stdName, cdate, ver, enable, itemCod, itemNam, typ, stdDes, checkLevel, category, matfltype, matflname });
+    if (error) return;
+  }
+
+  window.$message?.success($t('common.updateSuccess'));
+  closeDrawer();
+  emit('submitted');
+}
+
+watch(visible, () => {
+  if (visible.value) {
+    handleUpdateModelWhenEdit();
+    restoreValidation();
+  }
+});
+</script>
+
+<template>
+  <NDrawer v-model:show="visible" :title="title" display-directive="show" :width="800" class="max-w-90%">
+    <NDrawerContent :title="title" :native-scrollbar="false" closable>
+      <NForm ref="formRef" :model="model" :rules="rules">
+        <NFormItem label="瑙勭▼浠g爜" path="stdCode">
+          <NInput v-model:value="model.stdCode" placeholder="璇疯緭鍏ヨ绋嬩唬鐮�" />
+        </NFormItem>
+        <NFormItem label="瑙勭▼鍚嶇О" path="stdName">
+          <NInput v-model:value="model.stdName" placeholder="璇疯緭鍏ヨ绋嬪悕绉�" />
+        </NFormItem>
+        <NFormItem label="鍒涘缓鏃堕棿" path="cdate">
+          <NDatePicker
+            v-model:formatted-value="model.cdate"
+            type="datetime"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            clearable
+          />
+        </NFormItem>
+        <NFormItem label="鐗堟湰鍙�" path="ver">
+          <NInput v-model:value="model.ver" placeholder="璇疯緭鍏ョ増鏈彿" />
+        </NFormItem>
+        <NFormItem label="鍚敤鏍囪瘑" path="enable">
+          <NInput v-model:value="model.enable" placeholder="璇疯緭鍏ュ惎鐢ㄦ爣璇�" />
+        </NFormItem>
+        <NFormItem label="妫�楠岄」鐩甤ode" path="itemCod">
+          <NInput v-model:value="model.itemCod" placeholder="璇疯緭鍏ユ楠岄」鐩甤ode" />
+        </NFormItem>
+        <NFormItem label="妫�楠岄」鐩悕绉�" path="itemNam">
+          <NInput v-model:value="model.itemNam" placeholder="璇疯緭鍏ユ楠岄」鐩悕绉�" />
+        </NFormItem>
+        <NFormItem label="鍒ゅ畾绫诲瀷  0-鎵嬪姩鍒ゅ畾,1-涓婁笅闄愬垽瀹�,2-骞冲潎鍊煎垽瀹�,3-SD鍊煎垽瀹�,4-CV鍊煎垽瀹�,5-瓒呮爣鏁板垽瀹�" path="typ">
+          <NInput v-model:value="model.typ" placeholder="璇疯緭鍏ュ垽瀹氱被鍨�  0-鎵嬪姩鍒ゅ畾,1-涓婁笅闄愬垽瀹�,2-骞冲潎鍊煎垽瀹�,3-SD鍊煎垽瀹�,4-CV鍊煎垽瀹�,5-瓒呮爣鏁板垽瀹�" />
+        </NFormItem>
+        <NFormItem label="澶囨敞" path="stdDes">
+          <NInput v-model:value="model.stdDes" placeholder="璇疯緭鍏ュ娉�" />
+        </NFormItem>
+        <NFormItem label="妫�楠岀骇鍒�" path="checkLevel">
+          <NInput v-model:value="model.checkLevel" placeholder="璇疯緭鍏ユ楠岀骇鍒�" />
+        </NFormItem>
+        <NFormItem label="绫诲瀷  锛� 0-鎴愬搧  1-杈呮枡" path="category">
+          <NInput v-model:value="model.category" placeholder="璇疯緭鍏ョ被鍨�  锛� 0-鎴愬搧  1-杈呮枡" />
+        </NFormItem>
+        <NFormItem label="$column.columnComment" path="matfltype">
+          <NSelect
+            v-model:value="model.matfltype"
+            placeholder="璇烽�夋嫨$column.columnComment"
+            :options="[{ value: '0', label: '璇烽�夋嫨瀛楀吀鐢熸垚' }]"
+            clearable
+          />
+        </NFormItem>
+        <NFormItem label="$column.columnComment" path="matflname">
+          <NInput v-model:value="model.matflname" placeholder="璇疯緭鍏�$column.columnComment" />
+        </NFormItem>
+      </NForm>
+      <template #footer>
+        <NSpace :size="16">
+          <NButton @click="closeDrawer">{{ $t('common.cancel') }}</NButton>
+          <NButton type="primary" @click="handleSubmit">{{ $t('common.confirm') }}</NButton>
+        </NSpace>
+      </template>
+    </NDrawerContent>
+  </NDrawer>
+</template>
+
+<style scoped></style>

--
Gitblit v1.9.3