信呼OA版本v2.3.8
This commit is contained in:
928
webmain/main/kaoqin/kaoqinAction.php
Normal file
928
webmain/main/kaoqin/kaoqinAction.php
Normal 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,
|
||||
);
|
||||
}
|
||||
}
|
||||
99
webmain/main/kaoqin/rock_kaoqin_anay.php
Normal file
99
webmain/main/kaoqin/rock_kaoqin_anay.php
Normal 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>日期从 </td>
|
||||
<td nowrap>
|
||||
<input style="width:110px" onclick="js.changedate(this)" readonly class="form-control datesss" id="dt1_{rand}" >
|
||||
</td>
|
||||
<td nowrap> 至 </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>
|
||||
<button class="btn btn-default" click="anaynow" type="button">全部重新分析</button>
|
||||
<button class="btn btn-default" click="daochu" type="button">导出</button>
|
||||
</td>
|
||||
</tr></table>
|
||||
</div>
|
||||
<div class="blank10"></div>
|
||||
<div id="view_{rand}"></div>
|
||||
49
webmain/main/kaoqin/rock_kaoqin_dkcog.php
Normal file
49
webmain/main/kaoqin/rock_kaoqin_dkcog.php
Normal 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>
|
||||
180
webmain/main/kaoqin/rock_kaoqin_dkjl.php
Normal file
180
webmain/main/kaoqin/rock_kaoqin_dkjl.php
Normal 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=' ';
|
||||
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>日期 </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> 至 </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>
|
||||
<button class="btn btn-default" click="adddaka" type="button"><i class="icon-plus"></i> 新增</button>
|
||||
<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>
|
||||
77
webmain/main/kaoqin/rock_kaoqin_geren.php
Normal file
77
webmain/main/kaoqin/rock_kaoqin_geren.php
Normal 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>
|
||||
<button type="button" click="nowchange" class="btn btn-default"><i class="icon-calendar"></i> 当月</button>
|
||||
<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>
|
||||
<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"> 统计:<span id="total_{rand}"></span></div>
|
||||
<div id="veiw_{rand}"></div>
|
||||
135
webmain/main/kaoqin/rock_kaoqin_info.php
Normal file
135
webmain/main/kaoqin/rock_kaoqin_info.php
Normal 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>日期从 </td>
|
||||
<td nowrap>
|
||||
<input style="width:110px" onclick="js.changedate(this)" readonly class="form-control datesss" id="dt1_{rand}" >
|
||||
</td>
|
||||
<td nowrap> 至 </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>
|
||||
<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>
|
||||
53
webmain/main/kaoqin/rock_kaoqin_kqcog.php
Normal file
53
webmain/main/kaoqin/rock_kaoqin_kqcog.php
Normal 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">人员必须设置打卡IP,IP一般是内网Ip196.168的,或者电脑的物理MAC地址,才可以在线打卡,多个用,分开,不限制IP就写*。</div>
|
||||
112
webmain/main/kaoqin/rock_kaoqin_kqdw.php
Normal file
112
webmain/main/kaoqin/rock_kaoqin_kqdw.php
Normal 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+' <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>
|
||||
<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>
|
||||
88
webmain/main/kaoqin/rock_kaoqin_kqerr.php
Normal file
88
webmain/main/kaoqin/rock_kaoqin_kqerr.php
Normal 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>
|
||||
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="blank10"></div>
|
||||
<div id="view_{rand}"></div>
|
||||
115
webmain/main/kaoqin/rock_kaoqin_kqinfo.php
Normal file
115
webmain/main/kaoqin/rock_kaoqin_kqinfo.php
Normal 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>日期从 </td>
|
||||
<td nowrap>
|
||||
<input style="width:110px" onclick="js.changedate(this)" readonly class="form-control datesss" id="dt1_{rand}" >
|
||||
</td>
|
||||
<td nowrap> 至 </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>
|
||||
92
webmain/main/kaoqin/rock_kaoqin_kqout.php
Normal file
92
webmain/main/kaoqin/rock_kaoqin_kqout.php
Normal 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>
|
||||
<button class="btn btn-default" click="daochu,1" type="button">导出</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="blank10"></div>
|
||||
<div id="view_{rand}"></div>
|
||||
108
webmain/main/kaoqin/rock_kaoqin_location.php
Normal file
108
webmain/main/kaoqin/rock_kaoqin_location.php
Normal 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=' ';
|
||||
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=' ';
|
||||
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>日期 </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> 至 </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>
|
||||
112
webmain/main/kaoqin/rock_kaoqin_sjfp.php
Normal file
112
webmain/main/kaoqin/rock_kaoqin_sjfp.php
Normal 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>
|
||||
<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>
|
||||
143
webmain/main/kaoqin/rock_kaoqin_sjgz.php
Normal file
143
webmain/main/kaoqin/rock_kaoqin_sjgz.php
Normal 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=' ';
|
||||
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=' ';
|
||||
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=' ';
|
||||
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>
|
||||
<button class="btn btn-default" click="reload" type="button">刷新</button>
|
||||
<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>
|
||||
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button>
|
||||
<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>
|
||||
182
webmain/main/kaoqin/rock_kaoqin_sjpb.php
Normal file
182
webmain/main/kaoqin/rock_kaoqin_sjpb.php
Normal 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>月份 </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>
|
||||
<button class="btn btn-default" click="xuanzeq" type="button">取消选择</button>
|
||||
<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>
|
||||
197
webmain/main/kaoqin/rock_kaoqin_total.php
Normal file
197
webmain/main/kaoqin/rock_kaoqin_total.php
Normal 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>
|
||||
<button class="btn btn-default" click="anaynow" type="button">全部重新分析</button>
|
||||
<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>
|
||||
107
webmain/main/kaoqin/rock_kaoqin_totaljia.php
Normal file
107
webmain/main/kaoqin/rock_kaoqin_totaljia.php
Normal 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>
|
||||
75
webmain/main/kaoqin/rock_kaoqin_totalmx.php
Normal file
75
webmain/main/kaoqin/rock_kaoqin_totalmx.php
Normal 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>
|
||||
191
webmain/main/kaoqin/rock_kaoqin_xxgz.php
Normal file
191
webmain/main/kaoqin/rock_kaoqin_xxgz.php
Normal 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>
|
||||
<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>
|
||||
|
||||
58
webmain/main/kaoqin/tpl_kaoqin_location.html
Normal file
58
webmain/main/kaoqin/tpl_kaoqin_location.html
Normal 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>
|
||||
80
webmain/main/kaoqin/tpl_kaoqin_locationchange.html
Normal file
80
webmain/main/kaoqin/tpl_kaoqin_locationchange.html
Normal 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> 点地图确定位置,<a href="javascript:;" onclick="dingwei()">[定位]</a></div>
|
||||
<div style="width:100%;height:100%" id="container"></div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user