old mode 100644
new mode 100755
| | |
| | | <script setup lang="ts"> |
| | | import { computed, ref, watch } from 'vue'; |
| | | import { jsonClone } from '@sa/utils'; |
| | | import { fetchCreateCheckitem, fetchUpdateCheckitem } from '@/service/api/qm/checkitem'; |
| | | import { |
| | | fetchCreateCheckitem, |
| | | fetchGetRid, |
| | | fetchUpdateCheckitem |
| | | } from '@/service/api/qm/checkitem'; |
| | | import { useFormRules, useNaiveForm } from '@/hooks/common/form'; |
| | | import { $t } from '@/locales'; |
| | | |
| | |
| | | operateType: NaiveUI.TableOperateType; |
| | | /** the edit row data */ |
| | | rowData?: Api.Qm.Checkitem | null; |
| | | /** preset stdCode for add */ |
| | | stdCode?: string | null; |
| | | } |
| | | |
| | | const props = defineProps<Props>(); |
| | |
| | | return titles[props.operateType]; |
| | | }); |
| | | |
| | | const enableOptions = [ |
| | | { label: '启用', value: 1 }, |
| | | { label: '停用', value: 0 } |
| | | ]; |
| | | |
| | | const categoryOptions = [ |
| | | { label: '成品', value: 0 }, |
| | | { label: '辅料', value: 1 } |
| | | ]; |
| | | |
| | | const checkLevelOptions = [ |
| | | { label: 'A', value: 'A' }, |
| | | { label: 'B', value: 'B' }, |
| | | { label: 'C', value: 'C' }, |
| | | { label: 'D', value: 'D' } |
| | | ]; |
| | | |
| | | const ismixOptions = [ |
| | | { label: '是', value: 1 }, |
| | | { label: '否', value: 0 } |
| | | ]; |
| | | |
| | | const delOptions = [ |
| | | { label: '正常', value: 0 }, |
| | | { label: '删除', value: 1 } |
| | | ]; |
| | | |
| | | type Model = Api.Qm.CheckitemOperateParams; |
| | | |
| | | const model = ref<Model>(createDefaultModel()); |
| | | const ridOptions = ref<{ label: string; value: string | number }[]>([]); |
| | | |
| | | async function fetchRidOptions(searchText?: string) { |
| | | const params: any = {}; |
| | | if (searchText) { |
| | | params.itemName = searchText; |
| | | } |
| | | if (props.stdCode) { |
| | | params.stdCode = props.stdCode; |
| | | } |
| | | |
| | | const { data } = await fetchGetRid(params); |
| | | if (data) { |
| | | ridOptions.value = data; |
| | | } else { |
| | | ridOptions.value = []; |
| | | } |
| | | } |
| | | |
| | | function handleRidSelectSearch(query: string) { |
| | | fetchRidOptions(query); |
| | | } |
| | | |
| | | |
| | | function createDefaultModel(): Model { |
| | | return { |
| | |
| | | itemCode: '', |
| | | itemName: '', |
| | | unit: '', |
| | | enable: null, |
| | | del: null, |
| | | enable: 1, |
| | | del: 0, |
| | | itemDes: '', |
| | | stdCode: '', |
| | | instrumentDes: '', |
| | | location: '', |
| | | checkLevel: '', |
| | | ismix: null, |
| | | rid: '', |
| | | rid: null, |
| | | category: null, |
| | | instrumentCode: '', |
| | | score: null |
| | |
| | | id: createRequiredRule('编码不能为空'), |
| | | }; |
| | | |
| | | function handleUpdateModelWhenEdit() { |
| | | async function handleUpdateModelWhenEdit() { |
| | | model.value = createDefaultModel(); |
| | | ridOptions.value = []; // Clear options initially |
| | | |
| | | if (props.operateType === 'edit' && props.rowData) { |
| | | Object.assign(model.value, jsonClone(props.rowData)); |
| | | } |
| | | |
| | | // Fetch options for rid |
| | | await fetchRidOptions(); |
| | | |
| | | if (props.operateType === 'add' && props.stdCode) { |
| | | model.value.stdCode = props.stdCode; |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | // request |
| | | if (props.operateType === 'add') { |
| | | const { error } = await fetchCreateCheckitem({ itemCode, itemName, unit, enable, del, itemDes, stdCode, instrumentDes, location, checkLevel, ismix, rid, category, instrumentCode, score }); |
| | | const payload = { itemCode, itemName, unit, enable, del, itemDes, stdCode, instrumentDes, location, checkLevel, ismix, rid, category, instrumentCode, score }; |
| | | const { error } = await fetchCreateCheckitem(payload); |
| | | if (error) return; |
| | | } |
| | | |
| | | if (props.operateType === 'edit') { |
| | | const { error } = await fetchUpdateCheckitem({ id, itemCode, itemName, unit, enable, del, itemDes, stdCode, instrumentDes, location, checkLevel, ismix, rid, category, instrumentCode, score }); |
| | | const payload = { id, itemCode, itemName, unit, enable, del, itemDes, stdCode, instrumentDes, location, checkLevel, ismix, rid, category, instrumentCode, score }; |
| | | const { error } = await fetchUpdateCheckitem(payload); |
| | | if (error) return; |
| | | } |
| | | |
| | |
| | | if (visible.value) { |
| | | handleUpdateModelWhenEdit(); |
| | | restoreValidation(); |
| | | getTreeList(); |
| | | } |
| | | }); |
| | | </script> |
| | |
| | | <NInput v-model:value="model.unit" placeholder="请输入单位" /> |
| | | </NFormItem> |
| | | <NFormItem label="启用" path="enable"> |
| | | <NInput v-model:value="model.enable" placeholder="请输入启用" /> |
| | | <NSelect v-model:value="model.enable" :options="enableOptions" placeholder="请选择启用" clearable /> |
| | | </NFormItem> |
| | | <NFormItem label="删除" path="del"> |
| | | <NInput v-model:value="model.del" placeholder="请输入删除" /> |
| | | <NSelect v-model:value="model.del" :options="delOptions" placeholder="请选择删除" clearable /> |
| | | </NFormItem> |
| | | <NFormItem label="检验项描述" path="itemDes"> |
| | | <NInput v-model:value="model.itemDes" placeholder="请输入检验项描述" /> |
| | | </NFormItem> |
| | | <NFormItem label="规程代码" path="stdCode"> |
| | | <NInput v-model:value="model.stdCode" placeholder="请输入规程代码" /> |
| | | </NFormItem> |
| | | |
| | | <NFormItem label="仪器描述" path="instrumentDes"> |
| | | <NInput v-model:value="model.instrumentDes" placeholder="请输入仪器描述" /> |
| | | </NFormItem> |
| | | <NFormItem label="缺陷位置-外观用" path="location"> |
| | | <NFormItem label="缺陷位置" path="location"> |
| | | <NInput v-model:value="model.location" placeholder="请输入缺陷位置-外观用" /> |
| | | </NFormItem> |
| | | <NFormItem label="分A,B,C,D四个级别" path="checkLevel"> |
| | | <NInput v-model:value="model.checkLevel" placeholder="请输入分A,B,C,D四个级别" /> |
| | | <NFormItem label="级别" path="checkLevel"> |
| | | <NSelect v-model:value="model.checkLevel" :options="checkLevelOptions" placeholder="请选择级别" clearable /> |
| | | </NFormItem> |
| | | <NFormItem label="是否合成项" path="ismix"> |
| | | <NInput v-model:value="model.ismix" placeholder="请输入是否合成项" /> |
| | | <NSelect v-model:value="model.ismix" :options="ismixOptions" placeholder="请选择是否合成项" clearable /> |
| | | </NFormItem> |
| | | <NFormItem label="关联项ID" path="rid"> |
| | | <NInput v-model:value="model.rid" placeholder="请输入关联项ID" /> |
| | | <NFormItem label="上级项" path="rid"> |
| | | <NSelect |
| | | v-model:value="model.rid" |
| | | :options="ridOptions" |
| | | placeholder="请选择上级项" |
| | | clearable |
| | | filterable |
| | | @search="handleRidSelectSearch" |
| | | @focus="() => fetchRidOptions()" |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="类别 0:成品 1辅料" path="category"> |
| | | <NInput v-model:value="model.category" placeholder="请输入类别 0:成品 1辅料" /> |
| | | </NFormItem> |
| | | <NFormItem label="仪器编码" path="instrumentCode"> |
| | | <NInput v-model:value="model.instrumentCode" placeholder="请输入仪器编码" /> |
| | | <NFormItem label="类别" path="category"> |
| | | <NSelect v-model:value="model.category" :options="categoryOptions" placeholder="请选择类别" clearable /> |
| | | </NFormItem> |
| | | <NFormItem label="分值" path="score"> |
| | | <NInput v-model:value="model.score" placeholder="请输入分值" /> |
| | | <NInputNumber v-model:value="model.score" placeholder="请输入分值" :precision="2" /> |
| | | </NFormItem> |
| | | </NForm> |
| | | <template #footer> |