作者 Karson

添加多图上传预览和选择

新增bootstrap-table的主键功能,可传入pk设定表的主键
修复管理员权限不刷新的BUG
修复提示未登录时,在登录后不跳转之前页面的BUG
修复在移动版部分按钮在视图的布局
修复头像不显示的BUG
修改UC默认关闭
修复plupload方法重复绑定事件的BUG
修复部分样式的显示错误
修复登录Token错误的BUG
... ... @@ -31,7 +31,7 @@ class Crud extends Command
{
$adminPath = dirname(__DIR__) . DS;
//表名
$table = $input->getOption('table') ? : '';
$table = $input->getOption('table') ?: '';
//自定义控制器
$controller = $input->getOption('controller');
//自定义模型
... ... @@ -96,6 +96,7 @@ class Crud extends Command
//从数据库中获取表字段信息
$columnList = Db::query("SELECT * FROM `information_schema`.`columns` WHERE TABLE_SCHEMA = ? AND table_name = ? ORDER BY ORDINAL_POSITION", [$dbname, $tableName]);
$fields = [];
foreach ($columnList as $k => $v)
{
... ... @@ -109,6 +110,20 @@ class Crud extends Command
$field = 'id';
$order = 'id';
$priDefined = FALSE;
$prikey = '';
foreach ($columnList as $k => $v)
{
if ($v['COLUMN_KEY'] == 'PRI')
{
$prikey = $v['COLUMN_NAME'];
break;
}
}
if (!$prikey)
{
throw new Exception('Primary key not found!');
}
$order = $prikey;
try
{
... ... @@ -161,7 +176,7 @@ class Crud extends Command
if ($v['DATA_TYPE'] == 'set')
{
$attrArr['multiple'] = '';
$fieldName.="[]";
$fieldName .= "[]";
}
$attrStr = $this->getArrayString($attrArr);
$itemArr = $this->getLangArray($itemArr, FALSE);
... ... @@ -209,7 +224,7 @@ class Crud extends Command
}
else if ($inputType == 'checkbox')
{
$fieldName.="[]";
$fieldName .= "[]";
$itemArr = $this->getLangArray($itemArr, FALSE);
$itemString = $this->getArrayString($itemArr);
$formAddElement = "{:build_checkboxs('{$fieldName}', [{$itemString}], '{$defaultValue}')}";
... ... @@ -252,7 +267,7 @@ class Crud extends Command
$step = array_intersect($cssClassArr, ['typeahead', 'tagsinput']) ? 0 : $step;
$attrArr['class'] = implode(' ', $cssClassArr);
$isUpload = substr($field, -4) == 'file' || substr($field, -5) == 'image' || substr($field, -6) == 'avatar' ? TRUE : FALSE;
$isUpload = in_array(substr($field, -4), ['file']) || in_array(substr($field, -5), ['files', 'image']) || in_array(substr($field, -6), ['images', 'avatar']) || in_array(substr($field, -7), ['avatars']) ? TRUE : FALSE;
//如果是步长则加上步长
if ($step)
{
... ... @@ -327,6 +342,7 @@ class Crud extends Command
'modelName' => $modelName,
'tableComment' => $tableComment,
'iconName' => $iconName,
'pk' => $prikey,
'order' => $order,
'table' => $table,
'tableName' => $tableName,
... ... @@ -531,11 +547,16 @@ EOD;
*/
protected function getImageUpload($field, $content)
{
$filter = substr($field, -4) == 'avatar' || substr($field, -5) == 'image' ? 'data-mimetype="image/*"' : "";
$filter = substr($field, -4) == 'avatar' || substr($field, -5) == 'image' || substr($field, -6) == 'images' ? ' data-mimetype="image/*"' : "";
$multiple = substr($field, -1) == 's' ? ' data-multiple="true"' : ' data-multiple="false"';
$preview = $filter ? ' data-preview-id="p-' . $field . '"' : '';
$previewcontainer = $preview ? '<ul class="row list-inline plupload-preview" id="p-' . $field . '"></ul>' : '';
return <<<EOD
<div class="form-inline">
{$content}
<span><button id="plupload-{$field}" class="btn btn-danger plupload" data-input-id="c-{$field}"{$filter}><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="plupload-{$field}" class="btn btn-danger plupload" data-input-id="c-{$field}"{$filter}{$multiple}{$preview}><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-{$field}" class="btn btn-primary fachoose" data-input-id="c-{$field}"{$filter}{$multiple}><i class="fa fa-list"></i> {:__('Choose')}</button></span>
{$previewcontainer}
</div>
EOD;
}
... ...
... ... @@ -19,6 +19,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: '{%pk%}',
sortName: '{%order%}',
columns: [
[
... ...
... ... @@ -70,18 +70,18 @@ class Index extends Backend
$result = $validate->check($data);
if (!$result)
{
$this->error($validate->getError());
$this->error($validate->getError(), $url, ['token' => $this->request->token()]);
return;
}
$result = $this->auth->login($username, $password, $keeplogin ? 86400 : 0);
if ($result === true)
{
$this->success(__('Login successful'), $url);
$this->success(__('Login successful'), $url, ['url' => $url]);
return;
}
else
{
$this->error(__('Username or password is incorrect'), $url);
$this->error(__('Username or password is incorrect'), $url, ['token' => $this->request->token()]);
}
return;
}
... ...
... ... @@ -48,6 +48,32 @@ class Attachment extends Backend
}
/**
* 选择附件
*/
public function select()
{
if ($this->request->isAjax())
{
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$total = $this->model
->where($where)
->order($sort, $order)
->count();
$list = $this->model
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
$result = array("total" => $total, "rows" => $list);
return json($result);
}
return $this->view->fetch();
}
/**
* 添加
*/
public function add()
... ...
... ... @@ -2,7 +2,6 @@
namespace app\admin\library\traits;
trait Backend
{
... ... @@ -61,7 +60,7 @@ trait Backend
*/
public function edit($ids = NULL)
{
$row = $this->model->get(['id' => $ids]);
$row = $this->model->get($ids);
if (!$row)
$this->error(__('No Results were found'));
if ($this->request->isPost())
... ... @@ -93,7 +92,7 @@ trait Backend
$this->code = -1;
if ($ids)
{
$count = $this->model->where('id', 'in', $ids)->delete();
$count = $this->model->destroy($ids);
if ($count)
{
$this->code = 1;
... ... @@ -118,7 +117,7 @@ trait Backend
$values = array_intersect_key($values, array_flip(array('status')));
if ($values)
{
$count = $this->model->where('id', 'in', $ids)->update($values);
$count = $this->model->where($this->model->getPk(), 'in', $ids)->update($values);
if ($count)
{
$this->code = 1;
... ...
... ... @@ -64,7 +64,7 @@
</a>
</li>
<li>
<li class="hidden-xs">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-language"></i></a>
<ul class="dropdown-menu">
<li class="{$config['language']=='zh-cn'?'active':''}">
... ... @@ -76,7 +76,7 @@
</ul>
</li>
<li>
<li class="hidden-xs">
<a href="#" data-toggle="fullscreen"><i class="fa fa-arrows-alt"></i></a>
</li>
... ...
<div class="panel panel-default panel-intro">
{:build_heading()}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh')}
{if request()->get('multiple') == 'true'}
<a class="btn btn-danger btn-choose-multi"><i class="fa fa-check"></i> {:__('Choose')}</a>
{/if}
</div>
<table id="table" class="table table-bordered table-hover" width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
... ...
... ... @@ -41,7 +41,7 @@
<div class="box-body box-profile">
<div class="profile-avatar-container">
<img class="profile-user-img img-responsive img-circle plupload" src="{$admin.avatar}" alt="">
<img class="profile-user-img img-responsive img-circle plupload" src="__CDN__{$admin.avatar}" alt="">
<div class="profile-avatar-text img-circle">{:__('Click to edit')}</div>
<button id="plupload-avatar" class="plupload" data-input-id="c-avatar" data-after-upload="changeavatar"><i class="fa fa-upload"></i> {:__('Upload')}</button>
</div>
... ...
... ... @@ -28,7 +28,8 @@
<div class="col-xs-12 col-sm-8">
<div class="form-inline">
<input id="c-image" class="form-control" size="50" name="row[image]" type="text" value="">
<span><button id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-preview-id="plupload-preview-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<ul class="row list-inline plupload-preview" id="plupload-preview-image"></ul>
</div>
</div>
</div>
... ...
... ... @@ -29,7 +29,9 @@
<div class="col-xs-12 col-sm-8">
<div class="form-inline">
<input id="c-image" class="form-control" size="50" name="row[image]" type="text" value="{$row.image}">
<span><button id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-multiple="false" data-input-id="c-image" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-multiple="false" data-input-id="c-image"><i class="fa fa-list-ul"></i> {:__('Choose')}</button></span>
<ul class="row list-inline plupload-preview" id="p-image"></ul>
</div>
</div>
</div>
... ...
... ... @@ -93,19 +93,22 @@ class Backend extends Controller
// 设置当前请求的URI
$this->auth->setRequestUri($path);
// 检测是否需要验证登录
if (!$this->auth->match($this->noNeedLogin))
{
//检测是否登录
if (!$this->auth->isLogin())
{
$this->error(__('Please login first'), url('index/login', ['url' => $this->request->url()]));
$url = Session::get('referer');
$url = $url ? $url : $this->request->url();
$this->error(__('Please login first'), url('index/login', ['url' => $url]));
}
// 判断是否需要验证权限
if (!$this->auth->match($this->noNeedRight))
{
// 判断控制器和方法判断是否有对应权限
$path = $this->request->path();
$path = substr($path, 0, 1) == '/' ? $path : '/' . $path;
if (!$this->auth->check($path))
{
$this->error(__('You have no permission'), NULL);
... ...
... ... @@ -2,7 +2,7 @@
//UC配置
// Ucenter配置配置
define('UC_STATUS', TRUE); //是否开启Ucenter同步
define('UC_STATUS', false); //是否开启Ucenter同步
define('UC_CONNECT', 'mysql');
... ...
... ... @@ -26,7 +26,7 @@
"bootstrap3-dialog": "bootstrap-dialog#^1.35.3",
"require-css": "^0.1.8",
"less": "^2.7.1",
"tableExport.jquery.plugin": "^1.6.4",
"tableExport.jquery.plugin": "^1.9.0",
"jquery-slimscroll": "slimscroll#^1.3.8",
"jquery.cookie": "^1.4.1",
"Sortable": "^1.5.0",
... ...
... ... @@ -223,6 +223,10 @@ class Auth
//循环规则,判断结果。
$rulelist = []; //
if (in_array('*', $ids))
{
$rulelist[] = "*";
}
foreach ($this->rules as $rule)
{
//超级管理员无需验证condition
... ...
... ... @@ -106,8 +106,9 @@ body {
font-weight: normal;
}
.user-panel > .image img {
width: 45px;
height: 45px;
width: 100%;
max-width: 45px;
max-height: 45px;
}
/*panel扩展描述样式*/
.panel-intro {
... ... @@ -329,6 +330,26 @@ body {
.note-editor .note-editing-area .note-editable {
display: block !important;
}
.plupload-preview {
padding: 10px;
margin-bottom: 0;
}
.plupload-preview li {
margin-bottom: 10px;
}
.plupload-preview .thumbnail {
margin-bottom: 10px;
}
.plupload-preview a {
display: block;
}
.plupload-preview a:first-child {
height: 90px;
}
.plupload-preview a img {
height: 80px;
object-fit: cover;
}
.pjax-loader-bar .progress {
position: fixed;
top: 0;
... ... @@ -526,6 +547,9 @@ body {
.nav-addtabs {
display: none;
}
.fixed-table-toolbar .columns-right.btn-group {
display: none;
}
}
/*平板样式*/
/*# sourceMappingURL=backend.css.map */
\ No newline at end of file
... ...
... ... @@ -42,6 +42,63 @@ define(['jquery', 'bootstrap', 'backend', 'form', 'table'], function ($, undefin
Table.api.bindevent(table);
},
select: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'general/attachment/select',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
sortName: 'id',
columns: [
[
{field: 'state', checkbox: true, },
{field: 'id', title: __('Id')},
{field: 'url', title: __('Preview'), formatter: Controller.api.formatter.thumb},
{field: 'imagewidth', title: __('Imagewidth')},
{field: 'imageheight', title: __('Imageheight')},
{field: 'mimetype', title: __('Mimetype'), operate: 'LIKE %...%',
process: function (value, arg) {
return value.replace(/\*/g, '%');
}},
{field: 'createtime', title: __('Createtime'), formatter: Table.api.formatter.datetime},
{field: 'operate', title: __('Operate'), events: {
'click .btn-chooseone': function (e, value, row, index) {
var callback = Backend.api.query('callback');
var id = Backend.api.query('element_id');
var multiple = Backend.api.query('multiple');
multiple = multiple == 'true' ? true : false;
if (id && callback) {
parent.window[callback](id, {url: row.url}, multiple);
}
},
}, formatter: function () {
return '<a href="javascript:;" class="btn btn-danger btn-chooseone btn-xs"><i class="fa fa-check"></i> ' + __('Choose') + '</a>';
}}
]
]
});
// 选中多个
$(document).on("click", ".btn-choose-multi", function () {
var callback = Backend.api.query('callback');
var id = Backend.api.query('element_id');
var urlArr = new Array();
$.each(table.bootstrapTable("getAllSelections"), function (i, j) {
urlArr.push(j.url);
});
parent.window[callback](id, {url: urlArr.join(",")}, true);
});
// 为表格绑定事件
Table.api.bindevent(table);
},
add: function () {
Controller.api.bindevent();
},
... ...
... ... @@ -322,8 +322,8 @@ define(['jquery', 'bootstrap', 'backend', 'addtabs', 'adminlte', 'form'], functi
$(window).resize();
},
login: function () {
Form.api.bindevent($("#login-form"), null, function () {
location.href = Backend.api.fixurl("index/index");
Form.api.bindevent($("#login-form"), null, function (data) {
location.href = Backend.api.fixurl(data.url);
});
}
};
... ...
... ... @@ -51,6 +51,9 @@ define(['jquery', 'bootstrap', 'backend', 'toastr', 'upload', 'validator'], func
}
Toastr.success(msg ? msg : __('Operation completed'));
} else {
if (typeof data.token !== 'undefined') {
$("input[name='__token__']").val(data.token);
}
Toastr.error(msg ? msg : __('Operation failed'));
}
} else {
... ... @@ -230,6 +233,33 @@ define(['jquery', 'bootstrap', 'backend', 'toastr', 'upload', 'validator'], func
if ($(".plupload", form).size() > 0) {
Upload.api.plupload();
}
//绑定fachoose选择附件事件
if ($(".fachoose", form).size() > 0) {
$(document).on('click', ".fachoose", function () {
var multiple = $(this).data("multiple") ? $(this).data("multiple") : false;
var mimetype = $(this).data("mimetype") ? $(this).data("mimetype") : '';
Backend.api.open("general/attachment/select?callback=refreshchoose&element_id=" + $(this).attr("id") + "&multiple=" + multiple + "&mimetype="+mimetype, __('Choose'));
return false;
});
//刷新选择的元素
window.refreshchoose = function (id, data, multiple) {
var input_id = $("#" + id).data("input-id");
if (multiple) {
var urlArr = [];
var inputObj = $("#" + input_id);
if (inputObj.val() != "") {
urlArr.push(inputObj.val());
}
urlArr.push(data.url);
inputObj.val(urlArr.join(",")).trigger("change");
} else {
$("#" + input_id).val(data.url).trigger("change");
}
layer.closeAll();
};
}
},
custom: {}
},
... ...
... ... @@ -24,6 +24,7 @@ define(['jquery', 'bootstrap', 'backend', 'toastr', 'moment', 'bootstrap-table',
locale: 'zh-CN',
showToggle: true,
showColumns: true,
pk: 'id',
sortName: 'id',
sortOrder: 'desc',
paginationFirstText: __("First"),
... ... @@ -110,6 +111,7 @@ define(['jquery', 'bootstrap', 'backend', 'toastr', 'moment', 'bootstrap-table',
//当内容渲染完成后
table.on('post-body.bs.table', function (e, settings, json, xhr) {
$(Table.config.refreshbtn, toolbar).find(".fa").removeClass("fa-spin");
$(Table.config.disabledbtn, toolbar).toggleClass('disabled', true);
// 挺拽选择,需要重新绑定事件
require(['drag', 'drop'], function () {
... ... @@ -187,24 +189,25 @@ define(['jquery', 'bootstrap', 'backend', 'toastr', 'moment', 'bootstrap-table',
dragEnd: function () {
var data = table.bootstrapTable('getData');
var current = data[parseInt($(this).data("index"))];
var options = table.bootstrapTable('getOptions');
//改变的值和改变的ID集合
var ids = $.map($("tbody tr:visible", table), function (tr) {
return data[parseInt($(tr).data("index"))].id;
return data[parseInt($(tr).data("index"))][options.pk];
});
var changeid = current.id;
var changeid = current[options.pk];
var pid = typeof current.pid != 'undefined' ? current.pid : '';
var options = {
var params = {
url: table.bootstrapTable('getOptions').extend.dragsort_url,
data: {
ids: ids.join(','),
changeid: changeid,
pid: pid,
field: Table.config.dragsortfield,
orderway: table.bootstrapTable('getOptions').sortOrder,
table: table.bootstrapTable('getOptions').extend.table
orderway: options.sortOrder,
table: options.extend.table
}
};
Backend.api.ajax(options, function (data) {
Backend.api.ajax(params, function (data) {
Toastr.success(__('Operation completed'));
table.bootstrapTable('refresh');
});
... ... @@ -233,7 +236,7 @@ define(['jquery', 'bootstrap', 'backend', 'toastr', 'moment', 'bootstrap-table',
operate: {
'click .btn-editone': function (e, value, row, index) {
var options = $(this).closest('table').bootstrapTable('getOptions');
Backend.api.open(options.extend.edit_url + "/ids/" + row.id, __('Edit'));
Backend.api.open(options.extend.edit_url + "/ids/" + row[options.pk], __('Edit'));
},
'click .btn-delone': function (e, value, row, index) {
var that = this;
... ... @@ -250,7 +253,8 @@ define(['jquery', 'bootstrap', 'backend', 'toastr', 'moment', 'bootstrap-table',
{icon: 3, title: __('Warning'), offset: [top, left], shadeClose: true},
function () {
var table = $(that).closest('table');
Table.api.multi("del", row.id, table, that);
var options = table.bootstrapTable('getOptions');
Table.api.multi("del", row[options.pk], table, that);
Backend.api.layer.close(index);
}
);
... ... @@ -341,8 +345,9 @@ define(['jquery', 'bootstrap', 'backend', 'toastr', 'moment', 'bootstrap-table',
},
// 获取选中的条目ID集合
selectedids: function (table) {
var options = table.bootstrapTable('getOptions');
return $.map(table.bootstrapTable('getSelections'), function (row) {
return row.id
return row[options.pk];
});
},
// 切换复选框状态
... ...
define(['jquery', 'bootstrap', 'backend', 'plupload'], function ($, undefined, Backend, Plupload) {
define(['jquery', 'bootstrap', 'backend', 'plupload', 'dragsort', 'template'], function ($, undefined, Backend, Plupload, Dragsort, Template) {
var Upload = {
list: {},
config: {
container: document.body,
classname: '.plupload',
classname: '.plupload:not([initialized])',
previewtpl: '<li class="col-xs-3"><a href="<%=fullurl%>" data-url="<%=url%>" target="_blank" class="thumbnail"><img src="<%=fullurl%>" class="img-responsive"></a><a href="javascript:;" class="btn btn-danger btn-xs btn-trash"><i class="fa fa-trash"></i></a></li>',
},
api: {
//Plupload上传
plupload: function (element, onAfterUpload) {
element = typeof element == 'undefined' ? Upload.config.classname : element;
$(element, Upload.config.container).each(function () {
$(this).attr("initialized", true);
var that = this;
var id = $(this).prop("id");
var url = $(this).data("url");
... ... @@ -20,14 +22,18 @@ define(['jquery', 'bootstrap', 'backend', 'plupload'], function ($, undefined, B
//上传URL
url = url ? url : Config.upload.uploadurl;
url = Backend.api.fixurl(url);
//填充ID
var input_id = $(that).data("input-id") ? $(that).data("input-id") : "";
//预览ID
var preview_id = $(that).data("preview-id") ? $(that).data("preview-id") : "";
//最大可上传
maxsize = maxsize ? maxsize : Config.upload.maxsize;
maxsize = typeof maxsize !== "undefined" ? maxsize : Config.upload.maxsize;
//文件类型
mimetype = mimetype ? mimetype : Config.upload.mimetype;
mimetype = typeof mimetype !== "undefined" ? mimetype : Config.upload.mimetype;
//请求的表单参数
multipart = multipart ? multipart : Config.upload.multipart;
multipart = typeof multipart !== "undefined" ? multipart : Config.upload.multipart;
//是否支持批量上传
multiple = multiple ? multiple : Config.upload.multiple;
multiple = typeof multiple !== "undefined" ? multiple : Config.upload.multiple;
//生成Plupload实例
Upload.list[id] = new Plupload.Uploader({
runtimes: 'html5,flash,silverlight,html4',
... ... @@ -63,6 +69,7 @@ define(['jquery', 'bootstrap', 'backend', 'plupload'], function ($, undefined, B
$(that).prop("disabled", true).html("<i class='fa fa-upload'></i> 上传" + file.percent + "%");
},
FileUploaded: function (up, file, info) {
var options = this.getOption();
//还原按钮文字及状态
$(that).prop("disabled", false).html($(that).data("bakup-html"));
//这里可以改成其它的表现形式
... ... @@ -76,9 +83,14 @@ define(['jquery', 'bootstrap', 'backend', 'plupload'], function ($, undefined, B
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
if (ret.code === 1) {
//$("input[data-plupload-id='" + id + "-text']").val(data.url);
if ($(that).data("input-id")) {
$("input#" + $(that).data("input-id")).val(data.url);
if (input_id) {
var urlArr = [];
var inputObj = $("#" + input_id);
if (options.multi_selection && inputObj.val() != "") {
urlArr.push(inputObj.val());
}
urlArr.push(data.url);
inputObj.val(urlArr.join(",")).trigger("change");
}
var afterUpload = $("#" + id).data("after-upload");
if (afterUpload && typeof Upload.api.custom[afterUpload] == 'function') {
... ... @@ -102,6 +114,49 @@ define(['jquery', 'bootstrap', 'backend', 'plupload'], function ($, undefined, B
}
}
});
//拖动排序
if (preview_id && multiple) {
$("#" + preview_id).dragsort({
dragSelector: "li",
dragEnd: function () {
$("#" + preview_id).trigger("fa.preview.change");
},
placeHolderTemplate: '<li class="col-xs-3"></li>'
});
}
if (preview_id && input_id) {
$(document.body).on("keyup change", "#" + input_id, function () {
var inputStr = $("#" + input_id).val();
var inputArr = inputStr.split(/\,/);
$("#" + preview_id).empty();
$.each(inputArr, function (i, j) {
if (!j) {
return true;
}
var html = Template.render(Upload.config.previewtpl, {url: j, fullurl: Config.upload.cdnurl + j});
$("#" + preview_id).append(html);
});
});
$("#" + input_id).trigger("keyup");
}
if (preview_id) {
// 监听事件
$(document.body).on("fa.preview.change", "#" + preview_id, function () {
var urlArr = new Array();
$("#" + preview_id + " [data-url]").each(function (i, j) {
urlArr.push($(this).data("url"));
});
if (input_id) {
$("#" + input_id).val(urlArr.join(","));
}
});
//移除按钮事件
$(document.body).on("click", "#" + preview_id + " .btn-trash", function () {
$(this).closest("li").remove();
$("#" + preview_id).trigger("fa.preview.change");
});
}
Upload.list[id].init();
});
},
... ...
... ... @@ -140,8 +140,9 @@ body {
}
.user-panel > .image img{
width:45px;
height:45px;
width:100%;
max-width:45px;
max-height:45px;
}
/*panel扩展描述样式*/
... ... @@ -364,6 +365,27 @@ body {
display: block !important;
}
.plupload-preview {
padding:10px;
margin-bottom:0;
li {
margin-bottom:10px;
}
.thumbnail {
margin-bottom:10px;
}
a{
display:block;
&:first-child{
height:90px;
}
img{
height:80px;
object-fit: cover;
}
}
}
.pjax-loader-bar .progress {
position: fixed;
top: 0;
... ... @@ -567,6 +589,11 @@ body {
.nav-addtabs {
display:none;
}
.fixed-table-toolbar {
.columns-right.btn-group{
display:none;
}
}
}
/*平板样式*/
@media (max-width: @screen-tablet) {
... ...