Compare commits

..

6 Commits
1.3 ... 1.4

Author SHA1 Message Date
net909
424d2c8132 sql 2024-05-22 11:25:07 +08:00
net909
86bffab357 1.4 2024-05-22 11:24:13 +08:00
net909
c1edf905f3 优化解析记录分页 2024-05-22 11:17:34 +08:00
net909
b252816711 支持批量添加修改解析 2024-05-17 18:35:56 +08:00
net909
7a58292fb9 批量修改与添加 2024-05-10 19:43:52 +08:00
net909
d4b7bcfbf6 fix 2024-05-01 17:57:34 +08:00
14 changed files with 546 additions and 22 deletions

View File

@@ -232,7 +232,8 @@ function getMillisecond()
}
function getDnsType($value){
if(filter_var($value, FILTER_VALIDATE_IP))return 'A';
if(filter_var($value, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))return 'A';
else if(filter_var($value, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))return 'AAAA';
else return 'CNAME';
}

View File

@@ -155,7 +155,7 @@ class Domain extends BaseController
$select = Db::name('domain')->alias('A')->join('account B','A.aid = B.id');
if(!empty($kw)){
$select->whereLike('name', '%'.$kw.'%');
$select->whereLike('name|A.remark', '%'.$kw.'%');
}
if(!empty($type)){
$select->whereLike('B.type', $type);
@@ -164,7 +164,7 @@ class Domain extends BaseController
$select->where('is_hide', 0)->where('A.name', 'in', request()->user['permission']);
}
$total = $select->count();
$rows = $select->fieldRaw('A.*,B.type,B.remark')->order('A.id','desc')->limit($offset, $limit)->select();
$rows = $select->fieldRaw('A.*,B.type,B.remark aremark')->order('A.id','desc')->limit($offset, $limit)->select();
$list = [];
foreach($rows as $row){
@@ -210,9 +210,11 @@ class Domain extends BaseController
if(!$row) return json(['code'=>-1, 'msg'=>'域名不存在']);
$is_hide = input('post.is_hide/d');
$is_sso = input('post.is_sso/d');
$remark = input('post.remark', null, 'trim');
Db::name('domain')->where('id', $id)->update([
'is_hide' => $is_hide,
'is_sso' => $is_sso,
'remark' => $remark,
]);
return json(['code'=>0, 'msg'=>'修改域名配置成功!']);
}elseif($act == 'del'){
@@ -534,6 +536,7 @@ class Domain extends BaseController
}
$success = 0;
$fail = 0;
$dns = DnsHelper::getModel($drow['aid'], $drow['name'], $drow['thirdid']);
if($action == 'open'){
foreach($recordids as $recordid){
@@ -559,10 +562,136 @@ class Domain extends BaseController
}
}
$msg = '成功删除'.$success.'条解析记录';
}else if($action == 'remark'){
$remark = input('post.remark', null, 'trim');
if(empty($remark)) $remark = null;
foreach($recordids as $recordid){
if($dns->updateDomainRecordRemark($recordid, $remark)){
$success++;
}else{
$fail++;
}
}
$msg = '批量修改备注,成功'.$success.'条,失败'.$fail.'条';
}
return json(['code'=>0, 'msg'=>$msg]);
}
public function record_batch_edit(){
$id = input('param.id/d');
$drow = Db::name('domain')->where('id', $id)->find();
if(!$drow){
return json(['code'=>-1, 'msg'=>'域名不存在']);
}
if(!checkPermission(0, $drow['name'])) return $this->alert('error', '无权限');
$action = input('post.action', null, 'trim');
$recordinfo = input('post.recordinfo', null, 'trim');
$recordinfo = json_decode($recordinfo, true);
if($action == 'value'){
$type = input('post.type', null, 'trim');
$value = input('post.value', null, 'trim');
if(empty($recordinfo) || empty($type) || empty($value)){
return json(['code'=>-1, 'msg'=>'参数不能为空']);
}
$dns = DnsHelper::getModel($drow['aid'], $drow['name'], $drow['thirdid']);
$success = 0; $fail = 0;
foreach($recordinfo as $record){
$recordid = $dns->updateDomainRecord($record['recordid'], $record['name'], $type, $value, $record['line'], $record['ttl'], $record['mx'], $record['remark']);
if($recordid){
$this->add_log($drow['name'], '修改解析', $type.'记录 '.$record['name'].' '.$value.' (线路:'.$record['line'].' TTL:'.$record['ttl'].')');
$success++;
}else{
$fail++;
}
}
return json(['code'=>0, 'msg'=>'批量修改解析记录,成功'.$success.'条,失败'.$fail.'条']);
}else if($action == 'line'){
$line = input('post.line', null, 'trim');
if(empty($recordinfo) || empty($line)){
return json(['code'=>-1, 'msg'=>'参数不能为空']);
}
$dns = DnsHelper::getModel($drow['aid'], $drow['name'], $drow['thirdid']);
$success = 0; $fail = 0;
foreach($recordinfo as $record){
$recordid = $dns->updateDomainRecord($record['recordid'], $record['name'], $record['type'], $record['value'], $line, $record['ttl'], $record['mx'], $record['remark']);
if($recordid){
$this->add_log($drow['name'], '修改解析', $record['type'].'记录 '.$record['name'].' '.$record['value'].' (线路:'.$line.' TTL:'.$record['ttl'].')');
$success++;
}else{
$fail++;
}
}
return json(['code'=>0, 'msg'=>'批量修改解析线路,成功'.$success.'条,失败'.$fail.'条']);
}
}
public function record_batch_add(){
$id = input('param.id/d');
$drow = Db::name('domain')->where('id', $id)->find();
if(!$drow){
return $this->alert('error', '域名不存在');
}
$dnstype = Db::name('account')->where('id', $drow['aid'])->value('type');
if(!checkPermission(0, $drow['name'])) return $this->alert('error', '无权限');
if(request()->isAjax()){
$record = input('post.record', null, 'trim');
$type = input('post.type', null, 'trim');
$line = input('post.line', null, 'trim');
$ttl = input('post.ttl/d', 600);
$mx = input('post.mx/d', 1);
$recordlist = explode("\n", $record);
if(empty($record) || empty($recordlist)){
return json(['code'=>-1, 'msg'=>'参数不能为空']);
}
$dns = DnsHelper::getModel($drow['aid'], $drow['name'], $drow['thirdid']);
$success = 0; $fail = 0;
foreach($recordlist as $record){
$record = trim($record);
$arr = explode(' ', $record);
if(empty($record) || empty($arr[0]) || empty($arr[1])) continue;
$thistype = empty($type) ? getDnsType($arr[1]) : $type;
$recordid = $dns->addDomainRecord($arr[0], $thistype, $arr[1], $line, $ttl, $mx);
if($recordid){
$this->add_log($drow['name'], '添加解析', $thistype.'记录 '.$arr[0].' '.$arr[1].' (线路:'.$line.' TTL:'.$ttl.')');
$success++;
}else{
$fail++;
}
}
return json(['code'=>0, 'msg'=>'批量添加解析,成功'.$success.'条,失败'.$fail.'条']);
}
list($recordLine, $minTTL) = $this->get_line_and_ttl($drow);
$recordLineArr = [];
foreach($recordLine as $key=>$item){
$recordLineArr[] = ['id'=>strval($key), 'name'=>$item['name'], 'parent'=>$item['parent']];
}
$dnsconfig = DnsHelper::$dns_config[$dnstype];
$dnsconfig['type'] = $dnstype;
View::assign('domainId', $id);
View::assign('domainName', $drow['name']);
View::assign('recordLine', $recordLineArr);
View::assign('minTTL', $minTTL?$minTTL:1);
View::assign('dnsconfig', $dnsconfig);
return view('batchadd');
}
public function record_log(){
$id = input('param.id/d');
$drow = Db::name('domain')->where('id', $id)->find();

View File

@@ -61,7 +61,11 @@ class Index extends BaseController
$value=trim($value);
if(empty($value))continue;
$value = str_replace('dnsmgr_',$mysql_prefix,$value);
Db::execute($value);
try{
Db::execute($value);
}catch(Exception $e){
}
}
}

