功能介绍

登录

首页

修改密码

提交申请

提交列表

数据可视化

审核列表

前端

components结构

搭建Vue项目

​ Vue3快速上手:

https://cn.vuejs.org/guide/quick-start.html#creating-a-vue-application

页面布局

<template>
<el-container >
<el-header>
<HomeHeader/>
</el-header>
<el-container>
<el-aside width="250px">
<HomeAside/>
</el-aside>
<el-main>
<router-view></router-view>
</el-main>
</el-container>
</el-container>
</template> <script>
import HomeAside from './HomeAside.vue';
import HomeHeader from './HomeHeader.vue'; export default {
components: {
HomeAside,
HomeHeader
}
}
</script> <style>
.el-header{
background-color: #B3C0D1;
color: #333;
text-align: center;
line-height: 60px;
}
.el-aside {
background-color: #E9EEF3;
color: #333;
text-align: center;
line-height: 160px;
}
html,body,#app,.demo,.el-container {
height: 100%;
width: 100%;
}
</style>

组件通信

​ js-cookie的使用:

https://blog.csdn.net/weixin_52615140/article/details/128543259

Echarts

​ 在vue中使用echarts:

https://www.bilibili.com/video/BV16Z4y1U7BW

​ Vue-ECharts:

https://github.com/ecomfe/vue-echarts/tree/main

​ 注意:采用created方法进行echarts组件数据的初始化

生命周期应用

https://www.bilibili.com/video/BV1Rs4y127j8/?p=35&vd_source=b53d35d0f1e32279da1e60b030a06429

表格中预览大图

https://blog.csdn.net/weixin_47390965/article/details/127402967

​ 注意:原文章在调用弹框组件时,错误使用了:show.sync="LicenseBigDialog",而应该写成v-model="LicenseBigDialog"

低代码表单

​ Variant Form:

https://vform666.com/

UI 框架

​ Element Plus:

https://element-plus.org/zh-CN/#/zh-CN

  1. 表单进阶(插入图片、获取表单所在行数)

    <template>
    <el-table class="submitList" :data="tableData" stripe border> <!-- 插入图片 -->
    <el-table-column prop='evidence' label="加分材料" width="130" >
    <template #default="scope">
    <el-image :src="scope.row.evidence" @click="showBigImage(scope.row.evidence)" preview-src-list min-width="70" height="70" />
    </template>
    </el-table-column> <!-- 获取表单的所在行数 -->
    <el-table-column label="是否通过" width="130" >
    <template #default="scope">
    <button @click="submit(scope.$index)">通过</button>
    </template>
    </el-table-column> </el-table>
    </template>

网络请求

​ axios在vue中的使用:

https://blog.csdn.net/m0_67403188/article/details/123420220

后端

接口实例

​ 这里以登录接口为例,介绍了怎么创建一个接口。

class LoginClass(BaseModel):
id: str
password: str @app.post("/login")
async def login(lc: LoginClass):
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456',
db='student_evaluation_and_management_system', charset='utf8')
# 创建游标对象
cursor = conn.cursor()
cursor.execute("select * from admin where id = %s and password = %s", (lc.id, lc.password))
conn.commit()
results = cursor.fetchall()
if len(results) != 0:
return {"code": "003", "id": results[0][0], "msg": "登陆成功"}
cursor.execute("select * from student where id = %s and password = %s", (lc.id, lc.password))
conn.commit()
results = cursor.fetchall()
# 关闭游标对象
cursor.close()
# 关闭连接
conn.close()
if len(results) != 0:
return {"code": "001", "id": results[0][0], "msg": "登陆成功"}
else:
return {"code": "002", "msg": "账号密码错误"}

接口结构

保存与读取图片

# 生成随机文件名
def generate_random_string(length):
letters = string.ascii_lowercase
return ''.join(random.choice(letters) for _ in range(length)) # 上传图片时,把照片保存在本地
@app.post("/imgs/upload")
def upload_image(file: UploadFile = File(...)):
# 获取当前文件所在的目录路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建目标文件夹路径
target_folder = os.path.join(current_dir, "img")
# 确保目标文件夹存在
os.makedirs(target_folder, exist_ok=True)
# 生成随机字符串作为文件名
file_name = generate_random_string(8)
# 获取文件的扩展名
extension = os.path.splitext(file.filename)[1]
# 构建文件的完整路径
file_path = os.path.join(target_folder, f"{file_name}{extension}")
# 保存文件到目标路径
with open(file_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
# 返回文件的名字
return {"data": {"url": f"{file_name}{extension}"}} # 从本地读取图片
@app.get('/img')
def get_image(name):
# 获取与 Python 文件同级的目录路径
base_dir = os.path.dirname(os.path.realpath(__file__))
# 构建图片文件路径
image_path = os.path.join(base_dir, "img", name)
print(image_path)
if os.path.exists(image_path):
# 返回图片作为响应
return FileResponse(image_path, media_type="image/jpeg")
else:
# 如果图片不存在,返回错误信息
return {"error": "Image not found."}

跨域问题

app = FastAPI()
# 解决跨域问题
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
allow_credentials=True,
)

部署方法

​ 系统采用腾讯云2核2G轻量云服务器,在宝塔面板的python项目管理直接部署后端项目,提交requiremens.txt和py文件即可。部署时,注意修改后端文件的数据库信息,以及下面的host信息,从“127.0.0.1”修改为“0.0.0.0”。

if __name__ == '__main__':
uvicorn.run(app='main:app', host='0.0.0.0', port=8000, reload=True)

项目地址

https://github.com/githigher/CEMS

学习链接

