zhangsq vor 8 Monaten
Ursprung
Commit
c1fc55298b

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

@@ -59,7 +59,7 @@
 				<!-- 操作列 -->
 				<template v-else-if="column.key === 'action'">
 					<div class="editable-cell">
-						<a  @click="handlePublish(record)">查看</a>
+						<a @click="handlePublish(record)">查看</a>
 					</div>
 				</template>
 			</template>

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

@@ -20,7 +20,7 @@
 		<!-- 拖拽上传 -->
 		<uploader-drop class="drop-box" id="dropBox" @paste="handlePaste" @click="handleUpload">
 			<span class="text"> 点击上传或将文件拖拽至此区域上传 </span>
-			<p class="text">按住Ctrl可同时多选,支持上传PPT/word/excel/pdf/mp4/zip/rar,单个文件不能超过2G</p>
+			<p class="text">按住Ctrl可同时多选,支持上传PPT/excel/pdf/mp4/zip/rar,单个文件不能超过2G</p>
 			<UploadOutlined class="upload-icon" v-show="pasteImg.src" @click="handleUploadPasteImg" />
 		</uploader-drop>
 

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

@@ -635,6 +635,7 @@
 	const handleReset = () => {
 		searchValue.value = null
 		majorIdName.value = null
+		resourceName.value = null
 		formState.fileName = null
 		formState.resourceType = null
 		formState.resourceTwoType = null

+ 155 - 49
src/views/myResources/personalResources/index.vue

@@ -1,13 +1,30 @@
 <template>
-	<div style="overflow-y: auto">
-		<a-layout>
-			<Header @onChangeCurrent="onChangeCurrent" />
-			<div style="width: 71%; margin-left: 10%">
-				<myResources />
-				<!-- <ResourceDetails v-if="indexType == 'resourceDetails'" ref="ResourceDetailsRef" /> -->
-			</div>
-		</a-layout>
-		<Footer />
+	<div style="overflow-y: auto; display: flex">
+		<!-- 主要内容区域 -->
+		<div style="flex: 1; margin-left: 20px">
+			<a-layout>
+				<Header @onChangeCurrent="onChangeCurrent" />
+				<div style="width: 90%; margin-left: 5%; display: flex">
+					<div class="sidebar-menu">
+						<ul>
+							<li
+								v-for="item in menuItems"
+								:class="{ active: activeKey === item.key }"
+								:key="item.key"
+								@click="handleClick(item)"
+							>
+								<AliwangwangOutlined />
+								{{ item.label }}
+							</li>
+						</ul>
+					</div>
+					<div style="width: 90%">
+						<component :is="currentComponent"></component>
+					</div>
+				</div>
+			</a-layout>
+			<Footer />
+		</div>
 	</div>
 </template>
 
@@ -15,67 +32,122 @@
 	import Header from '@/views/portal/components/Header.vue'
 	import Footer from '@/views/portal/components/Footer.vue'
 	import myResources from '../myResources.vue'
-	import { useRoute, useRouter } from 'vue-router'
-	import { addViewCount, detail, add, queryList } from '@/api/portal'
+	import { ref, reactive, computed, onMounted, defineAsyncComponent } from 'vue'
+	import { useRouter, useRoute } from 'vue-router'
+
 	const router = useRouter()
+	const route = useRoute()
 
-	const indexType = ref('resourceCenter')
+	const indexType = ref('resources') // 默认选中“我的主页”
+	const activeKey = ref('resources') // 当前选中项
 	const itemData = ref({})
 	const VideoDetailsRef = ref(null)
-	const route = useRoute()
-	//     {
-	//     "fileName": "Kettle文档",
-	//     "courseType": "0",
-	//     "courseTypeName": "必修",
-	//     "collegeAllId": "1938796923484962817,1938796975385280513,1938797957397676033",
-	//     "suffix": "doc",
-	//     "collegeTwoId": "1938796975385280513",
-	//     "verifyStatus": "2",
-	//     "collegeThreeIdName": "维修部",
-	//     "collegeThreeId": "1938797957397676033",
-	//     "collegeId": "1938796923484962817",
-	//     "resourceCreaterUserName": "超管",
-	//     "coverImage": "",
-	//     "coverImagePath": "",
-	//     "fileUrl": "upload/20250626/a37672e03659d06fa618842c9c443910.doc",
-	//     "courseIdName": "胸口碎大石2",
-	//     "id": "1938857816211292161",
-	//     "viewCount": 100,
-	//     "courseId": "1937326992873689091",
-	//     "collegeAllIdName": "汽车工程学院,汽车部门,维修部",
-	//     "FILESIZE": 1105920,
-	//     "majorId": "1",
-	//     "uploadTime": "2025-06-26 18:32:18",
-	//     "verifyStatusName": "已发布",
-	//     "resourceDesc": "大东北,是我的家乡,唢呐吹出了美美滴模样",
-	//     "collegeIdName": "汽车工程学院",
-	//     "majorIdName": "草台班子",
-	//     "collegeTwoIdName": "汽车部门",
-	//     "fileId": "1938183534250917888"
-	// }
+	const selectedKeys = ref(['resources'])
+	const openKeys = ref(['resources'])
+
+	const menuItems = ref([
+		{
+			key: 'home',
+			icon: 'icon-home',
+			label: '我的主页',
+			title: '我的主页'
+		},
+		{
+			key: 'resources',
+			icon: 'icon-resources',
+			label: '我的资源',
+			title: '我的资源'
+		},
+		{
+			key: 'favorites',
+			icon: 'icon-favorites',
+			label: '我的收藏',
+			title: '我的收藏'
+		},
+		{
+			key: 'albums',
+			icon: 'icon-albums',
+			label: '我的课程专辑',
+			title: '我的课程专辑'
+		},
+		{
+			key: 'questionBank',
+			icon: 'icon-questionBank',
+			label: '我的题库',
+			title: '我的题库'
+		},
+		{
+			key: 'classroom',
+			icon: 'icon-classroom',
+			label: '我的教室',
+			title: '我的教室'
+		},
+		{
+			key: 'courses',
+			label: '我的课程',
+			icon: 'icon-courses',
+			title: '我的课程'
+		},
+		{
+			key: 'tasks',
+			label: '我的任务',
+			icon: 'icon-tasks',
+			title: '我的任务'
+		}
+	])
+
+	const handleClick = (e) => {
+		selectedKeys.value = [e.key]
+		activeKey.value = e.key
+		indexType.value = e.key
+	}
+
+	const currentComponent = computed(() => {
+		// if (indexType.value !== 'resources') {
+		// 	return false
+		// }
+		switch (indexType.value) {
+			case 'home':
+				return defineAsyncComponent(() => import('@/views/myResources/personalResources/Home.vue'))
+			case 'resources':
+				return myResources
+			case 'favorites':
+				return defineAsyncComponent(() => import('@/views/myFavorites/index.vue'))
+			case 'albums':
+				return defineAsyncComponent(() => import('@/views/myResources/personalResources/Albums.vue'))
+			case 'questionBank':
+				return defineAsyncComponent(() => import('@/views/myResources/personalResources/QuestionBank.vue'))
+			case 'classroom':
+				return defineAsyncComponent(() => import('@/views/myResources/personalResources/Classroom.vue'))
+			case 'courses':
+				return defineAsyncComponent(() => import('@/views/myResources/personalResources/Courses.vue'))
+			case 'tasks':
+				return defineAsyncComponent(() => import('@/views/myResources/personalResources/Tasks.vue'))
+			default:
+				return myResources
+		}
+	})
+
 	const handlerItemSidebar = (item) => {
 		// emit('handlerItemSidebar', item)
 	}
+
 	const onChangeCurrent = (current) => {
 		indexType.value = current
-
 		router.push({
 			path: '/' + current
 		})
 	}
 
 	const setData = (item) => {
-		// emit('handlerItemSidebar', item)
-
 		getData(item)
 	}
+
 	const getData = (item) => {
 		detail({ id: item.id })
 			.then((res) => {
 				if (res.code == 200) {
 					itemData.value = res.data
-
-					// VideoDetailsRef.value.setData(res.data)
 				}
 			})
 			.catch((err) => {})
@@ -88,17 +160,51 @@
 			getData({ id: id })
 		}
 	})
