diff --git a/CHANGELOG.MD b/CHANGELOG.MD index 32cfbf3e7..e119f2166 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -2,6 +2,13 @@ 更新日志文档,版本顺序从新到旧,最新版本在最前(上)面。 +# 0.15.5 + +## 新特性 + +- 剧集分组和条目关系类型均添加OVA和OAD +- Console条目详情页的剧集Tab名加上数量显示 + # 0.15.4 ## 新特性 diff --git a/api/src/main/java/run/ikaros/api/store/enums/EpisodeGroup.java b/api/src/main/java/run/ikaros/api/store/enums/EpisodeGroup.java index 7dbdfbb3c..d540e3a6e 100644 --- a/api/src/main/java/run/ikaros/api/store/enums/EpisodeGroup.java +++ b/api/src/main/java/run/ikaros/api/store/enums/EpisodeGroup.java @@ -27,9 +27,21 @@ public enum EpisodeGroup { */ LIVE, /** - * commercial message, CM. + * CM: Commercial Message. */ COMMERCIAL_MESSAGE, + /** + * OST: Original Sound Track. + */ + ORIGINAL_SOUND_TRACK, + /** + * OVA: Original Video Animation. + */ + ORIGINAL_VIDEO_ANIMATION, + /** + * OAD: Original Animation Disc. + */ + ORIGINAL_ANIMATION_DISC, MUSIC_DIST1, MUSIC_DIST2, MUSIC_DIST3, diff --git a/api/src/main/java/run/ikaros/api/store/enums/SubjectRelationType.java b/api/src/main/java/run/ikaros/api/store/enums/SubjectRelationType.java index ff39d2a38..41759ad5d 100644 --- a/api/src/main/java/run/ikaros/api/store/enums/SubjectRelationType.java +++ b/api/src/main/java/run/ikaros/api/store/enums/SubjectRelationType.java @@ -24,9 +24,17 @@ public enum SubjectRelationType { */ SAME_WORLDVIEW(10), /** - * OST. + * OST: Original Sound Track. */ - ORIGINAL_SOUND_TRACK(11); + ORIGINAL_SOUND_TRACK(11), + /** + * OVA: Original Video Animation. + */ + ORIGINAL_VIDEO_ANIMATION(12), + /** + * OAD: Original Animation Disc. + */ + ORIGINAL_ANIMATION_DISC(13); // todo more subject relation type. private final int code; diff --git a/console/packages/api-client/README.md b/console/packages/api-client/README.md index 191e49a16..451edce93 100644 --- a/console/packages/api-client/README.md +++ b/console/packages/api-client/README.md @@ -58,7 +58,7 @@ npm publish 选择当前目录下的更改进行`git add .` ```bash -git commit -am "build: gen new api-client v0.15.2+1" +git commit -am "build: gen new api-client v0.15.5.1" ``` 合成版(powershell),升级 package.json 版本,并启动服务端后,在 api-client 路径下: diff --git a/console/packages/api-client/package.json b/console/packages/api-client/package.json index 492e36682..5b67aaaa2 100644 --- a/console/packages/api-client/package.json +++ b/console/packages/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@runikaros/api-client", - "version": "0.15.2+1", + "version": "0.15.5.1", "description": "Project ikaros console api-client package", "type": "module", "scripts": { diff --git a/console/packages/api-client/src/api/v1alpha1-indices-api.ts b/console/packages/api-client/src/api/v1alpha1-indices-api.ts index 9fc0ce612..c22b83483 100644 --- a/console/packages/api-client/src/api/v1alpha1-indices-api.ts +++ b/console/packages/api-client/src/api/v1alpha1-indices-api.ts @@ -143,14 +143,14 @@ export const V1alpha1IndicesApiAxiosParamCreator = function ( localVarQueryParameter["highlightPostTag"] = highlightPostTag; } - if (keyword !== undefined) { - localVarQueryParameter["keyword"] = keyword; - } - if (highlightPreTag !== undefined) { localVarQueryParameter["highlightPreTag"] = highlightPreTag; } + if (keyword !== undefined) { + localVarQueryParameter["keyword"] = keyword; + } + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; diff --git a/console/packages/api-client/src/api/v1alpha1-subject-relation-api.ts b/console/packages/api-client/src/api/v1alpha1-subject-relation-api.ts index c5d7caefb..20cc7563f 100644 --- a/console/packages/api-client/src/api/v1alpha1-subject-relation-api.ts +++ b/console/packages/api-client/src/api/v1alpha1-subject-relation-api.ts @@ -111,7 +111,7 @@ export const V1alpha1SubjectRelationApiAxiosParamCreator = function ( /** * * @param {number} subjectId Subject id - * @param {'OTHER' | 'ANIME' | 'COMIC' | 'GAME' | 'MUSIC' | 'NOVEL' | 'REAL' | 'BEFORE' | 'AFTER' | 'SAME_WORLDVIEW' | 'ORIGINAL_SOUND_TRACK'} relationType Subject relation type + * @param {'OTHER' | 'ANIME' | 'COMIC' | 'GAME' | 'MUSIC' | 'NOVEL' | 'REAL' | 'BEFORE' | 'AFTER' | 'SAME_WORLDVIEW' | 'ORIGINAL_SOUND_TRACK' | 'ORIGINAL_VIDEO_ANIMATION' | 'ORIGINAL_ANIMATION_DISC'} relationType Subject relation type * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -128,7 +128,9 @@ export const V1alpha1SubjectRelationApiAxiosParamCreator = function ( | "BEFORE" | "AFTER" | "SAME_WORLDVIEW" - | "ORIGINAL_SOUND_TRACK", + | "ORIGINAL_SOUND_TRACK" + | "ORIGINAL_VIDEO_ANIMATION" + | "ORIGINAL_ANIMATION_DISC", options: AxiosRequestConfig = {} ): Promise => { // verify required parameter 'subjectId' is not null or undefined @@ -244,7 +246,7 @@ export const V1alpha1SubjectRelationApiAxiosParamCreator = function ( /** * Remove subject relation * @param {number} subjectId Subject id - * @param {'OTHER' | 'ANIME' | 'COMIC' | 'GAME' | 'MUSIC' | 'NOVEL' | 'REAL' | 'BEFORE' | 'AFTER' | 'SAME_WORLDVIEW' | 'ORIGINAL_SOUND_TRACK'} relationType Subject relation type code + * @param {'OTHER' | 'ANIME' | 'COMIC' | 'GAME' | 'MUSIC' | 'NOVEL' | 'REAL' | 'BEFORE' | 'AFTER' | 'SAME_WORLDVIEW' | 'ORIGINAL_SOUND_TRACK' | 'ORIGINAL_VIDEO_ANIMATION' | 'ORIGINAL_ANIMATION_DISC'} relationType Subject relation type code * @param {string} relationSubjects Relation subjects * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -262,7 +264,9 @@ export const V1alpha1SubjectRelationApiAxiosParamCreator = function ( | "BEFORE" | "AFTER" | "SAME_WORLDVIEW" - | "ORIGINAL_SOUND_TRACK", + | "ORIGINAL_SOUND_TRACK" + | "ORIGINAL_VIDEO_ANIMATION" + | "ORIGINAL_ANIMATION_DISC", relationSubjects: string, options: AxiosRequestConfig = {} ): Promise => { @@ -366,7 +370,7 @@ export const V1alpha1SubjectRelationApiFp = function ( /** * * @param {number} subjectId Subject id - * @param {'OTHER' | 'ANIME' | 'COMIC' | 'GAME' | 'MUSIC' | 'NOVEL' | 'REAL' | 'BEFORE' | 'AFTER' | 'SAME_WORLDVIEW' | 'ORIGINAL_SOUND_TRACK'} relationType Subject relation type + * @param {'OTHER' | 'ANIME' | 'COMIC' | 'GAME' | 'MUSIC' | 'NOVEL' | 'REAL' | 'BEFORE' | 'AFTER' | 'SAME_WORLDVIEW' | 'ORIGINAL_SOUND_TRACK' | 'ORIGINAL_VIDEO_ANIMATION' | 'ORIGINAL_ANIMATION_DISC'} relationType Subject relation type * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -383,7 +387,9 @@ export const V1alpha1SubjectRelationApiFp = function ( | "BEFORE" | "AFTER" | "SAME_WORLDVIEW" - | "ORIGINAL_SOUND_TRACK", + | "ORIGINAL_SOUND_TRACK" + | "ORIGINAL_VIDEO_ANIMATION" + | "ORIGINAL_ANIMATION_DISC", options?: AxiosRequestConfig ): Promise< (axios?: AxiosInstance, basePath?: string) => AxiosPromise @@ -431,7 +437,7 @@ export const V1alpha1SubjectRelationApiFp = function ( /** * Remove subject relation * @param {number} subjectId Subject id - * @param {'OTHER' | 'ANIME' | 'COMIC' | 'GAME' | 'MUSIC' | 'NOVEL' | 'REAL' | 'BEFORE' | 'AFTER' | 'SAME_WORLDVIEW' | 'ORIGINAL_SOUND_TRACK'} relationType Subject relation type code + * @param {'OTHER' | 'ANIME' | 'COMIC' | 'GAME' | 'MUSIC' | 'NOVEL' | 'REAL' | 'BEFORE' | 'AFTER' | 'SAME_WORLDVIEW' | 'ORIGINAL_SOUND_TRACK' | 'ORIGINAL_VIDEO_ANIMATION' | 'ORIGINAL_ANIMATION_DISC'} relationType Subject relation type code * @param {string} relationSubjects Relation subjects * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -449,7 +455,9 @@ export const V1alpha1SubjectRelationApiFp = function ( | "BEFORE" | "AFTER" | "SAME_WORLDVIEW" - | "ORIGINAL_SOUND_TRACK", + | "ORIGINAL_SOUND_TRACK" + | "ORIGINAL_VIDEO_ANIMATION" + | "ORIGINAL_ANIMATION_DISC", relationSubjects: string, options?: AxiosRequestConfig ): Promise< @@ -580,7 +588,7 @@ export interface V1alpha1SubjectRelationApiGetSubjectRelationByIdAndTypeRequest /** * Subject relation type - * @type {'OTHER' | 'ANIME' | 'COMIC' | 'GAME' | 'MUSIC' | 'NOVEL' | 'REAL' | 'BEFORE' | 'AFTER' | 'SAME_WORLDVIEW' | 'ORIGINAL_SOUND_TRACK'} + * @type {'OTHER' | 'ANIME' | 'COMIC' | 'GAME' | 'MUSIC' | 'NOVEL' | 'REAL' | 'BEFORE' | 'AFTER' | 'SAME_WORLDVIEW' | 'ORIGINAL_SOUND_TRACK' | 'ORIGINAL_VIDEO_ANIMATION' | 'ORIGINAL_ANIMATION_DISC'} * @memberof V1alpha1SubjectRelationApiGetSubjectRelationByIdAndType */ readonly relationType: @@ -594,7 +602,9 @@ export interface V1alpha1SubjectRelationApiGetSubjectRelationByIdAndTypeRequest | "BEFORE" | "AFTER" | "SAME_WORLDVIEW" - | "ORIGINAL_SOUND_TRACK"; + | "ORIGINAL_SOUND_TRACK" + | "ORIGINAL_VIDEO_ANIMATION" + | "ORIGINAL_ANIMATION_DISC"; } /** @@ -626,7 +636,7 @@ export interface V1alpha1SubjectRelationApiRemoveSubjectRelationRequest { /** * Subject relation type code - * @type {'OTHER' | 'ANIME' | 'COMIC' | 'GAME' | 'MUSIC' | 'NOVEL' | 'REAL' | 'BEFORE' | 'AFTER' | 'SAME_WORLDVIEW' | 'ORIGINAL_SOUND_TRACK'} + * @type {'OTHER' | 'ANIME' | 'COMIC' | 'GAME' | 'MUSIC' | 'NOVEL' | 'REAL' | 'BEFORE' | 'AFTER' | 'SAME_WORLDVIEW' | 'ORIGINAL_SOUND_TRACK' | 'ORIGINAL_VIDEO_ANIMATION' | 'ORIGINAL_ANIMATION_DISC'} * @memberof V1alpha1SubjectRelationApiRemoveSubjectRelation */ readonly relationType: @@ -640,7 +650,9 @@ export interface V1alpha1SubjectRelationApiRemoveSubjectRelationRequest { | "BEFORE" | "AFTER" | "SAME_WORLDVIEW" - | "ORIGINAL_SOUND_TRACK"; + | "ORIGINAL_SOUND_TRACK" + | "ORIGINAL_VIDEO_ANIMATION" + | "ORIGINAL_ANIMATION_DISC"; /** * Relation subjects diff --git a/console/packages/api-client/src/models/batch-matching-subject-episodes-attachment.ts b/console/packages/api-client/src/models/batch-matching-subject-episodes-attachment.ts index e852e6f51..49ae4d2c4 100644 --- a/console/packages/api-client/src/models/batch-matching-subject-episodes-attachment.ts +++ b/console/packages/api-client/src/models/batch-matching-subject-episodes-attachment.ts @@ -30,4 +30,33 @@ export interface BatchMatchingSubjectEpisodesAttachment { * @memberof BatchMatchingSubjectEpisodesAttachment */ attachmentIds: Array; + /** + * subject episode group. + * @type {string} + * @memberof BatchMatchingSubjectEpisodesAttachment + */ + episodeGroup?: BatchMatchingSubjectEpisodesAttachmentEpisodeGroupEnum; } + +export const BatchMatchingSubjectEpisodesAttachmentEpisodeGroupEnum = { + Main: "MAIN", + PromotionVideo: "PROMOTION_VIDEO", + OpeningSong: "OPENING_SONG", + EndingSong: "ENDING_SONG", + SpecialPromotion: "SPECIAL_PROMOTION", + SmallTheater: "SMALL_THEATER", + Live: "LIVE", + CommercialMessage: "COMMERCIAL_MESSAGE", + OriginalSoundTrack: "ORIGINAL_SOUND_TRACK", + OriginalVideoAnimation: "ORIGINAL_VIDEO_ANIMATION", + OriginalAnimationDisc: "ORIGINAL_ANIMATION_DISC", + MusicDist1: "MUSIC_DIST1", + MusicDist2: "MUSIC_DIST2", + MusicDist3: "MUSIC_DIST3", + MusicDist4: "MUSIC_DIST4", + MusicDist5: "MUSIC_DIST5", + Other: "OTHER", +} as const; + +export type BatchMatchingSubjectEpisodesAttachmentEpisodeGroupEnum = + (typeof BatchMatchingSubjectEpisodesAttachmentEpisodeGroupEnum)[keyof typeof BatchMatchingSubjectEpisodesAttachmentEpisodeGroupEnum]; diff --git a/console/packages/api-client/src/models/episode-collection.ts b/console/packages/api-client/src/models/episode-collection.ts index 619bdf8a3..a926a7800 100644 --- a/console/packages/api-client/src/models/episode-collection.ts +++ b/console/packages/api-client/src/models/episode-collection.ts @@ -107,6 +107,9 @@ export const EpisodeCollectionEpGroupEnum = { SmallTheater: "SMALL_THEATER", Live: "LIVE", CommercialMessage: "COMMERCIAL_MESSAGE", + OriginalSoundTrack: "ORIGINAL_SOUND_TRACK", + OriginalVideoAnimation: "ORIGINAL_VIDEO_ANIMATION", + OriginalAnimationDisc: "ORIGINAL_ANIMATION_DISC", MusicDist1: "MUSIC_DIST1", MusicDist2: "MUSIC_DIST2", MusicDist3: "MUSIC_DIST3", diff --git a/console/packages/api-client/src/models/episode-meta.ts b/console/packages/api-client/src/models/episode-meta.ts index a753073fc..27068b54c 100644 --- a/console/packages/api-client/src/models/episode-meta.ts +++ b/console/packages/api-client/src/models/episode-meta.ts @@ -77,6 +77,9 @@ export const EpisodeMetaGroupEnum = { SmallTheater: "SMALL_THEATER", Live: "LIVE", CommercialMessage: "COMMERCIAL_MESSAGE", + OriginalSoundTrack: "ORIGINAL_SOUND_TRACK", + OriginalVideoAnimation: "ORIGINAL_VIDEO_ANIMATION", + OriginalAnimationDisc: "ORIGINAL_ANIMATION_DISC", MusicDist1: "MUSIC_DIST1", MusicDist2: "MUSIC_DIST2", MusicDist3: "MUSIC_DIST3", diff --git a/console/packages/api-client/src/models/episode.ts b/console/packages/api-client/src/models/episode.ts index 8da5fe381..17bad6a18 100644 --- a/console/packages/api-client/src/models/episode.ts +++ b/console/packages/api-client/src/models/episode.ts @@ -87,6 +87,9 @@ export const EpisodeGroupEnum = { SmallTheater: "SMALL_THEATER", Live: "LIVE", CommercialMessage: "COMMERCIAL_MESSAGE", + OriginalSoundTrack: "ORIGINAL_SOUND_TRACK", + OriginalVideoAnimation: "ORIGINAL_VIDEO_ANIMATION", + OriginalAnimationDisc: "ORIGINAL_ANIMATION_DISC", MusicDist1: "MUSIC_DIST1", MusicDist2: "MUSIC_DIST2", MusicDist3: "MUSIC_DIST3", diff --git a/console/packages/api-client/src/models/paging-wrap.ts b/console/packages/api-client/src/models/paging-wrap.ts index df967c879..26cd71fd5 100644 --- a/console/packages/api-client/src/models/paging-wrap.ts +++ b/console/packages/api-client/src/models/paging-wrap.ts @@ -43,17 +43,17 @@ export interface PagingWrap { */ items: Array; /** - * Indicates whether current page is the last page. + * Indicates whether current page is the first page. * @type {boolean} * @memberof PagingWrap */ - lastPage: boolean; + firstPage: boolean; /** - * Indicates whether current page is the first page. + * Indicates whether current page is the last page. * @type {boolean} * @memberof PagingWrap */ - firstPage: boolean; + lastPage: boolean; /** * Indicates whether current page has previous page. * @type {boolean} diff --git a/console/packages/api-client/src/models/subject-relation.ts b/console/packages/api-client/src/models/subject-relation.ts index c6b1b064d..0d31ad8ca 100644 --- a/console/packages/api-client/src/models/subject-relation.ts +++ b/console/packages/api-client/src/models/subject-relation.ts @@ -50,6 +50,8 @@ export const SubjectRelationRelationTypeEnum = { After: "AFTER", SameWorldview: "SAME_WORLDVIEW", OriginalSoundTrack: "ORIGINAL_SOUND_TRACK", + OriginalVideoAnimation: "ORIGINAL_VIDEO_ANIMATION", + OriginalAnimationDisc: "ORIGINAL_ANIMATION_DISC", } as const; export type SubjectRelationRelationTypeEnum = diff --git a/console/src/locales/en.yaml b/console/src/locales/en.yaml index d0d814bac..81adefb45 100644 --- a/console/src/locales/en.yaml +++ b/console/src/locales/en.yaml @@ -497,6 +497,8 @@ module: after: "After({length})\t" same-worldview: SameWorldView({length}) ost: OST({length}) + ova: OVA({length}) + oad: OAD({length}) other: Other({length}) post: message: @@ -692,6 +694,9 @@ module: SMALL_THEATER: ST LIVE: Live COMMERCIAL_MESSAGE: CM + ORIGINAL_SOUND_TRACK: OST + ORIGINAL_VIDEO_ANIMATION: OVA + ORIGINAL_ANIMATION_DISC: OAD MUSIC_DIST1: MD1 MUSIC_DIST2: MD2 MUSIC_DIST3: MD3 diff --git a/console/src/locales/zh-CN.yaml b/console/src/locales/zh-CN.yaml index 35f040a48..34fb65703 100644 --- a/console/src/locales/zh-CN.yaml +++ b/console/src/locales/zh-CN.yaml @@ -551,6 +551,8 @@ module: after: 后传({length}) same-worldview: 相同世界观({length}) ost: OST({length}) + ova: OVA({length}) + oad: OAD({length}) other: 其它({length}) post: title: 条目关系新增 @@ -730,6 +732,9 @@ module: SMALL_THEATER: 相同世界观 LIVE: 直播 COMMERCIAL_MESSAGE: 广告 + ORIGINAL_SOUND_TRACK: OST + ORIGINAL_VIDEO_ANIMATION: OVA + ORIGINAL_ANIMATION_DISC: OAD MUSIC_DIST1: MD1 MUSIC_DIST2: MD2 MUSIC_DIST3: MD3 diff --git a/console/src/modules/common/constants.ts b/console/src/modules/common/constants.ts index 1109a89f8..285b13ed0 100644 --- a/console/src/modules/common/constants.ts +++ b/console/src/modules/common/constants.ts @@ -27,8 +27,11 @@ export const episodeGroups = [ 'ENDING_SONG', 'SPECIAL_PROMOTION', 'SMALL_THEATER', - 'COMMERCIAL_MESSAGE', 'LIVE', + 'COMMERCIAL_MESSAGE', + 'ORIGINAL_SOUND_TRACK', + 'ORIGINAL_VIDEO_ANIMATION', + 'ORIGINAL_ANIMATION_DISC', 'MUSIC_DIST1', 'MUSIC_DIST2', 'MUSIC_DIST3', @@ -44,8 +47,11 @@ export const episodeGroupLabelMap = new Map([ ['ENDING_SONG', '片尾曲(ED)'], ['SPECIAL_PROMOTION', '特典(SP)'], ['SMALL_THEATER', '小剧场(ST)'], - ['COMMERCIAL_MESSAGE', '广告(CM)'], ['LIVE', '直播(Live)'], + ['COMMERCIAL_MESSAGE', '广告(CM)'], + ['ORIGINAL_SOUND_TRACK', 'OST'], + ['ORIGINAL_VIDEO_ANIMATION', 'OVA'], + ['ORIGINAL_ANIMATION_DISC', 'OAD'], ['OTHER', '其它(Other)'], ['MUSIC_DIST1', '音乐列表一(MUSIC_DIST1)'], ['MUSIC_DIST2', '音乐列表二(MUSIC_DIST2)'], diff --git a/console/src/modules/content/subject/SubjectDetails.vue b/console/src/modules/content/subject/SubjectDetails.vue index 8c0fe2cc6..8b610d9fd 100644 --- a/console/src/modules/content/subject/SubjectDetails.vue +++ b/console/src/modules/content/subject/SubjectDetails.vue @@ -17,7 +17,7 @@ import router from '@/router'; import {Check, Close} from '@element-plus/icons-vue'; import SubjectSyncDialog from './SubjectSyncDialog.vue'; import {useRoute} from 'vue-router'; -import {computed, nextTick, onMounted, ref, watch} from 'vue'; +import {nextTick, onMounted, ref, watch} from 'vue'; import { ElButton, ElCol, @@ -38,7 +38,6 @@ import { } from 'element-plus'; import SubjectRemoteActionDialog from './SubjectRemoteActionDialog.vue'; import {useSettingStore} from '@/stores/setting'; -import {episodeGroupLabelMap} from '@/modules/common/constants'; import SubjectRelationDialog from './SubjectRelationDialog.vue'; import {useSubjectStore} from '@/stores/subject'; import AttachmentMultiSelectDialog from '@/modules/content/attachment/AttachmentMultiSelectDialog.vue'; @@ -275,16 +274,6 @@ const updateSubjectCollection = async () => { }); ElMessage.success(t('module.subject.collect.message.operate.update.success')); }; -const updateSubjectCollectionProgress = async () => { - await apiClient.collectionSubject.updateCollectionSubjectMainEpProgress({ - subjectId: subject.value.id as number, - progress: subjectCollection.value.main_ep_progress as number, - }); - ElMessage.success( - t('module.subject.collect.message.operate.update-progress.success') - ); - await fetchDatas(); -}; const subjectCollectDialogVisible = ref(false); const changeSubjectCollectState = async () => { @@ -556,11 +545,22 @@ interface EpisdoeGroupItem { count: number; } -const episodeCountIsGt20 = computed( - () => (subject.value.total_episodes as number) >= 20 -); - const episodeGroupItems = ref([]); +const doPushEpGroupItems = ( + group:EpisodeGroupEnum, + groupCountMap:Map, + epGroupItems: EpisdoeGroupItem[])=>{ + if (!groupCountMap.has(group)) return; + const count = groupCountMap.get(group) as number; + epGroupItems.push({ + group:group, + count: count, + label: t( + 'module.subject.episode.group.' + group.toString() + ) + '(' + count + ')' + }); + groupCountMap.delete(group); +} const loadEpisodeGroupLabels = () => { const groupCountMap = new Map(); console.debug('subject', subject.value); @@ -577,54 +577,23 @@ const loadEpisodeGroupLabels = () => { console.debug('groupCountMap', groupCountMap); const epGroupItems: EpisdoeGroupItem[] = []; // MAIN - epGroupItems.push({ - group: EpisodeGroupEnum.Main, - label: t( - 'module.subject.episode.group.' + EpisodeGroupEnum.Main.toString() - ), - count: groupCountMap.get(EpisodeGroupEnum.Main) as number, - }); - groupCountMap.delete(EpisodeGroupEnum.Main); + doPushEpGroupItems(EpisodeGroupEnum.Main, groupCountMap, epGroupItems); + // OP - if (groupCountMap.has(EpisodeGroupEnum.OpeningSong)) { - epGroupItems.push({ - group: EpisodeGroupEnum.OpeningSong, - label: t( - 'module.subject.episode.group.' + - EpisodeGroupEnum.OpeningSong.toString() - ), - count: groupCountMap.get(EpisodeGroupEnum.OpeningSong) as number, - }); - groupCountMap.delete(EpisodeGroupEnum.OpeningSong); - } + doPushEpGroupItems(EpisodeGroupEnum.OpeningSong, groupCountMap, epGroupItems); + // ED - if (groupCountMap.has(EpisodeGroupEnum.EndingSong)) { - epGroupItems.push({ - group: EpisodeGroupEnum.EndingSong, - label: t( - 'module.subject.episode.group.' + EpisodeGroupEnum.EndingSong.toString() - ), - count: groupCountMap.get(EpisodeGroupEnum.EndingSong) as number, - }); - groupCountMap.delete(EpisodeGroupEnum.EndingSong); - } + doPushEpGroupItems(EpisodeGroupEnum.EndingSong, groupCountMap, epGroupItems); + // SP - if (groupCountMap.has(EpisodeGroupEnum.SpecialPromotion)) { - epGroupItems.push({ - group: EpisodeGroupEnum.SpecialPromotion, - label: t( - 'module.subject.episode.group.' + - EpisodeGroupEnum.SpecialPromotion.toString() - ), - count: groupCountMap.get(EpisodeGroupEnum.SpecialPromotion) as number, - }); - groupCountMap.delete(EpisodeGroupEnum.SpecialPromotion); - } + doPushEpGroupItems(EpisodeGroupEnum.SpecialPromotion, groupCountMap, epGroupItems); + // remaining groupCountMap.forEach((val, key) => { epGroupItems.push({ group: key, - label: t('module.subject.episode.group.' + key), + label: t('module.subject.episode.group.' + key) + + '(' + val + ')', count: val, }); }); @@ -871,22 +840,13 @@ onMounted(fetchDatas); value="DISCARD" /> -    {{ t('module.subject.collect.progress.text') }}: - - + - - - - - - - - - - - - - diff --git a/console/src/modules/content/subject/SubjectRelationDialog.vue b/console/src/modules/content/subject/SubjectRelationDialog.vue index 4b933867e..0c9263769 100644 --- a/console/src/modules/content/subject/SubjectRelationDialog.vue +++ b/console/src/modules/content/subject/SubjectRelationDialog.vue @@ -90,6 +90,8 @@ const relationBefores = ref([]); const relationAfters = ref([]); const relationSWs = ref([]); const relationOSTs = ref([]); +const relationOVAs = ref([]); +const relationOADs = ref([]); const relationOthers = ref([]); watch(subjectRelations, async (newSubjectRelations) => { if (!newSubjectRelations || newSubjectRelations.length === 0) { @@ -103,6 +105,8 @@ watch(subjectRelations, async (newSubjectRelations) => { relationAfters.value = []; relationSWs.value = []; relationOSTs.value = []; + relationOVAs.value = []; + relationOADs.value = []; relationOthers.value = []; } if (!(newSubjectRelations instanceof Array)) return; @@ -200,6 +204,24 @@ watch(subjectRelations, async (newSubjectRelations) => { relationOSTs.value = subjects; break; } + case 'ORIGINAL_VIDEO_ANIMATION': { + let subjects: Subject[] = []; + await relSubs.forEach(async (id) => { + let tmpSub = await subjectStore.getSubjectById(id); + subjects.push(tmpSub); + }); + relationOVAs.value = subjects; + break; + } + case 'ORIGINAL_ANIMATION_DISC': { + let subjects: Subject[] = []; + await relSubs.forEach(async (id) => { + let tmpSub = await subjectStore.getSubjectById(id); + subjects.push(tmpSub); + }); + relationOADs.value = subjects; + break; + } case 'OTHER': { let subjects: Subject[] = []; await relSubs.forEach(async (id) => { @@ -599,6 +621,60 @@ onMounted(() => { + + + + + + + + + + + + + +