当前位置:  软件>java软件

任务管理系统 teamsalt

    来源:    发布时间:2015-01-23

    本文导语:  teamsalt 什么是teamsalt? teamsalt是一个在线的团队写作任务管理系统。teamsalt是team+salt(盐),寓意就是作为盐一样,成为团队中不可缺少的系统。系统设计参考了teambition、tower、worktile、fengcheco等。 长什么样呢? http://teamsalt.duap...

teamsalt 什么是teamsalt?

teamsalt是一个在线的团队写作任务管理系统。
teamsalt是team+salt(盐),寓意就是作为盐一样,成为团队中不可缺少的系统。
系统设计参考了teambitiontowerworktilefengcheco等。

长什么样呢?

任务管理系统 teamsalt[图片]

http://teamsalt.duapp.com/
user: admin
password: 1

搭建在bae上面,使用bae2.0,可能访问不太稳定,打算迁移到其他平台上面。

技术选型
  • 后台

    • jfinal 基本可以负担后台

  • 前台

  • 部署打包

    • grunt 使用grunt完成压缩、合并等。

  • 数据库

    • mysql

    后台开发说明

    后台使用jfinal进行开发,具体开发,请查看jfinal开发手册,30分钟就可以阅读完了。

    目录结构
    .
    ├── com
    │   └── teamsalt
    │       ├── common
    │       │   ├── Message.java                        // 请求返回 json 对象封装类
    │       │   ├── TeamsaltConfig.java                    // jfinal 配置
    │       │   └── TeamsaltConstants.java                // 常量类
    │       ├── controller
    │       │   ├── CommentController.java                // 评论 controller
    │       │   ├── IndexController.java                // 首页 controller
    │       │   ├── InviteController.java                // 邀请用户 controller
    │       │   ├── ProjectController.java                // 项目 controller
    │       │   ├── TaskController.java                    // 任务 controller
    │       │   ├── TasklistController.java                // 任务列表 controller
    │       │   └── UserController.java                    // 用户 controller
    │       ├── filter
    │       │   ├── MainFilter.java                        // 使用Filter过滤main.html页面,解决jfinal无法过滤静态html的问题
    │       │   └── xss                                    // XSS 过滤拦截
    │       │       ├── CrossScriptingFilter.java
    │       │       ├── HTMLFilter.java
    │       │       └── RequestWrapper.java
    │       ├── interceptor
    │       │   ├── CheckLoginInterceptor.java            // 当访问/login页面的时候,判断是否已经登录,已经登录,则跳转到/home
    │       │   └── GlobalLoginInterceptor.java            // 全局用户登录拦截器
    │       ├── kit                                        // 常用的一些工具类
    │       │   ├── ConfigKit.java
    │       │   ├── ContextKit.java
    │       │   ├── CookieKit.java
    │       │   ├── DateKit.java
    │       │   ├── HtmlTagKit.java
    │       │   ├── PwdKit.java
    │       │   └── UuidKit.java
    │       └── model                                    // model 层的各种对象
    │           ├── Comment.java
    │           ├── Invite.java
    │           ├── InviteUser.java
    │           ├── Project.java
    │           ├── ProjectTasklist.java
    │           ├── ProjectUser.java
    │           ├── Task.java
    │           ├── Tasklist.java
    │           ├── TasklistTask.java
    │           └── User.java
    ├── log4j.properties                                // log4j 配置
    └── S.java                                            // 采用 jetty 的启动类

    代码开发比较简单,具体查看jfinal手册就能进行代码开发了。

    前台开发说明

    前台采用单页面应用程序(SPA)的开发方式,完全可以和后台分离出来,部署在不同的服务器上面,而且可以将前台用 phonegap 之类的工具,打包成android、ios、winPhone等的应用,起初也就是这么设计的。

    js 文件的代码路径是在teamsalt/WebContent/js中,具体说明如下。

    js 目录结构
    .
    ├── app                                // 这个是压缩代码后产生的文件地方
    │   ├── common
    │   ├── model
    │   ├── object
    │   ├── router
    │   ├── ui-component
    │   ├── view
    │   └── widget
    ├── dist                            // 这个是压缩时候的临时文件
    │   ├── common
    │   ├── model
    │   ├── object
    │   ├── router
    │   ├── ui-component
    │   ├── view
    │   └── widget
    ├── gallery                            // 这个是需要的插件包
    │   ├── backbone
    │   ├── bootbox
    │   ├── bootstrap
    │   ├── contextmenu
    │   ├── datepicker
    │   ├── dropdownx
    │   ├── notify
    │   ├── perfect-scrollbar
    │   ├── popbox
    │   ├── select
    │   ├── tags
    │   ├── template
    │   ├── underscore
    │   └── xdate
    ├── jquery                            // jquery 
    │   └── jquery
    ├── node_modules                    // 使用 grunt 需要的插件,已经提供
    │   ├── grunt
    │   ├── grunt-cmd-concat
    │   ├── grunt-cmd-transport
    │   ├── grunt-contrib-clean
    │   └── grunt-contrib-uglify
    ├── seajs                            // seajs 
    │   ├── 1.3.1
    │   ├── plugin-log
    │   ├── seajs
    │   └── seajs-text
    └── src                                // 这个是程序的源代码了
        ├── common                        // 公共工具
        ├── model                        // model 层
        ├── object                        // 自定义的一个 map 对象
        ├── router                        // 路由器
        ├── ui-component                // 自定义的 ui 组件
        ├── view                        // view 层
        └── widget                        // 自定义的 widget 组件
    js 开发

    采用 seajs 和 backbone 进行代码架构,同后台同样的 mvc 模式开发。

    model 层

    user.js

    define(function(require, exports, module) {
    
        var $ = require('jquery');
        var _ = require('underscore');
        var Backbone = require('backbone');
    
        var User = Backbone.Model.extend({
            getUser : function(params, success) {
                var url = '/user/profile/';
                var self = this;
                Util.query.g(url, '', function(result) {
                    success(result.other, params);
                });
            },
            getUsersByProjectIdAndTaskId : function(params, success, error) {
                this.fetch({
                    url : '/data/' + Util.curProjectId + '-users.json',
                    success : function(model, response, options) {
                        success(response);
                    },
                    error : function(XMLHttpRequest, textStatus, errorThrown) {
                        error(arguments);
                    }
                });
            },
            getUsersByProject : function(params, success, error) {
                var url = '/user/getProjectUsers';
                Util.query.g(url, params, function(result) {
                    success(result.other);
                });
            },
            // 得到所有用户
            getAllUser : function(params, success) {
                var url = '/user/getAllUser';
                Util.query.g(url, '', function(result) {
                    success(result.other);
                });
            }
        });
        module.exports = User;
    })
    control 层

    虽然叫做 view 但是在架构上面,担任的是 contro 层的功能。

    layout.js

    /**
     * @author zhaopeng
     * @datetime 2013-08-27
     * @description 程序任务主界面入口
     */
    define(function(require, exports, module){
    
        var $             = require('jquery');
        var _             = require('underscore');
        var Backbone     = require('backbone');
        var Bootstrap     = require('bootstrap');
    
        // 布局模板
        var layoutHtml     = require('./tpl/layout.html');
    
        // 模板
        var ProjectBar     = require('./header/projectBar');// header左侧项目切换bar
        var UserinfoBar = require('./header/userinfoBar');// header右侧用户信息bar
        var SidebarTasklist     = require('./sidebar/sidebar-tasklist');// 左侧侧边栏
        var SidebarUser     = require('./sidebar/sidebar-user');// 左侧侧边栏
        var ListPanel     = require('./container/listPanel');// container左侧列表
        var DetailPanel = require('./container/detailPanel');// container右侧详情
        var CommonView = require('./commonView');// 公共组件VIEW
    
        //模型
        var Comment =  require('../model/comment');
        var Project =  require('../model/project');
        var Task =  require('../model/task');
        var Tasklist =  require('../model/tasklist');
        var User =  require('../model/user');
    
        var Laoyout = Backbone.View.extend({
            el: 'body',
            events:{
                'updateCommon #sidebar':'updateCommon',
                'updateCommon #list-panel':'updateCommon',
                'updateCommon #detail-panel':'updateCommon',
                'deleteTask #detail-panel':'deleteTask',
                 'updateTask #detail-panel':'updateTask'
            },            
            initialize: function() {
                this.$el.html(Util.tpl.t(layoutHtml,{})).hide().show('1000');
                // 初始化模型,全部记载到map中
                this.comment  =  new Comment();
                this.project  =  new Project();
                this.task     =  new Task();
                this.tasklist =  new Tasklist();
                this.user     =  new User();
    
                Util.Models.put('comment',this.comment);
                Util.Models.put('project',this.project);
                Util.Models.put('task',this.task);
                Util.Models.put('tasklist',this.tasklist);
                Util.Models.put('user',this.user);
    
                // 初始化布局界面
                this.projectBar = new ProjectBar();
                this.userinfoBar = new UserinfoBar();
                this.sidebarTasklist = new SidebarTasklist();
                this.sidebarUser = new SidebarUser();
                this.listPanel = new ListPanel();
                this.detailPanel = new DetailPanel();
    
                Util.Views.put('projectBar',this.projectBar);
                Util.Views.put('userinfoBar',this.userinfoBar);
                Util.Views.put('sidebarTasklist',this.sidebarTasklist);
                Util.Views.put('sidebarUser',this.sidebarUser);
                Util.Views.put('listPanel',this.listPanel);
                Util.Views.put('detailPanel',this.detailPanel);
            },
            updateCommon:function(e){
                CommonView.init();
            },
            //删除任务后,同步删除列表中的数据
            deleteTask:function(e,result){
                this.listPanel.deleteTask(result.uuid);
            },
            //更新任务后,同步更新列表中的数据
            updateTask:function(e,result){
                this.listPanel.updateTask(result);
            }
        });
    
        module.exports = Laoyout;
    })
    view 层

    使用 artTemplate 模板引擎,模板文件都存放在对应的tpl文件夹下。

    layout.html

        
        
          
            Toggle navigation
            
            
            
          
    
        
                                  teamsalt                   
                                                      
                
      
      
    使用 grunt 打包文件项目 1. 安装nodejs

    根据系统到 http://nodejs.org/ 下载安装对应的 nodejs。我用的是 linux 编译后的版本,在.bashrc将 nodejs 添加到环境变量就好了。 如果是 windows 直接安装就可以了。

    2. 安装grunt命令行工具grunt-cli

    使用-g全局安装,这样可以在任何一个目录里使用了。命令:npm install -g grunt-cli

    需要注意的是在 linux 或 mac 下有时会报没有权限的错误,这时须在前面加一个sudo

    3. 安装grunt

    代码中已经包含了 grunt 需要的插件,所有只需要安装 grunt 就可以了。

    进入目录,使用命令:npm install grunt --save-dev

    至此,安装完毕。

    4. 打包 js 文件

    在 Gruntfile.js 中提供了一下几个命令。

    grunt build-t        // 执行 transport
    grunt build-c        // 执行 concat
    grunt build-u        // 执行 uglify
    grunt build-min        // 执行压缩
    grunt build-all        // 执行以上所有命令
    grunt                // 执行 clean, 删除 app 和 dist 目录

    压缩提醒

  • 压缩合并后的代码是放在teamsalt/WebContent/js/app/,如果部署只需要将app.js上传到服务器就可以了。

  • 在本地如何切换开发环境何生产环境的js代码。

    // For development
         if (location.href.indexOf("?pro") > 0) {
             seajs.use("app/app");
         }
         // For production
         else {
             seajs.use("src/app");
         }
  • 未来计划

    对目前此系统暂停开发,全心专注进行第二个版本的开发,第二个版本具有更好的架构设计,更轻快的开发速度,更多的功能特性。在基本版本完成之后,同样也会选择开源的方式进行发布。


        
     
     

    您可能感兴趣的文章:

  • 项目和任务管理系统 Scrumix
  • 任务管理系统 phpaga
  • 任务管理系统 kele
  • 问题,缺陷,任务管理系统 Cynthia
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问操作系统中任务调度主要有哪些策略,LINUX用哪种啊??实时操作系统又有哪些任务调度哪些策略啊??
  • 我对“多人多任务系统”的困惑,求解释。
  • 任务跟踪系统 BORG
  • 任务提交和检测系统 GridSAM
  • 微内核多任务分时图形化操作系统 ulios
  • 系统任务问题,会再加分的!
  • Linux和Windows 系统对多任务实现 有什么区别?
  • 企业任务调度和监控系统 Ortro
  • 有关系统休眠跟定时任务问题
  • 异步任务处理系统 TBSchedule
  • 操作系统:关于任务切换,中断
  • 如何编程获得系统休眠的任务数?
  • 请问ucosii中的任务为什么必须是无限循环呢,这样的话任务不是永远不结束了吗?
  • 单任务的OS,模拟多任务,这样的程序结构行不行?大家进来看看
  • ucosII 实现允许存在同优先级任务,ID应该怎么设置?更改优先级后任务ID怎么办?
  • java自定义任务类定时执行任务示例 callable和future接口使用方法
  • 任务调度分配器 taobao-pamirs-schedule
  • java使用任务架构执行任务调度示例
  • 急求 公平的兼顾优先级的任务分发算法!!
  • crontab 执行定时任务
  • 分布式任务调度平台 EasySchedule
  • linux字符模式下怎样可以运行两个任务(开两个终端)
  • 任务和待办事务管理器 PlanCake
  • 任务/项目管理 todoyu
  • 关于“多任务”的初学者问题
  • 作业任务调度引擎 JobServer
  • 基于任务的项目管理软件 TaskPm
  • 简单的任务管理框架 Tasklet
  • 计划任务软件 KAlarm
  • 我的任务栏不见了??????急
  • crontab任务怎么设置开始日期?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3