View File

@@ -69,7 +69,7 @@ class Optimizeip extends BaseController
'recordnum' => input('post.recordnum/d'),
'ttl' => input('post.ttl/d'),
'remark' => input('post.remark', null, 'trim'),
'addtime' => time(),
'addtime' => date('Y-m-d H:i:s'),
'active' => 1
];

View File

@@ -5,7 +5,7 @@ CREATE TABLE `dnsmgr_config` (
PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `dnsmgr_config` VALUES ('version', '1005');
INSERT INTO `dnsmgr_config` VALUES ('version', '1007');
INSERT INTO `dnsmgr_config` VALUES ('notice_mail', '0');
INSERT INTO `dnsmgr_config` VALUES ('notice_wxtpl', '0');
INSERT INTO `dnsmgr_config` VALUES ('mail_smtp', 'smtp.qq.com');
@@ -33,6 +33,7 @@ CREATE TABLE `dnsmgr_domain` (
`is_hide` tinyint(1) NOT NULL DEFAULT '0',
`is_sso` tinyint(1) NOT NULL DEFAULT '0',
`recordcount` int(1) NOT NULL DEFAULT '0',
`remark` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

View File

@@ -59,4 +59,7 @@ CREATE TABLE IF NOT EXISTS `dnsmgr_optimizeip` (
`errmsg` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `did` (`did`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `dnsmgr_domain`
ADD COLUMN `remark` varchar(100) DEFAULT NULL;

View File

@@ -103,7 +103,7 @@
{if request()->user['type'] eq 'user'}<li class="{:checkIfActive('index')}">
<a href="/"><i class="fa fa-home fa-fw"></i> <span>后台首页</span></a>
</li>{/if}
<li class="{:checkIfActive('domain,record,record_log')}">
<li class="{:checkIfActive('domain,record,record_log,record_batch_add')}">
<a href="/domain"><i class="fa fa-list-ul fa-fw"></i> <span>域名管理</span></a>
</li>
{if request()->user['level'] eq 2}

View File

@@ -0,0 +1,139 @@
{extend name="common/layout" /}
{block name="title"}批量添加解析 - {$domainName}{/block}
{block name="main"}
<div class="row" id="app">
<div class="col-xs-12 center-block" style="float: none;">
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title"><a href="/record/{$domainId}" class="btn btn-sm btn-default pull-right" style="margin-top:-6px"><i class="fa fa-reply fa-fw"></i> 返回</a>批量添加解析 - {$domainName}</h3></div>
<div class="panel-body">
<form onsubmit="return false" method="post" class="form-horizontal" role="form" id="form-store">
<div class="form-group">
<label class="col-sm-3 col-xs-12 control-label no-padding-right">主机记录&记录值</label>
<div class="col-sm-6">
<textarea name="record" placeholder="主机记录和记录值用空格隔开,一行一个" class="form-control" rows="8" required></textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label no-padding-right">记录类型</label>
<div class="col-sm-6">
<select name="type" class="form-control">
<option value="">A / CNAME / AAAA 自动识别</option>
<option value="A">A</option>
<option value="CNAME">CNAME</option>
<option value="AAAA">AAAA</option>
<option value="NS">NS</option>
<option value="MX">MX</option>
<option value="SRV">SRV</option>
<option value="TXT">TXT</option>
<option value="CAA">CAA</option>
{if $dnsconfig.redirect}<option value="REDIRECT_URL">显性URL</option>
<option value="FORWARD_URL">隐性URL</option>{/if}
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label no-padding-right">线路类型</label>
<div class="col-sm-6" id="line_list">
</div>
</div>
<div class="form-group" style="display:none" id="mx_type">
<label class="col-sm-3 control-label no-padding-right">MX优先级</label>
<div class="col-sm-6">
<input type="text" class="form-control" name="mx" value="10">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label no-padding-right">TTL</label>
<div class="col-sm-6">
<input type="text" class="form-control" name="ttl" value="600" placeholder="指解析结果在DNS服务器中的缓存时间" required min="{$minTTL}">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-6"><button type="button" class="btn btn-primary" onclick="save()">保存</button></div>
</div>
</form>
</div>
</div>
{/block}
{block name="script"}
<script src="{$cdnpublic}layer/3.1.1/layer.js"></script>
<script src="/static/js/bootstrapValidator.min.js"></script>
<script>
var recordLine = {$recordLine|json_encode|raw};
var dnsconfig = {$dnsconfig|json_encode|raw};
var defaultLine = recordLine[0].id;
$(document).ready(function(){
$("select[name=type]").change(function(){
if($(this).val() == 'MX'){
$("#mx_type").show();
}else{
$("#mx_type").hide();
}
});
$("#form-store").bootstrapValidator();
initLine();
});
function initLine(option, elem){
option = option || '';
elem = elem || 'line_list';
$("#"+elem).empty();
$.each(recordLine, function(index, item){
if(item.parent == null){
option += '<option value="'+item.id+'">'+item.name+'</option>';
}
})
$("#"+elem).append('<select name="line" class="form-control" onchange="changeLine(this, \''+elem+'\')">'+option+'</select>');
}
function changeLine(obj, elem){
var line = $(obj).val();
var flag = false;
$("#"+elem).children().each(function(index, elem){
if(flag) $(elem).remove()
if(obj == elem){
flag = true;
}
})
if($(obj).find("option:selected").text() == '子集线路(非必填)') return;
var tempLine = recordLine.filter((x) => x.parent == line)
if(tempLine.length > 0){
var option = '<option value="'+line+'">子集线路(非必填)</option>';
$.each(tempLine, function(index, item){
option += '<option value="'+item.id+'">'+item.name+'</option>';
})
$("#"+elem).append('<select name="line" class="form-control" onchange="changeLine(this, \''+elem+'\')">'+option+'</select>');
}
}
function save(){
$("#form-store").data("bootstrapValidator").validate();
if(!$("#form-store").data("bootstrapValidator").isValid()){
return;
}
var act = $("#form-store input[name=action]").val();
var ii = layer.load(2);
$.ajax({
type : 'POST',
url : '/record/batchadd/{$domainId}',
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(){
if(document.referrer.indexOf('/record?') > 0)
window.location.href = document.referrer;
else
window.location.href = '/record/{$domainId}';
});
}else{
layer.alert(data.msg, {icon: 2})
}
}
});
}
</script>
{/block}

View File

@@ -74,6 +74,12 @@
</div>
</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="remark" placeholder="">
</div>
</div>
</form>
</div>
<div class="modal-footer">
@@ -91,7 +97,7 @@
<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="域名">
<input type="text" class="form-control" name="kw" placeholder="域名或备注">
</div>
<div class="form-group">
<select name="type" class="form-control"><option value="">所有平台</option>{foreach $types as $k=>$v}
@@ -139,7 +145,7 @@ $(document).ready(function(){
field: 'typename',
title: '平台账户',
formatter: function(value, row, index) {
return '<span title="'+row.remark+'" data-toggle="tooltip" data-placement="right" title="Tooltip on right"><img src="/static/images/'+row.type+'.ico" class="type-logo"></img>'+value+'('+row.aid+')</span>';
return '<span title="'+row.aremark+'" data-toggle="tooltip" data-placement="right" title="Tooltip on right"><img src="/static/images/'+row.type+'.ico" class="type-logo"></img>'+value+'('+row.aid+')</span>';
}
},
{
@@ -157,6 +163,10 @@ $(document).ready(function(){
field: 'addtime',
title: '添加时间'
},
{
field: 'remark',
title: '备注'
},
{
field: 'is_hide',
title: '是否隐藏',

View File

@@ -78,6 +78,78 @@ td{overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width:360px;
</div>
</div>
</div>
<div class="modal" id="modal-store2" 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">&times;</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-store2">
<input type="hidden" name="action" value="value"/>
<input type="hidden" name="recordinfo"/>
<div class="form-group">
<label class="col-sm-3 control-label">记录类型</label>
<div class="col-sm-9">
<select name="type" class="form-control">
<option value="A">A</option>
<option value="CNAME">CNAME</option>
<option value="AAAA">AAAA</option>
<option value="NS">NS</option>
<option value="MX">MX</option>
<option value="SRV">SRV</option>
<option value="TXT">TXT</option>
<option value="CAA">CAA</option>
{if $dnsconfig.redirect}<option value="REDIRECT_URL">显性URL</option>
<option value="FORWARD_URL">隐性URL</option>{/if}
</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="value" placeholder="输入记录值" required>
</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="batch_save()">保存</button>
</div>
</div>
</div>
</div>
<div class="modal" id="modal-store3" 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">&times;</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-store3">
<input type="hidden" name="action" value="line"/>
<input type="hidden" name="recordinfo"/>
<div class="form-group">
<label class="col-sm-3 control-label">线路类型</label>
<div class="col-sm-9" id="line_list3">
</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="batch_save_line()">保存</button>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 center-block" style="float: none;">
<div class="panel panel-default panel-default">
@@ -99,7 +171,7 @@ td{overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width:360px;
<a href="javascript:addframe()" class="btn btn-success"><i class="fa fa-plus"></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('open')">启用</a></li><li><a href="javascript:operation('pause')">暂停</a></li><li><a href="javascript:operation('delete')">删除</a></li></ul>
<ul class="dropdown-menu"><li><a href="/record/batchadd/{$domainId}">添加</a></li><li><a href="javascript:operation('open')">启用</a></li><li><a href="javascript:operation('pause')">暂停</a></li><li><a href="javascript:operation('edit')">修改记录</a></li><li><a href="javascript:operation('editline')">修改线路</a></li>{if $dnsconfig.remark == 1}<li><a href="javascript:operation('editremark')">修改备注</a></li>{/if}<li><a href="javascript:operation('delete')">删除</a></li></ul>
</div>
<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>
@@ -119,14 +191,14 @@ td{overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width:360px;
<script src="{$cdnpublic}bootstrap-table/1.20.2/bootstrap-table.min.js"></script>
<script src="{$cdnpublic}bootstrap-table/1.20.2/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js"></script>
<script src="/static/js/bootstrapValidator.min.js"></script>
<script src="/static/js/custom.js"></script>
<script src="/static/js/custom.js?v=1001"></script>
<script>
var recordLine = {$recordLine|json_encode|raw};
var dnsconfig = {$dnsconfig|json_encode|raw};
var defaultLine = recordLine[0].id;
$(document).ready(function(){
updateToolbar();
const defaultPageSize = 15;
let defaultPageSize = getCookie('record_pagesize') ? getCookie('record_pagesize') : 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;
@@ -218,6 +290,12 @@ $(document).ready(function(){
}
},
],
onPageChange: function(number, size){
if(size != defaultPageSize){
defaultPageSize = size;
setCookie('record_pagesize', size);
}
},
});
$("select[name=type]").change(function(){
@@ -229,21 +307,23 @@ $(document).ready(function(){
});
$("#form-store").bootstrapValidator();
$("#form-store2").bootstrapValidator();
})
function initLine(option){
function initLine(option, elem){
option = option || '';
$("#line_list").empty();
elem = elem || 'line_list';
$("#"+elem).empty();
$.each(recordLine, function(index, item){
if(item.parent == null){
option += '<option value="'+item.id+'">'+item.name+'</option>';
}
})
$("#line_list").append('<select name="line" class="form-control" onchange="changeLine(this)">'+option+'</select>');
$("#"+elem).append('<select name="line" class="form-control" onchange="changeLine(this, \''+elem+'\')">'+option+'</select>');
}
function changeLine(obj){
function changeLine(obj, elem){
var line = $(obj).val();
var flag = false;
$("#line_list").children().each(function(index, elem){
$("#"+elem).children().each(function(index, elem){
if(flag) $(elem).remove()
if(obj == elem){
flag = true;
@@ -256,7 +336,7 @@ function changeLine(obj){
$.each(tempLine, function(index, item){
option += '<option value="'+item.id+'">'+item.name+'</option>';
})
$("#line_list").append('<select name="line" class="form-control" onchange="changeLine(this)">'+option+'</select>');
$("#"+elem).append('<select name="line" class="form-control" onchange="changeLine(this, \''+elem+'\')">'+option+'</select>');
}
}
function addframe(){
@@ -409,6 +489,29 @@ function operation(action){
layer.msg('请选择要操作的记录');
return;
}
if(action == 'edit'){
var records = [];
$.each(rows, function(index, item){
records.push({recordid:item.RecordId, name:item.Name, line:item.Line, mx:item.MX, ttl:item.TTL, remark:item.Remark});
})
batch_edit(records)
return;
}else if(action == 'editline'){
var records = [];
$.each(rows, function(index, item){
records.push({recordid:item.RecordId, name:item.Name, type:item.Type, value:item.Value, mx:item.MX, ttl:item.TTL, remark:item.Remark});
})
batch_edit_line(records)
return;
}else if(action == 'editremark'){
var ids = [];
$.each(rows, function(index, item){
ids.push(item.RecordId);
})
batch_edit_remark(ids)
return;
}
var ids = [];
$.each(rows, function(index, item){
ids.push(item.RecordId);
@@ -437,5 +540,109 @@ function operation(action){
layer.close(confirmobj);
});
}
function batch_edit(records){
var row = $("#listTable").bootstrapTable('getSelections')[0];
$("#batch_num").text(records.length);
$("#modal-store2").modal('show');
$("#form-store2 input[name=recordinfo]").val(JSON.stringify(records));
$("#form-store2 input[name=recordid]").val(row.RecordId);
$("#form-store2 input[name=name]").val(row.Name);
$("#form-store2 select[name=type]").val(row.Type);
$("select[name=type]").change();
$("#form-store2 input[name=value]").val(row.Value);
$("#form-store2").data("bootstrapValidator").resetForm();
}
function batch_save(){
$("#form-store2").data("bootstrapValidator").validate();
if(!$("#form-store2").data("bootstrapValidator").isValid()){
return;
}
var ii = layer.load(2);
$.ajax({
type : 'POST',
url : '/record/batchedit/{$domainId}',
data : $("#form-store2").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-store2").modal('hide');
searchSubmit();
});
}else{
layer.alert(data.msg, {icon: 2})
}
}
});
}
function batch_edit_line(records){
$("#batch_num").text(records.length);
$("#modal-store3").modal('show');
$("#form-store3 input[name=recordinfo]").val(JSON.stringify(records));
initLine('', 'line_list3');
}
function batch_save_line(){
var ii = layer.load(2);
$.ajax({
type : 'POST',
url : '/record/batchedit/{$domainId}',
data : $("#form-store3").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-store3").modal('hide');
searchSubmit();
});
}else{
layer.alert(data.msg, {icon: 2})
}
}
});
}
function batch_edit_remark(recordids) {
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="remark" value="" autocomplete="off" placeholder="备注信息"></div></div>',
btn: ['确认', '取消'],
yes: function(){
var remark = $("input[name='remark']").val();
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : '/record/batch/{$domainId}',
data : {action:'remark', recordids:recordids, remark:remark},
dataType : 'json',
success : function(data) {
layer.close(ii);
layer.alert(data.msg,{
icon: 1,
closeBtn: false
}, function(){
layer.closeAll();
searchSubmit();
});
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
});
}
</script>
{/block}

View File

@@ -155,7 +155,7 @@ function setActive(id, active){
}, 'json');
}
function delItem(id){
layer.confirm('确定要删除此切换策略吗?', {
layer.confirm('确定要删除此任务吗?', {
btn: ['确定','取消']
}, function(){
$.post('/optimizeip/opipform/del', {id: id}, function(data){

View File

@@ -31,7 +31,7 @@ return [
'show_error_msg' => true,
'exception_tmpl' => \think\facade\App::getAppPath() . 'view/exception.tpl',
'version' => '1005',
'version' => '1007',
'dbversion' => '1005'
'dbversion' => '1007'
];

View File

@@ -130,4 +130,32 @@ var isMobile = function(){
return true;
}
return false;
}
function setCookie(name,value,expire = null)
{
var cookie = name + "=" + escape(value);
if(expire){
var exp = new Date();
exp.setTime(exp.getTime() + expire*1000);
cookie += ";expires=" + exp.toGMTString();
}
document.cookie = cookie;
}
function getCookie(name)
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg))
return unescape(arr[2]);
else
return null;
}
function delCookie(name)
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null){
document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
}

View File

@@ -56,6 +56,8 @@ Route::group(function () {
Route::post('/record/status/:id', 'domain/record_status');
Route::post('/record/remark/:id', 'domain/record_remark');
Route::post('/record/batch/:id', 'domain/record_batch');
Route::post('/record/batchedit/:id', 'domain/record_batch_edit');
Route::any('/record/batchadd/:id', 'domain/record_batch_add');
Route::any('/record/log/:id', 'domain/record_log');
Route::post('/record/list', 'domain/record_list');
Route::get('/record/:id', 'domain/record');