信呼OA版本v2.3.8

This commit is contained in:
雨中磐石
2022-08-14 16:47:40 +08:00
parent 4640677d27
commit e3fcd913e3
1405 changed files with 133635 additions and 73 deletions

View File

@@ -0,0 +1,15 @@
<?php
class assetmClassAction extends Action
{
public function printewmAction()
{
$sid = c('check')->onlynumber($this->get('sid'));
$rows= m('assetm')->getall('id in('.$sid.')');
foreach($rows as $k=>$rs){
$rows[$k]['url'] = $this->jm->base64encode('task.php?a=x&num=assetm&mid='.$rs['id'].'');
}
$this->title = '固定资产二维码打印';
$this->assign('rows', $rows);
}
}

View File

@@ -0,0 +1,115 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var modenum='assetm';
var a = $('#view_{rand}').bootstable({
tablename:modenum,celleditor:true,autoLoad:false,modenum:modenum,fanye:true,
checked:true,
columns:[{
text:'资产名称',dataIndex:'title',editor:false,align:'left'
},{
text:'编号',dataIndex:'num'
},{
text:'操作时间',dataIndex:'optdt'
},{
text:'状态',dataIndex:'state'
},{
text:'品牌',dataIndex:'brand'
},{
text:'所在位置',dataIndex:'address'
},{
text:'使用者',dataIndex:'usename'
},{
text:'',dataIndex:'caozuo'
}],
itemdblclick:function(d){
openxiangs(d.title,modenum, d.id);
}
});
var c = {
del:function(){
a.del();
},
daochu:function(o1){
publicdaochuobj({
'objtable':a,
'modename':'固定资产',
'modenum':modenum,
'btnobj':o1
});
},
adds:function(){
openinput('固定资产',modenum);
},
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s},true);
},
daoru:function(){
managelistassetm = a;
addtabs({num:'daoruassetm',url:'flow,input,daoru,modenum=assetm',icons:'plus',name:'导入固定资产'});
},
prinwem:function(){
var sid = a.getchecked();
if(sid==''){
js.msg('msg','没有选中记录');
return;
}
var url = '?a=printewm&m=assetm&d=main&sid='+sid+'';
window.open(url);
},
mobj:a,
title:'资产分类',
stable:'assetm',
optionview:'optionview_{rand}',
optionnum:'assetstype',
rand:'{rand}'
};
var c = new optionclass(c);
js.initbtn(c);
});
</script>
<table width="100%">
<tr valign="top">
<td>
<div style="border:1px #cccccc solid;width:220px">
<div id="optionview_{rand}" style="height:400px;overflow:auto;"></div>
</div>
</td>
<td width="10" nowrap>&nbsp;</td>
<td width="95%">
<div>
<table width="100%"><tr>
<td align="left" nowrap>
<button class="btn btn-primary" click="adds" type="button"><i class="icon-plus"></i> 新增</button>&nbsp;
<button class="btn btn-default" click="allshow" type="button">所有资产</button>&nbsp;
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:200px" id="key_{rand}" placeholder="资产名称/编号/使用人">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="90%">
&nbsp;&nbsp;<span id="megss{rand}"></span>
</td>
<td align="right" nowrap>
<button class="btn btn-default" click="prinwem" type="button">打印二维码</button>&nbsp;
<button class="btn btn-default" click="daoru" type="button">导入资产</button>&nbsp;
<button class="btn btn-default" click="daochu" type="button">导出 <i class="icon-angle-down"></i></button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
</td>
</tr>
</table>

View File

@@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?=$da['title']?></title>
<link rel="stylesheet" type="text/css" href="webmain/css/webmain.css"/>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/js.js"></script>
<script src="js/rmb.js"></script>
<script type="text/javascript">
function prints(o1){
$(o1).remove();
window.print();
}
function initbody(){
}
</script>
<style>
.borderdd td,.borderdd th{ height:30px;text-align:center;padding:0px 10px;font-size:12px;border:1px #000000 dashed;padding:10px 0px}
</style>
</head>
<body>
<style>
</style>
<div align="center" style="padding:10px 0px">
<div style="width:700px">
<table class="borderdd" width="100%" style="border-color:#000000;border-collapse: collapse;" border="0" >
<tr>
<?php
$oi = 0;
foreach($rows as $k=>$rs){
$oi++;
echo '<td width="20%"><div><img src="api.php?m=login&a=ewm&url='.$rs['url'].'" width="100px" height="100px"></div><div>'.$rs['num'].'</div></td>';
if($oi%5==0)echo '</tr><tr>';
}
?>
</td>
</table>
<div align="left"><a href="javascript:;" class="blue" onclick="prints(this)">[打印]</a>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,5 @@
<?php
class bookClassAction extends Action
{
}

View File

@@ -0,0 +1,95 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var modenum='bookborrow';
var a = $('#view_{rand}').bootstable({
tablename:modenum,celleditor:true,fanye:true,modenum:modenum,statuschange:false,
columns:[{
text:'借阅',dataIndex:'bookname'
},{
text:'借阅日期',dataIndex:'jydt',sortable:true
},{
text:'预计归还',dataIndex:'yjdt'
},{
text:'是否归返',dataIndex:'isgh',sortable:true
},{
text:'归还时间',dataIndex:'ghtime'
},{
text:'借阅人',dataIndex:'optname'
},{
text:'操作时间',dataIndex:'optdt'
},{
text:'申请日期',dataIndex:'applydt',sortable:true
},{
text:'状态',dataIndex:'statustext'
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
}
});
function btn(bo){
get('xiang_{rand}').disabled = bo;
}
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({
'key':s,
'dt':get('dt1_{rand}').value
},true);
},
daochu:function(){
a.exceldown();
},
view:function(){
var d=a.changedata;
openxiangs('图书借阅',modenum,d.id);
},
clickwin:function(){
openinput('图书借阅',modenum);
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td style="padding-right:10px">
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增</button>
</td>
<td nowrap>
<div style="width:150px" class="input-group">
<input placeholder="借阅日期" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" onclick="return js.selectdate(this,'dt1_{rand}')" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:200px" id="key_{rand}" placeholder="借阅/书名">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td style="padding-left:10px" width="90%">
</td>
<td align="right" nowrap>
<button class="btn btn-default" id="xiang_{rand}" click="view" disabled type="button">详情</button> &nbsp;
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,110 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var modenum = 'book';
var a = $('#view_{rand}').bootstable({
tablename:modenum,celleditor:true,autoLoad:false,modenum:modenum,
columns:[{
text:'书名',dataIndex:'title',editor:false,align:'left'
},{
text:'编号',dataIndex:'num'
},{
text:'作者',dataIndex:'author'
},{
text:'出版社',dataIndex:'chuban'
},{
text:'出版日期',dataIndex:'cbdt'
},{
text:'数量',dataIndex:'shul'
},{
text:'存放位置',dataIndex:'weizhi'
},{
text:'操作时间',dataIndex:'optdt'
},{
text:'',notexcel:true,dataIndex:'opt',renderer:function(v,d,oi){
return '<a href="javascript:;" onclick="openxiangs(\'图书\',\''+modenum+'\','+d.id+')">查看</a>';
}
}],
itemclick:function(){
get('del_{rand}').disabled=false;
},
beforeload:function(){
get('del_{rand}').disabled=true;
}
});
var c = {
del:function(){
a.del();
},
adds:function(){
openinput('图书',modenum);
},
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s},true);
},
daochu:function(){
a.exceldown();
},
daoru:function(){
managelistbook = a;
addtabs({num:'daorubook',url:'flow,input,daoru,modenum=book',icons:'plus',name:'导入图书'});
},
mobj:a,
title:'图书分类',
stable:'book',
optionview:'optionview_{rand}',
optionnum:'booktype',
rand:'{rand}'
};
var c = new optionclass(c);
js.initbtn(c);
});
</script>
<table width="100%">
<tr valign="top">
<td>
<div style="border:1px #cccccc solid;width:220px">
<div id="optionview_{rand}" style="height:400px;overflow:auto;"></div>
</div>
</td>
<td width="10" nowrap>&nbsp;</td>
<td width="95%">
<div>
<table width="100%"><tr>
<td align="left" nowrap>
<button class="btn btn-primary" click="adds" type="button"><i class="icon-plus"></i> 新增</button>&nbsp;
<button class="btn btn-default" click="allshow" type="button">所有图书</button>&nbsp;
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:180px" id="key_{rand}" placeholder="书名/作者">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="90%">
&nbsp;&nbsp;<span id="megss{rand}"></span>
</td>
<td nowrap align="right">
<button class="btn btn-default" click="daoru" type="button">导入图书</button>&nbsp;
<button class="btn btn-default" click="daochu" type="button">导出</button>&nbsp;
<button class="btn btn-danger" id="del_{rand}" disabled click="del" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
</td>
</tr>
</table>

View File

@@ -0,0 +1,66 @@
<?php
class carmClassAction extends Action
{
public function carmuserbefore($table)
{
return array(
'where' => 'and status=1 and ispublic=1',
'fields' => 'id,carnum,cartype'
);
}
public function carmuserafter($table, $rows)
{
$dtobj = c('date');
$startdt = $this->post('startdt', $this->date);
$enddt = $this->post('enddt');
if($enddt=='')$enddt = $dtobj->adddate($startdt,'d',7);
$jg = $dtobj->datediff('d',$startdt, $enddt);
if($jg>10)$jg = 10;
$data = m('carmrese')->getall("`status` in(0,1) and `isturn`=1 and `startdt`<='$enddt 23:59:59' and `enddt`>='$startdt' order by `startdt` asc",'`usename`,`status`,`startdt`,`enddt`,`carid`');
foreach($data as $k=>$rs){
$dts1 = substr($rs['startdt'],0,10);
$dts2 = substr($rs['enddt'],0,10);
$jg1 = $dtobj->datediff('d',$dts1, $dts2);
$dtsa = '';
for($i=0; $i<=$jg1; $i++){
if($i>0)$dts1 = $dtobj->adddate($dts1,'d',1);
$dtsa.='['.$dts1.']';
}
$data[$k]['dtlist'] = $dtsa;
$stz = '<font color=blue>待审核</font>';
if($rs['status']==1)$stz = '<font color=green>已审核</font>';
$str =''.$rs['usename'].'使用('.$stz.'):'.substr($rs['startdt'],5,11).'→'.substr($rs['enddt'],5,11).'';
$data[$k]['str'] = $str;
}
$columns = array();
$dt = $startdt;
for($i=0; $i<=$jg; $i++){
if($i>0)$dt = $dtobj->adddate($dt,'d',1);
$key = 'dt'.$i.'';
foreach($rows as $k1=>$rs1){
$str = '';
foreach($data as $k=>$rs){
if(contain($rs['dtlist'],'['.$dt.']') && $rs1['id']==$rs['carid']){
$str.=''.$rs['str'].'<br>';
}
}
$rows[$k1][$key] = $str;
}
$week = $dtobj->cnweek($dt);
$sstr = substr($dt,5).'('.$week.')';
$columns[] = $sstr;
}
$arr['rows'] = $rows;
$arr['columns'] = $columns;
$arr['startdt'] = $startdt;
$arr['enddt'] = $enddt;
return $arr;
}
}

View File

@@ -0,0 +1,82 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var columns = [{
text:'类型',dataIndex:'cartype'
},{
text:'车牌号',dataIndex:'carnum'
}];
var a = $('#view_{rand}').bootstable({
tablename:'carm',fanye:false,modedir:'{mode}:{dir}',storebeforeaction:'carmuserbefore',storeafteraction:'carmuserafter',
columns:columns,
loadbefore:function(d){
get('dt1_{rand}').value=d.startdt;
get('dt2_{rand}').value=d.enddt;
c.setcolumns(d.columns);
}
});
var c = {
search:function(){
a.setparams({
'startdt':get('dt1_{rand}').value,
'enddt':get('dt2_{rand}').value
},true);
},
daochu:function(o1){
publicdaochuobj({
'objtable':a,
'modename':'车辆预定情况',
'btnobj':o1
});
},
setcolumns:function(d){
var col=[],i,len=d.length;
for(i=0;i<columns.length;i++)col.push(columns[i]);
for(i=0;i<len;i++){
col.push({text:d[i],dataIndex:'dt'+i+''});
}
a.setColumns(col);
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td nowrap>日期&nbsp;</td>
<td nowrap>
<div style="width:140px" class="input-group">
<input placeholder="" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" onclick="return js.selectdate(this,'dt1_{rand}')" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td nowrap>&nbsp;至&nbsp;</td>
<td nowrap>
<div style="width:140px" class="input-group">
<input placeholder="" readonly class="form-control" id="dt2_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" onclick="return js.selectdate(this,'dt2_{rand}')" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td style="padding-left:10px" width="90%">
</td>
<td align="right" nowrap>
<button class="btn btn-default" click="daochu,1" type="button">导出 <i class="icon-angle-down"></i></button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,102 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var modenum='carmrese';
var a = $('#view_{rand}').bootstable({
tablename:'carmrese',celleditor:true,fanye:true,modenum:modenum,statuschange:false,
columns:[{
text:'使用车辆',dataIndex:'carnum'
},{
text:'申请日期',dataIndex:'applydt',sortable:true
},{
text:'使用者',dataIndex:'usename'
},{
text:'使用时间',dataIndex:'startdt',sortable:true
},{
text:'截止时间',dataIndex:'enddt'
},{
text:'目的地',dataIndex:'address'
},{
text:'驾驶员',dataIndex:'jianame'
},{
text:'起始公里',dataIndex:'kmstart'
},{
text:'起始公里',dataIndex:'kmend'
},{
text:'归还时间',dataIndex:'returndt'
},{
text:'申请人',dataIndex:'optname'
},{
text:'操作时间',dataIndex:'optdt'
},{
text:'状态',dataIndex:'statustext'
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
}
});
function btn(bo){
get('xiang_{rand}').disabled = bo;
}
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({
'key':s,
'dt':get('dt1_{rand}').value
},true);
},
daochu:function(){
a.exceldown();
},
view:function(){
var d=a.changedata;
openxiangs('车辆预定',modenum,d.id);
},
clickwin:function(){
openinput('车辆预定',modenum);
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td style="padding-right:10px">
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增</button>
</td>
<td nowrap>
<div style="width:150px" class="input-group">
<input placeholder="使用/申请日期" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" onclick="return js.selectdate(this,'dt1_{rand}')" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:200px" id="key_{rand}" placeholder="车牌/使用者/申请人">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td style="padding-left:10px" width="90%">
</td>
<td align="right" nowrap>
<button class="btn btn-default" id="xiang_{rand}" click="view" disabled type="button">详情</button> &nbsp;
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,79 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var modenum='carm';
var a = $('#view_{rand}').bootstable({
tablename:modenum,celleditor:true,modenum:modenum,fanye:true,
columns:[{
text:'',dataIndex:'caozuo'
},{
text:'车牌号',dataIndex:'carnum'
},{
text:'车辆品牌',dataIndex:'carbrand'
},{
text:'型号',dataIndex:'carmode'
},{
text:'车辆类型',dataIndex:'cartype'
},{
text:'购买日期',dataIndex:'buydt',sortable:true
},{
text:'状态',dataIndex:'state'
},{
text:'公开',dataIndex:'ispublic'
},{
text:'强险到期',dataIndex:'qxenddt',sortable:true
},{
text:'行驶证到期',dataIndex:'xszenddt',sortable:true
},{
text:'商业险到期',dataIndex:'syxenddt',sortable:true
},{
text:'年审截到期',dataIndex:'nsenddt',sortable:true
}]
});
var c = {
reload:function(){
at.reload();
},
del:function(){
a.del();
},
daochu:function(){
a.exceldown();
},
adds:function(){
openinput('车辆管理',modenum);
},
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s},true);
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td align="left" nowrap>
<button class="btn btn-primary" click="adds" type="button"><i class="icon-plus"></i> 新增</button>&nbsp;
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:200px" id="key_{rand}" placeholder="车牌号">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="90%">
</td>
<td align="right">
<button class="btn btn-default" click="daochu" type="button">导出</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,135 @@
<?php
class customerClassAction extends Action
{
public function custtotalbefore($table)
{
$where = '';
$uid = $this->adminid;
$lx = $this->post('atype');
$month = $this->month = $this->post('month',date('Y-m'));
$key = $this->post('key');
if($lx=='my'){
$where=' and `id`='.$uid.'';
}
if($lx=='down'){
$s = m('admin')->getdownwheres('id', $uid, 0);
$where =' and ('.$s.' or `id`='.$uid.')';
}
if($lx!='my' && $lx!='down'){
$where = m('admin')->getcompanywhere(5);
}
if($key!=''){
$where .= m('admin')->getkeywhere($key);
}
return array(
'fields'=> 'id,name,deptname',
'where' => $where,
);
}
public function custtotalafter($table,$rows)
{
$crm = m('crm');
foreach($rows as $k=>$rs){
$rows[$k]['month'] = $this->month;
$toarr = $crm->moneytotal($rs['id'], $this->month);
foreach($toarr as $f=>$v){
if($v==0)$v='';
$rows[$k][$f] = $v;
}
}
return array(
'rows' => $rows
);
}
public function custtotalgebefore($table)
{
return 'and 1=2';
}
public function custtotalgeafter($t, $rows)
{
$rows = array();
$crm = m('crm');
$dtobj = c('date');
$uid = $this->post('uid', $this->adminid);
$urs = m('admin')->getone($uid, 'name,deptname');
$start = $this->post('startdt', date('Y-01'));
$end = $this->post('enddt', date('Y-m'));
$jgm = $dtobj->datediff('m', $start.'-01', $end.'-01');
for($i=0; $i<=$jgm; $i++){
$month = $dtobj->adddate($end.'-01', 'm', 0-$i, 'Y-m');
$arr['month'] = $month;
$arr['name'] = $urs['name'];
$arr['deptname']= $urs['deptname'];
$toarr = $crm->moneytotal($uid, $month);
foreach($toarr as $f=>$v){
if($v==0)$v='';
$arr[$f] = $v;
}
$rows[] = $arr;
}
$barr['rows'] = $rows;
$barr['totalCount'] = count($rows);
return $barr;
}
//客户转移
public function movecustAjax()
{
$sid = c('check')->onlynumber($this->post('sid'));
$toid = (int)$this->post('toid');
if($sid==''||$sid=='')return;
m('crm')->movetouser($this->adminid, $sid, $toid);
}
public function retotalAjax()
{
m('crm')->custtotal();
}
//批量添加客户
public function addplcustAjax()
{
$rows = c('html')->importdata('type,name,unitname,laiyuan,linkname,tel,mobile,email,address','type,name');
$oi = 0;
$db = m('customer');
foreach($rows as $k=>$rs){
$rs['adddt'] = $this->now;
$rs['optdt'] = $this->now;
$rs['status'] = 1;
$rs['uid'] = $this->adminid;
$rs['createid'] = $this->adminid;
$rs['optname'] = $this->adminname;
$rs['createname'] = $this->adminname;
$db->insert($rs);
$oi++;
}
backmsg('','成功导入'.$oi.'条数据');
}
//分配客户
public function distcustAjax()
{
$sid = c('check')->onlynumber($this->post('sid','0'));
$sname = $this->post('sname');
$snid = $this->post('snid');
$lx = $this->post('lx');
$uarr['uid'] = 0;
if($lx==1 && $snid!='' && $sname!=''){
$uarr['uid'] = $snid;
$uarr['suoname'] = $sname;
$uarr['isgh'] = '0';
m('crm')->update($uarr, "`id` in($sid)");
}
if($lx==0){
m('crm')->update($uarr, "`id` in($sid)");
}
echo 'ok';
}
}

View File

@@ -0,0 +1,90 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var atype=params.atype;
var a = $('#view_{rand}').bootstable({
tablename:'customer',fanye:true,modenum:'customer',params:{'atype':atype},
columns:[{
text:'类型',dataIndex:'type'
},{
text:'名称',dataIndex:'name'
},{
text:'单位名称',dataIndex:'unitname'
},{
text:'拥有者',dataIndex:'optname'
},{
text:'合同数',dataIndex:'htshu',sortable:true
},{
text:'销售总额',dataIndex:'moneyz',sortable:true
},{
text:'待收金额',dataIndex:'moneyd',sortable:true
},{
text:'创建时间',dataIndex:'adddt',sortable:true
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
}
});
function btn(bo){
get('xiang_{rand}').disabled = bo;
}
var c = {
reload:function(){
a.reload();
},
view:function(){
var d=a.changedata;
openxiangs('客户','customer',d.id);
},
daochu:function(){
a.exceldown();
},
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s},true);
},
retotal:function(){
js.ajax(js.getajaxurl('retotal','{mode}','{dir}'),{},function(s){
a.reload();
},'get',false,'统计中...,统计完成')
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td>
<input class="form-control" style="width:180px" id="key_{rand}" placeholder="名称/拥有者">
</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="retotal" type="button">重新统计</button>
</td>
<td width="90%" style="padding-left:10px">
</td>
<td align="right" nowrap>
<button class="btn btn-default" id="xiang_{rand}" click="view" disabled type="button">详情</button> &nbsp;
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">统计并不是实时统计,数据有偏差?请点[重新统计]按钮。销售总额是从收款单上统计。</div>

View File

@@ -0,0 +1,169 @@
<?php defined('HOST') or die('not access');?>
<script >
$(document).ready(function(){
var obj=[];
obj[0] = $('#view0_{rand}').bootstable({
tablename:'custsale',params:{'atype':'mygx'},fanye:false,modenum:'custsale',modename:'销售机会',limit:5,moreurl:'flow,page,custsale,atype=mygx',morenum:'num110',
columns:[{
text:'客户',dataIndex:'custname',align:'left'
},{
text:'来源',dataIndex:'laiyuan'
},{
text:'状态',dataIndex:'state'
},{
text:'金额',dataIndex:'money'
},{
text:'说明',dataIndex:'explain',align:'left'
}],
itemdblclick:function(d){
openxiangs(this.modename,this.modenum,d.id);
}
});
obj[1] = $('#view1_{rand}').bootstable({
tablename:'custract',params:{'atype':'my'},fanye:false,modenum:'custract',modename:'合同',limit:5,moreurl:'flow,page,custract,atype=my',morenum:'num108',
columns:[{
text:'合同编号',dataIndex:'num'
},{
text:'客户',dataIndex:'custname',align:'left'
},{
text:'签约日期',dataIndex:'signdt',sortable:true
},{
text:'合同金额',dataIndex:'money',sortable:true
},{
text:'待收付款',dataIndex:'moneys',sortable:true
},{
text:'状态',dataIndex:'statetext'
}],
itemdblclick:function(d){
openxiangs(this.modename,this.modenum,d.id);
}
});
obj[2] = $('#view2_{rand}').bootstable({
tablename:'custfina',params:{'atype':'myskdws'},modenum:'custfina',modename:'收款单',limit:5,moreurl:'flow,page,custfina,atype=myskdws',morenum:'num106',
columns:[{
text:'所属日期',dataIndex:'dt'
},{
text:'合同编号',dataIndex:'htnum'
},{
text:'客户',dataIndex:'custname',align:'left'
},{
text:'金额',dataIndex:'money',sortable:true
},{
text:'状态',dataIndex:'ispay'
}],
itemdblclick:function(d){
openxiangs(this.modename,this.modenum,d.id);
}
});
obj[3] = $('#view3_{rand}').bootstable({
tablename:'custfina',params:{'atype':'myfkdwf'},modenum:'custfina',modename:'付款单',limit:5,moreurl:'flow,page,custfina,atype=myfkdwf,pnum=fkd',morenum:'num107',
columns:[{
text:'所属日期',dataIndex:'dt'
},{
text:'合同编号',dataIndex:'htnum'
},{
text:'客户',dataIndex:'custname',align:'left'
},{
text:'金额',dataIndex:'money',sortable:true
},{
text:'状态',dataIndex:'ispay'
}],
itemdblclick:function(d){
openxiangs(this.modename,this.modenum,d.id);
}
});
obj[4] = $('#view4_{rand}').bootstable({
tablename:'goodm',params:{'atype':'my'},modenum:'custxiao',modename:'销售单',limit:5,moreurl:'flow,page,custxiao,atype=my',morenum:'num300',statuschange:false,
columns:[{
text:'销售日期',dataIndex:'applydt'
},{
text:'销售单号',dataIndex:'num'
},{
text:'客户',dataIndex:'custname',align:'left'
},{
text:'金额',dataIndex:'money',sortable:true
},{
text:'状态',dataIndex:'statustext'
}],
itemdblclick:function(d){
openxiangs(this.modename,this.modenum,d.id);
}
});
var c = {
reload:function(o1,lx){
obj[lx].reload();
},
more:function(o1,lx){
var d = obj[lx].options;
addtabs({num:d.morenum,name:'我的'+d.modename+'',url:d.moreurl});
}
}
js.initbtn(c);
});
</script>
<div align="left" style="padding:10px">
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr valign="top">
<td width="50%">
<div align="left" style="min-width:300px" class="list-group">
<div class="list-group-item list-group-item-info">
<i class="icon-flag"></i> 需跟踪销售机会
<span style="float:right" ><a click="reload,0"><i class="icon-refresh"></i></a>&nbsp;<a click="more,0">更多&gt;&gt;</a></span>
</div>
<div id="view0_{rand}"></div>
</div>
<div align="left" class="list-group">
<div class="list-group-item list-group-item-success">
<i class="icon-flag"></i> 合同
<span style="float:right" ><a click="reload,1"><i class="icon-refresh"></i></a>&nbsp;<a click="more,1">更多&gt;&gt;</a></span>
</div>
<div id="view1_{rand}"></div>
</div>
</td>
<td style="padding-left:20px;">
<div align="left" class="list-group">
<div class="list-group-item list-group-item-info">
<i class="icon-money"></i> 销售单
<span style="float:right" ><a click="reload,4"><i class="icon-refresh"></i></a>&nbsp;<a click="more,4">更多&gt;&gt;</a></span>
</div>
<div id="view4_{rand}"></div>
</div>
<div align="left" class="list-group">
<div class="list-group-item list-group-item-success">
<i class="icon-money"></i> 待收款单
<span style="float:right" ><a click="reload,2"><i class="icon-refresh"></i></a>&nbsp;<a click="more,2">更多&gt;&gt;</a></span>
</div>
<div id="view2_{rand}"></div>
</div>
<div align="left" class="list-group">
<div class="list-group-item list-group-item-danger">
<i class="icon-money"></i> 待付款单
<span style="float:right" ><a click="reload,3"><i class="icon-refresh"></i></a>&nbsp;<a click="more,3">更多&gt;&gt;</a></span>
</div>
<div id="view3_{rand}"></div>
</div>
</td>
</tr>
</table>
<div class="tishi">双击对应记录可查看详情!</div>
</div>

View File

@@ -0,0 +1,142 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var atype=params.atype,month=js.now('Y-m');
var a = $('#view_{rand}').bootstable({
tablename:'admin',params:{'atype':atype,'month':month},fanye:atype=='all',
modedir:'{mode}:{dir}',storeafteraction:'custtotalafter',storebeforeaction:'custtotalbefore',
columns:[{
text:'部门',dataIndex:'deptname'
},{
text:'姓名',dataIndex:'name'
},{
text:'月份',dataIndex:'month'
},{
text:'待收金额',dataIndex:'shou_moneyd'
},{
text:'已收金额',dataIndex:'shou_moneys'
},{
text:'应收金额',dataIndex:'shou_moneyz'
},{
text:'当月已收金额',dataIndex:'shou_moneyn'
},{
text:'收款单数',dataIndex:'shou_shu'
},{
text:'待付金额',dataIndex:'fu_moneyd'
},{
text:'已付金额',dataIndex:'fu_moneys'
},{
text:'应付金额',dataIndex:'fu_moneyz'
},{
text:'当月已付金额',dataIndex:'fu_moneyn'
},{
text:'付款单数',dataIndex:'fu_shu'
}],
load:function(a){
c.loadcharts();
},
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
}
});
function btn(bo){
get('xiang_{rand}').disabled = bo;
}
var myChart=false;
var c = {
reload:function(){
a.reload();
},
daochu:function(){
a.exceldown();
},
search:function(){
var s=get('key_{rand}').value,mon = get('month_{rand}').value;
a.setparams({key:s,month:mon},true);
},
view:function(){
var d=a.changedata;
addtabs({num:'custfintotal'+d.id+'',url:'main,customer,totalge,uid='+d.id+'',icons:'bar-chart',name:''+d.name+'的年度统计'});
},
loadcharts:function(){
if(atype!='down')return;
if(!myChart){
$('#view_{rand}').after('<div class="blank20"></div><div id="main_show{rand}" style="width:98%;height:500px;"></div>');
myChart = echarts.init(get('main_show{rand}'));
}
var rows = a.getData('rows'),i,len=rows.length,v;
var xAxis=[],data=[];
for(i=0;i<len;i++){
xAxis.push(rows[i].name);
v = rows[i].shou_moneyz;if(v=='')v=0;
data.push(parseFloat(v));
}
var mon = get('month_{rand}').value;
var option = {
title: {
text: ''+mon+'月份应收金额图表',
left: 'center'
},
tooltip: {},
legend: {
data:['应收金额']
},
xAxis: {
data: xAxis
},
yAxis: {type : 'value'},
series: [{
name: '金额',
type: 'bar',
data: data
}]
};
myChart.setOption(option);
}
};
js.initbtn(c);
$('#month_{rand}').val(month);
});
</script>
<div>
<table width="100%">
<tr>
<td style="padding-right:10px">
<button class="btn btn-default" click="reload" type="button"><i class="icon-refresh"></i></button>
</td>
<td style="padding-right:10px">
<div style="width:120px" class="input-group">
<input readonly placeholder="月份" class="form-control" id="month_{rand}" >
<span class="input-group-btn">
<button onclick="return js.selectdate(this,'month_{rand}','month')" class="btn btn-default" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td>
<input class="form-control" style="width:200px" id="key_{rand}" placeholder="部门/人员">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="90%" style="padding-left:10px">
</td>
<td align="right" nowrap>
<button class="btn btn-default" id="xiang_{rand}" click="view" disabled type="button">详情</button> &nbsp;
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">系统是以收付款单上是所属日期算对应月份统计的,当月已收金额是收款时间是当月的统计。</div>

View File

@@ -0,0 +1,154 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var uid=params.uid;
if(!uid)uid=adminid+'';
var columns=[{
text:'部门',dataIndex:'deptname'
},{
text:'姓名',dataIndex:'name'
},{
text:'月份',dataIndex:'month'
},{
text:'待收金额',dataIndex:'shou_moneyd'
},{
text:'已收金额',dataIndex:'shou_moneys'
},{
text:'应收金额',dataIndex:'shou_moneyz'
},{
text:'当月已收金额',dataIndex:'shou_moneyn'
},{
text:'收款单数',dataIndex:'shou_shu'
},{
text:'待付金额',dataIndex:'fu_moneyd'
},{
text:'已付金额',dataIndex:'fu_moneys'
},{
text:'应付金额',dataIndex:'fu_moneyz'
},{
text:'当月已付金额',dataIndex:'fu_moneyn'
},{
text:'付款单数',dataIndex:'fu_shu'
}];
var a = $('#view_{rand}').bootstable({
tablename:'custfina',params:{'uid':uid},modedir:'{mode}:{dir}',storeafteraction:'custtotalgeafter',storebeforeaction:'custtotalgebefore',
columns:columns,
load:function(a){
c.loadcharts('shou_moneys','已收金额');
}
});
var myChart=false;
var c = {
reload:function(){
a.reload();
},
daochu:function(){
a.exceldown();
},
search:function(){
var startdt = get('start_{rand}').value,
enddt = get('end_{rand}').value;
a.setparams({'startdt':startdt,'enddt':enddt},true);
},
loadcharts:function(sf, nas){
if(!myChart){
$('#ssssv_{rand}').after('<div class="blank20"></div><div id="main_show{rand}" style="width:98%;height:400px;"></div>');
myChart = echarts.init(get('main_show{rand}'));
}
var rows = a.getData('rows'),i,len=rows.length,v;
if(!sf)sf='shou_moneys';
var xAxis=[],data=[];
for(i=len-1;i>=0;i--){
xAxis.push(rows[i].month);
v = rows[i][sf];if(v=='')v=0;
data.push(parseFloat(v));
}
var option = {
title: {
text: ''+nas+'图表',
left: 'center'
},
tooltip: {},
legend: {
data:['']
},
xAxis: {
data: xAxis
},
yAxis: {type : 'value'},
series: [{
name: nas,
type: 'line',
data: data
}]
};
myChart.setOption(option);
},
inits:function(){
var ss=[];
for(var i=0;i<columns.length;i++){
if(i>2)ss.push({name:columns[i].text,id:columns[i].dataIndex});
}
js.setselectdata(get('selectsss_{rand}'), ss,'id');
get('selectsss_{rand}').value='shou_moneys';
$('#selectsss_{rand}').change(function(){
c.changesels(this);
});
},
changesels:function(o){
var val = o.value;if(val=='')return;
var nam = o.options[o.selectedIndex].text;
this.loadcharts(val, nam);
}
};
js.initbtn(c);
$('#start_{rand}').val(js.now('Y-01'));
$('#end_{rand}').val(js.now('Y-m'));
c.inits();
});
</script>
<div>
<table width="100%">
<tr>
<td style="padding-right:10px">
<button class="btn btn-default" click="reload" type="button"><i class="icon-refresh"></i></button>
</td>
<td style="padding-right:10px">
<div style="width:120px" class="input-group">
<input readonly placeholder="月份从" class="form-control" id="start_{rand}" >
<span class="input-group-btn">
<button onclick="return js.selectdate(this,'start_{rand}','month')" class="btn btn-default" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td nowrap>至&nbsp; </td>
<td>
<div style="width:120px" class="input-group">
<input readonly class="form-control" id="end_{rand}" >
<span class="input-group-btn">
<button onclick="return js.selectdate(this,'end_{rand}','month')" class="btn btn-default" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="90%" style="padding-left:10px">
</td>
<td align="right" nowrap>
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="blank10"></div>
<div id="ssssv_{rand}"><select id="selectsss_{rand}" style="width:250px" class="form-control"><option value="">--选择图表字段--</option></select></div>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,195 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var mid;
var at = $('#optionview_{rand}').bootstable({
tablename:'flow_cname',defaultorder:'`sort`',where:'and `pid`=0',celleditor:true,
modedir:'{mode}:{dir}',
columns:[{
text:'名称',dataIndex:'name'
},{
text:'编号',dataIndex:'num'
},{
text:'审核人',dataIndex:'checkname'
},{
text:'排序号',dataIndex:'sort'
},{
text:'ID',dataIndex:'id'
}],
itemdblclick:function(ad,oi,e){
$('#downshow_{rand}').html('审核人员组<b>['+ad.num+'.'+ad.name+']</b>下的规则');
mid=ad.id;
a.search("and `pid`="+ad.id+"");
get('add_{rand}').disabled=false;
},
itemclick:function(d){
btns(false);
},
beforeload:function(){
btns(true);
}
});
function btn(bo){
get('edit_{rand}').disabled = bo;
get('del_{rand}').disabled = bo;
}
function btns(bo){
get('edits_{rand}').disabled = bo;
get('dels_{rand}').disabled = bo;
}
var a = $('#view_{rand}').bootstable({
tablename:'flow_cname',celleditor:true,defaultorder:'`sort`',
autoLoad:false,where:'and `pid`=-1',modedir:'{mode}:{dir}',
columns:[{
text:'适用对象',dataIndex:'recename'
},{
text:'编号',dataIndex:'num'
},{
text:'审核人',dataIndex:'checkname'
},{
text:'排序号',dataIndex:'sort',editor:true
},{
text:'ID',dataIndex:'id'
}],
load:function(d){
},
itemclick:function(d){
btn(false);
},
beforeload:function(){
btn(true);
}
});
var c = {
reload:function(){
a.reload();
},
del:function(){
a.del();
},
dels:function(){
at.del();
},
clickwin:function(o1,lx){
var h = $.bootsform({
title:'审核人员组下规则',height:400,width:400,
tablename:'flow_cname',isedit:lx,beforesaveaction:'savebeforecname',
params:{int_filestype:'sort,pid'},url:publicsave('{mode}','{dir}'),
submitfields:'sort,num,checkid,checkname,recename,receid,pid',
items:[{
labelText:'编号',name:'num',required:true
},{
labelText:'适用对象',type:'changeuser',changeuser:{
type:'deptusercheck',idname:'receid',title:'选择适用对象'
},name:'recename',clearbool:true,required:true
},{
labelText:'审核人',type:'changeuser',changeuser:{
type:'usercheck',idname:'checkid',title:'选择审核人'
},name:'checkname',clearbool:true,required:true
},{
name:'receid',type:'hidden',value:'0'
},{
name:'checkid',type:'hidden',value:'0'
},{
name:'pid',value:'0'
},{
labelText:'序号',name:'sort',type:'number',value:'0'
}],
success:function(){
a.reload();
}
});
if(lx==1){
h.setValues(a.changedata);
}
h.getField('pid').value = mid;
},
clickwins:function(o1, lx){
var h = $.bootsform({
title:'审核人员组',height:400,width:400,beforesaveaction:'savebeforecname',
tablename:'flow_cname',isedit:lx,url:publicsave('{mode}','{dir}'),
params:{int_filestype:'sort'},
submitfields:'name,sort,num,checkid,checkname',
items:[{
labelText:'名称',name:'name',required:true
},{
labelText:'编号',name:'num',required:true
},{
labelText:'审核人',type:'changeuser',changeuser:{
type:'usercheck',idname:'checkid',title:'选择审核人'
},name:'checkname',clearbool:true,required:true
},{
name:'checkid',type:'hidden',value:'0'
},{
labelText:'序号',name:'sort',type:'number',value:'0'
}],
success:function(){
at.reload();
}
});
if(lx==1){
h.setValues(at.changedata);
}
h.getField('name').focus();
}
};
js.initbtn(c);
$('#optionview_{rand}').css('height',''+(viewheight-62-50)+'px');
});
</script>
<table width="100%">
<tr valign="top">
<td width="45%">
<table width="100%">
<tr>
<td align="left" nowrap>
<button class="btn btn-warning" click="clickwins,0" type="button"><i class="icon-plus"></i> 新增组</button>
</td>
<td align="left" style="padding:0px 10px;">
</td>
<td width="90%">
</td>
<td align="right" nowrap>
<button class="btn btn-info" id="edits_{rand}" click="clickwins,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button>&nbsp;
<button class="btn btn-danger" click="dels" disabled id="dels_{rand}" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr>
</table>
<div class="blank10"></div>
<div class="panel panel-info" style="margin:0px">
<div class="panel-heading">
<h3 class="panel-title">审核人员组(双击显示对应设置)</h3>
</div>
<div id="optionview_{rand}" style="height:400px;overflow:auto"></div>
</div>
</td>
<td width="10"></td>
<td>
<div>
<ul class="floats">
<li class="floats70">
<button class="btn btn-primary" click="clickwin,0" disabled id="add_{rand}" type="button"><i class="icon-plus"></i> 新增组下规则</button>&nbsp;&nbsp;
<span id="downshow_{rand}"></span>
</li>
<li class="floats30" style="text-align:right">
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button> &nbsp;
<button class="btn btn-danger" id="del_{rand}" disabled click="del" type="button"><i class="icon-trash"></i> 删除</button>
</li>
</ul>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
</td>
</tr>
</table>

View File

@@ -0,0 +1,349 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var num = params.num,setid,optlx=0,maxpid = 0,courseobj={};
var at = $('#optionview_{rand}').bootstable({
tablename:'flow_set',defaultorder:'`sort`',where:'and isflow>0 and status=1',
modedir:'{mode}:{dir}',storeafteraction:'setcourselistafter',storebeforeaction:'setcourselistbefore',
columns:[{
text:'名称',dataIndex:'name'
},{
text:'编号',dataIndex:'num'
},{
text:'步骤数',dataIndex:'shu'
},{
text:'ID',dataIndex:'id'
}],
itemdblclick:function(ad,oi,e){
$('#downshow_{rand}').html('设置<b>['+ad.id+'.'+ad.name+']</b>的流程管理');
setid=ad.id;
get('addp_{rand}').disabled=false;
get('relad_{rand}').disabled=false;
c.loaddata();
}
});
var a = $('#view_{rand}').bootstable({
tablename:'flow_course',celleditor:true,
autoLoad:false,where:'and setid=-1',tree:true,modedir:'{mode}:{dir}',storeafteraction:'flowcourselistafter',storebeforeaction:'flowcourselistbefore',
columns:[{
text:'名称',dataIndex:'name',align:'left'
},{
text:'适用于',dataIndex:'recename'
},{
text:'分支条件',dataIndex:'whereid'
},{
text:'编号',dataIndex:'num',editor:true
},{
text:'审核人类型',dataIndex:'checktype'
},{
text:'审核人',dataIndex:'checktypename'
},{
text:'排序号',dataIndex:'sort',editor:true
},{
text:'状态',dataIndex:'status',type:'checkbox',editor:true
},{
text:'下级步骤',dataIndex:'nid',renderer:function(v){
if(v=='0')v='&nbsp;';
return v;
}
},{
text:'ID',dataIndex:'id'
},{
text:'',dataIndex:'opts',align:'left',renderer:function(v,d,i){
var s='&nbsp;';
if(d.id>0){
s='<a onclick="optess{rand}('+i+',0)" href="javascript:;">改</a>';
if(d.stotal==0)s+=' <a onclick="optess{rand}('+i+',1)" href="javascript:;">删</a>';
}
return s;
}
}],
itemclick:function(){
get('down_{rand}').disabled=false;
}
});
optess{rand}=function(oi,lx){
c.optss(oi,lx);
}
var c = {
reload:function(){
this.loaddata();
},
optss:function(oi,lx){
var d = a.getData(oi);
if(lx==0){
this.addflow(d.mid, d.id, d.name);
}
if(lx==1){
this.delflow(d.id);
}
},
adddowns:function(){
var d = a.changedata;
this.addflow(d.id, 0, d.name);
},
addflow:function(mid, id,tex){
var icon='plus',name='新增['+tex+']下的步骤';
if(id>0){
icon='edit';
name='编辑['+tex+']步骤';
}
guanflowcourselist = c;
addtabs({num:'flowcourse'+id+'',url:'main,flow,courseedit,id='+id+',setid='+setid+',mid='+mid+'',icons:icon,name:name});
},
pipei:function(){
js.ajax(js.getajaxurl('reloadpipei','{mode}','{dir}'),{mid:setid},function(s){
js.msg('success', s);
},'get',false,'匹配中...,匹配完成');
},
loaddata:function(){
get('down_{rand}').disabled=true;
this.inpub = $('#mainv{rand}');
this.inpub.html('');
js.ajax(js.getajaxurl('courseflowinit','{mode}','{dir}'),{setid:setid}, function(ret){
c.loaddatashow(ret);
},'get,json');
if(!this.robj)this.robj = $.rockmenu({
data:[],
itemsclick:function(d){
c.rightclick(d);
}
});
},
loaddatashow:function(ret){
this.heie = 50;
this.jianarr=[];
this.showflow(ret.rows,0, -1, 0,0);
a.loadData({rows:ret.treedata,totalCount:0});
this.showflows();
var ads = courseobj[0],lds,o,ow,o1;
if(ads.childshu>1){
lds = ads.children[ads.childshu-1].id;
o = $('#courseflow'+setid+'_'+lds+'');
o1= $('#courseflow'+setid+'_0');
ow= o.width()+ parseInt(o.css('left'));
ol= ow*0.5 - o1.width()*0.5;
o1.css('left',''+ol+'px');
}
//显示箭头
var i,len=this.jianarr.length,d;
for(i=0;i<len;i++){
d = this.jianarr[i];
this.jian(d[0], d[1]);
}
},
showflows:function(){
this.inpub.css('height',''+(this.heie+90)+'px');
},
//lef起始位置 lev级别
showflow:function(ret, lef,mid,lev){
$('#mainvss{rand}').show();
var i=0,len=ret.length,s,d={},l,t,dw,rfys='',sty,sid,o1;
var jg = 100,oi=0;
ks = lef;
for(i=0;i<len;i++){
d=ret[i];
sty = '';
oi++;
l = ks;
if(d.childshu>1)jg=150; //有下级间隔大点
if(i>0){
l+=jg;
}
t = 120*d.level;
if(t>this.heie)this.heie=t;
rfys='rf_ract';
if(d.childshu>1)rfys='rf_yuan';
if(d.id==0||d.status=='0')sty=';background:#eeeeee;border-color:#cccccc;color:#888888';
sid='courseflow'+setid+'_'+d.id+'';
s='<div id="'+sid+'" dataid="'+d.id+'" oncontextmenu="right{rand}(this,event)" level="'+d.level+'" style="left:'+l+'px;top:'+t+'px'+sty+'" class="rf '+rfys+'"><div class="rf_nei">';
if(!isempt(d.fzsm))s+='<div class="rf-texts">'+d.fzsm+'</div>';
s+='<div class="rf-text">'+d.id+'.'+d.name+'</div>';
if(!isempt(d.checktypename))s+='<div class="rf-texts">'+d.checktype+'.'+d.checktypename+'</div>';
s+='</div></div>';
this.inpub.append(s);
if(mid>=0){
this.jianarr.push([mid, d.id]);
}
if(d.childshu==0 && d.nid>0)this.jianarr.push([d.id, d.nid]);
if(d.children){
this.showflow(d.children, l ,d.id,d.level,0);
}
d.left = l;
d.top = t;
courseobj[d.id]=d;
ks = l+$('#'+sid+'').width();
}
},
jian:function(fid,tid){
var fo,to,jl,l,t,jw,wh,dw;
fo = $('#courseflow'+setid+'_'+fid+'');
to = $('#courseflow'+setid+'_'+tid+'');
var tleft = parseInt(to.css('left')),
fleft = parseInt(fo.css('left')),
ttop = parseInt(to.css('top')),
ftop = parseInt(fo.css('top'));
//如果同一条线上
if(ttop==ftop){
//→这个方向
if(tleft>fleft){
l = fleft + fo.width() + 4;
t = ftop + fo.height()*0.5+4;
dw= tleft - l;
this.getjstr(dw,l,t, -90);
}else{//←这个方向
l = fleft-4;
t = ftop + fo.height()*0.5-4;
dw= fleft - tleft-to.width()-6;
this.getjstr(dw,l,t, 90);
}
return;
}
jl = parseInt(to.css('top'))- parseInt(fo.css('top'))-fo.height()-10;
l = fleft+fo.width()*0.5-8; //箭头开始位置
t = parseInt(fo.css('top'))+fo.height()+5; //箭头结束位置
jw = tleft - fleft - fo.width() + to.width()*0.5;//两个的位置宽
//console.log(''+fid+'→'+tid+':'+jw+'');
var jgs = tleft-fleft;
//判断f中心点 是否在t的区间内
var fzxd = fleft+fo.width()*0.5;
var tzxd = tleft+to.width();
//在中心点就用直线↓
if(fzxd>=tleft && fzxd<=tzxd){
jw=0;
}else if(fleft>tleft){
jw = fleft - tleft - to.width()+ fo.width()*0.5;
jw = 0-jw;
l = fleft;
t = t-5;
}
jh = jl;//两个的位置高
dw = Math.sqrt(jw*jw+jh*jh); //对角线长度(勾股定理)
var jds = Math.atan(jw/jh)*180/Math.PI; //旋转角度
if(jds>0)l = l+fo.width()*0.5+10;
var jdss= 0-jds;
this.getjstr(dw,l,t, jdss);
},
getjstr:function(h,l,t,jds){
var s = '<div style="left:'+l+'px;top:'+t+'px;transform:rotate('+jds+'deg);height:'+h+'px" class="rf_shu"><div class="rf_shu1" style="height:'+(h-8)+'px"></div><div class="rf_shu2"></div></div>';
this.inpub.append(s);
},
righmenu:function(o1,e){
var d = [],o=$(o1);
var id = parseFloat(o.attr('dataid'));
var ba = courseobj[id];
d.push({'name':'新增下级步骤',text:ba.name,mid:0,'id':id,lx:0});
if(id>0){
d.push({'name':'编辑',text:ba.name,'id':id,lx:1,mid:ba.mid});
if(ba.childshu==0)d.push({'name':'<font color=red>删除</font>','id':id,lx:2});
}
this.robj.setData(d);
this.robj.showAt(e.clientX,e.clientY,130);
},
rightclick:function(d){
var lx = d.lx;
if(lx==0)this.addflow(d.id, 0,d.text);
if(lx==1)this.addflow(d.mid, d.id,d.text); //编辑
if(lx==2)this.delflow(d.id);
},
delflow:function(id){
js.confirm('确定要删除此步骤吗?',function(jg){
if(jg=='yes')c.delflows(id);
});
},
delflows:function(id){
js.ajax(js.getajaxurl('courseflowdel','{mode}','{dir}'), {id:id}, function(s){
c.reload();
},'get',false,'删除中...,删除成功');
},
search:function(){
at.setparams({'key':get('key_{rand}').value}, true);
}
};
js.initbtn(c);
right{rand}=function(o1,e){
c.righmenu(o1,e);
}
$('#optionview_{rand}').css('height',''+(viewheight-102)+'px');
});
</script>
<table width="100%">
<tr valign="top">
<td width="25%">
<div class="panel panel-info" style="margin:0px">
<div class="panel-heading">
<h3 class="panel-title">流程模块(双击显示步骤)</h3>
</div>
<div>
<div class="input-group" style="width:200px">
<input class="form-control" id="key_{rand}" placeholder="模块名称/编号">
<span class="input-group-btn">
<button class="btn btn-default" click="search" type="button"><i class="icon-search"></i></button>
</span>
</div>
</div>
<div id="optionview_{rand}" style="height:400px;overflow:auto"></div>
</div>
</td>
<td width="10"></td>
<td>
<div>
<table width="100%">
<tr>
<td align="left" nowrap>
<button class="btn btn-default" click="reload" id="relad_{rand}" disabled type="button">刷新</button>&nbsp;&nbsp;
<button class="btn btn-default" click="pipei" id="addp_{rand}" disabled type="button">匹配流程</button>
</td>
<td align="left" width="90%" id="downshow_{rand}" style="padding:0px 10px;">
</td>
<td align="right" nowrap>
<button class="btn btn-primary" click="adddowns" id="down_{rand}" disabled type="button">新增下级步骤</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div class="blank1"></div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="blank10"></div>
<div id="mainvss{rand}" style="background:#f1f1f1;border:1px #dddddd solid;border-radius:5px;padding:10px;display:none;">
<div oncontextmenu="return false" id="mainv{rand}" class="notsel" style="position:relative;height:auto;"></div>
</div>
</td>
</tr>
</table>

View File

@@ -0,0 +1,538 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var id = params.id;
if(!id)id = 0;var setid=params.setid,statusstr='';
var h = $.bootsform({
window:false,rand:'{rand}',tablename:'flow_course',
url:publicsave('{mode}','{dir}'),beforesaveaction:'coursesavebefore',
params:{otherfields:'optdt={now}'},
submitfields:'setid,name,num,checktype,checktypeid,checktypename,checkfields,sort,where,whereid,explain,status,courseact,checkshu,recename,receid,mid,iszf,isqm,nid,coursetype,zshtime,zshstate,zbrangeame,zbrangeid,smlx,wjlx,isxgfj,cslx,csfwname,csfwid',
requiredfields:'name',
success:function(){
closenowtabs();
try{guanflowcourselist.reload();}catch(e){}
},
load:function(a){
js.setselectdata(h.form.whereid,a.wherelist,'id');
statusstr=a.statusstr;
},
loadafter:function(a){
c.changetype(0);
if(a.data){
h.form.where.value=jm.base64decode(a.data.where);
if(a.data.iszf>0)$('#zbdiv_{rand}').show();
if(a.data.cslx>0)$('#csdiv_{rand}').show();
}
},
submitcheck:function(d){
if(d.checktype=='user'&&d.checktypeid=='')return '请选择人员';
if(d.checktype=='rank'&&d.checktypename=='')return '请输入职位';
if(d.checktype=='cname'&&d.checktypeid=='')return '请选择审核人员组';
if(d.checktype=='field'&&d.checktypeid=='')return '请选择主表元素';
if(d.cslx=='3'&&d.csfwid=='')return '请选择抄送人员';
return {
where:jm.base64encode(d.where)
};
}
});
h.forminit();
h.load(js.getajaxurl('loaddatacourse','{mode}','{dir}',{id:id,setid:setid}));
var c = {
getdist:function(o1, lx){
var val = h.form.checktype.value;
if(val=='rank'){
$.selectdata({
title:'选择职位',
url:js.getajaxurl('getrank','admin','system'),
checked:false,
nameobj:h.form.checktypename
});
return;
}
if(val=='cname'){
$.selectdata({
title:'选审核人员组',
url:js.getajaxurl('getcname','{mode}','{dir}'),
checked:false,
nameobj:h.form.checktypename,
idobj:h.form.checktypeid,
});
return;
}
if(val=='field'){
$.selectdata({
title:'选择主表元素',
url:js.getajaxurl('getfields','{mode}','{dir}',{'setid':setid}),
checked:true,
nameobj:h.form.checktypename,
idobj:h.form.checktypeid,
});
return;
}
if(val=='change'){
var cans = {
nameobj:h.form.checktypename,
idobj:h.form.checktypeid,
value:h.form.checktypeid.value,
type:'deptusercheck',
title:'选择指定人范围'
};
js.getuser(cans);
return;
}
var cans = {
nameobj:h.form.checktypename,
idobj:h.form.checktypeid,
value:h.form.checktypeid.value,
type:'usercheck',
title:'选择人员'
};
js.getuser(cans);
},
clears:function(){
h.form.checktypename.value='';
h.form.checktypeid.value='';
},
changetype:function(lx){
var v=h.form.checktype.value;
$('#checktext_{rand}').html('');
$('#checkname_{rand}').hide();
if(lx==1){
h.form.checktypename.value='';
h.form.checktypeid.value='';
}
if(v=='rank'){
$('#checktext_{rand}').html('请输入职位:');
$('#checkname_{rand}').show();
}
if(v=='user'){
$('#checktext_{rand}').html('请选择人员:');
$('#checkname_{rand}').show();
}
if(v=='cname'){
$('#checktext_{rand}').html('审核人员组:');
$('#checkname_{rand}').show();
}
if(v=='field'){
$('#checktext_{rand}').html('选择主表上元素:');
$('#checkname_{rand}').show();
}
if(v=='change'){
$('#checktext_{rand}').html('指定人范围:');
$('#checkname_{rand}').show();
}
},
reloadhweil:function(){
h.form.whereid.length = 1;
h.load(js.getajaxurl('loaddatacourse','{mode}','{dir}',{id:id,setid:setid}));
},
getdists:function(o1, lx){
var cans = {
nameobj:h.form.recename,
idobj:h.form.receid,
type:'deptusercheck',
title:'选择适用对象'
};
js.getuser(cans);
},
getzbrangeame:function(o1, lx){
var cans = {
nameobj:h.form.zbrangeame,
idobj:h.form.zbrangeid,
type:'deptusercheck',
title:'选择转办范围'
};
if(lx==2){
cans.nameobj = h.form.csfwname;
cans.idobj = h.form.csfwid;
cans.title = '选择抄送范围';
}
js.getuser(cans);
},
getzbraben:function(o1,lx){
if(lx==1){
h.form.zbrangeame.value='本部门';
h.form.zbrangeid.value='dept';
}
if(lx==2){
h.form.csfwname.value='本部门';
h.form.csfwid.value='dept';
}
},
getzbrabens:function(o1,lx){
if(lx==1){
h.form.zbrangeame.value='本部门(含下级部门)';
h.form.zbrangeid.value='deptall';
}
if(lx==2){
h.form.csfwname.value='本部门(含下级部门)';
h.form.csfwid.value='deptall';
}
},
getzbraremoves:function(o1,lx){
if(lx==1){
h.form.zbrangeame.value='';
h.form.zbrangeid.value='';
}
if(lx==2){
h.form.csfwname.value='';
h.form.csfwid.value='';
}
},
csxuanze:function(){
var s1 = h.form.csfwname.value,s2=h.form.csfwid.value;
if(s1){
s1+=',审批人直属上级';
s2+=',super';
}else{
s1='审批人直属上级';
s2='super';
}
h.form.csfwname.value=s1;
h.form.csfwid.value=s2;
},
allqt:function(o1,lx){
h.form.recename.value='全体人员';
h.form.receid.value='all';
},
removes:function(){
h.form.recename.value='';
h.form.receid.value='';
},
setstatus:function(){
var val = h.form.courseact.value;
var sha = [],vala;
if(val)sha = val.split(',');
var str = '<table width="100%"><tr><td align="center" height="30" nowrap>动作值</td><td>动作名</td><td>动作颜色</td><td>处理后状态</td></tr>';
if(isempt(statusstr))statusstr='待处理,已完成,不通过';
var ztarr = statusstr.replace(/\?/g,'').split(',');
for(var i=0;i<=6;i++){
var na='',col='',naa,sel='',ove='';
if(sha[i]){
naa = sha[i].split('|');
na = naa[0];
if(naa[1])col=naa[1];
if(naa[2])ove=naa[2];
}
str+='<tr><td width="20%" align="center">'+(i+1)+'</td><td width="25%"><input maxlength="10" value="'+na+'" id="abc_xtname'+i+'" style="color:'+col+'" class="form-control"></td><td width="25%"><input class="form-control" maxlength="7" style="color:'+col+'" value="'+col+'" id="abc_xtcol'+i+'"></td><td width="30%">';
str+='<select class="form-control" id="abc_xscol'+i+'" value="'+col+'">';
str+='<option value=""></option>';
for(var j=0;j<ztarr.length;j++){
sel=(ove!='' && ove==j)?'selected':'';
str+='<option '+sel+' value="'+j+'">'+ztarr[j]+'</option>';
}
str+='</select></td></tr>';
}
str+='</table>';
js.tanbody('sttts','['+h.form.name.value+']的状态设置',400,300,{
html:'<div style="height:300px;overflow:auto;padding:5px">'+str+'</div>',
btn:[{text:'确定'}]
});
$('#sttts_btn0').click(function(){
c.setstatusok();
});
},
setstatusok:function(){
var str = '';
for(var i=0;i<=6;i++){
var na=get('abc_xtname'+i+'').value,col=get('abc_xtcol'+i+'').value,zts=get('abc_xscol'+i+'').value;
if(!na)break;
str+=','+na+'';
if(col){
str+='|'+col+'';
if(zts)str+='|'+zts+'';
}else{
if(zts)str+='||'+zts+'';
}
}
if(str!='')str=str.substr(1);
h.form.courseact.value=str;
js.tanclose('sttts');
},
setwhere:function(){
js.setwhere(params.setid,'backsheowe{rand}');
}
};
js.initbtn(c);
if(id==0){
h.form.setid.value=setid;
h.form.mid.value=params.mid;
}
$(h.form.checktype).change(function(){
c.changetype(1);
});
$(h.form.changezbsseas).change(function(){
var o1= this.options[this.selectedIndex];
h.form.zbrangeame.value=o1.text;
h.form.zbrangeid.value=this.value;
});
$(h.form.changezbsseas1).change(function(){
var o1= this.options[this.selectedIndex];
h.form.csfwname.value=o1.text;
h.form.csfwid.value=this.value;
});
$(h.form.iszf).change(function(){
if(this.value>0){
$('#zbdiv_{rand}').show();
}else{
$('#zbdiv_{rand}').hide();
c.getzbraremoves(false, 1);
}
});
$(h.form.cslx).change(function(){
if(this.value>0){
$('#csdiv_{rand}').show();
}else{
$('#csdiv_{rand}').hide();
c.getzbraremoves(false,2);
}
});
//替换的返回
backsheowe{rand}=function(s1,s2){
h.setValue('where',s1);
h.setValue('explain',s2);
}
});
</script>
<div align="center">
<div style="padding:10px;width:700px">
<form name="form_{rand}">
<input name="id" value="0" type="hidden" />
<input name="setid" value="0" type="hidden" />
<table cellspacing="0" border="0" width="100%" align="center" cellpadding="0">
<tr>
<td align="right" width="15%"><font color=red>*</font> 步骤名称:</td>
<td class="tdinput" width="35%"><input name="name" onblur="this.value=strreplace(this.value)" class="form-control"></td>
<td align="right" width="15%">编号:</td>
<td class="tdinput" width="35%"><input onblur="this.value=strreplace(this.value)" name="num" class="form-control"></td>
</tr>
<tr>
<td align="right" nowrap >步骤适用对象:</td>
<td class="tdinput" colspan="3">
<div style="width:100%" class="input-group">
<input readonly class="form-control" placeholder="不选就适用全体人员" name="recename" >
<input type="hidden" name="receid" >
<span class="input-group-btn">
<button class="btn btn-default" click="removes" type="button"><i class="icon-remove"></i></button>
<button class="btn btn-default" click="getdists,1" type="button"><i class="icon-search"></i></button>
</span>
</div>
</td>
</tr>
<tr>
<td align="right" nowrap ><a href="<?=URLY?>view_checklx.html" target="_blank">?审核人员类型</a></td>
<td class="tdinput"><select class="form-control" name="checktype"><option value="">-类型-</option><option value="super">直属上级</option><option value="optsuper">上次处理的直属上级</option><option value="superall">直属上级逐级审批</option><option value="rank">职位</option><option value="user">指定人员</option><option value="dept">部门负责人</option><option value="auto">自定义(写代码上)</option><option value="apply">申请人</option><option value="opt">操作人</option><option value="change">由上步指定</option><option value="cname">审核人员组</option><option value="field">主表上元素</option></select></td>
<td align="right" id="checktext_{rand}" nowrap></td>
<td class="tdinput" id="checkname_{rand}" style="display:none">
<div class="input-group" style="width:100%">
<input class="form-control" name="checktypename" >
<input type="hidden" name="checktypeid" >
<span class="input-group-btn">
<button class="btn btn-default" click="clears" type="button">×</button>
<button class="btn btn-default" click="getdist,1" type="button"><i class="icon-search"></i></button>
</span>
</div>
</td>
</tr>
<tr>
<td align="right" >手写签名设置:</td>
<td class="tdinput"><select class="form-control" name="isqm"><option value="0">不需要手写签名</option><option value="1">需要手写签名</option><option value="2">通过才需要手写签名</option><option value="3">不通过才需要手写签名</option></select></td>
<td align="right" >上级步骤ID</td>
<td class="tdinput">
<table>
<tr>
<td><input name="mid" class="form-control" value="0" type="number" /></td>
<td nowrap>&nbsp;下级步骤ID</td>
<td><input name="nid" style="width:70px" class="form-control" value="0" type="number" /></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="right" >审核条件:</td>
<td class="tdinput"><select class="form-control" name="whereid"><option value="0">无条件</option></select></td>
<td colspan="2"><font color=#888888>在【流程模块条件】上添加,满足此条件才需要此步骤</font><a click="reloadhweil" href="javascript:;">[刷新]</a></td>
</tr>
<tr>
<td align="right" >审核条件:<br><a click="setwhere" href="javascript:;">[设置条件]</a>&nbsp;&nbsp;</td>
<td colspan="3" class="tdinput"><textarea placeholder="写SQL条件条件成立才需要此步骤标准SQL条件" name="where" style="height:50px" class="form-control"></textarea></td>
</tr>
<tr>
<td align="right" >审核动作:</td>
<td class="tdinput" colspan="3"><input name="courseact" placeholder="默认是:同意,不同意。多个,分开" class="form-control"></td>
</tr>
<tr>
<td align="right" >审核处理表单:</td>
<td class="tdinput" colspan="3"><input name="checkfields" placeholder="写主表字段名,不支持子表字段" class="form-control"><div style="padding-top:0px" class="tishi">需要处理表单元素必须在【表单元素管理】上输入字段名如title,dt|stitle其中格式必填字段|选填字段</div></td>
</tr>
<tr>
<td align="right" >说明:</td>
<td class="tdinput" colspan="3"><textarea name="explain" style="height:50px" class="form-control"></textarea></td>
</tr>
<tr>
<td align="right" nowrap >审核人数:</td>
<td class="tdinput"><select class="form-control" name="checkshu"><option value="0">需全部审核</option><option value="1" selected>至少一人</option><option value="2">至少2人</option></select></td>
<!--
<td align="right" nowrap >审批方式:</td>
<td class="tdinput"><select class="form-control" name="coursetype"><option value="0">顺序审批</option><option value="1">前置审批(前面有审批后面出现就跳过)</option><option value="2">后置审批(如后面步骤有出现就跳过)</option></select></td>
-->
</tr>
<tr>
<td align="right" ></td>
<td class="tdinput" colspan="3">
超过<input class="input" type="number" id="shijian_{rand}" onfocus="js.focusval=this.value" value="0" onblur="js.number(this)" min="0" style="width:70px" name="zshtime">分钟自动审核<select name="zshstate"><option value="1">通过</option><option value="2">不通过</option><option value="3">作废单据</option><option value="4">删除单据</option><option value="5">催办提醒</option></select>,0不限制。<select onchange="$('#shijian_{rand}').val(this.value)" name="lbztxs"><option value="0">不限制</option><option value="30">30分钟</option><option value="120">2小时</option><option value="360">6小时</option><option value="1440">1天</option><option value="2880">2天</option><option value="10080">7天</option><option value="21600">15天</option><option value="43200">30天</option></select>
</td>
</tr>
<tr>
<td align="right">排序号:</td>
<td class="tdinput"><input name="sort" value="0" maxlength="3" type="number" onfocus="js.focusval=this.value" onblur="js.number(this)" class="form-control"></td>
</tr>
<tr>
<td align="right">处理时:</td>
<td class="tdinput" colspan="3"><label><input name="isxgfj" value="1" type="checkbox">可直接编辑附件(客户端需要安装<a href="<?=URLY?>view_editword.html" target="_blank">在线编辑文档</a>)</label>&nbsp;</td>
</tr>
<tr>
<td align="right">转办类型:</td>
<td class="tdinput">
<select class="form-control" name="iszf">
<option value="0">不可转办</option>
<option value="1">可转办多人</option>
<option value="2">可转办单人</option>
</select>
</td>
</tr>
<tr id="zbdiv_{rand}" style="display:none">
<td align="right" nowrap >转办的范围:</td>
<td class="tdinput" colspan="3">
<div class="input-group">
<input readonly class="form-control" placeholder="不选就可转办给任何人" name="zbrangeame" >
<input type="hidden" name="zbrangeid" >
<span class="input-group-btn">
<select class="btn btn-default" name="changezbsseas" style="width:150px">
<option value="">-选择-</option>
<option value="dept">本部门</option>
<option value="deptall">本部门(含下级部门)</option>
<option value="down">直属下级</option>
<option value="downall">直属下级(含下级的下级)</option>
</select>
<button class="btn btn-default" click="getzbraremoves,1" type="button"><i class="icon-remove"></i></button>
<button class="btn btn-default" click="getzbrangeame,1" type="button"><i class="icon-search"></i></button>
</span>
</div>
</td>
</tr>
<tr>
<td align="right">处理说明:</td>
<td class="tdinput">
<select class="form-control" name="smlx">
<option value="0">默认不同意才需要填写</option>
<option value="1" >都必须填写</option>
<option value="2" >都可以不写</option>
<option value="3" >不显示说明栏</option>
</select>
</td>
<td align="right">处理文件:</td>
<td class="tdinput">
<select class="form-control" name="wjlx">
<option value="0">默认(可选上传)</option>
<option value="1" >必须上传</option>
<option value="2" >仅同意时需上传</option>
<option value="3" >不显示文件栏</option>
</select>
</td>
</tr>
<tr>
<td align="right">抄送类型:</td>
<td class="tdinput">
<select class="form-control" name="cslx">
<option value="0">不用抄送</option>
<option value="1">可选抄送</option>
<option value="2">同意时必须选抄送</option>
<option value="3">同意时抄送给固定人</option>
</select>
</td>
</tr>
<tr id="csdiv_{rand}" style="display:none">
<td align="right" nowrap >抄送的范围:</td>
<td class="tdinput" colspan="3">
<div class="input-group">
<input readonly class="form-control" placeholder="不选就可抄送给任何人" name="csfwname" >
<input type="hidden" name="csfwid" >
<span class="input-group-btn">
<select class="btn btn-default" name="changezbsseas1" style="width:150px">
<option value="">-选择-</option>
<option value="dept">本部门</option>
<option value="deptall">本部门(含下级部门)</option>
<option value="down">直属下级</option>
<option value="downall">直属下级(含下级的下级)</option>
</select>
<button class="btn btn-default" click="getzbraremoves,2" type="button"><i class="icon-remove"></i></button>
<button class="btn btn-default" click="getzbrangeame,2" type="button"><i class="icon-search"></i></button>
</span>
</div>
<div><a href="javascript:;" click="csxuanze,2">审批人直属上级</a></div>
</td>
</tr>
<tr>
<td align="right" ></td>
<td class="tdinput" colspan="3">
<label><input name="status" value="1" checked type="checkbox"> 启用</label>&nbsp;
</td>
</tr>
<tr>
<td align="right"></td>
<td style="padding:15px 0px" colspan="3" align="left"><button disabled class="btn btn-success" id="save_{rand}" type="button"><i class="icon-save"></i>&nbsp;保存</button>&nbsp; <span id="msgview_{rand}"></span>&nbsp;<a href="<?=URLY?>view_course.html" target="_blank">[看帮助]</a>
</td>
</tr>
</table>
</form>
</div>
</div>

View File

@@ -0,0 +1,21 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var setid=params.setid;
$('#mainv{rand}').css('height',''+viewheight-20+'px');
});
</script>
<div>
</div>
<div align="center" id="mainv{rand}" style="background:url(images/cropbg.gif);position:relative">
<div style="left:10px;top:20px" class="rf rf_ract"><div style="padding:10px">图形1</div></div>
<div style="left:10px;top:100px" class="rf rf_yuan"><div style="padding:10px">图形1</div></div>
<div style="left:80px;top:100px;transform:rotate(deg)" class="rf_shu">
<div class="rf_shu1"></div>
<div class="rf_shu2"></div>
</div>
</div>

View File

@@ -0,0 +1,188 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var sid = params.sid;
var info = {
mode:'',
table:'',
file:'',
menu:'',
agent:''
}
var c={
init:function(){
if(sid){
this.loadmode(jm.base64decode(sid));
}
},
loadmode:function(sd1){
js.ajax(js.getajaxurl('loadmodeinfo','{mode}','{dir}'),{sid:sd1},function(ret){
js.unloading();
if(!ret.success){
js.msgerror(ret.msg);
}else{
var da = ret.data;
if(da.mode){
c.showlist('table',da.table);
c.showlist('file',da.file);
c.showlist('menu',da.menu);
c.showlist('agent',da.agent);
c.showlist('mode',da.mode);
$('#modelist_{rand}').append(da.mname);
}
}
},'get,json');
},
save:function(){
var bo = false;
var da = {
name:get('name_{rand}').value,
ver:get('ver_{rand}').value,
zuozhe:get('zuozhe_{rand}').value,
explain:get('explain_{rand}').value
}
for(var i in info){
if(info[i])bo=true;
da[i] = info[i];
}
if(!bo){
js.msgerror('包没有包含任何信息');
return;
}
var msgid= 'msgview_{rand}';
js.setmsg('创建中...','', msgid);
js.ajax(js.getajaxurl('createinstse','{mode}','{dir}'),da,function(ret){
if(!ret.success){
js.setmsg(ret.msg,'', msgid);
}else{
js.setmsg(ret.data,'green', msgid);
}
},'post,json');
},
showlist:function(lx,vs){
if(!vs)return;
var o1 = $('#'+lx+'list_{rand}');
var str= info[lx];
if(vs){
if(str)str+=',';
str+=''+vs+'';
info[lx]=str;
if(lx=='file'){
var sidt = str.split(',');
str = sidt.join('<br>');
}
if(lx!='mode' && lx!='menu' && lx!='agent')o1.html(str);
}
},
addbtn:function(o1,lx){
if(lx==3){
$.selectdata({
title:'选择需要的菜单',
url:js.getajaxurl('getmenu','upgrade','system',{glx:1}),
checked:true,maxshow:500,
onselect:function(d1,sna,sid){
if(sid)c.addmode(sid,lx);
}
});
return;
}
if(lx==4){
$.selectdata({
title:'选择需要的应用',
url:js.getajaxurl('getyydata','upgrade','system',{glx:1}),
checked:true,maxshow:500,
onselect:function(d1,sna,sid){
if(sid)c.addmode(sid,lx);
}
});
return;
}
var stra=['模块ID','表名','文件路径','菜单ID(菜单管理)下查看','应用ID(应用管理)下查看'];
js.prompt('请输入','请输入'+stra[lx]+',多个,分开',function(jg,txt){
if(jg=='yes' && txt){
c.addmode(txt,lx);
}
});
},
addmode:function(txt,lx){
js.loading('处理中...');
if(lx==0){
this.loadmode(txt);
}else{
js.ajax(js.getajaxurl('loadotein','{mode}','{dir}'),{lx:lx,sid:txt},function(ret){
js.unloading();
if(!ret.success){
js.msgerror(ret.msg);
}else{
var da = ret.data;
c.showlist('table',da.table);
c.showlist('file',da.file);
c.showlist('menu',da.menu);
c.showlist('agent',da.agent);
if(da.menu_str)$('#menulist_{rand}').append(da.menu_str);
if(da.agent_str)$('#agentlist_{rand}').append(da.agent_str);
}
},'post,json');
}
}
};
c.init();
js.initbtn(c);
});
</script>
<div style="padding:10px" align="center">
<div style="max-width:730px" align="left">
<h3>这里是制作一个zip安装包</h3>
<div style="color:gray">不是开发者不要去操作搞这个,更多看<a href="<?=URLY?>view_anbao.html"target="_blank">[帮助]</a>。</div>
<div style="border-bottom:1px #cccccc solid"></div>
<div style="padding:10px 0px">
<table>
<tr>
<td nowrap>&nbsp;安装包名称&nbsp;</td>
<td><input class="form-control" id="name_{rand}"></td>
<td nowrap>&nbsp;版本&nbsp;</td>
<td style="padding:8px 0px"><input class="form-control" value="1.0" id="ver_{rand}"></td>
<td nowrap>&nbsp;作者&nbsp;</td>
<td style="padding:8px 0px"><input class="form-control" value="" id="zuozhe_{rand}"></td>
</tr>
<tr>
<td nowrap>&nbsp;说明&nbsp;</td>
<td colspan="5" style="padding:8px 0px"><textarea class="form-control" id="explain_{rand}"></textarea></td>
</tr>
</table>
</div>
<h4>包含的模块&nbsp;<button class="btn btn-default btn-xs" click="addbtn,0" type="button"><i class="icon-plus"></i></button></h4>
<div style="border-bottom:1px #cccccc solid"></div>
<div class="wrap" id="modelist_{rand}"></div>
<h4>包含数据库&nbsp;<button class="btn btn-default btn-xs" click="addbtn,1" type="button"><i class="icon-plus"></i></button></h4>
<div style="border-bottom:1px #cccccc solid"></div>
<div class="wrap" id="tablelist_{rand}"></div>
<h4>包含的文件&nbsp;<button class="btn btn-default btn-xs" click="addbtn,2" type="button"><i class="icon-plus"></i></button></h4>
<div style="border-bottom:1px #cccccc solid"></div>
<div class="wrap" id="filelist_{rand}"></div>
<h4>包含的菜单&nbsp;<button class="btn btn-default btn-xs" click="addbtn,3" type="button"><i class="icon-plus"></i></button></h4>
<div style="border-bottom:1px #cccccc solid"></div>
<div class="wrap" id="menulist_{rand}"></div>
<h4>包含的应用&nbsp;<button class="btn btn-default btn-xs" click="addbtn,4" type="button"><i class="icon-plus"></i></button></h4>
<div style="border-bottom:1px #cccccc solid"></div>
<div class="wrap" id="agentlist_{rand}"></div>
<div class="blank10"></div>
<div >
<button class="btn btn-success" click="save" type="button">生成打包</button>&nbsp;<span id="msgview_{rand}"></span>
</div>
</div>
</div>

View File

@@ -0,0 +1,201 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var bools=false,modeid=0,moders={};
if(params.mid)modeid=params.mid;
var a = $('#view_{rand}').bootstable({
tablename:'flow_element',celleditor:true,
params:{mid:modeid},
url:publicstore('{mode}','{dir}'),storeafteraction:'elementafter',storebeforeaction:'elementbefore',
columns:[{
text:'名称',dataIndex:'name',editor:true
},{
text:'对应字段',dataIndex:'fields'
},{
text:'分类',dataIndex:'iszb',renderer:function(v,d){
var s='<font color=#ff6600>主表</font>';
if(v>0)s='第'+d.iszb+'个子表';
return s;
}
},{
text:'元素类型,<a target="_blank" href="<?=URLY?>view_element.html">说明</a>',dataIndex:'fieldstype'
},{
text:'默认值',dataIndex:'dev',editor:true
},{
text:'分组',dataIndex:'ftype',editor:true
},{
text:'排序号',dataIndex:'sort',editor:true,sortable:true
},{
text:'录入列',dataIndex:'islu',type:'checkbox',editor:true,editorbefore:function(d){
if(d.islu=='0'){js.msg('msg','打开录入项需要用编辑');return false;}else{return true;}
}
},{
text:'必填',dataIndex:'isbt',type:'checkbox',editor:true
},{
text:'展示',dataIndex:'iszs',type:'checkbox',editor:true
},{
text:'列表列',dataIndex:'islb',type:'checkbox',editor:true
},{
text:'列排序',dataIndex:'ispx',type:'checkbox',editor:true
},{
text:'可搜索',dataIndex:'issou',type:'checkbox',editor:true
},{
text:'可统计',dataIndex:'istj',type:'checkbox',editor:true
},{
text:'唯一值',dataIndex:'isonly',type:'checkbox',editor:true
},{
text:'可导入',dataIndex:'isdr',type:'checkbox',editor:true
},{
text:'对齐',dataIndex:'isalign',type:'select',editor:true,renderer:function(v,d){
var s='<font color="#888888">居中</font>';
if(v==1)s='<font color="#ff6600">居左</font>';
if(v==2)s='居右';
return s;
},store:js.arraystr('0|居中,1|居左,2|居右')
}],
itemclick:function(d){
btn(false, d);
},
beforeload:function(){
btn(true);
},
load:function(a){
if(!bools){
var s = '<option value="0">-选择模块-</option>',len=a.flowarr.length,i,csd,types='';
for(i=0;i<len;i++){
csd = a.flowarr[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;
}
s+='</optgroup>';
$('#mode_{rand}').html(s);
if(modeid>0){
get('mode_{rand}').value=modeid;
btnsss(false);
}
}
bools=true;
if(!a.moders)return;
moders = a.moders;
if(typeof(zzzfieldsarr)=='undefined')zzzfieldsarr={};
zzzfieldsarr[moders.table] = a.fieldsarr;
fieldstypearr = a.fieldstypearr;
}
});
function btn(bo, d){
get('edit_{rand}').disabled = bo;
get('del_{rand}').disabled = bo;
}
function btnsss(bo){
get('add_{rand}').disabled = bo;
get('lu_{rand}').disabled = bo;
get('lum_{rand}').disabled = bo;
get('luc_{rand}').disabled = bo;
get('luz_{rand}').disabled = bo;
get('luzz_{rand}').disabled = bo;
get('luzs_{rand}').disabled = bo;
get('changelieb_{rand}').disabled = bo;
}
var c = {
del:function(){
a.del();
},
reload:function(){
a.reload();
},
clickwin:function(o1,lx){
if(modeid==0)return;
var icon='plus',name='新增['+moders.name+']的元素',id=0;
if(lx==1){
id = a.changeid;
icon='edit';
name='编辑['+moders.name+']的元素';
};
guanelementedit = a;
addtabs({num:'flowelement'+id+'',url:'main,flow,elementedit,id='+id+',mid='+modeid+',table='+moders.table+'',icons:icon,name:name});
},
changemode:function(){
modeid=this.value;
a.setparams({mid:modeid},true);
var bo = (modeid==0);
btnsss(bo);
},
//录入
lulu:function(o1,lx){
if(lx==1){
var url = js.getajaxurl('@lum','input','flow',{num:moders.num});
js.open(url, 380,500);
}else{
var url = js.getajaxurl('@lu','input','flow',{num:moders.num});
js.open(url, 800,450);
}
},
inputs:function(o1,lx){
var url='?m=flow&d=main&a=input&setid='+moders.id+'&atype=0';
js.open(url,980,530);
},
zhanshi:function(o1,lx){
var url='?m=flow&d=main&a=inputzs&setid='+moders.id+'&atype='+lx+'';
js.open(url,980,530);
},
rexuhao:function(){
if(modeid==0)return;
js.ajax(js.getajaxurl('rexuhao','{mode}','{dir}'),{modeid:modeid},function(){
a.reload();
},'get','','刷新中...,刷新成功');
},
changelieb:function(){
if(modeid==0)return;
js.ajax(js.getajaxurl('changelieb','{mode}','{dir}'),{modeid:modeid},function(s){
js.msg('success','生成成功路径:'+s+'');
},'get','','生成中...,生成成功');
}
};
js.initbtn(c);
$('#mode_{rand}').change(c.changemode);
get('add_{rand}').disabled = (modeid==0);
});
</script>
<div>
<table width="100%">
<tr>
<td align="left">
<select id="mode_{rand}" style="width:180px" class="form-control" ><option value="0">-选择模块-</option></select>
</td>
<td align="left" style="padding-left:10px;">
<button class="btn btn-default" click="reload" type="button">刷新</button>
</td>
<td width="80%" align="left" nowrap style="padding-left:10px;">
<div class="btn-group">
<button class="btn btn-default" id="luc_{rand}" disabled click="inputs,0" type="button">PC端录入页布局</button>
<button class="btn btn-default" id="luz_{rand}" disabled click="zhanshi,0" type="button">PC端展示</button>
<button class="btn btn-default" id="luzz_{rand}" disabled click="zhanshi,1" type="button">手机展示</button>
<button class="btn btn-default" id="luzs_{rand}" disabled click="zhanshi,2" type="button">打印布局</button>
<button class="btn btn-default" id="lu_{rand}" disabled click="lulu,0" type="button">PC录入页</button>
<button class="btn btn-default" id="lum_{rand}" disabled click="lulu,1" type="button">手机录入页</button>
<button class="btn btn-default" id="changelieb_{rand}" disabled click="changelieb" type="button">生成列表页</button>
</div>
</td>
<td align="right" nowrap>
<button class="btn btn-default" click="rexuhao" type="button">刷新序号</button>&nbsp;
<button class="btn btn-warning" id="add_{rand}" disabled click="clickwin,0" type="button">新增</button>&nbsp;
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button">编辑</button>&nbsp;
<button class="btn btn-danger" click="del" disabled id="del_{rand}" type="button">删除</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">
1、PC端录入页布局设置电脑PC端录入页面的布局的。<br>
2、PC端展示设置电脑PC端单据详情页面展示的样子。<br>
3、手机展示设置手机上单据详情页面展示的样子。<br>
</div>

View File

@@ -0,0 +1,195 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var id = params.id,mid=params.mid;
if(!id)id = 0;
var h = $.bootsform({
window:false,rand:'{rand}',tablename:'flow_element',
url:publicsave('{mode}','{dir}'),
params:{otherfields:'mid='+mid+''},
submitfields:'name,fields,fieldstype,xiaoshu,dev,savewhere,placeholder,sort,istj,ispx,isalign,issou,islu,islb,isbt,iszs,data,iszb,attr,lens,gongsi,isonly,isdr',
requiredfields:'name,fields,fieldstype,lens',aftersaveaction:'elemensavefields',beforesaveaction:'elemensavefieldsbefore',
success:function(){
closenowtabs();
try{guanelementedit.reload();}catch(e){}
},
submitcheck:function(d){
if(d.fieldstype.indexOf('change')==0){
if(d.data=='')return '此字段元素类型时数据源必须填写用来存储选择来的Id如填写为'+d.fields+'id';
}
if(d.islu=='1' && d.fields=='id')return 'id字段是不可以做录入项字段';
}
});
h.forminit();
var farr = zzzfieldsarr[params.table];
js.setselectdata(h.form.fieldss,farr,'id');
js.setselectdata(h.form.fieldstype,fieldstypearr,'value');
if(id>0){
var d=guanelementedit.changedata;
h.setValues(d);
h.form.fieldss.value=d.fields;
}
$(h.form.fieldss).change(function(){
h.form.fields.value=this.value;
var txt = this.options[this.selectedIndex].text;
var as1 = txt.split(']');if(as1[1])h.form.name.value=as1[1];
});
$(h.form.fields).blur(function(){
var val = this.value;
val = val.replace(/[^a-zA-Z0-9+\_]/gi,'');
this.value = strreplace(val);
});
$(h.form.fieldstype).change(function(){
var val = this.value;
c.changetype();
});
blursehs{rand}=function(o1){
o1.value = o1.value.replace('select ','[SQL]');
}
var c = {
xuanchang:function(){
var val = h.form.fieldstype.value;
if(val.indexOf('change')==0){
var cans1 = {
idobj:h.form.gongsi,
type:'deptusercheck',
title:'选择范围'
};
js.getuser(cans1);
}else{
js.msg('msg','元素类型不是选择人员部门的');
}
},
changetype:function(){
var val = h.form.fieldstype.value;
if(val=='number'){
$('#div_number{rand}').show();
}else{
$('#div_number{rand}').hide();
}
}
};
js.initbtn(c);
if(id>0){
c.changetype();
}
});
</script>
<div align="center">
<div style="padding:10px;width:700px">
<form name="form_{rand}" autocomplete="off">
<input name="id" value="0" type="hidden" />
<table cellspacing="0" border="0" width="100%" align="center" cellpadding="0">
<tr>
<td align="right" ><font color=red>*</font> 名称:</td>
<td class="tdinput"><input name="name" class="form-control"></td>
</tr>
<tr>
<td align="right" ><font color=red>*</font> 对应字段:</td>
<td class="tdinput" colspan="3">
<table><tr>
<td width="220"><input name="fields" class="form-control"></td>
<td width="220"><select name="fieldss" class="form-control"><option value="">-字段-</option></select></td>
</tr></table>
</td>
</tr>
<tr>
<td align="right" width="15%" nowrap ><font color=red>*</font> <a target="_blank" href="<?=URLY?>view_element.html">?字段元素类型</a></td>
<td width="35%" class="tdinput"><select name="fieldstype" class="form-control"><option value="">-字段-</option></select>
<div id="div_number{rand}" style="display:none">小数点位数:<input type="text" onfocus="js.focusval=this.value" onblur="js.number(this)" min="0" max="6" name="xiaoshu" class="input" style="width:60px" value="0"></div>
</td>
<td width="15%" align="right" nowrap>默认值:<br><a target="_blank" href="<?=URLY?>view_xinhudev.html">看帮助</a>&nbsp;&nbsp;</td>
<td width="35%" class="tdinput"><input name="dev" placeholder="不会设置?看帮助吧" class="form-control"></td>
</tr>
<tr>
<td align="right">字段分类:</td>
<td class="tdinput"><select name="iszb" class="form-control"><option value="0">主表字段</option><option value="1">第1个多行子表字段</option><option value="2">第2个多行子表字段</option><option value="3">第3个多行子表字段</option><option value="4">第4个多行子表字段</option><option value="5">第5个多行子表字段</option><option value="6">第6个多行子表字段</option><option value="7">第7个多行子表字段</option><option value="8">第8个多行子表字段</option><option value="9">第9个多行子表字段</option>
<option value="10">第10个多行子表字段</option>
<option value="11">第11个多行子表字段</option>
<option value="12">第12个多行子表字段</option>
<option value="13">第13个多行子表字段</option>
<option value="14">第14个多行子表字段</option>
<option value="15">第15个多行子表字段</option>
<option value="16">第16个多行子表字段</option>
<option value="17">第17个多行子表字段</option>
<option value="18">第18个多行子表字段</option>
<option value="19">第19个多行子表字段</option>
<option value="20">第20个多行子表字段</option>
<option value="21">用到20多个子表真厉害建议拆分多个模块</option>
</select></td>
<td align="right">字段长度:</td>
<td class="tdinput"><input name="lens" value="0" maxlength="4" type="number" onfocus="js.focusval=this.value" onblur="js.number(this)" class="form-control"></td>
</tr>
<tr>
<td align="right">数据源:<br><a target="_blank" href="<?=URLY?>view_element.html">看帮助</a>&nbsp;&nbsp;</td>
<td class="tdinput" colspan="3"><textarea placeholder="数据选项编号,自定义方法等" name="data" style="height:60px" onblur="blursehs{rand}(this)" class="form-control"></textarea></td>
</tr>
<tr>
<td align="right">属性:</td>
<td class="tdinput" colspan="3"><input name="attr" placeholder="如果只读填写readonly" class="form-control"></td>
</tr>
<tr>
<td align="right">提示内容:</td>
<td class="tdinput" colspan="3"><input name="placeholder" placeholder="" class="form-control"></td>
</tr>
<tr>
<td align="right">计算公式:</td>
<td class="tdinput" colspan="3"><textarea name="gongsi" style="height:60px" class="form-control"></textarea><font color=#888888>如:{price}*{shu},更多公式详见<a target="_blank" href="<?=URLY?>view_gongsi.html">[帮助]</a>哦,字段元素类型为选择人员部门时这个可以设置要<a href="javascript:;" click="xuanchang">选择范围</a>。</font></td>
</tr>
<tr>
<td align="right">保存条件:</td>
<td class="tdinput" colspan="3"><textarea name="savewhere" style="height:60px" class="form-control"></textarea><font color=#888888>如截止时间比较大于开始gt|{startdt}|提示,多个,分开。符号说明gt大于egt大于等于lt小于elt小于等于eg等于neg不等于{now}当前时间,{date}当前日期</font></td>
</tr>
<tr>
<td align="right">排序号:</td>
<td class="tdinput"><input name="sort" value="0" maxlength="3" type="number" onfocus="js.focusval=this.value" onblur="js.number(this)" class="form-control"></td>
<td align="right">对齐方式:</td>
<td class="tdinput"><select name="isalign" class="form-control"><option value="0">居中</option><option value="1">居左</option><option value="2">居右</option></select></td>
</tr>
<tr>
<td align="right" ></td>
<td class="tdinput" colspan="3">
<label><input name="islu" value="1" checked type="checkbox"> 录入列?</label>&nbsp; &nbsp;
<label><input name="isbt" value="1" checked type="checkbox"> 是否必填</label>&nbsp; &nbsp;
<label><input name="iszs" value="1" checked type="checkbox"> 展示列</label>&nbsp; &nbsp;
<label><input name="islb" value="1" checked type="checkbox"> 列表列</label>&nbsp; &nbsp;
<label><input name="ispx" value="0" type="checkbox"> 列表列排序</label>&nbsp; &nbsp;
<label><input name="issou" value="0" type="checkbox"> 可搜索筛选</label>&nbsp; &nbsp;
<label><input name="istj" value="0" type="checkbox"> 可统计</label>&nbsp; &nbsp;
<label><input name="isonly" value="0" type="checkbox"> 唯一值</label>&nbsp; &nbsp;
<label><input name="isdr" value="0" type="checkbox"> 导入字段</label>&nbsp; &nbsp;
</td>
</tr>
<tr>
<td align="right"></td>
<td style="padding:15px 0px" colspan="3" align="left"><button disabled class="btn btn-success" id="save_{rand}" type="button"><i class="icon-save"></i>&nbsp;保存</button>&nbsp; <span id="msgview_{rand}"></span>
</td>
</tr>
</table>
</form>
</div>
</div>

View File

@@ -0,0 +1,114 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var a = $('#view_{rand}').bootstable({
tablename:'flow_bill',celleditor:true,fanye:true,statuschange:false,
url:publicstore('fwork','{dir}'),params:{atype:'error'},storebeforeaction:'flowbillbefore',storeafteraction:'flowbillafter',
columns:[{
text:'模块',dataIndex:'modename'
},{
text:'部门',dataIndex:'deptname'
},{
text:'申请人',dataIndex:'name'
},{
text:'单号',dataIndex:'sericnum'
},{
text:'申请日期',dataIndex:'applydt',sortable:true
},{
text:'摘要',dataIndex:'summary',align:'left',width:300
},{
text:'状态',dataIndex:'status',sortable:true
},{
text:'异常原因',dataIndex:'errorsm'
},{
text:'处理方法',dataIndex:'chuli',align:'left'
},{
text:'处理',dataIndex:'chulis',renderer:function(v,d,i){
if(d.errtype==1){
v='<button type="button" onclick="biaoshiyw{rand}('+i+',1)" class="btn btn-success btn-xs">标识已审核</button>';
v+='<br><button type="button" onclick="biaoshiyw{rand}('+i+',2)" class="btn btn-danger btn-xs">退回提交人</button>';
}
return v;
}
}],
itemclick:function(d){
btn(false, d);
},
beforeload:function(){
btn(true);
},
celldblclick:function(){
c.view();
}
});
function btn(bo, d){
get('edit_{rand}').disabled = bo;
get('del_{rand}').disabled = bo;
}
biaoshiyw{rand}=function(i,lx){
c.biaowanc(i,lx);
}
var c = {
view:function(){
var d=a.changedata;
openxiangs(d.modename,d.modenum,d.id);
},
pipei:function(){
js.ajax(js.getajaxurl('reloadpipei','{mode}','{dir}'),{},function(s){
js.msg('success', s);
a.reload();
},'get',false,'匹配中...,匹配完成');
},
biaowanc:function(i,lx){
var d= a.getData(i);
var sm='确定要标识已完成/已审核的单据状态吗';
if(lx==2)sm='确定要退回给提交人让他重新提交吗';
js.prompt('异常标识说明',''+sm+'?请输入说明:',function(jg, text){
if(jg=='yes'){
d.sm = text;
c.biaowancss(d,lx);
}
});
},
biaowancss:function(d,lx){
js.ajax(js.getajaxurl('oksuccess','flowopt','flow'),{modenum:d.modenum,mid:d.id,sm:d.sm,lx:lx},function(s){
if(s=='ok'){
a.reload();
}else{
js.msg('msg', s);
}
},'post',false,'标识中...,标识成功');
},
del:function(){
a.del({
url:js.getajaxurl('delmodeshuju','{mode}','{dir}'),
params:{modenum:a.changedata.modenum,mid:a.changeid}
});
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td nowrap align="left">
<button class="btn btn-default" click="pipei" type="button">重新匹配流程</button>&nbsp;
</td>
<td align="left" width="100%" style="padding:0px 10px;">
<div class="tishi">如有异常的记录请点击[重新匹配流程],如出现无法解决,查看<a target="_blank" href="<?=URLY?>view_danerror.html">帮助</a>。<div>
</td>
<td align="right" nowrap>
<button class="btn btn-default" id="edit_{rand}" click="view" disabled type="button">查看</button>&nbsp;
<button class="btn btn-danger" click="del" disabled id="del_{rand}" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,117 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var num = params.num,mid,modeid=0,bools=false;
function btn(bo){
get('edit_{rand}').disabled = bo;
get('del_{rand}').disabled = bo;
}
var a = $('#view_{rand}').bootstable({
tablename:'flow_menu',celleditor:true,sort:'sort',dir:'asc',url:publicstore('{mode}','{dir}'),
storeafteraction:'flowmenuafter',params:{'mid':-1},storebeforeaction:'flowmenubefore',
columns:[{
text:'类型',dataIndex:'type'
},{
text:'编号',dataIndex:'num',editor:true
},{
text:'显示名称',dataIndex:'name',editor:true
},{
text:'动作名',dataIndex:'actname',editor:true
},{
text:'状态名',dataIndex:'statusname',editor:true
},{
text:'状态值',dataIndex:'statusvalue',editor:true
},{
text:'状态颜色',dataIndex:'statuscolor',editor:true
},{
text:'说明',dataIndex:'explain',editor:true
},{
text:'排序号',dataIndex:'sort',editor:true
},{
text:'状态',dataIndex:'status',type:'checkbox',editor:true,sortable:true
},{
text:'写入日志',dataIndex:'islog',type:'checkbox',editor:true,sortable:true
},{
text:'写说明',dataIndex:'issm',type:'checkbox',editor:true,sortable:true
},{
text:'显示在详情页',dataIndex:'iszs',type:'checkbox',editor:true,sortable:true
},{
text:'ID',dataIndex:'id'
}],
load:function(a){
if(!bools){
var s = '<option value="0">-选择模块-</option>',len=a.flowarr.length,i,csd,types='';
for(i=0;i<len;i++){
csd = a.flowarr[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);
}
bools=true;
},
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
}
});
var c = {
reload:function(){
a.reload();
},
del:function(){
a.del();
},
clickwin:function(o1,lx){
var icon='plus',name='新增操作菜单',id=0;
if(lx==1){
id = a.changeid;
icon='edit';
name='编辑操作菜单';
};
guanflowmenulist = a;
addtabs({num:'flowmenu'+id+'',url:'main,flow,menuedit,id='+id+',setid='+modeid+',',icons:icon,name:name});
},
changemode:function(){
modeid=this.value;
a.setparams({mid:modeid},true);
var bo = (modeid==0);
get('add_{rand}').disabled = bo;
}
};
js.initbtn(c);
$('#mode_{rand}').change(c.changemode);
});
</script>
<table width="100%">
<tr>
<td align="left">
<button class="btn btn-primary" click="clickwin,0" disabled id="add_{rand}" type="button"><i class="icon-plus"></i> 新增操作菜单</button>
</td>
<td style="padding-left:10px;">
<button class="btn btn-default" click="reload" type="button">刷新</button>
</td>
<td style="padding-left:10px;">
<select style="width:200px" id="mode_{rand}" class="form-control" ><option value="0">-选择模块-</option></select>
</td>
<td width="80%"></td>
<td align="right" nowrap>
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button> &nbsp;
<button class="btn btn-danger" id="del_{rand}" disabled click="del" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr>
</table>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">此功能设置的是对应单据操作菜单如pc桌面版客户端打开应用显示数据右键显示操作菜单的。</div>

View File

@@ -0,0 +1,148 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var id = params.id,mid=params.setid;
if(!id)id = 0;
var h = $.bootsform({
window:false,rand:'{rand}',tablename:'flow_menu',
url:publicsave('{mode}','{dir}'),
params:{otherfields:'setid='+mid+''},
submitfields:'name,statusname,statuscolor,type,statusvalue,actname,wherestr,upgcont,explain,status,num,iszs,issm,islog,fields',
requiredfields:'name',beforesaveaction:'flowmenusave_before',
success:function(){
closenowtabs();
try{guanflowmenulist.reload();}catch(e){}
},
submitcheck:function(d){
if(d.type==7 && !d.upgcont)return '请在更新内容上写对应方法名';
if(d.type==5 && !d.upgcont)return '请在更新内容上写打开地址';
return {
wherestr:jm.base64encode(d.wherestr),
upgcont:jm.base64encode(d.upgcont),
}
}
});
h.forminit();
if(id>0){
var d=guanflowmenulist.changedata;
h.setValues(d);
if(!isempt(d.wherestr)){
h.setValue('wherestr',jm.base64decode(d.wherestr));
}
if(!isempt(d.upgcont)){
h.setValue('upgcont',jm.base64decode(d.upgcont));
}
}
});
</script>
<div align="center">
<div style="padding:10px;width:600px">
<form name="form_{rand}">
<input name="id" value="0" type="hidden" />
<table cellspacing="0" border="0" width="100%" align="center" cellpadding="0">
<tr>
<td align="right" >编号:</td>
<td class="tdinput"><input name="num" maxlength="20" onblur="this.value=strreplace(this.value)" class="form-control"></td>
</tr>
<tr>
<td align="right" >类型:</td>
<td class="tdinput"><select name="type" class="form-control"><option value="1">弹出填写说明</option><option value="0">直接操作</option><option value="2">人员选择(单人)</option><option value="3">人员选择(多人)</option><option value="6">人员选择(多选部门人员组)</option><option value="4">更新字段</option><option value="5">打开新窗口</option><option value="7">自定义方法(需开发)</option></select></td>
<td align="right" >字段名称:</td>
<td class="tdinput"><input name="fields" class="form-control"></td>
</tr>
<tr>
<td align="right" ><font color=red>*</font> 显示名称:</td>
<td class="tdinput"><input name="name" maxlength="20" onblur="this.value=strreplace(this.value)" class="form-control"></td>
<td align="right" >动作名称:</td>
<td class="tdinput"><input name="actname" maxlength="20" onblur="this.value=strreplace(this.value)" class="form-control"></td>
</tr>
<tr>
<td align="right" width="15%" nowrap >状态名称:</td>
<td width="35%" class="tdinput"><input maxlength="20" onblur="this.value=strreplace(this.value)" name="statusname" class="form-control"></td>
<td width="15%" align="right" nowrap>对应状态值:</td>
<td width="35%" class="tdinput"><select name="statusvalue" class="form-control"><option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option></select></td>
</tr>
<tr>
<td align="right">状态名颜色:</td>
<td class="tdinput">
<select name="statuscolor" class="form-control"><option value="">-无-</option>
<option style="background-color:red" value="red">red</option>
<option style="background-color:green" value="green">green</option>
<option style="background-color:blue" value="blue">blue</option>
<option style="background-color:magenta" value="magenta">magenta</option>
<option style="background-color:yellow" value="yellow">yellow</option>
<option style="background-color:chocolate" value="chocolate">chocolate</option>
<option style="background-color:gray" value="gray">gray</option>
<option style="background-color:aquamarine" value="aquamarine">aquamarine</option>
<option style="background-color:fuchsia" value="fuchsia">fuchsia</option>
<option style="background-color:brass" value="brass">brass</option>
<option style="background-color:brown" value="brown">brown</option>
<option style="background-color:deeppink" value="deeppink">deeppink</option>
<option style="background-color:copper" value="copper">copper</option>
<option style="background-color:orange" value="orange">orange</option>
</select>
</td>
<td align="right">排序号:</td>
<td class="tdinput"><input name="sort" value="0" maxlength="3" type="number" onfocus="js.focusval=this.value" onblur="js.number(this)" class="form-control"></td>
</tr>
<tr>
<td align="right">条件:</td>
<td class="tdinput" colspan="3"><textarea name="wherestr" style="height:60px" class="form-control"></textarea><font color=#888888>为空或者条件满足时显示菜单</font></td>
</tr>
<tr>
<td align="right" id="upcont_{rand}">更新内容:</td>
<td class="tdinput" colspan="3"><textarea name="upgcont" style="height:60px" class="form-control"></textarea><font color=#888888>当触发时同时更新对应记录为这个内容,{cname}选择的人,{cnameid}选择人id,{uid}当前用户id当类型是[打开新窗口]时这里填写Url地址如:add|work|def_projectid={id},也就是:新增|模块编号|默认参数</font></td>
</tr>
<tr>
<td align="right">说明:</td>
<td class="tdinput" colspan="3"><textarea name="explain" style="height:60px" class="form-control"></textarea></td>
</tr>
<tr>
<td align="right" ></td>
<td class="tdinput" colspan="3">
<label><input name="status" value="1" checked type="checkbox"> 启用</label>&nbsp; &nbsp;
<label><input name="islog" value="1" checked type="checkbox"> 写入日志</label>&nbsp; &nbsp;
<label><input name="issm" value="1" checked type="checkbox"> 必须填写说明</label>&nbsp; &nbsp;
<label><input name="iszs" value="1" type="checkbox"> 显示在详情页</label>&nbsp; &nbsp;
</td>
</tr>
<tr>
<td align="right"></td>
<td style="padding:15px 0px" colspan="3" align="left"><button disabled class="btn btn-success" id="save_{rand}" type="button"><i class="icon-save"></i>&nbsp;保存</button>&nbsp; <span id="msgview_{rand}"></span>
</td>
</tr>
</table>
</form>
</div>
</div>

View File

@@ -0,0 +1,128 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var bools=false,modeid=0,moders={};
if(params.mid)modeid=params.mid;
var a = $('#view_{rand}').bootstable({
tablename:'flow_modetpl',celleditor:true,
params:{mid:modeid},
url:publicstore('{mode}','{dir}'),storeafteraction:'modetpl_after',storebeforeaction:'modetpl_before',
columns:[{
text:'模版名称',dataIndex:'tplname',editor:true
},{
text:'模版编号',dataIndex:'tplnum'
},{
text:'适用对象',dataIndex:'recename'
},{
text:'说明',dataIndex:'explain',editor:true,type:'textarea'
},{
text:'排序号',dataIndex:'sort',editor:true,type:'number'
},{
text:'状态',dataIndex:'status',editor:true,type:'checkbox'
}],
itemclick:function(d){
btn(false, d);
},
beforeload:function(){
btn(true);
},
load:function(a){
if(!bools){
var s = '<option value="0">-选择模块-</option>',len=a.flowarr.length,i,csd,types='';
for(i=0;i<len;i++){
csd = a.flowarr[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;
}
s+='</optgroup>';
$('#mode_{rand}').html(s);
if(modeid>0){
get('mode_{rand}').value=modeid;
btnsss(false);
}
}
bools=true;
if(!a.moders)return;
moders = a.moders;
}
});
function btn(bo, d){
get('edit_{rand}').disabled = bo;
get('del_{rand}').disabled = bo;
}
function btnsss(bo){
get('add_{rand}').disabled = bo;
//get('lu_{rand}').disabled = bo;
//get('lum_{rand}').disabled = bo;
//get('luc_{rand}').disabled = bo;
//get('luz_{rand}').disabled = bo;
//get('luzz_{rand}').disabled = bo;
//get('luzs_{rand}').disabled = bo;
}
var c = {
del:function(){
a.del();
},
reload:function(){
a.reload();
},
changemode:function(){
modeid=this.value;
a.setparams({mid:modeid},true);
var bo = (modeid==0);
btnsss(bo);
},
clickwin:function(o1,lx){
if(modeid==0)return;
var icon='plus',name='新增模块多模版',id=0;
if(lx==1){
id = a.changeid;
icon='edit';
name='编辑模块多模版';
};
guanmodetpledit = a;
addtabs({num:'modetpledit'+id+'',url:'main,flow,modetpledit,id='+id+',mid='+modeid+'',icons:icon,name:name});
}
};
js.initbtn(c);
$('#mode_{rand}').change(c.changemode);
get('add_{rand}').disabled = (modeid==0);
});
</script>
<div>
<table width="100%">
<tr>
<td align="left">
<select id="mode_{rand}" style="width:180px" class="form-control" ><option value="0">-选择模块-</option></select>
</td>
<td align="left" style="padding-left:10px;">
<button class="btn btn-default" click="reload" type="button">刷新</button>
</td>
<td width="80%" align="left" nowrap style="padding-left:10px;">
<div class="btn-group">
<button class="btn btn-default" id="luc_{rand}" disabled click="inputs,0" type="button">PC端录入页布局</button>
<button class="btn btn-default" id="luz_{rand}" disabled click="zhanshi,0" type="button">PC端展示</button>
<button class="btn btn-default" id="luzz_{rand}" disabled click="zhanshi,1" type="button">手机展示</button>
<button class="btn btn-default" id="luzs_{rand}" disabled click="zhanshi,2" type="button">打印布局</button>
<button class="btn btn-default" id="lu_{rand}" disabled click="lulu,0" type="button">PC录入页</button>
<button class="btn btn-default" id="lum_{rand}" disabled click="lulu,1" type="button">手机录入页</button>
</div>
</td>
<td align="right" nowrap>
<button class="btn btn-warning" id="add_{rand}" disabled click="clickwin,0" type="button">新增</button>&nbsp;
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button">编辑</button>&nbsp;
<button class="btn btn-danger" click="del" disabled id="del_{rand}" type="button">删除</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">此功能暂未开发,[流程模块列表]对应模块需要开启支持多模版,才会在这里显示!</div>

View File

@@ -0,0 +1,135 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var id = params.id,mid=params.mid;
if(!id)id = 0;
var h = $.bootsform({
window:false,rand:'{rand}',tablename:'flow_modetpl',
url:publicsave('{mode}','{dir}'),
params:{otherfields:'setid='+mid+''},
submitfields:'tplname,tplnum,sort,explain,status,recename,receid,fieldsluru,fieldsbitian',
requiredfields:'tplname,tplnum',aftersaveaction:'modetpl_savefieldsafter',beforesaveaction:'modetpl_savefieldsbefore',
success:function(){
closenowtabs();
try{guanmodetpledit.reload();}catch(e){}
},
submitcheck:function(d){
}
});
h.forminit();
var a = $('#viewzd{rand}').bootstable({
tablename:'flow_element',celleditor:true,
params:{mid:mid,sid:id},
url:publicstore('{mode}','{dir}'),storeafteraction:'modetpledit_after',storebeforeaction:'modetpledit_before',
columns:[{
text:'名称',dataIndex:'name'
},{
text:'字段',dataIndex:'fields'
},{
text:'类型',dataIndex:'fieldstype'
},{
text:'默认值',dataIndex:'dev'
},{
text:'录入项',dataIndex:'islu',renderer:function(v,d){
var ceck = (v=='1')? 'checked' : '';
return '<input type="checkbox" '+ceck+' value="'+d.fields+'" name="fieldsluru[]">';
}
},{
text:'必填',dataIndex:'isbt',renderer:function(v,d){
var ceck = (v=='1')? 'checked' : '';
return '<input type="checkbox" '+ceck+' value="'+d.fields+'" name="fieldsbitian[]">';
}
}],
load:function(a){
if(a.data){
h.setValues(a.data);
}
}
});
var c = {
getdist:function(o1, lx){
var cans = {
nameobj:h.form.recename,
idobj:h.form.receid,
type:'deptusercheck',
title:'选择针对人员'
};
js.getuser(cans);
},
allqt:function(){
h.form.recename.value='全体人员';
h.form.receid.value='';
}
};
js.initbtn(c);
});
</script>
<div align="center">
<div style="padding:10px;width:750px">
<form name="form_{rand}">
<input name="id" value="0" type="hidden" />
<table cellspacing="0" border="0" width="100%" align="center" cellpadding="0">
<tr>
<td align="right" ><font color=red>*</font> 模版名称:</td>
<td class="tdinput"><input name="tplname" class="form-control"></td>
<td align="right" ><font color=red>*</font> 模版编号:</td>
<td class="tdinput"><input name="tplnum" class="form-control"></td>
</tr>
<tr>
<td align="right" >适用对象:</td>
<td class="tdinput" colspan="3">
<div class="input-group" style="width:100%">
<input readonly class="form-control" name="recename" >
<input type="hidden" name="receid" >
<span class="input-group-btn">
<button class="btn btn-default" click="allqt" type="button">全体人员</button>
<button class="btn btn-default" click="getdist,1" type="button"><i class="icon-search"></i></button>
</span>
</div>
</td>
</tr>
<tr>
<td align="right" >说明:</td>
<td class="tdinput" colspan="3"><textarea name="explain" style="height:60px" class="form-control"></textarea></td>
</tr>
<tr>
<td align="right">排序号:</td>
<td class="tdinput"><input name="sort" value="0" maxlength="3" type="number" onfocus="js.focusval=this.value" onblur="js.number(this)" class="form-control"></td>
<td align="right"></td>
<td class="tdinput"><label><input name="status" value="1" checked type="checkbox">启用</label>&nbsp; &nbsp; </td>
</tr>
<tr>
<td colspan="4" id="viewzd{rand}">
</td>
</tr>
<tr>
<td align="right"></td>
<td style="padding:15px 0px" colspan="3" align="left"><button disabled class="btn btn-success" id="save_{rand}" type="button"><i class="icon-save"></i>&nbsp;保存</button>&nbsp; <span id="msgview_{rand}"></span>
</td>
</tr>
</table>
</form>
</div>
</div>

View File

@@ -0,0 +1,260 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var qianss='';
var a = $('#view_{rand}').bootstable({
tablename:'flow_set',dir:'asc',sort:'sort',celleditor:true,checked:true,
url:publicstore('{mode}','{dir}'),fanye:true,pageSize:10,storeafteraction:'modeafter',storebeforeaction:'modebefore',
columns:[{
text:'类型',dataIndex:'type',sortable:true,editor:true
},{
text:'编号',dataIndex:'num'
},{
text:'模块名',dataIndex:'name'
},{
text:'对应表',dataIndex:'table'
},{
text:'排序号',dataIndex:'sort',editor:true,sortable:true
},{
text:'针对人员',dataIndex:'recename'
},{
text:'状态',dataIndex:'status',type:'checkbox',editor:true,sortable:true
},{
text:'流程模式',dataIndex:'isflow',sortable:true,renderer:function(v){
var s = '&nbsp;';
if(v=='1')s='顺序流程';
if(v=='2')s='顺序前置';
if(v=='3')s='自由流程';
if(v=='4')s='选择流程';
return s;
}
},{
text:'PC端提醒',dataIndex:'pctx',type:'checkbox',editor:true,sortable:true
},{
text:'邮件提醒',dataIndex:'emtx',type:'checkbox',editor:true,sortable:true
},{
text:'APP提醒',dataIndex:'mctx',type:'checkbox',editor:true,sortable:true
},{
text:'微信提醒',dataIndex:'wxtx',type:'checkbox',editor:true,sortable:true
},{
text:'钉钉提醒',dataIndex:'ddtx',type:'checkbox',editor:true,sortable:true
},{
text:'录入',dataIndex:'islu',type:'checkbox',editor:true,sortable:true
},{
text:'同步更新',dataIndex:'isup',type:'checkbox',editor:true,sortable:true
},{
text:'开评论',dataIndex:'ispl',type:'checkbox',editor:true,sortable:true
},{
text:'提醒设置',dataIndex:'istxset',type:'checkbox',editor:true,sortable:true
},{
text:'编号规则',dataIndex:'sericnum'
},{
text:'ID',dataIndex:'id'
}],
itemclick:function(d){
btn(false, d);
},
beforeload:function(){
btn(true);
},
load:function(d){
qianss=d.qian;
}
});
function btn(bo, d){
if(ISDEMO)return;
get('edit_{rand}').disabled = bo;
get('copy_{rand}').disabled = bo;
get('downbtn_{rand}').disabled = bo;
get('biaoge_{rand}').disabled = bo;
get('biaoges_{rand}').disabled = bo;
if(d && d.type=='系统')bo=true;
get('del_{rand}').disabled = bo;
}
var c = {
del:function(){
js.confirm('确定要删除选中模块吗?删除了所有数据就都没了,不能恢复的哦',function(jg){
if(jg=='yes')c.delss();
});
},
delss:function(){
if(a.changeid==0)return;
js.ajax(js.getajaxurl('delmode','{mode}','{dir}'),{id:a.changeid},function(s){
if(s=='ok'){
a.reload();
}else{
js.msg('msg',s);
}
},'post',false,'删除中...,删除成功');
},
allcreate:function(){
js.ajax(js.getajaxurl('allcreate','{mode}','{dir}'),{},function(s){
js.msg('success', s);
},'get',false,'生成中...');
},
copy:function(){
if(a.changeid==0)return;
js.prompt('输入新模块编号','将会从模块['+a.changedata.name+']复制主表子表和表单元素字段的!', function(jg,txt){
if(jg=='yes' && txt)c.copys(txt);
});
},
copys:function(txt){
if(a.changeid==0)return;
js.ajax(js.getajaxurl('copymode','{mode}','{dir}'),{id:a.changeid,name:txt},function(s){
if(s=='ok'){
a.reload();
}else{
js.msg('msg',s);
}
},'post',false,'复制中...,复制成功:还是要做其他很多事的,具体请到官网看模块开发视频。');
},
reload:function(){
a.reload();
},
clickwin:function(o1,lx){
var icon='plus',name='新增流程模块',id=0;
if(lx==1){
id = a.changeid;
icon='edit';
name='编辑流程模块';
};
guanflowsetlist = a;
addtabs({num:'flowset'+id+'',url:'main,flow,setedit,id='+id+'',icons:icon,name:name});
},
input:function(at){
var url='?m=flow&d=main&a=input&setid='+a.changeid+'&atype='+at+'';
js.open(url,900,500);
},
elements:function(){
var name='['+a.changedata.name+']表单元素';
var id = a.changeid;
addtabs({num:'flowelements'+id+'',url:'main,flow,element,mid='+id+'',name:name});
},
pipei:function(){
js.ajax(js.getajaxurl('reloadpipei','{mode}','{dir}'),{},function(s){
js.msg('success', s);
},'get',false,'匹配中...,匹配完成');
},
clearalldata:function(id){
js.confirm('确定要清空此['+a.changedata.name+']模块所有数据嘛?<b style="color:red">慎重慎重慎重慎重!</b>',function(ssal){
if(ssal=='yes')c.clearalldatas(id);
});
},
clearalldatas:function(id){
if(a.changeid==0)return;
js.ajax(js.getajaxurl('clearallmode','{mode}','{dir}'),{id:a.changeid},function(s){
if(s=='ok'){
a.reload();
}else{
js.msg('msg',s);
}
},'post',false,'清空中...,清空成功');
},
biaoge:function(){
this.showtalbe(a.changedata.table);
},
biaoges:function(){
var ssa = a.changedata.tables;
if(isempt(ssa)){
js.msg('success','没有子表无需管理');return;
}
this.showtalbe(ssa.split(',')[0]);
},
search:function(){
var s = get('key_{rand}').value;
a.setparams({key:s}, true);
},
showtalbe:function(table){
if(!table)return;
var name=''+qianss+''+table+'';
addtabs({num:'tablefields'+name+'',url:'system,table,fields,table='+name+'',name:'['+name+']字段管理'});
},
copyss:function(){
js.msg('msg','由于关联过多,无法复制');return;
js.prompt('输入新模块编号','输入模块编号和主表表名,只能用英文,不能用数字中文,随意写系统将出错:', function(jg,txt){
if(jg=='yes'){
c.copysss(txt);
}
});
},
copysss:function(txt){
js.ajax(js.getajaxurl('copymode','{mode}','{dir}'),{id:a.changeid,nmode:txt},function(s){
if(s=='ok'){
a.reload();
}else{
js.msg('msg',s);
}
},'post',false,'复制...,清空成功');
},
tongbu:function(){
var num=a.changedata.num;
js.prompt('从官网中拉取模块同步','输入要同步的模块编号如(gong):将会覆盖你模块设置。', function(jg,txt){
if(jg=='yes' && txt)c.tongbuss(txt);
},num);
},
tongbuss:function(nk){
js.loading('拉取同步中...');
},
shengsheng:function(){
var sid = a.getchecked();
addtabs({'name':'创建安装包',url:'main,flow,createinstall,sid='+jm.base64encode(sid)+'',num:'createinstall'});
}
};
js.initbtn(c);
$('#downbtn_{rand}').rockmenu({
width:170,top:35,donghua:false,
data:[{
name:'表单元素管理',lx:0
},{
name:'PC端录入页面布局',lx:1
},{
name:'清空此模块数据',lx:2
}],
itemsclick:function(d, i){
var id = a.changedata.id;
if(!id)return;
if(d.lx==1)c.input(0);
if(d.lx==0)c.elements();
if(d.lx==2)c.clearalldata(id);
}
});
});
</script>
<div>
<table width="100%">
<tr>
<td align="left" nowrap>
<button class="btn btn-warning" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增</button>&nbsp;
<button class="btn btn-primary" disabled id="downbtn_{rand}" type="button">模块开发管理 <i class="icon-angle-down"></i></button>&nbsp;
<button class="btn btn-default" click="pipei" type="button">重新匹配流程</button>&nbsp;
<button class="btn btn-default" id="biaoge_{rand}" disabled click="biaoge,1" type="button"><i class="icon-table"></i> 主表管理</button>&nbsp;
<button class="btn btn-default" id="biaoges_{rand}" disabled click="biaoges,1" type="button"><i class="icon-table"></i> 子表管理</button>&nbsp;
<button class="btn btn-default" click="allcreate" type="button">生成所有列表页</button>
</td>
<td align="left" style="padding:0px 10px;">
<div class="input-group" style="width:130px">
<input class="form-control" id="key_{rand}" placeholder="搜模块">
<span class="input-group-btn">
<button class="btn btn-default" click="search" type="button"><i class="icon-search"></i></button>
</span>
</div>
</td>
<td width="90%">
</td>
<td align="right" nowrap>
<button class="btn btn-default" click="shengsheng" type="button" style="<?php if(!getconfig('rockinzip'))echo 'display:none;'; ?>">生成安装包</button>&nbsp;
<button class="btn btn-default" id="copy_{rand}" click="copy,1" disabled type="button">复制</button>&nbsp;
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button>&nbsp;
<button class="btn btn-danger" click="del" disabled id="del_{rand}" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">提示对应表请使用数据库管理工具管理如phpMyadmin,Navicat等模块列表页面会生成到webmain/flow/page下<div>

View File

@@ -0,0 +1,250 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var id = params.id,arrlist;
if(!id)id = 0;
var h = $.bootsform({
window:false,rand:'{rand}',tablename:'flow_set',
url:publicsave('{mode}','{dir}'),url:publicsave('{mode}','{dir}'),
params:{otherfields:'optdt={now}'},aftersaveaction:'flowsetsaveafter',beforesaveaction:'flowsetsavebefore',
submitfields:'name,tables,type,num,table,sort,isscl,status,where,summary,summarx,pctx,mctx,wxtx,emtx,ddtx,isflow,sericnum,receid,recename,names,statusstr,isgbjl,ispl,ishz,isys,istxset,isup,isflowlx,isgbcy,isbxs,lbztxs,iscs,zfeitime,sortdir',
requiredfields:'name,type,num,table',
success:function(){
closenowtabs();
try{guanflowsetlist.reload();}catch(e){}
}
});
h.forminit();
h.load(js.getajaxurl('loaddata','{mode}','{dir}',{id:id}));
var c = {
getdist:function(o1, lx){
var cans = {
nameobj:h.form.recename,
idobj:h.form.receid,
type:'deptusercheck',
title:'选择针对人员'
};
js.getuser(cans);
},
allqt:function(){
h.form.recename.value='全体人员';
h.form.receid.value='all';
},
setstatus:function(){
var val = h.form.statusstr.value;
var sha = [],vala;
if(val)sha = val.split(',');
var str = '<table width="100%"><tr><td align="center" height="30" nowrap>状态值</td><td>状态名</td><td>状态颜色</td></tr>';
for(var i=0;i<=9;i++){
var na='',col='',naa;
if(sha[i]){
naa = sha[i].split('|');
na = naa[0];if(naa[1])col=naa[1];
}
str+='<tr><td width="20%" align="center">'+i+'</td><td width="40%"><input maxlength="10" value="'+na+'" id="abc_xtname'+i+'" style="color:'+col+'" class="form-control"></td><td width="40%"><input class="form-control" maxlength="7" style="color:'+col+'" value="'+col+'" id="abc_xtcol'+i+'"></td></tr>';
}
str+='</table>';
js.tanbody('sttts','设置状态值',400,300,{
html:'<div style="height:400px;overflow:auto;padding:5px">'+str+'</div>',
btn:[{text:'确定'}]
});
$('#sttts_btn0').click(function(){
c.setstatusok();
});
},
setstatusok:function(){
var str = '';
for(var i=0;i<=9;i++){
var na=get('abc_xtname'+i+'').value,col=get('abc_xtcol'+i+'').value;
if(na&&i==5)na='已作废';
if(na&&i==1&&(na!='已完成'||na!='已通过'||na!='已审核'))na='已完成';
if(!na)break;
str+=','+na+'';
if(col)str+='|'+col+'';
}
if(str!='')str=str.substr(1);
h.form.statusstr.value=str;
js.tanclose('sttts');
}
};
js.initbtn(c);
});
</script>
<div align="center">
<div style="padding:10px;width:700px">
<form name="form_{rand}">
<input name="id" value="0" type="hidden" />
<table cellspacing="0" border="0" width="100%" align="center" cellpadding="0">
<tr>
<td align="right" ><font color=red>*</font> 模块名称:</td>
<td class="tdinput"><input name="name" class="form-control"></td>
<td align="right" ><font color=red>*</font> 类型:</td>
<td class="tdinput"><input name="type" class="form-control"></td>
</tr>
<tr>
<td align="right" width="15%" nowrap ><font color=red>*</font> 编号:</td>
<td width="35%" class="tdinput"><input name="num" maxlength="20" class="form-control"></td>
<td width="15%" align="right" nowrap><font color=red>*</font> 对应表:</td>
<td width="35%" class="tdinput"><input name="table" maxlength="50" class="form-control"></td>
</tr>
<tr>
<td align="right">单号规则:</td>
<td class="tdinput"><input placeholder="如XA-Ymd-" name="sericnum" class="form-control"></td>
<td align="right">多行子表:</td>
<td class="tdinput"><input name="tables" placeholder="多个,分开" class="form-control"></td>
</tr>
<tr>
<td align="right">排序号:</td>
<td class="tdinput"><input name="sort" value="0" maxlength="3" type="number" onfocus="js.focusval=this.value" onblur="js.number(this)" class="form-control"></td>
<td align="right">多行子表名称:</td>
<td class="tdinput"><input name="names" placeholder="跟多行子表个数一样" class="form-control"></td>
</tr>
<tr>
<td align="right" >针对人员:</td>
<td class="tdinput" colspan="3">
<div class="input-group" style="width:100%">
<input readonly class="form-control" name="recename" >
<input type="hidden" name="receid" >
<span class="input-group-btn">
<button class="btn btn-default" click="allqt" type="button">全体人员</button>
<button class="btn btn-default" click="getdist,1" type="button"><i class="icon-search"></i></button>
</span>
</div>
</td>
</tr>
<tr>
<td align="right" >相应条件:</td>
<td class="tdinput" colspan="3"><textarea placeholder="非共用主表,不要需要设置,请留空" name="where" style="height:60px" class="form-control"></textarea></td>
</tr>
<tr>
<td align="right" >摘要规则:</td>
<td class="tdinput" colspan="3"><textarea name="summary" style="height:60px" class="form-control"></textarea></td>
</tr>
<tr>
<td align="right" >列表默认排序:</td>
<td class="tdinput" colspan="3"><input placeholder="相对主表字段如id desc不会设置不要设置" name="sortdir" class="form-control"></input></td>
</tr>
<tr>
<td align="right" >应用上摘要显示:</td>
<td class="tdinput" colspan="3"><textarea name="summarx"
placeholder="title:{title}
optdt:{optdt}
cont:
"
style="height:100px" class="form-control"></textarea>
<font color=#888888>title:标题optdt:显示的时间cont:内容信息</font>
</td>
</tr>
<tr>
<td align="right" >流程审批模式:</td>
<td class="tdinput" colspan="3">
<select class="form-control" name="isflow">
<option value="0">无流程</option>
<option value="1">顺序流程(按照预设好的步骤一步一步审核)</option>
<option value="2">顺序前置流程(出现重复人审核自动跳过)</option>
<?php
?>
</select>
</td>
</tr>
<tr>
<td align="right" ></td>
<td class="tdinput" colspan="3">
<label><input name="pctx" value="1" type="checkbox"> PC端提醒</label>&nbsp; &nbsp;
<label><input name="emtx" value="1" type="checkbox"> 邮件提醒</label>&nbsp; &nbsp;
<label><input name="mctx" value="1" type="checkbox"> APP提醒</label>&nbsp; &nbsp;
<label><input name="wxtx" value="1" type="checkbox"> 微信提醒</label>&nbsp; &nbsp;
<label><input name="ddtx" value="1" type="checkbox"> 钉钉提醒</label>&nbsp; &nbsp;
<label><input name="isup" value="1" type="checkbox"> 同步更新(同步流程模块时一起更新)</label>&nbsp; &nbsp;
<label><input name="status" value="1" checked type="checkbox"> 启用</label><br>
<font color=#888888>微信提醒需要有微信企业号或企业微信,钉钉提醒需要安装钉钉接口插件,否则将崩毁。</font>
</td>
</tr>
<tr>
<td colspan="4"><div class="inputtitle">更多扩展选项</div></td>
</tr>
<tr>
<td align="right" >status字段状态值设置</td>
<td class="tdinput" colspan="3"><input name="statusstr" class="form-control"><a href="javascript:;" click="setstatus">[设置]</a><font color=#888888>默认状态值是:【待处理|blue,已审核|green,未通过|red】对应值从0开始其中0,1,2,5固定的5是作废,1必须是已完成,已审核状态</font></td>
</tr>
<tr>
<td align="right" >流程上选项:</td>
<td class="tdinput" colspan="3">
<label>申请人提交编辑时:<select name="isflowlx"><option value="0">在原来流程上</option><option value="1">重头走审批</option></label>
</td>
</tr>
<tr>
<td align="right" >单据详情上:</td>
<td class="tdinput" colspan="3">
<label><input name="isgbjl" value="1" type="checkbox"> 不显示操作记录</label>&nbsp; &nbsp;
<label><input name="isgbcy" value="1" type="checkbox"> 不显示查阅记录</label>&nbsp;
<label><input name="isscl" value="1" checked type="checkbox"> 标识已生成列表页</label>&nbsp;
<label><input name="ispl" value="1" type="checkbox"> 开启可评论</label>
&nbsp;
<label><input name="istxset" value="1" type="checkbox"> 开启单据提醒设置</label>
&nbsp;
<label><input name="ishz" value="1" type="checkbox"> 开启回执确认</label>&nbsp;
<label><input name="isys" value="1" type="checkbox"> 开启流程加签</label>
</td>
</tr>
<tr>
<td align="right" >录入页面上:</td>
<td class="tdinput" colspan="3">
<label><input name="isbxs" value="1" type="checkbox"> 不显示流程图</label>&nbsp; &nbsp;
用户抄送:<select name="iscs"><option value="0">不开启</option><option value="1">开启(可选抄送对象)</option><option value="2">开启(必须选择抄送对象)</option></select>
</td>
</tr>
<tr>
<td align="right" >列表页面上:</td>
<td class="tdinput" colspan="3">
状态搜索显示:<select name="lbztxs"><option value="0">默认</option><option value="1">必须显示</option><option value="2">不要显示</option></select>
</td>
</tr>
<tr>
<td align="right" ></td>
<td class="tdinput" colspan="3">
超过<input class="input" type="number" id="shijian_{rand}" onfocus="js.focusval=this.value" value="0" onblur="js.number(this)" min="0" style="width:70px" name="zfeitime">分钟自动作废,0不限制。<select onchange="$('#shijian_{rand}').val(this.value)"><option value="0">不限制</option><option value="30">30分钟</option><option value="120">2小时</option><option value="360">6小时</option><option value="1440">1天</option><option value="2880">2天</option><option value="10080">7天</option><option value="21600">15天</option><option value="43200">30天</option></select>
</td>
</tr>
<tr>
<td align="right"></td>
<td style="padding:15px 0px" colspan="3" align="left"><button disabled class="btn btn-success" id="save_{rand}" type="button"><i class="icon-save"></i>&nbsp;保存</button>&nbsp; <span id="msgview_{rand}"></span>&nbsp;<a href="<?=URLY?>view_flowset.html" target="_blank">[看帮助]</a>查看各个字段说明
</td>
</tr>
</table>
</form>
</div>
</div>

View File

@@ -0,0 +1,154 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var num = params.num,mid,modeid=0,bools=false;
function btn(bo){
get('edit_{rand}').disabled = bo;
get('del_{rand}').disabled = bo;
}
var changearr={'boturn':'提交时','boedit':'编辑时','bochang':'字段改变时','bodel':'删除时','bozuofei':'作废时','botong':'步骤处理通过时','bobutong':'步骤处理不通过时','bofinish':'处理完成时','bozhui':'追加说明时','bozhuan':'转办时','botask':'计划任务','boping':'评论时','bohuiz':'回执确认时'};
var a = $('#view_{rand}').bootstable({
tablename:'flow_todo',celleditor:true,modedir:'{mode}:{dir}',
storeafteraction:'flowtodoafter',storebeforeaction:'flowtodobefore',
columns:[{
text:'模块',dataIndex:'modename'
},{
text:'通知标题',dataIndex:'name',editor:true
},{
text:'触发条件',dataIndex:'whereidstr'
},{
text:'触发类型',dataIndex:'changeopt',align:'left',renderer:function(v,d, oi){
var s='&nbsp;',f;
for(f in changearr)if(d[f]=='1'){
s+=''+changearr[f]+'';
if(f=='botask'){
if(d.remindrs)s+='('+d.remindrs.ratecont+')';
s+='<a onclick="setpnvlsls{rand}('+oi+')" href="javascript:;">[提醒时间]</a>';
}
s+=';';
}
return s;
}
},{
text:'编号',dataIndex:'num',editor:true
}/*,{
text:'变化字段',dataIndex:'changefields'
},{
text:'处理步骤Id',dataIndex:'changecourse'
}*/,{
text:'说明',dataIndex:'explain',editor:true
},{
text:'状态',dataIndex:'status',type:'checkbox',editor:true,sortable:true
},{
text:'通知给',dataIndex:'recename',renderer:function(v,d){
var s='&nbsp;';
if(d.toturn=='1')s+='提交人;';
if(d.tocourse=='1')s+='流程所有参与人;';
if(d.tosuper=='1')s+='直属上级;';
if(!isempt(v))s+=''+v+';';
return s;
}
},{
text:'通知给字段',dataIndex:'todofields'
},{
text:'通知内容摘要',dataIndex:'summary'
},{
text:'ID',dataIndex:'id'
}],
load:function(a){
if(!bools){
var s = '<option value="0">-选择模块-</option>',len=a.flowarr.length,i,csd,types='';
for(i=0;i<len;i++){
csd = a.flowarr[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);
}
guanflowtodowherelist = [a.wherelist,a.fielslist,a.courselist];
bools=true;
},
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
}
});
var c = {
reload:function(){
a.reload();
},
del:function(){
a.del();
},
clickwin:function(o1,lx){
if(modeid==0){
js.msg('msg','请先选择模块');
return;
}
var moen= get('mode_{rand}');
var nd = moen.options[moen.selectedIndex].text;
var icon='plus',name='新增['+nd+']单据通知',id=0;
if(lx==1){
id = a.changeid;
icon='edit';
name='编辑['+nd+']单据通知';
};
guanflowtodolist = a;
addtabs({num:'flowtodo'+id+'',url:'main,flow,todoedit,id='+id+',setid='+modeid+',',icons:icon,name:name});
},
changemode:function(){
modeid=this.value;
a.setparams({mid:modeid},true);
var bo = (modeid==0);
get('add_{rand}').disabled = bo;
},
setpinlv:function(oi){
var d = a.getData(oi);
var mid = d.remindrs ? d.remindrs.id : '0';
openinput('提醒设置','remind',''+mid+'&def_modenum=flowtodo&def_mid='+d.id+'&def_explain=basejm_'+jm.base64encode(d.summary)+'', 'reslsds{rand}');
}
};
js.initbtn(c);
$('#mode_{rand}').change(c.changemode);
setpnvlsls{rand}=function(oi){
c.setpinlv(oi);
}
reslsds{rand}=function(){
c.reload();
}
});
</script>
<table width="100%">
<tr>
<td align="left">
<button class="btn btn-primary" click="clickwin,0" disabled id="add_{rand}" type="button"><i class="icon-plus"></i> 新增单据通知</button>
</td>
<td style="padding-left:10px;">
<button class="btn btn-default" click="reload" type="button">刷新</button>
</td>
<td style="padding-left:10px;">
<select style="width:200px" id="mode_{rand}" class="form-control" ><option value="0">-选择模块-</option></select>
</td>
<td width="80%"></td>
<td align="right" nowrap>
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button> &nbsp;
<button class="btn btn-danger" id="del_{rand}" disabled click="del" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr>
</table>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">此功能设置的当流程单据操作时触发通知给人员,当触发类型是计划任务时,该记录需要设置提醒频率。</div>

View File

@@ -0,0 +1,207 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var id = params.id,mid=params.setid;
if(!id)id = 0;
var h = $.bootsform({
window:false,rand:'{rand}',tablename:'flow_todo',
url:publicsave('{mode}','{dir}'),
params:{otherfields:'setid='+mid+''},
submitfields:'explain,status,num,name,whereid,changefields,changecourse,boturn,boedit,bochang,bodel,bozuofei,botong,bobutong,bozhui,receid,recename,setid,toturn,tocourse,tosuper,bofinish,bozhuan,todofields,summary,botask,boping',
success:function(){
closenowtabs();
try{guanflowtodolist.reload();}catch(e){}
},
submitcheck:function(d){
if(d.botask=='1' && d.whereid=='0')return '计划任务的类型必须选择触发条件';
if(d.botask=='1' && !d.summary)return '计划任务的类型通知内容摘要必须写';
return {
changefields:c.getsleval('changefields'),
changecourse:c.getsleval('changecourse')
}
}
});
h.forminit();
js.setselectdata(h.form.whereid,guanflowtodowherelist[0],'id');
js.setselectdata(h.form.changefields,guanflowtodowherelist[1],'fields');
js.setselectdata(h.form.changecourse,guanflowtodowherelist[2],'id');
if(id>0){
var d=guanflowtodolist.changedata;
h.setValues(d);
js.setselectval(h.form.changefields,d.changefields);
js.setselectval(h.form.changecourse,d.changecourse);
}
var c = {
changcourse:function(o1){
var bo = o1.checked;
setTimeout(function(){o1.checked = bo;c.changcourses();},10);
},
changcourses:function(){
if(h.form.botong.checked || h.form.bobutong.checked){
$('#changecourse{rand}').show();
}else{
$('#changecourse{rand}').hide();
}
},
changfields:function(o1){
var bo = o1.checked;
setTimeout(function(){o1.checked = bo;},10);
if(bo){
$('#changefields{rand}').show();
}else{
$('#changefields{rand}').hide();
}
},
getsleval:function(fv){
return js.getselectval(h.form[fv]);
},
getdists:function(o1, lx){
var cans = {
nameobj:h.form.recename,
idobj:h.form.receid,
type:'deptusercheck',
title:'通知给'
};
js.getuser(cans);
},
removes:function(){
h.form.recename.value='';
h.form.receid.value='';
}
};
js.initbtn(c);
c.changcourses();
c.changfields(h.form.bochang);
});
</script>
<div align="center">
<div style="padding:10px;width:650px">
<form name="form_{rand}">
<input name="id" value="0" type="hidden" />
<table cellspacing="0" border="0" width="100%" align="center" cellpadding="0">
<tr>
<td align="right" width="15%">编号:</td>
<td class="tdinput" width="35%"><input name="num" maxlength="20" onblur="this.value=strreplace(this.value)" class="form-control"></td>
</tr>
<tr>
<td align="right" width="15%">通知标题:</td>
<td class="tdinput" colspan="3"><input name="name" maxlength="30" onblur="this.value=strreplace(this.value)" placeholder="主表变量{字段}格式" class="form-control"></td>
</tr>
<tr>
<td align="right" >触发条件:</td>
<td class="tdinput"><select class="form-control" name="whereid"><option value="0">无条件</option></select></td>
<td colspan="2">满足时。</td>
</tr>
<tr>
<td align="right" ></td>
<td colspan="3" style="padding-bottom:10px"><font color=#888888>在【流程模块条件】上添加,满足此条件才触发通知</font></td>
</tr>
<tr>
<td align="right" nowrap >触发类型:</td>
<td colspan="3" class="tdinput">
<label><input name="boturn" type="checkbox" value="1">提交时</label>&nbsp;
<label><input name="boedit" type="checkbox" value="1">编辑时</label>&nbsp;
<label><input name="bochang" click="changfields" disabled type="checkbox" value="1">字段改变时(未开发)</label>&nbsp;
<label><input name="bodel" type="checkbox" value="1">删除时</label>&nbsp;
<label><input name="bozuofei" type="checkbox" value="1">作废时</label>&nbsp;
<label><input name="botong" click="changcourse" type="checkbox" value="1">步骤处理通过时</label>&nbsp;
<label><input name="bobutong" click="changcourse" type="checkbox" value="1">步骤处理不通过时</label>&nbsp;
<label><input name="bofinish" type="checkbox" value="1">处理完成时</label>&nbsp;
<label><input name="bozhuan" type="checkbox" value="1">转办时</label>&nbsp;
<label><input name="bozhui" type="checkbox" value="1">追加说明时</label>&nbsp;
<label><input name="botask" type="checkbox" value="1">计划任务</label>&nbsp;
<label><input name="boping" type="checkbox" value="1">评论时</label>&nbsp;
</td>
</tr>
<tr id="changefields{rand}" style="display:none">
<td align="right" nowrap >变化字段(可多选)<br><font color="#888888">来自[表单元素管理]</font><font color=white></font></td>
<td class="tdinput"><select multiple name="changefields" size="8" class="form-control"></select></td>
</tr>
<tr id="changecourse{rand}" style="display:none">
<td align="right" nowrap >处理的步骤(可多选)<br><font color="#888888">来自[流程审核步骤]</font><font color=white></font></td>
<td class="tdinput"><select multiple name="changecourse" size="5" class="form-control"></select></td>
</tr>
<tr>
<td colspan="4"><div class="inputtitle">通知给如下人员</div></td>
</tr>
<tr>
<td align="right" nowrap >通知给:</td>
<td class="tdinput" colspan="3">
<label><input name="toturn" type="checkbox" value="1">提交人</label>&nbsp;
<label><input name="tocourse" type="checkbox" value="1">流程所有参与人</label>&nbsp;
<label><input name="tosuper" type="checkbox" value="1">直属上级</label>&nbsp;
</td>
</tr>
<tr>
<td align="right" nowrap >通知给:</td>
<td class="tdinput" colspan="3">
<div style="width:100%" class="input-group">
<input readonly class="form-control" name="recename" >
<input type="hidden" name="receid" >
<span class="input-group-btn">
<button class="btn btn-default" click="removes" type="button"><i class="icon-remove"></i></button>
<button class="btn btn-default" click="getdists,1" type="button"><i class="icon-search"></i></button>
</span>
</div>
</td>
</tr>
<tr>
<td align="right" nowrap >通知给单据字段上:</td>
<td class="tdinput" colspan="3">
<input name="todofields" placeholder="写主表上的字段必须是保存人员ID的字段" class="form-control">
</td>
</tr>
<tr>
<td align="right">通知内容摘要:</td>
<td class="tdinput" colspan="3"><textarea name="summary" style="height:60px" class="form-control"></textarea></td>
</tr>
<tr>
<td align="right">说明:</td>
<td class="tdinput" colspan="3"><textarea name="explain" style="height:60px" class="form-control"></textarea></td>
</tr>
<tr>
<td align="right" ></td>
<td class="tdinput" colspan="3">
<label><input name="status" value="1" checked type="checkbox"> 启用</label>
</td>
</tr>
<tr>
<td align="right"></td>
<td style="padding:15px 0px" colspan="3" align="left"><button class="btn btn-success" id="save_{rand}" type="button"><i class="icon-save"></i>&nbsp;保存</button>&nbsp; <span id="msgview_{rand}"></span>
</td>
</tr>
</table>
</form>
</div>
</div>

View File

@@ -0,0 +1,105 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var modeid = 0;
var a = $('#view_{rand}').bootstable({
tablename:'flow_set',celleditor:true,fanye:true,params:{modeid:0},autoLoad:false,dir:'desc',sort:'id',statuschange:false,
url:publicstore('{mode}','{dir}'),storebeforeaction:'viewshowbefore',storeafteraction:'viewshowafter',
columns:[{
text:'操作人',dataIndex:'optname',sortable:true
},{
text:'摘要',dataIndex:'summary',align:'left'
},{
text:'操作时间',dataIndex:'optdt',sortable:true
},{
text:'ID',dataIndex:'id',sortable:true
},{
text:'状态',dataIndex:'status',sortable:true
},{
text:'处理记录',dataIndex:'chushu',renderer:function(v,d,i){
var s='&nbsp;';
if(v>0)s=''+v+'<a href="javascript:;" onclick="openlogs{rand}('+i+')">查看</a>';
return s;
}
}],
itemclick:function(d){
btn(false, d);
},
beforeload:function(){
btn(true);
},
celldblclick:function(){
c.view();
}
});
function btn(bo, d){
get('edit_{rand}').disabled = bo;
get('del_{rand}').disabled = bo;
}
var c = {
changemode:function(){
var v=this.value;
modeid=v;
a.setparams({modeid:v},true);
},
del:function(){
a.del({
url:js.getajaxurl('delmodeshuju','{mode}','{dir}'),
params:{modeid:modeid,mid:a.changeid}
});
},
view:function(){
var d=a.changedata;
openxiangs(d.modename,d.modenum,d.id);
},
openviewlog:function(id){
var d = a.getData(id);
addtabs({name:'['+d.id+'.'+d.modename+']操作记录','num':''+d.modenum+''+d.id+'',url:'main,flow,viewlog,modenum='+d.table+',mid='+d.id+''});
}
};
$('#mode_{rand}').change(c.changemode);
$.get(js.getajaxurl('getmodearr','{mode}','{dir}'),function(str){
var d=js.decode(str);
var s = '<option value="0">-选择模块-</option>',len=d.data.length,i,csd,types='';
for(i=0;i<len;i++){
csd = d.data[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);
});
js.initbtn(c);
openlogs{rand}=function(id){
c.openviewlog(id);
}
});
</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 align="left" style="padding:0px 10px;">
</td>
<td align="right">
<button class="btn btn-default" id="edit_{rand}" click="view" disabled type="button">查看</button>&nbsp;
<button class="btn btn-danger" click="del" disabled id="del_{rand}" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">提示:删除将会是彻底删除,不能恢复,请谨慎操作!如提示无删除权限,请到[流程模块→流程模块权限]上添加权限。<div>

View File

@@ -0,0 +1,73 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var a = $('#view_{rand}').bootstable({
tablename:'flow_log',celleditor:true,params:{num:params.modenum,mid:params.mid},dir:'asc',sort:'id',statuschange:false,
url:publicstore('{mode}','{dir}'),storebeforeaction:'viewlogshowbefore',
columns:[{
text:'动作',dataIndex:'name'
},{
text:'处理人',dataIndex:'checkname'
},{
text:'状态',dataIndex:'statusname',renderer:function(v,d){
if(d.color)v='<font color="'+d.color+'">'+v+'</font>';
return v;
}
},{
text:'说明',dataIndex:'explain',align:'left'
},{
text:'浏览器',dataIndex:'web'
},{
text:'IP',dataIndex:'ip'
},{
text:'操作时间',dataIndex:'optdt',sortable:true
},{
text:'步骤ID',dataIndex:'courseid',sortable:true
},{
text:'ID',dataIndex:'id',sortable:true
}],
itemclick:function(d){
btn(false, d);
},
beforeload:function(){
btn(true);
}
});
function btn(bo, d){
get('del_{rand}').disabled = bo;
}
var c = {
del:function(){
a.del();
},
reload:function(){
a.reload();
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td align="left">
<button class="btn btn-default" click="reload" type="button">刷新</button>
</td>
<td align="left" style="padding:0px 10px;">
</td>
<td align="right">
<button class="btn btn-danger" click="del" disabled id="del_{rand}" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">提示:删除将会是彻底删除,不能恢复,请谨慎操作!<div>

View File

@@ -0,0 +1,175 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var bools = false,mid=0,flowarr=[];
function btn(bo){
get('edit_{rand}').disabled = bo;
get('del_{rand}').disabled = bo;
}
var a = $('#view_{rand}').bootstable({
tablename:'flow_where',storeafteraction:'flowwhereafter',storebeforeaction:'flowwherebefore',celleditor:true,defaultorder:'id desc',
url:publicstore('{mode}','{dir}'),fanye:true,
columns:[{
text:'模块名称',dataIndex:'modename'
},{
text:'模块id',dataIndex:'setid',sortable:true
},{
text:'名称',dataIndex:'name',editor:true
},{
text:'分组',dataIndex:'pnum',editor:true,sortable:true
},{
text:'编号',dataIndex:'num',editor:true
},{
text:'主表条件(SQL条件)',dataIndex:'wheresstr',align:'left',renderer:function(v){
var s='&nbsp;';
if(!isempt(v))s=jm.base64decode(v);
return s;
}
},{
text:'人员',dataIndex:'recename'
},{
text:'人员除外',dataIndex:'nrecename'
},{
text:'说明',dataIndex:'explain',editor:true
},{
text:'排序号',dataIndex:'sort',editor:true,sortable:true
},{
text:'列表页显示',dataIndex:'islb',type:'checkbox',editor:true,sortable:true
},{
text:'状态',dataIndex:'status',type:'checkbox',editor:true,sortable:true
},{
text:'ID',dataIndex:'id',sortable:true
},{
text:'',dataIndex:'opt',renderer:function(v,d,oi){
var s='&nbsp;';
if(!isempt(d.num)){
s='<a href="javascript:;" onclick="chakan{rand}('+oi+')">查看</a>';
}
return s;
}
}],
itemclick:function(d){
mid=d.setid;
btn(false);
},
beforeload:function(){
btn(true);
},
load:function(a){
if(!bools){
var s = '<option value="0">-选择模块-</option>',len=a.flowarr.length,i,csd,types='';
for(i=0;i<len;i++){
csd = a.flowarr[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);
flowarr = a.flowarr;
}
bools=true;
}
});
var c = {
reload:function(){
a.reload();
},
del:function(){
a.del();
},
gettext:function(){
var o = get('mode_{rand}');
return o.options[o.selectedIndex].text;
},
clickwin:function(o1,lx){
var icon='plus',name='新增条件',id=0;
if(lx==1){
id = a.changeid;
icon='edit';
name='编辑条件';
}else{
if(mid==0){
js.msg('msg','请先选择模块');
return;
}
name='新增['+this.gettext()+']的条件';
}
guanflowwherelist = a;
addtabs({num:'flowwhere'+id+'',url:'main,flow,whereedit,id='+id+',setid='+mid+'',icons:icon,name:name});
},
changemode:function(){
mid=this.value;
if(mid==0){
a.search('');
}else{
a.search("and `setid`="+mid+"");
}
},
searchs:function(){
var val = get('key_{rand}').value;
if(val){
var oi=-1,i,nud='';
for(i=0;i<flowarr.length;i++){
if(flowarr[i].name.indexOf(val)>-1){
oi = i;
nud=flowarr[i];
break;
}
}
if(oi==-1){
js.msg('msg','没有找到相关模块“'+val+'”');
}else{
mid = nud.id;
get('mode_{rand}').value = mid;
a.search("and `setid`="+mid+"");
}
}
}
};
js.initbtn(c);
$('#mode_{rand}').change(c.changemode);
chakan{rand}=function(oi){
var d = a.getData(oi);
if(isempt(d.pnum))d.pnum='';
addtabs({num:'flowviewset'+d.id+'',url:'flow,page,'+d.modenum+',atype='+d.num+',pnum='+d.pnum+'',name:d.name});
}
});
</script>
<table width="100%">
<tr>
<td align="left">
<button class="btn btn-primary" click="clickwin,0" id="add_{rand}" type="button"><i class="icon-plus"></i> 新增条件</button>
</td>
<td style="padding-left:10px;">
<select style="width:200px" id="mode_{rand}" class="form-control" ><option value="0">-选择模块-</option></select>
</td>
<td width="80%" style="padding-left:8px">
<div class="input-group" style="width:200px">
<input class="form-control" id="key_{rand}" placeholder="模块名称/编号">
<span class="input-group-btn">
<button class="btn btn-default" click="searchs" type="button"><i class="icon-search"></i></button>
</span>
</div>
</td>
<td align="right" nowrap>
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button> &nbsp;
<button class="btn btn-danger" id="del_{rand}" disabled click="del" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr>
</table>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">列表页显示:会在生成列表页面上显示的,需要设置编号</div>

View File

@@ -0,0 +1,195 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var id = params.id;
if(!id)id = 0;
var h = $.bootsform({
window:false,rand:'{rand}',tablename:'flow_where',url:publicsave('{mode}','{dir}'),
submitfields:'setid,name,wheresstr,whereustr,wheredstr,pnum,explain,recename,status,islb,receid,nrecename,nreceid,num,sort',requiredfields:'name',beforesaveaction:'flowwheresave_before',
success:function(){
if(id>0){
closenowtabs();
}else{
js.msg('success','新增成功,继续保存可持续新增');
}
try{guanflowwherelist.reload();}catch(e){}
},
loadafter:function(a){
if(a.data){
h.form.wheresstr.value=jm.base64decode(a.data.wheresstr);
h.form.whereustr.value=jm.base64decode(a.data.whereustr);
h.form.wheredstr.value=jm.base64decode(a.data.wheredstr);
}
},
submitcheck:function(d){
if(d.islb==1&&d.num=='')return '请设置一个编号';
return {
wheresstr:jm.base64encode(d.wheresstr),
whereustr:jm.base64encode(d.whereustr),
wheredstr:jm.base64encode(d.wheredstr)
};
}
});
h.forminit();
h.load(js.getajaxurl('loaddatawhere','{mode}','{dir}',{id:id,setid:params.setid}));
var c = {
setwhere:function(){
js.setwhere(params.setid,'backsheowe{rand}');
},
clears:function(o1,lx){
if(lx==1){
h.setValue('recename','');
h.setValue('receid','');
}
if(lx==2){
h.setValue('nrecename','');
h.setValue('nreceid','');
}
},
getdist:function(o1, lx){
var cans = {
nameobj:h.form.recename,
idobj:h.form.receid,
type:'deptusercheck',
title:'选择包含人员'
};
if(lx==2){
var cans = {
nameobj:h.form.nrecename,
idobj:h.form.nreceid,
type:'deptusercheck',
title:'选择除外人员'
};
}
cans.value=cans.idobj.value,
js.getuser(cans);
},
setdab:function(ov,lx){
var a = ['{read}','{unread}','{weekfirst}'];
this.addwhewe(a[lx]);
},
addwhewe:function(ss){
if(!ss)return;
var o1 = h.form.wheresstr;
if(ss=='uid'){o1.value='`uid`={uid}';return;}
if(ss=='optid'){o1.value='`optid`={uid}';return;}
if(o1.value!='')ss='and '+ss+'';
o1.value+=' '+ss;
},
changessvs:function(ss){
if(!ss)return;
var fid = get('weherecss{rand}').value;
if(fid==''){js.msg('msg','没有输入字段');return;}
ss = ss.replace('uid', fid);
c.addwhewe(ss);
}
};
js.initbtn(c);
if(id==0)h.form.setid.value=params.setid;
backsheowe{rand}=function(s1,s2){
h.setValue('wheresstr',s1);
h.setValue('explain',s2);
}
$('#weherecs{rand}').change(function(){
c.changessvs(this.value);
});
});
</script>
<div align="center">
<div style="padding:10px;width:700px">
<form name="form_{rand}">
<input name="id" value="0" type="hidden" />
<input name="setid" value="0" type="hidden" />
<table cellspacing="0" border="0" width="100%" align="center" cellpadding="0">
<tr>
<td align="right" width="25%"><font color=red>*</font> 名称:</td>
<td class="tdinput" width="25%"><input name="name" class="form-control"></td>
<td align="right" width="15%">编号:</td>
<td class="tdinput" width="30%"><input name="num" maxlength="30" class="form-control"></td>
</tr>
<tr>
<td align="right" ></td>
<td class="tdinput" ></td>
<td align="right" >分组编号:</td>
<td class="tdinput"><input name="pnum" maxlength="30" class="form-control"></td>
</tr>
<tr>
<td align="right" >主表字段条件:</td>
<td class="tdinput" colspan="3"><textarea name="wheresstr" style="height:60px" class="form-control"></textarea><div class="tishi" style="padding-top:0px">对应主表上字段条件,字段必须用``包含,如:`uid`={uid},<a click="setwhere" href="javascript:;">[设置条件]</a><br>字段:<input style="width:60px" id="weherecss{rand}" class="input" value="uid">中<select class="input" id="weherecs{rand}"><option value="">-选择条件-</option><option value="uid">我申请的uid</option><option value="optid">我操作的optid</option><option value="{uid,uidin}">包含当前用户</option><option value="{uid,down}">直属下级</option><option value="{uid,downall}">全部直属下级</option><option value="{uid,dept}">同级部门人员</option><option value="{uid,deptall}">同级部门人员(含子部门)</option><option value="{receid}">receid字段包含当前用户</option><option value="{read}">已读记录</option><option value="{unread}">未读记录</option><option value="{uid,receall}">字段中用户部门包含当前用户(含为空时)</option><option value="{uid,recenot}">字段中用户部门包含当前用户</option><option value="{uid,company}">所属单位</option></select><br>用{}的变量会在文件webmain/model/whereModel.php中的getstrwhere方法替换可自己查看。<a href="<?=URLY?>view_flowwhere.html" target="_blank">[看帮助介绍]</a></div></td>
</tr>
<tr>
<td align="right" >数据上人员包含条件:</td>
<td class="tdinput" colspan="3">
<div style="width:100%" class="input-group">
<input readonly class="form-control" name="recename" >
<input type="hidden" name="receid" >
<span class="input-group-btn">
<button class="btn btn-default" click="clears,1" type="button"><i class="icon-remove"></i></button>
<button class="btn btn-default" click="getdist,1" type="button"><i class="icon-search"></i></button>
</span>
</div>
<textarea name="whereustr" style="height:40px" class="form-control"></textarea><div class="tishi" style="padding-top:0px">不选默认全部人员</div>
</td>
</tr>
<tr>
<td align="right" >除了这些人员外:</td>
<td class="tdinput" colspan="3">
<div style="width:100%" class="input-group">
<input readonly class="form-control" name="nrecename" >
<input type="hidden" name="nreceid" >
<span class="input-group-btn">
<button class="btn btn-default" click="clears,2" type="button"><i class="icon-remove"></i></button>
<button class="btn btn-default" click="getdist,2" type="button"><i class="icon-search"></i></button>
</span>
</div>
<textarea name="wheredstr" style="height:40px" class="form-control"></textarea></div>
</td>
</tr>
<tr>
<td align="right" >说明:</td>
<td class="tdinput" colspan="3"><textarea name="explain" style="height:60px" class="form-control"></textarea></td>
</tr>
<tr>
<td align="right">排序号:</td>
<td class="tdinput"><input name="sort" value="0" maxlength="3" type="number" onfocus="js.focusval=this.value" onblur="js.number(this)" class="form-control"></td>
</tr>
<tr>
<td align="right" ></td>
<td class="tdinput" colspan="3">
<label><input name="status" value="1" checked type="checkbox"> 启用?</label>&nbsp; &nbsp;
<label><input name="islb" value="0" type="checkbox"> 列表页显示</label>&nbsp; &nbsp;
</td>
</tr>
<tr>
<td align="right"></td>
<td style="padding:15px 0px" colspan="3" align="left"><button disabled class="btn btn-success" id="save_{rand}" type="button"><i class="icon-save"></i>&nbsp;保存</button>&nbsp; <span id="msgview_{rand}"></span>
</td>
</tr>
</table>
</form>
<div align="left" class="tishi">也可根据编号从程序代码上自定义返回条件文件webmain\model\flow下对应模块编号文件</div>
</div>
</div>

View File

@@ -0,0 +1,183 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title><?=$da['title']?>-<?=TITLE?></title>
<link rel="stylesheet" href="webmain/css/css.css" />
<link rel="stylesheet" href="mode/kindeditor/themes/default/default.css" />
<link rel="shortcut icon" href="favicon.ico" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/js.js"></script>
<script type="text/javascript" src="mode/kindeditor/kindeditor-min.js"></script>
<script type="text/javascript">
var id = '<?=$da['rs']['id']?>',adminid='<?=$da['adminid']?>';
var modenum = '<?=$da['rs']['num']?>',editor,atype='0',zibiaoshu=<?=$da['rs']['zibiaoshu']?>;
function initbody(){
resizes();
$(window).resize(resizes);
var cans = {
resizeType : 0,
allowPreviewEmoticons : false,
allowImageUpload : true,
formatUploadUrl:false,
allowFileManager:true,
minWidth:'300px',
items : [
'forecolor', 'hilitecolor', 'bold', 'italic', 'underline','fontsize','hr',
'removeformat', '|', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist',
'insertunorderedlist', '|','table', 'link','unlink','|','source','clearhtml','fullscreen'
]
};
editor = KindEditor.create('#content', cans);
}
function resizes(){
var s = winHb();
$('#page_left').css('height',''+(s-80)+'px');
$('#page_conent').css('height',''+s+'px');
$('#content').css('height',''+(s-70)+'px');
}
var subdata={};
var c={
insert1:function(o1,lx){
var o = $(o1).parent();
var fid = o.attr('fields'),fss = o.attr('fname'),iszb=parseFloat(o.attr('iszb'));
if(lx==0)editor.insertHtml(fss);
if(lx==1){
if(iszb=='0'){
editor.insertHtml('{'+fid+'}');
}else{
editor.insertHtml('['+fid+''+(iszb-1)+',0]');
}
}
if(lx==2){
c.insertsubdata(iszb);
}
},
save:function(){
js.msg('wait','保存中...');
var nr= editor.html();
nr = nr.replace(/\n/gi,'');
nr = nr.replace(/[ ]/gi,'');
var d = {content:nr,num:modenum,atype:atype};
$.post(js.getajaxurl('pagesave','flow','main'),d,function(da){
if(da=='success'){
js.msg('success','保存成功');
}else{
js.msg('msg', da);
}
});
return false;
},
addmobo:function(){
var s = '<table width="100%" bordercolor="#000000" border="0"><tbody><tr><td height="34" width="15%" align="right" class="ys1">申请日期</td><td class="ys2" width="35%">{applydt}</td><td align="right" class="ys1" width="15%">操作时间</td><td class="ys2" width="35%">{optdt}</td></tr><tr><td height="34" align="right" class="ys1">说明</td><td colspan="3" class="ys2">{explain}</td></tr><tr><td height="34" align="right" class="ys1">相关文件</td><td colspan="3" class="ys2">{file_content}</td></tr><tr><td height="34" align="right" class="ys1">申请人</td><td class="ys2">{base_name}</td><td class="ys1" align="right">申请人部门</td><td class="ys2">{base_deptname}</td></tr></tbody></table>';
editor.html(s);
},
yulan:function(){
var url = js.getajaxurl('@lu','input','flow',{num:modenum});
js.open(url, 700,450);
},
instartrows:function(){
var s1='';
for(var i=1;i<=zibiaoshu;i++)s1+='<option value="'+i+'">第'+i+'个多行子表</option>';
var s='<div style="padding:10px"><select class="inputs" id="sss1ds">'+s1+'</select>&nbsp;<select class="inputs" id="hangshu"><option value="1">默认1行</option><option value="2">默认2行</option><option value="3">默认3行</option><option value="4">默认4行</option></select></div>';
js.tanbody('charusss','获取多行子表',300,150,{
html:s,
btn:[{text:'确定'}]
});
$('#charusss_btn0').click(function(){
c.instesdsa();
});
},
insertsubdata:function(iszb){
var s = subdata[iszb];
if(!s){
alert('请先获取在操作');
return;
}
var zhtml = editor.html();
if(zhtml.indexOf('tablesub'+(parseFloat(iszb)-1)+'')>0){
alert('请不要重复添加第'+iszb+'个多行子表');
return;
}
editor.insertHtml(s);
},
instesdsa:function(){
var iszb=$('#sss1ds').val();
js.msg('wait','获取表格中...');
var d={iszb:iszb,hang:$('#hangshu').val(),modeid:id};
js.tanclose('charusss');
var url=js.getajaxurl('getsubtable','flow','main');
js.ajax(url,d,function(s){
js.msg('none');
var a=js.decode(s);
if(a.success){
subdata[iszb]=a.data;
js.msg('success','获取成功,请用左边菜单插入到对应位置');
}else{
alert(a.msg);
}
},'post')
},
yyjinru:function(){
js.msg('wait','获取中...');
var xgwj=0,base=0,cont=editor.html();
if(cont.indexOf('file_content')>-1)xgwj=1;
if(cont.indexOf('base_name')>-1)base=1;
var url=js.getajaxurl('yinruone','flow','main');
js.ajax(url,{modeid:id,xgwj:xgwj,base:base},function(s){
js.msg('none');
editor.html(s);
},'get')
}
};
</script>
<style>
select{font-size:12px}
.yangss{height:40px;line-height:40px;background:#e1e1e1;overflow:hidden}
#page_left div{text-align:left;padding:5px 10px;cursor:pointer}
#page_left div:hover{ background-color:#f1f1f1;color:#225DE8}
</style>
</head>
<body>
<div align="center">
<table width="100%">
<tr>
<td bgcolor="#f5f5f5">
<div style="width:270px;">
<div class="yangss"><h1>&nbsp;<?=$da['rs']['name']?>(元素)&nbsp;<a href="javascript:" onclick="return c.yulan()" style="background-color:#888888" class="webbtn">预览</a>&nbsp;</h1></div>
<div id="page_left" style="overflow:auto">
<?php
foreach($da['fleft'] as $k=>$rs){
$str = '<div fields="'.$rs[0].'" fname="'.$rs[1].'" iszb="'.$rs[2].'">';
$str.= ''.($k+1).'. '.$rs[1].'('.$rs[0].')';
if($rs[0]){
$str.= ' <a href="javascript:" onclick="c.insert1(this,0)"></a> <a href="javascript:" onclick="c.insert1(this,1)">⊥</a>';
}else{
$str.= ' <a href="javascript:" title="插入表格" onclick="c.insert1(this,2)"></a>';
}
$str.= '</div>';
echo $str;
}
?>
</div>
<div class="yangss" align="left">&nbsp; &nbsp;<a href="javascript:" onclick="return c.save()" class="webbtn">保存</a>&nbsp;
<a href="javascript:" onclick="return c.addmobo()" style="background-color:#888888" class="webbtn">引用模版</a>&nbsp;
<a href="javascript:" onclick="return c.yyjinru()" style="background-color:#888888" class="webbtn">一键布局</a>
</div>
</div>
</td>
<td width="100%">
<div style="overflow:auto" id="page_conent">
<div style="padding:10px"><textarea style="width:650px;" id="content"><?=$da['content']?></textarea></div>
<div align="left" style="font-size:12px;padding:0px 10px"><a onclick="c.instartrows()" class="blue" href="javascript:;">[获取多行子表]</a>&nbsp;录入JS<?=$da['p']?>/flow/input/inputjs/mode_<?=$da['rs']['num']?>.js来写交互代码模版保存在<?=$da['p']?>/flow/page/input_<?=$da['bianhao']?>.html</div>
</div>
</td>
</tr>
</table>
</div>
</body>
</html>

View File

@@ -0,0 +1,160 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title><?=$da['title']?>-<?=TITLE?></title>
<link rel="stylesheet" href="webmain/css/css.css" />
<link rel="stylesheet" href="mode/kindeditor/themes/default/default.css" />
<link rel="shortcut icon" href="favicon.ico" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/js.js"></script>
<script type="text/javascript" src="mode/kindeditor/kindeditor-min.js"></script>
<script type="text/javascript">
var id = '<?=$da['rs']['id']?>',adminid='<?=$da['adminid']?>';
var modenum = '<?=$da['rs']['num']?>',editor,atype='<?=$da['atype']?>';
function initbody(){
resizes();
$(window).resize(resizes);
var cans = {
resizeType : 0,
allowPreviewEmoticons : false,
allowImageUpload : true,
formatUploadUrl:false,
allowFileManager:true,
minWidth:'300px',
items : [
'forecolor', 'hilitecolor', 'bold', 'italic', 'underline','fontsize','hr',
'removeformat', '|', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist',
'insertunorderedlist', '|','table', 'link','unlink','|','source','clearhtml','fullscreen'
]
};
editor = KindEditor.create('#content', cans);
}
function resizes(){
var s = winHb();
$('#page_left').css('height',''+(s-80)+'px');
$('#page_conent').css('height',''+s+'px');
$('#content').css('height',''+(s-70)+'px');
}
var subdata={};
var c={
insert1:function(o1,lx){
var o = $(o1).parent();
var fid = o.attr('fields'),fss = o.attr('fname'),iszb=parseFloat(o.attr('iszb'));
if(lx==0)editor.insertHtml(fss);
if(lx==1){
if(iszb=='0'){
editor.insertHtml('{'+fid+'}');
}else{
editor.insertHtml('['+fid+''+(iszb-1)+',0]');
}
}
if(lx==2){
c.insertsubdata(iszb);
}
},
save:function(){
js.msg('wait','保存中...');
var nr= editor.html();
nr = nr.replace(/\n/gi,'');
nr = nr.replace(/[ ]/gi,'');
if(nr.indexOf('[xuhao0,0]')>-1){
js.msg('msg', '子表的展示内容请全部替换为{subdata0}');
return;
}
if(nr.indexOf('r-tabs-item')>0){
js.msg('msg', '有选择卡的展示,不能在这里保存否则无法使用选择卡,请直接到对文件修改');
return;
}
var d = {content:nr,num:modenum,atype:atype};
$.post(js.getajaxurl('viewsave','flow','main'),d,function(da){
if(da=='success'){
js.msg('success','保存成功');
}else{
js.msg('msg', da);
}
});
return false;
},
addmobo:function(){
if(atype=='1'){
js.msg('msg','手机页面展示不能使用录入页面');
return;
}
var s = '';
$.get(js.getajaxurl('getinput','flow','main',{num:modenum}),function(s){
var str = '<div id="htmlstsing" style="display:none">'+s+'</div>';
$('body').append(str);
for(var i=0;i<=5;i++)if(get('tablesub'+i+''))$('#tablesub'+i+'').parent().html('{subdata'+i+'}');
editor.html($('#htmlstsing').html());
$('#htmlstsing').remove();
});
},
clearkong:function(){
editor.html('');
js.msg('success','已清空,保存后自动删除对应模版文件');
},
biaotiqieh:function(){
var nr= editor.html(),th='<span class="notitle"></span>';
if(nr.indexOf('notitle')>-1){
js.msg('success','已加入默认标题显示');
editor.html(nr.replace(th,''));
}else{
js.msg('success','已删除标题显示');
editor.html(nr+''+th+'');
}
}
};
</script>
<style>
select{font-size:12px}
.yangss{height:40px;line-height:40px;background:#e1e1e1;overflow:hidden}
#page_left div{text-align:left;padding:5px 10px;cursor:pointer}
#page_left div:hover{ background-color:#f1f1f1;color:#225DE8}
</style>
</head>
<body>
<div align="center">
<table width="100%">
<tr>
<td bgcolor="#f5f5f5">
<div style="width:270px;">
<div class="yangss"><h1>&nbsp;<?=$da['rs']['name']?>(元素)</h1></div>
<div id="page_left" style="overflow:auto">
<?php
foreach($da['fleft'] as $k=>$rs){
$str = '<div fields="'.$rs[0].'" fname="'.$rs[1].'" iszb="'.$rs[2].'">';
$str.= ''.($k+1).'. '.$rs[1].'('.$rs[0].')';
if($rs[0]){
$str.= ' <a href="javascript:" onclick="c.insert1(this,0)"></a> <a href="javascript:" onclick="c.insert1(this,1)">⊥</a>';
}else{
$str.= '';
}
$str.= '</div>';
echo $str;
}
?>
</div>
<div class="yangss" align="left">&nbsp; &nbsp;<a href="javascript:" onclick="return c.save()" class="webbtn">保存</a>&nbsp;
<a href="javascript:" onclick="return c.addmobo()" style="background-color:#888888" class="webbtn">使用录入页面</a>&nbsp;
<a href="javascript:" onclick="return c.clearkong()" style="background-color:#888888" class="webbtn">清空</a>
</div>
</div>
</td>
<td width="100%">
<div style="overflow:auto" id="page_conent">
<div style="padding:10px"><textarea style="width:650px;" id="content"><?=$da['content']?></textarea></div>
<div align="left" style="font-size:12px;padding:0px 10px">
<a href="javascript:" onclick="return c.biaotiqieh()" style="background-color:#888888" class="webbtn">是否标题切换</a>&nbsp;
模版保存在:<?=$da['p']?>/flow/page/view_<?=$da['bianhao']?>_<?=$da['atype']?>.html</div>
</div>
</td>
</tr>
</table>
</div>
</body>
</html>

View 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
));
}
}

View 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">
根据&nbsp;
</td>
<td >
<select style="width:150px" id="fields_{rand}" class="form-control" ><option value="">-统计字段-</option></select>
</td>
<td nowrap style="padding-left:10px">
的&nbsp;
</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>

View 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>

View File

@@ -0,0 +1,217 @@
<?php
/**
* 可视化模块设计
* 开发者:雨中磐石
* 官网www.rockoa.com
* 禁止乱修改头部信息,请保留尊重开发者
* 修改时间2021-10-14
*/
class flowviewClassAction extends Action
{
public function defaultAction()
{
$ybarr = $this->option->authercheck();
if(is_string($ybarr))return $ybarr;
$this->title = '可视化模块设计';
$this->assign('modearr', m('mode')->getmodearr("and (`type`<>'系统' or `num`='demo')"));
}
//加载字段信息
public function getziduanAction()
{
$num = $this->get('num');
$fid = $this->get('fid');
$moders = m('flow_set')->getone("`num`='$num'");
$tables = $moders['table'];
$ziduan = m('flow_element')->getone('mid='.$moders['id'].' and `iszb`=0 and `fields`=\''.$fid.'\'','*','`iszb` asc,`sort` asc');
$fiedar = $this->db->gettablefields('[Q]'.$tables.'','',"and `COLUMN_NAME`='$fid'");
if($fiedar){
$fieda = $fiedar[0];
if($fieda['type']=='decimal'){
$ziduan['lens'] = $fieda['xslen1'];
$ziduan['xiaoshu'] = $fieda['xslen2'];
}
}
return array(
'ziduan' => $ziduan,
'fiedar' => $fiedar,
'typedata' => $this->option->getdata('flowinputtype'),
);
}
//加载字段信息
public function getziduansAction()
{
$num = $this->get('num');
$name = $this->rock->xssrepstr($this->post('name'));
$fields = c('pingyin')->get($name,1);
if(!$fields || strlen($fields)<4)$fields = 'a'.$this->db->ranknum('flow_element','fields');
if(strlen($fields)>20)$fields = 'a'.substr($fields,0,19);
$ziduan['name'] = $name;
$ziduan['fields'] = $fields;
$ziduan['fieldstype'] = 'text';
$ziduan['id'] = '0';
$ziduan['dev'] = '';
$ziduan['lens'] = '0';
$ziduan['islu'] = '1';
$ziduan['issou'] = '1';
$ziduan['xiaoshu'] = '0';
return array(
'ziduan' => $ziduan,
'typedata' => $this->option->getdata('flowinputtype'),
);
}
//保存字段
public function saveziduanAction()
{
$id = (int)$this->post('id','0');
$num = $this->post('modenum');
$moders = m('flow_set')->getone("`num`='$num'");
$mid = $moders['id'];
$sarr['name'] = $this->post('name');
$sarr['fieldstype'] = $this->post('fieldstype');
$sarr['dev'] = $this->post('dev');
$sarr['placeholder'] = $this->post('placeholder');
$sarr['data'] = $this->post('data');
$sarr['lens'] = (int)$this->post('lens','0');
$sarr['isbt'] = (int)$this->post('isbt','0');
$sarr['islu'] = (int)$this->post('islu','0');
$sarr['issou'] = (int)$this->post('issou','0');
$sarr['fields'] = $this->post('fields');
$sarr['attr'] = $this->post('attr');
$sarr['xiaoshu']= (int)$this->post('xiaoshu','0'); //小数点
$sarr['mid'] = $mid;
$sarr['iszb'] = 0;
if(substr($sarr['fieldstype'],0,6)=='change' && isempt($sarr['data'])){
$sarr['data'] = ''.$sarr['fields'].'id';
}
include_once('webmain/main/flow/flowAction.php');
$obj = new flowClassAction();
$strs= $obj->elemensavefieldsbefore('flow_element', $sarr, $id);
if($strs)return returnerror($strs);
$where = '`id`='.$id.'';
if($id==0)$where = '';
$bo = m('flow_element')->record($sarr, $where);
if($bo)$obj->elemensavefields('', $sarr);
//一键布局PC录入
$path = 'webmain/flow/page/input_'.$num.'.html';
$isscl = false;
$xgwj = 0;
$base = 0;
if(!file_exists($path)){
$isscl = true;
}else{
$ofile = file_get_contents($path);
if(contain($ofile,'{file_content}'))$xgwj = 1;
if(contain($ofile,'{base_name}'))$base = 1;
if(contain($ofile,'autoyijianview'))$isscl = true;
}
if($isscl){
$obj->yinruonearr = array(
'modeid' => $mid,
'xgwj' => $xgwj,
'base' => $base,
);
$str = $obj->yinruoneAjax();
$this->rock->createtxt($path, $str);
}
return returnsuccess();
}
//删除字段
public function delziduanAction()
{
$id = (int)$this->get('id','0');
m('flow_element')->delete($id);
return returnsuccess();
}
//创建模块
public function createmodeAction()
{
$name = $this->rock->xssrepstr($this->post('name'));
$fields = c('pingyin')->get($name,1);
if(!$fields || strlen($fields)<4)$fields = $this->db->ranknum('flow_set','num');
if(strlen($fields)>20)$fields = substr($fields,0,18);
$num = 'zz'.$fields.'';
if(m('flow_set')->rows("`num`='$num'")>0){
$fields = $this->db->ranknum('flow_set','num');
$num = 'zz'.$fields.'';
}
$id = 0;
$uarr['name'] = $name;
$uarr['num'] = $num;
$uarr['table'] = $num;
$uarr['isflow'] = 0;
$uarr['tables'] = '';
$uarr['names'] = '';
$uarr['sort'] = '0';
$uarr['type'] = '新增';
$uarr['receid'] = 'all';
$uarr['recename'] = '全体人员';
$uarr['optdt'] = $this->now;
$uarr['isup'] = 0;
$uarr['isscl'] = 1;
$uarr['pctx'] = 1;
$uarr['status'] = 1;
$uarr['istxset'] = 0;
$uarr['ispl'] = 0;
$id = m('flow_set')->insert($uarr);
include_once('webmain/main/flow/flowAction.php');
$obj = new flowClassAction();
$obj->flowsetsaveafter('flow_set', $uarr);
$obj->setinputid = $id;
$obj->inputAction();
$wherestr = $this->jm->base64encode('`optid`={uid}');
m('flow_where')->insert(array(
'setid' => $id,
'num' => 'my',
'name' => '我添加数据',
'wheresstr' => $wherestr,
'sort' => 0,
'islb' => 1,
'status' => 1,
));
m('flow_where')->insert(array(
'setid' => $id,
'num' => 'all',
'pnum' => 'all',
'name' => '所有数据',
'wheresstr' => $this->jm->base64encode('1=1'),
'sort' => 0,
'islb' => 1,
'status' => 1,
));
$uarr = array(
'recename' => '全体人员',
'receid' => 'all',
'modeid' => $id,
'type' => 2,
'wherestr' => $wherestr,
);
m('flow_extent')->insert($uarr);
$uarr['type'] = 3;
m('flow_extent')->insert($uarr);
m('mode')->createlistpage($id); //生成列表页
return returnsuccess(array(
'name' => ''.$id.'.'.$name.'('.$num.')',
'id' => $id,
'num' => $num
));
}
}

View File

@@ -0,0 +1,18 @@
var iview= {
init:function(){
$('.lumtr').click(function(){
iview.clickvew(this)
});
},
clickvew:function(o1){
if(this.noobk)this.noobk.css('background','');
this.noobk = $(o1);
this.noobk.css('background',maincolor);
var fid = this.noobk.find('[name]')[0];
if(fid){
fid = fid.name.replace('[]','');
parent.ke.showzdxing(fid);
}
}
}
iview.init();

View File

@@ -0,0 +1,322 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?=$da['title']?></title>
<link rel="stylesheet" type="text/css" href="webmain/css/webmain.css"/>
<link rel="stylesheet" type="text/css" href="web/res/fontawesome/css/font-awesome.min.css">
<script src="js/jquery.js"></script>
<script src="js/js.js"></script>
<link rel="shortcut icon" href="favicon.ico" />
<script type="text/javascript" src="mode/plugin/jquery-rockmodels.js"></script>
<style>
<?php
$maincolor = getconfig('apptheme','#1389D3');
$maincolora= c('image')->colorTorgb($maincolor);
$maincolors= ''.$maincolora[0].','.$maincolora[1].','.$maincolora[2].'';
echo 'body{--main-color:'.$maincolor.';--main-border:rgba('.$maincolors.',0.2)}';
?>
.tools{height:40px;padding:0px 10px;overflow:hidden;text-align:center;line-height:40px;cursor:pointer;font-size:14px;float:left}
.tools:hover{background-color:#f1f1f1}
.typedata{margin:8px 10px;padding:8px;border:1px #dddddd solid;font-size:12px;border-radius:5px}
.listdata{padding:10px;border-bottom:1px #eeeeee solid;cursor:pointer}
.listdata:hover,.aactive{ background:#f1f1f1;color:<?=$maincolor?>}
</style>
<script>
maincolor='<?=$maincolor?>';
modenum = '';
modeid = 0;
var ke = {
init:function(){
this.geihes();
$(window).resize(this.geihes);
this.getzidudn();
},
geihes:function(){
var hei = winHb()-2;
$('#leftmain').css('height',''+hei+'px');
$('#centerdiv').css('height',''+(hei-40)+'px');
$('#shuxinglist').css('height',''+(hei-40)+'px');
$('#centerdivs').css('height',''+(hei-110)+'px');
},
addmode:function(){
js.prompt('新增模块','请输入模块名称(模块编号随机生成)', function(jg,txt){
if(jg=='yes' && txt){
ke.addmodes(txt);
}
});
},
addmodes:function(na){
js.loading('模块创建中...');
js.ajax('?d=main&m=flowview&a=createmode',{name:na},function(ret){
if(ret.success){
js.msgok('创建成功');
var ds = ret.data;
$('#modelist').prepend('<div class="listdata" onclick="ke.viewmode(\''+ds.num+'\',\''+ds.id+'\', this)">'+ds.name+'</div>');
}else{
js.msgerror(ret.msg);
}
},'post,json');
},
viewmode:function(bh,sid,o1){
if(this.modevsse)this.modevsse.removeClass('aactive');
this.modevsse = $(o1);
this.modevsse.addClass('aactive');
modenum = bh;
modeid = sid;
this.getzidudn();
},
getzidudn:function(){
if(!modenum)return;
var url = '?a=lum&m=input&d=flow&num='+modenum+'&showtype=view';
showIframe.location.href=url;
},
showshuxing:function(d){
var str = '<form name="myform" autocomplete="off">';
str+='<input type="hidden" name="id" value="'+d.id+'">';
//str+='<input type="hidden" name="isss" value="'+d.isss+'">';
str+='<table width="100%">';
str+='<tr>';
str+='<td align="right" nowrap><font color=red>*</font>名称&nbsp;</td>';
str+='<td><input type="text" value="'+d.name+'" name="name" style="width:100%" class="input"></td>';
str+='</tr>';
str+='<tr><td height="10"></td></tr>';
str+='<tr>';
str+='<td align="right" nowrap><font color=red>*</font>对应字段&nbsp;</td>';
str+='<td><input type="text" value="'+d.fields+'" placeholder="不能数字/中文" name="fields" style="width:100%" class="input"></td>';
str+='</tr>';
if(!d.xiaoshu)d.xiaoshu='0';
str+='<tr><td height="10"></td></tr>';
str+='<tr>';
str+='<td align="right" nowrap><font color=red>*</font>字段类型&nbsp;</td>';
str+='<td><select onchange="ke.changetype()" name="fieldstype" style="width:100%" class="input"></select><div id="div_number" style="display:none">小数点位数:<input type="text" onfocus="js.focusval=this.value" onblur="js.number(this)" min="0" max="6" name="xiaoshu" class="input" style="width:60px" value="'+d.xiaoshu+'"></div></td>';
str+='</tr>';
if(!d.lens)d.lens='';
str+='<tr><td height="10"></td></tr>';
str+='<tr>';
str+='<td align="right" nowrap>长度&nbsp;</td>';
str+='<td><input type="text" onfocus="js.focusval=this.value" onblur="js.number(this)" value="'+d.lens+'" name="lens" style="width:100%" class="input"></td>';
str+='</tr>';
if(!d.dev)d.dev='';
str+='<tr><td height="10"></td></tr>';
str+='<tr>';
str+='<td align="right" nowrap>默认值&nbsp;</td>';
str+='<td><input type="text" value="'+d.dev+'" placeholder="录入时显示的默认值" name="dev" style="width:100%" class="input"></td>';
str+='</tr>';
if(!d.placeholder)d.placeholder='';
str+='<tr><td height="10"></td></tr>';
str+='<tr>';
str+='<td align="right" nowrap>提示内容&nbsp;</td>';
str+='<td><input type="text" value="'+d.placeholder+'" name="placeholder" style="width:100%" class="input"></td>';
str+='</tr>';
str+='<tr><td height="10"></td></tr>';
str+='<tr>';
str+='<td align="right" nowrap>是否必填&nbsp;</td>';
str+='<td><label><input type="checkbox" value="1" name="isbt">录入必须填写</label></td>';
str+='</tr>';
str+='<tr><td height="10"></td></tr>';
str+='<tr>';
str+='<td align="right" nowrap>是否录入&nbsp;</td>';
str+='<td><label><input type="checkbox" value="1" name="islu">在录入页显示</label></td>';
str+='</tr>';
str+='<tr><td height="10"></td></tr>';
str+='<tr>';
str+='<td align="right" nowrap>是否搜索&nbsp;</td>';
str+='<td><label><input type="checkbox" value="1" name="issou">列表页上搜索</label></td>';
str+='</tr>';
if(!d.attr)d.attr='';
str+='<tr><td height="10"></td></tr>';
str+='<tr>';
str+='<td align="right" nowrap>属性&nbsp;</td>';
str+='<td><input type="text" value="'+d.attr+'" placeholder="如果只读填写readonly" name="attr" style="width:100%" class="input"></td>';
str+='</tr>';
if(!d.data)d.data='';
str+='<tr id="div_data">';
str+='<td align="right" nowrap>数据源&nbsp;</td>';
str+='<td><textarea name="data" style="width:100%;height:100px;margin-top:10px" class="input">'+d.data+'</textarea><a class="blue" href="http://www.rockoa.com/view_element.html" target="_blank">数据源帮助</a></td>';
str+='</tr>';
str+='<tr><td height="10"></td></tr>';
str+='<tr>';
str+='<td align="right" nowrap></td>';
str+='<td><button type="button" onclick="ke.saveshuxing(this)" class="webbtn">'+d.btnname+'保存</button>&nbsp;<span id="msgview">';
if(d.id>0){
str+='<button type="button" onclick="ke.delfields(this,'+d.id+')" class="webbtn webbtn-red">删</button>';
}
str+='</span></td>';
str+='</tr>';
str+='</table></form>';
str='<div style="margin:10px;">'+str+'</div>';
$('#shuxinglist').html(str);
js.setselectdata(form('fieldstype'),this.typedata,'value');
form('fieldstype').value = d.fieldstype;
if(d.isbt==1)form('isbt').checked=true;
if(d.islu==1)form('islu').checked=true;
if(d.issou==1)form('issou').checked=true;
this.changetype();
},
changetype:function(){
var val = form('fieldstype').value;
if(val=='number'){
$('#div_number').show();
}else{
$('#div_number').hide();
}
},
saveshuxing:function(o1){
var da = js.getformdata();
o1.disabled=true;
if(!da.name){js.setmsg('名称不能为空');return;}
if(!da.fields){js.setmsg('对应字段不能为空');return;}
js.setmsg('保存中...');
da.modenum = modenum;
js.ajax('?d=main&m=flowview&a=saveziduan',da,function(ret){
if(ret.success){
js.setmsg('保存成功','green');
ke.getzidudn();
}else{
js.setmsg(ret.msg,'red');
o1.disabled=false;
}
},'post,json');
},
iframeshow:function(){
},
showzdxing:function(fid){
js.loading('加载字段信息...');
js.ajax('?d=main&m=flowview&a=getziduan',{num:modenum,fid:fid},function(ret){
ke.typedata = ret.typedata;
var das = ret.ziduan;
if(das){
das.btnname = '编辑';
ke.showshuxing(das);
js.unloading();
}else{
js.msgerror('读取不到字段信息');
}
},'get,json');
},
addfields:function(){
if(modenum==''){
js.msgerror('请先选择模块');return;
}
js.prompt('新增字段','请输入字段名称', function(jg,txt){
if(jg=='yes' && txt){
ke.addfieldss(txt);
}
});
},
addfieldss:function(jx){
js.loading('加载字段信息...');
js.ajax('?d=main&m=flowview&a=getziduans',{num:modenum,name:jx},function(ret){
ke.typedata = ret.typedata;
var das = ret.ziduan;
das.btnname = '新增';
ke.showshuxing(das);
js.unloading();
},'post,json');
},
lubuju:function(){
if(modenum==''){
js.msgerror('请先选择模块');return;
}
var url='?m=flow&d=main&a=input&setid='+modeid+'&atype=0';
js.open(url,980,530);
}
,
lubujus:function(){
if(modenum==''){
js.msgerror('请先选择模块');return;
}
var url = js.getajaxurl('@lu','input','flow',{num:modenum});
js.open(url, 800,450);
},
delfields:function(o1,ids){
js.confirm('确定要删除此字段吗?', function(jg){
if(jg=='yes'){
js.ajax('?d=main&m=flowview&a=delziduan',{id:ids},function(ret){
js.msgok('删除成功');
ke.getzidudn();
},'get,json');
}
});
}
}
function initbody(){
ke.init();
}
</script>
</head>
<body style="background:#f5f5f5;padding:0;margin:0;overflow:hidden">
<div align="center">
<div align="left" style="max-width:1200px">
<table width="100%">
<tr valign="top">
<td >
<div id="leftmain" style="width:230px;background-color:white;border:1px #dddddd solid;overflow:auto">
<div style="padding:10px" align="center">
<button type="button" onclick="ke.addmode()" class="webbtn"><i class="icon-plus"></i> 新增模块</button>
</div>
<div id="modelist">
<?php
$type = '';
foreach($modearr as $k=>$rs){
if($type!=$rs['type']){
echo '<div style="line-height:30px;border-bottom:1px #eeeeee solid">&nbsp;<b>'.$rs['type'].'</b></div>';
}
$type = $rs['type'];
echo '<div class="listdata" onclick="ke.viewmode(\''.$rs['num'].'\',\''.$rs['id'].'\', this)">'.$rs['name'].'</div>';
}
?>
</div>
</div>
</td>
<td width="100%" style="padding:0px 10px">
<div style="border:1px #dddddd solid;">
<div style="height:40px;overflow:hidden;background:#fefefe;border-bottom:0px #f1f1f1 solid">
<div class="tools" onclick="ke.addfields()"><i class="icon-plus"></i>增加字段</div>
<div class="tools" onclick="ke.lubuju()"><i class="icon-laptop"></i>PC端录入布局</div>
<div class="tools" onclick="ke.lubujus()"><i class="icon-desktop"></i>PC录入页</div>
</div>
<div id="centerdiv" style="height:40px;background:#ededed" align="center">
<div style="padding:15px 0px">
<div style="height:40px;line-height:40px;font-size:12px;color:gray">更多完整的设置,请到【流程模块→表单元素管理】下操作</div>
<div id="centerdivs" style="width:350px;overflow:hidden;background:white;border:1px #cccccc solid;border-radius:2px" id="ziduanlist" align="left">
<iframe src="" onload="ke.iframeshow()" name="showIframe" width="100%" height="100%" frameborder="0"></iframe>
</div>
</div>
</div>
</div>
</td>
<td >
<div id="rightmain" style="width:300px;background-color:white;border:1px #dddddd solid">
<div style="height:40px;overflow:hidden;background:#fefefe;border-bottom:1px #f1f1f1 solid;line-height:40px">
&nbsp;字段属性
</div>
<div id="shuxinglist" style="height:120px;overflow:auto"></div>
</div>
</td>
</tr>
</table>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,329 @@
<?php
class fworkClassAction extends Action
{
/**
* 流程申请获取数组
*/
public function getmodearrAjax()
{
$rows = m('mode')->getmoderows($this->adminid,'and islu=1');
$row = array();
$viewobj = m('view');
foreach($rows as $k=>$rs){
$lx = $rs['type'];
if(!$viewobj->isadd($rs, $this->adminid))continue;
if(!isset($row[$lx]))$row[$lx]=array();
$row[$lx][] = $rs;
}
$this->returnjson(array('rows'=>$row));
}
/**
* 单据查看获取数组
*/
public function getmodesearcharrAjax()
{
$rows = m('mode')->getmoderows($this->adminid);
$row = array();
$mid = '0';
foreach($rows as $k=>$rs){
$path = ''.P.'/flow/page/rock_page_'.$rs['num'].'.php';
if(!file_exists($path) || $rs['isscl']==0)continue;
$lx = $rs['type'];
$mid.=','.$rs['id'].'';
$row[$lx][] = $rs;
}
if($mid!='0'){
$where = m('admin')->getjoinstr('syrid', $this->adminid, 1);
$wrows = m('flow_where')->getrows('`setid` in('.$mid.') and `status`=1 and `islb` and `num` is not null and ('.$where.') and `pnum` is null group by `setid`','`setid`,min(sort),`num`');
$atypea = array();
foreach($wrows as $k1=>$rs1){
$nus = $rs1['setid'];
if(!isset($atypea[$nus]))$atypea[$nus] = $rs1['num'];
}
foreach($row as $lx=>$rowaa){
foreach($rowaa as $k2=>$rs2){
$row[$lx][$k2]['atype'] = $this->rock->arrvalue($atypea, $rs2['id']);
}
}
}
$this->returnjson(array('rows'=>$row));
}
public function flowbillbefore($table)
{
$lx = $this->post('atype');
$this->atypess = $lx;
$dt = $this->post('dt1');
$dt2 = $this->post('dt2');
$key = $this->post('key');
$zt = $this->post('zt');
$modeid = (int)$this->post('modeid','0');
$uid = $this->adminid;
$where = 'and (a.`uid`='.$uid.' or a.`optid`='.$uid.')';
//待办
if($lx=='daib'){
$where = 'and a.`isturn`=1 and a.`status` not in(1,2) and '.$this->rock->dbinstr('a.nowcheckid', $uid);
}
//我下属申请
if($lx=='xia'){
$where = 'and a.`isturn`=1 and '.$this->rock->dbinstr('b.superid', $uid);
}
//我参与
if($lx=='jmy'){
$where = 'and a.`isturn`=1 and '.$this->rock->dbinstr('a.allcheckid', $uid);
}
//未通过
if($lx=='mywtg'){
$where.=" and a.status=2";
}
//待提交
if($lx=='daiturn'){
$where.=" and a.`status` not in(5) and a.`isturn`=0 "; //未提交
}
//异常
if($lx=='error'){
$whers = m('flowbill')->errorwhere('a.');
$where = ' and '.$whers.'';
}
//授权单据查看
if($lx=='grantview'){
$where =' and 1=2';
if($modeid>0){
$moders = m('flow_set')->getone($modeid);
$where = m('view')->viewwhere($moders, $uid);
}
}
$this->modeids = false;
//抄送的
if($lx=='chaosview'){
$where =' and 1=2';
$crows = $this->db->getall("select * from `[Q]flow_chao` where ".$this->rock->dbinstr('csnameid', $uid)."");
$this->modeids = '0';
if($crows){
$modeids = '';
$mids = '';
foreach($crows as $k1=>$rs1){
$modeids.=','.$rs1['modeid'].'';
$mids.=','.$rs1['mid'].'';
}
$this->modeids = substr($modeids,1);
$where = " and a.`isturn`=1 and a.`modeid` in(".$this->modeids.") and a.`mid` in(".substr($mids,1).")";
}
}
//流程监控
if($lx=='jiankong'){
$where =' and 1=2';
$this->modeids = '0';
if($modeid==0){
$rows = m('view')->getjilu($this->adminid);
foreach($rows as $k1=>$rs1){
$this->modeids.=','.$rs1['modeid'].'';
}
}else{
$wwhere = m('view')->jiankongwhere($modeid, $this->adminid);//返回主表的条件
$wwhere = str_replace('{asqom}','', $wwhere);
$moders = $this->db->getone('[Q]flow_set', $modeid);
$where =' and `mid` in(select `id` from `[Q]'.$moders['table'].'` where 1=1 '.$wwhere.')';
}
}
if($zt!=''){
if($zt!='6'){
$where.=" and a.`status`='$zt'";
if($zt!='5')$where.=' and a.`isturn`=1';
}else{
$where.=" and a.`status` not in(5) and a.`isturn`=0 "; //未提交
}
}
if($dt!='')$where.=" and a.`applydt`>='$dt'";
if($dt2!='')$where.=" and a.`applydt`<='$dt2'";
if($modeid>0)$where.=' and a.modeid='.$modeid.'';
if(!isempt($key))$where.=" and (b.`name` like '%$key%' or b.`deptname` like '%$key%' or a.`sericnum` like '$key%' or a.`nowcheckname`='$key' or a.`modename`='$key')";
return array(
'table' => '`[Q]flow_bill` a left join `[Q]admin` b on a.uid=b.id',
'where' => " and a.isdel=0 $where",
'fields'=> 'a.*,b.name,b.deptname',
'order' => 'a.optdt desc'
);
}
public function flowbillafter($table, $rows)
{
$rows = m('flowbill')->getbilldata($rows);
$flowarr = array();
if($this->atypess!='error'){
if($this->modeids===false){
$flowarr = m('mode')->getmodemyarr($this->adminid);
}else{
$flowarr = m('mode')->getmodemyarr(0,'and `id` in('.$this->modeids.')');
}
}else if($rows){
foreach($rows as $k=>$rs){
$errorsm = '';
$chuli = '到[流程模块→流程审核步骤]下对应的步骤设置审核人';
$errtype = 0;//有步骤没审核人
if(isempt($rs['nowcheckid'])){
if($rs['nowcourseid']=='0'){
$errorsm = '<font color=blue>当前没有审核步骤</font>';
$chuli = '到[流程模块→流程单据查看]删除最后一条处理记录,然后[重新匹配流程]';
$errtype = 1; //没有步骤
}else{
$errorsm = '<font color=red>当前没有审核人</font>';
}
}else{
$errorsm = '<font color=#800000>审核人帐号已停用</font>';
$errtype = 2; //人员停用
}
$rows[$k]['errorsm'] = $errorsm;
$rows[$k]['chuli'] = $chuli;
$rows[$k]['errtype'] = $errtype;
}
}
return array(
'rows' => $rows,
'flowarr' => $flowarr
);
}
public function flowtodosbefore($table)
{
$dt = $this->post('dt1');
$key = $this->post('key');
$zt = $this->post('zt');
$modenum= $this->post('modeid');
$uid = $this->adminid;
$where = 'and `uid`='.$uid.'';
if(!isempt($modenum))$where.=" and `modenum`='$modenum'";
if(!isempt($dt))$where.=" and `adddt` like '$dt%'";
return array(
'where' => $where,
'order' => '`adddt` desc'
);
}
public function flowtodosafter($table, $rows)
{
$nums = "''";
$mors = $this->db->getall('select `modenum` from `[Q]flow_todos` where `uid`='.$this->adminid.' group by `modenum`');
foreach($mors as $k=>$rs)$nums.=",'".$rs['modenum']."'";
$flowarr = m('mode')->getrows("`status`=1 and `num` in($nums)",'`num`,`name`,`summary`,`type`','sort');
$modearr = array();
foreach($flowarr as $k=>$rs){
$modearr[$rs['num']] = $rs['summary'];
}
if($rows){
foreach($rows as $k=>$rs){
//$rows[$k]['id'] = $rs['mid'];
$rers = $this->db->getone('[Q]'.$rs['table'].'', $rs['mid']);
$summary = '';
if($rers){
$summary = $this->rock->reparr(arrvalue($modearr, $rs['modenum']), $rers);
$rows[$k]['optdt'] = arrvalue($rers,'optdt');
$rows[$k]['optname'] = arrvalue($rers,'optname');
}
$rows[$k]['summary'] = $summary;
if($rs['isread']=='1'){
$rows[$k]['ishui'] = 1;
$rows[$k]['isread'] = '<font color="#888888">已读</font>';
}else{
$rows[$k]['isread'] = '<font color="red">未读</font>';
}
}
}
return array(
'rows' => $rows,
'flowarr' => $flowarr
);
}
public function meetqingkbefore($table)
{
$pid = $this->option->getval('hyname','-1', 2);
return array(
'where' => "and `pid`='$pid'",
'order' => 'sort',
'field' => 'id,name',
);
}
public function meetqingkafter($table, $rows)
{
$dtobj = c('date');
$startdt = $this->post('startdt', $this->date);
$enddt = $this->post('enddt');
if($enddt=='')$enddt = $dtobj->adddate($startdt,'d',7);
$jg = $dtobj->datediff('d',$startdt, $enddt);
if($jg>30)$jg = 30;
$flow = m('flow:meet');
$data = m('meet')->getall("`status`=1 and `type`=0 and `startdt`<='$enddt 23:59:59' and `enddt`>='$startdt' order by `startdt` asc",'hyname,title,startdt,enddt,state,joinname,optname,id');
$datss = array();
foreach($data as $k=>$rs){
$rs = $flow->flowrsreplace($rs);
$key = substr($rs['startdt'],0,10).$rs['hyname'];
if(!isset($datss[$key]))$datss[$key] = array();
$str = '['.substr($rs['startdt'],11,5).'→'.substr($rs['enddt'],11,5).']'.$rs['title'].'('.$rs['joinname'].') '.$rs['state'].'';
$datss[$key][] = $str;
}
$columns = $rows;
$barr = array();
$dt = $startdt;
for($i=0; $i<=$jg; $i++){
if($i>0)$dt = $dtobj->adddate($dt,'d',1);
$w = $dtobj->cnweek($dt);
$status = 1;
if($w=='六'||$w=='日')$status = 0;
$sbarr = array(
'dt' => '星期'.$w.'<br>'.$dt.'',
'status' => $status
);
foreach($rows as $k=>$rs){
$key = $dt.$rs['name'];
$str = '';
if(isset($datss[$key])){
foreach($datss[$key] as $k1=>$strs){
$str.= ''.($k1+1).'.'.$strs.'<br>';
}
}
$sbarr['meet_'.$rs['id'].''] = $str;
}
$barr[] = $sbarr;
}
$arr['columns'] = $columns;
$arr['startdt'] = $startdt;
$arr['enddt'] = $enddt;
$arr['rows'] = $barr;
$arr['totalCount'] = $jg+1;
return $arr;
}
public function deltodoAjax()
{
$id = $this->post('id','0');
m('flow_todos')->delete('id in('.$id.') and `uid`='.$this->adminid.'');
$this->backmsg();
}
}

View File

@@ -0,0 +1,35 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var c={
showdata:function(a){
var hhu = parseInt(viewwidth/260);
var j=0,lx,d,s1,i,l=0,len;
var strarr = [];for(i=0;i<hhu;i++)strarr[i]='';
for(lx in a){
d=a[lx];s1='';j++;len=d.length;
s1 ='<div align="left" style="margin:20px;width:230px" class="list-group">';
s1+='<div class="list-group-item list-group-item-success"><i class="icon-plus"></i> '+lx+'('+len+')</div>';
for(i=0;i<len;i++){
s1+='<a style="TEXT-DECORATION:none" onclick="openinput(\''+d[i].name+'\',\''+d[i].num+'\',0)" class="list-group-item">'+d[i].name+'</a>';
}
s1+='</div>';
strarr[l]+=s1;
l++;
if(l==hhu)l=0;
}
var s='<table><tr valign="top">';
for(i=0;i<hhu;i++)s+='<td>'+strarr[i]+'</td>';
s+='</tr></table>';
$('#view_{rand}').html(s);
}
}
js.ajax(js.getajaxurl('getmodearr','{mode}','{dir}'),{},function(a){
c.showdata(a.rows);
},'get,json');
});
</script>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,211 @@
<?php defined('HOST') or die('not access');?>
<script >
$(document).ready(function(){
{params}
var atype=params.atype,zt=params.zt,mid=params.modeid;
if(!zt)zt='';
if(!mid)mid='0';
var bools=false;
var a = $('#view_{rand}').bootstable({
tablename:'flow_bill',params:{'atype':atype,'zt':zt,'modeid':mid},fanye:true,
url:publicstore('{mode}','{dir}'),checked:atype=='daib',
storeafteraction:'flowbillafter',storebeforeaction:'flowbillbefore',
columns:[{
text:'模块',dataIndex:'modename'
},{
text:'部门',dataIndex:'deptname'
},{
text:'申请人',dataIndex:'name'
},{
text:'单号',dataIndex:'sericnum'
},{
text:'申请日期',dataIndex:'applydt',sortable:true
},{
text:'摘要',dataIndex:'summary',align:'left',renderer:function(v){
return '<div style="min-width:400px">'+v+'</div>';
}
},{
text:'操作人',dataIndex:'optname',sortable:true
},{
text:'状态',dataIndex:'status',sortable:true
},{
text:'',dataIndex:'caozuo',callback:'opegs{rand}'
}],
celldblclick:function(){
c.view();
},
load:function(a){
if(!bools){
var s = '<option value="0">-选择模块-</option>',len=a.flowarr.length,i,csd,types='';
for(i=0;i<len;i++){
csd = a.flowarr[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);
if(mid>0)get('mode_{rand}').value=mid;
}
bools=true;
},
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
}
});
function btn(bo){
//get('xiang_{rand}').disabled = bo;
}
xing{rand}=function(oi){
a.changedata = a.getData(oi);
c.view();
}
var c = {
reload:function(){
a.reload();
},
view:function(){
var d=a.changedata;
openxiangs(d.modename,d.modenum,d.id,'opegs{rand}');
},
search:function(){
a.setparams({
key:get('key_{rand}').value,
dt1:get('dt1_{rand}').value,
dt2:get('dt2_{rand}').value,
modeid:get('mode_{rand}').value
},true);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'date',inputid:'dt'+lx+'_{rand}'});
},
daochu:function(){
a.exceldown(nowtabs.name);
},
changlx:function(o1,lx){
$("button[id^='state{rand}']").removeClass('active');
$('#state{rand}_'+lx+'').addClass('active');
a.setparams({zt:lx});
this.search();
},
plliang:function(){
if(this.plbool)return;
var d = a.getcheckdata();
if(d.length<=0){
js.msg('msg','请先用复选框选中行');
return;
}
this.checkd = d;
js.prompt('批量处理同意','请输入批量处理同意说明(选填)',function(lxbd,msg){
if(lxbd=='yes'){
setTimeout(function(){c.plliangso(msg);},10);
}
});
},
plliangso:function(sm){
this.plbool = true;
this.plchusm = sm;
this.cgshu = 0;
this.sbshu = 0;
js.wait('<span id="plchushumm"></span>');
this.plliangsos(0);
},
plliangsos:function(oi){
var len = this.checkd.length;
$('#plchushumm').html('批量处理中('+len+'/'+(oi+1)+')...');
if(oi>=len){
$('#plchushumm').html('处理完成,成功<font color=green>'+this.cgshu+'</font>条,失败<font color=red>'+this.sbshu+'</font>条');
this.reload();
this.plbool=false;
return;
}
var d = this.checkd[oi];
var cns= {sm:this.plchusm,zt:1,modenum:d.modenum,mid:d.id};
js.ajax(js.getajaxurl('check','flowopt','flow'),cns, function(ret){
if(ret.success){
c.cgshu++;
}else{
c.sbshu++;
js.msg('msg','['+d.modename+']'+ret.msg+',不能使用批量来处理,请打开详情去处理。');
}
c.plliangsos(oi+1);
},'post,json');
}
};
js.initbtn(c);
$('#mode_{rand}').change(function(){
c.search();
});
opegs{rand}=function(){
c.reload();
}
$('#state{rand}_'+zt+'').addClass('active');
if(atype=='mywtg' || atype=='daiturn'){
$('#stewwews{rand}').hide();
}
if(atype!='daib'){
$('#tdleft_{rand}').hide();
}else{
$('#state{rand}_').html('全部待办');
$('#state{rand}_0').remove();
$('#state{rand}_1').remove();
$('#state{rand}_2').remove();
$('#state{rand}_5').remove();
$('#state{rand}_6').remove();
}
if(atype!='my')$('#state{rand}_6').remove();
});
</script>
<div>
<table width="100%">
<tr>
<td style="padding-right:10px;" id="tdleft_{rand}" nowrap><button class="btn btn-primary" click="plliang,0" type="button">批量处理同意</button></td>
<td nowrap>
<select style="width:150px" id="mode_{rand}" class="form-control" ><option value="0">-选择模块-</option></select>
</td>
<td style="padding-left:10px">
<input style="width:110px" onclick="js.changedate(this)" placeholder="申请日期" readonly class="form-control datesss" id="dt1_{rand}" >
</td>
<td nowrap>&nbsp;至&nbsp;</td>
<td nowrap>
<input style="width:110px" onclick="js.changedate(this)" readonly class="form-control datesss" id="dt2_{rand}" >
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:130px" id="key_{rand}" placeholder="单号/处理人/姓名/部门">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="80%" style="padding-left:10px">
<div id="stewwews{rand}" class="btn-group">
<button class="btn btn-default" id="state{rand}_" click="changlx," type="button">全部状态</button>
<button class="btn btn-default" id="state{rand}_0" click="changlx,0" type="button">待审核</button>
<button class="btn btn-default" id="state{rand}_1" style="color:green" click="changlx,1" type="button">已审核</button>
<button class="btn btn-default" id="state{rand}_2" style="color:red" click="changlx,2" type="button">未通过</button>
<button class="btn btn-default" id="state{rand}_5" style="color:#888888" click="changlx,5" type="button">已作废</button>
<button class="btn btn-default" id="state{rand}_6" style="color:#ff6600" click="changlx,6" type="button">待提交</button>
</div>
</td>
<td align="right" nowrap>
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,123 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var atype=params.atype;
var a = $('#view_{rand}').bootstable({
tablename:'meet',modenum:'meet',modename:'会议',params:{'atype':atype},fanye:true,
columns:[{
text:'',dataIndex:'caozuo'
},{
text:'会议室',dataIndex:'hyname'
},{
text:'主题',dataIndex:'title',align:'left'
},{
text:'参会人',dataIndex:'joinname'
},{
text:'星期',dataIndex:'week'
},{
text:'纪要人',dataIndex:'jyname'
},{
text:'开始时间',dataIndex:'startdt'
},{
text:'结束时间',dataIndex:'enddt'
},{
text:'说明',dataIndex:'explain',align:'left'
},{
text:'状态',dataIndex:'state',sortable:true
},{
text:'发起人',dataIndex:'optname'
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
}
});
function btn(bo){
get('xiang_{rand}').disabled = bo;
}
var c = {
reload:function(){
a.reload();
},
view:function(){
var d=a.changedata;
openxiangs('会议','meet',d.id,'opegs{rand}');
},
search:function(){
a.setparams({
key:get('key_{rand}').value,
dt:get('dt1_{rand}').value
},true);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'date',inputid:'dt'+lx+'_{rand}'});
},
daochu:function(){
a.exceldown(nowtabs.name);
},
changlx:function(o1,lx){
$("button[id^='state{rand}']").removeClass('active');
$('#state{rand}_'+lx+'').addClass('active');
var asty=['my','mybz','myall','myfq'];
a.setparams({atype:asty[lx]});
this.search();
},
clickwin:function(){
openinput('会议','meet',0,'opegs{rand}');
}
};
js.initbtn(c);
$('#mode_{rand}').change(function(){
c.search();
});
opegs{rand}=function(){
c.reload();
}
});
</script>
<div>
<table width="100%">
<tr>
<td style="padding-right:10px">
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增</button>
</td>
<td>
<div style="width:120px" class="input-group">
<input placeholder="日期" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,1" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:180px" id="key_{rand}" placeholder="主题/参会人">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="80%" style="padding-left:10px">
<div id="stewwews{rand}" class="btn-group">
<button class="btn btn-default active" id="state{rand}_0" click="changlx,0" type="button">今日会议</button>
<button class="btn btn-default" id="state{rand}_1" click="changlx,1" type="button">本周会议</button>
<button class="btn btn-default" id="state{rand}_2" click="changlx,2" type="button">全部会议</button>
<button class="btn btn-default" id="state{rand}_3" click="changlx,3" type="button">我发起</button>
</div>
</td>
<td align="right" nowrap>
<button class="btn btn-default" id="xiang_{rand}" click="view" disabled type="button">详情</button> &nbsp;
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">默认显示今日的会议,会议读取全部人员的</div>

View File

@@ -0,0 +1,85 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var columns = [{
text:'日期',dataIndex:'dt'
}];
var a = $('#view_{rand}').bootstable({
tablename:'option',fanye:false,modedir:'{mode}:{dir}',storebeforeaction:'meetqingkbefore',storeafteraction:'meetqingkafter',
columns:columns,
loadbefore:function(d){
get('dt1_{rand}').value=d.startdt;
get('dt2_{rand}').value=d.enddt;
c.setcolumns(d.columns);
}
});
var c = {
search:function(){
a.setparams({
'startdt':get('dt1_{rand}').value,
'enddt':get('dt2_{rand}').value
},true);
},
daochu:function(){
a.exceldown();
},
setcolumns:function(d){
var col=[],i,len=d.length;
for(i=0;i<columns.length;i++)col.push(columns[i]);
for(i=0;i<len;i++){
col.push({text:d[i].name,dataIndex:'meet_'+d[i].id+'',align:'left'});
}
a.setColumns(col);
},
clickwin:function(){
openinput('会议','meet',0,'opegs{rand}');
}
};
js.initbtn(c);
opegs{rand}=function(){
a.reload();
}
});
</script>
<div>
<table width="100%">
<tr>
<td style="padding-right:10px">
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增</button>
</td>
<td nowrap>日期&nbsp;</td>
<td nowrap>
<div style="width:140px" class="input-group">
<input placeholder="" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" onclick="return js.selectdate(this,'dt1_{rand}')" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td nowrap>&nbsp;至&nbsp;</td>
<td nowrap>
<div style="width:140px" class="input-group">
<input placeholder="" readonly class="form-control" id="dt2_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" onclick="return js.selectdate(this,'dt2_{rand}')" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td style="padding-left:10px" 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>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,41 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var c={
showdata:function(a){
var hhu = parseInt(viewwidth/260);
var j=0,lx,d,s1,i,l=0,len;
var strarr = [];for(i=0;i<hhu;i++)strarr[i]='';
for(lx in a){
d=a[lx];s1='';j++;len=d.length;
s1 ='<div align="left" style="margin:20px;width:230px" class="list-group">';
s1+='<div class="list-group-item list-group-item-success"><i class="icon-star-empty"></i> '+lx+'('+len+')</div>';
for(i=0;i<len;i++){
s1+='<a style="TEXT-DECORATION:none" onclick="opencoluske_{rand}(\''+d[i].name+'\',\''+d[i].num+'\',\''+d[i].atype+'\')" class="list-group-item">'+d[i].name+'</a>';
}
s1+='</div>';
strarr[l]+=s1;
l++;
if(l==hhu)l=0;
}
var s='<table><tr valign="top">';
for(i=0;i<hhu;i++)s+='<td>'+strarr[i]+'</td>';
s+='</tr></table>';
$('#view_{rand}').html(s);
}
}
opencoluske_{rand}=function(na,num,ats){
if(!ats)ats='my';
addtabs({name:na,num:'search'+num+'',url:'flow,page,'+num+',atype='+ats+'',icons:'search'});
}
js.ajax(js.getajaxurl('getmodesearcharr','{mode}','{dir}'),{},function(a){
c.showdata(a.rows);
},'get,json');
});
</script>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,128 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var bools=false;
var a = $('#view_{rand}').bootstable({
tablename:'flow_todos',fanye:true,checked:true,
url:publicstore('{mode}','{dir}'),
storeafteraction:'flowtodosafter',storebeforeaction:'flowtodosbefore',
columns:[{
text:'模块',dataIndex:'modename'
},{
text:'提醒时间',dataIndex:'adddt',sortable:true
},{
text:'摘要',dataIndex:'summary',align:'left',width:300
},{
text:'操作人',dataIndex:'optname'
},{
text:'单据操作时间',dataIndex:'optdt'
},{
text:'状态',dataIndex:'isread',sortable:true
}],
celldblclick:function(){
c.view();
},
load:function(a){
if(!bools){
var s = '<option value="">-选择模块-</option>',len=a.flowarr.length,i,csd,types='';
for(i=0;i<len;i++){
csd = a.flowarr[i];
if(types!=csd.type){
if(types!='')s+='</optgroup>';
s+='<optgroup label="'+csd.type+'">';
}
s+='<option value="'+csd.num+'">'+csd.name+'</option>';
types = csd.type;
}
$('#mode_{rand}').html(s);
}
bools=true;
},
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
}
});
function btn(bo){
get('xiang_{rand}').disabled = bo;
}
var c = {
reload:function(){
a.reload();
},
view:function(){
var d=a.changedata;
openxiangs(d.modename,d.modenum,d.mid,'opegs{rand}');
},
search:function(){
a.setparams({
dt1:get('dt1_{rand}').value,
modeid:get('mode_{rand}').value
},true);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'date',inputid:'dt'+lx+'_{rand}'});
},
daochu:function(){
a.exceldown(nowtabs.name);
},
setss:function(){
addtabs({name:'单据提醒设置',num:'searchremind',url:'flow,page,remind,atype=my',icons:'cog'});
},
del:function(){
a.del({checked:true,url:js.getajaxurl('deltodo','{mode}','{dir}')});
}
};
js.initbtn(c);
$('#mode_{rand}').change(function(){
c.search();
});
opegs{rand}=function(){
c.reload();
}
});
</script>
<div>
<table width="100%">
<tr>
<td style="padding-right:10px">
<button class="btn btn-default" click="setss" type="button"><i class="icon-cog"></i> 单据提醒设置</button>
</td>
<td nowrap>
<select style="width:150px" id="mode_{rand}" class="form-control" ><option value="">-所有模块-</option></select>
</td>
<td style="padding-left:10px">
<div style="width:140px" class="input-group">
<input placeholder="提醒日期" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,1" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="80%" style="padding-left:10px">
</td>
<td align="right" nowrap>
<button class="btn btn-default" id="xiang_{rand}" click="view" disabled type="button">详情</button> &nbsp; <button class="btn btn-default" click="daochu,1" type="button">导出</button>&nbsp;
<button class="btn btn-danger" click="del" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,385 @@
<?php
class goodsClassAction extends Action
{
public function initAction()
{
$this->goodsobj = m('goods');
}
private function gettypename($tid)
{
return $this->goodsobj->gettypename($tid);
}
public function aftershow($table, $rows)
{
$typearr = $depotarr = array();
$mid = (int)$this->post('mid','0');//根据主表出入库操作
if($rows){
$aid = '0';
foreach($rows as $k=>$rs){
$rows[$k]['typeid'] = $this->gettypename($rs['typeid']);
$aid.=','.$rs['id'].'';
if($rs['stock']=='0')$rows[$k]['stock'] = '';
if($rs['stock']<0)$rows[$k]['ishui']=1;
}
$rows = $this->pandian($aid, $rows);
}else{
if($mid>0){
m('goodm')->update('state=1', $mid);
}
}
if($this->loadci==1){
$type = (int)$this->post('type');
$typearr= $this->option->getdata('kutype'.$type.'');
$where = m('admin')->getcompanywhere(1);
$depotarr = m('godepot')->getall('1=1'.$where.'','id,depotname as name,depotnum','`sort`');
foreach($depotarr as $k=>$rs){
$depotarr[$k]['namea']= $rs['name'];
$depotarr[$k]['name'] = ''.$rs['depotnum'].'.'.$rs['name'].'';
}
}
return array(
'rows' => $rows,
'typearr' => $typearr,
'depotarr' => $depotarr,
);
}
public function beforeshow($table)
{
$key = $this->post('key');
$typeid = (int)$this->post('typeid');
$mid = (int)$this->post('mid','0');//根据主表出入库操作
$where = '';
if($typeid != 0){
$alltpeid = $this->option->getalldownid($typeid);
$where .= ' and `typeid` in('.$alltpeid.')';
}
if($key!=''){
$where .= " and (`name` like '%$key%' or `num` like '%$key%' or `guige` like '%$key%' or `xinghao` like '%$key%') ";
}
$where.=m('admin')->getcompanywhere(1);
if($mid>0){
/*
$carro = m('goodn')->getall('mid='.$mid.' and `couns`<`count`');
$typeids = '0';
foreach($carro as $k=>$rs)$typeids.=','.$rs['aid'].'';
$where .= ' and `id` in('.$typeids.')';
*/
return array(
'where' => 'and b.`mid`='.$mid.' and b.`couns`<b.`count`',
'fields' => 'a.*,(b.`count`-b.`couns`)maxcount',
'table' => '`[Q]goods` a left join `[Q]goodn` b on a.`id`=b.`aid`'
);
}
return $where;
}
//盘点对应仓库库存计算
private function pandian($aid,$rows)
{
if($this->post('atype')!='pan')return $rows;
$ckarr = m('goods')->getstock($aid, $this->post('dt'));
foreach($rows as $k=>&$rs){
$rs['stock'] = '';
if(isset($ckarr[$rs['id']])){
$kdsra= $ckarr[$rs['id']];
$rs['stock'] = $kdsra[0]=='0'?'':$kdsra[0]; //总库存
foreach($kdsra as $k1=>$v1){
if($k1>0)$rs['stockdepotid'.$k1.''] = $v1=='0'?'':$v1; //对应仓库库存
}
}
}
return $rows;
}
public function xiangbeforeshow($table)
{
$key = $this->post('key');
$dt = $this->post('dt');
$types = $this->post('types');
$typeid = (int)$this->post('typeid', 0);
$depotid = (int)$this->post('depotid', 0);
$where = '';
if($typeid>0){
$alltpeid = $this->option->getalldownid($typeid);
$where.=" and b.typeid in($alltpeid)";
}
if($key!=''){
$where .= " and (b.`name` like '%$key%' or a.optname like '%$key%' or c.depotname like '%$key%' )";
}
if($dt!=''){
$where .= " and a.`applydt` like '$dt%' ";
}
if($depotid>0){
$where .= " and a.`depotid`='$depotid'";
}
if($types){
$typea = explode('_', $types);
$where.= ' and a.type='.substr($typea[0],1).' and a.kind='.$typea[1].'';
}
$where .= m('admin')->getcompanywhere(1,'a.');
$table = '`[Q]goodss` a left join `[Q]goods` b on a.aid=b.id left join `[Q]godepot` c on a.depotid=c.id';
$fields = 'a.id,b.name,a.count,c.depotname,a.type,a.kind,a.status,a.optname,b.typeid,b.xinghao,b.guige,a.applydt,a.explain,a.mid';
return array(
'where' => $where,
'table' => $table,
'fields' => $fields,
);
}
public function xiangaftershow($table, $rows)
{
$tyeparr = array();
if($rows){
$typearr0= $this->option->getdata('kutype0');
$typearr1= $this->option->getdata('kutype1');
$tyeparr['a0_3'] = '调拨入库';
$tyeparr['a1_3'] = '调拨出库';
foreach($typearr0 as $k=>$rs)$tyeparr['a0_'.$rs['value'].''] = $rs['name'];
foreach($typearr1 as $k=>$rs)$tyeparr['a1_'.$rs['value'].''] = $rs['name'];
$statusar= array('<font color=blue>待审核</font>','<font color=green>已审核</font>','<font color=red>审核未通过</font>');
$typearr = array();
foreach($rows as $k=>$rs){
$tid = $rs['typeid'];
if(isset($typearr[$tid])){
$rows[$k]['typeid'] = $typearr[$tid];
}else{
$rows[$k]['typeid'] = $this->db->getpval('[Q]option','pid','name', $tid,'/','id',2);
$typearr[$tid] = $rows[$k]['typeid'];
}
$skey = 'a'.$rs['type'].'_'.$rs['kind'].'';
$kind = '';
if(isset($tyeparr[$skey]))$kind = $tyeparr[$skey];
$rows[$k]['kind'] = $kind;
$rows[$k]['status'] = $statusar[$rs['status']];
if($rs['mid']>0)$rows[$k]['checkdisabled'] = true;//有主表ID不能删除
}
}
$barr = array('rows' => $rows,'tyeparr'=>$tyeparr);
return $barr;
}
/**
* 删除出入库详情
*/
public function delxiangAjax()
{
$ids = c('check')->onlynumber($this->post('id','0'));
m('goodss')->delete("id in($ids) and `mid`=0");
backmsg();
}
public function chukuoptAjax()
{
$dt = $this->post('dt');
$type = (int)$this->post('type');
$depotid= (int)$this->post('depotid');
$kind = (int)$this->post('kind');
$mid = (int)$this->post('mid','0');
$sm = $this->post('sm');
$cont = $this->post('cont');
$sharr = c('array')->strtoarray($cont);
$arr['applydt'] = $dt;
$arr['type'] = $type;
$arr['kind'] = $kind;
$arr['depotid'] = $depotid;
$arr['explain'] = $sm;
$arr['uid'] = $this->adminid;
$arr['optid'] = $this->adminid;
$arr['optdt'] = $this->now;
$arr['comid'] = m('admin')->getcompanyid();
$arr['optname'] = $this->adminname;
$arr['status'] = 1;
$aid = '0';
$ndbs = m('goodn');
$mtype = -1;
//根据主表出入库操作
if($mid>0){
$mrs = m('goodm')->getone("`id`='$mid' and `status`=1");
if(!$mrs)return '该单据还未审核完成,不能出入库操作';
//读取已入库数量
$arwos = $ndbs->getall('`mid`='.$mid.' and `couns`<`count`');
$ruks = array();
foreach($arwos as $k1=>$rs1){
$ruks[$rs1['aid']] = array(
'kes' => floatval($rs1['count']) - floatval($rs1['couns']),//还可入库数
'id' => $rs1['id'],
'couns' => floatval($rs1['couns'])
);
}
$mtype = (int)$mrs['type']; //3就是调拨
$arr['comid'] = $mrs['comid'];
}
//调拨必须先出库原来的
if($mtype==3 && $depotid==$mrs['custid'])return '调拨出入库仓库不能相同';
foreach($sharr as $k=>$rs){
$arr['aid'] = $rs[0];
$count = (int)$rs[1];
$arr['depotid'] = $depotid;
$arr['type'] = $type;
$arr['explain'] = $sm;
if($count<0)$count = 0-$count;
if($mid>0){
if(!isset($ruks[$arr['aid']]))continue;
$shua = $ruks[$arr['aid']];
if($count>$shua['kes'])$count=$shua['kes'];//超过
$arr['mid'] = $mid;
}
if($count==0)continue;
$arr['count'] = $count;
if($type==1)$arr['count'] = 0- $arr['count'];//出库为负数
$ussid = $this->db->record('[Q]goodss', $arr);
$aid.=','.$rs[0].'';
//更新已出入库的数量
if($mid>0 && $ussid){
$ndbs->update('`couns`=`couns`+'.$count.'', $shua['id']);
}
if($mtype==3){
$arr['depotid'] = $mrs['custid']; //仓库
$arr['type'] = 1; //出库
$arr['count'] = 0 - $count;
//$arr['explain'] = '调拨出库';
$this->db->record('[Q]goodss', $arr);
}
}
if($aid!='0')m('goods')->setstock($aid);
if($mid>0){
m('goods')->upstatem($mid);
}
return 'success';
}
//刷新库存
public function reloadkcAjax()
{
m('goods')->setstock();
}
//出入库操作
public function croptbeforeshow($table)
{
$key = $this->post('key');
$where= '';
if($key!=''){
$where.=" and (b.`uname` like '%$key%' or b.`sericnum` like '$key%')";
}
$where .= m('admin')->getcompanywhere(1,'a.');
return array(
'where' => 'and a.`status`=1 and a.`state`<>1 '.$where.'',
'table' => '`[Q]'.$table.'` a left join `[Q]flow_bill` b on a.id=b.mid and b.`table`=\''.$table.'\'',
'fields' => 'a.id,a.applydt,a.optdt,a.`explain`,a.`state`,a.`type`,b.uname,b.sericnum,b.udeptname'
);
}
public function croptaftershow($table, $rows)
{
$dgs = m('goods');
$typeb = array('0' ,'1' ,'2' ,'3', '4','5');
$typea = array('领用单' ,'采购单' ,'销售单' ,'调拨单', '归还单','退货单');
$chux = array('0','2');
if($rows)foreach($rows as $k=>&$rs){
$rs['typev'] = $rs['type'];
$rs['type'] = arrvalue($typea, $rs['type']);
$lx = 0; //入
if(in_array($rs['typev'],$chux))$lx=1;
$rs['state'] = $dgs->crkstate($rs['state'], $lx);
}
return array(
'rows' => $rows
);
}
//根据仓库统计
public function pdck_beforeshow($table)
{
$depotid = (int)$this->post('depotid');
$where = 'and a.`depotid`='.$depotid.'';
$key = $this->post('key');
$dt = $this->post('dt');
if($key!=''){
$where .= " and (b.`name` like '%$key%' or b.`num` like '%$key%' or b.`guige` like '%$key%' or b.`xinghao` like '%$key%') ";
}
if($dt!=''){
$where .= " and a.`applydt` <= '$dt'";
}
return array(
'table' => '`[Q]goodss` a left join `[Q]goods` b on a.`aid`=b.`id`',
'where' => $where,
'fields'=> 'b.*,sum(a.`count`) as `stock`',
'group' => 'a.`aid`'
);
}
public function pdck_aftershow($table, $rows)
{
foreach($rows as $k=>$rs){
$rows[$k]['typeid'] = $this->gettypename($rs['typeid']);
if($rs['stock']<='0')$rows[$k]['ishui']=1;
}
return array(
'rows' => $rows
);
}
//打印二维码
public function printewmAction()
{
$sid = c('check')->onlynumber($this->get('sid'));
$rows= m('goods')->getall('id in('.$sid.')');
foreach($rows as $k=>$rs){
$rows[$k]['url'] = $this->jm->base64encode('task.php?a=x&num=goods&mid='.$rs['id'].'');
}
$this->assign('rows', $rows);
$this->displayfile = ''.P.'/main/assetm/tpl_assetm_printewm.html';
$this->title = '物品二维码打印';
}
}

View File

@@ -0,0 +1,155 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var a = $('#view_{rand}').bootstable({
tablename:'goods',celleditor:true,fanye:true,modenum:'goods',autoLoad:false,
url:publicstore('{mode}','{dir}'),params:{atype:'all'},modename:'物品',storebeforeaction:'beforeshow',storeafteraction:'aftershow',
checked:true,
columns:[{
text:'编号',dataIndex:'num'
},{
text:'名称',dataIndex:'name',align:'left'
},{
text:'分类',dataIndex:'typeid',align:'left'
},{
text:'单价',dataIndex:'price',sortable:true,editor:true
},{
text:'规格',dataIndex:'guige'
},{
text:'型号',dataIndex:'xinghao'
},{
text:'总库存',dataIndex:'stock',sortable:true
},{
text:'单位',dataIndex:'unit',sortable:true
},{
text:'',dataIndex:'caozuo'
}],
itemclick:function(){
btn(false);
},
itemdblclick:function(d){
openxiangs('物品 '+d.name,'goods',d.id);
}
});
goodsrocks{rand} = function(s){
a.reload();
}
var c = {
del:function(){
a.del({check:function(lx){if(lx=='yes')btn(true)}});
},
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s},true);
},
clickwin:function(o1,lx){
var icon='plus',name='新增',id=0;
if(lx==1){
id = a.changeid;
};
openinput('物品产品','goods', id, 'goodsrocks{rand}');
},
piliang:function(){
managelistgoods = a;
addtabs({num:'daorugoods',url:'flow,input,daoru,modenum=goods',icons:'plus',name:'导入物品'});
},
rukuchu:function(o1, lx){
var s='物品入库';
if(lx==1)s='物品出库';
addtabs({num:'rukuchugood'+lx+'',url:'main,goods,churuku,type='+lx+'',icons:'plus',name:s});
},
relaodkc:function(){
js.ajax(js.getajaxurl('reloadkc','{mode}','{dir}'),{},function(){
a.reload();
},'get','','刷新中...,刷新完成');
},
daochu:function(o1){
new publicdaochuobj({
'objtable':a,
'modename':'物品列表',
'modenum':'goods',
'btnobj':o1
});
},
prinwem:function(){
var sid = a.getchecked();
if(sid==''){
js.msg('msg','没有选中记录');
return;
}
var url = '?a=printewm&m=goods&d=main&sid='+sid+'';
window.open(url);
},
mobj:a,
title:'物品分类',
stable:'goods',
optionview:'optionview_{rand}',
optionnum:'goodstype',
rand:'{rand}'
};
var c = new optionclass(c);
function btn(bo){
//get('del_{rand}').disabled = bo;
//get('edit_{rand}').disabled = bo;
}
js.initbtn(c);
});
</script>
<table width="100%">
<tr valign="top">
<td>
<div style="border:1px #cccccc solid;width:220px">
<div id="optionview_{rand}" style="height:400px;overflow:auto;"></div>
</div>
</td>
<td width="10" nowrap>&nbsp;</td>
<td width="95%">
<div>
<table width="100%"><tr>
<td nowrap>
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增</button>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:150px" id="key_{rand}" placeholder="物品名">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="80%" style="padding-left:10px">
<div class="btn-group">
<button class="btn btn-default" click="rukuchu,0" type="button">入库</button>
<button class="btn btn-default" click="rukuchu,1" type="button">出库</button>
</div>
</td>
<td style="padding-right:10px">
<button class="btn btn-default" click="piliang" type="button">导入</button>
</td>
<td style="padding-right:10px">
<button class="btn btn-default" click="daochu" type="button">导出 <i class="icon-angle-down"></i></button>
</td>
<td align="right" nowrap>
<button class="btn btn-default" click="prinwem" type="button">打印二维码</button>&nbsp;
<button class="btn btn-default" click="relaodkc" type="button">刷新库存</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">在出入库详情需要已审核才会计算库存的表goodss上字段status=1时。</div>
</td>
</tr>
</table>

View File

@@ -0,0 +1,174 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var bools = false,type = params.type,typename='入库',mid=params.mid;
if(type==1)typename='出库';
if(!mid)mid=0;
var a = $('#view_{rand}').bootstable({
tablename:'goods',celleditor:true,fanye:true,params:{'type':type,'mid':mid},
url:publicstore('{mode}','{dir}'),storebeforeaction:'beforeshow',storeafteraction:'aftershow',
columns:[{
text:'<font color=red>*</font>要'+typename+'数量',dataIndex:'shu',renderer:function(v,d){
var maxss = d.maxcount;
if(!maxss)maxss='99999999';
var sv = '<input name="shu_{rand}" valid="'+d.id+'" style="width:70px;text-align:center" onfocus="js.focusval=this.value" min="0" max="'+maxss+'" onblur="js.number(this)" type="number" value="" class="form-control">';
if(d.maxcount)sv+=' 还可'+typename+'数'+d.maxcount+'';
return sv;
}
},{
text:'总库存',dataIndex:'stock',sortable:true
},{
text:'编号',dataIndex:'num'
},{
text:'名称',dataIndex:'name'
},{
text:'分类',dataIndex:'typeid'
},{
text:'单价',dataIndex:'price',sortable:true
},{
text:'单位',dataIndex:'unit'
},{
text:'规格',dataIndex:'guige'
},{
text:'型号',dataIndex:'xinghao'
},{
text:'ID',dataIndex:'id'
}],
itemdblclick:function(d){
openxiang('goods',d.id);
},
load:function(d){
if(!bools){
if(params.kindname){
d.typearr = [{'name':params.kindname,'value':params.kind}];
}
js.setselectdata(get('type_{rand}'),d.typearr,'value');
js.setselectdata(get('depotid_{rand}'),d.depotarr,'id');
}
bools=true;
}
});
var c = {
save:function(o1){
var d={dt:$('#dt1_{rand}').val(),'type':type,kind:get('type_{rand}').value,sm:get('explain_{rand}').value,'depotid':get('depotid_{rand}').value,'mid':mid};
var msgid='msgview_{rand}';
d.cont = c.getshul();
if(d.cont==''){
js.setmsg('没有输入'+typename+'数量','', msgid);
return;
}
if(d.dt==''){
js.setmsg('请选择日期','', msgid);
return;
}
if(d.kind==''){
js.setmsg('请选择'+typename+'类型','', msgid);
return;
}
if(d.depotid==''){
js.setmsg('请选择'+typename+'的仓库','', msgid);
return;
}
js.setmsg(''+typename+'中...','', msgid);
o1.disabled=true;
js.ajax(js.getajaxurl('chukuopt','{mode}','{dir}'),d,function(s){
if(s=='success'){
js.setmsg(''+typename+'成功','green', msgid);
a.reload();
}else{
js.setmsg(s,'', msgid);
}
o1.disabled=false;
},'post');
},
getshul:function(){
var o = $("input[name='shu_{rand}']"),i,s='',o1,val;
for(i=0;i<o.length;i++){
o1=$(o[i]);
val=o1.val();
if(!isempt(val)){
val=parseFloat(val);
if(val>0)s+=','+o1.attr('valid')+'|'+val+'';
}
}
if(s!='')s=s.substr(1);
return s;
},
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s},true);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'date',inputid:'dt'+lx+'_{rand}'});
}
};
js.initbtn(c);
$('#showte{rand}').html('<b>'+typename+'</b>操作');
$('#dt1_{rand}').val(js.now());
});
</script>
<div>
<table width="100%"><tr>
<td nowrap>
<h4 id="showte{rand}">入库操作</h4>
</td>
<td style="padding-left:10px">
<div class="input-group" style="width:250px">
<input class="form-control" id="key_{rand}" placeholder="名称/编号/型号">
<span class="input-group-btn">
<button class="btn btn-default" click="search" type="button"><i class="icon-search"></i></button>
</span>
</div>
</td>
<td width="80%"></td>
<td align="right" nowrap>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="blank20"></div>
<table width="500">
<tr>
<td width="120" align="right" ><font color=red>*</font>日期:</td>
<td class="tdinput">
<div style="width:200px" class="input-group">
<input readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,1" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
</tr>
<tr>
<td align="right" ><font color=red>*</font>类型:</td>
<td class="tdinput">
<select id="type_{rand}" style="width:200px" class="form-control"><option value="">-请选择-</option></select>
</td>
</tr>
<tr>
<td align="right" ><font color=red>*</font>选择仓库:</td>
<td class="tdinput">
<select id="depotid_{rand}" style="width:200px" class="form-control"><option value="">-请选择-</option></select>
</td>
</tr>
<tr>
<td align="right" >说明:</td>
<td class="tdinput">
<textarea id="explain_{rand}" class="form-control" style="height:60px"></textarea>
</td>
</tr>
<tr>
<td align="right"></td>
<td style="padding:15px 0px" colspan="3" align="left"><button click="save" class="btn btn-success" id="save_{rand}" type="button"><i class="icon-save"></i>&nbsp;确认提交</button>&nbsp; <span id="msgview_{rand}"></span>
</td>
</tr>
</table>
<div class="blank10"></div>

View File

@@ -0,0 +1,71 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var a = $('#view_{rand}').bootstable({
tablename:'goodm',fanye:true,dir:'desc',sort:'a.id',storebeforeaction:'croptbeforeshow',storeafteraction:'croptaftershow', url:publicstore('{mode}','{dir}'),
columns:[{
text:'单号',dataIndex:'sericnum'
},{
text:'申请人',dataIndex:'uname'
},{
text:'申请人部门',dataIndex:'udeptname'
},{
text:'类型',dataIndex:'type',sortable:true
},{
text:'申请日期',dataIndex:'applydt',sortable:true
},{
text:'操作时间',dataIndex:'optdt'
},{
text:'说明',dataIndex:'explain',align:'left'
},{
text:'出入库状态',dataIndex:'state'
},{
text:'',dataIndex:'opt',renderer:function(v,d){
var v='<a href="javascript:;" onclick="rukuope{rand}('+d.id+','+d.typev+')">去操作</a>';
return v;
}
}]
});
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s},true);
}
};
rukuope{rand}=function(id,kind){
var lex = ['领用出库','采购入库','销售出库','调拨入库','归还入库','退货入库'];
var typa= [1,0,1,0,0,0];
var kina= [0,0,1,3,1,4]; //从数据选项中的来的
var type = typa[kind]; //0入库,1出库
addtabs({url:'main,goods,churuku,type='+type+',mid='+id+',kind='+kina[kind]+',kindname='+lex[kind]+'','num':'rukuopt'+id+'',name:''+id+'.'+lex[kind]+''});
}
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td >
<input class="form-control" style="width:200px" id="key_{rand}" placeholder="申请人/单号">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="90%">
&nbsp;&nbsp;<span id="megss{rand}"></span>
</td>
<td align="right" nowrap>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,127 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var lbefe = false;
var at = $('#optionview_{rand}').bootstree({
url:js.getajaxurl('gettreedata','option','system',{'num':'goodstype'}),
columns:[{
text:'物品分类',dataIndex:'name',align:'left',xtype:'treecolumn',width:'79%'
},{
text:'ID',dataIndex:'id',width:'20%'
}],
load:function(d){
c.loadfile('0','所有物品');
},
itemdblclick:function(d){
c.loadfile(d.id,d.name);
}
});
var columns = [{
text:'编号',dataIndex:'num'
},{
text:'名称',dataIndex:'name',align:'left'
},{
text:'分类',dataIndex:'typeid',align:'left'
},{
text:'单价',dataIndex:'price',sortable:true
},{
text:'单位',dataIndex:'unit'
},{
text:'规格',dataIndex:'guige'
},{
text:'型号',dataIndex:'xinghao'
},{
text:'ID',dataIndex:'id',sortable:true
},{
text:'总库存',dataIndex:'stock',sortable:true
}];
var a = $('#view_{rand}').bootstable({
tablename:'goods',celleditor:true,fanye:true,modenum:'goods',autoLoad:false,
url:publicstore('{mode}','{dir}'),params:{'atype':'pan'},storebeforeaction:'beforeshow',storeafteraction:'aftershow',
columns:columns,
loadbefore:function(d){
if(!lbefe && d.depotarr){
for(var i=0;i<d.depotarr.length;i++)columns.push({text:d.depotarr[i].namea,dataIndex:'stockdepotid'+d.depotarr[i].id+''});
a.setColumns(columns);
}
lbefe = true;
},
itemdblclick:function(d){
openxiangs('【'+d.name+'】详情','goods',d.id);
}
});
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s,dt:get('dt1_{rand}').value},true);
},
daochu:function(o1){
new publicdaochuobj({
'objtable':a,
'modename':'物品盘点',
'btnobj':o1
});
},
loadfile:function(spd,nsd){
$('#megss{rand}').html(nsd);
a.setparams({'typeid':spd}, true);
},
genmu:function(){
this.loadfile('0','所有物品');
},
del:function(){
a.del({checked:true,url:js.getajaxurl('delxiang','{mode}','{dir}')});
}
};
js.initbtn(c);
$('#optionview_{rand}').css('height',''+(viewheight-25)+'px');
});
</script>
<table width="100%">
<tr valign="top">
<td width="220">
<div style="border:1px #cccccc solid;width:220px">
<div id="optionview_{rand}" style="height:400px;overflow:auto;"></div>
</div>
</td>
<td width="10" nowrap>&nbsp;</td>
<td>
<div>
<table width="100%"><tr>
<td align="left" nowrap>
<button class="btn btn-default" click="genmu" type="button">所有物品</button>&nbsp;
</td>
<td nowrap style="padding-left:10px">
<input placeholder="日期" style="width:120px" onclick="js.changedate(this)" readonly class="form-control datesss" id="dt1_{rand}" >
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:200px" id="key_{rand}" placeholder="物品名/型号/规格">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="90%">
&nbsp;&nbsp;<span id="megss{rand}"></span>
</td>
<td align="right" nowrap>
<button class="btn btn-default" click="daochu,1" type="button">导出 <i class="icon-angle-down"></i></button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
</td>
</tr>
</table>

View File

@@ -0,0 +1,76 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
//根据仓库统计下面的物品数量
var depotid = params.depotid;if(!depotid)depotid='';
var columns = [{
text:'编号',dataIndex:'num'
},{
text:'名称',dataIndex:'name',align:'left'
},{
text:'分类',dataIndex:'typeid',align:'left'
},{
text:'单价',dataIndex:'price',sortable:true
},{
text:'单位',dataIndex:'unit'
},{
text:'规格',dataIndex:'guige'
},{
text:'型号',dataIndex:'xinghao'
},{
text:'ID',dataIndex:'id',sortable:true
},{
text:'数量',dataIndex:'stock'
}];
var a = $('#view_{rand}').bootstable({
tablename:'goodss',celleditor:true,fanye:true,
url:publicstore('{mode}','{dir}'),params:{'depotid':depotid},storebeforeaction:'pdck_beforeshow',storeafteraction:'pdck_aftershow',
columns:columns
});
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s,dt:get('dt1_{rand}').value},true);
},
daochu:function(o1){
publicdaochuobj({
'objtable':a,
'btnobj':o1
});
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td align="left" nowrap>
<input placeholder="截止日期" style="width:120px" onclick="js.changedate(this)" readonly class="form-control datesss" id="dt1_{rand}" >
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:200px" id="key_{rand}" placeholder="物品名/型号/规格">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="90%">
</td>
<td align="right" nowrap>
<button class="btn btn-default" click="daochu,1" type="button">导出 <i class="icon-angle-down"></i></button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,144 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var at = $('#optionview_{rand}').bootstree({
url:js.getajaxurl('gettreedata','option','system',{'num':'goodstype'}),
columns:[{
text:'物品分类',dataIndex:'name',align:'left',xtype:'treecolumn',width:'79%'
},{
text:'ID',dataIndex:'id',width:'20%'
}],
load:function(d){
c.loadfile('0','所有出入库详情');
},
itemdblclick:function(d){
c.loadfile(d.id,d.name);
}
});
var forbo = false;
var a = $('#view_{rand}').bootstable({
tablename:'goodss',autoLoad:false,celleditor:true,fanye:true,dir:'desc',sort:'a.id',checked:true,
url:publicstore('{mode}','{dir}'),storebeforeaction:'xiangbeforeshow',storeafteraction:'xiangaftershow',
columns:[{
text:'名称',dataIndex:'name',align:'left'
},{
text:'规格',dataIndex:'guige'
},{
text:'型号',dataIndex:'xinghao'
},{
text:'分类',dataIndex:'typeid',align:'left'
},{
text:'类型',dataIndex:'kind',sortable:true
},{
text:'日期',dataIndex:'applydt',sortable:true
},{
text:'操作人',dataIndex:'optname'
},{
text:'数量',dataIndex:'count',sortable:true,align:'right'
},{
text:'对应仓库',dataIndex:'depotname'
},{
text:'说明',dataIndex:'explain',align:'left'
},{
text:'状态',dataIndex:'status'
}],
loadbefore:function(d){
if(!forbo){
var d1 = [];
for(var i in d.tyeparr)d1.push({value:i,name:d.tyeparr[i]});
js.setselectdata(get('type_{rand}'),d1,'value');
}
forbo = true;
}
});
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s,dt:get('dt1_{rand}').value},true);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'month',inputid:'dt'+lx+'_{rand}'});
},
daochu:function(o1){
publicdaochuobj({
'objtable':a,
'modename':'物品出入库详情',
'btnobj':o1
});
},
loadfile:function(spd,nsd){
$('#megss{rand}').html(nsd);
a.setparams({'typeid':spd}, true);
},
genmu:function(){
this.loadfile('0','所有出入库详情');
},
del:function(){
a.del({checked:true,url:js.getajaxurl('delxiang','{mode}','{dir}')});
},
changetype:function(o1){
a.setparams({types:o1.value},true);
}
};
js.initbtn(c);
$('#optionview_{rand}').css('height',''+(viewheight-25)+'px');
$('#type_{rand}').change(function(){
c.changetype(this);
});
});
</script>
<table width="100%">
<tr valign="top">
<td width="220">
<div style="border:1px #cccccc solid">
<div id="optionview_{rand}" style="height:400px;overflow:auto;"></div>
</div>
</td>
<td width="10"></td>
<td>
<div>
<table width="100%"><tr>
<td align="left" nowrap>
<button class="btn btn-default" click="genmu" type="button">所有详情</button>&nbsp;
</td>
<td nowrap style="padding-left:10px">
<div style="width:120px" class="input-group">
<input placeholder="月份" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,1" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:200px" id="key_{rand}" placeholder="物品名/操作人/仓库">
</td>
<td>
<select class="form-control" style="width:130px" id="type_{rand}"><option value="">所有类型</option></select>
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="90%">
&nbsp;&nbsp;<span id="megss{rand}"></span>
</td>
<td align="right" nowrap>
<button class="btn btn-default" click="daochu,1" type="button">导出 <i class="icon-angle-down"></i></button>&nbsp;&nbsp;
<button class="btn btn-danger" id="del_{rand}" click="del" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
</td>
</tr>
</table>

View File

@@ -0,0 +1,44 @@
<?php
class hrClassAction extends Action
{
//培训考试
public function kaoshiAction()
{
$id = (int)$this->get('id');
m('flow:knowtraim')->reloadstate($id);//更新状态
$mrs = m('knowtraim')->getone($id);
if(!$mrs)return '主题不存在';
if($mrs['state']!='1')return '培训考试题目可能还未开始或已结束了';
$uid = $this->adminid;
$ors = m('knowtrais')->getone('`mid`='.$id.' and `uid`='.$uid.'');
if(!$ors)return '当前主题你不需要培训考试';
if($ors['isks']=='1')return '你已经考试过了分数:'.$ors['fenshu'].'';
$tkids = $ors['tkids'];
$tkrows= array();
if(!isempt($tkids)){
$tkarr = m('knowtiku')->getall('id in('.$tkids.')','`id`,`title`,`typeid`,`type`,`content`,`ana`,`anb`,`anc`,`and`,`ane`');
$tkidsa= explode(',', $tkids);
foreach($tkidsa as $ids){
foreach($tkarr as $k=>$rs){
$id = $rs['id'];
if($ids==$id){
$tkrows[] = $rs;
break;
}
}
}
}
$this->assign('tkrows', json_encode($tkrows));
$this->assign('mrs', $mrs);
$this->assign('ors', $ors);
}
}

View File

@@ -0,0 +1,197 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="yes" />
<title><?=$mrs['title']?>_培训考试</title>
<link rel="stylesheet" type="text/css" href="mode/bootstrap3.3/css/bootstrap_cerulean.css"/>
<link rel="stylesheet" type="text/css" href="web/res/fontawesome/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="webmain/css/webmain.css"/>
<link rel="shortcut icon" href="favicon.ico" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/js.js"></script>
<script type="text/javascript">
var sid = <?=$ors['id']?>;
var tkrows = <?=$tkrows?>;
var kstime = <?=$mrs['kstime']?>;//分钟
var c = {
start:function(o){
js.msg('wait','初始化中...');
o.disabled = true;
var url = this.geturl('initkaoshi');
js.ajax(url,{sid:sid},function(s){
if(s!='ok'){
o.disabled = false;
js.msg(msg, s);
}else{
location.reload();
}
});
},
geturl:function(act,cabs){
return js.getajaxurl(act,'mode_knowtraim|input','flow',cabs);
},
tims:0,
shijian:<?=$ors['kstime']?>,
init:function(){
if(!get('kaoshidiv'))return;
this.isover=false;
this.showtimu();
this.showtimes();
},
showtimes:function(){
var sj = this.shijian+1;
if(sj>kstime*60){
this.finifss();//时间到了
return;
}
var fz = Math.floor(sj/60);
var ms = sj%60;
$('#shijian').html(''+fz+'分'+ms+'秒');
this.shijian++;
setTimeout('c.showtimes()',1000);
},
showtimu:function(){
var len = tkrows.length;
if(this.tims>=len){
this.finifss();
return;
}
js.setmsg();
var oi = this.tims+1;
if(len==oi){
get('btnssn').value='提交完成答题';
}
$('#showtotal').html(''+len+'/'+oi+'');
var d = tkrows[this.tims];
var ty1 = 'radio',ty2='单选';
if(d.type=='1'){
ty1 = 'checkbox';ty2='多选';
}
if(d.type=='2'){
ty2='判断';
}
var str = '<div>题目'+oi+'、<b>'+d.title+'</b><font style="font-size:12px" color="#888888">('+ty2+')</font></div>';
if(!isempt(d.content))str+='<div style="padding:10px">'+d.content+'</div>';
$('#titletm').html(str);
var arrs = ['ana','anb','anc','and','ane'],arrs1 = ['A','B','C','D','E'];
var s = '',v1;
for(var i=0;i<5;i++){
v1 = d[arrs[i]];
if(!isempt(v1))s+='<div><label><input name="changede[]" value="'+arrs1[i]+'" type="'+ty1+'"> '+arrs1[i]+'、'+v1+'</label></div>';
}
$('#titletcont').html(s);
},
nextbo:false,
next:function(o){
if(this.nextbo){
c.tims++;
c.showtimu();
this.nextbo=false;
return;
}
var len = tkrows.length,d,da,dy;
d = tkrows[this.tims];
da= js.getformdata();
dy= da.changede;
if(this.tims>=len){
this.finifss();
return;
}
if(dy==''){
js.msg('msg','还没选答案呢');
return;
}
o.disabled=true;
js.setmsg('处理中...');
dy=dy.replace(/\,/g,'');
this.nextbo=false;
var isover = (this.tims+1>=len);
js.ajax(this.geturl('datitij'),{oi:this.tims,dy:dy,sid:sid,tid:d.id,sj:this.shijian},function(s){
o.disabled=false;
if(s=='ok'){
c.tims++;
c.showtimu();
}else{
js.setmsg(s);
c.nextbo=true;
}
},'get');
},
isover:true,
finifss:function(){
this.isover=true;
get('btnssn').disabled=true;
js.setmsg('提交中...');
js.ajax(this.geturl('finfish'),{sid:sid,sj:this.shijian},function(s){
js.setmsg();
js.alert('答题结束得分:'+s+'');
},'get');
}
};
function initbody(){
c.init();
}
window.onbeforeunload=function(){
if(!c.isover)return '考试还没结束,不要离开本页面?';
}
</script>
<style>
.mborder{margin:10px;border:1px solid #cccccc;padding:20px;text-align:left}
<?php
if(!$rock->ismobile()){
echo '.mborder{width:400px}';
}
?>
</style>
</head>
<body>
<div align="center">
<div >
<div style="padding:20px;font-size:18px"><?=$mrs['title']?></div>
<?php if($ors['isks']=='0' && isempt($ors['tkids'])){?>
<div class="mborder">
<div>状态:你还未开始答题考试</div><div class="blank5"></div>
<div>姓名:<?=$da['adminname']?></div><div class="blank5"></div>
<div>考试时间:<?=$mrs['kstime']?>分钟</div><div class="blank5"></div>
<div>单选题目:<?=$mrs['dsshu']?></div><div class="blank5"></div>
<div>多选题目:<?=$mrs['dxshu']?></div><div class="blank5"></div>
<div>判断题目:<?=$mrs['pdshu']?></div><div class="blank5"></div>
<div>总分:<?=$mrs['zfenshu']?></div><div class="blank10"></div>
<div align="center"><input type="button" onclick="c.start(this)" class="btn btn-success" value="开始考试"></div>
</div>
<?php
}
if(!isempt($ors['tkids'])){
?>
<div id="kaoshidiv">
<div class="mborder">
<div align="center">培训考试中(<span id="showtotal">5/1</span>),已过:<span id="shijian">0分0秒</span></div>
<div class="blank10"></div>
<div align="center" style="background-color:#f1f1f1;padding:5px">考试时间:<?=$mrs['kstime']?>分钟,总分:<?=$mrs['zfenshu']?></div>
<div class="blank10"></div>
<div id="titletm">题目1、呵呵额和</div>
<form name="myform"><div id="titletcont"></div></form>
<div class="blank10"></div>
<div align="center"><input type="button" id="btnssn" onclick="c.next(this)" class="btn btn-success" value="下一题">&nbsp;<span id="msgview"></span></div>
</div>
</div>
<?php
}
?>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,62 @@
<?php
class imgroupClassAction extends Action
{
public function groupusershow($table)
{
$s = 'and 1=2';
$gid = $this->post('gid','0');
if($gid>0){
$s = " and id in(select `uid` from `[Q]im_groupuser` where `gid`='$gid')";
}
return array(
'where' => $s,
'fields'=> 'id,user,name,deptname,ranking'
);
}
public function groupafter($table, $rows)
{
foreach($rows as $k=>$rs){
$gid = $rs['id'];
$s = "`gid`='$gid'";
$rows[$k]['utotal'] = $this->db->rows('[Q]im_groupuser', $s);
}
return array('rows'=>$rows);
}
public function saveuserAjax()
{
$gid = (int)$this->post('gid','0');
$sid = c('check')->onlynumber($this->post('sid'));
m('reim')->adduserchat($gid, $sid, true);
echo 'success';
}
public function deluserAjax()
{
$gid = (int)$this->post('gid','0');
$sid = c('check')->onlynumber($this->post('sid','0'));
m('reim')->exitchat($gid, $sid);
echo 'success';
}
//保存组织结构
public function savegroupafter($table, $arr, $id)
{
m('imgroup')->updateguser($id, $arr['deptid']);
$rs = m($table)->getone($id);
if(isempt($rs['createname'])){
m($table)->update(array(
'createid' => $this->adminid,
'createname' => $this->adminname,
'createdt' => $this->now,
),$id);
}
}
public function reloadallAjax()
{
m('imgroup')->updategall();
}
}

View File

@@ -0,0 +1,209 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var gid = 0;
var changdata={},idboog=false;
var a = $('#veiw_{rand}').bootstable({
tablename:'im_group',celleditor:false,url:publicstore('{mode}','{dir}'),storeafteraction:'groupafter',keywhere:'and type<>2',modenum:'huihua',
columns:[{
text:'头像',dataIndex:'face',renderer:function(v, d){
return '<img src="images/group.png" height="24" width="24">';
}
},{
text:'名称',dataIndex:'name',editor:true
},{
text:'排序号',dataIndex:'sort',editor:true,sortable:true
},{
text:'人员数',dataIndex:'utotal'
},{
text:'组织结构id',dataIndex:'deptid'
},{
text:'创建人',dataIndex:'createname'
},{
text:'ID',dataIndex:'id'
},{
text:'',dataIndex:'optdt',renderer:function(s,d){
return '<button onclick="openchat('+d.id+',1)" class="btn btn-primary btn-xs"><i class="icon-comment-alt"></i> 发消息</button>';
}
}],
itemclick:function(){
btn(false);
},
itemdblclick:function(ad,oi,e){
$('#downshow_{rand}').html('<b>['+ad.name+']</b>下的人员');
gid=ad.id;
changdata = ad;
at.setparams({gid:gid},true);
}
});
var alluserid = '';
var at = $('#veiwuser_{rand}').bootstable({
tablename:'admin',sort:'sort',dir:'asc',fanye:true,
url:publicstore('{mode}','{dir}'),
autoLoad:false,storebeforeaction:'groupusershow',
columns:[{
text:'用户名',dataIndex:'user',sortable:true
},{
text:'部门',dataIndex:'deptname',sortable:true
},{
text:'姓名',dataIndex:'name',sortable:true
},{
text:'职位',dataIndex:'ranking',sortable:true
},{
text:'操作',dataIndex:'opt',renderer:function(v,d){
var s = '&nbsp;';
if(isempt(changdata.deptid)||changdata.deptid=='0')s = '<a href="javascript:;" onclick="return deluserr{rand}('+d.id+')"><i class="icon-trash"> 删</a>';
return s;
}
}],
load:function(da){
var bo = false;
if(!isempt(changdata.deptid))bo=true;
if(changdata.deptid=='0')bo=false;
get('add_{rand}').disabled=bo;
alluserid = '';
for(var i=0;i<da.rows.length;i++){
alluserid+=','+da.rows[i].id+'';
}
if(alluserid!='')alluserid = alluserid.substr(1);
}
});
var c = {
del:function(){
a.del({check:function(lx){if(lx=='yes')btn(true)}});
},
clickwin:function(o1,lx){
var h = $.bootsform({
title:'会话',height:400,width:400,
tablename:'im_group',isedit:lx,
url:js.getajaxurl('publicsave','imgroup','main'),
params:{int_filestype:'sort,type'},aftersaveaction:'savegroupafter',
submitfields:'name,sort,type,explain,deptid,createid,createname',
items:[{
labelText:'会话名称',type:'changeuser',changeuser:{
type:'deptcheck',idname:'deptid',title:'选择所属部门'
},name:'name',clearbool:true,required:true
},{
name:'deptid',type:'hidden',value:'0'
},{
name:'createid',type:'hidden',value:'0'
},{
labelText:'创建人',type:'changeuser',changeuser:{
type:'user',idname:'createid',title:'选择创建人'
},name:'createname'
},{
labelText:'序号',name:'sort',type:'number',value:'0'
},{
labelText:'说明',name:'explain',type:'textarea',height:'60'
}],
success:function(){
a.reload();
}
});
if(lx==1){
h.setValues(a.changedata);
}
h.getField('name').focus();
h.getField('name').readOnly=false;
},
refresh:function(){
a.reload();
},
addguser:function(){
var cans = {
type:'usercheck',
title:'选择人员',
changerangeno:alluserid,
callback:function(sna,sid){
c.savedist(sid);
}
};
js.getuser(cans);
return false;
},
savedist:function(sid){
if(sid != ''){
js.msg('wait','保存中...');
js.ajax(js.getajaxurl('saveuser','{mode}','{dir}'),{sid:sid,gid:gid},function(){
js.msg('success','保存成功');
at.reload();
},'post');
}
},
delusers:function(uid){
js.msg('wait','删除中...');
js.ajax(js.getajaxurl('deluser','{mode}','{dir}'),{sid:uid,gid:gid},function(){
js.msg('success','删除成功');
at.reload();
},'post');
},
relaodss:function(){
js.msg('wait','刷新中...');
js.ajax(js.getajaxurl('reloadall','{mode}','{dir}'),false,function(){
js.msg();
a.reload();
});
}
};
function btn(bo){
get('del_{rand}').disabled = bo;
get('edit_{rand}').disabled = bo;
}
js.initbtn(c);
deluserr{rand}=function(uid){
js.confirm('确定要删除对应会话下的人员吗?',function(lx){
if(lx=='yes'){
c.delusers(uid);
}
});
}
});
</script>
<table width="100%">
<tr valign="top">
<td width="50%">
<div>
<ul class="floats">
<li class="floats50">
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增</button>&nbsp;&nbsp;
<button class="btn btn-default" click="relaodss" type="button">刷新</button>
</li>
<li class="floats50" style="text-align:right">
<button class="btn btn-danger" id="del_{rand}" click="del" disabled type="button"><i class="icon-trash"></i> 删除</button> &nbsp;
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button>
</li>
</ul>
</div>
<div class="blank10"></div>
<div id="veiw_{rand}"></div>
<div class="tishi">双击查看对应人员有组织结构id会自动添加删除会话里的人员。</div>
</td>
<td width="10"></td>
<td>
<div>
<ul class="floats">
<li class="floats50">
<span id="downshow_{rand}">&nbsp;</span>
</li>
<li class="floats50" style="text-align:right">
<button class="btn btn-primary" click="addguser,0" id="add_{rand}" disabled type="button"><i class="icon-plus"></i> 添加对应人员</button>
</li>
</ul>
</div>
<div class="blank10"></div>
<div id="veiwuser_{rand}"></div>
</td>
</tr>
</table>

View File

@@ -0,0 +1,928 @@
<?php
class kaoqinClassAction extends Action
{
public function kqdkjlaftershow($table, $rows)
{
$reimbo = m('reim');
return array(
'rows' => $rows,
'qybo' => $reimbo->installwx(1),
'ddbo' => $reimbo->installwx(2),
);
}
//获取打卡记录
public function getdkjlAjax()
{
$reimbo = m('reim');
$uids = $this->adminid;
if($this->post('atype')=='all')$uids = '';//全部
$dt1 = $this->post('dt1');
$dt2 = $this->post('dt2');
$msg = '获取成功';
if($reimbo->installwx(1)){
$barr = m('weixinqy:daka')->getrecord($uids, $dt1, $dt2, 1);
//加入异步
$send = 0;
if($uids=='' && $barr['errcode']==0 && $barr['maxpage']>1){
for($i=1;$i<=$barr['maxpage'];$i++){
if($i>1)$reimbo->asynurl('asynrun','wxdkjl', array(
'dt1' => $dt1,
'dt2' => $dt2,
'page' => $i
));
}
$send++;
}
if($barr['errcode']!=0){
$msg .= ',企业微信('.$barr['msg'].')';
}else{
if(isset($barr['zongts']))$msg .= ',微信打卡(共'.$barr['zongts'].'条,新增'.$barr['okload'].'条)';
if($send>0)$msg .= ',并发送异步请求'.$send.'条';
}
}
//钉钉
if($reimbo->installwx(2)){
$barr = m('dingding:daka')->getrecord($uids, $dt1, $dt2);
if($barr['errcode']!=0)$msg .= ',钉钉('.$barr['msg'].')';
}
return returnsuccess($msg);
}
public function kqdwbefore($table)
{
$key = $this->post('key');
$where = '';
if(!isempt($key))$where=" and (`name` like '%$key%' or `address` like '%$key%')";
return $where;
}
//考勤信息
public function kqinfobeforeshow($table)
{
$dt1 = $this->post('dt1');
$dt2 = $this->post('dt2');
$atype = $this->post('atype');
$key = $this->post('key');
$keys = $this->post('keys');
$uid = $this->adminid;
$s = '';
if($atype=='all'){
$s = m('admin')->getcompanywhere(4);
}
if($atype=='my'){
$s = 'and uid='.$uid.'';
}
if($atype=='down'){
$s = 'and '.m('admin')->getdownwheres('a.uid', $uid, 0);
}
if(!isempt($dt1))$s.=" and a.`stime` >= '$dt1'";
if(!isempt($dt2))$s.=" and a.`stime` <= '$dt2 23:59:59'";
if(!isempt($key))$s.=" and (b.`name` like '%$key%' or b.`deptname` like '%$key%')";
if(!isempt($keys))$s.=" and (a.`kind`='$keys' or a.`qjkind`='$keys')";
$fields = 'a.*,b.name,b.deptname';
$table = '[Q]'.$table.' a left join `[Q]admin` b on a.uid=b.id';
return array('where'=>$s,'table'=>$table, 'fields'=>$fields,'order'=>'a.stime desc');
}
public function kqinfoaftershow($table, $rows)
{
$uid = $this->adminid;
$types = explode(',','<font color=blue>待审核</font>,<font color=green>已审核</font>,<font color=red>未通过</font>,,,<font color=#888888>已作废</font>');
foreach($rows as $k=>$rs){
$rows[$k]['status'] = $this->rock->arrvalue($types, $rs['status']);
$modenum = 'leavehr';
$modename = '考勤信息';
if($rs['kind']=='请假'){
$modenum = 'leave';
$modename = '请假条';
}
$jiatype = '';
if($rs['kind']=='加班'){
$modenum = 'jiaban';
$modename = '加班单';
$jiatype = '调休';
if($rs['jiatype']=='1')$jiatype='加班费'.$rs['jiafee'].'';
}
$rows[$k]['modenum'] = $modenum;
$rows[$k]['modename'] = $modename;
if($rs['status']==5)$rows[$k]['ishui'] = 1;
$totday = floatval(arrvalue($rs,'totday','0'));
if($totday>0)$rows[$k]['totals'].='('.$totday.'天)';
$rows[$k]['jiatype'] = $jiatype;
if(!isempt($rs['enddt'])){
$rows[$k]['etime'] = $rs['enddt']; //截止时间
if($rs['enddt']<$this->rock->now)$rows[$k]['ishui'] = 1;
}
}
$month = $this->post('dt1', date('Y-m'));
$str = '';
if($this->post('atype')=='my'){
$kqm = m('kaoqin');
$jiafee = $kqm->getjiafee($uid, $month);
$str = ''.$kqm->getqjsytimestr($uid).'';
if($jiafee>0)$str.=''.substr($month,0,7).'加班费('.$jiafee.'元)';
}
return array('rows'=>$rows,'totalstr'=> $str);
}
public function kqsjgzdataAjax()
{
$this->rows = array();
$this->getkqdat(0, 1);
$this->returnjson(array(
'rows' => $this->rows
));
}
private function getkqdat($pid, $oi)
{
$db = m('kqsjgz');
$menu = $db->getall("`pid`='$pid' order by `sort`",'*');
foreach($menu as $k=>$rs){
$sid = $rs['id'];
$rs['level'] = $oi;
$rs['stotal'] = $db->rows("`pid`='$sid'");
$this->rows[] = $rs;
$this->getkqdat($sid, $oi+1);
}
}
public function kqsjgzdatadelAjax()
{
$type = (int)$this->post('type','0');
$id = (int)$this->post('id');
if($id==1 && $type!=3)showreturn('','此记录不能删除',201);
if($type==0)m('kqsjgz')->delete("`id`='$id' or pid='$id'");
if($type==1)m('kqdist')->delete("`id`='$id'"); //分配的
if($type==2)m('kqxxsj')->delete("`id`='$id' or pid='$id'");
if($type==3){
$ida = c('check')->onlynumber($this->post('id'));
m('kqxxsj')->delete("`id` in($ida)");
}
showreturn();
}
public function kqdwdkdatadelAjax()
{
$id = (int)$this->post('id');
m('kqdw')->delete("`id`='$id'");
showreturn();
}
//考勤时间分配
public function kqdistbefore($table)
{
$type = (int)$this->post('type','0');
$gzid = (int)$this->post('gzid','0');
$key = $this->post('key');
$where = 'and `type`='.$type.'';
if($gzid!=0)$where.=" and `mid` ='$gzid'";
if(!isempt($key))$where.=" and `recename` like '%$key%'";
return array(
'where' => $where,
'order' => 'id desc'
);
}
public function kqdistafter($table, $rows)
{
$type = (int)$this->post('type','0');
$db = m('kqsjgz');
if($type==1)$db = m('kqxxsj');
if($type==2)$db = m('kqdw');
foreach($rows as $k=>$rs){
$rows[$k]['mid'] = $db->getmou('name', $rs['mid']);
$rows[$k]['mids'] = $rs['mid'];
}
$gzdata = array();
if($type==0){
$gzdata = $db->getall('pid=0','id,name','`sort`');
}else if($type==1){
$gzdata = $db->getall('pid=0','id,name','`id`');
}else if($type==2){
$gzdata = $db->getall('1=1','id,name','`id`');
}
return array(
'rows' => $rows,
'gzdata' => $gzdata
);
}
public function kqxxsjdtbefore($table)
{
$pid = (int)$this->post('pid','0');
$month = $this->post('month');
$s = 'and `pid`='.$pid.'';
if(!isempt($month))$s.=" and `dt` like '$month%'";
return array(
'where' => $s,
'order' => 'dt desc'
);
}
public function kqxxsjdtafter($table, $rows)
{
$dtobj = c('date');
foreach($rows as $k=>$rs){
$w = $dtobj->cnweek($rs['dt']);
$rows[$k]['week'] = $w;
if($w=='六' || $w=='日')$rows[$k]['ishui'] = 1;
}
return array('rows'=>$rows);
}
public function setxiugdateAjax()
{
$month = $this->post('month');
$pid = (int)$this->post('pid','0');
if(isempt($month) || $pid==0)return;
$dtobj = c('date');
$max = $dtobj->getmaxdt($month);
$db = m('kqxxsj');
for($i=1; $i<=$max; $i++){
$oi = $i;if($oi<10)$oi='0'.$i.'';
$dt = ''.$month.'-'.$oi.'';
$we = $dtobj->cnweek($dt);
if($we=='六' || $we=='日'){
$where = "pid='$pid' and `dt`='$dt'";
if($db->rows($where)==0)$db->insert("pid='$pid',`dt`='$dt'");
}
}
}
//一键添加节假日
public function setjiedateAjax()
{
$month = $this->post('month');
$pid = (int)$this->post('pid','0');
if(isempt($month) || $pid==0)return;
$dtobj = c('date');
$year = substr($month,0,4);
$dt = ''.$year.'-01-01';
$db = m('kqxxsj');
//从官网读取节假日日期
$barr = c('xinhuapi')->getjiari();
if(!$barr['success'])return $barr;
$jierixiuxi = $barr['data']['jierixiuxi']; //休息日
$jierishangban = $barr['data']['jierishangban']; //上班日
for($i=0;$i<366;$i++){
if($i>0)$dt = $dtobj->adddate($dt,'d', 1);
$we = $dtobj->cnweek($dt);
$isxiu = 0;
if($we=='六' || $we=='日'){
$isxiu = 1;
}
if(contain($jierixiuxi, $dt))$isxiu = 1;
if(contain($jierishangban, $dt))$isxiu = 0;//上班
$where = "pid='$pid' and `dt`='$dt'";
if($isxiu==1){
if($db->rows($where)==0)$db->insert("pid='$pid',`dt`='$dt'");
}else{
$db->delete($where);
}
if($dt==''.$year.'-12-31')break;
}
return returnsuccess();
}
//考勤分析
public function kqanaybeforeshow($table)
{
$dt1 = $this->post('dt1');
$dt2 = $this->post('dt2');
$key = $this->post('key');
$iswork = $this->post('iswork','1');
$iskq = $this->post('iskq','1');
$s = '';
if($iswork=='1')$s.=" and a.`iswork`=$iswork";
if($iskq=='1')$s.=" and b.`iskq`=$iskq";
if(!isempt($dt1))$s.=" and a.`dt` >= '$dt1'";
if(!isempt($dt2))$s.=" and a.`dt` <= '$dt2'";
if(!isempt($key))$s.=" and (b.`name` like '%$key%' or b.`deptname` like '%$key%')";
$fields = 'a.*,b.name,b.deptname';
if(ISMORECOM && $this->adminid>1)$s.=' and b.`companyid`='.m('admin')->getcompanyid().'';
$table = '[Q]'.$table.' a left join `[Q]userinfo` b on a.uid=b.id';
return array('where'=>$s,'table'=>$table, 'fields'=>$fields,'order'=>'a.`dt` desc,a.`uid`,`sort`');
}
public function kqanayaftershow($table, $rows)
{
$dtobj = c('date');
$ustie = '';
$iswordk = array('否','是');
$kq = m('kaoqin');
foreach($rows as $k=>$rs){
$rows[$k]['status'] = $rs['iswork'];
$rows[$k]['week'] = $dtobj->cnweek($rs['dt']);
$keys= ''.$rs['dt'].''.$rs['uid'].'';
$rows[$k]['iswork'] = arrvalue($iswordk, $rs['iswork']);
$rows[$k]['state'] = $kq->getkqstate($rs);
if($ustie!='' && $ustie==$keys){
$rows[$k]['deptname'] = '';
$rows[$k]['name'] = '';
$rows[$k]['dt'] = '';
$rows[$k]['iswork'] = '';
$rows[$k]['week'] = '';
}
$ustie= $keys;
}
return array('rows'=>$rows);
}
public function kqanayallAjax()
{
$dt = $this->post('dt');
$atype = $this->post('atype');
$whe = '';
if($atype=='my')$whe=' and id='.$this->adminid.'';
m('kaoqin')->kqanayall($dt, $whe);
}
public function kqanayallinitAjax()
{
$dt = $this->post('dt');
$atype = $this->post('atype');
if($atype=='my'){
$this->kqanayallAjax();
return '{"zong":"ok"}';
}
return m('kaoqin')->kqanayallfirst($dt, 1);
}
public function kqanayallpageAjax()
{
$dt = $this->post('dt');
$page = (int)$this->post('page');
m('kaoqin')->kqanayall($dt, '', $page);
echo 'ok';
}
//考勤分析总表
public function kqanayallbeforeshow($table)
{
$this->month = substr($this->post('dt1',date('Y-m')),0,7);
$key = $this->post('key');
$iskq = $this->post('iskq','1');
$s = m('admin')->monthuwhere($this->month, 'b.');
if($iskq=='1')$s.=" and b.`iskq`=$iskq";
if(!isempt($key))$s.=" and (b.`name` like '%$key%' or b.`deptname` like '%$key%')";
$fields = 'b.name,b.deptname,b.ranking';
$table = '`[Q]userinfo` b';
return array('where'=>$s,'table'=>$table, 'fields'=>$fields);
}
public function kqanayallaftershow($table, $rows)
{
$barr = array();
$kq = m('kaoqin');
$dtobj = c('date');
$barr[] = array(
'dt1_0' => '上班',
'dt1_1' => '下班',
'dt2_0' => '上班',
'dt2_1' => '下班',
);
foreach($rows as $k=>&$rs){
$rs['dt1_0'] = '正常';
$rs['dt1_1'] = '正常';
$rs['dt2_0'] = '未打卡';
$rs['dt2_1'] = '未打卡';
$barr[] = $rs;
}
return array('rows'=>$barr);
}
//个人考勤数据库
public function getmyanaykqAjax()
{
$uid = (int)$this->post('uid', $this->adminid);
$month = $this->post('month');
$kq = m('kaoqin');
$barr = $kq->getanay($uid, $month);
$barrs = $toarr = array();
foreach($barr as $dt=>$dtrows){
$str = '';
foreach($dtrows as $k=>$rs){
$iswork = $rs['iswork'];
$state = $rs['state'];
if($iswork==1 && isempt($rs['states'])){
if(!isset($toarr[$state]))$toarr[$state]=0;
$toarr[$state]++;
}
$s = $kq->getkqstate($rs);
$str.= ''.$rs['ztname'].''.$s.'';
$str.= '<br>';
if($iswork==0)$str='<font color="#aaaaaa">'.$str.'</font>';
}
$barrs[$dt] = $str;
}
$barrs['total'] = $toarr;
$this->returnjson($barrs);
}
public function reladanaymyAjax()
{
$uid = (int)$this->post('uid', $this->adminid);
$month = $this->post('month');
m('kaoqin')->kqanaymonth($uid, $month);
}
//考勤统计
public function kqtotalbeforeshow($table)
{
$dt1 = $this->post('month', date('Y-m'));
$iskq = $this->post('iskq','1');
$iskq = $this->post('iskq','1');
$this->months = $dt1;
$key = $this->post('key');
$atype = $this->post('atype');
$receid = $this->post('receid');
$s = m('admin')->monthuwhere($dt1);
//下属,userinfo下的
if($atype=='down'){
$s .= 'and '.m('admin')->getdownwheres('id', $this->adminid, 0);
}
if($atype=='my'){
$s = 'and id='.$this->adminid.'';
}else{
if($iskq=='1')$s.=" and `iskq`=$iskq";
if(ISMORECOM)$s.=" and `companyid`=".m('admin')->getcompanyid()."";
}
if(isempt($receid)){
if(!isempt($key))$s.=" and (`name` like '%$key%' or `ranking` like '%$key%' or `deptallname` like '%$key%')";
}else{
$ofval = m('admin')->gjoin($receid,'', 'all');
if(!$ofval)$ofval='0';
$s .= ' and `id` in ('.$ofval.')';
}
$fields = 'id,name,deptname,ranking,workdate,state';
return array('where'=>$s,'fields'=>$fields,'order'=>'`id`');
}
public function kqtotalaftershow($table, $rows)
{
$zta = m('flow:userinfo');
$pnum = $this->post('pnum');
$colalls= array();
foreach($rows as $k=>$rs){
if($rs['state']==5)$rows[$k]['ishui']=1;
$rows[$k]['state'] = $zta->getuserstate($rs['state']);
}
$kqobj = m('kaoqin');
$barr = $kqobj->alltotalrows($this->months, $rows);
$rows = $barr['rows'];
$darr = array();
//读取表头
if($pnum=='all'){
$dt = $this->months.'-01';
//获取每天考勤几个状态
$nuuid = $this->adminid;
if($rows)$nuuid = $rows[0]['id'];
$sbarr = $kqobj->getsbarr($nuuid, $dt);
$lenz = count($sbarr); //每天考勤几个状态
$touar = array();
$max = $kqobj->dtobj->getmaxdt($this->months);
for($i=1;$i<=$max;$i++){
$xq = $kqobj->dtobj->cnweek($this->months.'-'.$i.'');
for($j=0;$j<$lenz;$j++){
$dataIndex = 'dt'.$i.'_'.$j.'';
$colalls[] = array(
'text' => ''.$i.'('.$xq.')',
'dataIndex' => $dataIndex, //字段名
'colspan' => $lenz
);
$touar[$dataIndex] = $sbarr[$j]['name'];
}
}
$darr[] = $touar;
//读取人员考勤状态
foreach($rows as $k=>$rs){
$uid = $rs['id'];
$kqarr = $kqobj->getanay($uid, $this->months);
for($i=1;$i<=$max;$i++){
$oi = $i<10?'0'.$i.'':$i;
$dt = $this->months.'-'.$oi.'';
if(isset($kqarr[$dt]))foreach($kqarr[$dt] as $j=>$rs1){
$dataIndex = 'dt'.$i.'_'.$j.'';
$rs[$dataIndex] = $kqobj->getkqstate($rs1); //考勤状态
}
}
$darr[] = $rs;
}
}else{
$darr = $rows;
}
$barr['colalls'] = $colalls;
$barr['rows'] = $darr;
return $barr;
}
/**
* 批量导入打卡记录(2017-08-22)弃用
*/
public function addpldkjlAjax()
{
$val = $this->post('val');
if(isempt($val))backmsg('error');
$arrs = explode("\n", $val);
$oi = 0;$uarr = array();
$dtobj = c('date');$adb = m('admin');$db = m('kqdkjl');
foreach($arrs as $valss){
$name = '';
$dkdt = '';
$uid = 0;
if(!isempt($valss)){
$a = $this->adtewe(explode(' ', $valss),2);
$name = $a[0];
$dkdt = $a[1];
}
if(!isempt($name) && !isempt($dkdt)){
$dkdt = str_replace('/','-', $dkdt);
if(!$dtobj->isdate($dkdt))continue;
if(isset($uarr[$name])){
$uid = $uarr[$name];
}else{
$usar = $adb->getrows("`name`='$name'",'id');
if($this->db->count!=1)continue;
$uid = $usar[0]['id'];
$uarr[$name] = $uid;
}
if($db->rows("`uid`='$uid' and `dkdt`='$dkdt'")>0)continue;
$oi++;
$db->insert(array(
'uid' => $uid,
'dkdt' => $dkdt,
'optdt' => $this->now,
'type' => 5
));
}
}
backmsg('','成功导入'.$oi.'条数据');
}
private function adtewe($a, $len){
for($i=0;$i<$len;$i++){
if(!isset($a[$i]))$a[$i] = '';
}
return $a;
}
public function savaweizzAjax()
{
$id = (int)$this->post('id');
$uarr['location_x'] = $this->post('x');
$uarr['location_y'] = $this->post('y');
$uarr['scale'] = $this->post('zoom');
m('kqdw')->update($uarr, $id);
}
public function locationAction()
{
$id = (int)$this->get('id');
if($id>0){
$rs = m('location')->getone($id);
if(!$rs)exit('not found record');
if($rs['scale']<=0)$rs['scale']=12;
$rs['content'] = '地址:'.$rs['label'].'<br>定位时间:'.$rs['optdt'].'';
$rs['type'] = 0;
}else{
$info = $this->get('info');
if(!$info)exit('not found info');
$arr = explode(',', $this->jm->base64decode($info));
$rs['precision'] = 0;
$rs['location_x'] = $arr[0];
$rs['location_y'] = $arr[1];
$rs['scale'] = $arr[2];
$rs['type'] = 1;
$rs['content'] = arrvalue($arr,3);
}
if($this->rock->ismobile())$rs['type'] = 1;
$this->smartydata['rs'] = $rs;
$this->smartydata['qqmapkey'] = getconfig('qqmapkey','55QBZ-JGYLO-BALWX-SZE4H-5SV5K-JCFV7');
}
public function locationchangeAction()
{
$callback = $this->get('callback');
$location_x = $this->get('location_x','24.528153');
$location_y = $this->get('location_y','118.167806');
$scale = $this->get('scale',12);
$this->assign('callback', $callback);
$this->assign('location_x', $location_x);
$this->assign('location_y', $location_y);
$this->assign('scale', $scale);
$this->smartydata['qqmapkey'] = getconfig('qqmapkey','55QBZ-JGYLO-BALWX-SZE4H-5SV5K-JCFV7');
}
//删除打卡记录
public function deldkjlAjax()
{
$sid = $this->post('id');
//m('kqdkjl')->delete('id in('.$sid.')');
$this->showreturn('');
}
//排班读取人员
public function pbkqdistbefore($table)
{
$pblx = (int)$this->post('pblx',0);//0查看,1组,2人员
$dt1 = $this->post('dt1', date('Y-m'));
$this->months = $dt1;
//根据组
if($pblx==1){
$where1 = '';
if(ISMORECOM)$where1='and `companyid` in(0,'.m('admin')->getcompanyid().')';
return array(
'table' => '`[Q]group`',
'where' => $where1
);
}
$key = $this->post('key');
$atype = $this->post('atype');
$s = m('admin')->monthuwhere($dt1,'a.');
if($atype=='my'){
$s = 'and a.`id`='.$this->adminid.'';
}else{
if(ISMORECOM)$s.='and a.`companyid`='.m('admin')->getcompanyid().'';
}
if(!isempt($key))$s.=" and (a.`name` like '%$key%' or a.`ranking` like '%$key%' or a.`deptname` like '%$key%')";
$table = "[Q]userinfo a left join `[Q]admin` b on a.id=b.id";
$fields = 'a.id,a.name,a.deptname,a.ranking,a.workdate,a.state';
return array(
'where' =>$s,
'fields'=>$fields,
'order'=>'b.`sort`,a.`id`',
'table'=> $table
);
}
public function pbkqdistafter($table, $rows)
{
$zta = m('flow:userinfo');
$maxjg = c('date')->getmaxdt($this->months);
$kqobj = m('kaoqin');
$pblx = $this->post('pblx','0');
//人员的
if($pblx=='0'){
foreach($rows as $k=>$rs){
if($rs['state']==5)$rows[$k]['ishui']=1;
$rows[$k]['state'] = $zta->getuserstate($rs['state']);
$uid = $rs['id'];
for($i=1;$i<=$maxjg;$i++){
$oi = ($i<10) ? '0'.$i.'' : $i;
$dt = $this->months.'-'.$oi;
$zt = '';
$iswork = $kqobj->isworkdt($uid, $dt);
if($iswork==1){
$zt = $kqobj->getdistid($uid, $dt);
}
$rows[$k]['day'.$i.''] = $zt;
}
}
}
//组的
if($pblx=='1' || $pblx=='2'){
$gset = $this->db->getall("select * from `[Q]kqdisv` where `dt` like '".$this->months."%' and `plx`=".$pblx." order by `type`");
$setar= array();
foreach($gset as $k=>$rs){
$key = 'a'.$rs['dt'].'_'.$rs['receid'].'_'.$rs['type'].'';
$setar[$key] = $rs['mid'];
}
foreach($rows as $k=>$rs){
if($pblx=='1')$rows[$k]['deptname']='组';
for($i=1;$i<=$maxjg;$i++){
$oi = ($i<10) ? '0'.$i.'' : $i;
$dt = $this->months.'-'.$oi;
$key1 = 'a'.$dt.'_'.$rs['id'].'_1';//休息
$key2 = 'a'.$dt.'_'.$rs['id'].'_2';//工作日
$key0 = 'a'.$dt.'_'.$rs['id'].'_0'; //考勤
$iswork = 1;
$zt = '';
if(isset($setar[$key1]))$iswork=0;
if(isset($setar[$key2]))$iswork=1;//有设置工作日就是工作日
if($iswork==1){
$zt = arrvalue($setar, $key0,'0');
}
$rows[$k]['day'.$i.''] = $zt;
}
}
}
//读取考勤时间规则
$gzrows = m('kqsjgz')->getall('pid=0','`id`,`name`','`sort`');
return array(
'rows' => $rows,
'maxjg'=> $maxjg,
'week' => date('w', strtotime($this->months.'-01')),
'gzrows'=> $gzrows
);
}
//排班标识保存
public function setpaibanAjax()
{
$len = (int)$this->post('len','0');
$db = m('kqdisv');
for($i=0;$i<$len;$i++){
$dt = date('Y-m-d',strtotime($this->post('dt_'.$i.'')));
$mid = $this->post('mid_'.$i.'');
$plx = $this->post('plx_'.$i.'');//1组,2人员
$receid = $this->post('receid_'.$i.'');
$lx = (int)$this->post('type_'.$i.'','0');
$type = 0;//考勤规则
//设置休息日 取消休息日
if($lx==0 || $lx==1){
$type = 1;
}
//设置工作日 取消工作日
if($lx==2 || $lx==3){
$type = 2;
}
$where = "`plx`='$plx' and `receid`='$receid' and `dt`='$dt'";
if($type==0)$where.=" and `type`='$type'";
if($lx==1 || $lx==3 || $lx==5){
$db->delete($where);
}else{
if($db->rows($where)==0){
$db->insert(array(
'plx' => $plx,
'receid' => $receid,
'dt' => $dt,
'type' => $type,
'mid' => $mid,
));
}else{
$db->update('`mid`='.$mid.',`type`='.$type.'', $where);
}
}
}
}
//自动添加年假
public function addnianjiaAjax()
{
$dt = $this->get('dt');
$barr = m('flow:leave')->autoaddleave($dt);
return '共添加'.count($barr).'人';
}
//剩余假期统计
public function kqtotalafterjiashow($table, $rows)
{
$zta = m('flow:userinfo');
$dt = $this->post('month');
$kqkind = $this->option->getdata('kqkind', "and `name`<>'增加调休'");
$kq = m('kaoqin');
foreach($rows as $k=>$rs){
if($rs['state']==5)$rows[$k]['ishui']=1;
$rows[$k]['state'] = $zta->getuserstate($rs['state']);
foreach($kqkind as $k1=>$rs1){
$tosss = $kq->getqjsytime($rs['id'], str_replace('增加','', $rs1['name']), $dt);
if($tosss==0)$tosss='';
$rows[$k]['total'.$k1.''] = $tosss;
}
$tosss = $kq->getqjsytime($rs['id'], '调休', $dt);
if($tosss==0)$tosss='';
$rows[$k]['tiaoxiu'] = $tosss;
}
return array(
'rows'=> $rows,
'kqkind'=> $kqkind,
);
}
public function updateenddtAjax()
{
$to = m('flow:leave')->updateenddt();
return '更新成功';
}
public function kqtotalmxbefore($table)
{
$uid = (int)$this->post('uid');
$qjkind = $this->post('qjkind');
$this->optuid = $uid;
$this->optqjkind = $qjkind;
$where = 'and `uid`='.$uid.'';
$this->optkind = '';
$this->optkinds = '增加'.$qjkind.'';
if($qjkind=='调休'){
$this->optkind = '加班';
$whera = "((`kind`='$this->optkind' and `jiatype`=0) or (`kind`='$this->optkinds'))";
$where .= " and ((`qjkind`='$qjkind' and `status` in(0,1)) or (`status`=1 and $whera))";
}else{
$this->optkind = $this->optkinds;
$where .= " and ((`qjkind`='$qjkind' and `status` in(0,1)) or (`kind`='$this->optkind' and `status`=1))";
}
return array(
'where' => $where,
'order' => '`stime`'
);
}
public function kqtotalmxafter($table, $rows)
{
$urs = m('userinfo')->getone($this->optuid);
foreach($rows as $k=>$rs){
if($urs){
$rows[$k]['uname'] = $urs['name'];
$rows[$k]['deptname'] = $urs['deptname'];
}
if(!isempt($rs['enddt'])){
$rows[$k]['etime'] = $rs['enddt']; //截止时间
if($rs['enddt']<$this->rock->now)$rows[$k]['ishui'] = 1;
}else{
if($rs['kind']==$this->optkind || $rs['kind']==$this->optkinds)$rows[$k]['etime'] = '';
}
}
$kqkind = $this->option->getdata('kqkind',"and `name`<>'增加调休'");
if($rows){
$rows[] = array(
'deptname' => '合计',
'totals1' => m('kaoqin')->getqjsytime($this->optuid, $this->optqjkind)
);
}
return array(
'rows' => $rows,
'kqkind' => $kqkind,
);
}
}

View File

@@ -0,0 +1,99 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var a = $('#view_{rand}').bootstable({
tablename:'kqanay',fanye:true,
url:publicstore('{mode}','{dir}'),storeafteraction:'kqanayaftershow',storebeforeaction:'kqanaybeforeshow',pageSize:16,
columns:[{
text:'部门',dataIndex:'deptname',align:'left'
},{
text:'姓名',dataIndex:'name',sortable:true
},{
text:'日期',dataIndex:'dt',sortable:true
},{
text:'星期',dataIndex:'week'
},{
text:'是否工作日',dataIndex:'iswork',sortable:true
},{
text:'状态名称',dataIndex:'ztname'
},{
text:'状态值',dataIndex:'state',align:'left'
}],
itemclick:function(){
get('xqkaoqb_{rand}').disabled=false;
}
});
var c = {
search:function(){
var s=get('key_{rand}').value;
var is = (get('iswork_{rand}').checked)?'1':'0';
var is1 = (get('iskq_{rand}').checked)?'1':'0';
a.setparams({key:s,dt1:get('dt1_{rand}').value,dt2:get('dt2_{rand}').value,iswork:is,iskq:is1},true);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'month',inputid:'dt'+lx+'_{rand}'});
},
anaynow:function(){
var dt = get('dt1_{rand}').value;
if(dt==''){
js.msg('msg','请选择月份');
return;
}
js.ajax(js.getajaxurl('kqanayallinit','{mode}','{dir}'),{dt:dt},function(ret){
var oi=0,zong=ret.maxpage,i,cans,dar=[];
for(i=1;i<=zong;i++){
dar.push(js.getajaxurl('kqanayallpage','{mode}','{dir}',{dt:dt,page:i}));
}
queue.addlist(dar,function(){a.reload();},'['+dt+']月份的考勤分析');
},'get,json');
},
xqkaoqb:function(){
var d=a.changedata;
if(!d.name)return;
addtabs({num:'adminkaoqin'+d.uid+'',url:'main,kaoqin,geren,uid='+d.uid+'',icons:'time',name:''+d.name+'的考勤'});
},
daochu:function(){
a.exceldown();
}
};
//$('#dt1_{rand}').val(js.now('Y-m'));
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td nowrap>日期从&nbsp;</td>
<td nowrap>
<input style="width:110px" onclick="js.changedate(this)" readonly class="form-control datesss" id="dt1_{rand}" >
</td>
<td nowrap>&nbsp;至&nbsp;</td>
<td nowrap>
<input style="width:110px" onclick="js.changedate(this)" readonly class="form-control datesss" id="dt2_{rand}" >
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:150px" id="key_{rand}" placeholder="姓名/部门">
</td>
<td nowrap style="padding-left:10px">
<label><input id="iswork_{rand}" checked type="checkbox">只看工作日</label>
</td>
<td nowrap style="padding-left:10px">
<label><input id="iskq_{rand}" checked type="checkbox">只看需考勤</label>
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td style="padding-left:5px">
</td>
<td width="80%"></td>
<td align="right" nowrap>
<button class="btn btn-info" click="xqkaoqb" disabled id="xqkaoqb_{rand}" type="button">详情考勤表</button>&nbsp;&nbsp;
<button class="btn btn-default" click="anaynow" type="button">全部重新分析</button>&nbsp;&nbsp;
<button class="btn btn-default" click="daochu" type="button">导出</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,49 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var a = $('#view_{rand}').bootstable({
tablename:'userinfo',celleditor:true,fanye:true,
url:publicstore('{mode}','{dir}'),storeafteraction:'kqtotalaftershow',storebeforeaction:'kqtotalbeforeshow',
columns:[{
text:'部门',dataIndex:'deptname',align:'left',sortable:true
},{
text:'姓名',dataIndex:'name',sortable:true
},{
text:'职位',dataIndex:'ranking'
},{
text:'在线打卡IP',dataIndex:'dkip'
},{
text:'在线打卡MAC地址',dataIndex:'dkmac'
},{
text:'ID',dataIndex:'id'
}],
itemclick:function(){
get('xqkaoqb_{rand}').disabled=false;
}
});
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s},true);
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td nowrap>
<input class="form-control" style="width:150px" id="key_{rand}" placeholder="姓名/部门">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="90%"></td>
<td align="right" nowrap>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,180 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var atype=params.atype;
var a = $('#view_{rand}').bootstable({
tablename:'kqdkjl',celleditor:true,fanye:true,modenum:'kqdkjl',sort:'id',dir:'desc',
modedir:'{mode}:{dir}',params:{'atype':atype},storeafteraction:'kqdkjlaftershow',
columns:[{
text:'部门',dataIndex:'deptname',align:'left'
},{
text:'姓名',dataIndex:'name'
},{
text:'打卡时间',dataIndex:'dkdt',sortable:true
},{
text:'星期',dataIndex:'week'
},{
text:'类型',dataIndex:'type',sortable:true
},{
text:'添加时间',dataIndex:'optdt',sortable:true
},{
text:'IP',dataIndex:'ip'
},{
text:'MAC地址',dataIndex:'mac'
},{
text:'打卡位置',dataIndex:'address'
},{
text:'说明',dataIndex:'explain',align:'left'
},{
text:'图片',dataIndex:'imgpath',renderer:function(v){
var s='&nbsp;';
if(!isempt(v))s='<img height="60" onclick="$.imgview({url:this.src})" src="'+v+'">';
return s;
}
}],
itemdblclick:function(d){
//openxiang('kqdkjl',d.id);
},
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
},
load:function(d){
if(d.qybo || d.ddbo){
var o = $('#huoqbtsn{rand}');
o.parent().show();
var str = '';
if(d.qybo)str='企业微信';
if(d.ddbo && d.qybo)str+='/';
if(d.ddbo)str+='钉钉';
o.val('从'+str+'获取打卡数据');
}
}
});
function btn(bo){
get('del_{rand}').disabled = bo;
}
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s,dt1:get('dt1_{rand}').value,dt2:get('dt2_{rand}').value},true);
},
delss:function(){
a.del();
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'date',inputid:'dt'+lx+'_{rand}'});
},
daochu:function(o1){
publicdaochuobj({
'objtable':a,
'modename':'',
'btnobj':o1
});
},
adddaka:function(){
var h = $.bootsform({
title:'打卡记录',height:240,width:380,
tablename:'kqdkjl',isedit:0,submitfields:'dkdt,uid,explain',
params:{otherfields:'type=3,optdt={now}'},
items:[{
labelText:'人员',name:'recename',required:true,type:'changeuser',changeuser:{
type:'user',idname:'uid',title:'选择人员'
},clearbool:true
},{
name:'uid',type:'hidden'
},{
labelText:'打卡时间',name:'dkdt',type:'date',view:'datetime',required:true
},{
labelText:'说明',name:'explain',type:'textarea',height:60
}],
success:function(){
a.reload();
}
});
},
daoru:function(){
//dkjlmanagesss = a;
//addtabs({num:'admindkjlpl',url:'main,kaoqin,dkjlpl',name:'导入打卡记录'});
managelistkqdkjl = a;
addtabs({num:'daorukqdkjl',url:'flow,input,daoru,modenum=kqdkjl',icons:'plus',name:'导入打卡记录'});
},
xiashu:function(o1){
if(atype=='my'){
o1.value='我的记录';
atype = 'down';
nowtabssettext('下属打卡记录');
}else{
o1.value='下属记录';
atype = 'my';
nowtabssettext('我的打卡记录');
}
a.setparams({atype:atype}, true);
},
huqodidn:function(){
js.msg('wait','获取中...');
var dt1 = get('dt1_{rand}').value;
var dt2 = get('dt2_{rand}').value;
js.ajax(js.getajaxurl('getdkjl','{mode}', '{dir}'),{dt1:dt1,dt2:dt2,atype:atype}, function(d){
if(d.success){
js.msg('success', d.data);
a.reload();
}
},'post,json');
}
};
if(atype=='all')$('#btnss{rand}').show();
if(atype=='my')$('#down_{rand}').show();
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td nowrap>日期&nbsp;</td>
<td nowrap>
<div style="width:140px" class="input-group">
<input placeholder="" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,1" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td nowrap>&nbsp;至&nbsp;</td>
<td nowrap>
<div style="width:140px" class="input-group">
<input placeholder="" readonly class="form-control" id="dt2_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,2" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:150px" id="key_{rand}" placeholder="姓名/部门">
</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="daochu,1" type="button">导出 <i class="icon-angle-down"></i></button>
</td>
<td style="padding-left:10px;display:none">
<input class="btn btn-default" id="huoqbtsn{rand}" click="huqodidn" value="从企业微信获取打卡数据" type="button">
</td>
<td style="padding-left:10px" width="80%">
<input class="btn btn-default" click="xiashu" id="down_{rand}" style="display:none" value="下属记录" type="button">
</td>
<td align="right" id="btnss{rand}" style="display:none" nowrap>
<button class="btn btn-default" click="daoru" type="button">导入</button>&nbsp;
<button class="btn btn-default" click="adddaka" type="button"><i class="icon-plus"></i> 新增</button>&nbsp;
<button class="btn btn-danger" id="del_{rand}" disabled click="delss" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,77 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var month=params.month,uid=params.uid;
if(!uid)uid=''+adminid;
if(!month)month='';
var c = {
change:function(o1, lx){
mobj.fanmonth(lx);
},
nowchange:function(){
mobj.nowmonth();
},
loadschedule:function(){
$.get(js.getajaxurl('getmyanaykq','{mode}','{dir}', {month:month,uid:uid}), function(da){
js.msg();
var d1,s='';
for(d1 in da){
s=da[d1];
if(s!='')$('#s'+d1+'_{rand}').html('<div style="border-top:1px #eeeeee solid;margin-top:3px;">'+s+'</div>');
}
s='';var toarr = da['total'];
for(d1 in toarr)s+=''+d1+':'+toarr[d1]+'';
if(s!='')s=s.substr(1);
$('#total_{rand}').html(s);
},'json');
},
anaygr:function(){
js.msg('wait','分析中...');
$.get(js.getajaxurl('reladanaymy','{mode}','{dir}', {month:month,uid:uid}), function(da){
c.loadschedule();
});
},
reload:function(){
js.msg('wait','刷新中...');
c.loadschedule();
}
};
var mobj = $('#veiw_{rand}').rockcalendar({
height:viewheight-105,
month:month,
changemonth:function(y, m){
$('#nowmonth_{rand}').html(''+y+'年'+xy10(m)+'月的考勤表');
month = ''+y+'-'+xy10(m)+'';
c.loadschedule();
},
renderer:function(dt, s, d){
var v = s;
v+='<div style="font-size:12px;" id="s'+dt+'_{rand}"></div>';
return v;
}
});
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td align="left" width="30%">
<button type="button" click="change,-1" class="btn btn-default"><i class="icon-caret-left"></i> 上个月</button>&nbsp;
<button type="button" click="nowchange" class="btn btn-default"><i class="icon-calendar"></i> 当月</button>&nbsp;
<button type="button" click="reload" class="btn btn-default">刷新</button>
</td>
<td align="center" width="40%">
<div id="nowmonth_{rand}" style="font-size:16px">2015年06月</div>
</td>
<td align="right" width="30%">
<button type="button" click="anaygr" class="btn btn-info">重新分析</button>&nbsp;
<button type="button" click="change,1" class="btn btn-default">下个月 <i class="icon-caret-right"></i></button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div style="height:30px;line-height:30px;border-top:1px #dddddd solid">&nbsp;统计:<span id="total_{rand}"></span></div>
<div id="veiw_{rand}"></div>

View File

@@ -0,0 +1,135 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var a = $('#view_{rand}').bootstable({
tablename:'kqinfo',params:{'atype':'all'},celleditor:true,fanye:true,modedir:'{mode}:{dir}',
storeafteraction:'kqinfoaftershow',storebeforeaction:'kqinfobeforeshow',
columns:[{
text:'部门',dataIndex:'deptname',align:'left'
},{
text:'姓名',dataIndex:'name'
},{
text:'类型',dataIndex:'kind',sortable:true
},{
text:'请假类型',dataIndex:'qjkind'
},{
text:'开始时间',dataIndex:'stime',sortable:true
},{
text:'截止时间',dataIndex:'etime',sortable:true
},{
text:'时间(小时)',dataIndex:'totals',sortable:true
},{
text:'加班兑换',dataIndex:'jiatype'
},{
text:'说明',dataIndex:'explain',align:'left'
},{
text:'状态',dataIndex:'status'
},{
text:'操作人',dataIndex:'optname'
},{
text:'操作时间',dataIndex:'optdt',sortable:true
},{
text:'截止使用',dataIndex:'enddt',sortable:true,textmsg:'超过这个时间不能在使用',editor:true,editorbefore:function(d){
return (d.kind=='加班' || d.kind.substr(0,2)=='增加');
}
},{
text:'',dataIndex:'caozuo'
}],
itemdblclick:function(d){
openxiangs(d.modename,d.modenum,d.id);
}
});
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s,dt1:get('dt1_{rand}').value,dt2:get('dt2_{rand}').value,keys:get('keys_{rand}').value},true);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'month',inputid:'dt'+lx+'_{rand}'});
},
daochu:function(o1){
new publicdaochuobj({
'objtable':a,
'modename':'考勤信息',
'btnobj':o1
});
},
clickwin:function(){
openinput('考勤信息','leavehr');
},
addnianjia:function(){
var dt = get('dt1_{rand}').value;
if(isempt(dt)){js.msg('msg','请先选择日期从,直接选今日就可以');return;}
js.confirm('一键添加年假入职日期满整年才会添加如2017-12-20入职今年要到<?=date('Y')?>-12-20才会添加年假如添加去年开始日期你可以选去年<?=(date('Y')-1)?>-12-31。', function(jg){
if(jg=='yes')c.addnianjias();
});
},
addnianjias:function(){
js.msg('wait','处理中...');
js.ajax(js.getajaxurl('addnianjia','{mode}','{dir}'),{dt:get('dt1_{rand}').value},function(s){
js.msg('success', s);
a.reload();
});
},
updateenddt:function(bo){
js.confirm('更新截止日期是当加班设置有效期或年假设置有效期就需要更新未在规定截止时间内使用就清0', function(jg){
if(jg=='yes')c.updateenddts();
});
},
updateenddts:function(){
js.msg('wait','处理中...');
js.ajax(js.getajaxurl('updateenddt','{mode}','{dir}'),false,function(s){
js.msg('success', s);
a.reload();
});
},
daoru:function(){
managelistleavehr = a;
addtabs({num:'daoruleavehr',url:'flow,input,daoru,modenum=leavehr',icons:'plus',name:'考勤信息'});
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td style="padding-right:10px">
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增</button>
</td>
<td nowrap>日期从&nbsp;</td>
<td nowrap>
<input style="width:110px" onclick="js.changedate(this)" readonly class="form-control datesss" id="dt1_{rand}" >
</td>
<td nowrap>&nbsp;至&nbsp;</td>
<td nowrap>
<input style="width:110px" onclick="js.changedate(this)" readonly class="form-control datesss" id="dt2_{rand}" >
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:150px" id="key_{rand}" placeholder="姓名/部门">
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:100px" id="keys_{rand}" placeholder="类型">
</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="addnianjia" type="button">一键添加年假</button>
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="updateenddt" type="button">更新截止日期</button>
</td>
<td width="80%">
</td>
<td align="right" nowrap>
<button class="btn btn-default" click="daoru" type="button">导入</button>&nbsp;
<button class="btn btn-default" click="daochu,1" type="button">导出 <i class="icon-angle-down"></i></button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,53 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var a = $('#view_{rand}').bootstable({
tablename:'userinfo',celleditor:true,fanye:true,
url:js.getajaxurl('publicstore','userinfo','main'),storeafteraction:'userinfoafter',storebeforeaction:'userinfobefore',
columns:[{
text:'部门',dataIndex:'deptname',align:'left',sortable:true
},{
text:'姓名',dataIndex:'name',sortable:true
},{
text:'职位',dataIndex:'ranking'
},{
text:'在线打卡IP',dataIndex:'dkip',editor:true
},{
text:'在线打卡MAC地址',dataIndex:'dkmac',editor:true
},{
text:'关联中控考勤机工号',dataIndex:'finger',editor:true
},{
text:'需要考勤',dataIndex:'iskq',type:'checkbox',editor:true
},{
text:'需要写日报',dataIndex:'isdaily',type:'checkbox',editor:true
},{
text:'ID',dataIndex:'id'
}]
});
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s},true);
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td nowrap>
<input class="form-control" style="width:200px" id="key_{rand}" placeholder="姓名/部门/职位">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="90%"></td>
<td align="right" nowrap>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">人员必须设置打卡IPIP一般是内网Ip196.168的或者电脑的物理MAC地址才可以在线打卡多个用,分开不限制IP就写*。</div>

View File

@@ -0,0 +1,112 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var a = $('#view_{rand}').bootstable({
tablename:'kqdw',celleditor:true,fanye:true,url:publicstore('{mode}','{dir}'),storebeforeaction:'kqdwbefore',
columns:[{
text:'规则名称',dataIndex:'name',align:'left',editor:true
},{
text:'经度',dataIndex:'location_x',editor:true
},{
text:'纬度',dataIndex:'location_y',editor:true
},{
text:'经纬度',dataIndex:'xuanz',renderer:function(v,d,i){
return ''+v+'&nbsp;<a href="javascript:;" onclick="changeweizhi{rand}('+i+')">选择位置</a>';
}
},{
text:'位置名称',dataIndex:'address',editor:true
},{
text:'允许误差(米)',dataIndex:'precision',editor:true
},{
text:'无固定地点',dataIndex:'iswgd',editor:true,type:'checkbox'
},{
text:'拍照打卡',dataIndex:'ispz',editor:true,type:'checkbox'
},{
text:'关联其他位置ID',dataIndex:'dwids',editor:true
},{
text:'ID',dataIndex:'id'
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
}
});
function btn(bo){
get('del_{rand}').disabled = bo;
get('edit_{rand}').disabled = bo;
}
var c = {
del:function(){
a.del({url:js.getajaxurl('kqdwdkdatadel','{mode}','{dir}')});
},
clickwin:function(o1,lx){
var gzdata = [{id:'',name:''}];
var das = a.getData();
for(var i in das)gzdata.push(das[i]);
var h = $.bootsform({
title:'位置',height:380,width:400,
tablename:'kqdw',isedit:lx,
submitfields:'name,address,precision,dwids',
items:[{
labelText:'名称',name:'name',required:true
},{
labelText:'位置名称',name:'address',required:true
},{
labelText:'允许误差(米)',name:'precision',type:'number',value:0
},{
labelText:'关联其他地点',name:'dwids',type:'select',valuefields:'id',displayfields:'name',store:gzdata
}],
success:function(){
a.reload();
}
});
if(lx==1)h.setValues(a.changedata);
h.getField('name').focus();
},
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s},true);
}
};
changeweizhi{rand}=function(oi){
var d = a.getData(oi);
var url = '?m=kaoqin&d=main&a=locationchange';
if(!isempt(d.location_x))url+='&location_x='+d.location_x+'&location_y='+d.location_y+'&scale='+d.scale+'';
openxiangs('选择位置',url,'','backshow{rand}');
}
backshow{rand}=function(d){
d.id = a.changeid;
js.ajax(js.getajaxurl('savaweizz','{mode}','{dir}'),d, function(s){
a.reload();
},'post');
}
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td nowrap>
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增</button>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:200px" id="key_{rand}" placeholder="规则/位置名称">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="100%"></td>
<td align="right" nowrap>
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button> &nbsp;
<button class="btn btn-danger" id="del_{rand}" click="del" disabled type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">位置必须从地图上选择哦无固定地点选中了任何地点都可以考勤打卡关联其他位置ID填写当前页面记录的ID多个,分开。</div>

View File

@@ -0,0 +1,88 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var modenum='kqerr';
var atype=params.atype
var a = $('#view_{rand}').bootstable({
tablename:'kqerr',params:{'atype':atype},fanye:true,modenum:modenum,statuschange:false,
columns:[{
text:'部门',dataIndex:'deptname'
},{
text:'姓名',dataIndex:'name'
},{
text:'职位',dataIndex:'ranking'
},{
text:'异常类型',dataIndex:'errtype',sortable:true
},{
text:'异常日期',dataIndex:'dt',sortable:true
},{
text:'应打卡时间',dataIndex:'ytime'
},{
text:'说明',dataIndex:'explain',align:'left'
},{
text:'操作时间',dataIndex:'optdt',sortable:true
},{
text:'状态',dataIndex:'statustext'
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
},
itemdblclick:function(d){
openxiangs('打卡异常',modenum,d.id);
}
});
function btn(bo){
get('xiang_{rand}').disabled = bo;
}
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s,'month':get('dt1_{rand}').value},true);
},
daochu:function(){
a.exceldown();
},
view:function(){
var d=a.changedata;
openxiangs('打卡异常',modenum,d.id);
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td nowrap>
<div style="width:140px" class="input-group">
<input placeholder="月份" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" onclick="return js.selectdate(this,'dt1_{rand}','month')" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:250px" id="key_{rand}" placeholder="人员/部门">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td style="padding-left:10px" width="90%">
</td>
<td align="right" nowrap>
<button class="btn btn-default" id="xiang_{rand}" click="view" disabled type="button">详情</button> &nbsp;
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,115 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var atype=params.atype;
var a = $('#view_{rand}').bootstable({
tablename:'kqinfo',params:{'atype':atype},celleditor:true,fanye:true,modedir:'{mode}:{dir}',
storeafteraction:'kqinfoaftershow',storebeforeaction:'kqinfobeforeshow',
columns:[{
text:'部门',dataIndex:'deptname',align:'left'
},{
text:'姓名',dataIndex:'name'
},{
text:'操作时间',dataIndex:'optdt',sortable:true
},{
text:'类型',dataIndex:'kind',sortable:true
},{
text:'请假类型',dataIndex:'qjkind'
},{
text:'开始时间',dataIndex:'stime',sortable:true
},{
text:'截止时间',dataIndex:'etime',sortable:true
},{
text:'时间',dataIndex:'totals',sortable:true
},{
text:'加班兑换',dataIndex:'jiatype'
},{
text:'说明',dataIndex:'explain',align:'left'
},{
text:'状态',dataIndex:'status'
},{
text:'操作人',dataIndex:'optname'
},{
text:'截止使用',dataIndex:'enddt',sortable:true
},{
text:'',dataIndex:'caozuo'
}],
load:function(d){
$('#kqtong{rand}').html(d.totalstr);
},
itemdblclick:function(d){
openxiangs(d.modename,d.modenum,d.id);
}
});
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s,dt1:get('dt1_{rand}').value,dt2:get('dt2_{rand}').value,keys:get('keys_{rand}').value},true);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'month',inputid:'dt'+lx+'_{rand}'});
},
daochu:function(){
a.exceldown();
},
clickwin:function(o1, lx){
if(lx==0)openinput('请假条','leave');
if(lx==1)openinput('加班单','jiaban');
},
xiashu:function(o1){
if(atype=='my'){
o1.value='我的考勤';
atype = 'down';
nowtabssettext('下属考勤信息');
}else{
o1.value='下属考勤';
atype = 'my';
nowtabssettext('我的考勤信息');
}
a.setparams({atype:atype}, true);
}
};
if(atype=='my')$('#down_{rand}').show();
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td style="padding-right:10px">
<button class="btn btn-primary" click="clickwin,0" type="button">新增请假条</button>
</td>
<td style="padding-right:10px">
<button class="btn btn-primary" click="clickwin,1" type="button">新增加班单</button>
</td>
<td nowrap>日期从&nbsp;</td>
<td nowrap>
<input style="width:110px" onclick="js.changedate(this)" readonly class="form-control datesss" id="dt1_{rand}" >
</td>
<td nowrap>&nbsp;至&nbsp;</td>
<td nowrap>
<input style="width:110px" onclick="js.changedate(this)" readonly class="form-control datesss" id="dt2_{rand}" >
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:150px" id="key_{rand}" placeholder="姓名/部门">
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:100px" id="keys_{rand}" placeholder="类型">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="80%" style="padding-left:10px">
<input class="btn btn-default" click="xiashu" id="down_{rand}" style="display:none" value="下属考勤" type="button">
</td>
<td align="right" nowrap>
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div>我考勤信息统计:<span id="kqtong{rand}"></span></div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,92 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var modenum='waichu';
var atype=params.atype
var a = $('#view_{rand}').bootstable({
tablename:'kqout',params:{'atype':atype},fanye:true,modenum:modenum,statuschange:false,
columns:[{
text:'部门',dataIndex:'deptname'
},{
text:'姓名',dataIndex:'name'
},{
text:'职位',dataIndex:'ranking'
},{
text:'类型',dataIndex:'atype',sortable:true
},{
text:'外出时间',dataIndex:'outtime',sortable:true
},{
text:'预计回岗',dataIndex:'intime'
},{
text:'外出地址',dataIndex:'address'
},{
text:'外出理由',dataIndex:'reason',align:'left'
},{
text:'说明',dataIndex:'explain',align:'left'
},{
text:'操作时间',dataIndex:'optdt',sortable:true
},{
text:'状态',dataIndex:'statustext'
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
},
itemdblclick:function(d){
openxiangs('外出',modenum,d.id);
}
});
function btn(bo){
get('xiang_{rand}').disabled = bo;
}
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s,'month':get('dt1_{rand}').value},true);
},
daochu:function(){
a.exceldown();
},
view:function(){
var d=a.changedata;
openxiangs('外出',modenum,d.id);
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td nowrap>
<div style="width:140px" class="input-group">
<input placeholder="月份" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" onclick="return js.selectdate(this,'dt1_{rand}','month')" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:250px" id="key_{rand}" placeholder="人员/部门">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td style="padding-left:10px" width="90%">
</td>
<td align="right" nowrap>
<button class="btn btn-default" id="xiang_{rand}" click="view" disabled type="button">详情</button> &nbsp;
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,108 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var atype=params.atype;
var a = $('#view_{rand}').bootstable({
tablename:'location',celleditor:true,fanye:true,
modedir:'{mode}:{dir}',params:{'atype':atype},modenum:'kqdw',
columns:[{
text:'部门',dataIndex:'deptname',align:'left'
},{
text:'姓名',dataIndex:'name'
},{
text:'打卡时间',dataIndex:'optdt',sortable:true
},{
text:'星期',dataIndex:'week'
},{
text:'定位类型',dataIndex:'type',sortable:true
},{
text:'地址',dataIndex:'label'
},{
text:'精确到',dataIndex:'precision'
},{
text:'说明',dataIndex:'explain',align:'left'
},{
text:'图片',dataIndex:'imgpath',renderer:function(v){
var s='&nbsp;';
if(!isempt(v))s='<img height="60" onclick="$.imgview({url:this.src})" src="'+v+'">';
return s;
}
},{
text:'',dataIndex:'opt',renderer:function(v,d){
var s='&nbsp;';
if(!isempt(d.location_x))s='<a onclick="js.locationshow('+d.id+')" href="javascript:;">地图上打开</a>';
return s;
}
}]
});
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s,dt1:get('dt1_{rand}').value,dt2:get('dt2_{rand}').value},true);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'date',inputid:'dt'+lx+'_{rand}'});
},
daochu:function(o1){
publicdaochuobj({
'objtable':a,
'modename':'',
'btnobj':o1
});
},
xiashu:function(o1){
if(atype=='my'){
o1.value='我的记录';
atype = 'down';
nowtabssettext('下属定位记录');
}else{
o1.value='下属记录';
atype = 'my';
nowtabssettext('我的定位记录');
}
a.setparams({atype:atype}, true);
}
};
js.initbtn(c);
if(atype=='my')$('#down_{rand}').show();
});
</script>
<div>
<table width="100%"><tr>
<td nowrap>日期&nbsp;</td>
<td nowrap>
<div style="width:140px" class="input-group">
<input placeholder="" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,1" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td nowrap>&nbsp;至&nbsp;</td>
<td nowrap>
<div style="width:140px" class="input-group">
<input placeholder="" readonly class="form-control" id="dt2_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,2" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:150px" id="key_{rand}" placeholder="姓名/部门">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td style="padding-left:10px">
<input class="btn btn-default" click="xiashu" id="down_{rand}" style="display:none" value="下属记录" type="button">
</td>
<td width="80%"></td>
<td align="right" nowrap>
<button class="btn btn-default" click="daochu,1" type="button">导出 <i class="icon-angle-down"></i></button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">定位记录并不能使用做考勤打卡,目前只是用于外勤定位打卡使用。</div>

View File

@@ -0,0 +1,112 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var gzdata=[],lobdds=false,type=params.type;if(!type)type='0';
var a = $('#view_{rand}').bootstable({
tablename:'kqdist',celleditor:true,fanye:true,params:{'type':type},
url:publicstore('{mode}','{dir}'),storeafteraction:'kqdistafter',storebeforeaction:'kqdistbefore',
columns:[{
text:'针对人员',dataIndex:'recename',sortable:true
},{
text:'对应规则',dataIndex:'mid',sortable:true
},{
text:'开始日期',dataIndex:'startdt',sortable:true
},{
text:'截止日期',dataIndex:'enddt',sortable:true
},{
text:'状态',dataIndex:'status',type:'checkbox',editor:true,sortable:true
},{
text:'排序号',dataIndex:'sort',editor:true,sortable:true
},{
text:'ID',dataIndex:'id'
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
},
load:function(d){
gzdata=d.gzdata;
if(!lobdds){
js.setselectdata(get('sekw_{rand}'),gzdata,'id');
}
lobdds=true;
}
});
function btn(bo){
get('del_{rand}').disabled = bo;
get('edit_{rand}').disabled = bo;
}
var c = {
del:function(){
a.del({url:js.getajaxurl('kqsjgzdatadel','{mode}','{dir}',{type:1})});
},
clickwin:function(o1,lx){
var h = $.bootsform({
title:'分配',height:320,width:400,
tablename:'kqdist',isedit:lx,submitfields:'recename,receid,mid,startdt,enddt,sort',
params:{otherfields:'type='+type+''},
items:[{
labelText:'针对人员',name:'recename',required:true,type:'changeuser',changeuser:{
type:'deptusercheck',idname:'receid',title:'选择人员'
},clearbool:true
},{
name:'receid',type:'hidden'
},{
labelText:'开始日期',name:'startdt',type:'date',view:'date',required:true
},{
labelText:'截止日期',name:'enddt',type:'date',view:'date',required:true
},{
labelText:'对应规则',name:'mid',type:'select',valuefields:'id',displayfields:'name',store:gzdata,required:true
},{
labelText:'排序号',name:'sort',type:'number',value:'0'
}],
success:function(){
a.reload();
}
});
if(lx==1){
var d = a.changedata;d.mid=d.mids;
h.setValues(d);
}
},
search:function(){
var s=get('key_{rand}').value;
var gzid=get('sekw_{rand}').value;
a.setparams({key:s,gzid:gzid},true);
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td nowrap>
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增</button>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:200px" id="key_{rand}" placeholder="针对人员/部门">
</td>
<td style="padding-left:10px">
<select class="form-control" style="width:150px" id="sekw_{rand}" ><option value="0">-对应规则-</option></select>
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="100%"></td>
<td align="right" nowrap>
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button> &nbsp;
<button class="btn btn-danger" id="del_{rand}" click="del" disabled type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">排序号:数字越小优先级别越高。</div>

View File

@@ -0,0 +1,143 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var a = $('#view_{rand}').bootstable({
tablename:'kqsjgz',celleditor:true,tree:true,
url:js.getajaxurl('kqsjgzdata','{mode}','{dir}'),
columns:[{
text:'规则名称',dataIndex:'name',align:'left',editor:true
},{
text:'开始时间',dataIndex:'stime',width:'150px',align:'left',renderer:function(v, d){
var s=v;
if(d.level>1 && d.iskt==2){
s=''+v+'<font color=red>(-1天)</font>';
}
if(d.level>1 && d.iskt==1 && v<d.etime){
s=''+v+'<font color=red>(+1天)</font>';
}
return s;
}
},{
text:'结束时间',dataIndex:'etime',width:'150px',align:'left',renderer:function(v, d){
var s=v;
if(d.level>1 && d.iskt==1){
s=''+v+'<font color=red>(+1天)</font>';
}
if(d.level>1 && d.iskt==2 && d.stime<v){
s=''+v+'<font color=red>(-1天)</font>';
}
return s;
}
},{
text:'取值类型',dataIndex:'qtype',renderer:function(v, d){
var s='&nbsp;';
if(d.level!=1){
if(v==0)s='最小值';
if(v==1)s='<font color="#ff6600">最大值</font>';
}
return s;
}
},{
text:'排序号',dataIndex:'sort',editor:true
},{
text:'需考勤?',dataIndex:'iskq',renderer:function(v, d){
var s='&nbsp;';
if(d.level==2){
if(v==0)s='<font color="#888888">否</font>';
if(v==1)s='<font color="green">√</font>';
}
return s;
}
},{
text:'工作时间段?',dataIndex:'isxx',renderer:function(v, d){
var s='&nbsp;';
if(d.level==2){
if(v==1)s='<font color="#888888">否</font>';
if(v==0)s='<font color="green">√</font>';
}
return s;
}
},{
text:'ID',dataIndex:'id'
}],
itemclick:function(d){
btn(false);
if(d.stotal>0)get('del_{rand}').disabled = true;
},
beforeload:function(){
btn(true);
}
});
function btn(bo){
get('del_{rand}').disabled = bo;
get('edit_{rand}').disabled = bo;
get('down_{rand}').disabled = bo;
}
var c = {
del:function(){
a.del({url:js.getajaxurl('kqsjgzdatadel','{mode}','{dir}')});
},
reload:function(){
a.reload();
},
clickwin:function(o1,lx){
var h = $.bootsform({
title:'考勤规则',height:380,width:400,
tablename:'kqsjgz',isedit:lx,
params:{int_filestype:'pid,sort,qtype,iskt,isxx'},
submitfields:'name,pid,sort,qtype,stime,etime,iskt,iskq,isxx',
items:[{
labelText:'名称',name:'name',required:true
},{
labelText:'上级ID',name:'pid',required:true,value:'0',type:'hidden'
},{
labelText:'开始时间',name:'stime',type:'date',view:'time'
},{
labelText:'结束时间',name:'etime',type:'date',view:'time'
},{
labelText:'跨天类型',name:'iskt',type:'select',valuefields:'id',displayfields:'name',store:[{id:'0',name:'不跨天'},{id:'2',name:'开始时间-1天'},{id:'1',name:'结束时间+1天'}]
},{
labelText:'取值类型',name:'qtype',type:'select',valuefields:'id',displayfields:'name',store:[{id:'0',name:'最小值'},{id:'1',name:'最大值'}]
},{
name:'iskq',labelBox:'需考勤?',type:'checkbox'
},{
name:'isxx',labelBox:'非工作时间段',type:'checkbox'
},{
labelText:'序号',name:'sort',type:'number',value:'0'
}],
success:function(){
a.reload();
}
});
if(lx==1)h.setValues(a.changedata);
h.getField('name').focus();
if(lx==2)h.setValue('pid', a.changedata.id);
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td nowrap>
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增规则</button>&nbsp;&nbsp;
<button class="btn btn-default" click="reload" type="button">刷新</button>&nbsp;&nbsp;
<font color="#888888">不会设置可F2查看<a href="<?=URLY?>view_num53.html" target="_blank">[帮助]</a>。</font>
</td>
<td></td>
<td align="right" nowrap>
<button class="btn btn-warning" click="clickwin,2" id="down_{rand}" disabled type="button">新增下级</button> &nbsp;
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button> &nbsp;
<button class="btn btn-danger" id="del_{rand}" click="del" disabled type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">此结构为3级结构顶级为考勤规则名称第2级此规则下每天考勤的名称第3级考勤名称对应状态值取值时间。</div>

View File

@@ -0,0 +1,182 @@
<?php defined('HOST') or die ('not access');?>
<script>
$(document).ready(function(){
{params}
var atype=params.atype,columna=[],chagnedtarr={},lbob=false,pblx=0;if(atype)atype='';
var column = [{
text:'部门',dataIndex:'deptname',align:'left',sortable:true
},{
text:'姓名',dataIndex:'name',sortable:true
}];
for(var i=1;i<=28;i++){
columna.push({
text:''+i+'',
dataIndex:'day'+i+'',
});
}
var a = $('#view_{rand}').bootstable({
tablename:'admin',fanye:true,url:publicstore('{mode}','{dir}'),storeafteraction:'pbkqdistafter',storebeforeaction:'pbkqdistbefore',params:{'pblx':0,'atype':atype},
columns:[].concat(column,columna),
itemclick:function(d,oi, e){
var e1 = e.target;
if(e1.nodeName.toLowerCase()=='td'){
var o1 = $(e1),row = o1.attr('row'),cell = parseFloat(o1.attr('cell'));
if(cell>=2){
var ke = 'a_'+row+'_'+cell+'';
if(chagnedtarr[ke]){
o1.css('background','');
chagnedtarr[ke] = false;
}else{
o1.css('background','#94DDFC');
chagnedtarr[ke] = o1;
}
}
}
},
loadbefore:function(d){
var cs = [],i;
for(i in column)cs.push(column[i]);
var warr=['日','一','二','三','四','五','六'],w=parseFloat(d.week),tsa;
for(i=1;i<=d.maxjg;i++){
if(i>1)w++;
if(w>6)w=0;
tsa = ''+i+'<br>('+warr[w]+')';
if(w==0||w==6)tsa='<font color="#ff6600">'+tsa+'</font>';
cs.push({
text:tsa,
dataIndex:'day'+i+''
});
}
a.setColumns(cs);
},
load:function(d){
var str='提示其中空白为休息日0未设置',gzrows=d.gzrows;
var rda = [{
name:'设置为休息日',lx:0,id:0
},{
name:'取消休息日',lx:1,id:0
},{
name:'设置为工作日',lx:2,id:0
},{
name:'取消工作日',lx:3,id:0
}];
for(var i=0;i<gzrows.length;i++){
str+=''+gzrows[i].id+''+gzrows[i].name+'';
rda.push({name:'设置规则为:'+gzrows[i].name+'',lx:4,id:gzrows[i].id});
}
rda.push({name:'取消规则',id:5,lx:5});
$('#guistr_{rand}').html(str);
if(!lbob){
$('#downbtn_{rand}').rockmenu({
width:230,top:35,donghua:false,
data:rda,
itemsclick:function(d, i){
c.setdownss(d);
}
});
}
},
beforeload:function(){
chagnedtarr={};
}
});
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s,dt1:get('dt1_{rand}').value},true);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'month',inputid:'dt'+lx+'_{rand}'});
},
daochu:function(){
a.exceldown('考勤时间排班('+get('dt1_{rand}').value+')');
},
xuanzeq:function(){
for(var i in chagnedtarr){
if(chagnedtarr[i])chagnedtarr[i].css('background','');
}
chagnedtarr={};
},
//保存
setdownss:function(d){
if(pblx=='0'){js.msg('msg','请先选择根据组/人员来设置');return;}
var str='',i,j,kes,o,row,cell,kesa,da,can=[],mon=get('dt1_{rand}').value,type=d.lx;
for(kes in chagnedtarr){
o = chagnedtarr[kes];
if(o){
kesa = kes.split('_');
row = parseFloat(kesa[1]);
cell = parseFloat(kesa[2]);
da = a.getData(row);
can.push({receid:da.id,dt:mon+'-'+(cell-1)+'',plx:pblx,type:type,mid:d.id});
}
}
var cans={},len=can.length;
if(len==0){js.msg('msg','没有选中单元格来设置');return;}
for(i=0;i<len;i++){
for(j in can[i])cans[''+j+'_'+i+'']=can[i][j];
}
cans.len = len;
js.ajax(js.getajaxurl('setpaiban','{mode}','{dir}'),cans, function(s){
a.reload();
},'post',false,'标识中,标识成功');
},
changeplx:function(){
var val = get('plx_{rand}').value;
pblx = val;
get('downbtn_{rand}').disabled=(pblx=='0')?true:false;
a.setparams({key:'','pblx':val},true);
}
};
$('#dt1_{rand}').val(js.now('Y-m'));
js.initbtn(c);
$('#plx_{rand}').change(function(){
c.changeplx();
});
});
</script>
<div>
<table width="100%"><tr>
<td nowrap>月份&nbsp;</td>
<td nowrap>
<div style="width:120px" class="input-group">
<input placeholder="月份" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,1" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<select class="form-control" style="width:170px" id="plx_{rand}">
<option value="0">查看人员排班情况</option>
<option value="1">根据组来排班(设置)</option>
<option value="2">根据人员来排班(设置)</option>
</select>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:150px" id="key_{rand}" placeholder="姓名/部门">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td style="padding-left:10px">
</td>
<td style="padding-left:5px">
</td>
<td width="80%"></td>
<td align="right" nowrap>
<button class="btn btn-default" id="downbtn_{rand}" disabled type="button">选中标识为 <i class="icon-angle-down"></i></button>&nbsp;&nbsp;
<button class="btn btn-default" click="xuanzeq" type="button">取消选择</button>&nbsp;&nbsp;
<button class="btn btn-default" click="daochu" type="button">导出</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}" style="cursor:default"></div>
<div class="tishi" id="guistr_{rand}">提示:</div>

View File

@@ -0,0 +1,197 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var atype=params.atype,pnum=params.pnum;
if(!pnum)pnum='';
var col1 = [{
text:'部门',dataIndex:'deptname',align:'left',sortable:true
},{
text:'姓名',dataIndex:'name',sortable:true
},{
text:'职位',dataIndex:'ranking'
},{
text:'人员状态',dataIndex:'state'
}];
var col2 = [{
text:'正常',dataIndex:'state0'
},{
text:'迟到',dataIndex:'state1'
},{
text:'早退',dataIndex:'state2'
}];
var col3 = [{
text:'加班(时)',dataIndex:'jiaban'
},{
text:'外出(次)',dataIndex:'outci'
},{
text:'异常(次)',dataIndex:'errci'
},{
text:'应上班(天)',dataIndex:'sbday'
},{
text:'已上班(天)',dataIndex:'ysbday'
},{
text:'未打卡',dataIndex:'weidk'
}];
function getcolumns(a1,a2,a3,a4){
var a4 = [].concat(a1,a2,a3,a4);
return a4;
}
var colemsn = getcolumns(col1, col2, col3,[]);
var a = $('#view_{rand}').bootstable({
tablename:'userinfo',celleditor:true,fanye:true,params:{'atype':atype,'pnum':pnum},modedir:'{mode}:{dir}',storeafteraction:'kqtotalaftershow',storebeforeaction:'kqtotalbeforeshow',
columns:colemsn,
itemclick:function(){
get('xqkaoqb_{rand}').disabled=false;
},
loadbefore:function(d){
get('xqkaoqb_{rand}').disabled=true;
var cs = [],cs4=[],i;
for(i in d.columns)cs.push({text:i,dataIndex:d.columns[i]});
for(i=0;i<d.colalls.length;i++){
cs4.push(d.colalls[i]);
}
if(cs.length>0){
var cols = getcolumns(col1, cs, col3,cs4);
a.setColumns(cols);
}
}
});
var c = {
search:function(){
var s=get('key_{rand}').value;
var is1 = (get('iskq_{rand}').checked)?'1':'0';
a.setparams({
key:s,month:get('dt1_{rand}').value,
iskq:is1,
'receid':get('receid_{rand}').value
},true);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'month',inputid:'dt'+lx+'_{rand}'});
},
anaynow:function(){
var dt = get('dt1_{rand}').value;
if(dt==''){
js.msg('msg','请选择月份');
return;
}
js.msg('wait','分析中...');
js.ajax(js.getajaxurl('kqanayallinit','{mode}','{dir}'),{dt:dt,atype:atype},function(ret){
if(ret.zong=='ok'){
a.reload();
js.msg('success','分析完成');
return;
}
var oi=0,zong=ret.maxpage,i,cans,dar=[];
for(i=1;i<=zong;i++){
dar.push(js.getajaxurl('kqanayallpage','{mode}','{dir}',{dt:dt,page:i}));
}
queue.addlist(dar,function(){a.reload();},'['+dt+']月份的考勤分析');
},'get,json');
},
xqkaoqb:function(){
var d=a.changedata;
var dt = get('dt1_{rand}').value;
addtabs({num:'adminkaoqin'+d.id+'',url:'main,kaoqin,geren,uid='+d.id+',month='+dt+'',icons:'time',name:''+d.name+''+dt+'的考勤'});
},
daochu:function(o1){
publicdaochuobj({
'objtable':a,
'modename':''+nowtabs.name+'('+get('dt1_{rand}').value+')',
'btnobj':o1,
'notdingyue':true
});
},
//订阅
dingyue:function(){
js.subscribe({
title:''+nowtabs.name+'({month-1})',
explain:'订阅上月考勤统计表',
cont:'{month-1}月份人员'+nowtabs.name+'',
objtable:a,
params:{'month':'{month-1}','key':get('key_{rand}').value,'receid':get('receid_{rand}').value}
});
},
xiashu:function(o1){
if(atype=='my'){
o1.value='我的统计';
atype = 'down';
nowtabssettext('下属考勤统计');
}else{
o1.value='下属统计';
atype = 'my';
nowtabssettext('我的考勤统计');
}
a.setparams({atype:atype}, true);
},
chagneuser:function(){
js.getuser({
type:'deptusercheck',
title:'选择人员',
changevalue:get('receid_{rand}').value,
callback:function(sna,sid){
get('key_{rand}').value=sna;
get('receid_{rand}').value=sid;
}
});
},
chagnecelar:function(){
get('key_{rand}').value='';
get('receid_{rand}').value='';
}
};
$('#dt1_{rand}').val(js.now('Y-m'));
js.initbtn(c);
if(atype=='my'){
$('#down_{rand}').show();
$('#xuanbbtn{rand}').remove();
}
});
</script>
<div>
<table width="100%"><tr>
<td nowrap>
<div style="width:120px" class="input-group">
<input placeholder="月份" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,1" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<div style="width:250px" class="input-group">
<input class="form-control" placeholder="姓名/部门" id="key_{rand}" >
<input class="form-control" type="hidden" id="receid_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="chagnecelar,1" type="button"><i class="icon-remove"></i></button>
<button class="btn btn-default" id="xuanbbtn{rand}" click="chagneuser,1" type="button"><i class="icon-search"></i></button>
</span>
</div>
</td>
<td nowrap style="padding-left:10px">
<label><input id="iskq_{rand}" checked type="checkbox">只看需考勤</label>
</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="dingyue" type="button">订阅此统计表</button>
</td>
<td style="padding-left:10px">
<input class="btn btn-default" click="xiashu" id="down_{rand}" style="display:none" value="下属统计" type="button">
</td>
<td width="80%"></td>
<td align="right" nowrap>
<button class="btn btn-info" click="xqkaoqb" disabled id="xqkaoqb_{rand}" type="button">详情考勤表</button>&nbsp;&nbsp;
<button class="btn btn-default" click="anaynow" type="button">全部重新分析</button>&nbsp;&nbsp;
<button class="btn btn-default" click="daochu" type="button">导出 <i class="icon-angle-down"></i></button></button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">人员是从档案表里读取的,如考勤异常有申请请假外出视为正常,统计已审核完成的。</div>

View File

@@ -0,0 +1,107 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var atype=params.atype;
if(!atype)atype='all';
var col1 = [{
text:'部门',dataIndex:'deptname',align:'left',sortable:true
},{
text:'姓名',dataIndex:'name',sortable:true
},{
text:'职位',dataIndex:'ranking'
},{
text:'人员状态',dataIndex:'state'
}];
var col2 = [{
text:'调休(时)',dataIndex:'tiaoxiu'
}];
function getcolumns(a1,a2,a3){
var a4 = [].concat(a1,a2,a3);
return a4;
}
var colemsn = getcolumns(col1, col2,[]);
var a = $('#view_{rand}').bootstable({
tablename:'userinfo',celleditor:true,fanye:true,params:{'atype':atype},modedir:'{mode}:{dir}',storeafteraction:'kqtotalafterjiashow',storebeforeaction:'kqtotalbeforeshow',
columns:colemsn,
itemclick:function(){
},
loadbefore:function(d){
var cs4=[],i;
for(i=0;i<d.kqkind.length;i++){
cs4.push({text:d.kqkind[i].name.substr(2)+'(时)',dataIndex:'total'+i+''});
}
if(cs4.length>0){
var cols = getcolumns(col1,col2,cs4);
cols.push({text:'',notexcel:true,dataIndex:'xingxid',renderer:function(v,d){
return '<a href="javascript:;" onclick="show{rand}mx('+d.id+',\''+d.name+'\')">明细</a>';
}});
a.setColumns(cols);
}
}
});
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s,month:get('dt1_{rand}').value},true);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'date',inputid:'dt'+lx+'_{rand}'});
},
daochu:function(o1){
publicdaochuobj({
'objtable':a,
'modename':'',
'btnobj':o1
});
},
//订阅
dingyue:function(){
js.subscribe({
title:''+nowtabs.name+'',
objtable:a,
params:{'key':get('key_{rand}').value}
});
}
};
js.initbtn(c);
show{rand}mx=function(id,na){
addtabs({name:'假期统计明细('+na+')',url:'main,kaoqin,totalmx,uid='+id+'',num:'totalmx'+id+''});
}
});
</script>
<div>
<table width="100%"><tr>
<td nowrap>
<div style="width:150px" class="input-group">
<input placeholder="截止至日期" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,1" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:150px" id="key_{rand}" placeholder="姓名/部门">
</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="dingyue" type="button">订阅此统计表</button>
</td>
<td style="padding-left:5px">
</td>
<td width="80%"></td>
<td align="right" nowrap>
<button class="btn btn-default" click="daochu" type="button">导出 <i class="icon-angle-down"></i></button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">人员是从档案表里读取仅显示需要考勤的根据截止日期来统计的是统计表kqinfo上字段status为0,1。</div>

View File

@@ -0,0 +1,75 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var uid=params.uid,lobbo=false;
var a = $('#view_{rand}').bootstable({
tablename:'kqinfo',celleditor:true,fanye:true,params:{'uid':uid,'qjkind':'调休'},modedir:'{mode}:{dir}',storeafteraction:'kqtotalmxafter',storebeforeaction:'kqtotalmxbefore',
columns:[{
text:'部门',dataIndex:'deptname',align:'left',sortable:true
},{
text:'姓名',dataIndex:'uname',sortable:true
},{
text:'类型',dataIndex:'kind'
},{
text:'请假类型',dataIndex:'qjkind'
},{
text:'开始时间',dataIndex:'stime'
},{
text:'截止时间',dataIndex:'etime'
},{
text:'时间(时)',dataIndex:'totals'
},{
text:'剩余(时)',dataIndex:'totals1'
}],
itemclick:function(){
},
load:function(d){
if(!lobbo){
var da = [],i;
for(i=0;i<d.kqkind.length;i++){
da.push({name:d.kqkind[i].name.substr(2)});
}
var o = get('qjkind_{rand}');
o.length=1;
js.setselectdata(o,da);
}
lobbo=true;
}
});
var c = {
search:function(){
a.setparams({qjkind:get('qjkind_{rand}').value},true);
},
daochu:function(){
a.exceldown();
}
};
js.initbtn(c);
$('#qjkind_{rand}').change(function(){
c.search();
});
});
</script>
<div>
<table width="100%"><tr>
<td >
<select id="qjkind_{rand}" style="width:150px" class="form-control">
<option value="调休">调休</option>
<option value="年假">年假</option>
</select>
</td>
<td width="80%"></td>
<td align="right" nowrap>
<button class="btn btn-default" click="daochu" type="button">导出</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">明细来自考勤信息表kqinfo上字段status为0,1灰色的记录说明已失效到了截止日期的。</div>

View File

@@ -0,0 +1,191 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var month,pid=0;
var a = $('#view_{rand}').bootstable({
tablename:'kqxxsj',celleditor:true,keywhere:'[A][K]pid=0',
columns:[{
text:'规则名称',dataIndex:'name',sortable:true
},{
text:'ID',dataIndex:'id'
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
},
itemdblclick:function(d){
pid = d.id;
get('set_{rand}').disabled=false;
get('setadds_{rand}').disabled=false;
get('setjjr_{rand}').disabled=false;
b.setparams({pid:pid},true);
}
});
var b = $('#viewa_{rand}').bootstable({
tablename:'kqxxsj',autoLoad:false,url:publicstore('{mode}','{dir}'),storebeforeaction:'kqxxsjdtbefore',storeafteraction:'kqxxsjdtafter',fanye:true,checked:true,
columns:[{
text:'休息日期',dataIndex:'dt',sortable:true
},{
text:'星期',dataIndex:'week'
}]
});
function btn(bo){
get('del_{rand}').disabled = bo;
get('edit_{rand}').disabled = bo;
}
var c = {
del:function(){
a.del({url:js.getajaxurl('kqsjgzdatadel','{mode}','{dir}',{type:2}),success:function(){
b.reload();
}});
},
dela:function(){
b.del({url:js.getajaxurl('kqsjgzdatadel','{mode}','{dir}',{type:3}),checked:true});
},
clickwin:function(o1,lx){
var h = $.bootsform({
title:'规则',height:180,width:400,
tablename:'kqxxsj',isedit:lx,submitfields:'name',
items:[{
labelText:'名称',name:'name',required:true
}],
success:function(){
a.reload();
}
});
if(lx==1)h.setValues(a.changedata);
},
change:function(o1, lx){
mobj.fanmonth(lx);
},
nowchange:function(){
mobj.nowmonth();
},
byuexiux:function(){
var month = $('#dt1_{rand}').val();
if(!month){
js.msg('msg','请选择月份');
return;
}
js.msg('wait','设置中...');
js.ajax(js.getajaxurl('setxiugdate','{mode}','{dir}'),{'month':month,'pid':pid},function(a){
b.reload();
js.msg('success','设置成功');
});
},
clickwins:function(o1,lx){
var h = $.bootsform({
title:'['+a.changedata.name+']的休息日',height:180,width:400,
tablename:'kqxxsj',isedit:lx,submitfields:'dt,pid',
params:{otherfields:'pid='+pid+''},
items:[{
labelText:'名称',name:'dt',type:'date',view:'date',required:true
}],
success:function(){
b.reload();
}
});
if(lx==1)h.setValues(a.changedata);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'month',inputid:'dt'+lx+'_{rand}'});
},
search:function(){
var month = $('#dt1_{rand}').val();
if(!month){
//js.msg('msg','请选择月份');
//return;
}
b.setparams({'month':month},true);
},
addjieri:function(){
var month = $('#dt1_{rand}').val();
if(!month){
js.msg('msg','请选择年份月份');
return;
}
js.msg('wait','设置添加中...');
js.ajax(js.getajaxurl('setjiedate','{mode}','{dir}'),{'month':month,'pid':pid},function(ret){
if(ret.success){
b.reload();
js.msg('success','设置添加完成');
}else{
js.msg('msg',ret.msg);
}
},'get,json');
}
};
js.initbtn(c);
//$('#dt1_{rand}').val(js.now('Y-m'));
});
</script>
<table width="100%">
<tr valign="top">
<td width="40%">
<div>
<table width="100%"><tr>
<td nowrap>
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增</button>
</td>
<td></td>
<td align="right" nowrap>
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button> &nbsp;
<button class="btn btn-danger" id="del_{rand}" click="del" disabled type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">先双击查看设置休息日的日期,在添加休息日</div>
</td>
<td width="10"><div style="width:20px;overflow:hidden"></div></td>
<td width="60%">
<div>
<table width="100%"><tr>
<td>
<button class="btn btn-primary" id="setadds_{rand}" disabled click="clickwins,0" type="button"><i class="icon-plus"></i> 加休息日</button>
</td>
<td style="padding-left:10px">
<button class="btn btn-info" id="set_{rand}" click="byuexiux" disabled type="button">设置本月周六日为休息日</button>
</td>
<td width="90%">
</td>
<td align="right" nowrap>
<div style="width:160px" class="input-group">
<input placeholder="月份" readonly class="form-control" id="dt1_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,1" type="button"><i class="icon-calendar"></i></button>
<button class="btn btn-default" click="search" type="button"><i class="icon-search"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<button class="btn btn-danger" click="dela" type="button"><i class="icon-trash"></i> 选中删除</button></td>
</tr></table>
</div>
<div class="blank10"></div>
<div><button class="btn btn-default" id="setjjr_{rand}" click="addjieri" disabled type="button">一键添加年度法定节假日和周六日休息日</button></div>
<div class="blank10"></div>
<div id="viewa_{rand}"></div>
<div class="blank10"></div>
<div id="viewab_{rand}"></div>
<div class="blank10"></div>
</td>
</tr>
</table>

View File

@@ -0,0 +1,58 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>地址定位位置查看</title>
<style type="text/css">
*{
margin:0px;
padding:0px;
}
body, button, input, select, textarea {
font: 12px/16px Verdana, Helvetica, Arial, sans-serif;
}
</style>
<script src="js/jquery.js"></script>
<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=<?=$da['qqmapkey']?>"></script>
<script>
//初始化函数
var init = function() {
var precision = <?=$da['rs']['precision']?>;
var center = new qq.maps.LatLng(<?=$da['rs']['location_x']?>,<?=$da['rs']['location_y']?>);
var map = new qq.maps.Map(document.getElementById('container'),{
center: center,
zoom: <?=$da['rs']['scale']?>
});
var infoWin = new qq.maps.InfoWindow({
map: map
});
infoWin.open();
infoWin.setContent('<?=$da['rs']['content']?>');
infoWin.setPosition(map.getCenter());
var marker = new qq.maps.Marker({
map: map,
position:center
});
if(precision>0){
var circle=new qq.maps.Circle({
map:map,
strokeWeight:1,
center:center,
radius:precision
});
}
var type = '<?=$da['rs']['type']?>';
if(type==1){
var str = '<div onclick="history.back()" style="position:absolute;top:25px;left:5px; background:white;padding:8px;cursor:pointer"><img height="24" src="images/back.png" align="absmiddle">返回</div>';
$('body').append(str);
}
}
</script>
</head>
<body onload="init()">
<div style="width:100%;height:100%" id="container"></div>
</body>
</html>

View File

@@ -0,0 +1,80 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>选择位置</title>
<style type="text/css">
*{
margin:0px;
padding:0px;
}
body, button, input, select, textarea {
font: 12px/16px Verdana, Helvetica, Arial, sans-serif;
}
</style>
<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=<?=$da['qqmapkey']?>"></script>
<script>
var callback = '<?=$callback?>'; //回调函数
var init = function() {
var center = new qq.maps.LatLng(<?=$location_x?>,<?=$location_y?>);
map = new qq.maps.Map(document.getElementById('container'),{
center: center,
zoom: <?=$scale?>
});
marker = new qq.maps.Marker({
position: center,
map: map,
draggable:true,
title:'点地图确定位置'
});
//点击地图切换位置
qq.maps.event.addListener(map, 'click', function(evt) {
marker.setPosition(evt.latLng);
});
return;
infoWin = new qq.maps.InfoWindow({
map: map
});
infoWin.open();
infoWin.setContent('位置:');
infoWin.setPosition(map.getCenter());
}
function qudong(){
var as = marker.getPosition();
var x = as.getLat();
var y = as.getLng();
var zoom = map.getZoom();
var a = {x:x,y:y,zoom:zoom};
if(callback!=''){
try{
parent[callback](a);
parent.js.tanclose('winiframe');
}catch(e){}
}
}
var citylocation = false;
function dingwei(){
if(!citylocation)citylocation = new qq.maps.CityService({
complete : function(result){
map.setCenter(result.detail.latLng);
}
});
var quhao = prompt('请输入城市区号如0592');
if(isNaN(quhao)){
if(quhao)citylocation.searchLocalCity();
}else{
if(quhao)citylocation.searchCityByAreaCode(quhao);
}
}
</script>
</head>
<body onload="init()">
<div style="position:absolute;top:0px;left:40%;z-index:99;padding:5px 20px; background-color:white"><button style="background:#1389D3;color:white;border:none;padding:5px 8px;cursor:pointer" onclick="qudong()">确定</button>&nbsp;点地图确定位置,<a href="javascript:;" onclick="dingwei()">[定位]</a></div>
<div style="width:100%;height:100%" id="container"></div>
</body>
</html>

View File

@@ -0,0 +1,224 @@
<?php
class kaoqinjClassAction extends Action
{
public function kqjsndelAjax()
{
$id = (int)$this->post('id');
m('kqjsn')->delete("`id`='$id'");
showreturn();
}
public function kqjcmddelAjax()
{
$id = c('check')->onlynumber($this->post('id'));
m('kqjcmd')->delete("`id` in ($id)");
showreturn();
}
//设备搜索
public function kqjsnbefore($table)
{
$key = $this->post('key');
$where = '';
if(!isempt($key))$where = " and (`num`='$key' or `name` like '%$key%' or `company` like '%$key%')";
return $where;
}
//设备搜索命令
public function kqjcmdbefore($table)
{
$optdt= date('Y-m-d H:i:s', time()-10*60);
m($table)->update('status=5',"`status`=0 and `optdt`<'$optdt'");
$key = $this->post('key');
$snid = (int)$this->post('snid','0');
$where = '';
if(!isempt($key))$where = " and (`num`='$key' or `name` like '%$key%' or `company` like '%$key%')";
if($snid>0){
$where.=" and a.`snid`='$snid'";
}
return array(
'where' => $where,
'table' => '`[Q]kqjcmd` a left join `[Q]kqjsn` b on a.`snid`=b.`id`',
'fields'=> 'a.*,b.`name`,b.`num`,b.`company`'
);
}
public function kqjcmdafter($table,$rows)
{
$cmds = m('kqjcmd');
$time = time();
foreach($rows as $k=>$rs){
$zt = $rs['status'];
if($zt=='0')$zt = '<font color="blue">待发送</font>';
if($zt=='1')$zt = '<font color="green">处理成功</font>';
if($zt=='2')$zt = '<font color="#ff6600">已请求</font>';
if($zt=='3')$zt = '<font color="red">处理失败</font>';
if($zt=='5')$zt = '<font color="#888888">已过期</font>';
$rows[$k]['atype'] = $cmds->cmdtype($rs['atype']);
if($rs['status']=='5'){
$rows[$k]['ishui'] = 1;
}
$rows[$k]['status'] = $zt;
}
$kqsnarr = array();
if($this->loadci==1){
$where1 = m('admin')->getcompanywhere(1);
$kqsnarr = m('kqjsn')->getall('status=1 '.$where1.'','id,name,num','sort');
foreach($kqsnarr as $k=>$rs){
$kqsnarr[$k]['name'] = ''.$rs['id'].'.'.$rs['name'].'('.$rs['num'].')';
}
}
return array(
'rows' => $rows,
'kqsnarr' => $kqsnarr
);
}
//发送设备命令
public function sendcmdAjax()
{
$ids = $this->get('ids');
$type = $this->get('type');
$ida = explode(',', $ids);
$oi = 0;
$msg = '';
foreach($ida as $id1){
$barr = m('kqjcmd')->send($id1, $type);
if($barr['success']){
$oi++;
}else{
if(substr($type,0,6)=='advert')return $barr;
$msg .= ''.$barr['msg'].';';
}
}
if($oi==0 && $msg!='')return returnerror($msg);
return returnsuccess('成功发送'.$oi.'条命令,可到[考勤机命令查看]下查看结果<font color=red>'.$msg.'</font>');
}
//考勤机上人员管理
public function kquserafter($table,$rows)
{
$snid = (int)$this->post('snid','0');
$deptsdata = array();
if($rows && $snid>0 && $snrs = m('kqjcmd')->getsninfo($snid)){
$userids = $snrs['userids'];
$deptids = $snrs['deptids'];
$useridf = ','.$userids.','; //判断是否在考勤机上
$uids = '';
foreach($rows as $k=>$rs){
if(contain($useridf,','.$rs['id'].',')){
$kqjzt = '<font color=green>已上传</font>';
}else{
$kqjzt = '';//'<font color=red>未上传</font>';
}
$fingerprint1 = '';//'<font color=red>未采集</font>';
$fingerprint2 = '';//'<font color=#888888>未采集</font>';
$headpic = '';//'<font color=#888888>无</font>';
$rows[$k]['fingerprint1'] = $fingerprint1;
$rows[$k]['fingerprint2'] = $fingerprint2;
$rows[$k]['headpic'] = $headpic;
$rows[$k]['kqjzt'] = $kqjzt;
$uids .= ','.$rs['id'].'';
}
$uids = substr($uids, 1);
//显示已存在部门
if(!isempt($deptids)){
$detpros = m('dept')->getdeptrows($deptids);
$deptsdata = $this->depttreeshu($detpros,'0');
}
//判断指纹是否存在
$zwarr = $this->db->getarr('[Q]kqjuser','`snid`='.$snid.' and `uid` in('.$uids.')','fingerprint1,fingerprint2,headpic','uid');
if($zwarr)foreach($rows as $k=>$rs){
if(isset($zwarr[$rs['id']])){
$ztrs = $zwarr[$rs['id']];
if(!isempt($ztrs['fingerprint1'])){
$rows[$k]['fingerprint1'] = '<font color=green>已采集</font>';
}
if(!isempt($ztrs['fingerprint2'])){
$rows[$k]['fingerprint2'] = '<font color=green>已采集</font>';
}
if(!isempt($ztrs['headpic']) && file_exists($ztrs['headpic'])){
$rows[$k]['headpic'] = '<img onclick="$.imgview({url:this.src})" src="'.$ztrs['headpic'].'" height="24">';
}
}
}
$barr['nocunid'] = m('kqjcmd')->getnosys($snid);
$barr['nocunid'] = join(',', $barr['nocunid']);
}
$barr['rows'] = $rows;
if($this->loadci==1){
$drows = m('dept')->getdata('sd');
$fid = '0';
if(ISMORECOM)$fid = $drows[0]['pid'];
$barr['deptdata'] = $this->depttreeshu($drows, $fid);
$where1 = m('admin')->getcompanywhere(1);
$kqsnarr = m('kqjsn')->getall('status=1 '.$where1.'','id,name,num','sort');
foreach($kqsnarr as $k=>$rs){
$kqsnarr[$k]['name'] = ''.$rs['id'].'.'.$rs['name'].'('.$rs['num'].')';
}
$barr['kqsnarr'] = $kqsnarr;
}
$barr['deptsdata'] = $deptsdata;
return $barr;
}
public function kquserbefore($table)
{
$key = $this->post('key');
$snid = (int)$this->post('snid','0');
$detpid = (int)$this->post('deptid','0');
$where = '';
if(!isempt($key))$where = m('admin')->getkeywhere($key);
if($detpid>1){
$where.= " and instr(`deptpath`,'[$detpid]')>0";
}
if(ISMORECOM)$where .=' and `companyid` in('.m('admin')->getcompanyid().')';
return array(
'fields'=>'id,name,deptname,ranking,status,face',
'where'=>$where,
'order'=> 'sort'
);
}
//组织结构活动得到树形数据
private function depttreeshu($rows, $pid)
{
$barr = array();
foreach($rows as $k=>$rs){
if($rs['pid']==$pid){
$rs['children'] = $this->depttreeshu($rows, $rs['id']);
$rs['expanded'] = $pid=='0';
$barr[] = $rs;
}
}
return $barr;
}
//人员到设备上信息管理
public function sendusercmdAjax()
{
$uids = $this->get('uids'); //人员ID
$snid = $this->get('snid');
$type = $this->get('type');
$gtype = (int)$this->post('gtype','0'); //0选中,1全部
if($gtype==1)$uids = '0';
$barr = m('kqjcmd')->send($snid, $type, $uids);
if($barr['success'])$barr['data'] = '命令已发送,可到[考勤机命令查看]下查看结果';
return $barr;
}
}

View File

@@ -0,0 +1,76 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var lobdds=false;
var a = $('#view_{rand}').bootstable({
tablename:'kqjcmd',celleditor:true,fanye:true,sort:'optdt',dir:'desc',
url:publicstore('{mode}','{dir}'),storeafteraction:'kqjcmdafter',storebeforeaction:'kqjcmdbefore',checked:true,
columns:[{
text:'设备名称',dataIndex:'name'
},{
text:'设备号',dataIndex:'num'
},{
text:'设备ID',dataIndex:'snid'
},{
text:'显示公司名称',dataIndex:'company'
},{
text:'命令类型',dataIndex:'atype',sortable:true
},{
text:'状态',dataIndex:'status',sortable:true
},{
text:'添加时间',dataIndex:'optdt',sortable:true
},{
text:'请求时间',dataIndex:'qjtime',sortable:true
},{
text:'设备回复时间',dataIndex:'cjtime',sortable:true
},{
text:'相关ID',dataIndex:'others'
},{
text:'ID',dataIndex:'id'
}],
load:function(d){
if(!lobdds){
js.setselectdata(get('snid_{rand}'),d.kqsnarr,'id');
}
lobdds=true;
}
});
var c = {
del:function(){
a.del({checked:true,url:js.getajaxurl('kqjcmddel','{mode}','{dir}')});
},
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s,snid:get('snid_{rand}').value},true);
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td>
<select class="form-control" style="width:300px" id="snid_{rand}" ><option value="0">-所有设备-</option></select>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:150px" id="key_{rand}" placeholder="关键词">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="100%"></td>
<td align="right" nowrap>
<button class="btn btn-danger" click="del" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,235 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var xusnid = params.snid;if(!xusnid)xusnid='0';
var at = $('#optionview_{rand}').bootstree({
url:false,autoLoad:false,
columns:[{
text:'系统上部门',dataIndex:'name',align:'left',xtype:'treecolumn'
}],
itemdblclick:function(d){
a.setparams({'deptid':d.id}, true);
}
});
var ats = $('#optionviews_{rand}').bootstree({
url:false,autoLoad:false,
columns:[{
text:'选中考勤机设备上部门',dataIndex:'name',align:'left',xtype:'treecolumn'
}],
itemdblclick:function(d){
a.setparams({'deptid':d.id}, true);
}
});
var a = $('#admin_{rand}').bootstable({
tablename:'admin',sort:'sort',dir:'asc',fanye:true,url:publicstore('{mode}','{dir}'),
storeafteraction:'kquserafter',checked:true,storebeforeaction:'kquserbefore',autoLoad:false,
columns:[{
text:'头像',dataIndex:'face',renderer:function(v,d){
if(isempt(v))v='images/noface.png';
return '<img onclick="$.imgview({url:this.src})" src="'+v+'" height="24" width="24">';
}
},{
text:'姓名',dataIndex:'name',sortable:true
},{
text:'部门',dataIndex:'deptname',align:'left'
},{
text:'职位',dataIndex:'ranking',sortable:true
},{
text:'ID',dataIndex:'id',sortable:true
},{
text:'人员状态',dataIndex:'status',sortable:true,type:'checkbox'
},{
text:'考勤机状态',dataIndex:'kqjzt'
},{
text:'指纹1',dataIndex:'fingerprint1'
},{
text:'指纹2',dataIndex:'fingerprint2'
},{
text:'设备头像',dataIndex:'headpic'
}],
load:function(d){
if(d.deptdata){
at.loadData(d.deptdata);
}
if(d.kqsnarr){
js.setselectdata(get('snid_{rand}'),d.kqsnarr,'id');
get('snid_{rand}').value = xusnid;
if(xusnid>0)get('downbtn_{rand}').disabled = false;
}
if(d.deptsdata){
ats.loadData(d.deptsdata);
}
var str = '';
if(d.nocunid)str='该考勤机设备上人员<font color=red>['+d.nocunid+']</font>在系统上可能不存在。';
$('#tishi_{rand}').html(str);
}
});
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s,snid:get('snid_{rand}').value},true);
},
init:function(){
a.setparams({snid:xusnid},true);
},
changesnid:function(o1,lx){
var snid = get('snid_{rand}').value;
get('downbtn_{rand}').disabled = (snid=='0');
this.search();
},
sendcmd:function(lx, name){
var snid = get('snid_{rand}').value;
if(snid=='0'){js.msg('msg','没有选中考勤机设备');return;}
var ids = a.getchecked();
var nopd = ',getuser,delsuser,';//不需要判断
if(nopd.indexOf(','+lx+',')<0){
if(ids==''){js.msg('msg','没用复选框选中记录');return;}
var len = ids.split(',').length;
if(len>20){js.msg('msg','一次最多只能选择20个人员');return;}
}
if(lx=='getclockin' || lx=='getpic' || lx=='delclockin' || lx=='delpic'){
this.getdakjil(name, lx, ids, snid);
return;
}
if(name.indexOf('删除')>=0){
js.confirm('确定要发送命令['+name+']吗?命令运行成功就不能恢复了,谨慎操作!', function(jg){
if(jg=='yes')c.sendcmds(ids, snid,lx);
});
}else{
this.sendcmds(ids, snid,lx);
}
},
sendcmds:function(ids,snid,lx){
js.ajax(js.getajaxurl('sendusercmd','{mode}','{dir}'),{uids:ids,snid:snid,'type':lx},function(ret){
if(!ret.success){
js.msg('msg', ret.msg);
}else{
a.reload();
js.msg('success', ret.data);
}
},'get,json',false,'发送中...,已发送');
},
getdakjil:function(name,lxs,uids, snid){
var h = $.bootsform({
title:name,height:400,width:400,
tablename:'getclockin',isedit:2,
url:js.getajaxurl('sendusercmd','{mode}','{dir}',{'uids':uids,'type':lxs,'snid':snid}),
submitfields:'startdt,enddt',
items:[{
labelText:'要获取人员',name:'gtype',type:'select',valuefields:'id',displayfields:'name',store:[{name:'选中人员',id:0},{name:'设备上所有人员',id:1}],required:true,value:'0'
},{
labelText:'日期从',name:'startdt',type:'date'
},{
labelText:'到',name:'endddt',type:'date'
}],
success:function(d){
js.msg('success',d.data);
a.reload();
}
});
h.form.endddt.value = js.now();
h.form.startdt.value = js.now();
h.isValid();
}
};
js.initbtn(c);
$('#optionview_{rand}').css('height',''+(viewheight-25)+'px');
$('#optionviews_{rand}').css('height',''+(viewheight-25)+'px');
$('#snid_{rand}').change(function(){
c.changesnid();
});
$('#downbtn_{rand}').rockmenu({
width:230,top:35,donghua:false,
data:[{
name:'上传人员到设备',lx:'user'
},{
name:'上传人员指纹到设备',lx:'fingerprint'
},{
name:'从设备上获取所有人员',lx:'getuser'
},{
name:'系统不存在人员在设备上删除',lx:'delsuser'
},{
name:'设备上人员删除...',lx:'deluser'
},{
name:'从设备上获取指纹',lx:'getfingerprint'
},{
name:'从设备上获取头像',lx:'getheadpic'
},{
name:'系统头像上传到设备',lx:'headpic'
},{
name:'获取打卡记录...',lx:'getclockin'
},{
name:'获取打卡记录和现场照片...',lx:'getpic'
},{
name:'删除打卡记录...',lx:'delclockin'
},{
name:'删除现场照片...',lx:'delpic'
}],
itemsclick:function(d, i){
c.sendcmd(d.lx, d.name);
}
});
c.init();
});
</script>
<div>
<table width="100%">
<tr valign="top">
<td>
<div style="border:1px #cccccc solid;width:220px">
<div id="optionview_{rand}" style="height:400px;overflow:auto;"></div>
</div>
</td>
<td width="10" nowrap><div style="width:10px">&nbsp;</div></td>
<td width="95%">
<table width="100%"><tr>
<td>
<select class="form-control" style="width:270px" id="snid_{rand}" ><option value="0">-选择要操作的考勤机设备-</option></select>
</td>
<td style="padding-left:10px">
<button class="btn btn-default" disabled id="downbtn_{rand}" type="button">选中设备操作 <i class="icon-angle-down"></i></button>
</td>
<td style="padding-left:10px">
<input class="form-control" style="width:160px" id="key_{rand}" placeholder="姓名/部门/职位">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="80%">
</td>
<td align="right" nowrap>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="admin_{rand}"></div>
<div id="tishi_{rand}" class="tishi"></div>
</td>
<td width="10" nowrap><div style="width:10px">&nbsp;</div></td>
<td>
<div style="border:1px #cccccc solid;width:220px">
<div id="optionviews_{rand}" style="height:400px;overflow:auto;"></div>
</div>
</td>
</tr>
</table>

View File

@@ -0,0 +1,210 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var modenum = 'hrsalary';
function editorbefore(d){
if(d.isturn=='1'){
js.msg('msg','已提交不能在修改,请在操作列下处理');
return false;
}else{
return true;
}
}
var a = $('#view_{rand}').bootstable({
tablename:modenum,params:{'atype':'dept'},fanye:true,modenum:modenum,modedir:'{mode}:{dir}',statuschange:false,celleditor:true,storeafteraction:'bumenafter',checked:true,
columns:[{
text:'部门',dataIndex:'deptallname',sortable:true
},{
text:'人员',dataIndex:'uname',sortable:true
},{
text:'职位',dataIndex:'ranking'
},{
text:'月份',dataIndex:'month',sortable:true
},{
text:'基本工资',dataIndex:'base',sortable:true
},{
text:'实发工资',dataIndex:'money',sortable:true
},{
text:'核算人',dataIndex:'optname'
},{
text:'绩效打分',dataIndex:'jxdf',editor:true,editorbefore:editorbefore,type:'number'
},{
text:'计件工资',dataIndex:'jiansr',editor:true,editorbefore:editorbefore,type:'number'
},{
text:'其他增加',dataIndex:'otherzj',editor:true,editorbefore:editorbefore,type:'number'
},{
text:'其他减少',dataIndex:'otherjs',editor:true,editorbefore:editorbefore,type:'number'
}/*,{
text:'',dataIndex:'opted',renderer:function(v,d,i){
var s = '&nbsp;';
if(d.status=='0')s='<a href="javascript:;" onclick="hesuan{rand}('+i+')">核算</a>';
return s;
}
}*/,{
text:'是否核算',dataIndex:'isturnss'
},{
text:'发放',dataIndex:'ispay',sortable:true
},{
text:'状态',dataIndex:'statustext'
},{
text:'',dataIndex:'caozuo',callback:'callback2{rand}'
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
},
itemdblclick:function(){
c.view();
},
load:function(d){
get('daochu{rand}').disabled= (!d.isdaochu);
}
});
function btn(bo){
get('xiang_{rand}').disabled = bo;
}
hesuan{rand}=function(oi){
c.hesuan(oi);
}
var c = {
reload:function(){
a.reload();
},
view:function(){
var d=a.changedata;
openxiangs('薪资',modenum,d.id);
},
search:function(){
a.setparams({
key:get('key_{rand}').value,
dt:get('dt2_{rand}').value
},true);
},
daochu:function(o1){
publicdaochuobj({
'objtable':a,
'modename':'薪资',
'modenum':modenum,
'btnobj':o1
});
},
clickwin:function(o1,lx){
var id=0;
if(lx==1)id=a.changeid;
openinput('薪资', modenum,id,'callback{rand}');
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'month',inputid:'dt'+lx+'_{rand}'});
},
changlx:function(o1,lx){
$("button[id^='state{rand}']").removeClass('active');
$('#state{rand}_'+lx+'').addClass('active');
a.setparams({isturn:lx});
this.search();
},
hesuan:function(oi){
var d = a.getData(oi);
var h = $.bootsform({
title:'人员['+d.uname+','+d.month+']的核算录入',height:400,width:400,
tablename:modenum,isedit:1,
submitfields:'jxdf,jiansr,otherzj,otherjs',
items:[{
labelText:'绩效打分',name:'jxdf',type:'number'
},{
labelText:'计件工资',name:'jiansr',type:'number'
},{
labelText:'其他增加',name:'otherzj',type:'number'
},{
labelText:'其他减少',name:'otherjs',type:'number'
}],
success:function(){
a.reload();
},
submitcheck:function(da, o1){
o1.close();
c.hesuansj(da);
return '&nbsp;';
}
});
h.setValues(d);
return h;
},
hesuansj:function(oi){
var id = this.arrzong[oi];
this.chulici = oi;
var url = 'index.php?a=lu&m=input&d=flow&num=hrsalary&mid='+id+'&callback=callback{rand}&actlx=hesuan';
js.loading('核算中('+this.arrzong.length+'/'+(oi+1)+')...');
hesuaniframe{rand}.location.href=url;
},
plturn:function(){
var s = a.getchecked();
if(s==''){js.msg('msg','没有选中记录');return;}
this.arrzong = s.split(',');
this.hesuansj(0);
},
wancheng:function(){
var len = this.arrzong.length;
js.msg();
if(this.chulici+1>=len){
js.msgok('核算完成');
a.reload();
return;
}
this.hesuansj(this.chulici+1);
}
};
js.initbtn(c);
callback{rand}=function(){
c.wancheng();
}
callback2{rand}=function(){
a.reload();
}
});
</script>
<div>
<table width="100%">
<tr>
<td style="padding-right:10px">
<button class="btn btn-primary" click="plturn" type="button">批量选中提交</button>
</td>
<td>
<input class="form-control" style="width:180px" id="key_{rand}" placeholder="部门/姓名/职位">
</td>
<td style="padding-left:10px">
<div style="width:140px" class="input-group">
<input placeholder="月份" readonly class="form-control" id="dt2_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,2" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="80%" style="padding-left:10px">
<div id="stewwews{rand}" class="btn-group">
<button class="btn btn-default active" id="state{rand}_" click="changlx," type="button">全部</button>
<button class="btn btn-default" id="state{rand}_0" style="color:red" click="changlx,0" type="button">待核算</button>
<button class="btn btn-default" id="state{rand}_1" style="color:green" click="changlx,1" type="button">已核算</button>
</div>
</td>
<td align="right" nowrap>
<button class="btn btn-default" id="xiang_{rand}" click="view" disabled type="button">详情</button> &nbsp;
<button class="btn btn-default" click="daochu,1" disabled id="daochu{rand}" type="button">导出 <i class="icon-angle-down"></i></button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<iframe style="display:none" name="hesuaniframe{rand}" width="100%" height="400px">

View File

@@ -0,0 +1,140 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var modenum = 'hrsalary';
var a = $('#view_{rand}').bootstable({
tablename:modenum,params:{'atype':'faf'},fanye:true,modenum:modenum,modedir:'{mode}:{dir}',statuschange:false,checked:true,storeafteraction:'xinziafafter',
columns:[{
text:'部门',dataIndex:'deptallname',sortable:true
},{
text:'人员',dataIndex:'uname',sortable:true
},{
text:'职位',dataIndex:'ranking'
},{
text:'月份',dataIndex:'month',sortable:true
},{
text:'开户行',dataIndex:'bankname'
},{
text:'工资卡号',dataIndex:'banknum'
},{
text:'基本工资',dataIndex:'base',sortable:true
},{
text:'实发工资',dataIndex:'money',sortable:true
},{
text:'状态',dataIndex:'ispay',sortable:true
},{
text:'核算人',dataIndex:'optname'
},{
text:'核算时间',dataIndex:'optdt'
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
},
itemdblclick:function(){
c.view();
},
load:function(d){
get('daochu{rand}').disabled= (!d.isdaochu);
}
});
function btn(bo){
get('xiang_{rand}').disabled = bo;
}
var c = {
reload:function(){
a.reload();
},
view:function(){
var d=a.changedata;
openxiangs('薪资',modenum,d.id);
},
search:function(){
a.setparams({
key:get('key_{rand}').value,
dt:get('dt2_{rand}').value
},true);
},
daochu:function(){
a.exceldown(nowtabs.name);
},
clickwin:function(o1,lx){
var id=0;
if(lx==1)id=a.changeid;
openinput('薪资', modenum,id);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'month',inputid:'dt'+lx+'_{rand}'});
},
changlx:function(o1,lx){
$("button[id^='state{rand}']").removeClass('active');
$('#state{rand}_'+lx+'').addClass('active');
a.setparams({ispay:lx});
this.search();
},
biaoshi:function(){
var sid = a.getchecked();
if(sid==''){
js.msg('msg','没有选中行');
return;
}
js.confirm('确定要将未发放标识已发放嘛?',function(slx){
if(slx=='yes')c.biaoshis();
});
},
biaoshis:function(){
var sid = a.getchecked();
js.msg('wait','标识中...');
js.ajax(js.getajaxurl('biaoshiff','{mode}','{dir}'),{sid:sid},function(s){
js.msg('success','标识成功');
a.reload();
},'post');
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td style="padding-right:10px">
<button class="btn btn-primary" click="biaoshi" type="button">选中标为已发放</button>
</td>
<td>
<input class="form-control" style="width:180px" id="key_{rand}" placeholder="部门/姓名/职位">
</td>
<td style="padding-left:10px">
<div style="width:140px" class="input-group">
<input placeholder="月份" readonly class="form-control" id="dt2_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,2" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="80%" style="padding-left:10px">
<div id="stewwews{rand}" class="btn-group">
<button class="btn btn-default active" id="state{rand}_" click="changlx," type="button">全部</button>
<button class="btn btn-default" id="state{rand}_0" style="color:red" click="changlx,0" type="button">待发放</button>
<button class="btn btn-default" id="state{rand}_1" style="color:green" click="changlx,1" type="button">已发放</button>
</div>
</td>
<td align="right" nowrap>
<button class="btn btn-default" id="xiang_{rand}" click="view" disabled type="button">详情</button> &nbsp;
<button class="btn btn-default" click="daochu,1" disabled id="daochu{rand}" type="button">导出</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">标识已发放会将对应薪资信息(工资条)发送给对应人员。</div>

View File

@@ -0,0 +1,152 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var atype=params.atype;
var modenum = 'hrsalary';
var a = $('#view_{rand}').bootstable({
tablename:modenum,params:{'atype':atype},fanye:true,modenum:modenum,modedir:'{mode}:{dir}',statuschange:false,checked:false,storeafteraction:'xinziafter',
columns:[{
text:'部门',dataIndex:'deptallname',sortable:true
},{
text:'人员',dataIndex:'uname',sortable:true
},{
text:'职位',dataIndex:'ranking'
},{
text:'月份',dataIndex:'month',sortable:true
},{
text:'基本工资',dataIndex:'base',sortable:true
},{
text:'核算人',dataIndex:'optname'
},{
text:'核算时间',dataIndex:'optdt',sortable:true
},{
text:'实发工资',dataIndex:'money',sortable:true
},{
text:'是否核算',dataIndex:'isturnss'
},{
text:'发放',dataIndex:'ispay',sortable:true
},{
text:'状态',dataIndex:'statustext'
},{
text:'',dataIndex:'caozuo',callback:'callback{rand}'
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
},
itemdblclick:function(){
c.view();
},
load:function(d){
get('daochu{rand}').disabled= (!d.isdaochu);
}
});
function btn(bo){
}
var c = {
reload:function(){
a.reload();
},
view:function(){
var d=a.changedata;
openxiangs('薪资',modenum,d.id);
},
search:function(){
a.setparams({
key:get('key_{rand}').value,
dt:get('dt2_{rand}').value
},true);
},
daochu:function(o1){
publicdaochuobj({
'objtable':a,
'modename':'薪资',
'modenum':modenum,
'btnobj':o1
});
},
clickwin:function(o1,lx){
var id=0;
if(lx==1)id=a.changeid;
openinput('薪资', modenum,id,'callback{rand}');
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'month',inputid:'dt'+lx+'_{rand}'});
},
create:function(){
var yef = get('dt2_{rand}').value;
if(yef==''){
js.msg('msg','请先选择月份');
return false;
}
js.ajax(js.getajaxurl('createdata','{mode}','{dir}'),{month:yef},function(s){
js.msg('success',s);
if(s.indexOf('成功')>-1)a.reload();
});
},
changlx:function(o1,lx){
$("button[id^='state{rand}']").removeClass('active');
$('#state{rand}_'+lx+'').addClass('active');
a.setparams({isturn:lx});
this.search();
},
daoru:function(){
managelisthrsalary = a;
addtabs({num:'daoru'+modenum+'',url:'flow,input,daoru,modenum='+modenum+'',icons:'plus',name:'导入薪资核算'});
}
};
js.initbtn(c);
callback{rand}=function(){
a.reload();
}
});
</script>
<div>
<table width="100%">
<tr>
<td style="padding-right:10px">
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增核算</button>
</td>
<td>
<input class="form-control" style="width:180px" id="key_{rand}" placeholder="部门/姓名/职位">
</td>
<td style="padding-left:10px">
<div style="width:120px" class="input-group">
<input placeholder="月份" readonly class="form-control" id="dt2_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,2" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td style="padding:0px 10px">
<button class="btn btn-default" click="create" type="button">一键生成人员核算数据</button>
</td>
<td width="80%">
<div id="stewwews{rand}" class="btn-group">
<button class="btn btn-default active" id="state{rand}_" click="changlx," type="button">全部</button>
<button class="btn btn-default" id="state{rand}_0" style="color:red" click="changlx,0" type="button">待核算</button>
<button class="btn btn-default" id="state{rand}_1" style="color:green" click="changlx,1" type="button">已核算</button>
</div>
</td>
<td align="right" nowrap>
<button class="btn btn-default" click="daoru" type="button">导入</button> &nbsp;
<button class="btn btn-default" click="daochu,1" disabled id="daochu{rand}" type="button">导出 <i class="icon-angle-down"></i></button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">提示:薪资核算前,请先核算考勤状态哦,需要核算+已审核才能发放哦!</div>

View File

@@ -0,0 +1,98 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var modenum = 'hrsalary';
var a = $('#view_{rand}').bootstable({
params:{'atype':'my'},fanye:true,modenum:modenum,modedir:'{mode}:{dir}',statuschange:false,
columns:[{
text:'部门',dataIndex:'udeptname',sortable:true
},{
text:'人员',dataIndex:'uname',sortable:true
},{
text:'职位',dataIndex:'ranking'
},{
text:'月份',dataIndex:'month',sortable:true
},{
text:'基本工资',dataIndex:'base',sortable:true
},{
text:'实发工资',dataIndex:'money',sortable:true
},{
text:'状态',dataIndex:'statustext',renderer:function(v,d){
return v+','+d.ispay;
}
},{
text:'核算人',dataIndex:'optname'
},{
text:'核算时间',dataIndex:'optdt'
}],
itemclick:function(){
btn(false);
},
itemdblclick:function(){
c.view();
},
beforeload:function(){
btn(true);
}
});
function btn(bo){
get('xiang_{rand}').disabled = bo;
}
var c = {
reload:function(){
a.reload();
},
view:function(){
var d=a.changedata;
openxiangs('薪资',modenum,d.id);
},
search:function(){
a.setparams({
dt:get('dt2_{rand}').value
},true);
},
daochu:function(){
a.exceldown(nowtabs.name);
},
clickwin:function(o1,lx){
var id=0;
if(lx==1)id=a.changeid;
openinput('薪资', modenum,id);
},
clickdt:function(o1, lx){
$(o1).rockdatepicker({initshow:true,view:'month',inputid:'dt'+lx+'_{rand}'});
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td>
<div style="width:140px" class="input-group">
<input placeholder="月份" readonly class="form-control" id="dt2_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" click="clickdt,2" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td width="80%" style="padding-left:10px">
</td>
<td align="right" nowrap>
<button class="btn btn-default" id="xiang_{rand}" click="view" disabled type="button">详情</button> &nbsp;
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,80 @@
<?php
class salaryClassAction extends Action
{
public function biaoshiffAjax()
{
$sid = $this->post('sid');
if($sid=='')return;
m('flow')->initflow('hrsalary')->gongzifafang($sid);
}
public function createdataAjax()
{
$month = $this->post('month');
if($month=='')return;
$lastdt = c('date')->getenddt($month);
if($lastdt>$this->date)exit(''.$month.'月份超前了');
$barr = m('flow')->initflow('hrsalary')->createdata($month);
echo $barr;
}
//弃用启用
public function xinzlfafter222($table, $rows)
{
$uids = '';
foreach($rows as $k=>$rs){
$uids.=','.$rs['xuid'].'';
}
if($uids!=''){
$uids = substr($uids,1);
$barr = $this->db->getarr('[Q]userinfo','id in('.$uids.')','`bankname`,`banknum`');
foreach($rows as $k=>$rs){
$brs = $this->rock->arrvalue($barr, $rs['xuid']);
if($brs){
$rows[$k]['bankname'] = $brs['bankname'];
$rows[$k]['banknum'] = $brs['banknum'];
}
}
}
return array(
'rows' => $rows
);
}
public function bumenafter($table, $rows)
{
foreach($rows as $k=>$rs){
if($rs['isturn']==0){
$rows[$k]['trbgcolor']='#fbe5d5';
}else{
$rows[$k]['checkdisabled']=true;
}
}
return array(
'rows' => $rows,
'isdaochu' => m('view')->isdaochu($this->flow->modeid, $this->adminid)
);
}
public function xinziafter($table, $rows)
{
return array(
'rows' => $rows,
'isdaochu' => m('view')->isdaochu($this->flow->modeid, $this->adminid)
);
}
public function xinziafafter($table, $rows)
{
foreach($rows as $k=>$rs){
if($rs['ispay']==1){
$rows[$k]['checkdisabled']=true;
$rows[$k]['ishui']=1;
}
}
return array(
'rows' => $rows,
'isdaochu' => m('view')->isdaochu($this->flow->modeid, $this->adminid)
);
}
}

View File

@@ -0,0 +1,71 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var modenum='sealapl';
var a = $('#view_{rand}').bootstable({
tablename:'sealapl',celleditor:true,fanye:true,modenum:modenum,statuschange:false,
columns:[{
text:'部门',dataIndex:'deptname'
},{
text:'姓名',dataIndex:'name'
},{
text:'申请印章',dataIndex:'sealname'
},{
text:'是否外带',dataIndex:'isout'
},{
text:'说明',dataIndex:'explain',align:'left'
},{
text:'申请时间',dataIndex:'optdt'
},{
text:'状态',dataIndex:'statustext'
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
}
});
function btn(bo){
get('xiang_{rand}').disabled = bo;
}
var c = {
search:function(){
var s=get('key_{rand}').value;
a.setparams({key:s},true);
},
daochu:function(){
a.exceldown();
},
view:function(){
var d=a.changedata;
openxiangs('印章申请',modenum,d.id);
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td>
<input class="form-control" style="width:250px" id="key_{rand}" placeholder="姓名/部门/申请印章">
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">搜索</button>
</td>
<td style="padding-left:10px" width="90%">
</td>
<td align="right" nowrap>
<button class="btn btn-default" id="xiang_{rand}" click="view" disabled type="button">详情</button> &nbsp;
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,52 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var a = $('#view_{rand}').bootstable({
tablename:'seal',celleditor:true,fanye:true,dir:'asc',sort:'sort',
columns:[{
text:'电子章图片',dataIndex:'sealimg',renderer:function(v){
var s='&nbsp;';
if(!isempt(v))s='<img src="'+v+'" width="80">';
return s;
}
},{
text:'印章名称',dataIndex:'name',align:'left'
},{
text:'印章类型',dataIndex:'type'
},{
text:'保管人',dataIndex:'bgname'
},{
text:'排序号',dataIndex:'sort',editor:true
},{
text:'说明',dataIndex:'explain'
},{
text:'',dataIndex:'caozuo'
}]
});
var c = {
clickwin:function(){
openinput('印章','seal');
}
};
bootstableobj['seal']=a;
js.initbtn(c);
});
</script>
<div>
<table width="100%"><tr>
<td style="padding-right:10px">
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增</button>
</td>
<td style="padding-left:10px">
</td>
<td width="80%"></td>
<td align="right" nowrap>
</td>
</tr></table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,109 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var a = $('#viewshow_{rand}').bootstable({
tablename:'userinfo',modedir:'userinfo:main',storebeforeaction:'useranaybefore',storeafteraction:'useranayafter',
columns:[{
text:'名称',dataIndex:'name'
},{
text:'数值',dataIndex:'value'
},{
text:'比例',dataIndex:'bili'
}],
load:function(a){
c.loadcharts();
}
});
var myChart=false;
var c={
search:function(){
a.setparams({
'type' : get('type_{rand}').value,
'dt' : get('dt_{rand}').value,
},true);
},
loadcharts:function(){
var rows = a.getData('rows'),i,len=rows.length,v;
var xAxis=[],data=[];
for(i=0;i<len;i++){
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('type_{rand}');
if(!myChart)myChart = echarts.init(get('main_show{rand}'));
var ss = o1.options[o1.selectedIndex].text;
var option = {
title: {
text: '按'+ss+'人员分析',
left: 'center'
},
tooltip : {
trigger: 'item',
formatter: "{b} : {c}人 ({d}%)"
},
series: [{
name: '数值',
type: 'pie',
data: data
}]
};
myChart.setOption(option);
},
daochu:function(){
var o1 = get('type_{rand}');
var ss = o1.options[o1.selectedIndex].text;
a.exceldown(''+ss+'人员分析');
}
}
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td nowrap>按照&nbsp;</td>
<td>
<select class="form-control" id="type_{rand}" style="width:150px;">
<option value="deptname">部门</option>
<option value="sex">性别</option>
<option value="xueli">学历</option>
<option value="nian">年龄</option>
<option value="year">入职年份</option>
<option value="nianxian">入职年限</option>
<option value="state">人员状态</option>
<option value="ranking">职位</option>
</select>
</td>
<td style="padding-left:10px">
<div style="width:140px" class="input-group">
<input placeholder="入职日期" readonly class="form-control" id="dt_{rand}" >
<span class="input-group-btn">
<button class="btn btn-default" onclick="js.selectdate(this,'dt_{rand}')" type="button"><i class="icon-calendar"></i></button>
</span>
</div>
</td>
<td style="padding-left:10px">
<button class="btn btn-default" click="search" type="button">分析</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="blank10"></div>

View File

@@ -0,0 +1,73 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var modenum='userinfo';
var a = $('#view_{rand}').bootstable({
tablename:'userinfo',modenum:modenum,params:{atype:'my'},
columns:[{
text:'部门',dataIndex:'deptname',align:'left',sortable:true
},{
text:'姓名',dataIndex:'name',sortable:true
},{
text:'性别',dataIndex:'sex'
},{
text:'职位',dataIndex:'ranking'
},{
text:'状态',dataIndex:'state',sortable:true
},{
text:'入职日期',dataIndex:'workdate',sortable:true
},{
text:'转正日期',dataIndex:'positivedt',sortable:true
},{
text:'电话',dataIndex:'tel'
},{
text:'手机号',dataIndex:'mobile'
},{
text:'ID',dataIndex:'id'
}],
itemclick:function(){
btn(false);
},
beforeload:function(){
btn(true);
}
});
function btn(bo){
get('xiang_{rand}').disabled = bo;
get('edit_{rand}').disabled = bo;
}
var c = {
view:function(){
var d=a.changedata;
openxiangs('个人资料',modenum,d.id);
},
edit:function(){
openinput('个人资料',modenum,a.changeid+'&optlx=my');
}
};
js.initbtn(c);
});
</script>
<div>
<table width="100%">
<tr>
<td nowrap>
</td>
<td style="padding-left:10px">
</td>
<td width="90%"></td>
<td align="right" nowrap>
<button class="btn btn-default" id="xiang_{rand}" click="view" disabled type="button">详情</button> &nbsp;
<button class="btn btn-default" id="edit_{rand}" click="edit" disabled type="button">编辑</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">个人资料请认真填写!</div>

View File

@@ -0,0 +1,168 @@
<?php
class userinfoClassAction extends Action
{
public function userinfobefore($table)
{
$table = '`[Q]admin` a left join `[Q]userinfo` b on a.id=b.id';
$s = '';
$key = $this->post('key');
if($key!=''){
$s = " and (a.`name` like '%$key%' or a.`user` like '%$key%' or a.`ranking` like '%$key%' or a.`deptname` like '%$key%') ";
}
if(ISMORECOM)$s.= ' and a.`companyid`='.m('admin')->getcompanyid().'';
return array(
'table' => $table,
'where' => $s,
'fields'=> 'a.name,a.deptname,a.id,a.status,a.ranking,b.id as ids,b.dkip,b.dkmac,b.iskq,b.isdwdk,b.isdaily,b.finger'
);
}
public function userinfoafter($table, $rows)
{
$db = m($table);
foreach($rows as $k=>$rs){
if(isempt($rs['ids'])){
$db->insert(array(
'id' => $rs['id'],
'name' => $rs['name'],
'deptname' => $rs['deptname'],
'ranking' => $rs['ranking']
));
}
}
return array('rows'=>$rows);
}
public function fieldsafters($table, $fid, $val, $id)
{
$fields = 'sex,ranking,tel,mobile,workdate,email,quitdt';
if(contain($fields, $fid)){
if($fid=='quitdt'){
$dbs = m($table);
if(isempt($val)){
$dbs->update('`state`=0', "`id`='$id' and `state`=5");
}else{
$dbs->update('`state`=5', "`id`='$id'");
}
}
m('admin')->update(array($fid=>$val), $id);
}
}
public function userinfobeforegeren()
{
return ' and id='.$this->adminid.'';
}
//人员分析
public function useranaybefore()
{
return 'and 1=2';
}
public function useranayafter($table, $rows)
{
$type = $this->post('type','deptname');
$dt = $this->post('dt');
$db = m('userinfo');
$where = 'and state<>5';
if($dt !=''){
$where = "and ((state<>5 and workdate<='$dt') or (state=5 and workdate<='$dt' and quitdt>'$dt'))";
}
$where .= m('admin')->getcompanywhere();
$rows = $db->getall("id>0 $where",'deptname,sex,xueli,state,birthday,workdate,quitdt,ranking');
$nianls = array(
array(0,'16-20岁',16,20),
array(0,'21-25岁',21,25),
array(0,'26-30岁',26,30),
array(0,'31-40岁',31,40),
array(0,'41岁以上',41,9999),
array(0,'其他',-555,15),
);
$yearls = array(
array(0,'1年以下',0,1),
array(0,'1-3年',1,3),
array(0,'3-5年',3,5),
array(0,'5-10年',5,10),
array(0,'10年以上',10,9999)
);
$atatea = explode(',', '试用期,正式,实习生,兼职,临时工,离职');
foreach($rows as $k=>$rs){
$year = '';
if(!$this->isempt($rs['workdate'])) $year = substr($rs['workdate'],0,4);
$rows[$k]['year'] = $year;
$lian = $this->jsnianl($rs['birthday']);
foreach($nianls as $n=>$nsa){
if( $lian >= $nsa[2] && $lian <= $nsa[3]){
$rows[$k]['nian'] = $nsa[1];
break;
}
}
$state = (int)$rs['state'];
$rows[$k]['state'] = $atatea[$state];
//入职连
$nan = $this->worknx($rs['workdate']);
foreach($yearls as $n=>$nsa){
if( $nan >= $nsa[2] && $nan < $nsa[3]){
$rows[$k]['nianxian'] = $nsa[1];
break;
}
}
}
$arr = array();
$total = $this->db->count;
foreach($rows as $k=>$rs){
$val = $rs[$type];
if($this->isempt($val))$val = '其他';
if(!isset($arr[$val]))$arr[$val]=0;
$arr[$val]++;
}
$a = array();
foreach($arr as $k=>$v){
$a[] = array(
'name' => $k,
'value' => $v,
'bili' => ($this->rock->number($v/$total*100)).'%'
);
}
return array(
'rows' => $a,
'totalCound' => count($a)
);
}
private function jsnianl($dt)
{
$nY = date('Y')+1;
$lx = 0;
if(!$this->isempt($dt) && !$this->contain($dt, '0000')){
$ss = explode('-', $dt);
$saa = (int)$ss[0];
$lx = $nY - $saa;
}
return $lx ;
}
//计算工作年限的
private function worknx($dt)
{
$w = 0;
if(!$this->isempt($dt) && !$this->contain($dt, '0000')){
$startt = strtotime($dt);
$date = date('Y-m-d');
$endtime = strtotime($date);
$w = (int)(($endtime - $startt) / (24*3600) / 365);
}
return $w;
}
}

View File

@@ -0,0 +1,113 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var bools=false,mid=0;
var a = $('#view_{rand}').bootstable({
tablename:'flow_extent',celleditor:true,fanye:true,sort:'id',dir:'desc',
url:publicstore('{mode}','{dir}'),storeafteraction:'afterstroesss',
columns:[{
text:'针对对象',dataIndex:'recename'
},{
text:'模块',dataIndex:'modename',sortable:true
},{
text:'类型',dataIndex:'type',sortable:true,renderer:function(oi){
var as=['可查看','可添加','可编辑','可删除','可导入','可导出','禁看字段','流程监控'];
return ''+as[oi]+'';
}
},{
text:'条件',dataIndex:'whereid'
},{
text:'并条件',dataIndex:'wherestr',align:'left',renderer:function(v){
return jm.base64decode(v);
}
},{
text:'说明',dataIndex:'explain',editor:true
},{
text:'状态',dataIndex:'status',type:'checkbox',editor:true,sortable:true
},{
text:'ID',dataIndex:'id'
}],
itemclick:function(d){
mid=d.modeid;
btn(false, d);
},
beforeload:function(){
btn(true);
},
load:function(a){
if(!bools){
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);
}
bools=true;
}
});
function btn(bo, d){
get('edit_{rand}').disabled = bo;
get('del_{rand}').disabled = bo;
}
var c = {
del:function(){
a.del();
},
reload:function(){
a.reload();
},
clickwin:function(o1,lx){
if(mid==0){
js.msg('msg','请先选择模块');
return;
}
var icon='plus',name='新增流程模块权限',id=0;
if(lx==1){
id = a.changeid;
icon='edit';
name='编辑流程模块权限';
};
guanflowviewlist = a;
addtabs({num:'flowview'+id+'',url:'main,view,edit,id='+id+',mid='+mid+'',icons:icon,name:name});
},
changemode:function(){
var v=this.value;
mid=v;
a.search('and modeid='+v+'');
}
};
js.initbtn(c);
$('#mode_{rand}').change(c.changemode);
});
</script>
<div>
<table width="100%">
<tr>
<td align="left">
<button class="btn btn-warning" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增</button>
</td>
<td style="padding-left:10px">
<select style="width:230px" id="mode_{rand}" class="form-control" ><option value="0">-选择模块-</option></select>
</td>
<td width="90%">
</td>
<td nowrap>
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button>&nbsp;
<button class="btn btn-danger" click="del" disabled id="del_{rand}" type="button"><i class="icon-trash"></i> 删除</button>
</td>
</tr>
</table>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>
<div class="tishi">提示:多条将是或者的关系<div>

View File

@@ -0,0 +1,171 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var id = params.id,mid=params.mid,fieldsarr=[];
if(!id)id = 0;
var h = $.bootsform({
window:false,rand:'{rand}',tablename:'flow_extent',
url:publicsave('{mode}','{dir}'),
submitfields:'recename,receid,modeid,type,whereid,wherestr,explain,status,fieldstr',
requiredfields:'recename,type,modeid',beforesaveaction:'flowview_savebefore',
success:function(){
closenowtabs();
try{guanflowviewlist.reload();}catch(e){}
},
load:function(a){
js.setselectdata(h.form.whereid,a.wherelist,'id');
fieldsarr = a.fieldsarr;
c.showfields(a.data.fieldstr);
if(a.data.type=='6')$('#jinfiile{rand}').show();
},
loadafter:function(a){
if(a.data){
h.form.wherestr.value=jm.base64decode(a.data.wherestr);
}
},
submitcheck:function(d){
if(d.type!='1' && d.type!='4' && d.type!='5' && d.wherestr=='' && d.whereid=='0')return '必须设置输入相应条件';
var fieldstr = '';
if(d.type=='6'){
fieldstr=js.getchecked('fieldstr{rand}');
if(fieldstr=='')return '请选择禁看字段';
}
return {wherestr:jm.base64encode(d.wherestr),fieldstr:fieldstr}
}
});
h.forminit();
h.load(js.getajaxurl('loaddata','{mode}','{dir}',{id:id,mid:mid}));
h.setValue('modeid',mid);
$(h.form.type).change(function(){
var val = this.value;
if(val=='6'){
$('#jinfiile{rand}').show();
}else{
$('#jinfiile{rand}').hide();
}
});
var c = {
showfields:function(st1){
var i,len=fieldsarr.length,d1,str='',sel;
st1 = ','+st1+',';
for(i=0;i<len;i++){
d1 = fieldsarr[i];
sel= '';
if(st1.indexOf(','+d1.fields+',')>=0)sel='checked';
str+='<label><input type="checkbox" '+sel+' name="fieldstr{rand}" value="'+d1.fields+'">'+d1.name+'</label>&nbsp;&nbsp;';
}
$('#viewjinkan{rand}').html(str);
},
getdist:function(o1, lx){
var cans = {
nameobj:h.form.recename,
idobj:h.form.receid,
type:'deptusercheck',
title:'选择针对人员'
};
js.getuser(cans);
},
allqt:function(){
h.form.recename.value='全体人员';
h.form.receid.value='all';
h.form.recename.focus();
},
hanrenss:function(o,lx){
if(lx==0)h.form.wherestr.value='{receid}';
if(lx==1)h.form.wherestr.value='{allsuper}';
if(lx==2)h.form.wherestr.value='{super}';
if(lx==4)h.form.wherestr.value='{dept}';
if(lx==3)h.form.wherestr.value='all';
if(lx==5)h.form.wherestr.value='{company}';
if(lx==6)h.form.wherestr.value='{deptall}';
}
,
reloadhweil:function(){
h.form.whereid.length = 1;
h.load(js.getajaxurl('loaddata','{mode}','{dir}',{id:id,mid:mid}));
}
};
js.initbtn(c);
});
</script>
<div align="center">
<div style="padding:10px;width:700px">
<form name="form_{rand}">
<input name="id" value="0" type="hidden" />
<input name="modeid" value="0" type="hidden" />
<table cellspacing="0" border="0" width="100%" align="center" cellpadding="0">
<tr>
<td align="right" ><font color=red>*</font> 针对对象:</td>
<td class="tdinput" colspan="3">
<div class="input-group" style="width:100%">
<input readonly class="form-control" name="recename" >
<input type="hidden" name="receid" >
<span class="input-group-btn">
<button class="btn btn-default" click="allqt" type="button">全体人员</button>
<button class="btn btn-default" click="getdist,1" type="button"><i class="icon-search"></i></button>
</span>
</div>
</td>
</tr>
<tr>
<td align="right" width="15%" ><font color=red>*</font> 类型:</td>
<td class="tdinput" width="35%" ><select name="type" class="form-control"><option value="0">查看(只针对详情页)</option><option value="1">添加</option><option value="2">编辑</option><option value="3">删除</option><option value="4">导入</option><option value="5">导出</option><option value="6">禁看字段(条件满足时针对对象就不能查看相应的字段)</option><option value="7">流程监控(条件满足时针对对象就可监控流程)</option></select></td>
<td align="right" width="15%"></td>
<td class="tdinput" width="35%" ></td>
</tr>
<tr id="jinfiile{rand}" style="display:none">
<td align="right" >选择禁看字段:</td>
<td class="tdinput" colspan="3" id="viewjinkan{rand}"></td>
</tr>
<tr>
<td align="right" >选择条件:</td>
<td class="tdinput"><select class="form-control" name="whereid"><option value="0">无条件</option></select></td>
<td colspan="2"><a click="reloadhweil" href="javascript:;">[刷新]</a></td>
</tr>
<tr>
<td align="right" ></td>
<td colspan="3" style="padding-bottom:10px"><font color=#888888>在【流程模块条件】上添加</font></td>
</tr>
<tr>
<td align="right" >相应条件:</td>
<td class="tdinput" colspan="3"><textarea placeholder="不会设置不要瞎写就写1=1" name="wherestr" style="height:60px" class="form-control"></textarea><br>如:<a click="hanrenss,0" href="javascript:;">[receid中包含我]</a>,<a click="hanrenss,1" href="javascript:;">[所有下属人员]</a>,<a click="hanrenss,2" href="javascript:;">[直属下属人员]</a>,<a click="hanrenss,4" href="javascript:;">[同级本部门]</a>,<a click="hanrenss,6" href="javascript:;">[同级本部门(含子部门)]</a>,<a click="hanrenss,5" href="javascript:;">[所在单位]</a>,<a click="hanrenss,3" href="javascript:;">[所有数据]</a></td>
</tr>
<tr>
<td align="right" >条件说明:</td>
<td class="tdinput" colspan="3"><textarea name="explain" style="height:60px" class="form-control"></textarea></td>
</tr>
<tr>
<td align="right" ></td>
<td class="tdinput" colspan="3">
<label><input name="status" value="1" checked type="checkbox"> 启用?</label>&nbsp; &nbsp;
</td>
</tr>
<tr>
<td align="right"></td>
<td style="padding:15px 0px" colspan="3" align="left"><button disabled class="btn btn-success" id="save_{rand}" type="button"><i class="icon-save"></i>&nbsp;保存</button>&nbsp; <span id="msgview_{rand}"></span>
</td>
</tr>
</table>
</form>
</div>
</div>

View File

@@ -0,0 +1,42 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>签名</title>
<link rel="stylesheet" href="webmain/css/css.css" />
<script type="text/javascript" src="web/res/js/jquery.1.9.1.min.js"></script>
<script type="text/javascript" src="js/js.js"></script>
<script type="text/javascript" src="js/base64-min.js"></script>
<script type="text/javascript" src="mode/plugin/jquery-signature.js"></script>
<script>
var qianmingbo = false;
function initbody(){
ismobile = js.request('ism');
var hei = winHb()-22,
wei = winWb()-22;
$('#qianmingdiv').attr('data-height',hei);
$('#qianmingdiv').attr('data-width',wei);
$('#qianmingdiv').jqSignature().on('jq.signature.changed', function() {
qianmingbo = true;
});
if(ismobile==1)get('qianmingdiv').addEventListener('touchmove',function(e){
e.preventDefault();
},false);
}
//返回签名内容
autographok=function(){
if(!qianmingbo)return '';
return $('#qianmingdiv').jqSignature('getDataURL');
}
//重写
autographre=function(){
$('#qianmingdiv').jqSignature('clearCanvas');
qianmingbo = false;
}
</script>
</head>
<body style="background:white">
<div data-width="280" data-height="120" data-border="1px dashed #cccccc" data-line-color="#000000" data-auto-fit="true" id="qianmingdiv" style="margin:10px;height:120px;cursor:default"></div>
</body>
</html>

View File

@@ -0,0 +1,36 @@
<?php
class viewClassAction extends Action
{
public function loaddataAjax()
{
$id = (int)$this->get('id');
$setid = (int)$this->get('mid');
$arr['data'] = m('flow_extent')->getone($id);
$arr['wherelist'] = m('flow_where')->getall('setid='.$setid.'','id,name','sort');
$arr['fieldsarr'] = m('flow_element')->getrows('mid='.$setid.' and `iszb`=0','name,fields','`sort`');
echo json_encode($arr);
}
public function afterstroesss($table,$rows)
{
foreach($rows as $k=>$rs){
$rows[$k]['modename'] = $this->db->getmou('[Q]flow_set','name',$rs['modeid']);
$rows[$k]['whereid'] = $this->db->getmou('[Q]flow_where','name',$rs['whereid']);
}
return array(
'rows'=>$rows,
'modearr' => m('mode')->getmodearr(),
);
}
public function flowview_savebefore($table, $das)
{
$str = m('where')->checkwhere($das['modeid'], $das['wherestr']);
if($str)return $str;
}
public function autographAction()
{
}
}

Some files were not shown because too many files have changed in this diff Show More