【Django+Vue】英文成绩管理平台--20230727

这篇具有很好参考价值的文章主要介绍了【Django+Vue】英文成绩管理平台--20230727。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

能够满足大部分核心需求(标绿):报表部分应该比较难。
【Django+Vue】英文成绩管理平台--20230727,django,Vue,django,vue.js,python

项目地址

前端编译 https://gitlab.com/m7840/toeic_vue_dist
【Django+Vue】英文成绩管理平台--20230727,django,Vue,django,vue.js,python

Vue源码 https://gitlab.com/m7840/toeic_vue
【Django+Vue】英文成绩管理平台--20230727,django,Vue,django,vue.js,python

Django源码 https://gitlab.com/m7840/toeic_python
【Django+Vue】英文成绩管理平台--20230727,django,Vue,django,vue.js,python

项目架构

【Django+Vue】英文成绩管理平台--20230727,django,Vue,django,vue.js,python

流程

【Django+Vue】英文成绩管理平台--20230727,django,Vue,django,vue.js,python

项目效果

学员界面:前后端分离
【Django+Vue】英文成绩管理平台--20230727,django,Vue,django,vue.js,python
管理员界面:前后端不分离
【Django+Vue】英文成绩管理平台--20230727,django,Vue,django,vue.js,python

项目经验:

1. vue.js的坑

Django的vue.js用axios请求数据,只适用于Django为API数据接口;不适用于再访问Django以外的数据接口,访问Django以外的数据接口会遇到跨域(百度无法解决)。最后我采用前后端分离。

2. session.storage是非响应式数据,需要reload来刷新网页。

3.前后端分离才是Django项目首选,因为数据来源一般是其他网页的API。

4. JS还是不熟悉

项目重构:

将session.storage改成Vuex(Vuex三连要写完,否则会报错)

【Django+Vue】英文成绩管理平台--20230727,django,Vue,django,vue.js,python
【Django+Vue】英文成绩管理平台--20230727,django,Vue,django,vue.js,python文章来源地址https://www.toymoban.com/news/detail-621321.html

<template>
  <el-row>
    <el-col :span="24" v-for="(o, index) in 1" :key="o" :offset="index > 0 ? 2 : 0">
      

