作业系统的初始化页面

This commit is contained in:
yangjun 2024-05-06 15:15:47 +08:00
parent 1bc8f22f37
commit 793efd15c7
8 changed files with 623 additions and 2 deletions

View File

@ -181,6 +181,30 @@ const site: AppRouteModule = {
title: '直播课堂',
}
},
{
path: 'checkKecheng',
name: 'checkKecheng',
component: () => import('/@/views/site/renKeJiaoCheng/openKecheng.vue'),
meta: {
title: '选择课程',
},
},
{
path: 'dqkcDetail',
name: 'dqkcDetail',
component: () => import('/@/views/site/renKeJiaoCheng/checkKecheng/dqxqkcDetail.vue'),
meta: {
title: '课程工作台',
},
},
{
path: 'dqkcGongju',
name: 'dqkcGongju',
component: () => import('/@/views/site/renKeJiaoCheng/checkKecheng/dqxqkcGongju.vue'),
meta: {
title: '课程工具',
},
},
],

View File

@ -1,5 +1,5 @@
<template>
<a-layout-footer>
<a-layout-footer style="margin-bottom:10px;">
<span class="footerLeft">TEL0431-85099971</span>
<span class="footerRight">Copyright 东北师范大学教务处 2022</span>
</a-layout-footer>

View File

@ -0,0 +1,111 @@
<template>
<a-card>
<a-row>
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 8 }" :key="index" v-for="(item, index) in allList" >
<div class="ketangCard ketangCardcol" >
<div class="rjkcTopDiv">
<div style="text-align: left;"><span>{{ toWeek(item.week) }}{{ item.hh }}</span></div>
</div>
<div class="rjkcBodyDiv">
<div class="kcmcDiv">{{ item.kcmc }}</div>
<div class="skddDiv" style="margin-top:20px;">{{ item.skdd }}</div>
<div class="xkrsDiv">{{ item.xkrs }}人选课&nbsp;&nbsp;&nbsp;<a-button class="buttonClass" @click="openKechengDetail(item)">进入课程</a-button></div>
</div>
</div>
</a-col>
</a-row>
</a-card>
</template>
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
import { getUserSf,getSysConfig } from '/@/views/site/utils/index';
import { defHttp } from '/@/utils/http/axios';
const allList = ref<any>([]);
const weebMap = {
'1': '星期一',
'2': '星期二',
'3': '星期三',
'4': '星期四',
'5': '星期五',
'6': '星期六',
'7': '星期日',
}
function toWeek(week){
return weebMap[week];
}
//
onMounted(() => {
defHttp.get({ url: '/ktgl/kcKechengbiao/getKechengbiaolist',params:{checkType:'0'}}).then((res) => {
console.log(res);
allList.value = res.records;
});
});
function openKechengDetail(item){
console.log(`🚀 ~ openKechengDetail ~ item:`, item)
window.open(`/site/dqkcDetail?kechengbiaoid=`+item.id,"_blank");
}
</script>
<style lang="less" scoped>
.ketangCard {
margin: .5rem;
}
.ketangCardcol{
background-color: #f3f3f3;
padding: 1px;
}
.rjkcTopDiv {
background: #fff;
padding: .9rem;
color: #1ab394;
font-size: 18px;
font-weight: bold;
text-align:right;
}
.nDayDiv {
top: -14px;
right: -14px;
position: relative;
background: #1ab394;
color: #fff;
font-weight: 200;
padding: 2px 6px 2px 6px;
border-radius: 0 0 0 5px;
text-align:left;
}
.rjkcBodyDiv {
margin-top: 1px;
background: #fff;
padding: 1rem 2rem 2rem 2rem;
}
.kcmcDiv {
font-size: 24px;
font-weight: bold;
}
.skddDiv {
color: #1c84c6;
font-size: 16px;
// font-weight: bold;
}
.xkrsDiv {
padding-top: 2.5rem;
font-size: 18px;
font-weight: bold;
text-align: right;
}
.buttonClass {
background: #1c84c6;
font-weight: 600;
color: #fff;
border-radius: 5px;
line-height: 23px;
&[disabled] {
background: #6cafda;
}
}
</style>

View File

