feat(content): 정산요율 항목 및 개별 삭제 플래그 추가

- 콘텐츠 리스트 테이블에 정산요율 컬럼 표시(null/빈값은 공란)
- 수정 다이얼로그에 정산요율 입력 필드 추가(number, 빈값 허용)
- isSettlementRatioDeleted 플래그 추가: 체크 시 입력 비활성화 및 요청 전송 제외
- 수정 요청 시 변경된 값만 전송, 삭제 플래그 true면 settlementRatio 미포함
- created/show/cancel 시 데이터 모델 초기화 로직 반영
This commit is contained in:
Yu Sung
2026-04-07 14:09:49 +09:00
parent 71f71e9d77
commit 7fe6b3bb30

View File

@@ -75,6 +75,9 @@
<th class="text-center"> <th class="text-center">
가격 가격
</th> </th>
<th class="text-center">
정산요율
</th>
<th class="text-center"> <th class="text-center">
한정판 한정판
</th> </th>
@@ -157,6 +160,12 @@
<td v-else> <td v-else>
무료 무료
</td> </td>
<td>
<!-- settlementRatio가 null 또는 빈값이면 빈칸으로 표시 -->
<span v-if="item.settlementRatio !== null && item.settlementRatio !== undefined && String(item.settlementRatio).trim() !== ''">
{{ item.settlementRatio }}
</span>
</td>
<td <td
v-if=" v-if="
item.totalContentCount > 0 && item.totalContentCount > 0 &&
@@ -355,6 +364,36 @@
</v-col> </v-col>
</v-row> </v-row>
</v-card-text> </v-card-text>
<v-card-text>
<v-row align="center">
<v-col cols="4">
정산요율
</v-col>
<v-col cols="8">
<v-text-field
v-model="audio_content.settlement_ratio"
label="정산요율"
placeholder="예: 30"
type="number"
hide-details="auto"
:disabled="audio_content.is_settlement_ratio_deleted"
/>
</v-col>
</v-row>
</v-card-text>
<v-card-text>
<v-row>
<v-col cols="4">
정산요율 삭제
</v-col>
<v-col cols="8">
<input
v-model="audio_content.is_settlement_ratio_deleted"
type="checkbox"
>
</v-col>
</v-row>
</v-card-text>
<v-card-text> <v-card-text>
<v-row> <v-row>
<v-col cols="4"> <v-col cols="4">
@@ -497,6 +536,8 @@ export default {
is_adult: false, is_adult: false,
is_comment_available: false, is_comment_available: false,
is_default_cover_image: false, is_default_cover_image: false,
is_settlement_ratio_deleted: false,
settlement_ratio: "",
}; };
await this.getAudioContentThemeList(); await this.getAudioContentThemeList();
await this.getAudioContent(); await this.getAudioContent();
@@ -531,6 +572,11 @@ export default {
this.audio_content.is_adult = item.isAdult; this.audio_content.is_adult = item.isAdult;
this.audio_content.is_comment_available = item.isCommentAvailable; this.audio_content.is_comment_available = item.isCommentAvailable;
this.audio_content.is_default_cover_image = false; this.audio_content.is_default_cover_image = false;
this.audio_content.is_settlement_ratio_deleted = false;
this.audio_content.settlement_ratio =
item.settlementRatio !== null && item.settlementRatio !== undefined
? String(item.settlementRatio)
: "";
this.image_preview = item.coverImageUrl; this.image_preview = item.coverImageUrl;
this.cover_image_file = null; this.cover_image_file = null;
@@ -590,6 +636,8 @@ export default {
is_adult: false, is_adult: false,
is_comment_available: false, is_comment_available: false,
is_default_cover_image: false, is_default_cover_image: false,
is_settlement_ratio_deleted: false,
settlement_ratio: "",
}; };
this.image_preview = null; this.image_preview = null;
this.cover_image_file = null; this.cover_image_file = null;
@@ -629,6 +677,7 @@ export default {
const request = { const request = {
id: this.audio_content.id, id: this.audio_content.id,
isDefaultCoverImage: this.audio_content.is_default_cover_image, isDefaultCoverImage: this.audio_content.is_default_cover_image,
isSettlementRatioDeleted: this.audio_content.is_settlement_ratio_deleted,
}; };
if ( if (
@@ -657,6 +706,21 @@ export default {
request.isCommentAvailable = this.audio_content.is_comment_available; request.isCommentAvailable = this.audio_content.is_comment_available;
} }
// settlementRatio 처리 (null/빈문자 케이스 포함)
const originalRatio =
this.selected_audio_content.settlementRatio !== null &&
this.selected_audio_content.settlementRatio !== undefined
? String(this.selected_audio_content.settlementRatio)
: "";
const newRatio =
this.audio_content.settlement_ratio !== null &&
this.audio_content.settlement_ratio !== undefined
? String(this.audio_content.settlement_ratio)
: "";
if (!this.audio_content.is_settlement_ratio_deleted && newRatio !== originalRatio) {
request.settlementRatio = newRatio;
}
const formData = new FormData(); const formData = new FormData();
formData.append("request", JSON.stringify(request)); formData.append("request", JSON.stringify(request));