first commit

This commit is contained in:
2025-11-28 14:28:58 +08:00
commit 6ef96e6370
314 changed files with 40282 additions and 0 deletions
+180
View File
@@ -0,0 +1,180 @@
<?php
/*
Sort:2
Hidden:false
Name:添加卡密
Url:kami_add
Version:1.0
Author:易如意
Author QQ:51154393
Author Url:www.eruyi.cn
*/
if (!isset($islogin)) header("Location: /"); //非法访问
?>
<!-- start page title -->
<div class="row">
<div class="col-12">
<div class="page-title-box">
<div class="page-title-right">
<ol class="breadcrumb m-0">
<li class="breadcrumb-item"><a href="javascript: void(0);">首页</a></li>
<li class="breadcrumb-item active">卡密</li>
</ol>
</div>
<h4 class="page-title"><?php echo $title; ?></h4>
</div> <!-- end page-title-box -->
</div> <!-- end col-->
</div>
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<?php if ($app_num > 0) : ?>
<form class="needs-validation" novalidate action="" method="post">
<div class="form-row">
<div class="form-group col-md-2">
<label class="col-form-label">卡密类型</label>
<select class="form-control" name="add_type" id="add_type" onchange="type_change(this.value)">
<option value="vip" selected="selected">会员</option>
<option value="fen">积分</option>
</select>
</div>
<div class="form-group col-md-10">
<label class="col-form-label" id="amount_name">&nbsp;会员天数 *</label>
<div class="input-group">
<input type="number" id="add_amount" name="add_amount" class="form-control" placeholder="会员天数,永久卡9个9" value="" required>
<div class="input-group-prepend">
<span class="input-group-text" id="amount_a">天</span>
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label class="col-form-label">生成数量</label>
<input type="number" class="form-control" id="add_num" name="add_num" placeholder="生成数量" value="1" required>
</div>
<div class="form-group col-md-6">
<label class="col-form-label">卡密长度</label>
<input type="number" class="form-control" id="k_length" name="k_length" placeholder="卡密长度" value="10" required>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-12">
<label class="col-form-label">卡密备注</label>
<input type="text" class="form-control" id="add_note" name="add_note" placeholder="卡密备注" value="">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-12">
<label class="col-form-label">绑定应用</label>
<select class="form-control" name="add_appid" id="add_appid">
<?php
$res = Db::table('app')->order('id desc')->select();
foreach ($res as $k => $v) {
$rows = $res[$k];
?>
<option value="<?php echo $rows['id']; ?>"><?php echo $rows['name']; ?></option>
<?php } ?>
</select>
</div>
</div>
<div class="form-group">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="out" id="out" value="1">
<label class="custom-control-label" for="out">生成后立即导出</label>
</div>
</div>
<button class="btn btn-block btn-xs btn-success" name="add_submit" id="add_submit" type="submit" value="确定">确认生成</button>
</form>
<?php else : ?>
<div class="text-center" style="margin-top:6rem!important;margin-bottom:10rem!important">
<img src="../assets/images/no-app.svg" height="120" alt="File not found Image">
<h4 class="text-uppercase mt-3 mb-3">需要添加应用后开启该功能</h4>
<a href="./?app_adm"><button type="button" class="btn btn-dark">添加应用</button></a>
</div>
<?php endif; ?>
</div> <!-- end card-body-->
</div> <!-- end card-->
</div> <!-- end col -->
</div><!-- end row -->
<script>
$('#add_submit').click(function() {
let t = window.jQuery;
var out = document.getElementById("out").checked;
if (out) {
out = 1;
} else {
out = 0;
}
var add_type = $("select[name='add_type']").val();
var add_amount = $("input[name='add_amount']").val();
var add_num = $("input[name='add_num']").val();
var k_length = $("input[name='k_length']").val();
var add_note = $("input[name='add_note']").val();
var add_appid = $("select[name='add_appid']").val();
document.getElementById('add_submit').innerHTML = "<span class=\"spinner-border spinner-border-sm mr-1\" role=\"status\" aria-hidden=\"true\"></span>正在生成";
document.getElementById('add_submit').disabled = true;
$.ajax({
cache: false,
type: "POST", //请求的方式
url: "ajax.php?act=kami_add", //请求的文件名
data: {
type: add_type,
amount: add_amount,
num: add_num,
out: out,
k_length: k_length,
note: add_note,
appid: add_appid
},
dataType: 'json',
success: function(data) {
console.log(data);
document.getElementById('add_submit').disabled = false;
document.getElementById('add_submit').innerHTML = "确认添加";
if (data.code == 200) {
t.NotificationApp.send("成功", data.msg, "top-center", "rgba(0,0,0,0.2)", "success");
//window.setTimeout("window.location='"+window.location.href+"'",1000);
} else if (data.code == 202) {
t.NotificationApp.send("成功", "正在生成卡密文件", "top-center", "rgba(0,0,0,0.2)", "success");
download(add_type + '_' + add_num + '_' + add_appid, data.msg);
} else {
t.NotificationApp.send("失败", data.msg, "top-center", "rgba(0,0,0,0.2)", "error");
}
}
});
return false; //重要语句:如果是像a链接那种有href属性注册的点击事件,可以阻止它跳转。
});
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', filename + 'km.txt');
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
function type_change(i) {
if (i == 'vip') {
document.getElementById('amount_name').innerHTML = "&nbsp;会员天数 *";
document.getElementById('add_amount').setAttribute("placeholder", "会员天数,永久卡9个9");
document.getElementById('amount_a').innerHTML = "天";
} else {
document.getElementById('amount_name').innerHTML = "&nbsp;积分数 *";
document.getElementById('add_amount').setAttribute("placeholder", "积分数");
document.getElementById('amount_a').innerHTML = "积分";
}
}
</script>
+416
View File
@@ -0,0 +1,416 @@
<?php
/*
Sort:1
Hidden:false
Name:卡密管理
Url:kami_adm
Right:kami
Version:1.0
Author:易如意
Author QQ:51154393
Author Url:www.eruyi.cn
*/
if (!isset($islogin)) header("Location: /"); //非法访问
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
$see = isset($_GET['see']) ? intval($_GET['see']) : 0;
$appid = isset($_GET['app']) ? intval($_GET['app']) : 0;
if ($see > 0 && $appid > 0) {
if ($see == 1) {
$nums = Db::table('kami')->where('appid', $appid)->where('use_time', 0)->count();
} else {
$nums = Db::table('kami')->where('appid', $appid)->where('use_time', '>', 0)->count();
}
$url = "./?kami_adm&see={$see}&app={$appid}&page=";
} elseif ($see > 0 && $appid <= 0) {
if ($see == 1) {
$nums = Db::table('kami')->where('use_time', 0)->count();
} else {
$nums = Db::table('kami')->where('use_time', '>', '0')->count();
}
$url = "./?kami_adm&see={$see}&page=";
} elseif ($see <= 0 && $appid > 0) {
$nums = Db::table('kami')->where('appid', $appid)->count();
$url = "./?kami_adm&app={$appid}&page=";
} else {
$nums = Db::table('kami')->count();
$url = "./?kami_adm&page=";
}
$bnums = ($page - 1) * $ENUMS;
?>
<!-- start page title -->
<div class="row">
<div class="col-12">
<div class="page-title-box">
<div class="page-title-right">
<ol class="breadcrumb m-0">
<li class="breadcrumb-item"><a href="javascript: void(0);">首页</a></li>
<li class="breadcrumb-item active">卡密</li>
</ol>
</div>
<h4 class="page-title"><?php echo $title; ?></h4>
</div> <!-- end page-title-box -->
</div> <!-- end col-->
</div>
<!-- end row-->
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="row mb-2">
<div class="col-lg-8">
<form class="form-inline">
<select class="form-control" name="appid" id="appid" onchange="get_screen(this.value,<?php echo $see; ?>)">
<option value="0">全部</option>
<?php
$res = Db::table('app')->order('id desc')->select();
foreach ($res as $k => $v) {
$rows = $res[$k];
?>
<option value="<?php echo $rows['id']; ?>" <?php if ($appid == $rows['id']) echo 'selected = "selected"'; ?>><?php echo $rows['name']; ?></option>
<?php } ?>
</select>
<label for="status-select" class="mr-2"></label>
<select class="form-control" name="see" id="see" onchange="get_screen(<?php echo $appid; ?>,this.value)">
<option value="0" <?php if ($see == 0) echo 'selected = "selected"'; ?>>全部</option>
<option value="1" <?php if ($see == 1) echo 'selected = "selected"'; ?>>未使用</option>
<option value="2" <?php if ($see == 2) echo 'selected = "selected"'; ?>>已使用</option>
</select>
</form>
</div>
<div class="col-lg-4">
<div class="text-lg-right">
<form id="sousuo" method="post">
<div class="input-group">
<input type="text" class="form-control" name="so" placeholder="输入卡密" value='<?php echo $so; ?>'>
<span class="mdi mdi-magnify"></span>
<div class="input-group-append">
<button class="btn btn-primary" type="submit">搜索</button>
</div>
</div>
</form>
</div>
</div><!-- end col-->
</div>
<form action="" method="post" name="form_log" id="form_log">
<div class="table-responsive">
<table class="table table-centered table-striped dt-responsive nowrap w-100">
<thead>
<tr>
<th style="width: 20px;">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="all" onclick="checkAll();">
<label class="custom-control-label" for="all">&nbsp;</label>
</div>
</th>
<th style="width: 20px;">
<center><span class="badge badge-light-lighten">ID</span></center>
</th>
<th style="width: 200px;"><span class="badge badge-light-lighten">卡密</span></th>
<th><span class="badge badge-light-lighten">备注</span></th>
<th style="width: 150px;">
<center><span class="badge badge-light-lighten">类型</span></center>
</th>
<th style="width: 150px;">
<center><span class="badge badge-light-lighten">使用者</span></center>
</th>
<th style="width: 200px;">
<center><span class="badge badge-light-lighten">使用时间</span></center>
</th>
<th style="width: 150px;">
<center><span class="badge badge-light-lighten">导出状态</span></center>
</th>
<th style="width: 150px;">
<center><span class="badge badge-light-lighten">应用名称</span></center>
</th>
<th style="width: 75px;">
<center><span class="badge badge-light-lighten">状态</span></center>
</th>
</tr>
</thead>
<tbody>
<?php
$kami = Db::table('kami', 'as K')->field('K.*,A.name as appname')->JOIN('app', 'as A', 'K.appid=A.id');
if ($so) {
$kami = $kami->where('K.kami', 'like', "%{$so}%")->whereOr('K.note', 'like', "%{$so}%")->whereOr('A.name', 'like', "%{$so}%")->order('id desc');
} else {
if ($see > 0 && $appid > 0) {
if ($see == 1) {
$kami = $kami->where('K.appid', $appid)->where('K.use_time', "0");
} else {
$kami = $kami->where('K.appid', $appid)->where('K.use_time', '>', "0");
}
} elseif ($see > 0 && $appid <= 0) {
if ($see == 1) {
$kami = $kami->where('K.use_time', "0");
} else {
$kami = $kami->where('K.use_time', '>', "0");
}
} elseif ($see <= 0 && $appid > 0) {
$kami = $kami->where('K.appid', $appid);
}
$kami = $kami->order('id desc')->limit($bnums, $ENUMS);
}
$res = $kami->select(); //false
//die($sql.$see);
foreach ($res as $k => $v) {
$rows = $res[$k];
?>
<tr>
<td>
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="ids[]" value="<?php echo $rows['id']; ?>" id="<?php echo 'check_' . $rows['id']; ?>">
<label class="custom-control-label" for="<?php echo 'check_' . $rows['id']; ?>"></label>
</div>
</td>
<td>
<center><?php echo $rows['id']; ?></center>
</td>
<td>
<?php echo $rows['kami']; ?>
</td>
<td>
<?php
if ($rows['note'] == '') {
echo "<a href=\"javascript:void(0);\" onclick=\"note_id(" . $rows['id'] . ",'" . $rows['note'] . "')\"> <span class=\"badge badge-light\" data-toggle=\"modal\" data-target=\"#note-modal\"><i class=\"mdi mdi-comment-processing\"></i> 未备注</span></a>";
} else {
echo "<a href=\"javascript:void(0);\" onclick=\"note_id(" . $rows['id'] . ",'" . $rows['note'] . "')\"> <span class=\"badge badge-info\" data-toggle=\"modal\" data-target=\"#note-modal\"><i class=\"mdi mdi-comment-processing\"></i> " . $rows['note'] . "</span></a>";
}
?>
</td>
<td>
<center><?php if ($rows['type'] == 'fen') : ?><span class="badge badge-warning-lighten">积分卡[<?php echo $rows['amount']; ?>]<?php else : ?><span class="badge badge-danger-lighten">会员卡[ <?php if ($rows['amount'] == 999999999) {
echo '永久卡';
} else {
echo $rows['amount'] . '天';
} ?> ]<?php endif; ?></span></center>
</td>
<td>
<center>
<?php if ($rows['user']) : ?><span class="badge badge-warning-lighten">
<?php echo $rows['user'];
else : ?><span class="badge badge-success-lighten">未绑定<?php endif; ?></span>
</center>
</td>
<td>
<center>
<?php if ($rows['use_time'] == 0) : ?><span class="badge badge-info-lighten">未使用
<?php else : ?><span class="badge badge-warning-lighten"><?php echo date("Y-m-d H:i", $rows['use_time']);
endif; ?></span>
</center>
</td>
<td>
<center>
<?php if ($rows['new'] == 'n') : ?><span class="badge badge-dark-lighten">未导出
<?php else : ?><span class="badge badge-dark">已导出<?php endif; ?></span>
</center>
</td>
<td>
<center>
<?php if (empty($rows['appname'])) : ?><span class="badge badge-danger"><i class="mdi mdi-close-circle"></i> 应用不存在
<?php else : ?><span class="badge badge-primary"><i class="mdi mdi-cube-outline"></i> <?php echo $rows['appname']; ?>
<?php endif; ?>
</span></center>
</td>
<td>
<center>
<?php if ($rows['state'] == 'y') : ?><a href="javascript:void(0);" onclick="edit_state(<?php echo $rows['id']; ?>,'<?php echo $rows['state']; ?>')"><span id="state_<?php echo $rows['id']; ?>" class="badge badge-success">正常
<?php else : ?><a href="javascript:void(0);" onclick="edit_state(<?php echo $rows['id']; ?>,'<?php echo $rows['state']; ?>')"><span id="state_<?php echo $rows['id']; ?>" class="badge badge-danger">禁用
<?php endif; ?></span></a>
</center>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<div class="progress-w-percent-s"></div>
<div class="form-row">
<div class="form-group col-md-6 mt-2">
<div class="col-sm-4">
<div class="list_footer">
选中项:<a href="javascript:void(0);" onclick="delsubmit()" id="delsubmit">删除</a>
</div>
</div>
</div>
<div class="col-md-6">
<nav aria-label="Page navigation example">
<ul class="pagination justify-content-end">
<?php if (!$so) {
echo pagination($nums, $ENUMS, $page, $url);
} ?>
</ul>
</nav>
</div>
</div>
</form>
</div> <!-- end card-body-->
</div> <!-- end card-->
</div> <!-- end col -->
</div><!-- end row -->
<div id="note-modal" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-body">
<div class="text-center mt-2 mb-4"></div>
<form class="pl-3 pr-3" action="" name="note_log" id="note_log" method="post">
<div class="form-group">
<input class="form-control" type="text" style="display:none" id="kid" name="kid" value="">
<!--style="display:none" -->
<label for="username">备注</label>
<input class="form-control" type="text" id="note" name="note" required="" placeholder="备注内容">
</div>
<div class="form-group text-center">
<button class="btn btn-primary" type="submit" name="submit_note" id="submit_note" value="确认">确认备注</button>
</div>
</form>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<script>
$('#submit_note').click(function() {
let t = window.jQuery;
var note = $("input[name='note']").val();
var kid = $("input[name='kid']").val();
document.getElementById('submit_note').innerHTML = "<span class=\"spinner-border spinner-border-sm mr-1\" role=\"status\" aria-hidden=\"true\"></span>正在备注";
document.getElementById('submit_note').disabled = true;
$.ajax({
cache: false,
type: "POST", //请求的方式
url: "ajax.php?act=kami_note", //请求的文件名
data: {
note: note,
kid: kid
},
dataType: 'json',
success: function(data) {
console.log(data);
document.getElementById('submit_note').disabled = false;
document.getElementById('submit_note').innerHTML = "确认备注";
if (data.code == 200) {
t.NotificationApp.send("成功", data.msg, "top-center", "rgba(0,0,0,0.2)", "success");
window.setTimeout("window.location='" + window.location.href + "'", 1000);
} else {
t.NotificationApp.send("失败", data.msg, "top-center", "rgba(0,0,0,0.2)", "error");
}
}
});
return false; //重要语句:如果是像a链接那种有href属性注册的点击事件,可以阻止它跳转。
});
function note_id(i, s) {
var kid = document.getElementById("kid");
var note = document.getElementById("note");
kid.value = i;
note.value = s;
}
function get_screen(appid, see) {
var url = '';
if (appid > 0) {
url = '&app=' + appid;
}
if (see > 0) {
if (url == '') {
url = '&see=' + see;
} else {
url = url + '&see=' + see;
}
}
location.href = './?kami_adm' + url;
}
function checkAll() {
var code_Values = document.getElementsByTagName("input");
var all = document.getElementById("all");
if (code_Values.length) {
for (i = 0; i < code_Values.length; i++) {
if (code_Values[i].type == "checkbox") {
code_Values[i].checked = all.checked;
}
}
} else {
if (code_Values.type == "checkbox") {
code_Values.checked = all.checked;
}
}
}
function edit_state(id, state) {
let t = window.jQuery;
var badge = document.getElementById("state_" + id).className;
if (badge == 'badge badge-danger') {
state = 'y'
document.getElementById("state_" + id).className = "badge badge-success";
document.getElementById("state_" + id).innerHTML = "正常";
} else {
state = 'n'
document.getElementById("state_" + id).className = "badge badge-danger";
document.getElementById("state_" + id).innerHTML = "禁用";
}
//console.log(badge);
$.ajax({
cache: false,
type: "POST", //请求的方式
url: "ajax.php?act=kami_state", //请求的文件名
data: {
id: id,
state: state
},
dataType: 'json',
success: function(data) {
if (data.code == 200) {
t.NotificationApp.send("成功", data.msg, "top-center", "rgba(0,0,0,0.2)", "success")
} else {
t.NotificationApp.send("失败", data.msg, "top-center", "rgba(0,0,0,0.2)", "error")
}
}
});
return false; //重要语句:如果是像a链接那种有href属性注册的点击事件,可以阻止它跳转。
}
function delsubmit() {
var id_array = new Array();
$("input[name='ids[]']:checked").each(function() {
id_array.push($(this).val()); //向数组中添加元素  
}); //获取界面复选框的所有值
//ar chapterstr = id_array.join(',');//把复选框的值以数组形式存放
var url = window.location.href;
let t = window.jQuery;
if (id_array.length <= 0) {
t.NotificationApp.send("提示", "请选择要删除的项目", "top-center", "rgba(0,0,0,0.2)", "warning")
return false;
}
document.getElementById("delsubmit").innerHTML = "<div class=\"spinner-border spinner-border-sm mr-1\" style=\"margin-bottom:2px!important\" role=\"status\"></div>删除中";
document.getElementById("delsubmit").className = "text-title";
$("#delsubmit").attr("disabled", true).css("pointer-events", "none");
console.log(id_array);
$.ajax({
cache: false,
type: "POST", //请求的方式
url: "ajax.php?act=kami_del", //请求的文件名
data: {
id: id_array
},
dataType: 'json',
success: function(data) {
if (data.code == 200) {
t.NotificationApp.send("成功", data.msg, "top-center", "rgba(0,0,0,0.2)", "success")
} else {
t.NotificationApp.send("失败", data.msg, "top-center", "rgba(0,0,0,0.2)", "error")
}
//console.log(data);
window.setTimeout("window.location='" + url + "'", 1000);
}
});
return false; //重要语句:如果是像a链接那种有href属性注册的点击事件,可以阻止它跳转。
}
</script>