信呼OA版本v2.3.8

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

View File

@@ -0,0 +1,32 @@
<?php
class menuClassAction extends Action
{
public function dataAjax()
{
$this->rows = array();
$where = $this->rock->covexec($this->post('where'));
$this->getmenu(0, 1, $where);
echo json_encode(array(
'totalCount'=> 0,
'rows' => $this->rows
));
}
private function getmenu($pid, $oi, $wh='')
{
$db = m('menu');
$menu = $db->getall("`pid`='$pid' $wh order by `sort`",'*');
foreach($menu as $k=>$rs){
$sid = $rs['id'];
$rs['level'] = $oi;
$rs['stotal'] = $db->rows("`pid`='$sid' $wh ");
$this->rows[] = $rs;
$this->getmenu($sid, $oi+1, $wh);
}
}
}

View File

@@ -0,0 +1,96 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var a = $('#view_{rand}').bootstable({
tablename:'im_group',where:'and type=2',celleditor:true,
modenum:'yingyong',storeafteraction:'yingyongafter',storebeforeaction:'yingyongbefore',modedir:'{mode}:{dir}',
columns:[{
text:'图标',dataIndex:'face',align:'left',renderer:function(v,d){
var s='';
s='<div>';
s+='<img src="'+v+'" align="absmiddle" width="24" height="24">';
s+='&nbsp; '+d.name+'';
s+='</div>';
return s;
}
},{
text:'分类',dataIndex:'types',editor:true,sortable:true
},{
text:'图标颜色',dataIndex:'iconcolor',editor:true
},{
text:'编号',dataIndex:'num'
},{
text:'排序号',dataIndex:'sort',editor:true,sortable:true
},{
text:'地址',dataIndex:'url'
},{
text:'状态',dataIndex:'valid',type:'checkbox',editor:true,sortable:true
},{
text:'可用人员',dataIndex:'recename',renderer:function(v){
if(!v)v='全体人员';
return v;
}
},{
text:'类型',dataIndex:'yylx',renderer:function(v){
var as=['全部','仅桌面版','仅手机'];
return as[v];
}
},{
text:'操作',dataIndex:'opt',align:'left',renderer:function(v,d){
var s='<a href="javascript:;" onclick="yingyongedit('+d.id+',\''+d.name+'\')">编辑</a>';
if(d.num)s+='&nbsp;<a href="javascript:;" onclick="yingyongmenu('+d.id+',\''+d.name+'\')">菜单</a>';
return s;
}
},{
text:'ID',dataIndex:'id'
}],
itemclick:function(){
btn(false);
}
});
function btn(bo){
get('del_{rand}').disabled = bo;
if(!bo && a.changedata.leave!=1)bo=true;
//get('adds_{rand}').disabled = bo;
}
var c = {
clickwin:function(o1,lx){
var pid=0;
listyingyongobj = a;
addtabs({num:'yingyongedit0',url:'main,yingyong,edit,id=0,pid='+pid+'',name:'新增应用'});
},
del:function(){
a.del({check:function(lx){if(lx=='yes')btn(true)}});
},
reload:function(){
a.reload();
}
}
yingyongedit=function(id,name){
listyingyongobj = a;
addtabs({num:'yingyongedit'+id+'',url:'main,yingyong,edit,id='+id+'',name:'应用['+name+']'});
}
yingyongmenu=function(id,name){
addtabs({num:'yingyongmenu'+id+'',url:'main,yingyong,menu,mid='+id+'',name:'应用['+name+']菜单'});
}
js.initbtn(c);
});
</script>
<div>
<ul class="floats">
<li class="floats50">
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增应用</button> &nbsp;
</li>
<li class="floats50" style="text-align:right">
<button class="btn btn-default" click="reload" type="button">刷新</button> &nbsp;
<button class="btn btn-danger" id="del_{rand}" click="del" disabled type="button"><i class="icon-trash"></i> 删除</button>
</li>
</ul>
</div>
<div class="blank10"></div>
<div id="view_{rand}"></div>

View File

