|
@@ -1,23 +1,101 @@
|
|
|
import OHeader from '@/components/o-header'
|
|
|
-import { Button, Cell, CellGroup, Grid, GridItem, Image, Tag } from 'vant'
|
|
|
-import { defineComponent, onMounted } from 'vue'
|
|
|
+import {
|
|
|
+ Button,
|
|
|
+ Cell,
|
|
|
+ CellGroup,
|
|
|
+ Grid,
|
|
|
+ GridItem,
|
|
|
+ Icon,
|
|
|
+ Image,
|
|
|
+ Popup,
|
|
|
+ showDialog,
|
|
|
+ showToast,
|
|
|
+ Tag
|
|
|
+} from 'vant'
|
|
|
+import { defineComponent, onMounted, reactive } from 'vue'
|
|
|
import styles from './companion-detail.module.less'
|
|
|
-
|
|
|
+import { postMessage } from '@/helpers/native-message'
|
|
|
import iconTeacher from '@common/images/icon_teacher.png'
|
|
|
import iconMessage from '@common/images/icon-message.png'
|
|
|
+import iconCallPhone from '@common/images/icon-call-phone.png'
|
|
|
+import iconCallMessage from '@common/images/icon-call-message.png'
|
|
|
import OSticky from '@/components/o-sticky'
|
|
|
import request from '@/helpers/request'
|
|
|
-import { useRoute } from 'vue-router'
|
|
|
+import { state as baseState } from '@/state'
|
|
|
+import { useRoute, useRouter } from 'vue-router'
|
|
|
+import OEmpty from '@/components/o-empty'
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'companion-detail',
|
|
|
setup(props, { slots, attrs, emit }) {
|
|
|
const route = useRoute()
|
|
|
+ const router = useRouter()
|
|
|
+ const state = reactive({
|
|
|
+ showMessage: false,
|
|
|
+ detail: {} as any,
|
|
|
+ classList: [] as any
|
|
|
+ })
|
|
|
const getDetail = async () => {
|
|
|
try {
|
|
|
const query = route.query
|
|
|
- const { data } = await request.get('/api-school/teacher/detail/' + query.id)
|
|
|
- console.log(data)
|
|
|
+ const { data } = await request.post('/api-school/teacher/detail', {
|
|
|
+ data: {
|
|
|
+ teacherId: query.id,
|
|
|
+ schoolId: baseState.user.data.school.id
|
|
|
+ }
|
|
|
+ })
|
|
|
+ state.detail = data
|
|
|
+ const subjects = data.subjectName ? data.subjectName.split(',') : []
|
|
|
+ state.detail.subjectNames = subjects
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const getClassDetail = async () => {
|
|
|
+ try {
|
|
|
+ const query = route.query
|
|
|
+ const { data } = await request.post('/api-school/classGroup/page', {
|
|
|
+ data: {
|
|
|
+ teacherId: query.id,
|
|
|
+ schoolId: baseState.user.data.school.id,
|
|
|
+ page: 1,
|
|
|
+ rows: 100
|
|
|
+ }
|
|
|
+ })
|
|
|
+ state.classList = data.rows || []
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const onDetail = async () => {
|
|
|
+ if (state.classList.length > 0) {
|
|
|
+ router.push({
|
|
|
+ path: '/companion-unbind',
|
|
|
+ query: { id: route.query.id }
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ showDialog({
|
|
|
+ title: '提示',
|
|
|
+ message: '是否解除绑定',
|
|
|
+ showCancelButton: true
|
|
|
+ }).then(async () => {
|
|
|
+ await request.post('/api-school/classGroup/handoverTeacher', {
|
|
|
+ data: {
|
|
|
+ teacherId: route.query.id
|
|
|
+ }
|
|
|
+ })
|
|
|
+ setTimeout(() => {
|
|
|
+ showToast('解绑成功')
|
|
|
+ }, 100)
|
|
|
+ setTimeout(() => {
|
|
|
+ router.back()
|
|
|
+ }, 1000)
|
|
|
+ })
|
|
|
} catch {
|
|
|
//
|
|
|
}
|
|
@@ -25,6 +103,7 @@ export default defineComponent({
|
|
|
|
|
|
onMounted(() => {
|
|
|
getDetail()
|
|
|
+ getClassDetail()
|
|
|
})
|
|
|
return () => (
|
|
|
<>
|
|
@@ -33,27 +112,37 @@ export default defineComponent({
|
|
|
<CellGroup inset class={styles.detailCellGroup}>
|
|
|
<Cell center class={styles.detailCell}>
|
|
|
{{
|
|
|
- icon: () => (
|
|
|
- <Image
|
|
|
- class={styles.img}
|
|
|
- src="https://daya.ks3-cn-beijing.ksyuncs.com/12/1670231208704.png"
|
|
|
- />
|
|
|
- ),
|
|
|
+ icon: () => <Image class={styles.img} src={state.detail.avatar || iconTeacher} />,
|
|
|
title: () => (
|
|
|
<div class={styles.teacherContent}>
|
|
|
<div class={styles.content}>
|
|
|
- <p class={[styles.name, 'van-ellipsis']}>121212</p>
|
|
|
- <p class={styles.subjects}>
|
|
|
- <Tag type="primary">{'1212'}</Tag>
|
|
|
- </p>
|
|
|
+ <p class={[styles.name, 'van-ellipsis']}>{state.detail.nickname}</p>
|
|
|
+ {state.detail.subjectName ? (
|
|
|
+ <p class={styles.subjects}>
|
|
|
+ {state.detail.subjectNames.map((subject: any) => (
|
|
|
+ <Tag type="primary">{subject}</Tag>
|
|
|
+ ))}
|
|
|
+ </p>
|
|
|
+ ) : (
|
|
|
+ ''
|
|
|
+ )}
|
|
|
</div>
|
|
|
<div class={styles.classNum}>
|
|
|
- <p class={styles.num}>1/1212</p>
|
|
|
+ <p class={styles.num}>
|
|
|
+ {state.detail.completedCourseScheduleNum || 0}/
|
|
|
+ {state.detail.totalCourseScheduleNum || 0}
|
|
|
+ </p>
|
|
|
<p class={styles.numText}>课时</p>
|
|
|
</div>
|
|
|
</div>
|
|
|
),
|
|
|
- value: () => <Image class={styles.messageImg} src={iconMessage} />
|
|
|
+ value: () => (
|
|
|
+ <Image
|
|
|
+ class={styles.messageImg}
|
|
|
+ src={iconMessage}
|
|
|
+ onClick={() => (state.showMessage = true)}
|
|
|
+ />
|
|
|
+ )
|
|
|
}}
|
|
|
</Cell>
|
|
|
</CellGroup>
|
|
@@ -64,9 +153,9 @@ export default defineComponent({
|
|
|
</div>
|
|
|
|
|
|
<CellGroup inset class={styles.detailCellGroup}>
|
|
|
- <Cell title="手机号码" value="13000000001"></Cell>
|
|
|
- <Cell title="性别" value="女"></Cell>
|
|
|
- <Cell title="声部" value="长笛"></Cell>
|
|
|
+ <Cell title="手机号码" value={state.detail.phone}></Cell>
|
|
|
+ <Cell title="性别" value={state.detail.gender ? '男' : '女'}></Cell>
|
|
|
+ <Cell title="声部" value={state.detail.subjectName}></Cell>
|
|
|
</CellGroup>
|
|
|
|
|
|
<div class={styles.sectionTitle}>
|
|
@@ -74,33 +163,94 @@ export default defineComponent({
|
|
|
所在班级
|
|
|
</div>
|
|
|
<CellGroup inset class={styles.detailCellGroup}>
|
|
|
- {[1, 2, 3, 4, 5, 6].map((i) => (
|
|
|
+ {state.classList.map((item: any) => (
|
|
|
<Cell center class={styles.companionCell}>
|
|
|
{{
|
|
|
title: () => (
|
|
|
<div class={styles.classInfo}>
|
|
|
- <p class={styles.className}>长笛班</p>
|
|
|
- <p class={styles.musicName}>武汉小学2022校团</p>
|
|
|
+ <p class={styles.className}>{item.name}</p>
|
|
|
+ <p class={styles.musicName}>{item.orchestraName}</p>
|
|
|
</div>
|
|
|
),
|
|
|
value: () => (
|
|
|
<div class={styles.num}>
|
|
|
- <p class={styles.nums}>10/16</p>
|
|
|
+ <p class={styles.nums}>
|
|
|
+ {item.completeCourseScheduleNum}/{item.courseScheduleNum}
|
|
|
+ </p>
|
|
|
<p class={styles.numTip}>总课时</p>
|
|
|
</div>
|
|
|
)
|
|
|
}}
|
|
|
</Cell>
|
|
|
))}
|
|
|
+ {state.classList.length <= 0 && <OEmpty btnStatus={false} tips="暂无班级" />}
|
|
|
</CellGroup>
|
|
|
|
|
|
<OSticky position="bottom">
|
|
|
<div class={['btnGroup']} style={{ paddingLeft: '13px', paddingRight: '13px' }}>
|
|
|
- <Button type="primary" round block>
|
|
|
+ <Button type="primary" round block onClick={onDetail}>
|
|
|
解除绑定
|
|
|
</Button>
|
|
|
</div>
|
|
|
</OSticky>
|
|
|
+
|
|
|
+ <Popup
|
|
|
+ v-model:show={state.showMessage}
|
|
|
+ position="bottom"
|
|
|
+ style={{ background: 'transparent' }}
|
|
|
+ safeAreaInsetBottom={true}
|
|
|
+ >
|
|
|
+ <div class={styles.codeContainer}>
|
|
|
+ <div class={styles.codeBottom}>
|
|
|
+ <Icon
|
|
|
+ name="cross"
|
|
|
+ size={22}
|
|
|
+ class={styles.close}
|
|
|
+ color="#666"
|
|
|
+ onClick={() => (state.showMessage = false)}
|
|
|
+ />
|
|
|
+
|
|
|
+ <h3 class={styles.title}>
|
|
|
+ <i></i>联系方式
|
|
|
+ </h3>
|
|
|
+ <Grid columnNum={2} border={false}>
|
|
|
+ <GridItem
|
|
|
+ onClick={() => {
|
|
|
+ postMessage({
|
|
|
+ api: 'joinChatGroup',
|
|
|
+ content: {
|
|
|
+ type: 'single', // single 单人 multi 多人
|
|
|
+ id: state.detail.id
|
|
|
+ }
|
|
|
+ })
|
|
|
+ state.showMessage = false
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ {{
|
|
|
+ icon: () => <Image class={styles.shareImg} src={iconCallMessage} />,
|
|
|
+ text: () => <div class={styles.shareText}>发送消息</div>
|
|
|
+ }}
|
|
|
+ </GridItem>
|
|
|
+ <GridItem
|
|
|
+ onClick={() => {
|
|
|
+ postMessage({
|
|
|
+ api: 'callPhone',
|
|
|
+ content: {
|
|
|
+ id: state.detail.phone
|
|
|
+ }
|
|
|
+ })
|
|
|
+ state.showMessage = false
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ {{
|
|
|
+ icon: () => <Image class={styles.shareImg} src={iconCallPhone} />,
|
|
|
+ text: () => <div class={styles.shareText}>拨打电话</div>
|
|
|
+ }}
|
|
|
+ </GridItem>
|
|
|
+ </Grid>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </Popup>
|
|
|
</>
|
|
|
)
|
|
|
}
|