@ -0,0 +1,167 @@
<template>
<div id="siteMain">
<div id="maxSite" :style="maxClassName">
<a-layout style="height: calc(100vh - 140px)">
<headerPage/>
<!-- 页头 -->
<!-- <a-layout-sider style="height: calc(100vh - 160px);left: 0;top: 0;bottom: 0;min-height: calc(100vh - 160px);background-color: #ffffff;">
<a-row>
<a-col :span="24">
<a-menu
v-model:selectedKeys="selectedKeys"
style="width: 200px"
mode="inline"
>
<a-sub-menu key="sub1">
<template #title>教学内容</template>
<a-menu-item key="1">课程介绍</a-menu-item>
<a-menu-item key="2">公告</a-menu-item>
<a-menu-item key="3">教学单元内容</a-menu-item>
</a-sub-menu>
<a-sub-menu key="sub2">
<template #title>测验/作业</template>
<a-menu-item key="4">当前作业</a-menu-item>
<a-menu-item key="5">历史作业</a-menu-item>
</a-sub-menu>
<a-sub-menu key="sub3">
<template #title>问卷管理</template>
<a-menu-item key="6">当前问卷</a-menu-item>
<a-menu-item key="7">历史问卷</a-menu-item>
</a-sub-menu>
<a-menu-item key="sub4">
<span>资源库</span>
</a-menu-item>
<a-menu-item key="sub5" @click="getGzt('18')">
<span>工具</span>
</a-menu-item>
</a-menu>
</a-col>
<a-col :span="20">
</a-col>
</a-row>
</a-layout-sider>
<a-layout style="min-height: 100%;">
<a-layout-content style="overflow: initial">
<RouterView/>
</a-layout-content>
</a-layout> -->
<!-- 主体部分 -->
<a-layout-content style="margin: 10px 0; min-height: 580px;">
<a-card style="min-height: 580px;">
<a-row>
<a-col :span="4">
<a-menu
v-model:selectedKeys="selectedKeys"
style="width: 256px"
mode="inline"
>
<a-sub-menu key="sub1">
<template #title>教学内容</template>
<a-menu-item key="1">课程介绍</a-menu-item>
<a-menu-item key="2">公告</a-menu-item>
<a-menu-item key="3">教学单元内容</a-menu-item>
</a-sub-menu>
<a-sub-menu key="sub2">
<template #title>测验/作业</template>
<a-menu-item key="4">当前作业</a-menu-item>
<a-menu-item key="5">历史作业</a-menu-item>
</a-sub-menu>
<a-sub-menu key="sub3">
<template #title>问卷管理</template>
<a-menu-item key="6">当前问卷</a-menu-item>
<a-menu-item key="7">历史问卷</a-menu-item>
</a-sub-menu>
<a-menu-item key="sub4">
<span>资源库</span>
</a-menu-item>
<a-menu-item key="sub5">
<span>工具</span>
</a-menu-item>
</a-menu>
</a-col>
<a-col :span="20">
</a-col>
</a-row>
</a-card>
</a-layout-content>
<!-- 页尾 -->
<footerPage/>
</a-layout>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, onMounted, unref } from 'vue';
import { getUserSf,getSysConfig } from '/@/views/site/utils/index';
import { defHttp } from '/@/utils/http/axios';
import { useRouter } from 'vue-router';
import headerPage from '/@/views/site/common/header.vue';
import footerPage from '/@/views/site/common/footer.vue';
import dqxqkc from '/@/views/site/renKeJiaoCheng/checkKecheng/dqxqkc.vue';
const maxClassName = ref<any>({});
const selectedKeys = ref<string[]>([]);
//
const { currentRoute,router } = useRouter();
const { query } = unref(currentRoute);
const { kechengbiaoid } = query;//
// let router = useRouter();
function getGzt(type){
var href = "/site/dqkcGongju";
router.push(href);
}
//
onMounted(() => {
console.log('kechengbiaoid:',kechengbiaoid);
});
</script>
<style lang="less" scoped>
#siteMain {
// font-size: ;
// height: 100%;
background: #f3f3f4;
#maxSite {
//
max-width: 1070px;
min-height: 750px;
//
margin: 0 auto;
.rowGutter{
margin-top: 1rem;
margin-bottom: 1rem;
}
.ant-layout-header {
color: #fff;
background: #1ab394;
}
.ant-layout-footer {
line-height: 1.5;
background: #FFF;
}
.ant-layout-sider {
color: #fff;
line-height: 120px;
background: #3ba0e9;
}
.ant-layout-content {
min-height: 120px;
color: #000;
line-height: 120px;
background: #f3f3f4;
}
}
}
</style>

View File

@ -0,0 +1,17 @@
<template>
<a-card>
工具
</a-card>
</template>
<script lang="ts" setup>
import { ref, onMounted, unref } from 'vue';
//
onMounted(() => {
});
</script>
<style lang="less" scoped>
</style>

