mirror of
https://github.com/netcccyun/dnsmgr.git
synced 2026-03-09 23:17:22 +08:00
支持批量添加域名
This commit is contained in:
parent
6ce2e006b5
commit
e59ff8997e
@ -154,6 +154,26 @@ class Domain extends BaseController
|
||||
return view();
|
||||
}
|
||||
|
||||
public function domain_add()
|
||||
{
|
||||
if (!checkPermission(2)) return $this->alert('error', '无权限');
|
||||
$list = Db::name('account')->select();
|
||||
$accounts = [];
|
||||
$types = [];
|
||||
foreach ($list as $row) {
|
||||
$accounts[$row['id']] = $row['id'] . '_' . DnsHelper::$dns_config[$row['type']]['name'];
|
||||
if (!array_key_exists($row['type'], $types)) {
|
||||
$types[$row['type']] = DnsHelper::$dns_config[$row['type']]['name'];
|
||||
}
|
||||
if (!empty($row['remark'])) {
|
||||
$accounts[$row['id']] .= '(' . $row['remark'] . ')';
|
||||
}
|
||||
}
|
||||
View::assign('accounts', $accounts);
|
||||
View::assign('types', $types);
|
||||
return view();
|
||||
}
|
||||
|
||||
public function domain_data()
|
||||
{
|
||||
if (!checkPermission(1)) return json(['total' => 0, 'rows' => []]);
|
||||
@ -234,6 +254,25 @@ class Domain extends BaseController
|
||||
Db::name('dmtask')->where('did', $id)->delete();
|
||||
Db::name('optimizeip')->where('did', $id)->delete();
|
||||
return json(['code' => 0]);
|
||||
} elseif ($act == 'batchadd') {
|
||||
if (!checkPermission(2)) return $this->alert('error', '无权限');
|
||||
$aid = input('post.aid/d');
|
||||
$domains = input('post.domains');
|
||||
if (empty($domains)) return json(['code' => -1, 'msg' => '参数不能为空']);
|
||||
$data = [];
|
||||
foreach ($domains as $row) {
|
||||
$data[] = [
|
||||
'aid' => $aid,
|
||||
'name' => $row['name'],
|
||||
'thirdid' => $row['id'],
|
||||
'addtime' => date('Y-m-d H:i:s'),
|
||||
'is_hide' => 0,
|
||||
'is_sso' => 1,
|
||||
'recordcount' => $row['recordcount'],
|
||||
];
|
||||
}
|
||||
Db::name('domain')->insertAll($data);
|
||||
return json(['code' => 0, 'msg' => '成功添加' . count($data) . '个域名!']);
|
||||
}
|
||||
return json(['code' => -3]);
|
||||
}
|
||||
@ -249,13 +288,10 @@ class Domain extends BaseController
|
||||
$result = $dns->getDomainList($kw, $page, $pagesize);
|
||||
if (!$result) return json(['code' => -1, 'msg' => '获取域名列表失败,' . $dns->getError()]);
|
||||
|
||||
$newlist = [];
|
||||
foreach ($result['list'] as $row) {
|
||||
if (!Db::name('domain')->where('aid', $aid)->where('name', $row['Domain'])->find()) {
|
||||
$newlist[] = $row;
|
||||
}
|
||||
foreach ($result['list'] as &$row) {
|
||||
$row['disabled'] = Db::name('domain')->where('aid', $aid)->where('name', $row['Domain'])->find() != null;
|
||||
}
|
||||
return json(['code' => 0, 'data' => ['total' => $result['total'], 'list' => $newlist]]);
|
||||
return json(['code' => 0, 'data' => ['total' => $result['total'], 'list' => $result['list']]]);
|
||||
}
|
||||
|
||||
//获取解析线路和最小TTL
|
||||
|
||||
@ -1923,4 +1923,6 @@ com.zw
|
||||
mil.cn
|
||||
edu.kg
|
||||
edu.cn
|
||||
eu.org
|
||||
eu.org
|
||||
us.kg
|
||||
ggff.net
|
||||
@ -343,7 +343,7 @@ class DeployHelper
|
||||
'taskinputs' => [],
|
||||
],
|
||||
'mwpanel' => [
|
||||
'name' => 'mdserver-web',
|
||||
'name' => 'MW面板',
|
||||
'class' => 1,
|
||||
'icon' => 'mwpanel.ico',
|
||||
'note' => null,
|
||||
|
||||
@ -179,7 +179,7 @@ class west implements DnsInterface
|
||||
private function execute($path, $params)
|
||||
{
|
||||
$params['username'] = $this->username;
|
||||
$params['time'] = $this->getMillisecond();
|
||||
$params['time'] = getMillisecond();
|
||||
$params['token'] = md5($this->username.$this->api_password.$params['time']);
|
||||
try{
|
||||
$response = curl_client($this->baseUrl . $path, http_build_query($params), null, null, null, $this->proxy);
|
||||
@ -202,12 +202,6 @@ class west implements DnsInterface
|
||||
}
|
||||
}
|
||||
|
||||
private function getMillisecond()
|
||||
{
|
||||
list($s1, $s2) = explode(' ', microtime());
|
||||
return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);
|
||||
}
|
||||
|
||||
private function setError($message)
|
||||
{
|
||||
$this->error = $message;
|
||||
|
||||
@ -133,7 +133,11 @@ class CertDeployService
|
||||
if (empty($this->task['processid'])) return;
|
||||
if (!is_dir(app()->getRuntimePath() . 'log')) mkdir(app()->getRuntimePath() . 'log');
|
||||
$file_name = app()->getRuntimePath().'log/'.$this->task['processid'].'.log';
|
||||
$file_exists = file_exists($file_name);
|
||||
file_put_contents($file_name, $txt . PHP_EOL, FILE_APPEND);
|
||||
if (!$file_exists) {
|
||||
@chmod($file_name, 0777);
|
||||
}
|
||||
if(php_sapi_name() == 'cli'){
|
||||
echo $txt . PHP_EOL;
|
||||
}
|
||||
|
||||
@ -420,7 +420,11 @@ class CertOrderService
|
||||
if (empty($this->order['processid'])) return;
|
||||
if (!is_dir(app()->getRuntimePath() . 'log')) mkdir(app()->getRuntimePath() . 'log');
|
||||
$file_name = app()->getRuntimePath().'log/'.$this->order['processid'].'.log';
|
||||
$file_exists = file_exists($file_name);
|
||||
file_put_contents($file_name, $txt . PHP_EOL, FILE_APPEND);
|
||||
if (!$file_exists) {
|
||||
@chmod($file_name, 0777);
|
||||
}
|
||||
if(php_sapi_name() == 'cli'){
|
||||
echo $txt . PHP_EOL;
|
||||
}
|
||||
|
||||
@ -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,record_batch_add')}">
|
||||
<li class="{:checkIfActive('domain,record,record_log,record_batch_add,domain_add')}">
|
||||
<a href="/domain"><i class="fa fa-list-ul fa-fw"></i> <span>域名管理</span></a>
|
||||
</li>
|
||||
{if request()->user['level'] eq 2}
|
||||
|
||||
@ -12,7 +12,6 @@
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal" id="form-store">
|
||||
<input type="hidden" name="recordcount"/>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">域名账户</label>
|
||||
<div class="col-sm-9">
|
||||
@ -27,8 +26,10 @@
|
||||
<label class="col-sm-3 control-label">选择域名</label>
|
||||
<div class="col-sm-9">
|
||||
<select name="domain" id="domainList" class="form-control"></select>
|
||||
<span class="pull-right"><a href="/domain/add">批量添加</a></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
@ -200,11 +201,6 @@ $(document).ready(function(){
|
||||
getDomainList()
|
||||
})
|
||||
|
||||
$('#domainList').on('select2:select', function (e) {
|
||||
var data = e.params.data;
|
||||
$("#form-store input[name=recordcount]").val(data.recordcount);
|
||||
});
|
||||
|
||||
$('[data-toggle="popover"]').popover()
|
||||
})
|
||||
function addframe(){
|
||||
@ -222,7 +218,7 @@ function saveAdd(){
|
||||
}
|
||||
var name = select[0].text;
|
||||
var thirdid = select[0].id;
|
||||
var recordcount = $("#form-store input[name=recordcount]").val();
|
||||
var recordcount = select[0].recordcount;
|
||||
if(aid=='' || thirdid==''){
|
||||
layer.alert('请确保各项不能为空!');return false;
|
||||
}
|
||||
@ -342,9 +338,9 @@ function getDomainList(){
|
||||
params.page = params.page || 1
|
||||
if(data.code == 0){
|
||||
var resultData = [];
|
||||
for (var i = 0; i < data.data.list.length; i++) {
|
||||
resultData.push({'id': data.data.list[i].DomainId, 'text': data.data.list[i].Domain, 'recordcount': data.data.list[i].RecordCount});
|
||||
}
|
||||
$.each(data.data.list, function(index, item){
|
||||
resultData.push({'id': item.DomainId, 'text': item.Domain + (item.disabled ? ' (已添加)' : ''), 'recordcount': item.RecordCount, disabled:item.disabled});
|
||||
})
|
||||
return {
|
||||
results: resultData,
|
||||
pagination: {
|
||||
|
||||
158
app/view/domain/domain_add.html
Normal file
158
app/view/domain/domain_add.html
Normal file
@ -0,0 +1,158 @@
|
||||
{extend name="common/layout" /}
|
||||
{block name="title"}批量添加域名{/block}
|
||||
{block name="main"}
|
||||
<div class="row" id="app">
|
||||
<div class="col-xs-12 col-sm-10 col-md-8 col-lg-6 center-block" style="float: none;">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><h3 class="panel-title"><a href="/domain" class="btn btn-sm btn-default pull-right" style="margin-top:-6px"><i class="fa fa-reply fa-fw"></i> 返回</a>批量添加域名</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 control-label">域名账户</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="input-group">
|
||||
<select name="aid" class="form-control" v-model="aid">
|
||||
{foreach $accounts as $k=>$v}
|
||||
<option value="{$k}">{$v}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
<div class="input-group-btn">
|
||||
<button type="button" @click="getDomainList" class="btn btn-info">获取域名</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">选择域名</label>
|
||||
<div class="col-sm-9">
|
||||
<table class="table table-striped table-hover table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><input type="checkbox" v-model="checkall"></th>
|
||||
<th>域名</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="item in domainList">
|
||||
<td><input type="checkbox" name="domain[]" :value="item.DomainId" v-model="item.checked" :disabled="item.disabled"></td>
|
||||
<td><span :title="item.DomainId">{{item.Domain}}</span><font color="#888" v-if="item.disabled"> (已添加)</font></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-3 col-sm-9"><button type="button" class="btn btn-primary" @click="submit">确定添加</button></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
{block name="script"}
|
||||
<script src="{$cdnpublic}vue/2.6.14/vue.min.js"></script>
|
||||
<script src="{$cdnpublic}layer/3.1.1/layer.js"></script>
|
||||
<script>
|
||||
new Vue({
|
||||
el: '#app',
|
||||
data: {
|
||||
aid: '',
|
||||
domainList: [],
|
||||
page: 1,
|
||||
pagesize: 10,
|
||||
checkall: false,
|
||||
},
|
||||
watch: {
|
||||
aid: function(val){
|
||||
this.domainList = [];
|
||||
},
|
||||
checkall: function(val){
|
||||
this.domainList.forEach(function(item){
|
||||
item.checked = val&&!item.disabled;
|
||||
});
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.aid = '{$accounts|@key}';
|
||||
},
|
||||
methods: {
|
||||
async getDomainListPaged(){
|
||||
var that = this;
|
||||
return new Promise((resolve, reject) => {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/domain/list",
|
||||
data: {aid: that.aid, page: that.page, pagesize: that.pagesize},
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
if(data.code == 0){
|
||||
resolve(data.data);
|
||||
}else{
|
||||
reject(data.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
async getDomainList(){
|
||||
this.domainList = [];
|
||||
while(true){
|
||||
try{
|
||||
layer.msg('正在获取第'+this.page+'页域名', {icon: 16, shade: 0.01});
|
||||
var data = await this.getDomainListPaged();
|
||||
if(data.total == 0 || data.list.length == 0){
|
||||
layer.closeAll();
|
||||
break;
|
||||
}
|
||||
this.domainList = this.domainList.concat(data.list);
|
||||
if(this.domainList.length >= data.total){
|
||||
layer.closeAll();
|
||||
break;
|
||||
}
|
||||
this.page++;
|
||||
}catch(e){
|
||||
layer.alert(e, {icon: 2});
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
submit(){
|
||||
var domains = [];
|
||||
this.domainList.forEach(function(item){
|
||||
if(item.checked && !item.disabled){
|
||||
domains.push({name: item.Domain, id: item.DomainId, recordcount:item.RecordCount});
|
||||
}
|
||||
});
|
||||
if(this.aid == ''){
|
||||
layer.alert('请选择域名账户');
|
||||
return;
|
||||
}
|
||||
if(domains.length == 0){
|
||||
layer.alert('请选择要添加的域名');
|
||||
return;
|
||||
}
|
||||
var ii = layer.load(2, {shade:[0.1,'#fff']});
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/domain/op/act/batchadd",
|
||||
data: {aid: this.aid, domains: domains},
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
layer.close(ii);
|
||||
if(data.code == 0){
|
||||
layer.alert(data.msg, {icon: 1}, function(){
|
||||
window.location.href = '/domain';
|
||||
});
|
||||
}else{
|
||||
layer.alert(data.msg, {icon: 2});
|
||||
}
|
||||
},
|
||||
error: function(data){
|
||||
layer.close(ii);
|
||||
layer.msg('服务器错误');
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
@ -31,7 +31,7 @@ return [
|
||||
'show_error_msg' => true,
|
||||
'exception_tmpl' => \think\facade\App::getAppPath() . 'view/exception.tpl',
|
||||
|
||||
'version' => '1023',
|
||||
'version' => '1024',
|
||||
|
||||
'dbversion' => '1023'
|
||||
];
|
||||
|
||||
@ -52,6 +52,7 @@ Route::group(function () {
|
||||
Route::post('/domain/data', 'domain/domain_data');
|
||||
Route::post('/domain/op', 'domain/domain_op');
|
||||
Route::post('/domain/list', 'domain/domain_list');
|
||||
Route::get('/domain/add', 'domain/domain_add');
|
||||
Route::get('/domain', 'domain/domain');
|
||||
|
||||
Route::post('/record/data/:id', 'domain/record_data');
|
||||
|
||||
Loading…
Reference in New Issue
Block a user