Compare commits

..

4 Commits

Author SHA1 Message Date
abb15cb2c7 Merge pull request 'feat(calculate): 라이브 환불 기능 API 연동 및 UI 수정' (#95) from test into main
Reviewed-on: #95
2026-03-16 07:27:32 +00:00
Yu Sung
97b832fd2e feat(calculate): 라이브 환불 기능 API 연동 및 UI 수정
- refundLive API 요청 파라미터를 canUsage에서 canUsageStr로 변경
- CalculateLive 화면의 환불 함수에서 canUsageStr을 전달하도록 수정
- API URL(/admin/calculate/live/refund) 및 필드 요구사항 반영
2026-03-16 15:49:28 +09:00
b26837f258 Merge pull request 'feat(chat): 시스템 프롬프트 글자수 표시 및 2000자 제한 추가' (#94) from test into main
Reviewed-on: #94
2026-03-16 02:16:13 +00:00
Yu Sung
b21d0f455f feat(chat): 시스템 프롬프트 글자수 표시 및 2000자 제한 추가 2026-03-16 11:12:38 +09:00
3 changed files with 46 additions and 12 deletions

View File

@@ -138,6 +138,15 @@ async function deleteCreatorSettlementRatio(memberId) {
return Vue.axios.post('/admin/calculate/ratio/delete/' + memberId); return Vue.axios.post('/admin/calculate/ratio/delete/' + memberId);
} }
async function refundLive(roomId, canUsageStr) {
const request = {
roomId: roomId,
canUsageStr: canUsageStr
};
return Vue.axios.post('/admin/calculate/live/refund', request);
}
export { export {
getCalculateLive, getCalculateLive,
getCalculateContent, getCalculateContent,
@@ -148,6 +157,7 @@ export {
createCreatorSettlementRatio, createCreatorSettlementRatio,
updateCreatorSettlementRatio, updateCreatorSettlementRatio,
deleteCreatorSettlementRatio, deleteCreatorSettlementRatio,
refundLive,
getCalculateLiveByCreator, getCalculateLiveByCreator,
getCalculateContentByCreator, getCalculateContentByCreator,
getCalculateCommunityByCreator, getCalculateCommunityByCreator,

View File

@@ -69,10 +69,6 @@
class="elevation-1" class="elevation-1"
hide-default-footer hide-default-footer
> >
<template v-slot:item.email="{ item }">
{{ item.email }}
</template>
<template v-slot:item.nickname="{ item }"> <template v-slot:item.nickname="{ item }">
{{ item.nickname }} {{ item.nickname }}
</template> </template>
@@ -116,6 +112,16 @@
<template v-slot:item.depositAmount="{ item }"> <template v-slot:item.depositAmount="{ item }">
{{ item.depositAmount.toLocaleString() }} {{ item.depositAmount.toLocaleString() }}
</template> </template>
<template v-slot:item.actions="{ item }">
<v-btn
small
color="error"
@click="refund(item)"
>
환불
</v-btn>
</template>
</v-data-table> </v-data-table>
</v-col> </v-col>
</v-row> </v-row>
@@ -151,12 +157,6 @@ export default {
total_page: 0, total_page: 0,
items: [], items: [],
headers: [ headers: [
{
text: '이메일',
align: 'center',
sortable: false,
value: 'email',
},
{ {
text: '크리에이터', text: '크리에이터',
align: 'center', align: 'center',
@@ -227,6 +227,12 @@ export default {
align: 'center', align: 'center',
sortable: false, sortable: false,
value: 'depositAmount', value: 'depositAmount',
},
{
text: '관리',
align: 'center',
sortable: false,
value: 'actions',
} }
], ],
} }
@@ -286,6 +292,22 @@ export default {
this.getCalculateLive() this.getCalculateLive()
}, },
async refund(item) {
if (confirm('정말로 환불하시겠습니까?')) {
try {
const res = await api.refundLive(item.roomId, item.canUsageStr)
if (res.status === 200 && res.data.success === true) {
this.notifySuccess('환불 처리가 완료되었습니다.')
await this.getCalculateLive()
} else {
this.notifyError(res.data.message || '환불 처리 중 오류가 발생했습니다.')
}
} catch (e) {
this.notifyError('환불 처리 중 오류가 발생했습니다.')
}
}
},
async downloadExcel() { async downloadExcel() {
try { try {
const res = await api.downloadCalculateLiveExcel(this.start_date, this.end_date) const res = await api.downloadCalculateLiveExcel(this.start_date, this.end_date)

View File

@@ -353,10 +353,11 @@
<v-col cols="12"> <v-col cols="12">
<v-textarea <v-textarea
v-model="character.systemPrompt" v-model="character.systemPrompt"
label="시스템 프롬프트" label="시스템 프롬프트 (최대 2000자)"
outlined outlined
auto-grow auto-grow
rows="4" rows="4"
counter="2000"
:class="{ 'required-asterisk': !isEdit }" :class="{ 'required-asterisk': !isEdit }"
:rules="systemPromptRules" :rules="systemPromptRules"
/> />
@@ -1182,7 +1183,8 @@ export default {
], ],
typeOptions: ['Clone', 'Character'], typeOptions: ['Clone', 'Character'],
systemPromptRules: [ systemPromptRules: [
v => (this.isEdit ? true : (!!v && v.trim().length > 0) || '시스템 프롬프트를 입력하세요') v => (this.isEdit ? true : (!!v && v.trim().length > 0) || '시스템 프롬프트를 입력하세요'),
v => (!!v && v.length <= 2000) || '최대 2000자까지 입력 가능합니다'
], ],
// 인물 관계 옵션 및 검증 규칙 // 인물 관계 옵션 및 검증 규칙
relationshipTypeOptions: ['가족', '친구', '동료', '연인', '기타'], relationshipTypeOptions: ['가족', '친구', '동료', '연인', '기타'],