|
@@ -31,7 +31,9 @@ import {
|
|
|
renderScore,
|
|
|
setting,
|
|
|
elementDirection,
|
|
|
- setting_modal
|
|
|
+ setting_modal,
|
|
|
+ initSelectScorePartModal,
|
|
|
+ renderScoreModal
|
|
|
} from './setting';
|
|
|
import { handleStartTick, hendleEndTick } from './tick';
|
|
|
import { handleStartBeat, hendleEndBeat } from './beat-tick';
|
|
@@ -89,7 +91,8 @@ export default defineComponent({
|
|
|
playPos: (route.query.imagePos || 'left') as 'left' | 'right' // 数字课堂老师端上课 镜像字段
|
|
|
});
|
|
|
// 返回
|
|
|
- const goback = () => {
|
|
|
+ const goback = (e: any) => {
|
|
|
+ e.stopPropagation();
|
|
|
if (route.query.backBtnType === 'microapp') {
|
|
|
// microapp 老师端应用里面打开单独处理返回逻辑
|
|
|
window.parent.postMessage(
|
|
@@ -108,14 +111,35 @@ export default defineComponent({
|
|
|
postMessage({ api: 'goBack' });
|
|
|
};
|
|
|
|
|
|
+ /* 修改设置的某个值 */
|
|
|
+ const updateSettingValue = (key: string, value: any) => {
|
|
|
+ if (state.settingStatus) {
|
|
|
+ setting_modal[key] = value;
|
|
|
+ } else {
|
|
|
+ setting[key] = value;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ /* 获取设置的某一个值 */
|
|
|
+ const getSettingValue = (key: string) => {
|
|
|
+ let value: any = null;
|
|
|
+ if (state.settingStatus) {
|
|
|
+ value = setting_modal[key];
|
|
|
+ } else {
|
|
|
+ value = setting[key];
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+ };
|
|
|
+
|
|
|
/** 播放切换 */
|
|
|
const handlePlay = async () => {
|
|
|
- if (setting.playState === 'pause') {
|
|
|
- setting.playState = 'play';
|
|
|
- if (setting.playType === 'beat') {
|
|
|
- await handleStartTick();
|
|
|
+ const playState = getSettingValue('playState');
|
|
|
+ const playType = getSettingValue('playType');
|
|
|
+ if (playState === 'pause') {
|
|
|
+ updateSettingValue('playState', 'play');
|
|
|
+ if (playType === 'beat') {
|
|
|
+ await handleStartTick(state.settingStatus);
|
|
|
} else {
|
|
|
- await handleStartBeat();
|
|
|
+ await handleStartBeat(state.settingStatus);
|
|
|
}
|
|
|
} else {
|
|
|
handleStop();
|
|
@@ -124,19 +148,23 @@ export default defineComponent({
|
|
|
/** 播放类型 */
|
|
|
const handlePlayType = () => {
|
|
|
handleStop();
|
|
|
+ // 判断是否有设置
|
|
|
+
|
|
|
if (setting.playType === 'beat') {
|
|
|
- setting.playType = 'tempo';
|
|
|
+ updateSettingValue('playType', 'tempo');
|
|
|
} else {
|
|
|
- setting.playType = 'beat';
|
|
|
+ updateSettingValue('playType', 'beat');
|
|
|
}
|
|
|
};
|
|
|
|
|
|
const handleStop = () => {
|
|
|
- setting.playState = 'pause';
|
|
|
- if (setting.playType === 'beat') {
|
|
|
- hendleEndTick();
|
|
|
+ const playType = getSettingValue('playType');
|
|
|
+ updateSettingValue('playState', 'pause');
|
|
|
+
|
|
|
+ if (playType === 'beat') {
|
|
|
+ hendleEndTick(state.settingStatus);
|
|
|
} else {
|
|
|
- hendleEndBeat();
|
|
|
+ hendleEndBeat(state.settingStatus);
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -190,7 +218,7 @@ export default defineComponent({
|
|
|
if (route.query.dataJson) {
|
|
|
dataJson = JSON.parse(route.query.dataJson as any);
|
|
|
}
|
|
|
- console.log(dataJson, 'dataJson', props.dataJson);
|
|
|
+ // console.log(dataJson, 'dataJson', props.dataJson);
|
|
|
|
|
|
setting.element = dataJson.element;
|
|
|
setting.beat = dataJson.beat;
|
|
@@ -234,8 +262,7 @@ export default defineComponent({
|
|
|
setting_modal[i] = JSON.parse(JSON.stringify(setting[i]));
|
|
|
}
|
|
|
|
|
|
- console.log(setting_modal, 'setting');
|
|
|
- if (state.win === 'pc') {
|
|
|
+ if (state.win === 'pc' || state.platform === 'modal') {
|
|
|
state.settingPcStatus = true;
|
|
|
} else {
|
|
|
state.settingStatus = true;
|
|
@@ -271,7 +298,7 @@ export default defineComponent({
|
|
|
settingBoxDragData = useDrag(
|
|
|
[`${settingBoxClass} .iconTitBoxMove`, `${settingBoxClass} .bom_drag`],
|
|
|
settingBoxClass,
|
|
|
- toRef(state, 'settingStatus'),
|
|
|
+ toRef(state, 'settingPcStatus'),
|
|
|
stateData.user.data.id
|
|
|
);
|
|
|
}
|
|
@@ -280,6 +307,7 @@ export default defineComponent({
|
|
|
return () => (
|
|
|
<div
|
|
|
onClick={() => {
|
|
|
+ state.settingStatus = false;
|
|
|
window.parent.postMessage(
|
|
|
{
|
|
|
api: 'clickTempo'
|
|
@@ -310,11 +338,14 @@ export default defineComponent({
|
|
|
<div class={styles.title}>
|
|
|
<img src={icon_title} />
|
|
|
</div>
|
|
|
- {state.modeType !== 'courseware' && state.platform !== 'modal' ? (
|
|
|
+ {state.modeType !== 'courseware' &&
|
|
|
+ state.platform !== 'modal' &&
|
|
|
+ !state.settingStatus ? (
|
|
|
<div
|
|
|
class={styles.back}
|
|
|
style={{ cursor: 'pointer' }}
|
|
|
- onClick={() => {
|
|
|
+ onClick={(e: any) => {
|
|
|
+ e.stopPropagation();
|
|
|
onOpenSetting();
|
|
|
}}>
|
|
|
<img src={icon_setting} />
|
|
@@ -326,50 +357,87 @@ export default defineComponent({
|
|
|
|
|
|
<div class={styles.conCon}>
|
|
|
<div class={styles.container}>
|
|
|
- {setting.scorePart?.map((item: any, i: number) => (
|
|
|
+ {getSettingValue('scorePart')?.map((item: any, i: number) => (
|
|
|
<div
|
|
|
class={[
|
|
|
styles.beatSection,
|
|
|
- setting.scorePart.length >= 2 &&
|
|
|
+ getSettingValue('scorePart').length >= 2 &&
|
|
|
item.length !== 1 &&
|
|
|
styles.small
|
|
|
]}>
|
|
|
{item.map((child: any, jIndex: number) => (
|
|
|
<div
|
|
|
- class={[styles.beat, child.selected ? styles.active : '']}
|
|
|
+ class={[
|
|
|
+ styles.beat,
|
|
|
+ child.selected ? styles.active : '',
|
|
|
+ state.settingStatus && styles.disabledChange
|
|
|
+ ]}
|
|
|
+ // draggable={true}
|
|
|
+ onDragenter={(e: any) => {
|
|
|
+ e.preventDefault();
|
|
|
+ }}
|
|
|
+ onDragover={(e: any) => {
|
|
|
+ e.preventDefault();
|
|
|
+ }}
|
|
|
+ onDrop={(e: any) => {
|
|
|
+ let dropItem = e.dataTransfer.getData('text');
|
|
|
+ dropItem = dropItem ? JSON.parse(dropItem) : {};
|
|
|
+ // 判断是否有数据
|
|
|
+ if (dropItem.url) {
|
|
|
+ handleStop();
|
|
|
+ setting_modal.scorePart.forEach(
|
|
|
+ (part: Array<any>, ci: number) => {
|
|
|
+ part.forEach((child: any, cj: number) => {
|
|
|
+ if (i === ci && jIndex === cj) {
|
|
|
+ child.url = dropItem.url;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }}
|
|
|
onClick={(e: any) => {
|
|
|
e.stopPropagation();
|
|
|
+ // 编辑时可以操作
|
|
|
+ if (state.settingStatus) {
|
|
|
+ handleStop();
|
|
|
+ initSelectScorePartModal();
|
|
|
+ child.selected = true;
|
|
|
+ }
|
|
|
}}>
|
|
|
- <div class={styles.direction}>
|
|
|
- <div
|
|
|
- class={styles.up}
|
|
|
- style={{ cursor: 'pointer' }}
|
|
|
- onClick={() => {
|
|
|
- if (setting.playState === 'play') return;
|
|
|
- if (setting.tempo.length <= 1) {
|
|
|
- showToast('无法切换,请选择至少2种节奏型');
|
|
|
- return;
|
|
|
- }
|
|
|
- // const obj = randomScoreElement(child.index);
|
|
|
- const obj = elementDirection('up', child.index);
|
|
|
- child.index = obj.index;
|
|
|
- child.url = obj.url;
|
|
|
- }}></div>
|
|
|
- <div
|
|
|
- class={styles.down}
|
|
|
- style={{ cursor: 'pointer' }}
|
|
|
- onClick={() => {
|
|
|
- if (setting.playState === 'play') return;
|
|
|
- if (setting.tempo.length <= 1) {
|
|
|
- showToast('无法切换,请选择至少2种节奏型');
|
|
|
- return;
|
|
|
- }
|
|
|
- // const obj = randomScoreElement(child.index);
|
|
|
- const obj = elementDirection('down', child.index);
|
|
|
- child.index = obj.index;
|
|
|
- child.url = obj.url;
|
|
|
- }}></div>
|
|
|
- </div>
|
|
|
+ {/* 编辑时不可上下切换 */}
|
|
|
+ {!state.settingStatus && (
|
|
|
+ <div class={styles.direction}>
|
|
|
+ <div
|
|
|
+ class={styles.up}
|
|
|
+ style={{ cursor: 'pointer' }}
|
|
|
+ onClick={() => {
|
|
|
+ if (setting.playState === 'play') return;
|
|
|
+ if (setting.tempo.length <= 1) {
|
|
|
+ showToast('无法切换,请选择至少2种节奏型');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // const obj = randomScoreElement(child.index);
|
|
|
+ const obj = elementDirection('up', child.index);
|
|
|
+ child.index = obj.index;
|
|
|
+ child.url = obj.url;
|
|
|
+ }}></div>
|
|
|
+ <div
|
|
|
+ class={styles.down}
|
|
|
+ style={{ cursor: 'pointer' }}
|
|
|
+ onClick={() => {
|
|
|
+ if (setting.playState === 'play') return;
|
|
|
+ if (setting.tempo.length <= 1) {
|
|
|
+ showToast('无法切换,请选择至少2种节奏型');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // const obj = randomScoreElement(child.index);
|
|
|
+ const obj = elementDirection('down', child.index);
|
|
|
+ child.index = obj.index;
|
|
|
+ child.url = obj.url;
|
|
|
+ }}></div>
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
<div class={styles.imgSection}>
|
|
|
<img src={getImage(child.url)} />
|
|
|
</div>
|
|
@@ -397,7 +465,7 @@ export default defineComponent({
|
|
|
</div>
|
|
|
)}
|
|
|
<div class={styles.play} onClick={handlePlay}>
|
|
|
- {setting.playState === 'pause' ? (
|
|
|
+ {getSettingValue('playState') === 'pause' ? (
|
|
|
<img src={iconPause} />
|
|
|
) : (
|
|
|
<img src={iconPlay} />
|
|
@@ -417,7 +485,7 @@ export default defineComponent({
|
|
|
)}
|
|
|
{/* 播放类型 */}
|
|
|
<div class={styles.playType} onClick={handlePlayType}>
|
|
|
- {setting.playType === 'beat' ? (
|
|
|
+ {getSettingValue('playType') === 'beat' ? (
|
|
|
<img src={beat} />
|
|
|
) : (
|
|
|
<img src={tempo} />
|
|
@@ -427,7 +495,11 @@ export default defineComponent({
|
|
|
<div
|
|
|
class={styles.randomTempo}
|
|
|
onClick={() => {
|
|
|
- renderScore();
|
|
|
+ if (state.settingStatus) {
|
|
|
+ renderScoreModal();
|
|
|
+ } else {
|
|
|
+ renderScore();
|
|
|
+ }
|
|
|
handleStop();
|
|
|
}}>
|
|
|
<img src={randDom} />
|
|
@@ -438,14 +510,15 @@ export default defineComponent({
|
|
|
src={iconPlus}
|
|
|
class={styles.speedPlus}
|
|
|
onClick={() => {
|
|
|
- if (setting.speed <= 40) return;
|
|
|
- setting.speed -= 1;
|
|
|
+ const speed = getSettingValue('speed');
|
|
|
+ if (speed <= 40) return;
|
|
|
+ updateSettingValue('speed', speed - 1);
|
|
|
handleStop();
|
|
|
|
|
|
state.speedList.forEach((item: any) => {
|
|
|
- if (item.value === setting.speed) {
|
|
|
+ if (item.value === getSettingValue('speed')) {
|
|
|
item.color = '#1CACF1';
|
|
|
- setting.speed = setting.speed;
|
|
|
+ updateSettingValue('speed', getSettingValue('speed'));
|
|
|
} else {
|
|
|
item.color = '#060606';
|
|
|
}
|
|
@@ -457,11 +530,12 @@ export default defineComponent({
|
|
|
class={styles.popupContainer}
|
|
|
actions={state.speedList}
|
|
|
onSelect={(val: any) => {
|
|
|
- if (val.value === setting.speed) return;
|
|
|
+ const speed = getSettingValue('speed');
|
|
|
+ if (val.value === speed) return;
|
|
|
state.speedList.forEach((item: any) => {
|
|
|
if (item.value === val.value) {
|
|
|
item.color = '#1CACF1';
|
|
|
- setting.speed = val.value;
|
|
|
+ updateSettingValue('speed', val.value);
|
|
|
} else {
|
|
|
item.color = '#060606';
|
|
|
}
|
|
@@ -470,7 +544,9 @@ export default defineComponent({
|
|
|
}}>
|
|
|
{{
|
|
|
reference: () => (
|
|
|
- <div class={styles.speedNum}>{setting.speed}</div>
|
|
|
+ <div class={styles.speedNum}>
|
|
|
+ {getSettingValue('speed')}
|
|
|
+ </div>
|
|
|
)
|
|
|
}}
|
|
|
</Popover>
|
|
@@ -479,14 +555,16 @@ export default defineComponent({
|
|
|
src={iconAdd}
|
|
|
class={styles.speedAdd}
|
|
|
onClick={() => {
|
|
|
- if (setting.speed >= 200) return;
|
|
|
- setting.speed += 1;
|
|
|
+ const speed = getSettingValue('speed');
|
|
|
+
|
|
|
+ if (speed >= 200) return;
|
|
|
+ updateSettingValue('speed', speed + 1);
|
|
|
handleStop();
|
|
|
|
|
|
state.speedList.forEach((item: any) => {
|
|
|
- if (item.value === setting.speed) {
|
|
|
+ if (item.value === getSettingValue('speed')) {
|
|
|
item.color = '#1CACF1';
|
|
|
- setting.speed = setting.speed;
|
|
|
+ updateSettingValue('speed', getSettingValue('speed'));
|
|
|
} else {
|
|
|
item.color = '#060606';
|
|
|
}
|
|
@@ -497,7 +575,7 @@ export default defineComponent({
|
|
|
{/* 播放 */}
|
|
|
{state.playPos === 'right' && (
|
|
|
<div class={styles.play} onClick={handlePlay}>
|
|
|
- {setting.playState === 'pause' ? (
|
|
|
+ {getSettingValue('playState') === 'pause' ? (
|
|
|
<img src={iconPause} />
|
|
|
) : (
|
|
|
<img src={iconPlay} />
|
|
@@ -520,12 +598,12 @@ export default defineComponent({
|
|
|
class={[
|
|
|
styles.containerRight,
|
|
|
state.settingStatus ? '' : styles.rightHide
|
|
|
- ]}>
|
|
|
+ ]}
|
|
|
+ onClick={(e: any) => {
|
|
|
+ e.stopPropagation();
|
|
|
+ }}>
|
|
|
<SettingModal
|
|
|
class={styles.settingModalShow}
|
|
|
- // onGuideDone={setGuidanceShow}
|
|
|
- // showGuide={guidanceShow.value}
|
|
|
- dataJson={state.dataJson}
|
|
|
onClose={() => (state.settingStatus = false)}
|
|
|
/>
|
|
|
</div>
|
|
@@ -539,15 +617,8 @@ export default defineComponent({
|
|
|
<SettingPcModal
|
|
|
onGuideDone={setGuidanceShow}
|
|
|
showGuide={guidanceShow.value}
|
|
|
- // dataJson={state.dataJson}
|
|
|
onClose={() => (state.settingPcStatus = false)}
|
|
|
/>
|
|
|
- {/* <SettingModal
|
|
|
- onGuideDone={setGuidanceShow}
|
|
|
- showGuide={guidanceShow.value}
|
|
|
- dataJson={state.dataJson}
|
|
|
- onClose={() => (state.settingStatus = false)}
|
|
|
- /> */}
|
|
|
</Popup>
|
|
|
</div>
|
|
|
);
|