캐릭터 챗봇 #74
| @@ -270,6 +270,7 @@ | ||||
|                   outlined | ||||
|                   auto-grow | ||||
|                   rows="4" | ||||
|                   :rules="systemPromptRules" | ||||
|                 /> | ||||
|                 <div | ||||
|                   class="caption grey--text text--darken-1 mt-1 custom-caption" | ||||
| @@ -908,10 +909,10 @@ | ||||
|             <v-btn | ||||
|               color="primary" | ||||
|               :loading="isLoading" | ||||
|               :disabled="!isFormValid || isLoading" | ||||
|               :disabled="isSaveDisabled" | ||||
|               @click="saveCharacter" | ||||
|             > | ||||
|               저장 | ||||
|               {{ isEdit ? '수정' : '저장' }} | ||||
|             </v-btn> | ||||
|           </v-card-actions> | ||||
|         </v-form> | ||||
| @@ -994,7 +995,7 @@ export default { | ||||
|         v => (v && v.trim().length > 0) || '한 줄 소개를 입력하세요' | ||||
|       ], | ||||
|       imageRules: [ | ||||
|         v => !this.isEdit || !!v || !!this.character.imageUrl || '이미지를 선택하세요' | ||||
|         v => (this.isEdit ? true : (!!v || '이미지를 선택하세요')) | ||||
|       ], | ||||
|       genderOptions: ['남성', '여성', '기타'], | ||||
|       mbtiOptions: [ | ||||
| @@ -1003,11 +1004,25 @@ export default { | ||||
|         'ISTJ', 'ISFJ', 'ESTJ', 'ESFJ', | ||||
|         'ISTP', 'ISFP', 'ESTP', 'ESFP' | ||||
|       ], | ||||
|       typeOptions: ['Clone', 'Character'] | ||||
|       typeOptions: ['Clone', 'Character'], | ||||
|       systemPromptRules: [ | ||||
|         v => (this.isEdit ? true : (!!v && v.trim().length > 0) || '시스템 프롬프트를 입력하세요') | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   computed: { | ||||
|     isSaveDisabled() { | ||||
|       if (this.isLoading) return true; | ||||
|       if (!this.isFormValid) return true; | ||||
|       if (!this.isEdit) return false; // 등록 시에는 변경 감지 없이 유효성만 확인 | ||||
|  | ||||
|       // 수정 시에는 변경 사항이 있는 경우에만 저장 가능 | ||||
|       const changed = this.getChangedFields(); | ||||
|       const hasNonIdField = Object.keys(changed || {}).some(k => k !== 'id'); | ||||
|       const imageChanged = !!this.character.image; // 새 이미지 선택 여부 | ||||
|       return !(hasNonIdField || imageChanged); | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   watch: { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user