diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-07-29 11:48:59 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-07-29 11:48:59 +0000 |
| commit | 10f90dc68dec42e9a64e081cc0dce6a484447290 (patch) | |
| tree | 5bc8bb30e03b09a602e7d414d943d0e7f24b1a0f /lib/docu-list-rule | |
| parent | 792fb0c21136eededecf52b5b4aa1a252bdc4bfb (diff) | |
(대표님, 박서영, 최겸) document-list-only, gtc, vendorDocu, docu-list-rule
Diffstat (limited to 'lib/docu-list-rule')
| -rw-r--r-- | lib/docu-list-rule/combo-box-settings/service.ts | 33 | ||||
| -rw-r--r-- | lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx | 23 |
2 files changed, 33 insertions, 23 deletions
diff --git a/lib/docu-list-rule/combo-box-settings/service.ts b/lib/docu-list-rule/combo-box-settings/service.ts index 70046828..2c5ee42b 100644 --- a/lib/docu-list-rule/combo-box-settings/service.ts +++ b/lib/docu-list-rule/combo-box-settings/service.ts @@ -229,39 +229,34 @@ export async function createComboBoxOption(input: { } } - const codeGroupDescription = codeGroup[0].description - - // 해당 Code Group의 마지막 옵션 번호 찾기 - const lastOption = await db - .select({ code: comboBoxSettings.code }) + // 코드 중복 체크 + const existingOption = await db + .select({ id: comboBoxSettings.id }) .from(comboBoxSettings) - .where(eq(comboBoxSettings.codeGroupId, input.codeGroupId)) - .orderBy(sql`CAST(SUBSTRING(${comboBoxSettings.code} FROM ${codeGroupDescription.length + 2}) AS INTEGER) DESC`) + .where( + sql`${comboBoxSettings.codeGroupId} = ${input.codeGroupId} AND ${comboBoxSettings.code} = ${input.code}` + ) .limit(1) - let nextNumber = 1 - if (lastOption.length > 0 && lastOption[0].code) { - const prefix = `${codeGroupDescription}_` - if (lastOption[0].code.startsWith(prefix)) { - const lastNumber = parseInt(lastOption[0].code.replace(prefix, '')) - if (!isNaN(lastNumber)) { - nextNumber = lastNumber + 1 - } + if (existingOption.length > 0) { + return { + success: false, + error: "이미 존재하는 코드입니다." } } - const newCode = `${codeGroupDescription}_${nextNumber}` - const [newOption] = await db .insert(comboBoxSettings) .values({ codeGroupId: input.codeGroupId, - code: newCode, - description: input.description, + code: input.code, + description: input.description || "-", remark: input.remark, }) .returning({ id: comboBoxSettings.id }) + + revalidatePath("/evcp/docu-list-rule/combo-box-settings") return { diff --git a/lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx b/lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx index 1fb8950c..a5a8af2f 100644 --- a/lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx +++ b/lib/docu-list-rule/combo-box-settings/table/combo-box-options-add-dialog.tsx @@ -30,7 +30,8 @@ import { Input } from "@/components/ui/input" import { createComboBoxOption } from "../service" const createOptionSchema = z.object({ - description: z.string().min(1, "값은 필수입니다."), + code: z.string().min(1, "코드는 필수입니다."), + description: z.string().default("-"), remark: z.string().optional(), }) @@ -48,7 +49,8 @@ export function ComboBoxOptionsAddDialog({ codeGroupId, onSuccess }: ComboBoxOpt const form = useForm<CreateOptionSchema>({ resolver: zodResolver(createOptionSchema), defaultValues: { - description: "", + code: "", + description: "-", remark: "", }, }) @@ -58,8 +60,8 @@ export function ComboBoxOptionsAddDialog({ codeGroupId, onSuccess }: ComboBoxOpt try { const result = await createComboBoxOption({ codeGroupId, - code: "", // 서비스에서 자동 생성 - description: data.description, + code: data.code, + description: data.description || "-", remark: data.remark, }) @@ -102,6 +104,19 @@ export function ComboBoxOptionsAddDialog({ codeGroupId, onSuccess }: ComboBoxOpt <form onSubmit={form.handleSubmit(handleSubmit)} className="space-y-4"> <FormField control={form.control} + name="code" + render={({ field }) => ( + <FormItem> + <FormLabel>코드</FormLabel> + <FormControl> + <Input {...field} placeholder="옵션 코드" /> + </FormControl> + <FormMessage /> + </FormItem> + )} + /> + <FormField + control={form.control} name="description" render={({ field }) => ( <FormItem> |
