Skip to content

Commit fa413b1

Browse files
committed
feat: 输入歌曲 ID 时显示冲突
1 parent 853b884 commit fa413b1

File tree

6 files changed

+101
-71
lines changed

6 files changed

+101
-71
lines changed

MaiChartManager/Front/src/components/CopyToButton/ChangeIdDialog.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { computed, defineComponent, ref, watch } from "vue";
22
import { DialogOptions, NButton, NFlex, NForm, NFormItem, NInputGroup, NInputGroupLabel, NInputNumber, NModal, useDialog } from "naive-ui";
33
import { globalCapture, musicList, selectedADir, selectMusicId, updateAll } from "@/store/refs";
44
import api from "@/client/api";
5+
import MusicIdConflictNotifier from "@/components/MusicIdConflictNotifier";
56

67
export default defineComponent({
78
props: {
@@ -71,7 +72,10 @@ export default defineComponent({
7172
default: () => <NForm label-placement="left" labelWidth="5em" showFeedback={false} disabled={loading.value}>
7273
<NFlex vertical size="large">
7374
<NFormItem label="新的 ID">
74-
<NInputNumber v-model:value={id.value} class="w-full" min={1} max={999999}/>
75+
<NFlex align="center" wrap={false}>
76+
<NInputNumber v-model:value={id.value} class="w-full" min={1} max={999999}/>
77+
<MusicIdConflictNotifier id={id.value}/>
78+
</NFlex>
7579
</NFormItem>
7680
</NFlex>
7781
</NForm>,

MaiChartManager/Front/src/components/ImportCreateChartButton/CreateMusicModal.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { assetDirs, musicList, selectedADir, selectMusicId, updateMusicList } fr
44
import dxIcon from "@/assets/dxIcon.png";
55
import stdIcon from "@/assets/stdIcon.png";
66
import api from "@/client/api";
7+
import MusicIdConflictNotifier from "@/components/MusicIdConflictNotifier";
78

89
export default defineComponent({
910
props: {
@@ -45,7 +46,10 @@ export default defineComponent({
4546
default: () => <NForm label-placement="left" labelWidth="5em" showFeedback={false}>
4647
<NFlex vertical size="large">
4748
<NFormItem label="ID">
48-
<NInputNumber v-model:value={id.value} class="w-full" min={1} max={2e4 - 1}/>
49+
<NFlex align="center" wrap={false}>
50+
<NInputNumber v-model:value={id.value} class="w-full" min={1} max={2e4 - 1}/>
51+
<MusicIdConflictNotifier id={id.value}/>
52+
</NFlex>
4953
</NFormItem>
5054
<NFormItem label="谱面类型">
5155
<NFlex>

MaiChartManager/Front/src/components/ImportCreateChartButton/ImportChartButton/ErrorDisplayIdInput.tsx

Lines changed: 68 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { addVersionList, genreList, showNeedPurchaseDialog } from "@/store/refs"
77
import GenreInput from "@/components/GenreInput";
88
import VersionInput from "@/components/VersionInput";
99
import { UTAGE_GENRE } from "@/consts";
10+
import MusicIdConflictNotifier from "@/components/MusicIdConflictNotifier";
1011

1112
export default defineComponent({
1213
props: {
@@ -77,73 +78,73 @@ export default defineComponent({
7778
</NFlex>
7879
</NScrollbar>
7980
{!!props.meta.length && <>
80-
为新导入的歌曲指定 ID
81-
<NScrollbar class="max-h-24vh">
82-
<NFlex vertical size="large">
83-
{props.meta.map((meta, i) => <MusicIdInput key={i} meta={meta}/>)}
84-
</NFlex>
85-
</NScrollbar>
86-
<NFormItem label="流派" labelPlacement="left" labelWidth="5em" showFeedback={false}>
87-
<GenreInput options={genreList.value} v-model:value={props.savedOptions.genreId}/>
88-
</NFormItem>
89-
<NFormItem label="版本分类" labelPlacement="left" labelWidth="5em" showFeedback={false}>
90-
<GenreInput options={addVersionList.value} v-model:value={props.savedOptions.addVersionId}/>
91-
</NFormItem>
92-
<NFormItem label="版本" labelPlacement="left" labelWidth="5em" showFeedback={false}>
93-
<VersionInput v-model:value={props.savedOptions.version}/>
94-
</NFormItem>
95-
<NCheckbox v-model:checked={props.savedOptions.ignoreLevel}>
96-
忽略定数,不参与 B50 计算
97-
</NCheckbox>
98-
<NCheckbox v-model:checked={props.savedOptions.disableBga}>
99-
有 BGA 也不要导入
100-
</NCheckbox>
101-
<NCollapse>
102-
<NCollapseItem title="高级选项">
103-
<NFlex vertical>
104-
<NFormItem label="延迟调整模式" labelPlacement="left" showFeedback={false}>
105-
<NFlex vertical class="w-full">
106-
<NFlex class="h-34px" align="center">
107-
<NRadioGroup v-model:value={props.tempOptions.shift}>
108-
<NPopover trigger="hover">
109-
{{
110-
trigger: () => <NRadio value={ShiftMethod.Bar} label="按小节"/>,
111-
default: () => <div>
112-
如果谱面前面的休止符长度小于一小节,那就在前面加上一小节的空白<br/>
113-
适用于大部分谱面,防止第一个音符出现的时机奇怪和平移谱面引起的奇怪问题<br/>
114-
第一个音符会在第二小节之内出来
115-
</div>
116-
}}
117-
</NPopover>
118-
<NPopover trigger="hover">
119-
{{
120-
trigger: () => <NRadio value={ShiftMethod.Legacy} label="旧版"/>,
121-
default: () => <div>
122-
将谱面的第一押对准第二小节的第一拍<br/>
123-
v1.1.1 及以前版本默认的处理方式<br/>
124-
可能会因为谱面非整数平移而引起一些比如说 BPM 变化的谱面出现问题
125-
</div>
126-
}}
127-
</NPopover>
128-
<NPopover trigger="hover">
129-
{{
130-
trigger: () => <NRadio value={ShiftMethod.NoShift} label="不移动谱面"/>,
131-
default: () => <div>
132-
完全不修改谱面,从音频中删除 &first 的长度(如果有)<br/>
133-
可能会导致第一个音符出现的时机比较奇怪,比如说刚开始就有音符
134-
</div>
135-
}}
136-
</NPopover>
137-
</NRadioGroup>
81+
为新导入的歌曲指定 ID
82+
<NScrollbar class="max-h-24vh">
83+
<NFlex vertical size="large">
84+
{props.meta.map((meta, i) => <MusicIdInput key={i} meta={meta}/>)}
85+
</NFlex>
86+
</NScrollbar>
87+
<NFormItem label="流派" labelPlacement="left" labelWidth="5em" showFeedback={false}>
88+
<GenreInput options={genreList.value} v-model:value={props.savedOptions.genreId}/>
89+
</NFormItem>
90+
<NFormItem label="版本分类" labelPlacement="left" labelWidth="5em" showFeedback={false}>
91+
<GenreInput options={addVersionList.value} v-model:value={props.savedOptions.addVersionId}/>
92+
</NFormItem>
93+
<NFormItem label="版本" labelPlacement="left" labelWidth="5em" showFeedback={false}>
94+
<VersionInput v-model:value={props.savedOptions.version}/>
95+
</NFormItem>
96+
<NCheckbox v-model:checked={props.savedOptions.ignoreLevel}>
97+
忽略定数,不参与 B50 计算
98+
</NCheckbox>
99+
<NCheckbox v-model:checked={props.savedOptions.disableBga}>
100+
有 BGA 也不要导入
101+
</NCheckbox>
102+
<NCollapse>
103+
<NCollapseItem title="高级选项">
104+
<NFlex vertical>
105+
<NFormItem label="延迟调整模式" labelPlacement="left" showFeedback={false}>
106+
<NFlex vertical class="w-full">
107+
<NFlex class="h-34px" align="center">
108+
<NRadioGroup v-model:value={props.tempOptions.shift}>
109+
<NPopover trigger="hover">
110+
{{
111+
trigger: () => <NRadio value={ShiftMethod.Bar} label="按小节"/>,
112+
default: () => <div>
113+
如果谱面前面的休止符长度小于一小节,那就在前面加上一小节的空白<br/>
114+
适用于大部分谱面,防止第一个音符出现的时机奇怪和平移谱面引起的奇怪问题<br/>
115+
第一个音符会在第二小节之内出来
116+
</div>
117+
}}
118+
</NPopover>
119+
<NPopover trigger="hover">
120+
{{
121+
trigger: () => <NRadio value={ShiftMethod.Legacy} label="旧版"/>,
122+
default: () => <div>
123+
将谱面的第一押对准第二小节的第一拍<br/>
124+
v1.1.1 及以前版本默认的处理方式<br/>
125+
可能会因为谱面非整数平移而引起一些比如说 BPM 变化的谱面出现问题
126+
</div>
127+
}}
128+
</NPopover>
129+
<NPopover trigger="hover">
130+
{{
131+
trigger: () => <NRadio value={ShiftMethod.NoShift} label="不移动谱面"/>,
132+
default: () => <div>
133+
完全不修改谱面,从音频中删除 &first 的长度(如果有)<br/>
134+
可能会导致第一个音符出现的时机比较奇怪,比如说刚开始就有音符
135+
</div>
136+
}}
137+
</NPopover>
138+
</NRadioGroup>
139+
</NFlex>
140+
</NFlex>
141+
</NFormItem>
142+
<NCheckbox v-model:checked={props.savedOptions.noScale}>
143+
不要缩放 BGA 到 1080 宽度,此选项会记住
144+
</NCheckbox>
138145
</NFlex>
139-
</NFlex>
140-
</NFormItem>
141-
<NCheckbox v-model:checked={props.savedOptions.noScale}>
142-
不要缩放 BGA 到 1080 宽度,此选项会记住
143-
</NCheckbox>
144-
</NFlex>
145-
</NCollapseItem>
146-
</NCollapse>
146+
</NCollapseItem>
147+
</NCollapse>
147148
</>}
148149
</NFlex>,
149150
footer: () => <NFlex justify="end">
@@ -169,6 +170,7 @@ const MusicIdInput = defineComponent({
169170
return () => <NFlex align="center" size="large">
170171
<img src={img.value} class="h-16 w-16 object-fill shrink-0"/>
171172
<div class="w-0 grow">{props.meta.name}</div>
173+
<MusicIdConflictNotifier id={props.meta.id}/>
172174
<NInputNumber v-model:value={props.meta.id} min={dxBase.value + 1} max={dxBase.value + 1e4 - 1} step={1} class="shrink-0"/>
173175
</NFlex>
174176
}

MaiChartManager/Front/src/components/ModManager/ConfigEditor.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { computed, defineComponent, onMounted, PropType, ref, watch } from "vue";
22
import { NButton, NCheckbox, NDivider, NFlex, NFormItem, NInput, NInputNumber, NModal, NScrollbar, NSelect, NSwitch, useDialog } from "naive-ui";
3-
import { Config, GameEdition, GameModInfo } from "@/client/apiGen";
3+
import { Config, GameModInfo } from "@/client/apiGen";
44
import comments from './modComments.yaml';
55
import api from "@/client/api";
66
import { capitalCase } from "change-case";
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { computed, defineComponent, PropType } from "vue";
2+
import { musicListAll } from "@/store/refs";
3+
import { NFlex, NPopover } from "naive-ui";
4+
5+
export default defineComponent({
6+
props: {
7+
id: {type: Number, required: true},
8+
},
9+
setup(props) {
10+
const conflicts = computed(() => musicListAll.value.filter(m => m.id === props.id))
11+
12+
return () => !!conflicts.value.length && <NPopover trigger="hover">
13+
{{
14+
trigger: () => <div class="text-#f0a020 i-material-symbols-warning-outline-rounded text-2em translate-y-.3"/>,
15+
default: () => <NFlex vertical>
16+
以下目录中存在冲突的 ID
17+
{conflicts.value.map((p, index) => <div key={index}>{p.assetDir}</div>)}
18+
</NFlex>
19+
}}
20+
</NPopover>;
21+
}
22+
})

MaiChartManager/Front/src/views/Index.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ export default defineComponent({
2727
context: 'unhandledrejection'
2828
}
2929
})
30-
if (import.meta.env.DEV)
31-
notification.error({title: '未处理错误', content: event.reason?.error?.message || event.reason?.message});
3230
});
3331

3432
if (window.showDirectoryPicker === undefined) {

0 commit comments

Comments
 (0)