Scrum的web实现版本

Baoxu b88119687a usual update il y a 8 ans
api 781569b8e5 no message il y a 8 ans
css b88119687a usual update il y a 8 ans
font 0af81b8375 初始化项目,构建项目结构和文件夹 il y a 8 ans
imgs 0af81b8375 初始化项目,构建项目结构和文件夹 il y a 8 ans
js 9fbabafe9e 重构了一下页面结构和CSS书写 il y a 8 ans
sql b7d8c05064 修改了表结构,优化了task表的触发器,日志更加细致 il y a 8 ans
util 37b7fb052a 新建一个temp临时文件用于设计html的样式,完成之后与PHP合并 il y a 8 ans
.gitignore 0af81b8375 初始化项目,构建项目结构和文件夹 il y a 8 ans
README.md b88119687a usual update il y a 8 ans
index.html 0af81b8375 初始化项目,构建项目结构和文件夹 il y a 8 ans
temp.html b88119687a usual update il y a 8 ans
test.html 31584fe869 优化了二维数据表内拖动的体验,新增了punch库,用于支持触摸屏幕 il y a 8 ans

README.md

Scrum

一个自己用的Scrum管理系统,主要是网络上现有的系统要么太臃肿要么很难看。功能上包含Scrum常规的Product Backlog以及Burndown Chart,能够按照用户安排工作列表并展示用户当前/历史工作燃尽图。

感谢以下网站或者项目:

  1. 关于Scrum的流程和交互动作,参考了Scrumy
  2. 使用了jQuery以及jQuery UI来加快交互控件的实现。
  3. 使用了Bootstrap框架实现快速布局和前端样式。
  4. 后台采用PHP+MySql的架构实现接口的开发和数据的存储。

项目文件结构

项目从代码结构上分为三个部分:

  • 表现层(项目的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 mail 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...