<div class="container"  v-loading="loading">
  <div class="row py-5">

    <div id="pnl1View">

      <div style="line-height: 30px;">
        {{ remark }}
      </div>

      <div style="line-height: 30px;">
        你好,英文成绩如下:
      </div>

      <div id="Content" style="width: 80%;">

        <div id="Content_R">
          <div>
            <table class="table table-striped table-bordered" style="border-color:#31B6FD;border-width:1px;border-style:Solid;border-collapse:collapse;text-align: center">
              <tbody>
                <tr style="font-family:微軟正黑體,Tahoma,Arial,微軟雅黑體;font-size:15px;">
                  <th scope="col">Course</th>
                  <th align="center">英文類別</th>
                  <th align="center">Range</th>
                  <th align="center">英文標準</th>
                  <th align="center">最高成績</th>
                  <th align="center">兩年內最高成績</th>
                  <th scope="col">Test</th>
                </tr>
                <tr style="font-family:微軟正黑體,Tahoma,Arial,微軟雅黑;font-size:14px;">
                  <td align="center" valign="middle" rowspan="4" style="width:250px;">
                    <a>EN-0001.LiveABC考試</a>
                  </td>
                  <td align="center" valign="middle" rowspan="4" style="width:65px;white-space:nowrap;">{{ UserEnglishCategory.Category }}</td>
                  <td align="center" valign="middle" style="width:65px;white-space:nowrap;">R1</td> 
                  <td align="center" valign="middle" style="width:65px;white-space:nowrap;">{{ UserEnglishCategory.R1_score }}</td>
                  <td align="center" valign="middle" rowspan="4" style="width:65px;white-space:nowrap;">{{ UserScore.highest_score }}</td>
                  <td class="tdbr" align="center" valign="middle" rowspan="4" style="width:65px;white-space:nowrap;">{{ UserScore.two_years_highest_score }}<br>({{ UserScore.two_years_highest_score_date }})</td>
                  <td align="center" valign="middle" rowspan="4" style="width:65px;white-space:nowrap;">
                    <input id="apply" title="点击查看详情" @click="showApplyTable" value="查看考试排程"  class="btn btn-white border" role="button">
                  </td>
                </tr>
                <tr style="font-family:微軟正黑體,Tahoma,Arial,微軟雅黑;font-size:14px;">
                  <td align="center" valign="middle" style="width:65px;white-space:nowrap;">R2</td>
                  <td align="center" valign="middle" style="width:65px;white-space:nowrap;">{{ UserEnglishCategory.R2_score }}</td>
                </tr>
                <tr style="font-family:微軟正黑體,Tahoma,Arial,微軟雅黑;font-size:14px;">
                  <td align="center" valign="middle" style="width:65px;white-space:nowrap;">R3</td>
                  <td align="center" valign="middle" style="width:65px;white-space:nowrap;">{{ UserEnglishCategory.R3_score }}</td>
                </tr>
                <tr style="font-family:微軟正黑體,Tahoma,Arial,微軟雅黑;font-size:14px;">
                  <td align="center" valign="middle" style="width:65px;white-space:nowrap;">R4</td>
                  <td align="center" valign="middle" style="width:65px;white-space:nowrap;">{{ UserEnglishCategory.R4_score }}</td>
                </tr>
              </tbody>
            </table>
          </div><br>

        </div>

        <div :class="collapseClass" id="collapseExample">

          <table class="table table-striped table-sm table-bordered">
            <thead>
              <tr align="center" valign="middle" style="color:White;background-color:#6480d3;font-family:微軟正黑體,Tahoma,Arial,微軟雅黑體;font-size:8px;">
                <th scope="col">Schedule_Code</th>
                <th scope="col">Start_Date</th>
                <th scope="col">End_Date</th>
                <th scope="col">location</th>
                <th scope="col">Max Headcount</th>
                <th scope="col" style="width:10%">App Num</th>
                <th scope="col" style="width:20%">Apply</th>
              </tr>
            </thead>
            
            <tr align="center" valign="middle" v-for="item in UserSchedule.new_schedule" style="color:Black;border-color:#E0E0E0;font-size:10px;height: 50px;">
              <td>{{ item.schedule.Schedule_Code }}</td>
              <td>{{ item.schedule.Start_Date }}</td>
              <td>{{ item.schedule.End_Date}}</td>
              <td>{{ item.schedule.location}}</td>
              <td>{{ item.schedule.max_hc}}</td>
              <td>{{ item.schedule.applied_hc}}</td>

              <td class="p-2">
                <button v-if="item.NotApplyAllowTest" class="btn btn-primary btn-outline-primary border" @click="Apply_Test(myEmployeeID,item.schedule.Schedule_Code,mydeptCode,myname,myemail)"  role="button" style="color:Black;font-size:8px;"><i class="el-icon-check"></i>点击申请</button>
                <button v-if="item.AppliedCancelTest" class="btn btn-danger btn-outline-danger border" @click="Cancel_Test(myEmployeeID,item.schedule.Schedule_Code,mydeptCode,myname,myemail)" role="button" style="color:Black;font-size:8px;"><i class="el-icon-delete"></i>点击取消</button>
                <span v-if="item.NotApplyAllowTest || item.AppliedCancelTest"></span>
                <span v-else>考场人数已满,或未达到考试时间</span>
              </td>
            </tr>
  
          </table>
  
        </div>



      </div>

    </div>


  </div>

</div>


    </el-col>
  </el-row>
</template>
  

<script>
import axios from "axios";
import { mapState } from 'vuex'

