캐릭터 챗봇 #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: {
|
||||
|
|
Loading…
Reference in New Issue