diff --git a/src/views/Chat/CharacterForm.vue b/src/views/Chat/CharacterForm.vue
index c8af1b1..e2dd4b1 100644
--- a/src/views/Chat/CharacterForm.vue
+++ b/src/views/Chat/CharacterForm.vue
@@ -270,6 +270,7 @@
outlined
auto-grow
rows="4"
+ :rules="systemPromptRules"
/>
- 저장
+ {{ isEdit ? '수정' : '저장' }}
@@ -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: {