创建版本
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" 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;
|
||||
|
||||
action.dialogType = 'dialog';
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.show(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.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 = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,60 @@
|
||||
<form method="post" class="form-horizontal" action="{{url('store')}}" id="mail" name="mail">
|
||||
|
||||
<table class="table table-form m-b-none">
|
||||
<tr>
|
||||
<td align="right" width="10%">名称</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="name" value="{{$row['name']}}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">邮箱帐号</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="user" value="{{$row['user']}}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">邮箱密码</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="password" value="{{$row['password']}}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">SMTP服务器</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="smtp" value="{{$row['smtp']}}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">服务器端口</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="port" value="{{$row['port']}}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">连接方式</td>
|
||||
<td align="left">
|
||||
<select class="form-control input-sm" name="secure" id="secure">
|
||||
<option value="" @if($row['secure'] == '') selected @endif>默认</option>
|
||||
<option value="ssl" @if($row['secure'] == 'ssl') selected @endif>ssl</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">状态</td>
|
||||
<td align="left">
|
||||
<select class="form-control input-sm" name="status" id="status">
|
||||
<option value="1" @if($row['status'] == '1') selected @endif>启用</option>
|
||||
<option value="0" @if($row['status'] == '0') selected @endif>停用</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">排序</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="sort" value="{{$row['sort']}}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<input type="hidden" name="id" value="{{$row['id']}}">
|
||||
</form>
|
||||
@@ -0,0 +1,83 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" 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;
|
||||
|
||||
action.dialogType = 'dialog';
|
||||
|
||||
action.test = function() {
|
||||
var me = this;
|
||||
var grid = config.grid;
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (rows.length == 1) {
|
||||
formDialog({
|
||||
title: '测试邮件',
|
||||
url: app.url('system/mail/test', {id: rows[0].id}),
|
||||
storeUrl: app.url('system/mail/test'),
|
||||
id: 'mail_test',
|
||||
dialogClass:'modal-sm',
|
||||
success: function(res) {
|
||||
toastrSuccess(res.data);
|
||||
$(this).dialog("close");
|
||||
},
|
||||
error: function(res) {
|
||||
toastrError(res.data);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
toastrError('只能选择一条数据。');
|
||||
}
|
||||
}
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.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 = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,10 @@
|
||||
<form class="form-horizontal" method="post" action="{{url('mail_test')}}" id="mail_test" name="mail_test">
|
||||
|
||||
<table class="table table-form m-b-none">
|
||||
<tr>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" placeholder="收信人邮箱地址" type="text" id="mail_to" name="mail_to" value="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
@@ -0,0 +1,62 @@
|
||||
<script id="uploader-item-tpl" type="text/html">
|
||||
<div id="<%=fileId%>" class="uploadify-queue-item">
|
||||
<span class="file-name"><span class="text-danger" title="草稿状态">!</span> <a href="javascript:uploader.file('<%=fileId%>');"><%=name%></a></span>
|
||||
<span class="file-size">(<%=size%>)</span>
|
||||
<span class="insert"><a class="option" href="javascript:uploader.insert('<%=fileId%>');">插入编辑器</a></span>
|
||||
<span class="cancel"><a class="option" href="javascript:uploader.cancel('<%=fileId%>');">删除</a></span>
|
||||
<input type="hidden" class="id" name="attachment[]" value="<%=id%>" />
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</script>
|
||||
|
||||
<div class="uploadify-queue">
|
||||
|
||||
<a class="btn btn-sm btn-info" href="javascript:viewBox('reader', '文件上传', '{{url('index/attachment/uploader', ['path' => Request::module()])}}');"><i class="fa fa-cloud-upload"></i> 文件上传</a>
|
||||
<span class="uploader-size"> 文件大小限制 {{$setting['upload_max']}}MB</span>
|
||||
<div class="clear"></div>
|
||||
|
||||
<div id="fileQueue" class="uploadify-queue">
|
||||
|
||||
@if($attach['main'])
|
||||
@foreach($attach['main'] as $n => $file)
|
||||
<div id="file_queue_{{$n}}" class="uploadify-queue-item">
|
||||
<span class="file-name"><span class="icon icon-paperclip"></span> <a href="javascript:uploader.file('file_queue_{{$n}}');">{{$file['name']}}</a></span>
|
||||
<span class="file-size">({{human_filesize($file['size'])}})</span>
|
||||
<span class="insert"><a class="option" href="javascript:uploader.insert('file_queue_{{$n}}');">插入编辑器</a></span>
|
||||
<span class="cancel"><a class="option" href="javascript:uploader.cancel('file_queue_{{$n}}');">删除</a></span>
|
||||
<input type="hidden" class="id" name="attachment[]" value="{{$file['id']}}">
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
@endforeach
|
||||
|
||||
@elseif($attachList['queue'])
|
||||
|
||||
@foreach($attachList['queue'] as $n => $v)
|
||||
<div id="file_attach_{{$n}}" class="uploadify-queue-item">
|
||||
<span class="file-name"><span class="icon icon-paperclip"></span> <a href="javascript:uploader.file('file_attach_{{$n}}');">{{$v['title']}}</a></span>
|
||||
<span class="file-size"> ({{human_filesize($v['size'])}})</span>
|
||||
<span class="insert"><a class="option" href="javascript:uploader.insert('file_attach_{{$n}}');">插入编辑器</a></span>
|
||||
<span class="cancel"><a class="option" href="javascript:uploader.cancel('file_attach_{{$n}}');">删除</a></span>
|
||||
<input type="hidden" class="id" name="attachment[]" value="{{$v['id']}}" />
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
@endforeach
|
||||
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div id="fileQueueDraft">
|
||||
@if($attach['draft'])
|
||||
@foreach($attach['draft'] as $n => $file)
|
||||
<div id="queue_draft_{{$n}}" class="uploadify-queue-item">
|
||||
<span class="file-name"><span class="text-danger" title="草稿附件">!</span> <a href="javascript:uploader.file('queue_draft_{{$n}}');">{{$file['name']}}</a></span>
|
||||
<span class="file-size">({{human_filesize($file['size'])}})</span>
|
||||
<span class="insert"><a class="option" href="javascript:uploader.insert('queue_draft_{{$n}}');">插入编辑器</a></span>
|
||||
<span class="cancel"><a class="option" href="javascript:uploader.cancel('queue_draft_{{$n}}');">删除</a></span>
|
||||
<input type="hidden" class="id" name="attachment[]" value="{{$file['id']}}">
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
@endforeach
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,354 @@
|
||||
<style type="text/css">
|
||||
#media-navigator {
|
||||
height: 480px;
|
||||
min-height: 480px;
|
||||
background: #f4f5f9;
|
||||
border-right: 1px solid #e7e7eb;
|
||||
width: 140px;
|
||||
float: left;
|
||||
}
|
||||
#media-navigator a, #media-navigator a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
#media-navigator ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
#media-navigator ul li {
|
||||
line-height: 38px;
|
||||
}
|
||||
#media-navigator ul li .node {
|
||||
border-bottom: 1px solid #eee;
|
||||
display: block;
|
||||
padding: 0 10px;
|
||||
}
|
||||
#media-navigator ul li.active,
|
||||
#media-navigator ul li:hover {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
#media-content {
|
||||
height: 480px;
|
||||
min-height: 480px;
|
||||
margin-left: 140px;
|
||||
overflow: hidden;
|
||||
padding-right: 1px;
|
||||
}
|
||||
.media-tool {
|
||||
padding: 10px;
|
||||
border-bottom: 1px solid #e7e7eb;
|
||||
}
|
||||
|
||||
.folder-tool {
|
||||
vertical-align: initial;
|
||||
display: none;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.folder-tool .fa {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
#media-navigator ul li:hover .folder-tool {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#media-navigator ul li .folder-tool a {
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
#media-navigator ul li .folder-tool a:hover .fa {
|
||||
color: #0e90d2;
|
||||
}
|
||||
|
||||
.files {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding-top: 10px;
|
||||
overflow: auto;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.files > li {
|
||||
float: left;
|
||||
width: 144px;
|
||||
border: 1px solid #eee;
|
||||
margin-bottom: 10px;
|
||||
margin-left: 10px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.files > li > .file-select {
|
||||
position: absolute;
|
||||
top: -4px;
|
||||
left: -1px;
|
||||
}
|
||||
|
||||
.file-icon.has-img {
|
||||
padding: 0;
|
||||
}
|
||||
.file-icon {
|
||||
text-align: center;
|
||||
font-size: 65px;
|
||||
color: #666;
|
||||
display: block;
|
||||
height: 100px;
|
||||
}
|
||||
.file-icon.has-img > img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
max-height: 92px;
|
||||
}
|
||||
.file-info {
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
background: #f4f4f4;
|
||||
}
|
||||
|
||||
.file-name {
|
||||
font-weight: bold;
|
||||
color: #666;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.file-size {
|
||||
color: #999;
|
||||
font-size: 12px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@verbatim
|
||||
<div id="vue-app">
|
||||
<div class="media-controller">
|
||||
<div class="media-tool">
|
||||
<div class="pull-right">
|
||||
<button class="btn btn-success btn-sm" onclick="document.getElementById('upload').click();"><i class="fa fa-cloud-upload"></i> 上传文件</button>
|
||||
<input type="file" id="upload" ref="upload" @change="onUpload" accept="image/*" multiple="multiple" style="display:none;">
|
||||
<!--
|
||||
<button class="btn btn-info btn-sm"><i class="fa fa-arrows"></i> 移动文件</button>
|
||||
<button class="btn btn-danger btn-sm"><i class="fa fa-times"></i> 删除文件</button>
|
||||
-->
|
||||
</div>
|
||||
<a @click="folder" class="btn btn-sm btn-default"><i class="fa fa-plus"></i> 添加文件夹</a>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<div id="media-navigator">
|
||||
<ul>
|
||||
<li v-bind:class="{active:folderId == 0}">
|
||||
<a @click="onFolder(0)" class="node">
|
||||
<i class="fa fa-folder-o"></i> 全部
|
||||
</a>
|
||||
</li>
|
||||
<li v-bind:class="{active:folderId == item.id}" v-for="(item, index) in folders" :key="item.id">
|
||||
<span class="pull-right folder-tool">
|
||||
<!--
|
||||
<a class="hinted" title="修改"><i class="fa fa-pencil"></i></a>
|
||||
-->
|
||||
<a @click="onDelete(index, 1)" class="hinted" title="删除"><i class="fa fa-times"></i></a>
|
||||
</span>
|
||||
<a @click="onFolder(item.id)" class="node"><i class="fa fa-folder-o"></i> {{item.name}}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="media-content">
|
||||
<ul class="files">
|
||||
<li v-for="(item, index) in files" :key="item.id">
|
||||
<span class="file-select">
|
||||
<label class="checkbox-inline i-checks">
|
||||
<input type="checkbox" name="files" v-model="item.checked"><i></i>
|
||||
</label>
|
||||
</span>
|
||||
<span class="file-icon has-img"><img :src="img(item.thumb)"></span>
|
||||
<div class="file-info">
|
||||
<a class="file-name" :title="item.name">
|
||||
{{item.name}}
|
||||
</a>
|
||||
<span class="file-size">
|
||||
{{filesize(item.size)}}
|
||||
|
||||
<div class="btn-group btn-group-xs pull-right">
|
||||
<button type="button" class="btn btn-default btn-xs" data-toggle="dropdown">
|
||||
<span class="caret"></span>
|
||||
<span class="sr-only">Toggle Dropdown</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a class="file-rename">改名 & 移动</a></li>
|
||||
<li><a @click="onDelete(index, 0)" class="file-delete">删除</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a :href="download(item.id)">下载</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endverbatim
|
||||
|
||||
<script>
|
||||
var vueApp = Vue.createApp({
|
||||
data: function() {
|
||||
return {
|
||||
folderId: 0,
|
||||
folders: [],
|
||||
files: [],
|
||||
}
|
||||
},
|
||||
created: function() {
|
||||
let me = this;
|
||||
me.getMedia(1, 0);
|
||||
me.getMedia(0, 0);
|
||||
},
|
||||
methods: {
|
||||
filesize: function(val) {
|
||||
var size = '';
|
||||
val = parseInt(val);
|
||||
if (val < 0.1 * 1024) {
|
||||
// 如果小于0.1KB转化成B
|
||||
size = val.toFixed(2) + ' B';
|
||||
} else if(val < 0.1 * 1024 * 1024) {
|
||||
// 如果小于0.1MB转化成KB
|
||||
size = (val / 1024).toFixed(2) + ' KB';
|
||||
} else if(val < 0.1 * 1024 * 1024 * 1024) {
|
||||
// 如果小于0.1GB转化成MB
|
||||
size = (val / (1024 * 1024)).toFixed(2) + ' MB';
|
||||
} else {
|
||||
// 其他转化成GB
|
||||
size = (val / (1024 * 1024 * 1024)).toFixed(2) + ' GB';
|
||||
}
|
||||
return size;
|
||||
},
|
||||
img: function(path) {
|
||||
return app.url('uploads/' + path);
|
||||
},
|
||||
download: function(id) {
|
||||
return app.url('system/media/download', {id: id});
|
||||
},
|
||||
folder: function() {
|
||||
let me = this;
|
||||
$.dialog({
|
||||
title: '文件夹管理',
|
||||
url: app.url('system/media/folder'),
|
||||
dialogClass: 'modal-md',
|
||||
buttons: [{
|
||||
text: '提交',
|
||||
'class': 'btn-success',
|
||||
click: function() {
|
||||
let modal = this;
|
||||
let form = $('#myfolder').serialize();
|
||||
axios.post(app.url('system/media/folder'), form)
|
||||
.then(function(response) {
|
||||
me.getMedia(1, 0);
|
||||
$(modal).dialog('close');
|
||||
}).catch(function(error) {
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
}]
|
||||
});
|
||||
},
|
||||
getMedia: function(folder, folderId) {
|
||||
let me = this;
|
||||
axios.post(app.url('system/media/dialog'), {
|
||||
folder: folder,
|
||||
folder_id: folderId
|
||||
}).then(function(response) {
|
||||
let res = response.data;
|
||||
if (folder == 1) {
|
||||
me.folders = res.data;
|
||||
} else {
|
||||
me.files = res.data;
|
||||
}
|
||||
}).catch(function(error) {
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
onDelete: function(index, folder) {
|
||||
let me = this;
|
||||
let id = 0;
|
||||
if (folder) {
|
||||
id = me.folders[index].id;
|
||||
} else {
|
||||
id = me.files[index].id;
|
||||
}
|
||||
$.messager.confirm('操作警告', '确定要删除吗', function(btn) {
|
||||
if (btn == true) {
|
||||
axios.post(app.url('system/media/delete'), {
|
||||
id: [id],
|
||||
}).then(function(response) {
|
||||
if (folder) {
|
||||
me.folders.splice(index, 1);
|
||||
} else {
|
||||
me.files.splice(index, 1);
|
||||
}
|
||||
}).catch(function(error) {
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
onFolder: function(id) {
|
||||
let me = this;
|
||||
me.folderId = id;
|
||||
me.getMedia(0, id);
|
||||
},
|
||||
onUpload: function(e) {
|
||||
let me = this;
|
||||
let formData = new FormData();
|
||||
formData.set('folder_id', me.folderId);
|
||||
let files = me.$refs.upload.files;
|
||||
for(var i = 0; i < files.length; i++) {
|
||||
let file = files[i];
|
||||
formData.set('Filedata', file);
|
||||
axios.post(app.url('system/media/create'), formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
},
|
||||
}).then(function(response) {
|
||||
let res = response.data;
|
||||
me.files.unshift(res.data);
|
||||
console.log(res.data);
|
||||
})
|
||||
.catch(function(error) {
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
var vm = vueApp.mount('#vue-app');
|
||||
|
||||
function saveMedia(params) {
|
||||
var files =[];
|
||||
for (var i = 0; i < vm.files.length; i++) {
|
||||
let file = vm.files[i];
|
||||
if (file.checked) {
|
||||
files.push(file);
|
||||
}
|
||||
}
|
||||
|
||||
if (files.length > 0) {
|
||||
var media = $('#' + params['id'] + '-media');
|
||||
media.empty();
|
||||
|
||||
if (params['multi'] == 0) {
|
||||
let file = files[0];
|
||||
var name = params['name'];
|
||||
media.append('<div class="media-item"><input type="hidden" value="' + file.path + '" name="' + name + '" /><img class="img-responsive img-thumbnail" src="'+ app.url('uploads/' + file.path) +'" /><a class="close" title="删除这张图片" data-toggle="media-delete">×</a></div>');
|
||||
} else {
|
||||
var name = params['name'] + '[]';
|
||||
for (var i = 0; i < files.length; i++) {
|
||||
let file = files[i];
|
||||
media.append('<div class="media-item"><input type="hidden" value="' + file.path + '" name="' + name + '" /><img class="img-responsive img-thumbnail" src="'+ app.url('uploads/' + file.path) +'" /><a class="close" title="删除这张图片" data-toggle="media-delete">×</a></div>');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,8 @@
|
||||
<form class="form-horizontal form-controller" action="{{url()}}" method="post" id="myfolder" name="myfolder">
|
||||
<div class="form-group no-border">
|
||||
<label class="col-sm-2 control-label"><span class="red">*</span> 文件夹名称</label>
|
||||
<div class="col-sm-10 control-text">
|
||||
<input type="text" value="" required="required" class="form-control input-sm" autocomplete="off" name="name">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -0,0 +1,108 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>{{$setting['title']}}</title>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
|
||||
<link href="{{$asset_url}}/dist/app.min.css" rel="stylesheet" type="text/css">
|
||||
<script src="{{$asset_url}}/vendor/jquery.js"></script>
|
||||
</head>
|
||||
<style>
|
||||
li { list-style: none; }
|
||||
body {
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
width: 80%;
|
||||
}
|
||||
.header {
|
||||
text-align: center;
|
||||
margin-top: 50px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.logo img { border-radius: 500px; width:86px; height:86px; }
|
||||
.input-group-addon {
|
||||
background-color: #fff;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div class="header">
|
||||
<div class="logo">
|
||||
<img class="circle" src="{{$asset_url}}/images/a1.jpg" />
|
||||
<div>{{auth()->user()->name}}</div>
|
||||
<div>欢迎使用{{$setting['title']}} 扫一扫</div>
|
||||
<p class="message text-sm" style="color:red;"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form id="fileForm" class="form-horizontal">
|
||||
<div class="form-group input-group">
|
||||
<span class="input-group-addon">单据名称</span>
|
||||
<input id="name" name="name" type="text" value="{{$model['name']}}" class="form-control input-sm" readonly="readonly" />
|
||||
</div>
|
||||
|
||||
<div class="form-group input-group">
|
||||
<span class="input-group-addon">文件名称</span>
|
||||
<input type="text" id="filename" class="form-control input-sm" name="filename" />
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<a class="btn btn-info btn-lg btn-block" id="qrcode-btn"><i class="fa fa-qrcode"></i> 扫一扫</a>
|
||||
<span style="display:none;">
|
||||
<input type="file" name="file" id="fileToUpload" capture="camera" accept="image/*" onchange="fileSelected();">
|
||||
</span>
|
||||
</div>
|
||||
<input type="hidden" name="key" value="{{$key}}" />
|
||||
<input type="hidden" name="x-auth-token" value="{{$token}}" />
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
|
||||
$(function() {
|
||||
$('#qrcode-btn').on('click', function() {
|
||||
$('.message').html('');
|
||||
$('#fileToUpload').click();
|
||||
});
|
||||
});
|
||||
|
||||
var btn = '<i class="fa fa-qrcode"></i> 扫一扫';
|
||||
|
||||
function fileSelected() {
|
||||
var formData = new FormData($('#fileForm')[0]);
|
||||
$('.message').html('');
|
||||
$('#fileToUpload').attr('disabled', 'disabled');
|
||||
$.ajax({
|
||||
url: '{{url("uploader")}}',
|
||||
type: 'POST',
|
||||
data: formData,
|
||||
async: false,
|
||||
cache: false,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
xhr: function(){
|
||||
var xhr = $.ajaxSettings.xhr();
|
||||
if (xhr.upload) {
|
||||
$('#qrcode-btn').html('上传中...');
|
||||
// xhr.upload.addEventListener("progress", onprogress, false);
|
||||
return xhr;
|
||||
}
|
||||
},
|
||||
success: function (returndata) {
|
||||
$('#qrcode-btn').html(btn);
|
||||
$('#fileToUpload').removeAttr('disabled');
|
||||
$('#fileToUpload').val('');
|
||||
$('.message').html('上传成功,请在提单界面等待图片出现。');
|
||||
},
|
||||
error: function (returndata) {
|
||||
$('#qrcode-btn').html(btn);
|
||||
$('#fileToUpload').removeAttr('disabled');
|
||||
$('#fileToUpload').val('');
|
||||
$('.message').html('上传失败。');
|
||||
}
|
||||
});
|
||||
}
|
||||
/*
|
||||
function onprogress(evt) {
|
||||
// $(".form-footer>a").html("上传中...");
|
||||
}*/
|
||||
</script>
|
||||
@@ -0,0 +1,107 @@
|
||||
<form method="post" id="menu" name="menu">
|
||||
|
||||
<table class="table table-form m-b-none">
|
||||
|
||||
<tr>
|
||||
<td align="right" width="100">上级</td>
|
||||
<td align="left">
|
||||
<select class="form-control input-sm" name="parent_id" id="parent_id">
|
||||
<option value=""> - </option>
|
||||
@foreach($parents as $parent)
|
||||
<option value="{{$parent['id']}}" @if($row['parent_id'] == $parent['id']) selected @endif>{{$parent['layer_space']}}{{$parent['name']}}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">名称</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" id="name" name="name" value="{{$row['name']}}">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">URL</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" id="url" name="url" value="{{$row['url']}}">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">图标</td>
|
||||
<td align="left">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"></span>
|
||||
<input data-placement="bottomLeft" type="text" autocomplete="off" class="form-control icp icp-auto input-sm" id="icon" name="icon" value="{{$row['icon']}}">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">颜色</td>
|
||||
<td align="left">
|
||||
<div class="colorpicker-controller" title="选择颜色">
|
||||
<div id="color-picker" class="colorpicker" style="background-color:{{$row['color']}};"></div>
|
||||
</div>
|
||||
<input type="hidden" id="color" name="color" value="{{$row['color']}}">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">验证</td>
|
||||
<td align="left">
|
||||
<select class="form-control input-sm" name="access" id="access">
|
||||
<option value="1" @if($row['access'] == '1') selected @endif>是</option>
|
||||
<option value="0" @if($row['access'] == '0') selected @endif>否</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">备注</td>
|
||||
<td align="left">
|
||||
<textarea class="form-control" name="description" id="description">{{$row['description']}}</textarea>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">排序</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" id="sort" name="sort" value="{{$row['sort']}}">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">状态</td>
|
||||
<td align="left">
|
||||
<select class="form-control input-sm" name="status" id="status">
|
||||
<option value="1" @if($row['status'] == '1') selected @endif>启用</option>
|
||||
<option value="0" @if($row['status'] == '0') selected @endif>禁用</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<input type="hidden" name="id" value="{{$row['id']}}">
|
||||
</form>
|
||||
|
||||
<script src="{{$asset_url}}/vendor/fontawesome-iconpicker/js/fontawesome-iconpicker.min.js"></script>
|
||||
<link href="{{$asset_url}}/vendor/fontawesome-iconpicker/css/fontawesome-iconpicker.min.css" rel="stylesheet">
|
||||
<script>
|
||||
$(function() {
|
||||
$('#icon').iconpicker();
|
||||
$("#color-picker").colorpicker({
|
||||
fillcolor: true,
|
||||
target: "#color",
|
||||
change: function(obj, color) {
|
||||
$(obj).css({'background-color': color});
|
||||
$('#color').val(color);
|
||||
},
|
||||
reset: function(obj, color) {
|
||||
$(obj).css({'background-color': color});
|
||||
$('#color').val(color);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,92 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" 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;
|
||||
|
||||
action.dialogType = 'dialog';
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
action.field = function(data) {
|
||||
var me = this;
|
||||
var grid = config.grid;
|
||||
var url = app.url('model/field/index', {model_id: data.master_id});
|
||||
var index = layer.open({
|
||||
skin: 'layui-layer-frame',
|
||||
scrollbar: false,
|
||||
closeBtn: 2,
|
||||
title: data.master_name + '[字段]',
|
||||
type: 2,
|
||||
move: false,
|
||||
area: ['100%', '100%'],
|
||||
content: url,
|
||||
});
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
config.cols[0]['hide'] = true;
|
||||
config.cols[1]['hide'] = true;
|
||||
config.cols[2]['hide'] = true;
|
||||
options.autoGroupColumnDef = {
|
||||
headerName: '名称',
|
||||
width: 120,
|
||||
cellRendererParams: {
|
||||
checkbox: true,
|
||||
suppressCount: true,
|
||||
}
|
||||
};
|
||||
options.treeData = true;
|
||||
options.groupDefaultExpanded = -1;
|
||||
options.getDataPath = function(data) {
|
||||
return data.tree_path;
|
||||
};
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.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 = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,35 @@
|
||||
<form method="post" class="form-horizontal" action="{{url('edit')}}" id="option" name="option">
|
||||
|
||||
<table class="table table-form m-b-none">
|
||||
<tr>
|
||||
<td align="right" width="100">上级</td>
|
||||
<td align="left">
|
||||
<select class="form-control input-sm" name="parent_id" id="parent_id">
|
||||
<option value="0">无</option>
|
||||
@foreach($parents as $parent)
|
||||
<option value="{{$parent['id']}}" @if($row['parent_id'] == $parent['id']) selected @endif>{{$parent['name']}}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">名称</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" id="name" name="name" value="{{$row['name']}}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">值</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" id="value" name="value" value="{{$row['value']}}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">排序</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" id="sort" name="sort" value="{{$row['sort']}}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<input type="hidden" name="id" value="{{$row['id']}}">
|
||||
</form>
|
||||
@@ -0,0 +1,129 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border m-b-sm" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
|
||||
<div class="col-xs-4 col-sm-2">
|
||||
<div class="list-jqgrid">
|
||||
<div id="{{$header['table']}}-tree" style="width:100%;" class="tree-grid ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-8 col-sm-10">
|
||||
<div id="{{$header['table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.tree-grid.ag-theme-balham {
|
||||
border-right: 1px solid #BDC3C7;
|
||||
}
|
||||
|
||||
.tree-grid.ag-theme-balham .ag-ltr .ag-cell {
|
||||
border-width: 0 0 0 0;
|
||||
border-right-color: #d9dcde;
|
||||
}
|
||||
.tree-grid.ag-theme-balham .ag-header-cell,
|
||||
.tree-grid.ag-theme-balham .ag-header-group-cell {
|
||||
border-right-width: 0;
|
||||
}
|
||||
|
||||
.ag-theme-balham {
|
||||
border-left: 1px solid #BDC3C7;
|
||||
border-right: 1px solid #BDC3C7;
|
||||
}
|
||||
.tree-box {
|
||||
border: 1px solid #dee5e7;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.tree-box .ul {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.col-xs-4 {
|
||||
padding-right: 0;
|
||||
padding-left: 5px;
|
||||
}
|
||||
.col-xs-8 {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
@media screen and (min-width: 768px) {
|
||||
.col-sm-2 {
|
||||
padding-right: 0;
|
||||
padding-left: 5px;
|
||||
}
|
||||
.col-sm-10 {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
(function ($) {
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
var height = getPanelHeight(98);
|
||||
var treeOptions = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-tree");
|
||||
gridDiv.style.height = height;
|
||||
treeOptions.columnDefs = [
|
||||
{cellClass:'text-left', field: 'name', headerName: '枚举类别'},
|
||||
];
|
||||
treeOptions.onRowClicked = function (params) {
|
||||
if (params.data.id >= 0) {
|
||||
var query = search.simple.query;
|
||||
query['parent_id'] = params.data.id;
|
||||
query['page'] = 1;
|
||||
config.grid.remoteData(query);
|
||||
}
|
||||
};
|
||||
treeOptions.remoteDataUrl = "{{url('category')}}";
|
||||
new agGrid.Grid(gridDiv, treeOptions);
|
||||
// 读取数据
|
||||
treeOptions.remoteData();
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = height;
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.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, options);
|
||||
|
||||
// 读取数据
|
||||
options.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 = options;
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,3 @@
|
||||
<form class="form-horizontal form-controller" method="post" id="region" name="region">
|
||||
{{$form['tpl']}}
|
||||
</form>
|
||||
@@ -0,0 +1,134 @@
|
||||
<div class="wrapper-xs">
|
||||
<form id="dialog-{{$search['query']['id']}}-search-form" class="form-inline search-inline-form" 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: 420,
|
||||
cellRendererParams: {
|
||||
checkbox: true,
|
||||
suppressCount: false,
|
||||
}
|
||||
};
|
||||
|
||||
grid.treeData = true;
|
||||
grid.groupDefaultExpanded = 2;
|
||||
grid.getDataPath = function(data) {
|
||||
return data.text.split('/');
|
||||
};
|
||||
grid.columnDefs = [
|
||||
{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,148 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border m-b-sm" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
|
||||
<div class="col-xs-4 col-sm-2">
|
||||
<div class="list-jqgrid">
|
||||
<div id="{{$header['table']}}-tree" style="width:100%;" class="tree-grid ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-8 col-sm-10">
|
||||
<div id="{{$header['table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.tree-grid.ag-theme-balham {
|
||||
border-right: 1px solid #BDC3C7;
|
||||
}
|
||||
|
||||
.tree-grid.ag-theme-balham .ag-ltr .ag-cell {
|
||||
border-width: 0 0 0 0;
|
||||
border-right-color: #d9dcde;
|
||||
}
|
||||
.tree-grid.ag-theme-balham .ag-header-cell,
|
||||
.tree-grid.ag-theme-balham .ag-header-group-cell {
|
||||
border-right-width: 0;
|
||||
}
|
||||
|
||||
.ag-theme-balham {
|
||||
border-left: 1px solid #BDC3C7;
|
||||
border-right: 1px solid #BDC3C7;
|
||||
}
|
||||
.tree-box {
|
||||
border: 1px solid #dee5e7;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.tree-box .ul {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.col-xs-4 {
|
||||
padding-right: 0;
|
||||
padding-left: 5px;
|
||||
}
|
||||
.col-xs-8 {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
@media screen and (min-width: 768px) {
|
||||
.col-sm-2 {
|
||||
padding-right: 0;
|
||||
padding-left: 5px;
|
||||
}
|
||||
.col-sm-10 {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
(function ($) {
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
var height = getPanelHeight(163);
|
||||
var treeOptions = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-tree");
|
||||
gridDiv.style.height = height;
|
||||
|
||||
treeOptions.autoGroupColumnDef = {
|
||||
headerName: '行政区域',
|
||||
width: 250,
|
||||
sortable: false,
|
||||
suppressMenu: true,
|
||||
cellRendererParams: {
|
||||
suppressCount: false,
|
||||
}
|
||||
};
|
||||
treeOptions.treeData = true;
|
||||
treeOptions.groupDefaultExpanded = -1;
|
||||
|
||||
treeOptions.getDataPath = function(data) {
|
||||
return data.tree_path;
|
||||
};
|
||||
|
||||
treeOptions.enableCellTextSelection = false;
|
||||
treeOptions.treeData = true;
|
||||
treeOptions.groupDefaultExpanded = 1;
|
||||
|
||||
treeOptions.onRowClicked = function (params) {
|
||||
if (params.data.id > 0) {
|
||||
var query = search.simple.query;
|
||||
query['parent_id'] = params.data.id;
|
||||
query['page'] = 1;
|
||||
config.grid.remoteData(query);
|
||||
}
|
||||
};
|
||||
treeOptions.remoteDataUrl = "{{url('category')}}";
|
||||
treeOptions.columnDefs = [];
|
||||
new agGrid.Grid(gridDiv, treeOptions);
|
||||
// 读取数据
|
||||
treeOptions.remoteData();
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = height;
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.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, options);
|
||||
|
||||
// 读取数据
|
||||
options.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 = options;
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,36 @@
|
||||
<form method="post" class="form-horizontal" action="{{url('store')}}" id="setting" name="setting">
|
||||
|
||||
<table class="table table-form m-b-none">
|
||||
<tr>
|
||||
<td align="right" width="10%">配置名称</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="name" value="{{$row['name']}}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">Key</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="key" value="{{$row['key']}}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">值</td>
|
||||
<td align="left">
|
||||
<textarea class="form-control input-sm" type="text" name="value">{{$row['value']}}</textarea>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">类型</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="type" value="{{$row['type']}}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">备注</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="remark" value="{{$row['remark']}}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<input type="hidden" name="id" value="{{$row['id']}}">
|
||||
</form>
|
||||
@@ -0,0 +1,59 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" 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;
|
||||
|
||||
action.dialogType = 'dialog';
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.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 = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,59 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" 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;
|
||||
|
||||
action.dialogType = 'dialog';
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.show(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.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 = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,46 @@
|
||||
<form method="post" class="form-horizontal" action="{{url('store')}}" id="sms" name="sms">
|
||||
|
||||
<table class="table table-form m-b-none">
|
||||
<tr>
|
||||
<td align="right" width="10%">名称</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="name" value="{{$row['name']}}">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">apikey</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="apikey" value="{{$row['apikey']}}">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">服务商</td>
|
||||
<td align="left">
|
||||
<select class="form-control input-sm" name="driver" id="driver">
|
||||
<option value="gdoo" @if($row['driver'] == 'gdoo') selected @endif>Gdoo短信</option>
|
||||
<option value="alidayu" @if($row['driver'] == 'alidayu') selected @endif>阿里短信</option>
|
||||
<option value="yunpian" @if($row['driver'] == 'yunpian') selected @endif>云片网</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">状态</td>
|
||||
<td align="left">
|
||||
<select class="form-control input-sm" name="status" id="status">
|
||||
<option value="1" @if($row['status'] == '1') selected @endif>启用</option>
|
||||
<option value="0" @if($row['status'] == '0') selected @endif>停用</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">排序</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="sort" value="{{$row['sort']}}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<input type="hidden" name="id" value="{{$row['id']}}">
|
||||
</form>
|
||||
@@ -0,0 +1,83 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" 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;
|
||||
|
||||
action.dialogType = 'dialog';
|
||||
|
||||
action.test = function() {
|
||||
var me = this;
|
||||
var grid = config.grid;
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (rows.length == 1) {
|
||||
formDialog({
|
||||
title: '测试短信',
|
||||
url: app.url('system/sms/test', {id: rows[0].id}),
|
||||
storeUrl: app.url('system/sms/test'),
|
||||
id: 'sms_test',
|
||||
dialogClass:'modal-sm',
|
||||
success: function(res) {
|
||||
toastrSuccess(res.data);
|
||||
$(this).dialog("close");
|
||||
},
|
||||
error: function(res) {
|
||||
toastrError(res.data);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
toastrError('只能选择一条数据。');
|
||||
}
|
||||
}
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.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 = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
@@ -0,0 +1,14 @@
|
||||
<form method="post" action="{{url('test')}}" id="sms_test" name="sms_test">
|
||||
<table class="table table-form m-b-none">
|
||||
<tr>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" placeholder="发送手机" name="data[sms_to]" type="text">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left">
|
||||
<textarea class="form-control input-sm" placeholder="发送内容" name="data[sms_text]" rows="3"></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
@@ -0,0 +1,122 @@
|
||||
<form method="post" id="widget" name="widget">
|
||||
|
||||
<table class="table table-form m-b-none">
|
||||
<tr>
|
||||
<td align="right" width="10%">名称</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="name" value="{{$row['name']}}">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">URL</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" readonly="readonly" name="url" value="{{$row['url']}}">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">MoreURL</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" readonly="readonly" name="more_url" value="{{$row['more_url']}}">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">权限</td>
|
||||
<td align="left">
|
||||
{{App\Support\Dialog::search($row, 'id=receive_id&name=receive_name&multi=1')}}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">位置</td>
|
||||
<td align="left">
|
||||
<select name="grid" id="grid" class="form-control input-sm">
|
||||
<option value="8" @if($row['grid'] == 8) selected="selected" @endif>左</option>
|
||||
<option value="4" @if($row['grid'] == 4) selected="selected" @endif>右</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">图标</td>
|
||||
<td align="left">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"></span>
|
||||
<input data-placement="bottomLeft" type="text" autocomplete="off" class="form-control icp icp-auto input-sm" id="icon" name="icon" value="{{$row['icon']}}">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">颜色</td>
|
||||
<td align="left">
|
||||
<div class="colorpicker-controller" title="选择颜色">
|
||||
<div id="color-picker" class="colorpicker" style="background-color:{{$row['color']}};"></div>
|
||||
</div>
|
||||
<input type="hidden" id="color" name="color" value="{{$row['color']}}">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">类型</td>
|
||||
<td align="left">
|
||||
<select class="form-control input-sm" disabled="disabled" name="type" id="type">
|
||||
<option value="1" @if($row['type'] == 1) selected @endif>部件</option>
|
||||
<option value="2" @if($row['type'] == 2) selected @endif>信息</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">状态</td>
|
||||
<td align="left">
|
||||
<select class="form-control input-sm" name="status" id="status">
|
||||
<option value="1" @if($row['status'] == 1) selected @endif>正常</option>
|
||||
<option value="0" @if($row['status'] == 0) selected @endif>禁用</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">全局</td>
|
||||
<td align="left">
|
||||
<select class="form-control input-sm" name="default" id="default">
|
||||
<option value="1" @if($row['default'] == 1) selected @endif>是</option>
|
||||
<option value="0" @if($row['default'] == 0) selected @endif>否</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="right">排序</td>
|
||||
<td align="left">
|
||||
<input class="form-control input-sm" type="text" name="sort" value="{{$row['sort']}}">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<input type="hidden" name="id" value="{{$row['id']}}">
|
||||
</form>
|
||||
|
||||
<script src="{{$asset_url}}/vendor/fontawesome-iconpicker/js/fontawesome-iconpicker.min.js"></script>
|
||||
<link href="{{$asset_url}}/vendor/fontawesome-iconpicker/css/fontawesome-iconpicker.min.css" rel="stylesheet">
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$('#icon').iconpicker();
|
||||
$("#color-picker").colorpicker({
|
||||
fillcolor: true,
|
||||
target: "#color",
|
||||
change: function(obj, color) {
|
||||
$(obj).css({'background-color': color});
|
||||
$('#color').val(color);
|
||||
},
|
||||
reset: function(obj, color) {
|
||||
$(obj).css({'background-color': color});
|
||||
$('#color').val(color);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,76 @@
|
||||
{{$header["js"]}}
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='list-jqgrid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" 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;
|
||||
|
||||
action.dialogType = 'dialog';
|
||||
|
||||
// 自定义搜索方法
|
||||
search.searchInit = function (e) {
|
||||
var self = this;
|
||||
}
|
||||
|
||||
action.refresh = function() {
|
||||
var me = this;
|
||||
var loading = layer.msg('部件更新中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
$.post(app.url('system/widget/refresh'), function(res) {
|
||||
if (res.status) {
|
||||
options.remoteData({page: 1});
|
||||
toastrSuccess(res.data);
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
}
|
||||
},'json').complete(function() {
|
||||
layer.close(loading);
|
||||
});
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
// 读取数据
|
||||
options.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 = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
Reference in New Issue
Block a user