123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import { defineComponent, onMounted, ref } from 'vue';
- import styles from './index.module.less';
- import { Button, Cell, Icon, Image, Radio, RadioGroup } from 'vant';
- import checkBoxActive from '../../images/new/icon-n-1.png';
- import checkBoxDefault from '../../images/new/icon-n-2.png';
- export default defineComponent({
- name: 'select-student',
- props: {
- list: {
- type: Array,
- default: () => []
- },
- studentItem: {
- type: Object,
- default: () => ({})
- }
- },
- emits: ['close', 'confirm'],
- setup(props, { emit }) {
- const radioChecked = ref();
- onMounted(() => {
- if (props.studentItem && props.studentItem.userId) {
- radioChecked.value = props.studentItem.userId;
- }
- });
- return () => (
- <div>
- <div class={styles.popupTitle}>选择学生</div>
- <RadioGroup class={styles.selectStudent} v-model={radioChecked.value}>
- {props.list.map((item: any) => (
- <div
- class={[
- styles.cell,
- radioChecked.value === item.userId && styles.cellSelected
- ]}
- onClick={() => {
- radioChecked.value = item.userId;
- emit('confirm', item);
- emit('close');
- }}>
- <Radio name={item.userId}>
- {{
- icon: (props: any) => (
- <Image
- class={styles.iconImage}
- src={props.checked ? checkBoxActive : checkBoxDefault}
- />
- )
- }}
- </Radio>
- <div class={styles.userInfo}>
- <Image src={item.avatar} class={styles.userImg} fit="cover" />
- <div class={styles.usernames}>
- <div class={styles.name}>{item.nickname}</div>
- {item.schoolName && (
- <div class={styles.schoolname}>{item.schoolName}</div>
- )}
- </div>
- </div>
- </div>
- ))}
- </RadioGroup>
- <div class={styles.addStudentBtn}>
- <Button
- block
- color="linear-gradient( 135deg, #31C7FF 0%, #007AFE 100%)"
- onClick={() => {
- //
- radioChecked.value = null;
- emit('confirm', {});
- emit('close');
- }}>
- <i class={styles.iconAdd}></i>
- <span>新增学生</span>
- </Button>
- </div>
- </div>
- );
- }
- });
|