于添 6 сар өмнө
parent
commit
fecced0173
35 өөрчлөгдсөн 482 нэмэгдсэн , 262 устгасан
  1. 4 4
      .env.production
  2. 14 14
      public/html/resourceStatistics.html
  3. 1 1
      src/App.vue
  4. 1 1
      src/api/course/courseDetail.js
  5. 5 1
      src/api/forum/forumApi.js
  6. 1 1
      src/api/resourceAudit.js
  7. 1 1
      src/layout/other/404.vue
  8. 3 3
      src/views/classManagement/components/DialogView.vue
  9. 2 2
      src/views/classManagement/components/QueryView.vue
  10. 2 2
      src/views/course/major/form.vue
  11. 1 1
      src/views/courseAdd/components/StudentDetails.vue
  12. 1 1
      src/views/courseAdd/components/courseInfo.vue
  13. 3 3
      src/views/courseAdd/components/courseProduction/resourceUpload.vue
  14. 1 1
      src/views/courseManagement/components/QueryView.vue
  15. 119 46
      src/views/forum/addForum.vue
  16. 117 30
      src/views/forum/detail.vue
  17. 53 28
      src/views/forum/form.vue
  18. 50 43
      src/views/forum/index.vue
  19. 22 22
      src/views/forum/replyForm.vue
  20. 23 21
      src/views/forum/reportForm.vue
  21. 1 1
      src/views/myFavorites/index.vue
  22. 1 1
      src/views/myResources/auditModal.vue
  23. 16 2
      src/views/myResources/coverUpload/index.vue
  24. 1 1
      src/views/myResources/index.vue
  25. 1 1
      src/views/myResources/myResources.vue
  26. 3 1
      src/views/myResources/releaseModal.vue
  27. 3 3
      src/views/myResources/resourceUpload.vue
  28. 17 13
      src/views/portal/components/Header.vue
  29. 4 6
      src/views/resourceCenter/components/ComplexChoices.vue
  30. 4 0
      src/views/resourceCenter/components/MyRadioButton.vue
  31. 1 1
      src/views/resourceCenter/components/MyRadioButtonGroup.vue
  32. 2 2
      src/views/resourceDetails/components/VideoDetails.vue
  33. 3 3
      src/views/statisticalAnalysis/statisticalAnalysisResourceLibrary/index.vue
  34. 1 1
      src/views/taskProgress/index.vue
  35. 0 0
      stats.html

+ 4 - 4
.env.production

@@ -5,12 +5,12 @@ NODE_ENV = production
 VITE_TITLE = 飞行学院
 
 # 接口地址
-#VITE_API_BASEURL = http://192.168.1.245:19003
+VITE_API_BASEURL = http://192.168.1.245:19003
 #VITE_API_BASEURL = http://22.120.128.109:19003
-VITE_API_BASEURL = http://192.168.31.56:19003
-#VITE_FILEURL = http://192.168.1.245:10005/education/
+#VITE_API_BASEURL = http://192.168.31.56:19003
+VITE_FILEURL = http://192.168.1.245:10005/education/
 #VITE_FILEURL = http://22.120.128.108:10005/education/
-VITE_FILEURL = http://192.168.31.56:10005/education/
+#VITE_FILEURL = http://192.168.31.56:10005/education/
 # 本地端口
 VITE_PORT = 9000
 

+ 14 - 14
public/html/resourceStatistics.html

@@ -101,7 +101,7 @@
 <body>
     <div class="container">
         <h1>资源库统计分析</h1>
-        
+
         <!-- 摘要信息 -->
         <div class="row">
             <div class="col summary-box">
@@ -130,16 +130,16 @@
 
         <!-- 筛选器 -->
         <div class="filters">
-            <label for="department-filter">筛选院系:</label>
+            <label for="department-filter">筛选单位:</label>
             <select id="department-filter">
-                <option value="all">全部院系</option>
+                <option value="all">全部单位</option>
                 <option value="aviation">航空学院</option>
                 <option value="military">军事管理系</option>
                 <option value="politics">政治工作部</option>
                 <option value="maintenance">地面维修中心</option>
                 <option value="other">其他部门</option>
             </select>
-            
+
             <label for="time-filter">时间范围:</label>
             <select id="time-filter">
                 <option value="all">全部时间</option>
@@ -220,32 +220,32 @@
             types: ['航空教学', '部队管理', '政治工作', '地面维修', '其他'],
             typeCounts: [345, 278, 192, 231, 201],
             typeStorage: [1.2, 0.8, 0.6, 0.9, 0.7], // TB
-            
+
             // 院系数据
             departments: ['航空学院', '军事管理系', '政治工作部', '地面维修中心', '其他部门'],
             departmentCounts: [412, 289, 176, 223, 147],
             departmentStorage: [1.5, 0.9, 0.5, 0.8, 0.5], // TB
-            
+
             // 可见性数据
             visibility: ['公开', '非公开'],
             visibilityCounts: [987, 260],
-            
+
             // 热度数据
             hotness: ['热门', '非热门'],
             hotnessCounts: [312, 935],
             recommended: ['已推荐', '未推荐'],
             recommendedCounts: [187, 1060],
-            
+
             // 文件格式数据 - 包含文件数量和平均文件大小
             formats: ['mp4', 'pdf', 'docx', 'pptx', 'xlsx', 'jpg', 'avi', 'wmv', 'mkv', 'other'],
             formatCounts: [320, 312, 135, 189, 98, 167, 56, 67, 41, 163],
             formatStorage: [2.1, 0.3, 0.15, 0.25, 0.1, 0.08, 0.4, 0.3, 0.2, 0.12], // TB
             formatAvgSize: ['6.6GB', '960MB', '1.1MB', '1.3MB', '1.0MB', '500KB', '7.1GB', '4.5GB', '4.9GB', '750KB'],
-            
+
             // 用户参与度数据
             engagement: ['观看', '收藏', '分享'],
             engagementCounts: [89532, 15678, 7892],
-            
+
             // 时间趋势数据
             trendLabels: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月'],
             uploadTrend: [120, 95, 140, 110, 135, 150, 130, 80],
@@ -297,7 +297,7 @@
                 plugins: {
                     title: {
                         display: true,
-                        text: '按院系分布 (数量)'
+                        text: '按单位分布 (数量)'
                     },
                     legend: {
                         position: 'bottom'
@@ -419,8 +419,8 @@
                     label: '存储空间 (TB)',
                     data: mockData.formatStorage,
                     backgroundColor: [
-                        '#e74c3c', '#3498db', '#2ecc71', '#f39c12', 
-                        '#9b59b6', '#1abc9c', '#34495e', '#d35400', 
+                        '#e74c3c', '#3498db', '#2ecc71', '#f39c12',
+                        '#9b59b6', '#1abc9c', '#34495e', '#d35400',
                         '#8e44ad', '#7f8c8d'
                     ],
                     borderWidth: 2
@@ -576,4 +576,4 @@
         });
     </script>
 </body>
-</html>
+</html>

+ 1 - 1
src/App.vue

@@ -38,6 +38,6 @@
 	const locale = i18n.global.messages.value[i18n.global.locale.value].lang
 
 	onMounted(() => {
-		console.log('经过我吗1231312312312')
+		console.log('经过我')
 	})
 </script>

