项目中,申请者申请某些事项以后,常常需要在申请列表中查看当前申请的记录所在的审批状态,动态美观的显示状态可以使UI更符合客户要求,比如下面这样。
以Goods__c表为例,申请者申请的一些采购以前需要得到批准,申请者列表需要显示所有的申请记录,状态(Status__c)有以下情况:
直线经理审批;
部门经理审批;
总经理审批;
审批通过。
实现上述方式主要实现思路:首先通过css画出来审批的步骤图,没有到达的灰色显示,经过或者正在步骤绿色显示,比如当前步骤为部门经理审批,则直线经理审批和部门经理审批节点为绿色,总经理审批和审批通过节点为灰色。然后通过jquery对'查看'设置onmouseenter以及onmouseleave事件,当onmouseenter时,显示状态的div,当onmouseleave时,移出状态的div。
代码如下:
1.Controller代码:初始化数据
1 public without sharing class GoodsShowStatusController {
2
3 public List<Goods__c> goodsList{get;set;}
4
5 public GoodsShowStatusController() {
6 initData();
7 }
8
9 public void initData() {
10 goodsList = [select Id,GoodsName__c,GoodsPrice__c,Status__c from Goods__c limit 10];
11 }
12 }
2.VF代码:显示数据并且通过jquery和css实现效果
1 <apex:page controller="GoodsShowStatusController">
2
3 <style type="text/css">
4 .steps {
5 position: relative;
6 margin-bottom: 30px;
7 counter-reset: step;
8 }
9
10 .steps li {
11 list-style-type: none;
12 font-size: 12px;
13 text-align: center;
14 width: 15%;
15 position: relative;
16 float: left;
17 }
18
19
20 .steps li:before {
21 display: block;
22 content: counter(step);
23 counter-increment: step;
24 width: 32px;
25 height: 32px;
26 background-color: #019875;
27 line-height: 32px;
28 border-radius: 32px;
29 font-size: 16px;
30 color: #fff;
31 text-align: center;
32 font-weight: 700;
33 margin: 0 auto 8px auto;
34 }
35
36
37 .steps li ~ li:after {
38 content: '';
39 width: 100%;
40 height: 2px;
41 background-color: #019875;
42 position: absolute;
43 left: -50%;
44 top: 15px;
45 z-index: -1;
46 }
47
48
49 .steps li.active:after {
50 background-color: green;
51 }
52
53
54 .steps li.active ~ li:before,.steps li.active ~ li:after {
55 background-color: gray;
56 }
57
58 .goodsStatusShow {
59 line-height: 18px;
60 position: relative;
61 }
62
63 .goodsStatusShow div {
64 display: none;
65 position: absolute;
66 left: 0px;
67 top: 0px;
68 z-index: 1000;
69 }
70
71 .goodsStatusShowDetail {
72 width: 800px;
73 border: 1px #C3A459 solid;
74 background-color: #FFFEED;
75 padding: 5px
76 }
77 </style>
78
79 <apex:includeScript value="{!$Resource.JQuery2}" />
80 <script type="text/javascript">
81 $(function(){
82 $('.goodsStatusShow').mouseenter(function(){
83 $(this).find('div').slideDown("fast");
84 });
85 $('.goodsStatusShow').mouseleave(function(){
86 $(this).find('div').slideUp("fast");
87 });
88 });
89 </script>
90 <apex:pageBlock >
91 <apex:pageBlockTable value="{!goodsList}" var="goods">
92 <apex:column headervalue="流程图查看">
93 <apex:facet name="header">当前步骤测试样例</apex:facet>
94 <div class="goodsStatusShow">
95 查看
96 <div class="goodsStatusShowDetail">
97 <ul class="steps">
98 <li class="{!IF(goods.Status__c == '直线经理审批','active','')}">直线经理审批</li>
99 <li class="{!IF(goods.Status__c == '部门经理审批','active','')}">部门经理审批</li>
100 <li class="{!IF(goods.Status__c == '总经理审批','active','')}">总经理审批</li>
101 <li class="{!IF(goods.Status__c == '审批通过','active','')}">审批通过</li>
102 </ul>
103 </div>
104 </div>
105 </apex:column>
106 <apex:column headervalue="商品名称">
107 <apex:outputField value="{!goods.GoodsName__c}" />
108 </apex:column>
109 <apex:column headervalue="商品价格">
110 <apex:outputField value="{!goods.GoodsPrice__c}" />
111 </apex:column>
112 <apex:column headervalue="商品所处审批流程">
113 <apex:outputField value="{!goods.Status__c}" />
114 </apex:column>
115 </apex:pageBlockTable>
116 </apex:pageBlock>
117 </apex:page>
效果展示:
1.流程为部门经理审批的效果图显示
2.流程为总经理审批的效果图显示
总结:此篇主要在业务上描述如何实现更好的UI效果,主要用到的技术其实是css和jquery的居多,篇中显示样式在baidu上copy一些,有需要的可以在此基础上进行更改,有问题的地方欢迎指正,有问题的欢迎留言。