소스 검색

完善了 统计

于添 5 달 전
부모
커밋
43b0b7aa0b

+ 15 - 6
src/api/statisticalAnalysis/analysisLearningBehaviors.js

@@ -517,12 +517,14 @@ export const getCollegeList = async (params) => {
 }
 
 export const getCollegeStats = async (params) => {
-	let res = await request('disk/studyBehavior/courseVisitProgress', params, 'get')
-		// /disk/studyBehavior/userLoginProgress
-	console.log('courseVisitProgress', res)
+	let res1 = await request('disk/studyBehavior/courseVisitProgress', params, 'get')
+	let res2 = await request('disk/studyBehavior/userLoginProgress', params, 'get')
+	let res3 = await request('disk/studyBehavior/watchDurationProgress', params, 'get')
+		//
+	// console.log('courseVisitProgress', res)
 	let json = {
 		code: 200,
-		data : res
+		data : {...res1,...res2,...res3}
 	}
 	return json
 }
@@ -575,8 +577,15 @@ export const getCollegeCourseDetails = async (params) => {
 	return json
 }
 
-export const searchStudents = (params) => {
+export const searchStudents = async (params) => {
 
 
-	return request('analysis/search-students', params, 'get')
+	let res = await request('disk/studyBehavior/studentAnalyse', params, 'get')
+
+	console.log('1120',res)
+	let json = {
+		code: 200,
+		data : res.records
+	}
+	return json
 }

+ 124 - 115
src/views/statisticalAnalysis/analysisLearningBehaviors/index.vue

@@ -59,21 +59,21 @@
 
 				<div class="stat-card">
 					<h3>👥 用户登录统计</h3>
-					<div class="stat-number">{{ collegeStats.totalLogins.toLocaleString() }}</div>
+					<div class="stat-number">{{ collegeStats.allLoginCount.toLocaleString() }}</div>
 					<div class="stat-label">总登录人次</div>
-					<div class="stat-number">{{ collegeStats.uniqueUsers.toLocaleString() }}</div>
+					<div class="stat-number">{{ collegeStats.userCount.toLocaleString() }}</div>
 					<div class="stat-label">独立用户数</div>
-					<div class="stat-number">{{ collegeStats.avgLoginPerUser }}</div>
+					<div class="stat-number">{{ collegeStats.avgLoginCount }}</div>
 					<div class="stat-label">人均登录次数</div>
 				</div>
 
 				<div class="stat-card">
 					<h3>⏰ 观看时长统计</h3>
-					<div class="stat-number">{{ collegeStats.totalOnlineTime }}h</div>
+					<div class="stat-number">{{ collegeStats.userAllStayTime }}</div>
 					<div class="stat-label">总观看时长</div>
-					<div class="stat-number">{{ collegeStats.avgSessionTime }}min</div>
+					<div class="stat-number">{{ collegeStats.avgStayTime }}</div>
 					<div class="stat-label">平均时长</div>
-					<div class="stat-number">{{ collegeStats.peakOnlineUsers }}</div>
+					<div class="stat-number">{{ collegeStats.peakWatchUserCount ? peakWatchUserCount.toLocaleString() : '0' }}</div>
 					<div class="stat-label">峰值观看人数</div>
 				</div>
 			</div>
@@ -125,41 +125,41 @@
 			<div class="student-cards">
 				<div
 					v-for="student in filteredStudents"
-					:key="student.id"
+					:key="student.userId"
 					class="student-card"
 					:class="{ highlighted: student.highlighted }"
 				>
 					<div class="student-header">
 						<div class="student-info">
-							<h4>{{ student.name }} ({{ student.studentId }})</h4>
-							<div class="student-meta">{{ student.college }} | {{ student.major }} | {{ student.grade }}</div>
+							<h4>{{ student.userIdName }} ({{ student.userId }})</h4>
+							<div class="student-meta">{{ student.college }} | {{ student.majorIdName }} | {{ student.grade }}</div>
 						</div>
 						<div class="student-stats">
 							<div class="stat-item">
-								<div class="stat-value">{{ student.overallProgress }}%</div>
+								<div class="stat-value">{{ (student.finishRate)* 100 }}%</div>
 								<div class="stat-label">总体进度</div>
 							</div>
 						</div>
 					</div>
 
 					<div class="course-progress">
-						<div v-for="course in student.courses" :key="course.id" class="course-item">
-							<div class="course-name">{{ course.name }}</div>
+						<div v-for="course in student.courseList" :key="course.id" class="course-item">
+							<div class="course-name">{{ course.courseName }}</div>
 							<div class="course-stats">
 								<div class="stat-item">
-									<div class="stat-value">{{ course.progress }}%</div>
+									<div class="stat-value">{{ (course.finishRate)* 100 }}%</div>
 									<div class="stat-label">学习进度</div>
 								</div>
 								<div class="stat-item">
-									<div class="stat-value">{{ course.completedAssignments }}/{{ course.totalAssignments }}</div>
+									<div class="stat-value">{{ course.workRate }}</div>
 									<div class="stat-label">作业完成</div>
 								</div>
 								<div class="stat-item">
-									<div class="stat-value">{{ course.discussionParticipation }}</div>
+									<div class="stat-value">{{ course.answerCount }}</div>
 									<div class="stat-label">讨论参与</div>
 								</div>
 								<div class="stat-item">
-									<div class="stat-value">{{ course.questionCount }}</div>
+									<div class="stat-value">{{ course.postCount }}</div>
 									<div class="stat-label">提问次数</div>
 								</div>
 							</div>
@@ -196,7 +196,7 @@
 	const collegeList = ref([])
 
 	// 学院统计数据
-	const collegeStats = reactive({
+	const collegeStats = ref({
 		totalCourses: 156,
 		activeCourses: 142,
 		courseAccessRate: 91.0,
@@ -208,7 +208,13 @@
 		peakOnlineUsers: 234,
 		activeCourseCount : 0,
 		allCourseCount : 0,
-		courseVisitCount : 0
+		courseVisitCount : 0,
+		allLoginCount : 0,
+		avgLoginCount: 0,
+		userCount :0,
+		avgStayTime:'',
+		peakWatchUserCount : 0,
+		userAllStayTime : ''
 	})
 
 	// 图表引用
@@ -299,96 +305,96 @@
 
 	// 学员数据
 	const studentsData = ref([
-		{
-			id: 1,
-			name: '张三',
-			studentId: '2021001',
-			college: '计算机学院',
-			major: '计算机科学与技术',
-			grade: '大三',
-			overallProgress: 85.6,
-			highlighted: false,
-			courses: [
-				{
-					id: 1,
-					name: 'JavaScript程序设计',
-					progress: 92,
-					completedAssignments: 8,
-					totalAssignments: 10,
-					discussionParticipation: 15,
-					questionCount: 5
-				},
-				{
-					id: 2,
-					name: '数据结构与算法',
-					progress: 78,
-					completedAssignments: 6,
-					totalAssignments: 8,
-					discussionParticipation: 12,
-					questionCount: 3
-				}
-			]
-		},
-		{
-			id: 2,
-			name: '李四',
-			studentId: '2021002',
-			college: '商学院',
-			major: '工商管理',
-			grade: '大二',
-			overallProgress: 72.3,
-			highlighted: false,
-			courses: [
-				{
-					id: 3,
-					name: '管理学原理',
-					progress: 85,
-					completedAssignments: 7,
-					totalAssignments: 9,
-					discussionParticipation: 8,
-					questionCount: 2
-				},
-				{
-					id: 4,
-					name: '市场营销学',
-					progress: 65,
-					completedAssignments: 4,
-					totalAssignments: 7,
-					discussionParticipation: 6,
-					questionCount: 1
-				}
-			]
-		},
-		{
-			id: 3,
-			name: '王五',
-			studentId: '2021003',
-			college: '艺术学院',
-			major: '视觉传达设计',
-			grade: '大一',
-			overallProgress: 91.2,
-			highlighted: false,
-			courses: [
-				{
-					id: 5,
-					name: '设计基础',
-					progress: 95,
-					completedAssignments: 10,
-					totalAssignments: 10,
-					discussionParticipation: 20,
-					questionCount: 8
-				},
-				{
-					id: 6,
-					name: '色彩构成',
-					progress: 88,
-					completedAssignments: 8,
-					totalAssignments: 9,
-					discussionParticipation: 15,
-					questionCount: 6
-				}
-			]
-		}
+		// {
+		// 	id: 1,
+		// 	name: '张三',
+		// 	studentId: '2021001',
+		// 	college: '计算机学院',
+		// 	major: '计算机科学与技术',
+		// 	grade: '大三',
+		// 	overallProgress: 85.6,
+		// 	highlighted: false,
+		// 	courses: [
+		// 		{
+		// 			id: 1,
+		// 			name: 'JavaScript程序设计',
+		// 			progress: 92,
+		// 			completedAssignments: 8,
+		// 			totalAssignments: 10,
+		// 			discussionParticipation: 15,
+		// 			questionCount: 5
+		// 		},
+		// 		{
+		// 			id: 2,
+		// 			name: '数据结构与算法',
+		// 			progress: 78,
+		// 			completedAssignments: 6,
+		// 			totalAssignments: 8,
+		// 			discussionParticipation: 12,
+		// 			questionCount: 3
+		// 		}
+		// 	]
+		// },
+		// {
+		// 	id: 2,
+		// 	name: '李四',
+		// 	studentId: '2021002',
+		// 	college: '商学院',
+		// 	major: '工商管理',
+		// 	grade: '大二',
+		// 	overallProgress: 72.3,
+		// 	highlighted: false,
+		// 	courses: [
+		// 		{
+		// 			id: 3,
+		// 			name: '管理学原理',
+		// 			progress: 85,
+		// 			completedAssignments: 7,
+		// 			totalAssignments: 9,
+		// 			discussionParticipation: 8,
+		// 			questionCount: 2
+		// 		},
+		// 		{
+		// 			id: 4,
+		// 			name: '市场营销学',
+		// 			progress: 65,
+		// 			completedAssignments: 4,
+		// 			totalAssignments: 7,
+		// 			discussionParticipation: 6,
+		// 			questionCount: 1
+		// 		}
+		// 	]
+		// },
+		// {
+		// 	id: 3,
+		// 	name: '王五',
+		// 	studentId: '2021003',
+		// 	college: '艺术学院',
+		// 	major: '视觉传达设计',
+		// 	grade: '大一',
+		// 	overallProgress: 91.2,
+		// 	highlighted: false,
+		// 	courses: [
+		// 		{
+		// 			id: 5,
+		// 			name: '设计基础',
+		// 			progress: 95,
+		// 			completedAssignments: 10,
+		// 			totalAssignments: 10,
+		// 			discussionParticipation: 20,
+		// 			questionCount: 8
+		// 		},
+		// 		{
+		// 			id: 6,
+		// 			name: '色彩构成',
+		// 			progress: 88,
+		// 			completedAssignments: 8,
+		// 			totalAssignments: 9,
+		// 			discussionParticipation: 15,
+		// 			questionCount: 6
+		// 		}
+		// 	]
+		// }
 	])
 
 	// 过滤后的学员数据
@@ -400,8 +406,8 @@
 		const searchTerm = studentSearch.value.trim().toLowerCase()
 		return studentsData.value
 			.filter((student) => {
-				const matchName = student.name.toLowerCase().includes(searchTerm)
-				const matchId = student.studentId.includes(searchTerm)
+				const matchName = student.userIdName.toLowerCase().includes(searchTerm)
+				const matchId = student.userId.includes(searchTerm)
 				return matchName || matchId
 			})
 			.map((student) => ({ ...student, highlighted: true }))
@@ -436,8 +442,9 @@
 				startTime : formatDateWithDays(0),
 				endTime : formatDateWithDays(collegeFilters.timeRange)
 			})
-			Object.assign(collegeStats, statsResponse.data)
-
+			console.log("asdasd",statsResponse.data)
+			// Object.assign(collegeStats, statsResponse.data)
+			collegeStats.value = {...collegeStats,...statsResponse.data}
 			// 获取课程详细统计
 			const detailsResponse = await getCollegeCourseDetails({
 				orgId: collegeFilters.collegeId,
@@ -457,13 +464,15 @@
 	const searchStudent = async () => {
 		try {
 			const response = await searchStudents({
-				keyword: studentSearch.value.trim()
+				name: studentSearch.value.trim(),
+				current: 1,
+				size: 99
 			})
-			studentsData.value = response.map((student) => ({
+			studentsData.value = response.data.map((student) => ({
 				...student,
 				highlighted: !!studentSearch.value.trim()
 			}))
-
+			console.log('看看呢',studentsData.value)
 			if (response.length === 0 && studentSearch.value.trim()) {
 				alert(`未找到包含"${studentSearch.value}"的学员`)
 			}

+ 1 - 1
src/views/statisticalAnalysis/videoAnalysis/index.vue

@@ -599,7 +599,7 @@
 		chapterLoading.value = true
 		try {
 			await Promise.all([fetchVideoStats(), fetchStudentData(), fetchChapterData(), fetchChartData()])
-			message.success('数据已更新!')
+			// message.success('数据已更新!')
 		} catch (error) {
 			console.error('更新数据失败:', error)
 		} finally {