Baoxu b88119687a usual update | 8 år sedan | |
---|---|---|
api | 8 år sedan | |
css | 8 år sedan | |
font | 8 år sedan | |
imgs | 8 år sedan | |
js | 8 år sedan | |
sql | 8 år sedan | |
util | 8 år sedan | |
.gitignore | 8 år sedan | |
README.md | 8 år sedan | |
index.html | 8 år sedan | |
temp.html | 8 år sedan | |
test.html | 8 år sedan |
一个自己用的Scrum管理系统,主要是网络上现有的系统要么太臃肿要么很难看。功能上包含Scrum
常规的Product Backlog
以及Burndown Chart
,能够按照用户安排工作列表并展示用户当前/历史工作燃尽图。
感谢以下网站或者项目:
项目从代码结构上分为三个部分:
- 表现层(项目的WEB页,用于呈现各个数据页面)
- 工具层(为页面提供方法和数据支持)
- 接口层(提供API接口,便于在特殊环境下的访问,例如要做一个客户端什么的)
主要文件夹以及文件说明:
- admin,文件夹,管理后台入口
- api,文件夹,放置API接口,提供列表、单体信息查询、修改等功能
- css,文件夹,放置样式文件
- font,文件夹,放置可能用到的icon或者特殊字体
- imgs,文件夹,放置图片资源
- js,文件夹,放置前端JS文件
- sql,文件夹,数据库备份以及通用sql语句
- util,文件夹,为页面展示提供方法和数据
- index.php,首页,展示任务Scrum图表
- member.php,成员列表页,用于展示成员列表以及成员详情
- program.php,项目列表页,用于展示项目列表以及项目详情
- about.php,关于页面
虽然并不想把功能做的很复杂,但是为了可能的拓展,还是建立了4张表,其中3张业务表,1张日志表。
核心表为任务表,任务涉及到对应的项目以及对应的人员,所以需要一个项目表和人员表;日志表的数据由任务表触发器写入,只增查,不删改。
任务表(TASK)用于存放所有的任务信息,包括所属项目,执行人,DeadLine,进度等信息,项目通过项目ID字段关联到项目表,人员通过人员ID字段关联到人员表。
任务表包含一个触发器,用于监听任务的核心字段有变动时,向日志表写入记录,标识出变更内容以及操作人还有操作时间。
任务表结构如下:
字段描述 | 任务ID | 任务名称 | 目标时间 | 任务备注 | 任务状态 | 归属人员 | 归属项目 | 作者 |
---|---|---|---|---|---|---|---|---|
是否必填 | 是 | 是 | 是 | 否 | 是 | 是 | 是 | 是 |
字段名称 | id | name | deadline | remark | status | member_id | program_id | author_id |
字段类型 | int(8) | varchar(100) | datetime | varchar(200) | tinyint(2) | int(8) | int(8) | int(8) |
是否主键 | 主键 |
建表:
DROP TABLE IF EXISTS `task`;
CREATE TABLE `task` (
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT '任务ID',
`name` varchar(100) NOT NULL COMMENT '任务名称',
`deadline` datetime NOT NULL COMMENT '任务deadline',
`remark` varchar(200) DEFAULT NULL COMMENT '任务说明',
`status` tinyint(2) NOT NULL COMMENT '任务状态',
`member_id` int(8) NOT NULL COMMENT '归属人员',
`program_id` int(8) NOT NULL COMMENT '归属项目',
`author_id` int(8) NOT NULL COMMENT '任务作者/修改者',
PRIMARY KEY (`id`),
KEY `member_id` (`member_id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
触发器:
INSERT INTO `task` VALUES ('1', '名字', '2016-03-16 00:00:13', '备注', '2', '5', '1', '5');
DROP TRIGGER IF EXISTS `loging`;
DELIMITER ;;
CREATE TRIGGER `loging` AFTER UPDATE ON `task` FOR EACH ROW BEGIN
IF NEW.name != OLD.name
THEN
INSERT INTO log(
task_id,
task_name,
info,
time,
author)
values(
NEW.id,
NEW.name,
concat('任务名称变更:' , OLD.name , '→' , NEW.name),
NOW(),
NEW.author_id);
END IF;
IF NEW.deadline != OLD.deadline
THEN
INSERT INTO log(
task_id,
task_name,
info,
time,
author)
values(
NEW.id,
NEW.name,
concat('任务时间变更:' , OLD.deadline , '→' , NEW.deadline),
NOW(),
NEW.author_id);
END IF;
IF NEW.status != OLD.status
THEN
INSERT INTO log(
task_id,
task_name,
info,
time,
author)
values(
NEW.id,
NEW.name,
concat('任务状态变更:' , OLD.status , '→' , NEW.status),
NOW(),
NEW.author_id);
END IF;
IF NEW.member_id != OLD.member_id
THEN
INSERT INTO log(
task_id,
task_name,
info,
time,
author)
values(
NEW.id,
NEW.name,
concat('任务成员变更:' , OLD.member_id , '→' , NEW.member_id),
NOW(),
NEW.author_id);
END IF;
END
;;
DELIMITER ;
人员表(MEMBER)用于存储参与项目的所有人员,也是登录系统的所有用户,便于之后拓展用户属性,例如要加个头像或者昵称什么的,或者要支持公司内网的openID登录需要存储Token等信息。
有了这个独立的表格,便于统计某个人员在整个系统下或者某个模块下的工作量,可以按照人来统计燃尽图,绘制长期的任务下达与交付效果的曲线。
人员表结构如下:
字段描述 | 人员ID | 人员名称 | 人员备注 | 人员邮箱 | 人员状态 |
---|---|---|---|---|---|
是否必填 | 是 | 是 | 否 | 是 | 是 |
字段名称 | id | name | remark | status | |
字段类型 | int(8) | varchar(10) | varchar(200) | varchar(20) | tinyint(2) |
是否主键 | 主键 |
建表:
DROP TABLE IF EXISTS `member`;
CREATE TABLE `member` (
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT '人员ID',
`name` varchar(10) NOT NULL COMMENT '人员名称',
`remark` varchar(200) NOT NULL COMMENT '人员备注',
`mail` varchar(20) NOT NULL COMMENT '人员邮箱',
`status` tinyint(2) NOT NULL COMMENT '人员状态',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
项目表(PROGRAM)用于存储所有的项目,任务可以按照项目分类,项目的定义可以随意,保证是一个周期内需要完成的任务的合集就行,建立项目表也是为了方便拓展,例如项目的负责人、里程碑等字段。
项目表结构如下:
字段描述 | 项目ID | 项目名称 | 项目状态 | 项目作者 |
---|---|---|---|---|
是否必填 | 是 | 是 | 是 | 是 |
字段名称 | id | name | status | member_id |
字段类型 | int(8) | varchar(100) | tinyint(2) | int(8) |
是否主键 | 主键 |
建表:
DROP TABLE IF EXISTS `program`;
CREATE TABLE `program` (
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT '项目ID',
`name` varchar(100) NOT NULL COMMENT '项目名称',
`status` tinyint(2) NOT NULL COMMENT '项目状态',
`member_id` int(8) NOT NULL COMMENT '创建者ID',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
日志表(LOG)用于存储任务表的变动记录,通过触发器写入,只能插入和查询,不提供接口修改和删除,任务表的核心字段例如任务名称、deadline、责任人等发生变化时,需要存储变化前后的对应的字段值以及操作人。
日志表结构如下:
字段描述 | 日志ID | 任务ID | 任务描述 | 日志内容 | 修改时间 | 修改作者 |
---|---|---|---|---|---|---|
是否必填 | 是 | 是 | 是 | 是 | 是 | 是 |
字段名称 | id | task_id | task_name | info | time | author |
字段类型 | int(12) | int(8) | varchar(100) | varchar(500) | datatime | int(8) |
是否主键 | 主键 |
建表:
DROP TABLE IF EXISTS `log`;
CREATE TABLE `log` (
`id` int(12) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
`task_id` int(8) NOT NULL COMMENT '任务ID',
`task_name` varchar(100) NOT NULL COMMENT '任务名称',
`info` varchar(500) DEFAULT NULL COMMENT '日志内容',
`time` datetime NOT NULL COMMENT '变化时间',
`author` int(8) NOT NULL COMMENT '修改人',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;
ing...