View File

@ -0,0 +1,222 @@
<template>
<a-card class="rowGutter" id="rkjcDom">
<template #title>
<span style="font-size: 24px;font-weight: bold;">任教课程</span>
<span style="margin-left: 10px;"><a href="javascript:void(0);" @click="openChangeKcPage">修改课程提醒</a></span>
</template>
<!-- <template #extra></template> -->
<div class="cardBody">
<a-row>
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 8 }" :key="index" v-for="(item, index) in allList" :hidden="currentPageSize * 3 <= index" class="">
<div class="ketangCard ketangCardcol" >
<div class="rjkcTopDiv">
<span class="nDayDiv" v-if="item.cardType != '近6日课程'">{{ item.cardType }}</span>
<span class="nDayDiv" v-else>{{ item.nth }}天后</span>
<div style="text-align: left;"><span>{{ item.skrq }}&nbsp;{{ toWeek(item.WEEK) }}&nbsp;{{ item.hh }}</span></div>
</div>
<div class="rjkcBodyDiv">
<div class="kcmcDiv">{{ item.kcmc }}</div>
<div><a-rate v-model:value="item.stars" disabled/></div>
<div class="skddDiv">{{ item.skdd }}</div>
<div class="xkrsDiv">{{ item.xkrs }}人选课&nbsp;&nbsp;&nbsp;<a-button @click="toLivePage(item)" :disabled="!item.jsbh" class="buttonClass">进入课堂</a-button></div>
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24" style="text-align: center;padding: 0.5rem;">
<a @click="loadNext" v-if="currentPageSize != 1">加载更多</a>
<a v-if="currentPageSize != 1" style="float: right;" @click="closePage">收起</a>
</a-col>
</a-row>
<a hidden @click="initData">刷新</a>
</div>
</a-card>
<baseModal ref="registerForm"/>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import baseModal from './baseModal.vue';
import { defHttp } from '/@/utils/http/axios';
import { addTingKeLog, getUserId } from '/@/views/site/utils';
import { onMounted } from 'vue';
import { useRouter } from 'vue-router'
onMounted(() => {
initData();
})
const registerForm = ref();
const route = useRouter();
/**
* 打开修改课程提醒的表单
*/
function openChangeKcPage(){
registerForm.value.add();
}
function toLivePage(item){
// route.push({ path:'/site/liveRoom',query:{ id: item.jsbh } })
addTingKeLog(getUserId(),item.id);
let routeData = route.resolve({ path:'/site/liveRoom',query:{ id: item.jsbh, ktId: item.id } });
window.open(routeData.href, '_blank');
};
function loadNext(){
currentPageSize.value++;
}
function closePage(){
currentPageSize.value = 1;
}
const weebMap = {
'1': '星期一',
'2': '星期二',
'3': '星期三',
'4': '星期四',
'5': '星期五',
'6': '星期六',
'7': '星期日',
}
function toWeek(week){
return weebMap[week];
}
const teacherzzskList = ref<any>([]);
const teacherjjskList = ref<any>([]);
const teacherdskcList = ref<any>([]);
const teacheryskcList = ref<any>([]);
const teacherjlrkcbList = ref<any>([]);
const allList = ref<any>([]);
const currentPageSize = ref<number>(1);
async function initData() {
currentPageSize.value = 1;
let l1 = await getTeacherzzsk();
let l2 = await getTeacherjjsk();
let l3 = await getTeacherdskc();
let l4 = await getTeacheryskc();
let l5 = await getTeacherjlrkcb();
allList.value = [...l1,...l2,...l3,...l4,...l5];
}
async function getTeacherzzsk() {
let params = {
userid: getUserId(),
};
let list = await defHttp.get({ url: '/ktgl/kcKetangbiao/getTeacherzzsk', params });
list.forEach(x => x.cardType = '正在上课');
teacherzzskList.value = list;
return list;
}
async function getTeacherjjsk() {
let params = {
userid: getUserId(),
};
let list = await defHttp.get({ url: '/ktgl/kcKetangbiao/getTeacherjjsk', params });
list.forEach(x => x.cardType = '即将上课');
teacherjjskList.value = list;
return list;
}
async function getTeacherdskc() {
let params = {
userid: getUserId(),
};
let list = await defHttp.get({ url: '/ktgl/kcKetangbiao/getTeacherdskc', params });
list.forEach(x => x.cardType = '待上课程');
teacherdskcList.value = list;
return list;
}
async function getTeacheryskc() {
let params = {
userid: getUserId(),
};
let list = await defHttp.get({ url: '/ktgl/kcKetangbiao/getTeacheryskc', params });
list.forEach(x => x.cardType = '已上课程');
teacheryskcList.value = list;
return list;
}
async function getTeacherjlrkcb() {
let params = {
userid: getUserId(),
};
let list = await defHttp.get({ url: '/ktgl/kcKetangbiao/getTeacherjlrkcb', params });
list.forEach(x => x.cardType = '近6日课程');
teacherjlrkcbList.value = list;
return list;
}
</script>
<style lang="less" scoped>
.cardBody {
// background: #f3f3f4;
}
.ketangCard {
margin: .5rem;
}
.rjkcTopDiv {
background: #fff;
padding: .9rem;
color: #1ab394;
font-size: 18px;
font-weight: bold;
text-align:right;
}
.nDayDiv {
top: -14px;
right: -14px;
position: relative;
background: #1ab394;
color: #fff;
font-weight: 200;
padding: 2px 6px 2px 6px;
border-radius: 0 0 0 5px;
text-align:left;
}
.rjkcBodyDiv {
margin-top: 1px;
background: #fff;
padding: 1rem 2rem 2rem 2rem;
}
.skddDiv {
color: #1c84c6;
font-size: 18px;
font-weight: bold;
}
.xkrsDiv {
padding-top: 2.5rem;
font-size: 18px;
font-weight: bold;
text-align: right;
}
.kcmcDiv {
font-size: 24px;
font-weight: bold;
}
.buttonClass {
background: #1c84c6;
font-weight: 600;
color: #fff;
border-radius: 5px;
line-height: 23px;
&[disabled] {
background: #6cafda;
}
}
.ketangCardcol{
background-color: #f3f3f3;
padding: 1px;
}
</style>

