第二次更新

youhang20021127 4 months ago
parent e9dcea13a7
commit f989d5c7b8
  1. 8
      .idea/.gitignore
  2. 9
      .idea/knowledge.iml
  3. 6
      .idea/misc.xml
  4. 8
      .idea/modules.xml
  5. 6
      .idea/vcs.xml
  6. 5
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/.env.development
  7. 3
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/.env.production
  8. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/.env.test
  9. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/.eslintignore
  10. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/.eslintrc.cjs
  11. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/.gitignore
  12. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/.prettierignore
  13. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/.prettierrc.json
  14. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/.stylelintignore
  15. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/.stylelintrc.cjs
  16. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/.vscode/extensions.json
  17. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/README.md
  18. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/dist.zip
  19. 1
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/index.html
  20. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/package.json
  21. 7474
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/pnpm-lock.yaml
  22. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/public/data.json
  23. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/public/vite.svg
  24. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/scripts/preinstall.js
  25. 2
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/App.vue
  26. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/Layout/footer/index.vue
  27. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/Layout/index.vue
  28. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/Layout/main/index.vue
  29. 47
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/Layout/tabbar/index.vue
  30. 10
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/api/configuration.ts
  31. 9
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/api/course.ts
  32. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/api/login.ts
  33. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/api/news.ts
  34. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/api/types/courseType.ts
  35. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/PPT.svg
  36. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/Praise.svg
  37. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/PraiseFilled.svg
  38. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/Star.svg
  39. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/StarFilled.svg
  40. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/copyright.svg
  41. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/exit-full.svg
  42. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/full-screen.svg
  43. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/home.svg
  44. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/loading.svg
  45. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/lock.svg
  46. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/logout.svg
  47. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/love.svg
  48. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/phone.svg
  49. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/refresh.svg
  50. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/welcome.svg
  51. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/六边形2号.svg
  52. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/博士帽.svg
  53. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/排序.svg
  54. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/文本.svg
  55. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/案例.svg
  56. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/测试.svg
  57. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/知识点.svg
  58. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/简介.svg
  59. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/icons/视频.svg
  60. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/images/LOGO.png
  61. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/images/LOGO2.png
  62. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/images/banner2.png
  63. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/images/banner3.jpg
  64. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/images/banner4.jpg
  65. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/images/crous-card.png
  66. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/images/default.png
  67. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/images/jinglingtu.png
  68. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/images/kcfm.jpg
  69. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/videos/920b6703c5f95b9ff774f27abf5d4f29.mp4
  70. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/assets/vue.svg
  71. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/components/SvgIcon/index.vue
  72. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/components/index.ts
  73. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/main.ts
  74. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/permissions.ts
  75. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/router/index.ts
  76. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/router/module/constRouter/index.ts
  77. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/store/index.ts
  78. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/store/module/adminInfo.ts
  79. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/store/module/editAtlas.ts
  80. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/store/module/learnPath.ts
  81. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/store/module/setting.ts
  82. 38
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/store/module/user.ts
  83. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/styles/index.scss
  84. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/styles/reset.scss
  85. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/styles/variable.scss
  86. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/utils/commen.js
  87. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/utils/filters.ts
  88. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/utils/rem.js
  89. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/utils/requset.ts
  90. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/utils/test.js
  91. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/views/404/index.vue
  92. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/views/course/components/KnowledgeGraph.vue
  93. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/views/course/components/StuList.vue
  94. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/views/course/components/atlasUi.vue
  95. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/views/course/components/courseTree copy.vue
  96. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/views/course/components/courseTree.vue
  97. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/views/course/components/lookResourceUi.vue
  98. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/views/course/index copy.vue
  99. 167
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/views/course/index.vue
  100. 0
      Teaching_integration_platform_template-develoop/teaching_integration_platform_template/src/views/course/spritetext.js
  101. Some files were not shown because too many files have changed in this diff Show More

8
.idea/.gitignore vendored

@ -1,8 +0,0 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/knowledge.iml" filepath="$PROJECT_DIR$/.idea/knowledge.iml" />
</modules>
</component>
</project>

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

