캐릭터 챗봇 #74
| @@ -270,6 +270,7 @@ | |||||||
|                   outlined |                   outlined | ||||||
|                   auto-grow |                   auto-grow | ||||||
|                   rows="4" |                   rows="4" | ||||||
|  |                   :rules="systemPromptRules" | ||||||
|                 /> |                 /> | ||||||
|                 <div |                 <div | ||||||
|                   class="caption grey--text text--darken-1 mt-1 custom-caption" |                   class="caption grey--text text--darken-1 mt-1 custom-caption" | ||||||
| @@ -908,10 +909,10 @@ | |||||||
|             <v-btn |             <v-btn | ||||||
|               color="primary" |               color="primary" | ||||||
|               :loading="isLoading" |               :loading="isLoading" | ||||||
|               :disabled="!isFormValid || isLoading" |               :disabled="isSaveDisabled" | ||||||
|               @click="saveCharacter" |               @click="saveCharacter" | ||||||
|             > |             > | ||||||
|               저장 |               {{ isEdit ? '수정' : '저장' }} | ||||||
|             </v-btn> |             </v-btn> | ||||||
|           </v-card-actions> |           </v-card-actions> | ||||||
|         </v-form> |         </v-form> | ||||||
| @@ -994,7 +995,7 @@ export default { | |||||||
|         v => (v && v.trim().length > 0) || '한 줄 소개를 입력하세요' |         v => (v && v.trim().length > 0) || '한 줄 소개를 입력하세요' | ||||||
|       ], |       ], | ||||||
|       imageRules: [ |       imageRules: [ | ||||||
|         v => !this.isEdit || !!v || !!this.character.imageUrl || '이미지를 선택하세요' |         v => (this.isEdit ? true : (!!v || '이미지를 선택하세요')) | ||||||
|       ], |       ], | ||||||
|       genderOptions: ['남성', '여성', '기타'], |       genderOptions: ['남성', '여성', '기타'], | ||||||
|       mbtiOptions: [ |       mbtiOptions: [ | ||||||
| @@ -1003,11 +1004,25 @@ export default { | |||||||
|         'ISTJ', 'ISFJ', 'ESTJ', 'ESFJ', |         'ISTJ', 'ISFJ', 'ESTJ', 'ESFJ', | ||||||
|         'ISTP', 'ISFP', 'ESTP', 'ESFP' |         'ISTP', 'ISFP', 'ESTP', 'ESFP' | ||||||
|       ], |       ], | ||||||
|       typeOptions: ['Clone', 'Character'] |       typeOptions: ['Clone', 'Character'], | ||||||
|  |       systemPromptRules: [ | ||||||
|  |         v => (this.isEdit ? true : (!!v && v.trim().length > 0) || '시스템 프롬프트를 입력하세요') | ||||||
|  |       ] | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   computed: { |   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: { |   watch: { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user