+
 	defineExpose({
 		setData
 	})
 </script>
 
 <style scoped>
+	.a-menu {
+		width: 256px;
+		height: 600px;
+		background-color: #fff;
+		border-right: 1px solid #e8e8e8;
+	}
+
 	.content {
-		border: 1px solid #00000011; /* 灰色细边框 */
+		border: 1px solid #00000011;
+		/* 灰色细边框 */
 	}
+
 	.scroll-container {
 		height: 100vh;
 		overflow-y: auto;
 	}
+	.sidebar-menu {
+		flex: 1;
+		background-color: #ffff;
+		color: #0000007c;
+	}
+
+	.sidebar-menu ul {
+		list-style-type: none;
+		padding: 0;
+	}
+
+	.sidebar-menu li {
+		padding: 10px;
+		cursor: pointer;
+	}
+
+	.sidebar-menu li:hover {
+		background-color: #e6f7ff;
+		color: #ccc;
+	}
+	.active {
+		color: #ffff;
+		background-color: #1073cff7;
+	}
 </style>

+ 57 - 39
src/views/myResources/resourceUpload.vue

@@ -108,7 +108,7 @@
 			<a-form-item v-if="isState == 1 && isVerifyStatus != 0" label="上传封面" name="coverImage">
 				<coverUpload
 					:isedit="true"