View File

@ -20,7 +20,7 @@
<div class="kcmcDiv">{{ item.kcmc }}</div>
<div><a-rate v-model:value="item.stars" disabled/></div>
<div class="skddDiv">{{ item.skdd }}</div>
<div class="xkrsDiv">{{ item.xkrs }}人选课&nbsp;&nbsp;&nbsp;<a-button @click="toLivePage(item)" :disabled="!item.jsbh" class="buttonClass">进入课堂</a-button></div>
<div class="xkrsDiv">{{ item.xkrs }}人选课&nbsp;&nbsp;&nbsp;<a-button @click="openKecheng(item)" class="buttonClass">进入课程</a-button></div>
</div>
</div>
</a-col>
@ -105,6 +105,10 @@ async function initData() {
allList.value = [...l1,...l2,...l3,...l4,...l5];
}
//
function openKecheng(item){
window.open('/site/checkKecheng', '_blank');
}
async function getTeacherzzsk() {
let params = {

View File

@ -0,0 +1,76 @@
<template>
<div id="siteMain">
<div id="maxSite" :style="maxClassName">
<a-layout>
<!-- 页头 -->
<headerPage/>
<!-- 主体部分 -->
<a-layout-content style="margin: 10px 0;">
<a-tabs type="card" style="background: #fff;min-height: 600px;padding: 10px;">
<a-tab-pane key="1" tab="当前学期">
<dqxqkc/>
</a-tab-pane>
<a-tab-pane key="2" tab="历史学期">历史学期</a-tab-pane>
</a-tabs>
</a-layout-content>
<!-- 页尾 -->
<footerPage/>
</a-layout>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
import { getUserSf,getSysConfig } from '/@/views/site/utils/index';
import { defHttp } from '/@/utils/http/axios';
import headerPage from '/@/views/site/common/header.vue';
import footerPage from '/@/views/site/common/footer.vue';
import dqxqkc from '/@/views/site/renKeJiaoCheng/checkKecheng/dqxqkc.vue';
const maxClassName = ref<any>({});
//
onMounted(() => {
});
</script>
<style lang="less" scoped>
#siteMain {
// font-size: ;
// height: 100%;
background: #f3f3f4;
#maxSite {
//
max-width: 1070px;
//
margin: 0 auto;
.rowGutter{
margin-top: 1rem;
margin-bottom: 1rem;
}
.ant-layout-header {
color: #fff;
background: #1ab394;
}
.ant-layout-footer {
line-height: 1.5;
background: #FFF;
}
.ant-layout-sider {
color: #fff;
line-height: 120px;
background: #3ba0e9;
}
.ant-layout-content {
min-height: 120px;
color: #000;
line-height: 120px;
background: #f3f3f4;
}
}
}
</style>