export default {
  name: "MyContainer",
  data() {
    return {
      currentDate: new Date(),
      collapseClass:'collapse',
      loading:false,
    };
  },
  computed:{
    ...mapState({
        UserScore: (state) => state.home.UserScore || '',
        UserSchedule: (state) => state.home.UserSchedule,
        UserEnglishCategory: (state) => state.home.EnglishCategory || '',
        mydeptCode: (state) => state.home.deptid,
        myname: (state) => state.home.cname,
        myEmployeeID: (state) => state.home.user_decode_sub || '',
        EnglishCategory: (state) => state.home.EnglishCategory,
        myemail: (state) => state.home.user_decode_email,
        testMsg: (state) => state.home.testMsg,
      }),
    remark(){
      let UserScore = JSON.parse(sessionStorage.getItem('UserScore'))
      if (UserScore){
          return UserScore["remark"] || ''
      }else{
        return  ''
      }
    }
  },

  mounted() {
    setTimeout(() =>{
      this.GetUserScoreDjango(this.myEmployeeID),
      this.GetUserScheduleDjango(this.myEmployeeID)
    }, 1000);
    this.set_loading_to_false()
    console.log('myEmployeeID123',this.myEmployeeID)
  },

  watch: {
      UserSchedule: {
          handler: function () {
            console.log('UserSchedule改变了')
          },
          deep: true
        }
      },
  methods: {
    set_loading_to_false(){
      setTimeout(() =>this.loading=false, 200);
    },
    showApplyTable(){
      if(this.collapseClass=='collapse'){
        this.collapseClass = 'false'
      }else{
        this.collapseClass ='collapse'
      }
    },
    GetUserScoreDjango(emID){
        // axios({
        //         method: "GET",
        //         url: "/api/api_user_score/" + emID,
        //     }).then(res => {
        //         console.log('GetUserScoreDjango',res);
        //         sessionStorage.setItem('UserScore',JSON.stringify(res.data))
        //     }).catch(error => {
        //         console.log('GetUserScoreDjango',error);
        //     })

        this.$store.dispatch("getUserScoreDjangoData", {
          myemployeeID: emID,
        });
      },

    GetUserScheduleDjango(emID){
        //脱去""的外壳
        // let employeeID = emID.replace('"', '').replace('"', ''); 

        // axios({
        //         method: "GET",
        //         url: "/api/api_user_schedule_show/" + employeeID,
        //     }).then(res => {
        //         console.log('GetUserScheduleDjango',res);
        //         sessionStorage.removeItem('UserSchedule'),
        //         sessionStorage.setItem('UserSchedule',JSON.stringify(res.data))
        //         console.log('UserSchedule',this.UserSchedule)
        //     }).catch(error => {
        //         console.log('GetUserScheduleDjango',error);
        //     })

        this.$store.dispatch("getUserScheduleDjangoData", {
          myemployeeID: emID,
        });

      },

    Apply_Test(myemployeeID,mySchedule_Code,mydeptCode,myname,myemail,){
      // //脱去""的外壳
      // let employeeID = myemployeeID.replace('"', '').replace('"', ''); 
      // let Schedule_Code = mySchedule_Code.replace('"', '').replace('"', ''); 
      // let deptCode = mydeptCode.replace('"', '').replace('"', ''); 
      // let name = myname.replace('"', '').replace('"', ''); 
      // // let Test_Msg = ''
      // let email = myemail.replace('"', '').replace('"', ''); 

      this.loading=true;

      // axios({
      //           method: "GET",
      //           url: "/api/api_test_apply/" + employeeID + '/' + Schedule_Code + '/' + deptCode + '/' + name + '/' + email + '/',
      //       }).then(res => {
      //           console.log('Apply_Test',res);
      //           this.GetUserScheduleDjango(employeeID)
      //           this.loading=false
      //           alert('报名成功')

      //       }).catch(error => {
      //           console.log('Apply_Test',error);
      //           this.loading=false
      //           alert('报名失败,请查看考场人数或考试日期间隔')
      //       })
      
      // this.$store.dispatch("getApplyTest", {
      //     myemployeeID : myemployeeID,
      //     mySchedule_Code : mySchedule_Code,
      //     mydeptCode : mydeptCode,
      //     myname : myname,
      //     myemail : myemail,
      //   })
      // this.GetUserScheduleDjango(myemployeeID)
      // this.loading=false;
      // alert('报名成功')

      try {
        this.$store.dispatch("getApplyTest", {
          myemployeeID : myemployeeID,
          mySchedule_Code : mySchedule_Code,
          mydeptCode : mydeptCode,
          myname : myname,
          myemail : myemail,
        })

        setTimeout(() => {
          this.GetUserScheduleDjango(myemployeeID)
        }, 3000);

        
        setTimeout(() => {
          this.loading=false;
          console.log('testMsg',this.testMsg)
          if(this.testMsg.apply_result[0]==='申请成功'){
            alert('报名成功')
          }else{
            alert('报名失败,请查看考场人数或考试日期间隔')
          }
        }, 4000);
        
      } catch (error) {
        console.log('Apply_Test',error);
        this.loading=false;
      }
    },

    Cancel_Test(myemployeeID,mySchedule_Code,mydeptCode,myname,myemail){
      // //脱去""的外壳
      // let employeeID = myemployeeID.replace('"', '').replace('"', '');
      // let Schedule_Code = mySchedule_Code.replace('"', '').replace('"', '');
      // let deptCode = mydeptCode.replace('"', '').replace('"', ''); 
      // let name = myname.replace('"', '').replace('"', ''); 
      // // let Test_Msg = ''
      // let email = myemail.replace('"', '').replace('"', ''); 

      this.loading=true;

      // axios({
      //         method: "GET",
      //         url: "/api/api_test_cancel/" + employeeID + '/' + Schedule_Code + '/'+ deptCode + '/' + name + '/' + email + '/',
      //       }).then(res => {
      //           console.log('Cancel_Test',res);
      //           // Test_Msg = JSON.stringify(res.data)
      //           // sessionStorage.setItem('Test_Msg',Test_Msg)
      //           this.GetUserScheduleDjango(employeeID)
      //           this.loading=false
      //           alert('取消成功')
      //       }).catch(error => {
      //           console.log('Cancel_Test',error);
      //           this.loading=false
      //           alert('取消失败')
      //       })
     
      try {
        this.$store.dispatch("getCancelTest", {
          myemployeeID : myemployeeID,
          mySchedule_Code : mySchedule_Code,
          mydeptCode : mydeptCode,
          myname : myname,
          myemail : myemail,
        })

        setTimeout(() => {
          this.GetUserScheduleDjango(myemployeeID)
        }, 3000);

        setTimeout(() => {
          this.loading=false;
          console.log('testMsg',this.testMsg)
          if(this.testMsg.apply_result[0]==='取消成功'){
            alert('取消成功')
          }else{
            alert('取消失败')
          }
        }, 4000);

      } catch (error) {
        console.log('Apply_Test',error);
        this.loading=false;
      }

    },
    
  },
};
</script>

