9 changed files with 483 additions and 12 deletions
@ -0,0 +1,142 @@ |
|||
<?php |
|||
|
|||
namespace app\admin\controller\user; |
|||
|
|||
use app\admin\validate\IpValidate; |
|||
use app\common\controller\AdminController; |
|||
use app\admin\model\Ip as IpModel; |
|||
use think\App; |
|||
use think\exception\ValidateException; |
|||
|
|||
class Ip extends AdminController |
|||
{ |
|||
public function __construct(App $app) |
|||
{ |
|||
parent::__construct($app); |
|||
$this->model = new IpModel(); |
|||
} |
|||
|
|||
public function index() |
|||
{ |
|||
if ($this->request->isAjax()) { |
|||
if (input('selectFields')) { |
|||
return $this->selectList(); |
|||
} |
|||
list($page, $limit, $where) = $this->buildTableParames(); |
|||
$count = $this->model |
|||
->where($where) |
|||
->count(); |
|||
$list = $this->model |
|||
->withoutField('delete_time') |
|||
->where($where) |
|||
->page($page, $limit) |
|||
->order('id') |
|||
->select() |
|||
->each(function ($item) { |
|||
$item['expire_time'] = date("Y-m-d H:i:s", $item['expire_time']); |
|||
return $item; |
|||
}); |
|||
$data = [ |
|||
'code' => 0, |
|||
'msg' => '', |
|||
'count' => $count, |
|||
'data' => $list |
|||
]; |
|||
return json($data); |
|||
} |
|||
return $this->fetch(); |
|||
} |
|||
|
|||
/** |
|||
* @NodeAnotation(title="添加") |
|||
*/ |
|||
public function add() |
|||
{ |
|||
if ($this->request->isPost()) { |
|||
$post = $this->request->post(); |
|||
try { |
|||
validate(IpValidate::class)->scene('add')->check($post); |
|||
$post['expire_time'] = strtotime($post['expire_time']); |
|||
$save = $this->model->save($post); |
|||
} catch (ValidateException $e) { |
|||
$this->error($e->getMessage()); |
|||
} catch (\Exception $e) { |
|||
$this->error('保存失败'); |
|||
} |
|||
$save ? $this->success('保存成功') : $this->error('保存失败'); |
|||
} |
|||
return $this->fetch(); |
|||
} |
|||
|
|||
/** |
|||
* @NodeAnotation(title="编辑") |
|||
*/ |
|||
public function edit($id) |
|||
{ |
|||
$row = $this->model->find($id); |
|||
empty($row) && $this->error('数据不存在'); |
|||
if ($this->request->isPost()) { |
|||
$post = $this->request->post(); |
|||
try { |
|||
validate(IpValidate::class)->scene('edit')->check($post); |
|||
$post['expire_time'] = strtotime($post['expire_time']); |
|||
$save = $row->save($post); |
|||
} catch (ValidateException $e) { |
|||
$this->error($e->getMessage()); |
|||
} catch (\Exception $e) { |
|||
$this->error('保存失败'); |
|||
} |
|||
$save ? $this->success('保存成功') : $this->error('保存失败'); |
|||
} |
|||
$this->assign('row', $row); |
|||
return $this->fetch(); |
|||
} |
|||
|
|||
/** |
|||
* @NodeAnotation(title="删除") |
|||
*/ |
|||
public function delete($id) |
|||
{ |
|||
$this->checkPostRequest(); |
|||
$row = $this->model->whereIn('id', $id)->select(); |
|||
$row->isEmpty() && $this->error('数据不存在'); |
|||
try { |
|||
$save = false; |
|||
foreach ($row as $value) { |
|||
$save = $this->model->where('id', $value['id'])->useSoftDelete('delete_time', time())->delete(); |
|||
} |
|||
} catch (\Exception $e) { |
|||
$this->error('删除失败'); |
|||
} |
|||
$save ? $this->success('删除成功') : $this->error('删除失败'); |
|||
} |
|||
|
|||
/** |
|||
* @NodeAnotation(title="属性修改") |
|||
*/ |
|||
public function modify() |
|||
{ |
|||
$this->checkPostRequest(); |
|||
$post = $this->request->post(); |
|||
$rule = [ |
|||
'id|ID' => 'require', |
|||
'field|字段' => 'require', |
|||
'value|值' => 'require', |
|||
]; |
|||
$this->validate($post, $rule); |
|||
if (!in_array($post['field'], $this->allowModifyFields)) { |
|||
$this->error('该字段不允许修改:' . $post['field']); |
|||
} |
|||
$row = $this->model->find($post['id']); |
|||
empty($row) && $this->error('数据不存在'); |
|||
try { |
|||
$row->save([ |
|||
$post['field'] => $post['value'], |
|||
]); |
|||
} catch (\Exception $e) { |
|||
$this->error($e->getMessage()); |
|||
} |
|||
$this->success('保存成功'); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
<?php |
|||
|
|||
namespace app\admin\model; |
|||
|
|||
use app\common\model\TimeModel; |
|||
|
|||
class Ip extends TimeModel |
|||
{ |
|||
protected $deleteTime = 'delete_time'; |
|||
|
|||
protected $defaultSoftDelete = '0'; |
|||
|
|||
} |
|||
@ -0,0 +1,28 @@ |
|||
<?php |
|||
|
|||
namespace app\admin\validate; |
|||
|
|||
use think\Validate; |
|||
|
|||
class IpValidate extends Validate |
|||
{ |
|||
|
|||
protected $rule = [ |
|||
'id|编号' => 'require|number', |
|||
'ip' => 'require|ip', |
|||
'port|端口' => 'require|number', |
|||
'expire_time|到期时间' => 'require|date', |
|||
'city|城市' => 'require', |
|||
'isp|通讯运营商' => 'require', |
|||
'out_ip|退出IP' => 'require|ip', |
|||
'status|状态' => 'require|in:0,1', |
|||
]; |
|||
|
|||
protected $message = []; |
|||
|
|||
protected $scene= [ |
|||
'add' => ['ip', 'port', 'expire_time', 'city', 'isp', 'out_ip', 'status'], |
|||
'edit' => ['id', 'ip', 'port', 'expire_time', 'city', 'isp', 'out_ip', 'status'] |
|||
]; |
|||
|
|||
} |
|||
@ -0,0 +1,67 @@ |
|||
<div class="layuimini-container"> |
|||
<form id="app-form" class="layui-form layuimini-form"> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">IP</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="ip" class="layui-input" lay-verify="required" lay-reqtext="请输入登录账户" placeholder="请输入ip" value=""> |
|||
<tip>填写ip。</tip> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">端口</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="port" class="layui-input" lay-verify="required" lay-reqtext="请输入登录账户" placeholder="请输入端口" value=""> |
|||
<tip>填写端口。</tip> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">到期时间</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="expire_time" class="layui-input" lay-verify="required" lay-reqtext="请输入登录账户" placeholder="请输入到期时间" value=""> |
|||
<tip>填写到期时间。</tip> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">城市</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="city" class="layui-input" lay-verify="required" lay-reqtext="请输入用户手机" placeholder="请输入城市" value=""> |
|||
<tip>填写城市。</tip> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">通讯运营商</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="isp" class="layui-input" lay-verify="required" lay-reqtext="请输入用户手机" placeholder="请输入通讯运营商" value=""> |
|||
<tip>填写通讯运营商。</tip> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">退出IP</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="out_ip" class="layui-input" lay-verify="required" lay-reqtext="请输入用户手机" placeholder="请输入退出IP" value=""> |
|||
<tip>填写退出IP。</tip> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">状态</label> |
|||
<div class="layui-input-block"> |
|||
<input type="radio" name="status" value="1" title="启用" checked> |
|||
<input type="radio" name="status" value="0" title="禁用"> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="hr-line"></div> |
|||
<div class="layui-form-item text-center"> |
|||
<button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit>确认</button> |
|||
<button type="reset" class="layui-btn layui-btn-primary layui-btn-sm">重置</button> |
|||
</div> |
|||
|
|||
</form> |
|||
</div> |
|||
@ -0,0 +1,68 @@ |
|||
<div class="layuimini-container"> |
|||
<form id="app-form" class="layui-form layuimini-form"> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">IP</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="ip" class="layui-input" lay-verify="required" lay-reqtext="请输入登录账户" placeholder="请输入ip" value="{$row.ip|default=''}"> |
|||
<tip>填写ip。</tip> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">端口</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="port" class="layui-input" lay-verify="required" lay-reqtext="请输入登录账户" placeholder="请输入端口" value="{$row.port|default=''}"> |
|||
<tip>填写端口。</tip> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">到期时间</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="expire_time" class="layui-input" lay-verify="required" lay-reqtext="请输入登录账户" placeholder="请输入到期时间" value="{:date('Y-m-d H:i:s',$row.expire_time)}"> |
|||
<tip>填写到期时间。</tip> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">城市</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="city" class="layui-input" lay-verify="required" lay-reqtext="请输入用户手机" placeholder="请输入城市" value="{$row.city|default=''}"> |
|||
<tip>填写城市。</tip> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">通讯运营商</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="isp" class="layui-input" lay-verify="required" lay-reqtext="请输入用户手机" placeholder="请输入通讯运营商" value="{$row.isp|default=''}"> |
|||
<tip>填写通讯运营商。</tip> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">退出IP</label> |
|||
<div class="layui-input-block"> |
|||
<input type="text" name="out_ip" class="layui-input" lay-verify="required" lay-reqtext="请输入用户手机" placeholder="请输入退出IP" value="{$row.out_ip|default=''}"> |
|||
<tip>填写退出IP。</tip> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="layui-form-item"> |
|||
<label class="layui-form-label required">状态</label> |
|||
<div class="layui-input-block"> |
|||
<input type="radio" name="status" value="1" title="启用" {if $row.status == 1}checked{/if}> |
|||
<input type="radio" name="status" value="0" title="禁用" {if $row.status == 0}checked{/if}> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="hr-line"></div> |
|||
<div class="layui-form-item text-center"> |
|||
<input type="hidden" name="id" value="{$row.id}"> |
|||
<button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit>确认</button> |
|||
<button type="reset" class="layui-btn layui-btn-primary layui-btn-sm">重置</button> |
|||
</div> |
|||
|
|||
</form> |
|||
</div> |
|||
@ -0,0 +1,10 @@ |
|||
<div class="layuimini-container"> |
|||
<div class="layuimini-main"> |
|||
<table id="currentTable" class="layui-table layui-hide" |
|||
data-auth-add="{:auth('user.ip/add')}" |
|||
data-auth-edit="{:auth('user.ip/edit')}" |
|||
data-auth-delete="{:auth('user.ip/delete')}" |
|||
lay-filter="currentTable"> |
|||
</table> |
|||
</div> |
|||
</div> |
|||
@ -0,0 +1,67 @@ |
|||
define(["jquery", "easy-admin"], function ($, ea) { |
|||
|
|||
var init = { |
|||
table_elem: '#currentTable', |
|||
table_render_id: 'currentTableRenderId', |
|||
index_url: 'user.ip/index', |
|||
add_url: 'user.ip/add', |
|||
edit_url: 'user.ip/edit', |
|||
delete_url: 'user.ip/delete', |
|||
modify_url: 'user.ip/modify', |
|||
}; |
|||
|
|||
var Controller = { |
|||
|
|||
index: function () { |
|||
|
|||
ea.table.render({ |
|||
init: init, |
|||
toolbar: [ |
|||
'refresh', |
|||
'add', |
|||
'delete', |
|||
[{ |
|||
text: '导入', |
|||
title: '确定更新新节点?', |
|||
url: 'user.ip/import', |
|||
method: 'request', |
|||
auth: 'refresh', |
|||
class: 'layui-btn layui-btn-success layui-btn-sm', |
|||
icon: 'fa fa-hourglass', |
|||
extend: 'data-table="' + init.table_render_id + '"', |
|||
}] |
|||
], |
|||
cols: [[ |
|||
{type: "checkbox"}, |
|||
{field: 'id', width: 80, title: '编号'}, |
|||
{field: 'ip', minWidth: 80, title: 'IP'}, |
|||
{field: 'port', minWidth: 80, title: '端口'}, |
|||
{field: 'city', minWidth: 80, title: '城市'}, |
|||
{field: 'isp', minWidth: 80, title: '运营商'}, |
|||
{field: 'out_ip', minWidth: 80, title: '退出IP'}, |
|||
{field: 'expire_time', minWidth: 80, title: '到期时间'}, |
|||
{field: 'status', title: '状态', width: 100, search: 'select', selectList: {0: '禁用', 1: '启用'}, templet: ea.table.switch}, |
|||
{field: 'create_time', minWidth: 80, title: '创建时间', search: 'range'}, |
|||
{ |
|||
width: 250, |
|||
title: '操作', |
|||
templet: ea.table.tool, |
|||
operat: [ |
|||
'edit', |
|||
'delete' |
|||
] |
|||
} |
|||
]], |
|||
}); |
|||
|
|||
ea.listen(); |
|||
}, |
|||
add: function () { |
|||
ea.listen(); |
|||
}, |
|||
edit: function () { |
|||
ea.listen(); |
|||
} |
|||
}; |
|||
return Controller; |
|||
}); |
|||
Loading…
Reference in new issue