前言
项目仓库
本项目是为开发一套容器化的开发、运行、测试环境,用以支持Web开发、程序设计等课程的实验教学。
代码内容均为我和肖同学共同完成。
任务目标
设计并且编写主界面
主界面内容:
- 学生界面
- 项目中心
- 课程任务
- 课程通知
- 我的项目
- 上传中心
- 编辑中心
- 组织中心
- 项目中心
- 老师界面
- 组织中心
- 发布中心
- 学生课程作业
我的任务
- 页面外观与布局设计
- 页面交互设计
- 页面编写
展示内容
- 教师端主界面
代码
view/teacher-home.vue
<template>
<el-header>
<topmenu active-index="2" @on-index-change="onMenuIdxChange"></topmenu>
</el-header>
<el-main v-show="activeMenuIdx == '2'">
<el-tabs v-model="activeTab" type="card" class="demo-tabs" @tab-click="handleTabClick">
<el-tab-pane label="组织中心" name="1">
<el-dialog v-model="createCurrFormVisible" title="添加组织" width="30%">
<el-form>
<el-form-item label="课程名字" label-width="100px">
<el-input v-model="createCurrForm.name" autocomplete="off" />
</el-form-item>
<el-form-item label="课序号" label-width="100px">
<el-input v-model="createCurrForm.courseId" autocomplete="off" />
</el-form-item>
<el-form-item label="课称介绍" label-width="100px">
<el-input v-model="createCurrForm.des" autocomplete="off" />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="createCurrFormVisible = false">取消</el-button>
<el-button type="primary" @click="ConfirmAddCurr">确认</el-button>
</span>
</template>
</el-dialog>
<el-dialog v-model="updateCurrFormVisible" title="修改信息" width="30%">
<el-form>
<el-form-item label="课程名字" label-width="100px">
<el-input v-model="updateCurrForm.name" autocomplete="off" />
</el-form-item>
<el-form-item label="课序号" label-width="100px">
<el-input v-model="updateCurrForm.courseId" autocomplete="off" />
</el-form-item>
<el-form-item label="课称介绍" label-width="100px">
<el-input v-model="updateCurrForm.des" autocomplete="off" />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="updateCurrFormVisible = false">取消</el-button>
<el-button type="primary" @click="ConfirmUpdateCurr">确认</el-button>
</span>
</template>
</el-dialog>
<!-- <el-dialog v-model="releaseHWFormVisible" title="发布作业" width="30%">-->
<!-- <el-form>-->
<!-- <el-form-item label="作业内容" label-width="100px">-->
<!-- <el-input v-model="releaseHWForm.content" autocomplete="off" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="截止日期" label-width="100px">-->
<!-- <el-date-picker v-model="releaseHWForm.ddl" type="date" />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <template #footer>-->
<!-- <span class="dialog-footer">-->
<!-- <el-button @click="releaseHWFormVisible = false">取消</el-button>-->
<!-- <el-button type="primary" @click="ConfirmReleaseHW">确认</el-button>-->
<!-- </span>-->
<!-- </template>-->
<!-- </el-dialog>-->
<el-button @click="AddCurriculum">添加组织</el-button>
<el-collapse>
<el-collapse-item v-for="(curriculum, currIdx) in curriculumData"
:title="curriculum.title + '(课序号:' + curriculum.data[0].courseId + ')'" :name="curriculum.id">
<el-row>
<el-col :span="2">
<span>邀请码:{{ curriculum.data[0].code }}</span>
</el-col>
<el-col :span="3">
<el-button @click="ImportBatchStudent">批次导入学生</el-button>
</el-col>
<el-col :span="3">
<el-button @click="ImportOneStudent">导入单个学生</el-button>
</el-col>
<el-col :span="10"/>
<el-col :span="3">
<el-button @click="UpdateCurrInfo(currIdx)">修改信息</el-button>
</el-col>
<!-- <el-col :span="1"/>-->
<el-col :span="3">
<el-button @click="DeleteCurr(currIdx)">删除组织</el-button>
</el-col>
</el-row>
<el-table :data="stuData" style="width: 100%">
<el-table-column
sortable
fixed
prop="id"
label="ID"
width="150"
:filters="[
{ text: '20160503', value: '20160503' },
{ text: '20160509', value: '20160509' },
]"
:filter-method="filterHandler"
/>
<el-table-column prop="name" label="Name" width="170" />
<el-table-column prop="sex" label="Sex" width="170" />
<el-table-column prop="age" label="Age" width="170" />
<el-table-column prop="email" label="Email" />
<el-table-column fixed="right" label="Operations" width="120">
<el-button type="text" size="small" @click="">删除</el-button>
</el-table-column>
</el-table>
<!-- <el-table :data="curriculum.data" style="width: 100%">-->
<!-- <el-table-column label="时间" width="430">-->
<!-- <el-date-picker v-model="curriculum.data[0].time" type="datetimerange" range-separator="To"-->
<!-- start-placeholder="开始日期" end-placeholder="结束日期" />-->
<!-- </el-table-column>-->
<!-- <el-table-column label="具体描述" width="580">-->
<!-- <el-input v-model="curriculum.data[0].description" :rows="2" type="textarea" placeholder="请输入..." />-->
<!-- </el-table-column>-->
<!--<!– <el-table-column fixed="right" label="操作" width="200">–>-->
<!--<!– <el-button type="text" size="large" @click="releaseHW(curriculum)">发布作业</el-button>–>-->
<!--<!– <el-button type="text" size="large" @click="releaseNotice(curriculum)">发布通知</el-button>–>-->
<!--<!– </el-table-column>–>-->
<!-- </el-table>-->
</el-collapse-item>
</el-collapse>
</el-tab-pane>
<el-tab-pane label="发布中心" name="2">
<el-dialog v-model="releaseHWFormVisible" title="发布作业" width="30%">
<el-form>
<el-form-item label="作业内容" label-width="100px">
<el-input v-model="releaseHWForm.content" autocomplete="off" />
</el-form-item>
<el-form-item label="截止日期" label-width="100px">
<el-date-picker v-model="releaseHWForm.ddl" type="date" />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="releaseHWFormVisible = false">取消</el-button>
<el-button type="primary" @click="ConfirmReleaseHW">确认</el-button>
</span>
</template>
</el-dialog>
<!-- <el-button @click="AddCurriculum">添加组织</el-button>-->
<!-- <el-table :data="stuData" style="width: 100%">-->
<!-- <el-table-column v-for="(curriculum, currIdx) in curriculumData"-->
<!-- label="课程"-->
<!-- :data="curriculum.title + '(课序号:' + curriculum.data[0].courseId + ')'" :name="curriculum.id"-->
<!-- >-->
<!-- </el-table-column>-->
<!-- <el-table-column fixed="right" label="操作" width="200">-->
<!-- <el-button type="text" size="large" @click="releaseHW(curriculum)">发布作业</el-button>-->
<!-- <el-button type="text" size="large" @click="releaseNotice(curriculum)">发布通知</el-button>-->
<!-- </el-table-column>-->
<!-- </el-table>-->
<el-collapse>
<el-collapse-item v-for="(curriculum, currIdx) in curriculumData"
:title="curriculum.title + '(课序号:' + curriculum.data[0].courseId + ')'" :name="curriculum.id">
<!-- <el-table :data="curriculum.data" style="width: 100%">-->
<!-- <el-table-column label="时间" width="430">-->
<!-- <el-date-picker v-model="curriculum.data[0].time" type="datetimerange" range-separator="To"-->
<!-- start-placeholder="开始日期" end-placeholder="结束日期" />-->
<!-- </el-table-column>-->
<!-- <el-table-column label="具体描述" width="580">-->
<!-- <el-input v-model="curriculum.data[0].description" :rows="2" type="textarea" placeholder="请输入..." />-->
<!-- </el-table-column>-->
<!-- <el-table-column fixed="right" label="操作" width="200">-->
<el-row>
<el-col :span="3">
<el-button @click="releaseHW(curriculum)">发布作业</el-button>
</el-col>
<el-col :span="3">
<el-button @click="releaseNotice(curriculum)">发布通知</el-button>
</el-col>
<el-col :span="18"/>
</el-row>
<el-table :data="hwData" style="width: 100%">
<el-table-column label="截止时间" width="180">
<template #default="scope">
<div style="display: flex; align-items: center">
<el-icon><timer /></el-icon>
<span style="margin-left: 10px"></span>
</div>
</template>
</el-table-column>
<el-table-column label="作业内容" prop="name">
</el-table-column>
<el-table-column label="操作" width="180">
<el-button type="text" size="large" @click="">删除作业</el-button>
</el-table-column>
</el-table>
<el-table :data="tgData" style="width: 100%">
<el-table-column label="通告内容" prop="name">
</el-table-column>
<el-table-column label="操作" width="180">
<el-button type="text" size="large" @click="">删除通知</el-button>
</el-table-column>
</el-table>
<!-- </el-table-column>-->
<!-- </el-table>-->
</el-collapse-item>
</el-collapse>
</el-tab-pane>
<el-tab-pane label="学生课程作业" name="3">
<el-collapse>
<el-collapse-item v-for="(curriculum, cuuIdx) in curriculumData"
:title="curriculum.title + '(课序号:' + curriculum.data[0].courseId + ')'" :name="curriculum.id">
<el-collapse>
<el-table :data="curriculum.student" style="width: 100%">
<el-table-column prop="name" label="Name" width="150" />
<el-table-column prop="email" label="Email" width="180" />
<el-table-column prop="message" label="Message" width="180" />
<el-table-column prop="score" label="Score" width="200">
<template #default="scope">
<el-rate v-model="scope.row.score" :texts="['oops', 'disappointed', 'normal', 'good', 'great']"
show-text @change="onScoreChange(scope.row)" />
</template>
</el-table-column>
<el-table-column fixed="right" prop="Homework" label="Homework" width="170">
<el-button type="text" size="small" @click="DownloadHomework">gitee地址</el-button>
</el-table-column>
</el-table>
</el-collapse>
</el-collapse-item>
</el-collapse>
</el-tab-pane>
</el-tabs>
</el-main>
</template>
<script lang="ts" setup>
import topmenu from "../layout/tmenu.vue";
import { ref, reactive } from 'vue'
import type { TabsPaneContext } from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import type { Action } from 'element-plus'
import { request } from "@/network/request";
const activeMenuIdx = ref('2');
const onMenuIdxChange = (idx: string) => {
activeMenuIdx.value = idx;
}
const activeTab = ref('1')
const handleTabClick = (tab: TabsPaneContext, event: Event) => {
}
const getFormDate = () => {
const Dates = new Date();
//年份
const Year: number = Dates.getFullYear();
//月份下标是0-11
const Months: any = (Dates.getMonth() + 1) < 10 ? '0' + (Dates.getMonth() + 1) : (Dates.getMonth() + 1);
//具体的天数
const Day: any = Dates.getDate() < 10 ? '0' + Dates.getDate() : Dates.getDate();
return Year + '-' + Months + '-' + Day;
}
//组织中心
interface StudentDataI {
name: string,
email: string,
message: string,
score: number
}
interface CurriculumDataIf {
title: string,
id: string,
data: [{
time: any,
description: string,
code: string,
courseId: string
}],
student: StudentDataI[]
}
const curriculumData = ref<CurriculumDataIf[]>([]);
const createCurrFormVisible = ref(false);
const createCurrForm = reactive({
name: '',
courseId: '',
des: ''
})
const updateCurrFormVisible = ref(false);
const updateCurrForm = reactive({
name: '',
courseId: '',
des: '',
idx: -1
})
const releaseHWFormVisible = ref(false);
const releaseHWForm = reactive({
content: '',
ddl: new Date(),
curr:{}
})
const AddCurriculum = () => {
createCurrForm.name = '';
createCurrForm.courseId = '';
createCurrForm.des = '';
createCurrFormVisible.value = true;
}
const ConfirmAddCurr = () => {
let param = new FormData();
param.append('name', createCurrForm.name);
param.append('desc', createCurrForm.des);
param.append('courseId', createCurrForm.courseId);
request('/weblab/organization/createOrg', param)
.then(res => {
let createData = res.data;
let code = '';
let getMessageParam = new FormData();
getMessageParam.append('orgId', createData.pkg);
request('/weblab/organization/getOrgMessageById', param)
.then(res => {
code = res.data.pkg.code;
})
.catch(error => {
console.log(error);
})
curriculumData.value!.push({
title: createCurrForm.name,
id: `${createData.pkg}`,
student: [
{
name: '张三',
email: '123@126.com',
message: '这是张三同学这是张三同学这是张三同学这是张三同学这是张三同学',
score: 0,
}
],
data: [{
time: ['Wed May 18 2022 00:00:00 GMT+0800 (香港标准时间)', 'Wed May 18 2022 01:01:02 GMT+0800 (香港标准时间)'],
code: code,
courseId: createCurrForm.courseId,
description: createCurrForm.des
}]
})
createCurrFormVisible.value = false;
})
.catch(error => {
console.log(error)
})
}
const DeleteCurr = (currIdx: number) => {
ElMessageBox.confirm('将删除该组织,继续?', 'Warning',
{
confirmButtonText: 'OK',
cancelButtonText: 'Cancel',
type: 'warning',
})
.then(() => {
curriculumData.value.splice(currIdx, 1);
})
.catch(() => {
})
}
const UpdateCurrInfo = (currIdx: number) => {
updateCurrForm.name = '';
updateCurrForm.courseId = '';
updateCurrForm.des = '';
updateCurrForm.idx = currIdx;
updateCurrFormVisible.value = true;
}
const ConfirmUpdateCurr = () => {
let param = new FormData();
const currData = curriculumData.value[updateCurrForm.idx];
param.append('id', currData.id);
param.append('name', updateCurrForm.name);
param.append('desc', updateCurrForm.des);
param.append('courseId', updateCurrForm.courseId);
request('/weblab/organization/updateOrg', param)
.then(res => {
currData.title = updateCurrForm.name;
currData.data[0].courseId = updateCurrForm.courseId;
currData.data[0].description = updateCurrForm.des;
})
updateCurrFormVisible.value = false;
}
const ImportBatchStudent = () => {
}
const ImportOneStudent = () => {
}
const releaseHW = (curr: CurriculumDataIf) => {
releaseHWForm.content='';
releaseHWForm.curr=curr;
releaseHWFormVisible.value = true;
}
const ConfirmReleaseHW = () => {
releaseHWFormVisible.value = false;
const date=releaseHWForm.ddl;
console.log(date.getFullYear() ,date.getMonth()+1,date.getDate())
}
const releaseNotice = (curr: CurriculumDataIf) => {
ElMessageBox.prompt('输入通知内容', '发布通知', {
confirmButtonText: 'OK',
cancelButtonText: 'Cancel',
})
.then(({ value }) => {
ElMessage({
type: 'success',
message: `通知发布成功!`,
})
})
.catch(() => {
})
}
const stuData = [
{
id: '20160503',
name: 'Tom',
},
{
id: '20160509',
name: 'Tom',
},
]
const hwData = [
{
name: '这是作业内容',
},
]
const tgData = [
{
name: '这是通告内容',
},
]
//作业中心
const onScoreChange = (val: any) => {
console.log(val)
}
const DownloadHomework = () => {
}
</script>
<style >
.dialog-footer button:first-child {
margin-right: 10px;
}
</style>