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/judge/modules/judge-operate-drawer.vue | 212 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 212 insertions(+), 0 deletions(-)
diff --git a/ruoyi-plus-soybean/src/views/qm/judge/modules/judge-operate-drawer.vue b/ruoyi-plus-soybean/src/views/qm/judge/modules/judge-operate-drawer.vue
new file mode 100644
index 0000000..2eb4cbb
--- /dev/null
+++ b/ruoyi-plus-soybean/src/views/qm/judge/modules/judge-operate-drawer.vue
@@ -0,0 +1,212 @@
+<script setup lang="ts">
+import { computed, ref, watch, onMounted } from 'vue';
+import { NSelect, SelectOption } from 'naive-ui';
+import { jsonClone } from '@sa/utils';
+import { fetchCreateJudge, fetchUpdateJudge } from '@/service/api/qm/judge';
+import { fetchGetStdList } from '@/service/api/qm/std';
+
+import { useFormRules, useNaiveForm } from '@/hooks/common/form';
+import { $t } from '@/locales';
+
+defineOptions({
+ name: 'JudgeOperateDrawer'
+});
+
+interface Props {
+ /** the type of operation */
+ operateType: NaiveUI.TableOperateType;
+ /** the edit row data */
+ rowData?: Api.Qm.Judge | 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];
+});
+
+const statusOptions: SelectOption[] = [
+ { label: '鍚敤', value: 1 },
+ { label: '褰掓。', value: 0 }
+];
+
+const categoryOptions: SelectOption[] = [
+ { label: '鎴愬搧', value: 0 },
+ { label: '杈呮枡', value: 1 }
+];
+
+
+const stdOptions = ref<SelectOption[]>([]);
+
+type Model = Api.Qm.JudgeOperateParams;
+
+const model = ref<Model>(createDefaultModel());
+
+function createDefaultModel(): Model {
+ return {
+ matCode: '',
+ matName: '',
+ status: null,
+ stdCod: '',
+ cdate: null,
+ oper: '',
+ des: '',
+ category: null,
+ typeCode: '',
+ typeName: '',
+ judgeName: ''
+ };
+}
+
+type RuleKey = Extract<
+ keyof Model,
+ | 'id'
+>;
+
+const rules: Record<RuleKey, App.Global.FormRule> = {
+};
+
+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 fetchStdOptions() {
+ 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)
+ }));
+ }
+}
+
+async function handleSubmit() {
+ await validate();
+
+ const { matCode, matName, status, stdCod, cdate, oper, des, category, typeCode, typeName, judgeName } = model.value;
+
+ // request
+ if (props.operateType === 'add') {
+ 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 });
+ if (error) return;
+ }
+
+ window.$message?.success($t('common.updateSuccess'));
+ closeDrawer();
+ emit('submitted');
+}
+
+watch(visible, () => {
+ if (visible.value) {
+ handleUpdateModelWhenEdit();
+ restoreValidation();
+
+ // Fetch stdOptions when the drawer becomes visible
+ fetchStdOptions();
+ }
+});
+
+watch(() => model.value.category, () => {
+ fetchStdOptions();
+});
+</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="鍒ゅ畾鍚嶇О" path="judgeName">
+ <NInput v-model:value="model.judgeName" placeholder="璇疯緭鍏ュ垽瀹氬悕绉�" />
+ </NFormItem>
+ <NFormItem label="鐗╂枡鐗屽彿浠g爜" path="matCode">
+ <NInput v-model:value="model.matCode" 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="璇烽�夋嫨鐗╂枡绫诲瀷"
+ />
+ </NFormItem>
+ <NFormItem label="鐘舵��" path="status">
+ <NSelect
+ v-model:value="model.status"
+ :options="statusOptions"
+ placeholder="璇烽�夋嫨鐘舵��"
+ />
+ </NFormItem>
+ <NFormItem label="鍒ゅ畾瑙勭▼" path="stdCod">
+ <NSelect
+ v-model:value="model.stdCod"
+ :options="stdOptions"
+ 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="oper">
+ <NInput v-model:value="model.oper" placeholder="璇疯緭鍏ョ敓鏁堜汉/鎿嶄綔浜哄憳" />
+ </NFormItem>
+ <NFormItem label="澶囨敞" path="des">
+ <NInput v-model:value="model.des" placeholder="璇疯緭鍏ュ娉�" />
+ </NFormItem>
+
+ <NFormItem label="杈呮枡绫诲瀷缂栫爜" path="typeCode">
+ <NInput v-model:value="model.typeCode" placeholder="璇疯緭鍏ヨ緟鏂欑被鍨嬬紪鐮�" />
+ </NFormItem>
+ <NFormItem label="杈呮枡绫诲瀷鍚嶇О" path="typeName">
+ <NInput v-model:value="model.typeName" placeholder="璇疯緭鍏ヨ緟鏂欑被鍨嬪悕绉�" />
+ </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