发布v2.5.9版本
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
<?php
|
||||
//版本2.5.8的版本
|
||||
return '2.5.8';
|
||||
//版本2.5.9额
|
||||
return '2.5.9';
|
||||
@@ -10,16 +10,13 @@ class JPushChajian extends Chajian{
|
||||
//-------------最新原生app推送app是1.2.3版本 和 最新app+---------------
|
||||
public function push($title, $desc, $cont, $palias)
|
||||
{
|
||||
|
||||
$alias = $palias['alias'];
|
||||
$xmalias = $palias['xmalias']; //小米的
|
||||
$newalias = $palias['newalias']; //最新使用的
|
||||
$oldalias = $palias['oldalias']; //一般自己编译
|
||||
|
||||
$uids = $palias['uids'];
|
||||
$alias2019 = $palias['alias2019'];
|
||||
$pushuids = $palias['pushuids']; //可以推送的用户ID
|
||||
$xmpush = c('xmpush');
|
||||
$hwpush = c('hwpush');
|
||||
$getui = c('getui');
|
||||
|
||||
//可推送判断
|
||||
$ketualia = array();
|
||||
@@ -40,59 +37,129 @@ class JPushChajian extends Chajian{
|
||||
'desc' => $desc,
|
||||
'systype'=> getconfig('systype')
|
||||
);
|
||||
$isuguanw = false;
|
||||
|
||||
|
||||
//没有设置推送(走的信呼官网渠道)
|
||||
if(!$xmpush->sendbool() && !$hwpush->sendbool()){
|
||||
if($xmalias || $newalias || $oldalias || $alias2019){
|
||||
if($xmalias)$xharr['xmalias'] = join(',', $xmalias);
|
||||
if($newalias)$xharr['newalias'] = join(',', $newalias);
|
||||
if($oldalias)$xharr['oldalias'] = join(',', $oldalias);
|
||||
if($alias2019)$xharr['alias2019'] = join(',', $alias2019);
|
||||
$isuguanw = true;
|
||||
}
|
||||
}else{
|
||||
$desc = $this->rock->jm->base64decode($desc);
|
||||
$xmarr = array();//小米的人员
|
||||
$othar = array();//其他人用
|
||||
$iosar = array(); //IOS
|
||||
$hwarr = array(); //华为
|
||||
$iospas= array();
|
||||
if($alias2019)foreach($alias2019 as $ali1){
|
||||
$ali1aa = explode('|', $ali1);
|
||||
$regid = $ali1aa[0];
|
||||
$sjlxx = $ali1aa[1];
|
||||
if(contain($sjlxx,'xiaomi')){
|
||||
$xmarr[] = $regid;
|
||||
}else if(contain($sjlxx,'huawei')){
|
||||
if(isset($ali1aa[3]) && $ali1aa[3])$hwarr[] = $ali1aa[3];
|
||||
}else if(contain($sjlxx,'iphone')){
|
||||
$iosar[] = $regid;
|
||||
$iospas[]= $ali1;
|
||||
if(!$alias2019)return;
|
||||
|
||||
$getuiand = $getuiios = $mybyarr = $xmarr = $hwarr = $iosar = $puarr = array();
|
||||
foreach($alias2019 as $k=>$ali1){
|
||||
$ali1aa = explode('|', $ali1);
|
||||
$regid = $ali1aa[0];
|
||||
$_web = $ali1aa[1];
|
||||
if(contain($_web,'custpile')){
|
||||
$mybyarr[] = $k; //3
|
||||
}else if(contain($_web,'getui')){
|
||||
if(contain($_web,'iphone')){
|
||||
$getuiios[] = $k; //3
|
||||
}else{
|
||||
$othar[] = $regid;
|
||||
$getuiand[] = $k; //3
|
||||
}
|
||||
}else if(contain($_web,'mi')){
|
||||
$xmarr[] = $k; //0
|
||||
}else if(contain($_web,'huawei')){
|
||||
$hwarr[] = $k; //3
|
||||
}else if(contain($_web,'iphone')){
|
||||
$iosar[] = $k; //0
|
||||
}else{
|
||||
$puarr[] = $ali1;
|
||||
}
|
||||
$msg = $msg1 = $msg2 = '';
|
||||
if($oldalias)$msg = $xmpush->androidsend($oldalias, $title, $desc, $cont);
|
||||
if($xmarr)$msg = $xmpush->androidsend($xmarr, $title, $desc);
|
||||
if($iosar){
|
||||
if(!$xmpush->jpushiosbool()){
|
||||
$xharr['alias2019'] = join(',', $iospas);
|
||||
$isuguanw = true;
|
||||
}else{
|
||||
$msg1= $xmpush->jpushiossend($iosar, $title, $desc);
|
||||
}
|
||||
}
|
||||
if($hwarr)$msg2= $hwpush->androidsend($hwarr, $title, $desc);
|
||||
$msg5 = $msg.$msg1.$msg2;
|
||||
if($msg5)$this->rock->debugs($msg5,'mypush');
|
||||
}
|
||||
|
||||
if($isuguanw){
|
||||
$mymsg = '';
|
||||
$desc = $this->rock->jm->base64decode($desc);
|
||||
if($xmarr){
|
||||
if($xmpush->sendbool()){
|
||||
$vstr = $this->getVal($alias2019, $xmarr, 0);
|
||||
$msg = $xmpush->androidsend($vstr, $title, $desc);
|
||||
if($msg)$mymsg.=chr(10).$msg;
|
||||
}else{
|
||||
$vsta = $this->getVala($alias2019, $xmarr);
|
||||
foreach($vsta as $v)$puarr[] = $v;
|
||||
}
|
||||
}
|
||||
|
||||
if($hwarr){
|
||||
if($hwpush->sendbool()){
|
||||
$vstr = $this->getVal($alias2019, $hwarr, 3);
|
||||
$msg = $hwpush->androidsend($vstr, $title, $desc);
|
||||
if($msg)$mymsg.=chr(10).$msg;
|
||||
}else{
|
||||
$vsta = $this->getVala($alias2019, $hwarr);
|
||||
foreach($vsta as $v)$puarr[] = $v;
|
||||
}
|
||||
}
|
||||
|
||||
if($iosar){
|
||||
if($xmpush->jpushiosbool()){
|
||||
$vstr = $this->getVal($alias2019, $iosar, 0);
|
||||
$msg = $xmpush->jpushiossend($vstr, $title, $desc);
|
||||
if($msg)$mymsg.=chr(10).$msg;
|
||||
}else{
|
||||
$vsta = $this->getVala($alias2019, $iosar);
|
||||
foreach($vsta as $v)$puarr[] = $v;
|
||||
}
|
||||
}
|
||||
|
||||
if($getuiand){
|
||||
if($getui->isandroid()){
|
||||
$vstr = $this->getVal($alias2019, $getuiand, 3);
|
||||
$msg = $getui->push($vstr, $title, $desc);
|
||||
if($msg)$mymsg.=chr(10).$msg;
|
||||
}else{
|
||||
$vsta = $this->getVala($alias2019, $getuiand);
|
||||
foreach($vsta as $v)$puarr[] = $v;
|
||||
}
|
||||
}
|
||||
|
||||
if($getuiios){
|
||||
if($getui->isios()){
|
||||
$vstr = $this->getVal($alias2019, $getuiios, 3);
|
||||
$msg = $getui->push($vstr, $title, $desc);
|
||||
if($msg)$mymsg.=chr(10).$msg;
|
||||
}else{
|
||||
$vsta = $this->getVala($alias2019, $getuiios);
|
||||
foreach($vsta as $v)$puarr[] = $v;
|
||||
}
|
||||
}
|
||||
|
||||
if($mybyarr){
|
||||
if($getui->sendbool()){
|
||||
$vstr = $this->getVal($alias2019, $mybyarr, 3);
|
||||
$msg = $getui->push($vstr, $title, $desc);
|
||||
if($msg)$mymsg.=chr(10).$msg;
|
||||
}else{
|
||||
$msg = '自己编译未配置推送';
|
||||
$mymsg.=chr(10).$msg;
|
||||
}
|
||||
}
|
||||
|
||||
if($mymsg)$this->rock->debugs($mymsg, 'mypush');
|
||||
|
||||
|
||||
//需要官网隧道
|
||||
if($puarr){
|
||||
$xharr['alias2019'] = join(',', $puarr);
|
||||
$runurl = c('xinhu')->geturlstr('jpushplat', $xharr);
|
||||
c('curl')->getcurl($runurl);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private function getVal($alias2019, $new, $oi)
|
||||
{
|
||||
$stv = array();
|
||||
foreach($new as $j){
|
||||
$stra = explode('|', $alias2019[$j]);
|
||||
if(isset($stra[$oi]))$stv[]= $stra[$oi];
|
||||
}
|
||||
return $stv;
|
||||
}
|
||||
|
||||
private function getVala($alias2019, $new)
|
||||
{
|
||||
$stv = array();
|
||||
foreach($new as $j){
|
||||
$stv[] = $alias2019[$j];
|
||||
}
|
||||
return $stv;
|
||||
}
|
||||
}
|
||||
@@ -75,6 +75,8 @@ class curlChajian extends Chajian{
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($ch, CURLOPT_HEADER, 0);
|
||||
if($this->rock->HTTPweb)curl_setopt($ch, CURLOPT_USERAGENT, $this->rock->HTTPweb);
|
||||
if($this->rock->ip)$headarr['X-FORWARDED-FOR'] = $this->rock->ip;
|
||||
if($ishttps==1){
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||
}
|
||||
@@ -105,12 +107,14 @@ class curlChajian extends Chajian{
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //要求结果为字符串且输出到屏幕上
|
||||
curl_setopt($ch, CURLOPT_HEADER, 0); //不返回header
|
||||
if($this->rock->HTTPweb)curl_setopt($ch, CURLOPT_USERAGENT, $this->rock->HTTPweb);
|
||||
curl_setopt($ch, CURLOPT_POST, 1);
|
||||
@curl_setopt($ch, CURLOPT_POSTFIELDS, $cont);
|
||||
if($ishttps==1){
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
||||
}
|
||||
if($this->rock->ip)$headarr['X-FORWARDED-FOR'] = $this->rock->ip;
|
||||
//设置head
|
||||
if($headarr){
|
||||
$heads = array();
|
||||
|
||||
141
include/chajian/getuiChajian.php
Normal file
141
include/chajian/getuiChajian.php
Normal file
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
/**
|
||||
* 个推2023-07-06
|
||||
*/
|
||||
class getuiChajian extends Chajian{
|
||||
|
||||
private $appid = '';
|
||||
private $appkey = '';
|
||||
private $mastersecret = '';
|
||||
private $apptype = '0'; //0所有平台,1仅安卓,2仅苹果
|
||||
|
||||
|
||||
private $pushurl = 'https://restapi.getui.com/v2/{appid}';
|
||||
|
||||
protected function initChajian()
|
||||
{
|
||||
$this->appid = getconfig('getui_appid');
|
||||
$this->appkey = getconfig('getui_appkey');
|
||||
$this->mastersecret = getconfig('getui_mastersecret');
|
||||
$this->apptype = getconfig('getui_apptype','0');
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取token
|
||||
*/
|
||||
public function gettoken(){
|
||||
$url = str_replace('{appid}',$this->appid, $this->pushurl).'/auth';
|
||||
$token = c('cache')->get('getui'.$this->appid.'');
|
||||
if(isempt($token)){
|
||||
$timestamp = ''.time().'000';
|
||||
$sign = hash("sha256", $this->appkey.$timestamp.$this->mastersecret);
|
||||
$result = c('curl')->postcurl($url, json_encode(array(
|
||||
"sign" => $sign,
|
||||
"timestamp" => $timestamp,
|
||||
"appkey" => $this->appkey,
|
||||
)),0, array(
|
||||
'content-type' => 'application/json;charset=utf-8'
|
||||
));
|
||||
if($result){
|
||||
$barr = json_decode($result, true);
|
||||
if($barr['code']==0){
|
||||
$token = $barr['data']['token'];
|
||||
$expire_time = $barr['data']['expire_time'];
|
||||
c('cache')->set('getui'.$this->appid.'',$token, $expire_time * 0.001 - time());
|
||||
}else{
|
||||
echo $result;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $token;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否可以发送
|
||||
*/
|
||||
public function sendbool()
|
||||
{
|
||||
if(!$this->appid || !$this->appkey || !$this->mastersecret)return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否安卓的
|
||||
*/
|
||||
public function isandroid()
|
||||
{
|
||||
if(!$this->sendbool())return false;
|
||||
if($this->apptype=='2')return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否安卓的
|
||||
*/
|
||||
public function isios()
|
||||
{
|
||||
if(!$this->sendbool())return false;
|
||||
if($this->apptype=='1')return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 推送
|
||||
*/
|
||||
public function push($cid, $title, $cont)
|
||||
{
|
||||
if(!$this->sendbool())return 'params empty';
|
||||
$url = str_replace('{appid}',$this->appid, $this->pushurl).'/push/single/batch/cid';
|
||||
$token = $this->gettoken();
|
||||
if(is_string($cid))$cid = explode(',', $cid);
|
||||
|
||||
$msg_list = array();
|
||||
|
||||
foreach($cid as $_cid){
|
||||
$parr = array();
|
||||
$parr['request_id'] = 'a'.time().rand(1000,9999).'';
|
||||
//$parr['settings'] = array('ttl' => '-1');
|
||||
$parr['audience']['cid'] = array($_cid);
|
||||
$parr['push_message']['notification'] = array(
|
||||
'title' => $title,
|
||||
'body' => $cont,
|
||||
'click_type' => 'startapp',
|
||||
);
|
||||
//离线厂商推送的
|
||||
$parr['push_channel']['ios'] = array(
|
||||
'type' => 'notify',
|
||||
'payload' => 'notify',
|
||||
'aps' => array(
|
||||
'alert' => array(
|
||||
'title' => $title,
|
||||
'body' => $cont,
|
||||
),
|
||||
'sound'=>'default',
|
||||
),
|
||||
'auto_badge' => '1'
|
||||
);
|
||||
|
||||
$parr['push_channel']['android'] = array(
|
||||
'ups' => array(
|
||||
'notification' => array(
|
||||
'title' => $title,
|
||||
'body' => $cont,
|
||||
'click_type' => 'startapp',
|
||||
'notify_id' => rand(100,99999),
|
||||
)
|
||||
)
|
||||
);
|
||||
$msg_list[] = $parr;
|
||||
}
|
||||
$toboay = array(
|
||||
'is_async' => false,
|
||||
'msg_list' => $msg_list
|
||||
);
|
||||
$result = c('curl')->postcurl($url, json_encode($toboay),0, array(
|
||||
'content-type' => 'application/json;charset=utf-8',
|
||||
'token' => $token,
|
||||
));
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -37,6 +37,12 @@ class xmpushChajian extends Chajian{
|
||||
if($this->android_secret=='')return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public function setsecret($secret, $package)
|
||||
{
|
||||
$this->android_secret = $secret;
|
||||
$this->android_package = $package;
|
||||
}
|
||||
|
||||
/**
|
||||
* 安卓推送通知
|
||||
|
||||
@@ -72,7 +72,7 @@ js.dw = {
|
||||
this.wait('原生app定位中...');
|
||||
return;
|
||||
}
|
||||
if(api.startLocation){
|
||||
if(window['api'] && api.startLocation){
|
||||
js.msg();
|
||||
if(api.systemType=='ios'){
|
||||
this.wait(''+api.systemType+'APP定位中...');
|
||||
@@ -103,7 +103,9 @@ js.dw = {
|
||||
dtes.latitude = ret.location.latitude;
|
||||
}
|
||||
js.dw.baiduLocationSuc(dtes,err);
|
||||
js.dw.bmLocation.stopLocation();
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
||||
9
js/js.js
9
js/js.js
@@ -1178,8 +1178,13 @@ js.appwin=function(na,dz){
|
||||
if(dz.substr(0,4)!='http')dz=NOWURL+dz;
|
||||
var jg = (dz.indexOf('?')==-1)?'?':'&';
|
||||
if(!na)na=' ';
|
||||
var bstr=jm.base64encode('{"name":"'+na+'","url":"openurl","dizhi":"'+dz+''+jg+'hideheader=true"}');
|
||||
var url = ''+ourl+'?bstr='+bstr+'';
|
||||
var dizhi = ''+dz+''+jg+'hideheader=true';
|
||||
if(apicloud && api.openWindcloud){
|
||||
api.openWindcloud({name:na,url:dz})
|
||||
return true;
|
||||
}
|
||||
var bstr =jm.base64encode('{"name":"'+na+'","url":"openurl","dizhi":"'+dizhi+'"}');
|
||||
var url = ''+ourl+'?bstr='+bstr+'';
|
||||
return this.apiopenWin(url);
|
||||
}
|
||||
js.sendevent=function(typ,na,d){
|
||||
|
||||
66
js/jswx.js
66
js/jswx.js
@@ -179,11 +179,13 @@ js.showmenu=function(d){
|
||||
if(!a)return;
|
||||
var h1=$(window).height(),h2=document.body.scrollHeight,s1;
|
||||
if(h2>h1)h1=h2;
|
||||
var col='';
|
||||
var s='<div onclick="$(this).remove();" align="center" id="menulistshow" style="background:rgba(0,0,0,0.6);height:'+h1+'px;width:100%;position:absolute;left:0px;top:0px;z-index:198" >';
|
||||
s+='<div id="menulistshow_s" style="width:'+d.width+'px;margin-top:'+d.top+';position:fixed;-webkit-overflow-scrolling:touch" class="menulist r-border-r r-border-l">';
|
||||
var col='',oix;
|
||||
var s='<div align="center" id="menulistshow" style="background:rgba(0,0,0,0.6);height:'+h1+'px;width:100%;position:absolute;left:0px;top:0px;z-index:198;" >';
|
||||
s+='<div id="menulistshow_s" style="width:'+d.width+'px;margin-top:'+d.top+';position:fixed;-webkit-overflow-scrolling:touch;" class="menulist">';
|
||||
for(var i=0;i<a.length;i++){
|
||||
s+='<div oi="'+i+'" style="text-align:'+d.align+';color:'+a[i].color+'" class="r-border-t">';
|
||||
oix = '0';
|
||||
if(i>0)oix='0.5';
|
||||
s+='<div oi="'+i+'" style="text-align:'+d.align+';color:'+a[i].color+';border-top:'+oix+'px solid #dddddd">';
|
||||
s1=d.renderer(a[i]);
|
||||
if(s1){s+=s1}else{s+=''+a[i].name+'';}
|
||||
s+='</div>';
|
||||
@@ -307,4 +309,60 @@ js.jssdkwxgzh = function(qxlist,afe){
|
||||
js.jssdkstate = 2;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
//长按处理
|
||||
function touchclass(cans){
|
||||
var me = this;
|
||||
this.onlongclick = function(){}
|
||||
this.onclick = function(){}
|
||||
this.onlongmenu = function(){}
|
||||
this.initbool = false;
|
||||
this.islongbool = false;
|
||||
|
||||
for(var i in cans)this[i]=cans[i];
|
||||
this.touchstart=function(o1,evt){
|
||||
touchnowobj = this;
|
||||
this.islongbool = false;
|
||||
if(!this.initbool){
|
||||
o1.addEventListener('click', function(){
|
||||
me._onclick(this, event);
|
||||
}, false);
|
||||
}
|
||||
this.obj = o1;
|
||||
this.initbool = true;
|
||||
clearTimeout(this.touchtime);
|
||||
this.touchtime = setTimeout('touchnowobj=false',1000);
|
||||
return true;
|
||||
}
|
||||
this._onclick=function(o1, evt){
|
||||
if(!this.islongbool)this.onclick(o1, evt);
|
||||
}
|
||||
this.touchstring=function(){
|
||||
var rnd = 'a'+js.getrand();
|
||||
touchnowoba[rnd] = this;
|
||||
var str = ' ontouchstart="return touchnowoba.'+rnd+'.touchstart(this,event)"';
|
||||
return str;
|
||||
}
|
||||
this.reglongmenu=function(){
|
||||
touchnowobj = false;
|
||||
touchnowoba = {};
|
||||
document.addEventListener('touchstart', function(){
|
||||
clearTimeout(me.longtapv);
|
||||
me.longtapv = setTimeout(function(){me.longmenu();},300);
|
||||
}, false);
|
||||
document.addEventListener('touchmove', function(){
|
||||
clearTimeout(me.longtapv);
|
||||
}, false);
|
||||
document.addEventListener('touchend', function(){
|
||||
clearTimeout(me.longtapv);
|
||||
}, false);
|
||||
}
|
||||
this.longmenu = function(){
|
||||
setTimeout('touchnowobj=false',200);
|
||||
if(!touchnowobj)return;
|
||||
touchnowobj.islongbool = true;
|
||||
touchnowobj.onlongclick();
|
||||
this.onlongmenu();
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,8 @@ var reim={
|
||||
nwjs.serverdata=function(d){
|
||||
return reim.serverdata(d);
|
||||
}
|
||||
//var sw = js.getoption('setchatlistw');
|
||||
//if(sw)$('#centlist').css('width',''+sw+'px');
|
||||
|
||||
$(window).resize(this.resize);
|
||||
$(window).focus(function(){windowfocus=true;im.windowfocus()});
|
||||
@@ -625,7 +627,8 @@ var reim={
|
||||
if(isempt(did) || (lx && lx=='user'))return s;
|
||||
if(did=='1')s=' <span class="reimlabel">全员</span>';
|
||||
if(did=='-1')s=' <span class="reimlabel2">外部</span>';
|
||||
if(did=='-2')s=' <span class="reimlabel3">咨询</span>';
|
||||
//if(did=='-2')s=' <span class="reimlabel3">咨询</span>';
|
||||
if(did=='-2')s=' <span style="font-size:10px;color:#aaaaaa"><i class="icon-headphones"></i></span>';
|
||||
if(did>1)s=' <span class="reimlabel1">部门</span>';
|
||||
return s;
|
||||
},
|
||||
@@ -643,17 +646,22 @@ var reim={
|
||||
var cls = lex ? ' active' : '';
|
||||
var na = d.name;
|
||||
if(d.title)na = d.title;
|
||||
var tit = ''+na+'';
|
||||
if(d.type=='group'){
|
||||
var d2 = grouparr[d.receid];
|
||||
if(d2)d.deptid = d2.deptid;
|
||||
}
|
||||
if(!nas)nas='';
|
||||
if(!qz)qz='chat';
|
||||
if(d.subname){
|
||||
nas+='<span style="color:'+maincolor+';font-size:10px">@'+d.subname+'</span>';
|
||||
tit+='@'+d.subname+'';
|
||||
}
|
||||
var s1 = this.grouptype(d.deptid,d.type);
|
||||
s = '<div class="lists'+cls+'" rtype="hist" oncontextmenu="reim.historyright(this,event,\''+num+'\')" tsaid="'+d.receid+'" tsaype="'+d.type+'" temp="hist" id="history_'+num+'" onclick="reim.openchat(\''+ty+'\',\''+d.receid+'\',\''+d.name+'\',\''+d.face+'\')">';
|
||||
s+='<table cellpadding="0" border="0" width="100%"><tr>';
|
||||
s+='<td style="padding-right:8px"><div style="height:30px;overflow:hidden"><img src="'+d.face+'"></div></td>';
|
||||
s+='<td align="left" width="100%"><div title="'+na+'" id="lname_'+num+'" class="name">'+na+''+nas+''+s1+'</div><div class="huicont">'+jm.base64decode(d.cont)+'</div></td>';
|
||||
s+='<td align="left" width="100%"><div title="'+tit+'" id="lname_'+num+'" class="name">'+na+''+nas+''+s1+'</div><div class="huicont">'+jm.base64decode(d.cont)+'</div></td>';
|
||||
s+='<td align="right" nowrap><span id="'+qz+'_stotal_'+num+'" class="badge red">'+st+'</span><br><span style="color:#aaaaaa;font-size:10px">'+ops+'</span></td>';
|
||||
s+='</tr></table>';
|
||||
s+='</div>';
|
||||
@@ -912,7 +920,7 @@ var reim={
|
||||
msg = nr;
|
||||
}
|
||||
if(lx == 'zixun'){
|
||||
title = '咨询消息';
|
||||
title = d.title;
|
||||
msg = nr;
|
||||
}
|
||||
var cans = {
|
||||
@@ -1204,6 +1212,10 @@ var reim={
|
||||
notifyobj.sound = src;
|
||||
notifyobj.playsound();
|
||||
},
|
||||
setchatlistw:function(kg){
|
||||
$('#centlist').css('width',''+kg+'px');
|
||||
js.setoption('setchatlistw', ''+kg+'');
|
||||
},
|
||||
cogshow:function(){
|
||||
var chs= (this.getsound())?'checked':'';
|
||||
var ch1= (this.getzhuom())?'checked':'';
|
||||
@@ -1220,6 +1232,8 @@ var reim={
|
||||
ch1='checked';chs='';
|
||||
}
|
||||
s+=' <div style="padding:10px 0px;border-top:1px #eeeeee solid">发送快捷键:<label><input onclick="reim.setsendkkj(0)" '+chs+' type="radio" name="sendkuijie">Enter</label> <label><input onclick="reim.setsendkkj(1)" '+ch1+' type="radio" name="sendkuijie">Ctrl+Enter</label></div>';
|
||||
|
||||
//s+=' <div style="padding:10px 0px;border-top:1px #eeeeee solid">列表列宽:<label><input onclick="reim.setchatlistw(220)" checked type="radio" name="chatlistw">正常</label> <label><input onclick="reim.setchatlistw(230)" type="radio" name="chatlistw">宽点</label> <label><input onclick="reim.setchatlistw(250)" type="radio" name="chatlistw">大宽</label></div>';
|
||||
|
||||
if(nwjsgui){
|
||||
var ips = nwjs.getipmac();
|
||||
@@ -1280,7 +1294,7 @@ function chatcreate(cans){
|
||||
this.soulx = '';
|
||||
this.soukey = '';
|
||||
this.objstr = 'reim.chatobj[\''+this.num+'\']';
|
||||
var nstr = js.getoption('receinfo_'+this.num+'');
|
||||
var nstr = js.getoption('receinfo_'+this.num+'');
|
||||
if(nstr)this.setreceinfor(js.decode(nstr));
|
||||
this.sendbtn.click(function(){
|
||||
me.sendcont();
|
||||
@@ -1331,6 +1345,7 @@ function chatcreate(cans){
|
||||
s+='<td height="50" width="100%">';
|
||||
s+=' <div temp="usname_'+this.num+'"><b style="font-size:16px;">'+this.name+'</b>';
|
||||
if((this.type=='group' || this.type=='gout') && this.usershu)s+='('+this.usershu+')';
|
||||
if(od.subname)s+='<span style="color:'+maincolor+';font-size:10px">@'+od.subname+'</span>';
|
||||
s+=reim.grouptype(od.deptid,this.type);
|
||||
if(od.ranking)s+=' <span style="font-size:12px;color:#aaaaaa">('+od.ranking+')</span>';
|
||||
if(this.type=='user')s+=reim.getonlinestr(this.gid);
|
||||
@@ -1346,6 +1361,7 @@ function chatcreate(cans){
|
||||
}
|
||||
if(this.type=='zixun'){
|
||||
s+='<td title="转给其他客服" id="sharebtn_'+this.num+'" class="chattitbtn" nowrap><div style="width:30px"><i class="icon-share-alt"></i></div></td>';
|
||||
s+='<td title="加更多客服" id="addkfbtn_'+this.num+'" class="chattitbtn" nowrap><div style="width:30px"><i class="icon-plus"></i></div></td>';
|
||||
s+='<td title="咨询人员信息" id="zixunbtn_'+this.num+'" class="chattitbtn" nowrap><div style="width:30px"><i class="icon-user"></i></div></td>';
|
||||
}
|
||||
s+='</tr></table>';
|
||||
@@ -1363,7 +1379,10 @@ function chatcreate(cans){
|
||||
reim.kefu.showuser(me.gid);
|
||||
});
|
||||
$('#sharebtn_'+this.num+'').click(function(){
|
||||
reim.kefu.shareuser(me.gid);
|
||||
reim.kefu.shareuser(me.gid,0);
|
||||
});
|
||||
$('#addkfbtn_'+this.num+'').click(function(){
|
||||
reim.kefu.shareuser(me.gid,1);
|
||||
});
|
||||
};
|
||||
this.getapiurl=function(m1,a1){
|
||||
@@ -1496,6 +1515,7 @@ function chatcreate(cans){
|
||||
s+='</div>';
|
||||
if(!isbf)this.addcont(s);
|
||||
}
|
||||
if(ret.showmsg)this.addmsg(ret.showmsg);
|
||||
if(seseid>0)this.showobj.scrollTop(seseid);
|
||||
};
|
||||
this.isscrollbottom=function(){
|
||||
@@ -1739,6 +1759,7 @@ function chatcreate(cans){
|
||||
reim.showhistorys({
|
||||
'cont' : s1+d.cont,
|
||||
'name' : this.receinfo.name,
|
||||
'subname' : this.receinfo.subname,
|
||||
'face' : this.receinfo.face,
|
||||
'optdt' : d.optdt,
|
||||
'type' : this.type,
|
||||
|
||||
22
web/res/js/jquery-changeuser.js
vendored
22
web/res/js/jquery-changeuser.js
vendored
@@ -456,6 +456,7 @@
|
||||
var me = this;
|
||||
this.rand = rand;
|
||||
this.ismobile = false;
|
||||
this.page = 1;
|
||||
this.selvalue = '';
|
||||
|
||||
this._init = function(){
|
||||
@@ -544,21 +545,32 @@
|
||||
};
|
||||
this.showdata=function(a,inb){
|
||||
if(!a)a=[];
|
||||
var ret= a;
|
||||
this.showselectdata(a.selectdata);
|
||||
var len = 0;
|
||||
if(a.totalCount)len=a.totalCount;
|
||||
if(a.rows)a = a.rows;
|
||||
if(len==0)len=a.length;
|
||||
var s='',s1='';
|
||||
var s='',s1='',npid='nextpage_'+this.rand+'';
|
||||
if(len==0){
|
||||
s='<div align="center" style="margin-top:30px;color:#cccccc;font-size:16px">无记录</div>';
|
||||
}else{
|
||||
s = this.showhtml(a);
|
||||
s1='共'+len+'条';
|
||||
if(ret.page && ret.limit){
|
||||
var max = Math.ceil(len/ret.limit);
|
||||
s1+=' ';
|
||||
if(ret.page>1)s1+='<a id="'+npid+'1" class="zhu" href="javascript:;">上页</a>';
|
||||
s1+='('+ret.page+'/'+max+')';
|
||||
if(max>ret.page)s1+='<a id="'+npid+'" class="zhu" href="javascript:;">下页</a>';
|
||||
this.searchajax = true;
|
||||
}
|
||||
}
|
||||
this._getobj('count').html(s1);
|
||||
var o = $('#selectlist_'+rand+'');
|
||||
o.html(s);
|
||||
$('#'+npid+'').click(function(){me.nextpage(1);});
|
||||
$('#'+npid+'1').click(function(){me.nextpage(-1);});
|
||||
if(!inb && len==0)this.loaddata();
|
||||
};
|
||||
this.seldatsse=[];
|
||||
@@ -612,12 +624,19 @@
|
||||
if(s)$('#selectlist_'+rand+'').append(s);
|
||||
};
|
||||
this.reload=function(){
|
||||
this.page = 1;
|
||||
this.loaddata(this.selvalue);
|
||||
};
|
||||
this.nextpage=function(p){
|
||||
this.page = this.page+p;
|
||||
this.loaddata(this.selvalue);
|
||||
};
|
||||
this.loaddata=function(svel){
|
||||
var url = this.url;
|
||||
if(svel)url+='&selvalue='+svel+'';
|
||||
if(url=='')return;
|
||||
url+='&page='+this.page+'';
|
||||
url+='&limit='+this.maxshow+'';
|
||||
$('#selectlist_'+rand+'').html('<div align="center" style="margin-top:30px"><img src="images/mloading.gif"></div>');
|
||||
$.ajax({
|
||||
type:'get',dataType:'json',url:url,
|
||||
@@ -644,6 +663,7 @@
|
||||
this._searchkey = function(bo){
|
||||
var key = $('#changekey_'+this.rand+'').val(),a=[],d=[],d1,len,i,oi=0,s;
|
||||
if(this.searchajax){
|
||||
this.page = 1;
|
||||
this.loaddata(''+this.selvalue+'&key='+jm.base64encode(key)+'');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -163,6 +163,8 @@ a:link,a:visited{TEXT-DECORATION:none;color:var(--main-color)}
|
||||
|
||||
|
||||
|
||||
.menulist{background-color:white}
|
||||
.menulist{background-color:white;user-select:none;border-radius:10px}
|
||||
.menulist div{padding:12px 0px;font-size:16px;text-align:center}
|
||||
.menulist div:first-child{border-radius:10px 10px 0px 0px}
|
||||
.menulist div:last-child{border-radius:0px 0px 10px 10px}
|
||||
.menulist div:active{ background-color:#f1f1f1}
|
||||
@@ -204,7 +204,7 @@ var c={
|
||||
return false;
|
||||
}
|
||||
if(isempt(val)){
|
||||
if(form(fid))form(fid).focus();
|
||||
if(form(fid) && flx!='hidden')form(fid).focus();
|
||||
this.showtx(''+nas+'不能为空');
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -46,12 +46,23 @@ class mode_demoClassAction extends inputAction{
|
||||
//弹出下拉选择单选
|
||||
public function tanxuan()
|
||||
{
|
||||
for($i=1;$i<=1520;$i++)
|
||||
$limit = (int)$this->get('limit', '10');
|
||||
$page = (int)$this->get('page', '1');
|
||||
$totalCount = 1520;
|
||||
$start = ($page-1)*$limit;
|
||||
for($i=$start;$i<$start + $limit && $i<=$totalCount;$i++){
|
||||
$rows[] = array(
|
||||
'name' => '第'.$i.'个数据',
|
||||
'value'=> ''.$i.''
|
||||
);
|
||||
return $rows;
|
||||
}
|
||||
|
||||
return array(
|
||||
'rows' => $rows,
|
||||
'totalCount'=> $totalCount,
|
||||
'limit' => $limit,
|
||||
'page' => $page,
|
||||
);
|
||||
}
|
||||
|
||||
//弹出下拉选择多选
|
||||
|
||||
@@ -31,6 +31,7 @@ if(atype=='all'){
|
||||
});
|
||||
}
|
||||
c.bianjila=function(){
|
||||
if(ISDEMO){js.msg('msg','演示不要操作');return;}
|
||||
var h = $.bootsform({
|
||||
title:'人员状态编辑',height:400,width:400,
|
||||
tablename:bootparams.tablename,isedit:1,
|
||||
|
||||
@@ -9,19 +9,46 @@ class crmClassModel extends Model
|
||||
//读取我的客户和共享给我的
|
||||
public function getmycust($uid=0, $id=0)
|
||||
{
|
||||
$limit = (int)$this->rock->get('limit', '10');
|
||||
$page = (int)$this->rock->get('page', '1');
|
||||
$key = $this->rock->get('key');
|
||||
$where = '';
|
||||
if($key){
|
||||
$key= $this->rock->jm->base64decode($key);
|
||||
$where.= " and (`name` like '%$key%' or `unitname` like '%$key%')";
|
||||
}
|
||||
if(isempt($id))$id = 0;
|
||||
if($uid==0)$uid=$this->adminid;
|
||||
$s = $this->rock->dbinstr('shateid', $uid);
|
||||
$rows = $this->getrows("`status`=1 and ((`uid`='$uid') or (`id`=$id) or (".$s."))",'id as value,name,id,unitname as subname','`optdt` desc');
|
||||
return $rows;
|
||||
$rows = $this->getrows("`status`=1 and ((`uid`='$uid') or (`id`=$id) or (".$s.")) $where",'SQL_CALC_FOUND_ROWS id as value,name,id,unitname as subname','`optdt` desc',''.(($page-1)*$limit).','.$limit.'');
|
||||
$totalCount = $this->db->found_rows();
|
||||
return array(
|
||||
'rows' => $rows,
|
||||
'totalCount' => $totalCount,
|
||||
'limit' => $limit,
|
||||
'page' => $page,
|
||||
);
|
||||
}
|
||||
|
||||
//读取所有客户
|
||||
public function custdata()
|
||||
{
|
||||
$limit = (int)$this->rock->get('limit', '10');
|
||||
$page = (int)$this->rock->get('page', '1');
|
||||
$key = $this->rock->get('key');
|
||||
$where = m('admin')->getcompanywhere(3);
|
||||
$rows = $this->getrows("`status`=1 ".$where."",'id as value,name,id,unitname as subname','`optdt` desc');
|
||||
return $rows;
|
||||
if($key){
|
||||
$key= $this->rock->jm->base64decode($key);
|
||||
$where.= " and (`name` like '%$key%' or `unitname` like '%$key%')";
|
||||
}
|
||||
$rows = $this->getrows("`status`=1 ".$where."",'SQL_CALC_FOUND_ROWS id as value,name,id,unitname as subname','`optdt` desc',''.(($page-1)*$limit).','.$limit.'');
|
||||
$totalCount = $this->db->found_rows();
|
||||
return array(
|
||||
'rows' => $rows,
|
||||
'totalCount' => $totalCount,
|
||||
'limit' => $limit,
|
||||
'page' => $page,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ class fileClassModel extends Model
|
||||
if($this->isimg($ext))return true;
|
||||
if($this->isoffice($ext))return true;
|
||||
if($this->isyulan($ext))return true;
|
||||
return contain(',mp3,ogg,mp4,', ','.$ext.',');
|
||||
return contain(',mp3,ogg,mp4,amr,', ','.$ext.',');
|
||||
}
|
||||
|
||||
//获取缩略图的路径
|
||||
|
||||
@@ -95,6 +95,10 @@ class goodsClassModel extends Model
|
||||
public function getgoodsdata($lx=0)
|
||||
{
|
||||
$typeid = $this->rock->get('selvalue');
|
||||
$limit = (int)$this->rock->get('limit', '10');
|
||||
$page = (int)$this->rock->get('page', '1');
|
||||
$key = $this->rock->get('key');
|
||||
|
||||
$where = '1=1';
|
||||
if(!isempt($typeid)){
|
||||
$alltpeid = m('option')->getalldownid($typeid);
|
||||
@@ -113,9 +117,17 @@ class goodsClassModel extends Model
|
||||
}
|
||||
$where.= ' and a.`id` in('.$aids.')';
|
||||
}
|
||||
|
||||
$where .= m('admin')->getcompanywhere(1,'a.');
|
||||
$rowss = $this->db->getall('select a.`id`,a.`name`,a.`xinghao`,a.`guige`,a.`stock`,a.`price`,a.`unit`,b.`name` as `typename` from `[Q]goods` a left join `[Q]option` b on a.`typeid`=b.`id` where '.$where.'');
|
||||
$rows = array();
|
||||
if($key){
|
||||
$key= $this->rock->jm->base64decode($key);
|
||||
$where.= " and (a.`name` like '%$key%' or a.`num` like '%$key%' or a.`xinghao` like '%$key%' or a.`guige` like '%$key%')";
|
||||
}
|
||||
|
||||
$rowss = $this->db->getall('select SQL_CALC_FOUND_ROWS a.`id`,a.`name`,a.`xinghao`,a.`num`,a.`guige`,a.`stock`,a.`price`,a.`unit`,b.`name` as `typename` from `[Q]goods` a left join `[Q]option` b on a.`typeid`=b.`id` where '.$where.' limit '.(($page-1)*$limit).','.$limit.'');
|
||||
$totalCount = $this->db->found_rows();
|
||||
|
||||
$rows = array();
|
||||
foreach($rowss as $k=>$rs){
|
||||
$name = $rs['name'];
|
||||
if(!isempt($rs['xinghao']))$name.='('.$rs['xinghao'].')';
|
||||
@@ -126,10 +138,11 @@ class goodsClassModel extends Model
|
||||
$baar = array(
|
||||
'name' => $name,
|
||||
'value' => $rs['id'],
|
||||
'num' => $rs['num'],
|
||||
'price' => $rs['price'],
|
||||
'unit' => $rs['unit'],
|
||||
'stock' => $stock,
|
||||
'subname' => $rs['typename'],
|
||||
'subname' => $rs['num'].' '.$rs['typename'],
|
||||
);
|
||||
if(($lx==1 || $lx==3) && $stock<='0'){
|
||||
$baar['disabled']= true;//领用没有库存了
|
||||
@@ -141,7 +154,10 @@ class goodsClassModel extends Model
|
||||
$selectdata = $this->getgoodstype(1);
|
||||
return array(
|
||||
'rows' => $rows,
|
||||
'selectdata'=>$selectdata
|
||||
'selectdata'=>$selectdata,
|
||||
'totalCount'=>$totalCount,
|
||||
'page' => $page,
|
||||
'limit' => $limit,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ class loginClassModel extends Model
|
||||
$yanzm = $this->rock->request('yanzm');//验证码
|
||||
$ltype = (int)$this->rock->request('ltype',0);//登录类型,1是手机+验证码
|
||||
if(!isempt($yanzm) && strlen($yanzm)!=6)return '验证码必须是6位数字';
|
||||
$cfroar= explode(',', 'pc,reim,weixin,appandroid,mweb,webapp,nppandroid,nppios');
|
||||
$cfroar= explode(',', 'pc,reim,weixin,appandroid,mweb,webapp,nppandroid,nppios,nppiosnew');
|
||||
if(!in_array($cfrom, $cfroar))return 'not found cfrom['.$cfrom.']';
|
||||
if($user=='')return '用户名不能为空';
|
||||
if($pass==''&&strlen($token)<8 && $ltype==0)return '密码不能为空';
|
||||
|
||||
@@ -1061,34 +1061,29 @@ class reimClassModel extends Model
|
||||
}
|
||||
}
|
||||
$uwhere = "$where `status`=1";
|
||||
$rows = m('logintoken')->getrows("`uid` in(select id from `[Q]admin` where $uwhere) and `cfrom` in ('appandroid','nppandroid','nppios') and `online`=1",'*','id desc');
|
||||
$alias = $uida = $xmalias = $oldalias = $pushuids = $newalias = $alias2019 = $uid2019 =array();
|
||||
$rows = m('logintoken')->getrows("`uid` in(select id from `[Q]admin` where $uwhere) and `cfrom` in ('nppandroid','nppios') and `online`=1",'*','id desc');
|
||||
$uida = $pushuids = $alias2019 = $uid2019 = array();
|
||||
$uids = '0';
|
||||
$times = date('Y-m-d H:i:s', time()-5*60);//5分钟
|
||||
foreach($rows as $k=>$rs){
|
||||
$_uid = $rs['uid'];
|
||||
$_web = $rs['web'];
|
||||
//if(in_array($_uid, $uida))continue;
|
||||
$uida[] = $_uid;
|
||||
$uids .= ','.$_uid.'';
|
||||
if($_web=='xiaomi'){
|
||||
$xmalias[] = $rs['token'];
|
||||
}else if(in_array($rs['cfrom'], array('nppandroid','nppios'))){//2019-11-25最新新app
|
||||
$nestr = ''.$rs['token'].'|'.$rs['web'].'|'.$_uid.'|';
|
||||
if(contain($rs['web'],'huawei') && !contain($rs['ip'],'.'))$nestr.=''.$rs['ip'].'';
|
||||
if(contain($rs['web'],'xiaomi'))$nestr.=''.$rs['pushtoken'].'';
|
||||
$alias2019[] = $nestr;
|
||||
$uid2019[] = $_uid;
|
||||
}else if(substr($_web,0,4)=='app_'){
|
||||
$newalias[] = $rs['token'];
|
||||
}else if(substr($_web,0,4)=='apk_'){
|
||||
$oldalias[] = $rs['token'];
|
||||
}else{
|
||||
$alias[] = $rs['token'];
|
||||
|
||||
$nestr = ''.$rs['token'].'|'.$_web.'|'.$_uid.'|';
|
||||
if(contain($_web,'getui')){
|
||||
$nestr.=''.$rs['pushtoken'].''; //个推
|
||||
}else if(contain($_web,'huawei') && !contain($rs['ip'],'.')){
|
||||
$nestr.=''.$rs['ip'].'';
|
||||
}else if(contain($_web,'xiaomi')){
|
||||
$nestr.=''.$rs['pushtoken'].'';
|
||||
}
|
||||
$alias2019[] = $nestr;
|
||||
if(!in_array($_uid, $uid2019))$uid2019[] = $_uid;
|
||||
if($rs['ispush']=='1')$pushuids[] = $_uid;//可以手机推送的用户
|
||||
}
|
||||
return array('alias' => $alias, 'uids'=>$uids, 'xmalias'=>$xmalias, 'oldalias'=>$oldalias, 'newalias'=>$newalias,'alias2019'=>$alias2019,'uid2019'=>$uid2019,'pushuids'=>$pushuids);
|
||||
return array('uids'=>$uids,'alias2019'=>$alias2019,'uid2019'=>$uid2019,'pushuids'=>$pushuids);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -25,6 +25,15 @@ function initbody(){
|
||||
var da = ret.data;
|
||||
$('#msgview').html('跳转中...');
|
||||
sessionStorage.setItem(kei,'trueabc');
|
||||
if(apicloud && api.x5Ver && api.x5Ver>0){
|
||||
api.rockFun('openWinnei',{
|
||||
url:da.url,
|
||||
progress:'true',
|
||||
animtype:'show'
|
||||
});
|
||||
api.closeWin({animtype:'hide'});
|
||||
return;
|
||||
}
|
||||
js.location(da.url);
|
||||
}else{
|
||||
$('#msgview').html('<font color=red>'+ret.msg+'</font>');
|
||||
|
||||
@@ -30,6 +30,27 @@
|
||||
<script>
|
||||
DEFAULT_URL = jm.base64decode('<?=$da['filepath']?>');
|
||||
|
||||
|
||||
var openbool = false;
|
||||
var url = location.href
|
||||
var lse = url.lastIndexOf('/');
|
||||
NOWURL = url.substr(0, lse+1);
|
||||
apiready=function(){
|
||||
if(openbool || !api.rockFun)return;
|
||||
var x5ver = api.x5Ver;
|
||||
if(x5ver && x5ver>0){
|
||||
var pdfurl = NOWURL+DEFAULT_URL;
|
||||
api.rockFun('openPdf', {
|
||||
fileurl:pdfurl,
|
||||
filename:'<?=$da['filename']?>',
|
||||
animtype:'show',
|
||||
opentyle:'x5'
|
||||
});
|
||||
api.closeWin({animtype:'hide'});
|
||||
}
|
||||
openbool = true;
|
||||
}
|
||||
|
||||
/*
|
||||
const hammertime = new Hammer(document);
|
||||
hammertime.get('pinch').set({ enable: true });
|
||||
|
||||
@@ -122,7 +122,7 @@ function winfocus(){
|
||||
<?php if(getconfig('rockkefu_url')){?>
|
||||
<div id="centshow3" style="display:none">
|
||||
<div id="kefulistwait"></div>
|
||||
<div id="kefulist_tems" style="padding-top:150px;text-align:center;color:#dddddd">
|
||||
<div id="kefulist_tems_wu" style="padding-top:150px;text-align:center;color:#dddddd;display:none">
|
||||
<span style="font-size:40px"><i class="icon-headphones"></i></span><br>暂无咨询消息
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -123,12 +123,14 @@ class indexClassAction extends apiAction
|
||||
$hwtoken = $this->get('hwtoken');
|
||||
$pushtoken = $this->get('pushtoken');
|
||||
$appver = $this->get('appversion');
|
||||
$web = $this->get('web');
|
||||
$ispush = (int)$this->get('ispush','0');
|
||||
if($appver)$pushtoken.='_'.$appver.'';
|
||||
$uarr['ispush'] = $ispush;
|
||||
$uarr['pushtoken'] = $pushtoken;
|
||||
$uarr['moddt'] = $this->now;
|
||||
if(!isempt($hwtoken))$uarr['ip'] = $hwtoken;
|
||||
if(!isempt($web))$uarr['web'] = $web;
|
||||
m('login')->update($uarr, "`token`='$this->admintoken'");
|
||||
if($ispush==1)m('reim')->sendpush($this->adminid, 'all', array(
|
||||
'type' => 'onoffline',
|
||||
|
||||
@@ -22,7 +22,9 @@ class flowClassAction extends ActionNot{
|
||||
}
|
||||
$otyle = $rs['type'];
|
||||
$oi++;
|
||||
$modearr[$rs['type']][]=array('modenum'=>$rs['num'],'url'=>'?a=lum&m=input&d=flow&num='.$rs['num'].'&show=we','name'=>$rs['name'],'title'=>''.$oi.'.'.$rs['name']);
|
||||
if(!isset($modearr[$otyle]))$modearr[$otyle] = array();
|
||||
$len = count($modearr[$otyle])+1;
|
||||
$modearr[$otyle][]=array('modenum'=>$rs['num'],'url'=>'?a=lum&m=input&d=flow&num='.$rs['num'].'&show=we','name'=>$rs['name'],'title'=>''.$len.'.'.$rs['name']);
|
||||
}
|
||||
$this->assign('modearr', $modearr);
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
<link rel="stylesheet" type="text/css" href="webmain/css/rui.css">
|
||||
<script type="text/javascript" src="js/jquery.js"></script>
|
||||
<script type="text/javascript" src="js/js.js"></script>
|
||||
<script type="text/javascript" src="js/base64-min.js"></script>
|
||||
<style>
|
||||
|
||||
</style>
|
||||
@@ -23,6 +24,10 @@ function xuantype(o1){
|
||||
function initApp(){
|
||||
js.setapptitle();
|
||||
}
|
||||
function totuurl(url){
|
||||
var bo = js.appwin('.',url);
|
||||
if(!bo)js.location(url);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
@@ -58,7 +63,7 @@ $count1++;
|
||||
foreach($rows as $k=>$rs){
|
||||
$count++;
|
||||
?>
|
||||
<a class="weui_cell" href="<?=$rs['url']?>">
|
||||
<a class="weui_cell" href="javascript:;" onclick="totuurl('<?=$rs['url']?>')">
|
||||
<div class="weui_cell_bd weui_cell_primary">
|
||||
<p><?=$rs['title']?></p>
|
||||
</div>
|
||||
|
||||
@@ -52,7 +52,7 @@ echo 'body{--main-color:'.$maincolor.';}';
|
||||
xhauthkey = '<?=$xhauthkey?>';
|
||||
maincolor = '<?=$maincolor?>';
|
||||
</script>
|
||||
<body scroll="no" style="overflow:hidden">
|
||||
<body scroll="no" style="overflow:hidden;user-select:none">
|
||||
<?php if($showheader==1){?>
|
||||
<div>
|
||||
<div class="r-header">
|
||||
|
||||
@@ -2,7 +2,7 @@ var ROabc={index:0,splittime:5,ctabci:0,rock:function(){for(var _i in werock)thi
|
||||
this.lda();},lda:function(){this.resiezess();$(window).resize(RO.resiezess);var agentjson=js.getoption('agentjson');var hisjson=js.getoption('historyjson');if(agentjson==''||hisjson==''){this.reload();}else{this.reload();var str=js.getoption('silderarr');if(str)this.showsilder(js.decode(str));RO.showagent(js.decode(agentjson));RO.showhistory(js.decode(hisjson));}
|
||||
this.initsearch();$('#nowc_div').html(js.getoption('nowcompany'));},reload:function(lx){if(this.index==2){this.reus(lx);}else{this.ress(lx);}},ress:function(lx){this.homeress(lx);},reus:function(lx){js.ajax('dept','data',false,function(ret){RO.reuss(ret);},lx,false,function(){RO.showerror();});},ressw:function(ret){this.loadtime=ret.loadtime;js.setoption('agentjson',ret.agentjson);js.setoption('historyjson',ret.historyjson);var yyda=js.decode(ret.agentjson);this.showcompanyinfo(ret.companyinfo);this.showagent(yyda);this.showhistory(js.decode(ret.historyjson));js.setoption('myhomenum',ret.myhomenum);if(ret.silderarr){var str='';if(ret.silderarr.length>0)str=JSON.stringify(ret.silderarr);js.setoption('silderarr',str);this.showsilder(ret.silderarr);}
|
||||
this.shagent(yyda);this.reloadok();if(ret.editpass==0){js.wx.alert(RO.bd6('6K!35YWI5L!u5pS55a!G56CB5ZCO5Zyo5L2.55So'),function(){RO.xgmm();});}else{this.timeajaxs();}},shagent:function(d){var stotal=0;var myhomenum=js.getoption('myhomenum');$('#hylidiv').hide();$('#hyli').html('');if(!myhomenum)return;myhomenum=','+myhomenum+',';var bo=false;for(var i=0;i<d.length;i++){stotal+=parseFloat(d[i].stotal);if(myhomenum.indexOf(','+d[i].num+',')>-1){this.showagents(d[i],'hyli','histotal_home_');bo=true;}}
|
||||
if(bo)$('#hylidiv').show();this.changestotl(false,0);},showmyinfo:function(){js.ajaxbool=false;js.ajax('indexreim','showmyinfo',false,function(ret){RO.sufo(ret);},'none');},sufo:function(ret){js.setoption('deptallname',ret.deptallname);js.setoption('ranking',ret.ranking);adminface=ret.face;js.setoption('adminface',adminface);js.setoption('admintoken',ret.admintoken);adminame=ret.name;js.setoption('adminame',adminame);js.setoption('adminid',ret.id);adminid=ret.id;var sj=ret.mobile;get('myface').src=adminface;$('#myname').html(adminame);$('#my_mz').html(adminame);$('#my_bm').html(ret.deptallname);$('#my_yh').html(ret.user);$('#my_sj').html(''+sj.substr(0,3)+'****'+sj.substr(-4)+'');$('#my_zw').html(ret.ranking);this.showcompanyinfo(ret.companyinfo);if(get('bdwx')){if(ret.bdwx){$('#bdwx').html(''+this.bd6('5bey57uR5a6a')+'(<img src="'+ret.bdwx.headimgurl+'" whdth="16" height="16" align="absmiddle">'+ret.bdwx.nickname+')');}else{$('#bdwx').html(this.bd6('5pyq57uR5a6aLOeCueWHu!e7keWumg::'));}}}};var grouparr=[],userarr=[],agentarr={},RO={};function initbody(){for(var i in ROabc)js.main[i]=ROabc[i];js.main.zhuinit();RO=js.main;js.main.rock();}
|
||||
if(bo)$('#hylidiv').show();this.changestotl(false,0);},showmyinfo:function(){js.ajaxbool=false;js.ajax('indexreim','showmyinfo',false,function(ret){RO.sufo(ret);},'none');},sufo:function(ret){js.setoption('deptallname',ret.deptallname);js.setoption('ranking',ret.ranking);adminface=ret.face;js.setoption('adminface',adminface);js.setoption('admintoken',ret.admintoken);adminame=ret.name;js.setoption('adminame',adminame);js.setoption('adminid',ret.id);adminid=ret.id;var sj=ret.mobile;get('myface').src=adminface;$('#myname').html(adminame);$('#my_mz').html(adminame);$('#my_bm').html(ret.deptallname);$('#my_yh').html(ret.user);$('#my_sj').html(''+sj.substr(0,3)+'****'+sj.substr(-4)+'');$('#my_zw').html(ret.ranking);this.showcompanyinfo(ret.companyinfo);if(get('bdwx')){if(ret.bdwx){$('#bdwx').html(''+this.bd6('5bey57uR5a6a')+'(<img src="'+ret.bdwx.headimgurl+'" whdth="16" height="16" align="absmiddle">'+ret.bdwx.nickname+')');}else{$('#bdwx').html(this.bd6('5pyq57uR5a6aLOeCueWHu!e7keWumg::'));}}}};var grouparr=[],userarr=[],agentarr={},RO={};function initbody(){new touchclass({}).reglongmenu();for(var i in ROabc)js.main[i]=ROabc[i];js.main.zhuinit();RO=js.main;js.main.rock();}
|
||||
var werock={ctab:function(lx){if(!get('tabnav'+lx+''))return;lx=parseFloat(lx);if(lx<0)lx=3;if(lx>3)lx=0;$("[index='m']").hide();var sid='m_index'+lx+'';$('#'+sid+'').show();$('.weui_tabbar a').removeClass('weui_bar_item_on');$('#tabnav'+lx+'').addClass('weui_bar_item_on');var tass=[document.title,this.bd6('5bqU55So'),this.bd6('6IGU57O75Lq6'),adminame];$('.r-header-text').html(tass[lx]);var tabs=['chat','ying','user','my'];if(get('rtb'+this.index+''))get('rtb'+this.index+'').src='images/nav_'+tabs[this.index]+'0.png';if(get('rtb'+lx+''))get('rtb'+lx+'').src='images/nav_'+tabs[lx]+'1.png';this.index=lx;try{sessionStorage.setItem('nowtabs',lx);}catch(e){}
|
||||
this.touchobj.hidescrolls();if(lx==2){this.showuserlist();}
|
||||
if(lx==3){this.showmyinfo();}else{setTimeout('RO.showmyinfo()',200);}
|
||||
@@ -18,7 +18,7 @@ var a=deptarr,i,len=a.length,d,dn;$('#deptlist').html('');$('#list').html('')
|
||||
for(i=0;i<len;i++){d=a[i];if(d.id==id)dn=d;if(d.pid==id){d.face='images/wjj.png';this.showdeptlsit(d,level+1);}}
|
||||
if(level>0)$('#userdao').append('<span class="jiantou">></span>');$('#userdao').append('<span onclick="RO.showuserlists('+id+',0, this)">'+dn.name+'</span>');len=userarr.length;var noi=0;for(i=0;i<len;i++){d=userarr[i];if(d.deptid==id||d.deptidss.indexOf(','+id+',')>-1){this.showlist(d,false);noi++;}}
|
||||
if(noi==0&&$('#deptlist').html()==''){$('#list').append('<div style="font-size:14px;text-align:center;padding:30px 10px;color:#cccccc">'+dn.name+' '+this.bd6('5LiL5peg6IGU57O75Lq6')+'</div>');}},showdeptlsit:function(a,level){var s='';s+='<a class="weui_media_box weui_media_appmsg" onclick="RO.showuserlists('+a.id+','+level+')">';s+=' <div class="weui_cell_hd"><img src="'+a.face+'" style="width:34px;margin-right:5px;display:block"></div>';s+=' <div class="weui_cell_bd weui_cell_primary"><p>'+a.name+'';if(a.ntotal>0)s+=' <span style="font-size:12px;color:#888888">('+a.ntotal+')</span>';s+=' </p></div>';s+='</a>';$('#deptlist').append(s);},showlist:function(a,cbo){var s='<a temp="user_'+a.id+'" onclick="RO.opu('+a.id+')" class="weui_media_box weui_media_appmsg">';s+=' <div class="weui_media_hd">';s+=' <img class="weui_media_appmsg_thumb" src="'+a.face+'">';s+=' </div>';s+=' <div class="weui_media_bd">';s+=' <h4 class="weui_media_title">'+a.name+'</h4>';s+=' <p class="weui_media_desc">'+a.deptname+'('+a.ranking+')</p>';s+=' </div>';s+='</a>';if(!cbo){$('#list').append(s);}else{$('#sslst').append(s);}},showgroupall:function(){var i,len2=grouparr.length;$('#glist').html('');$('#glists').html('('+len2+')');for(i=0;i<len2;i++)this.showgroup(grouparr[i],true);},showgroup:function(a,cbo){var s='';s+='<a class="weui_cell" onclick="RO.openguser(\'group\','+a.id+')">';s+=' <div class="weui_cell_hd"><img src="'+a.face+'" alt="" style="width:34px;margin-right:5px;display:block"></div>';s+=' <div class="weui_cell_bd weui_cell_primary"><p>'+a.name+'</p></div>';s+='</a>';$('#glist').append(s);},shdata:{},showhistory:function(a){var i,len=a.length;$('#historylist').html('');$('#hwu_tems').show();for(i=0;i<len;i++){this.showhistorys(a[i]);}
|
||||
this.changestotl(false,0);if(i>0)$('#hwu_tems').hide();},showhistorys:function(d,pad){var s,ty,o=$('#historylist'),d1,st,attr;var num=''+d.type+'_'+d.receid+'';$('#index_'+num+'').remove();this.shdata[num]=d;st=d.stotal;if(st=='0')st='';var ops=d.optdt.substr(11,5);if(d.optdt.indexOf(date)!=0)ops=d.optdt.substr(5,5);ty=d.type;s='<a id="index_'+num+'" onclick="RO.clickitems(\''+ty+'\','+d.receid+', this)" class="weui_media_box weui_media_appmsg">';s+=' <div class="weui_media_hd">';s+=' <img class="weui_media_appmsg_thumb" src="'+d.face+'">';s+=' </div>';s+=' <div class="weui_media_bd">';s+=' <span id="histotal_'+num+'" class="badge">'+st+'</span>';s+=' <font >'+ops+'</font>';s+=' <h4 class="weui_media_title">'+d.name+'</h4>';s+=' <p class="weui_media_desc">'+this.bd6(d.cont)+'</p>';s+=' </div>';s+='</a>';if(!pad){o.append(s);}else{o.prepend(s);}},clickitems:function(ty,id,o){var o1=$(o),num=''+ty+'_'+id+'',d=this.shdata[num];var da=[{name:this.bd6('5omT5byA'),lx:0}];if(d&&d.stotal>0)da.push({name:this.bd6('5qCH6K!G5bey6K!7'),lx:2});da.push({name:this.bd6('5Yig6Zmk5q2k6K6w5b2V'),lx:1});js.showmenu({data:da,onclick:function(a){var lx=a.lx;if(lx==0){RO.openguser(ty,id);}
|
||||
this.changestotl(false,0);if(i>0)$('#hwu_tems').hide();},showhistorys:function(d,pad){var s,ty,o=$('#historylist'),d1,st,attr;var num=''+d.type+'_'+d.receid+'';$('#index_'+num+'').remove();this.shdata[num]=d;st=d.stotal;if(st=='0')st='';var ops=d.optdt.substr(11,5);if(d.optdt.indexOf(date)!=0)ops=d.optdt.substr(5,5);ty=d.type;var bstr=new touchclass({type:ty,receid:d.receid,onlongclick:function(){RO.clickitems(this.type,this.receid,this.obj)},onclick:function(){RO.openguser(this.type,this.receid);}}).touchstring();s='<a id="index_'+num+'" '+bstr+' class="weui_media_box weui_media_appmsg">';s+=' <div class="weui_media_hd">';s+=' <img class="weui_media_appmsg_thumb" src="'+d.face+'">';s+=' </div>';s+=' <div class="weui_media_bd">';s+=' <span id="histotal_'+num+'" class="badge">'+st+'</span>';s+=' <font >'+ops+'</font>';s+=' <h4 class="weui_media_title">'+d.name+'</h4>';s+=' <p class="weui_media_desc">'+this.bd6(d.cont)+'</p>';s+=' </div>';s+='</a>';if(!pad){o.append(s);}else{o.prepend(s);}},clickitems:function(ty,id,o){var o1=$(o),num=''+ty+'_'+id+'',d=this.shdata[num];var da=[{name:this.bd6('5omT5byA'),lx:0}];if(d&&d.stotal>0)da.push({name:this.bd6('5qCH6K!G5bey6K!7'),lx:2});da.push({name:this.bd6('5Yig6Zmk5q2k6K6w5b2V'),lx:1});js.showmenu({data:da,onclick:function(a){var lx=a.lx;if(lx==0){RO.openguser(ty,id);}
|
||||
if(lx==1){o1.remove();var tst=$('#historylist').text();if(tst=='')$('#hwu_tems').show();js.ajax('reim','delhistory',{type:ty,gid:id},false,'none');}
|
||||
if(lx==2){RO.biaoyidu(ty,id,true);}}});},opu:function(id){js.location('?a=userinfo&d=we&uid='+id+'');},biaoyidu:function(ty,id,lbo){if(lbo){var num=''+ty+'_'+id+'';$('#histotal_'+num+'').html('');this.changestotl(false,0);var d=this.shdata[num];if(d)d.stotal='0';}
|
||||
js.ajax('reim','yiduall',{type:ty,gid:id},false,'none');},openguser:function(ty,id){var num=''+ty+'_'+id+'';$('#histotal_'+num+'').html('');this.changestotl(false,0);if(ty=='agent'){var d=this.shdata[num];var url='';if(d&&d.stotal>0&&!isempt(d.xgurl)){d.stotal='0';var xga=d.xgurl.split('|');if(xga[1]>0)url='task.php?a=x&num='+xga[0]+'&mid='+xga[1]+'';}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<link rel="shortcut icon" href="<?=$arr['face']?>" />
|
||||
<script type="text/javascript" src="js/jquery.js"></script>
|
||||
<script type="text/javascript" src="js/js.js"></script>
|
||||
<script type="text/javascript" src="js/jswx.js"></script>
|
||||
<script type="text/javascript" src="js/jswx.js?<?=time()?>"></script>
|
||||
<script type="text/javascript" src="js/base64-min.js"></script>
|
||||
<script type="text/javascript" src="js/jsmain.js"></script>
|
||||
<script type="text/javascript" src="webmain/we/ying/ying.js?<?=time()?>"></script>
|
||||
@@ -30,15 +30,15 @@ body,html{background-color:#f1f1f1;overflow:hidden}
|
||||
.weui_navbar_item_disabled{color:#aaaaaa}
|
||||
|
||||
.contline{padding-top:10px;color:#999999;font-size:14px;text-align:center;}
|
||||
.contlist{margin:15px;padding:8px 10px;position:relative; background:white}
|
||||
.contlist:active,.active{ background-color:#f1f1f1}
|
||||
.contlist{margin:15px;padding:8px 10px;position:relative; background:white;border-radius:5px;border:0.5px #dddddd solid}
|
||||
.contlist:active,.active{ background-color:#f5f5f5}
|
||||
.contlist .title{font-size:16px}
|
||||
.contlist .dt{font-size:12px;color:#aaaaaa;}
|
||||
.contlist .xq{color:<?=$maincolor?>;font-size:14px;padding-top:7px}
|
||||
.contlist .xq{color:<?=$maincolor?>;font-size:14px;padding-top:7px;border-top:0.5px #dddddd solid}
|
||||
.contlist .xq span{float:right}
|
||||
.contlist .cont{font-size:14px;padding:10px 0px}
|
||||
.contlist .imgs{height:130px;overflow:hidden;margin:5px 0px}
|
||||
.contlist .zt{font-size:10px;position:absolute;top:2px;right:1px;padding:1px 3px;background-color:red;color:white}
|
||||
.contlist .zt{font-size:10px;position:absolute;top:2px;right:2px;border-radius:3px;padding:1px 3px;background-color:red;color:white}
|
||||
.contlist .face{font-size:14px;padding:5px 0px;overflow:hidden;}
|
||||
.contlist .face img{border-radius:15px;height:24px;width:24px;margin-right:5px}
|
||||
.contlist .opt{font-size:10px;position:absolute;bottom:1px;right:1px;padding:1px 3px;color:#aaaaaa}
|
||||
@@ -56,16 +56,22 @@ var agentlx=0,xhauthkey = '<?=$xhauthkey?>',maincolor='<?=$maincolor?>';
|
||||
function yingyonginit(){
|
||||
yy.loadshow();
|
||||
}
|
||||
var xcy = {
|
||||
resiezess:function(){
|
||||
yy.resizehei();
|
||||
}
|
||||
}
|
||||
function initbody(){
|
||||
adminid = '<?=$da['adminid']?>';
|
||||
admintoken = '<?=$xhrock->admintoken?>';
|
||||
yy.init();
|
||||
yingyonginit();
|
||||
new touchclass({}).reglongmenu();
|
||||
}
|
||||
function initApp(){
|
||||
js.setapptitle(json.name);
|
||||
js.location=function(dz){
|
||||
if(js.appwin('',dz))return;
|
||||
if(js.appwin('.',dz))return;
|
||||
location.href = dz;
|
||||
}
|
||||
var nowlist = 'yingyong_mode_'+json.num+'';
|
||||
@@ -87,7 +93,7 @@ function callPhone(o1){
|
||||
if(appobj1('callPhone', o1)){
|
||||
return false;
|
||||
}else if(apicloud){
|
||||
api.call({type:'tel_prompt',number:o1});
|
||||
api.rockFun('callPhone', {phone:o1});
|
||||
return false;
|
||||
}else{
|
||||
return true;
|
||||
@@ -112,7 +118,7 @@ yy.onshowdata=function(da){
|
||||
</head>
|
||||
|
||||
|
||||
<body>
|
||||
<body style="user-select:none">
|
||||
<?php if($showheader==1){?>
|
||||
<div>
|
||||
<div class="r-header" style="padding-top:<?=$cenghei?>px" >
|
||||
|
||||
@@ -400,25 +400,37 @@ var myScroll=false,yy={
|
||||
s='<div class="contline">'+d.title+'</div>';
|
||||
}else{
|
||||
if(!d.statuscolor)d.statuscolor='';
|
||||
|
||||
var bstr = new touchclass({
|
||||
xuhao:oi,
|
||||
onlongclick:function(){
|
||||
yy.showmenu(this.xuhao);
|
||||
},
|
||||
onclick:function(){
|
||||
yy.xiang(this.xuhao);
|
||||
}
|
||||
}).touchstring();
|
||||
st='';
|
||||
if(d.ishui==1)st='color:#aaaaaa;';
|
||||
s='<div style="'+st+'" class="r-border contlist">';
|
||||
s='<div style="'+st+'" class="contlist">';
|
||||
s+='<div '+bstr+'>';
|
||||
if(d.title){
|
||||
if(d.face){
|
||||
s+='<div onclick="yy.showmenu('+oi+')" class="face"><img src="'+d.face+'" align="absmiddle">'+d.title+'</div>';
|
||||
s+='<div class="face"><img src="'+d.face+'" align="absmiddle">'+d.title+'</div>';
|
||||
}else{
|
||||
s+='<div onclick="yy.showmenu('+oi+')" class="tit">'+d.title+'</div>';
|
||||
s+='<div class="tit">'+d.title+'</div>';
|
||||
}
|
||||
}
|
||||
if(d.optdt)s+='<div class="dt">'+d.optdt+'</div>';
|
||||
if(d.picurl)s+='<div onclick="yy.showmenu('+oi+')" class="imgs"><img src="'+d.picurl+'" width="100%"></div>';
|
||||
if(d.cont)s+='<div onclick="yy.showmenu('+oi+')" class="cont">'+d.cont.replace(/\n/g,'<br>')+'</div>';
|
||||
if(d.picurl)s+='<div class="imgs"><img src="'+d.picurl+'" width="100%"></div>';
|
||||
if(d.cont)s+='<div class="cont">'+d.cont.replace(/\n/g,'<br>')+'</div>';
|
||||
s+='</div>';
|
||||
if(d.id && d.modenum && !d.noshowopt){
|
||||
s+='<div class="xq r-border-t"><font onclick="yy.showmenu('+oi+')">操作<i class="icon-angle-down"></i></font><span onclick="yy.xiang('+oi+')">详情>></span>';
|
||||
s+='<div class="xq"><font onclick="yy.showmenu('+oi+')">操作<i class="icon-angle-down"></i></font><span onclick="yy.xiang('+oi+')">详情>></span>';
|
||||
s+='</div>';
|
||||
}
|
||||
if(d.xiangurl){
|
||||
s+='<div class="xq r-border-t" onclick="yy.xiang('+oi+')"><font>详情>></font></div>';
|
||||
s+='<div class="xq" onclick="yy.xiang('+oi+')"><font>详情>></font></div>';
|
||||
}
|
||||
if(d.statustext)s+='<div style="background-color:'+d.statuscolor+';opacity:0.7" class="zt">'+d.statustext+'</div>';
|
||||
s+='</div>';
|
||||
|
||||
Reference in New Issue
Block a user