CEMS大学生综合测评管理系统的更多相关文章

  1. R_Studio(学生成绩)对两个班级学生成绩进行集合,重新计算学生综合测评成绩并对学生按综合测评成绩进行排名

    对成绩表"11_1_1.csv" "11_2_1.csv"进行集成,并重新计算4门课程的平均分为综合测评,增加“排名”属性,并按排名排序 "11_1_ ...

  2. asp.net C# 题目大全

    net001在线饰品销售系统 net002鲜花商城 net003商品销售管理系统 net004在线辅导答疑 net005土地税务管理系统 net006旅游管理 net007房产中介 net008房产信 ...

  3. 教务管理系统(node+express+mysql)

    模块拆分 现在将教务系统拆分成九个模块: 教务系统教师业务:师资管理.教学计划管理.排课管理 教务系统学生业务:考试管理.毕业生管理.学生综合测评 信息查询:自习室查询.课程表查询 考试系统:实现学生 ...

  4. JSP/JAVA目录清单

    JAVA253中国象棋(CS) JAVA258网络五子棋游戏的设计与实现(CS) JAVA390停车场管理系统SQL(CS) JSP001学生综合素质测评系统JAVA+Mysql JSP002学生成绩 ...

  5. 2014年6月份第2周51Aspx源码发布详情

    AMX高效自定义分页控件(WinForm)源码  2014-6-9 [VS2008]2014.6.9更新内容:   1. 更改用户自定义分页控件功能布局.大大精简了调用分页自定义控件的代码,和使用系统 ...

  6. Android九宫格界面实现点击每个格点击跳转界面

    刚开始有个任务就是做一个九宫格界面,后来有个任务就是实现点击每个格并跳转界面实现每个格的功能.下面我就介绍一下我是如何实现该功能的 首先写一下我的想法是: 登录成功后显示一个九宫格界面,每个九宫格的每 ...

  7. JAVA上百实例源码以及开源项目

    简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬. ...

  8. java开发第四天——莫名其妙的一天

    搞了一天的ACM,欲哭无泪,消化的不好打了一天的嗝,然后在机房睡了一个下午,感觉还真的有点对不起队友的说.别的借口我也不找了,确实是自己不努力,时至今日,一切都是我咎由自取.等这次项目一结束我就全身心 ...

  9. ebe2

    Email:kefu007@vip.qq.com 软件每天有更新.请用Ctrl+F键搜索您需要的软件..如果你找不到你需要的软件可以联系客户服务人员帮您找! 海拉之光LucidShape光学设计仿真分 ...

  10. 我的大学,我的SPR机器人队

    时间过的真快,我这个在协会呆了好多年的老油条今年都毕业了,在石油大学大学七年几乎三分之二的时间就是在协会度过的.实话说在北京这是我最亲切的地方,这里有我喜欢的各种设备,有亲爱的老师和一起奋斗的队友,在 ...

随机推荐

  1. 微软Build 2023两大主题:Copilots和插件

    在本周大型微软人工智能 2023 开发者大会的开幕式上,人工智能站到了舞台中央--前台和后台以及介于两者之间的所有舞台. 贯穿会议的两个主要主题是Copilots - 涵盖广泛产品和服务的AI助手 - ...

  2. 小程序提交POST请求,出现405错误

    status": 405, "error": "Method Not Allowed", "message": "Req ...

  3. 基于 python3+nginx 的 Jupyter Notebook 服务端 ssl 访问

    引言 Jupyter Notebook(原名 ipython)可是科学计算界的必备工具,友好的界面,方便的交互,支持 Markdown,集中的极客们想要的一切特点,同时又制作的如此优雅和精美,真是难能 ...

  4. R 语言画图中英文字体解决方案

    在某些时候,需要在 R 画图中添加中文,但是默认情况下,R 对中文的支持不好.这里推荐一个showtext的 R 包.如果需要将含有中文字体的图形保存为 pdf 文件,可以使用下面讲到的方案,最新版的 ...

  5. BGP选路

    实验拓扑 实验需求 现有三个自治系统,需要对R1访问R4的loopback-X数据走向进行精确控制: R1访问R4的loopback0走R2,通过在R1上修改本地优先级实现 R1访问R4的loopba ...

  6. CentOS7 配置本地yum源软件仓库

    CentOS7 配置本地yum源软件仓库 前言 配置本地yum源软件仓库可以离线状态下安装本地已有的软件 先连接虚拟光驱,对应的光驱iso文件 查看磁盘分区状态 可以看到sr0 未挂载 [root@l ...

  7. 快速上手 vercel,手把手教你白嫖部署上线你的个人项目

    一.关于 vercel Vercel 是一个云服务平台,支持静态网站(纯静态页面,比如现在base utils 文档也是基于vercel)和动态网站的应用部署.预览和上线.如果你用过 GitHub P ...

  8. 基于GPT搭建私有知识库聊天机器人(四)问答实现

    前文链接: 基于GPT搭建私有知识库聊天机器人(一)实现原理 基于GPT搭建私有知识库聊天机器人(二)环境安装 基于GPT搭建私有知识库聊天机器人(三)向量数据训练 在前面的文章中,我们介绍了如何使用 ...

  9. 《架构整洁之道》学习笔记 Part 2 编程范式

    计算机编程发展至今,一共只有三个编程范式: 结构化编程 面向对象编程 函数式编程 编程范式和软件架构的关系 结构化编程是各个模块的算法实现基础 多态(面向对象编程)是跨越架构边界的手段 函数式编程是规 ...

  10. 02LED灯

    目录 一.LED灯是什么 二.原理图 三.对LED进行操作 1.点亮第一个LED灯 2.LED双数点亮 3.LED流水灯 四.延迟函数的生成 一.LED灯是什么 LED是一个发光二极管,当一段为高电平 ...