first commit
@@ -0,0 +1,11 @@
|
|||||||
|
<IfModule mod_rewrite.c>
|
||||||
|
Options +FollowSymlinks
|
||||||
|
RewriteEngine On
|
||||||
|
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
RewriteRule ^(.[a-zA-Z0-9\-\_]+).html$ index.php?mod=$1 [QSA,PT,L]
|
||||||
|
RewriteRule ^pay/(.*)$ pay.php?s=$1 [QSA,PT,L]
|
||||||
|
RewriteRule ^api/(.*)$ api.php?s=$1 [QSA,PT,L]
|
||||||
|
RewriteRule ^doc/(.[a-zA-Z0-9\-\_]+).html$ index.php?doc=$1 [QSA,PT,L]
|
||||||
|
</IfModule>
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<rule name="payrule1_rewrite" stopProcessing="true">
|
||||||
|
<match url="^(.[a-zA-Z0-9-_]+).html"/>
|
||||||
|
<conditions logicalGrouping="MatchAll">
|
||||||
|
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
|
||||||
|
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
|
||||||
|
</conditions>
|
||||||
|
<action type="Rewrite" url="index.php?mod={R:1}"/>
|
||||||
|
</rule>
|
||||||
|
<rule name="payrule2_rewrite" stopProcessing="true">
|
||||||
|
<match url="^pay/(.*)"/>
|
||||||
|
<conditions logicalGrouping="MatchAll">
|
||||||
|
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
|
||||||
|
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
|
||||||
|
</conditions>
|
||||||
|
<action type="Rewrite" url="pay.php?s={R:1}"/>
|
||||||
|
</rule>
|
||||||
|
<rule name="payrule3_rewrite" stopProcessing="true">
|
||||||
|
<match url="^api/(.*)"/>
|
||||||
|
<conditions logicalGrouping="MatchAll">
|
||||||
|
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
|
||||||
|
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
|
||||||
|
</conditions>
|
||||||
|
<action type="Rewrite" url="api.php?s={R:1}"/>
|
||||||
|
</rule>
|
||||||
|
<rule name="payrule4_rewrite" stopProcessing="true">
|
||||||
|
<match url="^doc/(.[a-zA-Z0-9-_]+).html"/>
|
||||||
|
<conditions logicalGrouping="MatchAll">
|
||||||
|
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
|
||||||
|
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
|
||||||
|
</conditions>
|
||||||
|
<action type="Rewrite" url="index.php?doc={R:1}"/>
|
||||||
|
</rule>
|
||||||
@@ -0,0 +1,198 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
|
||||||
|
|
||||||
|
if(!checkRefererHost())exit('{"code":403}');
|
||||||
|
|
||||||
|
@header('Content-Type: application/json; charset=UTF-8');
|
||||||
|
|
||||||
|
switch($act){
|
||||||
|
case 'getcount':
|
||||||
|
$thtime=date("Y-m-d").' 00:00:00';
|
||||||
|
$count1=$DB->getColumn("SELECT count(*) from pre_order");
|
||||||
|
$count2=$DB->getColumn("SELECT count(*) from pre_user");
|
||||||
|
$plugincount=$DB->getColumn("SELECT count(*) from pre_plugin");
|
||||||
|
if($plugincount<1){
|
||||||
|
\lib\Plugin::updateAll();
|
||||||
|
}
|
||||||
|
$isConvert = $DB->getRow("SELECT * FROM pre_channel WHERE status=1 AND config IS NULL LIMIT 1");
|
||||||
|
if($isConvert){
|
||||||
|
convert_channel_data();
|
||||||
|
\lib\Plugin::updateAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
$orderrow=$DB->getRow("SELECT COUNT(*) allnum,COUNT(IF(status>0, 1, NULL)) sucnum FROM pre_order WHERE addtime>='$thtime'");
|
||||||
|
$success_rate = 100;
|
||||||
|
if($orderrow){
|
||||||
|
if($orderrow['allnum'] > 0){
|
||||||
|
$success_rate = round($orderrow['sucnum']/$orderrow['allnum']*100,2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$paytype = [];
|
||||||
|
$rs = $DB->getAll("SELECT id,name,showname FROM pre_type WHERE status=1");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$paytype[$row['id']] = $row['showname'];
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
|
||||||
|
$channel = [];
|
||||||
|
$rs = $DB->getAll("SELECT id,name FROM pre_channel WHERE status=1");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$channel[$row['id']] = $row['name'];
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
|
||||||
|
$tongji_cachetime=getSetting('tongji_cachetime', true);
|
||||||
|
$tongji_cache = $CACHE->read('tongji');
|
||||||
|
if($tongji_cachetime+3600>=time() && $tongji_cache && !isset($_GET['getnew'])){
|
||||||
|
$array = unserialize($tongji_cache);
|
||||||
|
$result=["code"=>0,"type"=>"cache","paytype"=>$paytype,"channel"=>$channel,"count1"=>$count1,"count2"=>$count2,"usermoney"=>round($array['usermoney'],2),"settlemoney"=>round($array['settlemoney'],2),"success_rate"=>$success_rate,"order_today"=>$array['order_today'],"order"=>[]];
|
||||||
|
}else{
|
||||||
|
$usermoney=$DB->getColumn("SELECT SUM(money) FROM pre_user WHERE money!='0.00'");
|
||||||
|
$settlemoney=$DB->getColumn("SELECT SUM(money) FROM pre_settle");
|
||||||
|
|
||||||
|
$today=date("Y-m-d");
|
||||||
|
$rs=$DB->query("SELECT type,channel,realmoney,profitmoney from pre_order where status=1 and date>='$today'");
|
||||||
|
foreach($paytype as $id=>$type){
|
||||||
|
$order_paytype[$id]=0;
|
||||||
|
$profit_paytype[$id]=0;
|
||||||
|
}
|
||||||
|
foreach($channel as $id=>$type){
|
||||||
|
$order_channel[$id]=0;
|
||||||
|
}
|
||||||
|
while($row = $rs->fetch())
|
||||||
|
{
|
||||||
|
$order_paytype[$row['type']]+=$row['realmoney'];
|
||||||
|
$order_channel[$row['channel']]+=$row['realmoney'];
|
||||||
|
if(!empty($row['profitmoney'])){
|
||||||
|
$profit_paytype[$row['type']]+=$row['profitmoney'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach($order_paytype as $k=>$v){
|
||||||
|
$order_paytype[$k] = round($v,2);
|
||||||
|
}
|
||||||
|
foreach($order_channel as $k=>$v){
|
||||||
|
$order_channel[$k] = round($v,2);
|
||||||
|
}
|
||||||
|
foreach($profit_paytype as $k=>$v){
|
||||||
|
$profit_paytype[$k] = round($v,2);
|
||||||
|
}
|
||||||
|
$allmoney=0;
|
||||||
|
foreach($order_paytype as $order){
|
||||||
|
$allmoney+=$order;
|
||||||
|
}
|
||||||
|
$allprofit=0;
|
||||||
|
foreach($profit_paytype as $money){
|
||||||
|
$allprofit+=$money;
|
||||||
|
}
|
||||||
|
|
||||||
|
$order_today['all']=round($allmoney,2);
|
||||||
|
$order_today['profit_all']=round($allprofit,2);
|
||||||
|
$order_today['paytype']=$order_paytype;
|
||||||
|
$order_today['channel']=$order_channel;
|
||||||
|
$order_today['profit_paytype']=$profit_paytype;
|
||||||
|
|
||||||
|
saveSetting('tongji_cachetime',time());
|
||||||
|
$CACHE->save('tongji',serialize(["usermoney"=>$usermoney,"settlemoney"=>$settlemoney,"order_today"=>$order_today]));
|
||||||
|
|
||||||
|
$result=["code"=>0,"type"=>"online","paytype"=>$paytype,"channel"=>$channel,"count1"=>$count1,"count2"=>$count2,"usermoney"=>round($usermoney,2),"settlemoney"=>round($settlemoney,2),"success_rate"=>$success_rate,"order_today"=>$order_today,"order"=>[]];
|
||||||
|
}
|
||||||
|
for($i=1;$i<7;$i++){
|
||||||
|
$day = date("Ymd", strtotime("-{$i} day"));
|
||||||
|
if($order_tongji = $CACHE->read('order_'.$day)){
|
||||||
|
$result["order"][$day] = unserialize($order_tongji);
|
||||||
|
}else{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'set':
|
||||||
|
if(isset($_POST['localurl'])){
|
||||||
|
if(!empty($_POST['localurl']) && (substr($_POST['localurl'],0,4)!='http' || substr($_POST['localurl'],-1)!='/'))exit('{"code":-1,"msg":"回调专用网址格式错误"}');
|
||||||
|
}
|
||||||
|
if(isset($_POST['apiurl'])){
|
||||||
|
if(!empty($_POST['apiurl']) && (substr($_POST['apiurl'],0,4)!='http' || substr($_POST['apiurl'],-1)!='/'))exit('{"code":-1,"msg":"用户对接网址格式错误"}');
|
||||||
|
}
|
||||||
|
if(isset($_POST['login_apiurl'])){
|
||||||
|
if(!empty($_POST['login_apiurl']) && (substr($_POST['login_apiurl'],0,4)!='http' || substr($_POST['login_apiurl'],-1)!='/'))exit('{"code":-1,"msg":"聚合登录API接口地址格式错误"}');
|
||||||
|
}
|
||||||
|
foreach($_POST as $k=>$v){
|
||||||
|
saveSetting($k, $v);
|
||||||
|
}
|
||||||
|
$ad=$CACHE->clear();
|
||||||
|
if($ad)exit('{"code":0,"msg":"succ"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改设置失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'setGonggao':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$status=intval($_GET['status']);
|
||||||
|
$sql = "UPDATE pre_anounce SET status='$status' WHERE id='$id'";
|
||||||
|
if($DB->exec($sql))exit('{"code":0,"msg":"修改状态成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改状态失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'delGonggao':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$sql = "DELETE FROM pre_anounce WHERE id='$id'";
|
||||||
|
if($DB->exec($sql))exit('{"code":0,"msg":"删除公告成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"删除公告失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'iptype':
|
||||||
|
$result = [
|
||||||
|
['name'=>'0_X_FORWARDED_FOR', 'ip'=>real_ip(0), 'city'=>get_ip_city(real_ip(0))],
|
||||||
|
['name'=>'1_X_REAL_IP', 'ip'=>real_ip(1), 'city'=>get_ip_city(real_ip(1))],
|
||||||
|
['name'=>'2_REMOTE_ADDR', 'ip'=>real_ip(2), 'city'=>get_ip_city(real_ip(2))]
|
||||||
|
];
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'setArticle': //文章状态
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$active=intval($_GET['active']);
|
||||||
|
$DB->exec("update pre_article set active='$active' where id='{$id}'");
|
||||||
|
exit('{"code":0,"msg":"succ"}');
|
||||||
|
break;
|
||||||
|
case 'article_upload':
|
||||||
|
$file_name = $_FILES['imgFile']['name'];
|
||||||
|
$tmp_name = $_FILES['imgFile']['tmp_name'];
|
||||||
|
//获得文件扩展名
|
||||||
|
$temp_arr = explode(".", $file_name);
|
||||||
|
$file_ext = array_pop($temp_arr);
|
||||||
|
$file_ext = strtolower(trim($file_ext));
|
||||||
|
if (in_array($file_ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'webp')) === false) {
|
||||||
|
exit('{"error":1,"message":"上传文件扩展名是不允许的扩展名。"}');
|
||||||
|
}
|
||||||
|
$filename = md5_file($tmp_name).'.'.$file_ext;
|
||||||
|
$fileurl = '/assets/img/article/'.$filename;
|
||||||
|
if(copy($tmp_name, ROOT.'assets/img/article/'.$filename)){
|
||||||
|
exit('{"error":0,"url":"'.$fileurl.'"}');
|
||||||
|
}else{
|
||||||
|
exit('{"error":1,"message":"上传失败,请确保有本地写入权限"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'testproxy':
|
||||||
|
$conf['proxy_server'] = trim($_POST['proxy_server']);
|
||||||
|
$conf['proxy_port'] = $_POST['proxy_port'];
|
||||||
|
$conf['proxy_user'] = trim($_POST['proxy_user']);
|
||||||
|
$conf['proxy_pwd'] = trim($_POST['proxy_pwd']);
|
||||||
|
$conf['proxy_type'] = $_POST['proxy_type'];
|
||||||
|
try{
|
||||||
|
check_proxy('https://dl.amh.sh/ip.htm');
|
||||||
|
}catch(Exception $e){
|
||||||
|
try{
|
||||||
|
check_proxy('https://myip.ipip.net/');
|
||||||
|
}catch(Exception $e){
|
||||||
|
exit('{"code":-1,"msg":"'.$e->getMessage().'"}');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exit('{"code":0}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
exit('{"code":-4,"msg":"No Act"}');
|
||||||
|
break;
|
||||||
|
}
|
||||||
@@ -0,0 +1,379 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
|
||||||
|
|
||||||
|
if(!checkRefererHost())exit('{"code":403}');
|
||||||
|
|
||||||
|
@header('Content-Type: application/json; charset=UTF-8');
|
||||||
|
|
||||||
|
switch($act){
|
||||||
|
case 'orderList':
|
||||||
|
$paytype = [];
|
||||||
|
$paytypes = [];
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_type");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$paytype[$row['id']] = $row['showname'];
|
||||||
|
$paytypes[$row['id']] = $row['name'];
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
|
||||||
|
$uid = intval($_POST['uid']);
|
||||||
|
$sql.=" AND A.`uid`='$uid'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['type']) && !empty($_POST['type'])) {
|
||||||
|
$type = intval($_POST['type']);
|
||||||
|
$sql.=" AND A.`type`='$type'";
|
||||||
|
}elseif(isset($_POST['channel']) && !empty($_POST['channel'])) {
|
||||||
|
$channel = intval($_POST['channel']);
|
||||||
|
$sql.=" AND A.`channel`='$channel'";
|
||||||
|
}elseif(isset($_POST['subchannel']) && !empty($_POST['subchannel'])) {
|
||||||
|
$subchannel = trim($_POST['subchannel']);
|
||||||
|
$subchannel = explode('|', $subchannel);
|
||||||
|
$subchannel = array_map('intval', $subchannel);
|
||||||
|
$sql.=" AND A.`subchannel` IN (".implode(",", $subchannel).")";
|
||||||
|
}
|
||||||
|
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
|
||||||
|
$dstatus = intval($_POST['dstatus']);
|
||||||
|
$sql.=" AND A.status={$dstatus}";
|
||||||
|
}
|
||||||
|
if(!empty($_POST['starttime']) || !empty($_POST['endtime'])){
|
||||||
|
if(!empty($_POST['starttime'])){
|
||||||
|
$starttime = daddslashes($_POST['starttime']);
|
||||||
|
$sql.=" AND A.addtime>='{$starttime} 00:00:00'";
|
||||||
|
}
|
||||||
|
if(!empty($_POST['endtime'])){
|
||||||
|
$endtime = daddslashes($_POST['endtime']);
|
||||||
|
$sql.=" AND A.addtime<='{$endtime} 23:59:59'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isset($_POST['value']) && !empty($_POST['value'])) {
|
||||||
|
if($_POST['column']=='name'){
|
||||||
|
$sql.=" AND A.`{$_POST['column']}` like '%{$_POST['value']}%'";
|
||||||
|
}else{
|
||||||
|
if(($_POST['column'] == 'money' || $_POST['column'] == 'realmoney' || $_POST['column'] == 'getmoney') && strpos($_POST['value'],'-')){
|
||||||
|
$money = explode('-', $_POST['value']);
|
||||||
|
$sql.=" AND A.`{$_POST['column']}`>='{$money[0]}' AND A.`{$_POST['column']}`<='{$money[1]}'";
|
||||||
|
}else{
|
||||||
|
$sql.=" AND A.`{$_POST['column']}`='{$_POST['value']}'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$offset = intval($_POST['offset']);
|
||||||
|
$limit = intval($_POST['limit']);
|
||||||
|
$total = $DB->getColumn("SELECT count(*) from pre_order A WHERE{$sql}");
|
||||||
|
$list = $DB->getAll("SELECT A.*,B.plugin FROM pre_order A LEFT JOIN pre_channel B ON A.channel=B.id WHERE{$sql} order by trade_no desc limit $offset,$limit");
|
||||||
|
$list2 = [];
|
||||||
|
foreach($list as $row){
|
||||||
|
$row['typename'] = $paytypes[$row['type']];
|
||||||
|
$row['typeshowname'] = $paytype[$row['type']];
|
||||||
|
$list2[] = $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(json_encode(['total'=>$total, 'rows'=>$list2]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'statistics':
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
|
||||||
|
$uid = intval($_POST['uid']);
|
||||||
|
$sql.=" AND A.`uid`='$uid'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['type']) && !empty($_POST['type'])) {
|
||||||
|
$type = intval($_POST['type']);
|
||||||
|
$sql.=" AND A.`type`='$type'";
|
||||||
|
}elseif(isset($_POST['channel']) && !empty($_POST['channel'])) {
|
||||||
|
$channel = intval($_POST['channel']);
|
||||||
|
$sql.=" AND A.`channel`='$channel'";
|
||||||
|
}elseif(isset($_POST['subchannel']) && !empty($_POST['subchannel'])) {
|
||||||
|
$subchannel = intval($_POST['subchannel']);
|
||||||
|
$sql.=" AND A.`subchannel`='$subchannel'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
|
||||||
|
$dstatus = intval($_POST['dstatus']);
|
||||||
|
$sql.=" AND A.status={$dstatus}";
|
||||||
|
}
|
||||||
|
if(!empty($_POST['starttime']) || !empty($_POST['endtime'])){
|
||||||
|
if(!empty($_POST['starttime'])){
|
||||||
|
$starttime = daddslashes($_POST['starttime']);
|
||||||
|
$sql.=" AND A.addtime>='{$starttime} 00:00:00'";
|
||||||
|
}
|
||||||
|
if(!empty($_POST['endtime'])){
|
||||||
|
$endtime = daddslashes($_POST['endtime']);
|
||||||
|
$sql.=" AND A.addtime<='{$endtime} 23:59:59'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isset($_POST['value']) && !empty($_POST['value'])) {
|
||||||
|
if($_POST['column']=='name'){
|
||||||
|
$sql.=" AND A.`{$_POST['column']}` like '%{$_POST['value']}%'";
|
||||||
|
}else{
|
||||||
|
if(($_POST['column'] == 'money' || $_POST['column'] == 'realmoney' || $_POST['column'] == 'getmoney') && strpos($_POST['value'],'-')){
|
||||||
|
$money = explode('-', $_POST['value']);
|
||||||
|
$sql.=" AND A.`{$_POST['column']}`>='{$money[0]}' AND A.`{$_POST['column']}`<='{$money[1]}'";
|
||||||
|
}else{
|
||||||
|
$sql.=" AND A.`{$_POST['column']}`='{$_POST['value']}'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 统计数据
|
||||||
|
$resultMoneyData = $DB->getRow("SELECT
|
||||||
|
SUM(money) AS totalMoney,
|
||||||
|
SUM(CASE WHEN A.status = 1 THEN money ELSE 0 END) AS successMoney,
|
||||||
|
SUM(CASE WHEN A.status = 0 THEN money ELSE 0 END) AS unpaidMoney,
|
||||||
|
SUM(CASE WHEN A.status = 2 THEN refundmoney ELSE 0 END) AS refundMoney
|
||||||
|
FROM pre_order A LEFT JOIN pre_channel B ON A.channel=B.id WHERE {$sql} order by trade_no desc");
|
||||||
|
|
||||||
|
$resultCount = $DB->getRow("SELECT
|
||||||
|
COUNT(*) AS totalCount,
|
||||||
|
SUM(CASE WHEN A.status = 1 THEN 1 ELSE 0 END) AS successCount,
|
||||||
|
SUM(CASE WHEN A.status = 0 THEN 1 ELSE 0 END) AS unpaidCount,
|
||||||
|
SUM(CASE WHEN A.status = 2 THEN 1 ELSE 0 END) AS refundCount
|
||||||
|
FROM pre_order A LEFT JOIN pre_channel B ON A.channel=B.id WHERE {$sql} order by trade_no desc");
|
||||||
|
|
||||||
|
// 获取平台总收入利润
|
||||||
|
$platformProfit = $DB->getColumn("SELECT SUM(A.profitmoney) FROM pre_order A LEFT JOIN pre_channel B ON A.channel=B.id WHERE {$sql} AND status = 1 order by trade_no desc");
|
||||||
|
|
||||||
|
$result = [
|
||||||
|
'totalMoney' => number_format($resultMoneyData['totalMoney'], 2, '.', '') ?? 0.00,
|
||||||
|
'successMoney' => number_format($resultMoneyData['successMoney'], 2, '.', '') ?? 0.00,
|
||||||
|
'unpaidMoney' => number_format($resultMoneyData['unpaidMoney'], 2, '.', '') ?? 0.00,
|
||||||
|
'refundMoney' => number_format($resultMoneyData['refundMoney'], 2, '.', '') ?? 0.00,
|
||||||
|
'totalCount' => $resultCount['totalCount'] ?? '0',
|
||||||
|
'successCount' => $resultCount['successCount'] ?? '0',
|
||||||
|
'unpaidCount' => $resultCount['unpaidCount'] ?? '0',
|
||||||
|
'refundCount' => $resultCount['refundCount'] ?? '0',
|
||||||
|
'platformProfit' => number_format($platformProfit, 2, '.', '') ?? 0.00
|
||||||
|
];
|
||||||
|
$result['successRate'] = $result['totalCount'] > 0 ? round(($result['totalCount']-$result['unpaidCount']) / $result['totalCount'] * 100, 2) : 0;
|
||||||
|
exit(json_encode(['code'=>0, 'data'=>$result]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'riskList':
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(isset($_POST['value']) && !empty($_POST['value'])) {
|
||||||
|
$sql.=" AND `{$_POST['column']}`='{$_POST['value']}'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['type']) && $_POST['type']>-1) {
|
||||||
|
$type = intval($_POST['type']);
|
||||||
|
$sql.=" AND `type`={$type}";
|
||||||
|
}
|
||||||
|
$offset = intval($_POST['offset']);
|
||||||
|
$limit = intval($_POST['limit']);
|
||||||
|
$total = $DB->getColumn("SELECT count(*) from pre_risk WHERE{$sql}");
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_risk WHERE{$sql} order by id desc limit $offset,$limit");
|
||||||
|
|
||||||
|
exit(json_encode(['total'=>$total, 'rows'=>$list]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'setStatus': //改变订单状态
|
||||||
|
$trade_no=trim($_GET['trade_no']);
|
||||||
|
$status=is_numeric($_GET['status'])?intval($_GET['status']):exit('{"code":200}');
|
||||||
|
if($status==5){
|
||||||
|
if($DB->exec("DELETE FROM pre_order WHERE trade_no='$trade_no'"))
|
||||||
|
exit('{"code":200}');
|
||||||
|
else
|
||||||
|
exit('{"code":400,"msg":"删除订单失败!['.$DB->error().']"}');
|
||||||
|
}else{
|
||||||
|
if($DB->exec("update pre_order set status='$status' where trade_no='$trade_no'")!==false)
|
||||||
|
exit('{"code":200}');
|
||||||
|
else
|
||||||
|
exit('{"code":400,"msg":"修改订单失败!['.$DB->error().']"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'order': //订单详情
|
||||||
|
$trade_no=trim($_GET['trade_no']);
|
||||||
|
$row=$DB->getRow("select A.*,B.showname typename,C.name channelname from pre_order A,pre_type B,pre_channel C where trade_no='$trade_no' and A.type=B.id and A.channel=C.id limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前订单不存在或未成功选择支付通道!"}');
|
||||||
|
$row['subchannelname'] = $row['subchannel'] > 0 ? $DB->findColumn('subchannel', 'name', ['id'=>$row['subchannel']]) : '';
|
||||||
|
if($row['status']==2){
|
||||||
|
$row['refundtime'] = $DB->findColumn('refundorder', 'addtime', ['trade_no'=>$trade_no], 'refund_no DESC');
|
||||||
|
}
|
||||||
|
$result=array("code"=>0,"msg"=>"succ","data"=>$row);
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'subOrders':
|
||||||
|
$trade_no=trim($_GET['trade_no']);
|
||||||
|
$list = \lib\Payment::getSubOrders($trade_no);
|
||||||
|
exit(json_encode(['code'=>0, 'data'=>$list, 'settle'=>$DB->findColumn('order', 'settle', ['trade_no'=>$trade_no])]));
|
||||||
|
break;
|
||||||
|
case 'operation': //批量操作订单
|
||||||
|
$status=is_numeric($_POST['status'])?intval($_POST['status']):exit('{"code":-1,"msg":"请选择操作"}');
|
||||||
|
$checkbox=$_POST['checkbox'];
|
||||||
|
$i=0;
|
||||||
|
foreach($checkbox as $trade_no){
|
||||||
|
if($status==4)$DB->exec("DELETE FROM pre_order WHERE trade_no='$trade_no'");
|
||||||
|
elseif($status==3){
|
||||||
|
\lib\Order::unfreeze($trade_no);
|
||||||
|
}
|
||||||
|
elseif($status==2){
|
||||||
|
\lib\Order::freeze($trade_no);
|
||||||
|
}
|
||||||
|
else $DB->exec("update pre_order set status='$status' where trade_no='$trade_no' limit 1");
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
exit('{"code":0,"msg":"成功改变'.$i.'条订单状态"}');
|
||||||
|
break;
|
||||||
|
case 'getmoney': //退款查询
|
||||||
|
if(!$conf['admin_paypwd'])exit('{"code":-1,"msg":"你还未设置支付密码"}');
|
||||||
|
$trade_no=trim($_POST['trade_no']);
|
||||||
|
$api=isset($_POST['api'])?intval($_POST['api']):0;
|
||||||
|
$result = \lib\Order::refund_info($trade_no, $api);
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'refund': //退款操作
|
||||||
|
$trade_no=trim($_POST['trade_no']);
|
||||||
|
$money = trim($_POST['money']);
|
||||||
|
if(!is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))exit('{"code":-1,"msg":"金额输入错误"}');
|
||||||
|
|
||||||
|
$refund_no = date("YmdHis").rand(11111,99999);
|
||||||
|
$result = \lib\Order::refund($refund_no, $trade_no, $money);
|
||||||
|
if($result['code'] == 0){
|
||||||
|
$result['msg'] = '已成功从UID:'.$result['uid'].'扣除'.$result['reducemoney'].'元余额';
|
||||||
|
}
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'apirefund': //API退款操作
|
||||||
|
$trade_no=trim($_POST['trade_no']);
|
||||||
|
$paypwd=trim($_POST['paypwd']);
|
||||||
|
$money = trim($_POST['money']);
|
||||||
|
if(!is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))exit('{"code":-1,"msg":"金额输入错误"}');
|
||||||
|
if($paypwd!=$conf['admin_paypwd'])
|
||||||
|
exit('{"code":-1,"msg":"支付密码输入错误!"}');
|
||||||
|
|
||||||
|
$refund_no = date("YmdHis").rand(11111,99999);
|
||||||
|
$result = \lib\Order::refund($refund_no, $trade_no, $money, 1);
|
||||||
|
if($result['code'] == 0){
|
||||||
|
$result['msg'] = '退款成功!退款金额¥'.$result['money'];
|
||||||
|
if($result['reducemoney']>0){
|
||||||
|
$result['msg'] .= ',并成功从UID:'.$result['uid'].'扣除'.$result['reducemoney'].'元余额';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'freeze': //冻结订单
|
||||||
|
$trade_no=trim($_POST['trade_no']);
|
||||||
|
$result = \lib\Order::freeze($trade_no);
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'unfreeze': //解冻订单
|
||||||
|
$trade_no=trim($_POST['trade_no']);
|
||||||
|
$result = \lib\Order::unfreeze($trade_no);
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'notify': //获取回调地址
|
||||||
|
$trade_no=trim($_POST['trade_no']);
|
||||||
|
$row=$DB->getRow("select * from pre_order where trade_no='$trade_no' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前订单不存在!"}');
|
||||||
|
$url=creat_callback($row);
|
||||||
|
if($row['notify']>0)
|
||||||
|
$DB->exec("update pre_order set notify=0,notifytime=NULL where trade_no='$trade_no'");
|
||||||
|
exit('{"code":0,"url":"'.($_POST['isreturn']==1?$url['return']:$url['notify']).'"}');
|
||||||
|
break;
|
||||||
|
case 'fillorder': //手动补单
|
||||||
|
$trade_no=trim($_POST['trade_no']);
|
||||||
|
$row=$DB->getRow("SELECT A.*,B.name typename,B.showname typeshowname FROM pre_order A left join pre_type B on A.type=B.id WHERE trade_no=:trade_no limit 1", [':trade_no'=>$trade_no]);
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前订单不存在!"}');
|
||||||
|
if($row['status']>0)exit('{"code":-1,"msg":"当前订单不是未完成状态!"}');
|
||||||
|
if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='$trade_no'")){
|
||||||
|
$DB->exec("update `pre_order` set `endtime` ='$date',`date` =NOW() where `trade_no`='$trade_no'");
|
||||||
|
$channel=\lib\Channel::get($row['channel']);
|
||||||
|
processOrder($row);
|
||||||
|
}
|
||||||
|
exit('{"code":0,"msg":"补单成功"}');
|
||||||
|
break;
|
||||||
|
case 'alipaydSettle': //支付宝直付通确认结算
|
||||||
|
$trade_no=trim($_POST['trade_no']);
|
||||||
|
$row=$DB->getRow("select * from pre_order where trade_no='$trade_no' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前订单不存在!"}');
|
||||||
|
if($row['status']==0)exit('{"code":-1,"msg":"当前订单状态是未支付"}');
|
||||||
|
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]));
|
||||||
|
if(!$channel){
|
||||||
|
exit('{"code":-1,"msg":"当前支付通道信息不存在"}');
|
||||||
|
}
|
||||||
|
try{
|
||||||
|
if($channel['plugin'] == 'alipayd'){
|
||||||
|
\lib\Payment::alipaydSettle($channel, $row);
|
||||||
|
}elseif($channel['plugin'] == 'wxpaynp'){
|
||||||
|
\lib\Payment::wxpaynpSettle($channel, $row);
|
||||||
|
}else{
|
||||||
|
exit('{"code":-1,"msg":"支付插件不支持该操作"}');
|
||||||
|
}
|
||||||
|
$DB->exec("update `pre_order` set `settle`=2 where `trade_no`='$trade_no'");
|
||||||
|
exit('{"code":0,"msg":"结算成功!"}');
|
||||||
|
}catch(Exception $e){
|
||||||
|
$DB->exec("update `pre_order` set `settle`=3 where `trade_no`='$trade_no'");
|
||||||
|
exit('{"code":-1,"msg":"结算失败,'.$e->getMessage().'"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'alipayPreAuthPay': //支付宝授权资金支付
|
||||||
|
$trade_no=trim($_POST['trade_no']);
|
||||||
|
$order=$DB->getRow("select * from pre_order where trade_no='$trade_no' limit 1");
|
||||||
|
if(!$order)
|
||||||
|
exit('{"code":-1,"msg":"当前订单不存在!"}');
|
||||||
|
$channel = $order['subchannel'] > 0 ? \lib\Channel::getSub($order['subchannel']) : \lib\Channel::get($order['channel'], $DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]));
|
||||||
|
if(!$channel){
|
||||||
|
exit('{"code":-1,"msg":"当前支付通道信息不存在"}');
|
||||||
|
}
|
||||||
|
try{
|
||||||
|
$result = \lib\Payment::alipayPreAuthPay($channel, $order);
|
||||||
|
|
||||||
|
$api_trade_no = $result['trade_no'];
|
||||||
|
$buyer_id = $result['buyer_user_id'];
|
||||||
|
$total_amount = $result['total_amount'];
|
||||||
|
processNotify($order, $api_trade_no, $buyer_id);
|
||||||
|
|
||||||
|
exit('{"code":0,"msg":"授权资金支付成功!"}');
|
||||||
|
}catch(Exception $e){
|
||||||
|
$errmsg = $e->getMessage();
|
||||||
|
exit('{"code":-1,"msg":"授权资金支付失败,'.$errmsg.'"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'alipayUnfreeze': //支付宝授权资金解冻
|
||||||
|
$trade_no=trim($_POST['trade_no']);
|
||||||
|
$order=$DB->getRow("select * from pre_order where trade_no='$trade_no' limit 1");
|
||||||
|
if(!$order)
|
||||||
|
exit('{"code":-1,"msg":"当前订单不存在!"}');
|
||||||
|
$channel = $order['subchannel'] > 0 ? \lib\Channel::getSub($order['subchannel']) : \lib\Channel::get($order['channel'], $DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]));
|
||||||
|
if(!$channel){
|
||||||
|
exit('{"code":-1,"msg":"当前支付通道信息不存在"}');
|
||||||
|
}
|
||||||
|
try{
|
||||||
|
\lib\Payment::alipayUnfreeze($channel, $order);
|
||||||
|
$DB->exec("update `pre_order` set `status`=0 where `trade_no`='$trade_no'");
|
||||||
|
exit('{"code":0,"msg":"授权资金解冻成功!"}');
|
||||||
|
}catch(Exception $e){
|
||||||
|
$errmsg = $e->getMessage();
|
||||||
|
exit('{"code":-1,"msg":"授权资金解冻失败,'.$errmsg.'"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'alipayRedPacketTansfer': //支付宝红包转账重试
|
||||||
|
$trade_no=trim($_POST['trade_no']);
|
||||||
|
$order=$DB->getRow("select * from pre_order where trade_no='$trade_no' limit 1");
|
||||||
|
if(!$order)
|
||||||
|
exit('{"code":-1,"msg":"当前订单不存在!"}');
|
||||||
|
$channel = $order['subchannel'] > 0 ? \lib\Channel::getSub($order['subchannel']) : \lib\Channel::get($order['channel'], $DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]));
|
||||||
|
if(!$channel){
|
||||||
|
exit('{"code":-1,"msg":"当前支付通道信息不存在"}');
|
||||||
|
}
|
||||||
|
if(!empty($channel['appmchid'])) $payee_user_id = $channel['appmchid'];
|
||||||
|
else $payee_user_id = $DB->findColumn('user', 'alipay_uid', ['uid'=>$order['uid']]);
|
||||||
|
if(!$payee_user_id) exit('{"code":-1,"msg":"当前商户未绑定支付宝账号"}');
|
||||||
|
try{
|
||||||
|
\lib\Payment::alipayRedPacketTransfer($channel, $payee_user_id, $order['money'], $order['api_trade_no']);
|
||||||
|
$DB->exec("update `pre_order` set `settle`=2 where `trade_no`='$trade_no'");
|
||||||
|
exit('{"code":0,"msg":"红包打款成功!"}');
|
||||||
|
}catch(Exception $e){
|
||||||
|
$errmsg = $e->getMessage();
|
||||||
|
exit('{"code":-1,"msg":"红包打款失败,'.$errmsg.'"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
exit('{"code":-4,"msg":"No Act"}');
|
||||||
|
break;
|
||||||
|
}
|
||||||
@@ -0,0 +1,720 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
|
||||||
|
|
||||||
|
if(!checkRefererHost())exit('{"code":403}');
|
||||||
|
|
||||||
|
@header('Content-Type: application/json; charset=UTF-8');
|
||||||
|
|
||||||
|
switch($act){
|
||||||
|
case 'channelList':
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(isset($_POST['id']) && !empty($_POST['id'])) {
|
||||||
|
$id = intval($_POST['id']);
|
||||||
|
$sql.=" AND A.`id`='$id'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['type']) && !empty($_POST['type'])) {
|
||||||
|
$type = intval($_POST['type']);
|
||||||
|
$sql.=" AND A.`type`='$type'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['plugin']) && !empty($_POST['plugin'])) {
|
||||||
|
$plugin = trim($_POST['plugin']);
|
||||||
|
$sql.=" AND A.`plugin`='$plugin'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
|
||||||
|
$dstatus = intval($_POST['dstatus']);
|
||||||
|
$sql.=" AND A.`status`={$dstatus}";
|
||||||
|
}
|
||||||
|
if(isset($_POST['kw']) && !empty($_POST['kw'])) {
|
||||||
|
$kw = trim(daddslashes($_POST['kw']));
|
||||||
|
$sql.=" AND (A.`id`='{$kw}' OR A.`name` like '%{$kw}%')";
|
||||||
|
}
|
||||||
|
$list = $DB->getAll("SELECT A.*,B.name typename,B.showname typeshowname FROM pre_channel A LEFT JOIN pre_type B ON A.type=B.id WHERE{$sql} ORDER BY id DESC");
|
||||||
|
exit(json_encode($list));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'getPayType':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("select * from pre_type where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前支付方式不存在!"}');
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'setPayType':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$status=intval($_GET['status']);
|
||||||
|
$row=$DB->getRow("select * from pre_type where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前支付方式不存在!"}');
|
||||||
|
$sql = "UPDATE pre_type SET status='$status' WHERE id='$id'";
|
||||||
|
if($DB->exec($sql))exit('{"code":0,"msg":"修改支付方式成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改支付方式失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'delPayType':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("select * from pre_type where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前支付方式不存在!"}');
|
||||||
|
$row=$DB->getRow("select * from pre_channel where type='$id' limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"删除失败,存在使用该支付方式的支付通道"}');
|
||||||
|
$sql = "DELETE FROM pre_type WHERE id='$id'";
|
||||||
|
if($DB->exec($sql))exit('{"code":0,"msg":"删除支付方式成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"删除支付方式失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'savePayType':
|
||||||
|
if($_POST['action'] == 'add'){
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$showname=trim($_POST['showname']);
|
||||||
|
$device=intval($_POST['device']);
|
||||||
|
if(!preg_match('/^[a-zA-Z0-9]+$/',$name)){
|
||||||
|
exit('{"code":-1,"msg":"调用值不符合规则"}');
|
||||||
|
}
|
||||||
|
$row=$DB->getRow("select * from pre_type where name='$name' and device='$device' limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"同一个调用值+支持设备不能重复"}');
|
||||||
|
$data = ['name'=>$name, 'showname'=>$showname, 'device'=>$device, 'status'=>1];
|
||||||
|
if($DB->insert('type', $data))exit('{"code":0,"msg":"新增支付方式成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"新增支付方式失败['.$DB->error().']"}');
|
||||||
|
}else{
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$showname=trim($_POST['showname']);
|
||||||
|
$device=intval($_POST['device']);
|
||||||
|
if(!preg_match('/^[a-zA-Z0-9]+$/',$name)){
|
||||||
|
exit('{"code":-1,"msg":"调用值不符合规则"}');
|
||||||
|
}
|
||||||
|
$row=$DB->getRow("select * from pre_type where name='$name' and device='$device' and id<>$id limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"同一个调用值+支持设备不能重复"}');
|
||||||
|
$data = ['name'=>$name, 'showname'=>$showname, 'device'=>$device];
|
||||||
|
if($DB->update('type', $data, ['id'=>$id])!==false)exit('{"code":0,"msg":"修改支付方式成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改支付方式失败['.$DB->error().']"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'getPlugin':
|
||||||
|
$name = trim($_GET['name']);
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_plugin WHERE name='$name'");
|
||||||
|
if($row){
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
|
||||||
|
exit(json_encode($result));
|
||||||
|
}
|
||||||
|
else exit('{"code":-1,"msg":"当前支付插件不存在!"}');
|
||||||
|
break;
|
||||||
|
case 'getPlugins':
|
||||||
|
$typeid = intval($_GET['typeid']);
|
||||||
|
$type=$DB->getColumn("SELECT name FROM pre_type WHERE id='$typeid'");
|
||||||
|
if(!$type)
|
||||||
|
exit('{"code":-1,"msg":"当前支付方式不存在!"}');
|
||||||
|
$list=$DB->getAll("SELECT name,showname FROM pre_plugin WHERE types LIKE '%$type%' ORDER BY name ASC");
|
||||||
|
if($list){
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','data'=>$list];
|
||||||
|
exit(json_encode($result));
|
||||||
|
}
|
||||||
|
else exit('{"code":-1,"msg":"没有找到支持该支付方式的插件"}');
|
||||||
|
break;
|
||||||
|
case 'getChannel':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='$id'");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前支付通道不存在!"}');
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'getChannels':
|
||||||
|
$typeid = intval($_GET['typeid']);
|
||||||
|
$type=$DB->getColumn("SELECT name FROM pre_type WHERE id='$typeid'");
|
||||||
|
if(!$type)
|
||||||
|
exit('{"code":-1,"msg":"当前支付方式不存在!"}');
|
||||||
|
$list=$DB->getAll("SELECT id,name FROM pre_channel WHERE type='$typeid' and status=1 ORDER BY id ASC");
|
||||||
|
if($list){
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','data'=>$list];
|
||||||
|
exit(json_encode($result));
|
||||||
|
}
|
||||||
|
else exit('{"code":-1,"msg":"没有找到支持该支付方式的通道"}');
|
||||||
|
break;
|
||||||
|
case 'getChannelsByPlugin':
|
||||||
|
$plugin = $_GET['plugin'];
|
||||||
|
if($plugin){
|
||||||
|
$list=$DB->getAll("SELECT id,name FROM pre_channel WHERE plugin='$plugin' ORDER BY id ASC");
|
||||||
|
}else{
|
||||||
|
$list=$DB->getAll("SELECT id,name FROM pre_channel ORDER BY id ASC");
|
||||||
|
}
|
||||||
|
if($list){
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','data'=>$list];
|
||||||
|
exit(json_encode($result));
|
||||||
|
}
|
||||||
|
else exit('{"code":-1,"msg":"没有找到支持该支付插件的通道"}');
|
||||||
|
break;
|
||||||
|
case 'getSubChannels':
|
||||||
|
$channel = intval($_GET['channel']);
|
||||||
|
$uid = intval($_GET['uid']);
|
||||||
|
$sql = " channel='$channel'";
|
||||||
|
if($uid > 0) $sql .= " AND uid='$uid'";
|
||||||
|
$list=$DB->getAll("SELECT id,name,channel,apply_id FROM pre_subchannel WHERE{$sql} ORDER BY id ASC");
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','data'=>$list];
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'setChannel':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$status=intval($_GET['status']);
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='$id'");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前支付通道不存在!"}');
|
||||||
|
if($status==1 && empty($row['config'])){
|
||||||
|
exit('{"code":-1,"msg":"请先配置好密钥后再开启"}');
|
||||||
|
}
|
||||||
|
$sql = "UPDATE pre_channel SET status='$status' WHERE id='$id'";
|
||||||
|
if($DB->exec($sql))exit('{"code":0,"msg":"修改支付通道成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改支付通道失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'delChannel':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='$id'");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前支付通道不存在!"}');
|
||||||
|
if($DB->find('psreceiver', '*', ['channel'=>$id])){
|
||||||
|
exit('{"code":-1,"msg":"当前支付通道下有分账规则,需要先删除"}');
|
||||||
|
}
|
||||||
|
if($DB->find('applychannel', '*', ['channel'=>$id])){
|
||||||
|
exit('{"code":-1,"msg":"当前支付通道关联了进件渠道,无法删除"}');
|
||||||
|
}
|
||||||
|
$sql = "DELETE FROM pre_channel WHERE id='$id'";
|
||||||
|
if($DB->exec($sql)){
|
||||||
|
$DB->exec("DELETE FROM pre_subchannel WHERE channel='$id'");
|
||||||
|
exit('{"code":0,"msg":"删除支付通道成功!"}');
|
||||||
|
}
|
||||||
|
else exit('{"code":-1,"msg":"删除支付通道失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'saveChannel':
|
||||||
|
if($_POST['action'] == 'add'){
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$rate=trim($_POST['rate']);
|
||||||
|
$costrate=trim($_POST['costrate']);
|
||||||
|
$type=intval($_POST['type']);
|
||||||
|
$plugin=trim($_POST['plugin']);
|
||||||
|
$daytop=intval($_POST['daytop']);
|
||||||
|
$mode=intval($_POST['mode']);
|
||||||
|
$paymin=trim($_POST['paymin']);
|
||||||
|
$paymax=trim($_POST['paymax']);
|
||||||
|
if(!preg_match('/^[0-9.]+$/',$rate)){
|
||||||
|
exit('{"code":-1,"msg":"分成比例不符合规则"}');
|
||||||
|
}
|
||||||
|
if(!empty($costrate) && !preg_match('/^[0-9.]+$/',$costrate)){
|
||||||
|
exit('{"code":-1,"msg":"通道成本不符合规则"}');
|
||||||
|
}
|
||||||
|
if($paymin && !preg_match('/^[0-9.]+$/',$paymin)){
|
||||||
|
exit('{"code":-1,"msg":"最小支付金额不符合规则"}');
|
||||||
|
}
|
||||||
|
if($paymax && !preg_match('/^[0-9.]+$/',$paymax)){
|
||||||
|
exit('{"code":-1,"msg":"最大支付金额不符合规则"}');
|
||||||
|
}
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_channel WHERE name='$name' LIMIT 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"支付通道名称重复"}');
|
||||||
|
$data = ['name'=>$name, 'rate'=>$rate, 'costrate'=>$costrate, 'mode'=>$mode, 'type'=>$type, 'plugin'=>$plugin, 'daytop'=>$daytop, 'paymin'=>$paymin, 'paymax'=>$paymax];
|
||||||
|
if($DB->insert('channel', $data))exit('{"code":0,"msg":"新增支付通道成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"新增支付通道失败['.$DB->error().']"}');
|
||||||
|
}elseif($_POST['action'] == 'copy'){
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='$id'");
|
||||||
|
if(!$row) exit('{"code":-1,"msg":"当前支付通道不存在!"}');
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$rate=trim($_POST['rate']);
|
||||||
|
$costrate=trim($_POST['costrate']);
|
||||||
|
$type=intval($_POST['type']);
|
||||||
|
$plugin=trim($_POST['plugin']);
|
||||||
|
$daytop=intval($_POST['daytop']);
|
||||||
|
$mode=intval($_POST['mode']);
|
||||||
|
$paymin=trim($_POST['paymin']);
|
||||||
|
$paymax=trim($_POST['paymax']);
|
||||||
|
if(!preg_match('/^[0-9.]+$/',$rate)){
|
||||||
|
exit('{"code":-1,"msg":"分成比例不符合规则"}');
|
||||||
|
}
|
||||||
|
if(!empty($costrate) && !preg_match('/^[0-9.]+$/',$costrate)){
|
||||||
|
exit('{"code":-1,"msg":"通道成本不符合规则"}');
|
||||||
|
}
|
||||||
|
if($paymin && !preg_match('/^[0-9.]+$/',$paymin)){
|
||||||
|
exit('{"code":-1,"msg":"最小支付金额不符合规则"}');
|
||||||
|
}
|
||||||
|
if($paymax && !preg_match('/^[0-9.]+$/',$paymax)){
|
||||||
|
exit('{"code":-1,"msg":"最大支付金额不符合规则"}');
|
||||||
|
}
|
||||||
|
$nrow=$DB->getRow("SELECT * FROM pre_channel WHERE name='$name' LIMIT 1");
|
||||||
|
if($nrow)
|
||||||
|
exit('{"code":-1,"msg":"支付通道名称重复"}');
|
||||||
|
$data = ['name'=>$name, 'rate'=>$rate, 'costrate'=>$costrate, 'mode'=>$mode, 'type'=>$type, 'plugin'=>$plugin, 'daytop'=>$daytop, 'paymin'=>$paymin, 'paymax'=>$paymax, 'config'=>$row['config'], 'apptype'=>$row['apptype'], 'appwxmp'=>$row['appwxmp'], 'appwxa'=>$row['appwxa']];
|
||||||
|
if($DB->insert('channel', $data))exit('{"code":0,"msg":"复制支付通道成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"复制支付通道失败['.$DB->error().']"}');
|
||||||
|
}elseif($_POST['action'] == 'edit'){
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='$id'");
|
||||||
|
if(!$row) exit('{"code":-1,"msg":"当前支付通道不存在!"}');
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$rate=trim($_POST['rate']);
|
||||||
|
$costrate=trim($_POST['costrate']);
|
||||||
|
$type=intval($_POST['type']);
|
||||||
|
$plugin=trim($_POST['plugin']);
|
||||||
|
$daytop=intval($_POST['daytop']);
|
||||||
|
$mode=intval($_POST['mode']);
|
||||||
|
$paymin=trim($_POST['paymin']);
|
||||||
|
$paymax=trim($_POST['paymax']);
|
||||||
|
if(!preg_match('/^[0-9.]+$/',$rate)){
|
||||||
|
exit('{"code":-1,"msg":"分成比例不符合规则"}');
|
||||||
|
}
|
||||||
|
if(!empty($costrate) && !preg_match('/^[0-9.]+$/',$costrate)){
|
||||||
|
exit('{"code":-1,"msg":"通道成本不符合规则"}');
|
||||||
|
}
|
||||||
|
if($paymin && !preg_match('/^[0-9.]+$/',$paymin)){
|
||||||
|
exit('{"code":-1,"msg":"最小支付金额不符合规则"}');
|
||||||
|
}
|
||||||
|
if($paymax && !preg_match('/^[0-9.]+$/',$paymax)){
|
||||||
|
exit('{"code":-1,"msg":"最大支付金额不符合规则"}');
|
||||||
|
}
|
||||||
|
$nrow=$DB->getRow("SELECT * FROM pre_channel WHERE name='$name' AND id<>$id LIMIT 1");
|
||||||
|
if($nrow)
|
||||||
|
exit('{"code":-1,"msg":"支付通道名称重复"}');
|
||||||
|
$data = ['name'=>$name, 'rate'=>$rate, 'costrate'=>$costrate, 'mode'=>$mode, 'type'=>$type, 'plugin'=>$plugin, 'daytop'=>$daytop, 'paymin'=>$paymin, 'paymax'=>$paymax];
|
||||||
|
if($DB->update('channel', $data, ['id'=>$id])!==false){
|
||||||
|
if($row['daystatus']==1 && ($daytop==0 || $daytop>$row['daytop'])){
|
||||||
|
$DB->exec("UPDATE pre_channel SET daystatus=0 WHERE id='$id'");
|
||||||
|
}
|
||||||
|
exit('{"code":0,"msg":"修改支付通道成功!"}');
|
||||||
|
}else exit('{"code":-1,"msg":"修改支付通道失败['.$DB->error().']"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'channelInfo':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='$id'");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前支付通道不存在!"}');
|
||||||
|
$typename = $DB->getColumn("SELECT name FROM pre_type WHERE id='{$row['type']}'");
|
||||||
|
//if($row['mode']>0){
|
||||||
|
// exit('{"code":-1,"msg":"当前通道为商户直清模式,请进入用户列表-编辑-接口密钥进行配置"}');
|
||||||
|
//}
|
||||||
|
$apptype = explode(',',$row['apptype']);
|
||||||
|
$plugin = \lib\Plugin::getConfig($row['plugin']);
|
||||||
|
if(!$plugin)
|
||||||
|
exit('{"code":-1,"msg":"当前支付插件不存在!"}');
|
||||||
|
|
||||||
|
$data = '<div class="modal-body"><form class="form" id="form-info">';
|
||||||
|
$select_list = [];
|
||||||
|
if(!empty($plugin['select_'.$typename])){
|
||||||
|
$select_list = $plugin['select_'.$typename];
|
||||||
|
}
|
||||||
|
elseif(!empty($plugin['select'])){
|
||||||
|
$select_list = $plugin['select'];
|
||||||
|
}
|
||||||
|
if(count($select_list) > 0){
|
||||||
|
$select = '';
|
||||||
|
foreach($select_list as $key=>$input){
|
||||||
|
$select .= '<label><input type="checkbox" '.(in_array($key,$apptype)?'checked':null).' name="apptype[]" value="'.$key.'">'.$input.'</label> ';
|
||||||
|
}
|
||||||
|
$data .= '<div class="form-group"><input type="hidden" id="isapptype" name="isapptype" value="1"/><label>请选择可用的接口:</label><div class="checkbox">'.$select.'</div></div>';
|
||||||
|
}
|
||||||
|
$config = json_decode($row['config'],true);
|
||||||
|
foreach($plugin['inputs'] as $key=>$input){
|
||||||
|
if($input['type'] == 'textarea'){
|
||||||
|
$data .= '<div class="form-group"><label>'.$input['name'].':</label><br/><textarea name="config['.$key.']" rows="2" class="form-control" placeholder="'.$input['note'].'">'.$config[$key].'</textarea></div>';
|
||||||
|
}elseif($input['type'] == 'select'){
|
||||||
|
$addOptions = '';
|
||||||
|
foreach($input['options'] as $k=>$v){
|
||||||
|
$addOptions.='<option value="'.$k.'" '.($config[$key]==$k?'selected':'').'>'.$v.'</option>';
|
||||||
|
}
|
||||||
|
$data .= '<div class="form-group"><label>'.$input['name'].':</label><br/><select class="form-control" name="config['.$key.']" default="'.$config[$key].'">'.$addOptions.'</select></div>';
|
||||||
|
}elseif($input['type'] == 'checkbox'){
|
||||||
|
$checked = $config[$key] ?? [];
|
||||||
|
$addOptions = '';
|
||||||
|
foreach($input['options'] as $k=>$v){
|
||||||
|
$addOptions.='<label><input type="checkbox" '.(in_array($k,$checked)?'checked':null).' name="config['.$key.'][]" value="'.$k.'">'.$v.'</label> ';
|
||||||
|
}
|
||||||
|
$data .= '<div class="form-group"><label>'.$input['name'].':</label><div class="checkbox">'.$addOptions.'</div></div>';
|
||||||
|
}else{
|
||||||
|
$data .= '<div class="form-group"><label>'.$input['name'].':</label><br/><input type="text" name="config['.$key.']" value="'.$config[$key].'" class="form-control" placeholder="'.$input['note'].'"/></div>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($plugin['bindwxmp'] && $row['type']==2){
|
||||||
|
$wxmplist = $DB->getAll("SELECT * FROM pre_weixin WHERE type=0 ORDER BY id ASC");
|
||||||
|
$addOptions = '<option value="0">不绑定</option>';
|
||||||
|
foreach($wxmplist as $wxmp){
|
||||||
|
$addOptions.='<option value="'.$wxmp['id'].'" '.($row['appwxmp']==$wxmp['id']?'selected':'').'>'.$wxmp['name'].'('.$wxmp['appid'].')'.'</option>';
|
||||||
|
}
|
||||||
|
$data .= '<div class="form-group"><label>绑定微信公众号:</label><br/><select class="form-control" name="appwxmp" default="'.$row[$key].'">'.$addOptions.'</select></div>';
|
||||||
|
}
|
||||||
|
if($plugin['bindwxa'] && $row['type']==2){
|
||||||
|
$wxalist = $DB->getAll("SELECT * FROM pre_weixin WHERE type=1 ORDER BY id ASC");
|
||||||
|
$addOptions = '<option value="0">不绑定</option>';
|
||||||
|
foreach($wxalist as $wxa){
|
||||||
|
$addOptions.='<option value="'.$wxa['id'].'" '.($row['appwxa']==$wxa['id']?'selected':'').'>'.$wxa['name'].'('.$wxa['appid'].')'.'</option>';
|
||||||
|
}
|
||||||
|
$data .= '<div class="form-group"><label>绑定微信小程序:</label><br/><select class="form-control" name="appwxa" default="'.$row[$key].'">'.$addOptions.'</select></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$note = str_replace(['[siteurl]','[channel]','[basedir]'],[$siteurl,$id,ROOT],$plugin['note']);
|
||||||
|
|
||||||
|
$data .= '<button type="button" id="save" onclick="saveInfo('.$id.')" class="btn btn-primary btn-block">保存</button></form><br/><font color="green">'.$note.'</font></div>';
|
||||||
|
$result=array("code"=>0,"msg"=>"succ","data"=>$data);
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'saveChannelInfo':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$config=isset($_POST['config'])?$_POST['config']:null;
|
||||||
|
$appwxmp=isset($_POST['appwxmp'])?intval($_POST['appwxmp']):null;
|
||||||
|
$appwxa=isset($_POST['appwxa'])?intval($_POST['appwxa']):null;
|
||||||
|
if(isset($_POST['isapptype'])){
|
||||||
|
if(!isset($_POST['apptype']) || count($_POST['apptype'])<=0)exit('{"code":-1,"msg":"请至少选择一个可用的支付接口"}');
|
||||||
|
$apptype=implode(',',$_POST['apptype']);
|
||||||
|
}else{
|
||||||
|
$apptype=null;
|
||||||
|
}
|
||||||
|
if(empty($config)) exit('{"code":-1,"msg":"填写的内容不能为空"}');
|
||||||
|
$config = json_encode($config);
|
||||||
|
$data = ['config'=>$config, 'apptype'=>$apptype, 'appwxmp'=>$appwxmp, 'appwxa'=>$appwxa];
|
||||||
|
if($DB->update('channel', $data, ['id'=>$id])!==false)exit('{"code":0,"msg":"修改支付密钥成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改支付密钥失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'getRoll':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("select * from pre_roll where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前轮询组不存在!"}');
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'setRoll':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$status=intval($_GET['status']);
|
||||||
|
$row=$DB->getRow("select * from pre_roll where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前轮询组不存在!"}');
|
||||||
|
if($status==1 && empty($row['info'])){
|
||||||
|
exit('{"code":-1,"msg":"请先配置好支付通道后再开启"}');
|
||||||
|
}
|
||||||
|
$sql = "UPDATE pre_roll SET status='$status' WHERE id='$id'";
|
||||||
|
if($DB->exec($sql))exit('{"code":0,"msg":"修改轮询组成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改轮询组失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'delRoll':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("select * from pre_roll where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前轮询组不存在!"}');
|
||||||
|
$sql = "DELETE FROM pre_roll WHERE id='$id'";
|
||||||
|
if($DB->exec($sql))exit('{"code":0,"msg":"删除轮询组成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"删除轮询组失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'saveRoll':
|
||||||
|
if($_POST['action'] == 'add'){
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$type=intval($_POST['type']);
|
||||||
|
$kind=intval($_POST['kind']);
|
||||||
|
$row=$DB->getRow("select * from pre_roll where name='$name' limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"轮询组名称重复"}');
|
||||||
|
$sql = "INSERT INTO pre_roll (name, type, kind) VALUES ('{$name}', {$type}, {$kind})";
|
||||||
|
if($DB->exec($sql))exit('{"code":0,"msg":"新增轮询组成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"新增轮询组失败['.$DB->error().']"}');
|
||||||
|
}else{
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$type=intval($_POST['type']);
|
||||||
|
$kind=intval($_POST['kind']);
|
||||||
|
$row=$DB->getRow("select * from pre_roll where name='$name' and id<>$id limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"轮询组名称重复"}');
|
||||||
|
$sql = "UPDATE pre_roll SET name='{$name}',type='{$type}',kind='{$kind}' WHERE id='$id'";
|
||||||
|
if($DB->exec($sql)!==false)exit('{"code":0,"msg":"修改轮询组成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改轮询组失败['.$DB->error().']"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'rollInfo':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("select * from pre_roll where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前轮询组不存在!"}');
|
||||||
|
$list=$DB->getAll("select id,name from pre_channel where type='{$row['type']}' and status=1 ORDER BY id ASC");
|
||||||
|
if(!$list)exit('{"code":-1,"msg":"没有找到支持该支付方式的通道"}');
|
||||||
|
if(!empty($row['info'])){
|
||||||
|
$arr = explode(',',$row['info']);
|
||||||
|
$info = [];
|
||||||
|
foreach($arr as $item){
|
||||||
|
$a = explode(':',$item);
|
||||||
|
$info[] = ['channel'=>$a[0], 'weight'=>$a[1]?$a[1]:1];
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$info = null;
|
||||||
|
}
|
||||||
|
$result=array("code"=>0,"msg"=>"succ","channels"=>$list,"info"=>$info);
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'saveRollInfo':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("select * from pre_roll where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前轮询组不存在!"}');
|
||||||
|
$list=$_POST['list'];
|
||||||
|
if(empty($list))
|
||||||
|
exit('{"code":-1,"msg":"通道配置不能为空!"}');
|
||||||
|
$info = '';
|
||||||
|
foreach($list as $a){
|
||||||
|
$info .= $row['kind']==1 ? $a['channel'].':'.$a['weight'].',' : $a['channel'].',';
|
||||||
|
}
|
||||||
|
$info = trim($info,',');
|
||||||
|
if(empty($info))
|
||||||
|
exit('{"code":-1,"msg":"通道配置不能为空!"}');
|
||||||
|
$sql = "UPDATE pre_roll SET info='{$info}' WHERE id='$id'";
|
||||||
|
if($DB->exec($sql)!==false)exit('{"code":0,"msg":"修改轮询组成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改轮询组失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'getChannelMoney': //统计支付通道金额
|
||||||
|
$type=intval($_GET['type']);
|
||||||
|
$channel=intval($_GET['channel']);
|
||||||
|
$today=$type==1 ? date("Y-m-d", strtotime("-1 day")) : date("Y-m-d");
|
||||||
|
$money=$DB->getColumn("SELECT SUM(realmoney) FROM pre_order WHERE date='$today' AND channel='$channel' AND status>0");
|
||||||
|
exit('{"code":0,"msg":"succ","money":"'.round($money,2).'"}');
|
||||||
|
break;
|
||||||
|
case 'getSubChannelMoney': //统计子通道金额
|
||||||
|
$type=intval($_GET['type']);
|
||||||
|
$channel=trim($_GET['channel']);
|
||||||
|
$today=$type==1 ? date("Y-m-d", strtotime("-1 day")) : date("Y-m-d");
|
||||||
|
$channel = explode('|', $channel);
|
||||||
|
$channel = array_map('intval', $channel);
|
||||||
|
$money=$DB->getColumn("SELECT SUM(realmoney) FROM pre_order WHERE date='$today' AND subchannel IN (".implode(",", $channel).") AND status>0");
|
||||||
|
exit('{"code":0,"msg":"succ","money":"'.round($money,2).'"}');
|
||||||
|
break;
|
||||||
|
case 'getTypeMoney': //统计支付方式金额
|
||||||
|
$type=intval($_GET['type']);
|
||||||
|
$typeid=intval($_GET['typeid']);
|
||||||
|
$today=$type==1 ? date("Y-m-d", strtotime("-1 day")) : date("Y-m-d");
|
||||||
|
$money=$DB->getColumn("SELECT SUM(realmoney) FROM pre_order WHERE date='$today' AND type='$typeid' AND status>0");
|
||||||
|
exit('{"code":0,"msg":"succ","money":"'.round($money,2).'"}');
|
||||||
|
break;
|
||||||
|
case 'getChannelRate':
|
||||||
|
$channel=intval($_GET['channel']);
|
||||||
|
$thtime = date("Y-m-d").' 00:00:00';
|
||||||
|
$all = 0;
|
||||||
|
$success = 0;
|
||||||
|
$orders=$DB->getAll("SELECT * FROM pre_order WHERE addtime>='$thtime' AND channel='$channel'");
|
||||||
|
foreach($orders as $order){
|
||||||
|
$all++;
|
||||||
|
if($order['status']>0)$success++;
|
||||||
|
}
|
||||||
|
$rate = $all > 0 ? round($success*100/$all, 2) : 0;
|
||||||
|
exit('{"code":0,"msg":"succ","rate":"'.$rate.'"}');
|
||||||
|
break;
|
||||||
|
case 'getSuccessRate':
|
||||||
|
$channel = intval($_GET['channel']);
|
||||||
|
$thtime = date("Y-m-d");
|
||||||
|
$orderrow=$DB->getRow("SELECT COUNT(*) allnum,COUNT(IF(status>0, 1, NULL)) sucnum FROM pre_order WHERE addtime>='$thtime' AND channel='$channel'");
|
||||||
|
$success_rate = $orderrow && $orderrow['allnum'] > 0 ? round($orderrow['sucnum']/$orderrow['allnum']*100,2) : 100;
|
||||||
|
exit('{"code":0,"msg":"succ","data":"' . $success_rate . '"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'testpay':
|
||||||
|
$channel=intval($_POST['channel']);
|
||||||
|
$subchannel=intval($_POST['subchannel']);
|
||||||
|
$row=$DB->getRow("select * from pre_channel where id='$channel' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前支付通道不存在!"}');
|
||||||
|
if($subchannel > 0){
|
||||||
|
if(!$DB->getRow("select * from pre_subchannel where id='$subchannel' limit 1")) exit('{"code":-1,"msg":"当前子通道不存在!"}');
|
||||||
|
}
|
||||||
|
if(empty($row['config']))exit('{"code":-1,"msg":"请先配置好密钥"}');
|
||||||
|
if(!$conf['test_pay_uid'])exit('{"code":-1,"msg":"请先配置测试支付收款商户ID"}');
|
||||||
|
$money=trim(daddslashes($_POST['money']));
|
||||||
|
$name=trim(daddslashes($_POST['name']));
|
||||||
|
if($money<=0 || !is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))exit('{"code":-1,"msg":"金额不合法"}');
|
||||||
|
if($conf['pay_maxmoney']>0 && $money>$conf['pay_maxmoney'])exit('{"code":-1,"msg":"最大支付金额是'.$conf['pay_maxmoney'].'元"}');
|
||||||
|
if($conf['pay_minmoney']>0 && $money<$conf['pay_minmoney'])exit('{"code":-1,"msg":"最小支付金额是'.$conf['pay_minmoney'].'元"}');
|
||||||
|
$trade_no=date("YmdHis").rand(11111,99999);
|
||||||
|
$return_url=$siteurl.'user/test.php?ok=1&trade_no='.$trade_no;
|
||||||
|
$domain=getdomain($return_url);
|
||||||
|
if(!$DB->exec("INSERT INTO `pre_order` (`trade_no`,`out_trade_no`,`uid`,`tid`,`addtime`,`name`,`money`,`type`,`channel`,`subchannel`,`realmoney`,`getmoney`,`notify_url`,`return_url`,`domain`,`ip`,`status`) VALUES (:trade_no, :out_trade_no, :uid, 3, NOW(), :name, :money, :type, :channel, :subchannel, :realmoney, :getmoney, :notify_url, :return_url, :domain, :clientip, 0)", [':trade_no'=>$trade_no, ':out_trade_no'=>$trade_no, ':uid'=>$conf['test_pay_uid'], ':name'=>$name, ':money'=>$money, ':type'=>$row['type'], ':channel'=>$channel, ':subchannel'=>$subchannel, ':realmoney'=>$money, ':getmoney'=>$money, ':notify_url'=>$return_url, ':return_url'=>$return_url, ':domain'=>$domain, ':clientip'=>$clientip]))exit('{"code":-1,"msg":"创建订单失败,请返回重试!"}');
|
||||||
|
$result = ['code'=>0, 'msg'=>'succ', 'url'=>'./testsubmit.php?trade_no='.$trade_no];
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'getWeixin':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("select * from pre_weixin where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前公众号/小程序不存在!"}');
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'delWeixin':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("select * from pre_weixin where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前公众号/小程序不存在!"}');
|
||||||
|
$row=$DB->getRow("select * from pre_channel where appwxmp='$id' limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"删除失败,存在使用该微信公众号的支付通道"}');
|
||||||
|
$row=$DB->getRow("select * from pre_channel where appwxa='$id' limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"删除失败,存在使用该微信小程序的支付通道"}');
|
||||||
|
$sql = "DELETE FROM pre_weixin WHERE id='$id'";
|
||||||
|
if($DB->exec($sql)){
|
||||||
|
exit('{"code":0,"msg":"删除公众号/小程序成功!"}');
|
||||||
|
}else exit('{"code":-1,"msg":"删除公众号/小程序失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'saveWeixin':
|
||||||
|
if($_POST['action'] == 'add'){
|
||||||
|
$type=intval($_POST['type']);
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$appid=trim($_POST['appid']);
|
||||||
|
$appsecret=trim($_POST['appsecret']);
|
||||||
|
$row=$DB->getRow("select * from pre_weixin where name='$name' limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"名称重复"}');
|
||||||
|
$row=$DB->getRow("select * from pre_weixin where appid='$appid' limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"APPID重复"}');
|
||||||
|
if($DB->insert('weixin', ['type'=>$type, 'name'=>$name, 'appid'=>$appid, 'appsecret'=>$appsecret, 'status'=>1, 'addtime'=>'NOW()']))exit('{"code":0,"msg":"新增公众号/小程序成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"新增公众号/小程序失败['.$DB->error().']"}');
|
||||||
|
}else{
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$type=intval($_POST['type']);
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$appid=trim($_POST['appid']);
|
||||||
|
$appsecret=trim($_POST['appsecret']);
|
||||||
|
$row=$DB->getRow("select * from pre_weixin where name='$name' and id<>$id limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"名称重复"}');
|
||||||
|
$row=$DB->getRow("select * from pre_weixin where appid='$appid' and id<>$id limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"APPID重复"}');
|
||||||
|
if($DB->update('weixin', ['type'=>$type, 'name'=>$name, 'appid'=>$appid, 'appsecret'=>$appsecret], ['id'=>$id])!==false)exit('{"code":0,"msg":"修改公众号/小程序成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改公众号/小程序失败['.$DB->error().']"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'testweixin':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$row=$DB->getRow("select * from pre_weixin where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前公众号/小程序不存在!"}');
|
||||||
|
try{
|
||||||
|
$wechat = new \lib\wechat\WechatAPI($id);
|
||||||
|
$access_token = $wechat->getAccessToken(true);
|
||||||
|
}catch(Exception $e){
|
||||||
|
exit('{"code":-1,"msg":"'.$e->getMessage().'"}');
|
||||||
|
}
|
||||||
|
exit('{"code":0,"msg":"接口连接测试成功!"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'getWework':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("select * from pre_wework where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前企业微信不存在!"}');
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'setWework':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$status=intval($_GET['status']);
|
||||||
|
$row=$DB->getRow("select * from pre_wework where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前企业微信不存在!"}');
|
||||||
|
$sql = "UPDATE pre_wework SET status='$status' WHERE id='$id'";
|
||||||
|
if($DB->exec($sql))exit('{"code":0,"msg":"修改企业微信成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改企业微信失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'delWework':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("select * from pre_wework where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前企业微信不存在!"}');
|
||||||
|
if($DB->delete('wework', ['id'=>$id])){
|
||||||
|
$DB->delete('wxkfaccount', ['wid'=>$id]);
|
||||||
|
exit('{"code":0,"msg":"删除企业微信成功!"}');
|
||||||
|
}else exit('{"code":-1,"msg":"删除企业微信失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'saveWework':
|
||||||
|
if($_POST['action'] == 'add'){
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$appid=trim($_POST['appid']);
|
||||||
|
$appsecret=trim($_POST['appsecret']);
|
||||||
|
$row=$DB->getRow("select * from pre_wework where name='$name' limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"名称重复"}');
|
||||||
|
$row=$DB->getRow("select * from pre_wework where appid='$appid' limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"企业ID重复"}');
|
||||||
|
if($DB->insert('wework', ['name'=>$name, 'appid'=>$appid, 'appsecret'=>$appsecret, 'status'=>1, 'addtime'=>'NOW()']))exit('{"code":0,"msg":"新增企业微信成功!请点击刷新客服账号数量"}');
|
||||||
|
else exit('{"code":-1,"msg":"新增企业微信失败['.$DB->error().']"}');
|
||||||
|
}else{
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$appid=trim($_POST['appid']);
|
||||||
|
$appsecret=trim($_POST['appsecret']);
|
||||||
|
$row=$DB->getRow("select * from pre_wework where name='$name' and id<>$id limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"名称重复"}');
|
||||||
|
$row=$DB->getRow("select * from pre_wework where appid='$appid' and id<>$id limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"企业ID重复"}');
|
||||||
|
if($DB->update('wework', ['name'=>$name, 'appid'=>$appid, 'appsecret'=>$appsecret], ['id'=>$id])!==false)exit('{"code":0,"msg":"修改企业微信成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改企业微信失败['.$DB->error().']"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'refreshWework':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$row=$DB->getRow("select * from pre_wework where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前企业微信不存在!"}');
|
||||||
|
$wework = new \lib\wechat\WeWorkAPI($id);
|
||||||
|
try{
|
||||||
|
$account_list = $wework->getKFList();
|
||||||
|
if(count($account_list) == 0){
|
||||||
|
exit('{"code":-1,"msg":"没有添加客服账号"}');
|
||||||
|
}
|
||||||
|
$account_data = $DB->findAll('wxkfaccount', 'id,openkfid', ['wid'=>$id]);
|
||||||
|
foreach($account_list as $account){
|
||||||
|
$isExsist = false;
|
||||||
|
foreach($account_data as $find){
|
||||||
|
if($find['openkfid'] == $account['open_kfid']){
|
||||||
|
$isExsist = true;break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!$isExsist){
|
||||||
|
$DB->insert('wxkfaccount', ['wid'=>$id, 'openkfid'=>$account['open_kfid'], 'name'=>$account['name'], 'addtime'=>'NOW()']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach($account_data as $account){
|
||||||
|
$isExsist = false;
|
||||||
|
foreach($account_list as $find){
|
||||||
|
if($find['open_kfid'] == $account['openkfid']){
|
||||||
|
$isExsist = true;break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!$isExsist){
|
||||||
|
$DB->delete('wxkfaccount', ['id'=>$account['id']]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exit(json_encode(['code'=>0, 'msg'=>'成功获取到'.count($account_list).'个客服账号']));
|
||||||
|
}catch(Exception $e){
|
||||||
|
exit('{"code":-1,"msg":"'.$e->getMessage().'"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'testWework':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$row=$DB->getRow("select * from pre_wework where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前企业微信不存在!"}');
|
||||||
|
$wework = new \lib\wechat\WeWorkAPI($id);
|
||||||
|
try{
|
||||||
|
$access_token = $wework->getAccessToken(true);
|
||||||
|
}catch(Exception $e){
|
||||||
|
exit('{"code":-1,"msg":"'.$e->getMessage().'"}');
|
||||||
|
}
|
||||||
|
exit('{"code":0,"msg":"接口连接测试成功!"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
exit('{"code":-4,"msg":"No Act"}');
|
||||||
|
break;
|
||||||
|
}
|
||||||
@@ -0,0 +1,306 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
|
||||||
|
|
||||||
|
if(!checkRefererHost())exit('{"code":403}');
|
||||||
|
|
||||||
|
@header('Content-Type: application/json; charset=UTF-8');
|
||||||
|
|
||||||
|
switch($act){
|
||||||
|
|
||||||
|
case 'orderList':
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(isset($_POST['rid']) && !empty($_POST['rid'])) {
|
||||||
|
$rid = intval($_POST['rid']);
|
||||||
|
$sql.=" AND A.`rid`='$rid'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
|
||||||
|
$dstatus = intval($_POST['dstatus']);
|
||||||
|
$sql.=" AND A.`status`={$dstatus}";
|
||||||
|
}
|
||||||
|
if(!empty($_POST['starttime']) || !empty($_POST['endtime'])){
|
||||||
|
if(!empty($_POST['starttime'])){
|
||||||
|
$starttime = daddslashes($_POST['starttime']);
|
||||||
|
$sql.=" AND A.addtime>='{$starttime} 00:00:00'";
|
||||||
|
}
|
||||||
|
if(!empty($_POST['endtime'])){
|
||||||
|
$endtime = daddslashes($_POST['endtime']);
|
||||||
|
$sql.=" AND A.addtime<='{$endtime} 23:59:59'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isset($_POST['value']) && !empty($_POST['value'])) {
|
||||||
|
$sql.=" AND A.`{$_POST['column']}`='{$_POST['value']}'";
|
||||||
|
}
|
||||||
|
$offset = intval($_POST['offset']);
|
||||||
|
$limit = intval($_POST['limit']);
|
||||||
|
$total = $DB->getColumn("SELECT count(*) from pre_psorder A LEFT JOIN pre_psreceiver B ON A.rid=B.id LEFT JOIN pre_channel C ON B.channel=C.id WHERE{$sql}");
|
||||||
|
$list = $DB->getAll("SELECT A.*,C.id channelid,C.name channelname FROM pre_psorder A LEFT JOIN pre_psreceiver B ON A.rid=B.id LEFT JOIN pre_channel C ON B.channel=C.id WHERE{$sql} order by A.id desc limit $offset,$limit");
|
||||||
|
|
||||||
|
exit(json_encode(['total'=>$total, 'rows'=>$list]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'get_receiver':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->find('psreceiver', '*', ['id'=>$id]);
|
||||||
|
if(!$row) exit('{"code":-1,"msg":"当前分账规则不存在!"}');
|
||||||
|
exit(json_encode(['code'=>0, 'data'=>$row]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'add_receiver':
|
||||||
|
$data = [
|
||||||
|
'channel' => intval($_POST['channel']),
|
||||||
|
'uid' => !empty($_POST['uid'])?intval($_POST['uid']):null,
|
||||||
|
'subchannel' => !empty($_POST['subchannel']) ? intval($_POST['subchannel']) : null,
|
||||||
|
'account' => trim($_POST['account']),
|
||||||
|
'name' => trim($_POST['name']),
|
||||||
|
'rate' => !empty($_POST['rate'])?trim($_POST['rate']):'30',
|
||||||
|
'minmoney' => trim($_POST['minmoney']),
|
||||||
|
'status' => 0,
|
||||||
|
'addtime' => 'NOW()'
|
||||||
|
];
|
||||||
|
if(!$data['channel'] || !$data['account'])exit('{"code":-1,"msg":"必填项不能为空"}');
|
||||||
|
if(!empty($data['uid']) && !$DB->find('user', 'uid', ['uid'=>$data['uid']]))exit('{"code":-1,"msg":"商户ID不存在"}');
|
||||||
|
if(!\lib\Channel::get($data['channel']))exit('{"code":-1,"msg":"支付通道不存在"}');
|
||||||
|
if(!strpos($data['rate'], '|') && $data['rate'] > 100) exit('{"code":-1,"msg":"分账比例不能大于100"}');
|
||||||
|
$rows = $DB->getRow("SELECT * FROM `pre_psreceiver` WHERE `channel`='{$data['channel']}' AND ".($data['uid']?"`uid`='{$data['uid']}'":"`uid` IS NULL")."");
|
||||||
|
if($rows)exit('{"code":-1,"msg":"该支付通道&UID已存在分账规则,每次支付只能同时给1个人分账"}');
|
||||||
|
if($DB->insert('psreceiver', $data)){
|
||||||
|
exit('{"code":0,"msg":"新增分账规则成功!"}');
|
||||||
|
}else{
|
||||||
|
exit('{"code":-1,"msg":"新增分账规则失败['.$DB->error().']"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'edit_receiver':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$row=$DB->find('psreceiver', '*', ['id'=>$id]);
|
||||||
|
if(!$row) exit('{"code":-1,"msg":"当前分账规则不存在!"}');
|
||||||
|
$data = [
|
||||||
|
'channel' => intval($_POST['channel']),
|
||||||
|
'uid' => !empty($_POST['uid'])?intval($_POST['uid']):null,
|
||||||
|
'subchannel' => !empty($_POST['subchannel']) ? intval($_POST['subchannel']) : null,
|
||||||
|
'account' => trim($_POST['account']),
|
||||||
|
'name' => trim($_POST['name']),
|
||||||
|
'rate' => !empty($_POST['rate'])?trim($_POST['rate']):30,
|
||||||
|
'minmoney' => trim($_POST['minmoney']),
|
||||||
|
];
|
||||||
|
if(!$data['channel'] || !$data['account'])exit('{"code":-1,"msg":"必填项不能为空"}');
|
||||||
|
if(!empty($data['uid']) && !$DB->find('user', 'uid', ['uid'=>$data['uid']]))exit('{"code":-1,"msg":"商户ID不存在"}');
|
||||||
|
if(!\lib\Channel::get($data['channel']))exit('{"code":-1,"msg":"支付通道不存在"}');
|
||||||
|
if(!strpos($data['rate'], '|') && $data['rate'] > 100) exit('{"code":-1,"msg":"分账比例不能大于100"}');
|
||||||
|
$rows = $DB->getRow("SELECT * FROM `pre_psreceiver` WHERE `channel`='{$data['channel']}' AND ".($data['uid']?"`uid`='{$data['uid']}'":"`uid` IS NULL")." AND id!='$id'");
|
||||||
|
if($rows)exit('{"code":-1,"msg":"该支付通道&UID已存在分账规则,每次支付只能同时给1个人分账"}');
|
||||||
|
if($row['status']==1 && $data['channel'] != $row['channel']){
|
||||||
|
exit('{"code":-1,"msg":"请先将状态改为已关闭再切换通道"}');
|
||||||
|
}
|
||||||
|
if($row['status']==1 && ($data['account']!=$row['account'] || $data['name']!=$row['name'] || $data['channel']!=$row['channel'])){
|
||||||
|
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
|
||||||
|
if($channel){
|
||||||
|
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
|
||||||
|
$model->deleteReceiver($row['account'], $row['name']);
|
||||||
|
$result = $model->addReceiver($data['account'], $data['name']);
|
||||||
|
if($result['code'] != 0) exit(json_encode($result));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($DB->update('psreceiver', $data, ['id'=>$id])!==false){
|
||||||
|
exit('{"code":0,"msg":"修改分账规则成功!"}');
|
||||||
|
}else{
|
||||||
|
exit('{"code":-1,"msg":"修改分账规则失败['.$DB->error().']"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'set_receiver':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$status=intval($_POST['status']);
|
||||||
|
$row=$DB->find('psreceiver', '*', ['id'=>$id]);
|
||||||
|
if(!$row) exit('{"code":-1,"msg":"当前分账规则不存在!"}');
|
||||||
|
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
|
||||||
|
if(!$channel) exit('{"code":-1,"msg":"当前支付通道不存在!"}');
|
||||||
|
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
|
||||||
|
if($status == 1){
|
||||||
|
$result = $model->addReceiver($row['account'], $row['name']);
|
||||||
|
}elseif($status == 0){
|
||||||
|
$result = $model->deleteReceiver($row['account'], $row['name']);
|
||||||
|
}
|
||||||
|
if($result['code'] == 0 || $status == 0 && strpos($result['msg'],'分账接收方不存在')!==false){
|
||||||
|
$DB->update('psreceiver', ['status'=>$status], ['id'=>$id]);
|
||||||
|
exit('{"code":0,"msg":"状态修改成功!"}');
|
||||||
|
}else{
|
||||||
|
exit(json_encode($result));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'del_receiver':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$row=$DB->find('psreceiver', '*', ['id'=>$id]);
|
||||||
|
if(!$row) exit('{"code":-1,"msg":"当前分账规则不存在!"}');
|
||||||
|
if($row['status']==1){
|
||||||
|
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
|
||||||
|
if($channel){
|
||||||
|
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
|
||||||
|
$model->deleteReceiver($row['account'], $row['name']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($DB->delete('psreceiver', ['id'=>$id])){
|
||||||
|
exit('{"code":0,"msg":"删除分账规则成功!"}');
|
||||||
|
}else{
|
||||||
|
exit('{"code":-1,"msg":"删除分账规则失败['.$DB->error().']"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case 'submit':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$row = $DB->getRow("SELECT A.*,B.channel,B.account,B.name,B.uid psuid,C.uid,C.subchannel FROM pre_psorder A LEFT JOIN pre_psreceiver B ON A.rid=B.id LEFT JOIN pre_order C ON C.trade_no=A.trade_no WHERE A.id=:id", [':id'=>$id]);
|
||||||
|
if(!$row)exit('{"code":-1,"msg":"订单不存在"}');
|
||||||
|
if($row['status']!=0&&$row['status']!=3)exit('{"code":-1,"msg":"只有待分账的订单才能提交分账"}');
|
||||||
|
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
|
||||||
|
if(!$channel) exit('{"code":-1,"msg":"通道信息不存在"}');
|
||||||
|
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
|
||||||
|
$result = $model->submit($row['trade_no'], $row['api_trade_no'], $row['account'], $row['name'], $row['money']);
|
||||||
|
if($result['code'] == 0){
|
||||||
|
$DB->update('psorder', ['status'=>1,'settle_no'=>$result['settle_no']], ['id'=>$id]);
|
||||||
|
}elseif($result['code'] == 1){
|
||||||
|
$DB->update('psorder', ['status'=>2,'settle_no'=>$result['settle_no']], ['id'=>$id]);
|
||||||
|
if(!empty($row['psuid']) && $channel['mode']==0){
|
||||||
|
changeUserMoney($row['psuid'], $row['money'], false, '订单分账', $row['trade_no']);
|
||||||
|
}
|
||||||
|
}elseif($result['code'] == -2){
|
||||||
|
//$DB->update('psorder', ['status'=>3,'result'=>$result['msg']], ['id'=>$id]);
|
||||||
|
}
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'query':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$row = $DB->getRow("SELECT A.*,B.channel,B.account,B.name,B.uid psuid,C.uid,C.subchannel FROM pre_psorder A LEFT JOIN pre_psreceiver B ON A.rid=B.id LEFT JOIN pre_order C ON C.trade_no=A.trade_no WHERE A.id=:id", [':id'=>$id]);
|
||||||
|
if(!$row)exit('{"code":-1,"msg":"订单不存在"}');
|
||||||
|
if($row['status']!=1)exit('{"code":-1,"msg":"只有已提交的订单才能查询结果"}');
|
||||||
|
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
|
||||||
|
if(!$channel) exit('{"code":-1,"msg":"通道信息不存在"}');
|
||||||
|
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
|
||||||
|
$result = $model->query($row['trade_no'], $row['api_trade_no'], $row['settle_no']);
|
||||||
|
if($result['code']==0){
|
||||||
|
if($result['status']==1){
|
||||||
|
$DB->update('psorder', ['status'=>2], ['id'=>$id]);
|
||||||
|
if(!empty($row['psuid']) && $channel['mode']==0){
|
||||||
|
changeUserMoney($row['psuid'], $row['money'], false, '订单分账', $row['trade_no']);
|
||||||
|
}
|
||||||
|
}elseif($result['status']==2){
|
||||||
|
$DB->update('psorder', ['status'=>3,'result'=>$result['reason']], ['id'=>$id]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'unfreeeze':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$row = $DB->getRow("SELECT A.*,B.channel,B.account,B.name,C.uid,C.subchannel FROM pre_psorder A LEFT JOIN pre_psreceiver B ON A.rid=B.id LEFT JOIN pre_order C ON C.trade_no=A.trade_no WHERE A.id=:id", [':id'=>$id]);
|
||||||
|
if(!$row)exit('{"code":-1,"msg":"订单不存在"}');
|
||||||
|
if($row['status']==2)exit('{"code":-1,"msg":"只有待分账的订单才能取消分账"}');
|
||||||
|
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
|
||||||
|
if(!$channel) exit('{"code":-1,"msg":"通道信息不存在"}');
|
||||||
|
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
|
||||||
|
$result = $model->unfreeeze($row['trade_no'], $row['api_trade_no']);
|
||||||
|
if($result['code'] == 0){
|
||||||
|
$DB->update('psorder', ['status'=>4], ['id'=>$id]);
|
||||||
|
}
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'return':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$row = $DB->getRow("SELECT A.*,B.channel,B.account,B.name,C.uid,C.subchannel FROM pre_psorder A LEFT JOIN pre_psreceiver B ON A.rid=B.id LEFT JOIN pre_order C ON C.trade_no=A.trade_no WHERE A.id=:id", [':id'=>$id]);
|
||||||
|
if(!$row)exit('{"code":-1,"msg":"订单不存在"}');
|
||||||
|
if($row['status']!=2)exit('{"code":-1,"msg":"只有分账成功的订单才能回退"}');
|
||||||
|
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
|
||||||
|
if(!$channel) exit('{"code":-1,"msg":"通道信息不存在"}');
|
||||||
|
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
|
||||||
|
$result = $model->return($row['trade_no'], $row['api_trade_no'], $row['account'], $row['money']);
|
||||||
|
if($result['code'] == 0){
|
||||||
|
$DB->update('psorder', ['status'=>4], ['id'=>$id]);
|
||||||
|
}
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'editmoney':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$money=trim($_POST['money']);
|
||||||
|
if(!is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))exit('{"code":-1,"msg":"金额输入错误"}');
|
||||||
|
$row = $DB->getRow("SELECT * FROM pre_psorder WHERE id=:id", [':id'=>$id]);
|
||||||
|
if(!$row)exit('{"code":-1,"msg":"订单不存在"}');
|
||||||
|
if($row['status']!=0)exit('{"code":-1,"msg":"只有待分账的订单才能修改金额"}');
|
||||||
|
$DB->update('psorder', ['money'=>$money], ['id'=>$id]);
|
||||||
|
exit('{"code":0,"msg":"succ"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'operation': //批量操作订单
|
||||||
|
$status=is_numeric($_POST['status'])?intval($_POST['status']):exit('{"code":-1,"msg":"请选择操作"}');
|
||||||
|
$checkbox=$_POST['checkbox'];
|
||||||
|
$i=0;
|
||||||
|
foreach($checkbox as $id){
|
||||||
|
if($status==5)$DB->exec("DELETE FROM pre_psorder WHERE id='$id'");
|
||||||
|
else $DB->exec("update pre_psorder set status='$status' where id='$id' limit 1");
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
exit('{"code":0,"msg":"成功改变'.$i.'条订单状态"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'statistics':
|
||||||
|
$sql = " 1=1";
|
||||||
|
if(isset($_POST['rid']) && !empty($_POST['rid'])) {
|
||||||
|
$rid = intval($_POST['rid']);
|
||||||
|
$sql .= " AND rid='$rid'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
|
||||||
|
$dstatus = intval($_POST['dstatus']);
|
||||||
|
$sql .= " AND status={$dstatus}";
|
||||||
|
}
|
||||||
|
if(!empty($_POST['starttime']) || !empty($_POST['endtime'])){
|
||||||
|
if(!empty($_POST['starttime'])){
|
||||||
|
$starttime = daddslashes($_POST['starttime']);
|
||||||
|
$sql .= " AND addtime>='{$starttime} 00:00:00'";
|
||||||
|
}
|
||||||
|
if(!empty($_POST['endtime'])){
|
||||||
|
$endtime = daddslashes($_POST['endtime']);
|
||||||
|
$sql .= " AND addtime<='{$endtime} 23:59:59'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isset($_POST['value']) && !empty($_POST['value'])) {
|
||||||
|
$column = daddslashes($_POST['column']);
|
||||||
|
if($column == 'money'){
|
||||||
|
$sql .= " AND {$column}='".floatval($_POST['value'])."'";
|
||||||
|
}else{
|
||||||
|
$sql .= " AND {$column}='".daddslashes($_POST['value'])."'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $DB->getRow("SELECT
|
||||||
|
SUM(money) AS totalMoney,
|
||||||
|
SUM(CASE WHEN status = 2 THEN money ELSE 0 END) AS successMoney,
|
||||||
|
SUM(CASE WHEN status = 3 THEN money ELSE 0 END) AS failMoney,
|
||||||
|
COUNT(*) AS totalCount,
|
||||||
|
SUM(CASE WHEN status = 2 THEN 1 ELSE 0 END) AS successCount,
|
||||||
|
SUM(CASE WHEN status = 3 THEN 1 ELSE 0 END) AS failCount
|
||||||
|
FROM pre_psorder WHERE {$sql}");
|
||||||
|
|
||||||
|
$successRate = $result['totalCount'] > 0 ? round(($result['successCount'] / $result['totalCount']) * 100, 2) : 0;
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'totalMoney' => number_format($result['totalMoney'] ?? 0, 2, '.', ''),
|
||||||
|
'successMoney' => number_format($result['successMoney'] ?? 0, 2, '.', ''),
|
||||||
|
'failMoney' => number_format($result['failMoney'] ?? 0, 2, '.', ''),
|
||||||
|
'totalCount' => $result['totalCount'] ?? 0,
|
||||||
|
'successCount' => $result['successCount'] ?? 0,
|
||||||
|
'failCount' => $result['failCount'] ?? 0,
|
||||||
|
'successRate' => $successRate
|
||||||
|
];
|
||||||
|
|
||||||
|
exit(json_encode(['code' => 0, 'data' => $data]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
exit('{"code":-4,"msg":"No Act"}');
|
||||||
|
break;
|
||||||
|
}
|
||||||
@@ -0,0 +1,250 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
|
||||||
|
|
||||||
|
if(!checkRefererHost())exit('{"code":403}');
|
||||||
|
|
||||||
|
@header('Content-Type: application/json; charset=UTF-8');
|
||||||
|
|
||||||
|
switch($act){
|
||||||
|
case 'settleList':
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(isset($_POST['batch']) && !empty($_POST['batch'])) {
|
||||||
|
$batch = daddslashes($_POST['batch']);
|
||||||
|
$sql.=" AND `batch`='$batch'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
|
||||||
|
$uid = intval($_POST['uid']);
|
||||||
|
$sql.=" AND `uid`='$uid'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['type']) && !empty($_POST['type'])) {
|
||||||
|
$type = intval($_POST['type']);
|
||||||
|
$sql.=" AND `type`='$type'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
|
||||||
|
$dstatus = intval($_POST['dstatus']);
|
||||||
|
$sql.=" AND `status`={$dstatus}";
|
||||||
|
}
|
||||||
|
if(isset($_POST['value']) && !empty($_POST['value'])) {
|
||||||
|
$value = daddslashes($_POST['value']);
|
||||||
|
$sql.=" AND (`account` like '%{$value}%' OR `username` like '%{$value}%')";
|
||||||
|
}
|
||||||
|
$offset = intval($_POST['offset']);
|
||||||
|
$limit = intval($_POST['limit']);
|
||||||
|
$total = $DB->getColumn("SELECT count(*) from pre_settle WHERE{$sql}");
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_settle WHERE{$sql} order by id desc limit $offset,$limit");
|
||||||
|
$list2 = [];
|
||||||
|
foreach($list as $row){
|
||||||
|
if($row['type'] == 2 && $row['status'] == 1 && !empty($row['transfer_ext']) && time() - strtotime($row['transfer_date']) <= 86400){
|
||||||
|
if(substr($row['ext'], 0, 4) == 'http'){
|
||||||
|
$row['jumpurl'] = $row['ext'];
|
||||||
|
}else{
|
||||||
|
$row['jumpurl'] = $siteurl.'paypage/wxtrans.php?id='.$row['id'].'&type=settle';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$list2[] = $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(json_encode(['total'=>$total, 'rows'=>$list2]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'create_batch':
|
||||||
|
$count=$DB->getColumn("SELECT count(*) from pre_settle where status=0");
|
||||||
|
if($count==0)exit('{"code":-1,"msg":"当前不存在待结算的记录"}');
|
||||||
|
$batch=date("Ymd").rand(111,999);
|
||||||
|
$allmoney = 0;
|
||||||
|
$rs=$DB->query("SELECT * from pre_settle where status=0");
|
||||||
|
while($row = $rs->fetch())
|
||||||
|
{
|
||||||
|
$DB->exec("UPDATE pre_settle SET batch='$batch',status=2 WHERE id='{$row['id']}'");
|
||||||
|
$allmoney+=$row['realmoney'];
|
||||||
|
}
|
||||||
|
$DB->insert('batch', ['batch'=>$batch, 'allmoney'=>$allmoney, 'count'=>$count, 'time'=>'NOW()', 'status'=>0]);
|
||||||
|
|
||||||
|
exit(json_encode(['code'=>0, 'msg'=>'succ', 'batch'=>$batch, 'count'=>$count, 'allmoney'=>$allmoney]));
|
||||||
|
break;
|
||||||
|
case 'complete_batch':
|
||||||
|
$batch=trim($_POST['batch']);
|
||||||
|
$DB->exec("UPDATE pre_settle SET status=1 WHERE batch='$batch'");
|
||||||
|
exit('{"code":0,"msg":"succ"}');
|
||||||
|
break;
|
||||||
|
case 'setSettleStatus':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$status=intval($_GET['status']);
|
||||||
|
if($status==4){
|
||||||
|
$row = $DB->find('settle', 'uid,money', ['id'=>$id]);
|
||||||
|
if(!$row) exit('{"code":200}');
|
||||||
|
if($DB->exec("DELETE FROM pre_settle WHERE id='$id'")){
|
||||||
|
changeUserMoney($row['uid'], $row['money'], true, '结算失败退回');
|
||||||
|
exit('{"code":200}');
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
exit('{"code":400,"msg":"删除记录失败!['.$DB->error().']"}');
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if($status==1){
|
||||||
|
$sql = "update pre_settle set status='$status',endtime='$date',result=NULL where id='$id'";
|
||||||
|
|
||||||
|
$row = $DB->find('settle', 'uid,money,realmoney,account', ['id'=>$id]);
|
||||||
|
\lib\MsgNotice::send('settle', $row['uid'], ['money'=>$row['money'], 'realmoney'=>$row['realmoney'], 'time'=>date('Y-m-d H:i:s'), 'account'=>$row['account']]);
|
||||||
|
}else{
|
||||||
|
$sql = "update pre_settle set status='$status',endtime=NULL where id='$id'";
|
||||||
|
}
|
||||||
|
if($DB->exec($sql)!==false)
|
||||||
|
exit('{"code":200}');
|
||||||
|
else
|
||||||
|
exit('{"code":400,"msg":"修改记录失败!['.$DB->error().']"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'opslist':
|
||||||
|
$status=$_POST['status'];
|
||||||
|
$checkbox=$_POST['checkbox'];
|
||||||
|
$i=0;
|
||||||
|
foreach($checkbox as $id){
|
||||||
|
if($status==4){
|
||||||
|
$sql = "DELETE FROM pre_settle WHERE id='$id'";
|
||||||
|
}elseif($status==1){
|
||||||
|
$sql = "update pre_settle set status='$status',endtime='$date',result=NULL where id='$id'";
|
||||||
|
}else{
|
||||||
|
$sql = "update pre_settle set status='$status',endtime=NULL where id='$id'";
|
||||||
|
}
|
||||||
|
$DB->exec($sql);
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
exit('{"code":0,"msg":"成功改变'.$i.'条记录状态"}');
|
||||||
|
break;
|
||||||
|
case 'settle_result':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$row=$DB->getRow("select result from pre_settle where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前结算记录不存在!"}');
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','result'=>$row['result']];
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'settle_setresult':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$result=trim($_POST['result']);
|
||||||
|
$row=$DB->getRow("select * from pre_settle where id='$id' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前结算记录不存在!"}');
|
||||||
|
$sds = $DB->exec("UPDATE pre_settle SET result='$result' WHERE id='$id'");
|
||||||
|
if($sds!==false)
|
||||||
|
exit('{"code":0,"msg":"修改成功!"}');
|
||||||
|
else
|
||||||
|
exit('{"code":-1,"msg":"修改失败!'.$DB->error().'"}');
|
||||||
|
break;
|
||||||
|
case 'settle_info':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$rows=$DB->getRow("select * from pre_settle where id='$id' limit 1");
|
||||||
|
if(!$rows)
|
||||||
|
exit('{"code":-1,"msg":"当前结算记录不存在!"}');
|
||||||
|
$data = '<div class="form-group"><div class="input-group"><div class="input-group-addon">结算方式</div><select class="form-control" id="pay_type" default="'.$rows['type'].'">'.($conf['settle_alipay']?'<option value="1">支付宝</option>':null).''.($conf['settle_wxpay']?'<option value="2">微信</option>':null).''.($conf['settle_qqpay']?'<option value="3">QQ钱包</option>':null).''.($conf['settle_bank']?'<option value="4">银行卡</option>':null).'</select></div></div>';
|
||||||
|
$data .= '<div class="form-group"><div class="input-group"><div class="input-group-addon">结算账号</div><input type="text" id="pay_account" value="'.$rows['account'].'" class="form-control" required/></div></div>';
|
||||||
|
$data .= '<div class="form-group"><div class="input-group"><div class="input-group-addon">真实姓名</div><input type="text" id="pay_name" value="'.$rows['username'].'" class="form-control" required/></div></div>';
|
||||||
|
$data .= '<input type="submit" id="save" onclick="saveInfo('.$id.')" class="btn btn-primary btn-block" value="保存">';
|
||||||
|
$result=array("code"=>0,"msg"=>"succ","data"=>$data,"pay_type"=>$rows['type']);
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'settle_save':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$pay_type=intval($_POST['pay_type']);
|
||||||
|
$pay_account=htmlspecialchars(trim($_POST['pay_account']));
|
||||||
|
$pay_name=htmlspecialchars(trim($_POST['pay_name']));
|
||||||
|
$data = ['type'=>$pay_type, 'account'=>$pay_account, 'username'=>$pay_name];
|
||||||
|
if($DB->update('settle', $data, ['id'=>$id])!==false)
|
||||||
|
exit('{"code":0,"msg":"修改记录成功!"}');
|
||||||
|
else
|
||||||
|
exit('{"code":-1,"msg":"修改记录失败!'.$DB->error().'"}');
|
||||||
|
break;
|
||||||
|
case 'paypwd_check':
|
||||||
|
if(isset($_SESSION['paypwd']) && $_SESSION['paypwd']==$conf['admin_paypwd'])
|
||||||
|
exit('{"code":0,"msg":"ok"}');
|
||||||
|
else
|
||||||
|
exit('{"code":-1,"msg":"error"}');
|
||||||
|
break;
|
||||||
|
case 'paypwd_input':
|
||||||
|
$paypwd=trim($_POST['paypwd']);
|
||||||
|
if(!$conf['admin_paypwd'])exit('{"code":-1,"msg":"你还未设置支付密码"}');
|
||||||
|
if($paypwd == $conf['admin_paypwd']){
|
||||||
|
$_SESSION['paypwd'] = $paypwd;
|
||||||
|
exit('{"code":0,"msg":"ok"}');
|
||||||
|
}else{
|
||||||
|
exit('{"code":-1,"msg":"支付密码错误!"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'paypwd_reset':
|
||||||
|
unset($_SESSION['paypwd']);
|
||||||
|
exit('{"code":0,"msg":"ok"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'transfer':
|
||||||
|
$id = isset($_POST['id'])?intval($_POST['id']):exit('{"code":-1,"msg":"ID不能为空"}');
|
||||||
|
$type = isset($_POST['type'])?intval($_POST['type']):exit('{"code":-1,"msg":"type不能为空"}');
|
||||||
|
$channelid = isset($_POST['channel'])?intval($_POST['channel']):0;
|
||||||
|
|
||||||
|
$payee_err_code = [ //收款方原因导致的失败编码
|
||||||
|
'PAYEE_NOT_EXIST','PAYEE_ACCOUNT_STATUS_ERROR','CARD_BIN_ERROR','PAYEE_CARD_INFO_ERROR','PERM_AML_NOT_REALNAME_REV','PAYEE_USER_INFO_ERROR','PAYEE_ACC_OCUPIED','PERMIT_NON_BANK_LIMIT_PAYEE','PAYEE_TRUSTEESHIP_ACC_OVER_LIMIT','PAYEE_ACCOUNT_NOT_EXSIT','PAYEE_USERINFO_STATUS_ERROR','TRUSTEESHIP_RECIEVE_QUOTA_LIMIT','EXCEED_LIMIT_UNRN_DM_AMOUNT','INVALID_CARDNO','RELEASE_USER_FORBBIDEN_RECIEVE','PAYEE_USER_TYPE_ERROR','PAYEE_NOT_RELNAME_CERTIFY','PERMIT_LIMIT_PAYEE',
|
||||||
|
|
||||||
|
'OPENID_ERROR','NAME_MISMATCH','V2_ACCOUNT_SIMPLE_BAN','MONEY_LIMIT','EXCEED_PAYEE_ACCOUNT_LIMIT','PAYEE_ACCOUNT_ABNORMAL','APPID_OR_OPENID_ERR',
|
||||||
|
|
||||||
|
'REALNAME_CHECK_ERROR','RE_USER_NAME_CHECK_ERROR','ERR_TJ_BLACK','USER_FROZEN','TRANSFER_FAIL','TRANSFER_FEE_LIMIT_ERROR',
|
||||||
|
|
||||||
|
'ACCOUNT_FROZEN','REAL_NAME_CHECK_FAIL','NAME_NOT_CORRECT','OPENID_INVALID','TRANSFER_QUOTA_EXCEED','DAY_RECEIVED_QUOTA_EXCEED','MONTH_RECEIVED_QUOTA_EXCEED','DAY_RECEIVED_COUNT_EXCEED','ID_CARD_NOT_CORRECT','ACCOUNT_NOT_EXIST','TRANSFER_RISK','REALNAME_ACCOUNT_RECEIVED_QUOTA_EXCEED','RECEIVE_ACCOUNT_NOT_PERMMIT','PAYEE_ACCOUNT_ABNORMAL','BLOCK_B2C_USERLIMITAMOUNT_BSRULE_MONTH','BLOCK_B2C_USERLIMITAMOUNT_MONTH',
|
||||||
|
];
|
||||||
|
|
||||||
|
if(!isset($_SESSION['paypwd']) || $_SESSION['paypwd']!==$conf['admin_paypwd'])exit('{"code":-1,"msg":"支付密码错误,请返回重新进入该页面"}');
|
||||||
|
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_settle WHERE id='{$id}' limit 1");
|
||||||
|
if(!$row)exit('{"code":-1,"msg":"记录不存在"}');
|
||||||
|
if($row['type']!=$type)exit('{"code":-1,"msg":"转账类型不正确"}');
|
||||||
|
|
||||||
|
if($row['transfer_status']==1)exit('{"code":0,"ret":2,"result":"转账订单号:'.$row['transfer_result'].' 支付时间:'.$row['transfer_date'].'"}');
|
||||||
|
|
||||||
|
if($type == 1){
|
||||||
|
$app = 'alipay';
|
||||||
|
}elseif($type == 2){
|
||||||
|
$app = 'wxpay';
|
||||||
|
}elseif($type == 3){
|
||||||
|
$app = 'qqpay';
|
||||||
|
}elseif($type == 4){
|
||||||
|
$app = 'bank';
|
||||||
|
}
|
||||||
|
$channel = \lib\Channel::get($channelid);
|
||||||
|
if(!$channel)exit('{"code":-1,"msg":"当前支付通道信息不存在"}');
|
||||||
|
|
||||||
|
$out_biz_no = date("YmdHis").str_pad($id, 5, '0', STR_PAD_LEFT);
|
||||||
|
$result = \lib\Transfer::submit($app, $channel, $out_biz_no, $row['account'], $row['username'], $row['realmoney']);
|
||||||
|
|
||||||
|
if($result['code']==0){
|
||||||
|
$data['code']=0;
|
||||||
|
$data['ret']=1;
|
||||||
|
$data['result']='转账订单号:'.$result['orderid'].' 支付时间:'.$result['paydate'];
|
||||||
|
$update = ['status'=>1, 'endtime'=>'NOW()', 'transfer_no'=>$out_biz_no, 'transfer_channel'=>$channelid, 'transfer_status'=>1, 'transfer_result'=>$result["orderid"], 'transfer_date'=>$result["paydate"]];
|
||||||
|
if(isset($result['wxpackage'])) $update['transfer_ext'] = $result['wxpackage'];
|
||||||
|
$DB->update('settle', $update, ['id'=>$id]);
|
||||||
|
|
||||||
|
if(isset($result['wxpackage'])) {
|
||||||
|
$jumpurl = $siteurl.'paypage/wxtrans.php?type=settle&id='.$id;
|
||||||
|
\lib\MsgNotice::send('settle', $row['uid'], ['money'=>$row['money'], 'realmoney'=>$row['realmoney'], 'time'=>date('Y-m-d H:i:s'), 'account'=>$row['account'], 'jumpurl'=>$jumpurl]);
|
||||||
|
}else{
|
||||||
|
\lib\MsgNotice::send('settle', $row['uid'], ['money'=>$row['money'], 'realmoney'=>$row['realmoney'], 'time'=>date('Y-m-d H:i:s'), 'account'=>$row['account']]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(in_array($result['errcode'], $payee_err_code)){
|
||||||
|
$data['code']=0;
|
||||||
|
$data['ret']=0;
|
||||||
|
$data['result']='转账失败 '.$result['msg'];
|
||||||
|
$DB->update('settle', ['status'=>3, 'result'=>$result["msg"], 'transfer_status'=>2, 'transfer_result'=>$data['result']], ['id'=>$id]);
|
||||||
|
}else{
|
||||||
|
$data['code']=-1;
|
||||||
|
$data['msg']=$result['msg'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exit(json_encode($data));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
exit('{"code":-4,"msg":"No Act"}');
|
||||||
|
break;
|
||||||
|
}
|
||||||
@@ -0,0 +1,115 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
|
||||||
|
|
||||||
|
if(!checkRefererHost())exit('{"code":403}');
|
||||||
|
|
||||||
|
@header('Content-Type: application/json; charset=UTF-8');
|
||||||
|
|
||||||
|
switch($act){
|
||||||
|
case 'transferList':
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
|
||||||
|
$uid = intval($_POST['uid']);
|
||||||
|
$sql.=" AND `uid`='$uid'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['type']) && !empty($_POST['type'])) {
|
||||||
|
$type = intval($_POST['type']);
|
||||||
|
$sql.=" AND `type`='$type'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
|
||||||
|
$dstatus = intval($_POST['dstatus']);
|
||||||
|
$sql.=" AND `status`={$dstatus}";
|
||||||
|
}
|
||||||
|
if(isset($_POST['value']) && !empty($_POST['value'])) {
|
||||||
|
$value = daddslashes($_POST['value']);
|
||||||
|
$sql.=" AND (`biz_no`='{$value}' OR `account` like '%{$value}%' OR `username` like '%{$value}%')";
|
||||||
|
}
|
||||||
|
$offset = intval($_POST['offset']);
|
||||||
|
$limit = intval($_POST['limit']);
|
||||||
|
$total = $DB->getColumn("SELECT count(*) from pre_transfer WHERE{$sql}");
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_transfer WHERE{$sql} order by biz_no desc limit $offset,$limit");
|
||||||
|
$list2 = [];
|
||||||
|
foreach($list as $row){
|
||||||
|
if($row['type'] == 'wxpay' && $row['status'] == 0 && !empty($row['ext'])){
|
||||||
|
if(substr($row['ext'], 0, 4) == 'http'){
|
||||||
|
$row['jumpurl'] = $row['ext'];
|
||||||
|
}else{
|
||||||
|
$row['jumpurl'] = $siteurl.'paypage/wxtrans.php?id='.$row['biz_no'].'&type=transfer';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$list2[] = $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(json_encode(['total'=>$total, 'rows'=>$list2]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'transfer_query':
|
||||||
|
$biz_no=trim($_GET['biz_no']);
|
||||||
|
$result = \lib\Transfer::status($biz_no);
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'transfer_result':
|
||||||
|
$biz_no=trim($_GET['biz_no']);
|
||||||
|
$row = $DB->find('transfer', 'biz_no,result', ['biz_no' => $biz_no]);
|
||||||
|
if(!$row) exit('{"code":-1,"msg":"付款记录不存在!"}');
|
||||||
|
$result = ['code'=>0,'msg'=>$row['result']?$row['result']:'未知'];
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'transfer_cancel':
|
||||||
|
$biz_no=trim($_POST['biz_no']);
|
||||||
|
$result = \lib\Transfer::cancel($biz_no);
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'balance_query':
|
||||||
|
$type = $_POST['type'];
|
||||||
|
$channel = isset($_POST['channel'])?intval($_POST['channel']):$conf['transfer_'.$type];
|
||||||
|
$channel = \lib\Channel::get($channel);
|
||||||
|
if(!$channel)exit('{"code":-1,"msg":"当前支付通道信息不存在"}');
|
||||||
|
$user_id = isset($_POST['user_id'])?$_POST['user_id']:null;
|
||||||
|
$result = \lib\Transfer::balance($type, $channel, $user_id);
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'setTransferStatus':
|
||||||
|
$biz_no=$_POST['biz_no'];
|
||||||
|
$status=intval($_POST['status']);
|
||||||
|
if($DB->exec("UPDATE pre_transfer SET status='$status' WHERE biz_no='$biz_no'")!==false)exit('{"code":0,"msg":"succ"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'delTransfer':
|
||||||
|
$biz_no=$_POST['biz_no'];
|
||||||
|
if($DB->exec("DELETE FROM pre_transfer WHERE biz_no='$biz_no'")!==false)exit('{"code":0,"msg":"succ"}');
|
||||||
|
else exit('{"code":-1,"msg":"删除失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'refundTransfer':
|
||||||
|
$biz_no=$_POST['biz_no'];
|
||||||
|
$order = $DB->find('transfer', '*', ['biz_no' => $biz_no]);
|
||||||
|
if(!$order) exit('{"code":-1,"msg":"付款记录不存在!"}');
|
||||||
|
if($DB->exec("UPDATE pre_transfer SET status='2' WHERE biz_no='$biz_no'")){
|
||||||
|
if($order['uid'] > 0){
|
||||||
|
changeUserMoney($order['uid'], $order['costmoney'], true, '代付退回');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exit('{"code":0,"msg":"已成功将¥'.$order['costmoney'].'推给商户'.$order['uid'].'"}');
|
||||||
|
break;
|
||||||
|
case 'transfer_proof':
|
||||||
|
$biz_no=trim($_POST['biz_no']);
|
||||||
|
$result = \lib\Transfer::proof($biz_no);
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'operation': //批量操作订单
|
||||||
|
$status=is_numeric($_POST['status'])?intval($_POST['status']):exit('{"code":-1,"msg":"请选择操作"}');
|
||||||
|
$checkbox=$_POST['checkbox'];
|
||||||
|
$i=0;
|
||||||
|
foreach($checkbox as $biz_no){
|
||||||
|
if($status==3)$DB->exec("DELETE FROM pre_transfer WHERE biz_no='$biz_no'");
|
||||||
|
else $DB->exec("update pre_transfer set status='$status' where biz_no='$biz_no' limit 1");
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
exit('{"code":0,"msg":"成功改变'.$i.'条订单状态"}');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
exit('{"code":-4,"msg":"No Act"}');
|
||||||
|
break;
|
||||||
|
}
|
||||||
@@ -0,0 +1,794 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
|
||||||
|
|
||||||
|
if(!checkRefererHost())exit('{"code":403}');
|
||||||
|
|
||||||
|
@header('Content-Type: application/json; charset=UTF-8');
|
||||||
|
|
||||||
|
switch($act){
|
||||||
|
case 'userList':
|
||||||
|
$usergroup = [0=>'默认用户组'];
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_group");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$usergroup[$row['gid']] = $row['name'];
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(isset($_POST['dstatus']) && !empty($_POST['dstatus'])) {
|
||||||
|
$dstatus = explode('_',$_POST['dstatus']);
|
||||||
|
$sql.=" AND `{$dstatus[0]}`='{$dstatus[1]}'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['gid']) && $_POST['gid']!=='') {
|
||||||
|
$gid = intval($_POST['gid']);
|
||||||
|
$sql.=" AND `gid`='$gid'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['upid']) && $_POST['upid']!=='') {
|
||||||
|
$upid = intval($_POST['upid']);
|
||||||
|
$sql.=" AND `upid`='$upid'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['value']) && !empty($_POST['value'])) {
|
||||||
|
$sql.=" AND `{$_POST['column']}`='{$_POST['value']}'";
|
||||||
|
}
|
||||||
|
$offset = intval($_POST['offset']);
|
||||||
|
$limit = intval($_POST['limit']);
|
||||||
|
$total = $DB->getColumn("SELECT count(*) from pre_user WHERE{$sql}");
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_user WHERE{$sql} order by uid desc limit $offset,$limit");
|
||||||
|
$list2 = [];
|
||||||
|
foreach($list as $row){
|
||||||
|
if($row['endtime']!=null && strtotime($row['endtime'])<time()){
|
||||||
|
$DB->exec("UPDATE pre_user SET gid=0,endtime=NULL WHERE uid='{$row['uid']}'");
|
||||||
|
$row['gid']=0;
|
||||||
|
}elseif($row['endtime']!=null){
|
||||||
|
$row['endtime'] = date("Y-m-d", strtotime($row['endtime']));
|
||||||
|
}
|
||||||
|
$row['groupname'] = $usergroup[$row['gid']];
|
||||||
|
$list2[] = $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(json_encode(['total'=>$total, 'rows'=>$list2]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'recordList':
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
|
||||||
|
$uid = intval($_POST['uid']);
|
||||||
|
$sql.=" AND `uid`='$uid'";
|
||||||
|
}
|
||||||
|
if(!empty($_POST['starttime']) || !empty($_POST['endtime'])){
|
||||||
|
if(!empty($_POST['starttime'])){
|
||||||
|
$starttime = daddslashes($_POST['starttime']);
|
||||||
|
$sql.=" AND `date`>='{$starttime} 00:00:00'";
|
||||||
|
}
|
||||||
|
if(!empty($_POST['endtime'])){
|
||||||
|
$endtime = daddslashes($_POST['endtime']);
|
||||||
|
$sql.=" AND `date`<='{$endtime} 23:59:59'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isset($_POST['value']) && !empty($_POST['value'])) {
|
||||||
|
$sql.=" AND `{$_POST['column']}`='{$_POST['value']}'";
|
||||||
|
}
|
||||||
|
$offset = intval($_POST['offset']);
|
||||||
|
$limit = intval($_POST['limit']);
|
||||||
|
$total = $DB->getColumn("SELECT count(*) from pre_record WHERE{$sql}");
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_record WHERE{$sql} order by id desc limit $offset,$limit");
|
||||||
|
|
||||||
|
exit(json_encode(['total'=>$total, 'rows'=>$list]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'record_stats':
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
|
||||||
|
$uid = intval($_POST['uid']);
|
||||||
|
$sql.=" AND `uid`='$uid'";
|
||||||
|
}
|
||||||
|
if(!empty($_POST['starttime']) || !empty($_POST['endtime'])){
|
||||||
|
if(!empty($_POST['starttime'])){
|
||||||
|
$starttime = daddslashes($_POST['starttime']);
|
||||||
|
$sql.=" AND `date`>='{$starttime} 00:00:00'";
|
||||||
|
}
|
||||||
|
if(!empty($_POST['endtime'])){
|
||||||
|
$endtime = daddslashes($_POST['endtime']);
|
||||||
|
$sql.=" AND `date`<='{$endtime} 23:59:59'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isset($_POST['value']) && !empty($_POST['value'])) {
|
||||||
|
$sql.=" AND `{$_POST['column']}`='{$_POST['value']}'";
|
||||||
|
}
|
||||||
|
$result = $DB->getRow("SELECT
|
||||||
|
SUM(CASE WHEN action = 1 THEN money ELSE 0 END) AS incMoney,
|
||||||
|
SUM(CASE WHEN action = 2 THEN money ELSE 0 END) AS decMoney
|
||||||
|
FROM pre_record WHERE {$sql}");
|
||||||
|
$data = [
|
||||||
|
'incMoney' => number_format($result['incMoney'] ?? 0, 2, '.', ''),
|
||||||
|
'decMoney' => number_format($result['decMoney'] ?? 0, 2, '.', ''),
|
||||||
|
'totalMoney' => number_format(($result['incMoney'] ?? 0) - ($result['decMoney'] ?? 0), 2, '.', ''),
|
||||||
|
];
|
||||||
|
exit(json_encode(['code' => 0, 'data' => $data]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'userPayStat':
|
||||||
|
$startday = trim($_POST['startday']);
|
||||||
|
$endday = trim($_POST['endday']);
|
||||||
|
$method = trim($_POST['method']);
|
||||||
|
$type = intval($_POST['type']);
|
||||||
|
if(!$startday || !$endday)exit(json_encode(['code'=>0, 'msg'=>'no day']));
|
||||||
|
$data = [];
|
||||||
|
$columns = ['uid'=>'商户ID', 'total'=>'总计'];
|
||||||
|
|
||||||
|
if($method == 'type'){
|
||||||
|
$paytype = [];
|
||||||
|
$rs = $DB->getAll("SELECT id,name,showname FROM pre_type WHERE status=1");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$paytype[$row['id']] = $row['showname'];
|
||||||
|
if($type == 4){
|
||||||
|
$columns['type_'.$row['name']] = $row['showname'];
|
||||||
|
}else{
|
||||||
|
$columns['type_'.$row['id']] = $row['showname'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
}else{
|
||||||
|
$channel = [];
|
||||||
|
$rs = $DB->getAll("SELECT id,name FROM pre_channel WHERE status=1");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$channel[$row['id']] = $row['name'];
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($type == 4){
|
||||||
|
$startday .= ' 00:00:00';
|
||||||
|
$endday .= ' 23:59:59';
|
||||||
|
$rs=$DB->query("SELECT uid,type,channel,money from pre_transfer where status=1 and paytime>='$startday' and paytime<='$endday'");
|
||||||
|
while($row = $rs->fetch())
|
||||||
|
{
|
||||||
|
$money = (float)$row['money'];
|
||||||
|
if(!array_key_exists($row['uid'], $data)) $data[$row['uid']] = ['uid'=>$row['uid'], 'total'=>0];
|
||||||
|
$data[$row['uid']]['total'] += $money;
|
||||||
|
if($method == 'type'){
|
||||||
|
$ukey = 'type_'.$row['type'];
|
||||||
|
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
|
||||||
|
else $data[$row['uid']][$ukey] += $money;
|
||||||
|
}else{
|
||||||
|
$ukey = 'channel_'.$row['channel'];
|
||||||
|
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
|
||||||
|
else $data[$row['uid']][$ukey] += $money;
|
||||||
|
if(!in_array($ukey, $columns)) $columns[$ukey] = $channel[$row['channel']];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$rs=$DB->query("SELECT uid,type,channel,money,realmoney,getmoney,profitmoney from pre_order where status=1 and date>='$startday' and date<='$endday'");
|
||||||
|
while($row = $rs->fetch())
|
||||||
|
{
|
||||||
|
if($type == 3){
|
||||||
|
$money = (float)$row['profitmoney'];
|
||||||
|
}elseif($type == 2){
|
||||||
|
$money = (float)$row['getmoney'];
|
||||||
|
}elseif($type == 1){
|
||||||
|
$money = (float)$row['realmoney'];
|
||||||
|
}else{
|
||||||
|
$money = (float)$row['money'];
|
||||||
|
}
|
||||||
|
if(!array_key_exists($row['uid'], $data)) $data[$row['uid']] = ['uid'=>$row['uid'], 'total'=>0];
|
||||||
|
$data[$row['uid']]['total'] += $money;
|
||||||
|
if($method == 'type'){
|
||||||
|
$ukey = 'type_'.$row['type'];
|
||||||
|
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
|
||||||
|
else $data[$row['uid']][$ukey] += $money;
|
||||||
|
}else{
|
||||||
|
$ukey = 'channel_'.$row['channel'];
|
||||||
|
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
|
||||||
|
else $data[$row['uid']][$ukey] += $money;
|
||||||
|
if(!in_array($ukey, $columns)) $columns[$ukey] = $channel[$row['channel']];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ksort($data);
|
||||||
|
//计算总计
|
||||||
|
$total = ['uid'=>'总计'];
|
||||||
|
foreach($data as $row){
|
||||||
|
foreach($row as $key=>$val){
|
||||||
|
if($key=='uid')continue;
|
||||||
|
if(!array_key_exists($key, $total)) $total[$key] = $val;
|
||||||
|
else $total[$key] += $val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
array_unshift($data, $total);
|
||||||
|
$list = [];
|
||||||
|
foreach($data as $row){
|
||||||
|
$list[] = $row;
|
||||||
|
}
|
||||||
|
exit(json_encode(['code'=>0, 'columns'=>$columns, 'data'=>$list]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'userTransferStat':
|
||||||
|
$startday = trim($_POST['startday']);
|
||||||
|
$endday = trim($_POST['endday']);
|
||||||
|
$method = trim($_POST['method']);
|
||||||
|
if(!$startday || !$endday)exit(json_encode(['code'=>0, 'msg'=>'no day']));
|
||||||
|
$data = [];
|
||||||
|
$columns = ['uid'=>'商户ID', 'total'=>'总计'];
|
||||||
|
|
||||||
|
if($method == 'type'){
|
||||||
|
$paytype = [];
|
||||||
|
$rs = $DB->getAll("SELECT id,name,showname FROM pre_type WHERE status=1");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$paytype[$row['name']] = $row['showname'];
|
||||||
|
$columns['type_'.$row['name']] = $row['showname'];
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
}else{
|
||||||
|
$channel = [];
|
||||||
|
$rs = $DB->getAll("SELECT id,name FROM pre_channel WHERE status=1");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$channel[$row['id']] = $row['name'];
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
}
|
||||||
|
|
||||||
|
$rs=$DB->query("SELECT uid,type,channel,money from pre_transfer where status=1 and paytime>='$startday' and paytime<='$endday'");
|
||||||
|
while($row = $rs->fetch())
|
||||||
|
{
|
||||||
|
$money = (float)$row['money'];
|
||||||
|
if(!array_key_exists($row['uid'], $data)) $data[$row['uid']] = ['uid'=>$row['uid'], 'total'=>0];
|
||||||
|
$data[$row['uid']]['total'] += $money;
|
||||||
|
if($method == 'type'){
|
||||||
|
$ukey = 'type_'.$row['type'];
|
||||||
|
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
|
||||||
|
else $data[$row['uid']][$ukey] += $money;
|
||||||
|
}else{
|
||||||
|
$ukey = 'channel_'.$row['channel'];
|
||||||
|
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
|
||||||
|
else $data[$row['uid']][$ukey] += $money;
|
||||||
|
if(!in_array($ukey, $columns)) $columns[$ukey] = $channel[$row['channel']];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ksort($data);
|
||||||
|
$list = [];
|
||||||
|
foreach($data as $row){
|
||||||
|
$list[] = $row;
|
||||||
|
}
|
||||||
|
exit(json_encode(['code'=>0, 'columns'=>$columns, 'data'=>$list]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'buyerStat':
|
||||||
|
$startday = trim($_POST['startday']);
|
||||||
|
$endday = trim($_POST['endday']);
|
||||||
|
$method = intval($_POST['method']);
|
||||||
|
if($method == '2') $column = 'mobile';
|
||||||
|
else if($method == '1') $column = 'ip';
|
||||||
|
else $column = 'buyer';
|
||||||
|
if(!$startday || !$endday)exit(json_encode(['code'=>0, 'msg'=>'no day']));
|
||||||
|
$sql = "`date` BETWEEN '{$startday}' AND '{$endday}' AND {$column} is not null AND status>0";
|
||||||
|
if(isset($_POST['type']) && !empty($_POST['type'])) {
|
||||||
|
$type = intval($_POST['type']);
|
||||||
|
$sql.=" AND `type`='$type'";
|
||||||
|
}
|
||||||
|
$list = $DB->getAll("SELECT A.*,ISNULL(B.id) is_black
|
||||||
|
FROM (SELECT {$column} `user`,COUNT(*) AS order_count,MAX(trade_no) trade_no
|
||||||
|
FROM pay_order
|
||||||
|
WHERE {$sql}
|
||||||
|
GROUP BY {$column}
|
||||||
|
ORDER BY order_count DESC) A
|
||||||
|
LEFT JOIN pay_blacklist B ON A.`user`=B.content");
|
||||||
|
exit(json_encode($list));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'logList':
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(isset($_POST['value']) && $_POST['value']!=='') {
|
||||||
|
$sql.=" AND `{$_POST['column']}`='{$_POST['value']}'";
|
||||||
|
}
|
||||||
|
$offset = intval($_POST['offset']);
|
||||||
|
$limit = intval($_POST['limit']);
|
||||||
|
$total = $DB->getColumn("SELECT count(*) from pre_log WHERE{$sql}");
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_log WHERE{$sql} order by id desc limit $offset,$limit");
|
||||||
|
|
||||||
|
exit(json_encode(['total'=>$total, 'rows'=>$list]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'domainList':
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
|
||||||
|
$uid = intval($_POST['uid']);
|
||||||
|
$sql.=" AND `uid`='$uid'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['kw']) && !empty($_POST['kw'])) {
|
||||||
|
$sql.=" AND `domain`='{$_POST['kw']}'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
|
||||||
|
$dstatus = intval($_POST['dstatus']);
|
||||||
|
$sql.=" AND `status`={$dstatus}";
|
||||||
|
}
|
||||||
|
$offset = intval($_POST['offset']);
|
||||||
|
$limit = intval($_POST['limit']);
|
||||||
|
$total = $DB->getColumn("SELECT count(*) from pre_domain WHERE{$sql}");
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_domain WHERE{$sql} order by id desc limit $offset,$limit");
|
||||||
|
|
||||||
|
exit(json_encode(['total'=>$total, 'rows'=>$list]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'blackList':
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(isset($_POST['kw']) && !empty($_POST['kw'])) {
|
||||||
|
$sql.=" AND `content`='{$_POST['kw']}'";
|
||||||
|
}
|
||||||
|
if(isset($_POST['type']) && $_POST['type']>-1) {
|
||||||
|
$type = intval($_POST['type']);
|
||||||
|
$sql.=" AND `type`={$type}";
|
||||||
|
}
|
||||||
|
$offset = intval($_POST['offset']);
|
||||||
|
$limit = intval($_POST['limit']);
|
||||||
|
$total = $DB->getColumn("SELECT count(*) from pre_blacklist WHERE{$sql}");
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_blacklist WHERE{$sql} order by id desc limit $offset,$limit");
|
||||||
|
|
||||||
|
exit(json_encode(['total'=>$total, 'rows'=>$list]));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'getGroup': //用户组
|
||||||
|
$gid=intval($_GET['gid']);
|
||||||
|
$row=$DB->getRow("select * from pre_group where gid='$gid' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前用户组不存在!"}');
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','gid'=>$gid,'name'=>$row['name'],'info'=>json_decode($row['info'],true),'config'=>$row['config']?json_decode($row['config'],true):[],'settings'=>$row['settings']];
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'delGroup':
|
||||||
|
$gid=intval($_GET['gid']);
|
||||||
|
$row=$DB->getRow("select * from pre_group where gid='$gid' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前用户组不存在!"}');
|
||||||
|
$sql = "DELETE FROM pre_group WHERE gid='$gid'";
|
||||||
|
if($DB->exec($sql)){
|
||||||
|
$DB->exec("UPDATE pre_user SET gid=0 WHERE gid='$gid'");
|
||||||
|
exit('{"code":0,"msg":"删除用户组成功!"}');
|
||||||
|
}
|
||||||
|
else exit('{"code":-1,"msg":"删除用户组失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'saveGroup':
|
||||||
|
if($_POST['action'] == 'add'){
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$row=$DB->getRow("select * from pre_group where name='$name' limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"用户组名称重复"}');
|
||||||
|
$info=json_encode($_POST['info']);
|
||||||
|
$config=json_encode($_POST['config']);
|
||||||
|
$settings=trim($_POST['settings']);
|
||||||
|
if($settings && !checkGroupSettings($settings))exit('{"code":-1,"msg":"用户变量格式不正确"}');
|
||||||
|
$data = ['name'=>$name, 'info'=>$info, 'config'=>$config, 'settings'=>$settings];
|
||||||
|
if($DB->insert('group', $data))exit('{"code":0,"msg":"新增用户组成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"新增用户组失败['.$DB->error().']"}');
|
||||||
|
}elseif($_POST['action'] == 'changebuy'){
|
||||||
|
$gid=intval($_POST['gid']);
|
||||||
|
$status=intval($_POST['status']);
|
||||||
|
if($DB->update('group',['isbuy'=>$status],['gid'=>$gid]))exit('{"code":0,"msg":"修改上架状态成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改上架状态失败['.$DB->error().']"}');
|
||||||
|
}else{
|
||||||
|
$gid=intval($_POST['gid']);
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$row=$DB->getRow("select * from pre_group where name='$name' and gid<>$gid limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"用户组名称重复"}');
|
||||||
|
$info=json_encode($_POST['info']);
|
||||||
|
$config=json_encode($_POST['config']);
|
||||||
|
$settings=trim($_POST['settings']);
|
||||||
|
if($settings && !checkGroupSettings($settings))exit('{"code":-1,"msg":"用户变量格式不正确"}');
|
||||||
|
$data = ['name'=>$name, 'info'=>$info, 'config'=>$config, 'settings'=>$settings];
|
||||||
|
if($DB->update('group', $data, ['gid'=>$gid])!==false)exit('{"code":0,"msg":"修改用户组成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改用户组失败['.$DB->error().']"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'saveGroupPrice':
|
||||||
|
$prices = $_POST['price'];
|
||||||
|
$expires = $_POST['expire'];
|
||||||
|
$sorts = $_POST['sort'];
|
||||||
|
$visibles = $_POST['visible'];
|
||||||
|
foreach($prices as $gid=>$item){
|
||||||
|
$price = trim($item);
|
||||||
|
$expire = intval($expires[$gid]);
|
||||||
|
$sort = trim($sorts[$gid]);
|
||||||
|
$visible = str_replace(',',',',trim($visibles[$gid]));
|
||||||
|
if(!is_numeric($price)||$price<0)exit('{"code":-1,"msg":"GID:'.$gid.'的售价填写错误"}');
|
||||||
|
$DB->update('group', ['price'=>$price, 'expire'=>$expire, 'sort'=>$sort, 'visible'=>$visible], ['gid'=>$gid]);
|
||||||
|
}
|
||||||
|
exit('{"code":0,"msg":"保存成功!"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'addUser':
|
||||||
|
$key = random(32);
|
||||||
|
$data = [
|
||||||
|
'gid' => intval($_POST['gid']),
|
||||||
|
'key' => $key,
|
||||||
|
'settle_id' => intval($_POST['settle_id']),
|
||||||
|
'account' => trim($_POST['account']),
|
||||||
|
'username' => trim($_POST['username']),
|
||||||
|
'money' => '0.00',
|
||||||
|
'url' => trim($_POST['url']),
|
||||||
|
'email' => trim($_POST['email']),
|
||||||
|
'qq' => trim($_POST['qq']),
|
||||||
|
'phone' => trim($_POST['phone']),
|
||||||
|
'mode' => intval($_POST['mode']),
|
||||||
|
'cert' => 0,
|
||||||
|
'pay' => intval($_POST['pay']),
|
||||||
|
'settle' => intval($_POST['settle']),
|
||||||
|
'status' => intval($_POST['status']),
|
||||||
|
'addtime' => 'NOW()',
|
||||||
|
];
|
||||||
|
|
||||||
|
if(empty($data['phone']) && empty($data['email'])) exit('{"code":-1,"msg":"手机号和邮箱不能都为空"}');
|
||||||
|
|
||||||
|
if(!empty($data['phone'])){
|
||||||
|
if($DB->find('user','*',['phone'=>$data['phone']])) exit('{"code":-1,"msg":"手机号已存在!"}');
|
||||||
|
}
|
||||||
|
if(!empty($data['email'])){
|
||||||
|
if($DB->find('user','*',['email'=>$data['email']])) exit('{"code":-1,"msg":"邮箱已存在!"}');
|
||||||
|
}
|
||||||
|
|
||||||
|
$uid = $DB->insert('user', $data);
|
||||||
|
if($uid!==false){
|
||||||
|
if(!empty($_POST['pwd'])){
|
||||||
|
$pwd = getMd5Pwd(trim($_POST['pwd']), $uid);
|
||||||
|
$DB->update('user', ['pwd'=>$pwd], ['uid'=>$uid]);
|
||||||
|
}
|
||||||
|
exit(json_encode(['code'=>0, 'uid'=>$uid, 'key'=>$key]));
|
||||||
|
}else{
|
||||||
|
exit('{"code":-1,"msg":"添加商户失败!'.$DB->error().'"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'editUser':
|
||||||
|
$uid=intval($_GET['uid']);
|
||||||
|
$rows=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
|
||||||
|
if(!$rows) exit('{"code":-1,"msg":"当前商户不存在!"}');
|
||||||
|
$data = [
|
||||||
|
'gid' => intval($_POST['gid']),
|
||||||
|
'upid' => intval($_POST['upid']),
|
||||||
|
'settle_id' => intval($_POST['settle_id']),
|
||||||
|
'account' => trim($_POST['account']),
|
||||||
|
'username' => trim($_POST['username']),
|
||||||
|
'money' => trim($_POST['money']),
|
||||||
|
'url' => trim($_POST['url']),
|
||||||
|
'email' => trim($_POST['email']),
|
||||||
|
'qq' => trim($_POST['qq']),
|
||||||
|
'phone' => trim($_POST['phone']),
|
||||||
|
'cert' => intval($_POST['cert']),
|
||||||
|
'certtype' => intval($_POST['certtype']),
|
||||||
|
'certmethod' => intval($_POST['certmethod']),
|
||||||
|
'certno' => trim($_POST['certno']),
|
||||||
|
'certname' => trim($_POST['certname']),
|
||||||
|
'certcorpno' => trim($_POST['certcorpno']),
|
||||||
|
'certcorpname' => trim($_POST['certcorpname']),
|
||||||
|
'ordername' => trim($_POST['ordername']),
|
||||||
|
'mode' => intval($_POST['mode']),
|
||||||
|
'pay' => intval($_POST['pay']),
|
||||||
|
'settle' => intval($_POST['settle']),
|
||||||
|
'status' => intval($_POST['status']),
|
||||||
|
'open_code' => intval($_POST['open_code']),
|
||||||
|
'remain_money' => !empty($_POST['remain_money']) ? trim($_POST['remain_money']) : null,
|
||||||
|
'deposit' => !empty($_POST['deposit']) ? trim($_POST['deposit']) : null,
|
||||||
|
];
|
||||||
|
|
||||||
|
if($DB->update('user', $data, ['uid'=>$uid])!==false){
|
||||||
|
if(!empty($_POST['pwd'])){
|
||||||
|
$pwd = getMd5Pwd(trim($_POST['pwd']), $uid);
|
||||||
|
$DB->update('user', ['pwd'=>$pwd], ['uid'=>$uid]);
|
||||||
|
}
|
||||||
|
exit('{"code":0}');
|
||||||
|
}else{
|
||||||
|
exit('{"code":-1,"msg":"修改商户信息失败!'.$DB->error().'"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'edit_keytype':
|
||||||
|
$uid=intval($_POST['uid']);
|
||||||
|
$keytype=intval($_POST['keytype']);
|
||||||
|
$sqs = $DB->update('user', ['keytype'=>$keytype], ['uid'=>$uid]);
|
||||||
|
if($sqs!==false){
|
||||||
|
exit('{"code":1,"msg":"succ"}');
|
||||||
|
}else{
|
||||||
|
exit('{"code":-1,"msg":"保存失败!'.$DB->error().'"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'resetKey':
|
||||||
|
$uid=intval($_POST['uid']);
|
||||||
|
$key = random(32);
|
||||||
|
$sql = "UPDATE pre_user SET `key`='$key' WHERE uid='$uid'";
|
||||||
|
if($DB->exec($sql)!==false)exit('{"code":0,"msg":"重置密钥成功","key":"'.$key.'"}');
|
||||||
|
else exit('{"code":-1,"msg":"重置密钥失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'createRsaPair':
|
||||||
|
$uid=intval($_POST['uid']);
|
||||||
|
$keypair = generate_key_pair();
|
||||||
|
$DB->update('user', ['publickey'=>$keypair['public_key']], ['uid'=>$uid]);
|
||||||
|
exit(json_encode(['code'=>0, 'msg'=>'succ', 'public_key'=>$keypair['public_key'], 'private_key'=>$keypair['private_key']]));
|
||||||
|
break;
|
||||||
|
case 'editUserChannelInfo':
|
||||||
|
$uid=intval($_GET['uid']);
|
||||||
|
$rows=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
|
||||||
|
if(!$rows) exit('{"code":-1,"msg":"当前商户不存在!"}');
|
||||||
|
$setting=$_POST['setting'];
|
||||||
|
$channelinfo = json_encode($setting);
|
||||||
|
if($DB->update('user', ['channelinfo'=>$channelinfo], ['uid'=>$uid])!==false){
|
||||||
|
exit('{"code":0}');
|
||||||
|
}else{
|
||||||
|
exit('{"code":-1,"msg":"修改商户信息失败!'.$DB->error().'"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'delUser':
|
||||||
|
$uid=intval($_GET['uid']);
|
||||||
|
if($DB->exec("DELETE FROM pre_user WHERE uid='$uid'")){
|
||||||
|
$DB->exec("DELETE FROM pre_subchannel WHERE uid='$uid'");
|
||||||
|
exit('{"code":0}');
|
||||||
|
}else{
|
||||||
|
exit('{"code":-1,"msg":"删除商户失败!'.$DB->error().'"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'setUser':
|
||||||
|
$uid=intval($_POST['uid']);
|
||||||
|
$type=trim($_POST['type']);
|
||||||
|
$status=intval($_POST['status']);
|
||||||
|
if($type=='pay')$sql = "UPDATE pre_user SET pay='$status' WHERE uid='$uid'";
|
||||||
|
elseif($type=='settle')$sql = "UPDATE pre_user SET settle='$status' WHERE uid='$uid'";
|
||||||
|
elseif($type=='group')$sql = "UPDATE pre_user SET gid='$status' WHERE uid='$uid'";
|
||||||
|
else $sql = "UPDATE pre_user SET status='$status' WHERE uid='$uid'";
|
||||||
|
if($DB->exec($sql)!==false)exit('{"code":0,"msg":"修改用户成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改用户失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'setUserGroup':
|
||||||
|
$uid=intval($_POST['uid']);
|
||||||
|
$gid=intval($_POST['gid']);
|
||||||
|
$endtime=trim($_POST['endtime']);
|
||||||
|
if(changeUserGroup($uid, $gid, $endtime)!==false)exit('{"code":0,"msg":"修改用户成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改用户失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'resetUser':
|
||||||
|
$uid=intval($_GET['uid']);
|
||||||
|
$key = random(32);
|
||||||
|
$sql = "UPDATE pre_user SET `key`='$key' WHERE uid='$uid'";
|
||||||
|
if($DB->exec($sql)!==false)exit('{"code":0,"msg":"重置密钥成功","key":"'.$key.'"}');
|
||||||
|
else exit('{"code":-1,"msg":"重置密钥失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'user_settle_info':
|
||||||
|
$uid=intval($_GET['uid']);
|
||||||
|
$rows=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
|
||||||
|
if(!$rows)
|
||||||
|
exit('{"code":-1,"msg":"当前用户不存在!"}');
|
||||||
|
$data = '<div class="form-group"><div class="input-group"><div class="input-group-addon">结算方式</div><select class="form-control" id="pay_type" default="'.$rows['settle_id'].'">'.($conf['settle_alipay']?'<option value="1">支付宝</option>':null).''.($conf['settle_wxpay']?'<option value="2">微信</option>':null).''.($conf['settle_qqpay']?'<option value="3">QQ钱包</option>':null).''.($conf['settle_bank']?'<option value="4">银行卡</option>':null).'</select></div></div>';
|
||||||
|
$data .= '<div class="form-group"><div class="input-group"><div class="input-group-addon">结算账号</div><input type="text" id="pay_account" value="'.$rows['account'].'" class="form-control" required/></div></div>';
|
||||||
|
$data .= '<div class="form-group"><div class="input-group"><div class="input-group-addon">真实姓名</div><input type="text" id="pay_name" value="'.$rows['username'].'" class="form-control" required/></div></div>';
|
||||||
|
$data .= '<input type="submit" id="save" onclick="saveInfo('.$uid.')" class="btn btn-primary btn-block" value="保存">';
|
||||||
|
$result=array("code"=>0,"msg"=>"succ","data"=>$data,"pay_type"=>$rows['settle_id']);
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'user_settle_save':
|
||||||
|
$uid=intval($_POST['uid']);
|
||||||
|
$pay_type=trim(daddslashes($_POST['pay_type']));
|
||||||
|
$pay_account=trim(daddslashes($_POST['pay_account']));
|
||||||
|
$pay_name=trim(daddslashes($_POST['pay_name']));
|
||||||
|
$sds=$DB->exec("update `pre_user` set `settle_id`='$pay_type',`account`='$pay_account',`username`='$pay_name' where `uid`='$uid'");
|
||||||
|
if($sds!==false)
|
||||||
|
exit('{"code":0,"msg":"修改记录成功!"}');
|
||||||
|
else
|
||||||
|
exit('{"code":-1,"msg":"修改记录失败!'.$DB->error().'"}');
|
||||||
|
break;
|
||||||
|
case 'user_cert':
|
||||||
|
$uid=intval($_GET['uid']);
|
||||||
|
$rows=$DB->getRow("select cert,certtype,certmethod,certno,certname,certcorpno,certcorpname,certtime from pre_user where uid='$uid' limit 1");
|
||||||
|
if(!$rows)
|
||||||
|
exit('{"code":-1,"msg":"当前用户不存在!"}');
|
||||||
|
$rows['certmethodname'] = show_cert_method($rows['certmethod']);
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','uid'=>$uid,'data'=>$rows];
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'recharge':
|
||||||
|
$uid=intval($_POST['uid']);
|
||||||
|
$do=$_POST['actdo'];
|
||||||
|
$rmb=floatval($_POST['rmb']);
|
||||||
|
$row=$DB->getRow("select uid,money from pre_user where uid='$uid' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前用户不存在!"}');
|
||||||
|
if($do==1 && $rmb>$row['money'])$rmb=$row['money'];
|
||||||
|
if($do==0){
|
||||||
|
changeUserMoney($uid, $rmb, true, '后台加款');
|
||||||
|
}else{
|
||||||
|
changeUserMoney($uid, $rmb, false, '后台扣款');
|
||||||
|
}
|
||||||
|
exit('{"code":0,"msg":"succ"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'addDomain':
|
||||||
|
$uid=intval($_POST['uid']);
|
||||||
|
$domain = trim(daddslashes($_POST['domain']));
|
||||||
|
if(empty($domain))exit('{"code":-1,"msg":"域名不能为空"}');
|
||||||
|
if(!checkDomain($domain))exit('{"code":-1,"msg":"域名格式不正确"}');
|
||||||
|
$row=$DB->getRow("select uid from pre_user where uid='$uid' limit 1");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前用户不存在!"}');
|
||||||
|
if($DB->getRow("select * from pre_domain where uid=:uid and domain=:domain limit 1", [':uid'=>$uid, ':domain'=>$domain]))
|
||||||
|
exit('{"code":-1,"msg":"该域名已存在,请勿重复添加"}');
|
||||||
|
if(!$DB->exec("INSERT INTO `pre_domain` (`uid`,`domain`,`status`,`addtime`,`endtime`) VALUES (:uid, :domain, 1, NOW(), NOW())", [':uid'=>$uid, ':domain'=>$domain]))exit('{"code":-1,"msg":"添加失败'.$DB->error().'"}');
|
||||||
|
exit(json_encode(['code'=>0, 'msg'=>'添加域名成功!']));
|
||||||
|
break;
|
||||||
|
case 'setDomainStatus':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$status=intval($_POST['status']);
|
||||||
|
if($DB->exec("UPDATE pre_domain SET status='$status',endtime=NOW() WHERE id='$id'")!==false)exit('{"code":0,"msg":"succ"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'delDomain':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
if($DB->exec("DELETE FROM pre_domain WHERE id='$id'")!==false)exit('{"code":0,"msg":"succ"}');
|
||||||
|
else exit('{"code":-1,"msg":"删除失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'domain_operation':
|
||||||
|
$status=is_numeric($_POST['status'])?intval($_POST['status']):exit('{"code":-1,"msg":"请选择操作"}');
|
||||||
|
$checkbox=$_POST['checkbox'];
|
||||||
|
$i=0;
|
||||||
|
foreach($checkbox as $id){
|
||||||
|
if($status==3)$DB->exec("DELETE FROM pre_domain WHERE id='$id'");
|
||||||
|
else $DB->exec("UPDATE pre_domain SET status='$status',endtime=NOW() WHERE id='$id'");
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
exit('{"code":0,"msg":"成功改变'.$i.'个记录状态"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'getChannels':
|
||||||
|
$typeid = intval($_GET['typeid']);
|
||||||
|
$type=$DB->getColumn("SELECT name FROM pre_type WHERE id='$typeid'");
|
||||||
|
if(!$type)
|
||||||
|
exit('{"code":-1,"msg":"当前支付方式不存在!"}');
|
||||||
|
$list=$DB->getAll("SELECT id,name FROM pre_channel WHERE `type`='$typeid' AND status=1 ORDER BY id ASC");
|
||||||
|
if($list){
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','data'=>$list];
|
||||||
|
exit(json_encode($result));
|
||||||
|
}
|
||||||
|
else exit('{"code":-1,"msg":"该支付方式下没有可用的支付通道"}');
|
||||||
|
break;
|
||||||
|
case 'getSubChannel':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("SELECT A.*,B.type FROM pre_subchannel A LEFT JOIN pre_channel B ON A.channel=B.id WHERE A.id='$id'");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前子通道不存在!"}');
|
||||||
|
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'setSubChannel':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$status=intval($_GET['status']);
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_subchannel WHERE id='$id'");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前子通道不存在!"}');
|
||||||
|
$sql = "UPDATE pre_subchannel SET status='$status' WHERE id='$id'";
|
||||||
|
if($DB->exec($sql))exit('{"code":0,"msg":"修改子通道成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改子通道失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'delSubChannel':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_subchannel WHERE id='$id'");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前子通道不存在!"}');
|
||||||
|
$sql = "DELETE FROM pre_subchannel WHERE id='$id'";
|
||||||
|
if($DB->exec($sql))exit('{"code":0,"msg":"删除子通道成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"删除子通道失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'saveSubChannel':
|
||||||
|
if($_POST['action'] == 'add'){
|
||||||
|
$uid=intval($_POST['uid']);
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$type=intval($_POST['type']);
|
||||||
|
$channel=intval($_POST['channel']);
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_subchannel WHERE name='$name' AND uid='$uid' LIMIT 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":-1,"msg":"子通道备注重复"}');
|
||||||
|
$data = ['channel'=>$channel, 'uid'=>$uid, 'name'=>$name, 'addtime'=>'NOW()', 'usetime'=>'NOW()'];
|
||||||
|
if($DB->insert('subchannel', $data))exit('{"code":0,"msg":"新增子通道成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"新增子通道失败['.$DB->error().']"}');
|
||||||
|
}else{
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_subchannel WHERE id='$id'");
|
||||||
|
if(!$row) exit('{"code":-1,"msg":"当前子通道不存在!"}');
|
||||||
|
$uid=intval($_POST['uid']);
|
||||||
|
$name=trim($_POST['name']);
|
||||||
|
$type=intval($_POST['type']);
|
||||||
|
$channel=intval($_POST['channel']);
|
||||||
|
$nrow=$DB->getRow("SELECT * FROM pre_subchannel WHERE name='$name' AND uid='$uid' AND id<>$id LIMIT 1");
|
||||||
|
if($nrow)
|
||||||
|
exit('{"code":-1,"msg":"子通道名称重复"}');
|
||||||
|
$data = ['channel'=>$channel, 'name'=>$name];
|
||||||
|
if($DB->update('subchannel', $data, ['id'=>$id])!==false){
|
||||||
|
exit('{"code":0,"msg":"修改子通道成功!"}');
|
||||||
|
}else exit('{"code":-1,"msg":"修改子通道失败['.$DB->error().']"}');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'subChannelInfo':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$subrow=$DB->getRow("SELECT * FROM pre_subchannel WHERE id='$id'");
|
||||||
|
if(!$subrow)
|
||||||
|
exit('{"code":-1,"msg":"当前子通道不存在!"}');
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='{$subrow['channel']}'");
|
||||||
|
if(!$row)
|
||||||
|
exit('{"code":-1,"msg":"当前子通道对应支付通道不存在!"}');
|
||||||
|
$typename = $DB->getColumn("SELECT name FROM pre_type WHERE id='{$row['type']}'");
|
||||||
|
$plugin = \lib\Plugin::getConfig($row['plugin']);
|
||||||
|
if(!$plugin)
|
||||||
|
exit('{"code":-1,"msg":"当前支付插件不存在!"}');
|
||||||
|
|
||||||
|
$info = json_decode($subrow['info'], true);
|
||||||
|
$config = json_decode($row['config'],true);
|
||||||
|
$data = '<div class="modal-body"><form class="form" id="form-info">';
|
||||||
|
foreach($plugin['inputs'] as $key=>$input){
|
||||||
|
if(substr($config[$key],0,1)=='['){
|
||||||
|
$key = substr($config[$key],1,-1);
|
||||||
|
if($input['type'] == 'textarea'){
|
||||||
|
$data .= '<div class="form-group"><label>'.$input['name'].':</label><br/><textarea id="'.$key.'" name="info['.$key.']" rows="2" class="form-control" placeholder="'.$input['note'].'">'.$info[$key].'</textarea></div>';
|
||||||
|
}elseif($input['type'] == 'select'){
|
||||||
|
$addOptions = '';
|
||||||
|
foreach($input['options'] as $k=>$v){
|
||||||
|
$addOptions.='<option value="'.$k.'" '.($info[$key]==$k?'selected':'').'>'.$v.'</option>';
|
||||||
|
}
|
||||||
|
$data .= '<div class="form-group"><label>'.$input['name'].':</label><br/><select class="form-control" name="info['.$key.']" default="'.$info[$key].'">'.$addOptions.'</select></div>';
|
||||||
|
}else{
|
||||||
|
$data .= '<div class="form-group"><label>'.$input['name'].':</label><br/><input type="text" id="'.$key.'" name="info['.$key.']" value="'.$info[$key].'" class="form-control" placeholder="'.$input['note'].'"/></div>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$data .= '<button type="button" id="save" onclick="saveInfo('.$id.')" class="btn btn-primary btn-block">保存</button></form></div>';
|
||||||
|
$result=array("code"=>0,"msg"=>"succ","data"=>$data);
|
||||||
|
exit(json_encode($result));
|
||||||
|
break;
|
||||||
|
case 'saveSubChannelInfo':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$info=$_POST['info'];
|
||||||
|
$info = $info ? json_encode($info) : null;
|
||||||
|
if($DB->update('subchannel', ['info'=>$info], ['id'=>$id])!==false)exit('{"code":0,"msg":"修改自定义支付参数成功!"}');
|
||||||
|
else exit('{"code":-1,"msg":"修改自定义支付参数失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'addBlack':
|
||||||
|
$type=intval($_POST['type']);
|
||||||
|
$content = trim($_POST['content']);
|
||||||
|
$days=intval($_POST['days']);
|
||||||
|
$remark = trim($_POST['remark']);
|
||||||
|
if(empty($content))exit('{"code":-1,"msg":"拉黑内容不能为空"}');
|
||||||
|
if($DB->getRow("select * from pre_blacklist where type=:type and content=:content limit 1", [':type'=>$type, ':content'=>$content]))
|
||||||
|
exit('{"code":-1,"msg":"该黑名单记录已存在,请勿重复添加"}');
|
||||||
|
$endtime = $days > 0 ? date('Y-m-d H:i:s', strtotime('+'.$days.' days')) : null;
|
||||||
|
$data = ['type'=>$type, 'content'=>$content, 'addtime'=>'NOW()', 'endtime'=>$endtime, 'remark'=>$remark];
|
||||||
|
if($DB->insert('blacklist', $data))exit(json_encode(['code'=>0, 'msg'=>'添加黑名单成功!']));
|
||||||
|
else exit('{"code":-1,"msg":"添加失败'.$DB->error().'"}');
|
||||||
|
break;
|
||||||
|
case 'delBlack':
|
||||||
|
$id=intval($_POST['id']);
|
||||||
|
if($DB->exec("DELETE FROM pre_blacklist WHERE id='$id'")!==false)exit('{"code":0,"msg":"succ"}');
|
||||||
|
else exit('{"code":-1,"msg":"删除失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
case 'batchdelBlack':
|
||||||
|
$checkbox=$_POST['checkbox'];
|
||||||
|
$i = 0;
|
||||||
|
if(!empty($checkbox)){
|
||||||
|
$i = $DB->exec("DELETE FROM pre_blacklist WHERE id IN (".implode(',',$checkbox).")");
|
||||||
|
}
|
||||||
|
exit('{"code":0,"msg":"成功删除了'.$i.'个黑名单"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'delRecord':
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
if($DB->exec("DELETE FROM pre_record WHERE id='$id'")!==false)exit('{"code":0,"msg":"succ"}');
|
||||||
|
else exit('{"code":-1,"msg":"删除失败['.$DB->error().']"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'checkuid':
|
||||||
|
$uid=intval($_GET['uid']);
|
||||||
|
$row=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
|
||||||
|
if($row)
|
||||||
|
exit('{"code":0,"msg":"succ"}');
|
||||||
|
else
|
||||||
|
exit('{"code":-1,"msg":"当前商户ID不存在"}');
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
exit('{"code":-4,"msg":"No Act"}');
|
||||||
|
break;
|
||||||
|
}
|
||||||
@@ -0,0 +1,225 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='文章管理';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-sm-12 col-md-10 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
$my=isset($_GET['my'])?$_GET['my']:null;
|
||||||
|
|
||||||
|
if($my=='add')
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">添加文章</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<form action="./article.php?my=add_submit" method="post" class="form-horizontal" role="form">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">文章标题</label>
|
||||||
|
<div class="col-sm-10"><input type="text" name="title" value="" class="form-control" required/></div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">文章内容</label>
|
||||||
|
<div class="col-sm-10"><textarea id="editor_id" class="form-control" name="content" rows="16" style="width:100%;"></textarea></div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">是否置顶</label>
|
||||||
|
<div class="col-sm-10"><select class="form-control" name="top"><option value="0">否</option><option value="1">是</option></select></div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">发布时间</label>
|
||||||
|
<div class="col-sm-10"><input type="date" name="addtime" value="<?php echo date("Y-m-d"); ?>" class="form-control"/></div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-offset-2 col-sm-10"><input type="submit" name="submit" value="发布" class="btn btn-primary btn-block"/><br/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<br/><a href="./article.php">>>返回文章列表</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script charset="utf-8" src="./assets/kindeditor/kindeditor-all-min.js"></script>
|
||||||
|
<script charset="utf-8" src="./assets/kindeditor/zh-CN.js"></script>
|
||||||
|
<script src="assets/js/editor.js?ver=<?php echo VERSION ?>"></script>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
elseif($my=='edit')
|
||||||
|
{
|
||||||
|
$id=$_GET['id'];
|
||||||
|
$row=$DB->getRow("select * from pre_article where id='$id' limit 1");
|
||||||
|
?>
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">编辑文章</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<form action="./article.php?my=edit_submit&id=<?php echo $row['id']; ?>" method="post" class="form-horizontal" role="form">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">文章标题</label>
|
||||||
|
<div class="col-sm-10"><input type="text" name="title" value="<?php echo $row['title']; ?>" class="form-control" required/></div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">文章内容</label>
|
||||||
|
<div class="col-sm-10"><textarea id="editor_id" class="form-control" name="content" rows="16" style="width:100%;"><?php echo htmlspecialchars($row['content']);?></textarea></div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">是否置顶</label>
|
||||||
|
<div class="col-sm-10"><select class="form-control" name="top" default="<?php echo $row['top']?>"><option value="0">否</option><option value="1">是</option></select></div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">发布时间</label>
|
||||||
|
<div class="col-sm-10"><input type="date" name="addtime" value="<?php echo date("Y-m-d", strtotime($row['addtime']))?>" class="form-control"/></div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-offset-2 col-sm-10"><input type="submit" name="submit" value="发布" class="btn btn-primary btn-block"/><br/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<br/><a href="./article.php">>>返回文章列表</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
var items = $("select[default]");
|
||||||
|
for (i = 0; i < items.length; i++) {
|
||||||
|
$(items[i]).val($(items[i]).attr("default")||0);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script charset="utf-8" src="./assets/kindeditor/kindeditor-all-min.js"></script>
|
||||||
|
<script charset="utf-8" src="./assets/kindeditor/zh-CN.js"></script>
|
||||||
|
<script src="assets/js/editor.js?ver=<?php echo VERSION ?>"></script>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
elseif($my=='add_submit')
|
||||||
|
{
|
||||||
|
if(!checkRefererHost())exit();
|
||||||
|
$title=trim($_POST['title']);
|
||||||
|
$content=$_POST['content'];
|
||||||
|
$top=intval($_POST['top']);
|
||||||
|
$addtime=$_POST['addtime'].' '.date("H:i:s");
|
||||||
|
if($title==NULL or $content==NULL){
|
||||||
|
showmsg('保存错误,请确保必填项都不为空!',3);
|
||||||
|
} else {
|
||||||
|
$rows=$DB->getRow("select * from pre_article where title='$title' limit 1");
|
||||||
|
if($rows)
|
||||||
|
showmsg('文章标题已存在!',3);
|
||||||
|
$sql="INSERT INTO `pre_article` (`title`,`content`,`addtime`,`top`,`active`) VALUES (:title, :content, :addtime, :top, :active)";
|
||||||
|
$data = [':title'=>$title, ':content'=>$content, ':addtime'=>$addtime, ':top'=>$top, ':active'=>1];
|
||||||
|
if($DB->exec($sql, $data)){
|
||||||
|
showmsg('添加文章成功!<br/><br/><a href="./article.php">>>返回文章列表</a>',1);
|
||||||
|
}else
|
||||||
|
showmsg('添加文章失败!'.$DB->error(),4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif($my=='edit_submit')
|
||||||
|
{
|
||||||
|
if(!checkRefererHost())exit();
|
||||||
|
$id=$_GET['id'];
|
||||||
|
$rows=$DB->getRow("select * from pre_article where id='$id' limit 1");
|
||||||
|
if(!$rows)
|
||||||
|
showmsg('当前记录不存在!',3);
|
||||||
|
$title=trim($_POST['title']);
|
||||||
|
$content=$_POST['content'];
|
||||||
|
$top=intval($_POST['top']);
|
||||||
|
$addtime=$_POST['addtime'].' '.date("H:i:s");
|
||||||
|
if($title==NULL or $content==NULL){
|
||||||
|
showmsg('保存错误,请确保必填项都不为空!',3);
|
||||||
|
} else {
|
||||||
|
$sql = "UPDATE pre_article SET title=:title,content=:content,addtime=:addtime,top=:top WHERE id=:id";
|
||||||
|
$data = [':title'=>$title, ':content'=>$content, ':addtime'=>$addtime, ':top'=>$top, ':id'=>$id];
|
||||||
|
if($DB->exec($sql, $data)!==false)
|
||||||
|
showmsg('修改文章成功!<br/><br/><a href="./article.php">>>返回文章列表</a>',1);
|
||||||
|
else
|
||||||
|
showmsg('修改文章失败!'.$DB->error(),4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif($my=='delete')
|
||||||
|
{
|
||||||
|
if(!checkRefererHost())exit();
|
||||||
|
$id=$_GET['id'];
|
||||||
|
$sql="DELETE FROM pre_article WHERE id=:id";
|
||||||
|
if($DB->exec($sql, [':id'=>$id]))
|
||||||
|
showmsg('删除成功!<br/><br/><a href="./article.php">>>返回文章列表</a>',1);
|
||||||
|
else
|
||||||
|
showmsg('删除失败!'.$DB->error(),4);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
if(isset($_GET['kw'])){
|
||||||
|
$kw = trim(daddslashes($_GET['kw']));
|
||||||
|
$sql=" title LIKE '%$kw%'";
|
||||||
|
$numrows=$DB->getColumn("SELECT count(*) from pre_article where{$sql}");
|
||||||
|
$link='&kw='.$kw;
|
||||||
|
}else{
|
||||||
|
$sql=" 1";
|
||||||
|
$numrows=$DB->getColumn("SELECT count(*) from pre_article");
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">系统共有 <b><?php echo $numrows?></b> 篇文章</h3></div>
|
||||||
|
<form action="article.php" method="GET" class="form-inline">
|
||||||
|
<a href="./article.php?my=add" class="btn btn-success"><i class="fa fa-plus"></i> 添加文章</a>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="kw" placeholder="请输入文章标题">
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">搜索</button>
|
||||||
|
</form>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead><tr><th>ID</th><th>文章标题</th><th>发布时间</th><th>浏览量</th><th>状态</th><th>操作</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
$pagesize=30;
|
||||||
|
$pages=ceil($numrows/$pagesize);
|
||||||
|
$page=isset($_GET['page'])?intval($_GET['page']):1;
|
||||||
|
$offset=$pagesize*($page - 1);
|
||||||
|
|
||||||
|
$rs=$DB->query("SELECT * FROM pre_article WHERE{$sql} order by id desc limit $offset,$pagesize");
|
||||||
|
while($res = $rs->fetch())
|
||||||
|
{
|
||||||
|
echo '<tr><td><b>'.$res['id'].'</b></td><td>'.($res['top']?'[置顶]':null).$res['title'].'</td><td>'.$res['addtime'].'</td><td>'.$res['count'].'</td><td>'.($res['active']==1?'<span class="btn btn-xs btn-success" onclick="setActive('.$res['id'].',0)">显示</span>':'<span class="btn btn-xs btn-warning" onclick="setActive('.$res['id'].',1)">隐藏</span>').'</td><td><a class="btn btn-xs btn-success" href="../?mod=article&id='.$res['id'].'" target="_blank">查看</a> <a href="./article.php?my=edit&id='.$res['id'].'" class="btn btn-info btn-xs">编辑</a> <a href="./article.php?my=delete&id='.$res['id'].'" class="btn btn-xs btn-danger" onclick="return confirm(\'你确实要删除此文章吗?\');">删除</a></td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
echo'<ul class="pagination">';
|
||||||
|
$first=1;
|
||||||
|
$prev=$page-1;
|
||||||
|
$next=$page+1;
|
||||||
|
$last=$pages;
|
||||||
|
if ($page>1)
|
||||||
|
{
|
||||||
|
echo '<li><a href="article.php?page='.$first.$link.'">首页</a></li>';
|
||||||
|
echo '<li><a href="article.php?page='.$prev.$link.'">«</a></li>';
|
||||||
|
} else {
|
||||||
|
echo '<li class="disabled"><a>首页</a></li>';
|
||||||
|
echo '<li class="disabled"><a>«</a></li>';
|
||||||
|
}
|
||||||
|
$start=$page-10>1?$page-10:1;
|
||||||
|
$end=$page+10<$pages?$page+10:$pages;
|
||||||
|
for ($i=$start;$i<$page;$i++)
|
||||||
|
echo '<li><a href="article.php?page='.$i.$link.'">'.$i .'</a></li>';
|
||||||
|
echo '<li class="disabled"><a>'.$page.'</a></li>';
|
||||||
|
for ($i=$page+1;$i<=$end;$i++)
|
||||||
|
echo '<li><a href="article.php?page='.$i.$link.'">'.$i .'</a></li>';
|
||||||
|
if ($page<$pages)
|
||||||
|
{
|
||||||
|
echo '<li><a href="article.php?page='.$next.$link.'">»</a></li>';
|
||||||
|
echo '<li><a href="article.php?page='.$last.$link.'">尾页</a></li>';
|
||||||
|
} else {
|
||||||
|
echo '<li class="disabled"><a>»</a></li>';
|
||||||
|
echo '<li class="disabled"><a>尾页</a></li>';
|
||||||
|
}
|
||||||
|
echo'</ul>';
|
||||||
|
#分页
|
||||||
|
?>
|
||||||
|
<?php }?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.js"></script>
|
||||||
|
<script src="assets/js/article.js?ver=<?php echo VERSION ?>"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,215 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 支付黑名单管理
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='支付黑名单管理';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-md-12 center-block" style="float: none;">
|
||||||
|
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>搜索</label>
|
||||||
|
<input type="text" class="form-control" name="kw" placeholder="黑名单内容">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="type" class="form-control"><option value="-1">黑名单类型</option><option value="0">支付账号</option><option value="1">IP地址</option></select>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">搜索</button>
|
||||||
|
<a href="javascript:addItem()" class="btn btn-success">添加</a>
|
||||||
|
<a href="javascript:searchClear()" class="btn btn-default" title="刷新黑名单列表"><i class="fa fa-refresh"></i></a>
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<button type="button" id="batchAction" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">批量操作 <span class="caret"></span></button>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="javascript:batchdel()">批量删除</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<a tabindex="0" class="btn btn-default" role="button" data-toggle="popover" data-trigger="focus" title="说明" data-placement="bottom" data-content="支付账号黑名单,只支持微信公众号支付和支付宝JS支付"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<table id="listTable">
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
|
||||||
|
<script src="../assets/js/custom.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
updateToolbar();
|
||||||
|
const defaultPageSize = 15;
|
||||||
|
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
|
||||||
|
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
|
||||||
|
|
||||||
|
$("#listTable").bootstrapTable({
|
||||||
|
url: 'ajax_user.php?act=blackList',
|
||||||
|
pageNumber: pageNumber,
|
||||||
|
pageSize: pageSize,
|
||||||
|
classes: 'table table-striped table-hover table-bordered',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
checkbox: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'id',
|
||||||
|
title: 'ID'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'type',
|
||||||
|
title: '黑名单类型',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(value == '1'){
|
||||||
|
return 'IP地址';
|
||||||
|
}else{
|
||||||
|
return '支付账号';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'content',
|
||||||
|
title: '黑名单内容'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'addtime',
|
||||||
|
title: '添加时间'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'endtime',
|
||||||
|
title: '过期时间',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(value == null) return '永久';
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'remark',
|
||||||
|
title: '备注'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
title: '操作',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
let html = '';
|
||||||
|
html += ' <a href="javascript:delItem('+row.id+')" class="btn btn-danger btn-xs">删除</a>';
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
})
|
||||||
|
function addItem(){
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
area: ['380px'],
|
||||||
|
closeBtn: 2,
|
||||||
|
title: '添加黑名单',
|
||||||
|
content: '<div style="padding:15px"><div class="form-group"><div class="input-group"><div class="input-group-addon">拉黑类型</div><select name="add_type" class="form-control"><option value="0">支付账号</option><option value="1">IP地址</option></select></div></div><div class="form-group"><div class="input-group"><div class="input-group-addon">拉黑内容</div><input class="form-control" type="text" name="add_content" value="" autocomplete="off" ></div></div><div class="form-group"><div class="input-group"><div class="input-group-addon">有效期</div><input class="form-control" type="text" name="add_days" value="0" autocomplete="off" placeholder="0为永久"><div class="input-group-addon">天</div></div></div><div class="form-group"><div class="input-group"><div class="input-group-addon">备注</div><input class="form-control" type="text" name="add_remark" value="" autocomplete="off" placeholder="选填"></div></div></div>',
|
||||||
|
btn: ['确认', '取消'],
|
||||||
|
yes: function(){
|
||||||
|
var type = $("select[name='add_type']").val();
|
||||||
|
var content = $("input[name='add_content']").val();
|
||||||
|
var days = $("input[name='add_days']").val();
|
||||||
|
var remark = $("input[name='add_remark']").val();
|
||||||
|
if(content == ''){
|
||||||
|
$("input[name='content']").focus();return;
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=addBlack',
|
||||||
|
data : {type:type, content:content, days:days, remark:remark},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll(); searchSubmit() });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:0});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setStatus(id, status){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'post',
|
||||||
|
url : 'ajax_user.php?act=setDomainStatus',
|
||||||
|
data : {id:id, status:status},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(ret) {
|
||||||
|
layer.close(ii);
|
||||||
|
if (ret.code != 0) {
|
||||||
|
alert(ret.msg);
|
||||||
|
}
|
||||||
|
searchSubmit();
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function delItem(id) {
|
||||||
|
if(confirm('确定要删除此黑名单吗?')){
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=delBlack',
|
||||||
|
data : {id: id},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.msg('删除成功', {icon:1, time: 1000});
|
||||||
|
searchSubmit();
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function batchdel(){
|
||||||
|
var selected = $('#listTable').bootstrapTable('getSelections');
|
||||||
|
if(selected.length == 0){
|
||||||
|
layer.msg('未选择黑名单记录', {time:1500});return;
|
||||||
|
}
|
||||||
|
var checkbox = new Array();
|
||||||
|
$.each(selected, function(key, item){
|
||||||
|
checkbox.push(item.id)
|
||||||
|
})
|
||||||
|
if(!confirm('确定要删除已选中的'+checkbox.length+'个黑名单吗?')) return;
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=batchdelBlack',
|
||||||
|
data : {checkbox:checkbox},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
searchSubmit();
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('请求超时');
|
||||||
|
searchSubmit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$(function () {
|
||||||
|
$('[data-toggle="popover"]').popover()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 系统数据清理
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='系统数据清理';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
$mod=isset($_GET['mod'])?$_GET['mod']:null;
|
||||||
|
if($mod=='cleancache'){
|
||||||
|
$CACHE->clear();
|
||||||
|
if(function_exists("opcache_reset"))@opcache_reset();
|
||||||
|
showmsg('清理系统设置缓存成功!',1);
|
||||||
|
}elseif($mod=='cleanorder'){
|
||||||
|
$DB->exec("DELETE FROM `pre_order` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-30 days"))."'");
|
||||||
|
$DB->exec("OPTIMIZE TABLE `pre_order`");
|
||||||
|
showmsg('删除30天前订单记录成功!',1);
|
||||||
|
}elseif($mod=='cleansettle'){
|
||||||
|
$DB->exec("DELETE FROM `pre_settle` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-30 days"))."'");
|
||||||
|
$DB->exec("OPTIMIZE TABLE `pre_settle`");
|
||||||
|
showmsg('删除30天前结算记录成功!',1);
|
||||||
|
}elseif($mod=='cleanrecord'){
|
||||||
|
$DB->exec("DELETE FROM `pre_record` WHERE date<'".date("Y-m-d H:i:s",strtotime("-30 days"))."'");
|
||||||
|
$DB->exec("OPTIMIZE TABLE `pre_record`");
|
||||||
|
showmsg('删除30天前资金明细成功!',1);
|
||||||
|
}elseif($mod=='cleanorderi' && $_POST['do']=='submit'){
|
||||||
|
$days = intval($_POST['days']);
|
||||||
|
if($days<=0)showmsg('请确保每项不能为空',3);
|
||||||
|
$DB->exec("DELETE FROM `pre_order` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-{$days} days"))."'");
|
||||||
|
$DB->exec("OPTIMIZE TABLE `pre_order`");
|
||||||
|
showmsg('删除订单记录成功!',1);
|
||||||
|
}elseif($mod=='cleansettlei' && $_POST['do']=='submit'){
|
||||||
|
$days = intval($_POST['days']);
|
||||||
|
if($days<=0)showmsg('请确保每项不能为空',3);
|
||||||
|
$DB->exec("DELETE FROM `pre_settle` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-{$days} days"))."'");
|
||||||
|
$DB->exec("OPTIMIZE TABLE `pre_settle`");
|
||||||
|
showmsg('删除结算记录成功!',1);
|
||||||
|
}elseif($mod=='cleanrecordi' && $_POST['do']=='submit'){
|
||||||
|
$days = intval($_POST['days']);
|
||||||
|
if($days<=0)showmsg('请确保每项不能为空',3);
|
||||||
|
$DB->exec("DELETE FROM `pre_record` WHERE date<'".date("Y-m-d H:i:s",strtotime("-{$days} days"))."'");
|
||||||
|
$DB->exec("OPTIMIZE TABLE `pre_record`");
|
||||||
|
showmsg('删除资金明细成功!',1);
|
||||||
|
}elseif($mod=='cleantransferi' && $_POST['do']=='submit'){
|
||||||
|
$days = intval($_POST['days']);
|
||||||
|
if($days<=0)showmsg('请确保每项不能为空',3);
|
||||||
|
$DB->exec("DELETE FROM `pre_transfer` WHERE paytime<'".date("Y-m-d H:i:s",strtotime("-{$days} days"))."'");
|
||||||
|
$DB->exec("OPTIMIZE TABLE `pre_transfer`");
|
||||||
|
showmsg('删除付款记录成功!',1);
|
||||||
|
}elseif($mod=='cleanpsorderi' && $_POST['do']=='submit'){
|
||||||
|
$days = intval($_POST['days']);
|
||||||
|
if($days<=0)showmsg('请确保每项不能为空',3);
|
||||||
|
$DB->exec("DELETE FROM `pre_psorder` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-{$days} days"))."'");
|
||||||
|
$DB->exec("OPTIMIZE TABLE `pre_psorder`");
|
||||||
|
showmsg('删除分账记录成功!',1);
|
||||||
|
}else{
|
||||||
|
?>
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">系统数据清理</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<a href="./clean.php?mod=cleancache" class="btn btn-block btn-default">清理设置缓存</a><br/>
|
||||||
|
<a href="./clean.php?mod=cleanorder" onclick="return confirm('你确实要删除30天前的订单记录吗?');" class="btn btn-block btn-default">删除30天前订单记录</a><br/>
|
||||||
|
<a href="./clean.php?mod=cleansettle" onclick="return confirm('你确实要删除30天前的结算记录吗?');" class="btn btn-block btn-default">删除30天前结算记录</a><br/>
|
||||||
|
<a href="./clean.php?mod=cleanrecord" onclick="return confirm('你确实要删除30天前的资金明细吗?');" class="btn btn-block btn-default">删除30天前资金明细</a><br/>
|
||||||
|
<h4>自定义清理:</h4>
|
||||||
|
<form action="./clean.php?mod=cleanorderi" method="post" role="form"><input type="hidden" name="do" value="submit"/>
|
||||||
|
<b>订单记录</b>:<input type="text" name="days" value="" placeholder="天数"/>天前的订单记录 <input type="submit" name="submit" value="立即删除" class="btn btn-sm btn-danger" onclick="return confirm('删除后无法恢复,确定继续吗?');"/>
|
||||||
|
</form><br/>
|
||||||
|
<form action="./clean.php?mod=cleansettlei" method="post" role="form"><input type="hidden" name="do" value="submit"/>
|
||||||
|
<b>结算记录</b>:<input type="text" name="days" value="" placeholder="天数"/>天前的结算记录 <input type="submit" name="submit" value="立即删除" class="btn btn-sm btn-danger" onclick="return confirm('删除后无法恢复,确定继续吗?');"/>
|
||||||
|
</form><br/>
|
||||||
|
<form action="./clean.php?mod=cleanrecordi" method="post" role="form"><input type="hidden" name="do" value="submit"/>
|
||||||
|
<b>资金明细</b>:<input type="text" name="days" value="" placeholder="天数"/>天前的订单记录 <input type="submit" name="submit" value="立即删除" class="btn btn-sm btn-danger" onclick="return confirm('删除后无法恢复,确定继续吗?');"/>
|
||||||
|
</form><br/>
|
||||||
|
<form action="./clean.php?mod=cleantransferi" method="post" role="form"><input type="hidden" name="do" value="submit"/>
|
||||||
|
<b>付款记录</b>:<input type="text" name="days" value="" placeholder="天数"/>天前的付款记录 <input type="submit" name="submit" value="立即删除" class="btn btn-sm btn-danger" onclick="return confirm('删除后无法恢复,确定继续吗?');"/>
|
||||||
|
</form><br/>
|
||||||
|
<form action="./clean.php?mod=cleanpsorderi" method="post" role="form"><input type="hidden" name="do" value="submit"/>
|
||||||
|
<b>分账记录</b>:<input type="text" name="days" value="" placeholder="天数"/>天前的分账记录 <input type="submit" name="submit" value="立即删除" class="btn btn-sm btn-danger" onclick="return confirm('删除后无法恢复,确定继续吗?');"/>
|
||||||
|
</form><br/>
|
||||||
|
</div>
|
||||||
|
<div class="panel-footer">
|
||||||
|
<span class="glyphicon glyphicon-info-sign"></span>
|
||||||
|
定期清理数据有助于提升网站访问速度
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php }?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
error_reporting(0);
|
||||||
|
session_start();
|
||||||
|
define('ROOT_PATH', dirname(__FILE__));
|
||||||
|
require '../includes/ValidateCode.class.php';
|
||||||
|
$_vc = new ValidateCode();
|
||||||
|
$_vc->doimg();
|
||||||
|
$_SESSION['vc_code'] = $_vc->getCode();
|
||||||
|
?>
|
||||||
@@ -0,0 +1,229 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 授权支付域名
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='授权支付域名';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-md-12 center-block" style="float: none;">
|
||||||
|
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>搜索</label>
|
||||||
|
<input type="text" class="form-control" name="kw" placeholder="要搜索的域名">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="uid" style="width: 100px;" placeholder="商户号" value="">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="0">待审核</option><option value="1">正常</option><option value="2">拒绝</option></select>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">搜索</button>
|
||||||
|
<a href="javascript:addDomain()" class="btn btn-success">添加</a>
|
||||||
|
<a href="javascript:searchClear()" class="btn btn-default" title="刷新域名列表"><i class="fa fa-refresh"></i></a>
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<button type="button" id="batchAction" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">批量操作 <span class="caret"></span></button>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="javascript:operation(1)">通过</a></li>
|
||||||
|
<li><a href="javascript:operation(2)">拒绝</a></li>
|
||||||
|
<li><a href="javascript:operation(3)">删除</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<table id="listTable">
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
|
||||||
|
<script src="../assets/js/custom.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
updateToolbar();
|
||||||
|
const defaultPageSize = 15;
|
||||||
|
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
|
||||||
|
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
|
||||||
|
|
||||||
|
$("#listTable").bootstrapTable({
|
||||||
|
url: 'ajax_user.php?act=domainList',
|
||||||
|
pageNumber: pageNumber,
|
||||||
|
pageSize: pageSize,
|
||||||
|
classes: 'table table-striped table-hover table-bordered',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
checkbox: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'id',
|
||||||
|
title: 'ID'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'uid',
|
||||||
|
title: '商户号',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<b><a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a></b>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'domain',
|
||||||
|
title: '域名',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<a href="http://'+value.replace('*.','www.')+'/" target="_blank" rel="noopener noreferrer">'+value+'</a>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: '状态',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(value == '1'){
|
||||||
|
return '<font color="green">正常</font>';
|
||||||
|
}else if(value == '2'){
|
||||||
|
return '<font color="red">拒绝</font>';
|
||||||
|
}else{
|
||||||
|
return '<font color="blue">审核中</font>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'addtime',
|
||||||
|
title: '添加时间'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'endtime',
|
||||||
|
title: '审核时间'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
title: '操作',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
let html = '';
|
||||||
|
if(row.status == '1'){
|
||||||
|
html += '<a href="javascript:setStatus('+row.id+', 2)" class="btn btn-default btn-xs">改为拒绝</a>';
|
||||||
|
}else if(row.status == '2'){
|
||||||
|
html += '<a href="javascript:setStatus('+row.id+', 1)" class="btn btn-default btn-xs">改为通过</a>';
|
||||||
|
}else{
|
||||||
|
html += '<a href="javascript:setStatus('+row.id+', 1)" class="btn btn-success btn-xs">通过</a> <a href="javascript:setStatus('+row.id+', 2)" class="btn btn-warning btn-xs">拒绝</a>';
|
||||||
|
}
|
||||||
|
html += ' <a href="javascript:delDomain('+row.id+')" class="btn btn-danger btn-xs">删除</a>';
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
})
|
||||||
|
function addDomain(){
|
||||||
|
var adduid = $("input[name='uid']").val();
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
area: ['350px'],
|
||||||
|
closeBtn: 2,
|
||||||
|
title: '添加授权支付域名',
|
||||||
|
content: '<div style="padding:15px"><div class="form-group"><input class="form-control" type="text" name="adduid" value="'+adduid+'" autocomplete="off" placeholder="商户ID"></div><div class="form-group"><input class="form-control" type="text" name="content" value="" autocomplete="off" placeholder="请输入域名,支持通配符*"></div></div>',
|
||||||
|
btn: ['确认', '取消'],
|
||||||
|
yes: function(){
|
||||||
|
var adduid = $("input[name='adduid']").val();
|
||||||
|
var content = $("input[name='content']").val();
|
||||||
|
if(adduid == ''){
|
||||||
|
$("input[name='adduid']").focus();return;
|
||||||
|
}
|
||||||
|
if(content == ''){
|
||||||
|
$("input[name='content']").focus();return;
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=addDomain',
|
||||||
|
data : {uid:adduid, domain: content},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll(); searchSubmit() });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:0});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setStatus(id, status){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'post',
|
||||||
|
url : 'ajax_user.php?act=setDomainStatus',
|
||||||
|
data : {id:id, status:status},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(ret) {
|
||||||
|
layer.close(ii);
|
||||||
|
if (ret.code != 0) {
|
||||||
|
alert(ret.msg);
|
||||||
|
}
|
||||||
|
searchSubmit();
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function delDomain(id) {
|
||||||
|
if(confirm('确定要删除此域名吗?')){
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=delDomain',
|
||||||
|
data : {id: id},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.msg('删除成功', {icon:1, time: 1000});
|
||||||
|
searchSubmit();
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function operation(status){
|
||||||
|
var selected = $('#listTable').bootstrapTable('getSelections');
|
||||||
|
if(selected.length == 0){
|
||||||
|
layer.msg('未选择域名', {time:1500});return;
|
||||||
|
}
|
||||||
|
var checkbox = new Array();
|
||||||
|
$.each(selected, function(key, item){
|
||||||
|
checkbox.push(item.id)
|
||||||
|
})
|
||||||
|
if(status == 3 && !confirm('确定要删除已选中的'+checkbox.length+'个域名吗?')) return;
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=domain_operation',
|
||||||
|
data : {status:status, checkbox:checkbox},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
searchSubmit();
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('请求超时');
|
||||||
|
searchSubmit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,288 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
|
||||||
|
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
|
||||||
|
|
||||||
|
function display_type($type){
|
||||||
|
if($type==1)
|
||||||
|
return '支付宝';
|
||||||
|
elseif($type==2)
|
||||||
|
return '微信';
|
||||||
|
elseif($type==3)
|
||||||
|
return 'QQ钱包';
|
||||||
|
elseif($type==4)
|
||||||
|
return '银行卡';
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function display_status($status){
|
||||||
|
if($status==1){
|
||||||
|
return '已支付';
|
||||||
|
}elseif($status==2){
|
||||||
|
return '已退款';
|
||||||
|
}elseif($status==3){
|
||||||
|
return '已冻结';
|
||||||
|
}else{
|
||||||
|
return '未支付';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function text_encoding($text){
|
||||||
|
return mb_convert_encoding($text, "GBK", "UTF-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
switch($act){
|
||||||
|
case 'settle':
|
||||||
|
$type = isset($_GET['type'])?trim($_GET['type']):'common';
|
||||||
|
$batch=$_GET['batch'];
|
||||||
|
$remark = text_encoding($conf['transfer_desc']);
|
||||||
|
|
||||||
|
if($type == 'mybank'){
|
||||||
|
$data="收款方名称,收款方账号,收款方开户行名称,收款行联行号,金额,附言/用途\r\n";
|
||||||
|
|
||||||
|
$rs=$DB->query("SELECT * from pre_settle where batch='$batch' and (type=1 or type=4) order by id asc");
|
||||||
|
$i=0;
|
||||||
|
while($row = $rs->fetch())
|
||||||
|
{
|
||||||
|
$i++;
|
||||||
|
$data.=text_encoding($row['username']).','.$row['account'].','.($row['type']=='1'?'支付宝':'').',,'.$row['realmoney'].','.$remark."\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
}elseif($type == 'alipay'){
|
||||||
|
$data="支付宝批量付款文件模板\r\n";
|
||||||
|
$data.="序号(必填),收款方支付宝账号(必填),收款方姓名(必填),金额(必填,单位:元),备注(选填)\r\n";
|
||||||
|
|
||||||
|
$rs=$DB->query("SELECT * from pre_settle where batch='$batch' and type=1 order by id asc");
|
||||||
|
$i=0;
|
||||||
|
while($row = $rs->fetch())
|
||||||
|
{
|
||||||
|
$i++;
|
||||||
|
$data.=$i.','.$row['account'].','.text_encoding($row['username']).','.$row['realmoney'].','.$remark."\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
}elseif($type == 'wxpay'){
|
||||||
|
if(!$conf['transfer_wxpay'])sysmsg(mb_convert_encoding("未开启微信企业付款", "UTF-8", "GB2312"));
|
||||||
|
$channel = \lib\Channel::get($conf['transfer_wxpay']);
|
||||||
|
if(!$channel)sysmsg(mb_convert_encoding("当前支付通道信息不存在", "UTF-8", "GB2312"));
|
||||||
|
$wxinfo = \lib\Channel::getWeixin($channel['appwxmp']);
|
||||||
|
if(!$wxinfo)sysmsg(mb_convert_encoding("支付通道绑定的微信公众号不存在", "UTF-8", "GB2312"));
|
||||||
|
|
||||||
|
$rs=$DB->query("SELECT * from pre_settle where batch='$batch' and type=2 order by id asc");
|
||||||
|
$i=0;
|
||||||
|
$table="商家明细单号(必填),收款用户openid(必填),收款用户姓名(选填),收款用户身份证(选填),转账金额(必填,单位:元),转账备注(必填)\r\n";
|
||||||
|
$allmoney = 0;
|
||||||
|
while($row = $rs->fetch())
|
||||||
|
{
|
||||||
|
$i++;
|
||||||
|
$table.=$batch.$i.','.$row['account'].','.text_encoding($row['username']).',,'.$row['realmoney'].','.$remark."\r\n";
|
||||||
|
$allmoney+=$row['realmoney'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$data="微信支付批量转账到零钱模版(勿删)\r\n";
|
||||||
|
$data.="商家批次单号(必填),".$batch."\r\n";
|
||||||
|
$data.="批次名称(必填),批量转账".$batch."\r\n";
|
||||||
|
$data.="转账appid(必填),".$wxinfo['appid']."\r\n";
|
||||||
|
$data.="转账总金额(必填,单位:元),".$allmoney."\r\n";
|
||||||
|
$data.="转账总笔数(必填),".$i."\r\n";
|
||||||
|
$data.="批次备注(必填),批量转账".$batch."\r\n";
|
||||||
|
$data.=",\r\n";
|
||||||
|
$data.="转账明细(勿删)\r\n";
|
||||||
|
$data.=$table;
|
||||||
|
|
||||||
|
}else{
|
||||||
|
$data="序号,收款方式,收款账号,收款人姓名,付款金额(元),付款理由\r\n";
|
||||||
|
$rs=$DB->query("SELECT * from pre_settle where batch='$batch' order by type asc,id asc");
|
||||||
|
$i=0;
|
||||||
|
while($row = $rs->fetch())
|
||||||
|
{
|
||||||
|
$i++;
|
||||||
|
$data.=$i.','.display_type($row['type']).','.$row['account'].','.text_encoding($row['username']).','.$row['realmoney'].','.$remark."\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$file_name='pay_'.$type.'_'.$batch.'.csv';
|
||||||
|
$file_size=strlen($data);
|
||||||
|
header("Content-Description: File Transfer");
|
||||||
|
header("Content-Type: application/force-download");
|
||||||
|
header("Content-Length: {$file_size}");
|
||||||
|
header("Content-Disposition:attachment; filename={$file_name}");
|
||||||
|
echo $data;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'ustat':
|
||||||
|
$startday = trim($_GET['startday']);
|
||||||
|
$endday = trim($_GET['endday']);
|
||||||
|
$method = trim($_GET['method']);
|
||||||
|
$type = intval($_POST['type']);
|
||||||
|
if(!$startday || !$endday)exit("<script language='javascript'>alert('param error');history.go(-1);</script>");
|
||||||
|
$data = [];
|
||||||
|
$columns = ['uid'=>'商户ID', 'total'=>'总计'];
|
||||||
|
|
||||||
|
if($method == 'type'){
|
||||||
|
$paytype = [];
|
||||||
|
$rs = $DB->getAll("SELECT id,name,showname FROM pre_type WHERE status=1");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$paytype[$row['id']] = text_encoding($row['showname']);
|
||||||
|
if($type == 4){
|
||||||
|
$columns['type_'.$row['name']] = text_encoding($row['showname']);
|
||||||
|
}else{
|
||||||
|
$columns['type_'.$row['id']] = text_encoding($row['showname']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
}else{
|
||||||
|
$channel = [];
|
||||||
|
$rs = $DB->getAll("SELECT id,name FROM pre_channel WHERE status=1");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$channel[$row['id']] = text_encoding($row['name']);
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($type == 4){
|
||||||
|
$rs=$DB->query("SELECT uid,type,channel,money from pre_transfer where status=1 and paytime>='$startday' and paytime<='$endday'");
|
||||||
|
while($row = $rs->fetch())
|
||||||
|
{
|
||||||
|
$money = (float)$row['money'];
|
||||||
|
if(!array_key_exists($row['uid'], $data)) $data[$row['uid']] = ['uid'=>$row['uid'], 'total'=>0];
|
||||||
|
$data[$row['uid']]['total'] += $money;
|
||||||
|
if($method == 'type'){
|
||||||
|
$ukey = 'type_'.$row['type'];
|
||||||
|
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
|
||||||
|
else $data[$row['uid']][$ukey] += $money;
|
||||||
|
}else{
|
||||||
|
$ukey = 'channel_'.$row['channel'];
|
||||||
|
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
|
||||||
|
else $data[$row['uid']][$ukey] += $money;
|
||||||
|
if(!in_array($ukey, $columns)) $columns[$ukey] = $channel[$row['channel']];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$rs=$DB->query("SELECT uid,type,channel,money,realmoney,getmoney,profitmoney from pre_order where status=1 and date>='$startday' and date<='$endday'");
|
||||||
|
while($row = $rs->fetch())
|
||||||
|
{
|
||||||
|
if($type == 3){
|
||||||
|
$money = (float)$row['profitmoney'];
|
||||||
|
}elseif($type == 2){
|
||||||
|
$money = (float)$row['getmoney'];
|
||||||
|
}elseif($type == 1){
|
||||||
|
$money = (float)$row['realmoney'];
|
||||||
|
}else{
|
||||||
|
$money = (float)$row['money'];
|
||||||
|
}
|
||||||
|
if(!array_key_exists($row['uid'], $data)) $data[$row['uid']] = ['uid'=>$row['uid'], 'total'=>0];
|
||||||
|
$data[$row['uid']]['total'] += $money;
|
||||||
|
if($method == 'type'){
|
||||||
|
$ukey = 'type_'.$row['type'];
|
||||||
|
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
|
||||||
|
else $data[$row['uid']][$ukey] += $money;
|
||||||
|
}else{
|
||||||
|
$ukey = 'channel_'.$row['channel'];
|
||||||
|
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
|
||||||
|
else $data[$row['uid']][$ukey] += $money;
|
||||||
|
if(!in_array($ukey, $columns)) $columns[$ukey] = $channel[$row['channel']];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ksort($data);
|
||||||
|
|
||||||
|
$file='';
|
||||||
|
foreach($columns as $column){
|
||||||
|
$file.=$column.',';
|
||||||
|
}
|
||||||
|
$file=substr($file,0,-1)."\r\n";
|
||||||
|
foreach($data as $row){
|
||||||
|
foreach($columns as $key=>$column){
|
||||||
|
if(!array_key_exists($key, $row))
|
||||||
|
$file.='0,';
|
||||||
|
else
|
||||||
|
$file.=$row[$key].',';
|
||||||
|
}
|
||||||
|
$file=substr($file,0,-1)."\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$file_name='pay_'.$method.'_'.$startday.'_'.$endday.'.csv';
|
||||||
|
$file_size=strlen($file);
|
||||||
|
header("Content-Description: File Transfer");
|
||||||
|
header("Content-Type: application/force-download");
|
||||||
|
header("Content-Length: {$file_size}");
|
||||||
|
header("Content-Disposition:attachment; filename={$file_name}");
|
||||||
|
echo $file;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'order':
|
||||||
|
$starttime = trim($_GET['starttime']);
|
||||||
|
$endtime = trim($_GET['endtime']);
|
||||||
|
$uid = intval($_GET['uid']);
|
||||||
|
$type = intval($_GET['type']);
|
||||||
|
$channel = intval($_GET['channel']);
|
||||||
|
$dstatus = intval($_GET['dstatus']);
|
||||||
|
|
||||||
|
$paytype = [];
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_type");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$paytype[$row['id']] = text_encoding($row['showname']);
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
|
||||||
|
$sql=" 1=1";
|
||||||
|
if(!empty($uid)) {
|
||||||
|
$sql.=" AND A.`uid`='$uid'";
|
||||||
|
}
|
||||||
|
if(!empty($type)) {
|
||||||
|
$sql.=" AND A.`type`='$type'";
|
||||||
|
}elseif(!empty($channel)) {
|
||||||
|
$sql.=" AND A.`channel`='$channel'";
|
||||||
|
}
|
||||||
|
if($dstatus>-1) {
|
||||||
|
$sql.=" AND A.status={$dstatus}";
|
||||||
|
}
|
||||||
|
if(!empty($starttime)){
|
||||||
|
$starttime = date("Y-m-d H:i:s", strtotime($starttime.' 00:00:00'));
|
||||||
|
$sql.=" AND A.addtime>='{$starttime}'";
|
||||||
|
}
|
||||||
|
if(!empty($endtime)){
|
||||||
|
$endtime = date("Y-m-d H:i:s", strtotime("+1 days", strtotime($endtime.' 00:00:00')));
|
||||||
|
$sql.=" AND A.addtime<'{$endtime}'";
|
||||||
|
}
|
||||||
|
|
||||||
|
$file="系统订单号,商户订单号,接口订单号,商户号,网站域名,商品名称,订单金额,实际支付,商户分成,支付方式,支付通道ID,支付插件,支付账号,支付IP,创建时间,完成时间,支付状态\r\n";
|
||||||
|
|
||||||
|
$rs = $DB->query("SELECT A.*,B.plugin FROM pre_order A LEFT JOIN pre_channel B ON A.channel=B.id WHERE{$sql} order by trade_no desc limit 100000");
|
||||||
|
while($row = $rs->fetch()){
|
||||||
|
$file.='="'.$row['trade_no'].'",="'.$row['out_trade_no'].'",="'.$row['api_trade_no'].'",'.$row['uid'].','.$row['domain'].','.text_encoding($row['name']).','.$row['money'].','.$row['realmoney'].','.$row['getmoney'].','.$paytype[$row['type']].','.$row['channel'].','.$row['plugin'].','.$row['buyer'].','.$row['ip'].','.$row['addtime'].','.$row['endtime'].','.display_status($row['status'])."\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$file_name='order_'.$starttime.'_'.$endtime.'.csv';
|
||||||
|
$file_size=strlen($file);
|
||||||
|
header("Content-Description: File Transfer");
|
||||||
|
header("Content-Type: application/force-download");
|
||||||
|
header("Content-Length: {$file_size}");
|
||||||
|
header("Content-Disposition:attachment; filename={$file_name}");
|
||||||
|
echo $file;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'wximg':
|
||||||
|
if(!checkRefererHost())exit();
|
||||||
|
$channelid = intval($_GET['channel']);
|
||||||
|
$subchannelid = intval($_GET['subchannel']);
|
||||||
|
$media_id = $_GET['mediaid'];
|
||||||
|
$channel = $subchannelid ? \lib\Channel::getSub($subchannelid) : \lib\Channel::get($channelid);
|
||||||
|
$model = \lib\Complain\CommUtil::getModel($channel);
|
||||||
|
$image = $model->getImage($media_id);
|
||||||
|
if($image !== false){
|
||||||
|
$seconds_to_cache = 3600*24*7;
|
||||||
|
header("Cache-Control: max-age=$seconds_to_cache");
|
||||||
|
header("Content-Type: image/jpeg");
|
||||||
|
echo $image;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
exit('No Act');
|
||||||
|
break;
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='导出订单';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
|
||||||
|
$type_select = '<option value="0">所有支付方式</option>';
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_type ORDER BY id ASC");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$type_select .= '<option value="'.$row['id'].'">'.$row['showname'].'</option>';
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
?>
|
||||||
|
<link href="../assets/css/datepicker.css" rel="stylesheet">
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">导出订单</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<form action="" method="POST" onsubmit="return exportOrder()" role="form">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group input-daterange"><div class="input-group-addon">时间范围</div>
|
||||||
|
<input type="text" id="starttime" name="starttime" class="form-control" placeholder="开始日期*" autocomplete="off" required>
|
||||||
|
<span class="input-group-addon"><i class="fa fa-chevron-right"></i></span>
|
||||||
|
<input type="text" id="endtime" name="endtime" class="form-control" placeholder="结束日期*" autocomplete="off" required>
|
||||||
|
</div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">商户号</div>
|
||||||
|
<input type="text" name="uid" value="" class="form-control" placeholder="留空为全部商户"/>
|
||||||
|
</div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">支付方式</div>
|
||||||
|
<select name="type" class="form-control"><?php echo $type_select?></select>
|
||||||
|
</div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">通道ID</div>
|
||||||
|
<input type="text" name="channel" value="" class="form-control" placeholder="留空为全部通道"/>
|
||||||
|
</div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">订单状态</div>
|
||||||
|
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="0">状态未支付</option><option value="1">状态已支付</option><option value="2">状态已退款</option><option value="3">状态已冻结</option></select>
|
||||||
|
</div></div>
|
||||||
|
<p><input type="submit" name="submit" value="导出" class="btn btn-primary form-control"/></p>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function exportOrder(){
|
||||||
|
var starttime = $("input[name='starttime']").val();
|
||||||
|
var endtime = $("input[name='endtime']").val();
|
||||||
|
var uid = $("input[name='uid']").val();
|
||||||
|
var type = $("select[name='type']").val();
|
||||||
|
var channel = $("input[name='channel']").val();
|
||||||
|
var dstatus = $("select[name='dstatus']").val();
|
||||||
|
if(starttime == '' || endtime == ''){
|
||||||
|
layer.alert('时间范围是必填的!'); return false;
|
||||||
|
}
|
||||||
|
window.location.href='./download.php?act=order&starttime='+starttime+'&endtime='+endtime+'&uid='+uid+'&type='+type+'&channel='+channel+'&dstatus='+dstatus;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('.input-datepicker, .input-daterange').datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
autoclose: true,
|
||||||
|
clearBtn: true,
|
||||||
|
language: 'zh-CN'
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,265 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='新增/编辑用户组';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
|
||||||
|
$paytype = [];
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_type WHERE status=1 ORDER BY id ASC");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$paytype[$row['id']] = $row['showname'];
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
|
||||||
|
$alipay_channel = $DB->getAll("SELECT id,name,plugin FROM pre_channel WHERE plugin IN (SELECT name FROM pre_plugin WHERE transtypes LIKE '%alipay%')");
|
||||||
|
$wxpay_channel = $DB->getAll("SELECT id,name,plugin FROM pre_channel WHERE plugin IN (SELECT name FROM pre_plugin WHERE transtypes LIKE '%wxpay%')");
|
||||||
|
$qqpay_channel = $DB->getAll("SELECT id,name,plugin FROM pre_channel WHERE plugin IN (SELECT name FROM pre_plugin WHERE transtypes LIKE '%qqpay%')");
|
||||||
|
$bank_channel = $DB->getAll("SELECT id,name,plugin FROM pre_channel WHERE plugin IN (SELECT name FROM pre_plugin WHERE transtypes LIKE '%bank%')");
|
||||||
|
|
||||||
|
$grouprow = [];
|
||||||
|
$act = isset($_GET['act'])?daddslashes($_GET['act']):null;
|
||||||
|
if($act == 'edit'){
|
||||||
|
$id = isset($_GET['gid'])?intval($_GET['gid']):0;
|
||||||
|
$grouprow = $DB->getRow("SELECT * FROM pre_group WHERE gid='$id' LIMIT 1");
|
||||||
|
if(!$grouprow) showmsg('当前用户组不存在!',3);
|
||||||
|
$title = '编辑用户组 GID:'.$id;
|
||||||
|
$grouprow['info'] = json_decode($grouprow['info'], true);
|
||||||
|
$grouprow['config'] = $grouprow['config'] ? json_decode($grouprow['config'], true) : [];
|
||||||
|
}else{
|
||||||
|
$title = '新增用户组';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
.table>tbody>tr>td{vertical-align: middle;}
|
||||||
|
</style>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-sm-12 col-md-10 center-block" style="float: none;">
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title"><?php echo $title?></h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<form class="form-horizontal" id="form-store" onsubmit="return save(this)" method="POST">
|
||||||
|
<input type="hidden" name="action" id="action" value="<?php echo $act?>"/>
|
||||||
|
<input type="hidden" name="gid" id="gid"/>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12 col-md-7">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">显示名称</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="name" placeholder="不要与其他用户组名称重复" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">通道费率</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<table class="table">
|
||||||
|
<thead><tr><th style="min-width:100px">支付方式</th><th>选择支付通道</th><th>填写分成比例</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach($paytype as $key=>$value)
|
||||||
|
{
|
||||||
|
$select = '';
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_channel WHERE type='$key' AND status=1");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$select .= '<option value="'.$row['id'].'" rate="'.$row['rate'].'" type="channel">'.$row['name'].'</option>';
|
||||||
|
}
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_roll WHERE type='$key' AND status=1");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$select .= '<option value="'.$row['id'].'" rate="'.$row['rate'].'" type="roll">'.$row['name'].'</option>';
|
||||||
|
}
|
||||||
|
echo '<tr><td><b>'.$value.'</b><input type="hidden" name="info['.$key.'][type]" value=""></td><td><select name="info['.$key.'][channel]" class="form-control" onchange="changeChannel('.$key.')"><option value="0">关闭</option><option value="-1" type="channel">随机可用通道</option>'.$select.'<option value="-2" type="channel">用户自定义子通道</option></select></td><td><div class="input-group"><input type="text" class="form-control" name="info['.$key.'][rate]" placeholder="百分数"><span class="input-group-addon">%</span></div></td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">代付通道</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<table class="table">
|
||||||
|
<thead><tr><th style="min-width:100px">转账方式</th><th>选择支付通道</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<tr><td><b>支付宝</b></td><td><select name="config[transfer_alipay]" class="form-control"><option value="">缺省(与系统设置一致)</option><?php foreach($alipay_channel as $channel){echo '<option value="'.$channel['id'].'" plugin="'.$channel['plugin'].'">'.$channel['name'].'</option>';} ?></select></td></tr>
|
||||||
|
<tr><td><b>微信支付</b></td><td><select name="config[transfer_wxpay]" class="form-control"><option value="">缺省(与系统设置一致)</option><?php foreach($wxpay_channel as $channel){echo '<option value="'.$channel['id'].'" plugin="'.$channel['plugin'].'">'.$channel['name'].'</option>';} ?></select></td></tr>
|
||||||
|
<tr><td><b>QQ钱包</b></td><td><select name="config[transfer_qqpay]" class="form-control"><option value="">缺省(与系统设置一致)</option><?php foreach($qqpay_channel as $channel){echo '<option value="'.$channel['id'].'" plugin="'.$channel['plugin'].'">'.$channel['name'].'</option>';} ?></select></td></tr>
|
||||||
|
<tr><td><b>银行卡</b></td><td><select name="config[transfer_bank]" class="form-control"><option value="">缺省(与系统设置一致)</option><?php foreach($bank_channel as $channel){echo '<option value="'.$channel['id'].'" plugin="'.$channel['plugin'].'">'.$channel['name'].'</option>';} ?></select></td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">用户变量</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="settings" placeholder="没有请勿填写,格式:变量名1:显示名1,变量名2:显示名2"><font color="green">用于替换支付通道密钥配置里面的变量,如选“用户自定义子通道”,则此处不需要填写</font>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-12 col-md-5">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label">结算开关</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<select name="config[settle_open]" class="form-control">
|
||||||
|
<option value="">缺省(与系统设置一致)</option><option value="1">只开启每日自动结算</option><option value="2">只开启手动申请结算</option><option value="3">开启自动+手动结算</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label">结算周期</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<select name="config[settle_type]" class="form-control">
|
||||||
|
<option value="">缺省(与系统设置一致)</option><option value="1">D+0(可结算全部余额)</option><option value="2">D+1(可结算前1天的余额)</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label">自动转账</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<select name="config[settle_transfer]" class="form-control">
|
||||||
|
<option value="">缺省(与系统设置一致)</option><option value="1">开启手动提现自动转账</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label no-padding-right">结算手续费</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<div class="input-group"><input type="text" name="config[settle_rate]" class="form-control" placeholder="留空则与系统设置一致"/><span class="input-group-addon">%</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label">余额充值</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<select name="config[recharge]" class="form-control">
|
||||||
|
<option value="">缺省(与系统设置一致)</option><option value="0">关闭</option><option value="1">开启</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label">聚合收款码</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<select name="config[onecode]" class="form-control">
|
||||||
|
<option value="">缺省(与系统设置一致)</option><option value="0">关闭</option><option value="1">开启</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label">代付功能</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<select name="config[user_transfer]" class="form-control">
|
||||||
|
<option value="">缺省(与系统设置一致)</option><option value="1">开启</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label no-padding-right">代付手续费</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<div class="input-group"><input type="text" name="config[transfer_rate]" class="form-control" placeholder="留空则与系统设置一致"/><span class="input-group-addon">%</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label">邀请返现</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<select name="config[invite_open]" class="form-control">
|
||||||
|
<option value="">缺省(与系统设置一致)</option><option value="1">开启</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label no-padding-right">邀请分成比例</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<div class="input-group"><input type="text" name="config[invite_rate]" class="form-control" placeholder="留空则与系统设置一致"/><span class="input-group-addon">%</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label">商户保证金</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<select name="config[user_deposit]" class="form-control">
|
||||||
|
<option value="">缺省(与系统设置一致)</option><option value="0">关闭</option><option value="1">开启</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label">结算时间</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<select name="config[direct_settle_time]" class="form-control">
|
||||||
|
<option value="">缺省(与系统设置一致)</option><option value="0">支付后立即结算</option><option value="1">支付后延迟24小时结算</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php if(class_exists("\\lib\\Applyments\\CommUtil")){?><div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label">免费进件</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<select name="config[applyments_free]" class="form-control">
|
||||||
|
<option value="0">否</option><option value="1">是</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div><?php }?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input type="submit" class="btn btn-primary btn-block" value="保存"></form>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<br/><a href="./glist.php">>>返回用户组设置</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.js"></script>
|
||||||
|
<script>
|
||||||
|
var grouprow = <?php echo json_encode($grouprow)?>;
|
||||||
|
var action = $("#action").val();
|
||||||
|
if(action == 'edit'){
|
||||||
|
var $form = $('#form-store');
|
||||||
|
$.each(grouprow, function(key, value) {
|
||||||
|
$form.find('[name="' + key + '"]').val(value);
|
||||||
|
});
|
||||||
|
$.each(grouprow.config, function(key, value) {
|
||||||
|
var $input = $form.find('[name="config[' + key + ']"]');
|
||||||
|
if ($input.is('select')) {
|
||||||
|
var $option = $input.find('option[value="' + value + '"]');
|
||||||
|
if ($option.length > 0) {
|
||||||
|
$input.val(value);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$input.val(value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$.each(grouprow.info, function (i, res) {
|
||||||
|
$("select[name='info["+i+"][channel]']").val(res.channel);
|
||||||
|
$("input[name='info["+i+"][rate]']").val(res.rate);
|
||||||
|
$("input[name='info["+i+"][type]']").val(res.type);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function changeChannel(type){
|
||||||
|
var rate = $("select[name='info["+type+"][channel]'] option:selected").attr('rate');
|
||||||
|
var type2 = $("select[name='info["+type+"][channel]'] option:selected").attr('type');
|
||||||
|
if($("input[name='info["+type+"][rate]']").val()=='')$("input[name='info["+type+"][rate]']").val(rate);
|
||||||
|
$("input[name='info["+type+"][type]']").val(type2);
|
||||||
|
}
|
||||||
|
function save(form){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=saveGroup',
|
||||||
|
data : $(form).serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg,{
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
window.location.href='./glist.php';
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='获取用户标识';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
$app = isset($_GET['app'])?$_GET['app']:'wechat';
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">获取用户标识</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<ul class="nav nav-tabs">
|
||||||
|
<li class="<?php echo $app=='wechat'?'active':null;?>"><a href="?app=wechat">微信Openid</a></li><li class="<?php echo $app=='alipayuid'?'active':null;?>"><a href="?app=alipayuid">支付宝用户ID</a></li><li class="<?php echo $app=='apptoken'?'active':null;?>"><a href="?app=apptoken">支付宝应用授权Token</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="tab-pane active">
|
||||||
|
<input type="hidden" id="apptype" value="<?php echo $app?>">
|
||||||
|
<input type="hidden" id="siteurl" value="<?php echo $siteurl?>">
|
||||||
|
<?php if($app=='wechat'){
|
||||||
|
$wxpay_channel = $DB->getAll("SELECT * FROM pre_weixin WHERE type=0");
|
||||||
|
$default_wx = $conf['login_wx'];
|
||||||
|
if($conf['transfer_wxpay']){
|
||||||
|
$channel = \lib\Channel::get($conf['transfer_wxpay']);
|
||||||
|
if($channel) {
|
||||||
|
$default_wx = $channel['appwxmp'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<div class="list-group-item">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">选择微信公众号</div>
|
||||||
|
<select id="channel" class="form-control">
|
||||||
|
<?php foreach($wxpay_channel as $channel){echo '<option value="'.$channel['id'].'" '.($channel['id']==$default_wx?'selected':'').'>'.$channel['name'].'</option>';} ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<font color="green">在公众号小程序管理里面添加公众号</font>
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">获取链接</div>
|
||||||
|
<input type="text" id="geturl" value="" class="form-control" readonly="readonly">
|
||||||
|
<div class="input-group-btn"><a href="javascript:;" class="btn btn-default copy-btn" data-clipboard-text="" title="点击复制"><i class="fa fa-copy"></i></a></div>
|
||||||
|
</div>
|
||||||
|
<font color="green">复制链接后在微信打开</font>
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item list-group-item-info text-center">
|
||||||
|
或使用微信扫描以下二维码
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item text-center">
|
||||||
|
<div id="qrcode"></div>
|
||||||
|
</div>
|
||||||
|
<?php }elseif($app=='alipayuid'){
|
||||||
|
$alipay_channel = $DB->getAll("SELECT * FROM pre_channel WHERE plugin='alipay' OR plugin='alipaysl' OR plugin='alipayd' OR plugin='alipayrp'");
|
||||||
|
?>
|
||||||
|
<div class="list-group-item">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">选择支付通道</div>
|
||||||
|
<select id="channel" class="form-control">
|
||||||
|
<?php foreach($alipay_channel as $channel){echo '<option value="'.$channel['id'].'" '.($channel['id']==$conf['login_alipay']?'selected':'').'>'.$channel['name'].'</option>';} ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<font color="green">支持alipay、alipaysl、alipayd支付插件,需要先在支付宝应用的授权回调地址配置好当前域名</font>
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">获取链接</div>
|
||||||
|
<input type="text" id="geturl" value="" class="form-control" readonly="readonly">
|
||||||
|
<div class="input-group-btn"><a href="javascript:;" class="btn btn-default copy-btn" data-clipboard-text="" title="点击复制"><i class="fa fa-copy"></i></a></div>
|
||||||
|
</div>
|
||||||
|
<font color="green">复制链接后在支付宝打开</font>
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item list-group-item-info text-center">
|
||||||
|
或使用支付宝扫描以下二维码
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item text-center">
|
||||||
|
<div id="qrcode"></div>
|
||||||
|
</div>
|
||||||
|
<?php }elseif($app=='apptoken'){
|
||||||
|
$alipay_channel = $DB->getAll("SELECT * FROM pre_channel WHERE plugin='alipaysl'");
|
||||||
|
?>
|
||||||
|
<div class="list-group-item">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">选择支付通道</div>
|
||||||
|
<select id="channel" class="form-control">
|
||||||
|
<?php foreach($alipay_channel as $channel){echo '<option value="'.$channel['id'].'" '.($channel['id']==$conf['login_alipay']?'selected':'').'>'.$channel['name'].'</option>';} ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<font color="green">支持alipaysl支付插件,需要先在支付宝应用(第三方应用)的授权回调地址配置好回调地址</font>
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">授权方式</div>
|
||||||
|
<select id="authtype" class="form-control"><option value="0">基础应用授权</option><option value="1">指定应用授权</option></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">获取链接</div>
|
||||||
|
<input type="text" id="geturl" value="" class="form-control" readonly="readonly">
|
||||||
|
<div class="input-group-btn"><a href="javascript:;" class="btn btn-default copy-btn" data-clipboard-text="" title="点击复制"><i class="fa fa-copy"></i></a></div>
|
||||||
|
</div>
|
||||||
|
<font color="green">复制链接后在支付宝打开</font>
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item list-group-item-info text-center">
|
||||||
|
或使用支付宝扫描以下二维码
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item text-center">
|
||||||
|
<div id="qrcode"></div>
|
||||||
|
</div>
|
||||||
|
<?php }?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>clipboard.js/1.7.1/clipboard.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>jquery.qrcode/1.0/jquery.qrcode.min.js"></script>
|
||||||
|
<script>
|
||||||
|
var apptype = $("#apptype").val();
|
||||||
|
var siteurl = $("#siteurl").val();
|
||||||
|
$(document).ready(function(){
|
||||||
|
var clipboard = new Clipboard('.copy-btn');
|
||||||
|
clipboard.on('success', function (e) {
|
||||||
|
layer.msg('复制成功!', {icon: 1});
|
||||||
|
});
|
||||||
|
clipboard.on('error', function (e) {
|
||||||
|
layer.msg('复制失败,请长按链接后手动复制', {icon: 2});
|
||||||
|
});
|
||||||
|
$("#channel").change(function(){
|
||||||
|
var channel = $("#channel").val();
|
||||||
|
if(channel != null){
|
||||||
|
if(apptype == 'wechat'){
|
||||||
|
var geturl = siteurl+'user/openid.php?wechatid='+channel;
|
||||||
|
}else if(apptype == 'alipayuid'){
|
||||||
|
var geturl = siteurl+'user/openid.php?channel='+channel;
|
||||||
|
}else if(apptype == 'apptoken'){
|
||||||
|
var authtype = $("#authtype").val();
|
||||||
|
if(authtype == '1'){
|
||||||
|
var geturl = siteurl+'user/openid.php?act=app_auth_assign&channel='+channel;
|
||||||
|
}else{
|
||||||
|
var geturl = siteurl+'user/openid.php?act=app_auth&channel='+channel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$("#geturl").val(geturl);
|
||||||
|
$(".copy-btn").attr('data-clipboard-text', geturl);
|
||||||
|
$('#qrcode').empty();
|
||||||
|
$('#qrcode').qrcode({
|
||||||
|
text: geturl,
|
||||||
|
width: 180,
|
||||||
|
height: 180,
|
||||||
|
foreground: "#000000",
|
||||||
|
background: "#ffffff",
|
||||||
|
typeNumber: -1
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.msg('无可用的通道')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$("#channel").change();
|
||||||
|
$("#authtype").change(function(){
|
||||||
|
$("#channel").change();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 用户组设置
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='用户组设置';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-md-10 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$paytype = [];
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_type WHERE status=1 ORDER BY id ASC");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$paytype[$row['id']] = $row['showname'];
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
|
||||||
|
function display_info($info){
|
||||||
|
global $paytype;
|
||||||
|
$result = '';
|
||||||
|
$arr = json_decode($info, true);
|
||||||
|
foreach($arr as $k=>$v){
|
||||||
|
if($v['channel']==0)continue;
|
||||||
|
$result .= $paytype[$k].'('.$v['channel'].'):'.$v['rate'].',';
|
||||||
|
}
|
||||||
|
return substr($result,0,-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_group ORDER BY gid ASC");
|
||||||
|
?>
|
||||||
|
<div class="panel panel-success">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">系统共有 <b><?php echo count($list);?></b> 个用户组 <span class="pull-right"><a href="./gedit.php?act=add" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 新增</a></span></h3></div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead><tr><th>GID</th><th>用户组名称</th><th>通道与费率</th><th>操作</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach($list as $res)
|
||||||
|
{
|
||||||
|
echo '<tr><td><b>'.$res['gid'].'</b></td><td>'.$res['name'].'</td><td>'.display_info($res['info']).'</td><td><a class="btn btn-xs btn-default" href="./ulist.php?gid='.$res['gid'].'">用户</a> <a class="btn btn-xs btn-info" href="./gedit.php?act=edit&gid='.$res['gid'].'">编辑</a> <a class="btn btn-xs btn-danger" onclick="delItem('.$res['gid'].')">删除</a></td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="panel-footer">
|
||||||
|
<span class="glyphicon glyphicon-info-sign"></span> 未设置用户组的用户是默认用户组,会自动使用已添加的可用支付通道和通道默认费率
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function delItem(id) {
|
||||||
|
if(id==0){
|
||||||
|
layer.msg('系统自带默认用户组不支持删除');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此用户组吗?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_user.php?act=delGroup&gid='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload()
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 公告设置
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='公告设置';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<link href="<?php echo $cdnpublic?>bootstrap-colorpicker/2.5.3/css/bootstrap-colorpicker.min.css" rel="stylesheet"/>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
$my=isset($_GET['my'])?$_GET['my']:null;
|
||||||
|
if($my=='edit'){
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$rows=$DB->getRow("select * from pre_anounce where id='$id' limit 1");
|
||||||
|
if(!$rows)
|
||||||
|
showmsg('当前公告不存在!',3);
|
||||||
|
?>
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">修改公告(ID:<?php echo $id?>)</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<form action="./gonggao.php?my=edit_submit&id=<?php echo $id?>" role="form" class="form-horizontal" method="post">
|
||||||
|
<div class="list-group-item">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">公告内容</div>
|
||||||
|
<textarea class="form-control" name="content" rows="5" placeholder="输入公告内容" required><?php echo $rows['content']?></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item form-inline">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">排序</div>
|
||||||
|
<input type="text" name="sort" value="<?php echo $rows['sort']?>" class="form-control" required/>
|
||||||
|
</div>
|
||||||
|
<div class="input-group input-colorpicker colorpicker-element">
|
||||||
|
<input type="text" name="color" value="<?php echo $rows['color']?>" class="form-control" placeholder="文字颜色" maxlength="7"/>
|
||||||
|
<span class="input-group-addon"><i></i></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item">
|
||||||
|
<input type="submit" value="保存" class="btn btn-primary btn-block">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
elseif($my=='add_submit'){
|
||||||
|
$content=$_POST['content'];
|
||||||
|
$sort=intval($_POST['sort']);
|
||||||
|
$color=trim($_POST['color']);
|
||||||
|
if(!$content || !$sort){
|
||||||
|
showmsg('公告内容不能为空',3);
|
||||||
|
} else {
|
||||||
|
$sds=$DB->exec("INSERT INTO `pre_anounce` (`content`, `color`, `sort`, `addtime`, `status`) VALUES ('{$content}', '{$color}', '{$sort}', '{$date}', 1)");
|
||||||
|
if($sds){
|
||||||
|
showmsg('添加公告成功!<br/><br/><a href="./gonggao.php">>>返回公告列表</a>',1);
|
||||||
|
}else
|
||||||
|
showmsg('添加公告失败!<br/>错误信息:'.$DB->error(),4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif($my=='edit_submit'){
|
||||||
|
$id=intval($_GET['id']);
|
||||||
|
$rows=$DB->getRow("select * from pre_anounce where id='$id' limit 1");
|
||||||
|
if(!$rows)
|
||||||
|
showmsg('当前公告不存在!',3);
|
||||||
|
$content=$_POST['content'];
|
||||||
|
$sort=intval($_POST['sort']);
|
||||||
|
$color=trim($_POST['color']);
|
||||||
|
if(!$content || !$sort){
|
||||||
|
showmsg('公告内容不能为空',3);
|
||||||
|
} else {
|
||||||
|
$sds=$DB->exec("UPDATE `pre_anounce` SET `content`='$content',`sort`='$sort',`color`='$color' WHERE `id`='$id'");
|
||||||
|
if($sds!==false){
|
||||||
|
showmsg('修改公告成功!<br/><br/><a href="./gonggao.php">>>返回公告列表</a>',1);
|
||||||
|
}else
|
||||||
|
showmsg('修改公告失败!<br/>错误信息:'.$DB->error(),4);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_anounce ORDER BY sort ASC");
|
||||||
|
?>
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">添加公告</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<form action="./gonggao.php?my=add_submit" role="form" class="form-horizontal" method="post">
|
||||||
|
<div class="list-group-item">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">公告内容</div>
|
||||||
|
<textarea class="form-control" name="content" rows="5" placeholder="输入公告内容" required></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item form-inline">
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-addon">排序</div>
|
||||||
|
<input type="text" name="sort" value="50" class="form-control" required/>
|
||||||
|
</div>
|
||||||
|
<div class="input-group input-colorpicker colorpicker-element">
|
||||||
|
<input type="text" name="color" value="" class="form-control" placeholder="文字颜色" maxlength="7"/>
|
||||||
|
<span class="input-group-addon"><i></i></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="list-group-item">
|
||||||
|
<input type="submit" value="添加" class="btn btn-primary btn-block">
|
||||||
|
<a href="./set.php?mod=gonggao" class="btn btn-default btn-block">弹出公告与首页底部设置</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">已发公告</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<?php foreach($list as $row){?>
|
||||||
|
<div class="list-group-item">
|
||||||
|
<em class="fa fa-fw fa-volume-up"></em><font color="<?php echo $row['color']?$row['color']:null?>"><?php echo $row['content']?></font><small> -<?php echo $row['addtime']?></small> <?php echo $row['status']==1?'<span class="btn btn-xs btn-success" onclick="setStatus('.$row['id'].',0)">显示</span>':'<span class="btn btn-xs btn-warning" onclick="setStatus('.$row['id'].',1)">隐藏</span>'?> <a class="btn btn-xs btn-info" href="./gonggao.php?my=edit&id=<?php echo $row['id']?>">编辑</a> <a class="btn btn-xs btn-danger" href="javascript:delItem(<?php echo $row['id']?>)">删除</a>
|
||||||
|
</div>
|
||||||
|
<?php }?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php }?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>bootstrap-colorpicker/2.5.3/js/bootstrap-colorpicker.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function setStatus(id,status) {
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax.php?act=setGonggao&id='+id+'&status='+status,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload();
|
||||||
|
}else{
|
||||||
|
layer.msg(data.msg, {icon:2, time:1500});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function delItem(id) {
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此公告吗?', {
|
||||||
|
btn: ['确定','取消']
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax.php?act=delGonggao&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload();
|
||||||
|
}else{
|
||||||
|
layer.msg(data.msg, {icon:2, time:1500});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('.input-colorpicker').colorpicker({format: 'hex'});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 用户组购买设置
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='用户组购买设置';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
.table>tbody>tr>td{vertical-align: middle;}</style>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-sm-12 col-md-10 col-lg-9 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$list1 = $DB->getAll("SELECT * FROM pre_group WHERE isbuy=1 ORDER BY SORT ASC");
|
||||||
|
$list2 = $DB->getAll("SELECT * FROM pre_group WHERE isbuy=0");
|
||||||
|
?>
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-body">
|
||||||
|
<div class="list-group-item">用户组购买开关:<?php echo $conf['group_buy']==1?'<span style="color:green">已开启</span> <a href="javascript:changeSetting(0)" class="btn btn-danger btn-sm">点击关闭</a>':'<span style="color:red">已关闭</span> <a href="javascript:changeSetting(1)" class="btn btn-success btn-sm">点击开启</a>';?></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-success">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">可购买的用户组 (<b><?php echo count($list1);?></b>)</h3></div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead><tr><th>GID</th><th>用户组名称</th><th>售价</th><th>有效期(月)</th><th>排序</th><th>可见范围 <a tabindex="0" role="button" data-toggle="popover" data-trigger="focus" title="" data-placement="top" data-content="可设置哪些用户组可以看到并购买该用户组,留空为全部可见,填写可见用户组GID,多个GID用,隔开" data-original-title="可见范围说明"><span class="glyphicon glyphicon-info-sign"></span></a></th><th>操作</th></tr></thead>
|
||||||
|
<tbody><form id="glist">
|
||||||
|
<?php
|
||||||
|
foreach($list1 as $res)
|
||||||
|
{
|
||||||
|
echo '<tr><td><b>'.$res['gid'].'</b></td><td>'.$res['name'].'</td><td><input type="text" class="form-control input-sm" name="price['.$res['gid'].']" value="'.$res['price'].'" placeholder="填写售价" required></td><td><input type="text" class="form-control input-sm" name="expire['.$res['gid'].']" value="'.($res['expire']=='0'?'':$res['expire']).'" placeholder="0或留空为永久" required></td><td><input type="text" class="form-control input-sm" name="sort['.$res['gid'].']" value="'.$res['sort'].'" placeholder="数字越小越靠前" required></td><td><input type="text" class="form-control input-sm" name="visible['.$res['gid'].']" value="'.$res['visible'].'" placeholder="留空为全部可见" required></td><td><a class="btn btn-sm btn-warning" onclick="setItem('.$res['gid'].',0)">下架</a></td></tr>';
|
||||||
|
}
|
||||||
|
if(count($list1)>0)echo '<tr><td></td><td></td><td colspan="4"><span class="btn btn-success btn-sm btn-block" onclick="saveAll()">保存全部</span></td><td></td></tr>';
|
||||||
|
?></form>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">不可购买的用户组 (<b><?php echo count($list2);?></b>)</h3></div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead><tr><th>GID</th><th>用户组名称</th><th>操作</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach($list2 as $res)
|
||||||
|
{
|
||||||
|
echo '<tr><td><b>'.$res['gid'].'</b></td><td>'.$res['name'].'</td><td><a class="btn btn-sm btn-success" onclick="setItem('.$res['gid'].',1)">上架</a></td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function saveAll(){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=saveGroupPrice',
|
||||||
|
data : $("#glist").serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg,{
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
window.location.reload()
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setItem(id,status) {
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=saveGroup',
|
||||||
|
data : {action:'changebuy', gid:id, status:status},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload()
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function changeSetting(value){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax.php?act=set',
|
||||||
|
data : {group_buy:value},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert('更换设置成功!', {
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
window.location.reload()
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$(function () {
|
||||||
|
$('[data-toggle="popover"]').popover()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
<?php
|
||||||
|
@header('Content-Type: text/html; charset=UTF-8');
|
||||||
|
|
||||||
|
$admin_cdnpublic = 4;
|
||||||
|
if($admin_cdnpublic==1){
|
||||||
|
$cdnpublic = '//lib.baomitu.com/';
|
||||||
|
}elseif($admin_cdnpublic==2){
|
||||||
|
$cdnpublic = 'https://s4.zstatic.net/ajax/libs/';
|
||||||
|
}elseif($admin_cdnpublic==4){
|
||||||
|
$cdnpublic = '//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/';
|
||||||
|
}else{
|
||||||
|
$cdnpublic = '//mirrors.sustech.edu.cn/cdnjs/ajax/libs/';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh-cn">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<meta name="renderer" content="webkit">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||||
|
<title><?php echo $title ?></title>
|
||||||
|
<link href="<?php echo $cdnpublic?>twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"/>
|
||||||
|
<link href="../assets/css/bootstrap.min.css" rel="stylesheet"/>
|
||||||
|
<link href="../assets/css/bootstrap-table.css?v=1" rel="stylesheet"/>
|
||||||
|
<link href="<?php echo $cdnpublic?>font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
|
||||||
|
<script src="<?php echo $cdnpublic?>modernizr/2.8.3/modernizr.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>jquery/2.1.4/jquery.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="<?php echo $cdnpublic?>html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>respond.js/1.4.2/respond.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<?php if($islogin==1){?>
|
||||||
|
<nav class="navbar navbar-fixed-top navbar-default">
|
||||||
|
<div class="container">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
||||||
|
<span class="sr-only">导航按钮</span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<a class="navbar-brand" href="./">支付管理中心</a>
|
||||||
|
</div><!-- /.navbar-header -->
|
||||||
|
<div id="navbar" class="collapse navbar-collapse">
|
||||||
|
<ul class="nav navbar-nav navbar-right">
|
||||||
|
<li class="<?php echo checkIfActive('index,')?>">
|
||||||
|
<a href="./"><i class="fa fa-home"></i> 平台首页</a>
|
||||||
|
</li>
|
||||||
|
<li class="<?php echo checkIfActive('order')?>">
|
||||||
|
<a href="./order.php"><i class="fa fa-list"></i> 订单管理</a>
|
||||||
|
</li>
|
||||||
|
<li class="<?php echo checkIfActive('settle,slist')?>">
|
||||||
|
<a href="./slist.php"><i class="fa fa-cloud"></i> 结算管理</a>
|
||||||
|
</li>
|
||||||
|
<li class="<?php echo checkIfActive('ulist,glist,gedit,group,record,uset,domain,ustat,invitecode')?>">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-user"></i> 商户管理<b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="./ulist.php">用户列表</a></li>
|
||||||
|
<li><a href="./glist.php">用户组设置</a></li>
|
||||||
|
<li><a href="./group.php">用户组购买</a></li>
|
||||||
|
<li><a href="./record.php">资金明细</a></li>
|
||||||
|
<li><a href="./ustat.php">支付统计</a></li>
|
||||||
|
<?php if($conf['pay_domain_forbid']==1 || $conf['pay_domain_open']==1){?><li><a href="./domain.php">授权域名</a></li><?php }?>
|
||||||
|
<?php if($conf['reg_open']==2){?><li><a href="./invitecode.php">邀请码管理</a></li><?php }?>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="<?php echo checkIfActive('pay_channel,pay_roll,pay_type,pay_plugin,pay_weixin')?>">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-credit-card"></i> 支付接口<b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="./pay_channel.php">支付通道</a></li>
|
||||||
|
<li><a href="./pay_type.php">支付方式</a></li>
|
||||||
|
<li><a href="./pay_plugin.php">支付插件</a></li>
|
||||||
|
<li><a href="./pay_roll.php">支付通道轮询</a></li>
|
||||||
|
<li><a href="./pay_weixin.php">公众号小程序</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="<?php echo checkIfActive('set,gonggao,set_wxkf')?>">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i> 系统设置<b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="./set.php?mod=site">网站信息配置</a></li>
|
||||||
|
<li><a href="./set.php?mod=pay">支付相关配置</a><li>
|
||||||
|
<li><a href="./set.php?mod=risk">风控检测配置</a><li>
|
||||||
|
<li><a href="./set.php?mod=settle">结算规则配置</a><li>
|
||||||
|
<li><a href="./set.php?mod=transfer">转账付款配置</a><li>
|
||||||
|
<li><a href="./set.php?mod=oauth">快捷登录配置</a><li>
|
||||||
|
<li><a href="./set.php?mod=notice">消息提醒配置</a><li>
|
||||||
|
<li><a href="./set.php?mod=certificate">实名认证配置</a><li>
|
||||||
|
<li><a href="./gonggao.php">网站公告配置</a></li>
|
||||||
|
<li><a href="./set.php?mod=template">首页模板配置</a><li>
|
||||||
|
<li><a href="./set.php?mod=mail">邮箱与短信配置</a><li>
|
||||||
|
<li><a href="./set.php?mod=upimg">网站Logo上传</a><li>
|
||||||
|
<li><a href="./set.php?mod=cron">计划任务配置</a><li>
|
||||||
|
<li><a href="./set_wxkf.php">H5跳转微信客服支付</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="<?php echo checkIfActive('clean,log,transfer,transfer_add,risk,export,ps_receiver,ps_order,gettoken,blacklist,complain,complain_info,buyerstat')?>">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cube"></i> 其他功能<b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="./export.php">导出订单</a><li>
|
||||||
|
<li><a href="./transfer_add.php">转账付款</a><li>
|
||||||
|
<li><a href="./transfer.php">付款记录</a><li>
|
||||||
|
<li><a href="./risk.php">风控记录</a><li>
|
||||||
|
<li><a href="./log.php">登录日志</a><li>
|
||||||
|
<li><a href="./clean.php">数据清理</a><li>
|
||||||
|
<li><a href="./ps_receiver.php">分账规则</a><li>
|
||||||
|
<li><a href="./ps_order.php">分账记录</a><li>
|
||||||
|
<li><a href="./gettoken.php">获取用户标识</a><li>
|
||||||
|
<li><a href="./blacklist.php">黑名单管理</a></li>
|
||||||
|
<li><a href="./buyerstat.php">支付用户统计</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="./login.php?logout" onclick="return confirm('是否确定退出登录?')"><i class="fa fa-power-off"></i> 退出登录</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- /.navbar-collapse -->
|
||||||
|
</div><!-- /.container -->
|
||||||
|
</nav><!-- /.navbar -->
|
||||||
|
<?php }?>
|
||||||
@@ -0,0 +1,176 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='支付管理中心';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<?php
|
||||||
|
if($conf['admin_pwd']==='123456'){
|
||||||
|
$msg[]='<li class="list-group-item list-group-item-danger"><span class="btn-sm btn-danger"><i class="fa fa-info-circle"></i> 提示</span> 请及时修改网站默认管理员密码!</li>';
|
||||||
|
}elseif(strlen($conf['admin_pwd'])<6 || is_numeric($conf['admin_pwd']) && strlen($conf['admin_pwd'])<=10 || $conf['admin_pwd']===$conf['kfqq'] || $conf['admin_user']===$conf['admin_pwd']){
|
||||||
|
$msg[]='<li class="list-group-item list-group-item-danger"><span class="btn-sm btn-danger"><i class="fa fa-info-circle"></i> 提示</span> 网站管理员密码过于简单,请及时修改密码!</li>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-xs-12 col-lg-9 center-block" style="float: none;">
|
||||||
|
<div id="browser-notice"></div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12 col-lg-8">
|
||||||
|
<div class="panel panel-info">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title" id="title">后台管理首页</h3></div>
|
||||||
|
<ul class="list-group">
|
||||||
|
<?php if($msg){foreach($msg as $x){echo $x;}}?>
|
||||||
|
<li class="list-group-item"><span class="glyphicon glyphicon-stats"></span> <b>订单总数:</b><span id="count1"></span></li>
|
||||||
|
<li class="list-group-item"><span class="glyphicon glyphicon-tint"></span> <b>商户数量:</b><span id="count2"></span></li>
|
||||||
|
<li class="list-group-item"><span class="glyphicon glyphicon-tint"></span> <b>总计余额:</b><span id="usermoney"></span> 元(1小时更新一次)</li>
|
||||||
|
<li class="list-group-item"><span class="glyphicon glyphicon-tint"></span> <b>结算总额:</b><span id="settlemoney"></span> 元(1小时更新一次)</li>
|
||||||
|
<li class="list-group-item"><span class="glyphicon glyphicon-stats"></span> <b>今日订单成功率:</b><span id="success_rate"></span> %</li>
|
||||||
|
<li class="list-group-item"><span class="glyphicon glyphicon-time"></span> <b>现在时间:</b> <?=$date?></li>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-12 col-lg-4">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title" id="title">管理员信息</h3></div>
|
||||||
|
<ul class="list-group text-center">
|
||||||
|
<li class="list-group-item">
|
||||||
|
<img src="<?php echo ($conf['kfqq'])?'//q2.qlogo.cn/headimg_dl?bs=qq&dst_uin='.$conf['kfqq'].'&src_uin='.$conf['kfqq'].'&fid='.$conf['kfqq'].'&spec=100&url_enc=0&referer=bu_interface&term_type=PC':'../assets/img/user.png'?>" alt="avatar" class="img-circle img-thumbnail"></br>
|
||||||
|
<span class="text-muted"><strong>用户名:</strong><font color="blue"><?php echo $conf['admin_user']?></font></span><br/><span class="text-muted"><strong>用户权限:</strong><font color="orange">管理员</font></span></li>
|
||||||
|
<li class="list-group-item"><a href="../" class="btn btn-xs btn-default">返回首页</a> <a href="./set.php?mod=account" class="btn btn-xs btn-info">修改密码</a> <a href="./login.php?logout" class="btn btn-xs btn-danger">退出登录</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-success">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">支付方式收入统计(1小时更新一次)<span class="pull-right"><a href="javascript:getData(true)" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></a></span></h3></div>
|
||||||
|
<table class="table table-bordered table-striped">
|
||||||
|
<thead><tr id="paytype_head"><th>日期</th></thead>
|
||||||
|
<tbody id="paytype_list">
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-warning">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">支付通道收入统计(1小时更新一次)<span class="pull-right"><a href="javascript:getData(true)" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></a></span></h3></div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-bordered table-striped">
|
||||||
|
<thead><tr id="channel_head"><th>日期</th></thead>
|
||||||
|
<tbody id="channel_list">
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-warning">
|
||||||
|
<div class="panel-heading" style="background-color: #c09853;"><h3 class="panel-title">支付方式手续费利润(已扣除通道成本,1小时更新一次)<span class="pull-right"><a href="javascript:getData(true)" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></a></span></h3></div>
|
||||||
|
<table class="table table-bordered table-striped">
|
||||||
|
<thead><tr id="profit_paytype_head"><th>日期</th></thead>
|
||||||
|
<tbody id="profit_paytype_list">
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
getData();
|
||||||
|
});
|
||||||
|
function getData(getnew){
|
||||||
|
getnew = getnew || false;
|
||||||
|
$('#title').html('正在加载数据中...');
|
||||||
|
$.ajax({
|
||||||
|
type : "GET",
|
||||||
|
url : "ajax.php?act=getcount"+(getnew?'&getnew=1':''),
|
||||||
|
dataType : 'json',
|
||||||
|
async: true,
|
||||||
|
success : function(data) {
|
||||||
|
$('#title').html('后台管理首页');
|
||||||
|
$('#count1').html(data.count1);
|
||||||
|
$('#count2').html(data.count2);
|
||||||
|
$('#usermoney').html(data.usermoney);
|
||||||
|
$('#settlemoney').html(data.settlemoney);
|
||||||
|
$('#success_rate').html(data.success_rate);
|
||||||
|
|
||||||
|
$("#paytype_head").html('<th>日期</th>');
|
||||||
|
$("#paytype_list").empty();
|
||||||
|
var paytype=new Array();
|
||||||
|
$.each(data.paytype, function(k, v){
|
||||||
|
paytype.push(k);
|
||||||
|
$("#paytype_head").append('<th>'+v+'</th>');
|
||||||
|
});
|
||||||
|
$("#paytype_head").append('<th>总计</th>');
|
||||||
|
var order = '';
|
||||||
|
$.each(paytype, function(k, v){
|
||||||
|
if(typeof data.order_today.paytype[v] != "undefined")order+='<td>'+data.order_today.paytype[v]+'</td>';
|
||||||
|
else order+='<td>0</td>';
|
||||||
|
});
|
||||||
|
$("#paytype_list").append('<tr><td>今日</td>'+order+'<td>'+data.order_today.all+'</td></tr>');
|
||||||
|
$.each(data.order, function(k, v){
|
||||||
|
var order = '';
|
||||||
|
$.each(paytype, function(key, value){
|
||||||
|
if(typeof v.paytype[value] != "undefined")order+='<td>'+v.paytype[value]+'</td>';
|
||||||
|
else order+='<td>0</td>';
|
||||||
|
});
|
||||||
|
$("#paytype_list").append('<tr><td>'+k+'</td>'+order+'<td>'+v.all+'</td></tr>');
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#channel_head").html('<th>日期</th>');
|
||||||
|
$("#channel_list").empty();
|
||||||
|
var channel=new Array();
|
||||||
|
$.each(data.channel, function(k, v){
|
||||||
|
channel.push(k);
|
||||||
|
$("#channel_head").append('<th>'+v+'</th>');
|
||||||
|
});
|
||||||
|
$("#channel_head").append('<th>总计</th>');
|
||||||
|
var order = '';
|
||||||
|
$.each(channel, function(k, v){
|
||||||
|
if(typeof data.order_today.channel[v] != "undefined")order+='<td>'+data.order_today.channel[v]+'</td>';
|
||||||
|
else order+='<td>0</td>';
|
||||||
|
});
|
||||||
|
$("#channel_list").append('<tr><td>今日</td>'+order+'<td>'+data.order_today.all+'</td></tr>');
|
||||||
|
$.each(data.order, function(k, v){
|
||||||
|
var order = '';
|
||||||
|
$.each(channel, function(key, value){
|
||||||
|
if(typeof v.channel[value] != "undefined")order+='<td>'+v.channel[value]+'</td>';
|
||||||
|
else order+='<td>0</td>';
|
||||||
|
});
|
||||||
|
$("#channel_list").append('<tr><td>'+k+'</td>'+order+'<td>'+v.all+'</td></tr>');
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#profit_paytype_head").html('<th>日期</th>');
|
||||||
|
$("#profit_paytype_list").empty();
|
||||||
|
var paytype=new Array();
|
||||||
|
$.each(data.paytype, function(k, v){
|
||||||
|
paytype.push(k);
|
||||||
|
$("#profit_paytype_head").append('<th>'+v+'</th>');
|
||||||
|
});
|
||||||
|
$("#profit_paytype_head").append('<th>总计</th>');
|
||||||
|
var order = '';
|
||||||
|
$.each(paytype, function(k, v){
|
||||||
|
if(typeof data.order_today.profit_paytype[v] != "undefined")order+='<td>'+data.order_today.profit_paytype[v]+'</td>';
|
||||||
|
else order+='<td>0</td>';
|
||||||
|
});
|
||||||
|
$("#profit_paytype_list").append('<tr><td>今日</td>'+order+'<td>'+data.order_today.profit_all+'</td></tr>');
|
||||||
|
$.each(data.order, function(k, v){
|
||||||
|
var order = '';
|
||||||
|
$.each(paytype, function(key, value){
|
||||||
|
if(typeof v.profit_paytype[value] != "undefined")order+='<td>'+v.profit_paytype[value]+'</td>';
|
||||||
|
else order+='<td>0</td>';
|
||||||
|
});
|
||||||
|
$("#profit_paytype_list").append('<tr><td>'+k+'</td>'+order+'<td>'+v.profit_all+'</td></tr>');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
function speedModeNotice(){
|
||||||
|
var ua = window.navigator.userAgent;
|
||||||
|
if(ua.indexOf('Windows NT')>-1 && ua.indexOf('Trident/')>-1){
|
||||||
|
var html = "<div class=\"panel panel-default\"><div class=\"panel-body\">当前浏览器是兼容模式,为确保后台功能正常使用,请切换到<b style='color:#51b72f'>极速模式</b>!<br>操作方法:点击浏览器地址栏右侧的IE符号<b style='color:#51b72f;'><i class='fa fa-internet-explorer fa-fw'></i></b>→选择“<b style='color:#51b72f;'><i class='fa fa-flash fa-fw'></i></b><b style='color:#51b72f;'>极速模式</b>”</div></div>";
|
||||||
|
$("#browser-notice").html(html)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
speedModeNotice();
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,183 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='邀请码管理';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="modal" align="left" id="search" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title" id="myModalLabel">生成邀请码</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form action="invitecode.php?my=add" method="POST">
|
||||||
|
<input type="text" class="form-control" name="num" placeholder="生成的个数" required><br/>
|
||||||
|
<input type="submit" class="btn btn-primary btn-block" value="生成"></form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-xs-12 col-lg-10 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
function getkm($len = 18)
|
||||||
|
{
|
||||||
|
$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||||
|
$strlen = strlen($str);
|
||||||
|
$randstr = "";
|
||||||
|
for ($i = 0; $i < $len; $i++) {
|
||||||
|
$randstr .= $str[mt_rand(0, $strlen - 1)];
|
||||||
|
}
|
||||||
|
return $randstr;
|
||||||
|
}
|
||||||
|
|
||||||
|
$my=isset($_GET['my'])?$_GET['my']:null;
|
||||||
|
|
||||||
|
if($my=='add'){
|
||||||
|
$kind=1;
|
||||||
|
$num=intval($_POST['num']);
|
||||||
|
$value=intval($_POST['value']);
|
||||||
|
echo "<ul class='list-group'><li class='list-group-item active'>成功生成以下邀请码</li>";
|
||||||
|
for ($i = 0; $i < $num; $i++) {
|
||||||
|
$km=random(8);
|
||||||
|
$sql=$DB->query("insert into `pre_invitecode` (`code`,`addtime`,`status`) values ('".$km."',NOW(),0)");
|
||||||
|
if($sql) {
|
||||||
|
echo "<li class='list-group-item'>$km</li>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '<a href="./invitecode.php" class="btn btn-default btn-block">>>返回邀请码列表</a>';
|
||||||
|
}
|
||||||
|
|
||||||
|
elseif($my=='del'){
|
||||||
|
echo '<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading w h"><h3 class="panel-title">删除邀请码</h3></div>
|
||||||
|
<div class="panel-body box">';
|
||||||
|
$id=$_GET['id'];
|
||||||
|
$sql=$DB->query("DELETE FROM pre_invitecode WHERE id='$id'");
|
||||||
|
if($sql){echo '删除成功!';}
|
||||||
|
else{echo '删除失败!';}
|
||||||
|
echo '<hr/><a href="./invitecode.php">>>返回邀请码列表</a></div></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
elseif($my=='qk'){//清空邀请码
|
||||||
|
if(!checkRefererHost())exit();
|
||||||
|
echo '<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading w h"><h3 class="panel-title">清空邀请码</h3></div>
|
||||||
|
<div class="panel-body box">
|
||||||
|
您确认要清空所有邀请码吗?清空后无法恢复!<br><a href="./invitecode.php?my=qk2">确认</a> | <a href="javascript:history.back();">返回</a></div></div>';
|
||||||
|
}
|
||||||
|
elseif($my=='qk2'){//清空邀请码结果
|
||||||
|
if(!checkRefererHost())exit();
|
||||||
|
echo '<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading w h"><h3 class="panel-title">清空邀请码</h3></div>
|
||||||
|
<div class="panel-body box">';
|
||||||
|
if($DB->query("DELETE FROM pre_invitecode WHERE 1")==true){
|
||||||
|
echo '<div class="box">清空成功.</div>';
|
||||||
|
}else{
|
||||||
|
echo'<div class="box">清空失败.</div>';
|
||||||
|
}
|
||||||
|
echo '<hr/><a href="./invitecode.php">>>返回邀请码列表</a></div></div>';
|
||||||
|
}
|
||||||
|
elseif($my=='qkuse'){//清空已使用邀请码
|
||||||
|
if(!checkRefererHost())exit();
|
||||||
|
echo '<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading w h"><h3 class="panel-title">清空邀请码</h3></div>
|
||||||
|
<div class="panel-body box">
|
||||||
|
您确认要清空所有邀请码吗?清空后无法恢复!<br><a href="./invitecode.php?my=qkuse2">确认</a> | <a href="javascript:history.back();">返回</a></div></div>';
|
||||||
|
}
|
||||||
|
elseif($my=='qkuse2'){//清空已使用邀请码结果
|
||||||
|
if(!checkRefererHost())exit();
|
||||||
|
echo '<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading w h"><h3 class="panel-title">清空邀请码</h3></div>
|
||||||
|
<div class="panel-body box">';
|
||||||
|
if($DB->exec("DELETE FROM pre_invitecode WHERE status=1")!==false){
|
||||||
|
echo '<div class="box">清空成功.</div>';
|
||||||
|
}else{
|
||||||
|
echo'<div class="box">清空失败.</div>';
|
||||||
|
}
|
||||||
|
echo '<hr/><a href="./invitecode.php">>>返回邀请码列表</a></div></div>';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
echo '<form action="invitecode.php" method="GET" class="form-inline">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>搜索</label>
|
||||||
|
<input type="text" class="form-control" name="kw" placeholder="邀请码" required>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">搜索</button>
|
||||||
|
<a href="invitecode.php?my=qk" class="btn btn-danger">清空</a>
|
||||||
|
<a href="invitecode.php?my=qkuse" class="btn btn-danger">清空已使用</a>
|
||||||
|
<a href="#" data-toggle="modal" data-target="#search" id="search" class="btn btn-success">生成</a>
|
||||||
|
</form>';
|
||||||
|
|
||||||
|
if(isset($_GET['kw'])) {
|
||||||
|
$sql=" `code`='{$_GET['kw']}'";
|
||||||
|
$numrows=$DB->getColumn("SELECT count(*) from pre_invitecode WHERE{$sql}");
|
||||||
|
$con='包含 '.$_GET['kw'].' 的共有 <b>'.$numrows.'</b> 个邀请码';
|
||||||
|
}else{
|
||||||
|
$numrows=$DB->getColumn("SELECT count(*) from pre_invitecode WHERE 1");
|
||||||
|
$sql=" 1";
|
||||||
|
$con='系统共有 <b>'.$numrows.'</b> 个邀请码';
|
||||||
|
}
|
||||||
|
echo $con;
|
||||||
|
?>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead><tr><th>邀请码</th><th>状态</th><th>添加时间</th><th>使用时间</th><th>使用者</th><th>操作</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
$pagesize=30;
|
||||||
|
$pages=ceil($numrows/$pagesize);
|
||||||
|
$page=isset($_GET['page'])?intval($_GET['page']):1;
|
||||||
|
$offset=$pagesize*($page - 1);
|
||||||
|
|
||||||
|
$rs=$DB->query("SELECT * FROM pre_invitecode WHERE{$sql} order by id desc limit $offset,$pagesize");
|
||||||
|
while($res = $rs->fetch())
|
||||||
|
{
|
||||||
|
echo '<tr><td><b>'.$res['code'].'</b></td><td>'.($res['status']==1?'<font color="red">已使用</font>':'<font color="green">未使用</font>').'</td><td>'.$res['addtime'].'</td><td>'.$res['usetime'].'</td><td><a href="./ulist.php?column=uid&value='.$res['uid'].'" target="_blank">'.$res['uid'].'</a></td><td><a href="./invitecode.php?my=del&id='.$res['id'].'" class="btn btn-xs btn-danger" onclick="return confirm(\'你确实要删除此邀请码吗?\');">删除</a></td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
echo'<ul class="pagination">';
|
||||||
|
$first=1;
|
||||||
|
$prev=$page-1;
|
||||||
|
$next=$page+1;
|
||||||
|
$last=$pages;
|
||||||
|
if ($page>1)
|
||||||
|
{
|
||||||
|
echo '<li><a href="invitecode.php?page='.$first.$link.'">首页</a></li>';
|
||||||
|
echo '<li><a href="invitecode.php?page='.$prev.$link.'">«</a></li>';
|
||||||
|
} else {
|
||||||
|
echo '<li class="disabled"><a>首页</a></li>';
|
||||||
|
echo '<li class="disabled"><a>«</a></li>';
|
||||||
|
}
|
||||||
|
for ($i=1;$i<$page;$i++)
|
||||||
|
echo '<li><a href="invitecode.php?page='.$i.$link.'">'.$i .'</a></li>';
|
||||||
|
echo '<li class="disabled"><a>'.$page.'</a></li>';
|
||||||
|
for ($i=$page+1;$i<=$pages;$i++)
|
||||||
|
echo '<li><a href="invitecode.php?page='.$i.$link.'">'.$i .'</a></li>';
|
||||||
|
echo '';
|
||||||
|
if ($page<$pages)
|
||||||
|
{
|
||||||
|
echo '<li><a href="invitecode.php?page='.$next.$link.'">»</a></li>';
|
||||||
|
echo '<li><a href="invitecode.php?page='.$last.$link.'">尾页</a></li>';
|
||||||
|
} else {
|
||||||
|
echo '<li class="disabled"><a>»</a></li>';
|
||||||
|
echo '<li class="disabled"><a>尾页</a></li>';
|
||||||
|
}
|
||||||
|
echo'</ul>';
|
||||||
|
#分页
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
if(!defined('IN_CRONLITE')) {
|
||||||
|
exit('Access Denied');
|
||||||
|
}
|
||||||
|
preg_match("#^\d.\d#", PHP_VERSION, $p_v);
|
||||||
|
$php_v = str_replace('.', '', $p_v[0]);
|
||||||
|
|
||||||
|
$is_win = strtolower(substr(PHP_OS, 0, 3)) === 'win';
|
||||||
|
$loader_ext = $is_win ? 'dll' : 'so';
|
||||||
|
$loader_path = ROOT.'assets/loader/swoole_loader_'.$php_v.'_nts.' . $loader_ext;
|
||||||
|
$loader_path = str_replace('/', DIRECTORY_SEPARATOR, $loader_path);
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
if($p_v[0] < 8.0 || $p_v[0] >= 8.1){
|
||||||
|
showmsg('当前插件只支持PHP-8.0版本!');
|
||||||
|
}
|
||||||
|
if(!file_exists($loader_path)){
|
||||||
|
showmsg('Swoole Loader文件不存在,请联系管理员手动安装!');
|
||||||
|
}?>
|
||||||
|
<div class="panel panel-info">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">Swoole Loader 安装助手</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<p>1、打开您的PHP配置文件(<code><?php echo php_ini_loaded_file()?></code>),如果是宝塔面板,在【软件商店】,找到PHP,点击【设置】->【配置文件】</p>
|
||||||
|
<p>2、PHP配置文件底部找一下,如果以前添加过类似<code>extension=swoole_loader_***.<?php echo $loader_ext?></code>这样的代码,先将其删掉,如果没有就下一步</p>
|
||||||
|
<p>3、将下面的代码复制到PHP配置文件的最后一行保存:</p>
|
||||||
|
<p><code>extension=<?php echo $loader_path?></code></p>
|
||||||
|
<p>4、重启php进程</p>
|
||||||
|
<p>5、刷新本页面</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 登录日志
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='登录日志';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-md-12 center-block" style="float: none;">
|
||||||
|
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>搜索</label>
|
||||||
|
<select name="column" class="form-control"><option value="uid">商户号</option><option value="ip">操作IP</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="value" placeholder="搜索内容(0为管理员)">
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">搜索</button>
|
||||||
|
<a href="javascript:searchClear()" class="btn btn-default" title="刷新登录日志"><i class="fa fa-refresh"></i></a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<table id="listTable">
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
|
||||||
|
<script src="../assets/js/custom.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
updateToolbar();
|
||||||
|
const defaultPageSize = 30;
|
||||||
|
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
|
||||||
|
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
|
||||||
|
|
||||||
|
$("#listTable").bootstrapTable({
|
||||||
|
url: 'ajax_user.php?act=logList',
|
||||||
|
pageNumber: pageNumber,
|
||||||
|
pageSize: pageSize,
|
||||||
|
classes: 'table table-striped table-hover table-bordered',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
field: 'id',
|
||||||
|
title: 'ID',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<b>'+value+'</b>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'uid',
|
||||||
|
title: '商户号',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return value>0?'<a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a>':'管理员';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'type',
|
||||||
|
title: '操作类型'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ip',
|
||||||
|
title: '操作IP',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<a href="https://m.ip138.com/iplookup.asp?ip='+value+'" target="_blank" rel="noreferrer">'+value+'</a>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'date',
|
||||||
|
title: '时间'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
})
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 登录
|
||||||
|
**/
|
||||||
|
$verifycode = 1;//验证码开关
|
||||||
|
$login_limit_count = 5;//登录失败次数
|
||||||
|
$login_limit_file = '@login.lock';
|
||||||
|
|
||||||
|
if(!function_exists("imagecreate") || !file_exists('code.php'))$verifycode=0;
|
||||||
|
include("../includes/common.php");
|
||||||
|
|
||||||
|
if(isset($_GET['act']) && $_GET['act']=='login'){
|
||||||
|
if(!checkRefererHost())exit('{"code":403}');
|
||||||
|
$username = trim($_POST['username']);
|
||||||
|
$password = trim($_POST['password']);
|
||||||
|
$code = trim($_POST['code']);
|
||||||
|
if(empty($username) || empty($password)){
|
||||||
|
exit(json_encode(['code'=>-1,'msg'=>'用户名或密码不能为空']));
|
||||||
|
}
|
||||||
|
if($verifycode==1 && (!$code || strtolower($code) != $_SESSION['vc_code'])){
|
||||||
|
exit(json_encode(['code'=>-1,'msg'=>'验证码错误']));
|
||||||
|
}
|
||||||
|
$errcount = $DB->getColumn("SELECT count(*) FROM `pre_log` WHERE `ip`='$clientip' AND `date`>DATE_SUB(NOW(),INTERVAL 1 DAY) AND `uid`=0 AND `type`='登录失败'");
|
||||||
|
if($errcount >= $login_limit_count && file_exists($login_limit_file)){
|
||||||
|
exit(json_encode(['code'=>-1,'msg'=>'多次登录失败,暂时禁止登录。可删除@login.lock文件解除限制']));
|
||||||
|
}
|
||||||
|
if($username == $conf['admin_user'] && $password == $conf['admin_pwd']){
|
||||||
|
$DB->insert('log', ['uid'=>0, 'type'=>'登录后台', 'date'=>'NOW()', 'ip'=>$clientip]);
|
||||||
|
$session=md5($username.$password.$password_hash);
|
||||||
|
$expiretime=time() + 2592000;
|
||||||
|
$token=authcode("{$username}\t{$session}\t{$expiretime}", 'ENCODE', SYS_KEY);
|
||||||
|
setcookie("admin_token", $token, $expiretime, null, null, null, true);
|
||||||
|
unset($_SESSION['vc_code']);
|
||||||
|
exit(json_encode(['code'=>0]));
|
||||||
|
}else{
|
||||||
|
$DB->insert('log', ['uid'=>0, 'type'=>'登录失败', 'date'=>'NOW()', 'ip'=>$clientip]);
|
||||||
|
unset($_SESSION['vc_code']);
|
||||||
|
$errcount++;
|
||||||
|
$retry_times = $login_limit_count - $errcount;
|
||||||
|
if($retry_times < 0) $retry_times = 0;
|
||||||
|
if($retry_times <= 0){
|
||||||
|
file_put_contents($login_limit_file, '1');
|
||||||
|
exit(json_encode(['code'=>-1,'msg'=>'多次登录失败,暂时禁止登录。可删除@login.lock文件解除限制','vcode'=>1]));
|
||||||
|
}else{
|
||||||
|
exit(json_encode(['code'=>-1,'msg'=>'用户名或密码错误,你还可以尝试'.$retry_times.'次','vcode'=>1]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}elseif(isset($_GET['logout'])){
|
||||||
|
if(!checkRefererHost())exit();
|
||||||
|
setcookie("admin_token", "", time() - 2592000);
|
||||||
|
exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
}elseif($islogin==1){
|
||||||
|
exit("<script language='javascript'>alert('您已登录!');window.location.href='./';</script>");
|
||||||
|
}
|
||||||
|
$title='用户登录';
|
||||||
|
include './head.php';
|
||||||
|
?>
|
||||||
|
<nav class="navbar navbar-fixed-top navbar-default">
|
||||||
|
<div class="container">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
||||||
|
<span class="sr-only">导航按钮</span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<a class="navbar-brand" href="./">支付管理中心</a>
|
||||||
|
</div><!-- /.navbar-header -->
|
||||||
|
<div id="navbar" class="collapse navbar-collapse">
|
||||||
|
<ul class="nav navbar-nav navbar-right">
|
||||||
|
<li class="active">
|
||||||
|
<a href="./login.php"><span class="glyphicon glyphicon-user"></span> 登录</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- /.navbar-collapse -->
|
||||||
|
</div><!-- /.container -->
|
||||||
|
</nav><!-- /.navbar -->
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-xs-12 col-sm-10 col-md-8 col-lg-6 center-block" style="float: none;">
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">管理员登录</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<form class="form-horizontal" role="form" onsubmit="return submitlogin()">
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
|
||||||
|
<input type="text" name="user" value="" class="form-control input-lg" placeholder="用户名" required="required"/>
|
||||||
|
</div><br/>
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
|
||||||
|
<input type="password" name="pass" class="form-control input-lg" placeholder="密码" required="required"/>
|
||||||
|
</div><br/>
|
||||||
|
<?php if($verifycode==1){?>
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-addon"><span class="glyphicon glyphicon-adjust"></span></span>
|
||||||
|
<input type="text" class="form-control input-lg" name="code" placeholder="输入验证码" autocomplete="off" required>
|
||||||
|
<span class="input-group-addon" style="padding: 0">
|
||||||
|
<img id="verifycode" src="./code.php?r=<?php echo time();?>"height="45"onclick="this.src='./code.php?r='+Math.random();" title="点击更换验证码">
|
||||||
|
</span>
|
||||||
|
</div><br/>
|
||||||
|
<?php }?>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-xs-12"><input type="submit" value="立即登录" class="btn btn-primary btn-block btn-lg"/></div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function submitlogin(){
|
||||||
|
var user = $("input[name='user']").val();
|
||||||
|
var pass = $("input[name='pass']").val();
|
||||||
|
var code = $("input[name='code']").val();
|
||||||
|
if(user=='' || pass==''){layer.alert('用户名或密码不能为空!');return false;}
|
||||||
|
var ii = layer.load(2);
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : '?act=login',
|
||||||
|
data: {username:user, password:pass, code:code},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.msg('登录成功,正在跳转', {icon: 1,shade: 0.01,time: 15000});
|
||||||
|
window.location.href='./';
|
||||||
|
}else{
|
||||||
|
if(data.vcode==1){
|
||||||
|
$("#verifycode").attr('src', './code.php?r='+Math.random())
|
||||||
|
}
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,941 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 订单列表
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='订单列表';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
|
||||||
|
$type_select = '<option value="0">所有支付方式</option>';
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_type ORDER BY id ASC");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$type_select .= '<option value="'.$row['id'].'">'.$row['showname'].'</option>';
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
#orderItem .orderTitle{word-break:keep-all;}
|
||||||
|
#orderItem .orderContent{word-break:break-all;}
|
||||||
|
.dates{max-width: 120px;}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.table-responsive {
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.type-logo{width: 18px;margin-top: -2px;padding-right: 4px;}
|
||||||
|
</style>
|
||||||
|
<link href="../assets/css/datepicker.css" rel="stylesheet">
|
||||||
|
<div class="container-fluid" style="padding-top:70px;">
|
||||||
|
<div class="col-md-12 center-block" style="float: none;">
|
||||||
|
|
||||||
|
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
|
||||||
|
<input type="hidden" name="subchannel" value="">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>搜索</label>
|
||||||
|
<select name="column" class="form-control"><option value="trade_no">订单号</option><option value="out_trade_no">商户订单号</option><option value="api_trade_no">接口订单号</option><option value="bill_trade_no">用户交易单号</option><option value="name">商品名称</option><option value="money">订单金额</option><option value="realmoney">实付金额</option><option value="getmoney">分成金额</option><option value="domain">网站域名</option><option value="buyer">支付账号</option><option value="ip">支付IP</option><option value="mobile">手机号码</option><option value="param">扩展参数</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="value" placeholder="搜索内容" value="">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="uid" style="width: 100px;" placeholder="商户号" value="">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="type" class="form-control"><?php echo $type_select?></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="channel" style="width: 80px;" placeholder="通道ID" value="">
|
||||||
|
</div>
|
||||||
|
<div class="input-group input-daterange">
|
||||||
|
<input type="text" id="starttime" name="starttime" class="form-control dates" placeholder="开始日期" autocomplete="off" title="留空则不限时间范围">
|
||||||
|
<span class="input-group-addon" onclick="$('#starttime').val('');$('#endtime').val('');" title="清除"><i class="fa fa-chevron-right"></i></span>
|
||||||
|
<input type="text" id="endtime" name="endtime" class="form-control dates" placeholder="结束日期" autocomplete="off" title="留空则不限时间范围">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="0">状态未支付</option><option value="1">状态已支付</option><option value="2">状态已退款</option><option value="3">状态已冻结</option><option value="4">状态预授权</option></select>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary"> 搜索 </button>
|
||||||
|
<a href="javascript:searchClear()" class="btn btn-default" title="刷新订单列表"><i class="fa fa-refresh"></i></a>
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<button type="button" id="batchAction" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">批量操作 <span class="caret"></span></button>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="javascript:operation(0)" data-action-type="0">改未完成</a></li>
|
||||||
|
<li><a href="javascript:operation(1)" data-action-type="1">改已完成</a></li>
|
||||||
|
<li><a href="javascript:operation(5)" data-action-type="5">API退款</a></li>
|
||||||
|
<li><a href="javascript:operation(2)" data-action-type="2">冻结订单</a></li>
|
||||||
|
<li><a href="javascript:operation(3)" data-action-type="3">解冻订单</a></li>
|
||||||
|
<li><a href="javascript:operation(4)" data-action-type="4">删除订单</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<button type="button" onclick="statistics()" class="btn btn-default"> 统计 </button>
|
||||||
|
</form>
|
||||||
|
<table id="listTable">
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal" id="modal-statistics" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content animated flipInX">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span
|
||||||
|
aria-hidden="true">×</span><span
|
||||||
|
class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title" id="modal-title">订单统计概况</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-primary" data-dismiss="modal">关闭</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<template id="statistics">
|
||||||
|
<ul class="list-inline" style="margin-bottom: 0;padding-bottom: 10px;border-bottom: 1px solid #dddddd;">
|
||||||
|
<li>订单总金额:<span style="font-weight: 600;">¥ {totalMoney}</span></li>
|
||||||
|
<li>已支付金额:<span style="font-weight: 600;">¥ {successMoney}</span></li>
|
||||||
|
<li>未支付金额:<span style="font-weight: 600;">¥ {unpaidMoney}</span></li>
|
||||||
|
<li>已退款金额:<span style="font-weight: 600;">¥ {refundMoney}</span></li>
|
||||||
|
<li>总收入利润: <span style="font-weight: 600;">¥ {platformProfit}</li>
|
||||||
|
</ul>
|
||||||
|
<ul class="list-inline" style="padding-top:10px;margin-bottom: 0;">
|
||||||
|
<li>订单总数:<span style="font-weight: 600;">{totalCount}</span></li>
|
||||||
|
<li>已支付订单:<span style="font-weight: 600;">{successCount}</span></li>
|
||||||
|
<li>未支付订单:<span style="font-weight: 600;">{unpaidCount}</span></li>
|
||||||
|
<li>已退款订单:<span style="font-weight: 600;">{refundCount}</span></li>
|
||||||
|
<li>订单成功率:<span style="font-weight: 600;">{successRate}%</span></li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
<a style="display: none;" href="" id="vurl" rel="noreferrer" target="_blank"></a>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
|
||||||
|
<script src="../assets/js/custom.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
updateToolbar();
|
||||||
|
const defaultPageSize = 30;
|
||||||
|
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
|
||||||
|
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
|
||||||
|
|
||||||
|
$("#listTable").bootstrapTable({
|
||||||
|
url: 'ajax_order.php?act=orderList',
|
||||||
|
pageNumber: pageNumber,
|
||||||
|
pageSize: pageSize,
|
||||||
|
classes: 'table table-striped table-hover table-bordered',
|
||||||
|
uniqueId: 'trade_no',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
checkbox: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'trade_no',
|
||||||
|
title: '系统订单号<br/>商户订单号',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<a href="javascript:showOrder(\''+value+'\')" title="点击查看详情">'+value+'</a></b><br/>'+row.out_trade_no;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'uid',
|
||||||
|
title: '商户号<br/>网站域名',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<a href="./ulist.php?my=search&column=uid&value='+value+'" target="_blank">'+value+'</a><br/><a onclick="openlink(\'http://'+row.domain+'\')">'+row.domain+'</a>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'name',
|
||||||
|
title: '商品名称<br/>订单金额',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return value+'<br/>¥<b>'+row.money+'</b>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'realmoney',
|
||||||
|
title: '实际支付<br/>商户分成',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return value!=null?'¥<b>'+value+'</b><br/>¥<b>'+row.getmoney+'</b>':'';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'type',
|
||||||
|
title: '支付方式(通道ID)<br/>支付插件',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return row.typename ? '<img src="/assets/icon/'+row.typename+'.ico" class="type-logo" onerror="this.style.display=\'none\'">'+row.typeshowname+'(<a href="./pay_channel.php?kw='+row.channel+'" target="_blank">'+row.channel+'</a>)<br/>'+row.plugin : '';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ip',
|
||||||
|
visible: false,
|
||||||
|
cellStyle: function(value, row, index) {
|
||||||
|
return {css:{"max-width":"150px","word-break":"break-all"}};
|
||||||
|
},
|
||||||
|
title: '支付IP<br/>支付账号',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<a href="https://m.ip138.com/iplookup.asp?ip='+value+'" target="_blank" rel="noreferrer">'+value+'</a> <a href="javascript:addBlackList(1,\''+row.ip+'\')" class="btn btn-xs btn-default"><i class="fa fa-stop-circle"></i></a><br/>'+(row.buyer?row.buyer+' <a href="javascript:addBlackList(0,\''+row.buyer+'\')" class="btn btn-xs btn-default"><i class="fa fa-stop-circle"></i></a>':' ');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'addtime',
|
||||||
|
title: '创建时间<br/>完成时间',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return value+'<br/>'+(row.endtime?row.endtime:' ');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: '支付状态',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var text = '';
|
||||||
|
if(value == '1'){
|
||||||
|
text = '<font color=green>已支付</font>';
|
||||||
|
}else if(value == '2'){
|
||||||
|
text = '<font color=red>已退款</font>';
|
||||||
|
if(row.refundmoney > 0 && row.refundmoney < row.realmoney){
|
||||||
|
text += '<br/><font color=red>('+row.refundmoney+'元)</font>';
|
||||||
|
}
|
||||||
|
}else if(value == '3'){
|
||||||
|
text = '<font color=red>已冻结</font>';
|
||||||
|
}else if(value == '4'){
|
||||||
|
text = '<font color=orange>预授权</font>';
|
||||||
|
}else{
|
||||||
|
text = '<font color=blue>未支付</font>';
|
||||||
|
}
|
||||||
|
if(row.plugin=='alipayd' || row.plugin=='wxpaynp'){
|
||||||
|
if(row.settle == '1'){
|
||||||
|
text += '<br/><font color=#8c8f93>待结算</font>';
|
||||||
|
}else if(row.settle == '2'){
|
||||||
|
text += '<br/><font color=#37db3c>结算成功</font>';
|
||||||
|
}else if(row.settle == '3'){
|
||||||
|
text += '<br/><font color=#ed6565>结算失败</font>';
|
||||||
|
}
|
||||||
|
}else if(row.plugin=='alipayrp'){
|
||||||
|
if(row.settle == '1'){
|
||||||
|
text += '<br/><font color=#8c8f93>待转账</font>';
|
||||||
|
}else if(row.settle == '2'){
|
||||||
|
text += '<br/><font color=#37db3c>转账成功</font>';
|
||||||
|
}else if(row.settle == '3'){
|
||||||
|
text += '<br/><font color=#ed6565>转账失败</font>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: '操作',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
let html = '<div class="btn-group dropdown-group" role="group"><button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">操作订单 <span class="caret"></span></button><ul class="dropdown-menu">';
|
||||||
|
if((row.plugin=='alipayd' || row.plugin=='wxpaynp') && (row.settle=='1'||row.settle=='3')){
|
||||||
|
html += '<li><a href="javascript:alipaydSettle(\''+row.trade_no+'\')">确认结算</a></li>';
|
||||||
|
}
|
||||||
|
else if(row.plugin=='alipayrp' && (row.settle=='1'||row.settle=='3')){
|
||||||
|
html += '<li><a href="javascript:alipayRedPacketTansfer(\''+row.trade_no+'\')">红包转账重试</a></li>';
|
||||||
|
}
|
||||||
|
if(value == '1'){
|
||||||
|
html+= '<li><a href="javascript:setStatus(\''+row.trade_no+'\', 0)">改未完成</a></li><li><a href="javascript:apirefund(\''+row.trade_no+'\')">API退款</a></li><li><a href="javascript:refund(\''+row.trade_no+'\')">手动退款</a></li><li><a href="javascript:freeze(\''+row.trade_no+'\')">冻结订单</a></li><li role="separator" class="divider"></li><li><a href="javascript:callnotify(\''+row.trade_no+'\')">重新通知</a></li><li><a href="javascript:setStatus(\''+row.trade_no+'\', 5)">删除订单</a></li>';
|
||||||
|
}else if(value == '2'){
|
||||||
|
html+= '<li><a href="javascript:setStatus(\''+row.trade_no+'\', 0)">改未完成</a></li><li><a href="javascript:apirefund(\''+row.trade_no+'\')">API退款</a></li><li><a href="javascript:setStatus(\''+row.trade_no+'\', 1)">改已完成</a></li><li role="separator" class="divider"></li><li><a href="javascript:callnotify(\''+row.trade_no+'\')">重新通知</a></li><li><a href="javascript:setStatus(\''+row.trade_no+'\', 5)">删除订单</a></li>';
|
||||||
|
}else if(value == '3'){
|
||||||
|
html+= '<li><a href="javascript:unfreeze(\''+row.trade_no+'\')">解冻订单</a></li><li><a href="javascript:apirefund(\''+row.trade_no+'\')">API退款</a></li><li role="separator" class="divider"></li><li><a href="javascript:callnotify(\''+row.trade_no+'\')">重新通知</a></li><li><a href="javascript:setStatus(\''+row.trade_no+'\', 5)">删除订单</a></li>';
|
||||||
|
}else{
|
||||||
|
if(value == '4'){
|
||||||
|
html += '<li><a href="javascript:alipayPreAuthPay(\''+row.trade_no+'\')">授权资金支付</a></li>';
|
||||||
|
html += '<li><a href="javascript:alipayUnfreeze(\''+row.trade_no+'\')">授权资金解冻</a></li><li role="separator" class="divider"></li>';
|
||||||
|
}
|
||||||
|
html+= '<li><a href="javascript:setStatus(\''+row.trade_no+'\', 1)">改已完成</a></li><li role="separator" class="divider"></li><li><a href="javascript:fillorder(\''+row.trade_no+'\')">手动补单</a></li><li><a href="javascript:setStatus(\''+row.trade_no+'\', 5)">删除订单</a></li>';
|
||||||
|
}
|
||||||
|
html += '</ul></div>';
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
],
|
||||||
|
onLoadSuccess: function(data) {
|
||||||
|
$('.dropdown-group').on('show.bs.dropdown', function (e) {
|
||||||
|
var btnPos = $(e.target)[0].getBoundingClientRect();
|
||||||
|
var screenWidth = $(window).width();
|
||||||
|
var screenHeight = $(window).height();
|
||||||
|
var childrenWidth = $(e.target).children('.dropdown-menu').width();
|
||||||
|
var childrenHeight = $(e.target).children('.dropdown-menu').height();
|
||||||
|
var top = btnPos.bottom;
|
||||||
|
if(top + childrenHeight + 12 > screenHeight){
|
||||||
|
top = btnPos.top - childrenHeight - 12;
|
||||||
|
}
|
||||||
|
var left = btnPos.left;
|
||||||
|
if(left + childrenWidth + 7 > screenWidth){
|
||||||
|
left = screenWidth - childrenWidth - 7;
|
||||||
|
}
|
||||||
|
$(e.target).children('.dropdown-menu').css({position:'fixed', top:top, left:left});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function openlink(full_link){
|
||||||
|
window.open('javascript:window.name;', '<script>location.replace("'+full_link+'")<\/script>');
|
||||||
|
}
|
||||||
|
|
||||||
|
function statistics(){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=statistics',
|
||||||
|
data: $('#searchToolbar').serializeArray(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
var element = $('#modal-statistics');
|
||||||
|
var htmlContent = $("#statistics").html().replace(/\{(\w+)\}/g, function (match, key) {
|
||||||
|
return data.data[key] || '';
|
||||||
|
});
|
||||||
|
element.find('.modal-body').html(htmlContent);
|
||||||
|
element.modal('show');
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function operation(status){
|
||||||
|
var selected = $('#listTable').bootstrapTable('getSelections');
|
||||||
|
if(selected.length == 0){
|
||||||
|
layer.msg('未选择订单', {time:1500});return;
|
||||||
|
}
|
||||||
|
var checkbox = getBatchOperateData(selected, 'trade_no')[status];
|
||||||
|
if(checkbox.length == 0){
|
||||||
|
layer.msg('要处理的订单数量为0', {time:1500});return;
|
||||||
|
}
|
||||||
|
if(status == 4 && !confirm('确定要删除已选中的'+checkbox.length+'个订单吗?')) return;
|
||||||
|
if(status == 5){
|
||||||
|
return batch_apirefund(checkbox);
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=operation',
|
||||||
|
data : {status:status, checkbox:checkbox},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
searchSubmit();
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('请求超时');
|
||||||
|
searchSubmit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function showOrder(trade_no) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
var status = ['<span class="label label-primary">未支付</span>','<span class="label label-success">已支付</span>','<span class="label label-danger">已退款</span>','<span class="label label-info">已冻结</span>','<span class="label label-warning">预授权</span>'];
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_order.php?act=order&trade_no='+trade_no,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
var data = data.data;
|
||||||
|
var item = '<table class="table table-condensed table-hover" id="orderItem">';
|
||||||
|
item += '<tr><td colspan="6" style="text-align:center" class="orderTitle"><b>订单信息</b></td></tr>';
|
||||||
|
item += '<tr class="orderTitle"><td class="info" class="orderTitle">系统订单号</td><td colspan="5" class="orderContent">'+data.trade_no+'</td></tr>';
|
||||||
|
item += '<tr><td class="info" class="orderTitle">商户订单号</td><td colspan="5" class="orderContent">'+data.out_trade_no+'</td></tr>';
|
||||||
|
item += '<tr><td class="info" class="orderTitle">接口订单号</td><td colspan="5" class="orderContent">'+data.api_trade_no+'</td></tr>';
|
||||||
|
if(data.bill_trade_no){
|
||||||
|
item += '<tr><td class="info" class="orderTitle">用户交易单号</td><td colspan="5" class="orderContent">'+data.bill_trade_no+'</td></tr>';
|
||||||
|
}
|
||||||
|
item += '<tr><td class="info">商户ID</td class="orderTitle"><td colspan="5" class="orderContent"><a href="./ulist.php?my=search&column=uid&value='+data.uid+'" target="_blank">'+data.uid+'</a></td>';
|
||||||
|
item += '<tr><td class="info" class="orderTitle">支付方式</td><td colspan="5" class="orderContent">'+data.typename+'</td></tr>';
|
||||||
|
item += '<tr><td class="info" class="orderTitle">支付通道</td><td colspan="5" class="orderContent"><a href="./pay_channel.php?id='+data.channel+'" target="_blank">'+data.channelname+'</a></td></tr>';
|
||||||
|
if(data.subchannel > 0){
|
||||||
|
item += '<tr><td class="info" class="orderTitle">自定义子通道</td><td colspan="5" class="orderContent">'+data.subchannelname+'</td></tr>';
|
||||||
|
}
|
||||||
|
item += '<tr><td class="info" class="orderTitle">商品名称</td><td colspan="5" class="orderContent">'+data.name+'</td></tr>';
|
||||||
|
item += '<tr><td class="info" class="orderTitle">订单金额</td><td colspan="5" class="orderContent">'+data.money+'</td></tr>';
|
||||||
|
item += '<tr><td class="info" class="orderTitle">实际支付金额</td><td colspan="5" class="orderContent">'+data.realmoney+'</td></tr>';
|
||||||
|
item += '<tr><td class="info" class="orderTitle">商户分成金额</td><td colspan="5" class="orderContent">'+data.getmoney+'</td></tr>';
|
||||||
|
item += '<tr><td class="info" class="orderTitle">手续费利润</td><td colspan="5" class="orderContent">'+data.profitmoney+'</td></tr>';
|
||||||
|
item += '<tr><td class="info" class="orderTitle">创建时间</td><td colspan="5" class="orderContent">'+data.addtime+'</td></tr>';
|
||||||
|
item += '<tr><td class="info" class="orderTitle">完成时间</td><td colspan="5" class="orderContent">'+data.endtime+'</td></tr>';
|
||||||
|
if(data.status==2){
|
||||||
|
item += '<tr><td class="info" class="orderTitle">退款时间</td><td colspan="5" class="orderContent">'+data.refundtime+'</td></tr>';
|
||||||
|
}
|
||||||
|
item += '<tr><td class="info" class="orderTitle" title="只有在官方通道支付完成后才能显示">支付账号</td><td colspan="5" class="orderContent">'+data.buyer+(data.buyer!=null?' <a href="javascript:addBlackList(0,\''+data.buyer+'\')" class="btn btn-xs btn-default">拉黑</a>':'')+'</td></tr>';
|
||||||
|
if(data.mobile){
|
||||||
|
item += '<tr><td class="info" class="orderTitle">手机号码</td><td colspan="5" class="orderContent">'+data.mobile+' <a href="javascript:addBlackList(0,\''+data.mobile+'\')" class="btn btn-xs btn-default">拉黑</a></td></tr>';
|
||||||
|
}
|
||||||
|
item += '<tr><td class="info" class="orderTitle">网站域名</td><td colspan="5" class="orderContent"><a href="http://'+data.domain+'" target="_blank" rel="noreferrer">'+data.domain+'</a></td></tr>';
|
||||||
|
item += '<tr><td class="info" class="orderTitle">支付IP</td><td colspan="5" class="orderContent"><a href="https://m.ip138.com/iplookup.asp?ip='+data.ip+'" target="_blank" rel="noreferrer">'+data.ip+'</a> <a href="javascript:addBlackList(1,\''+data.ip+'\')" class="btn btn-xs btn-default">拉黑</a></td></tr>';
|
||||||
|
item += '<tr><td class="info" class="orderTitle">扩展参数</td><td colspan="5" class="orderContent">'+data.param+'</td></tr>';
|
||||||
|
item += '<tr><td class="info" class="orderTitle">订单状态</td><td colspan="5" class="orderContent">'+status[data.status]+'</td></tr>';
|
||||||
|
if(data.status>0){
|
||||||
|
item += '<tr><td class="info" class="orderTitle">通知状态</td><td colspan="5" class="orderContent">'+(data.notify==0?'<span class="label label-success">通知成功</span>':'<span class="label label-danger">通知失败</span>(已通知'+data.notify+'次)')+'</td></tr>';
|
||||||
|
}
|
||||||
|
item += '<tr><td colspan="6" style="text-align:center" class="orderTitle"><b>订单操作</b></td></tr>';
|
||||||
|
item += '<tr><td colspan="6"><a href="javascript:callnotify(\''+data.trade_no+'\')" class="btn btn-xs btn-default">重新通知(异步)</a> <a href="javascript:callreturn(\''+data.trade_no+'\')" class="btn btn-xs btn-default">重新通知(同步)</a>'+(data.combine==1?' <a href="javascript:showSubOrders(\''+data.trade_no+'\')" class="btn btn-xs btn-default">查看子订单列表</a>':'')+'</td></tr>';
|
||||||
|
item += '</table>';
|
||||||
|
var area = [$(window).width() > 480 ? '480px' : '100%', ';max-height:100%'];
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
area: area,
|
||||||
|
title: '订单详细信息',
|
||||||
|
skin: 'layui-layer-rim',
|
||||||
|
content: item
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function callnotify(trade_no){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=notify',
|
||||||
|
data : {trade_no:trade_no},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
$("#vurl").attr("href",data.url);
|
||||||
|
document.getElementById("vurl").click();
|
||||||
|
searchSubmit();
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function callreturn(trade_no){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=notify',
|
||||||
|
data : {trade_no:trade_no,isreturn:1},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
$("#vurl").attr("href",data.url);
|
||||||
|
document.getElementById("vurl").click();
|
||||||
|
searchSubmit();
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function refund(trade_no) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=getmoney',
|
||||||
|
data : {trade_no:trade_no},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.open({
|
||||||
|
area: ['360px'],
|
||||||
|
title: '手动退款确认',
|
||||||
|
content: '<p>此操作将从该商户扣除订单分成金额,你需要手动退款给购买者。</p><div class="form-group"><div class="input-group"><div class="input-group-addon">退款金额</div><input type="text" class="form-control" name="refund1" value="'+data.money+'" placeholder="请输入退款金额" autocomplete="off"/></div></div>',
|
||||||
|
yes: function(){
|
||||||
|
var money = $("input[name='refund1']").val();
|
||||||
|
if(money == ''){
|
||||||
|
layer.alert('金额不能为空');return;
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=refund',
|
||||||
|
data : {trade_no:trade_no, money:money},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:7});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:7});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function apirefund(trade_no) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=getmoney',
|
||||||
|
data : {trade_no:trade_no,api:"1"},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.open({
|
||||||
|
area: ['360px'],
|
||||||
|
title: 'API退款确认',
|
||||||
|
content: '<p>此操作将直接原路退款该订单,退款金额不能大于订单金额。</p><div class="form-group"><div class="input-group"><div class="input-group-addon">退款金额</div><input type="text" class="form-control" name="refund2" value="'+data.money+'" placeholder="请输入退款金额" autocomplete="off"/></div></div><div class="form-group"><div class="input-group"><div class="input-group-addon">支付密码</div><input type="text" class="form-control" name="paypwd" value="" placeholder="请输入支付密码" autocomplete="off"/></div></div>',
|
||||||
|
yes: function(){
|
||||||
|
var money = $("input[name='refund2']").val();
|
||||||
|
var paypwd = $("input[name='paypwd']").val();
|
||||||
|
if(money == '' || paypwd == ''){
|
||||||
|
layer.alert('金额或密码不能为空');return;
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=apirefund',
|
||||||
|
data : {trade_no:trade_no, money:money, paypwd:paypwd},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:7});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:7});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function batch_apirefund(orderids){
|
||||||
|
layer.open({
|
||||||
|
area: ['360px'],
|
||||||
|
title: 'API退款确认',
|
||||||
|
content: '<p>此操作将直接原路退款这'+orderids.length+'条订单,退款金额均为订单实际支付金额。</p><div class="form-group"><div class="input-group"><div class="input-group-addon">支付密码</div><input type="text" class="form-control" name="paypwd" value="" placeholder="请输入支付密码" autocomplete="off"/></div></div>',
|
||||||
|
yes: function(){
|
||||||
|
var paypwd = $("input[name='paypwd']").val();
|
||||||
|
if(paypwd == ''){
|
||||||
|
layer.alert('密码不能为空');return;
|
||||||
|
}
|
||||||
|
batch_apirefund_order(orderids, 0, paypwd);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function batch_apirefund_order(orderids, index, paypwd){
|
||||||
|
if (index >= orderids.length) {
|
||||||
|
layer.alert('已成功退款'+orderids.length+'条订单!', {icon: 1}, function(){
|
||||||
|
layer.closeAll();searchSubmit();
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var trade_no = orderids[index];
|
||||||
|
var row = $("#listTable").bootstrapTable('getRowByUniqueId', trade_no);
|
||||||
|
var money = row.realmoney;
|
||||||
|
var ii = layer.msg('正在退款' + trade_no + '('+money+'元)', {icon: 16, shade: 0.3, time: 0});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=apirefund',
|
||||||
|
data : {trade_no:trade_no, money:money, paypwd:paypwd},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
index > 0 && searchSubmit();
|
||||||
|
if(data.code == 0){
|
||||||
|
batch_apirefund_order(orderids, index + 1, paypwd);
|
||||||
|
}else{
|
||||||
|
layer.alert(trade_no + data.msg, {icon:7});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function freeze(trade_no) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=freeze',
|
||||||
|
data : {trade_no:trade_no},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function unfreeze(trade_no) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=unfreeze',
|
||||||
|
data : {trade_no:trade_no},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setStatus(trade_no, status) {
|
||||||
|
if(status==5){
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此订单吗?', {
|
||||||
|
btn: ['确定','取消']
|
||||||
|
}, function(){
|
||||||
|
setStatusDo(trade_no, status);
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
setStatusDo(trade_no, status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function setStatusDo(trade_no, status) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'get',
|
||||||
|
url : 'ajax_order.php',
|
||||||
|
data : 'act=setStatus&trade_no=' + trade_no + '&status=' + status,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(ret) {
|
||||||
|
layer.close(ii);
|
||||||
|
if (ret['code'] != 200) {
|
||||||
|
alert(ret['msg'] ? ret['msg'] : '操作失败');
|
||||||
|
}
|
||||||
|
layer.closeAll();
|
||||||
|
searchSubmit();
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function fillorder(trade_no) {
|
||||||
|
var confirmobj = layer.confirm('此操作将不管该订单是否真的支付,直接改为已支付状态并给商户分成,是否确定?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=fillorder',
|
||||||
|
data : {trade_no:trade_no},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function alipaydSettle(trade_no) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=alipaydSettle',
|
||||||
|
data : {trade_no:trade_no},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function alipayPreAuthPay(trade_no) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=alipayPreAuthPay',
|
||||||
|
data : {trade_no:trade_no},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function alipayUnfreeze(trade_no) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=alipayUnfreeze',
|
||||||
|
data : {trade_no:trade_no},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function addBlackList(stype, scontent){
|
||||||
|
var stitle = stype == 1?'IP地址':'支付账号';
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
area: ['380px'],
|
||||||
|
closeBtn: 2,
|
||||||
|
title: '添加黑名单',
|
||||||
|
content: '<div style="padding:15px"><div class="form-group"><div class="input-group"><div class="input-group-addon">'+stitle+'</div><input class="form-control" type="text" name="add_content" value="'+scontent+'" autocomplete="off" ></div></div><div class="form-group"><div class="input-group"><div class="input-group-addon">有效期</div><input class="form-control" type="text" name="add_days" value="0" autocomplete="off" placeholder="0为永久"><div class="input-group-addon">天</div></div></div><div class="form-group"><div class="input-group"><div class="input-group-addon">备注</div><input class="form-control" type="text" name="add_remark" value="" autocomplete="off" placeholder="选填"></div></div></div>',
|
||||||
|
btn: ['确认', '取消'],
|
||||||
|
yes: function(){
|
||||||
|
var content = $("input[name='add_content']").val();
|
||||||
|
var days = $("input[name='add_days']").val();
|
||||||
|
var remark = $("input[name='add_remark']").val();
|
||||||
|
if(content == ''){
|
||||||
|
$("input[name='content']").focus();return;
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=addBlack',
|
||||||
|
data : {type:stype, content:content, days:days, remark:remark},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll(); });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:0});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function alipayRedPacketTansfer(trade_no){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_order.php?act=alipayRedPacketTansfer',
|
||||||
|
data : {trade_no:trade_no},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function showSubOrders(trade_no){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_order.php?act=subOrders&trade_no='+trade_no,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
var list = data.data;
|
||||||
|
var status = ['<span class="label label-primary">未支付</span>','<span class="label label-success">已支付</span>','<span class="label label-danger">已退款</span>'];
|
||||||
|
var settle = ['<span class="label label-info">未结算</span>','<span class="label label-success">已结算</span>'];
|
||||||
|
var item = '<table class="table table-condensed table-hover" id="orderItem">';
|
||||||
|
item += '<thead><th class="orderTitle">系统订单号</th><th class="orderTitle">接口订单号</th><th class="orderTitle">订单金额</th class="orderTitle"><th class="orderTitle">订单状态</th><th class="orderTitle">结算状态</th></thead><tbody>';
|
||||||
|
for(var i=0; i<list.length; i++){
|
||||||
|
var statustext = status[list[i].status];
|
||||||
|
if(list[i].status == 2 && list[i].refundmoney > 0 && list[i].refundmoney < list[i].money){
|
||||||
|
statustext += '<font color=red>('+list[i].refundmoney+')</font>';
|
||||||
|
}
|
||||||
|
item += '<tr><td>'+list[i].sub_trade_no+'</td><td>'+list[i].api_trade_no+'</td><td>¥<b>'+list[i].money+'</b></td><td>'+statustext+'</td><td>'+(data.settle>0?settle[list[i].settle]:'')+'</td></tr>';
|
||||||
|
}
|
||||||
|
item += '</tbody></table>';
|
||||||
|
var area = [$(window).width() > 680 ? '680px' : '100%'];
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
area: area,
|
||||||
|
title: '合单支付 - 子订单列表',
|
||||||
|
skin: 'layui-layer-rim',
|
||||||
|
shadeClose: true,
|
||||||
|
content: item
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function getBatchOperateData(selections, field) {
|
||||||
|
var counts = {
|
||||||
|
0: field ? [] : 0, // 改未完成
|
||||||
|
1: field ? [] : 0, // 改已完成
|
||||||
|
2: field ? [] : 0, // 冻结订单
|
||||||
|
3: field ? [] : 0, // 解冻订单
|
||||||
|
4: field ? [] : 0, // 删除订单
|
||||||
|
5: field ? [] : 0 // API退款
|
||||||
|
};
|
||||||
|
selections.forEach(function(row) {
|
||||||
|
var status = parseInt(row.status);
|
||||||
|
if (status == 1) {
|
||||||
|
if (field) {
|
||||||
|
counts[0].push(row[field]);
|
||||||
|
counts[2].push(row[field]);
|
||||||
|
counts[4].push(row[field]);
|
||||||
|
counts[5].push(row[field]);
|
||||||
|
} else {
|
||||||
|
counts[0]++;
|
||||||
|
counts[2]++;
|
||||||
|
counts[4]++;
|
||||||
|
counts[5]++;
|
||||||
|
}
|
||||||
|
} else if (status == 2) {
|
||||||
|
if (field) {
|
||||||
|
counts[0].push(row[field]);
|
||||||
|
counts[1].push(row[field]);
|
||||||
|
counts[4].push(row[field]);
|
||||||
|
} else {
|
||||||
|
counts[0]++;
|
||||||
|
counts[1]++;
|
||||||
|
counts[4]++;
|
||||||
|
}
|
||||||
|
} else if (status == 3) {
|
||||||
|
if (field) {
|
||||||
|
counts[3].push(row[field]);
|
||||||
|
counts[4].push(row[field]);
|
||||||
|
counts[5].push(row[field]);
|
||||||
|
} else {
|
||||||
|
counts[3]++;
|
||||||
|
counts[4]++;
|
||||||
|
counts[5]++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (field) {
|
||||||
|
counts[1].push(row[field]);
|
||||||
|
counts[4].push(row[field]);
|
||||||
|
} else {
|
||||||
|
counts[1]++;
|
||||||
|
counts[4]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return counts;
|
||||||
|
}
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('.input-datepicker, .input-daterange').datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
autoclose: true,
|
||||||
|
clearBtn: true,
|
||||||
|
language: 'zh-CN'
|
||||||
|
});
|
||||||
|
$("#batchAction").click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var selections = $('#listTable').bootstrapTable('getSelections'),
|
||||||
|
button = $(this);
|
||||||
|
var counts = getBatchOperateData(selections);
|
||||||
|
button.next('.dropdown-menu').find('a[data-action-type]').each(function() {
|
||||||
|
var actionType = $(this).data('action-type');
|
||||||
|
var count = counts[actionType];
|
||||||
|
var originalText = $(this).text().split('(')[0];
|
||||||
|
$(this).text(originalText + (count > 0 ? ' (可执行' + count + '条)' : ' (0)'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,599 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 支付通道
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='支付通道';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
|
||||||
|
$type_select = '<option value="0">所有支付方式</option>';
|
||||||
|
$type_select2 = '';
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_type ORDER BY id ASC");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$type_select .= '<option value="'.$row['id'].'">'.$row['showname'].'</option>';
|
||||||
|
$type_select2 .= '<option value="'.$row['id'].'">'.$row['showname'].'</option>';
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
.form-inline .form-control {
|
||||||
|
display: inline-block;
|
||||||
|
width: auto;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.form-inline .form-group {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 0;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.type-logo{width: 18px;margin-top: -2px;padding-right: 4px;}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content animated flipInX">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span
|
||||||
|
aria-hidden="true">×</span><span
|
||||||
|
class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title" id="modal-title">支付通道修改/添加</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form class="form-horizontal" id="form-store">
|
||||||
|
<input type="hidden" name="action" id="action"/>
|
||||||
|
<input type="hidden" name="id" id="id"/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">显示名称</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="name" id="name" placeholder="仅显示使用,不要与其他通道名称重复">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">分成比例</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="input-group"><input type="text" class="form-control" name="rate" id="rate" placeholder="在没配置用户组的情况下以此费率为准" title="是指给商户的分成比例"><span class="input-group-addon">%</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">通道成本</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="input-group"><input type="text" class="form-control" name="costrate" id="costrate" placeholder="仅用于统计利润,可留空,默认为0"><span class="input-group-addon">%</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">通道模式</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="input-group"><select name="mode" id="mode" class="form-control" onchange="changeMode()">
|
||||||
|
<option value="0">支付金额扣除手续费后加入商户余额(默认)</option><option value="1">支付完成后不给商户加余额,同时需扣手续费</option>
|
||||||
|
</select><a tabindex="0" class="input-group-addon" role="button" data-toggle="popover" data-trigger="focus" title="通道模式说明" data-placement="bottom" data-content="【第一种模式】资金由平台代收,然后结算给商户,手续费从每笔订单直接扣除 【第二种模式】资金由上游直接结算给商户,手续费从商户余额扣除,商户需先充值余额否则无法支付"><span class="glyphicon glyphicon-info-sign"></span></a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">支付方式</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<select name="type" id="type" class="form-control" onchange="changeType()">
|
||||||
|
<option value="0">请选择支付方式</option><?php echo $type_select2; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">支付插件</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<select name="plugin" id="plugin" class="form-control">
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">单日限额</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="daytop" id="daytop" placeholder="0或留空为没有单日限额,超出限额会暂停使用该通道" title="修改后第二天生效">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label no-padding-right">单笔最小</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<input type="text" class="form-control" name="paymin" id="paymin" placeholder="留空无单笔最小限额">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><div class="col-sm-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label no-padding-right">单笔最大</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<input type="text" class="form-control" name="paymax" id="paymax" placeholder="留空无单笔最大限额">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12 center-block" style="float: none;">
|
||||||
|
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
|
||||||
|
<input type="hidden" class="form-control" name="id">
|
||||||
|
<input type="hidden" class="form-control" name="batch">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>搜索</label>
|
||||||
|
<input type="text" class="form-control" name="kw" placeholder="通道ID/名称">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="plugin" style="width: 100px;" placeholder="支付插件" value="">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="type" class="form-control"><?php echo $type_select?></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="1">状态已开启</option><option value="0">状态已关闭</option></select>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary"><i class="fa fa-search"></i> 搜索</button>
|
||||||
|
<a href="javascript:searchClear()" class="btn btn-default"><i class="fa fa-refresh"></i> 重置</a>
|
||||||
|
<a href="javascript:addframe()" class="btn btn-success"><i class="fa fa-plus"></i> 新增</a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<table id="listTable">
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
|
||||||
|
<script src="../assets/js/custom.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
updateToolbar();
|
||||||
|
|
||||||
|
$("#listTable").bootstrapTable({
|
||||||
|
url: 'ajax_pay.php?act=channelList',
|
||||||
|
pageNumber: 1,
|
||||||
|
pageSize: 15,
|
||||||
|
sidePagination: 'client',
|
||||||
|
classes: 'table table-striped table-hover table-bordered',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
field: 'id',
|
||||||
|
title: 'ID',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<b>'+value+'</b>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'name',
|
||||||
|
title: '显示名称'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'mode',
|
||||||
|
title: '通道模式',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(value == '1'){
|
||||||
|
return '商户直清'
|
||||||
|
}else{
|
||||||
|
return '平台代收'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'rate',
|
||||||
|
title: '分成比例'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'type',
|
||||||
|
title: '支付方式',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<img src="/assets/icon/'+row.typename+'.ico" class="type-logo" onerror="this.style.display=\'none\'">'+row.typeshowname;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'plugin',
|
||||||
|
title: '支付插件',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<span onclick="showPlugin(\''+value+'\')" title="查看支付插件详情">'+value+'</span>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
title: '今日收款',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<a onclick="getAll(0,'+row.id+',this)" title="点此获取最新数据">[刷新]</a>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
title: '昨日收款',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<a onclick="getAll(1,'+row.id+',this)" title="点此获取最新数据">[刷新]</a>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
title: '订单成功率',
|
||||||
|
visible: false,
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<a onclick="getSuccessRate(' + row.id +',this)" title="点此获取最新数据">[刷新]</a>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: '状态',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(value == '1'){
|
||||||
|
return '<a class="btn btn-xs btn-success" onclick="setStatus('+row.id+',0)">已开启</a>';
|
||||||
|
}else{
|
||||||
|
return '<a class="btn btn-xs btn-warning" onclick="setStatus('+row.id+',1)">已关闭</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
title: '操作',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<a class="btn btn-xs btn-primary" onclick="editInfo('+row.id+')">配置密钥</a> <a class="btn btn-xs btn-info" onclick="editframe('+row.id+')">编辑</a> <a class="btn btn-xs btn-danger" onclick="delItem('+row.id+')">删除</a> <a href="./order.php?channel='+row.id+'" target="_blank" class="btn btn-xs btn-default">订单</a> <a onclick="copyframe('+row.id+')" class="btn btn-xs btn-default"><i class="fa fa-copy"></i></a> <a onclick="testpay('+row.id+')" class="btn btn-xs btn-default">测试</a>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function changeType(plugin){
|
||||||
|
plugin = plugin || null;
|
||||||
|
if(plugin == null){
|
||||||
|
plugin = $("#plugin").val();
|
||||||
|
}
|
||||||
|
var typeid = $("#type").val();
|
||||||
|
if(typeid==0)return;
|
||||||
|
$("#plugin").empty();
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=getPlugins&typeid='+typeid,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
$.each(data.data, function (i, res) {
|
||||||
|
$("#plugin").append('<option value="'+res.name+'">'+res.showname+'</option>');
|
||||||
|
})
|
||||||
|
if(plugin!=null)$("#plugin").val(plugin);
|
||||||
|
}else{
|
||||||
|
layer.msg(data.msg, {icon:2, time:1500})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function changeMode(){
|
||||||
|
var mode = parseInt($("#mode").val());
|
||||||
|
if(mode>0){
|
||||||
|
$("#daytop").val('');
|
||||||
|
$("#daytop").prop("disabled", true);
|
||||||
|
}else{
|
||||||
|
$("#daytop").prop("disabled", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function addframe(){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("新增支付通道");
|
||||||
|
$("#action").val("add");
|
||||||
|
$("#id").val('');
|
||||||
|
$("#name").val('');
|
||||||
|
$("#rate").val('');
|
||||||
|
$("#costrate").val('');
|
||||||
|
$("#type").val(0);
|
||||||
|
$("#daytop").val('');
|
||||||
|
$("#paymin").val('');
|
||||||
|
$("#paymax").val('');
|
||||||
|
$("#plugin").empty();
|
||||||
|
}
|
||||||
|
function editframe(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=getChannel&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("修改支付通道");
|
||||||
|
$("#action").val("edit");
|
||||||
|
$("#id").val(data.data.id);
|
||||||
|
$("#name").val(data.data.name);
|
||||||
|
$("#rate").val(data.data.rate);
|
||||||
|
$("#costrate").val(data.data.costrate);
|
||||||
|
$("#type").val(data.data.type);
|
||||||
|
$("#daytop").val(data.data.daytop);
|
||||||
|
$("#paymin").val(data.data.paymin);
|
||||||
|
$("#paymax").val(data.data.paymax);
|
||||||
|
$("#mode").val(data.data.mode);
|
||||||
|
changeType(data.data.plugin);
|
||||||
|
changeMode()
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function copyframe(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=getChannel&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("快速复制支付通道");
|
||||||
|
$("#action").val("copy");
|
||||||
|
$("#id").val(data.data.id);
|
||||||
|
$("#name").val(data.data.name);
|
||||||
|
$("#rate").val(data.data.rate);
|
||||||
|
$("#costrate").val(data.data.costrate);
|
||||||
|
$("#type").val(data.data.type);
|
||||||
|
$("#daytop").val(data.data.daytop);
|
||||||
|
$("#paymin").val(data.data.paymin);
|
||||||
|
$("#paymax").val(data.data.paymax);
|
||||||
|
$("#mode").val(data.data.mode);
|
||||||
|
changeType(data.data.plugin);
|
||||||
|
changeMode()
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function save(){
|
||||||
|
if($("#name").val()==''||$("#rate").val()==''){
|
||||||
|
layer.alert('请确保各项不能为空!');return false;
|
||||||
|
}
|
||||||
|
if($("#type").val()==0){
|
||||||
|
layer.alert('请选择支付方式!');return false;
|
||||||
|
}
|
||||||
|
if($("#plugin").val()==0 || $("#plugin").val()==null){
|
||||||
|
layer.alert('请选择支付插件!');return false;
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_pay.php?act=saveChannel',
|
||||||
|
data : $("#form-store").serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg,{
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
layer.closeAll();
|
||||||
|
$("#modal-store").modal('hide');
|
||||||
|
searchSubmit();
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function delItem(id) {
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此支付通道吗?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=delChannel&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.closeAll();
|
||||||
|
searchSubmit();
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setStatus(id,status) {
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=setChannel&id='+id+'&status='+status,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
searchSubmit();
|
||||||
|
}else{
|
||||||
|
layer.msg(data.msg, {icon:2, time:1500});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function editInfo(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=channelInfo&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
var area = [$(window).width() > 520 ? '520px' : '100%', ';max-height:100%'];
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
area: area,
|
||||||
|
title: '配置对接密钥',
|
||||||
|
skin: 'layui-layer-rim',
|
||||||
|
content: data.data
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function saveInfo(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_pay.php?act=saveChannelInfo&id='+id,
|
||||||
|
data : $("#form-info").serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg,{
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
layer.closeAll();
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function showPlugin(name){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=getPlugin&name='+name,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
var item = '<table class="table table-condensed table-hover">';
|
||||||
|
item += '<tr><td class="info">插件名称</td><td colspan="5">'+data.data.name+'</td></tr><tr><td class="info">插件描述</td><td colspan="5">'+data.data.showname+'</td></tr><tr><td class="info">插件网址</td><td colspan="5">'+(data.data.link?'<a href="'+data.data.link+'" target="_blank" rel="noreferrer">'+data.data.author+'</a>':data.data.author)+'</td></tr><tr><td class="info">插件路径</td><td colspan="5">/plugins/'+data.data.name+'/</td></tr>';
|
||||||
|
item += '</table>';
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
shadeClose: true,
|
||||||
|
title: '支付插件详情',
|
||||||
|
content: item
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function getAll(type, channel, obj){
|
||||||
|
var ii = layer.load();
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=getChannelMoney&type='+type+'&channel='+channel,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
$(obj).html(data.money);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function getSuccessRate(channel, obj) {
|
||||||
|
var ii = layer.load();
|
||||||
|
$.ajax({
|
||||||
|
type: 'GET',
|
||||||
|
url: 'ajax_pay.php?act=getSuccessRate&channel=' + channel,
|
||||||
|
dataType: 'json',
|
||||||
|
success: function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if (data.code == 0) {
|
||||||
|
$(obj).html(data.data);
|
||||||
|
} else {
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function(data) {
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function testpay(id) {
|
||||||
|
var ii = layer.open({
|
||||||
|
area: ['360px'],
|
||||||
|
title: '测试支付',
|
||||||
|
content: '<div class="form-group"><div class="input-group"><span class="input-group-addon"><span class="glyphicon glyphicon-shopping-cart"></span></span><input class="form-control" placeholder="订单名称" value="支付测试" name="test_name" type="text"></div></div><div class="form-group"><div class="input-group"><span class="input-group-addon"><span class="glyphicon glyphicon-yen"></span></span><input class="form-control" placeholder="订单金额" value="1" name="test_money" type="text"></div></div>',
|
||||||
|
yes: function(){
|
||||||
|
var name = $("input[name='test_name']").val();
|
||||||
|
var money = $("input[name='test_money']").val();
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_pay.php?act=testpay',
|
||||||
|
data : {channel:id, name:name, money:money},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.close(ii);
|
||||||
|
window.open(data.url);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$(function () {
|
||||||
|
$('[data-toggle="popover"]').popover()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 支付插件
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='支付插件';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-sm-12 col-md-10 col-lg-9 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
$my=isset($_GET['my'])?$_GET['my']:null;
|
||||||
|
if($my=='refresh') {
|
||||||
|
\lib\Plugin::updateAll();
|
||||||
|
exit("<script language='javascript'>alert('刷新插件列表成功!');history.go(-1);</script>");
|
||||||
|
}else{
|
||||||
|
$list = \lib\Plugin::getAll();
|
||||||
|
?>
|
||||||
|
<div class="panel panel-info">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">系统共有 <b><?php echo count($list);?></b> 个支付插件 <span class="pull-right"><a href="./pay_plugin.php?my=refresh" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i> 刷新插件列表</a></span></h3></div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead><tr><th>插件名称</th><th>插件描述</th><th>插件作者</th><th>包含的支付方式</th><th>包含的转账方式</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach($list as $res)
|
||||||
|
{
|
||||||
|
echo '<tr><td><b>'.$res['name'].'</b></td><td>'.$res['showname'].'</td><td>'.($res['link']?'<a href="'.$res['link'].'" target="_blank" rel="noreferrer">'.$res['author'].'
|
||||||
|
</a>':$res['author']).'</td><td>'.$res['types'].'</td><td>'.$res['transtypes'].'</td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="panel-footer">
|
||||||
|
<span class="glyphicon glyphicon-info-sign"></span> 支付插件目录:/plugins/,请将符合要求的支付插件源码解压到支付插件目录,然后点击 刷新插件列表 即可显示在该列表中。
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php }?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,309 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 支付通道轮询设置
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='支付通道轮询设置';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
.form-inline .form-control{display: inline-block;width: auto;vertical-align: middle;}</style>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-md-10 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$paytype = [];
|
||||||
|
$type_select = '';
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_type ORDER BY id ASC");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$paytype[$row['id']] = $row['showname'];
|
||||||
|
$type_select .= '<option value="'.$row['id'].'">'.$row['showname'].'</option>';
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
$rolltype = ['顺序轮询','随机轮询','首个启用'];
|
||||||
|
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_roll ORDER BY id ASC");
|
||||||
|
?>
|
||||||
|
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content animated flipInX">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span
|
||||||
|
aria-hidden="true">×</span><span
|
||||||
|
class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title" id="modal-title">轮询组修改/添加</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form class="form-horizontal" id="form-store">
|
||||||
|
<input type="hidden" name="action" id="action"/>
|
||||||
|
<input type="hidden" name="id" id="id"/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">显示名称</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="name" id="name" placeholder="仅显示使用,不要与其他轮询组名称重复">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">支付方式</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<select name="type" id="type" class="form-control">
|
||||||
|
<option value="0">请选择支付方式</option><?php echo $type_select; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">轮询方式</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<select name="kind" id="kind" class="form-control">
|
||||||
|
<option value="0">按顺序依次轮询</option><option value="1">按权重随机轮询</option><option value="2">仅使用第一个已启用的</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group hide">
|
||||||
|
<label class="col-sm-2 control-label">支付通道</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<select id="channel" class="form-control">
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">通道配置</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<dl class="fieldlist" data-name="list" data-listidx="0">
|
||||||
|
<dd class="form-inline">
|
||||||
|
<select name="list[][channel]" class="form-control">
|
||||||
|
</select>
|
||||||
|
<input type="text" name="list[][weight]" class="form-control" value="" size="10" placeholder="权重(1-99)">
|
||||||
|
<span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span>
|
||||||
|
</dd>
|
||||||
|
<dd>
|
||||||
|
<a href="javascript:;" class="btn btn-sm btn-success pay-append"><i class="fa fa-plus"></i> 追加</a>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div-->
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
|
||||||
|
</div>
|
||||||
|
<div class="panel-footer">
|
||||||
|
<span class="glyphicon glyphicon-info-sign"></span> 按顺序依次轮询不支持设置权重,按权重随机轮询支持设置每个通道的权重
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel panel-info">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">系统共有 <b><?php echo count($list);?></b> 个轮询组 <span class="pull-right"><a href="javascript:addframe()" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 新增</a></span></h3></div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead><tr><th>ID</th><th>显示名称</th><th>支付方式</th><th>轮询方式</th><th>轮询规则</th><th>状态</th><th>操作</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach($list as $res)
|
||||||
|
{
|
||||||
|
echo '<tr><td><b>'.$res['id'].'</b></td><td>'.$res['name'].'</td><td>'.$paytype[$res['type']].'</td><td>'.$rolltype[$res['kind']].'</td><td>'.$res['info'].'</td><td>'.($res['status']==1?'<a class="btn btn-xs btn-success" onclick="setStatus('.$res['id'].',0)">已开启</a>':'<a class="btn btn-xs btn-warning" onclick="setStatus('.$res['id'].',1)">已关闭</a>').'</td><td><a class="btn btn-xs btn-primary" onclick="editInfo('.$res['id'].')">配置通道</a> <a class="btn btn-xs btn-info" onclick="editframe('.$res['id'].')">编辑</a> <a class="btn btn-xs btn-danger" onclick="delItem('.$res['id'].')">删除</a></td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function addframe(){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("新增轮询组");
|
||||||
|
$("#action").val("add");
|
||||||
|
$("#id").val('');
|
||||||
|
$("#name").val('');
|
||||||
|
$("#type").val(0);
|
||||||
|
$("#kind").val(0);
|
||||||
|
}
|
||||||
|
function editframe(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=getRoll&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("修改轮询组");
|
||||||
|
$("#action").val("edit");
|
||||||
|
$("#id").val(data.data.id);
|
||||||
|
$("#name").val(data.data.name);
|
||||||
|
$("#type").val(data.data.type);
|
||||||
|
$("#kind").val(data.data.kind);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function save(){
|
||||||
|
if($("#name").val()==''){
|
||||||
|
layer.alert('请确保各项不能为空!');return false;
|
||||||
|
}
|
||||||
|
if($("#type").val()==0){
|
||||||
|
layer.alert('请选择支付方式!');return false;
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_pay.php?act=saveRoll',
|
||||||
|
data : $("#form-store").serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg,{
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
window.location.reload()
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function delItem(id) {
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此轮询组吗?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=delRoll&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload()
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setStatus(id,status) {
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=setRoll&id='+id+'&status='+status,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload()
|
||||||
|
}else{
|
||||||
|
layer.msg(data.msg, {icon:2, time:1500});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function editInfo(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$("#channel").empty();
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=rollInfo&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
$.each(data.channels, function (i, res) {
|
||||||
|
$("#channel").append('<option value="'+res.id+'">'+res.name+'</option>');
|
||||||
|
})
|
||||||
|
var item = '<div class="modal-body"><form class="form" id="form-info"><dl class="fieldlist" data-name="list" data-listidx="0">';
|
||||||
|
item += '</dl><button type="button" id="save" onclick="saveInfo('+id+')" class="btn btn-primary btn-block">保存</button><br/>备注:顺序轮询设置权重值无效</form></div>';
|
||||||
|
var area = [$(window).width() > 520 ? '520px' : '100%', '480px'];
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
area: area,
|
||||||
|
title: '配置轮询组',
|
||||||
|
skin: 'layui-layer-rim',
|
||||||
|
content: item,
|
||||||
|
success: function(){
|
||||||
|
if(data.info == null){
|
||||||
|
$(".fieldlist").append('<dd class="form-inline"><select name="list[0][channel]" class="form-control">'+$("#channel").html()+'</select> <input type="text" name="list[0][weight]" class="form-control" value="" size="10" placeholder="权重(1-99)"> <span class="btn btn-sm btn-danger" disabled><i class="fa fa-times"></i></span> </dd>');
|
||||||
|
}else{
|
||||||
|
$.each(data.info, function (i, res) {
|
||||||
|
var num = parseInt(Math.random()*(99999-10+1)+10,10);
|
||||||
|
$(".fieldlist").append('<dd class="form-inline"><select name="list['+num+'][channel]" class="form-control" default="'+res.channel+'">'+$("#channel").html()+'</select> <input type="text" name="list['+num+'][weight]" class="form-control" value="'+res.weight+'" size="10" placeholder="权重(1-99)"> <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span> </dd>');
|
||||||
|
$("select[name='list["+num+"][channel]']").val(res.channel);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
$(".fieldlist").append('<dd><a href="javascript:;" class="btn btn-sm btn-success pay-append"><i class="fa fa-plus"></i> 追加</a></dd>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function saveInfo(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_pay.php?act=saveRollInfo&id='+id,
|
||||||
|
data : $("#form-info").serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg,{
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
window.location.reload()
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$(document).on("click", ".pay-append", function (e) {
|
||||||
|
var select = $("#channel").html();
|
||||||
|
var num = parseInt(Math.random()*(99999-10+1)+10,10);
|
||||||
|
var html = '<dd class="form-inline"><select name="list['+num+'][channel]" class="form-control">'+select+'</select> <input type="text" name="list['+num+'][weight]" class="form-control" value="" size="10" placeholder="权重(1-99)"> <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span> </dd>';
|
||||||
|
$(this).parent().parent().find('dd[class="form-inline"]:last').append(html);
|
||||||
|
});
|
||||||
|
$(document).on("click", "dd .btn-remove", function () {
|
||||||
|
var container = $(this).closest("dl");
|
||||||
|
$(this).closest("dd").remove();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,230 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 支付方式
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='支付方式';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
.type-logo{width: 18px;margin-top: -2px;padding-right: 4px;}
|
||||||
|
</style>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-md-8 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
function display_device($device){
|
||||||
|
if($device==1)
|
||||||
|
return 'PC';
|
||||||
|
elseif($device==2)
|
||||||
|
return 'Mobile';
|
||||||
|
else
|
||||||
|
return 'PC+Mobile';
|
||||||
|
}
|
||||||
|
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_type ORDER BY id ASC");
|
||||||
|
?>
|
||||||
|
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content animated flipInX">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span
|
||||||
|
aria-hidden="true">×</span><span
|
||||||
|
class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title" id="modal-title">支付方式修改/添加</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form class="form-horizontal" id="form-store">
|
||||||
|
<input type="hidden" name="action" id="action"/>
|
||||||
|
<input type="hidden" name="id" id="id"/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right"></label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
注意:同一个调用值+支持设备不能重复
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">调用值</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="name" id="name" placeholder="仅限英文,要与支付文档一致">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">显示名称</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="showname" id="showname" placeholder="仅显示使用">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">支持设备</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<select name="device" id="device" class="form-control">
|
||||||
|
<option value="0">PC+Mobile</option>
|
||||||
|
<option value="1">PC</option>
|
||||||
|
<option value="2">Mobile</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel panel-info">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">系统共有 <b><?php echo count($list);?></b> 个支付方式 <span class="pull-right"><a href="javascript:addframe()" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 新增</a></span></h3></div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead><tr><th>调用值</th><th>名称</th><th>支持设备</th><th>今日收款</th><th>状态</th><th>操作</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach($list as $res)
|
||||||
|
{
|
||||||
|
echo '<tr><td><b>'.$res['name'].'</b></td><td><img src="/assets/icon/'.$res['name'].'.ico" class="type-logo" onerror="this.style.display=\'none\'">'.$res['showname'].'</td><td>'.display_device($res['device']).'</td><td><a onclick="getAll(0,'.$res['id'].',this)" title="点此获取最新数据">[刷新]</a></td><td>'.($res['status']==1?'<a class="btn btn-xs btn-success" onclick="setStatus('.$res['id'].',0)">已开启</a>':'<a class="btn btn-xs btn-warning" onclick="setStatus('.$res['id'].',1)">已关闭</a>').'</td><td><a class="btn btn-xs btn-info" onclick="editframe('.$res['id'].')">编辑</a> <a class="btn btn-xs btn-danger" onclick="delItem('.$res['id'].')">删除</a> <a href="./order.php?type='.$res['id'].'" target="_blank" class="btn btn-xs btn-default">订单</a></td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function addframe(){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("新增支付方式");
|
||||||
|
$("#action").val("add");
|
||||||
|
$("#id").val('');
|
||||||
|
$("#name").val('');
|
||||||
|
$("#showname").val('');
|
||||||
|
$("#device").val(0);
|
||||||
|
}
|
||||||
|
function editframe(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=getPayType&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("修改支付方式");
|
||||||
|
$("#action").val("edit");
|
||||||
|
$("#id").val(data.data.id);
|
||||||
|
$("#name").val(data.data.name);
|
||||||
|
$("#showname").val(data.data.showname);
|
||||||
|
$("#device").val(data.data.device);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function save(){
|
||||||
|
if($("#name").val()==''||$("#showname").val()==''){
|
||||||
|
layer.alert('请确保各项不能为空!');return false;
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_pay.php?act=savePayType',
|
||||||
|
data : $("#form-store").serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg,{
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
window.location.reload()
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function delItem(id) {
|
||||||
|
if(id<4){
|
||||||
|
layer.msg('系统自带支付方式暂不支持删除');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此支付方式吗?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=delPayType&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload()
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setStatus(id,status) {
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=setPayType&id='+id+'&status='+status,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload()
|
||||||
|
}else{
|
||||||
|
layer.msg(data.msg, {icon:2, time:1500});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function getAll(type, typeid, obj){
|
||||||
|
var ii = layer.load();
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=getTypeMoney&type='+type+'&typeid='+typeid,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
$(obj).html(data.money);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,220 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 公众号小程序
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='公众号小程序';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-md-8 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
function display_type($type){
|
||||||
|
if($type==1)
|
||||||
|
return '微信小程序';
|
||||||
|
else
|
||||||
|
return '微信服务号';
|
||||||
|
}
|
||||||
|
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_weixin ORDER BY id ASC");
|
||||||
|
?>
|
||||||
|
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content animated flipInX">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span
|
||||||
|
aria-hidden="true">×</span><span
|
||||||
|
class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title" id="modal-title">公众号小程序修改/添加</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form class="form-horizontal" id="form-store">
|
||||||
|
<input type="hidden" name="action" id="action"/>
|
||||||
|
<input type="hidden" name="id" id="id"/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">类别</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<select name="type" id="type" class="form-control" onchange="shownote()">
|
||||||
|
<option value="0">微信服务号</option>
|
||||||
|
<option value="1">微信小程序</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">名称</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="name" id="name" placeholder="仅用于显示,不要重复">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">APPID</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="appid" id="appid" placeholder="">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">APPSECRET</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="appsecret" id="appsecret" placeholder="">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right text-muted">说明</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<span class="text-muted" id="type0" style="display:none">需要在【微信公众平台->公众号设置->功能设置】设置<font color="red">网页授权域名</font>,如果用于支付,还需要在微信支付【商户平台->产品中心->开发配置】设置<font color="red">JSAPI支付授权目录</font></span>
|
||||||
|
<span class="text-muted" id="type1" style="display:none">需要在【小程序后台->开发->开发设置->服务器域名】设置<font color="red">request合法域名</font>,如果用于支付,还需要在微信支付后台绑定此小程序</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel panel-info">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">系统共有 <b><?php echo count($list);?></b> 个公众号/小程序 <span class="pull-right"><a href="javascript:addframe()" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 新增</a></span></h3></div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead><tr><th>ID</th><th>类别</th><th>名称</th><th>APPID</th><th>操作</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach($list as $res)
|
||||||
|
{
|
||||||
|
echo '<tr><td><b>'.$res['id'].'</b></td><td>'.display_type($res['type']).'</td><td>'.$res['name'].'</td><td>'.$res['appid'].'</td><td><a class="btn btn-xs btn-info" onclick="editframe('.$res['id'].')">编辑</a> <a class="btn btn-xs btn-danger" onclick="delItem('.$res['id'].')">删除</a> <a onclick="testweixin('.$res['id'].')" class="btn btn-xs btn-default">测试</a></td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function shownote(){
|
||||||
|
var type = $("#type").val();
|
||||||
|
if(type == 1){
|
||||||
|
$("#type0").hide();
|
||||||
|
$("#type1").show();
|
||||||
|
}else{
|
||||||
|
$("#type0").show();
|
||||||
|
$("#type1").hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function addframe(){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("新增公众号/小程序");
|
||||||
|
$("#action").val("add");
|
||||||
|
$("#id").val('');
|
||||||
|
$("#type").val(0);
|
||||||
|
$("#name").val('');
|
||||||
|
$("#appid").val('');
|
||||||
|
$("#appsecret").val('');
|
||||||
|
shownote()
|
||||||
|
}
|
||||||
|
function editframe(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=getWeixin&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("修改公众号/小程序");
|
||||||
|
$("#action").val("edit");
|
||||||
|
$("#id").val(data.data.id);
|
||||||
|
$("#type").val(data.data.type);
|
||||||
|
$("#name").val(data.data.name);
|
||||||
|
$("#appid").val(data.data.appid);
|
||||||
|
$("#appsecret").val(data.data.appsecret);
|
||||||
|
shownote()
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function save(){
|
||||||
|
if($("#name").val()==''||$("#appid").val()==''||$("#appsecret").val()==''){
|
||||||
|
layer.alert('请确保各项不能为空!');return false;
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_pay.php?act=saveWeixin',
|
||||||
|
data : $("#form-store").serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg,{
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
window.location.reload()
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function delItem(id) {
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此公众号/小程序吗?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=delWeixin&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload()
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function testweixin(id) {
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_pay.php?act=testweixin',
|
||||||
|
data : {id:id},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,234 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 企业微信账号列表
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='企业微信账号列表';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-md-8 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$list = $DB->getAll("SELECT * FROM pre_wework ORDER BY id ASC");
|
||||||
|
?>
|
||||||
|
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content animated flipInX">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span
|
||||||
|
aria-hidden="true">×</span><span
|
||||||
|
class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title" id="modal-title">企业微信修改/添加</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form class="form-horizontal" id="form-store">
|
||||||
|
<input type="hidden" name="action" id="action"/>
|
||||||
|
<input type="hidden" name="id" id="id"/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">名称</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="name" id="name" placeholder="仅用于显示,不要重复">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">企业ID</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="appid" id="appid" placeholder="">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">Secret</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="appsecret" id="appsecret" placeholder="">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel panel-info">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">企业微信账号列表 <span class="pull-right"><a href="javascript:addframe()" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 新增</a></span></h3></div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead><tr><th>ID</th><th>名称</th><th>企业ID</th><th>客服账号数量</th><th>状态</th><th>操作</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
$wxkf_allnum = 0;
|
||||||
|
foreach($list as $res)
|
||||||
|
{
|
||||||
|
$wxkf_num = $DB->getColumn("SELECT COUNT(*) FROM pre_wxkfaccount WHERE wid='{$res['id']}'");
|
||||||
|
$wxkf_allnum += $wxkf_num;
|
||||||
|
echo '<tr><td><b>'.$res['id'].'</b></td><td>'.$res['name'].'</td><td>'.$res['appid'].'</td><td><span style="font-weight:700;color:#f40;">'.$wxkf_num.'</span> [<a href="javascript:refreshnum('.$res['id'].')">刷新</a>]</td><td>'.($res['status']==1?'<a class="btn btn-xs btn-success" onclick="setStatus('.$res['id'].',0)">已开启</a>':'<a class="btn btn-xs btn-warning" onclick="setStatus('.$res['id'].',1)">已关闭</a>').'</td><td><a class="btn btn-xs btn-info" onclick="editframe('.$res['id'].')">编辑</a> <a class="btn btn-xs btn-danger" onclick="delItem('.$res['id'].')">删除</a> <a onclick="testwework('.$res['id'].')" class="btn btn-xs btn-default">测试</a></td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="panel-footer">
|
||||||
|
<span class="glyphicon glyphicon-info-sign"></span> 当前共有<span style="font-weight:700;color:#f40;"><?php echo count($list);?></span>个企业微信,总共<span style="font-weight:700;color:#f40;"><?php echo $wxkf_allnum ?></span>个客服账号<?php if($conf['wework_paymsgmode']==1)echo ',<font color="red">也即单个用户48小时内最多拉起'.$wxkf_allnum.'次微信客服支付</font>';?><br/>如需在企业下添加多个客服账号,需先在开发配置停用API,然后再添加客服账号。
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function addframe(){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("新增企业微信");
|
||||||
|
$("#action").val("add");
|
||||||
|
$("#id").val('');
|
||||||
|
$("#name").val('');
|
||||||
|
$("#appid").val('');
|
||||||
|
$("#appsecret").val('');
|
||||||
|
}
|
||||||
|
function editframe(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=getWework&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("修改企业微信");
|
||||||
|
$("#action").val("edit");
|
||||||
|
$("#id").val(data.data.id);
|
||||||
|
$("#name").val(data.data.name);
|
||||||
|
$("#appid").val(data.data.appid);
|
||||||
|
$("#appsecret").val(data.data.appsecret);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function save(){
|
||||||
|
if($("#name").val()==''||$("#appid").val()==''||$("#appsecret").val()==''){
|
||||||
|
layer.alert('请确保各项不能为空!');return false;
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_pay.php?act=saveWework',
|
||||||
|
data : $("#form-store").serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg,{
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
window.location.reload()
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function delItem(id) {
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此企业微信吗?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=delWework&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload()
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setStatus(id,status) {
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=setWework&id='+id+'&status='+status,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload()
|
||||||
|
}else{
|
||||||
|
layer.msg(data.msg, {icon:2, time:1500});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function refreshnum(id) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_pay.php?act=refreshWework',
|
||||||
|
data : {id:id},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1,closeBtn:false}, function(){window.location.reload()});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function testwework(id) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_pay.php?act=testWework',
|
||||||
|
data : {id:id},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 支付插件页面
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='支付插件页面';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
$channelid = isset($_GET['channel'])?intval($_GET['channel']):0;
|
||||||
|
$func = isset($_GET['func'])?$_GET['func']:'';
|
||||||
|
if($channelid == 0 || empty($func)) showmsg('参数错误',3);
|
||||||
|
$channel = \lib\Channel::get($channelid);
|
||||||
|
if(!$channel) showmsg('当前支付通道不存在',3);
|
||||||
|
|
||||||
|
try{
|
||||||
|
\lib\Plugin::loadForAdmin($func);
|
||||||
|
}catch(Exception $e){
|
||||||
|
showmsg($e->getMessage(),3);
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,483 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 分账记录
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='分账记录';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
.tips {cursor: pointer;}
|
||||||
|
.dates{max-width: 120px;}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.table-responsive {
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<link href="../assets/css/datepicker.css" rel="stylesheet">
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-md-12 center-block" style="float: none;">
|
||||||
|
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>搜索</label>
|
||||||
|
<select name="column" class="form-control"><option value="trade_no">系统订单号</option><option value="api_trade_no">接口订单号</option><option value="money">分账金额</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="value" placeholder="搜索内容">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="rid" style="width: 80px;" placeholder="分账规则" value="">
|
||||||
|
</div>
|
||||||
|
<div class="input-group input-daterange">
|
||||||
|
<input type="text" id="starttime" name="starttime" class="form-control dates" placeholder="开始日期" autocomplete="off" title="留空则不限时间范围">
|
||||||
|
<span class="input-group-addon" onclick="$('#starttime').val('');$('#endtime').val('');" title="清除"><i class="fa fa-chevron-right"></i></span>
|
||||||
|
<input type="text" id="endtime" name="endtime" class="form-control dates" placeholder="结束日期" autocomplete="off" title="留空则不限时间范围">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="0">待分账</option><option value="1">已提交</option><option value="2">分账成功</option><option value="3">分账失败</option><option value="4">已取消</option></select>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">搜索</button>
|
||||||
|
<a href="javascript:searchClear()" class="btn btn-default" title="刷新记录列表"><i class="fa fa-refresh"></i></a>
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<button type="button" id="batchAction" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span></button>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="javascript:batch_act('submit')" data-action-type="submit">批量分账</a></li>
|
||||||
|
<li><a href="javascript:batch_act('return')" data-action-type="return">批量回退</a></li>
|
||||||
|
<li><a href="javascript:batch_act('unfreeze')" data-action-type="unfreeze">批量取消</a></li>
|
||||||
|
<li role="separator" class="divider"></li>
|
||||||
|
<li><a href="javascript:operation('2')" data-action-type="2">改为成功</a></li>
|
||||||
|
<li><a href="javascript:operation('3')" data-action-type="3">改为失败</a></li>
|
||||||
|
<li><a href="javascript:operation('4')" data-action-type="4">改为取消</a></li>
|
||||||
|
<li><a href="javascript:operation('5')" data-action-type="5">删除</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<button type="button" onclick="statistics()" class="btn btn-default"> 统计 </button>
|
||||||
|
</form>
|
||||||
|
<table id="listTable">
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal" id="modal-statistics" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content animated flipInX">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title">分账统计概况</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-primary" data-dismiss="modal">关闭</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<template id="statistics-template">
|
||||||
|
<ul class="list-inline" style="margin-bottom: 0;padding-bottom: 10px;border-bottom: 1px solid #dddddd;">
|
||||||
|
<li>分账总金额:<span style="font-weight: 600;">¥ {totalMoney}</span></li>
|
||||||
|
<li>成功分账:<span style="font-weight: 600;">¥ {successMoney}</span></li>
|
||||||
|
<li>失败金额:<span style="font-weight: 600;">¥ {failMoney}</span></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="list-inline" style="padding-top:10px;margin-bottom: 0;">
|
||||||
|
<li>分账总数:<span style="font-weight: 600;">{totalCount}</span></li>
|
||||||
|
<li>成功分账:<span style="font-weight: 600;">{successCount}</span></li>
|
||||||
|
<li>分账失败:<span style="font-weight: 600;">{failCount}</span></li>
|
||||||
|
<li>成功率:<span style="font-weight: 600;">{successRate}%</span></li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
|
||||||
|
<script src="../assets/js/custom.js"></script>
|
||||||
|
<script>
|
||||||
|
$.action_arr = {
|
||||||
|
'submit': '提交分账',
|
||||||
|
'return': '分账回退',
|
||||||
|
'unfreeze': '取消分账',
|
||||||
|
'query': '查询结果',
|
||||||
|
};
|
||||||
|
$(document).ready(function(){
|
||||||
|
updateToolbar();
|
||||||
|
const defaultPageSize = 30;
|
||||||
|
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
|
||||||
|
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
|
||||||
|
|
||||||
|
$("#listTable").bootstrapTable({
|
||||||
|
url: 'ajax_profitsharing.php?act=orderList',
|
||||||
|
pageNumber: pageNumber,
|
||||||
|
pageSize: pageSize,
|
||||||
|
classes: 'table table-striped table-hover table-bordered',
|
||||||
|
uniqueId: 'id',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
checkbox: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'trade_no',
|
||||||
|
title: '系统订单号',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<b><a href="./order.php?column=trade_no&value='+value+'" target="_blank">'+value+'</a></b>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'rid',
|
||||||
|
title: '分账规则'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'channelid',
|
||||||
|
title: '支付通道',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return value + '__' + row.channelname;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'money',
|
||||||
|
title: '分账金额',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(row.status == '0' || row.status == '3'){
|
||||||
|
return '<a href="javascript:editmoney('+row.id+', \''+value+'\')" title="修改分账金额">'+value+'</a>';
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'addtime',
|
||||||
|
title: '时间'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: '分账状态',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(value == '1'){
|
||||||
|
return '<font color=orange>已提交</font>';
|
||||||
|
}else if(value == '2'){
|
||||||
|
return '<font color=green>分账成功</font>';
|
||||||
|
}else if(value == '3'){
|
||||||
|
return '<font color=red>分账失败</font>' + (row.result ? ' <span onclick="showmsg(\''+row.result+'\')" class="tips" title="失败原因"><i class="fa fa-info-circle"></i></span>' : '');
|
||||||
|
}else if(value == '4'){
|
||||||
|
return '<font color=grey>已取消</font>';
|
||||||
|
}else{
|
||||||
|
return '<font color=blue>待分账</font>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: '操作',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(value == '1'){
|
||||||
|
return '<a href="javascript:do_query('+row.id+')" class="btn btn-info btn-xs">查询结果</a>';
|
||||||
|
}else if(value == '2'){
|
||||||
|
return '<a href="javascript:do_return('+row.id+')" class="btn btn-danger btn-xs">分账回退</a>';
|
||||||
|
}else if(value == '3'){
|
||||||
|
return '<a href="javascript:do_submit('+row.id+')" class="btn btn-primary btn-xs">重试</a> <a href="javascript:do_unfreeze('+row.id+')" class="btn btn-danger btn-xs">取消</a>';
|
||||||
|
}else if(value == '0'){
|
||||||
|
return '<a href="javascript:do_submit('+row.id+')" class="btn btn-primary btn-xs">提交分账</a> <a href="javascript:do_unfreeze('+row.id+')" class="btn btn-danger btn-xs">取消</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
function operation(status){
|
||||||
|
var selected = $('#listTable').bootstrapTable('getSelections');
|
||||||
|
if(selected.length == 0){
|
||||||
|
layer.msg('未选择订单', {time:1500});return;
|
||||||
|
}
|
||||||
|
var checkbox = new Array();
|
||||||
|
$.each(selected, function(key, item){
|
||||||
|
checkbox.push(item.id)
|
||||||
|
})
|
||||||
|
if(status == 5 && !confirm('确定要删除已选中的'+checkbox.length+'个订单吗?')) return;
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_profitsharing.php?act=operation',
|
||||||
|
data : {status:status, checkbox:checkbox},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
searchSubmit();
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('请求超时');
|
||||||
|
searchSubmit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function batch_act(action){
|
||||||
|
var selected = $('#listTable').bootstrapTable('getSelections');
|
||||||
|
if(selected.length == 0){
|
||||||
|
layer.msg('未选择订单', {time:1500});return;
|
||||||
|
}
|
||||||
|
var checkbox = getBatchOperateData(selected, 'id')[action];
|
||||||
|
if(checkbox.length == 0){
|
||||||
|
layer.msg('要处理的订单数量为0', {time:1500});return;
|
||||||
|
}
|
||||||
|
var content_arr = {
|
||||||
|
'submit': '是否将这'+checkbox.length+'条订单进行分账?',
|
||||||
|
'return': '是否将这'+checkbox.length+'条已分账的订单回退?资金将从分账接收方的账户回退给分账方。',
|
||||||
|
'unfreeze': '是否将这'+checkbox.length+'条订单取消分账?取消分账后将解冻资金到商户号,后续无法再次发起分账。'
|
||||||
|
};
|
||||||
|
var confirmobj = layer.confirm(content_arr[action], {
|
||||||
|
title: $.action_arr[action],
|
||||||
|
btn: ['确定','取消'],
|
||||||
|
icon:0
|
||||||
|
}, function(){
|
||||||
|
batch_act_order(checkbox, 0, action);
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function batch_act_order(ids, index, action){
|
||||||
|
if (index >= ids.length) {
|
||||||
|
layer.alert('已成功'+$.action_arr[action]+ids.length+'条订单!', {icon: 1}, function(){
|
||||||
|
layer.closeAll();searchSubmit();
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var id = ids[index];
|
||||||
|
var row = $("#listTable").bootstrapTable('getRowByUniqueId', id);
|
||||||
|
var ii = layer.msg('正在' + $.action_arr[action] + row.trade_no + '('+row.money+'元)', {icon: 16, shade: 0.3, time: 0});
|
||||||
|
var url_arr = {
|
||||||
|
'submit': 'ajax_profitsharing.php?act=submit',
|
||||||
|
'return': 'ajax_profitsharing.php?act=return',
|
||||||
|
'unfreeze': 'ajax_profitsharing.php?act=unfreeeze'
|
||||||
|
};
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : url_arr[action],
|
||||||
|
data : {id:id},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
index > 0 && searchSubmit();
|
||||||
|
if(data.code == 0){
|
||||||
|
batch_act_order(ids, index + 1, action);
|
||||||
|
}else{
|
||||||
|
layer.alert(row.trade_no + $.action_arr[action] + '失败:' + data.msg, {icon:7});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function getBatchOperateData(selections, field) {
|
||||||
|
var counts = {
|
||||||
|
'submit': field ? [] : 0, // 批量分账
|
||||||
|
'return': field ? [] : 0, // 批量回退
|
||||||
|
'unfreeze': field ? [] : 0, // 批量取消
|
||||||
|
};
|
||||||
|
selections.forEach(function(row) {
|
||||||
|
var status = parseInt(row.status);
|
||||||
|
if (status == 0) {
|
||||||
|
if (field) {
|
||||||
|
counts['submit'].push(row[field]);
|
||||||
|
counts['unfreeze'].push(row[field]);
|
||||||
|
} else {
|
||||||
|
counts['submit']++;
|
||||||
|
counts['unfreeze']++;
|
||||||
|
}
|
||||||
|
} else if (status == 2) {
|
||||||
|
if (field) {
|
||||||
|
counts['return'].push(row[field]);
|
||||||
|
} else {
|
||||||
|
counts['return']++;
|
||||||
|
}
|
||||||
|
} else if (status == 3) {
|
||||||
|
if (field) {
|
||||||
|
counts['submit'].push(row[field]);
|
||||||
|
counts['unfreeze'].push(row[field]);
|
||||||
|
} else {
|
||||||
|
counts['submit']++;
|
||||||
|
counts['unfreeze']++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return counts;
|
||||||
|
}
|
||||||
|
function do_submit(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_profitsharing.php?act=submit',
|
||||||
|
data : {id:id},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code >= 0){
|
||||||
|
layer.alert(data.msg, {icon: 1}, function(){layer.closeAll();searchSubmit()});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function do_query(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_profitsharing.php?act=query',
|
||||||
|
data : {id:id},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
var msg = '查询结果:正在分账';
|
||||||
|
if(data.status == 1) msg = '查询结果:分账成功';
|
||||||
|
else if(data.status == 2) msg = '查询结果:分账失败,原因:'+data.reason;
|
||||||
|
layer.alert(msg, {icon: 1}, function(){layer.closeAll();searchSubmit()});
|
||||||
|
}else{
|
||||||
|
layer.alert('查询失败:'+data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function do_unfreeze(id){
|
||||||
|
var confirmobj = layer.confirm('取消分账后将解冻资金到商户号,后续无法再次发起分账,是否继续?', {
|
||||||
|
btn: ['确定','取消']
|
||||||
|
}, function(){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_profitsharing.php?act=unfreeeze',
|
||||||
|
data : {id:id},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon: 1}, function(){layer.closeAll();searchSubmit()});
|
||||||
|
}else{
|
||||||
|
layer.alert('解冻剩余资金失败:'+data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function do_return(id){
|
||||||
|
var confirmobj = layer.confirm('将已分账的资金从分账接收方的账户回退给分账方,是否继续?', {
|
||||||
|
btn: ['确定','取消']
|
||||||
|
}, function(){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_profitsharing.php?act=return',
|
||||||
|
data : {id:id},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon: 1}, function(){layer.closeAll();searchSubmit()});
|
||||||
|
}else{
|
||||||
|
layer.alert('退分账失败:'+data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function showmsg(result){
|
||||||
|
layer.alert(result, {title:'失败原因'});
|
||||||
|
}
|
||||||
|
function editmoney(id, money){
|
||||||
|
layer.prompt({title: '修改分账金额', value: money, formType: 0}, function(text, index){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_profitsharing.php?act=editmoney',
|
||||||
|
data : {id:id,money:text},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.closeAll();
|
||||||
|
layer.msg('修改成功', {time:800});
|
||||||
|
searchSubmit()
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function statistics(){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_profitsharing.php?act=statistics',
|
||||||
|
data: $('#searchToolbar').serializeArray(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
var element = $('#modal-statistics');
|
||||||
|
var htmlContent = $("#statistics-template").html().replace(/\{(\w+)\}/g, function (match, key) {
|
||||||
|
return data.data[key] || '';
|
||||||
|
});
|
||||||
|
element.find('.modal-body').html(htmlContent);
|
||||||
|
element.modal('show');
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('.input-datepicker, .input-daterange').datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
autoclose: true,
|
||||||
|
clearBtn: true,
|
||||||
|
language: 'zh-CN'
|
||||||
|
});
|
||||||
|
$("#batchAction").click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var selections = $('#listTable').bootstrapTable('getSelections'),
|
||||||
|
button = $(this);
|
||||||
|
var counts = getBatchOperateData(selections);
|
||||||
|
button.next('.dropdown-menu').find('a[data-action-type]').each(function() {
|
||||||
|
var actionType = $(this).data('action-type');
|
||||||
|
var count = counts[actionType];
|
||||||
|
if(typeof count == 'undefined') return;
|
||||||
|
var originalText = $(this).text().split('(')[0];
|
||||||
|
$(this).text(originalText + (count > 0 ? ' (可执行' + count + '条)' : ' (0)'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,355 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 分账规则列表
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='分账规则列表';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
tbody tr>td:nth-child(4){overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width:160px;}
|
||||||
|
tbody tr>td:nth-child(5){overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width:320px;}
|
||||||
|
</style>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<?php
|
||||||
|
$support_plugins = \lib\ProfitSharing\CommUtil::$plugins;
|
||||||
|
$channels = $DB->getAll("SELECT id,name,plugin,mode FROM pre_channel WHERE plugin IN ('".implode("','",$support_plugins)."') ORDER BY id ASC");
|
||||||
|
$channel_select = '';
|
||||||
|
foreach($channels as $row){
|
||||||
|
$channel_select .= '<option value="'.$row['id'].'" plugin="'.$row['plugin'].'" mode="'.$row['mode'].'">'.$row['id'].'__'.$row['name'].'</option>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$link = '';
|
||||||
|
$sql = " 1";
|
||||||
|
if(isset($_GET['value']) && !empty($_GET['value'])) {
|
||||||
|
$value=daddslashes($_GET['value']);
|
||||||
|
$sql .= " AND A.`{$_GET['column']}`='{$value}'";
|
||||||
|
$link .= '&column='.$_GET['column'].'&value='.urlencode($_GET['value']);
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content animated flipInX">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span
|
||||||
|
aria-hidden="true">×</span><span
|
||||||
|
class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title" id="modal-title">分账规则修改/添加</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form class="form-horizontal" id="form-store">
|
||||||
|
<input type="hidden" name="action" id="action"/>
|
||||||
|
<input type="hidden" name="id" id="id"/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label no-padding-right">支付通道</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<select name="channel" id="channel" class="form-control" onchange="changeChannel()">
|
||||||
|
<option value="0">请选择支付通道</option><?php echo $channel_select; ?>
|
||||||
|
</select>
|
||||||
|
<font color="green">只支持<?php echo implode("、",$support_plugins)?>支付插件</font>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label no-padding-right">商户ID</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" class="form-control" name="uid" id="uid" placeholder="可留空,留空则为当前支付通道所有订单">
|
||||||
|
<font color="green" id="uid_note" style="display:none">填写商户ID后,将自动从商户余额扣除分账的金额</font>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label no-padding-right">商户子通道</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<select name="subchannel" id="subchannel" class="form-control"></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label no-padding-right">接收方账号</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" class="form-control" name="account" id="account" placeholder="">
|
||||||
|
<font color="green" id="account_note"></font>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label no-padding-right">接收方姓名</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" class="form-control" name="name" id="name" placeholder="可留空,不填写则不校验真实姓名">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label no-padding-right">分账比例</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="input-group"><input type="text" class="form-control" name="rate" id="rate" placeholder="填写1~100的数字"><span class="input-group-addon">%</span></div>
|
||||||
|
<font color="green">一般限制最高30%(微信还需要减去手续费,例如手续费是0.6%,则填写29.4%)</font>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label no-padding-right">订单最小金额</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="input-group"><input type="text" class="form-control" name="minmoney" id="minmoney" placeholder="订单超过该金额才进行分账"><span class="input-group-addon">元</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel panel-info">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">分账规则列表</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<form action="./ps_receiver.php" method="GET" class="form-inline">
|
||||||
|
<div class="form-group">
|
||||||
|
<label><b>搜索</b></label>
|
||||||
|
<select name="column" class="form-control" default="<?php echo @$_GET['column']?>"><option value="channel">通道ID</option><option value="uid">商户ID</option><option value="account">接收方账号</option><option value="name">接收方姓名</option></select>
|
||||||
|
<input type="text" class="form-control" name="value" placeholder="输入搜索内容" value="<?php echo @$_GET['value']?>">
|
||||||
|
<button type="submit" class="btn btn-primary"><i class="fa fa-search"></i> 搜索</button>
|
||||||
|
<a href="javascript:addframe()" class="btn btn-success"><i class="fa fa-plus"></i> 新增</a>
|
||||||
|
<a href="?" class="btn btn-default" title="刷新列表"><i class="fa fa-refresh"></i></a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead><tr><th>ID</th><th>支付通道</th><th>商户ID</th><th>商户子通道</th><th>接收方账号/姓名</th><th>分账比例</th><th>状态</th><th>操作</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
$numrows=$DB->getColumn("SELECT count(*) from pre_psreceiver A WHERE{$sql}");
|
||||||
|
$pagesize=15;
|
||||||
|
$pages=ceil($numrows/$pagesize);
|
||||||
|
$page=isset($_GET['page'])?intval($_GET['page']):1;
|
||||||
|
$offset=$pagesize*($page - 1);
|
||||||
|
|
||||||
|
$rs=$DB->query("SELECT A.*,B.name channelname,C.name subchannelname,C.apply_id FROM pre_psreceiver A LEFT JOIN pre_channel B ON A.channel=B.id LEFT JOIN pre_subchannel C ON A.subchannel=C.id WHERE{$sql} order by A.id desc limit $offset,$pagesize");
|
||||||
|
while($res = $rs->fetch())
|
||||||
|
{
|
||||||
|
echo '<tr><td><b>'.$res['id'].'</b></td><td>'.$res['channel'].'__'.$res['channelname'].'</td><td><a href="./ulist.php?my=search&column=uid&value='.$res['uid'].'" target="_blank">'.$res['uid'].'</a></td><td>'.($res['subchannel']?$res['subchannel'].'__'.$res['subchannelname']:'').'</td><td>'.$res['account'].($res['name']?'/'.$res['name']:'').'</td><td>'.$res['rate'].'</td><td>'.($res['status']==1?'<a class="btn btn-xs btn-success" onclick="setStatus('.$res['id'].',0)">已开启</a>':'<a class="btn btn-xs btn-warning" onclick="setStatus('.$res['id'].',1)">已关闭</a>').'</td><td><a class="btn btn-xs btn-info" onclick="editframe('.$res['id'].')">编辑</a> <a class="btn btn-xs btn-danger" onclick="delItem('.$res['id'].')">删除</a> <a href="./ps_order.php?rid='.$res['id'].'" target="_blank" class="btn btn-xs btn-default">订单</a></td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
echo'<center><ul class="pagination">';
|
||||||
|
$first=1;
|
||||||
|
$prev=$page-1;
|
||||||
|
$next=$page+1;
|
||||||
|
$last=$pages;
|
||||||
|
if ($page>1)
|
||||||
|
{
|
||||||
|
echo '<li><a href="ps_receiver.php?page='.$first.$link.'">首页</a></li>';
|
||||||
|
echo '<li><a href="ps_receiver.php?page='.$prev.$link.'">«</a></li>';
|
||||||
|
} else {
|
||||||
|
echo '<li class="disabled"><a>首页</a></li>';
|
||||||
|
echo '<li class="disabled"><a>«</a></li>';
|
||||||
|
}
|
||||||
|
$start=$page-10>1?$page-10:1;
|
||||||
|
$end=$page+10<$pages?$page+10:$pages;
|
||||||
|
for ($i=$start;$i<$page;$i++)
|
||||||
|
echo '<li><a href="ps_receiver.php?page='.$i.$link.'">'.$i .'</a></li>';
|
||||||
|
echo '<li class="disabled"><a>'.$page.'</a></li>';
|
||||||
|
for ($i=$page+1;$i<=$end;$i++)
|
||||||
|
echo '<li><a href="ps_receiver.php?page='.$i.$link.'">'.$i .'</a></li>';
|
||||||
|
if ($page<$pages)
|
||||||
|
{
|
||||||
|
echo '<li><a href="ps_receiver.php?page='.$next.$link.'">»</a></li>';
|
||||||
|
echo '<li><a href="ps_receiver.php?page='.$last.$link.'">尾页</a></li>';
|
||||||
|
} else {
|
||||||
|
echo '<li class="disabled"><a>»</a></li>';
|
||||||
|
echo '<li class="disabled"><a>尾页</a></li>';
|
||||||
|
}
|
||||||
|
echo'</ul></center>';
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function addframe(){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("新增分账规则");
|
||||||
|
$("#action").val("add");
|
||||||
|
$("#subchannel").empty();
|
||||||
|
$("#id").val('');
|
||||||
|
$("#channel").val(0);
|
||||||
|
$("#uid").val('');
|
||||||
|
$("#subchannel").val(0);
|
||||||
|
$("#account").val('');
|
||||||
|
$("#name").val('');
|
||||||
|
$("#rate").val('');
|
||||||
|
$("#minmoney").val('');
|
||||||
|
}
|
||||||
|
function changeChannel(subchannel){
|
||||||
|
subchannel = subchannel || null
|
||||||
|
var channel = parseInt($("#channel").val());
|
||||||
|
if(channel>0){
|
||||||
|
var plugin = $("#channel option:selected").attr('plugin');
|
||||||
|
if(plugin == 'wxpayn' || plugin == 'wxpaynp')
|
||||||
|
$("#account_note").text('支持填写商户号或个人OpenId!OpenId获取地址:<?php echo $siteurl?>user/openid.php?channel='+channel);
|
||||||
|
else if(plugin == 'alipay' || plugin == 'alipaysl')
|
||||||
|
$("#account_note").text('支持填写支付宝UID(2088开头的16位数字)或支付宝账号');
|
||||||
|
else
|
||||||
|
$("#account_note").text('');
|
||||||
|
var mode = $("#channel option:selected").attr('mode');
|
||||||
|
if(mode == '1')
|
||||||
|
$("#uid_note").hide();
|
||||||
|
else
|
||||||
|
$("#uid_note").show();
|
||||||
|
}else{
|
||||||
|
$("#account_note").text('');
|
||||||
|
}
|
||||||
|
getSubChannels(subchannel);
|
||||||
|
}
|
||||||
|
function editframe(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_profitsharing.php?act=get_receiver&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("修改分账规则");
|
||||||
|
$("#action").val("edit");
|
||||||
|
$("#subchannel").empty();
|
||||||
|
$("#id").val(data.data.id);
|
||||||
|
$("#channel").val(data.data.channel);
|
||||||
|
$("#uid").val(data.data.uid);
|
||||||
|
$("#subchannel").val(data.data.subchannel);
|
||||||
|
$("#account").val(data.data.account);
|
||||||
|
$("#name").val(data.data.name);
|
||||||
|
$("#rate").val(data.data.rate);
|
||||||
|
$("#minmoney").val(data.data.minmoney);
|
||||||
|
changeChannel(data.data.subchannel);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function save(){
|
||||||
|
if($("#channel").val()=='0'||$("#account").val()==''){
|
||||||
|
layer.alert('必填项不能为空!');return false;
|
||||||
|
}
|
||||||
|
var url = 'ajax_profitsharing.php?act=add_receiver';
|
||||||
|
if($("#action").val() == 'edit') url = 'ajax_profitsharing.php?act=edit_receiver';
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : url,
|
||||||
|
data : $("#form-store").serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg,{
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
window.location.reload()
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function delItem(id) {
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此分账规则吗?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_profitsharing.php?act=del_receiver',
|
||||||
|
data : {id: id},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload()
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setStatus(id,status) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_profitsharing.php?act=set_receiver',
|
||||||
|
data : {id:id, status:status},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon: 1}, function(){layer.closeAll();window.location.reload()});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function getSubChannels(subchannel){
|
||||||
|
subchannel = subchannel || null;
|
||||||
|
var uid = $("#uid").val();
|
||||||
|
var channel = $("#channel").val();
|
||||||
|
$("#subchannel").empty();
|
||||||
|
if(uid == '' || channel == '0') return;
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_pay.php?act=getSubChannels&channel='+channel+'&uid='+uid,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
$("#subchannel").append('<option value="0">可留空,留空表示当前商户所有子通道</option>');
|
||||||
|
$.each(data.data, function (i, res) {
|
||||||
|
$("#subchannel").append('<option value="'+res.id+'">'+res.id+'__'+res.name+'</option>');
|
||||||
|
})
|
||||||
|
if(subchannel!=null)$("#subchannel").val(subchannel);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$(document).ready(function(){
|
||||||
|
var items = $("select[default]");
|
||||||
|
for (i = 0; i < items.length; i++) {
|
||||||
|
if($(items[i]).attr("default")!=''){
|
||||||
|
$(items[i]).val($(items[i]).attr("default"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$("#uid").change(function(){
|
||||||
|
getSubChannels();
|
||||||
|
})
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,198 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 资金明细
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='资金明细';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
.dates{max-width: 120px;}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.table-responsive {
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<link href="../assets/css/datepicker.css" rel="stylesheet">
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-md-12 center-block" style="float: none;">
|
||||||
|
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>搜索</label>
|
||||||
|
<select name="column" class="form-control"><option value="type">操作类型</option><option value="money">变更金额</option><option value="trade_no">关联订单号</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="value" placeholder="搜索内容">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="uid" style="width: 100px;" placeholder="商户号" value="">
|
||||||
|
</div>
|
||||||
|
<div class="input-group input-daterange">
|
||||||
|
<input type="text" id="starttime" name="starttime" class="form-control dates" placeholder="开始日期" autocomplete="off" title="留空则不限时间范围">
|
||||||
|
<span class="input-group-addon" onclick="$('#starttime').val('');$('#endtime').val('');" title="清除"><i class="fa fa-chevron-right"></i></span>
|
||||||
|
<input type="text" id="endtime" name="endtime" class="form-control dates" placeholder="结束日期" autocomplete="off" title="留空则不限时间范围">
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">搜索</button>
|
||||||
|
<a href="javascript:searchClear()" class="btn btn-default" title="刷新明细列表"><i class="fa fa-refresh"></i></a>
|
||||||
|
<button type="button" onclick="statistics()" class="btn btn-default"> 统计 </button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<table id="listTable">
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal" id="modal-statistics" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content animated flipInX">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title">资金明细统计</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-primary" data-dismiss="modal">关闭</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<template id="statistics-template">
|
||||||
|
<ul class="list-inline" style="margin-bottom: 0;padding-bottom: 10px;border-bottom: 1px solid #dddddd;">
|
||||||
|
<li>增加金额:<span style="font-weight: 600;">¥ {incMoney}</span></li>
|
||||||
|
<li>减少金额:<span style="font-weight: 600;">¥ {decMoney}</span></li>
|
||||||
|
<li>总计金额:<span style="font-weight: 600;">¥ {totalMoney}</span></li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
|
||||||
|
<script src="../assets/js/custom.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
updateToolbar();
|
||||||
|
const defaultPageSize = 30;
|
||||||
|
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
|
||||||
|
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
|
||||||
|
|
||||||
|
$("#listTable").bootstrapTable({
|
||||||
|
url: 'ajax_user.php?act=recordList',
|
||||||
|
pageNumber: pageNumber,
|
||||||
|
pageSize: pageSize,
|
||||||
|
classes: 'table table-striped table-hover table-bordered',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
field: 'uid',
|
||||||
|
title: '商户号',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<b><a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a></b>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'type',
|
||||||
|
title: '操作类型',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return row.action==2?'<font color="red">'+value+'</font>':'<font color="green">'+value+'</font>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'money',
|
||||||
|
title: '变更金额',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return (row.action==2?'- ':'+ ')+value;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'oldmoney',
|
||||||
|
title: '变更前金额'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'newmoney',
|
||||||
|
title: '变更后金额'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'date',
|
||||||
|
title: '时间'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'trade_no',
|
||||||
|
title: '关联订单号',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return value?'<a href="./order.php?column=trade_no&value='+value+'" target="_blank">'+value+'</a>':'无';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
title: '操作',
|
||||||
|
visible: false,
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<a class="btn btn-xs btn-danger" onclick="delItem('+row.id+')">删除</a>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
})
|
||||||
|
function delItem(id) {
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此记录吗?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_user.php?act=delRecord&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.closeAll();
|
||||||
|
searchSubmit();
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function statistics(){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=record_stats',
|
||||||
|
data: $('#searchToolbar').serializeArray(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
var element = $('#modal-statistics');
|
||||||
|
var htmlContent = $("#statistics-template").html().replace(/\{(\w+)\}/g, function (match, key) {
|
||||||
|
return data.data[key] || '';
|
||||||
|
});
|
||||||
|
element.find('.modal-body').html(htmlContent);
|
||||||
|
element.modal('show');
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('.input-datepicker, .input-daterange').datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
autoclose: true,
|
||||||
|
clearBtn: true,
|
||||||
|
language: 'zh-CN'
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 风控记录
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='风控记录';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-md-12 center-block" style="float: none;">
|
||||||
|
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>搜索</label>
|
||||||
|
<select name="column" class="form-control"><option value="uid">商户号</option><option value="url">风控网址</option><option value="content">风控内容</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="value" placeholder="搜索内容">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="type" class="form-control"><option value="-1">风控类型</option><option value="0">关键词屏蔽</option><option value="1">订单成功率</option><option value="2">连续通知失败</option><option value="3">订单投诉率</option></select>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">搜索</button>
|
||||||
|
<a href="javascript:searchClear()" class="btn btn-default" title="刷新风控记录"><i class="fa fa-refresh"></i></a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<table id="listTable">
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
|
||||||
|
<script src="../assets/js/custom.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
updateToolbar();
|
||||||
|
const defaultPageSize = 30;
|
||||||
|
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
|
||||||
|
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
|
||||||
|
|
||||||
|
$("#listTable").bootstrapTable({
|
||||||
|
url: 'ajax_order.php?act=riskList',
|
||||||
|
pageNumber: pageNumber,
|
||||||
|
pageSize: pageSize,
|
||||||
|
classes: 'table table-striped table-hover table-bordered',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
field: 'id',
|
||||||
|
title: 'ID',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<b>'+value+'</b>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'uid',
|
||||||
|
title: '商户号',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<b><a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a></b>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'type',
|
||||||
|
title: '风控类型',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(value == 1){
|
||||||
|
return '订单成功率';
|
||||||
|
}else if(value == 2){
|
||||||
|
return '连续通知失败';
|
||||||
|
}else if(value == 3){
|
||||||
|
return '订单投诉率';
|
||||||
|
}else{
|
||||||
|
return '关键词屏蔽';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'content',
|
||||||
|
title: '风控内容'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'url',
|
||||||
|
title: '风控网址'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'date',
|
||||||
|
title: '时间'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
})
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* H5跳转微信客服支付设置
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='H5跳转微信客服支付设置';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
|
||||||
|
$callback_url = $siteurl.'wework.php';
|
||||||
|
|
||||||
|
$errmsg = $CACHE->read('wxkferrmsg');
|
||||||
|
if($errmsg){
|
||||||
|
$arr = unserialize($errmsg);
|
||||||
|
$errmsg = $arr['time'].' - '.$arr['errmsg'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$account_list = $DB->getAll("SELECT A.* FROM pre_wxkfaccount A LEFT JOIN pre_wework B ON A.wid=B.id WHERE B.status=1");
|
||||||
|
$account_select = '<option value="0">多客服账号轮询</option>';
|
||||||
|
foreach($account_list as $row){
|
||||||
|
$account_select .= '<option value="'.$row['id'].'">'.$row['openkfid'].' - '.$row['name'].'</option>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">H5跳转微信客服支付设置</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<?php if($errmsg){?><div class="alert alert-warning">回调接口上一次报错信息:<?php echo $errmsg;?></div><?php }?>
|
||||||
|
<form onsubmit="return saveSetting(this)" method="post" class="form-horizontal" role="form">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">回调URL</label>
|
||||||
|
<div class="col-sm-9"><input type="text" value="<?php echo $callback_url; ?>" class="form-control" readonly/></div>
|
||||||
|
</div><br/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">Token</label>
|
||||||
|
<div class="col-sm-9"><input type="text" name="wework_token" value="<?php echo $conf['wework_token']; ?>" class="form-control"/></div>
|
||||||
|
</div><br/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">EncodingAESKey</label>
|
||||||
|
<div class="col-sm-9"><input type="text" name="wework_aeskey" value="<?php echo $conf['wework_aeskey']; ?>" class="form-control"/></div>
|
||||||
|
</div><hr/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">是否开启H5跳转微信客服支付</label>
|
||||||
|
<div class="col-sm-9"><select class="form-control" name="wework_payopen" default="<?php echo $conf['wework_payopen']?>"><option value="0">关闭</option><option value="1">开启</option></select><font color="green">开启前需确保以上配置正确无误,否则会导致手机浏览器无法微信支付</font></div>
|
||||||
|
</div><br/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">微信客服支付消息模式</label>
|
||||||
|
<div class="col-sm-9"><select class="form-control" name="wework_paymsgmode" default="<?php echo $conf['wework_paymsgmode']?>"><option value="0">发送确认消息,用户回复后发送支付链接(默认)</option><option value="1">直接发送支付链接(用户将无法支付第二单)</option></select><font color="green">让用户回复消息,可防止因微信限制发消息导致用户无法在同一个客服二次支付</font></div>
|
||||||
|
</div><br/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">客服账号ID选择</label>
|
||||||
|
<div class="col-sm-9"><select name="wework_paykfid" id="wework_paykfid" class="form-control" default="<?php echo $conf['wework_paykfid']; ?>"><?php echo $account_select?></option></select></div>
|
||||||
|
</div><br/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">人工客服链接</label>
|
||||||
|
<div class="col-sm-9"><input type="text" name="wework_contact" value="<?php echo $conf['wework_contact']; ?>" class="form-control" placeholder="选填,填写后在支付消息后面会追加人工客服链接"/></div>
|
||||||
|
</div><br/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">支付消息尾部附加内容</label>
|
||||||
|
<div class="col-sm-9"><input type="text" name="wework_remark" value="<?php echo $conf['wework_remark']; ?>" class="form-control" placeholder="选填,填写后在支付消息后面会追加自定义内容"/><font color="green">支持变量值:[qq]当前商户的联系QQ</font></div>
|
||||||
|
</div><br/>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-offset-3 col-sm-9"><input type="submit" name="submit" value="保存" class="btn btn-primary form-control"/><br/><br/><a href="pay_wework.php" class="btn btn-success btn-block">企业微信账号列表</a><br/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="panel-footer">
|
||||||
|
<span class="glyphicon glyphicon-info-sign"></span>
|
||||||
|
此功能可以通过<a href="https://kf.weixin.qq.com/" target="_blank" rel="noreferrer">微信客服</a>,从手机网站跳转到微信内进行支付。<br/>注:1、企业微信需要完成企业认证,否则接待客户数量会有限制。<br/>2、只能使用独立版<a href="https://kf.weixin.qq.com/" target="_blank" rel="noreferrer">微信客服</a>获取token并配置回调,不能开启企业微信内的微信客服应用!
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script>
|
||||||
|
var items = $("select[default]");
|
||||||
|
for (i = 0; i < items.length; i++) {
|
||||||
|
$(items[i]).val($(items[i]).attr("default")||0);
|
||||||
|
}
|
||||||
|
function saveSetting(obj){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax.php?act=set',
|
||||||
|
data : $(obj).serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert('设置保存成功!', {
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
window.location.reload()
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,194 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 批量结算
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='批量结算';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
img.logo{width:14px;height:14px;margin:0 5px 0 3px;}
|
||||||
|
</style>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">批量结算操作<span class="pull-right"><a href="javascript:createBatch()" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 生成结算批次</a></span></h3></div>
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead><tr><th>批次号</th><th>总金额</th><th>总数量</th><th>生成时间</th><th>操作</th></thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
$pagesize=15;
|
||||||
|
$pages=ceil($numrows/$pagesize);
|
||||||
|
$page=isset($_GET['page'])?intval($_GET['page']):1;
|
||||||
|
$offset=$pagesize*($page - 1);
|
||||||
|
|
||||||
|
$rs=$DB->query("SELECT * FROM pre_batch order by time desc limit $offset,$pagesize");
|
||||||
|
while($res = $rs->fetch())
|
||||||
|
{
|
||||||
|
echo '<tr><td><b>'.$res['batch'].'</b></td><td>'.$res['allmoney'].'</td><td>'.$res['count'].'</td><td>'.$res['time'].'</td><td><a href="./slist.php?batch='.$res['batch'].'" class="btn btn-xs btn-info">结算列表</a> <a href="javascript:download_csv(\''.$res['batch'].'\')" class="btn btn-xs btn-warning">导出表格</a> <a href="javascript:transfer(\''.$res['batch'].'\')" class="btn btn-xs btn-success">批量转账</a> <a href="javascript:completeBatch(\''.$res['batch'].'\')" class="btn btn-xs btn-primary">改为完成</a></td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<?php
|
||||||
|
echo'<div class="text-center"><ul class="pagination">';
|
||||||
|
$first=1;
|
||||||
|
$prev=$page-1;
|
||||||
|
$next=$page+1;
|
||||||
|
$last=$pages;
|
||||||
|
if ($page>1)
|
||||||
|
{
|
||||||
|
echo '<li><a href="settle.php?page='.$first.$link.'">首页</a></li>';
|
||||||
|
echo '<li><a href="settle.php?page='.$prev.$link.'">«</a></li>';
|
||||||
|
} else {
|
||||||
|
echo '<li class="disabled"><a>首页</a></li>';
|
||||||
|
echo '<li class="disabled"><a>«</a></li>';
|
||||||
|
}
|
||||||
|
for ($i=1;$i<$page;$i++)
|
||||||
|
echo '<li><a href="settle.php?page='.$i.$link.'">'.$i .'</a></li>';
|
||||||
|
echo '<li class="disabled"><a>'.$page.'</a></li>';
|
||||||
|
if($pages>=10)$sss=$page+10;else $sss=$pages;
|
||||||
|
for ($i=$page+1;$i<=$sss;$i++)
|
||||||
|
echo '<li><a href="settle.php?page='.$i.$link.'">'.$i .'</a></li>';
|
||||||
|
echo '';
|
||||||
|
if ($page<$pages)
|
||||||
|
{
|
||||||
|
echo '<li><a href="settle.php?page='.$next.$link.'">»</a></li>';
|
||||||
|
echo '<li><a href="settle.php?page='.$last.$link.'">尾页</a></li>';
|
||||||
|
} else {
|
||||||
|
echo '<li class="disabled"><a>»</a></li>';
|
||||||
|
echo '<li class="disabled"><a>尾页</a></li>';
|
||||||
|
}
|
||||||
|
echo'</ul></div>';
|
||||||
|
#分页
|
||||||
|
?>
|
||||||
|
<div class="panel-footer">
|
||||||
|
<span class="glyphicon glyphicon-info-sign"></span> 结算标准:金额大于<?php echo $conf['settle_money']?>元,或主动申请的<br/><span class="glyphicon glyphicon-info-sign"></span> 点击 生成结算批次 之后会将所有"<font color="blue">待结算</font>"状态的记录更改为"<font color="orange">正在结算</font>",通过转账接口转账之后会将状态更改为"<font color="green">已完成</font>",如果是手动转账,需要手动将状态更改为"<font color="green">已完成</font>"
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function createBatch(){
|
||||||
|
var confirmobj = layer.confirm('你确定要生成结算批次吗?', {
|
||||||
|
btn: ['确定','取消']
|
||||||
|
}, function(){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_settle.php?act=create_batch',
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert('生成结算批次成功!该批次总数量:'+data.count+',总金额:'+data.allmoney, {
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
},function(){
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 0})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function transfer(batch){
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_settle.php?act=paypwd_check',
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
var paymsg = '';
|
||||||
|
paymsg+='<a class="btn btn-default btn-block" href="transfer_batch.php?type=1&batch='+batch+'" style="margin-top:10px;"><img width="20" src="../assets/icon/alipay.ico" class="logo">支付宝批量转账</a>';
|
||||||
|
paymsg+='<a class="btn btn-default btn-block" href="transfer_batch.php?type=2&batch='+batch+'" style="margin-top:10px;"><img width="20" src="../assets/icon/wxpay.ico" class="logo">微信批量转账</a>';
|
||||||
|
paymsg+='<a class="btn btn-default btn-block" href="transfer_batch.php?type=3&batch='+batch+'" style="margin-top:10px;"><img width="20" src="../assets/icon/qqpay.ico" class="logo">QQ钱包批量转账</a>';
|
||||||
|
paymsg+='<a class="btn btn-default btn-block" href="transfer_batch.php?type=4&batch='+batch+'" style="margin-top:10px;"><img width="20" src="../assets/icon/bank.ico" class="logo">银行卡批量转账</a>';
|
||||||
|
layer.alert('<center>'+paymsg+'<hr><a class="btn btn-default btn-block" onclick="layer.closeAll()">关闭</a></center>',{
|
||||||
|
btn:[],
|
||||||
|
title:'请选择批量转账方式',
|
||||||
|
closeBtn: false,
|
||||||
|
shadeClose: true
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.prompt({title: '请输入支付密码', value: '', formType: 1}, function(text, index){
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_settle.php?act=paypwd_input',
|
||||||
|
data : {paypwd:text},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
transfer(batch);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function completeBatch(batch){
|
||||||
|
var confirmobj = layer.confirm('是否将该批次所有结算记录状态改为已完成?', {
|
||||||
|
btn: ['确定','取消']
|
||||||
|
}, function(){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_settle.php?act=complete_batch',
|
||||||
|
data : {batch: batch},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 0})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function download_csv(batch){
|
||||||
|
var paymsg = '';
|
||||||
|
paymsg+='<a class="btn btn-default btn-block" href="download.php?act=settle&batch='+batch+'" style="margin-top:10px;">结算信息汇总表格</a>';
|
||||||
|
paymsg+='<a class="btn btn-default btn-block" href="download.php?act=settle&type=alipay&batch='+batch+'" style="margin-top:10px;">支付宝批量付款表格</a>';
|
||||||
|
paymsg+='<a class="btn btn-default btn-block" href="download.php?act=settle&type=mybank&batch='+batch+'" style="margin-top:10px;">网商银行批量转账表格</a>';
|
||||||
|
paymsg+='<a class="btn btn-default btn-block" href="download.php?act=settle&type=wxpay&batch='+batch+'" style="margin-top:10px;">微信批量转账到零钱表格</a>';
|
||||||
|
layer.alert('<center>'+paymsg+'<hr><a class="btn btn-default btn-block" onclick="layer.closeAll()">关闭</a></center>',{
|
||||||
|
btn:[],
|
||||||
|
title:'请选择CSV表格模板',
|
||||||
|
closeBtn: false,
|
||||||
|
shadeClose: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,327 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 结算列表
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='结算列表';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12 center-block" style="float: none;">
|
||||||
|
|
||||||
|
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
|
||||||
|
<input type="hidden" class="form-control" name="batch">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>搜索</label>
|
||||||
|
<input type="text" class="form-control" name="value" placeholder="结算账号/姓名">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="uid" style="width: 100px;" placeholder="商户号" value="">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="type" class="form-control"><option value="0">所有结算方式</option><option value="1">支付宝</option><option value="2">微信</option><option value="3">QQ钱包</option><option value="4">银行卡</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="0">待结算</option><option value="1">已完成</option><option value="2">正在结算</option><option value="3">结算失败</option></select>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">搜索</button>
|
||||||
|
<a href="settle.php" class="btn btn-success">批量结算</a>
|
||||||
|
<a href="javascript:searchClear()" class="btn btn-default" title="刷新记录列表"><i class="fa fa-refresh"></i></a>
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">批量修改 <span class="caret"></span></button>
|
||||||
|
<ul class="dropdown-menu"><li><a href="javascript:operation(0)">待结算</a></li><li><a href="javascript:operation(1)">已完成</a></li><li><a href="javascript:operation(2)">正在结算</a></li><li><a href="javascript:operation(3)">结算失败</a></li><li><a href="javascript:operation(4)">删除记录</a></li></ul>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<table id="listTable">
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>jquery.qrcode/1.0/jquery.qrcode.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
|
||||||
|
<script src="../assets/js/custom.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
updateToolbar();
|
||||||
|
const defaultPageSize = 30;
|
||||||
|
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
|
||||||
|
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
|
||||||
|
|
||||||
|
$("#listTable").bootstrapTable({
|
||||||
|
url: 'ajax_settle.php?act=settleList',
|
||||||
|
pageNumber: pageNumber,
|
||||||
|
pageSize: pageSize,
|
||||||
|
classes: 'table table-striped table-hover table-bordered',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
checkbox: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'id',
|
||||||
|
title: 'ID',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<b>'+value+'</b>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'uid',
|
||||||
|
title: '商户号',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'type',
|
||||||
|
title: '结算方式',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
let typename = '';
|
||||||
|
if(value == '1'){
|
||||||
|
typename='<img src="/assets/icon/alipay.ico" width="16" onerror="this.style.display=\'none\'">支付宝';
|
||||||
|
}else if(value == '2'){
|
||||||
|
typename='<img src="/assets/icon/wxpay.ico" width="16" onerror="this.style.display=\'none\'">微信';
|
||||||
|
}else if(value == '3'){
|
||||||
|
typename='<img src="/assets/icon/qqpay.ico" width="16" onerror="this.style.display=\'none\'">QQ钱包';
|
||||||
|
}else if(value == '4'){
|
||||||
|
typename='<img src="/assets/icon/bank.ico" width="16" onerror="this.style.display=\'none\'">银行卡';
|
||||||
|
}else if(value == '5'){
|
||||||
|
typename='支付机构';
|
||||||
|
}
|
||||||
|
if(row.auto!=1) typename+='<small>[手动]</small>'
|
||||||
|
return typename;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'account',
|
||||||
|
title: '结算账号/姓名',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(row.type == '5'){
|
||||||
|
return value+' '+row.username;
|
||||||
|
}else{
|
||||||
|
return '<span onclick="inputInfo('+row.id+')" title="点击直接修改">'+value+' '+row.username+'</span>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'money',
|
||||||
|
title: '结算金额/实际到账',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<b>'+value+'</b> / <b>'+row.realmoney+'</b>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'addtime',
|
||||||
|
title: '创建时间'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'endtime',
|
||||||
|
title: '完成时间'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: '状态',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(value == '1'){
|
||||||
|
return '<font color=green>已完成</font>' + (row.jumpurl ? '<br/><a href="javascript:showQrcode(\''+row.jumpurl+'\')" class="btn btn-xs btn-success"><i class="fa fa-qrcode"></i> 确认收款</a>' : '');
|
||||||
|
}else if(value == '2'){
|
||||||
|
return '<font color=orange>正在结算</font>';
|
||||||
|
}else if(value == '3'){
|
||||||
|
return '<a href="javascript:setResult('+row.id+')" title="点此填写失败原因"><font color=red>结算失败</font></a>';
|
||||||
|
}else{
|
||||||
|
return '<font color=blue>待结算</font>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
title: '操作',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<select onChange="javascript:setStatus(\''+row.id+'\',this.value)" class=""><option selected>变更状态</option><option value="0">待结算</option><option value="1">已完成</option><option value="2">正在结算</option><option value="3">结算失败</option><option value="4">删除记录</option></select>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function operation(status){
|
||||||
|
var selected = $('#listTable').bootstrapTable('getSelections');
|
||||||
|
if(selected.length == 0){
|
||||||
|
layer.msg('未选择记录', {time:1500});return;
|
||||||
|
}
|
||||||
|
var checkbox = new Array();
|
||||||
|
$.each(selected, function(key, item){
|
||||||
|
checkbox.push(item.id)
|
||||||
|
})
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_settle.php?act=opslist',
|
||||||
|
data : {status:status, checkbox:checkbox},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
searchSubmit();
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('请求超时');
|
||||||
|
searchSubmit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function setStatusDo(id, status) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'get',
|
||||||
|
url : 'ajax_settle.php',
|
||||||
|
data : 'act=setSettleStatus&id=' + id + '&status=' + status,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(ret) {
|
||||||
|
layer.close(ii);
|
||||||
|
if (ret['code'] != 200) {
|
||||||
|
alert(ret['msg'] ? ret['msg'] : '操作失败');
|
||||||
|
}
|
||||||
|
layer.closeAll();
|
||||||
|
searchSubmit();
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setStatus(id, status) {
|
||||||
|
if(status==4){
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此记录并退回商户余额吗?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
setStatusDo(id, status);
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
setStatusDo(id, status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function setResult(id) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_settle.php?act=settle_result',
|
||||||
|
data : {id:id},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.prompt({title: '填写失败原因', value: data.result, formType: 2}, function(text, index){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_settle.php?act=settle_setresult',
|
||||||
|
data : {id:id,result:text},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.msg('填写失败原因成功');
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function inputInfo(id) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_settle.php?act=settle_info&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
title: '修改数据',
|
||||||
|
skin: 'layui-layer-rim',
|
||||||
|
content: data.data,
|
||||||
|
success: function(){
|
||||||
|
$("#pay_type").val(data.pay_type);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function saveInfo(id) {
|
||||||
|
var pay_type=$("#pay_type").val();
|
||||||
|
var pay_account=$("#pay_account").val();
|
||||||
|
var pay_name=$("#pay_name").val();
|
||||||
|
if(pay_account=='' || pay_name==''){layer.alert('请确保每项不能为空!');return false;}
|
||||||
|
$('#save').val('Loading');
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : "POST",
|
||||||
|
url : "ajax_settle.php?act=settle_save",
|
||||||
|
data : {id:id,pay_type:pay_type,pay_account:pay_account,pay_name:pay_name},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.closeAll();
|
||||||
|
layer.msg('保存成功!', {time:800});
|
||||||
|
searchSubmit();
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
$('#save').val('保存');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function showQrcode(url){
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
title: '收款方使用微信扫描以下二维码',
|
||||||
|
skin: 'layui-layer-demo',
|
||||||
|
shadeClose: true,
|
||||||
|
content: '<div id="qrcode" class="list-group-item text-center"></div>',
|
||||||
|
success: function(){
|
||||||
|
$('#qrcode').qrcode({
|
||||||
|
text: url,
|
||||||
|
width: 230,
|
||||||
|
height: 230,
|
||||||
|
foreground: "#000000",
|
||||||
|
background: "#ffffff",
|
||||||
|
typeNumber: -1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
|
||||||
|
$uid=intval($_GET['uid']);
|
||||||
|
|
||||||
|
$userrow=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
|
||||||
|
if(!$userrow)sysmsg('当前用户不存在!');
|
||||||
|
|
||||||
|
$session=md5($uid.$userrow['key'].$password_hash);
|
||||||
|
$expiretime=time()+604800;
|
||||||
|
$token=authcode("{$uid}\t{$session}\t{$expiretime}", 'ENCODE', SYS_KEY);
|
||||||
|
setcookie("user_token", $token, time() + 604800, '/user');
|
||||||
|
|
||||||
|
exit("<script language='javascript'>window.location.href='../user/';</script>");
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
$submit2=true;
|
||||||
|
|
||||||
|
$trade_no=daddslashes($_GET['trade_no']);
|
||||||
|
$order=$DB->getRow("SELECT * FROM pre_order WHERE trade_no='{$trade_no}' LIMIT 1");
|
||||||
|
if(!$order)sysmsg('该订单号不存在,请返回来源地重新发起请求!');
|
||||||
|
|
||||||
|
$paytype=$DB->getRow("SELECT id,name,status FROM pre_type WHERE id='{$order['type']}' LIMIT 1");
|
||||||
|
if(!$paytype)sysmsg('支付方式不存在');
|
||||||
|
|
||||||
|
$channelrow=$DB->getRow("SELECT id,plugin,apptype FROM pre_channel WHERE id='{$order['channel']}' LIMIT 1");
|
||||||
|
if(!$channelrow)sysmsg('支付通道不存在');
|
||||||
|
|
||||||
|
$order['typename'] = $paytype['name'];
|
||||||
|
$order['plugin'] = $channelrow['plugin'];
|
||||||
|
$order['profits'] = \lib\Payment::updateOrderProfits($order, $channelrow['plugin']);
|
||||||
|
|
||||||
|
try{
|
||||||
|
$result = \lib\Plugin::loadForSubmit($channelrow['plugin'], $trade_no);
|
||||||
|
$result['submit'] = true;
|
||||||
|
\lib\Payment::echoDefault($result);
|
||||||
|
}catch(Exception $e){
|
||||||
|
sysmsg($e->getMessage());
|
||||||
|
}
|
||||||
@@ -0,0 +1,360 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 付款记录
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='付款记录';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12 center-block" style="float: none;">
|
||||||
|
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>搜索</label>
|
||||||
|
<input type="text" class="form-control" name="value" placeholder="交易号/收款账号/姓名">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="uid" style="width: 100px;" placeholder="商户号" value="">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="type" class="form-control"><option value="">所有付款方式</option><option value="alipay">支付宝</option><option value="wxpay">微信</option><option value="qqpay">QQ钱包</option><option value="bank">银行卡</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="0">正在处理</option><option value="1">转账成功</option><option value="2">转账失败</option></select>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">搜索</button>
|
||||||
|
<a href="./transfer_add.php" class="btn btn-success">新增付款</a>
|
||||||
|
<a href="javascript:searchClear()" class="btn btn-default" title="刷新付款记录"><i class="fa fa-refresh"></i></a>
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">批量操作 <span class="caret"></span></button>
|
||||||
|
<ul class="dropdown-menu"><li><a href="javascript:operation(1)">改为成功</a></li><li><a href="javascript:operation(2)">改为失败</a></li><li><a href="javascript:operation(3)">删除记录</a></li></ul>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<table id="listTable">
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>jquery.qrcode/1.0/jquery.qrcode.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
|
||||||
|
<script src="../assets/js/custom.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
updateToolbar();
|
||||||
|
const defaultPageSize = 30;
|
||||||
|
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
|
||||||
|
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
|
||||||
|
|
||||||
|
$("#listTable").bootstrapTable({
|
||||||
|
url: 'ajax_transfer.php?act=transferList',
|
||||||
|
pageNumber: pageNumber,
|
||||||
|
pageSize: pageSize,
|
||||||
|
classes: 'table table-striped table-hover table-bordered',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
checkbox: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'biz_no',
|
||||||
|
title: '交易号<br/>第三方交易号',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<b>'+value+'</b><br/>'+row.pay_order_no;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'uid',
|
||||||
|
title: '商户号',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return value>0?'<a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a>':'管理员';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'type',
|
||||||
|
title: '付款方式<br/>备注',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
let typename = '';
|
||||||
|
if(value == 'alipay'){
|
||||||
|
typename='<img src="/assets/icon/alipay.ico" width="16" onerror="this.style.display=\'none\'">支付宝';
|
||||||
|
}else if(value == 'wxpay'){
|
||||||
|
typename='<img src="/assets/icon/wxpay.ico" width="16" onerror="this.style.display=\'none\'">微信';
|
||||||
|
}else if(value == 'qqpay'){
|
||||||
|
typename='<img src="/assets/icon/qqpay.ico" width="16" onerror="this.style.display=\'none\'">QQ钱包';
|
||||||
|
}else if(value == 'bank'){
|
||||||
|
typename='<img src="/assets/icon/bank.ico" width="16" onerror="this.style.display=\'none\'">银行卡';
|
||||||
|
}
|
||||||
|
return typename+'('+row.channel+')'+'<br/>'+(row.desc?'<font color="#bf7fef">'+row.desc+'</font>':'')+'';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'account',
|
||||||
|
title: '付款账号<br/>姓名',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return ''+value+'<br/>'+row.username+'';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'money',
|
||||||
|
title: '付款金额<br/>花费金额',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '¥<b>'+value+'</b><br/>¥<b>'+row.costmoney+'</b>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'paytime',
|
||||||
|
title: '提交时间<br/>付款时间',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return (row.addtime ? row.addtime : value)+'<br/>'+value;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: '状态',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(value == '1'){
|
||||||
|
return '<font color=green>转账成功</font>';
|
||||||
|
}else if(value == '2'){
|
||||||
|
return '<a href="javascript:showResult(\''+row.biz_no+'\')" title="点此查看失败原因"><font color=red>转账失败</font></a>';
|
||||||
|
}else{
|
||||||
|
return '<a href="javascript:queryStatus(\''+row.biz_no+'\')" title="点此查询转账状态"><font color=orange>正在处理</font></a>' + (row.jumpurl ? '<br/><a href="javascript:showQrcode(\''+row.jumpurl+'\')" class="btn btn-xs btn-success"><i class="fa fa-qrcode"></i> 确认收款</a>' : '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: '操作',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
let html = '';
|
||||||
|
if(row.status == '1'){
|
||||||
|
html += '<a href="javascript:setStatus(\''+row.biz_no+'\', 2)" class="btn btn-warning btn-xs">改为失败</a> <a href="javascript:delItem(\''+row.biz_no+'\')" class="btn btn-danger btn-xs">删除</a><br/><a href="javascript:getProof(\''+row.biz_no+'\')" class="btn btn-default btn-xs">获取凭证</a> <a href="transfer_add.php?app='+row.type+'©='+row.biz_no+'" class="btn btn-default btn-xs">复制</a>';
|
||||||
|
}else if(row.status == '2'){
|
||||||
|
html += '<a href="javascript:setStatus(\''+row.biz_no+'\', 1)" class="btn btn-success btn-xs">改为成功</a> <a href="javascript:delItem(\''+row.biz_no+'\')" class="btn btn-danger btn-xs">删除</a><br/><a href="transfer_add.php?app='+row.type+'©='+row.biz_no+'" class="btn btn-default btn-xs">复制</a>';
|
||||||
|
}else{
|
||||||
|
html += '<a href="javascript:queryStatus(\''+row.biz_no+'\')" class="btn btn-info btn-xs">查询状态</a> ';
|
||||||
|
if(row.jumpurl) html += '<a href="javascript:cancel(\''+row.biz_no+'\')" class="btn btn-warning btn-xs">撤销</a>';
|
||||||
|
else if(row.uid > 0) html += '<a href="javascript:refund(\''+row.biz_no+'\')" class="btn btn-warning btn-xs">退回</a>';
|
||||||
|
else html += '<a href="javascript:delItem(\''+row.biz_no+'\')" class="btn btn-danger btn-xs">删除</a>';
|
||||||
|
html += '<br/><a href="transfer_add.php?app='+row.type+'©='+row.biz_no+'" class="btn btn-default btn-xs">复制</a>';
|
||||||
|
}
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
})
|
||||||
|
function showResult(biz_no) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_transfer.php?act=transfer_result&biz_no='+biz_no,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:0, title:'失败原因', shadeClose:true});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function queryStatus(biz_no) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_transfer.php?act=transfer_query&biz_no='+biz_no,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
searchSubmit();
|
||||||
|
layer.alert(data.msg, {title:'查询结果'});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2, title:'查询失败'});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setStatus(biz_no, status){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'post',
|
||||||
|
url : 'ajax_transfer.php?act=setTransferStatus',
|
||||||
|
data : {biz_no:biz_no, status:status},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(ret) {
|
||||||
|
layer.close(ii);
|
||||||
|
if (ret.code != 0) {
|
||||||
|
alert(ret.msg);
|
||||||
|
}
|
||||||
|
searchSubmit();
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function delItem(biz_no) {
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此付款记录吗?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_transfer.php?act=delTransfer',
|
||||||
|
data : {biz_no:biz_no},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.closeAll();
|
||||||
|
searchSubmit();
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function refund(biz_no){
|
||||||
|
var confirmobj = layer.confirm('确定将余额退给商户并改为失败状态吗?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_transfer.php?act=refundTransfer',
|
||||||
|
data : {biz_no:biz_no},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function cancel(biz_no){
|
||||||
|
var confirmobj = layer.confirm('是否确定撤销转账订单?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_transfer.php?act=transfer_cancel',
|
||||||
|
data : {biz_no:biz_no},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function getProof(biz_no) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_transfer.php?act=transfer_proof',
|
||||||
|
data : {biz_no:biz_no},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
if(data.download_url){
|
||||||
|
layer.alert('获取转账凭证成功!<a href="'+data.download_url+'" target="_blank">点击下载凭证</a>', {icon:1, title:'获取凭证'});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:1, title:'获取凭证'});
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2, title:'获取失败'});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function operation(status){
|
||||||
|
var selected = $('#listTable').bootstrapTable('getSelections');
|
||||||
|
if(selected.length == 0){
|
||||||
|
layer.msg('未选择记录', {time:1500});return;
|
||||||
|
}
|
||||||
|
if(status == 3 && !confirm('确定要删除已选中的'+selected.length+'条记录吗?')) return;
|
||||||
|
var checkbox = new Array();
|
||||||
|
$.each(selected, function(key, item){
|
||||||
|
checkbox.push(item.biz_no)
|
||||||
|
})
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_transfer.php?act=operation',
|
||||||
|
data : {status:status, checkbox:checkbox},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
searchSubmit();
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('请求超时');
|
||||||
|
searchSubmit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function showQrcode(url){
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
title: '收款方使用微信扫描以下二维码',
|
||||||
|
skin: 'layui-layer-demo',
|
||||||
|
shadeClose: true,
|
||||||
|
content: '<div id="qrcode" class="list-group-item text-center"></div>',
|
||||||
|
success: function(){
|
||||||
|
$('#qrcode').qrcode({
|
||||||
|
text: url,
|
||||||
|
width: 230,
|
||||||
|
height: 230,
|
||||||
|
foreground: "#000000",
|
||||||
|
background: "#ffffff",
|
||||||
|
typeNumber: -1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,191 @@
|
|||||||
|
<?php
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='转账付款';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
|
||||||
|
<?php
|
||||||
|
$app = isset($_GET['app'])?$_GET['app']:'alipay';
|
||||||
|
if($app=='alipay'){
|
||||||
|
$default_channel = $conf['transfer_alipay'];
|
||||||
|
}elseif($app=='wxpay'){
|
||||||
|
$default_channel = $conf['transfer_wxpay'];
|
||||||
|
}elseif($app=='qqpay'){
|
||||||
|
$default_channel = $conf['transfer_qqpay'];
|
||||||
|
}elseif($app=='bank'){
|
||||||
|
$default_channel = $conf['transfer_bank'];
|
||||||
|
}else{
|
||||||
|
showmsg('参数错误',4);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isset($_POST['submit'])){
|
||||||
|
if(!checkRefererHost())exit();
|
||||||
|
$out_biz_no = trim($_POST['out_biz_no']);
|
||||||
|
if(!isset($_POST['paypwd']) || $_POST['paypwd']!==$conf['admin_paypwd'])showmsg('支付密码错误',3);
|
||||||
|
$payee_account = htmlspecialchars(trim($_POST['payee_account']));
|
||||||
|
$payee_real_name = htmlspecialchars(trim($_POST['payee_real_name']));
|
||||||
|
$money = trim($_POST['money']);
|
||||||
|
$desc = htmlspecialchars(trim($_POST['desc']));
|
||||||
|
if(empty($out_biz_no) || empty($payee_account) || empty($money))showmsg('必填项不能为空',3);
|
||||||
|
if(strlen($out_biz_no)!=19 || !is_numeric($out_biz_no))showmsg('交易号输入不规范',3);
|
||||||
|
if($desc && mb_strlen($desc)>32)showmsg('转账备注最多32个字',3);
|
||||||
|
if(!is_numeric($money) || !preg_match('/^[0-9.]+$/', $money) || $money<=0)showmsg('转账金额输入不规范',3);
|
||||||
|
if ($app=='qqpay' && (!is_numeric($payee_account) || strlen($payee_account)<6 || strlen($payee_account)>10))showmsg('QQ号码格式错误',3);
|
||||||
|
|
||||||
|
$channelid = isset($_POST['channel'])?$_POST['channel']:$default_channel;
|
||||||
|
$channel = \lib\Channel::get($channelid);
|
||||||
|
if(!$channel)showmsg('当前支付通道信息不存在',4);
|
||||||
|
|
||||||
|
$result = \lib\Transfer::submit($app, $channel, $out_biz_no, $payee_account, $payee_real_name, $money, $desc);
|
||||||
|
|
||||||
|
if($result['code']==0){
|
||||||
|
$paytime = $result['status'] == 1 ? 'NOW()' : null;
|
||||||
|
$data = ['biz_no'=>$out_biz_no, 'uid'=>0, 'type'=>$app, 'channel'=>$channelid, 'account'=>$payee_account, 'username'=>$payee_real_name, 'money'=>$money, 'costmoney'=>$money, 'addtime'=>'NOW()', 'paytime'=>$paytime, 'pay_order_no'=>$result['orderid'], 'status'=>$result['status'], 'desc'=>$desc];
|
||||||
|
if(isset($result['wxpackage'])) $data['ext'] = $result['wxpackage'];
|
||||||
|
$DB->insert('transfer', $data);
|
||||||
|
if($result['status'] == 1){
|
||||||
|
$result='转账成功!转账单据号:'.$result['orderid'].' 支付时间:'.$result['paydate'];
|
||||||
|
}elseif(isset($result['wxpackage'])){
|
||||||
|
$result='提交成功!请在付款记录页面扫描二维码确认收款,1天内未确认,将退还给商家。转账单据号:'.$result['orderid'].' 支付时间:'.$result['paydate'];
|
||||||
|
}else{
|
||||||
|
$result='提交成功!转账处理中,请稍后在付款记录页面查看结果。转账单据号:'.$result['orderid'].' 支付时间:'.$result['paydate'];
|
||||||
|
}
|
||||||
|
showmsg($result,1,'./transfer.php');
|
||||||
|
}else{
|
||||||
|
$result='转账失败:'.$result['msg'];
|
||||||
|
showmsg($result,4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$out_biz_no = date("YmdHis").rand(11111,99999);
|
||||||
|
|
||||||
|
$channel_select = $DB->getAll("SELECT id,name,plugin FROM pre_channel WHERE plugin IN (SELECT name FROM pre_plugin WHERE transtypes LIKE '%".$app."%')");
|
||||||
|
|
||||||
|
$copy = [];
|
||||||
|
if(isset($_GET['copy'])){
|
||||||
|
$copy = $DB->find('transfer', '*', ['biz_no'=>trim($_GET['copy'])]);
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">转账付款</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<ul class="nav nav-tabs">
|
||||||
|
<li class="<?php echo $app=='alipay'?'active':null;?>"><a href="?app=alipay">支付宝</a></li><li class="<?php echo $app=='wxpay'?'active':null;?>"><a href="?app=wxpay">微信</a></li><li class="<?php echo $app=='qqpay'?'active':null;?>"><a href="?app=qqpay">QQ钱包</a></li><li class="<?php echo $app=='bank'?'active':null;?>"><a href="?app=bank">银行卡</a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="tab-pane active" id="alipay">
|
||||||
|
<form action="?app=<?php echo $app?>" method="POST" role="form">
|
||||||
|
<input type="hidden" name="type" value="<?php echo $app?>"/>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">通道选择</div>
|
||||||
|
<select name="channel" class="form-control" default="<?php echo $default_channel?>">
|
||||||
|
<?php foreach($channel_select as $channel){echo '<option value="'.$channel['id'].'">'.$channel['name'].''.($channel['id']==$default_channel?'(默认)':'').'</option>';} ?>
|
||||||
|
</select>
|
||||||
|
</div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">交易号</div>
|
||||||
|
<input type="text" name="out_biz_no" value="<?php echo $out_biz_no?>" class="form-control" required/>
|
||||||
|
</div></div>
|
||||||
|
<?php if($app=='alipay'){?>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">支付宝账号</div>
|
||||||
|
<input type="text" name="payee_account" value="<?php echo $copy['account']?>" class="form-control" required placeholder="支付宝登录账号或支付宝UID或支付宝Openid"/>
|
||||||
|
</div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">支付宝姓名</div>
|
||||||
|
<input type="text" name="payee_real_name" value="<?php echo $copy['username']?>" class="form-control" placeholder="不填写则不校验真实姓名"/>
|
||||||
|
</div></div>
|
||||||
|
<?php }elseif($app=='wxpay'){?>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">Openid</div>
|
||||||
|
<input type="text" name="payee_account" value="<?php echo $copy['account']?>" class="form-control" required placeholder="只能填写微信Openid"/>
|
||||||
|
<div class="input-group-btn"><a href="./gettoken.php?app=wechat" class="btn btn-default">获取</a></div>
|
||||||
|
</div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">真实姓名</div>
|
||||||
|
<input type="text" name="payee_real_name" value="<?php echo $copy['username']?>" class="form-control" placeholder="不填写则不校验真实姓名"/>
|
||||||
|
</div></div>
|
||||||
|
<?php }elseif($app=='qqpay'){?>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">收款方QQ</div>
|
||||||
|
<input type="text" name="payee_account" value="<?php echo $copy['account']?>" class="form-control" required/>
|
||||||
|
</div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">真实姓名</div>
|
||||||
|
<input type="text" name="payee_real_name" value="<?php echo $copy['username']?>" class="form-control" placeholder="不填写则不校验真实姓名"/>
|
||||||
|
</div></div>
|
||||||
|
<?php }elseif($app=='bank'){?>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">银行卡号</div>
|
||||||
|
<input type="text" name="payee_account" value="<?php echo $copy['account']?>" class="form-control" required placeholder="收款方银行卡号"/>
|
||||||
|
</div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">姓名</div>
|
||||||
|
<input type="text" name="payee_real_name" value="<?php echo $copy['username']?>" class="form-control" placeholder="收款方银行账户名称"/>
|
||||||
|
</div></div>
|
||||||
|
<?php }?>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">转账金额</div>
|
||||||
|
<input type="text" name="money" value="" class="form-control" placeholder="RMB/元" required/>
|
||||||
|
</div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">转账备注</div>
|
||||||
|
<input type="text" name="desc" value="" class="form-control" placeholder="可留空,默认为:<?php echo $app=='alipay'?$conf['transfer_name']:$conf['transfer_desc']?>"/>
|
||||||
|
</div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group"><div class="input-group-addon">支付密码</div>
|
||||||
|
<input type="text" name="paypwd" value="" class="form-control" required/>
|
||||||
|
</div></div>
|
||||||
|
<p><input type="submit" name="submit" value="立即转账" class="btn btn-primary form-control"/></p>
|
||||||
|
<p><a href="javascript:balanceQuery()" class="btn btn-block btn-default">查询账户余额</a></p>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel-footer">
|
||||||
|
<span class="glyphicon glyphicon-info-sign"></span> 交易号可以防止重复转账,同一个交易号只能提交同一次转账。<br/>
|
||||||
|
<a href="./set.php?mod=account">修改支付密码</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script>
|
||||||
|
var items = $("select[default]");
|
||||||
|
for (i = 0; i < items.length; i++) {
|
||||||
|
$(items[i]).val($(items[i]).attr("default")||0);
|
||||||
|
}
|
||||||
|
function balanceQuery(){
|
||||||
|
var type = $("input[name=type]").val();
|
||||||
|
var channel = $("select[name=channel]").val();
|
||||||
|
if(channel == ''){
|
||||||
|
layer.alert('请先选择通道');return;
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_transfer.php?act=balance_query',
|
||||||
|
dataType : 'json',
|
||||||
|
data : {type: type, channel: channel},
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
if(data.msg){
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}else{
|
||||||
|
layer.alert('账户可用余额:'+data.amount+'元');
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(data.msg.indexOf('插件方法不存在')>-1) data.msg = '该通道不支持查询账户余额';
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,179 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 批量转账页面
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$type = isset($_GET['type'])?intval($_GET['type']):exit('no type');
|
||||||
|
if($type == 1){
|
||||||
|
$typename = '支付宝';
|
||||||
|
$default_channel = $conf['transfer_alipay'];
|
||||||
|
$app = 'alipay';
|
||||||
|
}elseif($type == 2){
|
||||||
|
$typename = '微信';
|
||||||
|
$default_channel = $conf['transfer_wxpay'];
|
||||||
|
$app = 'wxpay';
|
||||||
|
}elseif($type == 3){
|
||||||
|
$typename = 'QQ钱包';
|
||||||
|
$default_channel = $conf['transfer_qqpay'];
|
||||||
|
$app = 'qqpay';
|
||||||
|
}elseif($type == 4){
|
||||||
|
$typename = '银行卡';
|
||||||
|
$default_channel = $conf['transfer_bank'];
|
||||||
|
$app = 'bank';
|
||||||
|
}else{
|
||||||
|
sysmsg('参数错误');
|
||||||
|
}
|
||||||
|
$title=$typename.'批量转账';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<?php
|
||||||
|
if(!isset($_SESSION['paypwd']) || $_SESSION['paypwd']!==$conf['admin_paypwd'])showmsg('支付密码错误,请返回重新进入该页面');
|
||||||
|
|
||||||
|
if(isset($_GET['batch'])){
|
||||||
|
$batch=$_GET['batch'];
|
||||||
|
$row=$DB->getRow("SELECT * from pre_batch where batch='$batch'");
|
||||||
|
if(!$row)showmsg('批次号不存在');
|
||||||
|
$list=$DB->getAll("SELECT * FROM pre_settle WHERE batch='{$batch}' and type={$type}");
|
||||||
|
|
||||||
|
$channel_select = $DB->getAll("SELECT id,name,plugin FROM pre_channel WHERE plugin IN (SELECT name FROM pre_plugin WHERE transtypes LIKE '%".$app."%')");
|
||||||
|
|
||||||
|
?>
|
||||||
|
<script>
|
||||||
|
var paytype = '<?php echo $type?>';
|
||||||
|
function SelectAll(chkAll) {
|
||||||
|
var items = $('.uins');
|
||||||
|
for (i = 0; i < items.length; i++) {
|
||||||
|
if (items[i].id.indexOf("uins") != -1) {
|
||||||
|
if (items[i].type == "checkbox") {
|
||||||
|
items[i].checked = chkAll.checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Transfer(){
|
||||||
|
var url="ajax_settle.php?act=transfer";
|
||||||
|
$("input[name=uins]:checked:first").each(function(){
|
||||||
|
var checkself=$(this);
|
||||||
|
var id=checkself.val();
|
||||||
|
var statusself=$('#id'+id);
|
||||||
|
var channel = $("select[name='channel']").val();
|
||||||
|
statusself.html("<img src='../assets/img/load.gif' height=22>");
|
||||||
|
$.post(url, {type:paytype,channel:channel,id:id}, function(d) {
|
||||||
|
if(d.code==0){
|
||||||
|
transnum++;
|
||||||
|
var num = $('#donenum').text();
|
||||||
|
num=parseInt(num);
|
||||||
|
num++;
|
||||||
|
$('#donenum').text(num);
|
||||||
|
if(d.ret==1){
|
||||||
|
statusself.html('<font color="green">成功</font>');
|
||||||
|
}else if(d.ret==2){
|
||||||
|
statusself.html('<font color="green">已完成</font>');
|
||||||
|
}else{
|
||||||
|
statusself.html('<font color="red">失败</font>');
|
||||||
|
}
|
||||||
|
$('#res'+id).html('<font color="blue">'+d.result+'</font>');
|
||||||
|
checkself.attr('checked',false);
|
||||||
|
Transfer();
|
||||||
|
}else if(d.code==-1){
|
||||||
|
statusself.html('<font color="red">失败</font>');
|
||||||
|
alert(d.msg);
|
||||||
|
}else{
|
||||||
|
statusself.html('<font color="red">失败</font>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var transnum = 0;
|
||||||
|
$(document).ready(function(){
|
||||||
|
var allmoney = 0;
|
||||||
|
var items = $('.money');
|
||||||
|
for (i = 0; i < items.length; i++) {
|
||||||
|
allmoney+=parseFloat(items[i].innerHTML);
|
||||||
|
}
|
||||||
|
$('#allmoney').html('总金额:'+allmoney.toFixed(2));
|
||||||
|
$('#startsend').click(function(){
|
||||||
|
var self=$(this);
|
||||||
|
if (self.attr("data-lock") === "true") return;
|
||||||
|
else self.attr("data-lock", "true");
|
||||||
|
self.html('正在转账中');
|
||||||
|
Transfer();
|
||||||
|
if(transnum<1) self.html('没有待转账的记录');
|
||||||
|
else self.html('转账处理完成');
|
||||||
|
self.attr("data-lock", "false");
|
||||||
|
});
|
||||||
|
$('.recheck').click(function(){
|
||||||
|
var self=$(this),
|
||||||
|
id=self.attr('uin');
|
||||||
|
var channel = $("select[name='channel']").val();
|
||||||
|
var url="ajax_settle.php?act=transfer";
|
||||||
|
self.html("<img src='../assets/img/load.gif' height=22>");
|
||||||
|
$.post(url, {type:paytype,channel:channel,id:id}, function(d) {
|
||||||
|
if(d.code==0){
|
||||||
|
if(d.ret==1){
|
||||||
|
self.html('<font color="green">成功</font>');
|
||||||
|
}else if(d.ret==2){
|
||||||
|
self.html('<font color="green">已完成</font>');
|
||||||
|
}else{
|
||||||
|
self.html('<font color="red">失败</font>');
|
||||||
|
}
|
||||||
|
$('#res'+id).html('<font color="blue">'+d.result+'</font>');
|
||||||
|
$('.uins[value='+id+']').attr('checked',false);
|
||||||
|
self.removeClass('nocheck');
|
||||||
|
}else if(d.code==-1){
|
||||||
|
self.html('<font color="red">失败</font>');
|
||||||
|
alert(d.msg);
|
||||||
|
}else{
|
||||||
|
self.html('<font color="red">失败</font>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<div class="col-md-12 center-block" style="float: none;">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading" style="text-align:center">
|
||||||
|
<div class="panel-title"><p><h3 class="panel-title"><?php echo $typename?>批量转账</h3></p>
|
||||||
|
<div class="input-group"><div class="input-group-addon">通道选择</div>
|
||||||
|
<select name="channel" class="form-control">
|
||||||
|
<?php foreach($channel_select as $channel){echo '<option value="'.$channel['id'].'" '.($channel['id']==$default_channel?'selected':'').'>'.$channel['name'].''.($channel['id']==$default_channel?'(默认)':'').'</option>';} ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="input-group" style="padding:8px 0;">
|
||||||
|
<div class="input-group-addon btn">全选<input type="checkbox" onclick="SelectAll(this)" /></div>
|
||||||
|
<div class="input-group-addon btn" id="startsend">点此开始转账</div>
|
||||||
|
<div class="input-group-addon btn"><span id="allmoney">总金额</span></div>
|
||||||
|
</div>
|
||||||
|
<div id="result"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<table class="table table-bordered table-condensed">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td align="center"><span style="color:silver;"><b>ID</b></span></td>
|
||||||
|
<td align="center"><span style="color:silver;"><b>商户ID</b></span></td>
|
||||||
|
<td align="center"><span style="color:silver;"><b>结算账号</b></span></td>
|
||||||
|
<td align="center"><span style="color:silver;"><b>结算姓名</b></span></td>
|
||||||
|
<td align="center"><span style="color:silver;"><b>金额</b></span></td>
|
||||||
|
<td align="center"><span style="color:silver;"><b>操作</b></span></td>
|
||||||
|
</tr>
|
||||||
|
<?php
|
||||||
|
echo '<tr><td colspan="6" align="center">总共<span id="hyall">'.count($list).'<span>个记录,已经处理<span id="donenum">0</span>个记录!</td></tr>';
|
||||||
|
foreach($list as $row) {
|
||||||
|
echo '<tr><td uin="'.$row['id'].'"><input name="uins" type="checkbox" id="uins" class="uins" value="'.$row['id'].'" '.($row['transfer_status']!=1?'checked':null).'>'.$row['id'].'</td><td>'.$row['uid'].'</td><td>'.$row['account'].'</td><td>'.$row['username'].'</td><td class="money">'.$row['realmoney'].'</td><td id="id'.$row['id'].'" uin="'.$row['id'].'" class="nocheck recheck" align="center">'.($row['transfer_status']!=1?'<span class="btn btn-xs btn-block btn-primary">立即转账</span>':'<font color="green">已完成</font>').'</td></tr><tr><td><span style="color:silver;">结果</span></td><td colspan="5" id="res'.$row['id'].'"><font color="blue">'.($row['transfer_status']==1?'转账订单号:'.$row['transfer_result'].' 支付时间:'.$row['transfer_date']:$row['transfer_result']).'</font></td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php }?>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,441 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 商户列表
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='商户列表';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
|
||||||
|
$select = '';
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_group");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$select .= '<option value="'.$row['gid'].'">'.$row['name'].'</option>';
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
#orderItem .orderTitle{word-break:keep-all;}
|
||||||
|
#orderItem .orderContent{word-break:break-all;}
|
||||||
|
</style>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-md-12 center-block" style="float: none;">
|
||||||
|
<div class="modal" id="modal-rmb">
|
||||||
|
<div class="modal-dialog" role="document">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
|
<h4 class="modal-title">余额充值与扣除</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form id="form-rmb" onsubmit="return false;">
|
||||||
|
<input type="hidden" name="uid" value="">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-addon p-0">
|
||||||
|
<select name="do"
|
||||||
|
style="-webkit-border-radius: 0;height:20px;border: 0;outline: none !important;border-radius: 5px 0 0 5px;padding: 0 5px 0 5px;">
|
||||||
|
<option value="0">充值</option>
|
||||||
|
<option value="1">扣除</option>
|
||||||
|
</select>
|
||||||
|
</span>
|
||||||
|
<input type="number" class="form-control" name="rmb" placeholder="输入金额">
|
||||||
|
<span class="input-group-addon">元</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-outline-info" data-dismiss="modal">取消</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="recharge">确定</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
|
||||||
|
<input type="hidden" class="form-control" name="gid">
|
||||||
|
<input type="hidden" class="form-control" name="upid">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>搜索</label>
|
||||||
|
<select name="column" class="form-control"><option value="uid">商户号</option><option value="key">密钥</option><option value="account">结算账号</option><option value="username">结算姓名</option><option value="url">域名</option><option value="qq">QQ</option><option value="phone">手机号码</option><option value="email">邮箱</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" name="value" placeholder="搜索内容">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="dstatus" class="form-control"><option value="0">全部用户</option><option value="pay_2">待审核用户</option><option value="status_1">用户状态正常</option><option value="status_0">用户状态封禁</option><option value="pay_1">支付状态正常</option><option value="pay_0">支付状态关闭</option><option value="settle_1">结算状态正常</option><option value="settle_0">结算状态关闭</option></select>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">搜索</button> <a href="./uset.php?my=add" class="btn btn-success">添加商户</a>
|
||||||
|
<a href="javascript:searchClear()" class="btn btn-default" title="刷新用户列表"><i class="fa fa-refresh"></i></a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<table id="listTable">
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>clipboard.js/1.7.1/clipboard.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
|
||||||
|
<script src="../assets/js/custom.js"></script>
|
||||||
|
<script>
|
||||||
|
var pay_domain = '<?php echo ($conf['pay_domain_forbid']==1 || $conf['pay_domain_open']==1)?'true':'false';?>';
|
||||||
|
$(document).ready(function(){
|
||||||
|
updateToolbar();
|
||||||
|
const defaultPageSize = 30;
|
||||||
|
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
|
||||||
|
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
|
||||||
|
|
||||||
|
$("#listTable").bootstrapTable({
|
||||||
|
url: 'ajax_user.php?act=userList',
|
||||||
|
pageNumber: pageNumber,
|
||||||
|
pageSize: pageSize,
|
||||||
|
classes: 'table table-striped table-hover table-bordered',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
field: 'uid',
|
||||||
|
title: '商户号/用户组',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
let groupname = row.groupname;
|
||||||
|
if(groupname!=null && groupname.length > 14) groupname = groupname.substring(0,14);
|
||||||
|
return '<b>'+value+'</b><br/><span onclick="editGroup('+value+','+row.gid+',\''+row.endtime+'\')" style="color:blue" title="到期时间:'+(row.endtime==null?'永久':row.endtime)+'">'+groupname+'</span>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'money',
|
||||||
|
title: '余额',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<b><a href="javascript:showRecharge('+row.uid+')">'+value+'</a></b>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'settle_id',
|
||||||
|
title: '结算账号/姓名',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return row.account ? '<span onclick="inputInfo('+row.uid+')" title="点击修改结算账号">'+(value==2?'<font color="green">WX:</font>':'')+(value==3?'<font color="green">QQ:</font>':'')+row.account+'<br/>'+row.username+'</span>' : '<span onclick="inputInfo('+row.uid+')" title="点击修改结算账号">未设置</span>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'qq',
|
||||||
|
title: '联系方式',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return (value ? 'QQ:'+(isMobile() ? '<a href="mqqwpa://im/chat?chat_type=wpa&version=1&src_type=web&web_src=oicqzone.com&uin='+value+'">'+value+'</a>' : '<a href="tencent://message/?uin='+value+'&Site=qq&Menu=yes">'+value+'</a>') : '')+'<br/>'+(row.phone?row.phone:row.email);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'url',
|
||||||
|
title: '域名/添加时间',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return (value?value:'')+(pay_domain=='true'?' [<a href="./domain.php?uid='+row.uid+'" target="_blank" >域名</a>]':'')+'<br/>'+row.addtime;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: '状态',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
let html = '';
|
||||||
|
if(value == '1'){
|
||||||
|
html += '<a href="javascript:setStatus('+row.uid+',\'user\',0)"><font color=green><i class="fa fa-check-circle"></i>正常</font></a>';
|
||||||
|
}else{
|
||||||
|
html += '<a href="javascript:setStatus('+row.uid+',\'user\',1)"><font color=red><i class="fa fa-times-circle"></i>封禁</font></a>';
|
||||||
|
}
|
||||||
|
html += ' ';
|
||||||
|
if(row.cert == '1'){
|
||||||
|
html += '<a href="javascript:showCert('+row.uid+')" title="查看实名认证信息"><font color=green><i class="fa fa-check-circle-o"></i>已实名</font></a>';
|
||||||
|
}else{
|
||||||
|
html += '<a href="javascript:showCert('+row.uid+')" title="查看实名认证信息"><font color=grey><i class="fa fa-times-circle"></i>未实名</font></a>';
|
||||||
|
}
|
||||||
|
html += '<br/>';
|
||||||
|
if(row.pay == '2'){
|
||||||
|
html += '<a href="javascript:setStatus('+row.uid+',\'pay\',1)"><font color=orange><i class="fa fa-exclamation-circle"></i>未审核</font></a>';
|
||||||
|
}else if(row.pay == '1'){
|
||||||
|
html += '<a href="javascript:setStatus('+row.uid+',\'pay\',0)"><font color=green><i class="fa fa-check-circle"></i>支付</font></a>';
|
||||||
|
}else{
|
||||||
|
html += '<a href="javascript:setStatus('+row.uid+',\'pay\',1)"><font color=red><i class="fa fa-times-circle"></i>支付</font></a>';
|
||||||
|
}
|
||||||
|
html += ' ';
|
||||||
|
if(row.settle == '1'){
|
||||||
|
html += '<a href="javascript:setStatus('+row.uid+',\'settle\',0)"><font color=green><i class="fa fa-check-circle"></i>结算</font></a>';
|
||||||
|
}else{
|
||||||
|
html += '<a href="javascript:setStatus('+row.uid+',\'settle\',1)"><font color=red><i class="fa fa-times-circle"></i>结算</font></a>';
|
||||||
|
}
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: '',
|
||||||
|
title: '操作',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return '<a href="./uset.php?my=edit&uid='+row.uid+'" class="btn btn-xs btn-info">编辑</a> <a href="./sso.php?uid='+row.uid+'" target="_blank" class="btn btn-xs btn-success">登录</a> <a href="javascript:delUser('+row.uid+')" class="btn btn-xs btn-danger">删除</a><br/><a href="./order.php?uid='+row.uid+'" target="_blank" class="btn btn-xs btn-default">订单</a> <a href="./slist.php?uid='+row.uid+'" target="_blank" class="btn btn-xs btn-default">结算</a> <a href="./record.php?uid='+row.uid+'" target="_blank" class="btn btn-xs btn-default">明细</a>';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function showKey(uid,key){
|
||||||
|
var clipboard;
|
||||||
|
var confirmobj = layer.confirm(key+'<input type="hidden" id="copyContent" value="'+key+'"/>', {
|
||||||
|
title:'查看密钥',shadeClose:true,btn: ['复制','重置','关闭'], success: function(){
|
||||||
|
clipboard = new Clipboard('.layui-layer-btn0',{text: function() {return key;}});
|
||||||
|
clipboard.on('success', function (e) {
|
||||||
|
$(".layui-layer-btn0").text('复制成功')
|
||||||
|
});
|
||||||
|
clipboard.on('error', function (e) {
|
||||||
|
$(".layui-layer-btn0").text('复制失败')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
,end: function(){
|
||||||
|
clipboard.destroy();
|
||||||
|
}
|
||||||
|
}, function(){
|
||||||
|
}, function(){
|
||||||
|
if(!confirm('确定要重置商户'+uid+'的密钥吗?')){
|
||||||
|
showKey(uid,key);return;
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_user.php?act=resetUser&uid='+uid,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
alert('重置密钥成功!');
|
||||||
|
showKey(uid,data.key);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setStatus(uid,type,status) {
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=setUser',
|
||||||
|
data : {uid:uid, type:type, status:status},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
searchSubmit();
|
||||||
|
}else{
|
||||||
|
layer.msg(data.msg, {icon:2, time:1500});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function editGroup(uid, gid, endtime){
|
||||||
|
if(endtime == 'null') endtime = '';
|
||||||
|
var html = '<div class="modal-body"><form class="form" id="form-info">';
|
||||||
|
html += '<div class="form-group"><div class="input-group"><div class="input-group-addon">用户组</div><select class="form-control" id="gid"><?php echo $select?></select></div></div>';
|
||||||
|
html += '<div class="form-group"><div class="input-group"><div class="input-group-addon">有效期</div><select class="form-control" id="endtime_set"><option value="0">永久</option><option value="1">设置日期</option></select><input type="date" class="form-control" name="endtime" value="'+endtime+'" id="endtime_show"></div></div>';
|
||||||
|
html += '<div class="form-group"><button type="button" id="save" onclick="saveGroup('+uid+')" class="btn btn-primary btn-block">保存</button></div></form></div>';
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
shadeClose: true,
|
||||||
|
title: '修改用户组',
|
||||||
|
content: html,
|
||||||
|
success: function(){
|
||||||
|
$("#gid").val(gid);
|
||||||
|
$("#endtime_set").val(endtime==''?0:1);
|
||||||
|
$("#endtime_set").change(function(){
|
||||||
|
if($(this).val() == 1){
|
||||||
|
$("#endtime_show").show();
|
||||||
|
}else{
|
||||||
|
$("#endtime_show").hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$("#gid").change(function(){
|
||||||
|
if($(this).val() == 0){
|
||||||
|
$("#endtime_set").val(0);
|
||||||
|
$("#endtime_set").change();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$("#endtime_set").change();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function saveGroup(uid){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
var gid = $("#gid").val();
|
||||||
|
var endtime = $("#endtime_set").val() == '1' ? $("#endtime_show").val() : '';
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=setUserGroup',
|
||||||
|
data : {uid:uid, gid:gid, endtime:endtime},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg,{
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
},function(){layer.closeAll();searchSubmit();});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function showRecharge(uid) {
|
||||||
|
$("input[name='uid']").val(uid);
|
||||||
|
$('#modal-rmb').modal('show');
|
||||||
|
}
|
||||||
|
function inputInfo(uid) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_user.php?act=user_settle_info&uid='+uid,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
title: '修改数据',
|
||||||
|
skin: 'layui-layer-rim',
|
||||||
|
content: data.data,
|
||||||
|
success: function(){
|
||||||
|
$("#pay_type").val(data.pay_type);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function saveInfo(uid) {
|
||||||
|
var pay_type=$("#pay_type").val();
|
||||||
|
var pay_account=$("#pay_account").val();
|
||||||
|
var pay_name=$("#pay_name").val();
|
||||||
|
if(pay_account=='' || pay_name==''){layer.alert('请确保每项不能为空!');return false;}
|
||||||
|
$('#save').val('Loading');
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : "POST",
|
||||||
|
url : "ajax_user.php?act=user_settle_save",
|
||||||
|
data : {uid:uid,pay_type:pay_type,pay_account:pay_account,pay_name:pay_name},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.closeAll();
|
||||||
|
layer.msg('保存成功!');
|
||||||
|
searchSubmit();
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
$('#save').val('保存');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function showCert(uid) {
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_user.php?act=user_cert&uid='+uid,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
var item = '<table class="table table-condensed table-hover">';
|
||||||
|
if(data.data.certtype==1){
|
||||||
|
item += '<tr><td class="info">商户号</td><td colspan="5">'+uid+'</td></tr><tr><td class="info">认证类型</td><td colspan="5">企业认证</td></tr><tr><td class="info">认证方式</td><td colspan="5">'+data.data.certmethodname+'</td><tr><tr><td class="info">公司名称</td><td colspan="5">'+data.data.certcorpname+'</td><tr><td class="info">营业执照号码</td><td colspan="5">'+data.data.certcorpno+'</td><tr><td class="info">法人姓名</td><td colspan="5">'+data.data.certname+'</td></tr><tr><td class="info">法人身份证号</td><td colspan="5">'+data.data.certno+'</td></tr><tr><td class="info">认证时间</td><td colspan="5">'+data.data.certtime+'</td></tr>';
|
||||||
|
}else{
|
||||||
|
item += '<tr><td class="info">商户号</td><td colspan="5">'+uid+'</td></tr><tr><td class="info">认证类型</td><td colspan="5">个人认证</td></tr><tr><td class="info">认证方式</td><td colspan="5">'+data.data.certmethodname+'</td><tr><tr><td class="info">真实姓名</td><td colspan="5">'+data.data.certname+'</td></tr><tr><td class="info">身份证号</td><td colspan="5">'+data.data.certno+'</td></tr><tr><td class="info">认证时间</td><td colspan="5">'+data.data.certtime+'</td></tr>';
|
||||||
|
}
|
||||||
|
item += '</table>';
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
shadeClose: true,
|
||||||
|
title: '查看实名认证信息',
|
||||||
|
skin: 'layui-layer-rim',
|
||||||
|
content: item
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function delUser(uid) {
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此商户吗?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_user.php?act=delUser&uid='+uid,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.closeAll();
|
||||||
|
searchSubmit();
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$(document).ready(function(){
|
||||||
|
$("#recharge").click(function(){
|
||||||
|
var uid=$("input[name='uid']").val();
|
||||||
|
var actdo=$("select[name='do']").val();
|
||||||
|
var rmb=$("input[name='rmb']").val();
|
||||||
|
if(rmb==''){layer.alert('请输入金额');return false;}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : "POST",
|
||||||
|
url : "ajax_user.php?act=recharge",
|
||||||
|
data : {uid:uid,actdo:actdo,rmb:rmb},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.msg('修改余额成功', {time:800});
|
||||||
|
$('#modal-rmb').modal('hide');
|
||||||
|
searchSubmit();
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,876 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 商户信息
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='商户信息';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
?>
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<?php
|
||||||
|
$usergroup = [];
|
||||||
|
$select = '';
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_group");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$usergroup[$row['gid']] = $row['name'];
|
||||||
|
$select.='<option value="'.$row['gid'].'">'.$row['name'].'</option>';
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
$settle_select = '';
|
||||||
|
if($conf['settle_alipay'])$settle_select.='<option value="1">支付宝</option>';
|
||||||
|
if($conf['settle_wxpay'])$settle_select.='<option value="2">微信</option>';
|
||||||
|
if($conf['settle_qqpay'])$settle_select.='<option value="3">QQ钱包</option>';
|
||||||
|
if($conf['settle_bank'])$settle_select.='<option value="4">银行卡</option>';
|
||||||
|
|
||||||
|
$my=isset($_GET['my'])?$_GET['my']:null;
|
||||||
|
|
||||||
|
if($my=='add')
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
<div class="col-sm-12 col-md-10 col-lg-8 center-block" style="float: none;">
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">添加商户</h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<form method="POST" onsubmit="return addUser(this)">
|
||||||
|
<h4><font color="blue">基本信息</font></h4>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>手机号(登录账号):</label><br>
|
||||||
|
<input type="text" class="form-control" name="phone" value="" placeholder="和邮箱不能同时为空">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>邮箱(登录账号):</label><br>
|
||||||
|
<input type="text" class="form-control" name="email" value="" placeholder="和手机号不能同时为空">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>登录密码:</label><br>
|
||||||
|
<input type="text" class="form-control" name="pwd" value="" placeholder="留空则只能使用密钥登录">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>用户组:</label><br>
|
||||||
|
<select class="form-control" name="gid"><?php echo $select?></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>QQ:</label><br>
|
||||||
|
<input type="text" class="form-control" name="qq" value="" placeholder="可留空">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>网站域名:</label><br>
|
||||||
|
<input type="text" class="form-control" name="url" value="" placeholder="可留空">
|
||||||
|
</div>
|
||||||
|
<h4><font color="blue">结算信息</font></h4>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>结算方式:</label><br><select class="form-control" name="settle_id"><?php echo $settle_select?></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>结算账号:</label><br>
|
||||||
|
<input type="text" class="form-control" name="account" value="" placeholder="不使用平台代收可留空">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>结算账号姓名:</label><br>
|
||||||
|
<input type="text" class="form-control" name="username" value="" placeholder="不使用平台代收可留空">
|
||||||
|
</div>
|
||||||
|
<h4><font color="blue">功能开关</font></h4>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>手续费扣除模式:</label><br><select class="form-control" name="mode"><option value="0">余额扣费</option><option value="1">订单加费</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4 col-sm-12">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>商户状态:</label><br><select class="form-control" name="status"><option value="1">1_正常</option><option value="0">0_封禁</option><option value="2">2_未审核</option></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 col-sm-12">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>支付权限:</label><br><select class="form-control" name="pay"><option value="1">1_开启</option><option value="0">0_关闭</option></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 col-sm-12">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>结算权限:</label><br><select class="form-control" name="settle"><option value="1">1_开启</option><option value="0">0_关闭</option></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input type="submit" class="btn btn-primary btn-block" value="确定添加"></form>
|
||||||
|
<br/><a href="./ulist.php">>>返回商户列表</a>
|
||||||
|
</div></div>
|
||||||
|
<?php }
|
||||||
|
elseif($my=='edit')
|
||||||
|
{
|
||||||
|
$uid=intval($_GET['uid']);
|
||||||
|
$row=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
|
||||||
|
if(!$row)showmsg('该商户不存在',4);
|
||||||
|
$group=\lib\Channel::getGroup($row['gid']);
|
||||||
|
?>
|
||||||
|
<div class="col-md-12 col-lg-10 center-block" style="float: none;">
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">修改商户信息 UID:<?php echo $uid?></h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<ul class="nav nav-tabs">
|
||||||
|
<li align="center" class="active"><a href="#">基本信息</a></li>
|
||||||
|
<li align="center"><a href="./uset.php?my=api&uid=<?php echo $uid?>">密钥信息</a></li>
|
||||||
|
<?php if($group['settings']){?><li align="center"><a href="./uset.php?my=edit2&uid=<?php echo $uid?>">自定义接口信息</a></li><?php }?>
|
||||||
|
<?php if($group['subchannel_type']){?><li align="center"><a href="./uset.php?my=subchannel&uid=<?php echo $uid?>">自定义子通道</a></li><?php }?>
|
||||||
|
</ul>
|
||||||
|
<form onsubmit="return editUser(this, <?php echo $uid?>)" method="POST">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12 col-md-6">
|
||||||
|
<h4><font color="blue">基本信息</font></h4>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>手机号(登录账号):</label><br>
|
||||||
|
<input type="text" class="form-control" name="phone" value="<?php echo $row['phone']?>" placeholder="和邮箱不能同时为空">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>邮箱(登录账号):</label><br>
|
||||||
|
<input type="text" class="form-control" name="email" value="<?php echo $row['email']?>" placeholder="和手机号不能同时为空">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>商户余额:</label><br>
|
||||||
|
<input type="text" class="form-control" name="money" value="<?php echo $row['money']?>" required>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>用户组:</label><br>
|
||||||
|
<select class="form-control" name="gid" default="<?php echo $row['gid']?>"><?php echo $select?></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>QQ:</label><br>
|
||||||
|
<input type="text" class="form-control" name="qq" value="<?php echo $row['qq']?>" placeholder="可留空">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>网站域名:</label><br>
|
||||||
|
<input type="text" class="form-control" name="url" value="<?php echo $row['url']?>" placeholder="可留空">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>商品名称自定义:</label><br>
|
||||||
|
<input type="text" class="form-control" name="ordername" value="<?php echo $row['ordername']?>" placeholder="默认以系统设置里面的为准">
|
||||||
|
<font color="green">支持变量值:[name]原商品名称,[order]支付订单号,[outorder]商户订单号,[time]时间戳,[qq]当前商户的联系QQ</font>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>商户保证金余额:</label><br>
|
||||||
|
<input type="text" class="form-control" name="deposit" value="<?php echo $row['deposit']?>" placeholder="开启商户保证金功能后使用">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>预留余额:</label><br>
|
||||||
|
<input type="text" class="form-control" name="remain_money" value="<?php echo $row['remain_money']?>" placeholder="可设置预留部分商户余额不参与每日自动结算">
|
||||||
|
</div>
|
||||||
|
<h4><font color="blue">结算信息</font></h4>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>结算方式:</label><br><select class="form-control" name="settle_id" default="<?php echo $row['settle_id']?>"><?php echo $settle_select?></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>结算账号:</label><br>
|
||||||
|
<input type="text" class="form-control" name="account" value="<?php echo $row['account']?>" placeholder="不使用平台代收可留空">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>结算账号姓名:</label><br>
|
||||||
|
<input type="text" class="form-control" name="username" value="<?php echo $row['username']?>" placeholder="不使用平台代收可留空">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-12 col-md-6">
|
||||||
|
<h4><font color="blue">实名信息</font></h4>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>是否实名认证:</label><br><select class="form-control" name="cert" default="<?php echo $row['cert']?>"><option value="0">0_未实名</option><option value="1">1_已实名</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>认证类型:</label><br><select class="form-control" name="certtype" default="<?php echo $row['certtype']?>"><option value="0">个人实名认证</option><option value="1">企业实名认证</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>认证方式:</label><br><select class="form-control" name="certmethod" default="<?php echo $row['certmethod']?>"><option value="0">支付宝快捷认证</option><option value="1">微信快捷认证</option><option value="2">手机号三要素认证</option><option value="3">人工审核认证</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>真实姓名:</label><br>
|
||||||
|
<input type="text" class="form-control" name="certname" value="<?php echo $row['certname']?>">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>身份证号:</label><br>
|
||||||
|
<input type="text" class="form-control" name="certno" value="<?php echo $row['certno']?>" maxlength="18">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>公司名称:</label><br>
|
||||||
|
<input type="text" class="form-control" name="certcorpname" value="<?php echo $row['certcorpname']?>">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>营业执照号码:</label><br>
|
||||||
|
<input type="text" class="form-control" name="certcorpno" value="<?php echo $row['certcorpno']?>" maxlength="30">
|
||||||
|
</div>
|
||||||
|
<h4><font color="blue">功能开关</font></h4>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>手续费扣除模式:</label><br><select class="form-control" name="mode" default="<?php echo $row['mode']?>"><option value="0">余额扣费</option><option value="1">订单加费</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>聚合收款码:</label><br><select class="form-control" name="open_code" default="<?php echo $row['open_code']?>"><option value="0">缺省(与系统设置一致)</option><option value="1">开启</option><option value="2">关闭</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4 col-sm-12">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>商户状态:</label><br><select class="form-control" name="status" default="<?php echo $row['status']?>"><option value="1">1_正常</option><option value="0">0_封禁</option><option value="2">2_未审核</option></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 col-sm-12">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>支付权限:</label><br><select class="form-control" name="pay" default="<?php echo $row['pay']?>"><option value="1">1_开启</option><option value="0">0_关闭</option></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 col-sm-12">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>结算权限:</label><br><select class="form-control" name="settle" default="<?php echo $row['settle']?>"><option value="1">1_开启</option><option value="0">0_关闭</option></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>邀请方商户ID:</label><br>
|
||||||
|
<input type="text" class="form-control" name="upid" value="<?php echo $row['upid'] == 0 ? '' : $row['upid']?>" placeholder="用于邀请返现">
|
||||||
|
</div>
|
||||||
|
<h4><font color="blue">密码修改</font></h4>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>重置登录密码:</label><br>
|
||||||
|
<input type="text" class="form-control" name="pwd" value="" placeholder="不重置密码请留空">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input type="submit" class="btn btn-primary btn-block" value="确定修改"></form>
|
||||||
|
<br/><a href="./ulist.php">>>返回商户列表</a>
|
||||||
|
</div></div>
|
||||||
|
<script>
|
||||||
|
var items = $("select[default]");
|
||||||
|
for (i = 0; i < items.length; i++) {
|
||||||
|
$(items[i]).val($(items[i]).attr("default")||0);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
elseif($my=='api')
|
||||||
|
{
|
||||||
|
$uid=intval($_GET['uid']);
|
||||||
|
$row=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
|
||||||
|
if(!$row)showmsg('该商户不存在',4);
|
||||||
|
$group=\lib\Channel::getGroup($row['gid']);
|
||||||
|
if(!$conf['apiurl'])$conf['apiurl'] = $siteurl;
|
||||||
|
?>
|
||||||
|
<div class="modal inmodal fade" id="myModal" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">关闭</span>
|
||||||
|
</button>
|
||||||
|
<h4 class="modal-title">商户私钥查看窗口</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="form-group"><font color="red"><i class="fa fa-info-circle"></i> 请及时复制保存商户私钥!当前窗口关闭后,无法再次查询商户私钥,本站也不会保存。如遗失商户私钥,可重新生成进行替换。</font></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>商户私钥</label>
|
||||||
|
<textarea class="form-control" name="merchant_private_key" rows="5" readonly></textarea>
|
||||||
|
<center><a href="javascript:;" class="btn btn-default" data-clipboard-text="" title="点击复制" id="merchant_private_key_copy"><i class="fa fa-copy"></i> 复制</a></center>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-12 col-lg-10 center-block" style="float: none;">
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">商户密钥信息 UID:<?php echo $uid?></h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<ul class="nav nav-tabs">
|
||||||
|
<li align="center"><a href="./uset.php?my=edit&uid=<?php echo $uid?>">基本信息</a></li>
|
||||||
|
<li align="center" class="active"><a href="#">密钥信息</a></li>
|
||||||
|
<?php if($group['settings']){?><li align="center"><a href="./uset.php?my=edit2&uid=<?php echo $uid?>">自定义接口信息</a></li><?php }?>
|
||||||
|
<?php if($group['subchannel_type']){?><li align="center"><a href="./uset.php?my=subchannel&uid=<?php echo $uid?>">自定义子通道</a></li><?php }?>
|
||||||
|
</ul>
|
||||||
|
<form class="form-horizontal">
|
||||||
|
<input type="hidden" name="uid" value="<?php echo $uid?>"/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">接口地址</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="input-group"><input class="form-control" type="text" value="<?php echo $conf['apiurl']?>" readonly><div class="input-group-addon"><a href="javascript:;" class="copy-btn" data-clipboard-text="<?php echo $conf['apiurl']?>" title="点击复制"><i class="fa fa-copy"></i></a></div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">商户ID</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="input-group"><input class="form-control" type="text" value="<?php echo $uid?>" readonly><div class="input-group-addon"><a href="javascript:;" class="copy-btn" data-clipboard-text="<?php echo $uid?>" title="点击复制"><i class="fa fa-copy"></i></a></div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group"><div class="col-sm-offset-2 col-sm-4"><h4>V1接口(MD5签名方式):</h4></div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">商户MD5密钥</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="input-group"><input class="form-control" type="text" value="<?php echo $row['key']?>" readonly><div class="input-group-addon"><a href="javascript:;" class="copy-btn" data-clipboard-text="<?php echo $row['key']?>" title="点击复制"><i class="fa fa-copy"></i></a></div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-offset-2 col-sm-4"><a href="/doc_old.html" class="btn btn-sm btn-info" target="_blank">查看V1开发文档</a> <a href="javascript:resetKey()" class="btn btn-sm btn-danger">重置商户MD5密钥</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group"><div class="col-sm-offset-2 col-sm-4"><h4>V2接口(RSA签名方式):</h4></div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">平台公钥</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="input-group"><textarea class="form-control" name="platform_public_key" rows="3" readonly><?php echo $conf['public_key']?></textarea><div class="input-group-addon"><a href="javascript:;" class="copy-btn" data-clipboard-text="<?php echo $conf['public_key']?>" title="点击复制"><i class="fa fa-copy"></i></a></div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">商户公钥</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="input-group"><textarea class="form-control" name="merchant_public_key" rows="3" readonly><?php echo $row['publickey']?></textarea><div class="input-group-addon"><a href="javascript:;" class="copy-btn" title="点击复制" onclick="alert('请仔细分清各种密钥区别,只需要复制平台公钥和商户私钥即可!如商户私钥遗失请重新生成。')"><i class="fa fa-copy"></i></a></div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-offset-2 col-sm-4"><a href="/doc.html" class="btn btn-sm btn-info" target="_blank">查看V2开发文档</a> <?php if($row['publickey']){?><a href="javascript:createRsaPair()" class="btn btn-sm btn-danger">重置商户RSA密钥对</a><?php }else{?><a href="javascript:createRsaPair()" class="btn btn-sm btn-success">生成商户RSA密钥对</a><?php }?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="line line-dashed b-b line-lg pull-in"></div>
|
||||||
|
<div class="form-group"><div class="col-sm-offset-2 col-sm-4"><h4>签名方式开关设置:</h4></div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">签名方式开关</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<select class="form-control" name="keytype" default="<?php echo $row['keytype']?>"><option value="0">开启MD5+RSA签名(兼容模式)</option><option value="1">仅开启RSA签名(安全模式)</option></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-offset-2 col-sm-4"><input type="button" id="editKeyType" value="确定修改" class="btn btn-primary form-control"/><br/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<br/><a href="./ulist.php">>>返回商户列表</a>
|
||||||
|
</div></div>
|
||||||
|
<script>
|
||||||
|
var items = $("select[default]");
|
||||||
|
for (i = 0; i < items.length; i++) {
|
||||||
|
$(items[i]).val($(items[i]).attr("default")||0);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
elseif($my=='edit2')
|
||||||
|
{
|
||||||
|
$uid=intval($_GET['uid']);
|
||||||
|
$row=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
|
||||||
|
if(!$row)showmsg('该商户不存在',4);
|
||||||
|
$group=\lib\Channel::getGroup($row['gid']);
|
||||||
|
$channelinfo = json_decode($row['channelinfo'], true);
|
||||||
|
?>
|
||||||
|
<div class="col-md-12 col-lg-10 center-block" style="float: none;">
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">修改商户信息 UID:<?php echo $uid?></h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<ul class="nav nav-tabs">
|
||||||
|
<li align="center"><a href="./uset.php?my=edit&uid=<?php echo $uid?>">基本信息</a></li>
|
||||||
|
<li align="center"><a href="./uset.php?my=api&uid=<?php echo $uid?>">密钥信息</a></li>
|
||||||
|
<li align="center" class="active"><a href="#">自定义接口信息</a></li>
|
||||||
|
<?php if($group['subchannel_type']){?><li align="center"><a href="./uset.php?my=subchannel&uid=<?php echo $uid?>">自定义子通道</a></li><?php }?>
|
||||||
|
</ul>
|
||||||
|
<form onsubmit="return editUserChannelInfo(this, <?php echo $uid?>)" method="POST">
|
||||||
|
<?php
|
||||||
|
foreach(explode(',',$group['settings']) as $row){
|
||||||
|
$arr = explode(':', $row);
|
||||||
|
echo '<div class="form-group">
|
||||||
|
<label>'.$arr[1].':</label><br>
|
||||||
|
<input type="text" class="form-control" name="setting['.$arr[0].']" value="'.$channelinfo[$arr[0]].'" required>
|
||||||
|
</div>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<input type="submit" class="btn btn-primary btn-block" value="确定修改"></form>
|
||||||
|
<br/><a href="./ulist.php">>>返回商户列表</a>
|
||||||
|
</div></div>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
elseif($my=='subchannel')
|
||||||
|
{
|
||||||
|
$uid=intval($_GET['uid']);
|
||||||
|
$row=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
|
||||||
|
if(!$row)showmsg('该商户不存在',4);
|
||||||
|
$group=\lib\Channel::getGroup($row['gid']);
|
||||||
|
|
||||||
|
$paytype = [];
|
||||||
|
$paytypes = [];
|
||||||
|
$type_select = '';
|
||||||
|
$rs = $DB->getAll("SELECT * FROM pre_type ORDER BY id ASC");
|
||||||
|
foreach($rs as $row){
|
||||||
|
$paytype[$row['id']] = $row['showname'];
|
||||||
|
$paytypes[$row['id']] = $row['name'];
|
||||||
|
if(in_array($row['name'], $group['subchannel_type'])){
|
||||||
|
$type_select .= '<option value="'.$row['id'].'">'.$row['showname'].'</option>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unset($rs);
|
||||||
|
$list = $DB->getAll("SELECT A.*,B.type,B.name channelname FROM pre_subchannel A LEFT JOIN pre_channel B ON A.channel=B.id WHERE A.uid='$uid' ORDER BY A.id ASC");
|
||||||
|
?>
|
||||||
|
<style>td{overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width:300px;}</style>
|
||||||
|
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content animated flipInX">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span
|
||||||
|
aria-hidden="true">×</span><span
|
||||||
|
class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title" id="modal-title">自定义子通道修改/添加</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form class="form-horizontal" id="form-store">
|
||||||
|
<input type="hidden" name="action" id="action"/>
|
||||||
|
<input type="hidden" name="id" id="id"/>
|
||||||
|
<input type="hidden" name="uid" value="<?php echo $uid?>"/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">支付方式</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<select name="type" id="type" class="form-control" onchange="changeType()">
|
||||||
|
<option value="0">请选择支付方式</option><?php echo $type_select; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label">支付通道</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<select name="channel" id="channel" class="form-control">
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-2 control-label no-padding-right">备注</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" name="name" id="name" placeholder="仅显示使用,不要与其他备注重复">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-12 col-lg-10 center-block" style="float: none;">
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">修改商户信息 UID:<?php echo $uid?></h3></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<ul class="nav nav-tabs">
|
||||||
|
<li align="center"><a href="./uset.php?my=edit&uid=<?php echo $uid?>">基本信息</a></li>
|
||||||
|
<li align="center"><a href="./uset.php?my=api&uid=<?php echo $uid?>">密钥信息</a></li>
|
||||||
|
<?php if($group['settings']){?><li align="center"><a href="./uset.php?my=edit2&uid=<?php echo $uid?>">自定义接口信息</a></li><?php }?>
|
||||||
|
<li align="center" class="active"><a href="#">自定义子通道</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="panel panel-success">
|
||||||
|
<div class="panel-heading"><h3 class="panel-title">当前商户共有 <b><?php echo count($list);?></b> 个子通道
|
||||||
|
<span class="pull-right">
|
||||||
|
<a href="javascript:addframe()" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 新增</a>
|
||||||
|
</span>
|
||||||
|
</h3></div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead><tr><th>ID</th><th>支付方式</th><th>支付通道</th><th>子通道备注</th><th>自定义支付参数</th><th>状态</th><th>操作</th></tr></thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach($list as $res)
|
||||||
|
{
|
||||||
|
if(empty($res['info'])) $res['info'] = '点击设置';
|
||||||
|
echo '<tr><td><b>'.$res['id'].'</b></td><td><img src="/assets/icon/'.$paytypes[$res['type']].'.ico" width="16" onerror="this.style.display=\'none\'"> '.$paytype[$res['type']].'</td><td>'.$res['channel'].'_'.$res['channelname'].'</td><td>'.$res['name'].'</td><td><a href="javascript:editInfo('.$res['id'].')">'.$res['info'].'</a></td><td>'.($res['status']==1?'<a class="btn btn-xs btn-success" onclick="setStatus('.$res['id'].',0)">已开启</a>':'<a class="btn btn-xs btn-warning" onclick="setStatus('.$res['id'].',1)">已关闭</a>').'</td><td><a class="btn btn-xs btn-info" onclick="editframe('.$res['id'].')">编辑</a> <a class="btn btn-xs btn-danger" onclick="delItem('.$res['id'].')">删除</a> <a href="./order.php?subchannel='.$res['id'].'" target="_blank" class="btn btn-xs btn-default">订单</a> <a onclick="testpay('.$res['id'].','.$res['channel'].')" class="btn btn-xs btn-default">测试</a></td></tr>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a href="./ulist.php">>>返回商户列表</a>
|
||||||
|
</div></div>
|
||||||
|
<?php } ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>clipboard.js/1.7.1/clipboard.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
var clipboard = new Clipboard('.copy-btn');
|
||||||
|
clipboard.on('success', function (e) {
|
||||||
|
layer.msg('复制成功!', {icon: 1});
|
||||||
|
});
|
||||||
|
clipboard.on('error', function (e) {
|
||||||
|
layer.msg('复制失败,请长按链接后手动复制', {icon: 2});
|
||||||
|
});
|
||||||
|
var clipboard = new Clipboard('#merchant_private_key_copy', {
|
||||||
|
container: document.getElementById('myModal')
|
||||||
|
});
|
||||||
|
clipboard.on('success', function (e) {
|
||||||
|
layer.msg('复制成功!', {icon: 1});
|
||||||
|
});
|
||||||
|
clipboard.on('error', function (e) {
|
||||||
|
layer.msg('复制失败,请长按链接后手动复制', {icon: 2});
|
||||||
|
});
|
||||||
|
$("#editKeyType").click(function(){
|
||||||
|
var uid = $("input[name='uid']").val();
|
||||||
|
var keytype=$("select[name='keytype']").val();
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : "POST",
|
||||||
|
url : "ajax_user.php?act=edit_keytype",
|
||||||
|
data : {uid:uid, keytype:keytype},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 1){
|
||||||
|
layer.alert('修改成功!', {icon:1});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
function resetKey(){
|
||||||
|
var uid = $("input[name='uid']").val();
|
||||||
|
var confirmobj = layer.confirm('是否确认重置该商户的MD5密钥?', {
|
||||||
|
btn: ['确定','取消']
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=resetKey',
|
||||||
|
data : {uid: uid},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert('重置密钥成功!', {icon:1}, function(){window.location.reload()});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function createRsaPair(){
|
||||||
|
var uid = $("input[name='uid']").val();
|
||||||
|
var confirmobj = layer.confirm('是否确定生成该商户的RSA密钥对?', {
|
||||||
|
btn: ['确定','取消']
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=createRsaPair',
|
||||||
|
data : {uid: uid},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
$("textarea[name='merchant_private_key']").val(data.private_key);
|
||||||
|
$("textarea[name='merchant_public_key']").val(data.public_key);
|
||||||
|
$("#merchant_private_key_copy").attr('data-clipboard-text', data.private_key);
|
||||||
|
layer.alert('商户RSA密钥对生成成功', {icon:1}, function(){
|
||||||
|
layer.closeAll();
|
||||||
|
$('#myModal').modal('show');
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function addUser(obj){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=addUser',
|
||||||
|
data : $(obj).serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert('添加商户成功!商户ID:'+data.uid+'<br/>密钥:'+data.key, {
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
window.location.href = './ulist.php';
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function editUser(obj, uid){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=editUser&uid='+uid,
|
||||||
|
data : $(obj).serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert('修改商户信息成功!', {
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function editUserChannelInfo(obj, uid){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=editUserChannelInfo&uid='+uid,
|
||||||
|
data : $(obj).serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert('修改商户信息成功!', {
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.close(ii);
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeType(channel){
|
||||||
|
channel = channel || null
|
||||||
|
var typeid = $("#type").val();
|
||||||
|
if(typeid==0)return;
|
||||||
|
$("#channel").empty();
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_user.php?act=getChannels&typeid='+typeid,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
$.each(data.data, function (i, res) {
|
||||||
|
$("#channel").append('<option value="'+res.id+'">'+res.name+'</option>');
|
||||||
|
})
|
||||||
|
if(channel!=null)$("#channel").val(channel);
|
||||||
|
}else{
|
||||||
|
layer.msg(data.msg, {icon:2, time:1500})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function addframe(){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("新增子通道");
|
||||||
|
$("#action").val("add");
|
||||||
|
$("#id").val('');
|
||||||
|
$("#type").val(0);
|
||||||
|
$("#channel").empty();
|
||||||
|
}
|
||||||
|
function editframe(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_user.php?act=getSubChannel&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
$("#modal-store").modal('show');
|
||||||
|
$("#modal-title").html("修改子通道");
|
||||||
|
$("#action").val("edit");
|
||||||
|
$("#id").val(data.data.id);
|
||||||
|
$("#name").val(data.data.name);
|
||||||
|
$("#type").val(data.data.type);
|
||||||
|
changeType(data.data.channel);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function save(){
|
||||||
|
if($("#name").val()==''){
|
||||||
|
layer.alert('请确保各项不能为空!');return false;
|
||||||
|
}
|
||||||
|
if($("#type").val()==0){
|
||||||
|
layer.alert('请选择支付方式!');return false;
|
||||||
|
}
|
||||||
|
if($("#channel").val()==0 || $("#channel").val()==null){
|
||||||
|
layer.alert('请选择支付通道!');return false;
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=saveSubChannel',
|
||||||
|
data : $("#form-store").serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg,{
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
window.location.reload()
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function delItem(id) {
|
||||||
|
var confirmobj = layer.confirm('你确实要删除此子通道吗?', {
|
||||||
|
btn: ['确定','取消'], icon:0
|
||||||
|
}, function(){
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_user.php?act=delSubChannel&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload()
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(){
|
||||||
|
layer.close(confirmobj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setStatus(id,status) {
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_user.php?act=setSubChannel&id='+id+'&status='+status,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
window.location.reload()
|
||||||
|
}else{
|
||||||
|
layer.msg(data.msg, {icon:2, time:1500});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function editInfo(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'GET',
|
||||||
|
url : 'ajax_user.php?act=subChannelInfo&id='+id,
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
var area = [$(window).width() > 520 ? '520px' : '100%', ';max-height:100%'];
|
||||||
|
layer.open({
|
||||||
|
type: 1,
|
||||||
|
area: area,
|
||||||
|
title: '自定义支付参数',
|
||||||
|
skin: 'layui-layer-rim',
|
||||||
|
content: data.data
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function saveInfo(id){
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_user.php?act=saveSubChannelInfo&id='+id,
|
||||||
|
data : $("#form-info").serialize(),
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.alert(data.msg,{
|
||||||
|
icon: 1,
|
||||||
|
closeBtn: false
|
||||||
|
}, function(){
|
||||||
|
window.location.reload()
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function testpay(subid, id) {
|
||||||
|
var ii = layer.open({
|
||||||
|
area: ['360px'],
|
||||||
|
title: '测试支付',
|
||||||
|
content: '<div class="form-group"><div class="input-group"><span class="input-group-addon"><span class="glyphicon glyphicon-shopping-cart"></span></span><input class="form-control" placeholder="订单名称" value="支付测试" name="test_name" type="text"></div></div><div class="form-group"><div class="input-group"><span class="input-group-addon"><span class="glyphicon glyphicon-yen"></span></span><input class="form-control" placeholder="订单金额" value="1" name="test_money" type="text"></div></div>',
|
||||||
|
yes: function(){
|
||||||
|
var name = $("input[name='test_name']").val();
|
||||||
|
var money = $("input[name='test_money']").val();
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : 'ajax_pay.php?act=testpay',
|
||||||
|
data : {channel:id, subchannel:subid, name:name, money:money},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
if(data.code == 0){
|
||||||
|
layer.close(ii);
|
||||||
|
window.open(data.url);
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon:2});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error:function(data){
|
||||||
|
layer.msg('服务器错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,141 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 商户支付统计
|
||||||
|
**/
|
||||||
|
include("../includes/common.php");
|
||||||
|
$title='商户支付统计';
|
||||||
|
include './head.php';
|
||||||
|
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
|
||||||
|
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
#orderItem .orderTitle{word-break:keep-all;}
|
||||||
|
#orderItem .orderContent{word-break:break-all;}
|
||||||
|
.dates{max-width: 120px;}
|
||||||
|
</style>
|
||||||
|
<link href="../assets/css/datepicker.css" rel="stylesheet">
|
||||||
|
<div class="container" style="padding-top:70px;">
|
||||||
|
<div class="col-md-12 center-block" style="float: none;">
|
||||||
|
<form method="GET" class="form-inline" id="searchToolbar">
|
||||||
|
<div class="input-group">
|
||||||
|
<label>查询日期:</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-group input-daterange">
|
||||||
|
<input type="text" id="startday" name="startday" class="form-control dates" placeholder="开始日期" autocomplete="off" value="<?php echo date("Y-m-d")?>">
|
||||||
|
<span class="input-group-addon"><i class="fa fa-chevron-right"></i></span>
|
||||||
|
<input type="text" id="endday" name="endday" class="form-control dates" placeholder="结束日期" autocomplete="off" value="<?php echo date("Y-m-d")?>">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="method" class="form-control"><option value="type">以支付方式查看</option><option value="channel">以支付通道查看</option></select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<select name="type" class="form-control"><option value="0">订单金额统计</option><option value="1">支付金额统计</option><option value="2">分成金额统计</option><option value="3">手续费利润统计</option><option value="4">代付金额统计</option></select>
|
||||||
|
</div>
|
||||||
|
<button type="button" class="btn btn-primary" onclick="loadTable()">立即查询</button>
|
||||||
|
<a href="javascript:exportTable()" class="btn btn-success" id="exportbtn" style="display:none">导出</a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<table id="listTable">
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>
|
||||||
|
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table.min.js"></script>
|
||||||
|
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
|
||||||
|
<script src="../assets/js/custom.js"></script>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
function loadTable(){
|
||||||
|
var startday = $("input[name='startday']").val();
|
||||||
|
var endday = $("input[name='endday']").val();
|
||||||
|
var method = $("select[name='method']").val();
|
||||||
|
var type = $("select[name='type']").val();
|
||||||
|
if(startday == '' || endday == ''){
|
||||||
|
layer.alert('查询日期不能为空');return false;
|
||||||
|
}
|
||||||
|
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||||
|
$.ajax({
|
||||||
|
type : "POST",
|
||||||
|
url : "ajax_user.php?act=userPayStat",
|
||||||
|
data : {startday:startday, endday:endday, method:method, type:type},
|
||||||
|
dataType : 'json',
|
||||||
|
success : function(data) {
|
||||||
|
layer.close(ii);
|
||||||
|
if(data.code == 0){
|
||||||
|
showTable(data);
|
||||||
|
$("#exportbtn").show();
|
||||||
|
}else{
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function showTable(data){
|
||||||
|
$('#listTable').bootstrapTable('destroy');
|
||||||
|
var columns = [];
|
||||||
|
$.each(data.columns, function(index, item){
|
||||||
|
if(index == 'uid'){
|
||||||
|
columns.push({
|
||||||
|
field: index,
|
||||||
|
title: item,
|
||||||
|
sortable: true,
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(value == 0){
|
||||||
|
return '管理员';
|
||||||
|
}else if(value>0){
|
||||||
|
return '<a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a>';
|
||||||
|
}else{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else if(index == 'name'){
|
||||||
|
columns.push({
|
||||||
|
field: index,
|
||||||
|
title: item,
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
columns.push({
|
||||||
|
field: index,
|
||||||
|
title: item,
|
||||||
|
sortable: true,
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
if(value == null) return 0;
|
||||||
|
else return value.toFixed(2)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
$("#listTable").bootstrapTable({
|
||||||
|
data: data.data,
|
||||||
|
pageSize: 20,
|
||||||
|
sidePagination: 'client',
|
||||||
|
classes: 'table table-striped table-hover table-bordered',
|
||||||
|
columns: columns,
|
||||||
|
})
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function exportTable(){
|
||||||
|
var startday = $("input[name='startday']").val();
|
||||||
|
var endday = $("input[name='endday']").val();
|
||||||
|
var method = $("select[name='method']").val();
|
||||||
|
var type = $("select[name='type']").val();
|
||||||
|
if(startday == '' || endday == ''){
|
||||||
|
layer.alert('查询日期不能为空');return false;
|
||||||
|
}
|
||||||
|
window.location.href='./download.php?act=ustat&startday='+startday+'&endday='+endday+'&method='+method+'&type='+type;
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('.input-datepicker, .input-daterange').datepicker({
|
||||||
|
format: 'yyyy-mm-dd',
|
||||||
|
autoclose: true,
|
||||||
|
clearBtn: true,
|
||||||
|
language: 'zh-CN'
|
||||||
|
});
|
||||||
|
loadTable()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,150 @@
|
|||||||
|
<?php
|
||||||
|
$nosession = true;
|
||||||
|
define('API_INIT', true);
|
||||||
|
require './includes/common.php';
|
||||||
|
|
||||||
|
if(isset($_GET['s'])){
|
||||||
|
\lib\ApiHelper::load_api($_GET['s']);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
|
||||||
|
@header('Content-Type: application/json; charset=UTF-8');
|
||||||
|
if($act=='query')
|
||||||
|
{
|
||||||
|
$pid=intval($_GET['pid']);
|
||||||
|
$key=daddslashes($_GET['key']);
|
||||||
|
$userrow=$DB->getRow("SELECT * FROM pre_user WHERE uid='{$pid}' limit 1");
|
||||||
|
if(!$userrow) exit(json_encode(['code'=>-3, 'msg'=>'商户ID不存在']));
|
||||||
|
if($key!==$userrow['key']) exit(json_encode(['code'=>-3, 'msg'=>'商户密钥错误']));
|
||||||
|
if($userrow['keytype'] == 1) exit(json_encode(['code'=>-3, 'msg'=>'该商户只能使用RSA签名类型']));
|
||||||
|
|
||||||
|
$orders=$DB->getColumn("SELECT count(*) from pre_order WHERE uid={$pid}");
|
||||||
|
$lastday=date("Y-m-d",strtotime("-1 day"));
|
||||||
|
$today=date("Y-m-d");
|
||||||
|
$order_today=$DB->getColumn("SELECT count(*) from pre_order where uid={$pid} and status=1 and date='$today'");
|
||||||
|
$order_lastday=$DB->getColumn("SELECT count(*) from pre_order where uid={$pid} and status=1 and date='$lastday'");
|
||||||
|
|
||||||
|
$result=array("code"=>1,"pid"=>$pid,"key"=>$key,"active"=>$userrow['status'],"money"=>$userrow['money'],"type"=>$userrow['settle_id'],"account"=>$userrow['account'],"username"=>$userrow['username'],"orders"=>$orders,"orders_today"=>$order_today,"orders_lastday"=>$order_lastday);
|
||||||
|
exit(json_encode($result));
|
||||||
|
}
|
||||||
|
elseif($act=='settle')
|
||||||
|
{
|
||||||
|
$pid=intval($_GET['pid']);
|
||||||
|
$key=daddslashes($_GET['key']);
|
||||||
|
$limit=isset($_GET['limit'])?intval($_GET['limit']):10;
|
||||||
|
$offset=isset($_GET['offset'])?intval($_GET['offset']):0;
|
||||||
|
if($limit>50)$limit=50;
|
||||||
|
$userrow=$DB->getRow("SELECT * FROM pre_user WHERE uid='{$pid}' limit 1");
|
||||||
|
if(!$userrow) exit(json_encode(['code'=>-3, 'msg'=>'商户ID不存在']));
|
||||||
|
if($key!==$userrow['key']) exit(json_encode(['code'=>-3, 'msg'=>'商户密钥错误']));
|
||||||
|
if($userrow['keytype'] == 1) exit(json_encode(['code'=>-3, 'msg'=>'该商户只能使用RSA签名类型']));
|
||||||
|
|
||||||
|
$rs=$DB->query("SELECT * FROM pre_settle WHERE uid='{$pid}' order by id desc limit {$offset},{$limit}");
|
||||||
|
while($row=$rs->fetch(PDO::FETCH_ASSOC)){
|
||||||
|
$data[]=$row;
|
||||||
|
}
|
||||||
|
if($rs){
|
||||||
|
$result=array("code"=>1,"msg"=>"查询结算记录成功!","data"=>$data);
|
||||||
|
}else{
|
||||||
|
$result=array("code"=>-1,"msg"=>"查询结算记录失败!");
|
||||||
|
}
|
||||||
|
exit(json_encode($result));
|
||||||
|
}
|
||||||
|
elseif($act=='order')
|
||||||
|
{
|
||||||
|
if(isset($_GET['sign']) && isset($_GET['trade_no'])){
|
||||||
|
$trade_no=daddslashes($_GET['trade_no']);
|
||||||
|
if(empty($_GET['sign']) || md5(SYS_KEY.$trade_no.SYS_KEY) !== $_GET['sign']) exit(json_encode(['code'=>-3, 'msg'=>'verify sign failed']));
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_order WHERE trade_no='{$trade_no}' limit 1");
|
||||||
|
}else{
|
||||||
|
$pid=intval($_GET['pid']);
|
||||||
|
$key=daddslashes($_GET['key']);
|
||||||
|
$userrow=$DB->getRow("SELECT * FROM pre_user WHERE uid='{$pid}' limit 1");
|
||||||
|
if(!$userrow) exit(json_encode(['code'=>-3, 'msg'=>'商户ID不存在']));
|
||||||
|
if($key!==$userrow['key']) exit(json_encode(['code'=>-3, 'msg'=>'商户密钥错误']));
|
||||||
|
if($userrow['keytype'] == 1) exit(json_encode(['code'=>-3, 'msg'=>'该商户只能使用RSA签名类型']));
|
||||||
|
|
||||||
|
if(!empty($_GET['trade_no'])){
|
||||||
|
$trade_no=daddslashes($_GET['trade_no']);
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_order WHERE uid='{$pid}' and trade_no='{$trade_no}' limit 1");
|
||||||
|
}elseif(!empty($_GET['out_trade_no'])){
|
||||||
|
$out_trade_no=daddslashes($_GET['out_trade_no']);
|
||||||
|
$row=$DB->getRow("SELECT * FROM pre_order WHERE uid='{$pid}' and out_trade_no='{$out_trade_no}' limit 1");
|
||||||
|
}else{
|
||||||
|
exit(json_encode(['code'=>-4, 'msg'=>'订单号不能为空']));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($row){
|
||||||
|
$type=$DB->getColumn("SELECT name FROM pre_type WHERE id='{$row['type']}' LIMIT 1");
|
||||||
|
$result=array("code"=>1,"msg"=>"succ","trade_no"=>$row['trade_no'],"out_trade_no"=>$row['out_trade_no'],"api_trade_no"=>$row['api_trade_no'],"bill_trade_no"=>$row['bill_trade_no'],"type"=>$type,"pid"=>$row['uid'],"addtime"=>$row['addtime'],"endtime"=>$row['endtime'],"name"=>$row['name'],"money"=>$row['money'],"param"=>$row['param'],"buyer"=>$row['buyer'],"status"=>$row['status'],"payurl"=>$row['payurl']);
|
||||||
|
}else{
|
||||||
|
$result=array("code"=>-1,"msg"=>"订单号不存在");
|
||||||
|
}
|
||||||
|
exit(json_encode($result));
|
||||||
|
}
|
||||||
|
elseif($act=='orders')
|
||||||
|
{
|
||||||
|
$pid=intval($_GET['pid']);
|
||||||
|
$key=daddslashes($_GET['key']);
|
||||||
|
$limit=isset($_GET['limit'])?intval($_GET['limit']):10;
|
||||||
|
$offset=isset($_GET['offset'])?intval($_GET['offset']):0;
|
||||||
|
$status=isset($_GET['status'])?intval($_GET['status']):null;
|
||||||
|
if($limit>50)$limit=50;
|
||||||
|
$userrow=$DB->getRow("SELECT * FROM pre_user WHERE uid='{$pid}' limit 1");
|
||||||
|
if(!$userrow) exit(json_encode(['code'=>-3, 'msg'=>'商户ID不存在']));
|
||||||
|
if($key!==$userrow['key']) exit(json_encode(['code'=>-3, 'msg'=>'商户密钥错误']));
|
||||||
|
if($userrow['keytype'] == 1) exit(json_encode(['code'=>-3, 'msg'=>'该商户只能使用RSA签名类型']));
|
||||||
|
|
||||||
|
$sql = " uid='{$pid}'";
|
||||||
|
if(isset($_GET['status'])){
|
||||||
|
$status = intval($_GET['status']);
|
||||||
|
$sql .= " AND A.status='{$status}'";
|
||||||
|
}
|
||||||
|
|
||||||
|
$rs=$DB->query("SELECT A.*,B.name typename FROM pre_order A LEFT JOIN pre_type B ON A.type=B.id WHERE{$sql} ORDER BY trade_no DESC LIMIT {$offset},{$limit}");
|
||||||
|
while($row=$rs->fetch(PDO::FETCH_ASSOC)){
|
||||||
|
$data[]=["trade_no"=>$row['trade_no'],"out_trade_no"=>$row['out_trade_no'],"type"=>$row['typename'],"pid"=>$row['uid'],"addtime"=>$row['addtime'],"endtime"=>$row['endtime'],"name"=>$row['name'],"money"=>$row['money'],"param"=>$row['param'],"buyer"=>$row['buyer'],"status"=>$row['status']];
|
||||||
|
}
|
||||||
|
if($rs){
|
||||||
|
$result=array("code"=>1,"msg"=>"查询订单记录成功!","count"=>count($data),"data"=>$data);
|
||||||
|
}else{
|
||||||
|
$result=array("code"=>-1,"msg"=>"查询订单记录失败!");
|
||||||
|
}
|
||||||
|
exit(json_encode($result));
|
||||||
|
}
|
||||||
|
elseif($act=='refund')
|
||||||
|
{
|
||||||
|
if(!$conf['user_refund']) exit(json_encode(['code'=>-4, 'msg'=>'未开启商户后台自助退款']));
|
||||||
|
$pid=intval($_POST['pid']);
|
||||||
|
$key=daddslashes($_POST['key']);
|
||||||
|
$userrow=$DB->getRow("SELECT * FROM pre_user WHERE uid='{$pid}' limit 1");
|
||||||
|
if(!$userrow) exit(json_encode(['code'=>-3, 'msg'=>'商户ID不存在']));
|
||||||
|
if($key!==$userrow['key']) exit(json_encode(['code'=>-3, 'msg'=>'商户密钥错误']));
|
||||||
|
if($userrow['keytype'] == 1) exit(json_encode(['code'=>-3, 'msg'=>'该商户只能使用RSA签名类型']));
|
||||||
|
if($userrow['refund'] == 0) exit(json_encode(['code'=>-2, 'msg'=>'商户未开启订单退款API接口']));
|
||||||
|
|
||||||
|
$money = trim($_POST['money']);
|
||||||
|
if(!is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))exit(json_encode(['code'=>-1, 'msg'=>'金额输入错误']));
|
||||||
|
|
||||||
|
if(!empty($_POST['trade_no'])){
|
||||||
|
$trade_no=daddslashes($_POST['trade_no']);
|
||||||
|
}elseif(!empty($_POST['out_trade_no'])){
|
||||||
|
$out_trade_no=daddslashes($_POST['out_trade_no']);
|
||||||
|
$trade_no = $DB->findColumn('order', 'trade_no', ['out_trade_no'=>$out_trade_no, 'uid'=>$pid]);
|
||||||
|
if(!$trade_no) exit(json_encode(['code'=>-1, 'msg'=>'当前订单不存在!']));
|
||||||
|
}else{
|
||||||
|
exit(json_encode(['code'=>-4, 'msg'=>'订单号不能为空']));
|
||||||
|
}
|
||||||
|
|
||||||
|
$refund_no = date("YmdHis").rand(11111,99999);
|
||||||
|
$result = \lib\Order::refund($refund_no, $trade_no, $money, 1, $pid);
|
||||||
|
if($result['code'] == 0){
|
||||||
|
$result['msg'] = '退款成功!退款金额¥'.$result['money'];
|
||||||
|
}
|
||||||
|
exit(json_encode($result));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
exit(json_encode(['code'=>-5, 'msg'=>'No Act!']));
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,15 @@
|
|||||||
|
@charset "UTF-8";html{font-size:62.5%;font-family:'helvetica neue',tahoma,arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,hr{margin:0;padding:0}body{line-height:1.333;font-size:12px}h1,h2,h3,h4,h5,h6{font-size:100%;font-family:arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}input,textarea,select,button{font-size:12px;font-weight:normal}input[type="button"],input[type="submit"],select,button{cursor:pointer}table{border-collapse:collapse;border-spacing:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}li{list-style:none}caption,th{text-align:left}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}fieldset,img,a img,iframe{border-width:0;border-style:none}img{-ms-interpolation-mode:bicubic}textarea{overflow-y:auto}legend{color:#000}a:link,a:visited{text-decoration:none}hr{height:0}label{cursor:pointer}.clearfix:after{content:"\200B";display:block;height:0;clear:both}.clearfix{*zoom:1}a{color:#328CE5}a:hover{color:#2b8ae8;text-decoration:none}a.hit{color:#C06C6C}a:focus{outline:none}.hit{color:#8DC27E}.txt_auxiliary{color:#A2A2A2}.clear{*zoom:1}.clear:before,.clear:after{content:"";display:table}.clear:after{clear:both}body,.body{background:#f7f7f7;height:100%}.mod-title{height:60px;line-height:60px;text-align:center;border-bottom:1px solid #ddd;background:#fff}.mod-title .ico-wechat{display:inline-block;width:41px;height:38px;background:url("./alipay-pay.png") 0 -113px no-repeat;vertical-align:middle;margin-right:7px}.mod-title .text{font-size:20px;color:#333;font-weight:normal;vertical-align:middle}.mod-ct{width:610px;padding:0 135px;margin:0 auto;margin-top:15px;background:#fff url("./wave.png") top center repeat-x;text-align:center;color:#333;border:1px solid #e5e5e5;border-top:none}.mod-ct .order{font-size:20px;padding-top:30px}.mod-ct .amount{font-size:48px;margin-top:20px}.mod-ct .qr-image{margin-top:30px}.mod-ct .qr-image img{width:230px;height:230px}.mod-ct .detail{margin-top:60px;padding-top:25px}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./alipay-pay.png") -25px -100px no-repeat}.mod-ct .detail .detail-ct{display:none;font-size:14px;text-align:right;line-height:28px}.mod-ct .detail .detail-ct dt{float:left}.mod-ct .detail-open{border-top:1px solid #e5e5e5}.mod-ct .detail .arrow{padding:6px 34px;border:1px solid #e5e5e5}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./alipay-pay.png") -25px -100px no-repeat}.mod-ct .detail-open .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./alipay-pay.png") 0 -100px no-repeat}.mod-ct .detail-open .detail-ct{display:block}.mod-ct .tip{margin-top:40px;border-top:1px dashed #e5e5e5;padding:30px 0;position:relative}.mod-ct .tip .ico-scan{display:inline-block;width:56px;height:55px;background:url("./alipay-pay.png") 0 0 no-repeat;vertical-align:middle;*display:inline;*zoom:1}.mod-ct .tip .tip-text{display:inline-block;vertical-align:middle;text-align:left;margin-left:23px;font-size:16px;line-height:28px;*display:inline;*zoom:1}.mod-ct .tip .dec{display:inline-block;width:22px;height:45px;background:url("./alipay-pay.png") 0 -55px no-repeat;position:absolute;top:-23px}.mod-ct .tip .dec-left{background-position:0 -55px;left:-136px}.mod-ct .tip .dec-right{background-position:-25px -55px;right:-136px}.foot{text-align:center;margin:30px auto;color:#888888;font-size:12px;line-height:20px;font-family:"simsun"}.foot .link{color:#0071ce}
|
||||||
|
.open_app{margin-top:30px}
|
||||||
|
a.btn-open-app{border:1px solid #328ce5;padding:10px 20px;color:#fff;background:#328ce5;font-size:14px;cursor:pointer;}
|
||||||
|
a.btn-check{padding:10px 20px;color:#328ce5;font-size:14px;cursor:pointer;}
|
||||||
|
@media (max-width:768px){.mod-ct{width:100%;padding:0;border:0}
|
||||||
|
.mod-ct .tip .dec-right{display:none}
|
||||||
|
.mod-ct .detail{margin-top:30px}
|
||||||
|
.mod-ct .detail .detail-ct{padding:0 19px;margin-bottom:19px}
|
||||||
|
}
|
||||||
|
.top-guide[data-v-cd35abb6]{padding-top:.16rem;animation:myfirst 1.6s infinite}
|
||||||
|
@keyframes myfirst{0%{transform:translateY(0)}
|
||||||
|
50%{transform:translateY(.21333rem)}
|
||||||
|
100%{transform:translateY(0)}
|
||||||
|
}
|
||||||
|
.guide{text-align:center;position:fixed;top:0;left:0;z-index:10;width:100vw;height:100vh;background:rgba(51,51,51,.92)}
|
||||||
|
After Width: | Height: | Size: 7.0 KiB |
@@ -0,0 +1,9 @@
|
|||||||
|
@charset "UTF-8";html{font-size:62.5%;font-family:'helvetica neue',tahoma,arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,hr{margin:0;padding:0}body{line-height:1.333;font-size:12px}h1,h2,h3,h4,h5,h6{font-size:100%;font-family:arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}input,textarea,select,button{font-size:12px;font-weight:normal}input[type="button"],input[type="submit"],select,button{cursor:pointer}table{border-collapse:collapse;border-spacing:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}li{list-style:none}caption,th{text-align:left}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}fieldset,img,a img,iframe{border-width:0;border-style:none}img{-ms-interpolation-mode:bicubic}textarea{overflow-y:auto}legend{color:#000}a:link,a:visited{text-decoration:none}hr{height:0}label{cursor:pointer}.clearfix:after{content:"\200B";display:block;height:0;clear:both}.clearfix{*zoom:1}a{color:#328CE5}a:hover{color:#2b8ae8;text-decoration:none}a.hit{color:#C06C6C}a:focus{outline:none}.hit{color:#8DC27E}.txt_auxiliary{color:#A2A2A2}.clear{*zoom:1}.clear:before,.clear:after{content:"";display:table}.clear:after{clear:both}body,.body{background:#f7f7f7;height:100%}.mod-title{height:60px;line-height:60px;text-align:center;border-bottom:1px solid #ddd;background:#fff}.mod-title .ico-wechat{display:inline-block;width:41px;height:36px;background:url("./bank-pay.png") 0 -115px no-repeat;vertical-align:middle;margin-right:7px}.mod-title .text{font-size:20px;color:#333;font-weight:normal;vertical-align:middle}.mod-ct{width:610px;padding:0 135px;margin:0 auto;margin-top:15px;background:#fff url("./wave.png") top center repeat-x;text-align:center;color:#333;border:1px solid #e5e5e5;border-top:none}.mod-ct .order{font-size:20px;padding-top:30px}.mod-ct .amount{font-size:48px;margin-top:20px}.mod-ct .qr-image{margin-top:30px}.mod-ct .qr-image img{width:230px;height:230px}.mod-ct .detail{margin-top:60px;padding-top:25px}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./bank-pay.png") -25px -100px no-repeat}.mod-ct .detail .detail-ct{display:none;font-size:14px;text-align:right;line-height:28px}.mod-ct .detail .detail-ct dt{float:left}.mod-ct .detail-open{border-top:1px solid #e5e5e5}.mod-ct .detail .arrow{padding:6px 34px;border:1px solid #e5e5e5}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./bank-pay.png") -25px -100px no-repeat}.mod-ct .detail-open .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./bank-pay.png") 0 -100px no-repeat}.mod-ct .detail-open .detail-ct{display:block}.mod-ct .tip{margin-top:40px;border-top:1px dashed #e5e5e5;padding:30px 0;position:relative}.mod-ct .tip .ico-scan{display:inline-block;width:56px;height:55px;background:url("./bank-pay.png") 0 0 no-repeat;vertical-align:middle;*display:inline;*zoom:1}.mod-ct .tip .tip-text{display:inline-block;vertical-align:middle;text-align:left;margin-left:23px;font-size:16px;line-height:28px;*display:inline;*zoom:1}.mod-ct .tip .dec{display:inline-block;width:22px;height:45px;background:url("./bank-pay.png") 0 -55px no-repeat;position:absolute;top:-23px}.mod-ct .tip .dec-left{background-position:0 -55px;left:-136px}.mod-ct .tip .dec-right{background-position:-25px -55px;right:-136px}.foot{text-align:center;margin:30px auto;color:#888888;font-size:12px;line-height:20px;font-family:"simsun"}.foot .link{color:#0071ce}
|
||||||
|
.open_app{margin-top:30px}
|
||||||
|
a.btn-open-app{border:1px solid #328ce5;padding:10px 20px;color:#fff;background:#328ce5;font-size:14px;cursor:pointer;}
|
||||||
|
a.btn-check{padding:10px 20px;color:#328ce5;font-size:14px;cursor:pointer;}
|
||||||
|
@media (max-width:768px){.mod-ct{width:100%;padding:0;border:0}
|
||||||
|
.mod-ct .tip .dec-right{display:none}
|
||||||
|
.mod-ct .detail{margin-top:30px}
|
||||||
|
.mod-ct .detail .detail-ct{padding:0 19px;margin-bottom:19px}
|
||||||
|
}
|
||||||
@@ -0,0 +1,383 @@
|
|||||||
|
/*
|
||||||
|
=================================================================
|
||||||
|
(#06dps) Datepicker for Bootstrap
|
||||||
|
Copyright 2012 Stefan Petre
|
||||||
|
Improvements by Andrew Rowls
|
||||||
|
|
||||||
|
Licensed under the Apache License v2.0
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
=================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
.datepicker {
|
||||||
|
padding: 5px;
|
||||||
|
direction: ltr;
|
||||||
|
z-index: 1051 !important;
|
||||||
|
}
|
||||||
|
.datepicker-inline {
|
||||||
|
width: 220px;
|
||||||
|
}
|
||||||
|
.datepicker.datepicker-rtl {
|
||||||
|
direction: rtl;
|
||||||
|
}
|
||||||
|
.datepicker.datepicker-rtl table tr td span {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.datepicker-dropdown {
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
padding: 5px !important;
|
||||||
|
}
|
||||||
|
.datepicker-dropdown:before {
|
||||||
|
content: '';
|
||||||
|
display: inline-block;
|
||||||
|
border-left: 7px solid transparent;
|
||||||
|
border-right: 7px solid transparent;
|
||||||
|
border-bottom: 7px solid #ccc;
|
||||||
|
border-top: 0;
|
||||||
|
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
.datepicker-dropdown:after {
|
||||||
|
content: '';
|
||||||
|
display: inline-block;
|
||||||
|
border-left: 6px solid transparent;
|
||||||
|
border-right: 6px solid transparent;
|
||||||
|
border-bottom: 6px solid #ffffff;
|
||||||
|
border-top: 0;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
.datepicker-dropdown.dropdown-menu {
|
||||||
|
-webkit-transform: none !important;
|
||||||
|
transform: none !important;
|
||||||
|
-webkit-transition: none !important;
|
||||||
|
transition: none !important;
|
||||||
|
}
|
||||||
|
.datepicker-dropdown.datepicker-orient-left:before {
|
||||||
|
left: 6px;
|
||||||
|
}
|
||||||
|
.datepicker-dropdown.datepicker-orient-left:after {
|
||||||
|
left: 7px;
|
||||||
|
}
|
||||||
|
.datepicker-dropdown.datepicker-orient-right:before {
|
||||||
|
right: 6px;
|
||||||
|
}
|
||||||
|
.datepicker-dropdown.datepicker-orient-right:after {
|
||||||
|
right: 7px;
|
||||||
|
}
|
||||||
|
.datepicker-dropdown.datepicker-orient-bottom:before {
|
||||||
|
top: -7px;
|
||||||
|
}
|
||||||
|
.datepicker-dropdown.datepicker-orient-bottom:after {
|
||||||
|
top: -6px;
|
||||||
|
}
|
||||||
|
.datepicker-dropdown.datepicker-orient-top:before {
|
||||||
|
bottom: -7px;
|
||||||
|
border-bottom: 0;
|
||||||
|
border-top: 7px solid rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
.datepicker-dropdown.datepicker-orient-top:after {
|
||||||
|
bottom: -6px;
|
||||||
|
border-bottom: 0;
|
||||||
|
border-top: 6px solid #ffffff;
|
||||||
|
}
|
||||||
|
.datepicker.days div.datepicker-days {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.datepicker.months div.datepicker-months {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.datepicker.years div.datepicker-years {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.datepicker table {
|
||||||
|
margin: 0;
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
.datepicker td,
|
||||||
|
.datepicker th {
|
||||||
|
text-align: center;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
.table-striped .datepicker table tr td,
|
||||||
|
.table-striped .datepicker table tr th {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.day:hover {
|
||||||
|
background: #eeeeee;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.old,
|
||||||
|
.datepicker table tr td.new {
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.disabled,
|
||||||
|
.datepicker table tr td.disabled:hover {
|
||||||
|
background: none;
|
||||||
|
color: #999999;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.today,
|
||||||
|
.datepicker table tr td.today:hover,
|
||||||
|
.datepicker table tr td.today.disabled,
|
||||||
|
.datepicker table tr td.today.disabled:hover {
|
||||||
|
background-color: #fde19a;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.today:hover,
|
||||||
|
.datepicker table tr td.today:hover:hover,
|
||||||
|
.datepicker table tr td.today.disabled:hover,
|
||||||
|
.datepicker table tr td.today.disabled:hover:hover,
|
||||||
|
.datepicker table tr td.today:active,
|
||||||
|
.datepicker table tr td.today:hover:active,
|
||||||
|
.datepicker table tr td.today.disabled:active,
|
||||||
|
.datepicker table tr td.today.disabled:hover:active,
|
||||||
|
.datepicker table tr td.today.active,
|
||||||
|
.datepicker table tr td.today:hover.active,
|
||||||
|
.datepicker table tr td.today.disabled.active,
|
||||||
|
.datepicker table tr td.today.disabled:hover.active,
|
||||||
|
.datepicker table tr td.today.disabled,
|
||||||
|
.datepicker table tr td.today:hover.disabled,
|
||||||
|
.datepicker table tr td.today.disabled.disabled,
|
||||||
|
.datepicker table tr td.today.disabled:hover.disabled,
|
||||||
|
.datepicker table tr td.today[disabled],
|
||||||
|
.datepicker table tr td.today:hover[disabled],
|
||||||
|
.datepicker table tr td.today.disabled[disabled],
|
||||||
|
.datepicker table tr td.today.disabled:hover[disabled] {
|
||||||
|
background-color: #fdf59a;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.today:active,
|
||||||
|
.datepicker table tr td.today:hover:active,
|
||||||
|
.datepicker table tr td.today.disabled:active,
|
||||||
|
.datepicker table tr td.today.disabled:hover:active,
|
||||||
|
.datepicker table tr td.today.active,
|
||||||
|
.datepicker table tr td.today:hover.active,
|
||||||
|
.datepicker table tr td.today.disabled.active,
|
||||||
|
.datepicker table tr td.today.disabled:hover.active {
|
||||||
|
background-color: #fbf069 \9;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.today:hover:hover {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.today.active:hover {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.range,
|
||||||
|
.datepicker table tr td.range:hover,
|
||||||
|
.datepicker table tr td.range.disabled,
|
||||||
|
.datepicker table tr td.range.disabled:hover {
|
||||||
|
background: #eeeeee;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.range.today,
|
||||||
|
.datepicker table tr td.range.today:hover,
|
||||||
|
.datepicker table tr td.range.today.disabled,
|
||||||
|
.datepicker table tr td.range.today.disabled:hover {
|
||||||
|
background-color: #f3d17a;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.range.today:hover,
|
||||||
|
.datepicker table tr td.range.today:hover:hover,
|
||||||
|
.datepicker table tr td.range.today.disabled:hover,
|
||||||
|
.datepicker table tr td.range.today.disabled:hover:hover,
|
||||||
|
.datepicker table tr td.range.today:active,
|
||||||
|
.datepicker table tr td.range.today:hover:active,
|
||||||
|
.datepicker table tr td.range.today.disabled:active,
|
||||||
|
.datepicker table tr td.range.today.disabled:hover:active,
|
||||||
|
.datepicker table tr td.range.today.active,
|
||||||
|
.datepicker table tr td.range.today:hover.active,
|
||||||
|
.datepicker table tr td.range.today.disabled.active,
|
||||||
|
.datepicker table tr td.range.today.disabled:hover.active,
|
||||||
|
.datepicker table tr td.range.today.disabled,
|
||||||
|
.datepicker table tr td.range.today:hover.disabled,
|
||||||
|
.datepicker table tr td.range.today.disabled.disabled,
|
||||||
|
.datepicker table tr td.range.today.disabled:hover.disabled,
|
||||||
|
.datepicker table tr td.range.today[disabled],
|
||||||
|
.datepicker table tr td.range.today:hover[disabled],
|
||||||
|
.datepicker table tr td.range.today.disabled[disabled],
|
||||||
|
.datepicker table tr td.range.today.disabled:hover[disabled] {
|
||||||
|
background-color: #f3e97a;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.range.today:active,
|
||||||
|
.datepicker table tr td.range.today:hover:active,
|
||||||
|
.datepicker table tr td.range.today.disabled:active,
|
||||||
|
.datepicker table tr td.range.today.disabled:hover:active,
|
||||||
|
.datepicker table tr td.range.today.active,
|
||||||
|
.datepicker table tr td.range.today:hover.active,
|
||||||
|
.datepicker table tr td.range.today.disabled.active,
|
||||||
|
.datepicker table tr td.range.today.disabled:hover.active {
|
||||||
|
background-color: #efe24b \9;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.selected,
|
||||||
|
.datepicker table tr td.selected:hover,
|
||||||
|
.datepicker table tr td.selected.disabled,
|
||||||
|
.datepicker table tr td.selected.disabled:hover {
|
||||||
|
background-color: #9e9e9e;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.selected:hover,
|
||||||
|
.datepicker table tr td.selected:hover:hover,
|
||||||
|
.datepicker table tr td.selected.disabled:hover,
|
||||||
|
.datepicker table tr td.selected.disabled:hover:hover,
|
||||||
|
.datepicker table tr td.selected:active,
|
||||||
|
.datepicker table tr td.selected:hover:active,
|
||||||
|
.datepicker table tr td.selected.disabled:active,
|
||||||
|
.datepicker table tr td.selected.disabled:hover:active,
|
||||||
|
.datepicker table tr td.selected.active,
|
||||||
|
.datepicker table tr td.selected:hover.active,
|
||||||
|
.datepicker table tr td.selected.disabled.active,
|
||||||
|
.datepicker table tr td.selected.disabled:hover.active,
|
||||||
|
.datepicker table tr td.selected.disabled,
|
||||||
|
.datepicker table tr td.selected:hover.disabled,
|
||||||
|
.datepicker table tr td.selected.disabled.disabled,
|
||||||
|
.datepicker table tr td.selected.disabled:hover.disabled,
|
||||||
|
.datepicker table tr td.selected[disabled],
|
||||||
|
.datepicker table tr td.selected:hover[disabled],
|
||||||
|
.datepicker table tr td.selected.disabled[disabled],
|
||||||
|
.datepicker table tr td.selected.disabled:hover[disabled] {
|
||||||
|
background-color: #808080;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.selected:active,
|
||||||
|
.datepicker table tr td.selected:hover:active,
|
||||||
|
.datepicker table tr td.selected.disabled:active,
|
||||||
|
.datepicker table tr td.selected.disabled:hover:active,
|
||||||
|
.datepicker table tr td.selected.active,
|
||||||
|
.datepicker table tr td.selected:hover.active,
|
||||||
|
.datepicker table tr td.selected.disabled.active,
|
||||||
|
.datepicker table tr td.selected.disabled:hover.active {
|
||||||
|
background-color: #666666 \9;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.active,
|
||||||
|
.datepicker table tr td.active:hover,
|
||||||
|
.datepicker table tr td.active.disabled,
|
||||||
|
.datepicker table tr td.active.disabled:hover {
|
||||||
|
background-color: #5ccdde;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.active:hover,
|
||||||
|
.datepicker table tr td.active:hover:hover,
|
||||||
|
.datepicker table tr td.active.disabled:hover,
|
||||||
|
.datepicker table tr td.active.disabled:hover:hover,
|
||||||
|
.datepicker table tr td.active:active,
|
||||||
|
.datepicker table tr td.active:hover:active,
|
||||||
|
.datepicker table tr td.active.disabled:active,
|
||||||
|
.datepicker table tr td.active.disabled:hover:active,
|
||||||
|
.datepicker table tr td.active.active,
|
||||||
|
.datepicker table tr td.active:hover.active,
|
||||||
|
.datepicker table tr td.active.disabled.active,
|
||||||
|
.datepicker table tr td.active.disabled:hover.active,
|
||||||
|
.datepicker table tr td.active.disabled,
|
||||||
|
.datepicker table tr td.active:hover.disabled,
|
||||||
|
.datepicker table tr td.active.disabled.disabled,
|
||||||
|
.datepicker table tr td.active.disabled:hover.disabled,
|
||||||
|
.datepicker table tr td.active[disabled],
|
||||||
|
.datepicker table tr td.active:hover[disabled],
|
||||||
|
.datepicker table tr td.active.disabled[disabled],
|
||||||
|
.datepicker table tr td.active.disabled:hover[disabled] {
|
||||||
|
background-color: #5ccdde;
|
||||||
|
}
|
||||||
|
.datepicker table tr td.active:active,
|
||||||
|
.datepicker table tr td.active:hover:active,
|
||||||
|
.datepicker table tr td.active.disabled:active,
|
||||||
|
.datepicker table tr td.active.disabled:hover:active,
|
||||||
|
.datepicker table tr td.active.active,
|
||||||
|
.datepicker table tr td.active:hover.active,
|
||||||
|
.datepicker table tr td.active.disabled.active,
|
||||||
|
.datepicker table tr td.active.disabled:hover.active {
|
||||||
|
background-color: #003399 \9;
|
||||||
|
}
|
||||||
|
.datepicker table tr td span {
|
||||||
|
display: block;
|
||||||
|
width: 23%;
|
||||||
|
height: 54px;
|
||||||
|
line-height: 54px;
|
||||||
|
float: left;
|
||||||
|
margin: 1%;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.datepicker table tr td span:hover {
|
||||||
|
background: #eeeeee;
|
||||||
|
}
|
||||||
|
.datepicker table tr td span.disabled,
|
||||||
|
.datepicker table tr td span.disabled:hover {
|
||||||
|
background: none;
|
||||||
|
color: #999999;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.datepicker table tr td span.active,
|
||||||
|
.datepicker table tr td span.active:hover,
|
||||||
|
.datepicker table tr td span.active.disabled,
|
||||||
|
.datepicker table tr td span.active.disabled:hover {
|
||||||
|
background-color: #006dcc;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.datepicker table tr td span.active:hover,
|
||||||
|
.datepicker table tr td span.active:hover:hover,
|
||||||
|
.datepicker table tr td span.active.disabled:hover,
|
||||||
|
.datepicker table tr td span.active.disabled:hover:hover,
|
||||||
|
.datepicker table tr td span.active:active,
|
||||||
|
.datepicker table tr td span.active:hover:active,
|
||||||
|
.datepicker table tr td span.active.disabled:active,
|
||||||
|
.datepicker table tr td span.active.disabled:hover:active,
|
||||||
|
.datepicker table tr td span.active.active,
|
||||||
|
.datepicker table tr td span.active:hover.active,
|
||||||
|
.datepicker table tr td span.active.disabled.active,
|
||||||
|
.datepicker table tr td span.active.disabled:hover.active,
|
||||||
|
.datepicker table tr td span.active.disabled,
|
||||||
|
.datepicker table tr td span.active:hover.disabled,
|
||||||
|
.datepicker table tr td span.active.disabled.disabled,
|
||||||
|
.datepicker table tr td span.active.disabled:hover.disabled,
|
||||||
|
.datepicker table tr td span.active[disabled],
|
||||||
|
.datepicker table tr td span.active:hover[disabled],
|
||||||
|
.datepicker table tr td span.active.disabled[disabled],
|
||||||
|
.datepicker table tr td span.active.disabled:hover[disabled] {
|
||||||
|
background-color: #5ccdde;
|
||||||
|
}
|
||||||
|
.datepicker table tr td span.active:active,
|
||||||
|
.datepicker table tr td span.active:hover:active,
|
||||||
|
.datepicker table tr td span.active.disabled:active,
|
||||||
|
.datepicker table tr td span.active.disabled:hover:active,
|
||||||
|
.datepicker table tr td span.active.active,
|
||||||
|
.datepicker table tr td span.active:hover.active,
|
||||||
|
.datepicker table tr td span.active.disabled.active,
|
||||||
|
.datepicker table tr td span.active.disabled:hover.active {
|
||||||
|
background-color: #003399 \9;
|
||||||
|
}
|
||||||
|
.datepicker table tr td span.old,
|
||||||
|
.datepicker table tr td span.new {
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
.datepicker th.datepicker-switch {
|
||||||
|
width: 145px;
|
||||||
|
}
|
||||||
|
.datepicker .datepicker-switch,
|
||||||
|
.datepicker .prev,
|
||||||
|
.datepicker .next,
|
||||||
|
.datepicker tfoot tr th {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.datepicker thead tr:first-child th,
|
||||||
|
.datepicker tfoot tr th {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.datepicker thead tr:first-child th:hover,
|
||||||
|
.datepicker tfoot tr th:hover {
|
||||||
|
background: #eeeeee;
|
||||||
|
}
|
||||||
|
.datepicker .cw {
|
||||||
|
font-size: 10px;
|
||||||
|
width: 12px;
|
||||||
|
padding: 0 2px 0 5px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.datepicker thead tr:first-child th.cw {
|
||||||
|
cursor: default;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 7.7 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
@charset "UTF-8";html{font-size:62.5%;font-family:'helvetica neue',tahoma,arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,hr{margin:0;padding:0}body{line-height:1.333;font-size:12px}h1,h2,h3,h4,h5,h6{font-size:100%;font-family:arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}input,textarea,select,button{font-size:12px;font-weight:normal}input[type="button"],input[type="submit"],select,button{cursor:pointer}table{border-collapse:collapse;border-spacing:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}li{list-style:none}caption,th{text-align:left}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}fieldset,img,a img,iframe{border-width:0;border-style:none}img{-ms-interpolation-mode:bicubic}textarea{overflow-y:auto}legend{color:#000}a:link,a:visited{text-decoration:none}hr{height:0}label{cursor:pointer}.clearfix:after{content:"\200B";display:block;height:0;clear:both}.clearfix{*zoom:1}a{color:#328CE5}a:hover{color:#2b8ae8;text-decoration:none}a.hit{color:#C06C6C}a:focus{outline:none}.hit{color:#8DC27E}.txt_auxiliary{color:#A2A2A2}.clear{*zoom:1}.clear:before,.clear:after{content:"";display:table}.clear:after{clear:both}body,.body{background:#f7f7f7;height:100%}.mod-title{height:60px;line-height:60px;text-align:center;border-bottom:1px solid #ddd;background:#fff}.mod-title .ico-wechat{display:inline-block;width:41px;height:36px;background:url("./jd-pay.png") 0 -115px no-repeat;vertical-align:middle;margin-right:7px}.mod-title .text{font-size:20px;color:#333;font-weight:normal;vertical-align:middle}.mod-ct{width:610px;padding:0 135px;margin:0 auto;margin-top:15px;background:#fff url("./wave.png") top center repeat-x;text-align:center;color:#333;border:1px solid #e5e5e5;border-top:none}.mod-ct .order{font-size:20px;padding-top:30px}.mod-ct .amount{font-size:48px;margin-top:20px}.mod-ct .qr-image{margin-top:30px}.mod-ct .qr-image img{width:230px;height:230px}.mod-ct .detail{margin-top:60px;padding-top:25px}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./jd-pay.png") -25px -100px no-repeat}.mod-ct .detail .detail-ct{display:none;font-size:14px;text-align:right;line-height:28px}.mod-ct .detail .detail-ct dt{float:left}.mod-ct .detail-open{border-top:1px solid #e5e5e5}.mod-ct .detail .arrow{padding:6px 34px;border:1px solid #e5e5e5}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./jd-pay.png") -25px -100px no-repeat}.mod-ct .detail-open .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./jd-pay.png") 0 -100px no-repeat}.mod-ct .detail-open .detail-ct{display:block}.mod-ct .tip{margin-top:40px;border-top:1px dashed #e5e5e5;padding:30px 0;position:relative}.mod-ct .tip .ico-scan{display:inline-block;width:56px;height:55px;background:url("./jd-pay.png") 0 0 no-repeat;vertical-align:middle;*display:inline;*zoom:1}.mod-ct .tip .tip-text{display:inline-block;vertical-align:middle;text-align:left;margin-left:23px;font-size:16px;line-height:28px;*display:inline;*zoom:1}.mod-ct .tip .dec{display:inline-block;width:22px;height:45px;background:url("./jd-pay.png") 0 -55px no-repeat;position:absolute;top:-23px}.mod-ct .tip .dec-left{background-position:0 -55px;left:-136px}.mod-ct .tip .dec-right{background-position:-25px -55px;right:-136px}.foot{text-align:center;margin:30px auto;color:#888888;font-size:12px;line-height:20px;font-family:"simsun"}.foot .link{color:#0071ce}
|
||||||
|
@media (max-width:768px){.mod-ct{width:100%;padding:0;border:0}
|
||||||
|
.mod-ct .tip .dec-right{display:none}
|
||||||
|
.mod-ct .detail{margin-top:30px}
|
||||||
|
.mod-ct .detail .detail-ct{padding:0 19px;margin-bottom:19px}
|
||||||
|
}
|
||||||
@@ -0,0 +1,236 @@
|
|||||||
|
@charset "utf-8";
|
||||||
|
|
||||||
|
/* 导航 */
|
||||||
|
.navBD12{ border-bottom:1px solid #89c1ed;}
|
||||||
|
.nav12{ height:60px; padding-top:14px;}
|
||||||
|
.nav12 img{ max-height:100%;}
|
||||||
|
.nav12-left{ height:100%;float:left;}
|
||||||
|
.nav12-right{ height:100%;float:right;padding-top: 7px;font-size: 22px;color: #6586ff;}
|
||||||
|
.show-xs{ display:none;}
|
||||||
|
|
||||||
|
/* 订单金额 */
|
||||||
|
.order-amount12{ width:1010px; height:88px; padding:20px 35px; background:#fff; margin-top:35px;}
|
||||||
|
.order-amount12 span{ font-size:16px; color:#434343;}
|
||||||
|
.order-amount12-left{ float:left;}
|
||||||
|
.order-amount12-left span{ line-height:30px;}
|
||||||
|
.order-amount12-right{ float:right; line-height:50px;}
|
||||||
|
.order-amount12-right strong{ font-size:30px; color:#e94832; font-weight:normal;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*支付方式*/
|
||||||
|
.PayMethod12{ width:1010px; padding:35px 35px; background:#fff; margin-top:36px;}
|
||||||
|
.PayMethod12 h2{ font-size:16px; height:30px; line-height:30px; margin-bottom:20px;}
|
||||||
|
.PayMethod12 ul{ overflow:hidden;}
|
||||||
|
.PayMethod12 ul li{ width:120px; height:38px; padding: 20px 0 0 30px; margin-bottom:35px; margin-right:60px; float:left; cursor:pointer; border:1px solid #d8d8d8;}
|
||||||
|
.PayMethod12 ul li.active{ border-color:#1a8ae1;}
|
||||||
|
.PayMethod12 ul li img{ float:left; margin-right:16px; width:20px; height:20px; }
|
||||||
|
.PayMethod12 ul li span{ float:left; position:relative; color:#323232;}
|
||||||
|
.immediate_pay{ display:block;
|
||||||
|
width:165px;
|
||||||
|
height:54px;
|
||||||
|
line-height:54px;
|
||||||
|
background:#1a8ae1;
|
||||||
|
font-size:18px;
|
||||||
|
color:#fff;
|
||||||
|
text-align:center;
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
.immediate_button{ display:block;
|
||||||
|
width:165px;
|
||||||
|
height:54px;
|
||||||
|
line-height:54px;
|
||||||
|
background:#1a8ae1;
|
||||||
|
font-size:18px;
|
||||||
|
color:#fff;
|
||||||
|
text-align:center;
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
/*立即支付*/
|
||||||
|
.immediate-pay12{ height:54px; background:#fff; margin-top:40px;}
|
||||||
|
.immediate-pay12-left{ float:left; line-height:50px; margin-left:35px;}
|
||||||
|
.immediate-pay12-left a { font-size: 18px;color: #1a8ae1;cursor: pointer;}
|
||||||
|
.immediate-pay12-right{ float:right;}
|
||||||
|
.immediate-pay12-right span{ float:left; margin:14px 24px 0 0;}
|
||||||
|
.immediate-pay12-right span strong{ font-size:18px; color:#e94832;}
|
||||||
|
.immediate-pay12-right .immediate_pay{ float:right;}
|
||||||
|
|
||||||
|
/*充值卡*/
|
||||||
|
.card12{ padding:24px 35px; width:1010px; background:#fff; margin-top:36px;}
|
||||||
|
.card12-type{ overflow:hidden; height:74px; border-bottom:1px solid #dedede;}
|
||||||
|
.card12-type li{ width:141px; height:46px; line-height:46px; text-align:center; border:1px solid #dedede; float:left; margin-right:48px; cursor:pointer;}
|
||||||
|
.card12-type li.active{ border-color:#1a8ae1;}
|
||||||
|
.card12-money{ overflow:hidden; margin-top:22px; height:74px; border-bottom:1px solid #dedede;}
|
||||||
|
.card12-money li{ width:76px; height:46px; line-height:46px; text-align:center; border:1px solid #dedede; float:left; margin-right:48px; cursor:pointer;}
|
||||||
|
.card12-money li.active02{ border-color:#1a8ae1;}
|
||||||
|
.card12-tips{ font-size:14px; line-height:50px;}
|
||||||
|
.card12-tips span{ color:#cc2023;}
|
||||||
|
.card12-input{ margin-top:10px;}
|
||||||
|
.card12-input li{ overflow:hidden; margin-bottom:25px;}
|
||||||
|
.card12-input li span{ float:left; font-size:20px; width:80px; line-height:36px;}
|
||||||
|
.card12-input li input{ float:left; width:260px; padding-left:13px; height:36px; line-height:36px; border:1px solid #d8d8d8;}
|
||||||
|
|
||||||
|
/*微信支付*/
|
||||||
|
.wechart-pay12{ padding:35px 318px; width:444px; overflow:hidden;}
|
||||||
|
.wechart-pay12 dl{ float:left;}
|
||||||
|
.wechart-pay12 dl p{ font-size:14px; color:#989898; text-align:center; height:20px}
|
||||||
|
.wechart-pay12-moblie{ float:right; width:170px; margin-top:16px;}
|
||||||
|
.wechart-pay12-moblie img{ width:100%;}
|
||||||
|
|
||||||
|
/* 产品体验首页 */
|
||||||
|
.product_experience12 header{ background:url(../images/indexbg12.jpg) no-repeat; height:282px; padding-top:7rem; background-size:100%;}
|
||||||
|
.product_experience12 .opTit01{ font-size:32px; color:#fff; margin-top:0;}
|
||||||
|
.product_experience12 .Internet_increment_service10{ position:absolute; top:220px; left:50%; margin-left:-540px;}
|
||||||
|
.product_experience12-menu{ height:140px; margin-bottom:70px;}
|
||||||
|
.product_experience12-menu ol li{ height:140px;}
|
||||||
|
.product_experience12-menu ol li dl{ width:245px; margin:0 auto; overflow:hidden;}
|
||||||
|
.product_experience12-menu ol li dl dt{ float:left;}
|
||||||
|
.product_experience12-menu ol li dl dd{ float:right; line-height:140px;}
|
||||||
|
.product_experience12-menu ol li .dt01{ width:50px; height:57px; margin-top:42px; background:url(../images/product_experience12-h5.png) no-repeat;}
|
||||||
|
.product_experience12-menu ol li .dt02{ width:56px; height:49px; margin-top:42px; background:url(../images/product_experience12-pc.png) no-repeat;}
|
||||||
|
.product_experience12-menu ol li .dt03{ width:57px; height:57px; margin-top:42px; background:url(../images/product_experience12-app.png) no-repeat;}
|
||||||
|
.product_experience12-menu ol li.active .dt01{ width:50px; height:57px; background:url(../images/product_experience12-h5color.png) no-repeat;}
|
||||||
|
.product_experience12-menu ol li.active .dt02{ width:56px; height:49px; background:url(../images/product_experience12-pccolor.png) no-repeat;}
|
||||||
|
.product_experience12-menu ol li.active .dt03{ width:57px; height:57px; background:url(../images/product_experience12-appcolor.png) no-repeat;}
|
||||||
|
.product_experience12-menu{ box-shadow:0 5px 4px 1px #ebe9e9;}
|
||||||
|
.product_experience12-menu ol li.active dd{ color:#1a8ae1;}
|
||||||
|
.product_experience12-menu ol li.active{ background-color:transparent;}
|
||||||
|
.product_experience12-main01{ width:625px; margin:0 auto; display:none;}
|
||||||
|
.product_experience12-main01 dl{ overflow:hidden;}
|
||||||
|
.product_experience12-main01 dl dt{ float:left;}
|
||||||
|
.product_experience12-main01 dl dd{ float:right;}
|
||||||
|
.product_experience12-main01 dl dd h2{ font-size:22px; margin-bottom:12px;}
|
||||||
|
.product_experience12-main01 dl dd h3{ font-size:24px;}
|
||||||
|
.product_experience12-main01 dl dd p{ font-size:14px; color:#a1a1a1;}
|
||||||
|
.product_experience12-main01 .immediate_pay{ width:135px; height:42px; line-height:42px; color:#fff;}
|
||||||
|
.product_experience12-main01 .immediate_button{ width:135px; height:42px; line-height:42px;}
|
||||||
|
.product_experience12-main01 .immediate_pay:hover{ color:#fff;}
|
||||||
|
.product_experience12-main01 .immediate_button:hover{ color:#fff;}
|
||||||
|
.product_experience12-main02{ width:710px; text-align:center;}
|
||||||
|
.product_experience12-main02 dl{ width:345px;}
|
||||||
|
.product_experience12-main02 dl.andr{ float:left;}
|
||||||
|
.product_experience12-main02 dl.ios{ float:right;}
|
||||||
|
.product_experience12-main02 dl dt{ float:none;}
|
||||||
|
.product_experience12-main02 dl dd{ float:none; font-size:18px; color:#a1a1a1; line-height:60px;}
|
||||||
|
.product_experience12-main03{ width:320px; margin:0 auto; text-align:center;}
|
||||||
|
.product_experience12-main03 dl dt{ float:none;}
|
||||||
|
.product_experience12-main03 dl dd{ float:none;}
|
||||||
|
|
||||||
|
/*支付成功&&失败*/
|
||||||
|
.paystument12{ padding:25px 360px; width:360px; background:#fff; text-align:center; display:none;}
|
||||||
|
.paystument12 h3{ font-size:18px; margin-top:20px;}
|
||||||
|
.paystument12 h3 span{ font-size:18px;}
|
||||||
|
.paystument12 h3 a{ font-size:18px; color:#e84832;}
|
||||||
|
|
||||||
|
.paystument13{ padding:1px 360px; width:360px; background:#fff; text-align:left; display:none;}
|
||||||
|
.paystument12 h4{ font-size:16px; margin-top:20px;}
|
||||||
|
.paystument12 h4 span{ font-size:16px;}
|
||||||
|
.paystument12 h4 a{ font-size:16px; color:#e84832;}
|
||||||
|
|
||||||
|
.Return_experienceBtn{width:150px;height:45px;line-height:45px; margin:195px auto 270px;font-size:16px;}
|
||||||
|
|
||||||
|
/*弹窗*/
|
||||||
|
.pay_sure12{ width:100%; height:100%; position:fixed; left:0; top:0; z-index:99999; background:rgba(0%,0%,0%,0.3); display:none;}
|
||||||
|
.pay_sure12 .pay_sure12-main{width:400px;
|
||||||
|
height:220px;
|
||||||
|
position:absolute;
|
||||||
|
left:50%;
|
||||||
|
margin-left:-200px;
|
||||||
|
top:15%;
|
||||||
|
background:#fff;
|
||||||
|
box-sizing:border-box;
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
.pay_sure12-main h2{ height:45px; line-height:45px; margin-bottom:20px; text-align:center; background:#f4f4f4; font-size:18px;}
|
||||||
|
.pay_sure12-main h3,.pay_sure12-main p{ font-size:12px; color:#989898;}
|
||||||
|
.pay_sure12-main .h3-01{ font-size:15px; color:#323232;}
|
||||||
|
.pay_sure12-main h3 strong{ color:#989898;font-size:12px;font-weight:normal;}
|
||||||
|
.pay_sure12-btngroup{ width:250px; margin:20px auto 10px; overflow:hidden;}
|
||||||
|
.pay_sure12-btngroup a.immediate_pay{ float:left;}
|
||||||
|
.pay_sure12-btngroup a.immediate_button{ float:left;}
|
||||||
|
.pay_sure12-btngroup a.immediate_payComplate{ margin-right:50px; width:100px; height:34px; line-height:34px;font-size:13px;}
|
||||||
|
.pay_sure12-btngroup a.immediate_payChange{ background-color:#f4f4f4; color:#323232; width:100px; height:34px; line-height:34px;font-size:13px;}
|
||||||
|
|
||||||
|
/*底部*/
|
||||||
|
.footer12{ text-align:center; color:#cbcbcb; margin-top:50px; margin-bottom:50px;clear:both;}
|
||||||
|
|
||||||
|
|
||||||
|
/*首页弹窗*/
|
||||||
|
.mt_agree{ width:100%; height:100%; position:fixed; left:0; top:0; z-index:99999; background:rgba(0%,0%,0%,0.3); display:none;}
|
||||||
|
.mt_agree .mt_agree_main{width:500px;
|
||||||
|
margin-left:-250px;
|
||||||
|
height:auto;
|
||||||
|
position:absolute;
|
||||||
|
left:50%;
|
||||||
|
top:15%;
|
||||||
|
background:#fff;
|
||||||
|
padding:2%;
|
||||||
|
box-sizing:border-box; }
|
||||||
|
.mt_agree h2{ text-align:center; font-size:20px; line-height:50px; border-bottom:1px solid #0568a4;}
|
||||||
|
.mt_agree p{ font-size:16px; text-align:center; line-height:50px;}
|
||||||
|
.mt_agree a.close_btn{ display:block;
|
||||||
|
width:30%;
|
||||||
|
height:50px;
|
||||||
|
line-height:50px;
|
||||||
|
margin:20px auto;
|
||||||
|
background:#0568a4;
|
||||||
|
color:#fff;
|
||||||
|
font-size:18px;
|
||||||
|
text-align:center;
|
||||||
|
text-decoration:none;
|
||||||
|
border-radius:30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@media screen and (max-height:900px){
|
||||||
|
.navBD12{ margin-bottom:16px;}
|
||||||
|
.card12{ margin-top:0; padding:20px 35px;}
|
||||||
|
.immediate-pay12{ margin-top:16px;}
|
||||||
|
.order-amount12{ padding:16px 35px; margin-top:16px;}
|
||||||
|
.card12-input .card12-input-password{ margin-bottom:0;}
|
||||||
|
.PayMethod12{ margin-top:16px;}
|
||||||
|
.product_experience12-menu{ height:120px;}
|
||||||
|
.product_experience12-menu ol li{ height:120px;}
|
||||||
|
.product_experience12-menu ol li .dt01{ margin-top:32px;}
|
||||||
|
.product_experience12-menu ol li .dt02{ margin-top:32px;}
|
||||||
|
.product_experience12-menu ol li .dt03{ margin-top:32px;}
|
||||||
|
.product_experience12-menu ol li dl dd{ line-height:120px;}
|
||||||
|
.product_experience12 .Internet_increment_service10{ top:200px;}
|
||||||
|
.product_experience12 .opTit01{ margin-top:-10px;}
|
||||||
|
.product_experience12-menu{ margin-bottom:60px;}
|
||||||
|
.Return_experienceBtn{ margin:120px auto;}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width:768px){
|
||||||
|
.w1080{width:100%;}
|
||||||
|
.order-amount12{width:auto;}
|
||||||
|
.PayMethod12{width:auto;margin-top:0;}
|
||||||
|
.PayMethod12 ul li{margin-bottom:20px;}
|
||||||
|
.nav12-left{margin-left:16px;}
|
||||||
|
.nav12-left .hidden-xs{display:none;}
|
||||||
|
.nav12-right{float:left;margin-left:16px;}
|
||||||
|
.order-amount12-right{float:left;}
|
||||||
|
.PayMethod12 ul li{width:87%;float:none;}
|
||||||
|
.immediate-pay12-right{float:left;padding-left:15px;}
|
||||||
|
.PayMethod12 h2{clear:both;}
|
||||||
|
.show-lg{ display:none;}
|
||||||
|
.show-xs{ display:block;}
|
||||||
|
.wechart-pay12{width:100%; padding:16px;box-sizing:border-box;}
|
||||||
|
.wechart-pay12 dl{transform:scale(0.7)}
|
||||||
|
.wechart-pay12-moblie{width: 40%;margin-top: 50px;float:left;}
|
||||||
|
.card12{width:auto;clear:both;}
|
||||||
|
.card12-type{width:100%;}
|
||||||
|
.card12-type li{width:30%;margin-right:6px;font-size:14px;}
|
||||||
|
.card12-money{width:100%;height:150px;}
|
||||||
|
.card12-money li{ width:28%;margin:5px;}
|
||||||
|
.card12-tips{line-height:30px;}
|
||||||
|
.card12-input li input{width:90%;}
|
||||||
|
.immediate-pay12-right{margin:24px;}
|
||||||
|
.immediate_pay{width:120px;}
|
||||||
|
.immediate-pay12{height:auto;overflow:hidden;}
|
||||||
|
.paystument12{width:auto;padding:20px;box-sizing:border-box;}
|
||||||
|
.order-amount12{height:130px;margin-bottom:12px;}
|
||||||
|
.PayMethod12 ul li{ height:28px; padding: 10px 0 0 30px;}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 5.0 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
@charset "UTF-8";html{font-size:62.5%;font-family:'helvetica neue',tahoma,arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,hr{margin:0;padding:0}body{line-height:1.333;font-size:12px}h1,h2,h3,h4,h5,h6{font-size:100%;font-family:arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}input,textarea,select,button{font-size:12px;font-weight:normal}input[type="button"],input[type="submit"],select,button{cursor:pointer}table{border-collapse:collapse;border-spacing:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}li{list-style:none}caption,th{text-align:left}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}fieldset,img,a img,iframe{border-width:0;border-style:none}img{-ms-interpolation-mode:bicubic}textarea{overflow-y:auto}legend{color:#000}a:link,a:visited{text-decoration:none}hr{height:0}label{cursor:pointer}.clearfix:after{content:"\200B";display:block;height:0;clear:both}.clearfix{*zoom:1}a{color:#328CE5}a:hover{color:#2b8ae8;text-decoration:none}a.hit{color:#C06C6C}a:focus{outline:none}.hit{color:#8DC27E}.txt_auxiliary{color:#A2A2A2}.clear{*zoom:1}.clear:before,.clear:after{content:"";display:table}.clear:after{clear:both}body,.body{background:#f7f7f7;height:100%}.mod-title{height:60px;line-height:60px;text-align:center;border-bottom:1px solid #ddd;background:#fff}.mod-title .ico-wechat{display:inline-block;width:41px;height:36px;background:url("./mqq-pay.png") 0 -115px no-repeat;vertical-align:middle;margin-right:7px}.mod-title .text{font-size:20px;color:#333;font-weight:normal;vertical-align:middle}.mod-ct{width:610px;padding:0 135px;margin:0 auto;margin-top:15px;background:#fff url("./wave.png") top center repeat-x;text-align:center;color:#333;border:1px solid #e5e5e5;border-top:none}.mod-ct .order{font-size:20px;padding-top:30px}.mod-ct .amount{font-size:48px;margin-top:20px}.mod-ct .qr-image{margin-top:30px}.mod-ct .qr-image img{width:230px;height:230px}.mod-ct .detail{margin-top:60px;padding-top:25px}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./mqq-pay.png") -25px -100px no-repeat}.mod-ct .detail .detail-ct{display:none;font-size:14px;text-align:right;line-height:28px}.mod-ct .detail .detail-ct dt{float:left}.mod-ct .detail-open{border-top:1px solid #e5e5e5}.mod-ct .detail .arrow{padding:6px 34px;border:1px solid #e5e5e5}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./mqq-pay.png") -25px -100px no-repeat}.mod-ct .detail-open .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./mqq-pay.png") 0 -100px no-repeat}.mod-ct .detail-open .detail-ct{display:block}.mod-ct .tip{margin-top:40px;border-top:1px dashed #e5e5e5;padding:30px 0;position:relative}.mod-ct .tip .ico-scan{display:inline-block;width:56px;height:55px;background:url("./mqq-pay.png") 0 0 no-repeat;vertical-align:middle;*display:inline;*zoom:1}.mod-ct .tip .tip-text{display:inline-block;vertical-align:middle;text-align:left;margin-left:23px;font-size:16px;line-height:28px;*display:inline;*zoom:1}.mod-ct .tip .dec{display:inline-block;width:22px;height:45px;background:url("./mqq-pay.png") 0 -55px no-repeat;position:absolute;top:-23px}.mod-ct .tip .dec-left{background-position:0 -55px;left:-136px}.mod-ct .tip .dec-right{background-position:-25px -55px;right:-136px}.foot{text-align:center;margin:30px auto;color:#888888;font-size:12px;line-height:20px;font-family:"simsun"}.foot .link{color:#0071ce}
|
||||||
|
@media (max-width:768px){.mod-ct{width:100%;padding:0;border:0}
|
||||||
|
.mod-ct .tip .dec-right{display:none}
|
||||||
|
.mod-ct .detail{margin-top:30px}
|
||||||
|
.mod-ct .detail .detail-ct{padding:0 19px;margin-bottom:19px}
|
||||||
|
}
|
||||||
@@ -0,0 +1,116 @@
|
|||||||
|
@charset "utf-8";
|
||||||
|
/* CSS Document */
|
||||||
|
|
||||||
|
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */ dl, dt, dd, ul, ol, li, /* list elements 列表元素 */ pre, /* text formatting elements 文本格式元素 */ fieldset, lengend, button, input, textarea, /* form elements 表单元素 */ th, td { /* table elements 表格元素 */ margin: 0; padding: 0; }
|
||||||
|
html,body{ width:100%; height:100%; color:#6e6e6e; font-family:'微软雅黑'}
|
||||||
|
/* 设置默认字体 */
|
||||||
|
body, button, input, select, textarea { /* for ie */ /*font: 12px/1 Tahoma, Helvetica, Arial, "宋体", sans-serif;*/
|
||||||
|
font: 14px/1 Tahoma, Helvetica, Arial, "微软雅黑", sans-serif,; /* 用 ascii 字符表示,使得在任何编码下都无问题 */ }
|
||||||
|
h1 { font-size: 18px; /* 18px / 12px = 1.5 */ font-family:'微软雅黑'}
|
||||||
|
h2 { font-size: 24px; font-weight:normal; color:#323232; font-family:'微软雅黑'}
|
||||||
|
h3 { font-size: 14px; font-weight:normal; font-family:'微软雅黑' }
|
||||||
|
h4, h5, h6 { font-size: 100%; font-weight:normal; font-family:'微软雅黑' }
|
||||||
|
p{ font-size:14px; line-height:34px; font-family:'微软雅黑'}/* 段落默认字号和行高 */
|
||||||
|
address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */
|
||||||
|
code, kbd, pre, samp, tt { font-family: "Courier New", Courier, monospace; } /* 统一等宽字体 */
|
||||||
|
small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */
|
||||||
|
/* 重置列表元素 */
|
||||||
|
ul, ol { list-style: none; font-family:'微软雅黑' }
|
||||||
|
select{ border-style:none;}
|
||||||
|
/* 重置文本格式元素 */
|
||||||
|
a { text-decoration: none; color:#6e6e6e; font-size:14px; outline:none; font-family:'微软雅黑'}
|
||||||
|
span{ font-size:14px; font-family:'微软雅黑'}
|
||||||
|
a:hover { text-decoration: none; }
|
||||||
|
abbr[title], acronym[title] { /* 注:1.ie6 不支持 abbr; 2.这里用了属性选择符,ie6 下无效果 */ border-bottom: 1px dotted; cursor: help; }
|
||||||
|
q:before, q:after { content: ''; }
|
||||||
|
/* 重置表单元素 */
|
||||||
|
input{ border:none;}
|
||||||
|
legend { color: #000; } /* for ie6 */
|
||||||
|
fieldset, img { border: none; } /* img 搭车:让链接里的 img 无边框 */
|
||||||
|
/* 注:optgroup 无法扶正 */
|
||||||
|
button, input, select, textarea { font-size: 100%; /* 使得表单元素在 ie 下能继承字体大小 */ }
|
||||||
|
/* 重置表格元素 */
|
||||||
|
table { border-collapse: collapse; border-spacing: 0; width:100%;}
|
||||||
|
/* 重置 hr */
|
||||||
|
hr { border: none; height: 1px; }
|
||||||
|
/* 让非ie浏览器默认也显示垂直滚动条,防止因滚动条引起的闪烁 */
|
||||||
|
html { overflow-y: scroll;}
|
||||||
|
*:focus {outline: none;}
|
||||||
|
/* 版心 */
|
||||||
|
.w100{ width:100%; /*min-width:1080px;*/ clear:both;}
|
||||||
|
.w1200{ width:1200px; margin:0 auto;}
|
||||||
|
.w1300{ width:1300px; margin:0 auto;}
|
||||||
|
.w1000{ width:1000px; margin:0 auto;}
|
||||||
|
.w1080{ width:1080px; margin:0 auto;}
|
||||||
|
/*常用样式*/
|
||||||
|
.fl{ float:left;}
|
||||||
|
.fr{ float:right;}
|
||||||
|
.tc{ text-align:center;}
|
||||||
|
.tr{ text-align:right;}
|
||||||
|
.tl{ text-align:left;}
|
||||||
|
.f12{ font-size:12px;}
|
||||||
|
.f14{ font-size:14px;}
|
||||||
|
.f15{ font-size:15px;}
|
||||||
|
.f16{ font-size:16px;}
|
||||||
|
.f18{ font-size:18px;}
|
||||||
|
.f20{ font-size:20px; color:#323232;}
|
||||||
|
.f22{ font-size:22px;}
|
||||||
|
.f24{ font-size:24px; color:#323232;}
|
||||||
|
.f36{ font-size:36px; color:#323232;}
|
||||||
|
.fc{ color:#d2151a;}
|
||||||
|
.l24{ line-height:24px;}
|
||||||
|
.f30{ font-size:30px; color:#323232;}
|
||||||
|
.f32{ font-size:32px; color:#323232;}
|
||||||
|
.l36{ line-height:36px;}
|
||||||
|
.t2{ text-indent:2em;}
|
||||||
|
.mt14{ margin-top:14px;}
|
||||||
|
.mt20{ margin-top:20px;}
|
||||||
|
.t_ul{ text-decoration:underline;}
|
||||||
|
.lh24{ line-height:24px;}
|
||||||
|
.lh32{ line-height:32px;}
|
||||||
|
.blue{ color:#0568a4;}
|
||||||
|
.blue_ul{ color:#0568a4; font-size:16px; text-decoration:underline;}
|
||||||
|
.blue_ul02{ color:#fff; font-size:16px; text-decoration:underline;}
|
||||||
|
.red{ color:#e20000; font-size:14px;}
|
||||||
|
.ma{ margin:0 auto;}
|
||||||
|
select {
|
||||||
|
/*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/
|
||||||
|
border: solid 1px #f8f9fb;
|
||||||
|
|
||||||
|
/*很关键:将默认的select选择框样式清除*/
|
||||||
|
appearance:none;
|
||||||
|
-moz-appearance:none;
|
||||||
|
-webkit-appearance:none;
|
||||||
|
|
||||||
|
/*在选择框的最右侧中间显示小箭头图片*/
|
||||||
|
background:url(../images/arrawdown.png) no-repeat scroll 90% center;
|
||||||
|
|
||||||
|
|
||||||
|
/*为下拉小箭头留出一点位置,避免被文字覆盖*/
|
||||||
|
padding-right: 14px;
|
||||||
|
}/* 重置文本格式元素 */
|
||||||
|
.mt_userMessage select{ background:url(../images/arrawdown02.png) no-repeat scroll right center;}
|
||||||
|
|
||||||
|
/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
|
||||||
|
::-webkit-scrollbar
|
||||||
|
{
|
||||||
|
width: 6px;
|
||||||
|
height: 6px;
|
||||||
|
background-color: #F5F5F5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*定义滚动条轨道 内阴影+圆角*/
|
||||||
|
::-webkit-scrollbar-track
|
||||||
|
{
|
||||||
|
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: #F5F5F5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*定义滑块 内阴影+圆角*/
|
||||||
|
::-webkit-scrollbar-thumb
|
||||||
|
{
|
||||||
|
border-radius: 10px;
|
||||||
|
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
|
||||||
|
background-color: #ccc;
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
@@ -0,0 +1,10 @@
|
|||||||
|
@charset "UTF-8";html{font-size:62.5%;font-family:'helvetica neue',tahoma,arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,hr{margin:0;padding:0}body{line-height:1.333;font-size:12px}h1,h2,h3,h4,h5,h6{font-size:100%;font-family:arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}input,textarea,select,button{font-size:12px;font-weight:normal}input[type="button"],input[type="submit"],select,button{cursor:pointer}table{border-collapse:collapse;border-spacing:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}li{list-style:none}caption,th{text-align:left}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}fieldset,img,a img,iframe{border-width:0;border-style:none}img{-ms-interpolation-mode:bicubic}textarea{overflow-y:auto}legend{color:#000}a:link,a:visited{text-decoration:none}hr{height:0}label{cursor:pointer}.clearfix:after{content:"\200B";display:block;height:0;clear:both}.clearfix{*zoom:1}a{color:#328CE5}a:hover{color:#2b8ae8;text-decoration:none}a.hit{color:#C06C6C}a:focus{outline:none}.hit{color:#8DC27E}.txt_auxiliary{color:#A2A2A2}.clear{*zoom:1}.clear:before,.clear:after{content:"";display:table}.clear:after{clear:both}body,.body{background:#f7f7f7;height:100%}.mod-title{height:60px;line-height:60px;text-align:center;border-bottom:1px solid #ddd;background:#fff}.mod-title .ico-wechat{display:inline-block;width:41px;height:36px;background:url("./wechat-pay.png") 0 -115px no-repeat;vertical-align:middle;margin-right:7px}.mod-title .text{font-size:20px;color:#333;font-weight:normal;vertical-align:middle}.mod-ct{width:610px;padding:0 135px;margin:0 auto;margin-top:15px;background:#fff url("./wave.png") top center repeat-x;text-align:center;color:#333;border:1px solid #e5e5e5;border-top:none}.mod-ct .order{font-size:20px;padding-top:30px}.mod-ct .amount{font-size:48px;margin-top:20px}.mod-ct .qr-image{margin-top:30px}.mod-ct .qr-image img{width:230px;height:230px}.mod-ct .detail{margin-top:60px;padding-top:25px}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./wechat-pay.png") -25px -100px no-repeat}.mod-ct .detail .detail-ct{display:none;font-size:14px;text-align:right;line-height:28px}.mod-ct .detail .detail-ct dt{float:left}.mod-ct .detail-open{border-top:1px solid #e5e5e5}.mod-ct .detail .arrow{padding:6px 34px;border:1px solid #e5e5e5}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./wechat-pay.png") -25px -100px no-repeat}.mod-ct .detail-open .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./wechat-pay.png") 0 -100px no-repeat}.mod-ct .detail-open .detail-ct{display:block}.mod-ct .tip{margin-top:40px;border-top:1px dashed #e5e5e5;padding:30px 0;position:relative}.mod-ct .tip .ico-scan{display:inline-block;width:56px;height:55px;background:url("./wechat-pay.png") 0 0 no-repeat;vertical-align:middle;*display:inline;*zoom:1}.mod-ct .tip .tip-text{display:inline-block;vertical-align:middle;text-align:left;margin-left:23px;font-size:16px;line-height:28px;*display:inline;*zoom:1}.mod-ct .tip .dec{display:inline-block;width:22px;height:45px;background:url("./wechat-pay.png") 0 -55px no-repeat;position:absolute;top:-23px}.mod-ct .tip .dec-left{background-position:0 -55px;left:-136px}.mod-ct .tip .dec-right{background-position:-25px -55px;right:-136px}.foot{text-align:center;margin:30px auto;color:#888888;font-size:12px;line-height:20px;font-family:"simsun"}.foot .link{color:#0071ce}
|
||||||
|
@media (max-width:768px){.mod-ct{width:100%;padding:0;border:0}
|
||||||
|
.mod-ct .tip .dec-right{display:none}
|
||||||
|
.mod-ct .detail{margin-top:30px}
|
||||||
|
.mod-ct .detail .detail-ct{padding:0 19px;margin-bottom:19px}
|
||||||
|
}
|
||||||
|
.mobile-btn{margin-top:30px}
|
||||||
|
.mobile-tip{color:red;font-size:14px;max-width:92%;margin: 0 auto;}
|
||||||
|
.mobile-btn .mobile-tip{margin-bottom:30px;padding:15px 7px;border:1px dashed #06ae56;}
|
||||||
|
a.btn-copy-link{padding:10px 30px;cursor:pointer;color:#06ae56;background-color:#f2f2f2;font-size:20px;font-weight:700;}
|
||||||
@@ -0,0 +1,803 @@
|
|||||||
|
#body {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree * {
|
||||||
|
font-size: 14px;
|
||||||
|
font-family: "Microsoft Yahei", Verdana, Simsun, "Segoe UI Web Light", "Segoe UI Light", "Segoe UI Web Regular", "Segoe UI", "Segoe UI Symbol", "Helvetica Neue", Arial
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree {
|
||||||
|
padding: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li ul {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
background-color: #fafafa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li {
|
||||||
|
line-height: 32px;
|
||||||
|
padding-left: 1em
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li a {
|
||||||
|
width: 100%;
|
||||||
|
height: 32px;
|
||||||
|
padding-top: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
color: #666;
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li a::before {
|
||||||
|
content: " ";
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
user-select: none;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li a.curSelectedNode::before {
|
||||||
|
background: #f1f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li a.curSelectedNode::after {
|
||||||
|
content: ' ';
|
||||||
|
display: block;
|
||||||
|
width: 4px;
|
||||||
|
float: right;
|
||||||
|
background-color: #5FB878;
|
||||||
|
height: 32px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li a:hover::before {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li a>span {
|
||||||
|
position: relative
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li.level0>a {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #5FB878;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li a span.button.switch {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li a span.button.noline_docu {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree.showIcon li a span.button.switch {
|
||||||
|
visibility: visible
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li a.curSelectedNode {
|
||||||
|
border: 0;
|
||||||
|
height: 32px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #5FB878;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li span {
|
||||||
|
line-height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li span.button {
|
||||||
|
margin-top: -7px;
|
||||||
|
background-image: url("../images/left_menuForOutLook.png");
|
||||||
|
*background-image: url("../images/left_menuForOutLook.gif")
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li span.button.switch {
|
||||||
|
width: 20px;
|
||||||
|
height: 16px;
|
||||||
|
z-index: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li span.button.switch.level0 {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li span.button.switch.level1 {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li span.button.noline_open {
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li span.button.noline_close {
|
||||||
|
background-position: -18px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li a.tmpTargetNode_inner {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ztree li a.tmpTargetNode_inner::before {
|
||||||
|
height: 32px;
|
||||||
|
background-color: #5FB878;
|
||||||
|
border: 1px solid #009688;
|
||||||
|
opacity: 1;
|
||||||
|
filter: alpha(opacity=100);
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.tmpzTreeMove_arrow {
|
||||||
|
margin: 7px 0 0 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#editormd {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftbar .copyright {
|
||||||
|
color: #333;
|
||||||
|
border-top: 1px solid #dddddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftbar .layui-tab {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content_body>h1:first-child {
|
||||||
|
color: #393D49;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 2rem;
|
||||||
|
padding-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchForm {
|
||||||
|
padding: 0 10px 10px 10px;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchResultNone {
|
||||||
|
position: fixed;
|
||||||
|
top: 50%;
|
||||||
|
width: 260px;
|
||||||
|
text-align: center;
|
||||||
|
color: #c2c2c2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchResultNone .layui-icon {
|
||||||
|
font-size: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchResultNone p {
|
||||||
|
margin-top: 4px;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* markdown正文 */
|
||||||
|
|
||||||
|
.markdown-body {
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
color: #333;
|
||||||
|
overflow: hidden;
|
||||||
|
font-family: "Microsoft YaHei", Helvetica, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", "Monaco", monospace, Tahoma, STXihei, "华文细黑", STHeiti, "Helvetica Neue", "Droid Sans", "wenquanyi micro hei", FreeSans, Arimo, Arial, SimSun, "宋体", Heiti, "黑体", sans-serif;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1.6;
|
||||||
|
word-wrap: break-word;
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body * {
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body a {
|
||||||
|
background: transparent;
|
||||||
|
color: #01AAED;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1>a,
|
||||||
|
.markdown-body h2>a,
|
||||||
|
.markdown-body h3>a,
|
||||||
|
.markdown-body h4>a,
|
||||||
|
.markdown-body h5>a,
|
||||||
|
.markdown-body h6>a {
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body a:active,
|
||||||
|
.markdown-body a:hover {
|
||||||
|
outline: 0;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body img {
|
||||||
|
border: 0;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr {
|
||||||
|
-moz-box-sizing: content-box;
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body code,
|
||||||
|
.markdown-body kbd {
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body input {
|
||||||
|
color: inherit;
|
||||||
|
font: inherit;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body html input[disabled] {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body input {
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body input[type="checkbox"] {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body input {
|
||||||
|
font: 13px/1.4 Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr {
|
||||||
|
height: 0;
|
||||||
|
margin: 15px 0;
|
||||||
|
overflow: hidden;
|
||||||
|
background: transparent;
|
||||||
|
border: 0;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr:before {
|
||||||
|
display: table;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr:after {
|
||||||
|
display: table;
|
||||||
|
clear: both;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1,
|
||||||
|
.markdown-body h2,
|
||||||
|
.markdown-body h3,
|
||||||
|
.markdown-body h4,
|
||||||
|
.markdown-body h5,
|
||||||
|
.markdown-body h6 {
|
||||||
|
position: relative;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1 {
|
||||||
|
font-size: 2.25em;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h2 {
|
||||||
|
padding-bottom: 0.3em;
|
||||||
|
font-size: 1.75em;
|
||||||
|
line-height: 1.225;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h3 {
|
||||||
|
font-size: 1.5em;
|
||||||
|
line-height: 1.43;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h4 {
|
||||||
|
font-size: 1.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h5 {
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h6 {
|
||||||
|
font-size: 1em;
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ul,
|
||||||
|
.markdown-body ol {
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding-left: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ol ol,
|
||||||
|
.markdown-body ul ol {
|
||||||
|
list-style-type: lower-roman;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ul ul ol,
|
||||||
|
.markdown-body ul ol ol,
|
||||||
|
.markdown-body ol ul ol,
|
||||||
|
.markdown-body ol ol ol {
|
||||||
|
list-style-type: lower-alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body dd {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .octicon {
|
||||||
|
font: normal normal 16px octicons-anchor;
|
||||||
|
line-height: 1;
|
||||||
|
display: inline-block;
|
||||||
|
text-decoration: none;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .octicon-link:before {
|
||||||
|
content: '\f05c';
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body>*:first-child {
|
||||||
|
margin-top: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body>*:last-child {
|
||||||
|
margin-bottom: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .anchor {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
display: block;
|
||||||
|
padding-right: 6px;
|
||||||
|
padding-left: 30px;
|
||||||
|
margin-left: -30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .anchor:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1 .octicon-link,
|
||||||
|
.markdown-body h2 .octicon-link,
|
||||||
|
.markdown-body h3 .octicon-link,
|
||||||
|
.markdown-body h4 .octicon-link,
|
||||||
|
.markdown-body h5 .octicon-link,
|
||||||
|
.markdown-body h6 .octicon-link {
|
||||||
|
display: none;
|
||||||
|
color: #000;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1:hover .anchor,
|
||||||
|
.markdown-body h2:hover .anchor,
|
||||||
|
.markdown-body h3:hover .anchor,
|
||||||
|
.markdown-body h4:hover .anchor,
|
||||||
|
.markdown-body h5:hover .anchor,
|
||||||
|
.markdown-body h6:hover .anchor {
|
||||||
|
padding-left: 8px;
|
||||||
|
margin-left: -30px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1:hover .anchor .octicon-link,
|
||||||
|
.markdown-body h2:hover .anchor .octicon-link,
|
||||||
|
.markdown-body h3:hover .anchor .octicon-link,
|
||||||
|
.markdown-body h4:hover .anchor .octicon-link,
|
||||||
|
.markdown-body h5:hover .anchor .octicon-link,
|
||||||
|
.markdown-body h6:hover .anchor .octicon-link {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1 .anchor {
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h2 .anchor {
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h3 .anchor {
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.markdown-body h4 .anchor {
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h5 .anchor {
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h6 .anchor {
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body p,
|
||||||
|
.markdown-body ul,
|
||||||
|
.markdown-body ol,
|
||||||
|
.markdown-body dl {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ul ul,
|
||||||
|
.markdown-body ul ol,
|
||||||
|
.markdown-body ol ol,
|
||||||
|
.markdown-body ol ul {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body li>p {
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body dl {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body dl dt {
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 16px;
|
||||||
|
font-size: 1em;
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body dl dd {
|
||||||
|
padding: 0 16px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body code {
|
||||||
|
padding: 0.2em;
|
||||||
|
margin: 0;
|
||||||
|
border-radius: 3px;
|
||||||
|
color: #FF5722;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body code:before,
|
||||||
|
.markdown-body code:after {
|
||||||
|
letter-spacing: -0.2em;
|
||||||
|
content: "\00a0";
|
||||||
|
}
|
||||||
|
|
||||||
|
.syntaxhighlighter code:before,
|
||||||
|
.syntaxhighlighter code:after {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .highlight {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body kbd {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 3px 5px;
|
||||||
|
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
||||||
|
line-height: 10px;
|
||||||
|
color: #555;
|
||||||
|
vertical-align: middle;
|
||||||
|
background-color: #fcfcfc;
|
||||||
|
border: solid 1px #ccc;
|
||||||
|
border-bottom-color: #bbb;
|
||||||
|
border-radius: 3px;
|
||||||
|
box-shadow: inset 0 -1px 0 #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-c {
|
||||||
|
color: #969896;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-c1,
|
||||||
|
.markdown-body .pl-mdh,
|
||||||
|
.markdown-body .pl-mm,
|
||||||
|
.markdown-body .pl-mp,
|
||||||
|
.markdown-body .pl-mr,
|
||||||
|
.markdown-body .pl-s1 .pl-v,
|
||||||
|
.markdown-body .pl-s3,
|
||||||
|
.markdown-body .pl-sc,
|
||||||
|
.markdown-body .pl-sv {
|
||||||
|
color: #0086b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-e,
|
||||||
|
.markdown-body .pl-en {
|
||||||
|
color: #795da3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-s1 .pl-s2,
|
||||||
|
.markdown-body .pl-smi,
|
||||||
|
.markdown-body .pl-smp,
|
||||||
|
.markdown-body .pl-stj,
|
||||||
|
.markdown-body .pl-vo,
|
||||||
|
.markdown-body .pl-vpf {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-ent {
|
||||||
|
color: #63a35c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-k,
|
||||||
|
.markdown-body .pl-s,
|
||||||
|
.markdown-body .pl-st {
|
||||||
|
color: #a71d5d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-pds,
|
||||||
|
.markdown-body .pl-s1,
|
||||||
|
.markdown-body .pl-s1 .pl-pse .pl-s2,
|
||||||
|
.markdown-body .pl-sr,
|
||||||
|
.markdown-body .pl-sr .pl-cce,
|
||||||
|
.markdown-body .pl-sr .pl-sra,
|
||||||
|
.markdown-body .pl-sr .pl-sre,
|
||||||
|
.markdown-body .pl-src {
|
||||||
|
color: #df5000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mo,
|
||||||
|
.markdown-body .pl-v {
|
||||||
|
color: #1d3e81;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-id {
|
||||||
|
color: #b52a1d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-ii {
|
||||||
|
background-color: #b52a1d;
|
||||||
|
color: #f8f8f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-sr .pl-cce {
|
||||||
|
color: #63a35c;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-ml {
|
||||||
|
color: #693a17;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mh,
|
||||||
|
.markdown-body .pl-mh .pl-en,
|
||||||
|
.markdown-body .pl-ms {
|
||||||
|
color: #1d3e81;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mq {
|
||||||
|
color: #008080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mi {
|
||||||
|
color: #333;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mb {
|
||||||
|
color: #333;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-md,
|
||||||
|
.markdown-body .pl-mdhf {
|
||||||
|
background-color: #ffecec;
|
||||||
|
color: #bd2c00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mdht,
|
||||||
|
.markdown-body .pl-mi1 {
|
||||||
|
background-color: #eaffea;
|
||||||
|
color: #55a532;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mdr {
|
||||||
|
color: #795da3;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .task-list-item {
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .task-list-item+.task-list-item {
|
||||||
|
margin-top: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .task-list-item input {
|
||||||
|
float: left;
|
||||||
|
margin: 0.3em 0 0.25em -1.6em;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body :checked+.radio-label {
|
||||||
|
z-index: 1;
|
||||||
|
position: relative;
|
||||||
|
border-color: #4183c4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .editormd-toc-menu ul {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body th {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.syntaxhighlighter a,
|
||||||
|
.syntaxhighlighter div,
|
||||||
|
.syntaxhighlighter code,
|
||||||
|
.syntaxhighlighter,
|
||||||
|
.syntaxhighlighter td,
|
||||||
|
.syntaxhighlighter tr,
|
||||||
|
.syntaxhighlighter tbody,
|
||||||
|
.syntaxhighlighter thead,
|
||||||
|
.syntaxhighlighter caption,
|
||||||
|
.syntaxhighlighter textarea {
|
||||||
|
font-family: Menlo, Monaco, Menlo, Consolas, source-code-pro, "Liberation Mono", "Ubuntu Mono", Courier, "Helvetica Neue", "Microsoft Yahei", 微软雅黑, "Lantinghei SC", STXihei, WenQuanYi, sans-serif;
|
||||||
|
font-size: 14px !important;
|
||||||
|
line-height: 1.625em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.syntaxhighlighter {
|
||||||
|
margin: 1.625em 0 !important;
|
||||||
|
background-color: #fafafa !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.syntaxhighlighter textarea {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layui-elem-quote {
|
||||||
|
border-color: #5FB878;
|
||||||
|
background-color: #fafafa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layui-elem-quote>p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
list-style: inherit;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.syntaxhighlighter .gutter {
|
||||||
|
color: #237893 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.syntaxhighlighter .plain,
|
||||||
|
.syntaxhighlighter .plain a {
|
||||||
|
word-break: break-all;
|
||||||
|
color: #333 !important
|
||||||
|
}
|
||||||
|
|
||||||
|
.syntaxhighlighter .comments,
|
||||||
|
.syntaxhighlighter .comments a {
|
||||||
|
color: gray !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.syntaxhighlighter .string,
|
||||||
|
.syntaxhighlighter .string a {
|
||||||
|
color: #10893E !important
|
||||||
|
}
|
||||||
|
|
||||||
|
.syntaxhighlighter .keyword {
|
||||||
|
color: #ff7800 !important
|
||||||
|
}
|
||||||
|
|
||||||
|
.syntaxhighlighter .variable {
|
||||||
|
color: #1E9FFF !important
|
||||||
|
}
|
||||||
|
|
||||||
|
.syntaxhighlighter .functions {
|
||||||
|
color: #FF5722 !important
|
||||||
|
}
|
||||||
|
|
||||||
|
.syntaxhighlighter .constants {
|
||||||
|
color: #5200FF !important
|
||||||
|
}
|
||||||
|
|
||||||
|
#article-content {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
#article-content li {
|
||||||
|
list-style: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-toc-wrap {
|
||||||
|
width: 16em;
|
||||||
|
position: fixed;
|
||||||
|
right: 2em;
|
||||||
|
z-index: 99;
|
||||||
|
border: 1px solid #dbdbdb;
|
||||||
|
background-color: rgba(255, 255, 255, 0.618);
|
||||||
|
backdrop-filter: blur(4px);
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-toc {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-toc ol {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-toc>ol {
|
||||||
|
padding: 0.6em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-toc li {
|
||||||
|
line-height: 28px;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
width: 100%;
|
||||||
|
float: left;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-toc a {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-toc a:hover {
|
||||||
|
color: #5FB878;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-toc-title {
|
||||||
|
margin-bottom: 0 !important;
|
||||||
|
border-bottom: 1px solid #dbdbdb;
|
||||||
|
padding: 0.5em;
|
||||||
|
font-weight: bold;
|
||||||
|
cursor: move;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 768px) {
|
||||||
|
#content-toc-wrap {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,348 @@
|
|||||||
|
/* 设置滚动条的样式 */
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 滚动槽 */
|
||||||
|
::-webkit-scrollbar-track {
|
||||||
|
-webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.3);
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 滚动条滑块 */
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
border-radius: 8px;
|
||||||
|
background: #5FB878;
|
||||||
|
-webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb:window-inactive {
|
||||||
|
background: #5FB878;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clear {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pull-left {
|
||||||
|
float: left !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pull-right {
|
||||||
|
float: right !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mask {
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
background-color: rgba(0, 0, 0, 0.382);
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar {
|
||||||
|
background-color: #393D49;
|
||||||
|
background: -webkit-gradient(left top, right top, color-stop(0%, #70e1f5), color-stop(100%, #FFD194));
|
||||||
|
background: -webkit-linear-gradient(left, #70e1f5 0%, #FFD194 100%);
|
||||||
|
background: -o-linear-gradient(left, #70e1f5 0%, #FFD194 100%);
|
||||||
|
background: -ms-linear-gradient(left, #70e1f5 0%, #FFD194 100%);
|
||||||
|
background: -webkit-gradient(linear, left top, right top, from(#70e1f5), to(#FFD194));
|
||||||
|
background: linear-gradient(200deg, #70e1f5, #ffd194);
|
||||||
|
height: 48px;
|
||||||
|
position: fixed;
|
||||||
|
right: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .bg-blur {
|
||||||
|
background-color: rgba(255, 255, 255, 0.618);
|
||||||
|
backdrop-filter: blur(4px);
|
||||||
|
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.10);
|
||||||
|
line-height: 48px;
|
||||||
|
height: 48px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .navbar-body {
|
||||||
|
top: 0;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
padding: 0 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .navbar-body>.layui-nav .layui-nav-more {
|
||||||
|
border-top-color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .navbar-body>.layui-nav .layui-nav-mored {
|
||||||
|
border-top-color: transparent;
|
||||||
|
border-bottom-color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .layui-nav {
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layui-nav .layui-nav-item {
|
||||||
|
line-height: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .logo {
|
||||||
|
float: left;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
color: #333;
|
||||||
|
line-height: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .logo>img {
|
||||||
|
height: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layui-nav .layui-nav-item a,
|
||||||
|
.layui-nav .layui-nav-item a:hover,
|
||||||
|
.layui-nav .layui-this a {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftbar {
|
||||||
|
width: 300px;
|
||||||
|
top: 48px;
|
||||||
|
border-radius: 0;
|
||||||
|
transition: left 0.5s ease;
|
||||||
|
-webkit-transition: left 0.5s ease;
|
||||||
|
-moz-transition: left 0.5s ease;
|
||||||
|
-ms-transition: left 0.5s ease;
|
||||||
|
-o-transition: left 0.5s ease;
|
||||||
|
overflow-x: visible;
|
||||||
|
border-right: 1px solid #eee;
|
||||||
|
background-color: #fafafa;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftbar .layui-tab-content {
|
||||||
|
padding: 12px 2px 0 0;
|
||||||
|
overflow-y: auto;
|
||||||
|
position: relative;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftbar .copyright {
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 24px;
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftbar .copyright.noScroll {
|
||||||
|
bottom: 0;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftbar>li>a>i.layui-icon {
|
||||||
|
font-size: 1.625rem;
|
||||||
|
vertical-align: top;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftbar>li>dl>dd>a>i.layui-icon {
|
||||||
|
font-size: 1.125rem;
|
||||||
|
vertical-align: top;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftbar>li>dl>dd>a {
|
||||||
|
padding-left: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left-show-hide {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 100%;
|
||||||
|
transform: translateY(-100%);
|
||||||
|
padding: 0;
|
||||||
|
height: 64px;
|
||||||
|
width: 18px;
|
||||||
|
background-color: #393D49;
|
||||||
|
color: #F0F0F0;
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
opacity: 1;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left-show-hide:hover {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left-show-hide>.layui-icon {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#body {
|
||||||
|
padding-left: 300px;
|
||||||
|
width: 100%;
|
||||||
|
padding-top: 48px;
|
||||||
|
position: absolute;
|
||||||
|
transition: left 0.5s ease;
|
||||||
|
-webkit-transition: left 0.5s ease;
|
||||||
|
-moz-transition: left 0.5s ease;
|
||||||
|
-ms-transition: left 0.5s ease;
|
||||||
|
-o-transition: left 0.5s ease;
|
||||||
|
height: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navRight {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navMenuLeft,
|
||||||
|
#navMenuRight {
|
||||||
|
display: none;
|
||||||
|
color: #333;
|
||||||
|
line-height: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navMenuLeft {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navMenuRight {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navMenuLeft.active>i,
|
||||||
|
#navMenuRight.active>i {
|
||||||
|
color: #5FB878
|
||||||
|
}
|
||||||
|
|
||||||
|
#navMenuLeft>i,
|
||||||
|
#navMenuRight>i {
|
||||||
|
font-size: 1.625rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inputBox {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inputBox .input-icon {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
right: 6px;
|
||||||
|
color: #c2c2c2;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inputBox .layui-input:focus+.input-icon {
|
||||||
|
color: #000
|
||||||
|
}
|
||||||
|
|
||||||
|
#treeSearch>li {
|
||||||
|
padding: 0 4px 10px 6px;
|
||||||
|
border-bottom: 1px solid #e6e6e6;
|
||||||
|
line-height: 24px;
|
||||||
|
word-break: break-word;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#treeSearch h3 {
|
||||||
|
font-weight: bold;
|
||||||
|
line-height: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#treeSearch strong {
|
||||||
|
color: #FF5722;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 768px) {
|
||||||
|
#mask {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftbar {
|
||||||
|
left: -300px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftbar.show-item {
|
||||||
|
left: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .logo {
|
||||||
|
float: none;
|
||||||
|
margin-left: 0;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .layui-nav {
|
||||||
|
top: -180px;
|
||||||
|
/* 要根据导航栏项目数量调整 */
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
left: 0;
|
||||||
|
transition: top 0.5s ease;
|
||||||
|
-webkit-transition: top 0.5s ease;
|
||||||
|
-moz-transition: top 0.5s ease;
|
||||||
|
-ms-transition: top 0.5s ease;
|
||||||
|
-o-transition: top 0.5s ease;
|
||||||
|
z-index: 999;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .navbar-body {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .bg-blur {
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navMenuLeft,
|
||||||
|
#navMenuRight {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#body {
|
||||||
|
padding-left: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .navbar-body>.layui-nav.show-item {
|
||||||
|
top: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .navbar-body>.layui-nav>.navRight {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navbar .navbar-body>.layui-nav>.navRight .layui-nav-item {
|
||||||
|
width: 100%;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-menu {
|
||||||
|
z-index: 1000;
|
||||||
|
background: inherit;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
padding: 0 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left-show-hide {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 216 B |
|
After Width: | Height: | Size: 421 B |
@@ -0,0 +1,277 @@
|
|||||||
|
var curMenu = null, menuTree = null;
|
||||||
|
var ajaxSetting = {
|
||||||
|
edit: {
|
||||||
|
drag: {
|
||||||
|
autoExpandTrigger: true,
|
||||||
|
prev: true,
|
||||||
|
inner: true,
|
||||||
|
next: true
|
||||||
|
},
|
||||||
|
enable: true,
|
||||||
|
showRemoveBtn: false,
|
||||||
|
showRenameBtn: false
|
||||||
|
},
|
||||||
|
view: {
|
||||||
|
showLine: false,
|
||||||
|
showIcon: false,
|
||||||
|
selectedMulti: false,
|
||||||
|
dblClickExpand: false,
|
||||||
|
addDiyDom: addDiyDom
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
key: {
|
||||||
|
name: 'title',
|
||||||
|
children: null,
|
||||||
|
},
|
||||||
|
simpleData: {
|
||||||
|
enable: true,
|
||||||
|
idKey: "id",
|
||||||
|
pIdKey: 'parent_id',
|
||||||
|
rootPId: 0,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
callback: {
|
||||||
|
onClick: onClick,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
var loadingHandler;
|
||||||
|
function switchNode(event, treeId, treeNode) {
|
||||||
|
if ('pushState' in history) {
|
||||||
|
history.pushState('', '', treeNode.url);
|
||||||
|
getChapter(treeNode.url);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
location = treeNode.url;
|
||||||
|
}
|
||||||
|
menuTree.expandNode(treeNode, true)
|
||||||
|
event.preventDefault()
|
||||||
|
}
|
||||||
|
|
||||||
|
function getChapter(url) {
|
||||||
|
if (void 0 === url) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
loadingHandler = layer.open({
|
||||||
|
type: 3,
|
||||||
|
icon: 2,
|
||||||
|
shade: 0.1,
|
||||||
|
});
|
||||||
|
$.ajax({
|
||||||
|
method: 'GET',
|
||||||
|
url: url,
|
||||||
|
success: function (result) {
|
||||||
|
try {
|
||||||
|
var resultElement = $(result);
|
||||||
|
$('#article-content').html(resultElement.find('#article-content').html());
|
||||||
|
onContentChange();
|
||||||
|
var hash = location.hash;
|
||||||
|
if (hash.length > 0) {
|
||||||
|
location.hash = '';
|
||||||
|
location.hash = hash;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// 有时切换文档不在最上面
|
||||||
|
$('#content_body').scrollTop(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
layer.alert('文档加载失败', { icon: 2 });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function () {
|
||||||
|
location = url;
|
||||||
|
},
|
||||||
|
complete: function () {
|
||||||
|
layer.close(loadingHandler);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function addDiyDom(treeId, treeNode) {
|
||||||
|
var spaceWidth = 5;
|
||||||
|
var switchObj = $("#" + treeNode.tId + "_switch"),
|
||||||
|
icoObj = $("#" + treeNode.tId + "_ico");
|
||||||
|
switchObj.remove();
|
||||||
|
icoObj.before(switchObj);
|
||||||
|
|
||||||
|
if (treeNode.level > 1) {
|
||||||
|
var spaceStr = "<span style='display: inline-block;width:" + (spaceWidth * treeNode.level) + "px'></span>";
|
||||||
|
switchObj.before(spaceStr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function initTree(data) {
|
||||||
|
for (var i in data) {
|
||||||
|
data[i].target = '_self';
|
||||||
|
}
|
||||||
|
if (null === menuTree) {
|
||||||
|
var treeObj = $("#treeDirectory");
|
||||||
|
$.fn.zTree.init(treeObj, ajaxSetting, data);
|
||||||
|
menuTree = $.fn.zTree.getZTreeObj("treeDirectory");
|
||||||
|
var nodes = menuTree.getNodesByParam('url', location.pathname + location.hash, null);
|
||||||
|
if (nodes.length > 0) {
|
||||||
|
if (nodes.length > 1) {
|
||||||
|
if (menuTree.getSelectedNodes().length > 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
menuTree.selectNode(nodes[0]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
menuTree.selectNode(menuTree.getNodeByParam('id', currentCatalog.id, null));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function onClick(event, treeId, treeNode) {
|
||||||
|
// 未修改内容,直接切换
|
||||||
|
switchNode(event, treeId, treeNode);
|
||||||
|
setTimeout(function () {
|
||||||
|
closeMenuLeft();
|
||||||
|
}, 600);
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseLeftHeight() {
|
||||||
|
$('#leftbar .layui-tab-content').css('max-height', ($('#leftbar').height() - $('#leftbar .layui-tab-title').height() - $('#leftbar .copyright').height()) + 'px');
|
||||||
|
}
|
||||||
|
|
||||||
|
function onContentChange() {
|
||||||
|
$('#content-toc').css('max-height', ($(document).height() / 2) + 'px');
|
||||||
|
hCatalog('#article-content', '#content-toc');
|
||||||
|
var content = $('#article-content');
|
||||||
|
content.find('blockquote').addClass('layui-elem-quote');
|
||||||
|
content.find('table').addClass('layui-table');
|
||||||
|
content.find('pre code').each(function (index, item) {
|
||||||
|
var pre = $(item).parent();
|
||||||
|
var content = $(item).text();
|
||||||
|
var brush = parseCodeBrush($(item).attr('class'));
|
||||||
|
var newPre = $('<pre></pre>').addClass('brush: ' + brush).addClass('toolbar: false').text(content);
|
||||||
|
pre.replaceWith(newPre);
|
||||||
|
});
|
||||||
|
SyntaxHighlighter.highlight();
|
||||||
|
//initSearchDatas();
|
||||||
|
$('#content_body a').each(function () {
|
||||||
|
var url = $(this).attr('href');
|
||||||
|
if (void 0 !== url && '#' !== url.substr(0, 1) && 'http' === url.substr(0, 4)) {
|
||||||
|
$(this).attr('target', '_blank');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
setTimeout(function () {
|
||||||
|
resizeCode();
|
||||||
|
}, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseCodeBrush(brush) {
|
||||||
|
for (var i in SyntaxHighlighter.brushes) {
|
||||||
|
if (SyntaxHighlighter.brushes[i].aliases.indexOf(brush) > -1) {
|
||||||
|
return brush;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
function resizeCode() {
|
||||||
|
var guttelines = $('.gutter .line');
|
||||||
|
var codelines = $('.code .line');
|
||||||
|
for (var i = 0; i < guttelines.length; i++) {
|
||||||
|
var codeline = codelines.eq(i);
|
||||||
|
var height = codeline.css('height');
|
||||||
|
guttelines.eq(i).css('height', height)
|
||||||
|
codeline.css('height', height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 基于这里的代码做了修改: https://blog.csdn.net/weixin_57215431/article/details/115676752
|
||||||
|
function hCatalog(current, target) {
|
||||||
|
var box = document.querySelector(target)
|
||||||
|
if (!box) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
box.innerHTML = ''
|
||||||
|
var titleTree = hTree(document.querySelector(current))
|
||||||
|
hCreatEle(titleTree, box)
|
||||||
|
}
|
||||||
|
|
||||||
|
function hCreatEle(arr, parent) {
|
||||||
|
if (!arr.length) return
|
||||||
|
var ol = document.createElement('ol')
|
||||||
|
arr.forEach(function (item) {
|
||||||
|
if ('' !== item.node.innerHTML) {
|
||||||
|
var li = document.createElement('li')
|
||||||
|
li.innerHTML = item.node.innerHTML
|
||||||
|
hCreatEle(item.children, li)
|
||||||
|
ol.appendChild(li)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
parent.appendChild(ol)
|
||||||
|
}
|
||||||
|
|
||||||
|
function hTree(wrapNode) {
|
||||||
|
var root = { children: [] }
|
||||||
|
var current = root
|
||||||
|
|
||||||
|
for (var i = 0; i < wrapNode.children.length; ++i) {
|
||||||
|
var item = wrapNode.children[i]
|
||||||
|
if (item.localName.indexOf('h') === 0) {
|
||||||
|
var obj = { node: item, children: [], parent: undefined }
|
||||||
|
while (current !== root && current.node.localName[1] - obj.node.localName[1] !== -1) {
|
||||||
|
current = current.parent
|
||||||
|
}
|
||||||
|
obj.parent = current
|
||||||
|
obj.parent.children.push(obj)
|
||||||
|
current = obj
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return root.children
|
||||||
|
}
|
||||||
|
|
||||||
|
function initContentToc() {
|
||||||
|
var isDown = false;
|
||||||
|
var beginLeft = 0
|
||||||
|
var beginTop = 0;
|
||||||
|
var mouseBeginLeft = 0
|
||||||
|
var mouseBeginTop = 0;
|
||||||
|
|
||||||
|
$(document).on('mousedown', '.content-toc-title', function (e) {
|
||||||
|
var wrap = $('#content-toc-wrap');
|
||||||
|
isDown = true;
|
||||||
|
beginLeft = wrap[0].offsetLeft;
|
||||||
|
beginTop = wrap[0].offsetTop;
|
||||||
|
mouseBeginLeft = e.pageX;
|
||||||
|
mouseBeginTop = e.pageY;
|
||||||
|
e.preventDefault();
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('mouseup', function () {
|
||||||
|
isDown = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('mousemove', function (e) {
|
||||||
|
if (isDown) {
|
||||||
|
var wrap = $('#content-toc-wrap');
|
||||||
|
wrap.css('left', (beginLeft + (e.pageX - mouseBeginLeft)) + 'px');
|
||||||
|
wrap.css('top', (beginTop + (e.pageY - mouseBeginTop)) + 'px');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
parseLeftHeight();
|
||||||
|
|
||||||
|
$(window).resize(function () {
|
||||||
|
parseLeftHeight();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('body').on('click', '.ztree.showIcon li a span.button.switch', function (e) {
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
initContentToc();
|
||||||
|
|
||||||
|
SyntaxHighlighter.all();
|
||||||
|
onContentChange();
|
||||||
|
})
|
||||||
|
|
||||||
|
$(window).load(function () {
|
||||||
|
$(window).resize(resizeCode);
|
||||||
|
});
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
$.ajaxSetup({
|
||||||
|
xhrFields: {
|
||||||
|
withCredentials: true
|
||||||
|
},
|
||||||
|
});
|
||||||
|
$(function(){
|
||||||
|
layui.element.init();
|
||||||
|
layui.table.init();
|
||||||
|
layui.form.render();
|
||||||
|
});
|
||||||
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 827 B |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 220 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 919 B |