import { state } from '@/state' import { Button, Cell, CellGroup, Field, List, Image, Tag, Sticky, Checkbox, CheckboxGroup } from 'vant' import { defineComponent, onMounted, PropType, reactive, watch } from 'vue' import styles from './index.module.less' import iconTeacher from '@common/images/icon_teacher.png' import OEmpty from '@/components/o-empty' import request from '@/helpers/request' import OSearch from '@/components/o-search' export default defineComponent({ name: 'teacher-list', props: { height: { type: [String, Number], default: 'auto' }, selectItem: { type: Array, default: () => [] } }, emits: ['close', 'select', 'update:selectItem'], setup(props, { slots, attrs, emit }) { const forms = reactive({ teacherStatus: false, isLoad: false, list: [] as any, listState: { dataShow: true, // 判断是否有数据 loading: false, finished: false }, params: { keyword: null, page: 1, rows: 20 }, check: (props.selectItem || []) as any, checkboxRefs: [] as any }) const getList = async () => { try { if (forms.isLoad) return forms.isLoad = true const res = await request.post('/api-school/student/page', { data: { ...forms.params, schoolId: state.user.data.school.id } }) forms.listState.loading = false const result = res.data || {} // 处理重复请求数据 if (forms.list.length > 0 && result.current === 1) { return } const rows = result.rows || [] rows.forEach((item: any) => { item.subjectNames = item.subjectNames ? item.subjectNames.split(',') : [] }) forms.list = forms.list.concat(rows) forms.listState.finished = result.current >= result.pages forms.params.page = result.current + 1 forms.listState.dataShow = forms.list.length > 0 forms.isLoad = false } catch { forms.listState.dataShow = false forms.listState.finished = true forms.isLoad = false } } // 搜索 const onSearch = () => { forms.params.page = 1 forms.list = [] forms.listState.dataShow = true // 判断是否有数据 forms.listState.loading = false forms.listState.finished = false getList() } const onSelect = (type: string) => { forms.checkboxRefs[type].toggle() const list: any = [] forms.list.forEach((item: any) => { if (forms.check.includes(item.id)) { list.push({ id: item.id, value: item.nickname, avatar: item.avatar }) } }) emit('update:selectItem', list) } watch( () => props.selectItem, () => { initSelectItem() }, { deep: true } ) const initSelectItem = () => { const selectItem = props.selectItem || [] const temp: any = [] selectItem.forEach((item: any) => { temp.push(item.id) }) forms.check = temp } onMounted(() => { getList() initSelectItem() }) return () => (
{item.nickname}
{item.subjectNames &&
item.subjectNames.map((subject: any) => (