ソースを参照

准备打包的版本

于添 6 ヶ月 前
コミット
e50a67e270
35 ファイル変更1039 行追加94 行削除
  1. 3 2
      .env.development
  2. 1 1
      .env.production
  3. 3 3
      index.html
  4. BIN
      public/favicon.ico
  5. BIN
      public/img/logo.png
  6. 9 6
      src/App.vue
  7. 15 0
      src/api/courseOpen/index.js
  8. 13 0
      src/api/semester/index.js
  9. 1 0
      src/components/UpLoadBreakPoint/index.vue
  10. 3 3
      src/config/index.js
  11. 6 1
      src/router/portal.js
  12. 4 0
      src/router/whiteList.js
  13. 5 1
      src/views/announcementManagement/components/DialogView.vue
  14. 5 5
      src/views/announcementManagement/components/QueryView.vue
  15. 16 25
      src/views/answerManagement/components/ListView.vue
  16. 4 4
      src/views/answerManagement/components/QueryView.vue
  17. 6 6
      src/views/answerManagement/index.vue
  18. 26 1
      src/views/classManagement/components/DialogView.vue
  19. 3 3
      src/views/classManagement/components/ListView.vue
  20. 0 13
      src/views/classManagement/index.vue
  21. 0 6
      src/views/courseCenter/index.vue
  22. 4 4
      src/views/courseManagement/components/ListView.vue
  23. 247 0
      src/views/courseOpen/components/DialogView.vue
  24. 214 0
      src/views/courseOpen/components/ListView.vue
  25. 208 0
      src/views/courseOpen/components/QueryView.vue
  26. 86 0
      src/views/courseOpen/index.vue
  27. 1 1
      src/views/gen/basic.vue
  28. 4 4
      src/views/myResources/personalResources/index.vue
  29. 1 0
      src/views/portal/components/Header.vue
  30. 1 1
      src/views/portal/index.vue
  31. 1 1
      src/views/resourceCenter/components/Correlation.vue
  32. 1 1
      src/views/resourceCenter/index.vue
  33. 1 1
      src/views/resourceDetails/components/TallList.vue
  34. 146 0
      stats.html
  35. 1 1
      vite.config.js

+ 3 - 2
.env.development

@@ -2,10 +2,11 @@
 NODE_ENV = development
 
 # 标题
-VITE_TITLE = smilingFace
+VITE_TITLE = 飞行学院
 
 # 接口地址
- #VITE_API_BASEURL = http://192.168.31.80:19003
+#VITE_API_BASEURL = http://192.168.31.15:9003
+#VITE_API_BASEURL = http://192.168.31.80:19003
 VITE_API_BASEURL = http://192.168.1.245:9003
 VITE_FILEURL = http://192.168.1.245:10005/education/
 # VITE_API_BASEURL = http://192.168.31.14:9003

+ 1 - 1
.env.production

@@ -2,7 +2,7 @@
 NODE_ENV = production
 
 # 标题
-VITE_TITLE = smilingFace
+VITE_TITLE = 飞行学院
 
 # 接口地址
 VITE_API_BASEURL = http://192.168.1.245:19003

+ 3 - 3
index.html

