Bladeren bron

目前比较全的功能

于添 7 maanden geleden
bovenliggende
commit
17b450cd24
40 gewijzigde bestanden met toevoegingen van 1486 en 655 verwijderingen
  1. 23 1
      src/App.vue
  2. 14 0
      src/api/answer/index.js
  3. 1 1
      src/api/courseCenter/courseinfo.js
  4. 1 0
      src/api/courseinfo/index.js
  5. 1 1
      src/api/forum/forumApi.js
  6. 2 0
      src/api/portal/index.js
  7. 75 0
      src/router/fullPage.js
  8. 5 4
      src/router/fullPageTool.js
  9. 17 12
      src/router/index.js
  10. 54 61
      src/router/portal.js
  11. 1 1
      src/router/systemRouter.js
  12. 14 2
      src/router/whiteList.js
  13. 0 8
      src/views/announcementManagement/index.vue
  14. 147 0
      src/views/answerManagement/components/DialogView.vue
  15. 229 0
      src/views/answerManagement/components/ListView.vue
  16. 166 0
      src/views/answerManagement/components/QueryView.vue
  17. 93 0
      src/views/answerManagement/components/TallItemView.vue
  18. 83 0
      src/views/answerManagement/index.vue
  19. 1 7
      src/views/classManagement/index.vue
  20. 0 4
      src/views/courseAdd/index.vue
  21. 13 2
      src/views/courseManagement/components/ListView.vue
  22. 1 7
      src/views/courseManagement/index.vue
  23. 0 3
      src/views/exm/examinationManagement/form.vue
  24. 2 7
      src/views/exm/examinationManagement/index.vue
  25. 0 6
      src/views/exm/exampaper/index.vue
  26. 2 7
      src/views/exm/questionnaireManagement/index.vue
  27. 5 5
      src/views/myResources/myResources.vue
  28. 2 8
      src/views/myResources/personalResources/index.vue
  29. 36 25
      src/views/notLook/index.vue
  30. 16 18
      src/views/portal/components/Header.vue
  31. 39 53
      src/views/portal/index.vue
  32. 62 67
      src/views/resourceCenter/index.vue
  33. 131 121
      src/views/resourceDetails/components/VideoDetails.vue
  34. 19 12
      src/views/resourceDetails/index.vue
  35. 63 58
      src/views/student/exam/paper/edit.vue
  36. 51 46
      src/views/student/exam/paper/read.vue
  37. 61 56
      src/views/student/record/index.vue
  38. 29 28
      src/views/sys/user/userCenter.vue
  39. 22 21
      src/views/sys/user/userTab/accountBasic.vue
  40. 5 3
      src/views/sys/user/userTab/userMessage.vue

+ 23 - 1
src/App.vue

@@ -1,14 +1,36 @@
 <template>
 	<a-config-provider :locale="locale">
-		<router-view />
+		<router-view v-if="$route.meta.fullpage" />
+		<div v-else>
+			<a-layout  >
+				<Header/>
+				<div style="width: 71%; margin-left: 10%">
+					<transition name="fade" mode="out-in">
+						<router-view></router-view>
+					</transition>
+				</div>
+
+			</a-layout>
+	<!--		<Footer/>-->
+		</div>
 	</a-config-provider>
+<!--	<a-config-provider :locale="locale">-->
+<!--		1-->
+<!--		<router-view />-->
+<!--	</a-config-provider>-->
 </template>
 
 <script setup name="App">
 	import i18n from '@/locales'
 	import { globalStore } from '@/store'
+	import Header from "@/views/portal/components/Header.vue";
+	import Footer from "@/views/portal/components/Footer.vue";
 
 	const store = globalStore()
 	store.initTheme()
 	const locale = i18n.global.messages.value[i18n.global.locale.value].lang
+
+	onMounted(() => {
+		console.log("经过我吗1231312312312")
+	})
 </script>

+ 14 - 0
src/api/answer/index.js

@@ -0,0 +1,14 @@
+import { baseRequest } from '@/utils/request'
+import {moduleRequest} from "@/utils/reSourceRequest";
+
+const request = moduleRequest(`/api/webapp/`)
+
+export const list = (p) => request('disk/answer/page', p, 'get')
+// 进入详情之后增加观看次数
+export const addItem = (p) => request('disk/answer/add', p, 'post')
+export const editItem = (p) => request('disk/answer/edit', p, 'post')
+//详情
+export const detail = (p) => request('disk/answer/detail', p, 'get')
+//收藏增加
+//资源列表 排除没权限得条目
+export const del = (p) => request('disk/answer/delete', p, 'post')

+ 1 - 1
src/api/courseCenter/courseinfo.js