@ -0,0 +1,5 @@
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
NODE_ENV = 'development'
VITE_APP_TITLE = '教学一体化平台'
VITE_APP_BASE_API = 'http://39.106.16.162:8080'
# VITE_APP_BASE_API = 'http://127.0.0.1:8080'

@ -0,0 +1,3 @@
NODE_ENV = 'production'
VITE_APP_TITLE = '教学一体化平台'
# VITE_APP_BASE_API = '/api'

@ -4,7 +4,6 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> <link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link href='https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css' rel='stylesheet'>
<title>Vite + Vue + TS</title> <title>Vite + Vue + TS</title>
</head> </head>
<body> <body>

@ -3,7 +3,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { } from 'vue' import {} from 'vue'
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

@ -12,12 +12,11 @@
v-show="!item.meta.hidden" @click="goToRouter(item, index)" :key="item.path"> v-show="!item.meta.hidden" @click="goToRouter(item, index)" :key="item.path">
<div>{{ item.meta.title }}</div> <div>{{ item.meta.title }}</div>
</li> </li>
<div v-if="userStore.isLogin"> <div v-if="isLogin">
<img :src="userStore.userInfo.icon" alt="" <img :src="data.icon" alt="" style="width: 24px; height: 24px; margin: 0 10px; border-radius: 50%" />
style="width: 24px; height: 24px; margin: 0 10px; border-radius: 50%" />
<el-dropdown @command="handleCommand"> <el-dropdown @command="handleCommand">
<span class="el-dropdown-link" style="color: #fff;"> <span class="el-dropdown-link" style="color: #fff;">
{{ userStore.userInfo.username }} {{ data.username }}
<el-icon class="el-icon--right"> <el-icon class="el-icon--right">
<arrow-down /> <arrow-down />
</el-icon> </el-icon>
@ -29,8 +28,7 @@
</template> </template>
</el-dropdown> </el-dropdown>
</div> </div>
<li v-else @click="send">登录注册</li> <li v-else @click="skip('http://localhost:5173/#/login?redirect=/configurationPage')">登录注册</li>
<!-- skip('http://localhost:5173/#/login?redirect=/configurationPage') -->
<!-- <li v-if="$route.path != '/home'" @click="$router.push('/')">回到首页</li> --> <!-- <li v-if="$route.path != '/home'" @click="$router.push('/')">回到首页</li> -->
</ul> </ul>
<div class="entry"> <div class="entry">
@ -52,7 +50,7 @@ import useUserStore from '@/store/module/user';
const userStore = useUserStore() const userStore = useUserStore()
import { constRouter } from '@/router/module/constRouter' import { constRouter } from '@/router/module/constRouter'
import { useRouter, useRoute } from 'vue-router' import { useRouter, useRoute } from 'vue-router'
import { computed, onMounted, ref } from 'vue' import { onMounted, ref } from 'vue'
import useSettingStore from '@/store/module/setting' import useSettingStore from '@/store/module/setting'
const $router = useRouter() const $router = useRouter()
const $route = useRoute() const $route = useRoute()
@ -74,38 +72,23 @@ onMounted(() => {
} }
}) })
}) })
const isLogin = ref(false)
const data = ref<any>({})
userGetInfoService(userStore.token).then(res => {
// @ts-ignore
if (res.code === 200) {
isLogin.value = true
data.value = res.data
}
})
function skip(url: string) { function skip(url: string) {
location.assign(url) location.assign(url)
} }
// ========================
let otherWin: any = null;
function send() {
if (otherWin && !otherWin.closed) {
otherWin.focus();
return
}
otherWin = window.open(import.meta.env.VITE_APP_OTHER_ORIGIN)
}
window.onmessage = e => {
if (e.origin === import.meta.env.VITE_APP_OTHER_ORIGIN) {
userStore.setToken(e.data)
userStore.setUserInfo()
}
}
// ========================
// 退 // 退
function logout() { function logout() {
try { isLogin.value = false
otherWin.postMessage('logout', import.meta.env.VITE_APP_OTHER_ORIGIN)
} catch (error) {
send()
setTimeout(() => {
otherWin.postMessage('logout', import.meta.env.VITE_APP_OTHER_ORIGIN)
}, 700)
}
} }
const handleCommand = (command: string) => { const handleCommand = (command: string) => {
switch (command) { switch (command) {

@ -8,24 +8,22 @@ enum Api {
} }
// 提示批量处理 // 提示批量处理
const initOptions = { text: '加载中', success: '成功', error: '失败' } const initOptions = { text: '加载中', success: '成功', error: '失败' }
export function proxrequest(request, options: Partial<typeof initOptions> = initOptions) { function proxrequest(request, options: any = initOptions) {
return async (...arg) => { return async (...arg) => {
if (!options) return request(...arg) if (!options) return request(...arg)
const loadingInstance = ElLoading.service({ text: options.text }) const loadingInstance = ElLoading.service({ text: options.text })
let result;
try { try {
result = await request(...arg) await request(...arg)
ElMessage.success(options.success) ElMessage.success(options.success)
} catch (error) { } catch (error) {
result = error
ElMessage.error(options.error) ElMessage.error(options.error)
} finally { } finally {
loadingInstance.close() loadingInstance.close()
} }
return result return request
} }
} }

@ -100,13 +100,4 @@ export const getCourseType = (params:any) => {
url:'/api/knowNeo/getRelsNodesByCourseId', url:'/api/knowNeo/getRelsNodesByCourseId',
params params
}) })
}
// 查询深层级关系节点
export const getDepthAndType = (data:any) => {
return request({
url:'/api/knowNeo/getRelsNodesByCourseId',
method:"POST",
data
})
} }