<style scoped>
.time {
  font-size: 13px;
  color: #999;
}

.bottom {
  margin-top: 13px;
  line-height: 12px;
}

.button {
  float: right;
  color: #999999;
}

.image {
  width: 100%;
  display: block;
}

.clearfix:before,
.clearfix:after {
  display: table;
  content: "";
}

.clearfix:after {
  clear: both;
}
</style>

到了这里,关于【Django+Vue】英文成绩管理平台--20230727的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python课程设计——Django+vue信息管理系统

    python课程设计 之Django+vue2 文章目录 系列文章目录 前言 一、 信息管理系统的具体设计 二、 信息管理系统测试效果 三、结语 总结 python课程设计——Django+vue2 1 Django平台整体构建 一个完整的Django项目通常需要划分出很多不同的子模块进行设计,采用模块设计可以使得分工更加

    2024年02月05日
    浏览(68)
  • Vue_Django 登录注册+图书管理系统

    点击查看代码 点击查看代码 点击查看代码 点击查看代码 点击查看代码

    2024年02月08日
    浏览(44)
  • Django+vue自动化测试平台(7)-- 使用Selenium+vue实现WebUI自动化及结果展示

    Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够很好得

    2024年02月14日
    浏览(57)
  • 基于 HttpRunner + Django + Vue + Element UI 的接口自动化测试平台

    https://github.com/tahitimoon/LunarLink https://lunar-link-docs.fun 基于HttpRunner + Django + Vue + Element UI 的接口自动化测试平台,生产可用。 此外,非常感谢 花菜。没有 AnotherFasterRunner 就不会有 LunarLink 😃 🎨 Django 🎶 Django Rest framework 🎉 Vue.js 🎃 Element UI 🏐 django-celery-beat(定时任务) 🎲

    2024年04月11日
    浏览(43)
  • Python+django+vue开发的家教信息管理系统

    一直想做一款管理系统,看了很多优秀的开源项目但是发现没有合适的。 于是利用空闲休息时间开始自己写了一套管理系统。 功能介绍 平台采用B/S结构,后端采用主流的Python+django进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括

    2024年04月16日
    浏览(40)
  • 基于Django+Vue开发的社区疫情管理系统(附源码)

    基于Django、Django Rest framework、Vue的前后端分离的社区疫情管理系统。 用户管理(只有管理员有权限) 用户注册 用户登录 修改用户信息 删除用户 修改密码 权限管理 首页数据展示 国内疫情数据展示 国内疫情新闻 近30日的感染人数(柱状图) 中高风险地区(饼图) 通知信息

    2024年02月21日
    浏览(39)
  • 基于python+django+vue.js开发的停车管理系统

    功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 功能包括:车位管理、会员管理、停车场管理、违规管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geeeeeeeek/python_parking 演示地址 http://parking.gitapp.cn 演示帐

    2024年02月20日
    浏览(61)
  • 一步步完整搭建一个图纸管理系统(Django+Vue3)

    需要将终端改成虚拟环境的解释器后,简单试运行: 由于我们把子项目都放在apps里面了(方便统一管理)所以注册要加入一段配置 一定要注意格式 (1)安装pymysql (2)gveInformationSystem/settings中进行相关配置 (3)需要在init.py导入pymysql (在:apps/DrawingManagementSystem/models.py)

    2024年02月06日
    浏览(48)
  • 基于python+django+vue.js开发的社区养老管理系统

    功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 功能包括:老人管理、护工管理、亲属管理、病史管理、房间管理、活动管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geeeeeeeek/python_yanglao 演示地址 http

    2024年02月20日
    浏览(84)
  • 基于python+django+vue.js开发的医院门诊管理系统/医疗管理系统

    功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 功能包括:医生管理、科室管理、护士管理、住院管理、药品管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geeeeeeeek/python_hospital 演示地址 http://hospital.gi

    2024年02月21日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包