一次提交

develoop
ww 5 months ago
parent b315a93138
commit 3944b4caaf
  1. 4
      package.json
  2. 2843
      pnpm-lock.yaml
  3. 39
      src/views/MyCourseStudy/ContainerCla.vue
  4. 54
      src/views/MyCourseStudy/ContainerKno.vue
  5. 29
      src/views/MyCourseStudy/courseCollections.vue
  6. 2
      src/views/MyCourseStudy/learningProcess.vue
  7. 11
      src/views/course/basicCourseInformation.vue
  8. 247
      src/views/course/components/KnowledgeGraph.vue
  9. 469
      src/views/course/components/KnowledgeGraphUi/foldInfoUi.vue
  10. 2
      src/views/course/components/KnowledgeGraphUi/index.ts
  11. 319
      src/views/course/components/KnowledgeGraphUi/lookResourceUi.vue
  12. 144
      src/views/course/components/KnowledgeGraphUi/objectiveUi.vue
  13. 200
      src/views/course/components/KnowledgeGraphUi/theoryUi.vue
  14. 64
      src/views/course/components/atlasUi.vue
  15. 234
      src/views/course/courseChapters.vue
  16. 12
      src/views/course/knowledgeAtlas.vue
  17. 12
      src/views/course/knowledgePoints.vue
  18. 903
      src/views/course/spritetext.js
  19. 181
      src/views/courseResources/courseInfo.vue
  20. 410
      src/views/courseResources/index.vue
  21. 238
      src/views/portal/knowledgePointLearning.vue

@ -23,16 +23,12 @@
"ali-oss": "^6.20.0",
"axios": "^1.6.8",
"echarts": "^5.5.0",
<<<<<<< HEAD
"element-plus": "^2.6.0",
"jwt-decode": "^4.0.0",
"nanoid": "^5.0.7",
=======
"echarts-liquidfill": "^3.1.0",
"element-plus": "^2.6.0",
"form-data": "^4.0.0",
"jquery": "^3.7.1",
>>>>>>> c410b660ea058afeb8db74ec244fc38f8928cf30
"nprogress": "^0.2.0",
"pinia": "^2.1.7",
"three": "^0.163.0",

File diff suppressed because it is too large Load Diff

