免费获取
|
论文天下网
|
原创毕业论文
|
论文范文
|
论文下载
|
计算机论文
|
论文降重
|
毕业论文
|
外文翻译
|
免费论文
|
开题报告
|
心得体会
|
全站搜索
当前位置:
论文天下网
->
免费论文
->
计算机论文
项目管理系统设计与开发(九)
/src/main/ java/com/sunyard/pms/biz/ProjectManager.java
--业务逻辑层接口
/src/main/ java/com/sunyard/pms/biz/impl/ProjectManagerImpl.java
--业务逻辑屋实现类
/src/main/ java/com/sunyard/pms/biz/dtf/ProjectTransferFactory.java --数据对象转换工厂类
/src/main/ java/com/sunyard/pms/controller /ProjectController.java --web controller控制类
/src/main/resources/templates/project/project-add.ftl
--新增project模板
/src/main/resources/templates/project/project-list.ftl
--列表project模板
/src/main/resources/templates/project/project-get.ftl
--查看project模板
/src/main/resources/templates/project/project-update.ftl
--编辑project模板
上述代码都可以用Dgen工具从数据库表中生成代码。
代码生成工具命名为dgen,旨在提高开发人员效率,避免重复劳动。
理论上可以生成任何想要的代码文件,包括实体类、dao、service及页面文件等,另外可以方便的实现扩展生成自己想要的东西。
为了方便开发避免重复造轮子,依赖了一些开源[ 深入理解java虚拟机:JVM高级特性与最佳实践/周志明著.-2版-北京:机械工业出版社,2013.6(2014.4重印)]的第三方组件,主要为dom4j,velocity。
dgen的使用步骤为:编写配置文件 -> 编写模板文件 -> 运行。
配置文件说明
dgen默认的配置文件名为dgen.xml,当然可以随意改变它,只需在启动时指定文件名即可。
dgen.xml文件是所有配置的入口,里面包含了工具运行时需要的各类信息,当配置信息较多时可以拆分成多个文件,使用include标签引入。
dgen.xml文件样例:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<constants>
<!-生成时文件已存在是否覆盖 默认true->
<constant name="overwrite" value="true"/>
<!-生成目标文件夹 不指定默认为运行目录->
<!-<constant name="targetDir" value="/Users/liyd/project"/>->
<!--是否运行在子模块 为true则生成代码的文件夹会到上一层(父模块)为基准 默认false -->
<constant name="runOnChildModule" value="false"/>
</constants>
<!-jdbc连接信息配置->
<jdbc>
<property name="dialect" value="mysql"/>
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/dexcoder?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</jdbc>
<!-数据类型转换映射->
<converters>
<convert dbType="number" javaType="java.lang.Long"/>
<convert dbType="VARCHAR2" javaType="java.lang.String"/>
<convert dbType="SYS.XMLTYPE" javaType="java.lang.String"/>
<convert dbType="TIMESTAMP" javaType="java.util.Date"/>
<convert dbType="datetime" javaType="java.util.Date"/>
<convert dbType="BLOB" javaType="java.lang.Byte[]"/>
</converters>
<include file="demo/tableConfig.xml"/>
</config>
config根标签,固定。
constants常量标签,可以包含任意数量的constant子标签,每一个constant子标签都定义了一个常量。
jdbc数据库连接配置信息。
converters数据类型转换映射。dbType指定数据库的类型,javaType指定你期望在生成Java类中的类型。
include标签,引入其它的配置文件(当然也可以不引入全部写在当前配置文件当中)。
这里把它拆分成了2个文件,使用了include标签,引入的tableConfig.xml文件样例:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<table name="USER" desc="用户">
<task name="model"/>
<task name="dao"/>
</table>
<tasks>
<task name="model" class="com.dexcoder.dgen.generator.DefaultCodeGenerator">
<property name="template" value="demo/template/model.vm"/>
<property name="beginFix" value=""/>
<property name="endFix" value=""/>
<property name="suffix" value=".java"/>
<property name="moduleName" value="dexcoder-core"/>
<property name="srcDir" value="src/main/java"/>
<property name="package" value="com.dexcoder.model"/>
</task>
<task name="dao">
<property name="template" value="demo/template/dao.vm"/>
<property name="beginFix" value=""/>
<property name="endFix" value="Dao"/>
<property name="suffix" value=".java"/>
<property name="moduleName" value="dexcoder-core"/>
<property name="srcDir" value="src/main/java"/>
<property name="package" value="com.dexcoder.dao"/>
</task>
<task name="daoImpl">
<property name="template" value="demo/template/daoImpl.vm"/>
<property name="beginFix" value=""/>
<property name="endFix" value="DaoImpl"/>
<property name="suffix" value=".java"/>
<property name="moduleName" value="daoDir"/>
<property name="srcDir" value="src/main/java"/>
<property name="package" value="com.dexcoder.dao.impl"/>
</task>
<task name="service">
<property name="template" value="demo/template/service.vm"/>
<property name="beginFix" value=""/>
<property name="endFix" value="Service"/>
<property name="suffix" value=".java"/>
<property name="moduleName" value="serviceDir"/>
<property name="srcDir" value="src/main/java"/>
<property name="package" value="com.dexcoder.service"/>
</task>
</tasks>
</config>
里面主要配置了各项任务的生成参数信息,及指定了哪张表需要生成哪些代码任务。
config标签,同样固定。
table指定要生成代码的表名,desc是表的备注。可以配置多个多张表一起生成。
task指定了该表需要运行哪几个生成任务来生成相应的代码。
tasks任务信息配置根标签。
task具体的任务信息,name指定任务名。
property指定运行该任务所需要的属性信息。以下几个为必须的固定属性:
template指定模板文件。
beginFix生成代码文件前缀。
endFix生成代码文件后缀。
suffix生成代码文件的扩展名。
moduleName生成代码所在模块的模块名,多模块项目时有用。
srcDir生成的源代码文件夹。
package包名。
3.静态类图
图 五1 静态类图
根据技术架构的要求,定义了后台主要分层静态类。采用依赖倒置模型,将接口与调用者放在同一层,实现类放在下一层。
4.总体结构
图 五2总体结构图
(二)程序模块设计
1.项目管理
实现项目管理功能,项目变更、审核等功能,包括了7个 业务实体,总共有77个java文件,13个ftl模板文件,10个js文件。
1)功能需求与程序的关系
功能需求
程序
新建/修改/查询/查看/结项项目/预览变更单
ProjectController.java
新建变更项目/查询/查看/审核变更单
ChanglistController.java
2)权限设计
功能需求
角色
新建项目
QA
项目查询、查看项目
QA、项目经理、部门经理、高层领导
新项变更单
项目经理
变更单查询、查看变更单
QA、项目经理、部门经理、高层领导
变更单审核
部门经理
3)基础参数
A.项目类型
编码
名称
customization
客户化
new_product
客户定制
Product_Upgrading
产品升级
B.项目阶段
编码
名称
project_approval
立项
plan
计划
demand
需求
design
设计
code
编码
test
测试
maintain
维护
complete
结项
OTHER
其他
C.项目状态
编码
名称
normal
正常
pause
暂停
delay
延期
termination
终止
complete
结项
D.变更单状态
编码
名称
pending
待审核
success
通过
reject
驳回
4)详细描述
A.项目管理(新建、查询、查看)
控制类:ProjectAction.java,新建项目、项目查询、项目查看、预览项目变更单
业务逻辑类:ProjectManagerImpl.java 项目操作的业务逻辑方法
数据转换工厂:ProjectTransferFactory.java 项目po与vo对象相互转换工厂类
单业务服务类:ProjectServiceImpl.java 项目单业务所有逻辑方法
数据访问类:ProjectDaoImpl.java
项目数据访问所有方法
查询对象到查询条件转换类:ProjectQct.java 把项目qo转成QueryCondition的转换类
实体类:Project.java 项目的实体信息,所有项目基本信息的内容
ProjectSignificant 项目重要信息
视图类:ProjectVo.java
项目在视图中展示用的pojo类
ProjectSignificantVo 项目重要信息在视图中展示用的pojo类
查询对象:ProjectQo.java 接收视图层的分页查询参数的查询对象
视图模板:project_add.ftl 新增项目页面
project.ftl
查看项目页面
project_list.ftl 项目查询列表页面
projectModify.ftl 修改项目页面
B.项目成员
控制类:ProjectMemberAction.java,新建项目成员
业务逻辑类:ProjectMemberManagerImpl.java 项目成员操作的业务逻辑方法
单业务服务类:ProjectMemberServiceImpl.java 项目成员单业务所有逻辑方法
数据访问类:ProjectMemberDaoImpl.java
项目成员数据访问所有方法
查询对象到查询条件转换类:ProjectMemberQct.java 把项目成员qo转成QueryCondition的转换类
实体类:ProjectMember.java 项目成员的实体信息
视图类:ProjectMemberVo.java
项目成员在视图中展示用的pojo类
查询对象:ProjectMemberQo.java 接收视图层的分页查询参数的查询对象
C.变更单管理
控制类:ChangelistAction.java,新建变更单、变更单查询、变更单查看
业务逻辑类:ChangelistManagerImpl.java 变更单操作的业务逻辑方法
数据转换工厂:ChangelistTransferFactory.java 变更单po与vo对象相互转换工厂类
单业务服务类:ChangelistServiceImpl.java 变更单单业务所有逻辑方法
数据访问类:ChangelistDaoImpl.java
变更单数据访问所有方法
查询对象到查询条件转换类:ChangelistQct.java 把变更单qo转成QueryCondition的转换类
实体类:Changelist.java 变更单的实体信息,所有项目基本信息的内容
视图类:ChangelistVo.java
变更单在视图中展示用的pojo类
查询对象:ChangelistQo.java 接收视图层的分页查询参数的查询对象
视图模板:change_add.ftl 新建变更单页面
change_approval.ftl
变更单审核页面
change_Info.ftl 变更单查看页面
change_list.ftl 变更单查询列表页面
D.项目结项单
控制类:ProjectCompletionAction.java,新建项目结项单
业务逻辑类:ProjectCompletionManagerImpl.java 项目结项单操作的业务逻辑方法
单业务服务类:ProjectCompletionServiceImpl.java 项目结项单单业务所有逻辑方法
数据访问类:ProjectCompletionDaoImpl.java
项目结项单数据访问所有方法
查询对象到查询条件转换类:ProjectCompletionQct.java 把项目成员qo转成QueryCondition的转换类
实体类:ProjectCompletion.java 项目结项单的实体信息
视图类:ProjectCompletionVo.java
项目结项单在视图中展示用的pojo类
查询对象:ProjectCompletionQo.java 接收视图层的分页查询参数的查询对象
E.项目结项明细
控制类:ProjectCompletionDetailAction.java,新建项目成员
业务逻辑类:ProjectCompletionManagerImpl.java 项目成员操作的业务逻辑方法
单业务服务类:ProjectCompletionServiceImpl.java 项目成员单业务所有逻辑方法
数据访问类:ProjectCompletionDaoImpl.java
项目成员数据访问所有方法
查询对象到查询条件转换类:ProjectCompletionQct.java 把项目成员qo转成QueryCondition的转换类
实体类:ProjectCompletion.java 项目成员的实体信息
视图类:ProjectCompletionVo.java
项目成员在视图中展示用的pojo类
查询对象:ProjectCompletionQo.java 接收视图层的分页查询参数的查询对象
2.任务管理
实现任务管理功能,编辑任务、确认任务完成、评价任务,包括了3个 业务实体,总共有33个java文件,14个ftl模板文件,9个js文件。
1)功能需求与程序的关系
功能需求
程序
新建/修改/查询/查看/确认完成/评价任务
TaskController.java
结项报告
TaskReportController.java
2)权限设计
功能需求
角色
新建任务
部门经理
任务查询、查看任务、确认完成
普通员工
评价任务
部门经理
3)基础参数
A.任务类型
编码
名称
project
项目支持
product
产品支持
B.任务种类
编码
名称
inner
内部任务
outer
外部任务
C.任务状态
编码
名称
not_started
待确认
not_judgement
待评价
over
已评价
5)详细描述
A.任务管理
控制类:TaskAction.java,新建任务、任务查询、任务查看、我负责的任务、我分派的任务、任务确认完成,评价任务,任务报告工作量
业务逻辑类:TaskManagerImpl.java 任务操作的业务逻辑方法
数据转换工厂:TaskTransferFactory.java 任务po与vo对象相互转换工厂类
单业务服务类:TaskServiceImpl.java 任务单业务所有逻辑方法
数据访问类:TaskDaoImpl.java
任务数据访问所有方法
查询对象到查询条件转换类:TaskQct.java 把项目qo转成QueryCondition的转换类
实体类:Task.java 任务的实体信息,所有任务基本信息的内容
视图类:TaskVo.java
任务在视图中展示用的pojo类
查询对象:TaskQo.java 接收视图层的分页查询参数的查询对象
视图模板:addtask.ftl 新增任务页面
task.ftl
任务查询列表页面
taskView.ftl 查看任务页面
assignTask.ftl 我分派的负责列表页面
confirmTask.ftl 确认完成任务弹窗页面
edittasks.ftl 编辑任务弹窗页面
evaluateTask.ftl 评价任务页面
evaluateTasks.ftl 评价任务弹窗页面
haveEvaluationView.ftl 已评价任务页面
responsibleTask.ftl 我负责的任务页面
task_update.ftl 编辑任务页面
taskView.ftl 查看任务详细页面
tobeConfirmView.ftl 待确认任务查看页面
tobeEvaluationView.ftl 待评价任务查看页面
B.任务报告
业务逻辑类:TaskReportManagerImpl.java 任务报告操作的业务逻辑方法
单业务服务类:TaskReportServiceImpl.java 任务报告单业务所有逻辑方法
数据访问类:TaskReportDaoImpl.java
任务报告数据访问所有方法
查询对象到查询条件转换类:TaskReportQct.java 把任务报告qo转成QueryCondition的转换类
实体类:TaskReport.java 任务报告的实体信息
视图类:TaskReportVo.java
任务报告在视图中展示用的pojo类
查询对象:TaskReportQo.java 接收视图层的分页查询参数的查询对象
3.工作报告
实现工作日志功能,填写工作日志、工作日志审核、工作日志查询,包括了2个 业务实体,总共有26个java文件,13个ftl模板文件,8个js文件。
1)功能需求与程序的关系
功能需求
程序
新建/修改/查询/查看/审核工作日志,新增工作日志项
WorklogController.java
工作日志项审核、更新
WorklogItemController.java
2)权限设计
功能需求
角色
新建工作日志
普通员工
草稿箱
普通员工
驳回的日志
普通员工
以往的日志
普通员工
工作日志审核
普通员工、项目经理、部门经理、上级领导
3)基础参数
A.工作日志状态
编码
名称
project
项目支持
product
产品支持
B.工作类型
编码
名称
other
其它
businessModeling
业务建模
demandAnalysis
需求分析
technicalRoute
技术路线/方案
UIDesign
UI设计
outlineDesign
概要设计
detailedDesign
详细设计
coding
编码
unitTest
单元测试
bugFix
bug修复
testCase/scenarioWriting
测试用例/方案编写
testExecution
测试执行
projectTracking/Management
项目跟踪/管理
projectPlanning
项目策划
qacm
质量保证配置管理
training
培训
maintain
维护
acceptance
验收
C.工作项性质
编码
名称
project
项目
task
任务
temp
临时任务
4)详细描述
A.工作日志
控制类:WorklogAction.java, 填写工作日志、草稿箱、驳回的日志、以往的日志、员工日志查看、查看日志、日志审核.
业务逻辑类:WorklogManagerImpl.java 工作日志操作的业务逻辑方法
数据转换工厂:WorklogTransferFactory.java 工作日志po与vo对象相互转换工厂类
单业务服务类:WorklogServiceImpl.java 工作日志单业务所有逻辑方法
IndexWorklogServiceImpl.java 工作日志索引服务所有逻辑方法
数据访问类:WorklogDaoImpl.java
工作日志数据访问所有方法
IndexWorklogDaoImpl.java
工作日志全文索数据访问所有方法
查询对象到查询条件转换类:WorklogQct.java 把工作日志qo转成QueryCondition的转换类
实体类:Worklog.java 工作日志的实体信息,所有工作日志基本信息的内容
视图类:WorklogVo.java
工作日志在视图中展示用的pojo类
查询对象:WorklogQo.java 接收视图层的分页查询参数的查询对象
视图模板:drafts.ftl 草稿箱页面
emplog.ftl 员工日志普通检索列表页面
employee_level_search.ftl 员工作日志上下级检索页面
exportWorkLog.ftl 导出日志页面
not_pass.ftl 驳回的日志页面
sent.ftl 以往的日志页面
unaudited.ftl 待审核工作日志列表页面
worklog_add.ftl 新增工作日志页面
worklog_audit.ftl 工作日志审核页面
worklog_get.ftl 工作日志查看页面
worklog_update.ftl 编辑工作日志页面
B.工作日志项
控制类:WorklogItemAction.java, 填写工作日志项、删除、编辑、审核单个工作日志项、审核审核工作日志项.
业务逻辑类:WorklogItemManagerImpl.java 工作日志项操作的业务逻辑方法
单业务服务类:WorklogItemServiceImpl.java 工作日志项单业务所有逻辑方法
数据访问类:WorklogItemDaoImpl.java
工作日志项数据访问所有方法
查询对象到查询条件转换类:WorklogItemQct.java 把工作日志项qo转成QueryCondition的转换类
实体类:WorklogItem.java 工作日志项的实体信息,所有工作日志项基本信息的内容
视图类:WorklogItemVo.java
工作日志项在视图中展示用的pojo类
查询对象:WorklogItemQo.java 接收视图层的分页查询参数的查询对象
视图模板:alter_audit.ftl 单个工作日志项弹窗审核页面
worklogitem_add.ftl 新增工作日志项页面
C.工作日志全文索引
建立独个工作日志索引步骤
第一步,将工作日志的属性与lucene的全文索引的Field一一对应
第二步,将工作日志所有日志项内容将成一个大文本,属性间用空格“ ”属性为中文名+“:”+属性值。将整个大文本字符串加入到“worklogItemInfo”Field中
第三步,将日志项中项目编号或任务编号以“,”分隔连接起来加入到“projectOrTaskCode”中去,项目经理或任务负责人以“,”分隔连起来加入到“manages”中去。
全文检索
查询关键字会对应以下属性去全文检索
projectName,worklogItemInfo,creatorCnName,creator,rejectReason,quadvices,department,workDate;
其中在worklogItemInfo中与关键字匹配的就会将关键字变红,并截取关键字前后的一段内容到日志内容来显示。
全文索引创建策略
手工全量重建工作日志索引
新增工作日时,增量增加工作日志索引
编辑工作日时,更新工作日志索引
删除工作日时,删除对应的工作日志索引
六、功能开发
本章节主要基于软件设计对功能进行实现的描述,由于系统实际代码量较大,这里仅对项目管理模块进行描述的实现描述,其它模块不再介绍。
(一)项目管理
对项目模块进行功能实现的描述,这里从前端页面实现开始,按技术架构的要求逐层实现
1)project_add.ftl(新增项目的freemaker模板)
前端视图实现技术采用freemaker模板,并采用基于bootstarp技术的welkin框架来实现页面的渲染。相关技术的描述在下面源代码中注释进行解释,并用高亮背景显示。
<#import "../common/global-layout.ftl" as global>
<#import "../common/common-macro.ftl" as common>
//根据fap框架,定义了二个页面通用的宏组件,global为全局页面布局,common定义一些通用的宏组件定义
<#assign importJs=["src/js/project/projectadd.js"]>
//定义页面该特有引有的js文件,这里定义的变量为importJs,在global-layout.ftl中会根据importJs的变量值,在渲染Html时会引用js资源
<#assign importCss=["src/styles/default_css/public.css","src/styles/project/new_mission.css","src/styles/project/projectAdd.css"]>
//同上,在渲染Html时会引用css资源
<@global.layout pageTitle="新建项目" breadcrumb="<li>新建项目</li><li>新建项目</li>" importJs=importJs importCss=importCss>
//通过global.layout组件定义页面的通用布局代码,在关模板的<#nested>中来嵌套该组内部的html代码,如下。
<div class="container-new-demo">
<div class="container-fluid">
<section>
<form class="form-horizontal" id="project" autocomplete="off">
<!--项目信息-->
<div class="mission-box">
<!--表头-->
<div class="title-msg">
<strong>项目信息</strong>
</div>
//…忽略一些html代码…
<@common.UserSelect class="col-sm-14 col-md-14 col-md-push-3 col-sm-push-3 mission_tab" id="userSelect" name="manager">/@common.UserSelect
//从通过common.UserSelect宏组件,在界面放定义用户选择器的组件,该组件直接可以选择系统用户。
//…忽略一些html代码…
<select name="status" id="projectState" data-style="btn-sm btn-default"
class="mission_input" title="" tabindex="-98">
<option value="" selected="">请选择</option>
<option value="normal">正常</option>
<option value="pause">暂停</option>
<option value="delay">延期</option>
<option value="termination">终止</option>
<option value="nodeterm">结项</option>
</select>
</div>
</div>
//普通的html的select控件
//…忽略一些html代码…
<div class="row margin_TB">
<div class="col-sm-8 col-md-8 line-h">
<div class="col-sm-7 col-md-7 col-md-push-3 col-sm-push-3 mission_header">
<strong class="text-right">所属部门:</strong>
</div>
<@common.OrgSelect class="col-sm-14 col-md-14 col-md-push-3 col-sm-push-3 mission_tab" id="OrgTree" showValue="" idName="department"></@common.OrgSelect>
//从通过common.OrgSelect宏组件,在界面放定义机构选择器的组件,该组件直接可以选择系统中机构。
</div>
//…忽略一些html代码…
<!--按钮-->
<div class="footer-botton">
<button class="ok lg_btn projectAdd">提交</button>
<button class="close_btn lg_btn pro_btn">返回</button>
//提交按钮,会触发绑定到该元数据的事件,触发保存后台的逻辑,返回按钮会触发关于窗口页面的事件,在projectAdd.js中定义事件的处理定义
</div>
</form>
</section>
</div>
</div>
</@global.layout>
其中代码<#import "../common/global-layout.ftl" as global> FAP4框架中定义的全局的页面布局模板,<#import "../common/common-macro.ftl" as common>为fap4定义通用组件库,如:<@common.UserSelect class="col-sm-14 col-md-14 col-md-push-3 col-sm-push-3 mission_tab" id="userSelect" name="manager"></@common.UserSelect> 采用用户选择组件来填写项目经理的域。页面中采用自定义的welkin前端框架,该框架是基于bootstarp前端框架的应用封装。新建项目表单通过projectAdd.js提交后台的ProjectController来接受数据处理。
2)projectAdd.js(新增项目的js)
$(function () {
//点击空白地方下拉菜单隐藏
$(document).click(function () {
$('.content-num-item').slideUp();
$('.mission_xiala').removeClass('mission_xiala_active');
});
// 下拉框点击切换 class
$('.mission_xiala').click(function (e) {
var ev = e || event;
ev.stopPropagation();
$('.content-num-item').each(function (index,el) {
$(el).slideUp().parents('.mission_xiala').removeClass('mission_xiala_active');
});
$('.tran_border').each(function (index,el) {
$(el).parent('.mission_xiala').removeClass('mission_xiala_active');
})
$(this).toggleClass('mission_xiala_active').find('.content-num-item').stop().slideToggle();
});
//界面对菜单的控制
//表格全选功能
$('.parent_checked').click(function () {
if($(this).prop('checked')) {
$(this).parents('thead').siblings('tbody').find('input').prop('checked',true);
}else {
$(this).parents('thead').siblings('tbody').find('input').removeAttr('checked')
}
});
// 将下拉框的内容填充到 select
$('.manager-content li').click(function () {
$(this).parent().siblings('.content-num').html($(this).html());
$('#manager').attr('value',$(this).html());
});
$('.type-conetnt li').click(function () {
$(this).parent().siblings('.content-num').html($(this).html());
$('#type').attr('value',$(this).html());
});
$('.status-content li').click(function () {
$(this).parent().siblings('.content-num').html($(this).html());
$('#status').attr('value',$(this).html());
});
//input默认获取今天的日期
var date = new Date();
var strDate = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
$('.mission_input .updata').val(strDate);
//日期选择
$(".mission_input .updata").datetimepicker({//选择年月日
format: 'yyyy-mm-dd',
language: 'zh-CN',
weekStart: 1,
todayBtn: 1,//显示‘今日’按钮
autoclose: 1,
todayHighlight: 1,
startView: 2,
minView: 2, //Number, String. 默认值:0, 'hour',日期时间选择器所能够提供的最精确的时间选择视图。
clearBtn:true,//清除按钮
forceParse: 0
});
//…省略部份java script代码…
//提交时验证表单提交的数据
function verification(){
if($('#changeUser-userCode').val()==""){
layer.msg('项目经理不能为空');
return false;
}else if($('#finishDate').val()==""){
layer.msg('结项时间不能为空');
return false;
}else if($('#gmtStart').val()==""){
//…省略部份java script代码…
}else {
//…省略部份java script代码…
return true;
}
}
//提交项目变更
$('#submitChange').click(function (e) {
/*禁用默认提交的事件 因为要使用ajax提交而不是默认的提交方式*/
e.preventDefault();
/*获取当前的表单*/
var form = $('#changeAdd'); // 可以通过选择器直接选择
var table=document.getElementById("memberTable");
var rows=table.rows;
var stringCode="";
var stringWeights="";
var int=0;
var intCode=0;
for(var i=1;i<rows.length;i++){
//定义项目成员列表
stringCode=stringCode+"&"+"projectMembers["+int+++"].memberCode="+rows[i].cells[3].innerHTML+"";
stringWeights=stringWeights+"&"+"projectMembers["+intCode+++"].weights="+rows[i].cells[6].innerHTML+"";
}
//验证表单提交的数据
if(verification()){
//获取表单上的数据库
var projectId = $('#projectId').val();
var changType = $(":radio:checked + span").text();
//…省略部份java script代码…
var arr = new Array();
for(var i=0;i<rows.length;i++){ //遍历表格的行
arr[i]=new Array(i);
for(var j=0;j<rows[i].cells.length;j++){ //遍历每行的列
arr[i][j]=rows[i].cells[j].innerHTML;
}
}
//遍历项目成员表单中的成员信息
layer.open({
type:2,
// title:'添加成员',
area:["95%","100%"],
content:contextPath+'/project/alert/change?projectId='+projectId+'',
success:function (layero, index) {
//弹窗显示,增加添加的界面
var body = layer.getChildFrame('body', index);
body.contents().find("#changType").html(changType);
body.contents().find("#manager").html(manager);
//在窗口中预览变更的信息
//…省略部份java script代码…
//下面是成员信息的预览
var tableChangeBefore = body.contents().find("#tableBefore")[0];
var rowsChangeBefore = tableChangeBefore.rows;
var arrBefore = new Array();
for(var i=0;i<rowsChangeBefore.length;i++){ //遍历表格的行
arrBefore[i]=new Array(i);
for(var j=0;j<rowsChangeBefore[i].cells.length;j++){ //遍历每行的列
arrBefore[i][j]=rowsChangeBefore[i].cells[j].innerHTML;
}
}
var tableBeforeString = "";
for(var i=1; i<arrBefore.length;i++){
var flag = 0;
for(var j=1;j<arr.length;j++){
if(arr[j][3]==arrBefore[i][2] &&arr[j][6]==arrBefore[i][5]){
tableBeforeString+= '' +
'<tr class="item">' +
'<th>'+arrBefore[i][0]+'</th>' +
'<th>'+arrBefore[i][1]+'</th>' +
'<th style="display:none;">'+arrBefore[i][2]+'</th>' +
'<th>'+arrBefore[i][3]+'</th>' +
'<th>'+arrBefore[i][4]+'</th>' +
'<th>'+arrBefore[i][5]+'</th>' +
'</tr>';
flag+=1;
break;
}
}
//…省略部份java script代码…
}
//…省略部份java script代码…
//对变更前页的对比风格用警示风格提示
if(manager!=body.contents().find("#managerBefore").html()){
body.contents().find("#managerDivBefore").addClass('unimportance_color');
body.contents().find("#managerDivAfter").addClass('unimportance_color');
}
//…省略部份java script代码…
}
},btn:["确认","取消"],
yes:function (index,layerobj) {
//在“确认”按钮处理提交变更的业务
$.ajax({
type:"post",
url:contextPath+"/changlist/change/submit.json",
//后台处理的URL
data:decodeURI(form.serialize()+stringCode+stringWeights),
dataType:"json",
success:function (result) {
if(result['success']){
if(result['message']){
$('#mainIfram',parent.document).attr('src',"/project/list" );
$('#page-title',parent.document).text('项目查看');
$('.bread-nav span',parent.document).children('.second-text').html('/项目查看');
window.parent.WELKIN.showNotify('success','提交变更单成功!');
}else{
$('#mainIfram',parent.document).attr('src',"/project/list" );
$('#page-title',parent.document).text('项目查看');
$('.bread-nav span',parent.document).children('.second-text').html('/项目查看');
window.parent.WELKIN.showNotify('success','请等待变更单审核通过!');
}
}
}
})
layer.close(index);
},btn2:function (index,layerobj) {
layer.close(index);
},cancel:function (index,layerobj) {
layer.close(index);
}
})
首页
上一页
6
7
8
9
10
下一页
尾页
9
/10/10
相关论文
上一篇
:
试论计算机网络故障处理及维护方法
下一篇
:
施工监察系统设计与开发
推荐论文
本专业最新论文
Tags:
项目
管理系统
设计
开发
【
返回顶部
】
相关栏目
自动化相关
计算机论文
工程管理论文
法律论文
医学论文
人力资源
电子专业
电气工程
英语论文
行政管理
电子商务
社科文学
教育论文
物流专业
金融专业
财务管理
会计专业
化学化工材料科学
电子通信
环境科学
经济类
机械模具类
报告,总结,申请书
其他专业论文