parent
d1d1dec42e
commit
33abea6a49
@ -1,75 +0,0 @@ |
|||||||
import {FC, useState} from "react"; |
|
||||||
import {View} from "@tarojs/components"; |
|
||||||
import {ManageApi} from "@/api/manage"; |
|
||||||
import {Profile} from '@/store' |
|
||||||
import PopPut from "@/components/popPut/popPut"; |
|
||||||
import Taro from "@tarojs/taro"; |
|
||||||
|
|
||||||
|
|
||||||
interface Props { |
|
||||||
cur_id: number |
|
||||||
name?: string |
|
||||||
} |
|
||||||
|
|
||||||
const Dep: FC<Props> = ({cur_id}: Props) => { |
|
||||||
const [bindDep, setBindDep] = useState<Department[]>([]) |
|
||||||
|
|
||||||
async function getBind() { |
|
||||||
try { |
|
||||||
const res = await ManageApi.bingDep(cur_id) |
|
||||||
setBindDep(res.department) |
|
||||||
} catch (e) { |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function jump(item: Department) { |
|
||||||
Taro.showModal({ |
|
||||||
title: "是否查看" + item.name, |
|
||||||
success({confirm}) { |
|
||||||
confirm && Taro.navigateTo({url: `/pages/manage/depCur/depCur?id=${item.id}`}) |
|
||||||
} |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
Taro.useDidShow(() => { |
|
||||||
getBind() |
|
||||||
}) |
|
||||||
|
|
||||||
return (<> |
|
||||||
{bindDep && <View className='header'> |
|
||||||
<View className='font-weight font-26'>课程已分配部门</View> |
|
||||||
{bindDep && bindDep.map(d => ( |
|
||||||
<PopPut title={d.name} height={40} content={'查看'} onClick={() => jump(d)}/> |
|
||||||
))} |
|
||||||
</View> |
|
||||||
} |
|
||||||
</>) |
|
||||||
} |
|
||||||
|
|
||||||
const StudentRecord: FC<Props> = ({cur_id, name}: Props) => { |
|
||||||
function jump() { |
|
||||||
Taro.navigateTo({url: `/pages/manage/studentRecord/studentRecord?cur_id=${cur_id}&name=${name}`}) |
|
||||||
} |
|
||||||
|
|
||||||
return ( |
|
||||||
<View className='header'> |
|
||||||
<PopPut title={'学员学习记录'} height={40} content={'查看'} onClick={jump}/> |
|
||||||
</View> |
|
||||||
) |
|
||||||
} |
|
||||||
|
|
||||||
const ContainDeps: FC<Props> = ({cur_id,name}: Props) => { |
|
||||||
const {user} = Profile.useContainer() |
|
||||||
|
|
||||||
return ( |
|
||||||
<> |
|
||||||
{user?.role_type !== 0 ? |
|
||||||
<View> |
|
||||||
<Dep cur_id={cur_id}/> |
|
||||||
<StudentRecord cur_id={cur_id} name={name}/> |
|
||||||
</View> |
|
||||||
: null} |
|
||||||
</> |
|
||||||
) |
|
||||||
} |
|
||||||
export default ContainDeps |
|
@ -1,4 +0,0 @@ |
|||||||
export default definePageConfig({ |
|
||||||
navigationBarTitleText: '学员学习记录', |
|
||||||
onReachBottomDistance:30 |
|
||||||
}) |
|
@ -1,102 +0,0 @@ |
|||||||
import {CustomWrapper, Image, Text, View} from "@tarojs/components"; |
|
||||||
import {FC, useEffect, useState} from "react"; |
|
||||||
import {getCurrentInstance} from "@tarojs/runtime"; |
|
||||||
import Taro, {useReachBottom} from "@tarojs/taro"; |
|
||||||
import {CurLearningRecord, ManageApi} from "@/api/manage"; |
|
||||||
import '@/pages/manage/studentAdmin/student.scss' |
|
||||||
|
|
||||||
const StudentRecord: FC = () => { |
|
||||||
const [page, setPage] = useState(1) |
|
||||||
const {cur_id, name} = getCurrentInstance()?.router?.params as { cur_id: string, name: string } |
|
||||||
const [data, setData] = useState<CurLearningRecord | null>(null) |
|
||||||
const [total, setTotal] = useState(0) |
|
||||||
|
|
||||||
async function getData() { |
|
||||||
try { |
|
||||||
const res = await ManageApi.curLearningRecord(cur_id, {page, size: 10}) |
|
||||||
if (!data) { |
|
||||||
setData(res) |
|
||||||
} else { |
|
||||||
const oldData: CurLearningRecord = JSON.parse(JSON.stringify(data)) |
|
||||||
oldData.data.push(...res.data) |
|
||||||
oldData.departments = res.departments |
|
||||||
Object.entries(res.user_dep_ids).forEach(([key, value]) => { |
|
||||||
oldData.user_dep_ids[key] = value |
|
||||||
}) |
|
||||||
Object.entries(res.user_course_records).forEach(([key, value]) => { |
|
||||||
oldData.user_course_records[key] = value |
|
||||||
}) |
|
||||||
Object.entries(res.user_course_hour_user_first_at).forEach(([key, value]) => { |
|
||||||
oldData.user_course_hour_user_first_at[key] = value |
|
||||||
}) |
|
||||||
setData(oldData) |
|
||||||
} |
|
||||||
setTotal(res.total) |
|
||||||
} catch (e) { |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function getDep(user_id: number): string { |
|
||||||
const cur_ids = data?.user_dep_ids[user_id] |
|
||||||
if (cur_ids) { |
|
||||||
return cur_ids.map(d => data?.departments[d]).join('、') |
|
||||||
} |
|
||||||
return '' |
|
||||||
} |
|
||||||
|
|
||||||
useReachBottom(() => { |
|
||||||
if (data && data.data.length < total) { |
|
||||||
setPage(page + 1) |
|
||||||
} |
|
||||||
}) |
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => { |
|
||||||
getData() |
|
||||||
}, [page]) |
|
||||||
Taro.setNavigationBarTitle({title: name}) |
|
||||||
|
|
||||||
return ( |
|
||||||
<CustomWrapper> |
|
||||||
{data?.data.map(d => ( |
|
||||||
<View className='bg-white user'> |
|
||||||
<View className='flex mt-3 header p-2 justify-between'> |
|
||||||
<View className='flex'> |
|
||||||
<Text>学员编号 {d.id}</Text> |
|
||||||
</View> |
|
||||||
</View> |
|
||||||
<View className='p-2 flex info justify-between'> |
|
||||||
<View> |
|
||||||
<View className='font-weight my-3'>{d.name}</View> |
|
||||||
<View className='flex mb-3'> |
|
||||||
<View style='width:80px' className='text-muted'>类型</View> |
|
||||||
<View>{['学员', '管理员', '超级管理员'][d.role_type]}</View> |
|
||||||
</View> |
|
||||||
<View className='flex mb-3'> |
|
||||||
<View style='width:80px' className='text-muted'>手机号</View> |
|
||||||
<View>{d.phone_number}</View> |
|
||||||
</View> |
|
||||||
<View className='flex mb-3'> |
|
||||||
<View style='width:80px' className='text-muted'>邮箱</View> |
|
||||||
<View>{d.email}</View> |
|
||||||
</View> |
|
||||||
<View className='flex mb-3'> |
|
||||||
<View style='width:80px' className='text-muted'>部门</View> |
|
||||||
<View>{getDep(d.id)}</View> |
|
||||||
</View> |
|
||||||
<View className='flex mb-3'> |
|
||||||
<View style='width:80px' className='text-muted'>学习进度</View> |
|
||||||
<View>{data?.user_course_records[d.id]?.finished_count || 0}/{data?.course.class_hour}</View> |
|
||||||
</View> |
|
||||||
</View> |
|
||||||
<Image src={d.avatar} mode='widthFix'/> |
|
||||||
</View> |
|
||||||
<View className='flex justify-between p-2 operation'> |
|
||||||
</View> |
|
||||||
</View> |
|
||||||
))} |
|
||||||
</CustomWrapper> |
|
||||||
) |
|
||||||
} |
|
||||||
|
|
||||||
export default StudentRecord |
|
Loading…
Reference in new issue