@@ -0,0 +1,77 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
var arr=[];
var c={
loadlist:function(){
js.setmsg('加载中...','','showlistyingyong');
js.ajax(js.getajaxurl('getdata','{mode}','{dir}'),{}, function(a){
js.setmsg('nont');
arr = a;
arr.push({
'name':'添加应用',
'face':'images/jia.png',
'num' :'add',
'id' : 0
});
$('#showlistyingyong').html('');
$('#showlistyingyongtt').html('');
c.showlist();
},'get,json');
},
showlist:function(){
var i=0,len=arr.length,s='',hd,s1='';
for(i=0;i<len;i++){
hd=1;
if(arr[i].valid==0)hd='0.3';
s='';
s+='<li style="opacity:'+hd+'" onclick="yingyongedit('+i+',0)">';
s+='<div><img width="50" height="50" src="'+arr[i].face+'"></div>';
s+='<div>'+arr[i].name+'</div>';
if(arr[i].id>0)s+='<div style="font-size:10px"><a href="javascript:;" onclick="yingyongedit('+i+',1)">编辑</a> &nbsp; <a href="javascript:;" onclick="yingyongmenu('+i+')">菜单</a></div>';
s+='</li>';
if(arr[i].valid==0){
$('#showlistyingyongtt').append(s);
}else{
$('#showlistyingyong').append(s);
}
}
},
reload:function(){
c.loadlist();
}
}
yingyongedit=function(i, lx){
var a=arr[i];
if(lx==0&&a.id>0)return;
listyingyongobj = c;
addtabs({num:'yingyongedit'+a.id+'',url:'main,yingyong,edit,id='+a.id+'',name:'应用['+a.name+']'});
}
yingyongmenu=function(i){
var a=arr[i];
addtabs({num:'yingyongmenu'+a.id+'',url:'main,yingyong,menu,mid='+a.id+'',name:'应用['+a.name+']菜单'});
}
c.loadlist();
});
</script>
<style>
.divlisssa li{float:left;padding:10px;text-align:center;width:100px;overflow:hidden;cursor:pointer}
.divlisssa li:hover{ background-color:#f1f1f1}
.divlisssa ul,.divlisssa{display:inline-block;width:100%}
</style>
<div style="padding:0px 10px">
<h3>已有应用</h3>
<div class="blank1"></div>
<div class="divlisssa" style="padding:10px"><ul id="showlistyingyong"></ul></div>
<h3>已停用</h3>
<div class="blank1"></div>
<div class="divlisssa" style="padding:10px"><ul id="showlistyingyongtt"></ul></div>
</div>

View File

@@ -0,0 +1,175 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params};
var id = params.id,pid=params.pid;
if(!id)id = 0;
if(!pid)pid = '0';
var h = $.bootsform({
window:false,rand:'{rand}',tablename:'im_group',
url:publicsave('{mode}','{dir}'),beforesaveaction:'beforesave',
params:{int_filestype:'sort,yylx',otherfields:'type=2'},
submitfields:'sort,name,recename,types,iconcolor,receid,url,face,valid,num,pid,yylx,urlpc,urlm',
requiredfields:'name,num,types',
success:function(){
closenowtabs();
try{listyingyongobj.reload();}catch(e){}
},
load:function(a, o){
if(a.data){
get('yingyong{rand}').src=a.data.face;
}
},
loadafter:function(){
c.urlchange();
}
});
h.forminit();
h.load(js.getajaxurl('loaddata','{mode}','{dir}',{id:id}));
var c = {
getdist:function(o1, lx){
var cans = {
nameobj:h.form.recename,
idobj:h.form.receid,
type:'deptusercheck',
title:'选择人员'
};
js.getuser(cans);
},
allqt:function(){
h.form.recename.value='全体人员';
h.form.receid.value='all';
},
removes:function(){
h.form.recename.value='';
h.form.receid.value='';
},
changeface:function(){
get('yingyong{rand}').src=this.value;
},
urlchange:function(){
var v = h.form.url.value;
if(v=='link'||v=='linko'){
$('#tdurlpc_{rand}').show();
$('#tdurlm_{rand}').show();
}else{
$('#tdurlpc_{rand}').hide();
$('#tdurlm_{rand}').hide();
}
}
};
js.initbtn(c);
$(h.form.face).change(c.changeface);
$(h.form.url).change(c.urlchange);
});
</script>
<div align="center">
<div style="padding:10px;width:700px">
<form name="form_{rand}">
<input name="id" value="0" type="hidden" />
<input name="setid" value="0" type="hidden" />
<input name="pid" value="0" type="hidden">
<table cellspacing="0" border="0" width="100%" align="center" cellpadding="0">
<tr>
<td class="tdinput" colspan="4">
<div align="center"><img id="yingyong{rand}" src="images/noface.png" height="60" width="60"></div>
</td>
</tr>
<tr>
<td width="15%" align="right"><font color=red>*</font> 编号:</td>
<td width="35%" class="tdinput"><input name="num" placeholder="一般跟模块的编号一致" class="form-control"></td>
<td width="15%" align="right" nowrap><font color=red>*</font> 名称:</td>
<td width="35%"class="tdinput"><input name="name" class="form-control"></td>
</tr>
<tr>
<td align="right" >链接地址:</td>
<td class="tdinput"><select name="url" class="form-control"><option value="auto">自动</option><option value="buin">内部页面</option><option value="link">链接页面</option></select></td>
<td align="right" nowrap><font color=red>*</font> 分类:</td>
<td class="tdinput"><input name="types" class="form-control"></td>
</tr>
<tr style="display:none" id="tdurlpc_{rand}">
<td align="right" nowrap>PC端地址</td>
<td class="tdinput" colspan="3"><input name="urlpc" placeholder="可以写对应[系统→菜单管理]对应菜单编号也可以正规Url地址" class="form-control"></td>
</tr>
<tr style="display:none" id="tdurlm_{rand}">
<td align="right" nowrap>手机端地址:</td>
<td class="tdinput" colspan="3"><input name="urlm" placeholder="格式http://url/?a=1 需要带参数才可以" class="form-control"></td>
</tr>
<tr>
<td align="right" >应用类型:</td>
<td class="tdinput"><select name="yylx" class="form-control"><option value="0">全部</option><option value="1">仅桌面版显示</option><option value="2">仅手机端显示</option></select></td>
<td align="right" >图标地址:</td>
<td class="tdinput"><input name="face" placeholder="相对于系统目录" class="form-control"></td>
</tr>
<tr>
<td align="right" >图标颜色:</td>
<td class="tdinput"><input name="iconcolor" maxlength="20" placeholder="没有可不用填" class="form-control"></td>
<td align="right">排序号:</td>
<td class="tdinput"><input name="sort" value="0" maxlength="3" type="number" onfocus="js.focusval=this.value" onblur="js.number(this)" class="form-control"></td>
</tr>
<tr>
<td align="right" >可用人员:</td>
<td colspan="3" class="tdinput">
<div style="width:100%" class="input-group">
<input readonly class="form-control" placeholder="不选默认全部人员可用" name="recename" >
<input type="hidden" name="receid" >
<span class="input-group-btn">
<button class="btn btn-default" click="removes" type="button"><i class="icon-remove"></i></button>
<button class="btn btn-default" click="getdist,1" type="button"><i class="icon-search"></i></button>
</span>
</div>
</td>
</tr>
<tr>
<td align="right">说明:</td>
<td class="tdinput" colspan="3"><textarea name="explain" style="height:40px;" class="form-control"></textarea></td>
</tr>
<tr>
<td align="right"></td>
<td class="tdinput"><label><input type="checkbox" checked name="valid" value="1">启用</label></td>
</tr>
<tr>
<td align="right"></td>
<td style="padding:15px 0px" colspan="3" align="left"><button disabled class="btn btn-success" id="save_{rand}" type="button"><i class="icon-save"></i>&nbsp;保存</button>&nbsp; <span id="msgview_{rand}"></span>
</td>
</tr>
</table>
</form>
</div>
</div>