@ -27,9 +27,15 @@
</div>
</div>
<div class="Page-1">
<el-pagination v-model:current-page="params.current" v-model:page-size="params.pageSize"
:page-sizes="[6, 8, 12, 15]" layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handleSizeChange" @current-change="handleCurrentChange" />
<el-pagination
v-model:current-page="params.current"
v-model:page-size="params.pageSize"
:page-sizes="[6, 8, 12, 15]"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</el-tab-pane>
</template>
@ -42,21 +48,22 @@ const container = ref()
function handleResize() {
const style = getComputedStyle(container.value)
const width = Number(style.width.slice(0, -2))
if (width >= 350 * 4.5) container.value.style.gridTemplateColumns = "repeat(4, 350px)"
else container.value.style.gridTemplateColumns = "repeat(auto-fill, 350px)"
if (width >= 350 * 4.5)
container.value.style.gridTemplateColumns = 'repeat(4, 350px)'
else container.value.style.gridTemplateColumns = 'repeat(auto-fill, 350px)'
}
function debounce(func: any, delay: any) {
let timer: any
return function () {
clearTimeout(timer);
clearTimeout(timer)
timer = setTimeout(() => {
// @ts-ignore
func.apply(this, arguments);
}, delay);
};
func.apply(this, arguments)
}, delay)
}
}
const deHR = debounce(handleResize, 500)
const myObserver = new ResizeObserver((deHR))
const myObserver = new ResizeObserver(deHR)
onMounted(() => myObserver.observe(container.value))
onBeforeUnmount(myObserver.disconnect)
// ===============================
@ -125,7 +132,7 @@ const handleCurrentChange = (page: any) => {
justify-content: center;
}
.example-pagination-block+.example-pagination-block {
.example-pagination-block + .example-pagination-block {
margin-top: 10px;
}
@ -184,7 +191,7 @@ const handleCurrentChange = (page: any) => {
border-bottom: 1px solid rgb(217, 217, 217);
}
.ClassImg>img {
.ClassImg > img {
width: 100%;
height: 180px;
}
@ -218,14 +225,14 @@ const handleCurrentChange = (page: any) => {
justify-content: space-around;
}
.Con>h3 {
.Con > h3 {
margin-left: 15px;
font-size: 25px;
font-weight: 600;
cursor: pointer;
}
.Con>p {
.Con > p {
margin-left: 15px;
margin-top: 5px;
font-size: 13px;
@ -233,14 +240,14 @@ const handleCurrentChange = (page: any) => {
cursor: pointer;
}
.Con>p>span {
.Con > p > span {
margin-left: 5px;
margin-right: 5px;
color: rgb(94, 188, 231);
font-weight: 600;
}
.Con>button {
.Con > button {
width: 45px;
height: 20px;
font-size: 9px;

@ -1,30 +1,30 @@
<template>
<el-tab-pane label="知识点收藏" name="third">
<div class="Container_Kno">
<div class="item_3" v-for="(item_3, index) in 10" :key="index">
<div>
<div class="KnowledgeCollent">
<div class="KnoCon">
<h4>课程名称</h4>
<p>{{ item_3 }}-xxxx</p>
</div>
<div class="KnoBtn">
<img src="../../assets/icons/更多.svg" alt="" />
</div>
</div>
<div class="Knowledge_point">
<ul>
<li v-for="(item, index) in 6" :key="index">
知识点知识点知识点{{ item }} &nbsp;
<div class="btn">×</div>
&nbsp;
</li>
</ul>
</div>
</div>
<el-tab-pane label="知识点收藏" name="third">
<div class="Container_Kno">
<div class="item_3" v-for="(item_3, index) in 10" :key="index">
<div>
<div class="KnowledgeCollent">
<div class="KnoCon">
<h4>课程名称</h4>
<p>{{ item_3 }}-xxxx</p>
</div>
<div class="KnoBtn">
<img src="../../assets/icons/更多.svg" alt="" />
</div>
</div>
<div class="Knowledge_point">
<ul>
<li v-for="(item, index) in 6" :key="index">
知识点知识点知识点{{ item }} &nbsp;
<div class="btn">×</div>
&nbsp;
</li>
</ul>
</div>
</el-tab-pane>
</div>
</div>
</div>
</el-tab-pane>
</template>
<script lang="ts" setup></script>
<style lang="scss" scoped>
@ -65,7 +65,7 @@
justify-content: space-around;
}
.KnoBtn>img {
.KnoBtn > img {
padding-top: 20px;
cursor: pointer;
}
@ -93,7 +93,7 @@
flex-direction: column;
}
.Knowledge_point>ul>li {
.Knowledge_point > ul > li {
display: inline-block;
margin-top: 3px;
margin-bottom: 3px;
@ -115,4 +115,4 @@
cursor: pointer;
color: rgb(15, 57, 76);
}
</style>
</style>

@ -1,6 +1,12 @@
<template>
<div class="curse-collection">
<el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="handleClick" style="padding-top: 0">
<el-tabs
v-model="activeName"
type="card"
class="demo-tabs"
@tab-click="handleClick"
style="padding-top: 0"
>
<!-- 课程收藏页面 -->
<ContainerCla />
<!-- 资源收藏页面 -->
@ -102,9 +108,16 @@
</div>
</div>
<div class="Page-2">
<el-pagination v-model:current-page="currentPage1" v-model:page-size="pageSize1" :disabled="disabled"
:page-sizes="[6, 8, 12, 15]" layout="total, sizes, prev, pager, next, jumper" :total="10"
@size-change="handleSizeChange" @current-change="handleCurrentChange" />
<el-pagination
v-model:current-page="currentPage1"
v-model:page-size="pageSize1"
:disabled="disabled"
:page-sizes="[6, 8, 12, 15]"
layout="total, sizes, prev, pager, next, jumper"
:total="10"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</el-tab-pane>
<!-- 知识点收藏页面 -->
@ -149,7 +162,7 @@ const handleCurrentChange = (val: number) => {
justify-content: center;
}
.example-pagination-block+.example-pagination-block {
.example-pagination-block + .example-pagination-block {
margin-top: 10px;
}
@ -286,7 +299,7 @@ const handleCurrentChange = (val: number) => {
align-items: center;
}
.ResClaDic>p {
.ResClaDic > p {
font-family: Inter, Inter;
font-weight: 500;
font-size: 20px;
@ -317,7 +330,7 @@ const handleCurrentChange = (val: number) => {
position: flex;
justify-content: center;
background-color: #fff;
border-top: 1px solid rgb(229, 227, 227, .5);
border-bottom: 1px solid rgb(229, 227, 227, .5);
border-top: 1px solid rgb(229, 227, 227, 0.5);
border-bottom: 1px solid rgb(229, 227, 227, 0.5);
}
</style>

@ -20,7 +20,7 @@ const params = ref({
const getrecordList = async () => {
loading.value = true
const res = await getRecordListService(params.value)
recordList.value = res.data.list
recordList.value = res.data.records
console.log(res)
//
total.value = res.data.total

@ -139,16 +139,6 @@ const onSuccess = () => {
}
</script>
<template>
<<<<<<< HEAD
<div>课程基本信息</div>
</template>
<script lang="ts" setup>
import {} from 'vue'
</script>
<style lang="scss" scoped></style>
=======
<div class="header">
<div class="btn">
<el-button type="primary" round size="large">全部课程</el-button>
@ -296,4 +286,3 @@ import {} from 'vue'
}
}
</style>
>>>>>>> 4fe89b0398cd428950ca36bfe5d25f813217eec4

@ -4,150 +4,161 @@
<script lang="ts" setup>
// import { useRouter } from 'vue-router'
import { onMounted, ref,reactive,watch } from 'vue'
import { onMounted, ref, reactive, watch } from 'vue'
import ForceGraph3D from '3d-force-graph'
//@ts-ignore
import { CSS2DRenderer, CSS2DObject,} from 'three/examples/jsm/renderers/CSS2DRenderer.js'
import {
CSS2DRenderer,
CSS2DObject,
} from 'three/examples/jsm/renderers/CSS2DRenderer.js'
//@ts-ignore
import SpriteText from '../spritetext.js'
import SpriteText from '../spritetext.js'
// const $router = useRouter()
// const jsonData = ref(null)
let Graph:any = reactive({})
let Graph: any = reactive({})
const props = defineProps({
width:{
type:Number,
default:window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
},
height:{
type:Number,
default:window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight,
}
width: {
type: Number,
default:
window.innerWidth ||
document.documentElement.clientWidth ||
document.body.clientWidth,
},
height: {
type: Number,
default:
window.innerHeight ||
document.documentElement.clientHeight ||
document.body.clientHeight,
},
})
watch(() => props.width, ne => Graph.width(ne))
watch(() => props.height, ne => Graph.height(ne))
watch(
() => props.width,
(ne) => Graph.width(ne),
)
watch(
() => props.height,
(ne) => Graph.height(ne),
)
const dom = ref(null)
onMounted(() => {
Graph = ForceGraph3D({
extraRenderers: [new CSS2DRenderer()],
})(document.getElementById('3d-graph') as HTMLElement)
.jsonUrl('../../../public/data.json')
// .nodeAutoColorBy('group')
.nodeThreeObject((node: any) => {
const nodeEl = document.createElement('div')
nodeEl.textContent = node.label
nodeEl.style.color = '#333333'
nodeEl.style.borderRadius = '50%'
// console.log(node, 111, Graph.graphData().nodes)
return new CSS2DObject(nodeEl)
})
.linkLabel((link:any) => link.label) //
.linkWidth(0.8)
.linkHoverPrecision(0.5) //
.linkColor(() => '#dd92fd') // 线
.backgroundColor('#f5f6fd')
.width(props.width)
.height(props.height)
.linkThreeObjectExtend(true)
.nodeColor((node: any) => {
return node.color
})
.nodeRelSize(7) // 4
.nodeResolution(20)
.linkDirectionalArrowLength(3) // 线3
.linkDirectionalArrowRelPos(1) // 线线
.nodeThreeObjectExtend(true)
.onNodeClick((node: any) => {
// Aim at node from outside it
//
const targetDistance = 200 //
Graph = ForceGraph3D({
extraRenderers: [new CSS2DRenderer()],
})(document.getElementById('3d-graph') as HTMLElement)
.jsonUrl('../../../public/data.json')
// .nodeAutoColorBy('group')
.nodeThreeObject((node: any) => {
const nodeEl = document.createElement('div')
nodeEl.textContent = node.label
nodeEl.style.color = '#333333'
nodeEl.style.borderRadius = '50%'
// console.log(node, 111, Graph.graphData().nodes)
return new CSS2DObject(nodeEl)
})
.linkLabel((link: any) => link.label) //
.linkWidth(0.8)
.linkHoverPrecision(0.5) //
.linkColor(() => '#dd92fd') // 线
.backgroundColor('#f5f6fd')
.width(props.width)
.height(props.height)
.linkThreeObjectExtend(true)
.nodeColor((node: any) => {
return node.color
})
.nodeRelSize(7) // 4
.nodeResolution(20)
.linkDirectionalArrowLength(3) // 线3
.linkDirectionalArrowRelPos(1) // 线线
.nodeThreeObjectExtend(true)
.onNodeClick((node: any) => {
// Aim at node from outside it
//
const targetDistance = 200 //
//
const distRatio = 1 + targetDistance / Math.hypot(node.x, node.y, node.z)
const newPos = {
x: node.x * distRatio,
y: node.y * distRatio,
z: node.z * distRatio,
}
//
const distRatio = 1 + targetDistance / Math.hypot(node.x, node.y, node.z)
const newPos = {
x: node.x * distRatio,
y: node.y * distRatio,
z: node.z * distRatio,
}
//
if (node.x === 0 && node.y === 0 && node.z === 0) {
newPos.z = targetDistance // z
}
//
if (node.x === 0 && node.y === 0 && node.z === 0) {
newPos.z = targetDistance // z
}
//
//@ts-ignore
Graph.cameraPosition(
newPos, //
node, //
3000, //
)
//
//@ts-ignore
Graph.cameraPosition(
newPos, //
node, //
3000, //
)
//
//@ts-ignore
const graphData = Graph.graphData()
//
//@ts-ignore
const graphData = Graph.graphData()
// 线线
graphData.links.forEach((link: any) => {
// console.log(link);
// 线线
graphData.links.forEach((link: any) => {
// console.log(link);
if (link.source.id === node.id || link.target.id === node.id) {
setLabel()
// 线
// link.color = '#FF0000' // 线
//@ts-ignore
Graph.linkColor((item: any): any => {
if (item.source.id === node.id || item.target.id === node.id) {
return 'red'
} else {
return '#dd92fd'
}
})
} else {
// Graph.linkColor(() => '#a4c7fe') // 线
}
})
if (link.source.id === node.id || link.target.id === node.id) {
setLabel()
// 线
// link.color = '#FF0000' // 线
//@ts-ignore
Graph.linkColor((item: any): any => {
if (item.source.id === node.id || item.target.id === node.id) {
return 'red'
} else {
return '#dd92fd'
}
})
} else {
// Graph.linkColor(() => '#a4c7fe') // 线
}
})
//
//@ts-ignore
Graph.graphData(graphData)
})
dom.value = document.querySelector('canvas') as any
//
//@ts-ignore
Graph.graphData(graphData)
})
dom.value = document.querySelector('canvas') as any
})
const setLabel = () => {
//@ts-ignore
Graph.linkThreeObject((link:any) => {
// extend link with text sprite
const sprite = new SpriteText(`${link.label}`);
sprite.color = '#ccc';
sprite.textHeight = 1.5;
return sprite;
})
//@ts-ignore
Graph.linkPositionUpdate((sprite, { start, end }) => {
//@ts-ignore
Graph.linkThreeObject((link: any) => {
// extend link with text sprite
const sprite = new SpriteText(`${link.label}`)
sprite.color = '#ccc'
sprite.textHeight = 1.5
return sprite
})
//@ts-ignore
Graph.linkPositionUpdate((sprite, { start, end }) => {
//@ts-ignore
const middlePos = Object.assign(
...['x', 'y', 'z'].map((c) => ({
//@ts-ignore
const middlePos = Object.assign(...['x', 'y', 'z'].map(c => ({
//@ts-ignore
[c]: start[c] + (end[c] - start[c]) / 2 // calc middle point
})));
[c]: start[c] + (end[c] - start[c]) / 2, // calc middle point
})),
)
// Position sprite
Object.assign(sprite.position, middlePos);
});
//@ts-ignore
Graph.d3Force('charge').strength(-120);
// Position sprite
Object.assign(sprite.position, middlePos)
})
//@ts-ignore
Graph.d3Force('charge').strength(-120)
}
// const goToEditAtlas = () => {
// console.log(jsonData.value)
// $router.push({ name: 'EditAtlas', params: { id: 123 } })
// }
</script>
<style lang='scss' scoped>
</style>
<style lang="scss" scoped></style>

@ -1,275 +1,288 @@
<template>
<div class="fold-info-ui">
<div class="demo-collapse">
<el-collapse class="collapse" v-model="activeNames" @change="handleChange">
<el-collapse-item v-for="item in 3" :key="item" :name="item">
<template #title>
<div class="title">
<div class="icon">
<img src="@/assets/images/minus-circle-filled.png" alt="">
</div>
<div class="index">01 /</div>
<div class="text">基本概念</div>
<div class="title-tag-box">
<div class="my-tag" type="warning">32学时</div>
<div class="my-tag">本章资源</div>
</div>
<div class="fold-info-ui">
<div class="demo-collapse">
<el-collapse
class="collapse"
v-model="activeNames"
@change="handleChange"
>
<el-collapse-item v-for="item in 3" :key="item" :name="item">
<template #title>
<div class="title">
<div class="icon">
<img src="@/assets/images/minus-circle-filled.png" alt="" />
</div>
<div class="index">01 /</div>
<div class="text">基本概念</div>
<div class="title-tag-box">
<div class="my-tag" type="warning">32学时</div>
<div class="my-tag">本章资源</div>
</div>
</div>
</template>
<template #default>
<div class="main-box">
<div class="left"></div>
<div class="right">
<div class="structure-item">
<div
class="structure-item-titile-box"
v-for="item in 3"
:key="item"
>
<div class="titile-box-titile">
<div class="sequence">5</div>
<div class="tit-box">
<div class="tit-box-left">1.1 基本概念1</div>
<div class="tit-box-right my-tag">资源</div>
<div class="tit-box-edit">
<button class="my-button">编辑</button>
</div>
</template>
<template #default>
<div class="main-box">
<div class="left"></div>
<div class="right">
<div class="structure-item">
<div class="structure-item-titile-box" v-for="item in 3" :key="item">
<div class="titile-box-titile">
<div class="sequence">5</div>
<div class="tit-box">
<div class="tit-box-left">1.1 基本概念1</div>
<div class="tit-box-right my-tag">资源</div>
<div class="tit-box-edit">
<button class="my-button">编辑</button>
</div>
</div>
</div>
<div class="titile-box-knowledge">
<div class="my-tag">知识点1</div>
<div class="my-tag">知识点1</div>
</div>
</div>
</div>
</div>
</div>
</template>
</el-collapse-item>
</el-collapse>
</div>
</div>
</div>
<div class="titile-box-knowledge">
<div class="my-tag">知识点1</div>
<div class="my-tag">知识点1</div>
</div>
</div>
</div>
</div>
</div>
</template>
</el-collapse-item>
</el-collapse>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const props = defineProps(['foldInfoData'])
console.log(props.foldInfoData, '可折叠基本概念接口数据');
console.log(props.foldInfoData, '可折叠基本概念接口数据')
const activeNames = ref([1])
const handleChange = (val: string[]) => {
console.log(val)
console.log(val)
}
</script>
<style lang="scss" scoped>
::v-deep .collapse {
border-top: none;
border-top: none;
.el-collapse-item__header {
border-bottom: none;
}
.el-collapse-item__header {
border-bottom: none;
}
}
.fold-info-ui {
width: 100%;
height: 100%;
padding-top: 27px;
padding-left: 61px;
background: #fff;
width: 100%;
height: 100%;
padding-top: 27px;
padding-left: 61px;
background: #fff;
.demo-collapse {
$title-icon-width: 15px;
$title--icon-m-r: 34px;
$title-index-width: 60px;
.title {
display: flex;
height: 22px;
width: 100%;
align-items: center;
.icon {
line-height: 0px;
width: $title-icon-width;
height: $title-icon-width;
margin-right: $title--icon-m-r;
& img {
width: 100%;
height: 100%;
}
}
.index {
width: $title-index-width;
text-align: center;
text-wrap: nowrap;
font-weight: 400;
font-size: 32px;
color: #333333;
margin-right: 15px;
}
.demo-collapse {
$title-icon-width: 15px;
$title--icon-m-r: 34px;
$title-index-width: 60px;
.text {
font-weight: bold;
font-size: 24px;
color: #333333;
}
.title-tag-box {
margin-left: auto;
margin-right: 76px;
display: flex;
column-gap: 16px;
}
}
.main-box {
width: 100%;
display: flex;
$line: 1px dashed #d9d9d9;
.title {
display: flex;
height: 22px;
width: 100%;
align-items: center;
.left {
width: calc(
$title-icon-width + $title--icon-m-r + $title-index-width / 2
);
border-right: $line;
}
.icon {
line-height: 0px;
width: $title-icon-width;
height: $title-icon-width;
margin-right: $title--icon-m-r;
.right {
flex-grow: 1;
& img {
width: 100%;
height: 100%;
.structure-item {
width: 100%;
}
.structure-item-titile-box {
& > * {
padding-left: 42px;
}
.index {
width: $title-index-width;
.titile-box-titile {
&:first-child {
margin-top: 20px;
}
position: relative;
margin-bottom: 15px;
&::before {
content: '';
display: block;
position: absolute;
left: 0;
top: 50%;
width: 30px;
border-top: $line;
}
.sequence {
$height: 33px;
width: $height;
height: $height;
position: absolute;
left: 0;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
background: #ffb21e;
text-align: center;
text-wrap: nowrap;
line-height: $height;
font-weight: 400;
font-size: 32px;
color: #333333;
margin-right: 15px;
}
.text {
font-weight: bold;
font-size: 24px;
color: #333333;
}
font-size: 15px;
color: #000000;
}
.title-tag-box {
margin-left: auto;
margin-right: 76px;
.tit-box {
height: 20px;
display: flex;
column-gap: 16px;
}
}
.main-box {
width: 100%;
display: flex;
$line: 1px dashed #D9D9D9;
align-items: center;
gap: 17px;
.tit-box-left {
font-weight: 400;
font-size: 20px;
color: #000000;
}
.left {
width: calc($title-icon-width + $title--icon-m-r + $title-index-width / 2);
border-right: $line;
// .tit-box-right {}
.tit-box-edit {
margin-left: auto;
margin-right: 72px;
}
}
}
.right {
flex-grow: 1;
.structure-item {
width: 100%;
.structure-item-titile-box {
&>* {
padding-left: 42px;
}
.titile-box-titile {
&:first-child {
margin-top: 20px;
}
position: relative;
margin-bottom: 15px;
&::before {
content: '';
display: block;
position: absolute;
left: 0;
top: 50%;
width: 30px;
border-top: $line;
}
.sequence {
$height: 33px;
width: $height;
height: $height;
position: absolute;
left: 0;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
background: #FFB21E;
text-align: center;
line-height: $height;
font-weight: 400;
font-size: 15px;
color: #000000;
}
.tit-box {
height: 20px;
display: flex;
align-items: center;
gap: 17px;
.tit-box-left {
font-weight: 400;
font-size: 20px;
color: #000000;
}
// .tit-box-right {}
.tit-box-edit {
margin-left: auto;
margin-right: 72px;
}
}
}
.titile-box-knowledge {
display: flex;
margin-left: 33px;
&>* {
margin-left: 38px;
border: 1px solid #0052D9;
font-weight: bold;
font-size: 12px;
color: #0052D9;
&:first-child {
margin-left: 0;
}
}
}
}
.titile-box-knowledge {
display: flex;
margin-left: 33px;
& > * {
margin-left: 38px;
border: 1px solid #0052d9;
font-weight: bold;
font-size: 12px;
color: #0052d9;
&:first-child {
margin-left: 0;
}
}
}
}
}
}
}
// ===================
.my-tag {
padding: 2px 8px;
font-weight: 400;
font-size: 12px;
color: #0052D9;
line-height: 20px;
background: #F2F3FF;
cursor: pointer;
border-radius: 3px;
}
// ===================
.my-tag {
padding: 2px 8px;
font-weight: 400;
font-size: 12px;
color: #0052d9;
line-height: 20px;
background: #f2f3ff;
cursor: pointer;
border-radius: 3px;
}
[type='warning'].my-tag {
color: #e37318;
background: #fff1e9;
}
.my-button {
all: initial;
$color-start: #52a1ff;
$color-end: #4255ff;
padding: 8px 24px;
background: linear-gradient(128deg, $color-start 0%, $color-end 100%);
box-shadow: 0px 4px 7px 0px rgba(0, 82, 255, 0.27);
border-radius: 20px;
font-weight: bold;
font-size: 16px;
color: rgba(255, 255, 255, 0.9);
line-height: 24px;
text-align: center;
cursor: pointer;
&:hover {
background: linear-gradient(
128deg,
lighten($color-start, 5%) 0%,
lighten($color-end, 5%) 100%
);
}
[type=warning].my-tag {
color: #E37318;
background: #FFF1E9;
&:active {
background: linear-gradient(
128deg,
darken($color-start, 10%) 0%,
darken($color-end, 10%) 100%
);
}
.my-button {
all: initial;
$color-start: #52A1FF;
$color-end: #4255FF;
padding: 8px 24px;
background: linear-gradient(128deg, $color-start 0%, $color-end 100%);
box-shadow: 0px 4px 7px 0px rgba(0, 82, 255, 0.27);
border-radius: 20px;
font-weight: bold;
font-size: 16px;
color: rgba(255, 255, 255, 0.9);
line-height: 24px;
text-align: center;
cursor: pointer;
&:hover {
background: linear-gradient(128deg, lighten($color-start, 5%) 0%, lighten($color-end, 5%) 100%);
}
&:active {
background: linear-gradient(128deg, darken($color-start, 10%) 0%, darken($color-end, 10%) 100%);
}
&:disabled {
background: linear-gradient(128deg, lighten($color-start, 20%) 0%, lighten($color-end, 20%) 100%);
}
&:disabled {
background: linear-gradient(
128deg,
lighten($color-start, 20%) 0%,
lighten($color-end, 20%) 100%
);
}
}
}
</style>
</style>

@ -2,4 +2,4 @@ export { default as theoryUi } from './theoryUi.vue'
export { default as objectiveUi } from './objectiveUi.vue'
export { default as atlasUi } from '../atlasUi.vue'
export { default as lookResourceUi } from './lookResourceUi.vue'
export { default as foldInfoUi } from './foldInfoUi.vue'
export { default as foldInfoUi } from './foldInfoUi.vue'

@ -1,195 +1,190 @@
<template>
<div class="look-resource-ui" ref="atlas">
<div class="head">
<div class="log"></div>
<div class="text">查看资源</div>
<div class="look-resource-ui" ref="atlas">
<div class="head">
<div class="log"></div>
<div class="text">查看资源</div>
</div>
<div class="con" v-for="item in 5" :key="item">
<div class="chapter-box">
<div class="left">第一章</div>
<div class="right">第二小节</div>
</div>
<div class="detailedness-chapter-box">
<div class="left">
<div class="vertical-dotted-line"></div>
</div>
<div class="con" v-for="item in 5" :key="item">
<div class="chapter-box">
<div class="left">第一章</div>
<div class="right">第二小节</div>
</div>
<div class="detailedness-chapter-box">
<div class="left">
<div class="vertical-dotted-line"></div>
</div>
<div class="right">
<div class="top">知识点</div>
<div class="center">知识点详情知识点内容</div>
<div class="bottom">
<div class="img-box"></div>
<div class="info-box">
<div class="text-name">知识点清单.pdf</div>
<div class="text-size">15M</div>
</div>
</div>
</div>
<div class="right">
<div class="top">知识点</div>
<div class="center">知识点详情知识点内容</div>
<div class="bottom">
<div class="img-box"></div>
<div class="info-box">
<div class="text-name">知识点清单.pdf</div>
<div class="text-size">15M</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
const props = defineProps(['lookResource'])
console.log(props.lookResource, '查看资源接口数据');
console.log(props.lookResource, '查看资源接口数据')
</script>
<style lang="scss">
.look-resource-ui {
$padding-left: 18px;
width: 100%;
height: 100%;
background-color: #fff;
padding: 24px 22px 0 $padding-left;
$padding-left: 18px;
width: 100%;
height: 100%;
background-color: #fff;
padding: 24px 22px 0 $padding-left;
display: flex;
flex-direction: column;
.head {
$height: 30px;
display: flex;
flex-direction: column;
margin-bottom: 32px;
.log {
width: $height;
height: $height;
background: #4782ff;
border-radius: 4px;
margin-right: 12px;
}
.head {
$height: 30px;
display: flex;
margin-bottom: 32px;
.log {
width: $height;
height: $height;
background: #4782FF;
border-radius: 4px;
margin-right: 12px;
}
.text {
font-weight: bold;
font-size: 20px;
color: #333333;
line-height: $height;
}
}
.text {
font-weight: bold;
font-size: 20px;
color: #333333;
line-height: $height;
}
.con {
& > * {
display: flex;
}
.con {
&>* {
display: flex;
}
$width: 51px;
.chapter-box {
$line-height: 22px;
margin-bottom: 12px;
.left {
min-width: $width;
height: 22px;
margin-right: 16px;
font-weight: 400;
font-size: 16px;
color: #333333;
line-height: $line-height;
}
.right {
line-height: $line-height;
font-weight: 400;
font-size: 14px;
color: #9a9a9a;
}
}
$width: 51px;
.detailedness-chapter-box {
.left {
width: $width;
.chapter-box {
$line-height: 22px;
margin-bottom: 12px;
.vertical-dotted-line {
height: 168px;
margin-left: calc(53px - $padding-left);
border-left: 1px dotted #d9d9d9;
}
}
.left {
min-width: $width;
height: 22px;
margin-right: 16px;
font-weight: 400;
font-size: 16px;
color: #333333;
line-height: $line-height;
.right {
display: flex;
flex-direction: column;
}
& > * {
margin-bottom: 15px;
}
.right {
line-height: $line-height;
font-weight: 400;
font-size: 14px;
color: #9A9A9A;
}
& > *:last-child {
margin-bottom: 0;
}
.top {
$height: 17px;
width: 53px;
height: $height;
line-height: $height;
text-align: center;
background: #5ee183;
border-radius: 2px;
font-weight: 400;
font-size: 12px;
color: #ffffff;
}
.detailedness-chapter-box {
.center {
$height: 22px;
height: $height;
line-height: $height;
font-weight: 400;
font-size: 16px;
color: #333333;
}
.left {
width: $width;
.bottom {
width: 243px;
height: 84px;
background: rgba(255, 255, 255, 0.5);
border-radius: 4px;
border: 1px solid #d9d9d9;
cursor: pointer;
transition: 0.3s;
padding: 17px 0 17px 20px;
display: flex;
&:hover {
border: 1px solid #6997fa;
}
.img-box {
width: 42px;
height: 50px;
background: #4d4d4d;
margin-right: 23px;
}
.info-box {
display: flex;
flex-direction: column;
$height: 22px;
.vertical-dotted-line {
height: 168px;
margin-left: calc(53px - $padding-left);
border-left: 1px dotted #D9D9D9;
}
& > * {
height: $height;
line-height: $height;
}
.text-name {
font-weight: 400;
font-size: 12px;
color: #333333;
margin-bottom: 6px;
}
.right {
display: flex;
flex-direction: column;
&>* {
margin-bottom: 15px;
}
&>*:last-child {
margin-bottom: 0;
}
.top {
$height: 17px;
width: 53px;
height: $height;
line-height: $height;
text-align: center;
background: #5EE183;
border-radius: 2px;
font-weight: 400;
font-size: 12px;
color: #FFFFFF;
}
.center {
$height: 22px;
height: $height;
line-height: $height;
font-weight: 400;
font-size: 16px;
color: #333333;
}
.bottom {
width: 243px;
height: 84px;
background: rgba(255, 255, 255, 0.5);
border-radius: 4px;
border: 1px solid #D9D9D9;
cursor: pointer;
transition: .3s;
padding: 17px 0 17px 20px;
display: flex;
&:hover {
border: 1px solid #6997fa;
}
.img-box {
width: 42px;
height: 50px;
background: #4D4D4D;
margin-right: 23px;
}
.info-box {
display: flex;
flex-direction: column;
$height: 22px;
&>* {
height: $height;
line-height: $height;
}
.text-name {
font-weight: 400;
font-size: 12px;
color: #333333;
margin-bottom: 6px;
}
.text-size {
font-weight: 400;
font-size: 12px;
color: #9A9A9A;
}
}
}
.text-size {
font-weight: 400;
font-size: 12px;
color: #9a9a9a;
}
}
}
}
}
}
}
</style>
</style>

@ -1,13 +1,13 @@
<template>
<div class="objective-ui">
<div class="container">
<div class="title">课程目标</div>
<button class="more btn">了解更多</button>
<div class="content">
{{ orogramObjective.con }}
</div>
</div>
<div class="objective-ui">
<div class="container">
<div class="title">课程目标</div>
<button class="more btn">了解更多</button>
<div class="content">
{{ orogramObjective.con }}
</div>
</div>
</div>
</template>
<script lang="ts" setup>
@ -16,81 +16,79 @@ defineProps(['orogramObjective'])
<style lang="scss">
.objective-ui {
$border-width: 3px;
$line-height: 17px;
width: 100%;
height: 100%;
$border-width: 3px;
$line-height: 17px;
width: 100%;
height: 100%;
background: #FFFFFF;
border: $border-width solid #EDEDED;
padding: calc(16px - $border-width) 0 $line-height 66px;
background: #ffffff;
border: $border-width solid #ededed;
padding: calc(16px - $border-width) 0 $line-height 66px;
button {
all: initial;
}
button {
all: initial;
}
.btn {
$background-color: #F2F3FF;
width: 64px;
height: 18px;
line-height: 18px;
text-align: center;
background-color: $background-color;
border-radius: 45px;
font-weight: 400;
font-size: 12px;
color: #0052D9;
cursor: pointer;
.btn {
$background-color: #f2f3ff;
width: 64px;
height: 18px;
line-height: 18px;
text-align: center;
background-color: $background-color;
border-radius: 45px;
font-weight: 400;
font-size: 12px;
color: #0052d9;
cursor: pointer;
&:hover {
background: darken($background-color, 5%);
}
&:active {
background: darken($background-color, 10%);
}
&:hover {
background: darken($background-color, 5%);
}
&:disabled {
background: lighten($background-color, 20%);
}
&:active {
background: darken($background-color, 10%);
}
.container {
$row-height: 23px;
height: 100%;
width: 443px;
display: grid;
grid-template-columns: repeat(2, auto);
grid-template-rows: $row-height 1fr;
row-gap: 25px;
&:disabled {
background: lighten($background-color, 20%);
}
}
.title {
font-weight: bold;
font-size: 20px;
color: #333333;
line-height: $row-height;
text-align: left;
}
.container {
$row-height: 23px;
height: 100%;
width: 443px;
display: grid;
grid-template-columns: repeat(2, auto);
grid-template-rows: $row-height 1fr;
row-gap: 25px;
.more {
justify-self: end;
}
.title {
font-weight: bold;
font-size: 20px;
color: #333333;
line-height: $row-height;
text-align: left;
}
.content {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 5;
-webkit-box-orient: vertical;
grid-column: 1/3;
font-weight: 400;
font-size: 14px;
color: #999999;
line-height: $line-height;
text-align: left;
}
.more {
justify-self: end;
}
.content {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 5;
-webkit-box-orient: vertical;
grid-column: 1/3;
font-weight: 400;
font-size: 14px;
color: #999999;
line-height: $line-height;
text-align: left;
}
}
}
</style>
</style>

@ -1,116 +1,128 @@
<template>
<div class="theory-ui">
<div class="container">
<div class="top">
<div class="title">计算机导论</div>
<button class="my-button">导入</button>
<button class="my-button">编辑</button>
</div>
<div class="bottom">
<div class="text-container" v-for="item, index in props.learnInfo" :key="index">
<div class="text-name">{{ addUnit(item.name, ':') }}</div>
<div class="text-value">{{ item.value }}</div>
</div>
</div>
<div class="theory-ui">
<div class="container">
<div class="top">
<div class="title">计算机导论</div>
<button class="my-button">导入</button>
<button class="my-button">编辑</button>
</div>
<div class="bottom">
<div
class="text-container"
v-for="(item, index) in props.learnInfo"
:key="index"
>
<div class="text-name">{{ addUnit(item.name, ':') }}</div>
<div class="text-value">{{ item.value }}</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
function addUnit(viewStr: string, unit: string): string {
if (viewStr) return `${viewStr}${unit}`
else return ''
if (viewStr) return `${viewStr}${unit}`
else return ''
}
const props = defineProps(['learnInfo'])
</script>
<style lang="scss">
.theory-ui {
width: 100%;
height: 100%;
width: 100%;
height: 100%;
display: flex;
background-color: #fff;
.container {
$border-width: 3px;
flex-grow: 1;
border: $border-width solid #ededed;
padding-top: calc(10px - $border-width);
padding-left: 61px;
display: flex;
background-color: #fff;
.container {
$border-width: 3px;
flex-grow: 1;
border: $border-width solid #EDEDED;
padding-top: calc(10px - $border-width);
padding-left: 61px;
display: flex;
flex-direction: column;
.top {
display: flex;
margin-top: 30px;
margin-bottom: 46px;
.my-button {
all: initial;
$color-start: #52A1FF;
$color-end: #4255FF;
padding: 8px 24px;
background: linear-gradient(128deg, $color-start 0%, $color-end 100%);
box-shadow: 0px 4px 7px 0px rgba(0, 82, 255, 0.27);
border-radius: 20px;
font-weight: bold;
font-size: 16px;
color: rgba(255, 255, 255, 0.9);
line-height: 24px;
text-align: center;
cursor: pointer;
&:hover {
background: linear-gradient(128deg, lighten($color-start, 5%) 0%, lighten($color-end, 5%) 100%);
}
&:active {
background: linear-gradient(128deg, darken($color-start, 10%) 0%, darken($color-end, 10%) 100%);
}
&:disabled {
background: linear-gradient(128deg, lighten($color-start, 20%) 0%, lighten($color-end, 20%) 100%);
}
}
&>*:first-child {
margin-right: 82px;
}
&>*:last-child {
margin-left: 20px;
}
.title {
width: 208px;
height: 34px;
font-size: 36px;
color: #5577FF;
}
flex-direction: column;
.top {
display: flex;
margin-top: 30px;
margin-bottom: 46px;
.my-button {
all: initial;
$color-start: #52a1ff;
$color-end: #4255ff;
padding: 8px 24px;
background: linear-gradient(128deg, $color-start 0%, $color-end 100%);
box-shadow: 0px 4px 7px 0px rgba(0, 82, 255, 0.27);
border-radius: 20px;
font-weight: bold;
font-size: 16px;
color: rgba(255, 255, 255, 0.9);
line-height: 24px;
text-align: center;
cursor: pointer;
&:hover {
background: linear-gradient(
128deg,
lighten($color-start, 5%) 0%,
lighten($color-end, 5%) 100%
);
}
.bottom {
display: grid;
grid-template-columns: repeat(2, 1fr);
row-gap: 15px;
&:active {
background: linear-gradient(
128deg,
darken($color-start, 10%) 0%,
darken($color-end, 10%) 100%
);
}
.text-container {
font-weight: 400;
font-size: 15px;
color: #333333;
width: 100%;
height: 20px;
display: flex;
&:disabled {
background: linear-gradient(
128deg,
lighten($color-start, 20%) 0%,
lighten($color-end, 20%) 100%
);
}
}
& > *:first-child {
margin-right: 82px;
}
& > *:last-child {
margin-left: 20px;
}
.title {
width: 208px;
height: 34px;
font-size: 36px;
color: #5577ff;
}
}
.text-name {
width: 93px;
}
.bottom {
display: grid;
grid-template-columns: repeat(2, 1fr);
row-gap: 15px;
.text-container {
font-weight: 400;
font-size: 15px;
color: #333333;
width: 100%;
height: 20px;
display: flex;
}
.text-name {
width: 93px;
}
}
}
}
}
</style>
</style>

@ -1,12 +1,12 @@
<template>
<div class="atlas-ui" ref="atlas">
<professionalProfile v-bind="atlasAttribute" />
<div class="on-off" @click="()=>$emit('hadRouter')">
<el-icon>
<Right />
</el-icon>
</div>
<div class="atlas-ui" ref="atlas">
<professionalProfile v-bind="atlasAttribute" />
<div class="on-off" @click="() => $emit('hadRouter')">
<el-icon>
<Right />
</el-icon>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, onMounted } from 'vue'
@ -15,36 +15,32 @@ const $emit = defineEmits(['hadRouter'])
const atlas = ref(null)
const atlasAttribute = reactive({ width: 0, height: 0 })
onMounted(() => {
const el: HTMLElement = atlas.value!
const width = +getComputedStyle(el).width.slice(0, -2)
const height = +getComputedStyle(el).height.slice(0, -2)
atlasAttribute.width = width
atlasAttribute.height = height
const el: HTMLElement = atlas.value!
const width = +getComputedStyle(el).width.slice(0, -2)
const height = +getComputedStyle(el).height.slice(0, -2)
atlasAttribute.width = width
atlasAttribute.height = height
})
</script>
<style lang="scss">
.atlas-ui {
width: 100%;
height: 100%;
position: relative;
overflow: hidden;
&:hover .on-off {
transform: translate(0%);
padding-right: 10px;
}
.on-off {
position: absolute;
top: 0;
right: 0;
cursor: pointer;
padding-top: 5px;
transform: translate(100%);
transition: all .3s;
}
width: 100%;
height: 100%;
position: relative;
overflow: hidden;
&:hover .on-off {
transform: translate(0%);
padding-right: 10px;
}
.on-off {
position: absolute;
top: 0;
right: 0;
cursor: pointer;
padding-top: 5px;
transform: translate(100%);
transition: all 0.3s;
}
}
</style>
</style>

@ -1,41 +1,49 @@
<template>
<div class="course-chapters">
<div class="flex-layout">
<div class="flex-left">
<div class="left" ref="atlasCon">
<!-- 知识图谱 -->
<atlas-ui @hadRouter="handle" />
</div>
<div class="right-top radius-10 vertical-line">
<!-- 计算机导论 -->
<theory-ui :learnInfo="learnInfo" />
</div>
<div class="right-bottom radius-10 vertical-line">
<!-- 课程目标 -->
<objective-ui :orogramObjective="orogramObjective" />
</div>
<div class="bottom">
<!-- 可折叠基本概念 -->
<fold-info-ui :foldInfoData="foldInfoData"/>
</div>
</div>
<div class="flex_right">
<div class="top-container">
<img src="" alt="">
</div>
<div class="bottom-container radius-10">
<!-- 查看资源 -->
<look-resource-ui :lookResource="lookResource"/>
</div>
</div>
<div class="course-chapters">
<div class="flex-layout">
<div class="flex-left">
<div class="left" ref="atlasCon">
<!-- 知识图谱 -->
<atlas-ui @hadRouter="handle" />
</div>
<div class="right-top radius-10 vertical-line">
<!-- 计算机导论 -->
<theory-ui :learnInfo="learnInfo" />
</div>
<div class="right-bottom radius-10 vertical-line">
<!-- 课程目标 -->
<objective-ui :orogramObjective="orogramObjective" />
</div>
<div class="bottom">
<!-- 可折叠基本概念 -->
<fold-info-ui :foldInfoData="foldInfoData" />
</div>
</div>
<div class="flex_right">
<div class="top-container">
<img src="" alt="" />
</div>
<div class="bottom-container radius-10">
<!-- 查看资源 -->
<look-resource-ui :lookResource="lookResource" />
</div>
</div>
</div>
</div>
</template>
<script lang='ts' setup>
import { getLearnInfoApi, getOrogramObjectiveApi } from '@/api/courseChaptersApi'
import { theoryUi, objectiveUi, atlasUi, lookResourceUi,foldInfoUi } from './components/KnowledgeGraphUi/index'
<script lang="ts" setup>
import {
getLearnInfoApi,
getOrogramObjectiveApi,
} from '@/api/courseChaptersApi'
import {
theoryUi,
objectiveUi,
atlasUi,
lookResourceUi,
foldInfoUi,
} from './components/KnowledgeGraphUi/index'
import { reactive } from 'vue'
import { useRouter } from 'vue-router'
const $router = useRouter()
@ -45,106 +53,104 @@ const handle = () => $router.push('/knowledgeAtlas')
// theory-ui
const learnInfo: object[] = reactive([])
getLearnInfoApi().then(res => learnInfo.push(...res as object[]))
getLearnInfoApi().then((res) => learnInfo.push(...(res as object[])))
// objective-ui
const orogramObjective: any = reactive({})
getOrogramObjectiveApi().then(res => Object.assign(orogramObjective, res))
getOrogramObjectiveApi().then((res) => Object.assign(orogramObjective, res))
// look-resource-ui
const lookResource:any = reactive({})
const lookResource: any = reactive({})
// fold-info-ui
const foldInfoData:any = reactive({})
const foldInfoData: any = reactive({})
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
.course-chapters {
width: 100%;
height: 100%;
position: relative;
background: #F2F7FB;
width: 100%;
height: 100%;
position: relative;
background: #f2f7fb;
&,
* {
box-sizing: border-box;
}
&,
* {
box-sizing: border-box;
}
$right-box-width: 555px;
$right-box-width: 555px;
.radius-10 {
border-radius: 10px;
overflow: hidden;
}
.radius-10 {
border-radius: 10px;
overflow: hidden;
}
.vertical-line {
position: relative;
.vertical-line {
position: relative;
&::before {
content: '';
display: block;
position: absolute;
height: 100%;
width: 12px;
background-color: #2147FB;
}
&::before {
content: '';
display: block;
position: absolute;
height: 100%;
width: 12px;
background-color: #2147fb;
}
}
.flex-layout {
display: flex;
justify-content: space-between;
align-items: flex-start;
.flex-left {
display: grid;
grid-template-columns: repeat(2, auto);
width: 1243px;
.left {
grid-row: 1/3;
width: 664px;
height: 424px;
}
.right-top {
justify-self: end;
width: $right-box-width;
height: 243px;
}
.right-bottom {
justify-self: end;
align-self: end;
width: $right-box-width;
height: 168px;
}
.bottom {
margin-top: 15px;
grid-column: 1/3;
width: 100%;
min-height: 521px;
}
}
.flex-layout {
display: flex;
justify-content: space-between;
align-items: flex-start;
.flex-left {
display: grid;
grid-template-columns: repeat(2, auto);
width: 1243px;
.left {
grid-row: 1/3;
width: 664px;
height: 424px;
}
.right-top {
justify-self: end;
width: $right-box-width;
height: 243px;
}
.right-bottom {
justify-self: end;
align-self: end;
width: $right-box-width;
height: 168px;
}
.bottom {
margin-top: 15px;
grid-column: 1/3;
width: 100%;
min-height: 521px;
}
}
.flex_right {
width: 355px;
.flex_right {
width: 355px;
.top-container {
height: 231px;
margin-bottom: 23px;
img{
width: 100%;
height: 100%;
}
}
.bottom-container {
min-height: 945px;
}
.top-container {
height: 231px;
margin-bottom: 23px;
img {
width: 100%;
height: 100%;
}
}
}
.bottom-container {
min-height: 945px;
}
}
}
}
</style>

@ -1,14 +1,14 @@
<template>
<div class="knowledge-atlas">
<atlas-ui @hadRouter="handle" />
</div>
<div class="knowledge-atlas">
<atlas-ui @hadRouter="handle" />
</div>
</template>
<script lang='ts' setup>
<script lang="ts" setup>
import { atlasUi } from './components/KnowledgeGraphUi/index'
import { useRouter } from 'vue-router';
import { useRouter } from 'vue-router'
const $router = useRouter()
const handle = () => $router.push('/curriculumCenter/courseChapters')
</script>
<style lang='scss' scoped></style>
<style lang="scss" scoped></style>

@ -1,14 +1,3 @@
<<<<<<< HEAD
<template>
<div>知识点</div>
</template>
<script lang="ts" setup>
import {} from 'vue'
</script>
<style lang="scss" scoped></style>
=======
<script setup>
import { ref } from 'vue'
import { Delete, Edit } from '@element-plus/icons-vue'
@ -123,4 +112,3 @@ const params = ref({
overflow: hidden;
}
</style>
>>>>>>> 4fe89b0398cd428950ca36bfe5d25f813217eec4

File diff suppressed because it is too large Load Diff

@ -1,132 +1,133 @@
<template>
<div class="ch">
<video src="D:\前端\前端code\vedio\薛之谦 - 病态.mp4" width="240px" controls>法学</video>
<div class="ch1">
<p>开课时间2018年11月14日~2023年11月14日</p>
<p>课程类型公共开放课程</p>
<p>学习人数120</p>
</div>
</div>
<div class="ma">
</div>
<div class="en">
</div>
<div class="ph">
</div>
<div class="or">
<div class="ch">
<video
src="D:\前端\前端code\vedio\薛之谦 - 病态.mp4"
width="240px"
controls
>
法学
</video>
<div class="ch1">
<p>开课时间2018年11月14日~2023年11月14日</p>
<p>课程类型公共开放课程</p>
<p>学习人数120</p>
</div>
<div class="warpper">
</div>
<div class="vo">
</div>
<div class="ma"></div>
<div class="en"></div>
<div class="ph"></div>
<div class="or"></div>
<div class="warpper"></div>
<div class="vo">
请选择院系专业:
<button><select>
<button>
<select>
<option>国际教育学院</option>
<option>能源工程学院</option>
<option>体育学院</option>
<option>马克思主义学院</option>
<option>智能制造学院</option>
<option>商务英语学院</option>
</select></button>
<button><select>
</select>
</button>
<button>
<select>
<option>01</option>
<option>02</option>
<option>03</option>
<option>04</option>
<option>05</option>
</select></button><br>
请选择年级:
</select>
</button>
<br />
请选择年级:
<button>
<select>
<option>大一</option>
<option>大二</option>
<option>大三</option>
<option>大四</option>
</select></button><br>
上传学科文件<input type="file">
</select>
</button>
<br />
上传学科文件
<input type="file" />
<form>
<button type="submit">提交</button>
<button type="reset">重置</button><br>
<div style="width: 100%;display: flex;justify-content: space-between;">
<button >上一页</button>
<button>下一页</button>
<button type="submit">提交</button>
<button type="reset">重置</button>
<br />
<div style="width: 100%; display: flex; justify-content: space-between">
<button>上一页</button>
<button>下一页</button>
</div>
</form>
</div>
</template>
<script lang="ts" setup>
import {} from 'vue'
</script>
<style lang="scss" scoped>
.ch{
height: 300px;
width: 240px;
float: left;
line-height: 1.5;
margin-right: 5px;
background-color: rgba(183, 126, 164, 0.17);
box-sizing: border-box;
</template>
<script lang="ts" setup>
import {} from 'vue'
</script>
<style lang="scss" scoped>
.ch {
height: 300px;
width: 240px;
float: left;
line-height: 1.5;
margin-right: 5px;
background-color: rgba(183, 126, 164, 0.17);
box-sizing: border-box;
}
.ma{
height: 300px;
width: 240px;
float: left;
line-height: 1.5;
margin-right: 5px;
background-color: rgba(183, 126, 164, 0.17);
box-sizing: border-box;
.ma {
height: 300px;
width: 240px;
float: left;
line-height: 1.5;
margin-right: 5px;
background-color: rgba(183, 126, 164, 0.17);
box-sizing: border-box;
}
.en{
height: 300px;
width: 240px;
float: left;
line-height: 1.5;
margin-right: 5px;
background-color: rgba(183, 126, 164, 0.17);
box-sizing: border-box;
.en {
height: 300px;
width: 240px;
float: left;
line-height: 1.5;
margin-right: 5px;
background-color: rgba(183, 126, 164, 0.17);
box-sizing: border-box;
}
.ph{
height: 300px;
width: 240px;
float: left;
line-height: 1.5;
margin-right: 5px;
background-color: rgba(183, 126, 164, 0.17);
box-sizing: border-box;
.ph {
height: 300px;
width: 240px;
float: left;
line-height: 1.5;
margin-right: 5px;
background-color: rgba(183, 126, 164, 0.17);
box-sizing: border-box;
}
.warpper{
.warpper {
width: 1222px;
height: 300px;
float: left;
background-color: rgb(202, 194, 236);
box-sizing: border-box;
}
.or{
height: 300px;
width: 240px;
float: left;
line-height: 1.5;
margin-right: 5px;
background-color: rgba(183, 126, 164, 0.17);
box-sizing: border-box;
.or {
height: 300px;
width: 240px;
float: left;
line-height: 1.5;
margin-right: 5px;
background-color: rgba(183, 126, 164, 0.17);
box-sizing: border-box;
}
.vo{
.vo {
width: 1222px;
height: 130px;
background-color: rgb(250, 225, 243);
background-color: rgb(250, 225, 243);
border: solid 1px rgb(220, 214, 214);
float: left;
}
.ch.ch1{
.ch.ch1 {
}
</style>

@ -1,37 +1,85 @@
<template>
<div>
<div class="top">
<div class="loop active-nav" @click="click($event,2)">
<img src="../../assets/icons/课程简介.svg" alt="" width="50px" height="50px">
<div class="loop active-nav" @click="click($event, 2)">
<img
src="../../assets/icons/课程简介.svg"
alt=""
width="50px"
height="50px"
/>
<p>简介</p>
</div>
<div class="loop" @click="click($event,1)">
<img src="../../assets/icons/ppt.svg" alt="" width="50px" height="50px">
<div class="loop" @click="click($event, 1)">
<img
src="../../assets/icons/ppt.svg"
alt=""
width="50px"
height="50px"
/>
<p>ppt</p>
</div>
<div class="loop" @click="click($event,0)">
<img src="../../assets/icons/视频.svg" alt="" width="50px" height="50px">
<div class="loop" @click="click($event, 0)">
<img
src="../../assets/icons/视频.svg"
alt=""
width="50px"
height="50px"
/>
<p>视频</p>
</div>
<div class="loop" @click="click($event,3)">
<img src="../../assets/icons/文本.svg" alt="" width="50px" height="50px">
<div class="loop" @click="click($event, 3)">
<img
src="../../assets/icons/文本.svg"
alt=""
width="50px"
height="50px"
/>
<p>文本</p>
</div>
<div class="loop" @click="click($event,4)">
<img src="../../assets/icons/音频.svg" alt="" width="50px" height="50px">
<div class="loop" @click="click($event, 4)">
<img
src="../../assets/icons/音频.svg"
alt=""
width="50px"
height="50px"
/>
<p>音频</p>
</div>
</div>
<div class="body" v-if="activeIndex == 0">
<ul>
<li v-for="item, index in videoList" :key="index">
<li v-for="(item, index) in videoList" :key="index">
<video :src="item.url" controls width="390px"></video>
<div class="text1">软件工程的奥秘<br>构建无暇的应用程序关键技巧</div>
<div class="text1">
软件工程的奥秘
<br />
构建无暇的应用程序关键技巧
</div>
<form action="">
<input type="file" multiple @change="uploadChange" style="cursor: pointer;"><br>
<button type="submit" @click="submitUploadFile" style="cursor: pointer;">上传</button>
<button><a href="http://ceshi132132.oss-cn-wuhan-lr.aliyuncs.com/img/1c52b390170a4734aba783a5473e891b.jpg?Expires=1717731833&OSSAccessKeyId=LTAI5tFkdu3y5WddxbjgaG2F&Signature=KtuZCTVO7cbwZAdD7ytpphkYhLw%3D" download="">下载</a></button>
<button type="reset" style="cursor: pointer;">重选</button>
<input
type="file"
multiple
@change="uploadChange"
style="cursor: pointer"
/>
<br />
<button
type="submit"
@click="submitUploadFile"
style="cursor: pointer"
>
上传
</button>
<button>
<a
href="http://ceshi132132.oss-cn-wuhan-lr.aliyuncs.com/img/1c52b390170a4734aba783a5473e891b.jpg?Expires=1717731833&OSSAccessKeyId=LTAI5tFkdu3y5WddxbjgaG2F&Signature=KtuZCTVO7cbwZAdD7ytpphkYhLw%3D"
download=""
>
下载
</a>
</button>
<button type="reset" style="cursor: pointer">重选</button>
</form>
</li>
</ul>
@ -39,82 +87,195 @@
<div class="body" v-if="activeIndex == 1">
<ul>
<li v-for="item, index in pptList" :key="index">
<img :src="item.url" title="ppt" height="200px" width="390px">
<div class="text1">软件工程的奥秘<br>构建无暇的应用程序关键技巧</div>
<li v-for="(item, index) in pptList" :key="index">
<img :src="item.url" title="ppt" height="200px" width="390px" />
<div class="text1">
软件工程的奥秘
<br />
构建无暇的应用程序关键技巧
</div>
<form action="">
<input type="file" multiple @change="uploadChange"><br>
<button type="submit" @click="submitUploadFile" style="cursor: pointer;">上传</button>
<button><a href="http://ceshi132132.oss-cn-wuhan-lr.aliyuncs.com/img/1c52b390170a4734aba783a5473e891b.jpg?Expires=1717731833&OSSAccessKeyId=LTAI5tFkdu3y5WddxbjgaG2F&Signature=KtuZCTVO7cbwZAdD7ytpphkYhLw%3D" download="">下载</a></button>
<button type="reset" style="cursor: pointer;">重选</button>
<input type="file" multiple @change="uploadChange" />
<br />
<button
type="submit"
@click="submitUploadFile"
style="cursor: pointer"
>
上传
</button>
<button>
<a
href="http://ceshi132132.oss-cn-wuhan-lr.aliyuncs.com/img/1c52b390170a4734aba783a5473e891b.jpg?Expires=1717731833&OSSAccessKeyId=LTAI5tFkdu3y5WddxbjgaG2F&Signature=KtuZCTVO7cbwZAdD7ytpphkYhLw%3D"
download=""
>
下载
</a>
</button>
<button type="reset" style="cursor: pointer">重选</button>
</form>
</li>
</ul>
</div>
<div class="body" v-if="activeIndex == 2">
<ul>
<li>
<img src="../../assets/images/软件1.png" title="软件工程的奥秘" width="390px" height="200px">
<div class="text1">软件工程的奥秘<br>构建无暇的应用程序关键技巧</div>
<div class="text2">课程类型:公共任选课<br>
授课老师:王易系<br>
<img
src="../../assets/images/软件1.png"
title="软件工程的奥秘"
width="390px"
height="200px"
/>
<div class="text1">
软件工程的奥秘
<br />
构建无暇的应用程序关键技巧
</div>
<div class="text2">
课程类型:公共任选课
<br />
授课老师:王易系
<br />
报名人数:130
</div>
</li>
<li>
<img src="../../assets/images/软件2.png" title="顶级工程师" width="390px" height="200px">
<div class="text1">如何成为顶级工程师<br>成功之路解析</div>
<div class="text2">课程类型:公共任选课<br>
授课老师:刘苏杭<br>
<img
src="../../assets/images/软件2.png"
title="顶级工程师"
width="390px"
height="200px"
/>
<div class="text1">
如何成为顶级工程师
<br />
成功之路解析
</div>
<div class="text2">
课程类型:公共任选课
<br />
授课老师:刘苏杭
<br />
报名人数:126
</div>
</li>
<li>
<img src="../../assets/images/软件3.png" title="软件黑科技" width="390px" height="200px">
<div class="text1">软件工程的黑科技<br>提高开发效率的秘密技巧大揭秘</div>
<div class="text2">课程类型:公共任选课<br>
授课老师:安书名<br>
<img
src="../../assets/images/软件3.png"
title="软件黑科技"
width="390px"
height="200px"
/>
<div class="text1">
软件工程的黑科技
<br />
提高开发效率的秘密技巧大揭秘
</div>
<div class="text2">
课程类型:公共任选课
<br />
授课老师:安书名
<br />
报名人数:117
</div>
</li>
<li>
<img src="../../assets/images/软件4.png" title="未来趋势" width="390px" height="200px">
<div class="text1">软件工程界的未来趋势<br>AI大数据和区块的巨大影响</div>
<div class="text2">课程类型:公共任选课<br>
授课老师:萨基姆<br>
<img
src="../../assets/images/软件4.png"
title="未来趋势"
width="390px"
height="200px"
/>
<div class="text1">
软件工程界的未来趋势
<br />
AI大数据和区块的巨大影响
</div>
<div class="text2">
课程类型:公共任选课
<br />
授课老师:萨基姆
<br />
报名人数:140
</div>
</li>
<li>
<img src="../../assets/images/软件5.png" title="避免陷阱" width="390px" height="200px">
<div class="text1">软件工程中常见的陷阱级如何避免<br>优化你的开发过程</div>
<div class="text2">课程类型:公共任选课<br>
授课老师:何舒心<br>
<img
src="../../assets/images/软件5.png"
title="避免陷阱"
width="390px"
height="200px"
/>
<div class="text1">
软件工程中常见的陷阱级如何避免
<br />
优化你的开发过程
</div>
<div class="text2">
课程类型:公共任选课
<br />
授课老师:何舒心
<br />
报名人数:125
</div>
</li>
<li>
<img src="../../assets/images/软件6.png" title="必备工具" width="390px" height="200px">
<div class="text1">精通软件工程的必备工具<br>代码管理测试和持续集成</div>
<div class="text2">课程类型:公共任选课<br>
授课老师:朱佳娜<br>
<img
src="../../assets/images/软件6.png"
title="必备工具"
width="390px"
height="200px"
/>
<div class="text1">
精通软件工程的必备工具
<br />
代码管理测试和持续集成
</div>
<div class="text2">
课程类型:公共任选课
<br />
授课老师:朱佳娜
<br />
报名人数:121
</div>
</li>
<li>
<img src="../../assets/images/软件7.png" title="面试攻略" width="390px" height="200px">
<div class="text1">软件工程师面试攻略<br>如何在技术中脱颖而出</div>
<div class="text2">课程类型:公共任选课<br>
授课老师:胡树立<br>
<img
src="../../assets/images/软件7.png"
title="面试攻略"
width="390px"
height="200px"
/>
<div class="text1">
软件工程师面试攻略
<br />
如何在技术中脱颖而出
</div>
<div class="text2">
课程类型:公共任选课
<br />
授课老师:胡树立
<br />
报名人数:117
</div>
</li>
<li>
<img src="../../assets/images/软件8.png" alt="实战经验" width="390px" height="200px">
<div class="text1">软件工程实战经验分析<br>高效团队合作的秘密武器</div>
<div class="text2">课程类型:公共任选课<br>
授课老师:张海山<br>
<img
src="../../assets/images/软件8.png"
alt="实战经验"
width="390px"
height="200px"
/>
<div class="text1">
软件工程实战经验分析
<br />
高效团队合作的秘密武器
</div>
<div class="text2">
课程类型:公共任选课
<br />
授课老师:张海山
<br />
报名人数:125
</div>
</li>
@ -122,40 +283,98 @@
</div>
<div class="body" v-if="activeIndex == 3">
<ul>
<li v-for="item, index in textList" :key="index">
<img src="../../assets/icons/文本1.png" title="软件工程的奥秘" width="390px" height="200px">
<li v-for="(item, index) in textList" :key="index">
<img
src="../../assets/icons/文本1.png"
title="软件工程的奥秘"
width="390px"
height="200px"
/>
<textarea name="" id="">点击输入文本内容:</textarea>
<form action="">
<input type="file" multiple @change="uploadChange" style="cursor: pointer;"><br>
<button type="submit" @click="submitUploadFile" style="cursor: pointer;">上传</button>
<button><a href="http://ceshi132132.oss-cn-wuhan-lr.aliyuncs.com/img/1c52b390170a4734aba783a5473e891b.jpg?Expires=1717731833&OSSAccessKeyId=LTAI5tFkdu3y5WddxbjgaG2F&Signature=KtuZCTVO7cbwZAdD7ytpphkYhLw%3D" download="">下载</a></button>
<button type="reset" style="cursor: pointer;">重选</button>
<input
type="file"
multiple
@change="uploadChange"
style="cursor: pointer"
/>
<br />
<button
type="submit"
@click="submitUploadFile"
style="cursor: pointer"
>
上传
</button>
<button>
<a
href="http://ceshi132132.oss-cn-wuhan-lr.aliyuncs.com/img/1c52b390170a4734aba783a5473e891b.jpg?Expires=1717731833&OSSAccessKeyId=LTAI5tFkdu3y5WddxbjgaG2F&Signature=KtuZCTVO7cbwZAdD7ytpphkYhLw%3D"
download=""
>
下载
</a>
</button>
<button type="reset" style="cursor: pointer">重选</button>
</form>
</li>
</ul>
</ul>
</div>
<div class="body" v-if="activeIndex == 4">
<ul>
<li v-for="item, index in audioList" :key="index">
<img src="../../assets/icons/音乐.png" title="软件工程的奥秘" width="390px" height="180px">
<li v-for="(item, index) in audioList" :key="index">
<img
src="../../assets/icons/音乐.png"
title="软件工程的奥秘"
width="390px"
height="180px"
/>
<div class="text1">点击播放软件工程的奥秘</div>
<video src="../../assets/images/1.mp3" controls height="50px" width="300px"></video>
<video
src="../../assets/images/1.mp3"
controls
height="50px"
width="300px"
></video>
<!-- <audio src="../../assets/images/1.mp3" controls></audio> -->
<form action="">
<input type="file" multiple @change="uploadChange" style="cursor: pointer;"><br>
<button type="submit" @click="submitUploadFile" style="cursor: pointer;">上传</button>
<button><a href="http://ceshi132132.oss-cn-wuhan-lr.aliyuncs.com/img/1c52b390170a4734aba783a5473e891b.jpg?Expires=1717731833&OSSAccessKeyId=LTAI5tFkdu3y5WddxbjgaG2F&Signature=KtuZCTVO7cbwZAdD7ytpphkYhLw%3D" download="">下载</a></button>
<button type="reset" style="cursor: pointer;">重选</button>
<input
type="file"
multiple
@change="uploadChange"
style="cursor: pointer"
/>
<br />
<button
type="submit"
@click="submitUploadFile"
style="cursor: pointer"
>
上传
</button>
<button>
<a
href="http://ceshi132132.oss-cn-wuhan-lr.aliyuncs.com/img/1c52b390170a4734aba783a5473e891b.jpg?Expires=1717731833&OSSAccessKeyId=LTAI5tFkdu3y5WddxbjgaG2F&Signature=KtuZCTVO7cbwZAdD7ytpphkYhLw%3D"
download=""
>
下载
</a>
</button>
<button type="reset" style="cursor: pointer">重选</button>
</form>
</li>
</ul>
</div>
<div class="" @click="gotoinfo">
</div>
<div class="" @click="gotoinfo"></div>
<div class="buttom">
<el-pagination background layout="prev, pager, next,total" :page-size="pageSize" :total="total" class="pagination"
:pager-count="11" @current-change="currentChange" />
<el-pagination
background
layout="prev, pager, next,total"
:page-size="pageSize"
:total="total"
class="pagination"
:pager-count="11"
@current-change="currentChange"
/>
</div>
</div>
</template>
@ -168,14 +387,15 @@ import { uploadFile } from '../../api/courseChaptersApi'
const activeIndex = ref(0)
const router = useRouter()
const gotoinfo = () => {
console.log(router);
console.log(router)
router.push('/courseResourcesManagement/courseInfo')
}
function click(e,index) {
document.querySelectorAll('.loop').forEach(item=> item.classList.remove('active-nav'))
function click(e, index) {
document
.querySelectorAll('.loop')
.forEach((item) => item.classList.remove('active-nav'))
e.currentTarget.classList.add('active-nav')
activeIndex.value = index
}
//====================
@ -191,11 +411,12 @@ const videoList = ref([
{ url: '6' },
{ url: '7' },
{ url: '8' },
])
const pptList = ref([
{ url: '/src/assets/images/0.jpg' },
{ url: 'http://ceshi132132.oss-cn-wuhan-lr.aliyuncs.com/img/1c52b390170a4734aba783a5473e891b.jpg?Expires=1717731833&OSSAccessKeyId=LTAI5tFkdu3y5WddxbjgaG2F&Signature=KtuZCTVO7cbwZAdD7ytpphkYhLw%3D' },
{
url: 'http://ceshi132132.oss-cn-wuhan-lr.aliyuncs.com/img/1c52b390170a4734aba783a5473e891b.jpg?Expires=1717731833&OSSAccessKeyId=LTAI5tFkdu3y5WddxbjgaG2F&Signature=KtuZCTVO7cbwZAdD7ytpphkYhLw%3D',
},
{ url: '3' },
{ url: '4' },
{ url: '5' },
@ -233,8 +454,6 @@ function changePage() {
// })
}
function currentChange(number) {
console.log(number, 'num')
page.value = number
@ -242,20 +461,17 @@ function currentChange(number) {
}
const file = ref(null)
const uploadChange = (e) => {
console.log(e.target.files[0]);
console.log(e.target.files[0])
file.value = e.target.files[0]
}
const uploadFileEvent = () => {
}
const uploadFileEvent = () => {}
const submitUploadFile = async () => {
const formData = new FormData()
formData.append('courseId',1)
formData.append('file',file.value)
formData.append('courseId', 1)
formData.append('file', file.value)
await uploadFile(formData)
}
//============
</script>
<style lang="scss">
.top {
@ -271,12 +487,12 @@ const submitUploadFile = async () => {
border-bottom: 1px solid;
}
&>* {
transition: .1s;
& > * {
transition: 0.1s;
cursor: pointer;
}
.active-nav {
.active-nav {
border-bottom: 5px solid blue !important;
}
}
@ -304,7 +520,6 @@ li {
height: 320px;
width: 390px;
background-color: rgb(237, 237, 238);
}
.loop {
@ -313,7 +528,6 @@ li {
text-align: center;
padding: 20px;
border-bottom: 1px solid rgb(187, 181, 181);
;
background-color: rgb(253, 252, 252);
}
@ -327,8 +541,8 @@ li {
line-height: 20px;
color: rgb(186, 43, 11);
}
.body a{
all:initial;
.body a {
all: initial;
cursor: pointer;
}
.buttom {
@ -352,4 +566,4 @@ li {
git pull
git push
-->
-->

@ -39,8 +39,20 @@
<div class="sidebar">
<div class="sidebar-header">
<div class="sidebar-header-imag">
<div class="sidebar-header-imag1"><img src="/src/assets/images/gd (3).png" width="100%" height="100%"></div>
<div class="sidebar-header-imag2"><img src="/src/assets/images/sjx(1).png" width="100%" height="100%"></div>
<div class="sidebar-header-imag1">
<img
src="/src/assets/images/gd (3).png"
width="100%"
height="100%"
/>
</div>
<div class="sidebar-header-imag2">
<img
src="/src/assets/images/sjx(1).png"
width="100%"
height="100%"
/>
</div>
</div>
<h1>知识点</h1>
<p>共发布225个</p>
@ -51,11 +63,17 @@
<div class="content">
<div class="txt">
<div class="txt1">联试题数233 &nbsp;&nbsp;&nbsp;关联学习数22</div>
<div class="imag"><img src="/src/assets/images/sjx(1).png" width="100%" height="100%"></div>
<div class="imag">
<img
src="/src/assets/images/sjx(1).png"
width="100%"
height="100%"
/>
</div>
</div>
</div>
<div class="lina">
<e-charts style="height: 260px;" id="lina" />
<e-charts style="height: 260px" id="lina" />
</div>
<!-- <div id="staff_all_orderCount" style="width: 300px;height:300px;"></div> -->
<!-- <e-chars class="lina" option="option"/> -->
@ -64,16 +82,20 @@
<div class="completion">
<!-- <div class="echates-title">知识点掌握百分比</div> -->
<div class="box">
<div id="liquidfill" style="width: 65%; height: 65%; "></div>
<div id="liquidfill" style="width: 65%; height: 65%"></div>
<div class="percentage">
<h4>平均完成率:<p>80%</p>
<h4>
平均完成率:
<p>80%</p>
</h4>
</div>
</div>
<div class="box">
<div id="liquidfil" style="width: 65%; height: 65%; "></div>
<div id="liquidfil" style="width: 65%; height: 65%"></div>
<div class="percentage">
<h4>平均完成率:<p>60%</p>
<h4>
平均完成率:
<p>60%</p>
</h4>
</div>
</div>
@ -112,36 +134,39 @@
<h1>49</h1>
<p>80% ~ 100%</p>
</div>
<div class="libox" style="border-left: 2px solid #74a5ff;">
<div class="libox" style="border-left: 2px solid #74a5ff">
<h1>3</h1>
<p>60% ~ 79%</p>
</div>
<div class="libox" style="border-left: 2px solid #74a5ff;">
<div class="libox" style="border-left: 2px solid #74a5ff">
<h1>4</h1>
<p>59%以下</p>
</div>
</div>
<!-- 知识点方法 -->
<div class="box1">
<div class="method">
<li>掌握最好基本方法</li>
<li>关联资源数最多法律责任</li>
<li>掌握最欠缺基本知识方法</li>
</div>
<div class="method">
<li>掌握最好基本方法</li>
<li>关联资源数最多法律责任</li>
<li>掌握最欠缺基本知识方法</li>
</div>
</div>
</div>
</div>
<!-- 底部 -->
<div class="footer">
<h3>软件工程专业</h3>
<h1>教学一体化平台</h1>
<p>关于我们&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp; &nbsp;联系我们&nbsp; &nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp; 服务协议
<p>
关于我们&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp; &nbsp;联系我们&nbsp;
&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp; 服务协议
</p>
<p style="font-size: 13px; margin-top: 70px">
黄淮学院版权所有@2023 湘豫CP备 19005950-1
<br />
违法和不良信息举报 举报电话0xxx-8xxxxxxx 举报邮箱xxxxxxxxx@qq.com
</p>
<p style="font-size: 13px;margin-top: 70px">黄淮学院版权所有@2023 湘豫CP备 19005950-1<br>
违法和不良信息举报 举报电话0xxx-8xxxxxxx 举报邮箱xxxxxxxxx@qq.com</p>
</div>
<div></div>
</template>
@ -149,36 +174,36 @@
<script lang="ts" setup>
// import axios from 'axios';
import { ref, onMounted, markRaw } from 'vue'
import * as echarts from 'echarts';
import * as echarts from 'echarts'
import 'echarts-liquidfill'
// var ROOT_PATH = 'https://echarts.apache.org/examples';
// type EChartsOption = echarts.EChartsOption;
var option = null
let option = null
// dom dom
onMounted(() => {
const dom = document.getElementById('main')
// dom echarts
var myChart = echarts.init(dom);
let myChart = echarts.init(dom)
console.log(dom, 'dom')
// loading
myChart.showLoading();
myChart.showLoading()
// json
fetch('../../../public/nodeList.json').then((res) => {
res.json().then(graph => {
console.log(graph);
myChart.hideLoading();
res.json().then((graph) => {
console.log(graph)
myChart.hideLoading()
// node links
option = {
tooltip: {},
legend: [
{
data: graph.categories.map(function (a: { name: string }) {
return a.name;
})
}
return a.name
}),
},
],
series: [
{
name: 'Les Miserables',
@ -191,44 +216,35 @@ onMounted(() => {
label: {
show: true,
position: 'right',
formatter: '{b}'
formatter: '{b}',
},
labelLayout: {
hideOverlap: true
hideOverlap: true,
},
scaleLimit: {
min: 0.4,
max: 2
max: 2,
},
lineStyle: {
color: 'source',
curveness: 0.3
}
}
]
};
curveness: 0.3,
},
},
],
}
// echarts
myChart.setOption(option);
myChart.setOption(option)
})
})
// option && myChart.setOption(option);
})
onMounted(() => {
const chartInstance: any = ref(null)
const updateChart = () => {
chartInstance.value = markRaw(
echarts.init(document?.getElementById(`liquidfill`,)),
echarts.init(document?.getElementById(`liquidfill`)),
)
const option = {
series: [
@ -287,54 +303,52 @@ onMounted(() => {
onMounted(() => {
const dom = document.getElementById('lina')
// dom echarts
var myChart = echarts.init(dom);
let myChart = echarts.init(dom)
console.log(dom, 'dom')
// loading
myChart.showLoading();
myChart.showLoading()
// json
fetch('../../../public/nodeList.json').then((res) => {
res.json().then(graph => {
console.log(graph);
myChart.hideLoading();
res.json().then((graph) => {
console.log(graph)
myChart.hideLoading()
// node links
option = {
xAxis: {
type: 'category',
boundaryGap: false,
data: ['记忆', '理解', '应用', '分析', '评价']
data: ['记忆', '理解', '应用', '分析', '评价'],
},
yAxis: {
type: 'value',
// min:'700',
splitLine:{
show:false
}
splitLine: {
show: false,
},
},
series: [
{
data: [820, 932, 901, 934, 1290],
type: 'line',
areaStyle: {},
}
]
};
},
],
}
// echarts
myChart.setOption(option);
myChart.setOption(option)
})
})
// option && myChart.setOption(option);
})
//
onMounted(() => {
const chartInstance: any = ref(null)
const updateChart = () => {
chartInstance.value = markRaw(
echarts.init(document?.getElementById(`liquidfil`,)),
echarts.init(document?.getElementById(`liquidfil`)),
)
const option = {
series: [
@ -411,7 +425,6 @@ onMounted(() => {
* {
margin: 0;
padding: 0;
}
ul {
@ -444,8 +457,6 @@ img {
background-image: url('/src/assets/images/top.png');
background-size: 100% 100%;
// background:linear-gradient(#74a5ff,#91b7ff,#A4c3ff);
}
//
@ -460,8 +471,7 @@ img {
width: 24%;
height: 10%;
margin-right: 20px;
// background-color: #6759ff;
// background-color: #6759ff;
}
.header .nav1 ul li {
@ -471,7 +481,7 @@ img {
color: white;
font-size: 12px;
text-align: center;
// border-right: 1px solid #FFFFFF;
// border-right: 1px solid #FFFFFF;
}
.header .nav2 {
@ -482,7 +492,7 @@ img {
height: 25%;
margin-top: 30px;
// margin-right: -260px;
// background-color: #6759ff;
// background-color: #6759ff;
}
.header .nav2 ul li {
@ -510,17 +520,17 @@ img {
font-size: 50px;
margin-top: 23px;
font-weight: bolder;
color: #FFFFFF;
color: #ffffff;
float: right;
margin-right: 173px // float: left;
// margin-left: 779px;
margin-right: 173px; // float: left;
// margin-left: 779px;
}
.header p {
font-size: 15px;
margin-top: 102px;
// font-weight:bolder;
color: #FFFFFF;
color: #ffffff;
float: right;
margin-right: -175px;
}
@ -541,13 +551,13 @@ img {
}
.subnav h1 {
border-bottom: 4px solid #0052FF;
border-bottom: 4px solid #0052ff;
font-size: 20px;
width: 10%;
height: 35px;
margin: auto;
font-weight: bolder;
color: #0052FF;
color: #0052ff;
text-align: center;
}
@ -561,7 +571,6 @@ img {
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-around;
}
.chart {
@ -588,8 +597,8 @@ img {
.sidebar .sidebar-header {
width: 100%;
height: 7%;
background: linear-gradient(#74a5ff, #91b7ff, #A4c3ff);
// transform: perspective(3em) rotateY(-6deg);
background: linear-gradient(#74a5ff, #91b7ff, #a4c3ff);
// transform: perspective(3em) rotateY(-6deg);
}
.sidebar .sidebar-header-imag {
@ -624,7 +633,7 @@ img {
font-size: 16px;
line-height: 30px;
// background-color: #728cc4;
// transform: perspective(3em) rotateY(-6deg);
// transform: perspective(3em) rotateY(-6deg);
}
.sidebar .sidebar-header p {
@ -636,7 +645,7 @@ img {
font-size: 13px;
line-height: 30px;
// background-color: #728cc4;
// transform: perspective(3em) rotateY(-6deg);
// transform: perspective(3em) rotateY(-6deg);
}
.sidebar .sidebar-header a {
@ -648,7 +657,7 @@ img {
font-size: 13px;
line-height: 30px;
// background-color: #728cc4;
// transform: perspective(3em) rotateY(-6deg);
// transform: perspective(3em) rotateY(-6deg);
}
.sidebar .sidebar-header-line {
@ -658,17 +667,16 @@ img {
background-color: #74a5ff;
float: left;
margin-top: 10px;
box-shadow: 1.5px -2px #F0F4FA;
box-shadow: 1.5px -2px #f0f4fa;
// box-shadow: 1.5px 1px #F0F4FA;
// transform: perspective(3em) rotateY(-6deg);
// transform: perspective(3em) rotateY(-6deg);
}
.sidebar .content {
width: 100%;
height: 6%;
background: linear-gradient(#74a5ff, #91b7ff, #A4c3ff);
background: linear-gradient(#74a5ff, #91b7ff, #a4c3ff);
margin-top: 10px;
}
.sidebar .content .txt {
@ -679,7 +687,6 @@ img {
justify-content: space-between;
flex-wrap: nowrap;
display: flex;
}
.sidebar .content .txt .imag {
@ -692,9 +699,8 @@ img {
height: 5%;
font-size: 14px;
margin-left: 4px;
color: #FFFFFF;
color: #ffffff;
margin-top: 15px;
}
.sidebar .lina {
@ -742,7 +748,7 @@ img {
height: 15%;
margin-top: 20px;
border-radius: 10px 10px 10px 10px;
background-color: rgb(125, 159, 232,0.5);
background-color: rgb(125, 159, 232, 0.5);
}
.percentage h4 {
@ -754,7 +760,7 @@ img {
display: flex;
flex-wrap: nowrap;
justify-content: space-evenly;
color: #F0F4FA;
color: #f0f4fa;
font-weight: bold;
// background-color: #5582dc;
}
@ -768,13 +774,16 @@ img {
// background-color: #b3c8f2;
}
//
.header1 {
position: relative;
text-align: center;
border-radius: 100%;
background: linear-gradient(60deg, rgba(84, 58, 183, 1) 0%, rgba(0, 172, 193, 1) 100%);
background: linear-gradient(
60deg,
rgba(84, 58, 183, 1) 0%,
rgba(0, 172, 193, 1) 100%
);
// color: rgb(207, 59, 59);
}
@ -811,12 +820,12 @@ img {
// background-color: white;
// }
.parallax>use {
.parallax > use {
/* 使use元素执行move-forever动画 */
animation: move-forever 25s cubic-bezier(.55, .5, .45, .5) infinite;
animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite;
}
.parallax>use:nth-child(1) {
.parallax > use:nth-child(1) {
/* 延迟2秒启动动画 */
/* 设置动画持续时间为7秒 */
@ -827,7 +836,7 @@ img {
// animation-delay: -2s;
}
.parallax>use:nth-child(2) {
.parallax > use:nth-child(2) {
// background-color: #0052FF;
animation-delay: -3s;
animation-duration: 10s;
@ -870,7 +879,6 @@ img {
// }
}
//
.knowledge {
width: 100%;
@ -878,7 +886,7 @@ img {
display: flex;
flex-direction: row;
justify-content: center;
background-color: #A1C1FF;
background-color: #a1c1ff;
// background-color: #A4c3ff;
padding-top: 20px;
}
@ -894,7 +902,7 @@ img {
.knowledge .libox h1 {
width: 100%;
height: 50%;
color: #F0F4FA;
color: #f0f4fa;
line-height: 50px;
text-align: center;
margin: auto;
@ -906,7 +914,7 @@ img {
.knowledge .libox p {
width: 100%;
height: 50%;
color: #F0F4FA;
color: #f0f4fa;
line-height: 50px;
text-align: center;
margin: auto;
@ -916,10 +924,10 @@ img {
}
//
.box1{
.box1 {
width: 100%;
height: 147px;
background-color: #A1C1FF;
background-color: #a1c1ff;
// height: 100%;
}
.method {
@ -932,7 +940,6 @@ img {
// background: linear-gradient(#74a5ff, #91b7ff, #A4c3ff);
}
.method li {
width: 90%;
height: 20%;
@ -941,11 +948,10 @@ img {
line-height: 35px;
margin-left: 10px;
padding-top: 10px;
color: #F0F4FA;
color: #f0f4fa;
// background-color: #74a5ff;
}
//
.footer {
margin-top: 100px;
@ -962,17 +968,17 @@ img {
text-align: center;
font-size: 15px;
padding-top: 40px;
color: #7F9EED;
color: #7f9eed;
font-weight: bolder;
}
.footer h1 {
width: 100%;
// position: absolute;
font-family: "kaiti_gb2312";
font-family: 'kaiti_gb2312';
margin-top: 10px;
font-size: 25px;
color: #7F9EED;
color: #7f9eed;
font-weight: bolder;
}
@ -980,10 +986,10 @@ img {
width: 100%;
height: 20px;
// position: absolute;
font-family: "kaiti_gb2312";
font-family: 'kaiti_gb2312';
margin-top: 25px;
font-size: 17px;
color: #7F9EED;
color: #7f9eed;
}
.echates-title {
@ -992,8 +998,8 @@ img {
font-weight: 700;
margin-bottom: 10px;
}
.bo{
.bo {
width: 100%;
background: linear-gradient(#74a5ff, #91b7ff, #A4c3ff);
background: linear-gradient(#74a5ff, #91b7ff, #a4c3ff);
}
</style>

Loading…
Cancel
Save