index.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { PropType, computed, defineComponent, ref, toRefs, onMounted, watch, nextTick } from 'vue'
  2. import { Picker, Button, Icon } from 'vant'
  3. import styles from './index.module.less'
  4. import state, { IPlatform } from "/src/state";
  5. import changeName from "./imgs/changeName.png"
  6. import { headImg } from "/src/page-instrument/header-top/image";
  7. import { toggleMusicSheet } from "../index"
  8. import okBtn from "./imgs/okBtn.png"
  9. export default defineComponent({
  10. name: 'choosePartName',
  11. props: {
  12. partListNames: {
  13. type: Array as PropType<string[]>,
  14. default: () => [],
  15. },
  16. partIndex: {
  17. type: Number,
  18. default: 0,
  19. },
  20. },
  21. emits: ['close'],
  22. setup(props, { emit }) {
  23. // #9463 bug,未更换声轨点击确定不应该重新加载,现在会导致切换错误
  24. const partIndexChanged = ref(false);
  25. const { partListNames, partIndex } = toRefs(props)
  26. let idx = partListNames.value.findIndex((item: any) => item.value === partIndex.value);
  27. idx = idx > -1 ? idx : 0;
  28. const selectIndex = ref(idx);
  29. const columns = computed(() => {
  30. return partListNames.value
  31. })
  32. // console.log(1111,partListNames.value, partIndex.value, selectIndex.value, columns.value, 999999)
  33. /**
  34. * 默认选中的
  35. * picker组件,3.x的版本可以使用defaultIndex,4.x的版本只能使用v-model传递
  36. * */
  37. const selValues = ref([partIndex.value]);
  38. const myPicker = ref();
  39. onMounted(() => {
  40. // console.log(myPicker.value,99999,selValues.value,props.partIndex)
  41. });
  42. watch(
  43. () => toggleMusicSheet.show,
  44. () => {
  45. if (toggleMusicSheet.show) {
  46. selectIndex.value = partIndex.value
  47. selValues.value = [partIndex.value]
  48. }
  49. //console.log('声轨',selValues.value,partIndex.value,selectIndex.value)
  50. }
  51. );
  52. return () => (
  53. <div class={[styles.container, state.platform === IPlatform.PC && styles.pcContainer, styles[state.modeType]]}>
  54. <div class={styles.head}>
  55. <img class={styles.headTit} src={changeName} />
  56. <img class={styles.closeImg} src={headImg("closeImg.png")} onClick={() => emit("close")} />
  57. </div>
  58. { state.platform === IPlatform.PC && <div class={[!state.guideInfo?.teacherDrag && styles.pcPartTopZIndex ,styles.pcPartTop,'top_drag']}></div> }
  59. <div class={styles.pickerCon}>
  60. <div class={styles.pickerBox}>
  61. <Picker
  62. ref={myPicker}
  63. class={[styles.picker, state.platform === IPlatform.PC && styles.pcPicker]}
  64. defaultIndex={props.partIndex}
  65. v-model={selValues.value}
  66. showToolbar={false}
  67. columns={columns.value}
  68. visible-option-num={5}
  69. option-height={"1.06666rem"}
  70. onChange={(row) => {
  71. console.log(1111,'选择的索引', row)
  72. if (!partIndexChanged.value) partIndexChanged.value = true
  73. selectIndex.value = row.selectedValues[0]
  74. }}
  75. />
  76. <img src={ okBtn } class={styles.button} onClick={() => {
  77. myPicker.value.confirm()
  78. nextTick(()=>{
  79. // console.log(1111,selectIndex.value)
  80. if (partIndexChanged.value) {
  81. emit('close', selectIndex.value)
  82. } else {
  83. emit('close', partIndex.value)
  84. }
  85. })
  86. }
  87. }></img>
  88. </div>
  89. </div>
  90. </div>
  91. )
  92. },
  93. })