@@ -7,7 +7,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="/favicon.ico">
-    <title>smilingFace</title>
+    <title>飞行学院</title>
     <style>
         .dot {
             animation: antRotate 1.2s infinite linear;
@@ -137,10 +137,10 @@
                 <img src="/img/logo.png" />
             </div>
             <div><span class="dot dot-spin"><i></i><i></i><i></i><i></i></span></div>
-            <div class="app-loading__title">smilingFace</div>
+            <div class="app-loading__title">飞行学院</div>
         </div>
     </div>
     <script type="module" src="/src/main.js"></script>
 </body>
 
-</html>
+</html>

BIN
public/favicon.ico


BIN
public/img/logo.png


+ 9 - 6
src/App.vue

@@ -1,17 +1,20 @@
 <template>
-	<a-config-provider :locale="locale">
+	<a-config-provider :locale="locale" >
 		<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 style="width: 100vw; overflow-y: scroll;height: 100%">
+					<div style="width: 71%; margin-left: 10%;">
+						<transition name="fade" mode="out-in">
+							<router-view></router-view>
+						</transition>
+					</div>
 				</div>
 
+<!--				<Footer/>-->
 			</a-layout>
-	<!--		<Footer/>-->
+
 		</div>
 	</a-config-provider>
 <!--	<a-config-provider :locale="locale">-->

+ 15 - 0
src/api/courseOpen/index.js

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

+ 13 - 0
src/api/semester/index.js

@@ -0,0 +1,13 @@
+import { baseRequest } from '@/utils/request'
+import {moduleRequest} from "@/utils/reSourceRequest";
+
+const request = moduleRequest(`/api/webapp/`)
+//学期下拉列表
+export let downList = (p) => request('disk/semester/downList', p, 'get')
+export let userAllList = (p) => request('bus/user/allList', p, 'get')
+export let gradesQueryList = (p) => request('disk/grades/allList', p, 'get')
+export let courseinfoAllList = (p) => request('disk/courseinfo/allList', p, 'get')
+
+// 上课时间周期,调用字典列表接口(/dev/dict/list),传入parentDictValue=COURSE_OPEN_WEEK_TYPE,返回数据中dictLabel是值,dictValue是键
+//单双周支持,调用字典列表接口(/dev/dict/list),传入parentDictValue=COURSE_OPEN_SCHEDULE_TIME,返回数据中dictLabel是值,dictValue是键
+//状态,调用字典列表接口(/dev/dict/list),传入parentDictValue=COURSE_OPEN_STATUS,返回数据中dictLabel是值,dictValue是键

+ 1 - 0
src/components/UpLoadBreakPoint/index.vue

@@ -336,6 +336,7 @@
 		let md5List = []
 		let element = {
 			md5: uploadFile.md5,
+			size: uploadFile.size,
 			chunkSize: uploadFile.chunks.length,
 			fileName: uploadFile.name,
 			fileSuffix: uploadFile.fileSuffix

+ 3 - 3
src/config/index.js

@@ -1,4 +1,4 @@
- 
+
 const DEFAULT_CONFIG = {
 	// 首页地址
 	DASHBOARD_URL: '/index',
@@ -76,11 +76,11 @@ const DEFAULT_CONFIG = {
 		// 后端接口地址
 		SNOWY_SYS_API_URL: import.meta.env.VITE_API_BASEURL,
 		// 系统名称
-		SNOWY_SYS_NAME: 'smilingFace',
+		SNOWY_SYS_NAME: '飞行学院',
 		// 版本
 		SNOWY_SYS_VERSION: '2.0',
 		// 版权
-		SNOWY_SYS_COPYRIGHT: 'smilingFace',
+		SNOWY_SYS_COPYRIGHT: '飞行学院',
 		// 版权跳转URL
 		SNOWY_SYS_COPYRIGHT_URL: '',
 		// 默认文件存储

+ 6 - 1
src/router/portal.js

@@ -25,7 +25,7 @@ const portal = [
 	{
 		name: 'portal',
 		path: '/',
-		component: () => import('@/views/portal/index.vue')
+		component: () => import('@/views/portal/resourceCenter/index.vue')
 	},
 	{
 		name: 'resourceCenter',
@@ -103,6 +103,11 @@ const portal = [
 		name: 'userfileconvert',
 		path: '/userfileconvert',
 		component: () => import('@/views/userfileconvert/index.vue'),
+	},
+	{
+		name: 'courseOpen',
+		path: '/courseOpen',
+		component: () => import('@/views/courseOpen/index.vue'),
 	}
 
 ]

+ 4 - 0
src/router/whiteList.js

@@ -162,6 +162,10 @@ const constRouters = [
 		path: '/answerManagement',
 		component: () => import('@/views/answerManagement/index.vue')
 	},
+	{
+		path: '/courseOpen',
+		component: () => import('@/views/courseOpen/index.vue')
+	},
 	// {
 	// 	path: '/answerManagement',
 	// 	component: () => import('@/views/exm/answerManagement/index.vue')

+ 5 - 1
src/views/announcementManagement/components/DialogView.vue

@@ -1,5 +1,5 @@
 <template>
-	<a-modal v-model:visible="visible" title="上传" @ok="handleOk">
+	<a-modal v-model:visible="visible" :title="title" @ok="handleOk">
 		<a-form
 			:model="formState"
 			:rules="rules"
@@ -29,6 +29,8 @@ const majorIdName = ref([]) //院系回显
 const majorOptions = ref([]) //专业
 const formRef = ref() //专业
 const mode = ref('add') //专业
+const title = ref('添加') //专业
+
 import {addItem, detail, editItem} from '@/api/notice'
 
 const visible = ref(false)
@@ -56,10 +58,12 @@ const open = () => {
 
 	visible.value = true
 	mode.value = 'add'
+	title.value = '添加'
 }
 const edit = (item) => {
 	visible.value = true
 	mode.value = 'edit'
+	title.value = '编辑'
 	console.log('编辑内容',item)
 
 

+ 5 - 5
src/views/announcementManagement/components/QueryView.vue

@@ -2,12 +2,12 @@
 	<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 label="" style="width: 100%">
+					<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>

+ 16 - 25
src/views/answerManagement/components/ListView.vue

@@ -10,25 +10,14 @@
 		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 === 'haveAnswer'">
+				<span >{{ text == 1 ? '是' : '否'}}</span>
+			</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-button v-if="record.haveAnswer == 1" size="small" @click="handleEdit(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)">确定
@@ -75,7 +64,7 @@ const formState = ref({
 }) // 列表loading
 const columns = [
 	{
-		title: '问答名称',
+		title: '课时名称',
 		dataIndex: 'hourIdName',
 		sorter: true,
 		width: '15%'
@@ -92,12 +81,12 @@ const columns = [
 		sorter: true,
 		width: '15%'
 	},
-	// {
-	// 	title: '发布时间',
-	// 	dataIndex: 'createTime',
-	// 	sorter: true,
-	// 	width: '12%'
-	// },
+	{
+		title: '是否回复',
+		dataIndex: 'haveAnswer',
+		sorter: true,
+		width: '12%'
+	},
 	{
 		title: '操作',
 		dataIndex: 'action',
@@ -169,8 +158,10 @@ const handleDelete = (record) => {
 }
 const getList = () => {
 	console.log('获取列表 getList')
-
-	list({...pagination.value}).then((data) => {
+	let tempData = {
+		eduIdentity : 1
+	}
+	list({...pagination.value}, {...tempData}).then((data) => {
 		if (data.code == 200) {
 			console.log('获取列表 新数组', data.data.records)
 			dataSources.value = []

+ 4 - 4
src/views/answerManagement/components/QueryView.vue

@@ -2,12 +2,12 @@
 	<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-form-item label="" style="width: 100%">
 					<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-item label="" style="width: 50%">-->
+<!--					<a-range-picker 	v-model:value="formState.time" allowClear />-->
+<!--				</a-form-item>-->
 			</a-form>
 		</div>
 		<div>

+ 6 - 6
src/views/answerManagement/index.vue

@@ -2,12 +2,12 @@
 	<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>
+<!--				<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>

+ 26 - 1
src/views/classManagement/components/DialogView.vue

@@ -1,5 +1,5 @@
 <template>
-		<a-modal v-model:visible="visible" title="上传" @ok="handleOk">
+		<a-modal v-model:visible="visible" :title="title" @ok="handleOk">
 			<a-form
 				:model="formState"
 				:rules="rules"
@@ -37,6 +37,14 @@
 						placeholder="请选择专业"
 					/>
 				</a-form-item>
+<!--				<a-form-item label="学期" name="semester">-->
+<!--					<a-select-->
+<!--						v-model:value="formState.semester"-->
+<!--						:fieldNames="{ label: 'name', value: 'id' }"-->
+<!--						:options="semesterOptions"-->
+<!--						placeholder="请选择学期"-->
+<!--					/>-->
+<!--				</a-form-item>-->
 
 
 			</a-form>
@@ -45,11 +53,14 @@
 <script setup>
 import {reactive, ref} from 'vue'
 	import resourceAuditApi from '@/api/resourceAudit.js'
+	import { downList } from '@/api/semester/index.js'
 	const collegeMajorOptions = ref([]) //院系
 	const majorIdName = ref([]) //院系回显
 	const majorOptions = ref([]) //专业
+	const semesterOptions = ref([]) //专业
 	const formRef = ref() //专业
 	const mode = ref('add') //专业
+	const title = ref('添加') //专业
 	import {addItem,detail,editItem} from '@/api/grades'
 	const visible = ref(false)
 const emit = defineEmits([ "handleAddItem" ])
@@ -77,10 +88,12 @@ watch(
 
 		visible.value = true
 		mode.value = 'add'
+		title.value = '添加'
 	}
 const edit = (item) => {
 	visible.value = true
 	mode.value = 'edit'
+	title.value = '编辑'
 	console.log('编辑内容',item)
 
 
@@ -127,6 +140,17 @@ const edit = (item) => {
 				console.log(err)
 			})
 	}
+	const getSemesterSelector = () => {
+
+		console.log('对象内容')
+		downList().then((res) => {
+				console.log(res.data, '获取学期')
+			semesterOptions.value = res.data
+			})
+			.catch((err) => {
+				console.log(err)
+			})
+	}
 const changeCollegeMajor = (value, selectedOptions) => {
 	console.log('Selected:', value, selectedOptions)
 	if (!value) {
@@ -164,6 +188,7 @@ const getCollegeMajor = (id) => {
 }
 	onMounted( ()=>{
 		getOrgTreeSelector()
+		// getSemesterSelector()
 	})
 
 	defineExpose({ open ,edit})

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

@@ -67,7 +67,7 @@ const columns = [
 		title: '班级名称',
 		dataIndex: 'gradesName',
 		sorter: true,
-		width: '15%'
+		width: '12%'
 	},
 	{
 		title: '学院',
@@ -79,13 +79,13 @@ const columns = [
 		title: '专业',
 		dataIndex: 'majoreName',
 		sorter: true,
-		width: '15%'
+		width: '8%'
 	},
 	{
 		title: '发布时间',
 		dataIndex: 'createTime',
 		sorter: true,
-		width: '12%'
+		width: '10%'
 	},
 	{
 		title: '操作',

+ 0 - 13
src/views/classManagement/index.vue

@@ -70,22 +70,9 @@
 
 		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()

+ 0 - 6
src/views/courseCenter/index.vue

@@ -1,14 +1,8 @@
 <template>
 	<div style="overflow-y: auto">
-		<a-layout>
-			<Header  />
-			<div style="width: 71%; margin-left: 10%">
 				<div style="height: 20px"></div>
 				<ResourceList />
 			</div>
-		</a-layout>
-		<Footer />
-	</div>
 </template>
 
 <script setup>

+ 4 - 4
src/views/courseManagement/components/ListView.vue

@@ -77,19 +77,19 @@ const columns = [
 		title: '课程名称',
 		dataIndex: 'courseName',
 		sorter: true,
-		width: '15%'
+		width: '12%'
 	},
 	{
 		title: '状态',
 		dataIndex: 'putawayStatusName',
 		sorter: true,
-		width: '10%'
+		width: '5%'
 	},
 	{
 		title: '院系',
 		dataIndex: 'collegeTwoIdName',
 		sorter: true,
-		width: '15%'
+		width: '8%'
 	},
 	{
 		title: '课程类型',
@@ -107,7 +107,7 @@ const columns = [
 		title: '发布时间',
 		dataIndex: 'publishTime',
 		sorter: true,
-		width: '12%'
+		width: '10%'
 	},
 	{
 		title: '操作',

+ 247 - 0
src/views/courseOpen/components/DialogView.vue

@@ -0,0 +1,247 @@
+<template>
+		<a-modal v-model:visible="visible" :title="title" @ok="handleOk">
+			<a-form
+				:model="formState"
+				:rules="rules"
+				ref="formRef"
+				layout="horizontal"
+				:label-col="{ span: 7 }"
+				:wrapper-col="{ span: 12 }"
+			>
+				<a-form-item label="教室名称" name="room">
+					<a-input v-model:value="formState.room" placeholder="输入教室名称" />
+				</a-form-item>
+
+				<a-form-item label="老师" name="teacherId">
+					<a-select
+						v-model:value="formState.teacherId"
+						:fieldNames="{ label: 'name', value: 'id' }"
+						:options="userAllListOptions"
+						placeholder="请选择老师"
+						@change="changeCollegeMajor"
+					/>
+				</a-form-item>
+
+				<a-form-item label="班级" name="gradesId">
+					<a-select
+						v-model:value="formState.gradesId"
+						:fieldNames="{ label: 'gradesName', value: 'gradesId' }"
+						:options="gradesQueryListOptions"
+						placeholder="请选择班级"
+						@change="changeCollegeMajor"
+					/>
+				</a-form-item>
+
+				<a-form-item label="课程" name="courseId">
+					<a-select
+						v-model:value="formState.courseId"
+						:fieldNames="{ label: 'courseName', value: 'courseName' }"
+						:options="courseinfoAllListOptions"
+						placeholder="请选择课程"
+						@change="changeCollegeMajor"
+					/>
+				</a-form-item>
+
+				<a-form-item label="学期" name="semesterId">
+					<a-select
+						v-model:value="formState.semesterId"
+						:fieldNames="{ label: 'name', value: 'id' }"
+						:options="downListOptions"
+						placeholder="请选择学期"
+						@change="changeCollegeMajor"
+					/>
+				</a-form-item>
+
+			</a-form>
+		</a-modal>
+</template>
+<script setup>
+import {reactive, ref} from 'vue'
+	import resourceAuditApi from '@/api/resourceAudit.js'
+	import { downList ,userAllList,gradesQueryList,courseinfoAllList,} from '@/api/semester/index.js'
+	const collegeMajorOptions = ref([]) //院系
+	const majorIdName = ref([]) //院系回显
+	const majorOptions = ref([]) //专业
+	const semesterOptions = ref([]) //专业
+
+	const downListOptions = ref([]) //专业
+	const userAllListOptions = ref([]) //专业
+	const gradesQueryListOptions = ref([]) //专业
+	const courseinfoAllListOptions = ref([]) //专业
+
+
+	const formRef = ref() //专业
+	const mode = ref('add') //专业
+	const title = ref('添加') //专业
+	import {addItem,detail,editItem} from '@/api/grades'
+	const visible = ref(false)
+const emit = defineEmits([ "handleAddItem" ])
+	const formState = reactive({
+		room: undefined,
+		teacherId: undefined,
+		gradesId: undefined,
+		courseId: undefined,
+		semesterId: undefined,
+	})
+	const rules = {
+		room: [{ required: true, message: '请输入教室名称', trigger: 'blur' }],
+		teacherId: [{ required: true, message: '请选择老师', trigger: 'change' }],
+		gradesId: [{ required: true, message: '请选择班级', trigger: 'change' }],
+		courseId: [{ required: true, message: '请选择课程', trigger: 'change' }],
+		semesterId: [{ required: true, message: '请选择学期', trigger: 'change' }],
+	}
+
+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'
+		title.value = '添加'
+	}
+const edit = (item) => {
+	visible.value = true
+	mode.value = 'edit'
+	title.value = '修改'
+	console.log('编辑内容',item)
+
+
+	detail({gradesId : item.gradesId}).then((res)=>{
+		if(res.code ==200){
+			formState.gradesId = item.gradesId
+			formState.gradesName = res.data.gradesName
+			formState.collegeId = res.data.collegeId
+			formState.majorId = res.data.majorId+""
+
+			changeCollegeMajor(formState.collegeId)
+		}
+	})
+
+}
+	const handleOk = (e) => {
+		formRef.value.validate().then(()=>{
+			let json = JSON.parse(JSON.stringify(formState))
+
+
+				if (mode.value =='add'){
+					addItem(json).then((res)=>{
+						emit("handleAddItem")
+						visible.value = false
+					})
+				}
+			if (mode.value =='edit'){
+				editItem(json).then((res)=>{
+					emit("handleAddItem")
+					visible.value = false
+				})
+			}
+		})
+		// console.logckPoint.value = false
+	}
+	const getOrgTreeSelector = () => {
+		resourceAuditApi
+			.orgList()
+			.then((res) => {
+				console.log(res.data, '获取学院')
+				collegeMajorOptions.value = res.data
+			})
+			.catch((err) => {
+				console.log(err)
+			})
+	}
+	const getSemesterSelector = () => {
+
+		console.log('对象内容')
+		downList().then((res) => {
+				console.log(res.data, '获取学期')
+			semesterOptions.value = res.data
+			})
+			.catch((err) => {
+				console.log(err)
+			})
+	}
+const changeCollegeMajor = (value, selectedOptions) => {
+	console.log('Selected:', value, selectedOptions)
+	// if (!value) {
+	// 	formState.collegeId = undefined
+	// 	// majorIdName.value = ''
+	// 	return false
+	// }
+	// formState.majorId = undefined
+	// majorIdName.value = selectedOptions.map((it) => it.name).join('/')
+	// formState.collegeId = value[0] || null
+	// formState.collegeTwoId = value[1] || null
+	// formState.collegeThreeId = value[2] || null
+	// if (selectedOptions.length) {
+	// 获取选中的最后一级
+	// const lastSelected = selectedOptions[selectedOptions.length - 1]
+	// formState.selectedCollegeMajor = {
+	// 	id: lastSelected.id,
+	// 	name: lastSelected.name,
+	// 	fullPath: selectedOptions.map((opt) => opt.name).join(' / ')
+	// }
+	// console.log(formState.collegeTwoId, '最后一级id')
+	// getCollegeMajor(formState.collegeId)
+	// }
+}
+const getCollegeMajor = (id) => {
+	resourceAuditApi
+		.zyselect({ collegeId: id })
+		.then((res) => {
+			console.log(res.data, '专业下拉数据',formState)
+			majorOptions.value = res.data
+		})
+		.catch((err) => {
+			console.log(err)
+		})
+}
+	onMounted( ()=>{
+		getOrgTreeSelector()
+		// getSemesterSelector()
+		getPullDara()
+	})
+const getPullDara = () => {
+	downList()
+		.then((res) => {
+			console.log(res.data, '专业下拉数据',formState)
+			downListOptions.value = res.data
+		})
+		.catch((err) => {
+			console.log(err)
+		})
+	userAllList()
+		.then((res) => {
+			console.log(res.data, '专业下拉数据',formState)
+			userAllListOptions.value = res.data
+		})
+		.catch((err) => {
+			console.log(err)
+		})
+	gradesQueryList()
+		.then((res) => {
+			console.log(res.data, '专业下拉数据',formState)
+			gradesQueryListOptions.value = res.data
+		})
+		.catch((err) => {
+			console.log(err)
+		})
+	courseinfoAllList()
+		.then((res) => {
+			console.log(res.data, '专业下拉数据',formState)
+			courseinfoAllListOptions.value = res.data
+		})
+		.catch((err) => {
+			console.log(err)
+		})
+}
+
+
+	defineExpose({ open ,edit})
+</script>

+ 214 - 0
src/views/courseOpen/components/ListView.vue

@@ -0,0 +1,214 @@
+<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 === 'publishTime'">{{ formatTimestamp(text) }}</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 {list} from '@/api/courseopen'
+import {useRouter} from 'vue-router'
+
+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: 'gradesName',
+		sorter: true,
+		width: '12%'
+	},
+	{
+		title: '学院',
+		dataIndex: 'collegeName',
+		sorter: true,
+		width: '10%'
+	},
+	{
+		title: '专业',
+		dataIndex: 'majoreName',
+		sorter: true,
+		width: '8%'
+	},
+	{
+		title: '发布时间',
+		dataIndex: 'createTime',
+		sorter: true,
+		width: '10%'
+	},
+	{
+		title: '操作',
+		dataIndex: 'action',
+		sorter: true,
+		width: '10%'
+	}
+]
+// tool.formatTimestamp()
+
+const formatTimestamp = (time) => {
+	return tool.formatTimestamp(time)
+}
+const total = ref(0)
+const pagination = ref({
+	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>

+ 208 - 0
src/views/courseOpen/components/QueryView.vue

@@ -0,0 +1,208 @@
+<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: 300px">
+					<a-input v-model:value="formState.gradesName" placeholder="请输入班级名称" allowClear />
+				</a-form-item>
+				<a-form-item label="" style="width: 300px">
+<!--					<a-cascader-->
+<!--						v-model:value="formState.loacl"-->
+<!--						:options="options"-->
+<!--						placeholder="选择院校"-->
+<!--						change-on-select-->
+<!--						allowClear-->
+<!--						:field-names="{ label: 'name', value: 'id', children: 'children' }"-->
+<!--					/>-->
+					<a-select
+						v-model:value="formState.collegeId"
+						:fieldNames="{ label: 'name', value: 'id' }"
+						:options="collegeMajorOptions"
+						placeholder="请选择院系"
+						allowClear
+					/>
+				</a-form-item>
+<!--				<a-form-item label="" style="width: 20%">-->
+<!--&lt;!&ndash;					<a-input v-model:value="formState.type" placeholder="选择课程类型" allowClear />&ndash;&gt;-->
+<!--					<a-select-->
+<!--						ref="select"-->
+<!--						placeholder="选择课程类型"-->
+<!--						v-model:value="formState.courseType"-->
+<!--						:fieldNames="{ label: 'dictLabel', value: 'dictValue' }"-->
+<!--						:options="COURSE_TYPE"-->
+<!--						allowClear-->
+<!--					></a-select>-->
+<!--				</a-form-item>-->
+<!--				<a-form-item label="" style="width: 30%">-->
+<!--					<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'
+	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({
+		gradesName: undefined,
+		collegeId: undefined,
+		majorId: undefined,
+		courseType: 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)
+		for (let i = 0; i < newJson.loacl.length; i++) {
+			let item = newJson.loacl[i]
+			if(i == 0){
+				newJson.collegeId = item
+			}
+			if(i == 1){
+				newJson.collegeTwoId = item
+			}
+			if(i == 2){
+				newJson.collegeThreeId = item
+			}
+		}
+		newJson.loacl = undefined
+		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>

+ 86 - 0
src/views/courseOpen/index.vue

@@ -0,0 +1,86 @@
+<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 = () => {
+		console.log('新建课程111')
+		// 在这里添加新建课程的逻辑
+		dialogViewRef.value.open()
+
+		// router.push({
+		// 	path: '/portal/courseAdd'
+		// })
+	}
+	const handleAddItem = () => {
+		console.log('新建课程111')
+		// 在这里添加新建课程的逻辑
+		listViewRef.value.getList()
+
+		// router.push({
+		// 	path: '/portal/courseAdd'
+		// })
+	}
+	const handlerSearch = (data) => {
+		console.log('新建课程')
+		// 在这里添加新建课程的逻辑
+		listViewRef.value.setList(data)
+	}
+	const handleEdit = (item) => {
+		// router.push({
+		// 	path: '/portal/courseAdd',
+		// 	query: {
+		// 		id: item.courseId
+		// 	}
+		// })
+
+		dialogViewRef.value.edit(item)
+	}
+	//发布确定
+
+	// 上传资源模态框
+
+	onMounted(() => {
+		// getListData()
+	})
+</script>
+
+<style scoped>
+	.desc p {
+		margin-bottom: 1em;
+	}
+</style>

+ 1 - 1
src/views/gen/basic.vue

@@ -359,7 +359,7 @@
 						dbsName: 'master',
 						subDatabase: 'N',
 						pluginName: 'snowy-plugin-biz',
-						packageName: 'smilingFace',
+						packageName: '飞行学院',
 						moduleName: 'biz',
 						tablePrefix: 'Y',
 						generateType: 'ZIP',

+ 4 - 4
src/views/myResources/personalResources/index.vue

@@ -1,8 +1,8 @@
 <template>
-	<div style="overflow-y: auto; display: flex">
+	<div style="overflow-y: auto; display: flex;height: 100vh">
 		<!-- 主要内容区域 -->
 				<div style="width: 100%;  display: flex">
-					<div class="sidebar-menu" style="width: 10%">
+					<div class="sidebar-menu" style="width: 15%">
 						<ul>
 							<li
 								v-for="item in menuItems"
@@ -16,7 +16,7 @@
 							</li>
 						</ul>
 					</div>
-					<div style="width: 90%">
+					<div style="width: 88%">
 						<component :is="currentComponent"></component>
 					</div>
 				</div>
@@ -189,7 +189,7 @@
 	}
 	.sidebar-menu {
 		flex: 1;
-		background-color: #ffff;
+		//background-color: #ffff;
 		color: #0000007c;
 	}
 

+ 1 - 0
src/views/portal/components/Header.vue

@@ -56,6 +56,7 @@
 <!--					<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="userfileconvert">资源转换</a-menu-item>
+<!--					<a-menu-item style="margin-left: 10px; margin-right: 10px" key="courseOpen">课程开课</a-menu-item>-->
 				</a-menu>
 			</div>
 

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

@@ -1,5 +1,5 @@
 <template>
-	<div style="overflow-y: auto">
+	<div style="overflow-y: auto;">
 		<!-- <img :src="images" style="width: 100%; height: 100%" /> -->
 	</div>
 </template>

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

@@ -1,5 +1,5 @@
 <template>
-	<div>
+	<div style="margin-bottom: 50px">
 		<div class="recommend-container">
 			<h3>相关课程</h3>
 			<div v-for="(item, index) in recommendations" :key="index" class="recommend-item" @click="handlerItem(item)">

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

@@ -1,5 +1,5 @@
 <template>
-	<div style="overflow-y: auto">
+	<div style="height: 100vh">
 		<ComplexChoices/>
 		<div style="height: 20px"></div>
 		<a-row :gutter="16">

+ 1 - 1
src/views/resourceDetails/components/TallList.vue

@@ -86,7 +86,7 @@
 			</div>
 		</div>
 
-		<div class="equalList">
+		<div class="equalList" style="margin-bottom: 50px">
 			<div style="display: flex; align-items: center">
 				<div class="resInfoTitile"></div>
 				<span style="font-size: 14px; font-weight: bold">同类型资源</span>

ファイルの差分が大きいため隠しています
+ 146 - 0
stats.html


+ 1 - 1
vite.config.js

@@ -33,7 +33,6 @@ const removeModulePreloadPlugin = (keys) => {
 
 export default defineConfig(({ command, mode }) => {
 	const envConfig = loadEnv(mode, './')
-
 	const alias = {
 		'~': `${resolve(__dirname, './')}`,
 		'@/': `${resolve(__dirname, 'src')}/`
@@ -44,6 +43,7 @@ export default defineConfig(({ command, mode }) => {
 			proxy: {
 				'/api': {
 					target: 'http://192.168.1.245:9003',
+					// target: 'http://192.168.31.15:9003',
 					ws: false,
 					changeOrigin: true
 					// rewrite: (path) => path.replace(/^\/api/, '')

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません