|
@@ -36,6 +36,7 @@ import { manageTeacherType } from '@/constant'
|
|
|
import { postMessage, promisefiyPostMessage } from '@/helpers/native-message'
|
|
|
import html2canvas from 'html2canvas'
|
|
|
import { forms } from '../train-planning/create'
|
|
|
+import OFullRefresh from '@/components/o-full-refresh'
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'companion-teacher',
|
|
@@ -54,7 +55,9 @@ export default defineComponent({
|
|
|
listState: {
|
|
|
dataShow: true, // 判断是否有数据
|
|
|
loading: false,
|
|
|
- finished: false
|
|
|
+ finished: false,
|
|
|
+ refreshing: false,
|
|
|
+ height: 0 // 页面头部高度,为了处理下拉刷新用的
|
|
|
},
|
|
|
subjectText: '全部声部',
|
|
|
statusText: '状态',
|
|
@@ -119,6 +122,7 @@ export default defineComponent({
|
|
|
}
|
|
|
})
|
|
|
form.listState.loading = false
|
|
|
+ form.listState.refreshing = false
|
|
|
const result = res.data || {}
|
|
|
// 处理重复请求数据
|
|
|
if (form.list.length > 0 && result.current === 1) {
|
|
@@ -134,6 +138,7 @@ export default defineComponent({
|
|
|
form.listState.dataShow = form.list.length > 0
|
|
|
} catch {
|
|
|
form.listState.dataShow = false
|
|
|
+ form.listState.refreshing = false
|
|
|
form.listState.finished = true
|
|
|
}
|
|
|
}
|
|
@@ -276,7 +281,12 @@ export default defineComponent({
|
|
|
})
|
|
|
return () => (
|
|
|
<>
|
|
|
- <OSticky position="top">
|
|
|
+ <OSticky
|
|
|
+ position="top"
|
|
|
+ onGetHeight={(height: any) => {
|
|
|
+ form.listState.height = height
|
|
|
+ }}
|
|
|
+ >
|
|
|
<OHeader border={false}>
|
|
|
{{
|
|
|
right: () => <Icon name="plus" size={19} onClick={() => (form.showQrcode = true)} />
|
|
@@ -307,74 +317,82 @@ export default defineComponent({
|
|
|
</OSticky>
|
|
|
|
|
|
{form.listState.dataShow ? (
|
|
|
- <List
|
|
|
- v-model:loading={form.listState.loading}
|
|
|
- finished={form.listState.finished}
|
|
|
- finishedText=" "
|
|
|
- class={[styles.liveList]}
|
|
|
- onLoad={getList}
|
|
|
- immediateCheck={false}
|
|
|
+ <OFullRefresh
|
|
|
+ v-model:modelValue={form.listState.refreshing}
|
|
|
+ onRefresh={onSearch}
|
|
|
+ style={{
|
|
|
+ minHeight: `calc(100vh - ${form.listState.height}px)`
|
|
|
+ }}
|
|
|
>
|
|
|
- {form.list.map((item: any) => (
|
|
|
- <CellGroup inset style={{ marginBottom: '12px' }} onClick={() => onDetail(item)}>
|
|
|
- <Cell center isLink class={styles.manageCell}>
|
|
|
- {{
|
|
|
- icon: () => (
|
|
|
- <Image class={styles.img} src={item.avatar ? item.avatar : iconTeacher} />
|
|
|
- ),
|
|
|
- title: () => (
|
|
|
- <div class={styles.teacherContent}>
|
|
|
- <div class={styles.content}>
|
|
|
- <p class={[styles.name, 'van-ellipsis']}>{item.nickname}</p>
|
|
|
- </div>
|
|
|
- <div class={styles.classNum}>
|
|
|
- <p class={styles.num}>
|
|
|
- {item.completedCourseScheduleNum || 0}/
|
|
|
- {item.totalCourseScheduleNum || 0}
|
|
|
- </p>
|
|
|
- <p class={styles.numText}>课时</p>
|
|
|
+ <List
|
|
|
+ v-model:loading={form.listState.loading}
|
|
|
+ finished={form.listState.finished}
|
|
|
+ finishedText=" "
|
|
|
+ class={[styles.liveList]}
|
|
|
+ onLoad={getList}
|
|
|
+ immediateCheck={false}
|
|
|
+ >
|
|
|
+ {form.list.map((item: any) => (
|
|
|
+ <CellGroup inset style={{ marginBottom: '12px' }} onClick={() => onDetail(item)}>
|
|
|
+ <Cell center isLink class={styles.manageCell}>
|
|
|
+ {{
|
|
|
+ icon: () => (
|
|
|
+ <Image class={styles.img} src={item.avatar ? item.avatar : iconTeacher} />
|
|
|
+ ),
|
|
|
+ title: () => (
|
|
|
+ <div class={styles.teacherContent}>
|
|
|
+ <div class={styles.content}>
|
|
|
+ <p class={[styles.name, 'van-ellipsis']}>{item.nickname}</p>
|
|
|
+ </div>
|
|
|
+ <div class={styles.classNum}>
|
|
|
+ <p class={styles.num}>
|
|
|
+ {item.completedCourseScheduleNum || 0}/
|
|
|
+ {item.totalCourseScheduleNum || 0}
|
|
|
+ </p>
|
|
|
+ <p class={styles.numText}>课时</p>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ class={styles.message}
|
|
|
+ onClick={(e: any) => {
|
|
|
+ e.stopPropagation()
|
|
|
+ e.preventDefault()
|
|
|
+ form.showMessage = true
|
|
|
+ form.selectItem = item
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <Image class={styles.messageImg} src={iconMessage} />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div
|
|
|
- class={styles.message}
|
|
|
- onClick={(e: any) => {
|
|
|
- e.stopPropagation()
|
|
|
- e.preventDefault()
|
|
|
- form.showMessage = true
|
|
|
- form.selectItem = item
|
|
|
- }}
|
|
|
- >
|
|
|
- <Image class={styles.messageImg} src={iconMessage} />
|
|
|
+ ),
|
|
|
+ value: () => (
|
|
|
+ <span class={[styles.status, item.delFlag ? styles.frozen : '']}>
|
|
|
+ {!item.delFlag ? '绑定' : '解绑'}
|
|
|
+ </span>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Cell>
|
|
|
+ <Cell center>
|
|
|
+ {{
|
|
|
+ title: () => (
|
|
|
+ <div class={styles.subjectContainer}>
|
|
|
+ <span>声部:</span>
|
|
|
+ <div style={{ display: 'flex', alignItems: 'center', flexWrap: 'wrap' }}>
|
|
|
+ {item.subjectNames &&
|
|
|
+ item.subjectNames.length > 0 &&
|
|
|
+ item.subjectNames.map((subject: any) => (
|
|
|
+ <Tag type="primary" class={styles.tagSubject}>
|
|
|
+ {subject}
|
|
|
+ </Tag>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- ),
|
|
|
- value: () => (
|
|
|
- <span class={[styles.status, item.delFlag ? styles.frozen : '']}>
|
|
|
- {!item.delFlag ? '绑定' : '解绑'}
|
|
|
- </span>
|
|
|
- )
|
|
|
- }}
|
|
|
- </Cell>
|
|
|
- <Cell center>
|
|
|
- {{
|
|
|
- title: () => (
|
|
|
- <div class={styles.subjectContainer}>
|
|
|
- <span>声部:</span>
|
|
|
- <div style={{ display: 'flex', alignItems: 'center', flexWrap: 'wrap' }}>
|
|
|
- {item.subjectNames &&
|
|
|
- item.subjectNames.length > 0 &&
|
|
|
- item.subjectNames.map((subject: any) => (
|
|
|
- <Tag type="primary" class={styles.tagSubject}>
|
|
|
- {subject}
|
|
|
- </Tag>
|
|
|
- ))}
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- )
|
|
|
- }}
|
|
|
- </Cell>
|
|
|
- </CellGroup>
|
|
|
- ))}
|
|
|
- </List>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Cell>
|
|
|
+ </CellGroup>
|
|
|
+ ))}
|
|
|
+ </List>
|
|
|
+ </OFullRefresh>
|
|
|
) : (
|
|
|
<OEmpty btnStatus={false} tips="暂无伴学指导" />
|
|
|
)}
|