View File

@@ -0,0 +1,123 @@
<?php if(!defined('HOST'))die('not access');?>
<script >
$(document).ready(function(){
{params}
var mid = params.mid,wherearr=[];
var a = $('#menu_{rand}').bootstable({
tablename:'im_menu',modenum:'yymenu',
url:js.getajaxurl('menudata','{mode}','{dir}',{mid:mid}),
tree:true,celleditor:true,
columns:[{
text:'名称',dataIndex:'name',align:'left',renderer:function(v,a){
return '<font color="'+a.color+'">'+v+'</font>';
}
},{
text:'编号',dataIndex:'num',editor:true
},{
text:'URL/条件编号',dataIndex:'url',editor:true
},{
text:'类型',dataIndex:'type',renderer:function(v){
var s='条件编号';
if(v==1)s='URL';
return s;
}
},{
text:'排序号',dataIndex:'sort',editor:true
},{
text:'PID',dataIndex:'pid'
},{
text:'颜色',dataIndex:'color',editor:true
},{
text:'可使用人员',dataIndex:'recename'
},{
text:'ID',dataIndex:'id'
}],
itemclick:function(){
btn(false);
},
load:function(d){
wherearr=d.wherearr;
}
});
function btn(bo){
get('del_{rand}').disabled = bo;
get('edit_{rand}').disabled = bo;
get('down_{rand}').disabled = bo;
}
var c = {
del:function(){
a.del({check:function(lx){if(lx=='yes')btn(true)}});
},
reload:function(){
a.reload();
},
clickwin:function(o1,lx){
var h = $.bootsform({
title:'应用菜单',height:300,width:400,
tablename:'im_menu',isedit:lx,
params:{int_filestype:'sort,type,mid,pid'},
submitfields:'num,name,url,sort,type,mid,pid,color,recename,receid',
items:[{
labelText:'编号',name:'num'
},{
labelText:'菜单名称',name:'name',required:true
},{
labelText:'类型',name:'type',type:'select',store:[{id:'0',name:'条件编号'},{id:'1',name:'URL'}],valuefields:'id',displayfields:'name'
},{
labelText:'条件编号',name:'typesele',type:'select',store:wherearr,valuefields:'num',displayfields:'name'
},{
labelText:'URL/条件编号',name:'url'
},{
labelText:'上级ID',name:'pid',required:true,value:'0',type:'number'
},{
labelText:'序号',name:'sort',type:'number',value:'0'
},{
labelText:'颜色',name:'color'
},{
labelText:'mid',name:'mid',type:'hidden',value:'0'
},{
labelText:'可使用人员',name:'recename',type:'changeuser',changeuser:{
type:'deptusercheck',idname:'receid',title:'选择人员'
},clearbool:true,blankText:'默认全部人都可用'
},{
name:'receid',type:'hidden'
}],
success:function(){
a.reload();
}
});
if(lx==1)h.setValues(a.changedata);
h.getField('name').focus();
if(lx==2)h.setValue('pid', a.changedata.id);
h.setValue('mid',mid);
$(h.form.type).change(function(){
h.form.typesele.disabled=(this.value!='0');
});
$(h.form.typesele).change(function(){
h.form.url.value = this.value;
});
}
};
js.initbtn(c);
});
</script>
<div>
<ul class="floats">
<li class="floats50">
<button class="btn btn-primary" click="clickwin,0" type="button"><i class="icon-plus"></i> 新增顶级</button> &nbsp;
<button class="btn btn-success" click="clickwin,2" id="down_{rand}" disabled type="button"><i class="icon-plus"></i> 新增下级</button> &nbsp;
<button class="btn btn-default" click="reload" type="button">刷新</button>
</li>
<li class="floats50" style="text-align:right">
<button class="btn btn-danger" id="del_{rand}" click="del" disabled type="button"><i class="icon-trash"></i> 删除</button> &nbsp;
<button class="btn btn-info" id="edit_{rand}" click="clickwin,1" disabled type="button"><i class="icon-edit"></i> 编辑 </button>
</li>
</ul>
</div>
<div class="blank10"></div>
<div id="menu_{rand}"></div>
<div style="padding:5px;color:#888888">顶级菜单最多只能3个多建将不会显示条件编号是在[流程模块条件]下设置的编号,用于读取数据条件过滤的。</div>