@ -4,39 +4,19 @@ import { ref, reactive } from 'vue'
const userStore = defineStore('userStore', () => { const userStore = defineStore('userStore', () => {
const userInfo = reactive<any>({}) const userInfo = reactive<any>({})
const isLogin = ref(false) const isLogin = ref(false)
const token = ref(localStorage.getItem('TOKEN') || '') const token = ref('eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ4aWFvMTExMSIsImNyZWF0ZWQiOjE3MjQ2NTQxNjMxMjIsImV4cCI6MTcyNTI1ODk2M30.uIEZhGG6-XGomV0aqpamOn54VxP4ItfM_ip9EgI0ohcYPyEnln6dXBoG8eVBNlbigglIjw5V1N5bHPdIAifeaA')
const verifyToken = () => { }
const clearUserInfo = () => { userGetInfoService(token.value).then(res => {
Object.keys(userInfo).forEach(function (prop) { // @ts-ignore
delete userInfo[prop]; if (res.code === 200) {
}); Object.assign(userInfo, res.data)
} isLogin.value = true
const setToken = (data: string) => {
token.value = data
localStorage.setItem('TOKEN', data)
}
const setUserInfo = async () => {
try {
const res = await userGetInfoService(token.value)
// @ts-ignore
if (res.code === 200) {
Object.assign(userInfo, res.data)
isLogin.value = true
} else isLogin.value = false
} catch (error) {
isLogin.value = false
clearUserInfo()
} }
} })
setUserInfo()
return { return {
token, token,
setToken,
userInfo, userInfo,
isLogin, isLogin
verifyToken,
setUserInfo,
clearUserInfo
} }
}) })
export default userStore export default userStore

