mirror of https://gitee.com/karson/fastadmin.git
新增附件区分本地或远程字段
新增Backend.api.cdnurl方法用于获取资源cdn的地址 修复附件列表图片显示的BUG 修复边栏头像大小显示的BUG 移除日志记录中的含有password的密码字段 修复个人资料中显示其它管理员日志的BUGpull/323483/MERGE
parent
ee866c0c97
commit
58edcba995
|
|
@ -199,6 +199,7 @@ class Ajax extends Backend
|
||||||
'mimetype' => $fileInfo['type'],
|
'mimetype' => $fileInfo['type'],
|
||||||
'url' => $uploadDir . $splInfo->getSaveName(),
|
'url' => $uploadDir . $splInfo->getSaveName(),
|
||||||
'uploadtime' => time(),
|
'uploadtime' => time(),
|
||||||
|
'storage' => 'local',
|
||||||
'sha1' => $sha1,
|
'sha1' => $sha1,
|
||||||
);
|
);
|
||||||
model("attachment")->create(array_filter($params));
|
model("attachment")->create(array_filter($params));
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,12 @@ class Attachment extends Backend
|
||||||
->order($sort, $order)
|
->order($sort, $order)
|
||||||
->limit($offset, $limit)
|
->limit($offset, $limit)
|
||||||
->select();
|
->select();
|
||||||
|
$cdnurl = preg_replace("/\/(\w+)\.php$/i", '', $this->request->root());
|
||||||
|
foreach ($list as $k => &$v)
|
||||||
|
{
|
||||||
|
$v['fullurl'] = ($v['storage'] == 'local' ? $cdnurl : $this->view->config['upload']['cdnurl']) . $v['url'];
|
||||||
|
}
|
||||||
|
unset($v);
|
||||||
$result = array("total" => $total, "rows" => $list);
|
$result = array("total" => $total, "rows" => $list);
|
||||||
|
|
||||||
return json($result);
|
return json($result);
|
||||||
|
|
|
||||||
|
|
@ -27,11 +27,13 @@ class Profile extends Backend
|
||||||
|
|
||||||
$total = $model
|
$total = $model
|
||||||
->where($where)
|
->where($where)
|
||||||
|
->where('admin_id', $this->auth->id)
|
||||||
->order($sort, $order)
|
->order($sort, $order)
|
||||||
->count();
|
->count();
|
||||||
|
|
||||||
$list = $model
|
$list = $model
|
||||||
->where($where)
|
->where($where)
|
||||||
|
->where('admin_id', $this->auth->id)
|
||||||
->order($sort, $order)
|
->order($sort, $order)
|
||||||
->limit($offset, $limit)
|
->limit($offset, $limit)
|
||||||
->select();
|
->select();
|
||||||
|
|
|
||||||
|
|
@ -10,5 +10,6 @@ return [
|
||||||
'Mimetype' => 'mime类型',
|
'Mimetype' => 'mime类型',
|
||||||
'Extparam' => '透传数据',
|
'Extparam' => '透传数据',
|
||||||
'Createtime' => '创建日期',
|
'Createtime' => '创建日期',
|
||||||
'Uploadtime' => '上传时间'
|
'Uploadtime' => '上传时间',
|
||||||
|
'Storage' => '存储引擎'
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ class AdminLog extends Model
|
||||||
$content = request()->param();
|
$content = request()->param();
|
||||||
foreach ($content as $k => $v)
|
foreach ($content as $k => $v)
|
||||||
{
|
{
|
||||||
if (is_string($v) && strlen($v) > 200)
|
if (is_string($v) && strlen($v) > 200 || stripos($k, 'password') !== false)
|
||||||
{
|
{
|
||||||
unset($content[$k]);
|
unset($content[$k]);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<div class="tab-pane fade active in" id="one">
|
<div class="tab-pane fade active in" id="one">
|
||||||
<div class="widget-body no-padding">
|
<div class="widget-body no-padding">
|
||||||
<div id="toolbar" class="toolbar">
|
<div id="toolbar" class="toolbar">
|
||||||
{:build_toolbar('delete')}
|
{:build_toolbar('refresh,delete')}
|
||||||
<div class="dropdown btn-group">
|
<div class="dropdown btn-group">
|
||||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> <?= __('More') ?></a>
|
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> <?= __('More') ?></a>
|
||||||
<ul class="dropdown-menu text-left" role="menu">
|
<ul class="dropdown-menu text-left" role="menu">
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<div class="tab-pane fade active in" id="one">
|
<div class="tab-pane fade active in" id="one">
|
||||||
<div class="widget-body no-padding">
|
<div class="widget-body no-padding">
|
||||||
<div id="toolbar" class="toolbar">
|
<div id="toolbar" class="toolbar">
|
||||||
{:build_toolbar('delete')}
|
{:build_toolbar('refresh,delete')}
|
||||||
</div>
|
</div>
|
||||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<div class="tab-pane fade active in" id="one">
|
<div class="tab-pane fade active in" id="one">
|
||||||
<div class="widget-body no-padding">
|
<div class="widget-body no-padding">
|
||||||
<div id="toolbar" class="toolbar">
|
<div id="toolbar" class="toolbar">
|
||||||
{:build_toolbar('delete')}
|
{:build_toolbar('refresh,delete')}
|
||||||
</div>
|
</div>
|
||||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="c-upyun" class="control-label col-xs-12 col-sm-2">{:__('Upload')}:</label>
|
<label for="c-upyun" class="control-label col-xs-12 col-sm-2">{:__('Upload')}:</label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
<input type="text" name="row[upyun]" id="c-upyun" class="form-control" cols="60" />
|
<input type="text" name="row[upyun]" id="c-upyun" class="form-control" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="c-local" class="control-label col-xs-12 col-sm-2">{:__('Upload')}:</label>
|
<label for="c-local" class="control-label col-xs-12 col-sm-2">{:__('Upload')}:</label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
<input type="text" name="row[local]" id="c-local" class="form-control" cols="60" />
|
<input type="text" name="row[local]" id="c-local" class="form-control" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -30,7 +30,13 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="c-local" class="control-label col-xs-12 col-sm-2">{:__('Upload by summernote')}:</label>
|
<label for="c-local" class="control-label col-xs-12 col-sm-2">{:__('Upload by summernote')}:</label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
<textarea name="row[summernote]" id="c-summernote" cols="30" rows="5" class="summernote"></textarea>
|
<textarea name="row[summernote]" id="c-summernote" cols="60" rows="5" class="summernote"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group hidden layer-footer">
|
||||||
|
<div class="col-xs-2"></div>
|
||||||
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,12 @@
|
||||||
<input type="datetime" name="row[uploadtime]" value="{$row.uploadtime|datetime}" id="c-uploadtime" class="form-control datetimepicker" />
|
<input type="datetime" name="row[uploadtime]" value="{$row.uploadtime|datetime}" id="c-uploadtime" class="form-control datetimepicker" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-storage" class="control-label col-xs-12 col-sm-2">{:__('Storage')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
<input type="text" name="row[storage]" value="{$row.storage}" id="c-storage" class="form-control" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="form-group hide layer-footer">
|
<div class="form-group hide layer-footer">
|
||||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,8 @@ class Upyun extends Frontend
|
||||||
'mimetype' => $this->request->param("mimetype"),
|
'mimetype' => $this->request->param("mimetype"),
|
||||||
'extparam' => $extparam,
|
'extparam' => $extparam,
|
||||||
'url' => $url,
|
'url' => $url,
|
||||||
'uploadtime' => $time
|
'uploadtime' => $time,
|
||||||
|
'storage' => 'upyun'
|
||||||
);
|
);
|
||||||
model("attachment")->create(array_filter($params));
|
model("attachment")->create(array_filter($params));
|
||||||
echo "success";
|
echo "success";
|
||||||
|
|
|
||||||
|
|
@ -106,9 +106,8 @@ body {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
.user-panel > .image img {
|
.user-panel > .image img {
|
||||||
width: 100%;
|
width: 45px;
|
||||||
max-width: 45px;
|
height: 45px;
|
||||||
max-height: 45px;
|
|
||||||
}
|
}
|
||||||
/*panel扩展描述样式*/
|
/*panel扩展描述样式*/
|
||||||
.panel-intro {
|
.panel-intro {
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -62,6 +62,10 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'lang', 'moment'], function ($
|
||||||
}
|
}
|
||||||
return url;
|
return url;
|
||||||
},
|
},
|
||||||
|
//获取修复后可访问的cdn链接
|
||||||
|
cdnurl: function (url) {
|
||||||
|
return /^(?:[a-z]+:)?\/\//i.test(url) ? url : Config.upload.cdnurl + url;
|
||||||
|
},
|
||||||
//查询Url参数
|
//查询Url参数
|
||||||
query: function (name, url) {
|
query: function (name, url) {
|
||||||
if (!url) {
|
if (!url) {
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ define(['jquery', 'bootstrap', 'backend', 'form', 'table'], function ($, undefin
|
||||||
{field: 'imagewidth', title: __('Imagewidth')},
|
{field: 'imagewidth', title: __('Imagewidth')},
|
||||||
{field: 'imageheight', title: __('Imageheight')},
|
{field: 'imageheight', title: __('Imageheight')},
|
||||||
{field: 'imagetype', title: __('Imagetype')},
|
{field: 'imagetype', title: __('Imagetype')},
|
||||||
{field: 'imageframes', title: __('Imageframes')},
|
{field: 'storage', title: __('Storage')},
|
||||||
{field: 'filesize', title: __('Filesize')},
|
{field: 'filesize', title: __('Filesize')},
|
||||||
{field: 'mimetype', title: __('Mimetype')},
|
{field: 'mimetype', title: __('Mimetype')},
|
||||||
{field: 'createtime', title: __('Createtime'), formatter: Table.api.formatter.datetime},
|
{field: 'createtime', title: __('Createtime'), formatter: Table.api.formatter.datetime},
|
||||||
|
|
@ -112,18 +112,14 @@ define(['jquery', 'bootstrap', 'backend', 'form', 'table'], function ($, undefin
|
||||||
formatter: {
|
formatter: {
|
||||||
thumb: function (value, row, index) {
|
thumb: function (value, row, index) {
|
||||||
if (row.mimetype.indexOf("image") > -1) {
|
if (row.mimetype.indexOf("image") > -1) {
|
||||||
var reg = /ajax\/upload$/;
|
var style = row.storage == 'upyun' ? '!/fwfh/120x90' : '';
|
||||||
if (reg.test(Config.upload.uploadurl)) {
|
return '<a href="' + row.fullurl + '" target="_blank"><img src="' + row.fullurl + style + '" alt="" style="max-height:90px;max-width:120px"></a>';
|
||||||
return '<a href="' + Config.upload.cdnurl + value + '" target="_blank"><img src="' + Config.upload.cdnurl + value + '" alt="" style="max-height:90px;max-width:120px"></a>';
|
|
||||||
} else {
|
} else {
|
||||||
return '<a href="' + Config.upload.cdnurl + value + '" target="_blank"><img src="' + Config.upload.cdnurl + value + '!/fwfh/50x50" alt=""></a>';
|
return '<a href="' + row.fullurl + '" target="_blank">' + __('None') + '</a>';
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return '无';
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
url: function (value, row, index) {
|
url: function (value, row, index) {
|
||||||
return '<a href="' + Config.upload.cdnurl + value + '" target="_blank" class="label bg-green">' + value + '</a>';
|
return '<a href="' + Backend.api.cdnurl(value) + '" target="_blank" class="label bg-green">' + value + '</a>';
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,12 +39,12 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'upload'], function (
|
||||||
|
|
||||||
Form.api.bindevent($("#update-form"), null, function () {
|
Form.api.bindevent($("#update-form"), null, function () {
|
||||||
$("input[name='row[password]']").val('');
|
$("input[name='row[password]']").val('');
|
||||||
var url = Config.upload.cdnurl + $("#c-avatar").val();
|
var url = Backend.api.cdnurl($("#c-avatar").val());
|
||||||
top.window.$(".user-panel .image img,.user-menu > a > img,.user-header > img").prop("src", url);
|
top.window.$(".user-panel .image img,.user-menu > a > img,.user-header > img").prop("src", url);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
Upload.api.custom.changeavatar = function (response) {
|
Upload.api.custom.changeavatar = function (response) {
|
||||||
var url = Config.upload.cdnurl + response.url;
|
var url = Backend.api.cdnurl(response.url);
|
||||||
$(".profile-user-img").prop("src", url);
|
$(".profile-user-img").prop("src", url);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -204,7 +204,7 @@ define(['jquery', 'bootstrap', 'backend', 'addtabs', 'adminlte', 'form'], functi
|
||||||
|
|
||||||
$("body").addClass(cls);
|
$("body").addClass(cls);
|
||||||
store('skin', cls);
|
store('skin', cls);
|
||||||
var cssfile = Config.upload.cdnurl + "/assets/css/skins/" + cls + ".css";
|
var cssfile = Backend.api.cdnurl("/assets/css/skins/" + cls + ".css");
|
||||||
$('head').append('<link rel="stylesheet" href="' + cssfile + '" type="text/css" />');
|
$('head').append('<link rel="stylesheet" href="' + cssfile + '" type="text/css" />');
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -6479,6 +6479,10 @@ define('backend',['jquery', 'bootstrap', 'toastr', 'layer', 'lang', 'moment'], f
|
||||||
}
|
}
|
||||||
return url;
|
return url;
|
||||||
},
|
},
|
||||||
|
//获取修复后可访问的cdn链接
|
||||||
|
cdnurl: function (url) {
|
||||||
|
return /^(?:[a-z]+:)?\/\//i.test(url) ? url : Config.upload.cdnurl + url;
|
||||||
|
},
|
||||||
//查询Url参数
|
//查询Url参数
|
||||||
query: function (name, url) {
|
query: function (name, url) {
|
||||||
if (!url) {
|
if (!url) {
|
||||||
|
|
@ -7852,7 +7856,7 @@ define('table',['jquery', 'bootstrap', 'backend', 'toastr', 'moment', 'bootstrap
|
||||||
return '<i class="' + value + '"></i> ' + value;
|
return '<i class="' + value + '"></i> ' + value;
|
||||||
},
|
},
|
||||||
image: function (value, row, index) {
|
image: function (value, row, index) {
|
||||||
return '<img class="img-rounded img-sm" src="' + (value.indexOf("http") === 0 ? '' : Config.upload.cdnurl) + value + '" />';
|
return '<img class="img-rounded img-sm" src="' + Backend.api.cdnurl(value) + '" />';
|
||||||
},
|
},
|
||||||
status: function (value, row, index, custom) {
|
status: function (value, row, index, custom) {
|
||||||
//颜色状态数组,可使用red/yellow/aqua/blue/navy/teal/olive/lime/fuchsia/purple/maroon
|
//颜色状态数组,可使用red/yellow/aqua/blue/navy/teal/olive/lime/fuchsia/purple/maroon
|
||||||
|
|
@ -8492,7 +8496,7 @@ define('upload',['jquery', 'bootstrap', 'backend', 'plupload', 'dragsort', 'temp
|
||||||
if (!j) {
|
if (!j) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
var html = Template.render(Upload.config.previewtpl, {url: j, fullurl: Config.upload.cdnurl + j});
|
var html = Template.render(Upload.config.previewtpl, {url: j, fullurl: Backend.api.cdnurl(j)});
|
||||||
$("#" + preview_id).append(html);
|
$("#" + preview_id).append(html);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
@ -11078,7 +11082,7 @@ define('form',['jquery', 'bootstrap', 'backend', 'toastr', 'upload', 'validator'
|
||||||
//依次上传图片
|
//依次上传图片
|
||||||
for (var i = 0; i < files.length; i++) {
|
for (var i = 0; i < files.length; i++) {
|
||||||
Upload.api.send(files[i], function (data) {
|
Upload.api.send(files[i], function (data) {
|
||||||
var url = Config.upload.cdnurl + data.url;
|
var url = Backend.api.cdnurl(data.url);
|
||||||
$(that).summernote("insertImage", url, 'filename');
|
$(that).summernote("insertImage", url, 'filename');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -219,7 +219,7 @@ define(['jquery', 'bootstrap', 'backend', 'toastr', 'upload', 'validator'], func
|
||||||
//依次上传图片
|
//依次上传图片
|
||||||
for (var i = 0; i < files.length; i++) {
|
for (var i = 0; i < files.length; i++) {
|
||||||
Upload.api.send(files[i], function (data) {
|
Upload.api.send(files[i], function (data) {
|
||||||
var url = Config.upload.cdnurl + data.url;
|
var url = Backend.api.cdnurl(data.url);
|
||||||
$(that).summernote("insertImage", url, 'filename');
|
$(that).summernote("insertImage", url, 'filename');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -272,7 +272,7 @@ define(['jquery', 'bootstrap', 'backend', 'toastr', 'moment', 'bootstrap-table',
|
||||||
return '<i class="' + value + '"></i> ' + value;
|
return '<i class="' + value + '"></i> ' + value;
|
||||||
},
|
},
|
||||||
image: function (value, row, index) {
|
image: function (value, row, index) {
|
||||||
return '<img class="img-rounded img-sm" src="' + (value.indexOf("http") === 0 ? '' : Config.upload.cdnurl) + value + '" />';
|
return '<img class="img-rounded img-sm" src="' + Backend.api.cdnurl(value) + '" />';
|
||||||
},
|
},
|
||||||
status: function (value, row, index, custom) {
|
status: function (value, row, index, custom) {
|
||||||
//颜色状态数组,可使用red/yellow/aqua/blue/navy/teal/olive/lime/fuchsia/purple/maroon
|
//颜色状态数组,可使用red/yellow/aqua/blue/navy/teal/olive/lime/fuchsia/purple/maroon
|
||||||
|
|
|
||||||
|
|
@ -134,7 +134,7 @@ define(['jquery', 'bootstrap', 'backend', 'plupload', 'dragsort', 'template'], f
|
||||||
if (!j) {
|
if (!j) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
var html = Template.render(Upload.config.previewtpl, {url: j, fullurl: Config.upload.cdnurl + j});
|
var html = Template.render(Upload.config.previewtpl, {url: j, fullurl: Backend.api.cdnurl(j)});
|
||||||
$("#" + preview_id).append(html);
|
$("#" + preview_id).append(html);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -140,9 +140,8 @@ body {
|
||||||
}
|
}
|
||||||
|
|
||||||
.user-panel > .image img{
|
.user-panel > .image img{
|
||||||
width:100%;
|
width:45px;
|
||||||
max-width:45px;
|
height:45px;
|
||||||
max-height:45px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*panel扩展描述样式*/
|
/*panel扩展描述样式*/
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue