└── demo-act-boot ├── pom.xml └── src └── main ├── java └── com │ └── demo │ ├── ActBootServer.java │ ├── data │ └── init │ │ ├── CleanData.java │ │ ├── DataInit.java │ │ └── VacationDeploy.java │ ├── util │ ├── ActUtils.java │ ├── CustomProcessDiagramCanvas.java │ ├── CustomProcessDiagramGenerator.java │ └── SpringContextUtils.java │ ├── vo │ └── ProcessVO.java │ └── web │ ├── ProcessController.java │ └── UserController.java ├── resources ├── activiti.cfg.xml ├── application.yml ├── log4j.properties └── processes │ └── vacation.bpmn └── webapp ├── WEB-INF └── web.xml ├── commons └── taglibs.jsp ├── css ├── jquery-ui.css ├── main.css ├── nav.css ├── style.css ├── top.css └── turn_page1.css ├── images ├── admin_content_bg.gif ├── admin_footer_bg.gif ├── admin_menu_parent_bg.gif ├── admin_nav_l.gif ├── admin_nav_on_l.gif ├── admin_nav_on_r.gif ├── admin_nav_r.gif ├── ajax_waiting.gif ├── ajax_waiting2.gif ├── alt_star.gif ├── button1.gif ├── button2.gif ├── button3.gif ├── button4.gif ├── check_error.gif ├── check_error2.gif ├── check_right.gif ├── content_bg1.gif ├── content_bg1_l.gif ├── content_bg1_r.gif ├── content_bottom_bg1.gif ├── gray_line1.gif ├── gray_line2.gif ├── gray_line3.gif ├── header_bg.gif ├── ico_contact.gif ├── ico_money.gif ├── ico_notice.gif ├── icon_angle1.gif ├── icon_arrow1.gif ├── icon_arrow10.gif ├── icon_arrow11.gif ├── icon_arrow12.gif ├── icon_arrow13.gif ├── icon_arrow14.gif ├── icon_arrow15.gif ├── icon_arrow16.gif ├── icon_arrow17.gif ├── icon_arrow18.gif ├── icon_arrow19.gif ├── icon_arrow2.gif ├── icon_arrow20.gif ├── icon_arrow21.gif ├── icon_arrow22.gif ├── icon_arrow23.gif ├── icon_arrow24.gif ├── icon_arrow25.gif ├── icon_arrow26.gif ├── icon_arrow27.gif ├── icon_arrow29.gif ├── icon_arrow3.gif ├── icon_arrow30.gif ├── icon_arrow4.gif ├── icon_arrow5.gif ├── icon_arrow6.gif ├── icon_arrow7.gif ├── icon_arrow8.gif ├── icon_arrow9.gif ├── icon_clip_1.gif ├── icon_clip_2.gif ├── icon_clip_3.gif ├── icon_clip_none.gif ├── icon_close.gif ├── icon_close2.gif ├── icon_comma.gif ├── icon_edit.gif ├── icon_excl.gif ├── icon_fav.gif ├── icon_hand.gif ├── icon_hand2.gif ├── icon_loading.gif ├── icon_minus1.gif ├── icon_msg.gif ├── icon_msg2.gif ├── icon_must.gif ├── icon_negative.gif ├── icon_neutral.gif ├── icon_next.gif ├── icon_next2.gif ├── icon_offline.gif ├── icon_online.gif ├── icon_online_none.gif ├── icon_plus1.gif ├── icon_plus2.gif ├── icon_plus3.gif ├── icon_positive.gif ├── icon_previous.gif ├── icon_price.gif ├── icon_report.gif ├── icon_s_assistant.gif ├── input_button1.gif ├── input_button2.gif ├── input_button3.gif ├── input_button4.gif ├── input_button5.gif ├── list1.gif ├── list2.gif ├── list3.gif ├── list4.gif ├── list5.gif ├── list6.gif ├── list7.gif ├── list8.gif ├── logo.jpg ├── main_bg.gif ├── manage_content_bg.gif ├── noface_150.gif ├── noface_40.gif ├── noface_80.gif ├── or_star_0.gif ├── or_star_1.gif ├── or_star_2.gif ├── or_star_3.gif ├── or_star_4.gif ├── or_star_5.gif ├── page_button.gif ├── page_button2.gif ├── page_button3.gif ├── person_id.gif ├── res_info_title_bg.gif ├── s_fy.gif ├── s_guide.gif ├── s_swzl.gif ├── sort_switch_bg.gif ├── sort_switch_on_l.gif ├── sort_switch_on_r.gif ├── title_bg1.gif ├── title_bg2.gif ├── title_bg3_l.gif ├── title_bg3_r.gif ├── title_bg4.gif ├── title_bg5.gif ├── title_bg6.gif ├── title_bg7.gif ├── xing1.gif ├── xing2.gif ├── xing3.gif ├── xing4.gif └── xing5.gif ├── js ├── jquery-1.4.2.min.js └── jquery-ui.min.js └── pages ├── login.jsp ├── main.jsp ├── nav.jsp ├── top.jsp ├── vac ├── list.jsp └── vacation.jsp └── welcome.jsp /demo-act-boot/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | com.demo.activti 4 | demo-act-boot 5 | 0.0.1-SNAPSHOT 6 | war 7 | 8 | 9 | org.springframework.boot 10 | spring-boot-starter-parent 11 | 1.5.12.RELEASE 12 | 13 | 14 | 15 | 6.0.0 16 | 17 | 18 | 19 | 20 | org.springframework.boot 21 | spring-boot-starter-web 22 | 23 | 24 | org.springframework.boot 25 | spring-boot-starter-tomcat 26 | 27 | 28 | 29 | 30 | javax.servlet 31 | jstl 32 | 33 | 34 | org.apache.tomcat.embed 35 | tomcat-embed-jasper 36 | provided 37 | 38 | 39 | javax.servlet 40 | javax.servlet-api 41 | provided 42 | 43 | 44 | org.springframework.boot 45 | spring-boot-devtools 46 | 47 | 48 | 49 | 50 | org.activiti 51 | activiti-spring-boot-starter-basic 52 | ${activiti.version} 53 | 54 | 55 | de.odysseus.juel 56 | juel-spi 57 | 58 | 59 | 60 | 61 | mysql 62 | mysql-connector-java 63 | 64 | 65 | 66 | org.apache.commons 67 | commons-lang3 68 | 3.6 69 | 70 | 71 | org.springframework.boot 72 | spring-boot-starter-test 73 | 74 | 75 | 76 | 77 | 78 | 79 | org.apache.maven.plugins 80 | maven-compiler-plugin 81 | 82 | 1.8 83 | 1.8 84 | UTF-8 85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/java/com/demo/ActBootServer.java: -------------------------------------------------------------------------------- 1 | 2 | package com.demo; 3 | 4 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration; 7 | import org.springframework.boot.builder.SpringApplicationBuilder; 8 | import org.springframework.boot.web.servlet.ServletComponentScan; 9 | import org.springframework.boot.web.support.SpringBootServletInitializer; 10 | import org.springframework.context.annotation.ComponentScan; 11 | 12 | @SpringBootApplication 13 | @EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class }) 14 | @ServletComponentScan 15 | @ComponentScan(basePackages = { "com.demo", "org.activiti.engine.*" }) 16 | public class ActBootServer extends SpringBootServletInitializer { 17 | 18 | @Override 19 | protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 20 | // TODO Auto-generated method stub 21 | return builder; 22 | } 23 | 24 | public static void main(String[] args) { 25 | new SpringApplicationBuilder(ActBootServer.class).run(args); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/java/com/demo/data/init/CleanData.java: -------------------------------------------------------------------------------- 1 | 2 | package com.demo.data.init; 3 | 4 | import org.activiti.engine.ProcessEngineConfiguration; 5 | 6 | public class CleanData { 7 | 8 | public static void main(String[] args) { 9 | ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault(); 10 | config.setDatabaseSchemaUpdate("drop-create"); 11 | config.buildProcessEngine(); 12 | 13 | config.buildProcessEngine().close(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/java/com/demo/data/init/DataInit.java: -------------------------------------------------------------------------------- 1 | 2 | package com.demo.data.init; 3 | 4 | import org.activiti.engine.IdentityService; 5 | import org.activiti.engine.ProcessEngine; 6 | import org.activiti.engine.ProcessEngines; 7 | import org.activiti.engine.identity.Group; 8 | import org.activiti.engine.identity.User; 9 | 10 | public class DataInit { 11 | 12 | public static void main(String[] args) { 13 | ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); 14 | IdentityService is = engine.getIdentityService(); 15 | // 添加用户组 16 | Group empGroup = saveGroup(is, "empGroup", "员工组"); 17 | Group manageGroup = saveGroup(is, "manageGroup", "经理组"); 18 | Group dirGroup = saveGroup(is, "dirGroup", "总监组"); 19 | // 添加用户 20 | User empA = saveUser(is, "empa"); // 员工a 21 | User empB = saveUser(is, "empb"); // 员工b 22 | User managea = saveUser(is, "managea"); // 经理a 23 | User manageb = saveUser(is, "manageb"); // 经理b 24 | User dira = saveUser(is, "dira"); // 总监a 25 | // 绑定关系 26 | saveRel(is, empA, empGroup); 27 | saveRel(is, empB, empGroup); 28 | saveRel(is, managea, manageGroup); 29 | saveRel(is, manageb, manageGroup); 30 | saveRel(is, dira, dirGroup); 31 | 32 | engine.close(); 33 | } 34 | 35 | static User saveUser(IdentityService is, String id) { 36 | User u = is.newUser(id); 37 | u.setPassword("123456"); 38 | is.saveUser(u); 39 | return u; 40 | } 41 | 42 | static Group saveGroup(IdentityService is, String id, String name) { 43 | Group g = is.newGroup(id); 44 | g.setName(name); 45 | is.saveGroup(g); 46 | return g; 47 | } 48 | 49 | static void saveRel(IdentityService is, User u, Group g) { 50 | is.createMembership(u.getId(), g.getId()); 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/java/com/demo/data/init/VacationDeploy.java: -------------------------------------------------------------------------------- 1 | 2 | package com.demo.data.init; 3 | 4 | import org.activiti.engine.ProcessEngine; 5 | import org.activiti.engine.ProcessEngines; 6 | import org.activiti.engine.RepositoryService; 7 | import org.activiti.engine.repository.Deployment; 8 | import org.activiti.engine.repository.ProcessDefinition; 9 | 10 | public class VacationDeploy { 11 | 12 | public static void main(String[] args) { 13 | ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); 14 | // 存储服务 15 | RepositoryService rs = engine.getRepositoryService(); 16 | Deployment dep = rs.createDeployment().addClasspathResource("processes/vacation.bpmn").deploy(); 17 | ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult(); 18 | rs.addCandidateStarterGroup(pd.getId(), "empGroup"); 19 | 20 | engine.close(); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/java/com/demo/util/ActUtils.java: -------------------------------------------------------------------------------- 1 | 2 | package com.demo.util; 3 | 4 | import java.io.InputStream; 5 | import java.io.OutputStream; 6 | import java.util.ArrayList; 7 | import java.util.HashMap; 8 | import java.util.List; 9 | import java.util.Map; 10 | 11 | import org.activiti.bpmn.model.BpmnModel; 12 | import org.activiti.bpmn.model.FlowNode; 13 | import org.activiti.bpmn.model.SequenceFlow; 14 | import org.activiti.engine.HistoryService; 15 | import org.activiti.engine.ProcessEngineConfiguration; 16 | import org.activiti.engine.RepositoryService; 17 | import org.activiti.engine.RuntimeService; 18 | import org.activiti.engine.TaskService; 19 | import org.activiti.engine.history.HistoricActivityInstance; 20 | import org.activiti.engine.history.HistoricProcessInstance; 21 | import org.activiti.image.ProcessDiagramGenerator; 22 | import org.apache.commons.lang3.StringUtils; 23 | import org.slf4j.Logger; 24 | import org.slf4j.LoggerFactory; 25 | import org.springframework.util.CollectionUtils; 26 | 27 | /** 28 | * 流程工具类 29 | * 30 | * @author linyb1 31 | */ 32 | public class ActUtils { 33 | 34 | private static Logger logger = LoggerFactory.getLogger(ActUtils.class); 35 | 36 | private static RepositoryService repositoryService = SpringContextUtils.getBean(RepositoryService.class); 37 | private static HistoryService historyService = SpringContextUtils.getBean(HistoryService.class); 38 | private static RuntimeService runtimeService = SpringContextUtils.getBean(RuntimeService.class); 39 | private static TaskService taskService = SpringContextUtils.getBean(TaskService.class); 40 | private static ProcessEngineConfiguration processEngineConfiguration = SpringContextUtils.getBean(ProcessEngineConfiguration.class); 41 | 42 | /** 43 | * 根据流程实例Id,获取实时流程图片 44 | * 45 | * @param processInstanceId 46 | * @param outputStream 47 | * @return 48 | */ 49 | public static void getFlowImgByInstanceId(String processInstanceId, OutputStream outputStream) { 50 | try { 51 | if (StringUtils.isEmpty(processInstanceId)) { 52 | logger.error("processInstanceId is null"); 53 | return; 54 | } 55 | // 获取历史流程实例 56 | HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); 57 | // 获取流程中已经执行的节点,按照执行先后顺序排序 58 | List historicActivityInstances = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId) 59 | .orderByHistoricActivityInstanceId().asc().list(); 60 | // 高亮已经执行流程节点ID集合 61 | List highLightedActivitiIds = new ArrayList<>(); 62 | for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { 63 | highLightedActivitiIds.add(historicActivityInstance.getActivityId()); 64 | } 65 | 66 | List historicFinishedProcessInstances = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).finished() 67 | .list(); 68 | ProcessDiagramGenerator processDiagramGenerator = null; 69 | // 如果还没完成,流程图高亮颜色为绿色,如果已经完成为红色 70 | if (!CollectionUtils.isEmpty(historicFinishedProcessInstances)) { 71 | // 如果不为空,说明已经完成 72 | processDiagramGenerator = processEngineConfiguration.getProcessDiagramGenerator(); 73 | } else { 74 | processDiagramGenerator = new CustomProcessDiagramGenerator(); 75 | } 76 | 77 | BpmnModel bpmnModel = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId()); 78 | // 高亮流程已发生流转的线id集合 79 | List highLightedFlowIds = getHighLightedFlows(bpmnModel, historicActivityInstances); 80 | 81 | // 使用默认配置获得流程图表生成器,并生成追踪图片字符流 82 | InputStream imageStream = processDiagramGenerator.generateDiagram(bpmnModel, "png", highLightedActivitiIds, highLightedFlowIds, "宋体", "微软雅黑", "黑体", null, 2.0); 83 | 84 | // 输出图片内容 85 | byte[] b = new byte[1024]; 86 | int len; 87 | while ((len = imageStream.read(b, 0, 1024)) != -1) { 88 | outputStream.write(b, 0, len); 89 | } 90 | } catch (Exception e) { 91 | logger.error("processInstanceId" + processInstanceId + "生成流程图失败,原因:" + e.getMessage(), e); 92 | } 93 | 94 | } 95 | 96 | /** 97 | * 获取已经流转的线 98 | * 99 | * @param bpmnModel 100 | * @param historicActivityInstances 101 | * @return 102 | */ 103 | private static List getHighLightedFlows(BpmnModel bpmnModel, List historicActivityInstances) { 104 | // 高亮流程已发生流转的线id集合 105 | List highLightedFlowIds = new ArrayList<>(); 106 | // 全部活动节点 107 | List historicActivityNodes = new ArrayList<>(); 108 | // 已完成的历史活动节点 109 | List finishedActivityInstances = new ArrayList<>(); 110 | 111 | for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { 112 | FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(historicActivityInstance.getActivityId(), true); 113 | historicActivityNodes.add(flowNode); 114 | if (historicActivityInstance.getEndTime() != null) { 115 | finishedActivityInstances.add(historicActivityInstance); 116 | } 117 | } 118 | 119 | FlowNode currentFlowNode = null; 120 | FlowNode targetFlowNode = null; 121 | // 遍历已完成的活动实例,从每个实例的outgoingFlows中找到已执行的 122 | for (HistoricActivityInstance currentActivityInstance : finishedActivityInstances) { 123 | // 获得当前活动对应的节点信息及outgoingFlows信息 124 | currentFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currentActivityInstance.getActivityId(), true); 125 | List sequenceFlows = currentFlowNode.getOutgoingFlows(); 126 | 127 | /** 128 | * 遍历outgoingFlows并找到已已流转的 满足如下条件认为已已流转: 1.当前节点是并行网关或兼容网关,则通过outgoingFlows能够在历史活动中找到的全部节点均为已流转 2.当前节点是以上两种类型之外的,通过outgoingFlows查找到的时间最早的流转节点视为有效流转 129 | */ 130 | if ("parallelGateway".equals(currentActivityInstance.getActivityType()) || "inclusiveGateway".equals(currentActivityInstance.getActivityType())) { 131 | // 遍历历史活动节点,找到匹配流程目标节点的 132 | for (SequenceFlow sequenceFlow : sequenceFlows) { 133 | targetFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(sequenceFlow.getTargetRef(), true); 134 | if (historicActivityNodes.contains(targetFlowNode)) { 135 | highLightedFlowIds.add(targetFlowNode.getId()); 136 | } 137 | } 138 | } else { 139 | List> tempMapList = new ArrayList<>(); 140 | for (SequenceFlow sequenceFlow : sequenceFlows) { 141 | for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { 142 | if (historicActivityInstance.getActivityId().equals(sequenceFlow.getTargetRef())) { 143 | Map map = new HashMap<>(); 144 | map.put("highLightedFlowId", sequenceFlow.getId()); 145 | map.put("highLightedFlowStartTime", historicActivityInstance.getStartTime().getTime()); 146 | tempMapList.add(map); 147 | } 148 | } 149 | } 150 | 151 | if (!CollectionUtils.isEmpty(tempMapList)) { 152 | // 遍历匹配的集合,取得开始时间最早的一个 153 | long earliestStamp = 0L; 154 | String highLightedFlowId = null; 155 | for (Map map : tempMapList) { 156 | long highLightedFlowStartTime = Long.valueOf(map.get("highLightedFlowStartTime").toString()); 157 | if (earliestStamp == 0 || earliestStamp >= highLightedFlowStartTime) { 158 | highLightedFlowId = map.get("highLightedFlowId").toString(); 159 | earliestStamp = highLightedFlowStartTime; 160 | } 161 | } 162 | 163 | highLightedFlowIds.add(highLightedFlowId); 164 | } 165 | 166 | } 167 | 168 | } 169 | return highLightedFlowIds; 170 | } 171 | 172 | } 173 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/java/com/demo/util/CustomProcessDiagramGenerator.java: -------------------------------------------------------------------------------- 1 | 2 | package com.demo.util; 3 | 4 | /* Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import java.awt.image.BufferedImage; 18 | import java.io.InputStream; 19 | import java.util.ArrayList; 20 | import java.util.Collections; 21 | import java.util.HashMap; 22 | import java.util.List; 23 | import java.util.Map; 24 | 25 | import org.activiti.bpmn.model.Activity; 26 | import org.activiti.bpmn.model.Artifact; 27 | import org.activiti.bpmn.model.Association; 28 | import org.activiti.bpmn.model.AssociationDirection; 29 | import org.activiti.bpmn.model.BaseElement; 30 | import org.activiti.bpmn.model.BoundaryEvent; 31 | import org.activiti.bpmn.model.BpmnModel; 32 | import org.activiti.bpmn.model.BusinessRuleTask; 33 | import org.activiti.bpmn.model.CallActivity; 34 | import org.activiti.bpmn.model.CompensateEventDefinition; 35 | import org.activiti.bpmn.model.EndEvent; 36 | import org.activiti.bpmn.model.ErrorEventDefinition; 37 | import org.activiti.bpmn.model.Event; 38 | import org.activiti.bpmn.model.EventDefinition; 39 | import org.activiti.bpmn.model.EventGateway; 40 | import org.activiti.bpmn.model.EventSubProcess; 41 | import org.activiti.bpmn.model.ExclusiveGateway; 42 | import org.activiti.bpmn.model.FlowElement; 43 | import org.activiti.bpmn.model.FlowElementsContainer; 44 | import org.activiti.bpmn.model.FlowNode; 45 | import org.activiti.bpmn.model.Gateway; 46 | import org.activiti.bpmn.model.GraphicInfo; 47 | import org.activiti.bpmn.model.InclusiveGateway; 48 | import org.activiti.bpmn.model.IntermediateCatchEvent; 49 | import org.activiti.bpmn.model.Lane; 50 | import org.activiti.bpmn.model.ManualTask; 51 | import org.activiti.bpmn.model.MessageEventDefinition; 52 | import org.activiti.bpmn.model.MultiInstanceLoopCharacteristics; 53 | import org.activiti.bpmn.model.ParallelGateway; 54 | import org.activiti.bpmn.model.Pool; 55 | import org.activiti.bpmn.model.Process; 56 | import org.activiti.bpmn.model.ReceiveTask; 57 | import org.activiti.bpmn.model.ScriptTask; 58 | import org.activiti.bpmn.model.SendTask; 59 | import org.activiti.bpmn.model.SequenceFlow; 60 | import org.activiti.bpmn.model.ServiceTask; 61 | import org.activiti.bpmn.model.SignalEventDefinition; 62 | import org.activiti.bpmn.model.StartEvent; 63 | import org.activiti.bpmn.model.SubProcess; 64 | import org.activiti.bpmn.model.Task; 65 | import org.activiti.bpmn.model.TextAnnotation; 66 | import org.activiti.bpmn.model.ThrowEvent; 67 | import org.activiti.bpmn.model.TimerEventDefinition; 68 | import org.activiti.bpmn.model.UserTask; 69 | import org.activiti.image.ProcessDiagramGenerator; 70 | 71 | /** 72 | * Class to generate an image based the diagram interchange information in a BPMN 2.0 process. 73 | * 74 | * @author Joram Barrez 75 | * @author Tijs Rademakers 76 | */ 77 | public class CustomProcessDiagramGenerator implements ProcessDiagramGenerator { 78 | 79 | protected Map, ActivityDrawInstruction> activityDrawInstructions = new HashMap, ActivityDrawInstruction>(); 80 | protected Map, ArtifactDrawInstruction> artifactDrawInstructions = new HashMap, ArtifactDrawInstruction>(); 81 | 82 | public CustomProcessDiagramGenerator() { 83 | this(1.0); 84 | } 85 | 86 | // The instructions on how to draw a certain construct is 87 | // created statically and stored in a map for performance. 88 | public CustomProcessDiagramGenerator(final double scaleFactor) { 89 | // start event 90 | activityDrawInstructions.put(StartEvent.class, new ActivityDrawInstruction() { 91 | 92 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 93 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 94 | StartEvent startEvent = (StartEvent) flowNode; 95 | if (startEvent.getEventDefinitions() != null && !startEvent.getEventDefinitions().isEmpty()) { 96 | EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); 97 | if (eventDefinition instanceof TimerEventDefinition) { 98 | processDiagramCanvas.drawTimerStartEvent(graphicInfo, scaleFactor); 99 | } else if (eventDefinition instanceof ErrorEventDefinition) { 100 | processDiagramCanvas.drawErrorStartEvent(graphicInfo, scaleFactor); 101 | } else if (eventDefinition instanceof SignalEventDefinition) { 102 | processDiagramCanvas.drawSignalStartEvent(graphicInfo, scaleFactor); 103 | } else if (eventDefinition instanceof MessageEventDefinition) { 104 | processDiagramCanvas.drawMessageStartEvent(graphicInfo, scaleFactor); 105 | } else { 106 | processDiagramCanvas.drawNoneStartEvent(graphicInfo); 107 | } 108 | } else { 109 | processDiagramCanvas.drawNoneStartEvent(graphicInfo); 110 | } 111 | } 112 | }); 113 | 114 | // signal catch 115 | activityDrawInstructions.put(IntermediateCatchEvent.class, new ActivityDrawInstruction() { 116 | 117 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 118 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 119 | IntermediateCatchEvent intermediateCatchEvent = (IntermediateCatchEvent) flowNode; 120 | if (intermediateCatchEvent.getEventDefinitions() != null && !intermediateCatchEvent.getEventDefinitions().isEmpty()) { 121 | if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) { 122 | processDiagramCanvas.drawCatchingSignalEvent(flowNode.getName(), graphicInfo, true, scaleFactor); 123 | } else if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof TimerEventDefinition) { 124 | processDiagramCanvas.drawCatchingTimerEvent(flowNode.getName(), graphicInfo, true, scaleFactor); 125 | } else if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof MessageEventDefinition) { 126 | processDiagramCanvas.drawCatchingMessageEvent(flowNode.getName(), graphicInfo, true, scaleFactor); 127 | } 128 | } 129 | } 130 | }); 131 | 132 | // signal throw 133 | activityDrawInstructions.put(ThrowEvent.class, new ActivityDrawInstruction() { 134 | 135 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 136 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 137 | ThrowEvent throwEvent = (ThrowEvent) flowNode; 138 | if (throwEvent.getEventDefinitions() != null && !throwEvent.getEventDefinitions().isEmpty()) { 139 | if (throwEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) { 140 | processDiagramCanvas.drawThrowingSignalEvent(graphicInfo, scaleFactor); 141 | } else if (throwEvent.getEventDefinitions().get(0) instanceof CompensateEventDefinition) { 142 | processDiagramCanvas.drawThrowingCompensateEvent(graphicInfo, scaleFactor); 143 | } else { 144 | processDiagramCanvas.drawThrowingNoneEvent(graphicInfo, scaleFactor); 145 | } 146 | } else { 147 | processDiagramCanvas.drawThrowingNoneEvent(graphicInfo, scaleFactor); 148 | } 149 | } 150 | }); 151 | 152 | // end event 153 | activityDrawInstructions.put(EndEvent.class, new ActivityDrawInstruction() { 154 | 155 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 156 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 157 | EndEvent endEvent = (EndEvent) flowNode; 158 | if (endEvent.getEventDefinitions() != null && !endEvent.getEventDefinitions().isEmpty()) { 159 | if (endEvent.getEventDefinitions().get(0) instanceof ErrorEventDefinition) { 160 | processDiagramCanvas.drawErrorEndEvent(flowNode.getName(), graphicInfo, scaleFactor); 161 | } else { 162 | processDiagramCanvas.drawNoneEndEvent(graphicInfo, scaleFactor); 163 | } 164 | } else { 165 | processDiagramCanvas.drawNoneEndEvent(graphicInfo, scaleFactor); 166 | } 167 | } 168 | }); 169 | 170 | // task 171 | activityDrawInstructions.put(Task.class, new ActivityDrawInstruction() { 172 | 173 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 174 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 175 | processDiagramCanvas.drawTask(flowNode.getName(), graphicInfo); 176 | } 177 | }); 178 | 179 | // user task 180 | activityDrawInstructions.put(UserTask.class, new ActivityDrawInstruction() { 181 | 182 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 183 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 184 | processDiagramCanvas.drawUserTask(flowNode.getName(), graphicInfo, scaleFactor); 185 | } 186 | }); 187 | 188 | // script task 189 | activityDrawInstructions.put(ScriptTask.class, new ActivityDrawInstruction() { 190 | 191 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 192 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 193 | processDiagramCanvas.drawScriptTask(flowNode.getName(), graphicInfo, scaleFactor); 194 | } 195 | }); 196 | 197 | // service task 198 | activityDrawInstructions.put(ServiceTask.class, new ActivityDrawInstruction() { 199 | 200 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 201 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 202 | ServiceTask serviceTask = (ServiceTask) flowNode; 203 | if ("camel".equalsIgnoreCase(serviceTask.getType())) { 204 | processDiagramCanvas.drawCamelTask(serviceTask.getName(), graphicInfo, scaleFactor); 205 | } else if ("mule".equalsIgnoreCase(serviceTask.getType())) { 206 | processDiagramCanvas.drawMuleTask(serviceTask.getName(), graphicInfo, scaleFactor); 207 | } else { 208 | processDiagramCanvas.drawServiceTask(serviceTask.getName(), graphicInfo, scaleFactor); 209 | } 210 | } 211 | }); 212 | 213 | // receive task 214 | activityDrawInstructions.put(ReceiveTask.class, new ActivityDrawInstruction() { 215 | 216 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 217 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 218 | processDiagramCanvas.drawReceiveTask(flowNode.getName(), graphicInfo, scaleFactor); 219 | } 220 | }); 221 | 222 | // send task 223 | activityDrawInstructions.put(SendTask.class, new ActivityDrawInstruction() { 224 | 225 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 226 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 227 | processDiagramCanvas.drawSendTask(flowNode.getName(), graphicInfo, scaleFactor); 228 | } 229 | }); 230 | 231 | // manual task 232 | activityDrawInstructions.put(ManualTask.class, new ActivityDrawInstruction() { 233 | 234 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 235 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 236 | processDiagramCanvas.drawManualTask(flowNode.getName(), graphicInfo, scaleFactor); 237 | } 238 | }); 239 | 240 | // businessRuleTask task 241 | activityDrawInstructions.put(BusinessRuleTask.class, new ActivityDrawInstruction() { 242 | 243 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 244 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 245 | processDiagramCanvas.drawBusinessRuleTask(flowNode.getName(), graphicInfo, scaleFactor); 246 | } 247 | }); 248 | 249 | // exclusive gateway 250 | activityDrawInstructions.put(ExclusiveGateway.class, new ActivityDrawInstruction() { 251 | 252 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 253 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 254 | processDiagramCanvas.drawExclusiveGateway(graphicInfo, scaleFactor); 255 | } 256 | }); 257 | 258 | // inclusive gateway 259 | activityDrawInstructions.put(InclusiveGateway.class, new ActivityDrawInstruction() { 260 | 261 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 262 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 263 | processDiagramCanvas.drawInclusiveGateway(graphicInfo, scaleFactor); 264 | } 265 | }); 266 | 267 | // parallel gateway 268 | activityDrawInstructions.put(ParallelGateway.class, new ActivityDrawInstruction() { 269 | 270 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 271 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 272 | processDiagramCanvas.drawParallelGateway(graphicInfo, scaleFactor); 273 | } 274 | }); 275 | 276 | // event based gateway 277 | activityDrawInstructions.put(EventGateway.class, new ActivityDrawInstruction() { 278 | 279 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 280 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 281 | processDiagramCanvas.drawEventBasedGateway(graphicInfo, scaleFactor); 282 | } 283 | }); 284 | 285 | // Boundary timer 286 | activityDrawInstructions.put(BoundaryEvent.class, new ActivityDrawInstruction() { 287 | 288 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 289 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 290 | BoundaryEvent boundaryEvent = (BoundaryEvent) flowNode; 291 | if (boundaryEvent.getEventDefinitions() != null && !boundaryEvent.getEventDefinitions().isEmpty()) { 292 | if (boundaryEvent.getEventDefinitions().get(0) instanceof TimerEventDefinition) { 293 | 294 | processDiagramCanvas.drawCatchingTimerEvent(flowNode.getName(), graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); 295 | 296 | } else if (boundaryEvent.getEventDefinitions().get(0) instanceof ErrorEventDefinition) { 297 | 298 | processDiagramCanvas.drawCatchingErrorEvent(graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); 299 | 300 | } else if (boundaryEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) { 301 | processDiagramCanvas.drawCatchingSignalEvent(flowNode.getName(), graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); 302 | 303 | } else if (boundaryEvent.getEventDefinitions().get(0) instanceof MessageEventDefinition) { 304 | processDiagramCanvas.drawCatchingMessageEvent(flowNode.getName(), graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); 305 | 306 | } else if (boundaryEvent.getEventDefinitions().get(0) instanceof CompensateEventDefinition) { 307 | processDiagramCanvas.drawCatchingCompensateEvent(graphicInfo, boundaryEvent.isCancelActivity(), scaleFactor); 308 | } 309 | } 310 | 311 | } 312 | }); 313 | 314 | // subprocess 315 | activityDrawInstructions.put(SubProcess.class, new ActivityDrawInstruction() { 316 | 317 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 318 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 319 | if (graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { 320 | processDiagramCanvas.drawCollapsedSubProcess(flowNode.getName(), graphicInfo, false); 321 | } else { 322 | processDiagramCanvas.drawExpandedSubProcess(flowNode.getName(), graphicInfo, false, scaleFactor); 323 | } 324 | } 325 | }); 326 | 327 | // Event subprocess 328 | activityDrawInstructions.put(EventSubProcess.class, new ActivityDrawInstruction() { 329 | 330 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 331 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 332 | if (graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { 333 | processDiagramCanvas.drawCollapsedSubProcess(flowNode.getName(), graphicInfo, true); 334 | } else { 335 | processDiagramCanvas.drawExpandedSubProcess(flowNode.getName(), graphicInfo, true, scaleFactor); 336 | } 337 | } 338 | }); 339 | 340 | // call activity 341 | activityDrawInstructions.put(CallActivity.class, new ActivityDrawInstruction() { 342 | 343 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { 344 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 345 | processDiagramCanvas.drawCollapsedCallActivity(flowNode.getName(), graphicInfo); 346 | } 347 | }); 348 | 349 | // text annotation 350 | artifactDrawInstructions.put(TextAnnotation.class, new ArtifactDrawInstruction() { 351 | 352 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact) { 353 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(artifact.getId()); 354 | TextAnnotation textAnnotation = (TextAnnotation) artifact; 355 | processDiagramCanvas.drawTextAnnotation(textAnnotation.getText(), graphicInfo); 356 | } 357 | }); 358 | 359 | // association 360 | artifactDrawInstructions.put(Association.class, new ArtifactDrawInstruction() { 361 | 362 | public void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact) { 363 | Association association = (Association) artifact; 364 | String sourceRef = association.getSourceRef(); 365 | String targetRef = association.getTargetRef(); 366 | 367 | // source and target can be instance of FlowElement or Artifact 368 | BaseElement sourceElement = bpmnModel.getFlowElement(sourceRef); 369 | BaseElement targetElement = bpmnModel.getFlowElement(targetRef); 370 | if (sourceElement == null) { 371 | sourceElement = bpmnModel.getArtifact(sourceRef); 372 | } 373 | if (targetElement == null) { 374 | targetElement = bpmnModel.getArtifact(targetRef); 375 | } 376 | List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(artifact.getId()); 377 | graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, targetElement, graphicInfoList); 378 | int xPoints[] = new int[graphicInfoList.size()]; 379 | int yPoints[] = new int[graphicInfoList.size()]; 380 | for (int i = 1; i < graphicInfoList.size(); i++) { 381 | GraphicInfo graphicInfo = graphicInfoList.get(i); 382 | GraphicInfo previousGraphicInfo = graphicInfoList.get(i - 1); 383 | 384 | if (i == 1) { 385 | xPoints[0] = (int) previousGraphicInfo.getX(); 386 | yPoints[0] = (int) previousGraphicInfo.getY(); 387 | } 388 | xPoints[i] = (int) graphicInfo.getX(); 389 | yPoints[i] = (int) graphicInfo.getY(); 390 | } 391 | 392 | AssociationDirection associationDirection = association.getAssociationDirection(); 393 | processDiagramCanvas.drawAssociation(xPoints, yPoints, associationDirection, false, scaleFactor); 394 | } 395 | }); 396 | } 397 | 398 | public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, String activityFontName, 399 | String labelFontName, ClassLoader customClassLoader, double scaleFactor) { 400 | 401 | return generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, activityFontName, labelFontName, customClassLoader, scaleFactor) 402 | .generateImage(imageType); 403 | } 404 | 405 | public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows) { 406 | return generateDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, 1.0); 407 | } 408 | 409 | public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, double scaleFactor) { 410 | return generateDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, scaleFactor); 411 | } 412 | 413 | public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities) { 414 | return generateDiagram(bpmnModel, imageType, highLightedActivities, Collections. emptyList()); 415 | } 416 | 417 | public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, double scaleFactor) { 418 | return generateDiagram(bpmnModel, imageType, highLightedActivities, Collections. emptyList(), scaleFactor); 419 | } 420 | 421 | public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, ClassLoader customClassLoader) { 422 | return generateDiagram(bpmnModel, imageType, Collections. emptyList(), Collections. emptyList(), activityFontName, labelFontName, customClassLoader, 1.0); 423 | } 424 | 425 | public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, ClassLoader customClassLoader, double scaleFactor) { 426 | 427 | return generateDiagram(bpmnModel, imageType, Collections. emptyList(), Collections. emptyList(), activityFontName, labelFontName, customClassLoader, 428 | scaleFactor); 429 | } 430 | 431 | public InputStream generatePngDiagram(BpmnModel bpmnModel) { 432 | return generatePngDiagram(bpmnModel, 1.0); 433 | } 434 | 435 | public InputStream generatePngDiagram(BpmnModel bpmnModel, double scaleFactor) { 436 | return generateDiagram(bpmnModel, "png", Collections. emptyList(), Collections. emptyList(), scaleFactor); 437 | } 438 | 439 | public InputStream generateJpgDiagram(BpmnModel bpmnModel) { 440 | return generateJpgDiagram(bpmnModel, 1.0); 441 | } 442 | 443 | public InputStream generateJpgDiagram(BpmnModel bpmnModel, double scaleFactor) { 444 | return generateDiagram(bpmnModel, "jpg", Collections. emptyList(), Collections. emptyList()); 445 | } 446 | 447 | public BufferedImage generateImage(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, String activityFontName, 448 | String labelFontName, ClassLoader customClassLoader, double scaleFactor) { 449 | 450 | return generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, activityFontName, labelFontName, customClassLoader, scaleFactor) 451 | .generateBufferedImage(imageType); 452 | } 453 | 454 | public BufferedImage generateImage(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, double scaleFactor) { 455 | 456 | return generateImage(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, scaleFactor); 457 | } 458 | 459 | public BufferedImage generatePngImage(BpmnModel bpmnModel, double scaleFactor) { 460 | return generateImage(bpmnModel, "png", Collections. emptyList(), Collections. emptyList(), scaleFactor); 461 | } 462 | 463 | protected CustomProcessDiagramCanvas generateProcessDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, 464 | String activityFontName, String labelFontName, ClassLoader customClassLoader, double scaleFactor) { 465 | 466 | CustomProcessDiagramCanvas processDiagramCanvas = initProcessDiagramCanvas(bpmnModel, imageType, activityFontName, labelFontName, customClassLoader); 467 | 468 | // Draw pool shape, if process is participant in collaboration 469 | for (Pool pool : bpmnModel.getPools()) { 470 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId()); 471 | processDiagramCanvas.drawPoolOrLane(pool.getName(), graphicInfo); 472 | } 473 | 474 | // Draw lanes 475 | for (Process process : bpmnModel.getProcesses()) { 476 | for (Lane lane : process.getLanes()) { 477 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(lane.getId()); 478 | processDiagramCanvas.drawPoolOrLane(lane.getName(), graphicInfo); 479 | } 480 | } 481 | 482 | // Draw activities and their sequence-flows 483 | for (FlowNode flowNode : bpmnModel.getProcesses().get(0).findFlowElementsOfType(FlowNode.class)) { 484 | drawActivity(processDiagramCanvas, bpmnModel, flowNode, highLightedActivities, highLightedFlows, scaleFactor); 485 | } 486 | 487 | // Draw artifacts 488 | for (Process process : bpmnModel.getProcesses()) { 489 | for (Artifact artifact : process.getArtifacts()) { 490 | drawArtifact(processDiagramCanvas, bpmnModel, artifact); 491 | } 492 | } 493 | 494 | return processDiagramCanvas; 495 | } 496 | 497 | protected void drawActivity(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode, List highLightedActivities, 498 | List highLightedFlows, double scaleFactor) { 499 | 500 | ActivityDrawInstruction drawInstruction = activityDrawInstructions.get(flowNode.getClass()); 501 | if (drawInstruction != null) { 502 | 503 | drawInstruction.draw(processDiagramCanvas, bpmnModel, flowNode); 504 | 505 | // Gather info on the multi instance marker 506 | boolean multiInstanceSequential = false, multiInstanceParallel = false, collapsed = false; 507 | if (flowNode instanceof Activity) { 508 | Activity activity = (Activity) flowNode; 509 | MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = activity.getLoopCharacteristics(); 510 | if (multiInstanceLoopCharacteristics != null) { 511 | multiInstanceSequential = multiInstanceLoopCharacteristics.isSequential(); 512 | multiInstanceParallel = !multiInstanceSequential; 513 | } 514 | } 515 | 516 | // Gather info on the collapsed marker 517 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 518 | if (flowNode instanceof SubProcess) { 519 | collapsed = graphicInfo.getExpanded() != null && !graphicInfo.getExpanded(); 520 | } else if (flowNode instanceof CallActivity) { 521 | collapsed = true; 522 | } 523 | 524 | if (scaleFactor == 1.0) { 525 | // Actually draw the markers 526 | processDiagramCanvas.drawActivityMarkers((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight(), 527 | multiInstanceSequential, multiInstanceParallel, collapsed); 528 | } 529 | 530 | // Draw highlighted activities 531 | if (highLightedActivities.contains(flowNode.getId())) { 532 | drawHighLight(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); 533 | } 534 | 535 | } 536 | 537 | // Outgoing transitions of activity 538 | for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) { 539 | boolean highLighted = (highLightedFlows.contains(sequenceFlow.getId())); 540 | String defaultFlow = null; 541 | if (flowNode instanceof Activity) { 542 | defaultFlow = ((Activity) flowNode).getDefaultFlow(); 543 | } else if (flowNode instanceof Gateway) { 544 | defaultFlow = ((Gateway) flowNode).getDefaultFlow(); 545 | } 546 | 547 | boolean isDefault = false; 548 | if (defaultFlow != null && defaultFlow.equalsIgnoreCase(sequenceFlow.getId())) { 549 | isDefault = true; 550 | } 551 | boolean drawConditionalIndicator = sequenceFlow.getConditionExpression() != null && !(flowNode instanceof Gateway); 552 | 553 | String sourceRef = sequenceFlow.getSourceRef(); 554 | String targetRef = sequenceFlow.getTargetRef(); 555 | FlowElement sourceElement = bpmnModel.getFlowElement(sourceRef); 556 | FlowElement targetElement = bpmnModel.getFlowElement(targetRef); 557 | List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId()); 558 | if (graphicInfoList != null && graphicInfoList.size() > 0) { 559 | graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, targetElement, graphicInfoList); 560 | int xPoints[] = new int[graphicInfoList.size()]; 561 | int yPoints[] = new int[graphicInfoList.size()]; 562 | 563 | for (int i = 1; i < graphicInfoList.size(); i++) { 564 | GraphicInfo graphicInfo = graphicInfoList.get(i); 565 | GraphicInfo previousGraphicInfo = graphicInfoList.get(i - 1); 566 | 567 | if (i == 1) { 568 | xPoints[0] = (int) previousGraphicInfo.getX(); 569 | yPoints[0] = (int) previousGraphicInfo.getY(); 570 | } 571 | xPoints[i] = (int) graphicInfo.getX(); 572 | yPoints[i] = (int) graphicInfo.getY(); 573 | 574 | } 575 | 576 | processDiagramCanvas.drawSequenceflow(xPoints, yPoints, drawConditionalIndicator, isDefault, highLighted, scaleFactor); 577 | 578 | // Draw sequenceflow label 579 | GraphicInfo labelGraphicInfo = bpmnModel.getLabelGraphicInfo(sequenceFlow.getId()); 580 | if (labelGraphicInfo != null) { 581 | GraphicInfo lineCenter = getLineCenter(graphicInfoList); 582 | processDiagramCanvas.drawLabel(sequenceFlow.getName(), lineCenter, false); 583 | } 584 | } 585 | } 586 | 587 | // Nested elements 588 | if (flowNode instanceof FlowElementsContainer) { 589 | for (FlowElement nestedFlowElement : ((FlowElementsContainer) flowNode).getFlowElements()) { 590 | if (nestedFlowElement instanceof FlowNode) { 591 | drawActivity(processDiagramCanvas, bpmnModel, (FlowNode) nestedFlowElement, highLightedActivities, highLightedFlows, scaleFactor); 592 | } 593 | } 594 | } 595 | } 596 | 597 | /** 598 | * This method makes coordinates of connection flow better. 599 | * 600 | * @param processDiagramCanvas 601 | * @param bpmnModel 602 | * @param sourceElement 603 | * @param targetElement 604 | * @param graphicInfoList 605 | * @return 606 | */ 607 | protected static List connectionPerfectionizer(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, BaseElement sourceElement, 608 | BaseElement targetElement, List graphicInfoList) { 609 | GraphicInfo sourceGraphicInfo = bpmnModel.getGraphicInfo(sourceElement.getId()); 610 | GraphicInfo targetGraphicInfo = bpmnModel.getGraphicInfo(targetElement.getId()); 611 | 612 | CustomProcessDiagramCanvas.SHAPE_TYPE sourceShapeType = getShapeType(sourceElement); 613 | CustomProcessDiagramCanvas.SHAPE_TYPE targetShapeType = getShapeType(targetElement); 614 | 615 | return processDiagramCanvas.connectionPerfectionizer(sourceShapeType, targetShapeType, sourceGraphicInfo, targetGraphicInfo, graphicInfoList); 616 | } 617 | 618 | /** 619 | * This method returns shape type of base element.
620 | * Each element can be presented as rectangle, rhombus, or ellipse. 621 | * 622 | * @param baseElement 623 | * @return CustomProcessDiagramCanvas.SHAPE_TYPE 624 | */ 625 | protected static CustomProcessDiagramCanvas.SHAPE_TYPE getShapeType(BaseElement baseElement) { 626 | if (baseElement instanceof Task || baseElement instanceof Activity || baseElement instanceof TextAnnotation) { 627 | return CustomProcessDiagramCanvas.SHAPE_TYPE.Rectangle; 628 | } else if (baseElement instanceof Gateway) { 629 | return CustomProcessDiagramCanvas.SHAPE_TYPE.Rhombus; 630 | } else if (baseElement instanceof Event) { 631 | return CustomProcessDiagramCanvas.SHAPE_TYPE.Ellipse; 632 | } else { 633 | // unknown source element, just do not correct coordinates 634 | } 635 | return null; 636 | } 637 | 638 | protected static GraphicInfo getLineCenter(List graphicInfoList) { 639 | GraphicInfo gi = new GraphicInfo(); 640 | 641 | int xPoints[] = new int[graphicInfoList.size()]; 642 | int yPoints[] = new int[graphicInfoList.size()]; 643 | 644 | double length = 0; 645 | double[] lengths = new double[graphicInfoList.size()]; 646 | lengths[0] = 0; 647 | double m; 648 | for (int i = 1; i < graphicInfoList.size(); i++) { 649 | GraphicInfo graphicInfo = graphicInfoList.get(i); 650 | GraphicInfo previousGraphicInfo = graphicInfoList.get(i - 1); 651 | 652 | if (i == 1) { 653 | xPoints[0] = (int) previousGraphicInfo.getX(); 654 | yPoints[0] = (int) previousGraphicInfo.getY(); 655 | } 656 | xPoints[i] = (int) graphicInfo.getX(); 657 | yPoints[i] = (int) graphicInfo.getY(); 658 | 659 | length += Math 660 | .sqrt(Math.pow((int) graphicInfo.getX() - (int) previousGraphicInfo.getX(), 2) + Math.pow((int) graphicInfo.getY() - (int) previousGraphicInfo.getY(), 2)); 661 | lengths[i] = length; 662 | } 663 | m = length / 2; 664 | int p1 = 0, p2 = 1; 665 | for (int i = 1; i < lengths.length; i++) { 666 | double len = lengths[i]; 667 | p1 = i - 1; 668 | p2 = i; 669 | if (len > m) { 670 | break; 671 | } 672 | } 673 | 674 | GraphicInfo graphicInfo1 = graphicInfoList.get(p1); 675 | GraphicInfo graphicInfo2 = graphicInfoList.get(p2); 676 | 677 | double AB = (int) graphicInfo2.getX() - (int) graphicInfo1.getX(); 678 | double OA = (int) graphicInfo2.getY() - (int) graphicInfo1.getY(); 679 | double OB = lengths[p2] - lengths[p1]; 680 | double ob = m - lengths[p1]; 681 | double ab = AB * ob / OB; 682 | double oa = OA * ob / OB; 683 | 684 | double mx = graphicInfo1.getX() + ab; 685 | double my = graphicInfo1.getY() + oa; 686 | 687 | gi.setX(mx); 688 | gi.setY(my); 689 | return gi; 690 | } 691 | 692 | protected void drawArtifact(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact) { 693 | 694 | ArtifactDrawInstruction drawInstruction = artifactDrawInstructions.get(artifact.getClass()); 695 | if (drawInstruction != null) { 696 | drawInstruction.draw(processDiagramCanvas, bpmnModel, artifact); 697 | } 698 | } 699 | 700 | private static void drawHighLight(CustomProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo) { 701 | processDiagramCanvas.drawHighLight((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight()); 702 | 703 | } 704 | 705 | protected static CustomProcessDiagramCanvas initProcessDiagramCanvas(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, 706 | ClassLoader customClassLoader) { 707 | 708 | // We need to calculate maximum values to know how big the image will be in its entirety 709 | double minX = Double.MAX_VALUE; 710 | double maxX = 0; 711 | double minY = Double.MAX_VALUE; 712 | double maxY = 0; 713 | 714 | for (Pool pool : bpmnModel.getPools()) { 715 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId()); 716 | minX = graphicInfo.getX(); 717 | maxX = graphicInfo.getX() + graphicInfo.getWidth(); 718 | minY = graphicInfo.getY(); 719 | maxY = graphicInfo.getY() + graphicInfo.getHeight(); 720 | } 721 | 722 | List flowNodes = gatherAllFlowNodes(bpmnModel); 723 | for (FlowNode flowNode : flowNodes) { 724 | 725 | GraphicInfo flowNodeGraphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); 726 | 727 | // width 728 | if (flowNodeGraphicInfo.getX() + flowNodeGraphicInfo.getWidth() > maxX) { 729 | maxX = flowNodeGraphicInfo.getX() + flowNodeGraphicInfo.getWidth(); 730 | } 731 | if (flowNodeGraphicInfo.getX() < minX) { 732 | minX = flowNodeGraphicInfo.getX(); 733 | } 734 | // height 735 | if (flowNodeGraphicInfo.getY() + flowNodeGraphicInfo.getHeight() > maxY) { 736 | maxY = flowNodeGraphicInfo.getY() + flowNodeGraphicInfo.getHeight(); 737 | } 738 | if (flowNodeGraphicInfo.getY() < minY) { 739 | minY = flowNodeGraphicInfo.getY(); 740 | } 741 | 742 | for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) { 743 | List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId()); 744 | if (graphicInfoList != null) { 745 | for (GraphicInfo graphicInfo : graphicInfoList) { 746 | // width 747 | if (graphicInfo.getX() > maxX) { 748 | maxX = graphicInfo.getX(); 749 | } 750 | if (graphicInfo.getX() < minX) { 751 | minX = graphicInfo.getX(); 752 | } 753 | // height 754 | if (graphicInfo.getY() > maxY) { 755 | maxY = graphicInfo.getY(); 756 | } 757 | if (graphicInfo.getY() < minY) { 758 | minY = graphicInfo.getY(); 759 | } 760 | } 761 | } 762 | } 763 | } 764 | 765 | List artifacts = gatherAllArtifacts(bpmnModel); 766 | for (Artifact artifact : artifacts) { 767 | 768 | GraphicInfo artifactGraphicInfo = bpmnModel.getGraphicInfo(artifact.getId()); 769 | 770 | if (artifactGraphicInfo != null) { 771 | // width 772 | if (artifactGraphicInfo.getX() + artifactGraphicInfo.getWidth() > maxX) { 773 | maxX = artifactGraphicInfo.getX() + artifactGraphicInfo.getWidth(); 774 | } 775 | if (artifactGraphicInfo.getX() < minX) { 776 | minX = artifactGraphicInfo.getX(); 777 | } 778 | // height 779 | if (artifactGraphicInfo.getY() + artifactGraphicInfo.getHeight() > maxY) { 780 | maxY = artifactGraphicInfo.getY() + artifactGraphicInfo.getHeight(); 781 | } 782 | if (artifactGraphicInfo.getY() < minY) { 783 | minY = artifactGraphicInfo.getY(); 784 | } 785 | } 786 | 787 | List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(artifact.getId()); 788 | if (graphicInfoList != null) { 789 | for (GraphicInfo graphicInfo : graphicInfoList) { 790 | // width 791 | if (graphicInfo.getX() > maxX) { 792 | maxX = graphicInfo.getX(); 793 | } 794 | if (graphicInfo.getX() < minX) { 795 | minX = graphicInfo.getX(); 796 | } 797 | // height 798 | if (graphicInfo.getY() > maxY) { 799 | maxY = graphicInfo.getY(); 800 | } 801 | if (graphicInfo.getY() < minY) { 802 | minY = graphicInfo.getY(); 803 | } 804 | } 805 | } 806 | } 807 | 808 | int nrOfLanes = 0; 809 | for (Process process : bpmnModel.getProcesses()) { 810 | for (Lane l : process.getLanes()) { 811 | 812 | nrOfLanes++; 813 | 814 | GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(l.getId()); 815 | // // width 816 | if (graphicInfo.getX() + graphicInfo.getWidth() > maxX) { 817 | maxX = graphicInfo.getX() + graphicInfo.getWidth(); 818 | } 819 | if (graphicInfo.getX() < minX) { 820 | minX = graphicInfo.getX(); 821 | } 822 | // height 823 | if (graphicInfo.getY() + graphicInfo.getHeight() > maxY) { 824 | maxY = graphicInfo.getY() + graphicInfo.getHeight(); 825 | } 826 | if (graphicInfo.getY() < minY) { 827 | minY = graphicInfo.getY(); 828 | } 829 | } 830 | } 831 | 832 | // Special case, see http://jira.codehaus.org/browse/ACT-1431 833 | if (flowNodes.isEmpty() && bpmnModel.getPools().isEmpty() && nrOfLanes == 0) { 834 | // Nothing to show 835 | minX = 0; 836 | minY = 0; 837 | } 838 | 839 | return new CustomProcessDiagramCanvas((int) maxX + 10, (int) maxY + 10, (int) minX, (int) minY, imageType, activityFontName, labelFontName, customClassLoader); 840 | } 841 | 842 | protected static List gatherAllArtifacts(BpmnModel bpmnModel) { 843 | List artifacts = new ArrayList(); 844 | for (Process process : bpmnModel.getProcesses()) { 845 | artifacts.addAll(process.getArtifacts()); 846 | } 847 | return artifacts; 848 | } 849 | 850 | protected static List gatherAllFlowNodes(BpmnModel bpmnModel) { 851 | List flowNodes = new ArrayList(); 852 | for (Process process : bpmnModel.getProcesses()) { 853 | flowNodes.addAll(gatherAllFlowNodes(process)); 854 | } 855 | return flowNodes; 856 | } 857 | 858 | protected static List gatherAllFlowNodes(FlowElementsContainer flowElementsContainer) { 859 | List flowNodes = new ArrayList(); 860 | for (FlowElement flowElement : flowElementsContainer.getFlowElements()) { 861 | if (flowElement instanceof FlowNode) { 862 | flowNodes.add((FlowNode) flowElement); 863 | } 864 | if (flowElement instanceof FlowElementsContainer) { 865 | flowNodes.addAll(gatherAllFlowNodes((FlowElementsContainer) flowElement)); 866 | } 867 | } 868 | return flowNodes; 869 | } 870 | 871 | public Map, ActivityDrawInstruction> getActivityDrawInstructions() { 872 | return activityDrawInstructions; 873 | } 874 | 875 | public void setActivityDrawInstructions(Map, ActivityDrawInstruction> activityDrawInstructions) { 876 | this.activityDrawInstructions = activityDrawInstructions; 877 | } 878 | 879 | public Map, ArtifactDrawInstruction> getArtifactDrawInstructions() { 880 | return artifactDrawInstructions; 881 | } 882 | 883 | public void setArtifactDrawInstructions(Map, ArtifactDrawInstruction> artifactDrawInstructions) { 884 | this.artifactDrawInstructions = artifactDrawInstructions; 885 | } 886 | 887 | protected interface ActivityDrawInstruction { 888 | 889 | void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode); 890 | } 891 | 892 | protected interface ArtifactDrawInstruction { 893 | 894 | void draw(CustomProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact); 895 | } 896 | 897 | @Override 898 | public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, String activityFontName, 899 | String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor) { 900 | // TODO Auto-generated method stub 901 | return generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, activityFontName, labelFontName, customClassLoader, scaleFactor) 902 | .generateImage(imageType); 903 | } 904 | 905 | @Override 906 | public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, String annotationFontName, 907 | ClassLoader customClassLoader) { 908 | return generateDiagram(bpmnModel, imageType, Collections. emptyList(), Collections. emptyList(), activityFontName, labelFontName, customClassLoader, 1.0); 909 | } 910 | 911 | @Override 912 | public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, String annotationFontName, 913 | ClassLoader customClassLoader, double scaleFactor) { 914 | // TODO Auto-generated method stub 915 | return generateDiagram(bpmnModel, imageType, Collections. emptyList(), Collections. emptyList(), activityFontName, labelFontName, customClassLoader, 916 | scaleFactor); 917 | } 918 | 919 | } 920 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/java/com/demo/util/SpringContextUtils.java: -------------------------------------------------------------------------------- 1 | 2 | package com.demo.util; 3 | 4 | import org.apache.commons.lang3.Validate; 5 | import org.springframework.beans.BeansException; 6 | import org.springframework.context.ApplicationContext; 7 | import org.springframework.context.ApplicationContextAware; 8 | import org.springframework.stereotype.Component; 9 | 10 | @Component 11 | public class SpringContextUtils implements ApplicationContextAware { 12 | 13 | public static ApplicationContext applicationContext; 14 | 15 | @Override 16 | public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 17 | SpringContextUtils.applicationContext = applicationContext; 18 | } 19 | 20 | public static Object getBean(String name) { 21 | return applicationContext.getBean(name); 22 | } 23 | 24 | /** 25 | * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. 26 | */ 27 | public static T getBean(Class requiredType) { 28 | assertContextInjected(); 29 | return applicationContext.getBean(requiredType); 30 | } 31 | 32 | /** 33 | * 检查ApplicationContext不为空. 34 | */ 35 | private static void assertContextInjected() { 36 | Validate.validState(applicationContext != null, "applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder."); 37 | } 38 | 39 | public static T getBean(String name, Class requiredType) { 40 | return applicationContext.getBean(name, requiredType); 41 | } 42 | 43 | public static boolean containsBean(String name) { 44 | return applicationContext.containsBean(name); 45 | } 46 | 47 | public static boolean isSingleton(String name) { 48 | return applicationContext.isSingleton(name); 49 | } 50 | 51 | public static Class getType(String name) { 52 | return applicationContext.getType(name); 53 | } 54 | 55 | } -------------------------------------------------------------------------------- /demo-act-boot/src/main/java/com/demo/vo/ProcessVO.java: -------------------------------------------------------------------------------- 1 | 2 | package com.demo.vo; 3 | 4 | public class ProcessVO { 5 | 6 | private Integer days; 7 | 8 | private String reason; 9 | 10 | private String date; 11 | 12 | private String processInstanceId; 13 | 14 | public Integer getDays() { 15 | return days; 16 | } 17 | 18 | public void setDays(Integer days) { 19 | this.days = days; 20 | } 21 | 22 | public String getReason() { 23 | return reason; 24 | } 25 | 26 | public void setReason(String reason) { 27 | this.reason = reason; 28 | } 29 | 30 | public String getDate() { 31 | return date; 32 | } 33 | 34 | public void setDate(String date) { 35 | this.date = date; 36 | } 37 | 38 | public String getProcessInstanceId() { 39 | return processInstanceId; 40 | } 41 | 42 | public void setProcessInstanceId(String processInstanceId) { 43 | this.processInstanceId = processInstanceId; 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/java/com/demo/web/ProcessController.java: -------------------------------------------------------------------------------- 1 | 2 | package com.demo.web; 3 | 4 | import java.io.IOException; 5 | import java.text.SimpleDateFormat; 6 | import java.util.ArrayList; 7 | import java.util.Date; 8 | import java.util.HashMap; 9 | import java.util.List; 10 | import java.util.Map; 11 | 12 | import javax.servlet.http.HttpServletResponse; 13 | import javax.servlet.http.HttpSession; 14 | 15 | import org.activiti.engine.IdentityService; 16 | import org.activiti.engine.RuntimeService; 17 | import org.activiti.engine.TaskService; 18 | import org.activiti.engine.runtime.ProcessInstance; 19 | import org.activiti.engine.task.Task; 20 | import org.springframework.beans.factory.annotation.Autowired; 21 | import org.springframework.stereotype.Controller; 22 | import org.springframework.ui.Model; 23 | import org.springframework.web.bind.annotation.PathVariable; 24 | import org.springframework.web.bind.annotation.RequestMapping; 25 | 26 | import com.demo.util.ActUtils; 27 | import com.demo.vo.ProcessVO; 28 | 29 | @Controller 30 | public class ProcessController { 31 | 32 | @Autowired 33 | private RuntimeService runtimeService; 34 | @Autowired 35 | private TaskService taskService; 36 | @Autowired 37 | private IdentityService identityService; 38 | 39 | @RequestMapping(value = "/vac/start") 40 | public String start(Integer days, String reason, HttpSession session) { 41 | String userId = (String) session.getAttribute("user"); 42 | identityService.setAuthenticatedUserId(userId); 43 | 44 | // 启动流程实例 45 | ProcessInstance pi = runtimeService.startProcessInstanceByKey("vacationProcess"); 46 | // 完成第一个任务 47 | Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); 48 | Map vars = new HashMap(); 49 | vars.put("days", days); 50 | vars.put("reason", reason); 51 | taskService.claim(task.getId(), userId); 52 | taskService.complete(task.getId(), vars); 53 | return "redirect:/vac/list"; 54 | } 55 | 56 | @RequestMapping(value = "/vac/list") 57 | public String list(HttpSession session, Model model) { 58 | String userId = (String) session.getAttribute("user"); 59 | // 用户参与的流程 60 | // List list = runtimeService.createProcessInstanceQuery().involvedUser(userId).list(); 61 | List pis = runtimeService.createProcessInstanceQuery().startedBy(userId).list(); 62 | 63 | List result = new ArrayList(); 64 | for (ProcessInstance pi : pis) { 65 | Integer days = (Integer) runtimeService.getVariable(pi.getId(), "days"); 66 | String reason = (String) runtimeService.getVariable(pi.getId(), "reason"); 67 | System.out.println(reason + "---" + days); 68 | ProcessVO v = new ProcessVO(); 69 | v.setDays(days); 70 | v.setReason(reason); 71 | v.setDate(formatDate(pi.getStartTime())); 72 | v.setProcessInstanceId(pi.getId()); 73 | result.add(v); 74 | } 75 | model.addAttribute("pis", result); 76 | return "vac/list"; 77 | } 78 | 79 | private static String formatDate(Date d) { 80 | try { 81 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 82 | return sdf.format(d); 83 | } catch (Exception e) { 84 | return ""; 85 | } 86 | } 87 | 88 | @RequestMapping(value = "/getFlowImg/{processInstanceId}") 89 | public void getFlowImgByInstantId(@PathVariable("processInstanceId") String processInstanceId, HttpServletResponse response) { 90 | try { 91 | System.out.println("processInstanceId:" + processInstanceId); 92 | ActUtils.getFlowImgByInstanceId(processInstanceId, response.getOutputStream()); 93 | } catch (IOException e) { 94 | // TODO Auto-generated catch block 95 | e.printStackTrace(); 96 | } 97 | } 98 | 99 | } 100 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/java/com/demo/web/UserController.java: -------------------------------------------------------------------------------- 1 | 2 | package com.demo.web; 3 | 4 | import javax.servlet.http.HttpSession; 5 | 6 | import org.activiti.engine.IdentityService; 7 | import org.apache.commons.lang3.StringUtils; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Controller; 10 | import org.springframework.ui.Model; 11 | import org.springframework.web.bind.annotation.RequestMapping; 12 | 13 | @Controller 14 | public class UserController { 15 | 16 | @Autowired 17 | private IdentityService identityService; 18 | 19 | @RequestMapping(value = "/login") 20 | public String login(String name, String passwd, HttpSession session, Model model, String flag) { 21 | boolean success = identityService.checkPassword(name, passwd); 22 | if (success) { 23 | session.setAttribute("user", name); 24 | return "main"; 25 | } else { 26 | if (StringUtils.isNotBlank(flag)) { 27 | model.addAttribute("loginMsg", "用户名或者密码错误"); 28 | } 29 | } 30 | 31 | return "login"; 32 | 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/resources/activiti.cfg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | context-path: /oa 3 | spring: 4 | mvc: 5 | view: 6 | prefix: /pages/ 7 | suffix: .jsp 8 | datasource: 9 | url: jdbc:mysql://localhost:3306/ACT 10 | username: root 11 | password: 123456 12 | driver-class-name: com.mysql.jdbc.Driver -------------------------------------------------------------------------------- /demo-act-boot/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=INFO, stdout 2 | 3 | # Console Appender 4 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 5 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 6 | log4j.appender.stdout.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n 7 | 8 | # Custom tweaks 9 | log4j.logger.com.codahale.metrics=WARN 10 | log4j.logger.com.ryantenney=WARN 11 | log4j.logger.com.zaxxer=WARN 12 | log4j.logger.org.apache=WARN 13 | log4j.logger.org.hibernate=WARN 14 | log4j.logger.org.hibernate.engine.internal=WARN 15 | log4j.logger.org.hibernate.validator=WARN 16 | log4j.logger.org.springframework=WARN 17 | log4j.logger.org.springframework.web=WARN 18 | log4j.logger.org.springframework.security=WARN -------------------------------------------------------------------------------- /demo-act-boot/src/main/resources/processes/vacation.bpmn: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 20 | 22 | 25 | 26 | 28 | 30 | 3} 32 | ]]> 33 | 34 | 36 | 37 | 38 | 40 | 42 | 44 | 45 | 47 | 49 | 50 | 52 | 54 | 55 | 57 | 59 | 60 | 62 | 64 | 65 | 67 | 69 | 70 | 72 | 73 | 74 | 75 | 77 | 78 | 79 | 80 | 82 | 83 | 84 | 85 | 86 | 88 | 89 | 90 | 91 | 93 | 94 | 95 | 96 | 97 | 99 | 100 | 101 | 102 | 103 | 104 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | login.jsp 6 | 7 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/commons/taglibs.jsp: -------------------------------------------------------------------------------- 1 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 2 | 3 | <%@ page isELIgnored="false" %> 4 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/css/jquery-ui.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.8.24 - 2012-09-28 2 | * https://github.com/jquery/jquery-ui 3 | * Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.tabs.css, jquery.ui.theme.css 4 | * Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ 5 | 6 | /* Layout helpers 7 | ----------------------------------*/ 8 | .ui-helper-hidden { display: none; } 9 | .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } 10 | .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } 11 | .ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } 12 | .ui-helper-clearfix:after { clear: both; } 13 | .ui-helper-clearfix { zoom: 1; } 14 | .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } 15 | 16 | 17 | /* Interaction Cues 18 | ----------------------------------*/ 19 | .ui-state-disabled { cursor: default !important; } 20 | 21 | 22 | /* Icons 23 | ----------------------------------*/ 24 | 25 | /* states and images */ 26 | .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } 27 | 28 | 29 | /* Misc visuals 30 | ----------------------------------*/ 31 | 32 | /* Overlays */ 33 | .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } 34 | 35 | /* IE/Win - Fix animation bug - #4615 */ 36 | .ui-accordion { width: 100%; } 37 | .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } 38 | .ui-accordion .ui-accordion-li-fix { display: inline; } 39 | .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } 40 | .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } 41 | .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } 42 | .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } 43 | .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } 44 | .ui-accordion .ui-accordion-content-active { display: block; } 45 | 46 | .ui-autocomplete { position: absolute; cursor: default; } 47 | 48 | /* workarounds */ 49 | * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ 50 | 51 | /* 52 | * jQuery UI Menu 1.8.24 53 | * 54 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 55 | * Dual licensed under the MIT or GPL Version 2 licenses. 56 | * http://jquery.org/license 57 | * 58 | * http://docs.jquery.com/UI/Menu#theming 59 | */ 60 | .ui-menu { 61 | list-style:none; 62 | padding: 2px; 63 | margin: 0; 64 | display:block; 65 | float: left; 66 | } 67 | .ui-menu .ui-menu { 68 | margin-top: -3px; 69 | } 70 | .ui-menu .ui-menu-item { 71 | margin:0; 72 | padding: 0; 73 | zoom: 1; 74 | float: left; 75 | clear: left; 76 | width: 100%; 77 | } 78 | .ui-menu .ui-menu-item a { 79 | text-decoration:none; 80 | display:block; 81 | padding:.2em .4em; 82 | line-height:1.5; 83 | zoom:1; 84 | } 85 | .ui-menu .ui-menu-item a.ui-state-hover, 86 | .ui-menu .ui-menu-item a.ui-state-active { 87 | font-weight: normal; 88 | margin: -1px; 89 | } 90 | 91 | .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ 92 | .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ 93 | button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ 94 | .ui-button-icons-only { width: 3.4em; } 95 | button.ui-button-icons-only { width: 3.7em; } 96 | 97 | /*button text element */ 98 | .ui-button .ui-button-text { display: block; line-height: 1.4; } 99 | .ui-button-text-only .ui-button-text { padding: .4em 1em; } 100 | .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } 101 | .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } 102 | .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } 103 | .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } 104 | /* no icon support for input elements, provide padding by default */ 105 | input.ui-button { padding: .4em 1em; } 106 | 107 | /*button icon element(s) */ 108 | .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } 109 | .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } 110 | .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } 111 | .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } 112 | .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } 113 | 114 | /*button sets*/ 115 | .ui-buttonset { margin-right: 7px; } 116 | .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } 117 | 118 | /* workarounds */ 119 | button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ 120 | 121 | .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } 122 | .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } 123 | .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } 124 | .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } 125 | .ui-datepicker .ui-datepicker-prev { left:2px; } 126 | .ui-datepicker .ui-datepicker-next { right:2px; } 127 | .ui-datepicker .ui-datepicker-prev-hover { left:1px; } 128 | .ui-datepicker .ui-datepicker-next-hover { right:1px; } 129 | .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } 130 | .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } 131 | .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } 132 | .ui-datepicker select.ui-datepicker-month-year {width: 100%;} 133 | .ui-datepicker select.ui-datepicker-month, 134 | .ui-datepicker select.ui-datepicker-year { width: 49%;} 135 | .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } 136 | .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } 137 | .ui-datepicker td { border: 0; padding: 1px; } 138 | .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } 139 | .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } 140 | .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } 141 | .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } 142 | 143 | /* with multiple calendars */ 144 | .ui-datepicker.ui-datepicker-multi { width:auto; } 145 | .ui-datepicker-multi .ui-datepicker-group { float:left; } 146 | .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } 147 | .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } 148 | .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } 149 | .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } 150 | .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } 151 | .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } 152 | .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } 153 | .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } 154 | 155 | /* RTL support */ 156 | .ui-datepicker-rtl { direction: rtl; } 157 | .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } 158 | .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } 159 | .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } 160 | .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } 161 | .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } 162 | .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } 163 | .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } 164 | .ui-datepicker-rtl .ui-datepicker-group { float:right; } 165 | .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 166 | .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 167 | 168 | /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ 169 | .ui-datepicker-cover { 170 | position: absolute; /*must have*/ 171 | z-index: -1; /*must have*/ 172 | filter: mask(); /*must have*/ 173 | top: -4px; /*must have*/ 174 | left: -4px; /*must have*/ 175 | width: 200px; /*must have*/ 176 | height: 200px; /*must have*/ 177 | } 178 | .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } 179 | .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } 180 | .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 181 | .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } 182 | .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } 183 | .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } 184 | .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } 185 | .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } 186 | .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } 187 | .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } 188 | .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } 189 | .ui-draggable .ui-dialog-titlebar { cursor: move; } 190 | 191 | .ui-progressbar { height:2em; text-align: left; overflow: hidden; } 192 | .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } 193 | .ui-resizable { position: relative;} 194 | .ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; } 195 | .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } 196 | .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } 197 | .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } 198 | .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } 199 | .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } 200 | .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } 201 | .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } 202 | .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } 203 | .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} 204 | .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } 205 | 206 | .ui-slider { position: relative; text-align: left; } 207 | .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } 208 | .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } 209 | 210 | .ui-slider-horizontal { height: .8em; } 211 | .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } 212 | .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } 213 | .ui-slider-horizontal .ui-slider-range-min { left: 0; } 214 | .ui-slider-horizontal .ui-slider-range-max { right: 0; } 215 | 216 | .ui-slider-vertical { width: .8em; height: 100px; } 217 | .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } 218 | .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } 219 | .ui-slider-vertical .ui-slider-range-min { bottom: 0; } 220 | .ui-slider-vertical .ui-slider-range-max { top: 0; } 221 | .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ 222 | .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } 223 | .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } 224 | .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } 225 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } 226 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } 227 | .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ 228 | .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } 229 | .ui-tabs .ui-tabs-hide { display: none !important; } 230 | 231 | /* Component containers 232 | ----------------------------------*/ 233 | .ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } 234 | .ui-widget .ui-widget { font-size: 1em; } 235 | .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } 236 | .ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } 237 | .ui-widget-content a { color: #222222/*{fcContent}*/; } 238 | .ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; } 239 | .ui-widget-header a { color: #222222/*{fcHeader}*/; } 240 | 241 | /* Interaction states 242 | ----------------------------------*/ 243 | .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; } 244 | .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; } 245 | .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; } 246 | .ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; } 247 | .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; } 248 | .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; } 249 | .ui-widget :active { outline: none; } 250 | 251 | /* Interaction Cues 252 | ----------------------------------*/ 253 | .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } 254 | .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } 255 | .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } 256 | .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; } 257 | .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } 258 | .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } 259 | .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } 260 | .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } 261 | 262 | /* Icons 263 | ----------------------------------*/ 264 | 265 | /* states and images */ 266 | .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } 267 | .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } 268 | .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; } 269 | .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } 270 | .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; } 271 | .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } 272 | .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } 273 | .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } 274 | 275 | /* positioning */ 276 | .ui-icon-carat-1-n { background-position: 0 0; } 277 | .ui-icon-carat-1-ne { background-position: -16px 0; } 278 | .ui-icon-carat-1-e { background-position: -32px 0; } 279 | .ui-icon-carat-1-se { background-position: -48px 0; } 280 | .ui-icon-carat-1-s { background-position: -64px 0; } 281 | .ui-icon-carat-1-sw { background-position: -80px 0; } 282 | .ui-icon-carat-1-w { background-position: -96px 0; } 283 | .ui-icon-carat-1-nw { background-position: -112px 0; } 284 | .ui-icon-carat-2-n-s { background-position: -128px 0; } 285 | .ui-icon-carat-2-e-w { background-position: -144px 0; } 286 | .ui-icon-triangle-1-n { background-position: 0 -16px; } 287 | .ui-icon-triangle-1-ne { background-position: -16px -16px; } 288 | .ui-icon-triangle-1-e { background-position: -32px -16px; } 289 | .ui-icon-triangle-1-se { background-position: -48px -16px; } 290 | .ui-icon-triangle-1-s { background-position: -64px -16px; } 291 | .ui-icon-triangle-1-sw { background-position: -80px -16px; } 292 | .ui-icon-triangle-1-w { background-position: -96px -16px; } 293 | .ui-icon-triangle-1-nw { background-position: -112px -16px; } 294 | .ui-icon-triangle-2-n-s { background-position: -128px -16px; } 295 | .ui-icon-triangle-2-e-w { background-position: -144px -16px; } 296 | .ui-icon-arrow-1-n { background-position: 0 -32px; } 297 | .ui-icon-arrow-1-ne { background-position: -16px -32px; } 298 | .ui-icon-arrow-1-e { background-position: -32px -32px; } 299 | .ui-icon-arrow-1-se { background-position: -48px -32px; } 300 | .ui-icon-arrow-1-s { background-position: -64px -32px; } 301 | .ui-icon-arrow-1-sw { background-position: -80px -32px; } 302 | .ui-icon-arrow-1-w { background-position: -96px -32px; } 303 | .ui-icon-arrow-1-nw { background-position: -112px -32px; } 304 | .ui-icon-arrow-2-n-s { background-position: -128px -32px; } 305 | .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } 306 | .ui-icon-arrow-2-e-w { background-position: -160px -32px; } 307 | .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } 308 | .ui-icon-arrowstop-1-n { background-position: -192px -32px; } 309 | .ui-icon-arrowstop-1-e { background-position: -208px -32px; } 310 | .ui-icon-arrowstop-1-s { background-position: -224px -32px; } 311 | .ui-icon-arrowstop-1-w { background-position: -240px -32px; } 312 | .ui-icon-arrowthick-1-n { background-position: 0 -48px; } 313 | .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } 314 | .ui-icon-arrowthick-1-e { background-position: -32px -48px; } 315 | .ui-icon-arrowthick-1-se { background-position: -48px -48px; } 316 | .ui-icon-arrowthick-1-s { background-position: -64px -48px; } 317 | .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } 318 | .ui-icon-arrowthick-1-w { background-position: -96px -48px; } 319 | .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } 320 | .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } 321 | .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } 322 | .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } 323 | .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } 324 | .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } 325 | .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } 326 | .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } 327 | .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } 328 | .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } 329 | .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } 330 | .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } 331 | .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } 332 | .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } 333 | .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } 334 | .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } 335 | .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } 336 | .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } 337 | .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } 338 | .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } 339 | .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } 340 | .ui-icon-arrow-4 { background-position: 0 -80px; } 341 | .ui-icon-arrow-4-diag { background-position: -16px -80px; } 342 | .ui-icon-extlink { background-position: -32px -80px; } 343 | .ui-icon-newwin { background-position: -48px -80px; } 344 | .ui-icon-refresh { background-position: -64px -80px; } 345 | .ui-icon-shuffle { background-position: -80px -80px; } 346 | .ui-icon-transfer-e-w { background-position: -96px -80px; } 347 | .ui-icon-transferthick-e-w { background-position: -112px -80px; } 348 | .ui-icon-folder-collapsed { background-position: 0 -96px; } 349 | .ui-icon-folder-open { background-position: -16px -96px; } 350 | .ui-icon-document { background-position: -32px -96px; } 351 | .ui-icon-document-b { background-position: -48px -96px; } 352 | .ui-icon-note { background-position: -64px -96px; } 353 | .ui-icon-mail-closed { background-position: -80px -96px; } 354 | .ui-icon-mail-open { background-position: -96px -96px; } 355 | .ui-icon-suitcase { background-position: -112px -96px; } 356 | .ui-icon-comment { background-position: -128px -96px; } 357 | .ui-icon-person { background-position: -144px -96px; } 358 | .ui-icon-print { background-position: -160px -96px; } 359 | .ui-icon-trash { background-position: -176px -96px; } 360 | .ui-icon-locked { background-position: -192px -96px; } 361 | .ui-icon-unlocked { background-position: -208px -96px; } 362 | .ui-icon-bookmark { background-position: -224px -96px; } 363 | .ui-icon-tag { background-position: -240px -96px; } 364 | .ui-icon-home { background-position: 0 -112px; } 365 | .ui-icon-flag { background-position: -16px -112px; } 366 | .ui-icon-calendar { background-position: -32px -112px; } 367 | .ui-icon-cart { background-position: -48px -112px; } 368 | .ui-icon-pencil { background-position: -64px -112px; } 369 | .ui-icon-clock { background-position: -80px -112px; } 370 | .ui-icon-disk { background-position: -96px -112px; } 371 | .ui-icon-calculator { background-position: -112px -112px; } 372 | .ui-icon-zoomin { background-position: -128px -112px; } 373 | .ui-icon-zoomout { background-position: -144px -112px; } 374 | .ui-icon-search { background-position: -160px -112px; } 375 | .ui-icon-wrench { background-position: -176px -112px; } 376 | .ui-icon-gear { background-position: -192px -112px; } 377 | .ui-icon-heart { background-position: -208px -112px; } 378 | .ui-icon-star { background-position: -224px -112px; } 379 | .ui-icon-link { background-position: -240px -112px; } 380 | .ui-icon-cancel { background-position: 0 -128px; } 381 | .ui-icon-plus { background-position: -16px -128px; } 382 | .ui-icon-plusthick { background-position: -32px -128px; } 383 | .ui-icon-minus { background-position: -48px -128px; } 384 | .ui-icon-minusthick { background-position: -64px -128px; } 385 | .ui-icon-close { background-position: -80px -128px; } 386 | .ui-icon-closethick { background-position: -96px -128px; } 387 | .ui-icon-key { background-position: -112px -128px; } 388 | .ui-icon-lightbulb { background-position: -128px -128px; } 389 | .ui-icon-scissors { background-position: -144px -128px; } 390 | .ui-icon-clipboard { background-position: -160px -128px; } 391 | .ui-icon-copy { background-position: -176px -128px; } 392 | .ui-icon-contact { background-position: -192px -128px; } 393 | .ui-icon-image { background-position: -208px -128px; } 394 | .ui-icon-video { background-position: -224px -128px; } 395 | .ui-icon-script { background-position: -240px -128px; } 396 | .ui-icon-alert { background-position: 0 -144px; } 397 | .ui-icon-info { background-position: -16px -144px; } 398 | .ui-icon-notice { background-position: -32px -144px; } 399 | .ui-icon-help { background-position: -48px -144px; } 400 | .ui-icon-check { background-position: -64px -144px; } 401 | .ui-icon-bullet { background-position: -80px -144px; } 402 | .ui-icon-radio-off { background-position: -96px -144px; } 403 | .ui-icon-radio-on { background-position: -112px -144px; } 404 | .ui-icon-pin-w { background-position: -128px -144px; } 405 | .ui-icon-pin-s { background-position: -144px -144px; } 406 | .ui-icon-play { background-position: 0 -160px; } 407 | .ui-icon-pause { background-position: -16px -160px; } 408 | .ui-icon-seek-next { background-position: -32px -160px; } 409 | .ui-icon-seek-prev { background-position: -48px -160px; } 410 | .ui-icon-seek-end { background-position: -64px -160px; } 411 | .ui-icon-seek-start { background-position: -80px -160px; } 412 | /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ 413 | .ui-icon-seek-first { background-position: -80px -160px; } 414 | .ui-icon-stop { background-position: -96px -160px; } 415 | .ui-icon-eject { background-position: -112px -160px; } 416 | .ui-icon-volume-off { background-position: -128px -160px; } 417 | .ui-icon-volume-on { background-position: -144px -160px; } 418 | .ui-icon-power { background-position: 0 -176px; } 419 | .ui-icon-signal-diag { background-position: -16px -176px; } 420 | .ui-icon-signal { background-position: -32px -176px; } 421 | .ui-icon-battery-0 { background-position: -48px -176px; } 422 | .ui-icon-battery-1 { background-position: -64px -176px; } 423 | .ui-icon-battery-2 { background-position: -80px -176px; } 424 | .ui-icon-battery-3 { background-position: -96px -176px; } 425 | .ui-icon-circle-plus { background-position: 0 -192px; } 426 | .ui-icon-circle-minus { background-position: -16px -192px; } 427 | .ui-icon-circle-close { background-position: -32px -192px; } 428 | .ui-icon-circle-triangle-e { background-position: -48px -192px; } 429 | .ui-icon-circle-triangle-s { background-position: -64px -192px; } 430 | .ui-icon-circle-triangle-w { background-position: -80px -192px; } 431 | .ui-icon-circle-triangle-n { background-position: -96px -192px; } 432 | .ui-icon-circle-arrow-e { background-position: -112px -192px; } 433 | .ui-icon-circle-arrow-s { background-position: -128px -192px; } 434 | .ui-icon-circle-arrow-w { background-position: -144px -192px; } 435 | .ui-icon-circle-arrow-n { background-position: -160px -192px; } 436 | .ui-icon-circle-zoomin { background-position: -176px -192px; } 437 | .ui-icon-circle-zoomout { background-position: -192px -192px; } 438 | .ui-icon-circle-check { background-position: -208px -192px; } 439 | .ui-icon-circlesmall-plus { background-position: 0 -208px; } 440 | .ui-icon-circlesmall-minus { background-position: -16px -208px; } 441 | .ui-icon-circlesmall-close { background-position: -32px -208px; } 442 | .ui-icon-squaresmall-plus { background-position: -48px -208px; } 443 | .ui-icon-squaresmall-minus { background-position: -64px -208px; } 444 | .ui-icon-squaresmall-close { background-position: -80px -208px; } 445 | .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } 446 | .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } 447 | .ui-icon-grip-solid-vertical { background-position: -32px -224px; } 448 | .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } 449 | .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } 450 | .ui-icon-grip-diagonal-se { background-position: -80px -224px; } 451 | 452 | 453 | /* Misc visuals 454 | ----------------------------------*/ 455 | 456 | /* Corner radius */ 457 | .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; } 458 | .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } 459 | .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } 460 | .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } 461 | 462 | /* Overlays */ 463 | .ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } 464 | .ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; } -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/css/main.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | body{width:98%;background:url(../images/main_bg.gif) repeat-x fixed;} 4 | 5 | /* where begin */ 6 | .where{height:30px;} 7 | .where ul{} 8 | .where ul li{line-height:30px;float:left;padding-left:15px;color:#333;background:url(../images/icon_arrow8.gif) 5px 10px no-repeat;>background:url(../images/icon_arrow8.gif) 5px 9px no-repeat;} 9 | .where ul li.font{background:none;padding-left:0px;} 10 | /* where end */ 11 | 12 | 13 | /* fun_area begin */ 14 | .fun_area{padding:10px;margin-bottom:10px;color:#454545;border:1px #cceff5 solid;;background:#fafcfd;text-align:left;} 15 | 16 | .fun_area2{padding:5px 10px;margin:10px 0;margin-bottom:10px;color:#454545;border:1px #cae3ff solid;;background:#f4f9ff;text-align:left;} 17 | /* fun_area end */ 18 | 19 | 20 | /* img begin */ 21 | 22 | .img1{border:2px #ddd solid;} 23 | .img2{border:2px #d10c0c solid;} 24 | 25 | /* img end */ 26 | 27 | /* res begin */ 28 | 29 | table.tableHue1{border-collapse:collapse;border:1px #a4d5e3 solid;} 30 | table.tableHue1 td{height:30px;>height:20px;padding:5px;color:#333;} 31 | table.tableHue1 thead td{background:#e2f3fa;} 32 | table.tableHue1 td.title1{background:#e2f3fa;} 33 | table.tableHue1 td.left{text-align:left;} 34 | table.tableHue1 td.right{text-align:right;} 35 | table.tableHue1 tr.over td{background:#f1fafe;} 36 | 37 | 38 | table.tableHue2{border-collapse:collapse;border:1px #dddddd solid;} 39 | table.tableHue2 td{height:30px;>height:20px;padding:5px;color:#333;} 40 | table.tableHue2 thead td{background:#f6f6f6;} 41 | table.tableHue2 td.title1{text-align:right;background:#f6f6f6;color:#454545;} 42 | table.tableHue2 td.left{text-align:left;} 43 | table.tableHue2 td.right{text-align:right;} 44 | 45 | .currency_area{margin-bottom:10px;} 46 | .currency_area .the_title{overflow:hidden;zoom:1;} 47 | .currency_area .the_title h5{display:inline;float:left;} 48 | .currency_area .the_title span{display:inline;float:right;} 49 | .currency_area .the_content{_height:0;} 50 | 51 | .hue9 .the_title{border-bottom:1px #e5e5e5 solid;} 52 | .hue9 .the_content{padding:8px;} 53 | 54 | .hue13 .the_title{height:30px;border:1px #bed8e1 solid;border-bottom:0;background:#e8f1f6;} 55 | .hue13 .the_content{border:1px #bed8e1 solid;border-top:0;padding:10px;} 56 | 57 | .currency_area .T4 h5{line-height:40px;margin-left:8px;color:#023a69;font-size:14px;} 58 | .currency_area .T12 h5{line-height:30px;padding-left:20px;font-size:12px;color:#3b5998;background:url(../images/icon_arrow9.gif) 10px 11px no-repeat;} 59 | .currency_area .T10 h5{line-height:30px;padding-left:24px;background:url(../images/icon_arrow3.gif) 0 6px no-repeat;font-size:13px;} 60 | 61 | /* turn_page begin */ 62 | .turn_page{padding:10px;text-align:right;line-height:180%;color:#454545;} 63 | .turn_page a:link,.turn_page a:visited{color:#125f99;} 64 | .turn_page a:hover{color:#197cce;} 65 | /* turn_page end */ 66 | 67 | 68 | /* form begin */ 69 | .input_text1{width:200px;height:15px;padding:2px;} 70 | .input_text2{height:15px;padding:2px;} 71 | .input_textarea1{padding:2px;} 72 | .input_file1{height:21px;padding:2px;} 73 | 74 | .input_button1{border:0;width:121px;height:29px;cursor:pointer;background:url(../images/button1.gif);color:#fff;font-weight:bold;font-size:14px;} 75 | .input_button2{border:0;width:43px;height:20px;cursor:pointer;background:url(../images/button2.gif);color:#333;} 76 | .input_button3{border:0;width:50px;height:23px;line-height:23px;cursor:pointer;background:url(../images/button3.gif);color:#555;font-size:12px;} 77 | .input_button4{border:0;width:90px;height:23px;line-height:23px;cursor:pointer;background:url(../images/button4.gif);color:#555;font-size:12px;} 78 | /* form end */ 79 | 80 | /* sort_switch begin */ 81 | .sort_switch{position:relative;height:28px;background:url(../images/sort_switch_bg.gif) repeat-x;margin-bottom:10px;} 82 | .sort_switch div.right_wrap{position:absolute;top:6px;right:5px;} 83 | 84 | .sort_switch ul{margin-left:5px;} 85 | .sort_switch ul li{float:left;font-size:12px;font-weight:bold;margin-top:1px;margin-right:10px;background:#cfe6ee;border:1px #9a9899 solid;cursor:pointer;} 86 | .sort_switch ul li a:link,.sort_switch ul li a:visited{display:block;padding:0 20px;line-height:25px;color:#00436f;blr:expression(this.onFocus=this.blur())} 87 | .sort_switch ul li :focus{outline:none;} 88 | .sort_switch ul li a:hover{text-decoration:none;color:#197cce;} 89 | .sort_switch ul li.selected{border:0;margin-top:0px;background:url(../images/sort_switch_on_l.gif) left top no-repeat;} 90 | .sort_switch ul li.selected a:link,.sort_switch ul li.selected a:visited{display:block;padding:0 30px;line-height:28px;background:url(../images/sort_switch_on_r.gif) right top no-repeat;color:#cc6633;} 91 | .sort_switch ul li.selected a:hover{text-decoration:none;color:#cc6633;} 92 | 93 | .sort_content{margin-bottom:20px;} 94 | /* sort_switch end */ 95 | 96 | 97 | /* res end */ 98 | 99 | 100 | 101 | /* main begin -----------------------------------------------------*/ 102 | #main{padding:13px 20px;position:relative;} 103 | 104 | 105 | /* main end -----------------------------------------------------*/ 106 | 107 | 108 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/css/nav.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | body{background:#eaf0f0 url(../images/admin_content_bg.gif) repeat-x;} 4 | 5 | 6 | /* nav begin */ 7 | .admin_memu{padding:11px 0;} 8 | 9 | #nav{margin:0 9px;} 10 | #nav li{margin-bottom:10px;} 11 | #nav li a.parent:link,#nav li a.parent:visited{display:block;line-height:22px;height:22px;border:1px #b6bdd0 solid;padding:2px;color:#fff;text-decoration:none;text-align:left;} 12 | #nav li a h5{font-size:14px;padding-left:12px;background:url(../images/admin_menu_parent_bg.gif) repeat-x;} 13 | 14 | #nav li ul.child_area li{margin-bottom:0px;border:1px #b6bdd0 solid;border-top:0;} 15 | #nav li ul.child_area li h6{text-align:left;padding-left:30px;font-size:12px;background:url(../images/icon_arrow29.gif) 13px 6px no-repeat;} 16 | #nav li ul.child_area li.last h6{text-align:left;padding-left:30px;font-size:12px;background:url(../images/icon_arrow30.gif) 13px 5px no-repeat;} 17 | #nav li ul.child_area li a:link,#nav li ul.child_area li a:visited{display:block;line-height:25px;width:100%;color:#454545;} 18 | #nav li ul.child_area li a:hover{color:#197cce;background:#fff;text-decoration:none;} 19 | 20 | #nav li ul.child_area li ul li{border:0;} 21 | #nav li ul.child_area li ul li h4{text-align:left;padding-left:42px;font-size:12px;background:url(../images/icon_arrow17.gif) 30px 9px no-repeat;} 22 | /* nav end */ 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/css/style.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | *{margin:0;padding:0;} 4 | 5 | body{ 6 | font-size:12px; 7 | font-family:arial; 8 | color:#000; 9 | background:#fff; 10 | text-align:center; 11 | } 12 | 13 | body,table,td,div,p,dt,dd{word-wrap:break-word;word-break:break-all;word-break/* */:normal ;} 14 | 15 | select,input,textarea{font-family:arial;font-size:12px;vertical-align:middle;} 16 | h1,h2,h3,h4,h5,h6{font-size:11px;font-weight:normal;} 17 | ul{list-style:none;} 18 | img{border:0px;} 19 | em{font-style:normal;} 20 | 21 | 22 | /* link */ 23 | a:link{color:#023a69;text-decoration:none;} 24 | a:visited{color:#023a69;text-decoration:none;} 25 | a:hover{color:#197cce;text-decoration:underline;} 26 | a:active{color:#023a69;} 27 | 28 | 29 | /* color */ 30 | .red,a.red:link,a.red:visited{color:#ff0000;} 31 | .red2,a.red2:link,a.red2:visited{color:#d10c0c;} 32 | 33 | .orange,a.orange:link,a.orange:visited{color:#d36702;} 34 | .orange2,a.orange2:link,a.orange2:visited{color:#ff4e00;} 35 | .orange3,a.orange3:link,a.orange3:visited{color:#9b692e;} 36 | 37 | .blue,a.blue:link,a.blue:visited{color:#3F79FF;} 38 | .blue2,a.blue2:link,a.blue2:visited{color:#197cce;} 39 | .blue3,a.blue3:link,a.blue3:visited{color:#125f99;} 40 | .blue4,a.blue4:link,a.blue4:visited{color:#023a69;} 41 | .blue5,a.blue5:link,a.blue5:visited{color:#003399;} 42 | 43 | .gray,a.gray:link,a.gray:visited{color:#333;} 44 | .gray2,a.gray2:link,a.gray2:visited{color:#454545;} 45 | .gray3,a.gray3:link,a.gray3:visited{color:#666;} 46 | .gray4,a.gray4:link,a.gray4:visited{color:#888;} 47 | 48 | .white,a.white:link,a.white:visited{color:#fff;} 49 | 50 | .black,a.black:link,a.black:visited{color:#000;} 51 | 52 | .gold,a.gold:link,a.gold:visited{color:#C77D00;} 53 | 54 | .yellow,a.yellow:link,a.yellow:visited{color:#ffcc00;} 55 | 56 | .purple,a.purple:link,a.purple:visited{color:#768699;} 57 | 58 | .green,a.green:link,a.green:visited{color:#669900;} 59 | .green2,a.green2:link,a.green2:visited{color:#224202;} 60 | 61 | 62 | /* font */ 63 | .fB{font-weight:bold;} 64 | .fN{font-style:normal;} 65 | .fI{font-style:italic;} 66 | .f10{font-size:10px;} 67 | .f11{font-size:11px;} 68 | .f12{font-size:12px;} 69 | .f13{font-size:13px;} 70 | .f14{font-size:14px;} 71 | .f16{font-size:16px;} 72 | .f20{font-size:20px;} 73 | 74 | /* other */ 75 | .float_l{float:left;} 76 | .float_r{float:right;} 77 | .hackbox{clear:both;} 78 | .hidden{display:none;} 79 | .show{display:block} 80 | .underline,a.underline:link,a.underline:visited{text-decoration:underline;} 81 | .mb10{margin-bottom:15px;} 82 | .mb5{margin-bottom:5px;} 83 | 84 | 85 | 86 | /* line-height begin */ 87 | .lh1{line-height:140%} 88 | .lh2{line-height:160%} 89 | .lh3{line-height:180%} 90 | .lh4{line-height:200%} 91 | .lh5{line-height:220%} 92 | /* line-height end */ 93 | 94 | 95 | /* img-wrap begin */ 96 | a.head_img:link img,a.head_img:visited img{border:2px #fff solid;} 97 | a.head_img:hover img{border:2px #d6e7ee solid;} 98 | 99 | a.head_img2:link img,a.head_img2:visited img{border:2px #d6e7ee solid;} 100 | a.head_img2:hover img{border:2px #b3d1dd solid;} 101 | /* img-wrap end */ -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/css/top.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | 4 | body{background:url(../images/header_bg.gif) center top no-repeat;} 5 | 6 | 7 | 8 | /* header begin ------------------------------------------------------*/ 9 | #header{position:relative;height:69px;} 10 | #header .logo{position:absolute;top:15px;left:10px;width:232px;height:43px;text-align:left;background:url(/images/admin_logo_bg.gif) no-repeat;} 11 | 12 | #header .admin_nav{position:absolute;top:42px;left:335px;width:680px;height:35px;} 13 | #header .admin_nav ul{overflow:hidden;} 14 | #header .admin_nav ul li{float:left;border-left:1px #fff solid;margin-left:-1px;padding:0 15px;} 15 | #header .admin_nav ul li a:link,#header .admin_nav ul li a:visited{color:#f1f1f1;} 16 | #header .admin_nav ul li a:hover{color:#fff;} 17 | 18 | 19 | #header .welcome{position:absolute;top:18px;left:350px;width:300px;height:30px;text-align:left;color:#fff;} 20 | /* header end ------------------------------------------------------*/ 21 | 22 | 23 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/css/turn_page1.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | 4 | /* turn_page begin */ 5 | .turn_page{background:#;margin:10px 0;padding:5px;font-size:12px;overflow:hidden;zoom:1;} 6 | 7 | .turn_page ul li{float:left;display:inline;border:1px #ddd solid;line-height:22px;font-family:Verdana;text-align:center;} 8 | .turn_page ul li.page{padding:0 5px;background:#d9e6f0;color:#000080;margin-right:2px;} 9 | .turn_page ul li.goto{border:0;margin-left:2px;} 10 | .turn_page ul li.goto input.number{border:1px #ddd solid;width:30px;height:16px;padding:3px;margin-bottom:1px;>margin-top:-1px;} 11 | .turn_page ul li.goto input.page_button{border:0;width:28px;height:24px;cursor:pointer;background:url(../image/page_button.gif);color:#fff;font-weight:bold;margin-bottom:1px;>margin-bottom:2px;} 12 | 13 | .turn_page a:link,.turn_page a:visited{display:block;line-height:22px;width:23px;color:#023a69;} 14 | .turn_page a:hover{background:#f4f7fa;text-decoration:none;} 15 | 16 | .turn_page a.on:link,.turn_page a.on:visited{font-weight:bold;color:#000;font-size:14px;background:#e5ecf2;} 17 | .turn_page a.on:hover{} 18 | 19 | .turn_page a.previous:link,.turn_page a.previous:visited{padding:0 3px 0 18px;width:55px;background:url(../images/icon_previous.gif) 3px 4px no-repeat;} 20 | .turn_page a.previous:hover{text-decoration:underline;} 21 | 22 | .turn_page a.next:link,.turn_page a.next:visited{padding:0 16px 0 3px;width:55px;background:url(../images/icon_next2.gif) 56px 4px no-repeat;} 23 | .turn_page a.next:hover{text-decoration:underline;} 24 | /* turn_page end */ 25 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/admin_content_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/admin_content_bg.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/admin_footer_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/admin_footer_bg.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/admin_menu_parent_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/admin_menu_parent_bg.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/admin_nav_l.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/admin_nav_l.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/admin_nav_on_l.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/admin_nav_on_l.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/admin_nav_on_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/admin_nav_on_r.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/admin_nav_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/admin_nav_r.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/ajax_waiting.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/ajax_waiting.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/ajax_waiting2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/ajax_waiting2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/alt_star.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/alt_star.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/button1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/button1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/button2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/button2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/button3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/button3.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/button4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/button4.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/check_error.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/check_error.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/check_error2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/check_error2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/check_right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/check_right.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/content_bg1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/content_bg1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/content_bg1_l.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/content_bg1_l.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/content_bg1_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/content_bg1_r.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/content_bottom_bg1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/content_bottom_bg1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/gray_line1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/gray_line1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/gray_line2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/gray_line2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/gray_line3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/gray_line3.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/header_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/header_bg.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/ico_contact.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/ico_contact.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/ico_money.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/ico_money.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/ico_notice.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/ico_notice.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_angle1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_angle1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow10.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow11.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow12.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow13.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow14.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow15.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow16.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow17.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow18.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow19.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow20.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow21.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow22.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow23.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow24.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow25.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow26.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow27.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow29.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow3.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow30.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow4.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow5.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow6.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow7.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow8.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_arrow9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_arrow9.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_clip_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_clip_1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_clip_2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_clip_2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_clip_3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_clip_3.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_clip_none.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_clip_none.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_close.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_close.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_close2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_close2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_comma.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_comma.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_edit.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_edit.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_excl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_excl.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_fav.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_fav.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_hand.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_hand.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_hand2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_hand2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_loading.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_minus1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_minus1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_msg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_msg.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_msg2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_msg2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_must.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_must.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_negative.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_negative.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_neutral.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_neutral.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_next.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_next.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_next2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_next2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_offline.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_offline.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_online.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_online.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_online_none.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_online_none.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_plus1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_plus1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_plus2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_plus2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_plus3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_plus3.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_positive.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_positive.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_previous.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_previous.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_price.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_price.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_report.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_report.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/icon_s_assistant.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/icon_s_assistant.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/input_button1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/input_button1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/input_button2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/input_button2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/input_button3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/input_button3.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/input_button4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/input_button4.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/input_button5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/input_button5.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/list1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/list1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/list2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/list2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/list3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/list3.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/list4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/list4.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/list5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/list5.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/list6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/list6.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/list7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/list7.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/list8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/list8.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/logo.jpg -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/main_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/main_bg.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/manage_content_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/manage_content_bg.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/noface_150.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/noface_150.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/noface_40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/noface_40.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/noface_80.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/noface_80.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/or_star_0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/or_star_0.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/or_star_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/or_star_1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/or_star_2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/or_star_2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/or_star_3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/or_star_3.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/or_star_4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/or_star_4.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/or_star_5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/or_star_5.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/page_button.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/page_button.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/page_button2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/page_button2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/page_button3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/page_button3.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/person_id.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/person_id.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/res_info_title_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/res_info_title_bg.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/s_fy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/s_fy.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/s_guide.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/s_guide.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/s_swzl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/s_swzl.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/sort_switch_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/sort_switch_bg.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/sort_switch_on_l.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/sort_switch_on_l.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/sort_switch_on_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/sort_switch_on_r.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/title_bg1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/title_bg1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/title_bg2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/title_bg2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/title_bg3_l.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/title_bg3_l.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/title_bg3_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/title_bg3_r.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/title_bg4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/title_bg4.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/title_bg5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/title_bg5.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/title_bg6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/title_bg6.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/title_bg7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/title_bg7.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/xing1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/xing1.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/xing2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/xing2.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/xing3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/xing3.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/xing4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/xing4.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/images/xing5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyb-geek/demo-act-boot/9938bc5e4a7ec1218e318e76521c802e90627328/demo-act-boot/src/main/webapp/images/xing5.gif -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/pages/login.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 | <%@ include file="/commons/taglibs.jsp"%> 3 | 4 | 5 | 6 | 7 | 登录 8 | 9 | 10 | 11 | 12 | 13 | 50 | 51 | 52 | 53 | 54 | 55 |
56 |
57 |
58 |
59 |

欢迎使用OA系统

60 |
61 | 62 |
63 | ${loginMsg} 64 |
65 |
66 | 用户名: 67 | 68 | 69 |
70 |
71 | 密码: 72 | 73 |
74 | 75 |
76 | 77 | 78 |
79 |
80 |
81 |
82 | 83 |
84 | 85 | 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/pages/main.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 | <%@ include file="/commons/taglibs.jsp"%> 3 | 4 | 5 | 6 | 7 | OA系统 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | <body> 18 | </body> 19 | 20 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/pages/nav.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 | <%@ include file="/commons/taglibs.jsp"%> 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | 19 |
20 | 29 |
30 | 31 | 32 | 48 | 49 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/pages/top.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 | <%@ include file="/commons/taglibs.jsp"%> 3 | 4 | 5 | 6 | 7 | top 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/pages/vac/list.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 | <%@ include file="/commons/taglibs.jsp"%> 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 |
20 | 23 |
24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
填写时间请假天数事由流程图
${pi.date}${pi.days}${pi.reason}流程图
46 |
47 | 48 | 49 |
50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/pages/vac/vacation.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 | <%@ include file="/commons/taglibs.jsp"%> 3 | 4 | 5 | 6 | 7 | 网站后台管理 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |
21 | 22 |
23 |
    24 |
25 |
26 | 27 |
28 | 31 |
32 | 33 |
34 | 35 |
36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 49 | 50 | 51 |
请假天数:
原因: 47 | 48 |
52 | 53 |
54 |
55 | 56 |
57 | 58 |
59 |
60 |
61 | 62 | 63 | 64 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /demo-act-boot/src/main/webapp/pages/welcome.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 | <%@ include file="/commons/taglibs.jsp"%> 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 |

欢迎使用OA系统

19 | <%-- 流程图 --%> 20 | 21 |
22 | 23 | 24 | 25 | --------------------------------------------------------------------------------