-					:coverImageId="formState.coverImageId"
+					:coverImageId="formState.coverImage"
 					@handleChangeCover="handleChangeCover"
 					@handleRemoveCover="handleRemoveCover"
 				></coverUpload>
@@ -164,7 +164,7 @@
 	const action = ref('/api/webapp/dev/file/uploadMinioReturnId')
 	const formState = reactive({
 		userfileIds: null, //资源文件id
-		coverImageId: null, //封面id
+		coverImage: null, //封面id
 		// courseId: null, //课程
 		// majorType: null, //专业
 		resourceType: null, //资源类型一级
@@ -231,12 +231,12 @@
 	}
 	// 封面文件id
 	const handleChangeCover = (fileId) => {
-		formState.coverImageId = fileId
+		formState.coverImage = fileId
 	}
 
 	// 移除封面文件
 	const handleRemoveCover = () => {
-		formState.coverImageId = null
+		formState.coverImage = null
 	}
 	const rules = {
 		// courseTypeName: [{ required: true, message: '请选择资源类型', trigger: 'change' }],
@@ -245,7 +245,7 @@
 			{ required: true, message: '请选择关键词', trigger: 'blur' },
 			{ validator: validateKeywords, trigger: 'blur' }
 		],
-		coverImageId: [{ required: true, message: '请上传封面', trigger: 'blur' }],
+		coverImage: [{ required: true, message: '请上传封面', trigger: 'blur' }],
 		resourceType: [{ required: true, message: '请选择资源类型', trigger: 'blur' }],
 		resourceDesc: [
 			{ required: true, message: '请输入资源描述', trigger: 'blur' },
@@ -398,43 +398,60 @@
 				Modal.error({ content: '请先上传文件!' })
 				return
 			}
-
-			const formData = {
-				id: props.resourcesId,
-				userfileIds: formState.userfileIds,
-				resourceType: formState.resourceType,
-				resourceTwoType: formState.resourceTwoType,
-				collegeId: formState.collegeId,
-				collegeTwoId: formState.collegeTwoId,
-				collegeThreeId: formState.collegeThreeId,
-				keywordValue: formState.keywordValue.join(','),
-				keyword: formState.keyword.join(','),
-				resourceDesc: formState.resourceDesc,
-				// majorId: formState.majorId,
-				isHot: formState.isHot,
-				isRecommend: formState.isRecommend,
-				coverImage: formState.coverImage,
-				publicStatus: formState.publicStatus
-			}
-			console.log(formData, '上传数据')
-			resourceAuditApi
-				.add(formData)
-				.then((res) => {
-					emit('getList')
-					if (props.isState == 1) {
+			if (props.isState == 1) {
+				const formData = {
+					id: props.resourcesId,
+					userfileIds: formState.userfileIds,
+					resourceType: formState.resourceType,
+					resourceTwoType: formState.resourceTwoType,
+					collegeId: formState.collegeId,
+					collegeTwoId: formState.collegeTwoId,
+					collegeThreeId: formState.collegeThreeId,
+					keywordValue: formState.keywordValue.join(','),
+					keyword: formState.keyword.join(','),
+					resourceDesc: formState.resourceDesc,
+					isHot: formState.isHot,
+					isRecommend: formState.isRecommend,
+					coverImage: formState.coverImage,
+					publicStatus: formState.publicStatus
+				}
+				resourceAuditApi
+					.edit(formData)
+					.then((res) => {
+						emit('getList')
 						Modal.success({ content: '资源编辑成功' })
-					} else {
-						Modal.success({ content: '资源上传成功' })
-					}
-				})
-				.catch((err) => {
-					if (props.isState == 1) {
+					})
+					.catch((err) => {
 						Modal.success({ content: '资源编辑失败' })
-					} else {
+						console.log(err)
+					})
+			} else {
+				const formData = {
+					userfileIds: formState.userfileIds,
+					resourceType: formState.resourceType,
+					resourceTwoType: formState.resourceTwoType,
+					collegeId: formState.collegeId,
+					collegeTwoId: formState.collegeTwoId,
+					collegeThreeId: formState.collegeThreeId,
+					keywordValue: formState.keywordValue.join(','),
+					keyword: formState.keyword.join(','),
+					resourceDesc: formState.resourceDesc,
+					isHot: formState.isHot,
+					isRecommend: formState.isRecommend,
+					coverImage: formState.coverImage,
+					publicStatus: formState.publicStatus
+				}
+				resourceAuditApi
+					.add(formData)
+					.then((res) => {
+						emit('getList')
+						Modal.success({ content: '资源上传成功' })
+					})
+					.catch((err) => {
 						Modal.success({ content: '资源上传失败' })
-					}
-					console.log(err)
-				})
+						console.log(err)
+					})
+			}
 		} catch (error) {
 			if (error.errorFields) {
 				// 表单验证错误
@@ -454,6 +471,7 @@
 			formState.resourceType = res.data.resourceType
 			formState.resourceTwoType = res.data.resourceTwoType
 			formState.collegeId = res.data.collegeId
+			formState.coverImage = res.data.coverImage
 			formState.collegeTwoId = res.data.collegeTwoId
 			formState.collegeThreeId = res.data.collegeThreeId
 			majorIdName.value = res.data.collegeAllId.split(',')

+ 5 - 3
src/views/resourceDetails/components/VideoDetails.vue

@@ -79,12 +79,14 @@
 							</div>
 							<div style="width: 10px"></div>
 							<div class="actions">
-								<div style="display: flex; align-items: center; cursor: pointer" @click="handlerShareDialog">
+								<div
+									style="display: flex; align-items: center; cursor: pointer; margin-right: 5px"
+									@click="handlerShareDialog"
+								>
 									<ExportOutlined />
 									<div style="width: 10px"></div>
 									<button class="share-btn">分享资源</button>
 								</div>
-								<div style="width: 10px"></div>
 								<div style="display: flex; align-items: center; cursor: pointer" @click="handlerCollection">
 									<StarOutlined v-if="starTag == false" />
 									<StarFilled v-if="starTag == true" />
@@ -268,7 +270,7 @@
 
 					videoFormat.value = itemData.value.suffix
 					releaseTime.value = itemData.value.uploadTime
-					videoSize.value = itemData.value.FILESIZE + 'b'
+					videoSize.value = itemData.value.FILESIZE ? itemData.value.FILESIZE + 'b' : ''
 
 					tags.value = []
 					itemData.value.keywordList.forEach((item) => {