View File

@@ -0,0 +1,97 @@
<?php
class yingyongClassAction extends Action
{
public function yingyongdataAjax()
{
$rows = m('im_group')->getall('`type`=2','*','`sort`');
$arrs = array();
/*
foreach($rows as $k=>$rs){
$sub = m('im_group')->getall('`type`=2 and pid='.$rs['id'].'','*','`sort`');
$rs['leave'] = 1;
$arrs[] = $rs;
foreach($sub as $k1=>$rs1){
$rs1['leave'] = 2;
$arrs[] = $rs1;
}
}*/
echo json_encode(array('rows'=>$rows));
}
public function getdataAjax()
{
$rows = m('im_group')->getall('`type`=2','id,name,face,num,valid','`sort`');
echo json_encode($rows);
}
public function loaddataAjax()
{
$id = (int)$this->get('id');
$arr['data'] = m('im_group')->getone($id);
echo json_encode($arr);
}
public function beforesave($table, $cans, $id)
{
$msg = '';
$num = $cans['num'];
if(m($table)->rows("`num`='$num' and `id`<>$id")>0)$msg='编号['.$num.']已存在';
return array('msg'=>$msg);
}
public function menudataAjax()
{
$this->rows = array();
$mid = (int)$this->get('mid');
$agentnum = m('im_group')->getmou('num',$mid);
$where = "and `mid`='$mid'";
$this->getmenu(0, 1, $where);
$modeid = (int)m('flow_set')->getmou('id',"`num`='$agentnum'");
$wherearr = m('flow_where')->getrows("setid='$modeid' and `num` is not null and `status`=1",'`name`,`num`','`pnum`,`sort`');
$barr[] = array('num'=>'','name'=>'-选择-');
foreach($wherearr as $k=>$rs){
$wherearr[$k]['name'] = ''.$rs['num'].'.'.$rs['name'].'';
$barr[] = $wherearr[$k];
}
echo json_encode(array(
'totalCount'=> 0,
'rows' => $this->rows,
'agentnum' => $agentnum,
'modeid' => $modeid,
'wherearr' => $barr,
));
}
private function getmenu($pid, $oi, $wh='')
{
$db = m('im_menu');
$menu = $db->getall("`pid`='$pid' $wh order by `sort`",'*');
foreach($menu as $k=>$rs){
$sid = $rs['id'];
$rs['level'] = $oi;
$rs['stotal'] = $db->rows("`pid`='$sid' $wh ");
$this->rows[] = $rs;
$this->getmenu($sid, $oi+1, $wh);
}
}
public function yingyongbefore($table)
{
return array(
'order' => '`valid` desc,`sort` asc'
);
}
public function yingyongafter($table, $rows)
{
foreach($rows as $k=>$rs){
if($rs['valid']=='0')$rows[$k]['status']=0;
}
return array(
'rows' => $rows
);
}
}