index.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import { defineComponent, onMounted, ref, watch } from 'vue';
  2. import styles from './index.module.less';
  3. import { Button, Cell, Icon, Image, Radio, RadioGroup } from 'vant';
  4. import checkBoxActive from '../../images/new/icon-n-1.png';
  5. import checkBoxDefault from '../../images/new/icon-n-2.png';
  6. import btn2 from '../../../activation-code/activation-register/images/btn2.png'
  7. export default defineComponent({
  8. name: 'select-student',
  9. props: {
  10. list: {
  11. type: Array,
  12. default: () => []
  13. },
  14. studentItem: {
  15. type: Object,
  16. default: () => ({})
  17. },
  18. showAdd: {
  19. type: Boolean,
  20. default: true
  21. }
  22. },
  23. emits: ['close', 'confirm'],
  24. setup(props, { emit }) {
  25. const radioChecked = ref();
  26. // 变化时
  27. watch(
  28. () => props.studentItem,
  29. () => {
  30. if (props.studentItem && props.studentItem.userId) {
  31. radioChecked.value = props.studentItem.userId;
  32. } else {
  33. radioChecked.value = null;
  34. }
  35. }
  36. );
  37. onMounted(() => {
  38. if (props.studentItem && props.studentItem.userId) {
  39. radioChecked.value = props.studentItem.userId;
  40. }
  41. });
  42. return () => (
  43. <div>
  44. <div class={styles.popupTitle}>选择学生</div>
  45. <RadioGroup class={styles.selectStudent} v-model={radioChecked.value}>
  46. {props.list.map((item: any) => (
  47. <div
  48. class={[
  49. styles.cell,
  50. radioChecked.value === item.userId && styles.cellSelected
  51. ]}
  52. onClick={() => {
  53. radioChecked.value = item.userId;
  54. emit('confirm', item);
  55. emit('close');
  56. }}>
  57. <Radio name={item.userId}>
  58. {{
  59. icon: (props: any) => (
  60. <Image
  61. class={styles.iconImage}
  62. src={props.checked ? checkBoxActive : checkBoxDefault}
  63. />
  64. )
  65. }}
  66. </Radio>
  67. <div class={styles.userInfo}>
  68. <Image src={item.avatar} class={styles.userImg} fit="cover" />
  69. <div class={styles.usernames}>
  70. <div class={styles.name}>
  71. {item.nickname}
  72. {!props.showAdd && item.registerFlag && (
  73. <span class={styles.tag}></span>
  74. )}
  75. </div>
  76. {item.schoolName && (
  77. <div class={styles.schoolname}>{item.schoolName}</div>
  78. )}
  79. </div>
  80. </div>
  81. </div>
  82. ))}
  83. </RadioGroup>
  84. {props.showAdd && (
  85. <div class={styles.addStudentBtn}>
  86. {/* <Button
  87. block
  88. color="linear-gradient( 135deg, #31C7FF 0%, #007AFE 100%)"
  89. onClick={() => {
  90. //
  91. // radioChecked.value = null;
  92. emit('confirm', {});
  93. // emit('close');
  94. }}>
  95. <i class={styles.iconAdd}></i>
  96. <span>新增学生</span>
  97. </Button> */}
  98. <img src={btn2} onClick={() => {
  99. //
  100. // radioChecked.value = null;
  101. emit('confirm', {});
  102. // emit('close');
  103. }} class={styles.addBtn} />
  104. </div>
  105. )}
  106. </div>
  107. );
  108. }
  109. });