+ 1 - 1
src/api/course/courseDetail.js

@@ -81,7 +81,7 @@ export const mockStudentDetail = {
 	name: '张三',
 	phone: '18088889999',
 	gender: '男',
-	college: '院系名称',
+	college: '单位名称',
 	className: '班级名称',
 	birthday: '1984年6月22日',
 	city: '黑龙江省哈尔滨市',

+ 5 - 1
src/api/forum/forumApi.js

@@ -26,6 +26,10 @@ export default {
 	postlikeSubmit(data, isLike = 0) {
 		return request(`forum/postlike/${isLike == 0 ? 'add' : 'cancel'}`, data)
 	},
+	// 踩接口 // 取消踩接口
+	postPostnotlikeSubmit(data, isLike = 0) {
+		return request(`forum/postnotlike/${isLike == 0 ? 'add' : 'cancel'}`, data)
+	},
 	// 回复帖子接口 //编辑回复
 	submitPostreply(data, edit = false) {
 		return request(`forum/postreply/${edit ? 'edit' : 'add'}`, data)
@@ -44,7 +48,7 @@ export default {
 	},
 	// 所有用户
 	allUserList(data) {
-		return request('bus/user/allList', data, 'get')
+		return request('bus/user/busPageList', data, 'get')
 	},
 	// 后台-管理员是否关闭帖子接口
 	postinfoStatus(data) {

+ 1 - 1
src/api/resourceAudit.js

@@ -85,7 +85,7 @@ export default {
 	},
 	//公开人员查询所有以及下级
 	orgUserTreeSelector(data = {}) {
-		return request('disk/college/orgUserTreeSelector', data, 'get')
+		return request('bus/org/orgUserTreeSelector', data, 'get')
 	},
 	// 学院接口
 	orgList(data = {}) {

+ 1 - 1
src/layout/other/404.vue

@@ -1,5 +1,5 @@
 <template>
-	<a-result status="404" title="404" sub-title="对不起,您访问的页面不存在。">
+	<a-result status="500" title="系统升级中" sub-title="对不起,系统正在升级维护。">
 		<template #extra>
 			<a-button type="primary" @click="gohome">返回首页</a-button>
 			<a-button type="dashed" @click="goback">返回上一页</a-button>

+ 3 - 3
src/views/classManagement/components/DialogView.vue

@@ -12,12 +12,12 @@
 					<a-input v-model:value="formState.gradesName" placeholder="输入班级名称" />
 				</a-form-item>
 
-				<a-form-item label="院系" name="collegeId">
+				<a-form-item label="单位" name="collegeId">
 					<a-select
 						v-model:value="formState.collegeId"
 						:fieldNames="{ label: 'name', value: 'id' }"
 						:options="collegeMajorOptions"
-						placeholder="请选择院系"
+						placeholder="请选择单位"
 						@change="changeCollegeMajor"
 					/>
 					<!--			<a-cascader-->
@@ -71,7 +71,7 @@ const emit = defineEmits([ "handleAddItem" ])
 	})
 	const rules = {
 		gradesName: [{ required: true, message: '请输入教室名称', trigger: 'blur' }],
-		collegeId: [{ required: true, message: '请选择院系', trigger: 'change' }],
+		collegeId: [{ required: true, message: '请选择单位', trigger: 'change' }],
 		majorId: [{ required: true, message: '请选择专业', trigger: 'change' }],
 	}
 

+ 2 - 2
src/views/classManagement/components/QueryView.vue

@@ -5,7 +5,7 @@
 				<a-form-item label="班级名称" style="width: 300px">
 					<a-input v-model:value="formState.gradesName" placeholder="请输入班级名称" allowClear />
 				</a-form-item>
-				<a-form-item label="院系" style="width: 300px">
+				<a-form-item label="单位" style="width: 300px">
 <!--					<a-cascader-->
 <!--						v-model:value="formState.loacl"-->
 <!--						:options="options"-->
@@ -18,7 +18,7 @@
 						v-model:value="formState.collegeId"
 						:fieldNames="{ label: 'name', value: 'id' }"
 						:options="collegeMajorOptions"
-						placeholder="请选择院系"
+						placeholder="请选择单位"
 						allowClear
 					/>
 				</a-form-item>

+ 2 - 2
src/views/course/major/form.vue

@@ -8,10 +8,10 @@
 	>
 		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
 			<a-form-item label="专业名称:" name="majorName">
-				<a-input v-model:value="formData.majorName" placeholder="请输入院系名称" allow-clear />
+				<a-input v-model:value="formData.majorName" placeholder="请输入单位名称" allow-clear />
 			</a-form-item>
 			<a-form-item label="专业编码:" name="majorCode">
-				<a-input v-model:value="formData.majorCode" placeholder="请输入院系编码" allow-clear />
+				<a-input v-model:value="formData.majorCode" placeholder="请输入单位编码" allow-clear />
 			</a-form-item>
 			<a-form-item label="学院:" name="collegeId">
 				<!-- <a-input v-model:value="formData.collegeId" placeholder="请输入学院id" allow-clear /> -->

+ 1 - 1
src/views/courseAdd/components/StudentDetails.vue

@@ -158,7 +158,7 @@
 						<td>{{ detailData.gender }}</td>
 					</tr>
 					<tr>
-						<th>所在院系</th>
+						<th>所在单位</th>
 						<th>所在班级</th>
 						<th>生日</th>
 						<th>所在城市</th>

+ 1 - 1
src/views/courseAdd/components/courseInfo.vue

@@ -120,7 +120,7 @@
 		teacherId: [{ required: true, message: '请选择授课教师', trigger: 'change' }],
 		courseType: [{ required: true, message: '请选择课程分类', trigger: 'change' }],
 		courseDesc: [{ required: true, message: '请输入教室描述', trigger: 'change' }],
-		collegeTwoId: [{ required: true, message: '请选择院系', trigger: 'change' }],
+		collegeTwoId: [{ required: true, message: '请选择单位', trigger: 'change' }],
 		majorId: [{ required: true, message: '请选择专业', trigger: 'change' }],
 		coverImageId: [{ required: true, message: '请上传封面', trigger: 'change' }]
 	}

+ 3 - 3
src/views/courseAdd/components/courseProduction/resourceUpload.vue

@@ -8,12 +8,12 @@
 		width="600px"
 	>
 		<a-form :model="formState" :rules="rules" ref="formRef">
-			<a-form-item label="院系" name="collegeId" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
+			<a-form-item label="单位" name="collegeId" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
 				<a-cascader
 					v-model:value="majorIdName"
 					:options="collegeMajorOptions"
 					:fieldNames="{ label: 'name', value: 'id', children: 'children' }"
-					placeholder="请选择院系"
+					placeholder="请选择单位"
 					style="width: 300px"
 					changeOnSelect
 					@change="changeCollegeMajor"
@@ -282,7 +282,7 @@ const handleRemoveCover = () => {
 }
 const rules = {
 	// courseTypeName: [{ required: true, message: '请选择资源类型', trigger: 'change' }],
-	collegeId: [{required: true, message: '请选择院系', trigger: 'blur'}],
+	collegeId: [{required: true, message: '请选择单位', trigger: 'blur'}],
 	keywordValue: [
 		{required: true, message: '请选择关键词', trigger: 'blur'},
 		{validator: validateKeywords, trigger: 'blur'}

+ 1 - 1
src/views/courseManagement/components/QueryView.vue

@@ -18,7 +18,7 @@
 						v-model:value="formState.collegeTwoId"
 						:fieldNames="{ label: 'name', value: 'id' }"
 						:options="collegeMajorOptions"
-						placeholder="请选择院系"
+						placeholder="请选择单位"
 						allowClear
 					/>
 				</a-form-item>

+ 119 - 46
src/views/forum/addForum.vue

@@ -1,22 +1,53 @@
 <template>
-	<div style="display: flex; justify-content: center">
-		<a-card :bordered="false" style="width: 1200px">
+	<div style="display: flex; justify-content: center" class="main-content-wrapper">
+		<a-card :bordered="false" class="box-width">
 			<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
 				<a-row :gutter="16">
+					<a-col :span="8">
+						<a-form-item label="类型:">
+							<span>{{ forumTitle }}</span>
+						</a-form-item>
+					</a-col>
+					<template v-if="route.query.postType == 1">
+						<a-col :span="8">
+							<a-form-item label="浏览器类型:">
+								<span>{{ browserObj.forumSupportEnvParam.browserType }}</span>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="浏览器版本号:">
+								<span>{{ browserObj.forumSupportEnvParam.browserVersion }}</span>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="操作系统:">
+								<span>{{ browserObj.forumSupportEnvParam.osType }}</span>
+							</a-form-item>
+						</a-col>
+						<a-col :span="16">
+							<a-form-item label="操作系统版本号:">
+								<span>{{ browserObj.forumSupportEnvParam.osVersion }}</span>
+							</a-form-item>
+						</a-col>
+					</template>
 					<a-col :span="8">
 						<a-form-item label="标题:" name="postTitle">
-							<a-input v-model:value="formData.postTitle" placeholder="请输入标题" allow-clear />
+							<a-input
+								v-model:value="formData.postTitle"
+								placeholder="请输入标题"
+								allow-clear
+								show-count
+								:maxlength="100"
+							/>
 						</a-form-item>
 					</a-col>
-					<a-col :span="8" v-if="formData.postType==0">
+					<a-col :span="8" v-if="formData.postType == 0">
 						<a-form-item label="分类:" name="typeId">
 							<a-select
 								v-model:value="formData.typeId"
-								show-search
 								placeholder="请选择分类"
 								style="width: 100%"
 								:options="typeOptions"
-								:filter-option="filterOption"
 							></a-select>
 						</a-form-item>
 					</a-col>
@@ -74,29 +105,56 @@
 	// 模块ID
 	const moduleId = ref('')
 	const usertypeOptions = ref([])
+	const forumTitle = computed(() => {
+		if (route.query.postType == 1) {
+			return '技术支持'
+		}
+		if (route.query.postType == 2) {
+			return '内容纠错'
+		}
+	})
 	const filterOption = (input, option) => {
-		return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
+		return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
 	}
-
-	const getData = async () => {
-		await forumApi.forumTypeList().then((data) => {
-			typeOptions.value = data.map((r) => {
+	const userPagination = ref({
+		size: 9999999,
+		current: 1
+	})
+	const userTotal = ref(0)
+	//获取用户
+	const getUserAllList = (add) => {
+		forumApi.allUserList(userPagination.value).then((res) => {
+			userTotal.value = res.total
+			let userList = res.records.map((r) => {
 				return {
-					label: r.typeName,
-					value: r.typeId,
+					label: `${r.name}-${r.eduIdentityName}`,
+					value: r.id,
 					...r
 				}
 			})
+			usertypeOptions.value = add ? [...usertypeOptions.value, ...userList] : userList
 		})
-		await forumApi.allUserList().then((data) => {
-			usertypeOptions.value = data.map((r) => {
+	}
+	const popupScroll = (el) => {
+		let offset = 0
+		if (el.target.scrollHeight - el.target.scrollTop - offset <= el.target.clientHeight) {
+			if (userPagination.value.size * userPagination.value.current < userTotal.value) {
+				userPagination.value.current += 1
+				getUserAllList(true)
+			}
+		}
+	}
+	const getData = async () => {
+		await forumApi.forumTypeList().then((data) => {
+			typeOptions.value = data.map((r) => {
 				return {
-					label: r.name,
-					value: r.id,
+					label: r.typeName,
+					value: r.typeId,
 					...r
 				}
 			})
 		})
+		getUserAllList()
 		if (route.query.postType == 1) {
 			getBower()
 		}
@@ -125,37 +183,50 @@
 
 	// 验证并提交数据
 	const onSubmit = () => {
-		formRef.value
-			.validate()
-			.then(() => {
-				submitLoading.value = true
-				if (formData.value.appointUserArr && formData.value.appointUserArr.length > 1) {
-					formData.value.appointUser = formData.value.appointUserArr.join(',')
-				}
-				let params = formData.value
-				if (route.query.postType == 1) {
-					params = {
-						...formData.value,
-						...browserObj.value,
-					}
+		submitLoading.value = true
+		formRef.value.validate().then(() => {
+			if (formData.value.appointUserArr && formData.value.appointUserArr.length > 1) {
+				formData.value.appointUser = formData.value.appointUserArr.join(',')
+			}
+			let params = formData.value
+			if (route.query.postType == 1) {
+				params = {
+					...formData.value,
+					...browserObj.value
 				}
-				if (route.query.postType == 2) {
-					params = {
-						...formData.value,
-						...errorVal.value,
-					}
+			}
+			if (route.query.postType == 2) {
+				params = {
+					...formData.value,
+					...errorVal.value
 				}
-				forumApi.submitForm(params).then(() => {
+			}
+			forumApi
+				.submitForm(params)
+				.then(() => {
 					onClose()
 					emit('successful')
 				})
-			})
-			.finally(() => {
-				submitLoading.value = false
-			})
+				.finally(() => {
+					submitLoading.value = false
+				})
+		})
+	}
+	const editContent = () => {
+		let videoUrl = route.query?.videoUrl ? decodeURIComponent(atob(route.query.videoUrl)) : ''
+		let html = `<p>${route.query.courseName ? route.query.courseName + '-' : ''}${route.query.title}${
+			route.query.chapterName ? '-' + route.query.chapterName : ''
+		}</p>${
+			videoUrl
+				? `<video controls name="media" style="width:100%; height: auto;"><source src="${videoUrl}"></video>`
+				: ''
+		}`
+		formData.value.postContent = html
 	}
 	//获取操作系统/浏览器等信息
-	const browserObj = ref({})
+	const browserObj = ref({
+		forumSupportEnvParam: {}
+	})
 	function getBower() {
 		const browser = Bowser.getParser(window.navigator.userAgent)
 		let obj = browser.parsedResult
@@ -168,6 +239,7 @@
 				deviceType: 0
 			}
 		}
+		editContent()
 	}
 	//纠错
 	const errorVal = ref({})
@@ -178,10 +250,11 @@
 				resourceId: route.query.id
 			}
 		}
-		let videoUrl = route.query.videoUrl ? decodeURIComponent(atob(route.query.videoUrl)) : ''
-		if (videoUrl) {
-			let html = `<p>${route.query.title}</p><video controls name="media" style="width:100%; height: auto;"><source src="${videoUrl}"></video>`
-			formData.value.postContent = html
-		}
+		editContent()
 	}
 </script>
+<style scoped lang="less">
+	.box-width {
+		width: 1624px;
+	}
+</style>

+ 117 - 30
src/views/forum/detail.vue

@@ -1,27 +1,57 @@
 <template>
 	<div style="display: flex; justify-content: center" class="main-content-wrapper">
-		<div style="width: 1200px">
+		<div class="box-width">
 			<a-card>
-				<div style="display: flex; justify-content: space-between" v-if="detailObj.userNickName">
-					<div style="display: flex">
-						<a-avatar
-							style="width: 60px; height: 60px"
-							:src="detailObj.userAvatar"
-							:size="{ xs: 24, sm: 32, md: 40, lg: 64, xl: 80, xxl: 100 }"
-						/>
-						<div class="snowy-index-card-left-one-username">
-							<span style="font-weight: 600; margin: 2px; font-size: 18px">{{ detailObj.userNickName }}</span>
-							<span style="color: #6d737b; margin: 2px">
-								{{ detailObj.typeName }} | {{ formatDateTime(detailObj.lastReplyTime) }}
-							</span>
+				<div class="flt">
+					<div class="flex-1">
+						<div style="display: flex; justify-content: space-between" v-if="detailObj.userNickName">
+							<div style="display: flex">
+								<a-avatar
+									style="width: 60px; height: 60px"
+									:src="detailObj.userAvatar"
+									:size="{ xs: 24, sm: 32, md: 40, lg: 64, xl: 80, xxl: 100 }"
+								/>
+								<div class="snowy-index-card-left-one-username">
+									<span style="font-weight: 600; margin: 2px; font-size: 18px; min-height: 20px">{{
+										detailObj.userNickName
+									}}</span>
+									<span style="color: #6d737b; margin: 2px">
+										{{ detailObj.typeName ? detailObj.typeName + '|' : '' }}
+										{{ formatDateTime(detailObj.lastReplyTime) }}
+									</span>
+								</div>
+							</div>
 						</div>
+						<div class="forum-list-title">{{ detailObj.postTitle }}</div>
 					</div>
+					<a-tooltip :getPopupContainer="(trigger) => trigger.parentElement">
+						<template #title>
+							<span>返回</span>
+						</template>
+						<a-button @click="goToHome" type="primary">
+							<rollback-outlined />
+						</a-button>
+					</a-tooltip>
 				</div>
-				<div class="forum-list-title">{{ detailObj.postTitle }}</div>
+				<a-descriptions title="设备信息" class="equ" v-if="detailObj.forumSupportEnv">
+					<a-descriptions-item label="浏览器类型:">
+						<span>{{ detailObj.forumSupportEnv.browserType }}</span>
+					</a-descriptions-item>
+					<a-descriptions-item label="浏览器版本号:">
+						<span>{{ detailObj.forumSupportEnv.browserVersion }}</span>
+					</a-descriptions-item>
+					<a-descriptions-item label="操作系统:">
+						<span>{{ detailObj.forumSupportEnv.osType }}</span>
+					</a-descriptions-item>
+					<a-descriptions-item label="操作系统版本号:">
+						<span>{{ detailObj.forumSupportEnv.osVersion }}</span>
+					</a-descriptions-item>
+				</a-descriptions>
 				<div class="htmlContent" v-html="detailObj.postContent"></div>
-				<div>
-					<span v-if="detailObj.userNickName">
-						<a-tooltip title="点赞">
+				<a-divider />
+				<div class="flc">
+					<div v-if="detailObj.userNickName">
+						<a-tooltip title="顶">
 							<template v-if="detailObj.isLike == 1">
 								<HeartOutlined :style="{ color: '#fa6c8d' }" @click="like(detailObj, 0)" />
 							</template>
@@ -29,23 +59,47 @@
 								<HeartOutlined @click="like(detailObj, 1)" />
 							</template>
 						</a-tooltip>
-						<span style="padding-left: 8px">
+						<span style="padding-left: 3px">
 							{{ detailObj.likeCount }}
 						</span>
-					</span>
-					<a-tooltip title="编辑" v-if="detailObj.isSelf == 1">
-						<EditOutlined class="ml-2" @click="formRef.onOpen(detailObj, detailObj.postId)" />
-					</a-tooltip>
-
-					<span class="ml-2" style="cursor: pointer" @click="replyFormRef.onOpen(detailObj, detailObj.postId)">
-						<span>回复</span>
-						<span style="padding-left: 8px">{{ detailObj.replyCount }}</span>
-					</span>
-					<a-tooltip title="举报" v-if="detailObj.userNickName">
-						<WarningOutlined class="ml-2" @click="reportFormRef.onOpen(detailObj, detailObj.postId)" />
-					</a-tooltip>
+					</div>
+					<div v-if="detailObj.userNickName" class="ml-2">
+						<a-tooltip title="踩">
+							<template v-if="detailObj.isNotLike == 1">
+								<dislike-outlined :style="{ color: '#fa6c8d' }" @click="postnotlike(detailObj, 0)" />
+							</template>
+							<template v-else>
+								<dislike-outlined @click="postnotlike(detailObj, 1)" />
+							</template>
+						</a-tooltip>
+					</div>
+					<div
+						v-if="detailObj.isSelf == 1"
+						style="cursor: pointer"
+						@click="formRef.onOpen(detailObj, detailObj.postId)"
+					>
+						<EditOutlined class="ml-2" />
+						<span style="padding-left: 3px">编辑</span>
+					</div>
+					<div class="ml-2" style="cursor: pointer" @click="replyFormRef.onOpen(detailObj, detailObj.postId)">
+						<span>评论</span>
+						<span style="padding-left: 3px">{{ detailObj.replyCount }}</span>
+					</div>
+					<div
+						class="ml-2"
+						style="cursor: pointer"
+						v-if="detailObj.userNickName"
+						@click="reportFormRef.onOpen(detailObj, detailObj.postId)"
+					>
+						<WarningOutlined />
+						<span style="padding-left: 3px">举报</span>
+					</div>
 				</div>
 			</a-card>
+			<a-button type="primary" class="mt-2" @click="replyFormRef.onOpen(detailObj, detailObj.postId)">
+				<template #icon><comment-outlined /></template>
+				评论
+			</a-button>
 			<a-card class="mt-2">
 				<Comment
 					:commentList="detailObj.replyList?.records"
@@ -76,6 +130,7 @@
 	const replyFormRef = ref()
 	const formRef = ref()
 	const route = useRoute()
+	const router = useRouter()
 	const detailObj = ref({})
 	const moreType = ref(true)
 	const commentParams = ref({
@@ -92,6 +147,17 @@
 			resetGetList()
 		})
 	}
+	function postnotlike(item, l) {
+		forumApi
+			.postPostnotlikeSubmit(
+				{ likeType: 0, targetId: route.query.postId, notLikeId: route.query.postId },
+				item.isNotLike
+			)
+			.then((data) => {
+				item.isNotLike = l
+				resetGetList()
+			})
+	}
 	function formatDateTime(val) {
 		if (!val) return ''
 		return parseTime(val, '{y}-{m}-{d} {h}:{i}:{s}')
@@ -140,6 +206,7 @@
 				chapterId: route.query.chapterId,
 				courseName: route.query.courseName,
 				chapterName: route.query.chapterName,
+				courseName: `${route.query.courseName}-${route.query.title}-${route.query.chapterName}`,
 				...pagination.value
 			})
 			.then((data) => {
@@ -155,6 +222,10 @@
 				}
 			})
 	}
+	//回到首页
+	const goToHome = () => {
+		router.push('/forum')
+	}
 	onMounted(() => {
 		if (route.query.postId) {
 			getDetail()
@@ -168,6 +239,9 @@
 	:deep(.htmlContent img) {
 		max-width: 100% !important;
 	}
+	:deep(.equ .ant-descriptions-header) {
+		margin-bottom: 10px;
+	}
 	.snowy-index-card-left-one-username {
 		margin-left: 8px;
 		display: flex;
@@ -183,4 +257,17 @@
 		font-size: 14px;
 		color: #696969;
 	}
+	.flt {
+		display: flex;
+		justify-content: flex-start;
+		align-items: flex-start;
+	}
+	.flc {
+		display: flex;
+		justify-content: flex-start;
+		align-items: center;
+	}
+	.box-width {
+		width: 1624px;
+	}
 </style>

+ 53 - 28
src/views/forum/form.vue

@@ -8,24 +8,29 @@
 		@close="onClose"
 		placement="bottom"
 		:mask="false"
-		style="width: 960px;left: calc(50% - 960px / 2);"
+		style="width: 960px; left: calc(50% - 960px / 2)"
 	>
 		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
 			<a-row :gutter="16">
 				<a-col :span="8">
 					<a-form-item label="标题:" name="postTitle">
-						<a-input v-model:value="formData.postTitle" placeholder="请输入标题" allow-clear />
+						<a-input
+							v-model:value="formData.postTitle"
+							placeholder="请输入标题"
+							max
+							allow-clear
+							show-count
+							:maxlength="100"
+						/>
 					</a-form-item>
 				</a-col>
 				<a-col :span="8">
 					<a-form-item label="分类:" name="typeId">
 						<a-select
 							v-model:value="formData.typeId"
-							show-search
 							placeholder="请选择分类"
 							style="width: 100%"
 							:options="typeOptions"
-							:filter-option="filterOption"
 						></a-select>
 					</a-form-item>
 				</a-col>
@@ -40,6 +45,7 @@
 							:options="usertypeOptions"
 							:filter-option="filterOption"
 						></a-select>
+						<!-- @popupScroll="popupScroll" -->
 					</a-form-item>
 				</a-col>
 				<a-col :span="24">
@@ -80,9 +86,36 @@
 	const moduleId = ref('')
 	const usertypeOptions = ref([])
 	const filterOption = (input, option) => {
-		return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
+		return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
+	}
+	const userPagination = ref({
+		size: 99999999,
+		current: 1
+	})
+	const userTotal = ref(0)
+	//获取用户
+	const getUserAllList = (add) => {
+		forumApi.allUserList(userPagination.value).then((res) => {
+			userTotal.value = res.total
+			let userList = res.records.map((r) => {
+				return {
+					label: `${r.name}-${r.eduIdentityName ?? ''}`,
+					value: r.id,
+					...r
+				}
+			})
+			usertypeOptions.value = add ? [...usertypeOptions.value, ...userList] : userList
+		})
+	}
+	const popupScroll = (el) => {
+		let offset = 0
+		if (el.target.scrollHeight - el.target.scrollTop - offset <= el.target.clientHeight) {
+			if (userPagination.value.size * userPagination.value.current < userTotal.value) {
+				userPagination.value.current += 1
+				getUserAllList(true)
+			}
+		}
 	}
-
 	// 打开抽屉
 	const onOpen = (record, module) => {
 		moduleId.value = module
@@ -96,17 +129,9 @@
 				}
 			})
 		})
-		forumApi.allUserList().then((data) => {
-			usertypeOptions.value = data.map((r) => {
-				return {
-					label: r.name,
-					value: r.id,
-					...r
-				}
-			})
-		})
+		getUserAllList()
 		if (module) {
-			if (record.appointUser) {
+			if (record?.appointUser) {
 				record.appointUserArr = record.appointUser.split(',')
 			}
 			formData.value = Object.assign(formData.value, record)
@@ -129,21 +154,21 @@
 	const visibleOptions = tool.dictList('MENU_VISIBLE')
 	// 验证并提交数据
 	const onSubmit = () => {
-		formRef.value
-			.validate()
-			.then(() => {
-				submitLoading.value = true
-				if (formData.value.appointUserArr && formData.value.appointUserArr.length > 1) {
-					formData.value.appointUser = formData.value.appointUserArr.join(',')
-				}
-				forumApi.submitForm(formData.value, formData.value.postId).then(() => {
+		submitLoading.value = true
+		formRef.value.validate().then(() => {
+			if (formData.value.appointUserArr && formData.value.appointUserArr.length > 1) {
+				formData.value.appointUser = formData.value.appointUserArr.join(',')
+			}
+			forumApi
+				.submitForm(formData.value, formData.value.postId)
+				.then(() => {
 					onClose()
 					emit('successful')
 				})
-			})
-			.finally(() => {
-				submitLoading.value = false
-			})
+				.finally(() => {
+					submitLoading.value = false
+				})
+		})
 	}
 
 	// 调用这个函数将子组件的一些数据和方法暴露出去

+ 50 - 43
src/views/forum/index.vue

@@ -1,7 +1,7 @@
 <template>
 	<div class="forumTop"></div>
 	<div style="display: flex; justify-content: center" class="main-content-wrapper">
-		<a-card :bordered="false" style="width: 1200px" class="formMount">
+		<a-card :bordered="false" class="box-width">
 			<a-space>
 				<div style="display: flex">
 					<a-tooltip :getPopupContainer="(trigger) => trigger.parentElement">
@@ -19,6 +19,7 @@
 					enter-button
 					allowClear
 					@search="onSearch"
+					:maxlength="30"
 				/>
 				<a-select
 					v-model:value="typeVal"
@@ -31,11 +32,9 @@
 				<a-select
 					v-if="typeVal == 0"
 					v-model:value="typeValue"
-					show-search
 					placeholder="所有分类"
 					style="width: 100px"
 					:options="typeOptions"
-					:filter-option="filterOption"
 					@change="handleChange"
 					allowClear
 				></a-select>
@@ -62,10 +61,12 @@
 				:row-key="(record) => record.id"
 				:custom-row="customRow"
 				:pagination="false"
+				style="width: 100%"
+				:loading="tableLoading"
 			>
 				<template #bodyCell="{ column, record }">
 					<template v-if="column.dataIndex === 'postTitle'">
-						<div class="forum-list-title">{{ record.postTitle }}</div>
+						<div class="forum-list-title one-line">{{ record.postTitle }}</div>
 						<div class="forum-list-type">
 							{{ postName(record.postType) }} {{ record.typeName ? '|' : '' }} {{ record.typeName }}
 						</div>
@@ -95,6 +96,7 @@
 	const route = useRoute()
 	const router = useRouter()
 	const formRef = ref()
+	const tableLoading = ref(false)
 	let searchFormState = reactive({
 		sortOrder: 0,
 		postTitle: '',
@@ -194,34 +196,27 @@
 	})
 	const postName = computed(() => {
 		return (val) => {
-			return typeOptionsVal.value.filter((r) => r.value == val)[0].label
+			return typeOptionsVal.value.find((r) => r.value == val).label
 		}
 	})
 	const typeValue = ref('所有分类')
 	const typeOptions = ref([])
 	const handleChange = (value) => {
-		exType.value = false
 		searchFormState.typeId = value
-		if (searchFormState.sortOrder > 1) {
-			searchFormState.sortOrder = 0
-		}
 		resetLoad()
 	}
 	const handleChangeVal = (value) => {
-		exType.value = false
 		searchFormState.postType = value
+		searchFormState.typeId = ''
+		typeValue.value = '所有分类'
 		resetLoad()
 	}
-	const filterOption = (input, option) => {
-		return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
-	}
 	function formatDateTime(val) {
 		if (!val) return ''
 		return parseTime(val, '{y}-{m}-{d} {h}:{i}:{s}')
 	}
 	// 查询
 	const onSearch = () => {
-		exType.value = false
 		resetLoad()
 	}
 	function customRow(record) {
@@ -250,7 +245,7 @@
 		})
 	}
 
-	const exType = ref(false)
+	const exType = ref(1)
 	const tableData = ref([])
 	const tableTotal = ref(0)
 	const resetLoad = () => {
@@ -259,46 +254,53 @@
 		loadData(pagination.value)
 	}
 	const loadData = (parameter, a) => {
-		if (exType.value) {
-			let postExtend = moduleTypeList.value.filter((r) => r.id == searchFormState.sortOrder)[0]?.state
-			return forumApi.moreList(Object.assign(parameter, { postExtend: postExtend })).then((data) => {
-				tableTotal.value = data.total
-				if (a) {
-					tableData.value = Object.assign(tableData.value, data.records)
-				} else {
-					if (data) {
-						tableData.value = data.records
+		tableLoading.value = true
+		if (exType.value == 2) {
+			let postExtend = moduleTypeList.value.find((r) => r.id == searchFormState.sortOrder).state
+			return forumApi
+				.moreList(Object.assign(parameter, searchFormState, { postExtend: postExtend }))
+				.then((data) => {
+					tableTotal.value = data.total
+					if (a) {
+						tableData.value = Object.assign(tableData.value, data.records)
 					} else {
-						tableData.value = []
+						if (data) {
+							tableData.value = data.records
+						} else {
+							tableData.value = []
+						}
 					}
-				}
-			})
+				})
+				.finally(() => {
+					tableLoading.value = false
+				})
 		} else {
-			return forumApi.forumList(Object.assign(parameter, searchFormState)).then((data) => {
-				tableTotal.value = data.total
-				if (a) {
-					tableData.value = tableData.value.concat(data.records)
-				} else {
-					if (data) {
-						tableData.value = data.records
+			return forumApi
+				.forumList(Object.assign(parameter, searchFormState))
+				.then((data) => {
+					tableTotal.value = data.total
+					if (a) {
+						tableData.value = tableData.value.concat(data.records)
 					} else {
-						tableData.value = []
+						if (data) {
+							tableData.value = data.records
+						} else {
+							tableData.value = []
+						}
 					}
-				}
-			})
+				})
+				.finally(() => {
+					tableLoading.value = false
+				})
 		}
 	}
 
 	// 切换应用标签查询菜单列表
 	const moduleClock = (value, t) => {
-		exType.value = false
+		exType.value = t
 		searchFormState.sortOrder = value
 		pagination.value.current = 1
 		moreText.value = '加载更多'
-		if (t == 2) {
-			exType.value = true
-			typeValue.value = '所有分类'
-		}
 		loadData(pagination.value)
 	}
 	const moreText = ref()
@@ -372,9 +374,11 @@
 	}
 
 	.one-line {
+		max-width: 900px;
 		display: -webkit-box;
 		-webkit-box-orient: vertical;
 		-webkit-line-clamp: 1;
+		line-clamp: 1;
 		overflow: hidden;
 	}
 	.forumTop {
@@ -382,7 +386,10 @@
 		height: 55px;
 	}
 	.main-content-wrapper {
-		padding:0px;
+		padding: 0px;
 		height: calc(100% - 55px);
 	}
+	.box-width {
+		width: 1624px;
+	}
 </style>

+ 22 - 22
src/views/forum/replyForm.vue

@@ -1,6 +1,6 @@
 <template>
 	<xn-form-container
-		title="回复"
+		title="评论"
 		:height="500"
 		placement="bottom"
 		:mask="false"
@@ -81,32 +81,32 @@
 	const visibleOptions = tool.dictList('MENU_VISIBLE')
 	// 验证并提交数据
 	const onSubmit = () => {
-		formRef.value
-			.validate()
-			.then(() => {
-				submitLoading.value = true
-				let params = {}
-				if (formData.value.formType) {
-					params = {
-						...formData.value,
-						replyId: replyid.value
-					}
-				} else {
-					params = {
-						...formData.value,
-						postId: moduleId.value,
-						parentId: replyid.value
-					}
+		submitLoading.value = true
+		formRef.value.validate().then(() => {
+			let params = {}
+			if (formData.value.formType) {
+				params = {
+					...formData.value,
+					replyId: replyid.value
 				}
+			} else {
+				params = {
+					...formData.value,
+					postId: moduleId.value,
+					parentId: replyid.value
+				}
+			}
 
-				forumApi.submitPostreply(params, formData.value.formType).then(() => {
+			forumApi
+				.submitPostreply(params, formData.value.formType)
+				.then(() => {
 					onClose()
 					emit('successful')
 				})
-			})
-			.finally(() => {
-				submitLoading.value = false
-			})
+				.finally(() => {
+					submitLoading.value = false
+				})
+		})
 	}
 	// 调用这个函数将子组件的一些数据和方法暴露出去
 	defineExpose({

+ 23 - 21
src/views/forum/reportForm.vue

@@ -1,6 +1,6 @@
 <template>
 	<xn-form-container
-		title="回复"
+		title="举报"
 		:height="500"
 		placement="bottom"
 		:mask="false"
@@ -15,11 +15,9 @@
 					<a-form-item label="举报类型:" name="reportReasonType">
 						<a-select
 							v-model:value="formData.reportReasonType"
-							show-search
 							placeholder="所有分类"
 							style="width: 100%"
 							:options="typeOptions"
-							:filter-option="filterOption"
 							@change="handleChange"
 						></a-select>
 					</a-form-item>
@@ -31,7 +29,13 @@
 				</a-col>
 				<a-col :span="24">
 					<a-form-item label="举报原因:" name="reportDetail">
-						<a-textarea v-model:value="formData.reportDetail" placeholder="请输入举报原因" :rows="4" />
+						<a-textarea
+							v-model:value="formData.reportDetail"
+							placeholder="请输入举报原因"
+							:rows="4"
+							show-count
+							:maxlength="500"
+						/>
 					</a-form-item>
 				</a-col>
 			</a-row>
@@ -116,23 +120,21 @@
 	const visibleOptions = tool.dictList('MENU_VISIBLE')
 	// 验证并提交数据
 	const onSubmit = () => {
-		formRef.value
-			.validate()
-			.then(() => {
-				submitLoading.value = true
-				forumApi
-					.reportinfoAdd({
-						...formData.value,
-						postId: moduleId.value
-					})
-					.then(() => {
-						onClose()
-						emit('successful')
-					})
-			})
-			.finally(() => {
-				submitLoading.value = false
-			})
+		submitLoading.value = true
+		formRef.value.validate().then(() => {
+			forumApi
+				.reportinfoAdd({
+					...formData.value,
+					postId: moduleId.value
+				})
+				.then(() => {
+					onClose()
+					emit('successful')
+				})
+				.finally(() => {
+					submitLoading.value = false
+				})
+		})
 	}
 	// 调用这个函数将子组件的一些数据和方法暴露出去
 	defineExpose({

+ 1 - 1
src/views/myFavorites/index.vue

@@ -269,7 +269,7 @@
 			key: 'fileName'
 		},
 		{
-			title: '所属院系',
+			title: '所属单位',
 			align: 'center',
 			dataIndex: 'collegeAllIdName',
 			key: 'collegeAllIdName'

+ 1 - 1
src/views/myResources/auditModal.vue

@@ -36,7 +36,7 @@
 			<div class="audit-info">
 				<div class="info-section">
 					<p><strong>上传人:</strong>{{ detailData.resourceCreaterUserName || '--' }}</p>
-					<p><strong>所属院系:</strong>{{ detailData?.collegeAllIdName || '--' }}</p>
+					<p><strong>所属单位:</strong>{{ detailData?.collegeAllIdName || '--' }}</p>
 					<p><strong>所属专业:</strong>{{ detailData?.majorIdName || '--' }}</p>
 					<p><strong>资源类型:</strong>{{ detailData?.resourceTypeName || '--' }}</p>
 					<p><strong>资源格式:</strong>{{ detailData?.suffix || '--' }}</p>

+ 16 - 2
src/views/myResources/coverUpload/index.vue

@@ -7,7 +7,7 @@
 				@click="chooseFile"
 				>选择图片</a-button
 			>
-			<span style="margin-left: 10px">仅支持上传jpg/png格式文件,单个文件不能超过{{props.sizeMax}}kb</span>
+			<span style="margin-left: 10px">仅支持上传jpg/png格式文件,单个文件不能超过{{kbToMbDecimal(props.sizeMax)}}mb</span>
 		</div>
 		<a-upload
 			ref="upload"
@@ -52,7 +52,7 @@
 		},
 		sizeMax: {
 			type: Number,
-			default: 5000
+			default: 50000
 		},
 		imageUrl: {
 			type: String,
@@ -84,6 +84,20 @@
 		},
 		{ immediate: true } // 立即执行一次
 	)
+
+	// 二进制换算(常用)
+	const kbToMb = (kb) => {
+		return kb / 1024;
+	}
+
+	// 十进制换算
+	const kbToMbDecimal = (kb) => {
+		return kb / 1000;
+	}
+
+	// 示例
+	// console.log(kbToMb(2048)); // 输出: 2
+
 	// 上传封面前的钩子函数
 	const beforeUploadCover = (file) => {
 		// 允许的文件扩展名

+ 1 - 1
src/views/myResources/index.vue

@@ -278,7 +278,7 @@
 			key: 'fileName'
 		},
 		{
-			title: '所属院系',
+			title: '所属单位',
 			align: 'center',
 			dataIndex: 'collegeIdName',
 			key: 'collegeIdName'

+ 1 - 1
src/views/myResources/myResources.vue

@@ -465,7 +465,7 @@
 			key: 'fileName'
 		},
 		{
-			title: '所属院系',
+			title: '所属单位',
 			align: 'center',
 			dataIndex: 'collegeAllIdName',
 			key: 'collegeAllIdName'

+ 3 - 1
src/views/myResources/releaseModal.vue

@@ -32,7 +32,9 @@
 			</a-form-item>
 
 			<a-form-item label="上传封面" name="coverImageId">
-				<coverUpload @handleChangeCover="handleChangeCover"
+				<coverUpload
+					:sizeMax="50000"
+					@handleChangeCover="handleChangeCover"
 							 @handleRemoveCover="handleRemoveCover"></coverUpload>
 			</a-form-item>
 		</a-form>

+ 3 - 3
src/views/myResources/resourceUpload.vue

@@ -8,12 +8,12 @@
 		width="600px"
 	>
 		<a-form :model="formState" :rules="rules" ref="formRef">
-			<a-form-item label="院系" name="collegeId" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
+			<a-form-item label="单位" name="collegeId" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
 				<a-cascader
 					v-model:value="majorIdName"
 					:options="collegeMajorOptions"
 					:fieldNames="{ label: 'name', value: 'id', children: 'children' }"
-					placeholder="请选择院系"
+					placeholder="请选择单位"
 					style="width: 300px"
 					changeOnSelect
 					@change="changeCollegeMajor"
@@ -263,7 +263,7 @@
 	}
 	const rules = {
 		// courseTypeName: [{ required: true, message: '请选择资源类型', trigger: 'change' }],
-		collegeId: [{ required: true, message: '请选择院系', trigger: 'blur' }],
+		collegeId: [{ required: true, message: '请选择单位', trigger: 'blur' }],
 		keywordValue: [
 			{ required: true, message: '请选择关键词', trigger: 'blur' },
 			{ validator: validateKeywords, trigger: 'blur' }

+ 17 - 13
src/views/portal/components/Header.vue

@@ -7,29 +7,21 @@
 			<div style="display: flex;width: 1624px ;justify-content: space-between; ">
 				<div style="display: flex; padding-left: 0%; ">
 					<a-menu v-model:selectedKeys="current"  mode="horizontal" theme="light"  >
-						<a-sub-menu  key="res">
-							<template #title>
-								<!-- 使用 Ant Design Vue 的图标 -->
-								<span>资源相关</span>
-							</template>
 							<a-menu-item style="margin-left: 1px; margin-right: 1px" key="">资源中心</a-menu-item>
-							<a-menu-item style="margin-left: 1px; margin-right: 1px" key="portal/personalResources">个人资源</a-menu-item>
-							<a-menu-item style="margin-left: 1px; margin-right: 1px" key="resourceStatistics">资源统计</a-menu-item>
-						</a-sub-menu>
-
 						<a-sub-menu  key="course">
 							<template #title>
 								<!-- 使用 Ant Design Vue 的图标 -->
 								<span>课程相关</span>
 							</template>
 							<a-menu-item style="margin-left: 1px; margin-right: 1px" key="portal/courseManagement">课程管理</a-menu-item>
+							<a-menu-item style="margin-left: 1px; margin-right: 1px" key="classManagement">班级管理</a-menu-item>
 							<a-menu-item style="margin-left: 1px; margin-right: 1px" key="announcementManagement">课程公告发布</a-menu-item>
 							<a-menu-item style="margin-left: 1px; margin-right: 1px" key="courseOpen">课程开课</a-menu-item>
 						</a-sub-menu>
 
 
 
-						<a-menu-item style="margin-left: 1px; margin-right: 1px" key="classManagement">班级管理</a-menu-item>
+
 						<!--					<a-menu-item style="margin-left: 1px; margin-right: 1px"></a-menu-item>-->
 						<a-sub-menu  key="">
 							<template #title>
@@ -42,12 +34,24 @@
 							<a-menu-item style="margin-left: 1px; margin-right: 1px" key="student/record/">考试批改</a-menu-item>
 							<a-menu-item style="margin-left: 1px; margin-right: 1px" key="question">题目列表</a-menu-item>
 						</a-sub-menu>
-						<a-menu-item style="margin-left: 1px; margin-right: 1px" key="statistics">统计分析</a-menu-item>
-						<a-menu-item style="margin-left: 1px; margin-right: 1px" key="forum">论坛</a-menu-item>
+						<a-sub-menu  key="res">
+							<template #title>
+								<!-- 使用 Ant Design Vue 的图标 -->
+								<span>统计相关</span>
+							</template>
+							<a-menu-item style="margin-left: 1px; margin-right: 1px" key="statistics">统计分析</a-menu-item>
+							<a-menu-item style="margin-left: 1px; margin-right: 1px" key="resourceStatistics">资源统计</a-menu-item>
+
+
+						</a-sub-menu>
+
+
+
+<!--						<a-menu-item style="margin-left: 1px; margin-right: 1px" key="forum">论坛</a-menu-item>-->
 
 						<a-menu-item style="margin-left: 1px; margin-right: 1px" key="resourceConversionLog">资源转换</a-menu-item>
 						<!--					<a-menu-item style="margin-left: 10px; margin-right: 10px" key="portal/courseManagement">站内信</a-menu-item>-->
-
+						<a-menu-item style="margin-left: 1px; margin-right: 1px" key="portal/personalResources">个人资源</a-menu-item>
 
 
 					</a-menu>

+ 4 - 6
src/views/resourceCenter/components/ComplexChoices.vue

@@ -2,7 +2,7 @@
 	<div class="filter-bar" style="background: white; padding-top: 30px;padding-left: 40px;padding-bottom: 30px;padding-right: 40px">
 		<!-- 所选院系 -->
 		<div class="filter-group">
-			<span class="filter-group-title">所选院系:</span>
+			<span class="filter-group-title">所选单位:</span>
 			<!-- <a-radio-group v-model:value="selectedDept" >
 				<a-radio-button v-for="dept in selectedDepts" :key="dept" :value="dept">{{ dept }}</a-radio-button>
 			</a-radio-group> -->
@@ -239,7 +239,7 @@
 		} else {
 			selectedDeptBigs.value = selectedDeptBigsList.value[e]
 		}
-		console.log('handleSelectedDept', e)
+		console.log('handleSelectedDept', e,selectedDeptBigsList.value)
 		selectedDeptSmails.value = []
 		if (selectedDeptBigs.value.length > 0) {
 			Big.value.setClean(-1)
@@ -278,14 +278,12 @@
 		} else {
 			selectedTypes.value = selectedTypesBigList.value[e]
 		}
-		console.log('handleTypeChangeBig', e, selectedTypes.value)
+
+		console.log('handleTypeChangeBig', e,selectedTypesBigList.value)
 		if (selectedTypes.value.length > 0) {
 			Type.value.setClean(-1)
 		}
 		selectedType.value = -1
-		// selectedDeptSmails.value = selectedDeptSmailsList.value[e]
-		// updateSelectedTags()
-		// selectedFormat.value = undefined // 选择课程类型时,重置课件格式
 		updateSelectedTags()
 	}
 	const handleTypeChange = (e) => {

+ 4 - 0
src/views/resourceCenter/components/MyRadioButton.vue

@@ -59,6 +59,10 @@
 			group.value
 		)
 		if (!isActive.value) {
+			console.log(
+				'具体数值',
+				group.value
+			)
 			group.changeValue(props.value)
 		}
 	}

+ 1 - 1
src/views/resourceCenter/components/MyRadioButtonGroup.vue

@@ -27,7 +27,7 @@
 	const groupContext = {
 		value: valueRef,
 		changeValue: (value) => {
-			console.log('点击了吗父布局', props.modelValue)
+			console.log('点击了吗父布局', props.modelValue,value)
 			valueRef.value = value // 修改 ref 的值
 			// 改为通过 emit 更新值
 			emit('update:modelValue', value)

+ 2 - 2
src/views/resourceDetails/components/VideoDetails.vue

@@ -47,7 +47,7 @@
 						videoFormat == 'xlsx' ||
 						videoFormat == 'pdf'
 					"
-						style="width: 850px; height: 350px"
+						style="width: 1206px; height: 600px"
 					>
 						<!-- <PDF :src="resSrc" :width="850" :height="350" /> -->
 						<FilePreviewer :fileUrl="resSrc" :fileName="resName" :fileType="fileType" />
@@ -130,7 +130,7 @@
 						<span style="display: block">{{ teacherName }}</span>
 					</div> -->
 					<div style="display: flex; margin-top: 10px">
-						<span style="font-weight: bold; margin-right: 10px; font-size: 12px ">所属院系: </span>
+						<span style="font-weight: bold; margin-right: 10px; font-size: 12px ">所属单位: </span>
 						<span style="display: block;font-size: 12px ">{{ department }}</span>
 					</div>
 					<!-- <div style="display: flex; align-items: center">

+ 3 - 3
src/views/statisticalAnalysis/statisticalAnalysisResourceLibrary/index.vue

@@ -35,13 +35,13 @@
 
 			<!-- 筛选器 -->
 			<div class="filters">
-				<label>筛选院系:</label>
+				<label>筛选单位:</label>
 				<a-select
 					v-model:value="filters.department"
 					style="width: 150px; margin-right: 20px"
 					@change="handleDepartmentChange"
 				>
-					<a-select-option value="all">全部院系</a-select-option>
+					<a-select-option value="all">全部单位</a-select-option>
 					<a-select-option value="aviation">航空学院</a-select-option>
 					<a-select-option value="military">军事管理系</a-select-option>
 					<a-select-option value="politics">政治工作部</a-select-option>
@@ -349,7 +349,7 @@
 			if (departmentChart) {
 				departmentChart.setOption({
 					title: {
-						text: '按院系分布 (数量)',
+						text: '按单位分布 (数量)',
 						left: 'center'
 					},
 					tooltip: {

+ 1 - 1
src/views/taskProgress/index.vue

@@ -5,7 +5,7 @@
 			<!-- 院系选择 -->
 			<div class="filter-group">
 				<div class="filter-groups">
-					<span class="filter-label">所选院系:</span>
+					<span class="filter-label">所选单位:</span>
 					<a-radio-group
 						v-model:value="selectedDepartment"
 						button-style="solid"

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
stats.html


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно