信呼OA版本v2.3.8
This commit is contained in:
56
webmain/main/flowtotal/flowtotalAction.php
Normal file
56
webmain/main/flowtotal/flowtotalAction.php
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
class flowtotalClassAction extends Action
|
||||
{
|
||||
public function flowtotalbefore($table)
|
||||
{
|
||||
return array(
|
||||
'where' => ' and 1=2'
|
||||
);
|
||||
}
|
||||
|
||||
public function flowtotalafter($table,$rows)
|
||||
{
|
||||
|
||||
$barr['rows'] = $rows;
|
||||
if($this->loadci==1)$barr['modearr'] = m('mode')->getmodearr('and `id` in(select `mid` from `[Q]flow_element` where `istj`=1)');
|
||||
$modeid = (int)$this->post('modeid');
|
||||
if($modeid>0){
|
||||
$flnum = m('flow_set')->getmou('num', $modeid);
|
||||
$rows = m('flow')->initflow($flnum)->flowtotal();
|
||||
$barr['rows'] = $rows;
|
||||
}
|
||||
return $barr;
|
||||
}
|
||||
|
||||
public function changefieldsAjax()
|
||||
{
|
||||
$modeid = (int)$this->get('modeid');
|
||||
$rows = m('flow_element')->getall('mid='.$modeid.' and `istj`=1','`fields`,`name`,`fieldstype`','`sort`');
|
||||
$fset = m('flow_set')->getone($modeid);
|
||||
$farr = array();
|
||||
if(arrvalue($fset,'isflow')>0){
|
||||
$farr[]= array(
|
||||
'name' => '申请人',
|
||||
'fields' => 'b.`uname`',
|
||||
);
|
||||
$farr[]= array(
|
||||
'name' => '申请人部门',
|
||||
'fields' => 'b.`udeptname`',
|
||||
);
|
||||
}
|
||||
foreach($rows as $k=>$rs){
|
||||
$rows[$k]['name'] = ''.$rs['name'].'('.$rs['fields'].')';
|
||||
$rows[$k]['names'] = $rs['name'];
|
||||
$rows[$k]['fields'] = '[A]`'.$rs['fields'].'`';
|
||||
$rows[$k]['fieldss'] = $rs['fields'];
|
||||
$farr[] = $rows[$k];
|
||||
}
|
||||
|
||||
$fwhee = m('flow_where')->getall('`setid`='.$modeid.' and `status`=1 and `num` is not null','`num`,`name`','`pnum`,`sort`');
|
||||
|
||||
echo json_encode(array(
|
||||
'farr' => $farr,
|
||||
'fwhe' => $fwhee
|
||||
));
|
||||
}
|
||||
}
|
||||
210
webmain/main/flowtotal/rock_flowtotal.php
Normal file
210
webmain/main/flowtotal/rock_flowtotal.php
Normal file
@@ -0,0 +1,210 @@
|
||||
<?php if(!defined('HOST'))die('not access');?>
|
||||
<script >
|
||||
$(document).ready(function(){
|
||||
var myChart = false;
|
||||
var a = $('#viewshow_{rand}').bootstable({
|
||||
tablename:'todo',modedir:'flowtotal:main',storebeforeaction:'flowtotalbefore',storeafteraction:'flowtotalafter',
|
||||
columns:[{
|
||||
text:'名称',dataIndex:'name'
|
||||
},{
|
||||
text:'数值',dataIndex:'value'
|
||||
},{
|
||||
text:'比例',dataIndex:'bili'
|
||||
}],
|
||||
load:function(a){
|
||||
if(a.modearr){
|
||||
var s = '<option value="0">-选择模块-</option>',len=a.modearr.length,i,csd,types='';
|
||||
for(i=0;i<len;i++){
|
||||
csd = a.modearr[i];
|
||||
if(types!=csd.type){
|
||||
if(types!='')s+='</optgroup>';
|
||||
s+='<optgroup label="'+csd.type+'">';
|
||||
}
|
||||
s+='<option value="'+csd.id+'">'+csd.name+'</option>';
|
||||
types = csd.type;
|
||||
}
|
||||
$('#mode_{rand}').html(s);
|
||||
}else{
|
||||
c.loadcharts();
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
var c={
|
||||
search:function(o1,lx){
|
||||
var d = {
|
||||
'modeid' : get('mode_{rand}').value,
|
||||
'total_fields' : get('fields_{rand}').value,
|
||||
'total_type' : get('type_{rand}').value,
|
||||
'atype' : get('where_{rand}').value
|
||||
};
|
||||
if(d.modeid=='0'){js.msg('msg','请选择模块');return;}
|
||||
if(d.total_fields==''){js.msg('msg','请选择统计字段');return;}
|
||||
if(d.total_type==''){js.msg('msg','请选择统计类型');return;}
|
||||
if(d.atype==''){js.msg('msg','请选择统计条件,统计条件在[流程模块条件]下添加');return;}
|
||||
if(lx==1)return d;
|
||||
a.setparams(d,true);
|
||||
},
|
||||
createdzd:function(o1){
|
||||
var d1 = this.search(o1,1);
|
||||
if(typeof(d1)!='object')return;
|
||||
var o1 = get('fields_{rand}'),o2=get('type_{rand}');
|
||||
var ss = o1.options[o1.selectedIndex].text;
|
||||
d1.title = '按'+ss+'的'+o2.options[o2.selectedIndex].text+'';
|
||||
var url = 'main,flowtotal,view';
|
||||
var str1= '';
|
||||
for(var i1 in d1)str1+=','+i1+':"'+d1[i1]+'"';
|
||||
str1 = jm.base64encode('{'+str1.substr(1)+'}');
|
||||
url+=',paramsstr='+str1+'';
|
||||
addtabs({url:url,name:d1.title,num:'tongjiji'+js.getrand()+'',icons:'bar-chart'});
|
||||
},
|
||||
loadcharts:function(){
|
||||
var rows = a.getData('rows'),i,len=rows.length,v;
|
||||
var xAxis=[],data=[];
|
||||
for(i=0;i<len;i++){
|
||||
if(rows[i].name!='合计'){
|
||||
xAxis.push(rows[i].name);
|
||||
v = rows[i].value;if(v=='')v=0;
|
||||
data.push({value:parseFloat(v),name:rows[i].name});
|
||||
}
|
||||
}
|
||||
var o1 = get('fields_{rand}'),o2=get('type_{rand}');
|
||||
if(!myChart)myChart = echarts.init(get('main_show{rand}'));
|
||||
var ss = o1.options[o1.selectedIndex].text;
|
||||
var tlx= get('chattype_{rand}').value;
|
||||
var option = {
|
||||
title: {
|
||||
text: '按'+ss+'的'+o2.options[o2.selectedIndex].text+'',
|
||||
left: 'center'
|
||||
},
|
||||
tooltip : {
|
||||
trigger: 'item',
|
||||
formatter: "{b} : {c} ({d}%)"
|
||||
},
|
||||
series: [{
|
||||
name: '数值',
|
||||
type: tlx,
|
||||
data: data
|
||||
}]
|
||||
};
|
||||
if(tlx!='pie'){
|
||||
option.xAxis={data: xAxis};
|
||||
option.yAxis={type : 'value'};
|
||||
}
|
||||
myChart.setOption(option);
|
||||
},
|
||||
daochu:function(){
|
||||
var o1 = get('fields_{rand}'),o2=get('type_{rand}');
|
||||
var ss = o1.options[o1.selectedIndex].text;
|
||||
a.exceldown(''+ss+'的'+o2.options[o2.selectedIndex].text+'');
|
||||
},
|
||||
changemode:function(){
|
||||
var mid=this.value;
|
||||
get('fields_{rand}').length = 1;
|
||||
get('type_{rand}').length = 2;
|
||||
get('where_{rand}').length = 1;
|
||||
if(mid==0){
|
||||
|
||||
}else{
|
||||
c.changefields(mid);
|
||||
}
|
||||
},
|
||||
changefields:function(mid){
|
||||
js.ajax(js.getajaxurl('changefields','{mode}','{dir}'),{modeid:mid},function(ret){
|
||||
c.changefieldss(ret);
|
||||
},'get,json');
|
||||
},
|
||||
changefieldss:function(ds){
|
||||
var ret = ds.farr;
|
||||
var d = [],d2=[],i,len=ret.length,lx,fid,fids;
|
||||
var fids = ',applydt,optdt,dt,adddt,createdt,startdt,enddt,';
|
||||
for(i=0;i<len;i++){
|
||||
lx = ret[i].fieldstype;
|
||||
fid= ret[i].fields;
|
||||
fids= ret[i].fieldss;
|
||||
if(lx=='number' || fids=='money'){
|
||||
d2.push({
|
||||
'name' : ret[i].names+'(合计)',
|
||||
'fields' : 'sum|'+fids
|
||||
});
|
||||
d2.push({
|
||||
'name' : ret[i].names+'(平均值)',
|
||||
'fields' : 'avg|'+fids
|
||||
});
|
||||
}else{
|
||||
d.push({
|
||||
'name' : ret[i].name,
|
||||
'fields' : fid,
|
||||
});
|
||||
if(lx=='date' || lx=='datetime' || fid.indexOf('dt`')>-1){
|
||||
d.push({
|
||||
'name' : ret[i].names+'('+fids+',按月)',
|
||||
'fields' : 'left('+fid+',7)'
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
js.setselectdata(get('fields_{rand}'),d,'fields');
|
||||
js.setselectdata(get('type_{rand}'),d2,'fields');
|
||||
js.setselectdata(get('where_{rand}'),ds.fwhe,'num');
|
||||
}
|
||||
}
|
||||
$('#mode_{rand}').change(c.changemode);
|
||||
js.initbtn(c);
|
||||
$('#main_show{rand}').css('height',''+(viewheight-110)+'px');
|
||||
});
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td align="left">
|
||||
<select style="width:180px" id="mode_{rand}" class="form-control" ><option value="0">-选择模块-</option></select>
|
||||
</td>
|
||||
<td nowrap style="padding-left:10px">
|
||||
根据
|
||||
</td>
|
||||
<td >
|
||||
<select style="width:150px" id="fields_{rand}" class="form-control" ><option value="">-统计字段-</option></select>
|
||||
</td>
|
||||
<td nowrap style="padding-left:10px">
|
||||
的
|
||||
</td>
|
||||
<td >
|
||||
<select style="width:130px" id="type_{rand}" class="form-control" ><option value="">-统计类型-</option><option selected value="jls">记录数</option></select>
|
||||
</td>
|
||||
<td style="padding-left:10px">
|
||||
<select style="width:130px" id="where_{rand}" class="form-control" ><option value="">-统计条件-</option></select>
|
||||
</td>
|
||||
<td style="padding-left:10px">
|
||||
<select style="width:80px" id="chattype_{rand}" class="form-control" ><option value="pie">饼图</option><option value="line">线图</option><option value="bar">柱状图</option></select>
|
||||
</td>
|
||||
<td style="padding-left:10px">
|
||||
<button class="btn btn-default" click="search" type="button">来统计</button>
|
||||
</td>
|
||||
<td style="padding-left:10px">
|
||||
<button class="btn btn-default" click="createdzd" type="button">生成菜单URL</button>
|
||||
</td>
|
||||
<td width="90%">
|
||||
|
||||
</td>
|
||||
<td align="right" nowrap>
|
||||
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
<div class="blank10"></div>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td width="80%">
|
||||
<div id="main_show{rand}" style="width:100%;height:480px"></div>
|
||||
</td>
|
||||
<td>
|
||||
<div style="width:350px" id="viewshow_{rand}"></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="tishi">此功能只其他基本的统计,更强大更多功能需要自己开发,模块列表需要在表单元素管理下开启有统计字段。</div>
|
||||
116
webmain/main/flowtotal/rock_flowtotal_view.php
Normal file
116
webmain/main/flowtotal/rock_flowtotal_view.php
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php if(!defined('HOST'))die('not access');?>
|
||||
<script >
|
||||
$(document).ready(function(){
|
||||
{params}
|
||||
var params = js.decode(jm.base64decode(params.paramsstr));
|
||||
var myChart = false;
|
||||
var dccc = {
|
||||
'modeid' : params.modeid,
|
||||
'total_fields' : params.total_fields,
|
||||
'total_type' : params.total_type,
|
||||
'atype' : params.atype
|
||||
};
|
||||
var a = $('#viewshow_{rand}').bootstable({
|
||||
tablename:'todo',modedir:'flowtotal:main',storebeforeaction:'flowtotalbefore',storeafteraction:'flowtotalafter',
|
||||
params:dccc,
|
||||
columns:[{
|
||||
text:'名称',dataIndex:'name'
|
||||
},{
|
||||
text:'数值',dataIndex:'value'
|
||||
},{
|
||||
text:'比例',dataIndex:'bili'
|
||||
}],
|
||||
load:function(a){
|
||||
c.loadcharts();
|
||||
}
|
||||
});
|
||||
|
||||
var c={
|
||||
search:function(o1,lx){
|
||||
var d = {
|
||||
|
||||
};
|
||||
a.setparams(d,true);
|
||||
},
|
||||
|
||||
loadcharts:function(){
|
||||
var rows = a.getData('rows'),i,len=rows.length,v;
|
||||
var xAxis=[],data=[];
|
||||
for(i=0;i<len;i++){
|
||||
if(rows[i].name!='合计'){
|
||||
xAxis.push(rows[i].name);
|
||||
v = rows[i].value;if(v=='')v=0;
|
||||
data.push({value:parseFloat(v),name:rows[i].name});
|
||||
}
|
||||
}
|
||||
|
||||
if(!myChart)myChart = echarts.init(get('main_show{rand}'));
|
||||
var tlx= get('chattype_{rand}').value;
|
||||
var option = {
|
||||
title: {
|
||||
text: params.title,
|
||||
left: 'center'
|
||||
},
|
||||
tooltip : {
|
||||
trigger: 'item',
|
||||
formatter: "{b} : {c} ({d}%)"
|
||||
},
|
||||
series: [{
|
||||
name: '数值',
|
||||
type: tlx,
|
||||
data: data
|
||||
}]
|
||||
};
|
||||
if(tlx!='pie'){
|
||||
option.xAxis={data: xAxis};
|
||||
option.yAxis={type : 'value'};
|
||||
}
|
||||
myChart.setOption(option);
|
||||
},
|
||||
daochu:function(){
|
||||
|
||||
a.exceldown(params.title);
|
||||
}
|
||||
}
|
||||
|
||||
js.initbtn(c);
|
||||
$('#main_show{rand}').css('height',''+(viewheight-110)+'px');
|
||||
});
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td align="left">
|
||||
|
||||
</td>
|
||||
<td style="padding-left:10px">
|
||||
<select style="width:100px" id="chattype_{rand}" class="form-control" ><option value="pie">饼图</option><option value="line">线图</option><option value="bar">柱状图</option></select>
|
||||
</td>
|
||||
<td style="padding-left:10px">
|
||||
<button class="btn btn-default" click="search,0" type="button">重新统计</button>
|
||||
</td>
|
||||
<td style="padding-left:10px">
|
||||
|
||||
</td>
|
||||
<td width="90%">
|
||||
|
||||
</td>
|
||||
<td align="right" nowrap>
|
||||
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
<div class="blank10"></div>
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td width="80%">
|
||||
<div id="main_show{rand}" style="width:100%;height:480px"></div>
|
||||
</td>
|
||||
<td>
|
||||
<div style="width:350px" id="viewshow_{rand}"></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
Reference in New Issue
Block a user