创建版本
This commit is contained in:
@@ -0,0 +1,225 @@
|
||||
<style>
|
||||
body {
|
||||
text-align: center;
|
||||
background-image: url({{$asset_url}}/images/login-bg2.jpg);
|
||||
background-repeat: no-repeat;
|
||||
height: 100vh;
|
||||
background-attachment: scroll;
|
||||
background-position: center center;
|
||||
-webkit-background-size: cover;
|
||||
-moz-background-size: cover;
|
||||
-o-background-size: cover;
|
||||
background-size: cover;
|
||||
}
|
||||
.content-body {
|
||||
margin: 0;
|
||||
}
|
||||
.overlay {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
z-index: 0;
|
||||
background: rgba(0, 0, 0, 0.50);
|
||||
background: linear-gradient(to bottom, rgba(25, 137, 250, 0.65), rgba(25, 137, 250, 0.35));
|
||||
}
|
||||
|
||||
.text-muted {
|
||||
color: #fff;
|
||||
}
|
||||
.text-muted a {
|
||||
color: #fff;
|
||||
}
|
||||
.login-box {
|
||||
position: relative;
|
||||
margin: 0 auto;
|
||||
text-align: left;
|
||||
max-width: 750px;
|
||||
}
|
||||
.login-box .h5 {
|
||||
text-align: center;
|
||||
line-height: 20px;
|
||||
}
|
||||
.toast {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.login-box {
|
||||
padding-top: 220px;
|
||||
}
|
||||
|
||||
.logo-text {
|
||||
padding: 20px;
|
||||
padding-top: 60px;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.text-title {
|
||||
font-weight: 500;
|
||||
font-size: 36px;
|
||||
}
|
||||
.footer {
|
||||
margin-top: 10px;
|
||||
padding-top: 10px;
|
||||
border-top: solid 1px rgba(255, 255, 255, 0.3);
|
||||
text-align: right;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.login-box {
|
||||
padding-top: 60px;
|
||||
}
|
||||
.logo-text {
|
||||
text-align: center;
|
||||
}
|
||||
.row {
|
||||
margin-left: 15px;
|
||||
margin-right: 15px;
|
||||
}
|
||||
.footer {
|
||||
border-top: 0;
|
||||
text-align: center;
|
||||
}
|
||||
.panel-heading {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.fa-lock {
|
||||
color: #666;
|
||||
font-size: 18px;
|
||||
}
|
||||
.text-tips {
|
||||
color: #999;
|
||||
padding-top: 5px;
|
||||
}
|
||||
.panel {
|
||||
border-radius: 5px !important;
|
||||
}
|
||||
|
||||
.show_captcha {
|
||||
display: flex;
|
||||
}
|
||||
#refresh_captcha {
|
||||
margin-left: 5px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="overlay"></div>
|
||||
|
||||
<div class="login-box">
|
||||
|
||||
@if(Session::has('error'))
|
||||
<div class="alert alert-warning alert-dismissible" role="alert">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
{{Session::pull('error')}}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-7 col-xs-12" id="aaa">
|
||||
<div class="logo-text layer" data-depth="0.60">
|
||||
<h2 class="text-white text-title">{{$setting['title']}}</h2>
|
||||
<small class="text-muted">Good Online Office</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-5 col-xs-12">
|
||||
|
||||
<form class="form-horizontal" url="{{url('login')}}" method="post" id="myform" name="myform">
|
||||
|
||||
<div class="panel">
|
||||
|
||||
<div class="panel-heading wrapper b-b b-light">
|
||||
<h4 class="font-thin m-t-none m-b-none"><i class="fa fa-lock"></i> 登录</h4>
|
||||
<div class="text-tips">
|
||||
请使用您的帐号密码进行登录
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel-body" style="padding:20px 30px 0 30px;">
|
||||
<div class="form-group">
|
||||
<input type="text" placeholder="账号" class="form-control" name="username" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="password" placeholder="密码" class="form-control" name="password" required>
|
||||
</div>
|
||||
|
||||
<div id="show_captcha" style="display:@if($show_captcha) '' @else none @endif">
|
||||
<div class="form-group">
|
||||
<div class="show_captcha">
|
||||
<input type="text" maxlength="4" name="captcha" class="form-control" id="input-code" autocomplete="off" placeholder="验证码">
|
||||
<a id="refresh_captcha" title="点击刷新">
|
||||
<img id="captcha_image" src="{{url('user/auth/captcha')}}" style="vertical-align:middle;height:30px;">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="checkbox m-b-md m-t-none">
|
||||
<label class="i-checks i-checks-sm">
|
||||
<input type="checkbox" name="remember">
|
||||
<i></i> 下次自动登录
|
||||
</label>
|
||||
</div>
|
||||
<div class="line line-dashed"></div>
|
||||
<button type="submit" class="btn btn-lg btn-info btn-block"> 登录 </button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
<div class="line line-dashed"></div>
|
||||
<div class="text-center text-muted">
|
||||
<a class="text-base" href="{{url('qrcode')}}">
|
||||
<i class="fa fa-qrcode"></i> 扫码登录</a>
|
||||
</div>
|
||||
-->
|
||||
|
||||
<div class="footer">
|
||||
<small class="text-muted">© {{date('Y')}} {{$version}}</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function($) {
|
||||
// ajax 登录
|
||||
$('#myform').on('submit', function () {
|
||||
var url = $(this).attr('action');
|
||||
var data = $(this).serialize();
|
||||
$.post(url, data, function (res) {
|
||||
if (res.show_captcha) {
|
||||
$('#show_captcha').show();
|
||||
}
|
||||
if (res.success) {
|
||||
toastrSuccess(res.msg);
|
||||
app.redirect('/');
|
||||
} else {
|
||||
// 登录错误显示验证码
|
||||
if (res.show_captcha) {
|
||||
refresh_captcha();
|
||||
}
|
||||
toastrError(res.msg);
|
||||
}
|
||||
}, 'json');
|
||||
return false;
|
||||
});
|
||||
// 刷新验证码方法
|
||||
function refresh_captcha() {
|
||||
$('#captcha_image').attr('src', settings.public_url + '/user/auth/captcha?_=' + Math.random());
|
||||
}
|
||||
// 刷新验证码
|
||||
$(document).on('click', '#refresh_captcha', function () {
|
||||
refresh_captcha();
|
||||
});
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,72 @@
|
||||
<style>
|
||||
body {
|
||||
color: #badbe6;
|
||||
text-align: center;
|
||||
background: -webkit-linear-gradient(right, #198fb4, #0b6fab);
|
||||
background: -o-linear-gradient(right, #198fb4, #0b6fab);
|
||||
background: linear-gradient(to left, #198fb4, #0b6fab);
|
||||
background-color: #3586b7;
|
||||
}
|
||||
.text-muted {
|
||||
color: #badbe6;
|
||||
}
|
||||
.text-muted a {
|
||||
color: #fff;
|
||||
}
|
||||
.list-group-item {
|
||||
border-color: #fff;
|
||||
}
|
||||
.login-box {
|
||||
margin: 0 auto;
|
||||
text-align: left;
|
||||
}
|
||||
.login-box .h5 {
|
||||
text-align: center;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div class="login-box">
|
||||
|
||||
<div class="container w-xxl w-auto-xs" style="padding-top:50px;">
|
||||
|
||||
<div class="wrapper text-center">
|
||||
<h2 class="text-white">{{$setting['title']}}</h2>
|
||||
<small class="text-muted">Different Office</small>
|
||||
</div>
|
||||
|
||||
@if(Session::has('error'))
|
||||
<div class="alert alert-warning alert-dismissible" role="alert">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
{{Session::pull('error')}}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="text-center">
|
||||
<img src="{{url('index/api/qrcode', ['size' => 5, 'data' => 'qrlogin:'.time().''])}}">
|
||||
</div>
|
||||
|
||||
<div class="line line-dashed"></div>
|
||||
|
||||
<div class="text-center text-muted">
|
||||
<a class="text-base" href="{{url('login')}}"><i class="fa fa-mail-reply"></i> 账号登录</a>
|
||||
</div>
|
||||
|
||||
<div class="line line-dashed"></div>
|
||||
|
||||
<div class="text-center">
|
||||
<small class="text-muted">© {{date('Y')}} {{$version}}</small>
|
||||
</div>
|
||||
|
||||
<div class="line line-dashed"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="h5 m-t-lg text-white help">
|
||||
<p>合作经销商的账号和密码请与客户经理联络。</p>
|
||||
<p>公司员工、供应商的账号和密码请与总经理助理联络。</p>
|
||||
<p>系统异常请与上述岗位联络。</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,106 @@
|
||||
<style>
|
||||
body {
|
||||
background: -webkit-linear-gradient(right, #198fb4, #0b6fab);
|
||||
background: -o-linear-gradient(right, #198fb4, #0b6fab);
|
||||
background: linear-gradient(to left, #198fb4, #0b6fab);
|
||||
background-color: #3586b7;
|
||||
}
|
||||
.text-muted {
|
||||
color: #badbe6;
|
||||
}
|
||||
.text-muted a {
|
||||
color: #fff;
|
||||
}
|
||||
</style>
|
||||
<div class="container w-xxl w-auto-xs" style="padding-top:100px;">
|
||||
|
||||
@if(Session::has('error'))
|
||||
<div class="alert alert-warning alert-dismissible" role="alert">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
{{Session::pull('error')}}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="panel">
|
||||
<div class="panel-body">
|
||||
|
||||
<form class="form-horizontal padder-md" url="{{url()}}" method="post" id="myform" name="myform" role="form">
|
||||
<div class="form-group">
|
||||
<label class="control-label">两步验证</label>
|
||||
<input type="text" class="form-control" maxlength="6" id="code" name="code" value="{{Request::old('code')}}">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<!--
|
||||
<span id="sms-info"><a onclick="totp.smsCode();" href="javascript:;" class="btn btn-info btn-xs" id="sms-code">点击短信获取验证码</a></span>
|
||||
-->
|
||||
<div class="pull-right">
|
||||
<a href="{{url('logout')}}" class="btn btn-default"> 注销 </a>
|
||||
<button type="submit" class="btn btn-primary"> 验证 </button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="line line-dashed"></div>
|
||||
|
||||
<div class="text-center">
|
||||
<small class="text-muted">© {{date('Y')}} {{$version}}</small>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
$('#myform').submit(function() {
|
||||
var url = $(this).attr('action');
|
||||
var data = $(this).serialize();
|
||||
$.post(url, data, function(res) {
|
||||
if(res.status) {
|
||||
toastrSuccess(res.data);
|
||||
app.redirect('/');
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
}
|
||||
}, 'json');
|
||||
return false;
|
||||
});
|
||||
|
||||
var totp = {
|
||||
second: 0,
|
||||
timeId: undefined,
|
||||
init: function(second)
|
||||
{
|
||||
clearTimeout(this.timeId);
|
||||
this.second = second;
|
||||
this.start();
|
||||
},
|
||||
start: function()
|
||||
{
|
||||
var self = this;
|
||||
if(this.second > 0) {
|
||||
$("#second").html(this.second);
|
||||
this.timeId = setTimeout(function()
|
||||
{
|
||||
self.start();
|
||||
}, 1000);
|
||||
this.second--;
|
||||
|
||||
} else {
|
||||
clearTimeout(this.timeId);
|
||||
$("#sms-info").html('<a class="btn btn-info btn-xs" onclick="getSMSCode();" href="javascript:;" id="sms-code">重新获取验证码</a>');
|
||||
}
|
||||
},
|
||||
smsCode:function()
|
||||
{
|
||||
var self = this;
|
||||
$.get('{{url()}}',{sms:true}, function(res) {
|
||||
if(res.status == true) {
|
||||
self.init(res.data);
|
||||
$("#sms-info").html('<span class="btn btn-info btn-xs disabled">剩余<span id="second">' + res.data + '</span>秒重新获取</span>');
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,3 @@
|
||||
<form class="form-horizontal form-controller" method="post" id="department" name="department">
|
||||
{{$form['tpl']}}
|
||||
</form>
|
||||
@@ -0,0 +1,133 @@
|
||||
<div class="wrapper-xs">
|
||||
<form id="dialog-{{$search['query']['id']}}-search-form" class="form-inline" method="get">
|
||||
@include('searchForm6')
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id="dialog-{{$search['query']['id']}}" class="ag-theme-balham" style="width:100%;height:380px;"></div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var search = JSON.parse('{{json_encode($search)}}');
|
||||
var params = search.query;
|
||||
|
||||
var option = gdoo.formKey(params);
|
||||
var event = gdoo.event.get(option.key);
|
||||
event.trigger('query', params);
|
||||
|
||||
var sid = params.prefix == 1 ? 'sid' : 'id';
|
||||
var gridDiv = document.querySelector("#dialog-{{$search['query']['id']}}");
|
||||
var grid = new agGridOptions();
|
||||
var selectedData = {};
|
||||
var multiple = params.multi == 0 ? false : true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = params;
|
||||
grid.suppressRowClickSelection = true;
|
||||
grid.rowSelection = multiple ? 'multiple' : 'single';
|
||||
|
||||
grid.autoGroupColumnDef = {
|
||||
headerName: '名称',
|
||||
width: 250,
|
||||
cellRendererParams: {
|
||||
checkbox: true,
|
||||
suppressCount: false,
|
||||
}
|
||||
};
|
||||
grid.treeData = true;
|
||||
grid.groupDefaultExpanded = -1;
|
||||
|
||||
grid.getDataPath = function(data) {
|
||||
return data.tree_path;
|
||||
};
|
||||
grid.columnDefs = [];
|
||||
grid.columnDefs.push({suppressMenu: true, cellClass:'text-center', field: 'id', headerName: 'ID', width: 60});
|
||||
|
||||
grid.onRowClicked = function(row) {
|
||||
var selected = row.node.isSelected();
|
||||
if (selected === false) {
|
||||
row.node.setSelected(true, true);
|
||||
}
|
||||
};
|
||||
|
||||
grid.onRowDoubleClicked = function (row) {
|
||||
var ret = writeSelected();
|
||||
if (ret == true) {
|
||||
$('#gdoo-dialog-' + params.dialog_index).dialog('close');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 初始化选择
|
||||
*/
|
||||
function initSelected() {
|
||||
if (params.is_grid) {
|
||||
} else {
|
||||
var rows = {};
|
||||
var id = $('#'+option.id).val();
|
||||
if (id) {
|
||||
var ids = id.split(',');
|
||||
for (var i = 0; i < ids.length; i++) {
|
||||
rows[ids[i]] = ids[i];
|
||||
}
|
||||
}
|
||||
grid.api.forEachNode(function(node) {
|
||||
var key = node.data[sid];
|
||||
if (rows[key] != undefined) {
|
||||
node.setSelected(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入选中
|
||||
*/
|
||||
function writeSelected() {
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (params.is_grid) {
|
||||
var list = gdoo.forms[params.form_id];
|
||||
list.api.dialogSelected(params);
|
||||
} else {
|
||||
var id = [];
|
||||
var text = [];
|
||||
$.each(rows, function(k, row) {
|
||||
id.push(row[sid]);
|
||||
text.push(row.name);
|
||||
});
|
||||
$('#'+option.id).val(id.join(','));
|
||||
$('#'+option.id+'_text').val(text.join(','));
|
||||
|
||||
if (event.exist('onSelect')) {
|
||||
return event.trigger('onSelect', multiple ? rows : rows[0]);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
grid.writeSelected = writeSelected;
|
||||
gdoo.dialogs[option.id] = grid;
|
||||
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData();
|
||||
|
||||
// 数据载入成功
|
||||
grid.remoteSuccessed = function() {
|
||||
initSelected();
|
||||
}
|
||||
|
||||
var data = search.forms;
|
||||
var search = $("#dialog-{{$search['query']['id']}}-search-form").searchForm({
|
||||
data: data
|
||||
});
|
||||
search.find('#search-submit').on('click', function() {
|
||||
var params = search.serializeArray();
|
||||
$.map(params, function(row) {
|
||||
data[row.name] = row.value;
|
||||
});
|
||||
grid.remoteData(data);
|
||||
return false;
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,66 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
<div class="list-jqgrid">
|
||||
<div id="{{$header['table']}}-grid" class="ag-theme-balham"></div>
|
||||
<div class="ag-theme-balham" id="ag-pagination"></div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var grid = new agGridOptions();
|
||||
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(11);
|
||||
|
||||
config.cols[0]['hide'] = true;
|
||||
config.cols[1]['hide'] = true;
|
||||
grid.autoGroupColumnDef = {
|
||||
headerName: '名称',
|
||||
width: 250,
|
||||
cellRendererParams: {
|
||||
checkbox: true,
|
||||
suppressCount: true,
|
||||
}
|
||||
};
|
||||
|
||||
grid.treeData = true;
|
||||
grid.groupDefaultExpanded = -1;
|
||||
|
||||
grid.getDataPath = function(data) {
|
||||
return data.tree_path;
|
||||
};
|
||||
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = search.advanced.query;
|
||||
grid.columnDefs = config.cols;
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData();
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
|
||||
config.grid = grid;
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,3 @@
|
||||
<form class="form-horizontal form-controller" method="post" id="user_group" name="user_group">
|
||||
{{$form['tpl']}}
|
||||
</form>
|
||||
@@ -0,0 +1,58 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
<div class="list-jqgrid">
|
||||
<div id="{{$header['table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var grid = new agGridOptions();
|
||||
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = search.advanced.query;
|
||||
grid.columnDefs = config.cols;
|
||||
grid.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
|
||||
config.grid = grid;
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,34 @@
|
||||
<table class="table table-form m-b-none">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td width="10%" align="right">姓名</td>
|
||||
<td width="40%">{{$user->name}}</td>
|
||||
<td width="10%" align="right">性别</td>
|
||||
<td width="40%">{{option('user.gender', $user['gender'])}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">部门</td>
|
||||
<td>{{$user->department->name}}</td>
|
||||
<td align="right">岗位</td>
|
||||
<td>{{$user->role->name}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">手机</td>
|
||||
<td>{{$user->phone}}</td>
|
||||
<td align="right">邮箱</td>
|
||||
<td>{{$user->email}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="4" align="left">站内私信</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">内容</td>
|
||||
<td colspan="3">
|
||||
<form class="form-horizontal" method="post" action="{{url()}}" id="user_message" name="user_message">
|
||||
<textarea class="form-control" name="content"></textarea>
|
||||
<input type="hidden" name="read_by" value="{{$user->id}}" />
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -0,0 +1,86 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class="list-jqgrid">
|
||||
<div id="{{$header['master_table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function($) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
var statusAction = function(type) {
|
||||
var grid = config.grid;
|
||||
var selections = grid.jqGrid('getSelections');
|
||||
var ids = [];
|
||||
$.each(selections, function(i, selection) {
|
||||
ids.push(selection.id);
|
||||
});
|
||||
if(ids.length > 0) {
|
||||
$.post('{{url("status")}}', {type: type, id: ids}, function(res) {
|
||||
if(res.status) {
|
||||
toastrSuccess(res.data);
|
||||
grid.trigger('reloadGrid');
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
}
|
||||
},'json');
|
||||
} else {
|
||||
toastrError('最少选择一行记录。');
|
||||
}
|
||||
}
|
||||
|
||||
// 标记已读
|
||||
action.read = function() {
|
||||
statusAction('read');
|
||||
};
|
||||
// 标记未读
|
||||
action.unread = function() {
|
||||
statusAction('unread');
|
||||
};
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function(e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var grid = new agGridOptions();
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = search.advanced.query;
|
||||
grid.columnDefs = config.cols;
|
||||
grid.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.show(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
|
||||
config.grid = grid;
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,10 @@
|
||||
<div class="panel m-b-none">
|
||||
<div class="panel-heading b-b b-light">
|
||||
<small class="text-muted">
|
||||
来自 : {{get_user($row['created_id'], 'name')}} 创建时间 : @datetime($row['created_at'])
|
||||
</small>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{$row['content']}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,3 @@
|
||||
<form class="form-horizontal form-controller" method="post" id="user_position" name="user_position">
|
||||
{{$form['tpl']}}
|
||||
</form>
|
||||
@@ -0,0 +1,123 @@
|
||||
<div class="padder">
|
||||
<div class="m-t-sm m-b-sm">
|
||||
<form id="dialog-{{$search['query']['id']}}-search-form" class="form-inline" method="get">
|
||||
@include('searchForm')
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="dialog-{{$search['query']['id']}}" class="ag-theme-balham" style="width:100%;height:380px;"></div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var search = JSON.parse('{{json_encode($search)}}');
|
||||
var params = search.query;
|
||||
|
||||
var option = gdoo.formKey(params);
|
||||
var event = gdoo.event.get(option.key);
|
||||
event.trigger('query', params);
|
||||
|
||||
var sid = params.prefix == 1 ? 'sid' : 'id';
|
||||
var gridDiv = document.querySelector("#dialog-{{$search['query']['id']}}");
|
||||
var grid = new agGridOptions();
|
||||
var selectedData = {};
|
||||
var multiple = params.multi == 0 ? false : true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = params;
|
||||
grid.rowSelection = multiple ? 'multiple' : 'single';
|
||||
|
||||
grid.columnDefs = [
|
||||
{suppressMenu: true, cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: multiple, suppressSizeToFit: true, sortable: false, width: 40},
|
||||
{suppressMenu: true, cellClass:'text-center', field: 'name', headerName: '名称', width: 200},
|
||||
{suppressMenu: true, cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
|
||||
];
|
||||
|
||||
grid.onRowClicked = function(row) {
|
||||
var selected = row.node.isSelected();
|
||||
if (selected === false) {
|
||||
row.node.setSelected(true, true);
|
||||
}
|
||||
};
|
||||
|
||||
grid.onRowDoubleClicked = function (row) {
|
||||
var ret = writeSelected();
|
||||
if (ret == true) {
|
||||
$('#gdoo-dialog-' + params.dialog_index).dialog('close');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 初始化选择
|
||||
*/
|
||||
function initSelected() {
|
||||
if (params.is_grid) {
|
||||
} else {
|
||||
var rows = {};
|
||||
var id = $('#'+option.id).val();
|
||||
if (id) {
|
||||
var ids = id.split(',');
|
||||
for (var i = 0; i < ids.length; i++) {
|
||||
rows[ids[i]] = ids[i];
|
||||
}
|
||||
}
|
||||
grid.api.forEachNode(function(node) {
|
||||
var key = node.data[sid];
|
||||
if (rows[key] != undefined) {
|
||||
node.setSelected(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入选中
|
||||
*/
|
||||
function writeSelected() {
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (params.is_grid) {
|
||||
var list = gdoo.forms[params.form_id];
|
||||
list.api.dialogSelected(params);
|
||||
} else {
|
||||
var id = [];
|
||||
var text = [];
|
||||
$.each(rows, function(k, row) {
|
||||
id.push(row[sid]);
|
||||
text.push(row.name);
|
||||
});
|
||||
$('#'+option.id).val(id.join(','));
|
||||
$('#'+option.id+'_text').val(text.join(','));
|
||||
|
||||
if (event.exist('onSelect')) {
|
||||
return event.trigger('onSelect', multiple ? rows : rows[0]);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
grid.writeSelected = writeSelected;
|
||||
gdoo.dialogs[option.id] = grid;
|
||||
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData();
|
||||
|
||||
// 数据载入成功
|
||||
grid.remoteSuccessed = function() {
|
||||
initSelected();
|
||||
}
|
||||
|
||||
var data = search.forms;
|
||||
var search = $("#dialog-{{$search['query']['id']}}-search-form").searchForm({
|
||||
data: data
|
||||
});
|
||||
search.find('#search-submit').on('click', function() {
|
||||
var params = search.serializeArray();
|
||||
$.map(params, function(row) {
|
||||
data[row.name] = row.value;
|
||||
});
|
||||
grid.remoteData(data);
|
||||
return false;
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,58 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
<div class="list-jqgrid">
|
||||
<div id="{{$header['table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var grid = new agGridOptions();
|
||||
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = search.advanced.query;
|
||||
grid.columnDefs = config.cols;
|
||||
grid.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
|
||||
config.grid = grid;
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,128 @@
|
||||
<div class="wrapper-sm">
|
||||
<div class="avatar-form">
|
||||
<div class="col-sm-9">
|
||||
<div class="image-box">
|
||||
<img id="image" class="hide">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<div class="preview-box" style="width:150px;height:150px;">
|
||||
<div class="preview" style="width:148px;height:148px;"></div>
|
||||
</div>
|
||||
<div class="preview-box" style="width:98px;height:98px;">
|
||||
<div class="preview" style="width:96px;height:96px;"></div>
|
||||
</div>
|
||||
<div class="preview-box" style="width:50px;height:50px;">
|
||||
<div class="preview" style="width:48px;height:48px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
<div class="btn-avatar">
|
||||
<input class="hide" id="avatarInput" name="image" type="file">
|
||||
<a class="btn btn-info" onclick="$('#avatarInput').click();"><i class="fa fa-cloud-upload"></i> 上传文件</a>
|
||||
<a class="btn btn-success" id="avatarCrop"><i class="fa fa-crop"></i> 裁剪</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
.avatar-form {
|
||||
position: relative;
|
||||
}
|
||||
.btn-avatar {
|
||||
position:absolute;
|
||||
bottom: 0;
|
||||
right: 46px;
|
||||
}
|
||||
.preview-box {
|
||||
border: 1px solid #eee;
|
||||
padding: 0;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.preview {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
}
|
||||
.image-box {
|
||||
border: 1px solid #eee;
|
||||
height: 420px;
|
||||
background-image: url(/assets/images/wf_canvas_bg.png);
|
||||
background-position: -1px -1px;
|
||||
}
|
||||
#image {
|
||||
max-width: 100%;
|
||||
height: 420px;
|
||||
border: 1px solid #eee;
|
||||
display: block;
|
||||
}
|
||||
.col-sm-9 {
|
||||
padding-left: 5px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<link href="{{$asset_url}}/vendor/cropper/cropper.min.css" rel="stylesheet" type="text/css" />
|
||||
<script src="{{$asset_url}}/vendor/cropper/cropper.min.js" type="text/javascript"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
var options = {
|
||||
aspectRatio: 1,
|
||||
autoCropArea: 0.5,
|
||||
preview: '.preview',
|
||||
}
|
||||
var $image = $('#image').cropper(options);
|
||||
|
||||
var $inputImage = $('#avatarInput');
|
||||
|
||||
var uploadedImageURL = null;
|
||||
|
||||
if (URL) {
|
||||
$inputImage.on('change', function () {
|
||||
var files = this.files;
|
||||
var file;
|
||||
|
||||
if (!$image.data('cropper')) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (files && files.length) {
|
||||
file = files[0];
|
||||
if (/^image\/\w+$/.test(file.type)) {
|
||||
uploadedImageName = file.name;
|
||||
uploadedImageType = file.type;
|
||||
|
||||
if (uploadedImageURL) {
|
||||
URL.revokeObjectURL(uploadedImageURL);
|
||||
}
|
||||
uploadedImageURL = URL.createObjectURL(file);
|
||||
$image.cropper('destroy').attr('src', uploadedImageURL).cropper(options);
|
||||
$inputImage.val('');
|
||||
} else {
|
||||
window.alert('请选择图片文件');
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$inputImage.prop('disabled', true).parent().addClass('disabled');
|
||||
}
|
||||
|
||||
$('#avatarCrop').on('click', function() {
|
||||
$image.cropper('getCroppedCanvas', {width: 128, height: 128}).toBlob(function (blob) {
|
||||
var formData = new FormData();
|
||||
formData.append('image', blob);
|
||||
$.ajax('{{url()}}', {
|
||||
method: "post",
|
||||
data: formData,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: function (res) {
|
||||
$('#user-avatar').attr('src', app.url('uploads/avatar/' + res.data) + '?s=' + Math.random());
|
||||
toastrSuccess('头像上传成功。');
|
||||
$('#modal-avatar-dialog').dialog('close');
|
||||
},
|
||||
error: function () {
|
||||
toastrError('头像上传失败。');
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,137 @@
|
||||
<form method="post" action="{{url()}}" id="profile" name="profile">
|
||||
|
||||
<div class="panel">
|
||||
|
||||
<div class="panel-heading tabs-box">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="@if(Request::action() == 'index') active @endif">
|
||||
<a class="text-sm" href="{{url('index')}}">我的资料</a>
|
||||
</li>
|
||||
<li class="@if(Request::action() == 'password') active @endif">
|
||||
<a class="text-sm" href="{{url('password')}}">修改密码</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-2">
|
||||
<div class="text-center">
|
||||
<span class="thumb-lg w-auto-folded avatar m-t-sm">
|
||||
<a href="javascript:avatar();" class="hinted" title="修改头像"><img src="{{avatar(Auth::user()->avatar)}}" id="user-avatar" class="img-full" alt="{{Auth::user()->name}}"></a>
|
||||
<div class="h4 font-thin m-t-sm">{{Auth::user()->login}}</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label">主题</label>
|
||||
<select id="change-theme" class="form-control input-sm" name="theme" id="theme">
|
||||
<?php $themes = ['primary' => '原色', 'blue2' => '科技蓝', 'blue' => '经典蓝', 'wood' => '木质纸', 'purple' => '个性紫', 'green' => '绿色', 'lilac' => '淡紫色']; ?>
|
||||
@if($themes)
|
||||
@foreach($themes as $theme_key => $theme)
|
||||
<option value="{{$theme_key}}" @if($user->theme == $theme_key) selected @endif>{{$theme}}</option>
|
||||
@endforeach
|
||||
@endif
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label">
|
||||
头像显示
|
||||
</label>
|
||||
<select id="avatar_show" class="form-control input-sm" name="avatar_show">
|
||||
<?php $avatar_shows = ['1' => '显示', '0' => '隐藏']; ?>
|
||||
@if($avatar_shows)
|
||||
@foreach($avatar_shows as $k => $v)
|
||||
<option value="{{$k}}" @if($user->avatar_show == $k) selected @endif>{{$v}}</option>
|
||||
@endforeach
|
||||
@endif
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label">安全密钥</label>
|
||||
<strong>{{$user->auth_secret}}</strong>
|
||||
<span class="qrcodeTotp" style="display:none;">
|
||||
<div id="qrcode_canvas"></div>
|
||||
<div id="qrcode_img"></div>
|
||||
</span>
|
||||
<a href="javascript:;" onclick="qrcodeTotp();">
|
||||
<i class="fa fa-qrcode"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<div class="col-sm-offset-2">
|
||||
<button type="button" onclick="history.back();" class="btn btn-default">返回</button>
|
||||
<button type="button" id="profile-form-submit" class="btn btn-success"><i class="fa fa-check-circle"></i> 提交</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<script type="text/javascript" src="{{$asset_url}}/vendor/jquery.qrcode.min.js"></script>
|
||||
<script>
|
||||
function qrcodeTotp() {
|
||||
$.messager.alert("二次验证二维码", '<div align="center">' + $("#qrcode_img").prop("outerHTML") + '</div>');
|
||||
}
|
||||
|
||||
function qrcodeMake(qrcode_canvas, qrcode_image) {
|
||||
$("#" + qrcode_canvas).qrcode({
|
||||
render: "canvas",
|
||||
text: "{{$secretURL}}",
|
||||
correctLevel: 1,
|
||||
width: 220,
|
||||
height: 220
|
||||
});
|
||||
var canvas = $('#' + qrcode_canvas).find('canvas')[0];
|
||||
var image = new Image();
|
||||
image.src = canvas.toDataURL("image/png");
|
||||
$('#' + qrcode_image).append(image);
|
||||
}
|
||||
|
||||
$(function() {
|
||||
|
||||
// 生成二维码
|
||||
qrcodeMake('qrcode_canvas', 'qrcode_img');
|
||||
// 主题修改
|
||||
$('#change-theme').on('change', function() {
|
||||
var e = $(this).val();
|
||||
$('body').attr('class', 'theme-' + e);
|
||||
top.$('body').attr('class', 'theme-' + e);
|
||||
});
|
||||
|
||||
ajaxSubmit('profile', function(res) {
|
||||
if (res.status) {
|
||||
toastrSuccess(res.data);
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
function avatar() {
|
||||
viewDialog({
|
||||
title: '修改头像',
|
||||
url: '{{url("avatar")}}',
|
||||
dialogClass: 'modal-lg',
|
||||
id: 'avatar-dialog',
|
||||
buttons: [{
|
||||
text: "确定",
|
||||
'class': "btn-default",
|
||||
click: function() {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}]
|
||||
});
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,84 @@
|
||||
<form method="post" action="{{url()}}" id="password" name="password">
|
||||
|
||||
<div class="panel">
|
||||
|
||||
<div class="panel-heading tabs-box">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="@if(Request::action() == 'index') active @endif">
|
||||
<a class="text-sm" href="{{url('index')}}">我的资料</a>
|
||||
</li>
|
||||
<li class="@if(Request::action() == 'password') active @endif">
|
||||
<a class="text-sm" href="{{url('password')}}">修改密码</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-2">
|
||||
<div class="text-center">
|
||||
<span class="thumb-lg w-auto-folded avatar m-t-sm">
|
||||
<a href="javascript:avatar();" class="hinted" title="修改头像"><img src="{{avatar(Auth::user()->avatar)}}" id="user-avatar" class="img-full" alt="{{Auth::user()->name}}"></a>
|
||||
<div class="h4 font-thin m-t-sm">{{Auth::user()->login}}</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<div class="form-group">
|
||||
<label class="control-label">旧密码</label>
|
||||
<input type="password" class="form-control input-sm" id="old_password" name="old_password" placeholder="请输入旧密码">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label">新密码</label>
|
||||
<input type="password" class="form-control input-sm" id="new_password" name="new_password" placeholder="请输入新密码">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label">确认新密码</label>
|
||||
<input type="password" id="new_password_confirmation" name="new_password_confirmation" class="form-control input-sm" placeholder="请输入再次输入新密码">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<div class="col-sm-offset-2">
|
||||
<button type="button" onclick="history.back();" class="btn btn-default">返回</button>
|
||||
<button type="submit" id="password-form-submit" class="btn btn-success"><i class="fa fa-check-circle"></i> 提交</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<script>
|
||||
|
||||
ajaxSubmit('password', function(res) {
|
||||
if (res.status) {
|
||||
toastrSuccess(res.data);
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
}
|
||||
});
|
||||
|
||||
function avatar() {
|
||||
viewDialog({
|
||||
title: '修改头像',
|
||||
url: '{{url("avatar")}}',
|
||||
dialogClass: 'modal-lg',
|
||||
id: 'avatar-dialog',
|
||||
buttons: [{
|
||||
text: "确定",
|
||||
'class': "btn-default",
|
||||
click: function() {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}]
|
||||
});
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,181 @@
|
||||
<style>
|
||||
.content-body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.form-panel-body {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.left-group {
|
||||
overflow: hidden;
|
||||
overflow-y: auto;
|
||||
height: calc(100vh - 185px);
|
||||
}
|
||||
|
||||
.right-group {
|
||||
overflow: hidden;
|
||||
overflow-y: auto;
|
||||
height: calc(100vh - 177px);
|
||||
}
|
||||
</style>
|
||||
<div class="form-panel">
|
||||
<div class="form-panel-header">
|
||||
<div class="pull-right">
|
||||
</div>
|
||||
<button type="button" class="btn btn-sm btn-info" id="role-form-submit"><i class="fa fa-check"></i> 保存</button>
|
||||
<a class="btn btn-sm btn-default" data-toggle="closetab" data-id="role_config"><i class="fa fa-sign-out"></i> 退出</a>
|
||||
</div>
|
||||
<div class="form-panel-body">
|
||||
|
||||
<div class="panel no-border">
|
||||
|
||||
<div class="padder padder-t padder-r-n">
|
||||
<form id="myfilter" role="form" class="form-inline" name="myfilter" action="{{url()}}" method="get">
|
||||
|
||||
<div class="form-group">
|
||||
<label>授权角色</label>
|
||||
<select class="form-control input-sm" data-toggle="redirect" id='role_id' name='role_id' data-url="{{url($atcion, $query)}}">
|
||||
@foreach($roles as $key => $role)
|
||||
<option value="{{$role->id}}" @if($query['role_id']==$role->id) selected @endif>{{$role->layer_space}}{{$role->name}}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<span class="hidden-xs"> </span>
|
||||
<div class="form-group">
|
||||
<label>参照角色</label>
|
||||
<select class="form-control input-sm" data-toggle="redirect" id='clone_id' name='clone_id' data-url="{{url($atcion, $query)}}">
|
||||
<option value="">无</option>
|
||||
@foreach($roles as $key => $role)
|
||||
<option value="{{$role->id}}" @if($query['clone_id']==$role->id) selected @endif>{{$role->layer_space}}{{$role->name}}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="wrapper m-t b-t" style="background-color:#f0f3f4;">
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-2 m-b padder-r-n">
|
||||
|
||||
<div class="panel panel-info">
|
||||
<div class="panel-heading b-b b-light">
|
||||
<div class="h5 m-t-xs m-b-xs"><i class="fa fa-cubes"></i> 模块列表</div>
|
||||
</div>
|
||||
<div class="list-group left-group">
|
||||
@if(count($modules))
|
||||
@foreach($modules as $menuKey => $menuValue)
|
||||
<a class="list-group-item" onclick="module('{{$menuKey}}');" href="javascript:;">
|
||||
<span class="h5">{{$menuValue['name']}}</span>
|
||||
</a>
|
||||
@endforeach
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-10">
|
||||
|
||||
<form method="post" class="form-inline" action="{{url()}}" id="role" name="role">
|
||||
|
||||
@if(count($modules))
|
||||
@foreach($modules as $menuKey => $menuValue)
|
||||
|
||||
<div class="modules" style="display:none;" id="{{$menuKey}}">
|
||||
|
||||
<div class="panel m-b-sm b-a">
|
||||
|
||||
<div class="panel-heading b-b b-light">
|
||||
<label class="checkbox-inline"><input type="checkbox" class="menu-check">{{$menuValue['name']}}</label>
|
||||
</div>
|
||||
|
||||
<div class="panel-body right-group">
|
||||
|
||||
@if(count($menuValue['controllers']))
|
||||
@foreach($menuValue['controllers'] as $groupKey => $groupValue)
|
||||
|
||||
<div class="panel m-b-sm b-a">
|
||||
|
||||
<div class="panel-heading b-b b-light">
|
||||
<label class="checkbox-inline" title="{{$groupKey}}"><input class="group-check" type="checkbox">{{$groupValue['name']}}</label>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
@if(count($groupValue['actions']))
|
||||
@foreach($groupValue['actions'] as $childKey => $childValue)
|
||||
<div class="col-md-3 col-sm-6 wrapper-xs">
|
||||
{{'';$selected = $assets[$menuKey][$groupKey.'.'.$childKey]}}
|
||||
<label title="{{$childKey}}" class="checkbox-inline">
|
||||
<input type="checkbox" class="action-check" name="assets[{{$menuKey}}][{{$groupKey}}.{{$childKey}}][action]" value="1" @if(isset($selected)) checked @endif>
|
||||
{{$childValue['name']}}
|
||||
</label>
|
||||
</div>
|
||||
@endforeach
|
||||
@endif
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@endforeach
|
||||
@endif
|
||||
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endforeach
|
||||
|
||||
@endif
|
||||
|
||||
<input type="hidden" name="role_id" value="{{$query['role_id']}}">
|
||||
<input type="hidden" name="key" id="key" value="{{$query['key']}}">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
|
||||
$('.menu-check,.group-check').on('click', function() {
|
||||
if ($(this).prop("checked") == true) {
|
||||
$(this).parent().parent().parent().find(':checkbox').prop('checked', true);
|
||||
} else {
|
||||
$(this).parent().parent().parent().find(':checkbox').prop('checked', false);
|
||||
}
|
||||
});
|
||||
|
||||
ajaxSubmit('role', function(res) {
|
||||
if (res.status) {
|
||||
toastrSuccess(res.data);
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
}
|
||||
});
|
||||
|
||||
var e = $('#role');
|
||||
var key = e.find('#key').val();
|
||||
if (key == '') {
|
||||
var list = e.find('.modules');
|
||||
key = list.eq(0).attr('id');
|
||||
e.find('#key').val(key);
|
||||
}
|
||||
e.find('#' + key).fadeIn();
|
||||
|
||||
});
|
||||
|
||||
function module(key) {
|
||||
var e = $('#role');
|
||||
e.find('#key').val(key);
|
||||
e.find('.modules').hide();
|
||||
e.find('#' + key).fadeIn();
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,3 @@
|
||||
<form class="form-horizontal form-controller" method="post" id="role" name="role">
|
||||
{{$form['tpl']}}
|
||||
</form>
|
||||
@@ -0,0 +1,133 @@
|
||||
<div class="wrapper-xs">
|
||||
<form id="dialog-{{$search['query']['id']}}-search-form" class="form-inline" method="get">
|
||||
@include('searchForm6')
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id="dialog-{{$search['query']['id']}}" class="ag-theme-balham" style="width:100%;height:380px;"></div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var search = JSON.parse('{{json_encode($search)}}');
|
||||
var params = search.query;
|
||||
|
||||
var option = gdoo.formKey(params);
|
||||
var event = gdoo.event.get(option.key);
|
||||
event.trigger('query', params);
|
||||
|
||||
var sid = params.prefix == 1 ? 'sid' : 'id';
|
||||
var gridDiv = document.querySelector("#dialog-{{$search['query']['id']}}");
|
||||
var grid = new agGridOptions();
|
||||
var selectedData = {};
|
||||
var multiple = params.multi == 0 ? false : true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = params;
|
||||
grid.suppressRowClickSelection = true;
|
||||
grid.rowSelection = multiple ? 'multiple' : 'single';
|
||||
|
||||
grid.autoGroupColumnDef = {
|
||||
headerName: '名称',
|
||||
width: 250,
|
||||
cellRendererParams: {
|
||||
checkbox: true,
|
||||
suppressCount: false,
|
||||
}
|
||||
};
|
||||
grid.treeData = true;
|
||||
grid.groupDefaultExpanded = -1;
|
||||
|
||||
grid.getDataPath = function(data) {
|
||||
return data.tree_path;
|
||||
};
|
||||
grid.columnDefs = [];
|
||||
grid.columnDefs.push({suppressMenu: true, cellClass:'text-center', field: 'id', headerName: 'ID', width: 60});
|
||||
|
||||
grid.onRowClicked = function(row) {
|
||||
var selected = row.node.isSelected();
|
||||
if (selected === false) {
|
||||
row.node.setSelected(true, true);
|
||||
}
|
||||
};
|
||||
|
||||
grid.onRowDoubleClicked = function (row) {
|
||||
var ret = writeSelected();
|
||||
if (ret == true) {
|
||||
$('#gdoo-dialog-' + params.dialog_index).dialog('close');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 初始化选择
|
||||
*/
|
||||
function initSelected() {
|
||||
if (params.is_grid) {
|
||||
} else {
|
||||
var rows = {};
|
||||
var id = $('#'+option.id).val();
|
||||
if (id) {
|
||||
var ids = id.split(',');
|
||||
for (var i = 0; i < ids.length; i++) {
|
||||
rows[ids[i]] = ids[i];
|
||||
}
|
||||
}
|
||||
grid.api.forEachNode(function(node) {
|
||||
var key = node.data[sid];
|
||||
if (rows[key] != undefined) {
|
||||
node.setSelected(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入选中
|
||||
*/
|
||||
function writeSelected() {
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (params.is_grid) {
|
||||
var list = gdoo.forms[params.form_id];
|
||||
list.api.dialogSelected(params);
|
||||
} else {
|
||||
var id = [];
|
||||
var text = [];
|
||||
$.each(rows, function(k, row) {
|
||||
id.push(row[sid]);
|
||||
text.push(row.name);
|
||||
});
|
||||
$('#'+option.id).val(id.join(','));
|
||||
$('#'+option.id+'_text').val(text.join(','));
|
||||
|
||||
if (event.exist('onSelect')) {
|
||||
return event.trigger('onSelect', multiple ? rows : rows[0]);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
grid.writeSelected = writeSelected;
|
||||
gdoo.dialogs[option.id] = grid;
|
||||
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData();
|
||||
|
||||
// 数据载入成功
|
||||
grid.remoteSuccessed = function() {
|
||||
initSelected();
|
||||
}
|
||||
|
||||
var data = search.forms;
|
||||
var search = $("#dialog-{{$search['query']['id']}}-search-form").searchForm({
|
||||
data: data
|
||||
});
|
||||
search.find('#search-submit').on('click', function() {
|
||||
var params = search.serializeArray();
|
||||
$.map(params, function(row) {
|
||||
data[row.name] = row.value;
|
||||
});
|
||||
grid.remoteData(data);
|
||||
return false;
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,49 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
<div class="list-jqgrid">
|
||||
<div id="{{$header['table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
action.config = function(data) {
|
||||
top.addTab('user/role/config?role_id=' + data.master_id, 'role_config', '权限配置');
|
||||
}
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var grid = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = search.advanced.query;
|
||||
grid.columnDefs = config.cols;
|
||||
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
|
||||
config.grid = grid;
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,39 @@
|
||||
<style>
|
||||
#grid_user_role .ag-root-wrapper {
|
||||
border: 0;
|
||||
}
|
||||
</style>
|
||||
<div id="grid_user_role" class="ag-theme-balham" style="width:100%;height:380px;"></div>
|
||||
<script>
|
||||
var $table = null;
|
||||
(function($) {
|
||||
var data = JSON.parse('{{json_encode($rows)}}');
|
||||
var users = JSON.parse('{{json_encode($users)}}');
|
||||
var grid = new agGridOptions();
|
||||
grid.suppressLoadingOverlay = true;
|
||||
grid.suppressNoRowsOverlay = true;
|
||||
grid.rowMultiSelectWithClick = true;
|
||||
grid.suppressRowClickSelection = false;
|
||||
grid.defaultColDef.sortable = false;
|
||||
grid.defaultColDef.filter = false;
|
||||
grid.defaultColDef.suppressMenu = true;
|
||||
grid.defaultColDef.suppressNavigable = true;
|
||||
grid.columnDefs = [
|
||||
{field:'id', hide: true},
|
||||
{width: 40, cellClass:'text-center', suppressSizeToFit: true, headerCheckboxSelection: true, checkboxSelection: true},
|
||||
{headerName: '角色编码', field:'code', cellClass:'text-center', width: 60},
|
||||
{headerName: '角色名称', field:'name', cellClass:'text-left', width: 120},
|
||||
|
||||
];
|
||||
var gridDiv = document.querySelector("#grid_user_role");
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
grid.api.updateRowData({add:data});
|
||||
|
||||
grid.api.forEachNode(function(node) {
|
||||
if (users[node.data.id] > 0) {
|
||||
node.setSelected(true);
|
||||
}
|
||||
});
|
||||
gdoo.dialogs['user_role'] = grid;
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,36 @@
|
||||
<div class="form-panel">
|
||||
<div class="form-panel-header">
|
||||
<div class="pull-right"></div>
|
||||
{{$form['btn']}}
|
||||
</div>
|
||||
<div class="form-panel-body panel-form-{{$form['action']}}">
|
||||
<form class="form-horizontal form-controller" method="post" id="user" name="user">
|
||||
{{$form['tpl']}}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var action = '{{$form["action"]}}';
|
||||
var table = '{{$form["table"]}}';
|
||||
|
||||
function getAuthSecret(userId) {
|
||||
$.messager.confirm('操作警告', '确定要更新安全密钥。', function(btn) {
|
||||
if (btn == true) {
|
||||
$.post('{{url("user/profile/secret")}}',{id:userId}, function(res) {
|
||||
$("#secret").html(res.data);
|
||||
$('#user_auth_secret_value').val(res.data);
|
||||
}, 'json');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(function() {
|
||||
if (action == 'show') {
|
||||
var text = $('#user_auth_secret').text();
|
||||
} else {
|
||||
var text = $('#user_auth_secret').data('content');
|
||||
}
|
||||
$('#user_auth_secret').html('<input type="hidden" id="user_auth_secret_value" name="user[auth_secret]" value="'+ text +'"><code id="secret">' + text + '</code><a class="btn btn-info btn-xs" onclick="getAuthSecret();" href="javascript:;">更新</a>');
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,155 @@
|
||||
<div class="wrapper-xs">
|
||||
<form id="dialog-{{$search['query']['id']}}-search-form" class="form-inline" method="get">
|
||||
<!--
|
||||
<div class="btn-group" data-toggle="buttons">
|
||||
<label class="btn btn-sm btn-default active">
|
||||
<input type="radio" name="group_id" value="1">用户
|
||||
</label>
|
||||
<label class="btn btn-sm btn-default">
|
||||
<input type="radio" name="group_id" value="2">客户
|
||||
</label>
|
||||
</div>
|
||||
-->
|
||||
@include('searchForm3')
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id="dialog-{{$search['query']['id']}}" class="ag-theme-balham" style="width:100%;height:380px;"></div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var search = JSON.parse('{{json_encode($search)}}');
|
||||
var params = search.query;
|
||||
|
||||
var option = gdoo.formKey(params);
|
||||
var event = gdoo.event.get(option.key);
|
||||
event.trigger('query', params);
|
||||
|
||||
var sid = params.prefix == 1 ? 'sid' : 'id';
|
||||
var gridDiv = document.querySelector("#dialog-{{$search['query']['id']}}");
|
||||
var grid = new agGridOptions();
|
||||
var selectedData = {};
|
||||
var multiple = params.multi == 0 ? false : true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = params;
|
||||
grid.suppressRowClickSelection = true;
|
||||
grid.rowSelection = multiple ? 'multiple' : 'single';
|
||||
grid.columnDefs = [
|
||||
{suppressMenu: true, cellClass:'text-center', checkboxSelection: true, headerCheckboxSelection: multiple, suppressSizeToFit: true, sortable: false, width: 40},
|
||||
{suppressMenu: true, cellClass:'text-center', sortable: false, field: 'username', headerName: '用户名', width: 60},
|
||||
{suppressMenu: true, cellClass:'text-left', sortable: false, field: 'name', headerName: '名称', minWidth: 160},
|
||||
{suppressMenu: true, cellClass:'text-center', cellRenderer: statusRenderer, field: 'status', headerName: '状态', width: 60},
|
||||
{suppressMenu: true, cellClass:'text-center', field: 'id', headerName: 'ID', width: 60}
|
||||
];
|
||||
|
||||
var selecteds = {};
|
||||
|
||||
var id = $('#'+option.id).val();
|
||||
var text = $('#'+option.id+'_text').val();
|
||||
if (id) {
|
||||
var ids = id.split(',');
|
||||
var texts = text.split(',');
|
||||
for (var i = 0; i < ids.length; i++) {
|
||||
selecteds[ids[i]] = texts[i];
|
||||
}
|
||||
}
|
||||
|
||||
function statusRenderer(row) {
|
||||
if (row.value == 0) {
|
||||
return '<span style="color:red">禁用</span>';
|
||||
}
|
||||
if (row.value == 1) {
|
||||
return '启用';
|
||||
}
|
||||
}
|
||||
|
||||
grid.onCustomRowSelected = function(event) {
|
||||
var data = event.node.data;
|
||||
if (event.node.isSelected()) {
|
||||
selecteds[data[sid]] = data.name;
|
||||
} else {
|
||||
delete selecteds[data[sid]];
|
||||
}
|
||||
}
|
||||
|
||||
grid.onRowClicked = function(row) {
|
||||
var selected = row.node.isSelected();
|
||||
if (selected === false) {
|
||||
row.node.setSelected(true, true);
|
||||
}
|
||||
};
|
||||
|
||||
grid.onRowDoubleClicked = function (row) {
|
||||
var ret = writeSelected();
|
||||
if (ret == true) {
|
||||
$('#gdoo-dialog-' + params.dialog_index).dialog('close');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 初始化选择
|
||||
*/
|
||||
function initSelected() {
|
||||
if (params.is_grid) {
|
||||
} else {
|
||||
grid.api.forEachNode(function(node) {
|
||||
var key = node.data[sid];
|
||||
if (selecteds[key] != undefined) {
|
||||
node.setSelected(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入选中
|
||||
*/
|
||||
function writeSelected() {
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (params.is_grid) {
|
||||
var list = gdoo.forms[params.form_id];
|
||||
list.api.dialogSelected(params);
|
||||
} else {
|
||||
var id = [];
|
||||
var text = [];
|
||||
$.each(selecteds, function(k, v) {
|
||||
id.push(k);
|
||||
text.push(v);
|
||||
});
|
||||
$('#'+option.id).val(id.join(','));
|
||||
$('#'+option.id+'_text').val(text.join(','));
|
||||
|
||||
if (event.exist('onSelect')) {
|
||||
return event.trigger('onSelect', multiple ? rows : rows[0]);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
grid.writeSelected = writeSelected;
|
||||
gdoo.dialogs[option.id] = grid;
|
||||
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData({page: 1});
|
||||
|
||||
// 数据载入成功
|
||||
grid.remoteSuccessed = function() {
|
||||
initSelected();
|
||||
}
|
||||
|
||||
var data = search.forms;
|
||||
var search = $("#dialog-{{$search['query']['id']}}-search-form").searchForm({
|
||||
data: data
|
||||
});
|
||||
search.find('#search-submit').on('click', function() {
|
||||
var params = search.serializeArray();
|
||||
$.map(params, function(row) {
|
||||
data[row.name] = row.value;
|
||||
});
|
||||
grid.remoteData(data);
|
||||
return false;
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@@ -0,0 +1,128 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
<div class="list-jqgrid">
|
||||
<div id="{{$header['table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
action.dialogType = 'layer';
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
action.user_warehouse = function(data) {
|
||||
var me = this;
|
||||
var grid = config.grid;
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (rows.length == 1) {
|
||||
var user_id = rows[0].id;
|
||||
formDialog({
|
||||
title: '仓库权限',
|
||||
url: app.url('stock/warehouse/permission', {user_id: user_id}),
|
||||
storeUrl: app.url('stock/warehouse/permission'),
|
||||
id: 'user_warehouse',
|
||||
dialogClass:'modal-md',
|
||||
onSubmit: function() {
|
||||
var me = this;
|
||||
var form = gdoo.dialogs['user_warehouse'];
|
||||
var selectedRows = form.api.getSelectedRows();
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
$.post(app.url('stock/warehouse/permission', {user_id: user_id}), {rows: selectedRows}, function(res) {
|
||||
if (res.status) {
|
||||
toastrSuccess(res.data);
|
||||
$(me).dialog('close');
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
}
|
||||
}).complete(function() {
|
||||
layer.close(loading);
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
toastrError('只能选择一条记录');
|
||||
}
|
||||
}
|
||||
|
||||
action.user_role = function(data) {
|
||||
var me = this;
|
||||
var grid = config.grid;
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (rows.length == 1) {
|
||||
var user_id = rows[0].id;
|
||||
formDialog({
|
||||
title: '角色权限',
|
||||
url: app.url('user/role/permission', {user_id: user_id}),
|
||||
storeUrl: app.url('user/role/permission'),
|
||||
id: 'user_role',
|
||||
dialogClass:'modal-md',
|
||||
onSubmit: function() {
|
||||
var me = this;
|
||||
var form = gdoo.dialogs['user_role'];
|
||||
var selectedRows = form.api.getSelectedRows();
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
$.post(app.url('user/role/permission', {user_id: user_id}), {rows: selectedRows}, function(res) {
|
||||
if (res.status) {
|
||||
toastrSuccess(res.data);
|
||||
$(me).dialog('close');
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
}
|
||||
}).complete(function() {
|
||||
layer.close(loading);
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
toastrError('只能选择一条记录');
|
||||
}
|
||||
}
|
||||
|
||||
var grid = new agGridOptions();
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = search.advanced.query;
|
||||
grid.columnDefs = config.cols;
|
||||
grid.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.show(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
// 读取数据
|
||||
grid.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
config.grid = grid;
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
Reference in New Issue
Block a user