@@ -5,7 +5,7 @@ const request = (url, ...arg) => baseRequest(`/api/webapp/` + url, ...arg)
 export default {
 	// 获取授课教师下拉
 	lecturerList(data) {
-		return request('sys/user/allList', data, 'get')
+		return request('bus/user/allList', data, 'get')
 	},
 	// 课程信息添加
 	add(data) {

+ 1 - 0
src/api/courseinfo/index.js

@@ -8,6 +8,7 @@ const request = moduleRequest(`/api/webapp/`)
  */
 // 获取文件列表(区分文件路径)
 export const list = (p) => request('disk/courseinfo/page', p, 'get')
+export const copy = (p) => request('disk/courseinfo/copy', p, 'post')
 // 获取文件列表(区分文件类型)
 // export const getFileListByType = (p) => request('file/selectfilebyfiletype', p, 'get')
 

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

@@ -40,7 +40,7 @@ export default {
 	},
 	// 所有用户
 	allUserList(data) {
-		return request('sys/user/allList', data, 'get')
+		return request('bus/user/allList', data, 'get')
 	},
 	// 后台-管理员是否关闭帖子接口
 	postinfoStatus(data) {

+ 2 - 0
src/api/portal/index.js

@@ -35,6 +35,8 @@ export const giveComment = (p) => request('disk/comment/give', p, 'get')
 export const giveCancelComment = (p) => request('disk/comment/giveCancel', p, 'get')
 //资源中心的详情
 export const resourcecentreDetail = (p) => request('disk/resourcecentre/detail', p, 'get')
+//检查有没有资格访问到这个页面
+export const isHaveAuth = (p) => request('disk/resourcecentre/isHaveAuth', p, 'get')
 //获取分享链接
 export const getShareLink = (p) => request('disk/courseauditrecord/getShareLink', p, 'get')
 //搜索条件

+ 75 - 0
src/router/fullPage.js

@@ -0,0 +1,75 @@
+
+const portal = [
+	// {
+	// 	name: 'portal',
+	// 	path: '/portal',
+	// 	components: () => import('@/portal/index.vue'),
+	// 	children: [
+	// 		{
+	// 			name: 'resourceCenter',
+	// 			path: '/portal/resourceCenter',
+	// 			component: () => import('@/resourceCenter/index.vue')
+	// 		},
+	// 		{
+	// 			name: 'resourceDetails',
+	// 			path: '/portal/resourceDetails',
+	// 			component: () => import('@/resourceDetails/index.vue')
+	// 		}
+	// 	]
+	// }
+	{
+		path: '/notLook',
+		name: 'notLook',
+		component: () => import('@/views/notLook/index.vue'),
+	},
+	// {
+	// 	name: 'slogin',
+	// 	path: '/slogin',
+	// 	component: () => import('@/views/slogin/login.vue'),
+	// },
+	{
+		name: 'tlogin',
+		path: '/tlogin',
+		component: () => import('@/views/tlogin/login.vue'),
+	},
+	// {
+	// 	name: 'classManagement',
+	// 	path: '/classManagement',
+	// 	component: () => import('@/views/classManagement/index.vue'),
+	// },
+	// {
+	// 	name: 'announcementManagement',
+	// 	path: '/announcementManagement',
+	// 	component: () => import('@/views/announcementManagement/index.vue'),
+	// },
+	// {
+	// 	name: 'questionnaireManagement',
+	// 	path: '/questionnaireManagement',
+	// 	component: () => import('@/views/exm/questionnaireManagement/index.vue'),
+	// },
+	// {
+	// 	name: 'examinationManagement',
+	// 	path: '/examinationManagement',
+	// 	component: () => import('@/views/exm/examinationManagement/index.vue'),
+	// },
+	// {
+	// 	name: 'exampaper',
+	// 	path: '/exampaper',
+	// 	component: () => import('@/views/exm/exampaper/index.vue'),
+	// },
+	// {
+	// 	name: 'answerManagement',
+	// 	path: '/answerManagement',
+	// 	component: () => import('@/views/answerManagement/index.vue'),
+	// }
+]
+/**
+ * 路由白名单(数组形式)
+ *
+ * 如果组件像登录一样,那就简单的写一个path,即可实现放开,
+ * 如果组件不在这边的,需要手动添加组件,就像other一样,
+ * 因为没登陆你没法拿到后端给你返回的那一坨,当然就找不到component
+ *
+ * @author yubaoshan
+ */
+export default portal

+ 5 - 4
src/router/fullPageTool.js

@@ -1,15 +1,16 @@
- 
 
-import portal from './portal'
+
+import fullPage from './fullPage'
 
 const fullPageTool = {
 	//检查
 	check(to) {
 		//如果在这个列表里就设置可以全屏
 		// 使用示例
-		const allPaths = this.getPath(portal)
-
+		const allPaths = this.getPath(fullPage)
+		// console.log('奇怪呢',' allPaths ',allPaths)
 		allPaths.forEach((item) => {
+			// console.log('全屏失效了吗',' 进来的路径 ',to.path,' 设置的全屏路径 ',item)
 			if (to.path.includes(item)) {
 				to.meta.fullpage = true
 			}

+ 17 - 12
src/router/index.js

@@ -1,4 +1,4 @@
- 
+
 import { createRouter, createWebHistory } from 'vue-router'
 import { notification } from 'ant-design-vue'
 import NProgress from 'nprogress'
@@ -28,8 +28,9 @@ const routes_404 = [
 	}
 ]
 // 系统路由
-const routes = [...systemRouter, ...whiteListRouters, ...routes_404,...forum,...student]
-
+// const routes = [...systemRouter, ...whiteListRouters, ...routes_404,...forum,...student,...portal]
+const routes = [...whiteListRouters, ...routes_404,...forum,...student,...portal]
+console.log('什么路由',routes)
 const router = createRouter({
 	history: createWebHistory(),
 	routes
@@ -48,7 +49,7 @@ const exportWhiteListFromRouter = (router) => {
 	return res
 }
 const whiteList = exportWhiteListFromRouter(whiteListRouters)
-
+console.log('拥有的白名单',whiteList)
 router.beforeEach(async (to, from, next) => {
 	NProgress.start()
 	const store = globalStore()
@@ -58,7 +59,14 @@ router.beforeEach(async (to, from, next) => {
 	document.title = to.meta.title
 		? `${to.meta.title} - ${sysBaseConfig.SNOWY_SYS_NAME}`
 		: `${sysBaseConfig.SNOWY_SYS_NAME}`
-
+	fullPageTool.check(to)
+	console.log(to.meta.title,' 有全屏标记吗 ',to.meta.fullpage)
+	// 整页路由处理
+	if (to.meta.fullpage) {
+		to.matched = [to.matched[to.matched.length - 1]]
+		to.matched.meta = to.meta
+		console.log(to.meta.title,' 有全屏标记 ',to.meta.fullpage,' to.matched ',to.matched,' to.meta ',to.meta)
+	}
 	// 过滤白名单
 	if (whiteList.includes(to.path)) {
 		next()
@@ -67,7 +75,7 @@ router.beforeEach(async (to, from, next) => {
 	}
 
 	const token = tool.data.get('TOKEN')
-	if (to.path === '/login') {
+	if (to.path === '/tlogin') {
 		// 当用户输入了login路由,将其跳转首页即可
 		if (token) {
 			next({
@@ -85,18 +93,15 @@ router.beforeEach(async (to, from, next) => {
 			// 有token的时候才保存登录之前要访问的页面
 			tool.data.set('LAST_VIEWS_PATH', to.fullPath)
 		}
-		fullPageTool.check(to)
+
 	}
 	if (!token) {
 		next({
-			path: '/login'
+			path: '/tlogin'
 		})
 		return false
 	}
-	// 整页路由处理
-	if (to.meta.fullpage) {
-		to.matched = [to.matched[to.matched.length - 1]]
-	}
+
 	// 加载动态/静态路由
 	if (!isGetRouter.value) {
 		const apiMenu = tool.data.get('MENU') || []

+ 54 - 61
src/router/portal.js

@@ -17,96 +17,89 @@ const portal = [
 	// 		}
 	// 	]
 	// }
+	// {
+	// 	name: 'index',
+	// 	path: '/',
+	// 	component: () => import('@/App.vue'),
+	// },
 	{
 		name: 'portal',
-		path: '/portal',
-		component: () => import('@/views/portal/index.vue'),
-		children: [
-			{
-				name: 'portal.resourceCenter',
-				path: '/portal/resourceCenter',
-				hide: true,
-				component: () => import('@/views/resourceCenter/index.vue')
-			},
-			{
-				name: 'portal.resourceDetails',
-				path: '/portal/resourceDetails',
-				hide: true,
-				component: () => import('@/views/resourceDetails/index.vue')
-			},
-			{
-				name: 'portal.personalResources',
-				path: '/portal/personalResources',
-				component: () => import('@/views/myResources/personalResources/index.vue')
-			},
-			{
-				name: 'portal.resourceManagement',
-				path: '/portal/resourceManagement',
-				component: () => import('@/views/myResources/resourceManagement/index.vue')
-			},
-			{
-				name: 'portal.courseCenter',
-				path: '/portal/courseCenter',
-				component: () => import('@/views/courseCenter/index.vue')
-			},
-			{
-				name: 'portal.courseDetails',
-				path: '/portal/courseDetails',
-				component: () => import('@/views/courseDetails/index.vue')
-			},
-			{
-				name: 'portal.courseAdd',
-				path: '/portal/courseAdd',
-				component: () => import('@/views/courseAdd/index.vue')
-			},
-			{
-				name: 'portal.courseManagement',
-				path: '/portal/courseManagement',
-				component: () => import('@/views/courseManagement/index.vue')
-			}
-		]
+		path: '/',
+		component: () => import('@/views/portal/index.vue')
+	},
+	{
+		name: 'resourceCenter',
+		path: '/portal/resourceCenter',
+
+		component: () => import('@/views/resourceCenter/index.vue')
+	},
+	{
+		name: 'resourceDetails',
+		path: '/portal/resourceDetails',
+
+		component: () => import('@/views/resourceDetails/index.vue')
+	},
+	{
+		name: 'personalResources',
+		path: '/portal/personalResources',
+		component: () => import('@/views/myResources/personalResources/index.vue')
+	},
+	{
+		name: 'resourceManagement',
+		path: '/portal/resourceManagement',
+		component: () => import('@/views/myResources/resourceManagement/index.vue')
+	},
+	{
+		name: 'courseCenter',
+		path: '/portal/courseCenter',
+		component: () => import('@/views/courseCenter/index.vue')
 	},
 	{
-		path: '/notLook',
-		name: 'notLook',
-		component: () => import('@/views/notLook/index.vue'),
-		children: []
+		name: 'courseDetails',
+		path: '/portal/courseDetails',
+		component: () => import('@/views/courseDetails/index.vue')
 	},
 	{
-		name: 'slogin',
-		path: '/slogin',
-		component: () => import('@/views/slogin/login.vue'),
+		name: 'courseAdd',
+		path: '/portal/courseAdd',
+		component: () => import('@/views/courseAdd/index.vue')
 	},
 	{
-		name: 'tlogin',
-		path: '/tlogin',
-		component: () => import('@/views/tlogin/login.vue'),
+		name: 'courseManagement',
+		path: '/portal/courseManagement',
+		component: () => import('@/views/courseManagement/index.vue')
 	},
 	{
 		name: 'classManagement',
-		path: '/classManagement',
+		path: '/portal/classManagement',
 		component: () => import('@/views/classManagement/index.vue'),
 	},
 	{
 		name: 'announcementManagement',
-		path: '/announcementManagement',
+		path: '/portal/announcementManagement',
 		component: () => import('@/views/announcementManagement/index.vue'),
 	},
 	{
 		name: 'questionnaireManagement',
-		path: '/questionnaireManagement',
+		path: '/portal/questionnaireManagement',
 		component: () => import('@/views/exm/questionnaireManagement/index.vue'),
 	},
 	{
 		name: 'examinationManagement',
-		path: '/examinationManagement',
+		path: '/portal/examinationManagement',
 		component: () => import('@/views/exm/examinationManagement/index.vue'),
 	},
 	{
 		name: 'exampaper',
-		path: '/exampaper',
+		path: '/portal/exampaper',
 		component: () => import('@/views/exm/exampaper/index.vue'),
+	},
+	{
+		name: 'answerManagement',
+		path: '/portal/answerManagement',
+		component: () => import('@/views/answerManagement/index.vue'),
 	}
+
 ]
 /**
  * 路由白名单(数组形式)

+ 1 - 1
src/router/systemRouter.js

@@ -1,4 +1,4 @@
- 
+
 import config from '@/config'
 import tool from '@/utils/tool'
 import routerUtil from '@/utils/routerUtil'

+ 14 - 2
src/router/whiteList.js

@@ -7,11 +7,15 @@ const constRouters = [
 		path: '/callback'
 	},
 	{
-		path: '/portal',
+		path: '/index/portal',
 		component: () => import('@/views/portal/index.vue')
 	},
+	// {
+	// 	path: '/portal/notLook',
+	// 	component: () => import('@/views/notLook/index.vue'),
+	// },
 	{
-		path: '/portal/resourceCenter',
+		path: '/index/portal/resourceCenter',
 		component: () => import('@/views/resourceCenter/index.vue')
 	},
 	{
@@ -154,6 +158,14 @@ const constRouters = [
 		path: '/exampaper',
 		component: () => import('@/views/exm/exampaper/index.vue')
 	},
+	{
+		path: '/answerManagement',
+		component: () => import('@/views/answerManagement/index.vue')
+	},
+	// {
+	// 	path: '/answerManagement',
+	// 	component: () => import('@/views/exm/answerManagement/index.vue')
+	// },
 ]
 /**
  * 路由白名单(数组形式)

+ 0 - 8
src/views/announcementManagement/index.vue

@@ -1,8 +1,4 @@
 <template>
-	<div style="overflow-y: auto">
-		<a-layout>
-			<Header  />
-			<div style="width: 71%; margin-left: 10%">
 				<QueryView style="margin-top: 10px" @handlerSearch="handlerSearch"></QueryView>
 				<!-- 新建课程按钮 -->
 				<a-button style="margin-top: 10px" type="primary" @click="handleNewCourse">
@@ -13,11 +9,7 @@
 				</a-button>
 				<div style="height: 10px"></div>
 				<ListView ref="listViewRef" style="margin-top: 10px" @handleEdit="handleEdit"></ListView>
-			</div>
-		</a-layout>
-		<Footer />
 		<DialogView ref="dialogViewRef"  @handleAddItem="handleAddItem"></DialogView>
-	</div>
 </template>
 
 <script setup>

+ 147 - 0
src/views/answerManagement/components/DialogView.vue

@@ -0,0 +1,147 @@
+<template>
+	<a-modal v-model:visible="visible" width="30%" height="70%" title="回复" @ok="handleOk">
+		<div style="height: 300px; overflow-y: auto">
+			<template v-for="(item,index) in recordChildList" :key = index>
+				<TallItemView :name="item.userIdName" :data="item.info"   style="margin-top: 10px"></TallItemView>
+			</template>
+		</div>
+
+		<a-form
+			:model="formState"
+			:rules="rules"
+			ref="formRef"
+			layout="horizontal"
+			:label-col="{ span: 5 }"
+			:wrapper-col="{ span: 18 }"
+		>
+
+			<a-form-item label="回复内容" name="info">
+				<a-textarea v-model:value="formState.info" placeholder="输入回复内容"
+							:auto-size="{ minRows: 2, maxRows: 8 }"/>
+			</a-form-item>
+
+		</a-form>
+	</a-modal>
+</template>
+<script setup>
+import {reactive, ref} from 'vue'
+import resourceAuditApi from '@/api/resourceAudit.js'
+import TallItemView from './TallItemView.vue'
+
+const recordChildList = ref([]) //专业
+const formRef = ref() //专业
+const mode = ref('add') //专业
+import {addItem, detail, editItem} from '@/api/answer'
+
+const visible = ref(false)
+const emit = defineEmits([ "handleAddItem" ])
+const formState = reactive({
+	pid : undefined,
+	hourId : undefined,
+	title: undefined,
+	info: undefined,
+})
+const rules = {
+	info: [{required: true, message: '请输入回复内容', trigger: 'blur'}]
+}
+
+watch(
+	() => visible.value,
+	(newVal, oldVal) => {
+		if (newVal == false && formRef.value) {
+			formRef.value.resetFields()
+		}
+	},
+	{deep: true, immediate: true}
+)
+const open = () => {
+
+	visible.value = true
+	mode.value = 'add'
+}
+const edit = (item) => {
+	visible.value = true
+	mode.value = 'edit'
+	console.log('编辑内容',item)
+	detail({id : item.id}).then((res)=>{
+		if(res.code == 200){
+			formState.pid = item.id
+			formState.hourId = item.hourId
+			recordChildList.value = item.recordChildList
+
+
+
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+			// recordChildList.value.push(item.recordChildList[0])
+		}
+	})
+
+}
+const handleOk = (e) => {
+	formRef.value.validate().then(() => {
+		let json = JSON.parse(JSON.stringify(formState))
+
+
+		if (mode.value == 'add') {
+			addItem(json).then((res) => {
+					if(res.code == 200){
+						emit("handleAddItem")
+						visible.value = false
+					}
+			})
+		}
+		if (mode.value == 'edit') {
+			addItem(json).then((res) => {
+				if(res.code == 200){
+					emit("handleAddItem")
+					visible.value = false
+				}
+			})
+		}
+	})
+	// console.logckPoint.value = false
+}
+onMounted(() => {
+	// getOrgTreeSelector()
+})
+
+defineExpose({open,edit})
+</script>

+ 229 - 0
src/views/answerManagement/components/ListView.vue

@@ -0,0 +1,229 @@
+<template>
+	<a-table
+		ref="table"
+		:columns="columns"
+		:data-source="dataSources"
+		:row-key="(record) => record.courseId"
+		bordered
+		:expand-row-by-click="true"
+		:pagination="false"
+		size="small"
+	>
+		<template #bodyCell="{ column, text, record }">
+<!--			<template v-if="column.dataIndex === 'content'">-->
+<!--				<a-popover title="详细内容"-->
+<!--						   trigger="hover"-->
+<!--				>-->
+<!--					<template #content>-->
+<!--						{{ text }}-->
+<!--					</template>-->
+<!--					<template v-if="text.length > 10">-->
+<!--						<span >{{ text.slice(0, 10) }}...</span>-->
+<!--					</template>-->
+<!--				</a-popover>-->
+<!--				<template v-if="text.length <= 10">-->
+<!--					<span >{{ text }}</span>-->
+<!--				</template>-->
+<!--			</template>-->
+
+			<template v-if="column.dataIndex === 'action'">
+<!--				<a-button size="small" @click="handleDetail(record)" style="margin-right: 5px">详情</a-button>-->
+				<a-button size="small" @click="handleEdit(record)" style="margin-right: 5px">回复</a-button>
+				<a-popover v-model:visible="popoverVisibles[record.collegeId]" title="确定删除?" trigger="click">
+					<template #content>
+						<a-button style="margin-right: 10px" type="primary" @click="handleShelf(record,1)">确定
+						</a-button>
+						<a-button @click="()=>{	popoverVisibles[record.collegeId] = false}">取消</a-button>
+					</template>
+					<!--					<a-button size="small" style="margin-right: 5px">选择</a-button>-->
+					<a-button size="small" @click="handleDelete(record)" style="margin-right: 5px">删除</a-button>
+				</a-popover>
+			</template>
+		</template>
+	</a-table>
+	<div style="display: flex; width: 100%; justify-content: flex-end; margin-top: 10px">
+		<a-pagination
+			v-model:current="pagination.current"
+			v-model:pageSize="pagination.size"
+			:total="total"
+			show-less-items
+			@change="handlerChange"
+		/>
+	</div>
+</template>
+
+<script setup>
+import tool from '@/utils/tool'
+import {ref, onMounted} from 'vue'
+import {EyeOutlined, EditOutlined, SnippetsOutlined, DeleteOutlined} from '@ant-design/icons-vue'
+import {list} from '@/api/answer'
+import {useRouter} from 'vue-router'
+import {updateCourseStatus} from '@/api/course/courseDetail'
+
+const router = useRouter()
+
+const emit = defineEmits(['handleEdit'])
+//发布按钮状态
+const releaseVisible = ref(false)
+const loading = ref(false) // 列表loading
+const dataSources = ref([])
+const popoverVisible = ref({})
+const popoverVisibles = ref({})
+const formState = ref({
+	name: '',
+	loacl: ''
+}) // 列表loading
+const columns = [
+	{
+		title: '问答名称',
+		dataIndex: 'hourIdName',
+		sorter: true,
+		width: '15%'
+	},
+	{
+		title: '内容',
+		dataIndex: 'info',
+		sorter: true,
+		width: '15%'
+	},
+	{
+		title: '课程名',
+		dataIndex: 'courseIdName',
+		sorter: true,
+		width: '15%'
+	},
+	// {
+	// 	title: '发布时间',
+	// 	dataIndex: 'createTime',
+	// 	sorter: true,
+	// 	width: '12%'
+	// },
+	{
+		title: '操作',
+		dataIndex: 'action',
+		sorter: true,
+		width: '10%'
+	}
+]
+// tool.formatTimestamp()
+
+const formatTimestamp = (time) => {
+	return tool.formatTimestamp(time)
+}
+const total = ref(0)
+const pagination = ref({
+	eduIdentity : 1,
+	size: 10,
+	current: 1,
+})
+// const onChangeCurrent = (current) => {
+// 	router.push({
+// 		path: '/' + current
+// 	})
+// }
+const handlerChange = (page, pageSize) => {
+	console.log('分页参数', page, pageSize)
+	// pagination.value.size = pageSize
+	// pagination.value.current = page
+
+	getList()
+}
+const handleDetail = (record) => {
+	console.log('查看详情', record)
+	router.push({
+		path: '/portal/courseDetails',
+		query: {
+			id: record.courseId
+		}
+	})
+	// 在这里添加查看详情的逻辑
+}
+
+// 编辑按钮点击事件
+const handleEdit = (record) => {
+	console.log('编辑记录', record)
+	// 在这里添加编辑记录的逻辑
+
+	emit('handleEdit', record)
+}
+
+// 上架按钮点击事件
+const handleShelf = (record,num) => {
+	console.log('上架记录', record)
+	popoverVisible.value[record.collegeId] = false
+	// 在这里添加上架记录的逻辑
+	// {
+	// 	"courseId": "1948183431150227458",
+	// 	"putawayStatus": 1
+	// }
+	// updateCourseStatus({courseId : record.courseId,putawayStatus : num}).then((res)=>{
+	// 	getList()
+	// })
+
+}
+
+// 删除按钮点击事件
+const handleDelete = (record) => {
+	console.log('删除记录', record)
+	// 在这里添加删除记录的逻辑
+}
+const getList = () => {
+	console.log('获取列表 getList')
+
+	list({...pagination.value}).then((data) => {
+		if (data.code == 200) {
+			console.log('获取列表 新数组', data.data.records)
+			dataSources.value = []
+			dataSources.value = data.data.records
+			console.log('获取列表 最新数组', dataSources.value)
+			pagination.value.current = data.data.current
+			pagination.value.size = data.data.size
+			total.value = data.data.total
+		}
+		// data.records
+	})
+}
+const setList = (search) => {
+	console.log('获取列表 setList',search)
+	// courseName: '',
+	// 	collegeId: '',
+	// 	majorId: '',
+	// 	courseType: '',
+	// 	loacl: []
+	formState.value = search
+	pagination.value.current = 1
+	list({...pagination.value, ...formState.value}).then((data) => {
+		if (data.code == 200) {
+			dataSources.value = data.data.records
+			pagination.value.current = data.data.current
+			pagination.value.size = data.data.size
+			total.value = data.data.total
+		}
+		// data.records
+	})
+}
+
+// 重置按钮点击事件
+onMounted(() => {
+	// getListData()
+	getList()
+})
+
+
+// watch(
+// 	() => dataSources.value,
+// 	(newVal, oldVal) => {
+// 		console.log('数据源变化了 ', ' 新的 ',newVal, '  旧的 ',oldVal)
+// 	},
+// 	{ deep: true, immediate: true }
+// )
+defineExpose({
+	setList,getList
+})
+</script>
+
+<style scoped>
+.desc p {
+	margin-bottom: 1em;
+}
+</style>

+ 166 - 0
src/views/answerManagement/components/QueryView.vue

@@ -0,0 +1,166 @@
+<template>
+	<div style="display: flex; justify-content: space-between; align-items: center">
+		<div>
+			<a-form layout="inline" :model="formState">
+				<a-form-item label="" style="width: 40%">
+					<a-input v-model:value="formState.title" placeholder="请输入课程名称" allowClear />
+				</a-form-item>
+				<a-form-item label="" style="width: 50%">
+					<a-range-picker 	v-model:value="formState.time" allowClear />
+				</a-form-item>
+			</a-form>
+		</div>
+		<div>
+			<a-button type="primary" @click="handleSearch">
+				<template #icon><SearchOutlined /></template>
+				查询
+			</a-button>
+			<a-button style="margin-left: 10px" @click="handleReset">
+				<template #icon><ReloadOutlined /></template>
+				重置
+			</a-button>
+		</div>
+	</div>
+</template>
+
+<script setup>
+	import { ref, onMounted } from 'vue'
+	import { SearchOutlined, ReloadOutlined } from '@ant-design/icons-vue'
+	import { useRouter } from 'vue-router'
+	import collegeApi from '@/api/college'
+	import resourceAuditApi from '@/api/resourceAudit.js'
+	import tool from '@/utils/tool'
+	import Footer from "@/views/portal/components/Footer.vue";
+	const emit = defineEmits([])
+	const router = useRouter()
+	const collegeMajorOptions = ref([]) //院系
+	//发布按钮状态
+	const releaseVisible = ref(false)
+	const loading = ref(false) // 列表loading
+	const COURSE_TYPE = tool.dictTypeList('COURSE_TYPE')
+	const formState = ref({
+		title: undefined,
+		time : [],
+		loacl: []
+	}) // 列表loading
+
+	const options = ref([
+		// {
+		// 	value: 'zhejiang',
+		// 	label: 'Zhejiang',
+		// 	isLeaf: false
+		// },
+		// {
+		// 	value: 'jiangsu',
+		// 	label: 'Jiangsu',
+		// 	isLeaf: false
+		// }
+	])
+
+	// 搜索值
+	const searchValue = ref('')
+
+	const pagination = reactive({
+		pageSize: 10,
+		pageNum: 1,
+		total: 0
+	})
+	// const onChangeCurrent = (current) => {
+	// 	router.push({
+	// 		path: '/' + current
+	// 	})
+	// }
+	const publishedData = ref()
+	//发布确定
+
+	// 上传资源模态框
+	const uploadModalVisible = ref(false)
+	//院系组织查询
+	// const getOrgTreeSelector = () => {
+	// 	resourceAuditApi
+	// 		.orgList()
+	// 		.then((res) => {
+	// 			console.log(res.data, '获取学院')
+	// 			collegeMajorOptions.value = res.data
+	// 		})
+	// 		.catch((err) => {
+	// 			console.log(err)
+	// 		})
+	// }
+	const loadData = (selectedOptions) => {
+		const targetOption = selectedOptions[selectedOptions.length - 1]
+		targetOption.loading = true
+
+		// load options lazily
+		setTimeout(() => {
+			targetOption.loading = false
+			targetOption.children = [
+				{
+					label: `${targetOption.label} Dynamic 1`,
+					value: 'dynamic1'
+				},
+				{
+					label: `${targetOption.label} Dynamic 2`,
+					value: 'dynamic2'
+				}
+			]
+			options.value = [...options.value]
+		}, 1000)
+	}
+	const getList = () => {
+		// collegeApi.treeAll().then((data) => {
+		// 	options.value = data
+		// })
+
+		// resourceAuditApi
+		// 	.orgList()
+		// 	.then((res) => {
+		// 		collegeMajorOptions.value = res.data
+		// 	})
+		// 	.catch((err) => {
+		// 		console.log(err)
+		// 	})
+	}
+	const handleSearch = () => {
+		console.log('执行查询操作', formState.value,COURSE_TYPE)
+		// 在这里添加查询逻辑
+
+		let newJson =  JSON.parse(JSON.stringify(formState.value))
+		console.log('执行查询操作123   ', newJson.loacl.length)
+
+		if(newJson.time.length == 2){
+		 let beginTime =	tool.formatTimesYearMonthDay(newJson.time[0])
+		let endTime=	tool.formatTimesYearMonthDay(newJson.time[1])
+			newJson.beginTime = beginTime
+			newJson.endTime = endTime
+			newJson.time= undefined
+		}
+
+		emit('handlerSearch', newJson)
+	}
+
+	// 重置按钮点击事件
+	const handleReset = () => {
+		formState.value = {
+			courseName: undefined,
+			collegeId: undefined,
+			majorId: undefined,
+			courseType: undefined,
+			time : [],
+			loacl: []
+			// 其他需要重置的字段
+		}
+		emit('handlerSearch', formState.value)
+	}
+	onMounted(() => {
+		// getListData()
+
+		getList()
+	})
+</script>
+
+<style scoped>
+	.desc p {
+		margin-bottom: 1em;
+	}
+</style>

+ 93 - 0
src/views/answerManagement/components/TallItemView.vue

@@ -0,0 +1,93 @@
+<template>
+	<div style="display: flex; justify-content: space-between; align-items: center">
+		<div>
+			<span>{{ props.name }}:{{ props.data }}</span>
+		</div>
+	</div>
+</template>
+
+<script setup>
+import {ref, onMounted} from 'vue'
+import {SearchOutlined, ReloadOutlined} from '@ant-design/icons-vue'
+import {useRouter} from 'vue-router'
+import collegeApi from '@/api/college'
+import resourceAuditApi from '@/api/resourceAudit.js'
+import tool from '@/utils/tool'
+import Footer from "@/views/portal/components/Footer.vue";
+
+const emit = defineEmits([])
+const router = useRouter()
+
+const props = defineProps({
+	name: {
+		type: String,
+		default: ''
+	},
+	data: {
+		type: String,
+		default: ''
+	},
+})
+
+// const onChangeCurrent = (current) => {
+// 	router.push({
+// 		path: '/' + current
+// 	})
+// }
+const publishedData = ref()
+//发布确定
+
+// 上传资源模态框
+const uploadModalVisible = ref(false)
+//院系组织查询
+// const getOrgTreeSelector = () => {
+// 	resourceAuditApi
+// 		.orgList()
+// 		.then((res) => {
+// 			console.log(res.data, '获取学院')
+// 			collegeMajorOptions.value = res.data
+// 		})
+// 		.catch((err) => {
+// 			console.log(err)
+// 		})
+// }
+const getList = () => {
+	// collegeApi.treeAll().then((data) => {
+	// 	options.value = data
+	// })
+
+	// resourceAuditApi
+	// 	.orgList()
+	// 	.then((res) => {
+	// 		collegeMajorOptions.value = res.data
+	// 	})
+	// 	.catch((err) => {
+	// 		console.log(err)
+	// 	})
+}
+
+// 重置按钮点击事件
+const handleReset = () => {
+	formState.value = {
+		courseName: undefined,
+		collegeId: undefined,
+		majorId: undefined,
+		courseType: undefined,
+		time: [],
+		loacl: []
+		// 其他需要重置的字段
+	}
+	emit('handlerSearch', formState.value)
+}
+onMounted(() => {
+	// getListData()
+
+	getList()
+})
+</script>
+
+<style scoped>
+.desc p {
+	margin-bottom: 1em;
+}
+</style>

+ 83 - 0
src/views/answerManagement/index.vue

@@ -0,0 +1,83 @@
+<template>
+	<div >
+				<QueryView style="margin-top: 10px" @handlerSearch="handlerSearch"></QueryView>
+				<!-- 新建课程按钮 -->
+				<a-button style="margin-top: 10px" type="primary" @click="handleNewCourse">
+					<template #icon>
+						<PlusOutlined />
+					</template>
+					新建
+				</a-button>
+				<div style="height: 10px"></div>
+				<ListView ref="listViewRef" style="margin-top: 10px" @handleEdit="handleEdit"></ListView>
+			</div>
+		<DialogView ref="dialogViewRef"  @handleAddItem="handleAddItem"></DialogView>
+</template>
+
+<script setup>
+	import { ref, onMounted } from 'vue'
+	import { PlusOutlined } from '@ant-design/icons-vue'
+	import tool from '@/utils/tool'
+	import Header from '@/views/portal/components/Header.vue'
+	import Footer from '@/views/portal/components/Footer.vue'
+	import QueryView from './components/QueryView.vue'
+	import ListView from './components/ListView.vue'
+	import DialogView from './components/DialogView.vue'
+	import { useRouter } from 'vue-router'
+	const router = useRouter()
+	//发布按钮状态
+	const releaseVisible = ref(false)
+	const loading = ref(false) // 列表loading
+
+	const isState = ref(0) // 列表loading
+	const listViewRef = ref(null)
+	const dialogViewRef = ref(null)
+
+	// 搜索值
+	const searchValue = ref('')
+	const open = ref(false)
+
+	const handleNewCourse = () => {
+		// 在这里添加新建课程的逻辑
+		dialogViewRef.value.open()
+	}
+	const handleAddItem = () => {
+		console.log('要去刷新',listViewRef.value)
+		// 在这里添加新建课程的逻辑
+		listViewRef.value.getList()
+	}
+	const handlerSearch = (data) => {
+		console.log('新建课程')
+		// 在这里添加新建课程的逻辑
+		listViewRef.value.setList(data)
+	}
+	const handleEdit = (item) => {
+		dialogViewRef.value.edit(item)
+	}
+
+	const pagination = reactive({
+		pageSize: 10,
+		pageNum: 1,
+		total: 0
+	})
+	const onChangeCurrent = (current) => {
+		router.push({
+			path: '/' + current
+		})
+	}
+	const publishedData = ref()
+	//发布确定
+
+	// 上传资源模态框
+	const uploadModalVisible = ref(false)
+
+	onMounted(() => {
+		// getListData()
+	})
+</script>
+
+<style scoped>
+	.desc p {
+		margin-bottom: 1em;
+	}
+</style>

+ 1 - 7
src/views/classManagement/index.vue

@@ -1,8 +1,5 @@
 <template>
-	<div style="overflow-y: auto">
-		<a-layout>
-			<Header  />
-			<div style="width: 71%; margin-left: 10%">
+	<div >
 				<QueryView style="margin-top: 10px" @handlerSearch="handlerSearch"></QueryView>
 				<!-- 新建课程按钮 -->
 				<a-button style="margin-top: 10px" type="primary" @click="handleNewCourse">
@@ -14,10 +11,7 @@
 				<div style="height: 10px"></div>
 				<ListView ref="listViewRef" style="margin-top: 10px" @handleEdit="handleEdit"></ListView>
 			</div>
-		</a-layout>
-		<Footer />
 		<DialogView ref="dialogViewRef" @handleAddItem="handleAddItem"></DialogView>
-	</div>
 </template>
 
 <script setup>

+ 0 - 4
src/views/courseAdd/index.vue

@@ -1,8 +1,6 @@
 <template>
 	<div style="overflow-y: auto">
 		<!-- <img :src="images" style="width: 100%; height: 100%" /> -->
-		<a-layout>
-			<Header  />
 			<div style="width: 71%; margin-left: 10%">
 				<a-tabs v-model:activeKey="activeKey" type="card">
 					<a-tab-pane key="1" tab="教室信息">
@@ -22,8 +20,6 @@
 <!--					</a-tab-pane>-->
 				</a-tabs>
 			</div>
-		</a-layout>
-		<Footer />
 	</div>
 </template>
 

+ 13 - 2
src/views/courseManagement/components/ListView.vue

@@ -14,6 +14,7 @@
 			<template v-if="column.dataIndex === 'action'">
 				<a-button size="small" @click="handleDetail(record)" style="margin-right: 5px">详情</a-button>
 				<a-button size="small" @click="handleEdit(record)" style="margin-right: 5px">编辑</a-button>
+				<a-button size="small" @click="handleCopy(record)" style="margin-right: 5px">复制</a-button>
 				<a-popover v-model:visible="popoverVisible[record.courseId]" title="确定下架?" trigger="click">
 					<template #content>
 						<a-button style="margin-right: 10px" type="primary" @click="handleShelf(record,0)">确定
@@ -53,7 +54,7 @@
 import tool from '@/utils/tool'
 import {ref, onMounted} from 'vue'
 import {EyeOutlined, EditOutlined, SnippetsOutlined, DeleteOutlined} from '@ant-design/icons-vue'
-import {list} from '@/api/courseinfo'
+import {list,copy} from '@/api/courseinfo'
 import {useRouter} from 'vue-router'
 import collegeApi from '@/api/college'
 import {updateCourseStatus} from '@/api/course/courseDetail'
@@ -88,7 +89,7 @@ const columns = [
 		title: '院系',
 		dataIndex: 'collegeTwoIdName',
 		sorter: true,
-		width: '25%'
+		width: '15%'
 	},
 	{
 		title: '课程类型',
@@ -155,6 +156,16 @@ const handleEdit = (record) => {
 
 	emit('handleEdit', record)
 }
+const handleCopy = (record) => {
+	console.log('拷贝记录', record)
+	// 在这里添加编辑记录的逻辑
+	copy({ courseId : record.courseId }).then((res)=>{
+		if(res.code == 200){
+			getList()
+		}
+	})
+	// getList()
+}
 
 // 上架按钮点击事件
 const handleShelf = (record,num) => {

+ 1 - 7
src/views/courseManagement/index.vue

@@ -1,8 +1,5 @@
 <template>
-	<div style="overflow-y: auto">
-		<a-layout>
-			<Header  />
-			<div style="width: 71%; margin-left: 10%">
+	<div >
 				<QueryView style="margin-top: 10px" @handlerSearch="handlerSearch"></QueryView>
 				<!-- 新建课程按钮 -->
 				<a-button style="margin-top: 10px" type="primary" @click="handleNewCourse">
@@ -13,9 +10,6 @@
 				</a-button>
 				<div style="height: 10px"></div>
 				<ListView ref="listViewRef" style="margin-top: 10px" @handleEdit="handleEdit"></ListView>
-			</div>
-		</a-layout>
-		<Footer />
 		<DialogView ref="dialogViewRef"></DialogView>
 	</div>
 </template>

+ 0 - 3
src/views/exm/examinationManagement/form.vue

@@ -1,6 +1,4 @@
 <template>
-	<a-layout>
-		<Header @onChangeCurrent="onChangeCurrent" />
 		<div style="width: 71%; margin-left: 10%">
 			<div style="height: 20px"></div>
 		</div>
@@ -67,7 +65,6 @@
 				</a-space>
 			</a-form-item>
 		</a-form>
-	</a-layout>
 
 
 		<a-modal

+ 2 - 7
src/views/exm/examinationManagement/index.vue

@@ -1,7 +1,4 @@
 <template>
-	<a-layout>
-		<Header />
-		<div style="width: 71%; margin-left: 10%">
 			<div style="height: 20px"></div>
 			<a-form layout="inline" :model="queryParam">
 				<a-form-item label="考试标题:">
@@ -79,9 +76,6 @@
 			>
 				<TaskEdit v-if="drawerVisible" :id="editId" @success="onEditSuccess" />
 			</a-drawer>
-		</div>
-	</a-layout>
-	<Footer />
 </template>
 
 <script setup>
@@ -107,7 +101,8 @@
 		examName: null,
 		examStatus: null,
 		pageIndex: 1,
-		pageSize: 10
+		pageSize: 10,
+		examType: 1
 	})
 	const listLoading = ref(false)
 	const tableData = ref([])

+ 0 - 6
src/views/exm/exampaper/index.vue

@@ -1,7 +1,4 @@
 <template>
-	<a-layout>
-		<Header  />
-		<div style="width: 71%; margin-left: 10%">
 			<div style="height: 20px"></div>
 			<!-- 查询表单 -->
 			<a-form :model="queryParam" layout="inline" class="search-form">
@@ -93,9 +90,6 @@
 			>
 				<FormEdit v-if="drawerVisible" :id="editId" @success="onEditSuccess" />
 			</a-drawer>
-		</div>
-	</a-layout>
-	<Footer />
 </template>
 
 <script setup>

+ 2 - 7
src/views/exm/questionnaireManagement/index.vue

@@ -1,7 +1,4 @@
 <template>
-	<a-layout>
-		<Header @onChangeCurrent="onChangeCurrent" />
-		<div style="width: 71%; margin-left: 10%">
 			<div style="height: 20px"></div>
 			<a-form layout="inline" :model="queryParam">
 				<a-form-item label="考试标题:">
@@ -79,9 +76,6 @@
 			>
 				<TaskEdit v-if="drawerVisible" :id="editId" @success="onEditSuccess" />
 			</a-drawer>
-		</div>
-	</a-layout>
-	<Footer />
 
 </template>
 
@@ -108,7 +102,8 @@
 		examName: null,
 		examStatus: null,
 		pageIndex: 1,
-		pageSize: 10
+		pageSize: 10,
+		examType: 3
 	})
 	const listLoading = ref(false)
 	const tableData = ref([])

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

@@ -9,11 +9,11 @@
 			<a-tab-pane key="4" tab="回收站"></a-tab-pane>
 		</a-tabs>
 		<!-- 搜索和操作区域 -->
-		<a-row :gutter="16" style="margin-bottom: 16px">
+		<a-row :gutter="12" style="margin-bottom: 16px">
 			<a-col :span="18">
-				<a-input v-model:value="formState.fileName" placeholder="请输入资源名称" style="width: 150px" />
+				<a-input v-model:value="formState.fileName" placeholder="请输入资源名称" style="width: 140px" />
 				<a-cascader
-					style="width: 200px; margin-left: 8px"
+					style="width: 150px; margin-left: 8px"
 					v-model:value="majorIdName"
 					:options="collegeMajorOptions"
 					:fieldNames="{ label: 'name', value: 'id', children: 'children' }"
@@ -29,7 +29,7 @@
 					placeholder="请选择专业"
 				/> -->
 				<a-cascader
-					style="width: 200px; margin-left: 8px"
+					style="width: 150px; margin-left: 8px"
 					v-model:value="resourceName"
 					:options="resourceTypeOptions"
 					:fieldNames="{ label: 'name', value: 'id', children: 'children' }"
@@ -46,7 +46,7 @@
 				/> -->
 				<a-select
 					v-model:value="formState.suffix"
-					style="width: 150px; margin-left: 8px"
+					style="width: 100px; margin-left: 8px"
 					:options="fileformatOptions"
 					:fieldNames="{ label: 'fileExtendName', value: 'fileExtendName', children: 'children' }"
 					placeholder="请选择资源格式"

+ 2 - 8
src/views/myResources/personalResources/index.vue

@@ -1,11 +1,8 @@
 <template>
 	<div style="overflow-y: auto; display: flex">
 		<!-- 主要内容区域 -->
-		<div style="flex: 1; margin-left: 0px">
-			<a-layout>
-				<Header @onChangeCurrent="onChangeCurrent" />
-				<div style="width: 90%; margin-left: 5%; display: flex">
-					<div class="sidebar-menu">
+				<div style="width: 100%;  display: flex">
+					<div class="sidebar-menu" style="width: 10%">
 						<ul>
 							<li
 								v-for="item in menuItems"
@@ -23,10 +20,7 @@
 						<component :is="currentComponent"></component>
 					</div>
 				</div>
-			</a-layout>
-			<Footer />
 		</div>
-	</div>
 </template>
 
 <script setup>

+ 36 - 25
src/views/notLook/index.vue

@@ -1,35 +1,42 @@
 <template>
-	<a-result status="error" title="没有访问权限" sub-title="如有疑问请联系管理员">
-		<template #extra>
-			<!-- <a-button key="console" type="primary">Go Console</a-button> -->
-		</template>
-		<!-- <template #extra>
-			<a-button key="console" type="primary">Go Console</a-button>
-			<a-button key="buy">Buy Again</a-button>
-		</template> -->
-
-		<!-- <div class="desc">
-			<p style="font-size: 16px">
-				<strong>The content you submitted has the following error:</strong>
-			</p>
-			<p>
-				<close-circle-outlined :style="{ color: 'red' }" />
-				Your account has been frozen
-				<a>Thaw immediately &gt;</a>
-			</p>
-			<p>
-				<close-circle-outlined :style="{ color: 'red' }" />
-				Your account is not yet eligible to apply
-				<a>Apply Unlock &gt;</a>
-			</p>
-		</div> -->
-	</a-result>
+	<div >
+		<a-result status="error" title="没有访问权限" sub-title="如有疑问请联系管理员">
+			<template #extra>
+				<a-button key="console" type="primary" @click="goHome()">回到首页</a-button>
+			</template>
+			<!-- <template #extra>
+				<a-button key="console" type="primary">Go Console</a-button>
+				<a-button key="buy">Buy Again</a-button>
+			</template> -->
+
+			<!-- <div class="desc">
+				<p style="font-size: 16px">
+					<strong>The content you submitted has the following error:</strong>
+				</p>
+				<p>
+					<close-circle-outlined :style="{ color: 'red' }" />
+					Your account has been frozen
+					<a>Thaw immediately &gt;</a>
+				</p>
+				<p>
+					<close-circle-outlined :style="{ color: 'red' }" />
+					Your account is not yet eligible to apply
+					<a>Apply Unlock &gt;</a>
+				</p>
+			</div> -->
+		</a-result>
+	</div>
+
 </template>
 
 <script setup>
 	import { ref, onMounted } from 'vue'
 	import { CloseCircleOutlined } from '@ant-design/icons-vue'
 	import tool from '@/utils/tool'
+	import { useRoute, useRouter } from 'vue-router'
+	const router = useRouter()
+	const route = useRoute()
+
 	//发布按钮状态
 	const releaseVisible = ref(false)
 	const loading = ref(false) // 列表loading
@@ -50,6 +57,10 @@
 	// 上传资源模态框
 	const uploadModalVisible = ref(false)
 
+	const goHome = () =>{
+		router.replace('/portal')
+	}
+
 	onMounted(() => {
 		// getListData()
 	})

+ 16 - 18
src/views/portal/components/Header.vue

@@ -40,37 +40,35 @@
 		</div>
 		<div v-if="userInfo.eduIdentity == 1" style="display: flex; width: 100vw; justify-content: space-between; align-items: center">
 			<div style="display: flex; padding-left: 10%">
-				<div style="width: 120px; height: 55px; background-color: brown" />
 				<a-menu v-model:selectedKeys="current" mode="horizontal" theme="light" style="line-height: 55px">
 					<a-menu-item style="margin-left: 10px; margin-right: 10px" key="portal/resourceCenter">资源中心</a-menu-item>
 					<a-menu-item style="margin-left: 10px; margin-right: 10px" key="portal/personalResources">个人资源</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: 10px; margin-right: 10px" key="portal/courseManagement">问答管理</a-menu-item>
+					<a-menu-item style="margin-left: 10px; margin-right: 10px" key="answerManagement">问答管理</a-menu-item>
 					<a-menu-item style="margin-left: 10px; margin-right: 10px" key="classManagement">班级管理</a-menu-item>
 					<a-menu-item style="margin-left: 10px; margin-right: 10px" key="examinationManagement">考试管理</a-menu-item>
 					<a-menu-item style="margin-left: 10px; margin-right: 10px" key="questionnaireManagement">问卷管理</a-menu-item>
 					<a-menu-item style="margin-left: 10px; margin-right: 10px" key="exampaper">试题管理</a-menu-item>
+					<a-menu-item style="margin-left: 10px; margin-right: 10px" key="student/record/">考试记录</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: 10px; margin-right: 10px" key="portal/courseManagement">个人中心</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: 10px; margin-right: 10px" key="portal/courseManagement">站内信</a-menu-item>
+					<a-menu-item style="margin-left: 10px; margin-right: 10px" key="usercenter">个人中心</a-menu-item>
+					<a-menu-item style="margin-left: 10px; margin-right: 10px" key="forum">论坛</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: 10px; margin-right: 10px" key="announcementManagement">课程公告发布</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: 10px; margin-right: 10px" key="portal/courseManagement">密码找回</a-menu-item>
 				</a-menu>
 			</div>
 
-			<div class="header-right">
-				<div style="display: flex">
-					<UserOutlined :style="{ fontSize: '16px', color: '#00000083' }" />
-					<div style="width: 5px"></div>
-					<span style="font-size: 12px; color: #00000083">登录</span>
-				</div>
-				<div style="width: 20px"></div>
-				<div style="display: flex">
-					<span style="font-size: 12px; color: #00000083">注册</span>
-				</div>
-			</div>
+<!--			<div class="header-right">-->
+<!--				<div style="display: flex">-->
+<!--					<UserOutlined :style="{ fontSize: '16px', color: '#00000083' }" />-->
+<!--					<div style="width: 5px"></div>-->
+<!--					<span style="font-size: 12px; color: #00000083">登录</span>-->
+<!--				</div>-->
+<!--				<div style="width: 20px"></div>-->
+<!--				<div style="display: flex">-->
+<!--					<span style="font-size: 12px; color: #00000083">注册</span>-->
+<!--				</div>-->
+<!--			</div>-->
 		</div>
 		<div v-if="userInfo.eduIdentity == 2" class="fcbc">
 			<div class="headerBtn">

+ 39 - 53
src/views/portal/index.vue

@@ -1,70 +1,56 @@
 <template>
 	<div style="overflow-y: auto">
 		<!-- <img :src="images" style="width: 100%; height: 100%" /> -->
-		<a-layout>
-			<Header />
-			<div style="width: 71%; margin-left: 10%">
-				<!-- <BreadCrumb />
-				<ResourceCenter /> -->
-				<!-- <ResourceDetails v-if="indexType == 'resourceDetails'" ref="ResourceDetailsRef" /> -->
-			</div>
-		</a-layout>
-		<Footer />
 	</div>
 </template>
 
 <script setup>
-	import Header from './components/Header.vue'
-	import BreadCrumb from './components/BreadCrumb.vue'
-	import Footer from './components/Footer.vue'
-	import ResourceCenter from '@/views/resourceCenter/index.vue'
-	import EventBus from '@/utils/EventBus'
-	import { useRouter, useRoute } from 'vue-router'
-	const router = useRouter()
+import Header from './components/Header.vue'
+import BreadCrumb from './components/BreadCrumb.vue'
+import Footer from './components/Footer.vue'
+import ResourceCenter from '@/views/resourceCenter/index.vue'
+import EventBus from '@/utils/EventBus'
+import {useRouter, useRoute} from 'vue-router'
 
-	const indexType = ref('resourceCenter')
+const router = useRouter()
 
-	const images = ref('')
-	const ResourceDetailsRef = ref(null)
-	const onChangeCurrent = (current) => {
-		indexType.value = current
+const indexType = ref('resourceCenter')
 
-		router.push({
-			path: '/' + current
-		})
-	}
+const images = ref('')
+const ResourceDetailsRef = ref(null)
 
-	const handlerItemSidebar = (item) => {
-		// emit('handlerItemSidebar', item)
-	}
+const handlerItemSidebar = (item) => {
+	// emit('handlerItemSidebar', item)
+}
 
-	const handleOpenResourceDetails = (item) => {
-		// emit('handlerItemSidebar', item)
-		// indexType.value = 'resourceDetails'
-		// nextTick(() => {
-		// 	console.log('看看呢', ResourceDetailsRef.value, item) /
-		// 		// if (ResourceDetailsRef.value) {
-		// 		// 	ResourceDetailsRef.value.setData(item)
-		// 		// }
-		// })
-		console.log('看看呢', item)
-		router.push({
-			path: '/portal/resourceDetails',
-			query: {
-				id: item.id
-			}
-		})
-	}
-	onMounted(() => {
-		// setTimeout(() => {
-		// 	images.value = 'http://192.168.1.245:10005/education/2025/7/2/1940361083973906434.jpg'
-		// }, 10000)
+const handleOpenResourceDetails = (item) => {
+	// emit('handlerItemSidebar', item)
+	// indexType.value = 'resourceDetails'
+	// nextTick(() => {
+	// 	console.log('看看呢', ResourceDetailsRef.value, item) /
+	// 		// if (ResourceDetailsRef.value) {
+	// 		// 	ResourceDetailsRef.value.setData(item)
+	// 		// }
+	// })
+	console.log('看看呢', item)
+	router.push({
+		path: '/portal/resourceDetails',
+		query: {
+			id: item.id
+		}
 	})
+}
+onMounted(() => {
+	console.log('经过我 1 ')
+	// setTimeout(() => {
+	// 	images.value = 'http://192.168.1.245:10005/education/2025/7/2/1940361083973906434.jpg'
+	// }, 10000)
+})
 </script>
 
 <style scoped>
-	.content {
-		/* padding-left: 10%;
-		padding-right: 30%; */
-	}
+.content {
+	/* padding-left: 10%;
+	padding-right: 30%; */
+}
 </style>

+ 62 - 67
src/views/resourceCenter/index.vue

@@ -1,82 +1,77 @@
 <template>
 	<div style="overflow-y: auto">
-		<a-layout>
-			<Header  />
-			<div style="width: 71%; margin-left: 10%">
-				<ComplexChoices />
-				<div style="height: 20px"></div>
-				<a-row :gutter="16">
-					<a-col :span="18">
-						<ResourceList />
-					</a-col>
-					<a-col :span="6">
-						<SidebarRecommend @handlerItem="handlerItemSidebar" />
-						<Correlation @handlerItem="handlerItemCorrelation" />
-					</a-col>
-				</a-row>
-			</div>
-		</a-layout>
-		<Footer />
+		<ComplexChoices/>
+		<div style="height: 20px"></div>
+		<a-row :gutter="16">
+			<a-col :span="18">
+				<ResourceList/>
+			</a-col>
+			<a-col :span="6">
+				<SidebarRecommend @handlerItem="handlerItemSidebar"/>
+				<Correlation @handlerItem="handlerItemCorrelation"/>
+			</a-col>
+		</a-row>
 	</div>
 </template>
 
 <script setup>
-	import Header from '@/views/portal/components/Header.vue'
-	import BreadCrumb from '@/views/portal/components/BreadCrumb.vue'
-	import Footer from '@/views/portal/components/Footer.vue'
-	import ComplexChoices from './components/ComplexChoices.vue'
-	import ResourceList from './components/ResourceList.vue'
-	import SidebarRecommend from './components/SidebarRecommend.vue'
-	import Correlation from './components/Correlation.vue'
-	import { useRouter, useRoute } from 'vue-router'
+import Header from '@/views/portal/components/Header.vue'
+import BreadCrumb from '@/views/portal/components/BreadCrumb.vue'
+import Footer from '@/views/portal/components/Footer.vue'
+import ComplexChoices from './components/ComplexChoices.vue'
+import ResourceList from './components/ResourceList.vue'
+import SidebarRecommend from './components/SidebarRecommend.vue'
+import Correlation from './components/Correlation.vue'
+import {useRouter, useRoute} from 'vue-router'
 
-	import EventBus from '@/utils/EventBus'
+import EventBus from '@/utils/EventBus'
 
-	const router = useRouter()
-	const indexType = ref('resourceCenter')
-	const onChangeCurrent = (current) => {
-		indexType.value = current
+const router = useRouter()
+const indexType = ref('resourceCenter')
+const onChangeCurrent = (current) => {
+	indexType.value = current
 
-		router.push({
-			path: '/' + current
-		})
-	}
-	const handlerItemSidebar = (item) => {
-		// emit('handlerItemSidebar', item)
-	}
+	router.push({
+		path: '/' + current
+	})
+}
+const handlerItemSidebar = (item) => {
+	// emit('handlerItemSidebar', item)
+}
 
-	const handlerItemCorrelation = (item) => {
-		// emit('handlerItemSidebar', item)
-	}
-	const handleOpenResourceDetails = (item) => {
-		// emit('handlerItemSidebar', item)
-		// indexType.value = 'resourceDetails'
-		// nextTick(() => {
-		// 	console.log('看看呢', ResourceDetailsRef.value, item) /
-		// 		// if (ResourceDetailsRef.value) {
-		// 		// 	ResourceDetailsRef.value.setData(item)
-		// 		// }
-		// })
-		console.log('看看呢', item)
-		router.push({
-			path: '/portal/resourceDetails',
-			query: {
-				id: item.id
-			}
-		})
-	}
-	onMounted(() => {
-		// setTimeout(() => {
-		// 	images.value = 'http://192.168.1.245:10005/education/2025/7/2/1940361083973906434.jpg'
-		// }, 10000)
+const handlerItemCorrelation = (item) => {
+	// emit('handlerItemSidebar', item)
+}
+const handleOpenResourceDetails = (item) => {
+	// emit('handlerItemSidebar', item)
+	// indexType.value = 'resourceDetails'
+	// nextTick(() => {
+	// 	console.log('看看呢', ResourceDetailsRef.value, item) /
+	// 		// if (ResourceDetailsRef.value) {
+	// 		// 	ResourceDetailsRef.value.setData(item)
+	// 		// }
+	// })
+	console.log('看看呢', item)
+	router.push({
+		path: '/portal/resourceDetails',
+		query: {
+			id: item.id
+		}
 	})
-	EventBus.off('openResourceDetails', handleOpenResourceDetails)
-	EventBus.on('openResourceDetails', handleOpenResourceDetails)
+}
+onMounted(() => {
+	console.log('经过我 2 ')
+	// setTimeout(() => {
+	// 	images.value = 'http://192.168.1.245:10005/education/2025/7/2/1940361083973906434.jpg'
+	// }, 10000)
+})
+EventBus.off('openResourceDetails', handleOpenResourceDetails)
+EventBus.on('openResourceDetails', handleOpenResourceDetails)
 </script>
 
 <style scoped>
-	.content {
-		padding-left: 10%;
-		padding-right: 30%;
-	}
+.content {
+	padding-left: 10%;
+	padding-right: 30%;
+}
 </style>

+ 131 - 121
src/views/resourceDetails/components/VideoDetails.vue

@@ -1,21 +1,28 @@
 <template>
 	<div>
-		<h1>{{ resName }}</h1>
+
 		<div style="height: 25px"></div>
+		<div style="display: flex;">
+			<h1 style="display: block">{{ resName }}</h1>
+		</div>
+
 		<div class="user-info-container">
-			<div class="video-info" style="width: 850px">
-				<div
-					v-if="videoFormat == 'jpg' || videoFormat == 'bmp' || videoFormat == 'png' || videoFormat == 'jpeg'"
-					style="width: 850px; height: 350px"
-				>
-					<!-- <img :src="imgs + itemData.coverImagePath" style="width: 100%; height: 100%" /> -->
-					<!-- <img :v-lazy="imagess" style="width: 100%; height: 100%" /> -->
-					<a-image width="850px" height="350px" :src="resSrc" :preview="true" />
-					<!-- <image :src="resSrc" style="object-fit: cover" /> -->
-				</div>
-				<!-- "wmv","avi","flv","mpeg","mpg","rmvb","mov","mkv" -->
-				<div
-					v-if="
+
+
+			<div style="display: flex; width: 100%">
+				<div class="video-info" style="width: 850px">
+					<div
+						v-if="videoFormat == 'jpg' || videoFormat == 'bmp' || videoFormat == 'png' || videoFormat == 'jpeg'"
+						style="width: 850px; height: 350px"
+					>
+						<!-- <img :src="imgs + itemData.coverImagePath" style="width: 100%; height: 100%" /> -->
+						<!-- <img :v-lazy="imagess" style="width: 100%; height: 100%" /> -->
+						<a-image width="850px" height="350px" :src="resSrc" :preview="true" />
+						<!-- <image :src="resSrc" style="object-fit: cover" /> -->
+					</div>
+					<!-- "wmv","avi","flv","mpeg","mpg","rmvb","mov","mkv" -->
+					<div
+						v-if="
 						videoFormat == 'mkv' ||
 						videoFormat == 'mp4' ||
 						videoFormat == 'wmv' ||
@@ -26,13 +33,13 @@
 						videoFormat == 'rmvb' ||
 						videoFormat == 'mov'
 					"
-					style="width: 850px; height: 350px"
-				>
-					<video :src="resSrc" controls style="width: 100%; height: 100%" />
-				</div>
-				<!-- "doc","docx","ppt","pptx","xls","xlsx" -->
-				<div
-					v-if="
+						style="width: 850px; height: 350px"
+					>
+						<video :src="resSrc" controls style="width: 100%; height: 100%" />
+					</div>
+					<!-- "doc","docx","ppt","pptx","xls","xlsx" -->
+					<div
+						v-if="
 						videoFormat == 'docx' ||
 						videoFormat == 'doc' ||
 						videoFormat == 'ppt' ||
@@ -41,120 +48,122 @@
 						videoFormat == 'xlsx' ||
 						videoFormat == 'pdf'
 					"
-					style="width: 850px; height: 350px"
-				>
-					<!-- <PDF :src="resSrc" :width="850" :height="350" /> -->
-					<FilePreviewer :fileUrl="resSrc" :fileName="resName" :fileType="fileType" />
-					<!-- <a-image width="200px" height="220px" :src="pdfRes" :preview="false" @click="handleDownload(resSrc)" /> -->
-					<!-- <a-button type="primary" @click="handleDownload(resSrc)">去预览</a-button> -->
-				</div>
-				<div style="height: 20px"></div>
-				<!-- 用户信息部分 -->
-				<div class="user-info" style="display: flex; flex-direction: column">
-					<div style="display: flex; align-items: center; justify-content: space-between; width: 100%">
-						<div style="display: flex; align-items: center">
-							<div class="user-avatar"></div>
-							<div class="user-details">
-								<div class="user-name">{{ itemData.resourceCreaterUserName }}</div>
-								<div class="publish-time">{{ itemData.uploadTime }}</div>
-							</div>
-						</div>
-
-						<div style="display: flex; align-items: center" v-if="!isState">
-							<div class="metrics">
-								<div class="metric-item">
-									<span>{{ itemData.viewCount }}</span>
-									<span>播放量</span>
-								</div>
-								<div class="liene"></div>
-								<div class="metric-item">
-									<span>{{ talkNum }}</span>
-									<span>评论</span>
-								</div>
-								<div class="liene"></div>
-								<div class="metric-item">
-									<span>{{ collectNum }}</span>
-									<span>收藏</span>
+						style="width: 850px; height: 350px"
+					>
+						<!-- <PDF :src="resSrc" :width="850" :height="350" /> -->
+						<FilePreviewer :fileUrl="resSrc" :fileName="resName" :fileType="fileType" />
+						<!-- <a-image width="200px" height="220px" :src="pdfRes" :preview="false" @click="handleDownload(resSrc)" /> -->
+						<!-- <a-button type="primary" @click="handleDownload(resSrc)">去预览</a-button> -->
+					</div>
+					<div style="height: 20px"></div>
+					<!-- 用户信息部分 -->
+					<div class="user-info" style="display: flex; flex-direction: column">
+						<div style="display: flex; align-items: center; justify-content: space-between; width: 100%">
+							<div style="display: flex; align-items: center">
+								<div class="user-avatar"></div>
+								<div class="user-details">
+									<div class="user-name">{{ itemData.resourceCreaterUserName }}</div>
+									<div class="publish-time">{{ itemData.uploadTime }}</div>
 								</div>
 							</div>
-							<div style="width: 10px"></div>
-							<div class="actions">
-								<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 style="display: flex; align-items: center" v-if="!isState">
+								<div class="metrics">
+									<div class="metric-item">
+										<span>{{ itemData.viewCount }}</span>
+										<span>播放量</span>
+									</div>
+									<div class="liene"></div>
+									<div class="metric-item">
+										<span>{{ talkNum }}</span>
+										<span>评论</span>
+									</div>
+									<div class="liene"></div>
+									<div class="metric-item">
+										<span>{{ collectNum }}</span>
+										<span>收藏</span>
+									</div>
 								</div>
-								<div style="display: flex; align-items: center; cursor: pointer" @click="handlerCollection">
-									<StarOutlined v-if="starTag == false" />
-									<StarFilled v-if="starTag == true" />
-									<div style="width: 10px"></div>
-									<button class="favorite-btn">收藏资源</button>
+								<div style="width: 10px"></div>
+								<div class="actions">
+									<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="display: flex; align-items: center; cursor: pointer" @click="handlerCollection">
+										<StarOutlined v-if="starTag == false" />
+										<StarFilled v-if="starTag == true" />
+										<div style="width: 10px"></div>
+										<button class="favorite-btn">收藏资源</button>
+									</div>
 								</div>
 							</div>
 						</div>
-					</div>
-					<!-- 课程信息部分 -->
-					<div class="course-info">
+						<!-- 课程信息部分 -->
+						<div class="course-info">
 						<span>
 							{{ itemData.resourceDesc }}
 						</span>
+						</div>
 					</div>
 				</div>
-			</div>
-			<div class="resInfo">
-				<div style="display: flex; align-items: center">
-					<div class="resInfoTitile"></div>
-					<span style="display: block; font-weight: bold">资源信息</span>
-				</div>
-				<div style="display: flex; justify-content: center; align-items: center; height: 40px">
-					<span style="display: block; font-weight: bold">{{ resName }}</span>
-				</div>
-				<!-- <div style="display: flex; align-items: center">
-					<span style="font-weight: bold; margin-right: 10px">授课老师: </span>
-					<span style="display: block">{{ teacherName }}</span>
-				</div> -->
-				<div style="display: flex">
-					<span style="font-weight: bold; margin-right: 10px">所属院系: </span>
-					<span style="display: block; width: 200px">{{ department }}</span>
-				</div>
-				<!-- <div style="display: flex; align-items: center">
-					<span style="font-weight: bold; margin-right: 10px">所属专业: </span>
-					<span style="display: block">{{ major }}</span>
-				</div> -->
-				<div style="display: flex; align-items: center">
-					<span style="font-weight: bold; margin-right: 10px">资源类型: </span>
-					<span style="display: block; width: 200px">{{ courseType }}</span>
-				</div>
-				<div style="display: flex; align-items: center">
-					<span style="font-weight: bold; margin-right: 10px">资源格式: </span>
-					<span style="display: block; width: 200px">{{ videoFormat }}</span>
-				</div>
-				<!-- <div style="display: flex; align-items: center" v-if="videoFormat != 'jpg'">
-					<span style="font-weight: bold; margin-right: 10px">视频时长: </span>
-					<span style="display: block">{{ videoDuration }}</span>
-				</div> -->
-				<div style="display: flex; align-items: center">
-					<span style="font-weight: bold; margin-right: 10px">容量大小: </span>
-					<span style="display: block; width: 200px">{{ videoSize }}</span>
-				</div>
-				<div style="display: flex; align-items: center">
-					<span style="font-weight: bold; margin-right: 10px">发布时间: </span>
-					<span style="display: block; width: 200px">{{ releaseTime }}</span>
-				</div>
-				<!-- <div style="display: flex; flex-direction: column">
-					<span style="font-weight: bold; margin-right: 10px">课程介绍: </span>
+				<div class="resInfo">
+					<div style="display: flex; align-items: center">
+						<div class="resInfoTitile"></div>
+						<span style="display: block; font-weight: bold">资源信息</span>
+					</div>
+					<div style="display: flex; justify-content: center; align-items: center; height: 40px">
+						<span style="display: block; font-weight: bold">{{ resName }}</span>
+					</div>
+					<!-- <div style="display: flex; align-items: center">
+						<span style="font-weight: bold; margin-right: 10px">授课老师: </span>
+						<span style="display: block">{{ teacherName }}</span>
+					</div> -->
+					<div style="display: flex">
+						<span style="font-weight: bold; margin-right: 10px">所属院系: </span>
+						<span style="display: block; width: 200px">{{ department }}</span>
+					</div>
+					<!-- <div style="display: flex; align-items: center">
+						<span style="font-weight: bold; margin-right: 10px">所属专业: </span>
+						<span style="display: block">{{ major }}</span>
+					</div> -->
+					<div style="display: flex; align-items: center">
+						<span style="font-weight: bold; margin-right: 10px">资源类型: </span>
+						<span style="display: block; width: 200px">{{ courseType }}</span>
+					</div>
+					<div style="display: flex; align-items: center">
+						<span style="font-weight: bold; margin-right: 10px">资源格式: </span>
+						<span style="display: block; width: 200px">{{ videoFormat }}</span>
+					</div>
+					<!-- <div style="display: flex; align-items: center" v-if="videoFormat != 'jpg'">
+						<span style="font-weight: bold; margin-right: 10px">视频时长: </span>
+						<span style="display: block">{{ videoDuration }}</span>
+					</div> -->
+					<div style="display: flex; align-items: center">
+						<span style="font-weight: bold; margin-right: 10px">容量大小: </span>
+						<span style="display: block; width: 200px">{{ videoSize }}</span>
+					</div>
+					<div style="display: flex; align-items: center">
+						<span style="font-weight: bold; margin-right: 10px">发布时间: </span>
+						<span style="display: block; width: 200px">{{ releaseTime }}</span>
+					</div>
+					<!-- <div style="display: flex; flex-direction: column">
+						<span style="font-weight: bold; margin-right: 10px">课程介绍: </span>
+						<br />
+						<span style="display: block">{{ courseDescription }}</span>
+					</div> -->
 					<br />
-					<span style="display: block">{{ courseDescription }}</span>
-				</div> -->
-				<br />
-				<span>资源标签</span>
-				<div style="display: flex; width: 100%; flex-wrap: wrap">
-					<a-tag style="margin-top: 5px" v-for="tag in tags" :key="tag">{{ tag }}</a-tag>
+					<span>资源标签</span>
+					<div style="display: flex; width: 100%; flex-wrap: wrap">
+						<a-tag style="margin-top: 5px" v-for="tag in tags" :key="tag">{{ tag }}</a-tag>
+					</div>
 				</div>
 			</div>
+
 		</div>
 		<ShareDialog ref="ShareDialogRef"></ShareDialog>
 	</div>
@@ -522,6 +531,7 @@
 
 	.user-info-container {
 		display: flex;
+		flex-direction: column;
 	}
 
 	.resInfoTitile {

+ 19 - 12
src/views/resourceDetails/index.vue

@@ -1,8 +1,5 @@
 <template>
-	<div style="overflow-y: auto">
-		<a-layout>
-			<Header  />
-			<div style="width: 71%; margin-left: 10%">
+	<div style="overflow-y: auto; height: 100vh;width: 100vw">
 				<!-- <BreadCrumb /> -->
 				<VideoDetails :isState="isState" ref="VideoDetailsRef" @onGetPageCommentNew="onGetPageCommentNew" />
 				<TallList ref="tallList" v-show="!isState" />
@@ -12,9 +9,6 @@
 				</div>
 				<!-- <ResourceDetails v-if="indexType == 'resourceDetails'" ref="ResourceDetailsRef" /> -->
 			</div>
-		</a-layout>
-		<Footer />
-	</div>
 </template>
 
 <script setup>
@@ -24,17 +18,17 @@
 	import VideoDetails from './components/VideoDetails.vue'
 	import { useRoute, useRouter } from 'vue-router'
 	import TallList from './components/TallList.vue'
-	import { addViewCount, detail, add, queryList } from '@/api/portal'
+	import { addViewCount, detail, add, queryList ,isHaveAuth} from '@/api/portal'
 	import resourceAuditApi from '@/api/resourceAudit.js'
 	import EventBus from '@/utils/EventBus'
 
 	const router = useRouter()
-
+	const route = useRoute()
 	const indexType = ref('resourceCenter')
 	const itemData = ref({})
 	const tallList = ref(null)
 	const VideoDetailsRef = ref(null)
-	const route = useRoute()
+
 	const isState = ref(route.query.state || null)
 	const isAudit = ref(route.query.audit || null)
 	//     {
@@ -118,8 +112,21 @@
 	onMounted(() => {
 		const id = route.query.id
 		if (id != undefined && id != '') {
-			addViewCount({ id: id })
-			getData({ id: id })
+
+			isHaveAuth({ id: id }).then((res)=>{
+				if(res.code == 200){
+					if(res.data.isHaveAuth == 1){
+						addViewCount({ id: id })
+						getData({ id: id })
+					}else{
+						router.replace({
+							path: '/notLook'
+						})
+					}
+				}
+			})
+
+
 		}
 	})
 	defineExpose({

+ 63 - 58
src/views/student/exam/paper/edit.vue

@@ -1,7 +1,8 @@
 <template>
-	<div class="app-contain">
-		<a-row class="do-exam-title" style="background-color: #f5f5dc">
-			<a-col :span="24">
+			<div style="height: 20px"></div>
+			<div class="app-contain">
+				<a-row class="do-exam-title" style="background-color: #f5f5dc">
+					<a-col :span="24">
 				<span v-for="item in answer.answerItems" :key="item.itemOrder">
 					<a-tag
 						:color="questionDoRightTag(item.doRight)"
@@ -11,64 +12,65 @@
 						{{ item.itemOrder }}
 					</a-tag>
 				</span>
-			</a-col>
-		</a-row>
-		<a-row class="do-exam-title-hidden">
-			<a-col :span="24">
+					</a-col>
+				</a-row>
+				<a-row class="do-exam-title-hidden">
+					<a-col :span="24">
 				<span v-for="item in answer.answerItems" :key="item.itemOrder">
 					<a-tag class="do-exam-title-tag">{{ item.itemOrder }}</a-tag>
 				</span>
-			</a-col>
-		</a-row>
-		<a-layout class="app-item-contain">
-			<a-layout-header class="align-center">
-				<h1>{{ form.name }}</h1>
-				<div>
-					<span class="question-title-padding">试卷得分:{{ answer.score }}</span>
-					<span class="question-title-padding">试卷耗时:{{ formatSeconds(answer.doTime) }}</span>
-				</div>
-			</a-layout-header>
-			<a-layout-content>
-				<a-spin :spinning="formLoading">
-					<a-form :model="form">
-						<template v-for="(titleItem, index) in form.titleItems" :key="index">
-							<h3 class="question-title">{{ titleItem.name }}</h3>
-							<a-card class="exampaper-item-box" v-if="titleItem.questionItems.length !== 0">
-								<a-form-item
-									v-for="questionItem in titleItem.questionItems"
-									:key="questionItem.itemOrder"
-									:label="questionItem.itemOrder + '.'"
-									:id="'question-' + questionItem.itemOrder"
-									class="exam-question-item"
-									:label-col="{ span: 0 }"
-									:wrapper-col="{ span: 24 }"
-									:colon="false"
-								>
-									<QuestionAnswerShow
-										:qType="questionItem.questionType"
-										:question="questionItem"
-										:answer="answer.answerItems[questionItem.itemOrder - 1]"
-									/>
-									<div v-if="answer.answerItems[questionItem.itemOrder - 1].doRight === null" style="margin-top: 10px">
-										<label style="color: #e6a23c">批改:</label>
-										<a-radio-group v-model:value="answer.answerItems[questionItem.itemOrder - 1].score">
-											<a-radio v-for="item in scoreSelect(questionItem.score)" :key="item" :value="item">
-												{{ item }}
-											</a-radio>
-										</a-radio-group>
-									</div>
-								</a-form-item>
-							</a-card>
-						</template>
-						<a-row class="do-align-center">
-							<a-button type="primary" @click="submitForm">提交</a-button>
-							<a-button style="margin-left: 12px">取消</a-button>
-						</a-row>
-					</a-form>
-				</a-spin>
-			</a-layout-content>
-		</a-layout>
-	</div>
+					</a-col>
+				</a-row>
+				<a-layout class="app-item-contain">
+					<a-layout-header class="align-center">
+						<h1>{{ form.name }}</h1>
+						<div>
+							<span class="question-title-padding">试卷得分:{{ answer.score }}</span>
+							<span class="question-title-padding">试卷耗时:{{ formatSeconds(answer.doTime) }}</span>
+						</div>
+					</a-layout-header>
+					<a-layout-content>
+						<a-spin :spinning="formLoading">
+							<a-form :model="form">
+								<template v-for="(titleItem, index) in form.titleItems" :key="index">
+									<h3 class="question-title">{{ titleItem.name }}</h3>
+									<a-card class="exampaper-item-box" v-if="titleItem.questionItems.length !== 0">
+										<a-form-item
+											v-for="questionItem in titleItem.questionItems"
+											:key="questionItem.itemOrder"
+											:label="questionItem.itemOrder + '.'"
+											:id="'question-' + questionItem.itemOrder"
+											class="exam-question-item"
+											:label-col="{ span: 0 }"
+											:wrapper-col="{ span: 24 }"
+											:colon="false"
+										>
+											<QuestionAnswerShow
+												:qType="questionItem.questionType"
+												:question="questionItem"
+												:answer="answer.answerItems[questionItem.itemOrder - 1]"
+											/>
+											<div v-if="answer.answerItems[questionItem.itemOrder - 1].doRight === null" style="margin-top: 10px">
+												<label style="color: #e6a23c">批改:</label>
+												<a-radio-group v-model:value="answer.answerItems[questionItem.itemOrder - 1].score">
+													<a-radio v-for="item in scoreSelect(questionItem.score)" :key="item" :value="item">
+														{{ item }}
+													</a-radio>
+												</a-radio-group>
+											</div>
+										</a-form-item>
+									</a-card>
+								</template>
+								<a-row class="do-align-center">
+									<a-button type="primary" @click="submitForm">提交</a-button>
+									<a-button style="margin-left: 12px">取消</a-button>
+								</a-row>
+							</a-form>
+						</a-spin>
+					</a-layout-content>
+				</a-layout>
+			</div>
+
 </template>
 
 <script setup>
@@ -80,6 +82,9 @@
 	import QuestionAnswerShow from '../components/QuestionAnswerShow.vue'
 	import questionAnswerApi from '@/api/student/examPaperAnswer'
 	import '../../style.less'
+	import ResourceList from "@/views/courseCenter/components/ResourceList.vue";
+	import Footer from "@/views/portal/components/Footer.vue";
+	import Header from "@/views/portal/components/Header.vue";
 
 	const route = useRoute()
 	const router = useRouter()

+ 51 - 46
src/views/student/exam/paper/read.vue

@@ -1,7 +1,8 @@
 <template>
-	<div class="app-contain">
-		<a-row class="do-exam-title">
-			<a-col :span="24">
+			<div style="height: 20px"></div>
+			<div class="app-contain">
+				<a-row class="do-exam-title">
+					<a-col :span="24">
 				<span v-for="item in answer.answerItems" :key="item.itemOrder">
 					<a-tag
 						:color="questionDoRightTag(item.doRight)"
@@ -11,52 +12,53 @@
 						{{ item.itemOrder }}
 					</a-tag>
 				</span>
-			</a-col>
-		</a-row>
-		<a-row class="do-exam-title-hidden">
-			<a-col :span="24">
+					</a-col>
+				</a-row>
+				<a-row class="do-exam-title-hidden">
+					<a-col :span="24">
 				<span v-for="item in answer.answerItems" :key="item.itemOrder">
 					<a-tag class="do-exam-title-tag">{{ item.itemOrder }}</a-tag>
 				</span>
-			</a-col>
-		</a-row>
-		<a-layout class="app-item-contain">
-			<a-layout-header class="align-center">
-				<h1>{{ form.name }}</h1>
-				<div>
-					<span class="question-title-padding">试卷得分:{{ answer.score }}</span>
-					<span class="question-title-padding">试卷耗时:{{ formatSeconds(answer.doTime) }}</span>
-				</div>
-			</a-layout-header>
-			<a-layout-content>
-				<a-spin :spinning="formLoading">
-					<a-form :model="form">
-						<template v-for="(titleItem, index) in form.titleItems" :key="index">
-							<h3 class="question-title">{{ titleItem.name }}</h3>
-							<a-card class="exampaper-item-box" v-if="titleItem.questionItems.length !== 0">
-								<a-form-item
-									v-for="questionItem in titleItem.questionItems"
-									:key="questionItem.itemOrder"
-									:label="questionItem.itemOrder + '.'"
-									:id="'question-' + questionItem.itemOrder"
-									class="exam-question-item"
-									:label-col="{ span: 2 }"
-									:wrapper-col="{ span: 24 }"
-									:colon="false"
-								>
-									<QuestionAnswerShow
-										:qType="questionItem.questionType"
-										:question="questionItem"
-										:answer="answer.answerItems[questionItem.itemOrder - 1]"
-									/>
-								</a-form-item>
-							</a-card>
-						</template>
-					</a-form>
-				</a-spin>
-			</a-layout-content>
-		</a-layout>
-	</div>
+					</a-col>
+				</a-row>
+				<a-layout class="app-item-contain">
+					<a-layout-header class="align-center">
+						<h1>{{ form.name }}</h1>
+						<div>
+							<span class="question-title-padding">试卷得分:{{ answer.score }}</span>
+							<span class="question-title-padding">试卷耗时:{{ formatSeconds(answer.doTime) }}</span>
+						</div>
+					</a-layout-header>
+					<a-layout-content>
+						<a-spin :spinning="formLoading">
+							<a-form :model="form">
+								<template v-for="(titleItem, index) in form.titleItems" :key="index">
+									<h3 class="question-title">{{ titleItem.name }}</h3>
+									<a-card class="exampaper-item-box" v-if="titleItem.questionItems.length !== 0">
+										<a-form-item
+											v-for="questionItem in titleItem.questionItems"
+											:key="questionItem.itemOrder"
+											:label="questionItem.itemOrder + '.'"
+											:id="'question-' + questionItem.itemOrder"
+											class="exam-question-item"
+											:label-col="{ span: 2 }"
+											:wrapper-col="{ span: 24 }"
+											:colon="false"
+										>
+											<QuestionAnswerShow
+												:qType="questionItem.questionType"
+												:question="questionItem"
+												:answer="answer.answerItems[questionItem.itemOrder - 1]"
+											/>
+										</a-form-item>
+									</a-card>
+								</template>
+							</a-form>
+						</a-spin>
+					</a-layout-content>
+				</a-layout>
+			</div>
+
 </template>
 
 <script setup>
@@ -67,6 +69,9 @@
 	import examPaperAnswerApi from '@/api/student/examPaperAnswer'
 	import QuestionAnswerShow from '../components/QuestionAnswerShow.vue'
 	import '../../style.less'
+	import ResourceList from "@/views/courseCenter/components/ResourceList.vue";
+	import Footer from "@/views/portal/components/Footer.vue";
+	import Header from "@/views/portal/components/Header.vue";
 	const route = useRoute()
 	const examStore = useExamStore()
 	const { enumFormat } = examStore

+ 61 - 56
src/views/student/record/index.vue

@@ -1,61 +1,62 @@
 <template>
-	<div style="margin-top: 10px" class="app-contain">
-		<a-row :gutter="50">
-			<a-col :span="18">
-				<a-table
-					:loading="listLoading"
-					:data-source="tableData"
-					:columns="columns"
-					row-key="id"
-					:custom-row="customRow"
-					:pagination="false"
-				>
-					<template #bodyCell="{ column, record }">
-						<template v-if="column.key === 'status'">
-							<a-tag :color="statusTagFormatter(record.status)">
-								{{ statusTextFormatter(record.status) }}
-							</a-tag>
-						</template>
-						<template v-else-if="column.key === 'action'">
-							<template v-if="record.status === 1">
-								<router-link :to="{ path: '/student/edit', query: { id: record.id } }" target="_blank">
-									<a-button type="link" size="small">批改</a-button>
-								</router-link>
+			<div style="margin-top: 10px" class="app-contain">
+				<a-row :gutter="50">
+					<a-col :span="18">
+						<a-table
+							:loading="listLoading"
+							:data-source="tableData"
+							:columns="columns"
+							row-key="id"
+							:custom-row="customRow"
+							:pagination="false"
+						>
+							<template #bodyCell="{ column, record }">
+								<template v-if="column.key === 'status'">
+									<a-tag :color="statusTagFormatter(record.status)">
+										{{ statusTextFormatter(record.status) }}
+									</a-tag>
+								</template>
+								<template v-else-if="column.key === 'action'">
+									<template v-if="record.status === 1">
+										<router-link :to="{ path: '/student/edit', query: { id: record.id } }" target="_blank">
+											<a-button type="link" size="small">批改</a-button>
+										</router-link>
+									</template>
+									<template v-else-if="record.status === 2">
+										<router-link :to="{ path: '/student/read', query: { id: record.id } }" target="_blank">
+											<a-button type="link" size="small">查看试卷</a-button>
+										</router-link>
+									</template>
+								</template>
 							</template>
-							<template v-else-if="record.status === 2">
-								<router-link :to="{ path: '/student/read', query: { id: record.id } }" target="_blank">
-									<a-button type="link" size="small">查看试卷</a-button>
-								</router-link>
-							</template>
-						</template>
-					</template>
-				</a-table>
-				<a-pagination
-					v-if="total > 0"
-					:total="total"
-					:current="queryParam.pageIndex"
-					:page-size="queryParam.pageSize"
-					@change="onPageChange"
-					@showSizeChange="onPageSizeChange"
-					:show-size-changer="true"
-					:page-size-options="['10', '20', '50', '100']"
-					style="margin-top: 20px"
-				/>
-			</a-col>
-			<a-col :span="6">
-				<a-card class="record-answer-info">
-					<a-descriptions :column="1" bordered size="small">
-						<a-descriptions-item label="系统判分">{{ selectItem.systemScore }}</a-descriptions-item>
-						<a-descriptions-item label="最终得分">{{ selectItem.userScore }}</a-descriptions-item>
-						<a-descriptions-item label="试卷总分">{{ selectItem.paperScore }}</a-descriptions-item>
-						<a-descriptions-item label="正确题数">{{ selectItem.questionCorrect }}</a-descriptions-item>
-						<a-descriptions-item label="总题数">{{ selectItem.questionCount }}</a-descriptions-item>
-						<a-descriptions-item label="用时">{{ selectItem.doTime }}</a-descriptions-item>
-					</a-descriptions>
-				</a-card>
-			</a-col>
-		</a-row>
-	</div>
+						</a-table>
+						<a-pagination
+							v-if="total > 0"
+							:total="total"
+							:current="queryParam.pageIndex"
+							:page-size="queryParam.pageSize"
+							@change="onPageChange"
+							@showSizeChange="onPageSizeChange"
+							:show-size-changer="true"
+							:page-size-options="['10', '20', '50', '100']"
+							style="margin-top: 20px"
+						/>
+					</a-col>
+					<a-col :span="6">
+						<a-card class="record-answer-info">
+							<a-descriptions :column="1" bordered size="small">
+								<a-descriptions-item label="系统判分">{{ selectItem.systemScore }}</a-descriptions-item>
+								<a-descriptions-item label="最终得分">{{ selectItem.userScore }}</a-descriptions-item>
+								<a-descriptions-item label="试卷总分">{{ selectItem.paperScore }}</a-descriptions-item>
+								<a-descriptions-item label="正确题数">{{ selectItem.questionCorrect }}</a-descriptions-item>
+								<a-descriptions-item label="总题数">{{ selectItem.questionCount }}</a-descriptions-item>
+								<a-descriptions-item label="用时">{{ selectItem.doTime }}</a-descriptions-item>
+							</a-descriptions>
+						</a-card>
+					</a-col>
+				</a-row>
+			</div>
+
 </template>
 
 <script setup>
@@ -63,6 +64,10 @@
 	import { useExamStore } from '@/store/exam'
 	import examPaperAnswerApi from '@/api/student/examPaperAnswer'
 	import { parseTime } from '@/utils/exam'
+	import Footer from "@/views/portal/components/Footer.vue";
+	import Header from "@/views/portal/components/Header.vue";
+	import TallList from "@/views/resourceDetails/components/TallList.vue";
+	import VideoDetails from "@/views/resourceDetails/components/VideoDetails.vue";
 	const examStore = useExamStore()
 
 	const queryParam = reactive({

+ 29 - 28
src/views/sys/user/userCenter.vue

@@ -1,4 +1,5 @@
 <template>
+
 	<a-row :gutter="10">
 		<a-col :xs="24" :sm="24" :md="7" :lg="7" :xl="7" class="mb-3">
 			<a-card :bordered="false">
@@ -7,29 +8,29 @@
 						<a-spin size="small" :spinning="avatarLoading">
 							<img :src="userInfo.avatar" />
 						</a-spin>
-						<a @click="uploadLogo">
-							<div :class="userInfo.avatar ? 'mask' : 'mask-notImg'"><upload-outlined /></div>
-						</a>
+<!--						<a @click="uploadLogo">-->
+<!--							<div :class="userInfo.avatar ? 'mask' : 'mask-notImg'"><upload-outlined /></div>-->
+<!--						</a>-->
 					</div>
 					<div class="username">{{ userInfo.name }}</div>
 					<div class="bio">{{ userInfo.nickname }}</div>
 				</div>
 				<div class="account-center-detail">
-					<p><i class="title"></i>{{ userInfo.positionName }}</p>
+<!--					<p><i class="title"></i>{{ userInfo.positionName }}</p>-->
 					<p><i class="group"></i>{{ userInfo.orgName }}</p>
-					<p>
-						<i class="address"></i>
-						<span>{{ userInfo.homeAddress ? userInfo.homeAddress : '暂无地址' }}</span>
-					</p>
-				</div>
-				<a-divider />
-				<div class="account-center-team">
-					<div class="mb-2" v-if="userInfo.signature" style="width: 100%">
-						<a-image :src="userInfo.signature" width="100%" style="height: 120px; border: 1px solid rgb(236 236 236)" />
-					</div>
-					<a-button @click="XnSignNameRef.show()">打开签名板</a-button>
-					<XnSignName ref="XnSignNameRef" :image="userInfo.signature" @successful="signSuccess" />
+<!--					<p>-->
+<!--						<i class="address"></i>-->
+<!--						<span>{{ userInfo.homeAddress ? userInfo.homeAddress : '暂无地址' }}</span>-->
+<!--					</p>-->
 				</div>
+<!--				<a-divider />-->
+<!--				<div class="account-center-team">-->
+<!--					<div class="mb-2" v-if="userInfo.signature" style="width: 100%">-->
+<!--						<a-image :src="userInfo.signature" width="100%" style="height: 120px; border: 1px solid rgb(236 236 236)" />-->
+<!--					</div>-->
+<!--					<a-button @click="XnSignNameRef.show()">打开签名板</a-button>-->
+<!--					<XnSignName ref="XnSignNameRef" :image="userInfo.signature" @successful="signSuccess" />-->
+<!--				</div>-->
 			</a-card>
 		</a-col>
 		<a-col :xs="24" :sm="24" :md="17" :lg="17" :xl="17">
@@ -90,18 +91,18 @@
 			key: 'accountBasic',
 			tab: '基本信息'
 		},
-		{
-			key: 'organizationChart',
-			tab: '组织架构'
-		},
-		{
-			key: 'accountBind',
-			tab: '账号相关'
-		},
-		{
-			key: 'shortcutSetting',
-			tab: '快捷方式'
-		},
+		// {
+		// 	key: 'organizationChart',
+		// 	tab: '组织架构'
+		// },
+		// {
+		// 	key: 'accountBind',
+		// 	tab: '账号相关'
+		// },
+		// {
+		// 	key: 'shortcutSetting',
+		// 	tab: '快捷方式'
+		// },
 		{
 			key: 'userMessage',
 			tab: '我的消息'

+ 22 - 21
src/views/sys/user/userTab/accountBasic.vue

@@ -11,27 +11,28 @@
 			<span>{{ formData.account }}</span>
 		</a-form-item>
 		<a-form-item label="姓名:" name="name">
-			<a-input v-model:value="formData.name" placeholder="请输入姓名" allow-clear />
-		</a-form-item>
-		<a-form-item label="手机:" name="phone">
-			<a-input v-model:value="formData.phone" placeholder="请输入手机" allow-clear />
-		</a-form-item>
-		<a-form-item label="昵称:" name="nickname">
-			<a-input v-model:value="formData.nickname" placeholder="请输入昵称" allow-clear />
-		</a-form-item>
-		<a-form-item label="性别:" name="sex">
-			<a-radio-group v-model:value="formData.gender" :options="genderOptions" />
-		</a-form-item>
-		<a-form-item label="生日:" name="birthday">
-			<a-date-picker v-model:value="formData.birthday" value-format="YYYY-MM-DD" style="width: 100%" />
-		</a-form-item>
-		<a-form-item label="邮箱:" name="email">
-			<a-input v-model:value="formData.email" placeholder="请输入邮箱" allow-clear />
+<!--			<a-input v-model:value="formData.name" placeholder="请输入姓名" allow-clear />-->
+			<span>{{formData.name}}</span>
 		</a-form-item>
+<!--		<a-form-item label="手机:" name="phone">-->
+<!--			<a-input v-model:value="formData.phone" placeholder="请输入手机" allow-clear />-->
+<!--		</a-form-item>-->
+<!--		<a-form-item label="昵称:" name="nickname">-->
+<!--			<a-input v-model:value="formData.nickname" placeholder="请输入昵称" allow-clear />-->
+<!--		</a-form-item>-->
+<!--		<a-form-item label="性别:" name="sex">-->
+<!--			<a-radio-group v-model:value="formData.gender" :options="genderOptions" />-->
+<!--		</a-form-item>-->
+<!--		<a-form-item label="生日:" name="birthday">-->
+<!--			<a-date-picker v-model:value="formData.birthday" value-format="YYYY-MM-DD" style="width: 100%" />-->
+<!--		</a-form-item>-->
+<!--		<a-form-item label="邮箱:" name="email">-->
+<!--			<a-input v-model:value="formData.email" placeholder="请输入邮箱" allow-clear />-->
+<!--		</a-form-item>-->
 
-		<a-form-item :wrapper-col="{ ...layout.wrapperCol, offset: 4 }">
-			<a-button type="primary" :loading="submitLoading" @click="onSubmit">保存基本信息</a-button>
-		</a-form-item>
+<!--		<a-form-item :wrapper-col="{ ...layout.wrapperCol, offset: 4 }">-->
+<!--			<a-button type="primary" :loading="submitLoading" @click="onSubmit">保存基本信息</a-button>-->
+<!--		</a-form-item>-->
 	</a-form>
 </template>
 
@@ -50,8 +51,8 @@
 	const submitLoading = ref(false)
 	// 默认要校验的
 	const formRules = {
-		name: [required('请输入姓名')],
-		gender: [required('请选择性别')]
+		// name: [required('请输入姓名')],
+		// gender: [required('请选择性别')]
 	}
 	const genderOptions = tool.dictList('GENDER')
 	// 验证并提交数据

+ 5 - 3
src/views/sys/user/userTab/userMessage.vue

@@ -46,22 +46,24 @@
 	const columns = [
 		{
 			title: '主题',
-			dataIndex: 'subject'
+			dataIndex: 'subject',
+			width: '60px'
 		},
 		{
 			title: '发送时间',
 			dataIndex: 'createTime',
+			width: '60px',
 			sorter: true
 		},
 		{
 			title: '是否已读',
 			dataIndex: 'read',
-			width: '100px'
+			width: '60px'
 		},
 		{
 			title: '操作',
 			dataIndex: 'action',
-			width: '100px'
+			width: '60px'
 		}
 	]
 	const loadData = (parameter) => {