index.tsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { PropType, computed, defineComponent, ref, toRefs, onMounted } 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. export default defineComponent({
  8. name: 'choosePartName',
  9. props: {
  10. partListNames: {
  11. type: Array as PropType<string[]>,
  12. default: () => [],
  13. },
  14. partIndex: {
  15. type: Number,
  16. default: 0,
  17. },
  18. },
  19. emits: ['close'],
  20. setup(props, { emit }) {
  21. // #9463 bug,未更换声轨点击确定不应该重新加载,现在会导致切换错误
  22. const partIndexChanged = ref(false);
  23. const { partListNames, partIndex } = toRefs(props)
  24. let idx = partListNames.value.findIndex((item: any) => item.value === partIndex.value);
  25. idx = idx > -1 ? idx : 0;
  26. const selectIndex = ref(idx);
  27. const columns = computed(() => {
  28. return partListNames.value
  29. })
  30. // console.log(1111,partListNames.value, partIndex.value, selectIndex.value, columns.value, 999999)
  31. /**
  32. * 默认选中的
  33. * picker组件,3.x的版本可以使用defaultIndex,4.x的版本只能使用v-model传递
  34. * */
  35. const selValues = ref([partIndex.value]);
  36. const myPicker = ref();
  37. onMounted(() => {
  38. // console.log(myPicker.value,99999,selValues.value,props.partIndex)
  39. });
  40. return () => (
  41. <div class={[styles.container, state.platform === IPlatform.PC && styles.pcContainer, styles[state.modeType]]}>
  42. <div class={styles.head}>
  43. <img class={styles.headTit} src={changeName} />
  44. <img class={styles.closeImg} src={headImg("closeImg.png")} onClick={() => emit("close")} />
  45. </div>
  46. { state.platform === IPlatform.PC && <div class={[!state.guideInfo?.teacherDrag && styles.pcPartTopZIndex ,styles.pcPartTop,'top_drag']}></div> }
  47. <div class={styles.pickerCon}>
  48. <div class={styles.pickerBox}>
  49. <Picker
  50. ref={myPicker}
  51. class={[styles.picker, state.platform === IPlatform.PC && styles.pcPicker]}
  52. defaultIndex={props.partIndex}
  53. v-model={selValues.value}
  54. showToolbar={false}
  55. columns={columns.value}
  56. visibleItemCount={Math.ceil(document.body.clientHeight / 40 / 3)}
  57. onChange={(row) => {
  58. // console.log(1111,'选择的索引', row)
  59. if (!partIndexChanged.value) partIndexChanged.value = true
  60. selectIndex.value = row.selectedValues[0]
  61. }}
  62. />
  63. <div class={styles.button} onClick={() => {
  64. // console.log(1111,selectIndex.value)
  65. if (partIndexChanged.value) {
  66. emit('close', selectIndex.value)
  67. } else {
  68. emit('close', partIndex.value)
  69. }
  70. }
  71. }></div>
  72. </div>
  73. </div>
  74. </div>
  75. )
  76. },
  77. })