@ -2,8 +2,17 @@
<div class="container" v-if="loading"> <div class="container" v-if="loading">
<div class="left" v-loading="tabLoading"> <div class="left" v-loading="tabLoading">
<div class="gruop"> <div class="gruop">
<Graph :width="1195" :height="800" :index="courseId" :id="courseId" :radio1="radio1" :checkList="checkList" <Graph
v-show="flag === 1" @clickGraph="clickGraphChange" v-if="isSetting" /> :width="1195"
:height="800"
:index="courseId"
:id="courseId"
:radio1="radio1"
:checkList="checkList"
v-show="flag === 1"
@clickGraph="clickGraphChange"
v-if="isSetting"
/>
<div class="video" v-if="flag === 2"> <div class="video" v-if="flag === 2">
<video id="video" width="100%" height="100%" controls> <video id="video" width="100%" height="100%" controls>
<source :src="videoUrl" type="video/mp4" /> <source :src="videoUrl" type="video/mp4" />
@ -12,23 +21,27 @@
</div> </div>
<div class="pdf" v-if="flag === 3"> <div class="pdf" v-if="flag === 3">
<!-- <vuePdf /> --> <!-- <vuePdf /> -->
<VuePdf v-for="page in numOfPages" :key="page" :src="pdfUrl" :page="page" /> <VuePdf
v-for="page in numOfPages"
:key="page"
:src="pdfUrl"
:page="page"
/>
</div> </div>
<div class="docx" v-if="flag === 4"> <div class="docx" v-if="flag === 4">
<vue-office-docx :src="docx" style="width: 100%; height: 100%" /> <vue-office-docx :src="docx" style="width: 100%; height: 100%" />
</div> </div>
<div v-show="flag != 1" class="back" @click="flag = 1"> <div v-show="flag != 1" class="back" @click="flag = 1">
<el-icon> <el-icon><Back /></el-icon>
<Back />
</el-icon>
</div> </div>
<div class="show-graph-sett" @click="showSetting" v-if="!showFlag"> <div class="show-graph-sett" @click="showSetting" v-if="!showFlag">
<el-icon> <el-icon><ArrowLeftBold /></el-icon>
<ArrowLeftBold />
</el-icon>
</div> </div>
<div :class="showFlag ? 'graph-setting' : 'graph-setting-hidden'" @mouseleave="heddinSetting" <div
@mouseenter="clearHeddin"> :class="showFlag ? 'graph-setting' : 'graph-setting-hidden'"
@mouseleave="heddinSetting"
@mouseenter="clearHeddin"
>
<el-radio-group v-model="radio1" @change="radio1Change"> <el-radio-group v-model="radio1" @change="radio1Change">
<el-radio value="2" size="mini" style="margin: 0">二层</el-radio> <el-radio value="2" size="mini" style="margin: 0">二层</el-radio>
<el-radio value="3" size="mini" style="margin: 0">三层</el-radio> <el-radio value="3" size="mini" style="margin: 0">三层</el-radio>
@ -52,17 +65,32 @@
</el-table> </el-table>
</div> </div>
<div class="resource"> <div class="resource">
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick" v-loading="isTabsLoading"> <el-tabs
v-model="activeName"
class="demo-tabs"
@tab-click="handleClick"
v-loading="isTabsLoading"
>
<el-tab-pane label="视频" name="1"> <el-tab-pane label="视频" name="1">
<div class="files-box"> <div class="files-box">
<div class="item" v-for="item in courseFilesList.video" :key="item.id" @click="clickFile(item, 2)"> <div
class="item"
v-for="item in courseFilesList.video"
:key="item.id"
@click="clickFile(item, 2)"
>
{{ item.name }} {{ item.name }}
</div> </div>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="PPT" name="2"> <el-tab-pane label="PPT" name="2">
<div class="files-box"> <div class="files-box">
<div class="item" v-for="item in courseFilesList.PPT" :key="item.id" @click="clickFile(item, 3)"> <div
class="item"
v-for="item in courseFilesList.PPT"
:key="item.id"
@click="clickFile(item, 3)"
>
{{ item.name }} {{ item.name }}
</div> </div>
</div> </div>
@ -70,14 +98,24 @@
<el-tab-pane label="试题" name="3">Role</el-tab-pane> <el-tab-pane label="试题" name="3">Role</el-tab-pane>
<el-tab-pane label="文档" name="4"> <el-tab-pane label="文档" name="4">
<div class="files-box"> <div class="files-box">
<div class="item" v-for="item in courseFilesList.word" :key="item.id" @click="clickFile(item, 4)"> <div
class="item"
v-for="item in courseFilesList.word"
:key="item.id"
@click="clickFile(item, 4)"
>
{{ item.name }} {{ item.name }}
</div> </div>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="其他" name="5"> <el-tab-pane label="其他" name="5">
<div class="files-box"> <div class="files-box">
<div class="item" v-for="item in courseFilesList.other" :key="item.id" @click="download(item)"> <div
class="item"
v-for="item in courseFilesList.other"
:key="item.id"
@click="download(item)"
>
{{ item.name }} {{ item.name }}
</div> </div>
</div> </div>
@ -92,10 +130,7 @@
</div> </div>
<div class="description"> <div class="description">
<div class="description-box"> <div class="description-box">
<!-- 课程简介 --> Vues 设计与实现这本书的简介 Vues 设计与实现是一本深入剖析
<div class="title">{{ Route.query.name }}</div>
<div style="text-indent: 2em;">{{ learn.description }}</div>
<!-- Vues 设计与实现这本书的简介 Vues 设计与实现是一本深入剖析
Vues 框架核心原理的权威著作 Vues 框架核心原理的权威著作
本书首先会为读者搭建起一个坚实的知识基础详细介绍 Vues 本书首先会为读者搭建起一个坚实的知识基础详细介绍 Vues
的发展历程和其在前端开发领域的重要地位接着深入探讨 Vues 的发展历程和其在前端开发领域的重要地位接着深入探讨 Vues
@ -109,7 +144,7 @@
来构建复杂而强大的应用程序同时书中也提供了丰富的实战案例和最佳实践让读者能够将所学知识迅速应用到实际开发中 来构建复杂而强大的应用程序同时书中也提供了丰富的实战案例和最佳实践让读者能够将所学知识迅速应用到实际开发中
无论是前端开发的新手还是经验丰富的开发者都能从Vues 无论是前端开发的新手还是经验丰富的开发者都能从Vues
设计与实现中获得宝贵的知识和技能从而提升自己的开发水平打造出更加出色的前端应用它不仅是一本技术指南更是一本启发思考引领创新的宝典为读者打开了深入理解和掌握 设计与实现中获得宝贵的知识和技能从而提升自己的开发水平打造出更加出色的前端应用它不仅是一本技术指南更是一本启发思考引领创新的宝典为读者打开了深入理解和掌握
Vues 框架的大门 --> Vues 框架的大门
</div> </div>
</div> </div>
<div class="hours"> <div class="hours">
@ -149,7 +184,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import StuList from './components/StuList.vue' import StuList from './components/StuList.vue'
import { ref, nextTick, reactive } from 'vue' import { ref, nextTick } from 'vue'
import Graph from '../home/components/Graph1.vue' import Graph from '../home/components/Graph1.vue'
import courseTree from './components/courseTree.vue' import courseTree from './components/courseTree.vue'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
@ -164,11 +199,10 @@ import { filterFilesType } from '@/utils/filters'
import { VuePdf, createLoadingTask } from 'vue3-pdfjs/esm' import { VuePdf, createLoadingTask } from 'vue3-pdfjs/esm'
import VueOfficeDocx from '@vue-office/docx' import VueOfficeDocx from '@vue-office/docx'
// import vuePdf from './components/vuePdf.vue' // import vuePdf from './components/vuePdf.vue'
import { getCourseDetailApi } from '@/api/configuration'
const Route = useRoute() const Route = useRoute()
const Router = useRouter() const Router = useRouter()
const courseId: string = Route.query.id as string const courseId: string = Route.query.id as string
console.log(Route.query.id)
const chapterList = ref<any>([]) const chapterList = ref<any>([])
const loading = ref(false) const loading = ref(false)
const getCourseChapterEvent = async () => { const getCourseChapterEvent = async () => {
@ -182,7 +216,7 @@ const getCourseChapterEvent = async () => {
courseId: '2cd6b5b62c344fd0becff6010cba566e', courseId: '2cd6b5b62c344fd0becff6010cba566e',
}) })
chapterList.value = res.data chapterList.value = res.data
console.log(res, 'res') console.log(res)
loading.value = true loading.value = true
loadingInstance.close() loadingInstance.close()
} }
@ -192,10 +226,7 @@ const courseObjectivesTrees = ref([])
const handleClick = (e: any) => { const handleClick = (e: any) => {
console.log(e) console.log(e)
} }
const learn = reactive<any>({})
if (Route.query.id) {
getCourseDetailApi(Route.query.id as string).then(res => Object.assign(learn, res.data));
}
const isTabsLoading = ref<boolean>(false) const isTabsLoading = ref<boolean>(false)
const courseFilesList = ref<any>({}) const courseFilesList = ref<any>({})
// //
@ -345,7 +376,6 @@ getCourseObjectivesListEvent()
<style lang="scss" scoped> <style lang="scss" scoped>
.view-container { .view-container {
// height: 100vh; // height: 100vh;
.container { .container {
width: $base-container-width; width: $base-container-width;
@ -353,10 +383,8 @@ getCourseObjectivesListEvent()
// height: 1600px; // height: 1600px;
display: flex; display: flex;
padding-bottom: 20px; padding-bottom: 20px;
.left { .left {
width: 1195px; width: 1195px;
// height: 800px; // height: 800px;
.gruop { .gruop {
position: relative; position: relative;
@ -364,29 +392,24 @@ getCourseObjectivesListEvent()
width: 100%; width: 100%;
height: 800px; height: 800px;
background-color: #fff; background-color: #fff;
.video { .video {
width: 100%; width: 100%;
height: 100%; height: 100%;
background-color: #d9d9d9; background-color: #d9d9d9;
#video { #video {
object-fit: cover; object-fit: cover;
} }
} }
.pdf { .pdf {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: auto; overflow: auto;
} }
.docx { .docx {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: auto; overflow: auto;
} }
.back { .back {
position: absolute; position: absolute;
top: 30px; top: 30px;
@ -397,7 +420,6 @@ getCourseObjectivesListEvent()
background-color: rgba(0, 0, 0, 0.1); background-color: rgba(0, 0, 0, 0.1);
border-radius: 50%; border-radius: 50%;
cursor: pointer; cursor: pointer;
i { i {
width: 100%; width: 100%;
height: 100%; height: 100%;
@ -407,19 +429,16 @@ getCourseObjectivesListEvent()
justify-content: center; justify-content: center;
} }
} }
.graph-setting { .graph-setting {
position: absolute; position: absolute;
bottom: 30px; bottom: 30px;
right: 10px; right: 10px;
width: 80px; width: 80px;
height: 270px; height: 270px;
animation: fadeIn 0.3s ease-in-out; animation: fadeIn 0.3s ease-in-out; /* 持续时间2秒,缓动函数为ease-in-out */
/* 持续时间2秒,缓动函数为ease-in-out */
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
.reset { .reset {
width: 50px; width: 50px;
height: 30px; height: 30px;
@ -432,18 +451,15 @@ getCourseObjectivesListEvent()
cursor: pointer; cursor: pointer;
} }
} }
.graph-setting-hidden { .graph-setting-hidden {
position: absolute; position: absolute;
bottom: 30px; bottom: 30px;
right: -90px; right: -90px;
width: 80px; width: 80px;
height: 270px; height: 270px;
animation: fadeOut 0.3s ease-in-out; animation: fadeOut 0.3s ease-in-out; /* 持续时间2秒,缓动函数为ease-in-out */
/* 持续时间2秒,缓动函数为ease-in-out */
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
.reset { .reset {
width: 50px; width: 50px;
height: 30px; height: 30px;
@ -456,29 +472,24 @@ getCourseObjectivesListEvent()
cursor: pointer; cursor: pointer;
} }
} }
@keyframes fadeIn { @keyframes fadeIn {
from { from {
right: -60px; right: -60px;
} }
to { to {
right: 10px; right: 10px;
} }
} }
@keyframes fadeOut { @keyframes fadeOut {
from { from {
right: 10px; right: 10px;
} }
to { to {
right: -60px; right: -60px;
display: none; display: none;
} }
} }
.show-graph-sett { .show-graph-sett {
position: absolute; position: absolute;
bottom: 30px; bottom: 30px;
@ -492,24 +503,20 @@ getCourseObjectivesListEvent()
padding-left: 5px; padding-left: 5px;
cursor: pointer; cursor: pointer;
transition: all 0.3s; transition: all 0.3s;
i { i {
font-size: 14px; font-size: 14px;
} }
} }
} }
.show-graph-sett:hover { .show-graph-sett:hover {
transform: scale(1.3); transform: scale(1.3);
} }
.resource { .resource {
width: 100%; width: 100%;
height: 500px; height: 500px;
margin-top: 20px; margin-top: 20px;
padding: 20px; padding: 20px;
background-color: #fff; background-color: #fff;
.files-box { .files-box {
.item { .item {
// width: 200px; // width: 200px;
@ -521,20 +528,17 @@ getCourseObjectivesListEvent()
text-decoration: underline; text-decoration: underline;
cursor: pointer; cursor: pointer;
} }
.item:hover { .item:hover {
color: Blue; color: Blue;
} }
} }
} }
.cours-target { .cours-target {
width: 100%; width: 100%;
height: 300px; height: 300px;
margin-top: 20px; margin-top: 20px;
padding: 20px; padding: 20px;
background-color: #fff; background-color: #fff;
.title { .title {
font-size: 16px; font-size: 16px;
height: 40px; height: 40px;
@ -544,67 +548,34 @@ getCourseObjectivesListEvent()
} }
} }
} }
.right { .right {
width: 400px; width: 400px;
margin-left: 20px; margin-left: 20px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.course-info { .course-info {
width: 100%; width: 100%;
height: 640px; height: 640px;
background-color: #fff; background-color: #fff;
.image { .image {
width: 100%; width: 100%;
img { img {
width: 100%; width: 100%;
height: 220px; height: 220px;
} }
} }
.description { .description {
overflow-y: auto; overflow-y: auto;
height: 260px; height: 260px;
padding: 10px 20px; padding: 10px 20px;
// text-indent: 2em; text-indent: 2em; /* 2em 约等于两个汉字的宽度 */
/* 2em 约等于两个汉字的宽度 */
font-size: 18px; font-size: 18px;
line-height: 40px; line-height: 40px;
position: relative;
.description-box { .description-box {
.title {
border-radius: 16px;
border: 1px solid #e8e9fb;
box-shadow: 0 0 10px #e8e9fb;
text-align: center;
color: #12a3f5;
width: fit-content;
min-width: 80px;
padding: 0 10px;
position: relative;
left: 50%;
translate: -50%;
margin-bottom: 6px;
&:before {
content: "";
width: 300%;
height: 2px;
background: #e8e9fb;
position: absolute;
bottom: -6px;
left: 50%;
translate: -50%;
background: linear-gradient(to right, rgba(255, 255, 255, 0) ,#e8e9fb,rgba(255, 255, 255, 0));
}
}
} }
} }
.hours { .hours {
padding: 10px 20px; padding: 10px 20px;
border-top: 1px solid rgba(0, 0, 0, 0.1); border-top: 1px solid rgba(0, 0, 0, 0.1);
@ -614,14 +585,12 @@ getCourseObjectivesListEvent()
height: 30px; height: 30px;
align-items: center; align-items: center;
font-size: 14px; font-size: 14px;
.label { .label {
color: #999; color: #999;
} }
} }
} }
} }
.chapter { .chapter {
overflow-y: auto; overflow-y: auto;
height: 460px; height: 460px;
@ -629,7 +598,6 @@ getCourseObjectivesListEvent()
margin-top: 20px; margin-top: 20px;
background-color: #fff; background-color: #fff;
} }
.student-list { .student-list {
height: 500px; height: 500px;
width: 100%; width: 100%;
@ -639,17 +607,13 @@ getCourseObjectivesListEvent()
} }
} }
} }
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 4px; width: 4px; /* 滚动条宽度 */
/* 滚动条宽度 */
} }
/* 设置滚动条上下按钮的样式 */ /* 设置滚动条上下按钮的样式 */
::-webkit-scrollbar-button { ::-webkit-scrollbar-button {
background-color: #fff; background-color: #fff;
} }
:deep(.docx-wrapper) { :deep(.docx-wrapper) {
background-color: #fff; background-color: #fff;
} }
@ -659,7 +623,6 @@ getCourseObjectivesListEvent()
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
:deep(.el-checkbox-group) { :deep(.el-checkbox-group) {
display: flex !important; display: flex !important;
flex-direction: column; flex-direction: column;

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save