feat(chat): 캐릭터 폼에 '한 줄 소개', 캐릭터 유형, 원작 정보 추가 및 API 필드 반영
CharacterForm.vue: 설명을 한 줄 소개(TextField)로 변경하고 MBTI 옆에 캐릭터 유형 Select 추가, 태그 아래 원작명/원작링크 필드 추가. api/character.js: createCharacter 요청에 characterType, originalTitle, originalLink 반영. 수정/등록 로직에 관련 필드 매핑 및 변경 필드 추출 반영. 왜: 신규 요구사항 반영 및 API/데이터 정합성 확보.
This commit is contained in:
parent
efca5e445d
commit
a3e82a81f8
|
@ -34,6 +34,9 @@ async function createCharacter(characterData) {
|
||||||
age: characterData.age,
|
age: characterData.age,
|
||||||
gender: characterData.gender,
|
gender: characterData.gender,
|
||||||
mbti: characterData.mbti,
|
mbti: characterData.mbti,
|
||||||
|
characterType: characterData.type,
|
||||||
|
originalTitle: characterData.originalTitle,
|
||||||
|
originalLink: characterData.originalLink,
|
||||||
speechPattern: characterData.speechPattern,
|
speechPattern: characterData.speechPattern,
|
||||||
speechStyle: characterData.conversationStyle,
|
speechStyle: characterData.conversationStyle,
|
||||||
appearance: characterData.appearance,
|
appearance: characterData.appearance,
|
||||||
|
|
|
@ -69,17 +69,16 @@
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
<!-- 캐릭터 설명 -->
|
<!-- 캐릭터 한 줄 소개 -->
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12">
|
<v-col cols="12">
|
||||||
<v-textarea
|
<v-text-field
|
||||||
v-model="character.description"
|
v-model="character.description"
|
||||||
label="캐릭터 설명"
|
label="캐릭터 한 줄 소개"
|
||||||
:rules="descriptionRules"
|
:rules="descriptionRules"
|
||||||
required
|
required
|
||||||
outlined
|
outlined
|
||||||
auto-grow
|
dense
|
||||||
rows="4"
|
|
||||||
/>
|
/>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
@ -117,7 +116,7 @@
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
<!-- MBTI -->
|
<!-- MBTI & 캐릭터 유형 -->
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col
|
<v-col
|
||||||
cols="12"
|
cols="12"
|
||||||
|
@ -131,6 +130,18 @@
|
||||||
dense
|
dense
|
||||||
/>
|
/>
|
||||||
</v-col>
|
</v-col>
|
||||||
|
<v-col
|
||||||
|
cols="12"
|
||||||
|
md="6"
|
||||||
|
>
|
||||||
|
<v-select
|
||||||
|
v-model="character.type"
|
||||||
|
:items="typeOptions"
|
||||||
|
label="캐릭터 유형"
|
||||||
|
outlined
|
||||||
|
dense
|
||||||
|
/>
|
||||||
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
<!-- 태그 - 입력 후 띄어쓰기 할 때마다 Chip 형태로 변경 -->
|
<!-- 태그 - 입력 후 띄어쓰기 할 때마다 Chip 형태로 변경 -->
|
||||||
|
@ -168,6 +179,32 @@
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
|
<!-- 원작 정보 -->
|
||||||
|
<v-row>
|
||||||
|
<v-col
|
||||||
|
cols="12"
|
||||||
|
md="6"
|
||||||
|
>
|
||||||
|
<v-text-field
|
||||||
|
v-model="character.originalTitle"
|
||||||
|
label="원작명"
|
||||||
|
outlined
|
||||||
|
dense
|
||||||
|
/>
|
||||||
|
</v-col>
|
||||||
|
<v-col
|
||||||
|
cols="12"
|
||||||
|
md="6"
|
||||||
|
>
|
||||||
|
<v-text-field
|
||||||
|
v-model="character.originalLink"
|
||||||
|
label="원작링크"
|
||||||
|
outlined
|
||||||
|
dense
|
||||||
|
/>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
|
||||||
<!-- 긴 텍스트 섹션 -->
|
<!-- 긴 텍스트 섹션 -->
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12">
|
<v-col cols="12">
|
||||||
|
@ -925,6 +962,9 @@ export default {
|
||||||
gender: '',
|
gender: '',
|
||||||
age: '',
|
age: '',
|
||||||
mbti: '',
|
mbti: '',
|
||||||
|
type: '',
|
||||||
|
originalTitle: '',
|
||||||
|
originalLink: '',
|
||||||
speechPattern: '',
|
speechPattern: '',
|
||||||
conversationStyle: '',
|
conversationStyle: '',
|
||||||
appearance: '',
|
appearance: '',
|
||||||
|
@ -950,8 +990,8 @@ export default {
|
||||||
v => (v && v.trim().length > 0) || '이름을 입력하세요'
|
v => (v && v.trim().length > 0) || '이름을 입력하세요'
|
||||||
],
|
],
|
||||||
descriptionRules: [
|
descriptionRules: [
|
||||||
v => !!v || '설명을 입력하세요',
|
v => !!v || '한 줄 소개를 입력하세요',
|
||||||
v => (v && v.trim().length > 0) || '설명을 입력하세요'
|
v => (v && v.trim().length > 0) || '한 줄 소개를 입력하세요'
|
||||||
],
|
],
|
||||||
imageRules: [
|
imageRules: [
|
||||||
v => !this.isEdit || !!v || !!this.character.imageUrl || '이미지를 선택하세요'
|
v => !this.isEdit || !!v || !!this.character.imageUrl || '이미지를 선택하세요'
|
||||||
|
@ -962,7 +1002,8 @@ export default {
|
||||||
'INFJ', 'INFP', 'ENFJ', 'ENFP',
|
'INFJ', 'INFP', 'ENFJ', 'ENFP',
|
||||||
'ISTJ', 'ISFJ', 'ESTJ', 'ESFJ',
|
'ISTJ', 'ISFJ', 'ESTJ', 'ESFJ',
|
||||||
'ISTP', 'ISFP', 'ESTP', 'ESFP'
|
'ISTP', 'ISFP', 'ESTP', 'ESFP'
|
||||||
]
|
],
|
||||||
|
typeOptions: ['Clone', 'Character']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -1247,6 +1288,9 @@ export default {
|
||||||
age: this.character.age,
|
age: this.character.age,
|
||||||
gender: this.character.gender,
|
gender: this.character.gender,
|
||||||
mbti: this.character.mbti,
|
mbti: this.character.mbti,
|
||||||
|
type: this.character.type,
|
||||||
|
originalTitle: this.character.originalTitle,
|
||||||
|
originalLink: this.character.originalLink,
|
||||||
speechPattern: this.character.speechPattern,
|
speechPattern: this.character.speechPattern,
|
||||||
speechStyle: this.character.conversationStyle,
|
speechStyle: this.character.conversationStyle,
|
||||||
appearance: this.character.appearance,
|
appearance: this.character.appearance,
|
||||||
|
@ -1269,7 +1313,7 @@ export default {
|
||||||
|
|
||||||
// 기본 필드 비교
|
// 기본 필드 비교
|
||||||
const simpleFields = [
|
const simpleFields = [
|
||||||
'name', 'description', 'age', 'gender', 'mbti',
|
'name', 'description', 'age', 'gender', 'mbti', 'type', 'originalTitle', 'originalLink',
|
||||||
'speechPattern', 'isActive'
|
'speechPattern', 'isActive'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue