|
@@ -1,11 +1,12 @@
|
|
|
import { PropType, computed, defineComponent, ref, toRefs, onMounted, watch, nextTick } from 'vue'
|
|
|
-import { Picker, Button, Icon } from 'vant'
|
|
|
import styles from './index.module.less'
|
|
|
import state, { IPlatform, checkMoveNoSave } from "/src/state";
|
|
|
+import { showToast } from 'vant'
|
|
|
import changeName from "./imgs/changeName.png"
|
|
|
import { headImg } from "/src/page-instrument/header-top/image";
|
|
|
import { toggleMusicSheet } from "../index"
|
|
|
import okBtn from "./imgs/okBtn.png"
|
|
|
+import cancelBtn from "./imgs/cancelBtn.png"
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'choosePartName',
|
|
@@ -14,46 +15,45 @@ export default defineComponent({
|
|
|
type: Array as PropType<any[]>,
|
|
|
default: () => [],
|
|
|
},
|
|
|
- partIndex: {
|
|
|
- type: Number,
|
|
|
- default: 0,
|
|
|
+ partIndexs: {
|
|
|
+ type: Array as PropType<number[]>,
|
|
|
+ default: () => []
|
|
|
},
|
|
|
},
|
|
|
emits: ['close'],
|
|
|
setup(props, { emit }) {
|
|
|
- const selValues = ref([props.partIndex]);
|
|
|
- const myPicker = ref();
|
|
|
+ const selValues = ref([...props.partIndexs]);
|
|
|
watch(
|
|
|
() => toggleMusicSheet.show,
|
|
|
() => {
|
|
|
if (toggleMusicSheet.show) {
|
|
|
- selValues.value = [props.partIndex]
|
|
|
+ selValues.value = [...props.partIndexs]
|
|
|
}
|
|
|
}
|
|
|
);
|
|
|
- watch(() => toggleMusicSheet.show, ()=>{
|
|
|
- // 支持滚轮事件
|
|
|
- if (toggleMusicSheet.show) {
|
|
|
- nextTick(() => {
|
|
|
- myPicker.value.$el.addEventListener('wheel', handleWheel)
|
|
|
- })
|
|
|
- } else {
|
|
|
- myPicker.value.$el.removeEventListener('wheel', handleWheel)
|
|
|
+ function hanldeSelSheet(value:number, isCombineRender = false){
|
|
|
+ if(isCombineRender){
|
|
|
+ selValues.value = [value]
|
|
|
+ }else{
|
|
|
+ // 总谱切换过来的时候
|
|
|
+ if(selValues.value[0] === 999){
|
|
|
+ selValues.value = []
|
|
|
+ }
|
|
|
+ const index = selValues.value.indexOf(value)
|
|
|
+ if(index > -1){
|
|
|
+ if(selValues.value.length > 1){
|
|
|
+ selValues.value.splice(index, 1)
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(selValues.value.length >=4){
|
|
|
+ showToast({
|
|
|
+ position: "top",
|
|
|
+ message: "最多可选4个"
|
|
|
+ });
|
|
|
+ return
|
|
|
+ }
|
|
|
+ selValues.value.push(value)
|
|
|
}
|
|
|
- },{immediate:true}
|
|
|
- )
|
|
|
- function handleWheel(e: WheelEvent){
|
|
|
- e.preventDefault()
|
|
|
- // 先停止 惯性滚动
|
|
|
- myPicker.value.confirm()
|
|
|
- const direction = e.deltaY > 0 ? 1 : -1
|
|
|
- const targetObject = myPicker.value.getSelectedOptions(0)[0]
|
|
|
- const index = props.partListNames.findIndex(
|
|
|
- obj => obj == targetObject
|
|
|
- )
|
|
|
- const newIndex = index + direction
|
|
|
- if (newIndex >= 0 && newIndex < props.partListNames.length) {
|
|
|
- selValues.value = [props.partListNames[newIndex].value]
|
|
|
}
|
|
|
}
|
|
|
return () => (
|
|
@@ -64,23 +64,43 @@ export default defineComponent({
|
|
|
</div>
|
|
|
<div class={styles.pickerCon}>
|
|
|
<div class={styles.pickerBox}>
|
|
|
- <Picker
|
|
|
- ref={myPicker}
|
|
|
- class={[styles.picker, state.platform === IPlatform.PC && styles.pcPicker]}
|
|
|
- v-model={selValues.value}
|
|
|
- showToolbar={false}
|
|
|
- columns={props.partListNames}
|
|
|
- visible-option-num={5}
|
|
|
- option-height={"1.06666rem"}
|
|
|
- />
|
|
|
- <img src={ okBtn } class={styles.button} onClick={async () => {
|
|
|
- await checkMoveNoSave();
|
|
|
- myPicker.value.confirm()
|
|
|
- nextTick(()=>{
|
|
|
- emit('close', selValues.value[0])
|
|
|
- })
|
|
|
- }
|
|
|
- }></img>
|
|
|
+ {
|
|
|
+ state.isScoreRender &&
|
|
|
+ <>
|
|
|
+ <div class={styles.titCon}>
|
|
|
+ <div class={styles.tit}>选择总谱</div>
|
|
|
+ </div>
|
|
|
+ <div class={styles.content}>
|
|
|
+ <div class={[styles.selBtn, selValues.value.includes(999) && styles.active]} onClick={()=>{ hanldeSelSheet(999, true) }}>总谱</div>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ }
|
|
|
+ <div class={styles.titCon}>
|
|
|
+ <div class={styles.tit}>选择声部</div>
|
|
|
+ <div class={styles.tips}>(最多可选4个)</div>
|
|
|
+ </div>
|
|
|
+ <div class={[styles.content, styles.sheetCon]}>
|
|
|
+ <div class={styles.con}>
|
|
|
+ {
|
|
|
+ props.partListNames.map((item: any)=>{
|
|
|
+ return <div class={[styles.selBtn,selValues.value.includes(item.value) && styles.active]} onClick={()=>{hanldeSelSheet(item.value)}}>{item.text}</div>
|
|
|
+ })
|
|
|
+ }
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class={styles.btnCon}>
|
|
|
+ <img src={ cancelBtn } class={styles.btn} onClick={async () => {
|
|
|
+ emit('close')
|
|
|
+ }
|
|
|
+ }></img>
|
|
|
+ <img src={ okBtn } class={styles.btn} onClick={async () => {
|
|
|
+ await checkMoveNoSave();
|
|
|
+ nextTick(()=>{
|
|
|
+ emit('close', selValues.value)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }></img>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|