Files
TwoNav/templates/admin/js/link_list.js
2023-04-10 12:48:39 +08:00

379 lines
17 KiB
JavaScript

layui.use(['form','table','dropdown','miniTab'], function () {
var $ = layui.jquery;
var table = layui.table;
var form = layui.form;
var dropdown = layui.dropdown;
var miniTab = layui.miniTab;
var categorys = [];
var IDs = [];
var api = get_api('read_link_list'); //列表接口
var limit = localStorage.getItem(u + "_limit")??50; //尝试读取本地记忆数据,没有就默认50
var pwds = [];
miniTab.listen();
//渲染表格
renderTable1();
function renderTable1(){
//先获取分类数据(用于显示所属分类和筛选)
$.post(get_api('read_category_list','Simplify'),function(data,status){
if(data.code != 1){
layer.alert("获取分类数据失败,请刷新重试",{icon:5,title:'错误',anim: 2,closeBtn: 0,btn: ['刷新页面']},function () {location.reload();});
return;
}else{
$("#fid").empty();
$("#fid").append('<option value="0" selected="">全部</option>');
$("#fid").append('<optgroup label="用户分类">');
for( key in data.data ){
if(data.data[key].fid == 0){
$("#fid").append("<option value=\""+key+"\">"+data.data[key].name+"</option>");
$("#batch_category_fid").append("<option value=\""+key+"\">"+data.data[key].name+"</option>");
}else{
$("#fid").append("<option value=\""+key+"\">&emsp;"+data.data[key].name+"</option>");
$("#batch_category_fid").append("<option value=\""+key+"\">&emsp;"+data.data[key].name+"</option>");
}
}
$("#fid").append('</optgroup>');
layui.form.render("select");
categorys = data.data;//赋值分类数据
renderTable2();//开始渲染表格
}
});
}
var cols=[[ //表头
{type:'checkbox'} //开启复选框
,{field: 'lid', title: 'ID', width:80, sort: true,hide:false}
,{field: 'category_name', title: '所属分类',sort:true,width:140,event: 'edit_category',templet:function(d){
//检查是否存在,避免特殊情况报错
if (categorys && categorys[d.fid] && categorys[d.fid].font_icon && categorys[d.fid].name) {
return '<i class="' + categorys[d.fid].font_icon + '"></i> ' + categorys[d.fid].name;
}else{
return 'Null';
}
}}
,{field: 'title', title: '链接标题', width:200, edit: 'text'}
,{ title:'操作', toolbar: '#tablebar',width:110}
,{field:'pwd_id',title:'密码',width:70,templet: function(d){
return d.pwd_id>0?'<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="pwd">查看</a>':'';
}}
,{field: 'property', title: '私有', width: 100, sort: true,templet: function(d){
return "<input type='checkbox' value='" + d.lid + "' lay-filter='property' lay-skin='switch' lay-text='私有|公开' " + (d.property == 1?"checked":"" )+ ">";
}}
,{field: 'status', title: '状态', width: 100, sort: true,templet: function(d){
return "<input type='checkbox' value='" + d.lid + "' lay-filter='status' lay-skin='switch' lay-text='启用|禁用' " + (d.status == 1?"checked":"" )+ ">";
}}
,{field: 'url', title: 'URL',templet:function(d){
return '<a color="" target = "_blank" href = "' + d.url + '" title = "' + d.url + '" referrerpolicy="same-origin" >' + d.url + '</a>';
}}
,{field: 'click', title: '点击数',width:90,sort:true}
,{field: 'add_time', title: '添加时间', width:160, sort: true,templet:function(d){
var add_time = timestampToTime(d.add_time);
return add_time;
}}
,{field: 'up_time', title: '修改时间', width:160,sort:true,templet:function(d){
return d.up_time == null ?'':timestampToTime(d.up_time);
}}
]];
//渲染表格函数
var renderTable2 = function () {
table.render({
elem: '#table'
,height: 'full-110' //自适应高度
,url: api //数据接口
,page: true //开启分页
,limit:limit //默认每页显示行数
,limits: [20,50,100,300,500]
,even:true //隔行背景色
,loading:true //加载条
//,defaultToolbar:false
,toolbar: '#toolbar'
,id:'table'
,cols: cols
,method: 'post'
,response: {statusCode: 1 }
,done: function (res, curr, count) {
load_dropdown();//加载移动端菜单
//获取当前每页显示数量.并写入本都储存
var temp_limit = $(".layui-laypage-limits option:selected").val();
if(temp_limit > 0 && localStorage.getItem(u + "_limit") != temp_limit){
localStorage.setItem(u + "_limit",temp_limit);
}
$("[data-field='lid']").addClass('layui-hide-xs');
$("[data-field='url']").addClass('layui-hide-xs');
$("[data-field='category_name']").addClass('layui-hide-xs');
$("[data-field='add_time']").addClass('layui-hide-xs');
$("[data-field='up_time']").addClass('layui-hide-xs');
$("[data-field='click']").addClass('layui-hide-xs');
//$(".layui-laypage .layui-laypage-count").css("padding-left","35px");
$(".layui-laypage .layui-laypage-prev").addClass('layui-hide-xs');
$(".layui-laypage .layui-laypage-curr").addClass('layui-hide-xs');
$(".layui-laypage .layui-laypage-next").addClass('layui-hide-xs');
$(".layui-laypage .layui-laypage-skip").addClass('layui-hide-xs');
$(".layui-table-tool-self").addClass('layui-hide-xs');
//加载加密分组数据
$.post(get_api('read_pwd_group_list'),{'page':'1','limit':'9999'},function(data,status){
if(data.code == 1){
pwds = [];
for(var i =0;i<data.count;i++){
pwds['pid_'+data.data[i].pid] = {'pwd':data.data[i].password,'name':data.data[i].name};
}
}
});
}
});
};
function link_search(){
var fid = document.getElementById("fid").value;
var keyword = document.getElementById("link_keyword").value;//获取输入内容
var property = document.getElementById("property").value;
var status = document.getElementById("status").value;
table.reload('table', {
url: api
,method: 'post'
,request: {
pageName: 'page' //页码的参数名称
,limitName: 'limit' //每页数据量的参数名
}
,where: {query:keyword,fid:fid,property:property,status:status}
,page: {curr: 1}
});
}
//关键字回车搜索
$('#link_keyword').keydown(function (e){if(e.keyCode === 13){link_search();}});
//搜索按钮点击
$('#link_search').on('click', function(){link_search();});
//监听工具栏
table.on('toolbar(table)', function (obj) {
var event = obj.event;
if (event == 'add_link') {
layer.open({
title: '添加链接',
type: 2,
scrollbar: false,
shade: 0.2,
maxmin:false,
shadeClose: true,
area: ['100%', '100%'],
content: './index.php?c=admin&page=link_add&source=link_list&u=' + u,
});
//做一个关闭时检查是否需要刷新数据?
return;
}
var checkStatus = table.checkStatus(obj.config.id);
if( checkStatus.data.length == 0 && ['LAYTABLE_COLS','LAYTABLE_EXPORT','LAYTABLE_PRINT','batch'].indexOf(event) == -1 ) {
layer.msg('未选中任何数据!');
return;
}
//取被选中的链接ID
tableIds = checkStatus.data.map(function (value) {return value.lid;});
tableIds = JSON.stringify(tableIds);
//通用型批量操作
if(['batch_del','batch_private','batch_public','batch_start','batch_disable'].indexOf(event) != -1){
if(event == 'batch_del'){
layer.confirm('确认删除?',{icon: 3, title:'温馨提示'}, function(index){
batch_operation(tableIds,event);
});
}else{
batch_operation(tableIds,event);
}
}else if(event === 'batch_category'){
IDs = tableIds;
index = layer.open({type: 1,scrollbar: false,shadeClose: true,title: '批量修改分类',area : ['100%', '100%'],content: $('.batch_category')});
}else if(event === 'testing'){
var trs = table.cache.table; //表数据
var count = checkStatus.data.length;//勾选数量
var open_index = layer.open({
title:'检测原理/注意事项'
,content: "0.将勾选的链接通过服务器获取目标URL的状态码<br /> 1.不能检测内网/备用链接/其他链接(如迅雷等)<br />2.受限于网络的复杂性,检测结果仅供参<br />3.检测结束有问题的链接处于勾选状态<br />4.短时间的频繁请求可能被服务器视为CC攻击<br />5.本功能订阅可用,反馈和建议直接Q我<br />6.红色:无法连通(服务器>链接,不代表本机) <br />7.绿色:正常 黄色:重定向 <br />8.本功能不会修改和删除任何数据<br />"
,btn: ['开始检测', '取消']
,yes: function(index, layero){
if($("#subscribe").text() != '1'){
layer.msg("未检测到有效订阅,无法使用此功能!",{icon:5});
return true;
}
var current = 0 ,fail = 0 ,INDEX = 0;
var testapi = get_api('other_testing_link');
var div = "div[lay-id='table'] .layui-table-main table tbody tr";
layer.load(2, {shade: [0.1,'#fff']});//加载层
$("#testing_tip").show();//显示进度提示
layer.close(open_index); //关闭小窗口
layer.tips("正在检测中,请勿操作页面...","#testing_tip",{tips: [3, "#3595CC"],time: 9000});
for (let i = 0; i < trs.length; i++) {
//未勾选的跳过
if(trs[i].LAY_CHECKED != true){continue;}
$.post(testapi,{url:trs[i].url},function(re,status){
INDEX = trs[i].LAY_TABLE_INDEX; //行索引
if(re.StatusCode == 200 || re.StatusCode == 301 || re.StatusCode == 302 ){
$("div[lay-id='table'] td .layui-form-checkbox").eq(INDEX).click();//正常的取消勾选
if (re.StatusCode == 200){
$(div).eq(INDEX).css("color","limegreen"); //正常的绿色
}else{
$(div).eq(INDEX).css("color","#ffb800"); //重定向的黄色
}
}else{
fail++;
//失败的红色
$(div).eq(INDEX).css("color","red");
$(div).eq(INDEX).css("font-weight","bold");
}
current++;
});
}
//创建定时器等待检测完成
var wait_id = setInterval(function() {
if(current == count){
$("#testing_tip").text('检测完毕,异常数:'+fail);
layer.closeAll();//关闭所有
layer.msg("检测完毕",{icon:1});
clearInterval(wait_id);
console.log('链接检测完毕,销毁定时器');
}else{
$("#testing_tip").text('正在检测中 '+current +"/"+count +',异常数:'+fail);
}
}, 100);
return false;
},btn2: function(index, layero){
return true;
},cancel: function(){
return true;
}
})
}
});
//监听工具条
table.on('tool(table)', function (obj) {
var data = obj.data;
if (obj.event === 'del') {
layer.confirm('确认删除?',{icon: 3, title:'温馨提示'}, function(index){
$.post(get_api('write_link','del'),{lid:data.lid},function(data,status){
if(data.code == 1) {
obj.del();
layer.msg(data.msg, {icon: 1});
}else{
layer.msg(data.msg, {icon: 5});
}
});
});
}else if(obj.event === 'edit') {
var index = layer.open({
title: '编辑链接',
type: 2,
scrollbar: false,
shade: 0.2,
maxmin:false,
shadeClose: true,
area: ['100%', '100%'],
content: './index.php?c=admin&page=link_edit&u=' + u +'&id=' + data.lid
});
}else if(obj.event === 'edit_category'){
//点击分类名弹出编辑分类?
}else if(obj.event === 'pwd'){
layer.alert( '名称: ' + pwds['pid_' + data.pwd_id].name + '<br>密码: ' + pwds['pid_' + data.pwd_id].pwd,{icon:4,title: data.title + ' - 访问密码',anim: 2,closeBtn: 0});
}
});
//监听单元格编辑
table.on('edit(table)', function(obj){
$.post(get_api('write_link','fast_edit'),{'lid':obj.data.lid,'field':obj.field,'value':obj.value},function(data,status){
if(data.code == 1){
$("*").blur();
layer.msg('修改成功')
obj.update({up_time:data.t});
} else{
layer.msg(data.msg);
}
});
});
//开关监听
form.on('switch(property)',function(obj) {
var sw = obj.elem.checked; //取开关状态
var lid = obj.elem.value;
var contexts = sw?'私有':'公开';
$.post(get_api('write_link','property_sw'), {'lid': lid,'property': sw?'1':'0'},function(data, status) {
if (data.code == 1) {
layer.msg('已设为' + contexts );
} else {
layer.msg('设为' + contexts + '失败');
}
});
});
//开关监听
form.on('switch(status)',function(obj) {
var sw = obj.elem.checked; //取开关状态
var lid = obj.elem.value;
var contexts = sw?'启用':'禁止';
$.post(get_api('write_link','status_sw'), {'lid': lid,'status': sw?'1':'0'},function(data, status) {
if (data.code == 1) {
layer.msg('已设为' + contexts );
} else {
layer.msg('设为' + contexts + '失败');
}
});
});
//关闭按钮
$(document).on('click', '#close', function() {
layer.close(index);//关闭当前页
});
//批量修改分类
form.on('submit(batch_category)', function (data) {
var fid = $("#batch_category_fid").val();
if(fid == 0 || fid == null){
layer.msg('请选择分类',{icon: 5});
return false;
}
$.post(get_api('write_link','batch_category'),{lid:IDs,fid:fid},function(data,status){
if(data.code == 1){
layer.close(index);
link_search();
layer.msg(data.msg,{icon: 1})
} else{
layer.msg(data.msg,{icon: 5});
}
});
return false;
});
//批量操作(通用型:删除/设为公开/设为私有等)
function batch_operation(d,k){
$.post(get_api('write_link',k),{lid:d},function(data,status){
if(data.code == 1){
link_search();
layer.msg(data.msg,{icon: 1})
} else{
layer.msg(data.msg,{icon: 5});
}
});
}
//手机端操作
function load_dropdown(){
var data = [];
$(".layui-btn-normal.layui-hide-xs").each(function(){
data.push({'title':$(this).text(),'id':$(this).attr('lay-event')});
});
//console.log(data);
dropdown.render({elem: '#batch'
,data: data
,click: function(obj){$('#'+ obj.id).click();}
});
}
});