个人完成的工作
博客内容撰写
1.团队展示
起队名,撰写本人队员风采
2.需求分析
撰写整篇博客
《需求规格说明书》
撰写引言
3.确定分工
修改完善上周提交的需求规格说明书,撰写上次《需求规格说明书》初稿的不足
4.描述设计
制作团队分工图,撰写工具选择
5.项目冲刺(1)
撰写整篇博客
5.项目冲刺(4)
撰写整篇博客
5.项目冲刺(5)
撰写整篇博客
程序代码编写
index.html
{% load static %}
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="csrf-token" content="{{ csrf_token }}">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>公文传输系统</title>
<link rel="stylesheet" href="{% static 'css/style-syspage.css' %}">
<link rel="stylesheet" href="{% static 'css/style-newnavi.css' %}">
<link rel="stylesheet" href="{% static 'css/sidebarContainer.css' %}">
<link rel="stylesheet" href="{% static 'css/homepage.css' %}">
<link rel="stylesheet" href="{% static 'css/textmanagerpage.css' %}">
<link rel="stylesheet" href="{% static 'css/textpage.css' %}">
<link rel="stylesheet" href="{% static 'css/usermanagerpage.css' %}">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.global.prod.js"></script>
<!-- 在<head>标签中引入Quill.js的CSS文件 -->
<link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
<!-- 在<body>标签中引入Quill.js的JavaScript文件 -->
<script src="https://cdn.quilljs.com/1.3.6/quill.js"></script>
</head>
<body>
<div>
<div class="navbar-top">
<div class="menu-content">
<div class="menu-icon">☰</div>
<input type="text" class="search-box" placeholder="搜索...">
<div class="user-info">
<span class="help-button">帮助文档</span>
<span class="user-name">您好 {{ username }}!</span>
<input type="hidden" id="loggedInUserId" value="{{ user_id }}">
</div>
</div>
</div>
<div>
<div class="navbar-left">
<a href="/upload_avatar_page/">
<div class="Avatar">
<img src="{{ user_avatar_url }}" alt="User Avatar" class="user-avatar">
</div>
</a>
<div class="sys">
公文传输系统
</div>
<div class="nav-links">
<!-- 在左侧导航栏的每个功能键上添加@click事件处理程序 -->
<a href="#" class="tab-button" @click="handleTabClick('首页')" data-page="homePage">首页</a>
<a href="#" class="tab-button" @click="handleTabClick('公文管理')" data-page="documentManagementPage">公文管理</a>
<a href="#" class="tab-button" @click="handleTabClick('公文审核')" data-page="documentReviewPage">公文审核</a>
<a href="#" class="tab-button" @click="handleTabClick('公文草拟')" data-page="documentDraftPage">公文草拟</a>
<a href="#" class="tab-button" @click="handleTabClick('用户管理')" data-page="userManagementPage">用户管理</a>
<a href="#" class="tab-button" @click="handleTabClick('日志管理')" data-page="logManagementPage">日志管理</a>
</div>
<a href="#" class="quit" id="logoutButton">
退出系统
</a>
</div>
<div id="sidebarContainer"></div>
</div>
</div>
<script src="{% static 'js/main.js' %}"></script>
<script>
window.accessLevel = {{ access_level|default_if_none:0 }};
const logoutButton = document.getElementById('logoutButton');
logoutButton.addEventListener('click', (event) => {
event.preventDefault();
fetch('/logout/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': getCookie('csrftoken') // 替换为获取CSRF令牌的函数,这是一个示例
},
// ...其他请求数据
})
.then(response => {
if (response.redirected) {
// 延迟3秒后执行重定向
setTimeout(() => {
window.location.href = response.url; // 重定向到指定页面
}, 3000); // 3000毫秒 = 3秒
}
})
.catch(error => {
console.error('退出时出错:', error);
});
});
function getCookie(name) {
const cookieValue = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)');
return cookieValue ? cookieValue.pop() : '';
}
</script>
</body>
</html>
adduser.html
<!-- adduser.html -->
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>新增用户</title>
<link rel="stylesheet" href="{% static 'css/adduserpage.css' %}">
<!-- 此处包含您的样式表或其他资源 -->
</head>
<body>
<h1>新增用户</h1>
<form method="post" action="{% url 'create_user' %}">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">确认</button>
<a href="{% url 'index' %}">取消</a>
</form>
<script src="{% static 'js/verify_up.js' %}"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
document.querySelector('form').addEventListener('submit', function(event) {
event.preventDefault(); // 阻止表单默认提交行为
// 提交表单后,等待 3 秒后跳转到 index 页面
setTimeout(function() {
document.querySelector('form').submit(); // 提交表单
}, 3000); // 等待 3 秒
});
});
</script>
</body>
</html>
change_userinfo.html
{% load static %}
<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改用户信息</title>
<link rel="stylesheet" href="{% static 'css/change_userinfo.css' %}">
<!-- 此处包含您的样式表或其他资源 -->
</head>
<body>
<h1>修改用户信息</h1>
<form method="post" action="{% url 'change_userinfo' user_profile.id %}">
{% csrf_token %}
<label for="id">学号:</label>
<input type="text" id="id" name="id" value="{{ user_profile.id }}" disabled><br><br>
<label for="username">用户名:</label>
<input type="text" id="username" name="username_up" value="{{ user_profile.username_up }}"><br><br>
<label for="email">邮箱:</label>
<input type="email" id="email" name="email" value="{{ user_profile.email }}"><br><br>
<label for="password">密码:</label>
<input type="password" id="password" name="password_up" value="{{ user_profile.password_up }}"><br><br>
<!-- 如果还有其他字段需要修改,继续添加 -->
<button type="submit">提交</button>
<a href="{% url 'index' %}">取消</a>
</form>
<script src="{% static 'js/verify_up.js' %}"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
document.querySelector('form').addEventListener('submit', function(event) {
event.preventDefault(); // 阻止表单默认提交行为
// 提交表单后,等待 3 秒后跳转到 index 页面
setTimeout(function() {
document.querySelector('form').submit(); // 提交表单
}, 3000); // 等待 3 秒
});
});
</script>
</body>
</html>
login.html
{% load static %}
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<link href="{% static 'images/icon.ico' %}" rel="icon" type="icon">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>公文传输系统登录界面</title>
<link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
<section>
<div class="login">
<h2>登录界面</h2>
<div class="innner">
<!-- 登录 -->
<div class="container__form container--sign">
<form action="{% url 'login' %}" class="form" id="form1" onsubmit="return validateForm_in()" name="signin" method="post">
{% csrf_token %}
<input type="text" placeholder="学号(8位)或用户名" name="id_in" class="input" />
<input type="password" placeholder="密码(6-16位字母、数字或下划线)" name="password_in" class="input" />
<input type="submit" value="登录" id="btn">
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
</form>
</div>
<div class="group">
<a href="#">忘记密码?</a>
<a href="{% url 'register' %}">还没有账号?赶紧注册</a>
</div>
</div>
</div>
</section>
<script src="{% static 'js/verify_in.js' %}"></script>
</body>
</html>
manage_permission.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户权限管理</title>
<link href="../static/images/icon.ico" rel="icon" type="icon">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="{% static 'css/manage.css' %}">
</head>
<body>
<h1>用户权限管理</h1>
<p>用户 ID: {{ user.id }}</p>
<p>用户名: {{ user.username_up }}</p>
<p>邮箱: {{ user.email }}</p>
<p>密码: {{ user.password_up }}</p>
<form method="post" action="{% url 'manage_permission' user.id %}">
{% csrf_token %}
<label for="accessLevel">访问权限:</label>
<select id="accessLevel" name="access_level">
<option value="0" {% if user.access_level == 0 %} selected {% endif %}>0</option>
<option value="1" {% if user.access_level == 1 %} selected {% endif %}>1</option>
<option value="2" {% if user.access_level == 2 %} selected {% endif %}>2</option>
<option value="3" {% if user.access_level == 3 %} selected {% endif %}>3</option>
</select>
<button type="submit">保存权限</button>
<a href="{% url 'index' %}">取消</a>
<!-- 提示用户权限含义 -->
<p>
0: 普通用户<br>
1: 管理员<br>
2: 不能发送公文的普通用户<br>
3: 黑名单用户,无法进行任何操作
</p>
</form>
<script>
document.addEventListener('DOMContentLoaded', function() {
document.querySelector('form').addEventListener('submit', function(event) {
event.preventDefault(); // 阻止表单默认提交行为
// 提交表单后,等待 3 秒后跳转到 index 页面
setTimeout(function() {
document.querySelector('form').submit(); // 提交表单
}, 3000); // 等待 3 秒
});
});
</script>
</body>
</html>
register.html
{% load static %}
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<link href="{% static 'images/icon.ico' %}" rel="icon" type="icon">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>注册账户</title>
<link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
<section>
<div class="login">
<h2>注册界面</h2>
<div class="innner">
<!-- 注册 -->
<div class="container__form container--signup">
<form action="{% url 'register' %}" class="form" id="form1" onsubmit="return validateForm_up()" name="signup" method="post">
{% csrf_token %}
<input type="text" placeholder="学号(8位)" name="id" class="input" />
<input type="text" placeholder="用户名(6-16位字母、数字或下划线)" name="username_up" class="input" />
<input type="email" placeholder="邮箱" name="email" class="input" />
<input type="password" placeholder="密码(6-16位字母、数字或下划线)" name="password_up" class="input" />
<input type="submit" value="注册" id="btn">
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
</form>
</div>
<div class="group">
<a>已经有账户了?点击右边登录</a>
<a href="{% url 'login' %}">登录</a>
</div>
</div>
</div>
</section>
<script src="{% static 'js/verify_up.js' %}"></script>
</body>
</html>
upload_avatar.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传用户头像</title>
</head>
<body>
<form id="avatarUploadForm" action="/upload_avatar/" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="avatarFile" accept="image/*">
<input type="submit" value="上传头像">
</form>
</body>
</html>
其它
制作《需求规格说明书》PDF版
https://pan.baidu.com/s/1mgPEos-gnwcpqicpAvJyUw?pwd=hwkm
查找好用的绘图软件
上传代码到码云Gitee
系统测试
测试登录、注册、公文管理、公文审核、公文草拟、用户管理、日志管理等功能
统筹协调管理
作为组长,合理进行组内分工,及时提醒组员完成任务
代码
小组总共的代码行数
3900行
我贡献的代码行数
330行
相关链接
终版代码包:https://gitee.com/SHIBATORI/document-transmission-system/releases/tag/final_version
文档
小组总共的文档数
12篇
我贡献的文档数
4篇
相关链接
2.需求分析:https://www.cnblogs.com/icdamlkn/p/17796703.html
5.项目冲刺(1):https://www.cnblogs.com/icdamlkn/p/17844488.html
5.项目冲刺(4):https://www.cnblogs.com/icdamlkn/p/17852482.html
5.项目冲刺(5):https://www.cnblogs.com/icdamlkn/p/17853272.html