mirror of https://gitee.com/karson/fastadmin.git
新增安装脚本自动创建数据库
更新左侧菜单没按权限显示的BUG 更新后台语言包 更新JS中错误提示调用字段不正确的BUG 提示方法统一都采用Toastr来提示pull/279748/MERGE
parent
41075e2d34
commit
368e95430e
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
namespace app\admin\command;
|
||||
|
||||
use PDO;
|
||||
use think\Config;
|
||||
use think\console\Command;
|
||||
use think\console\Input;
|
||||
use think\console\input\Option;
|
||||
|
|
@ -36,6 +38,12 @@ class Install extends Command
|
|||
|
||||
$sql = file_get_contents(__DIR__ . '/Install/fastadmin.sql');
|
||||
|
||||
// 先尝试能否自动创建数据
|
||||
$config = Config::get('database');
|
||||
$pdo = new PDO("{$config['type']}:host={$config['hostname']}", $config['username'], $config['password']);
|
||||
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
$pdo->query("CREATE DATABASE IF NOT EXISTS `{$config['database']}` CHARACTER SET utf8 COLLATE utf8_general_ci;");
|
||||
|
||||
// 查询一次SQL,判断连接是否正常
|
||||
Db::execute("SELECT 1");
|
||||
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ class Index extends Backend
|
|||
public function logout()
|
||||
{
|
||||
$this->auth->logout();
|
||||
$this->success(__('Logout success!'), 'index/login');
|
||||
$this->success(__('Logout successful'), 'index/login');
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -102,13 +102,6 @@ return [
|
|||
'Please enter your username' => '请输入你的用户名',
|
||||
'Please enter your password' => '请输入你的密码',
|
||||
'Please login first' => '请登录后操作',
|
||||
'You\'ve logged in, do not login again' => '你已经登录,无需重复登录',
|
||||
'Username or password can not be empty' => '用户名密码不能为空',
|
||||
'Username or password is incorrect' => '用户名或密码不正确',
|
||||
'Username is incorrect' => '用户名不正确',
|
||||
'Password is incorrect' => '密码不正确',
|
||||
'Login successful' => '登录成功!',
|
||||
'Verification code is incorrect' => '验证码不正确',
|
||||
'An unexpected error occurred' => '发生了一个意外错误,程序猿正在紧急处理中',
|
||||
'This page will be re-directed in %s seconds' => '页面将在 %s 秒后自动跳转',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -20,4 +20,12 @@ return [
|
|||
'Disable top menu badge' => '禁用顶部彩色小角标',
|
||||
'Disable top menu badge without left menu' => '左边菜单栏的彩色小角标不受影响',
|
||||
'Skins' => '皮肤',
|
||||
'You\'ve logged in, do not login again' => '你已经登录,无需重复登录',
|
||||
'Username or password can not be empty' => '用户名密码不能为空',
|
||||
'Username or password is incorrect' => '用户名或密码不正确',
|
||||
'Username is incorrect' => '用户名不正确',
|
||||
'Password is incorrect' => '密码不正确',
|
||||
'Login successful' => '登录成功!',
|
||||
'Logout successful' => '退出成功!',
|
||||
'Verification code is incorrect' => '验证码不正确',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -248,7 +248,6 @@ class Auth extends \fast\Auth
|
|||
|
||||
// 读取管理员当前拥有的权限节点
|
||||
$userRule = $this->getRuleList();
|
||||
|
||||
$select_id = 0;
|
||||
$dashboard = '/' . $module . '/dashboard';
|
||||
// 必须将结果集转换为数组
|
||||
|
|
@ -256,7 +255,10 @@ class Auth extends \fast\Auth
|
|||
foreach ($ruleList as $k => &$v)
|
||||
{
|
||||
if (!in_array($v['name'], $userRule))
|
||||
{
|
||||
unset($ruleList[$k]);
|
||||
continue;
|
||||
}
|
||||
$select_id = $v['name'] == $dashboard ? $v['id'] : $select_id;
|
||||
$v['url'] = $v['name'];
|
||||
$v['badge'] = isset($badgeList[$v['name']]) ? $badgeList[$v['name']] : '';
|
||||
|
|
|
|||
|
|
@ -38,6 +38,10 @@ return [
|
|||
* 可上传的文件类型
|
||||
*/
|
||||
'mimetype' => '*',
|
||||
/**
|
||||
* 是否支持批量上传
|
||||
*/
|
||||
'multiple' => true,
|
||||
/**
|
||||
* 又拍云操作员用户名
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -26,20 +26,21 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'lang', 'config'], function ($
|
|||
options = $.extend({
|
||||
type: "POST",
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
success: function (ret) {
|
||||
Backend.api.layer.close(index);
|
||||
if (data.hasOwnProperty("code")) {
|
||||
var content = data.hasOwnProperty("content") && data.content != "" ? data.content : "";
|
||||
if (data.code === 1) {
|
||||
if (ret.hasOwnProperty("code")) {
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code === 1) {
|
||||
if (typeof success == 'function') {
|
||||
var onAfterResult = success.call(undefined, content);
|
||||
var onAfterResult = success.call(undefined, data);
|
||||
if (!onAfterResult) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Toastr.success(content ? content : __('Operation completed'));
|
||||
Toastr.success(msg ? msg : __('Operation completed'));
|
||||
} else {
|
||||
Toastr.error(content ? content : __('Operation failed'));
|
||||
Toastr.error(msg ? msg : __('Operation failed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(__('Unknown data format'));
|
||||
|
|
@ -87,14 +88,23 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'lang', 'config'], function ($
|
|||
processData: false,
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
if (data.hasOwnProperty("code")) {
|
||||
var content = data.hasOwnProperty("content") && data.content != "" ? data.content : "";
|
||||
if (data.code === 1) {
|
||||
$('.summernote').summernote("insertImage", data.content, 'filename');
|
||||
success: function (ret) {
|
||||
if (ret.hasOwnProperty("code")) {
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code === 1) {
|
||||
if (typeof callback == 'function') {
|
||||
var onAfterResult = success.call(undefined, data);
|
||||
if (!onAfterResult) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if ($('.summernote').size() > 0 && data && typeof data.url !== 'undefined') {
|
||||
$('.summernote').summernote("insertImage", data.url, 'filename');
|
||||
}
|
||||
Toastr.success(__('Operation completed'));
|
||||
} else {
|
||||
Toastr.error(content ? content : __('Operation failed'));
|
||||
Toastr.error(msg ? msg : __('Operation failed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(__('Unknown data format'));
|
||||
|
|
|
|||
|
|
@ -95,10 +95,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function
|
|||
var data = get_children($("#treeview").jstree('get_json'));
|
||||
Backend.api.ajax({url: "auth/rule/rebuild", data: {step: 2, data: data}}, function (content) {
|
||||
Backend.api.layer.close(index);
|
||||
Backend.api.success(function () {
|
||||
//刷新页面
|
||||
top.location.reload();
|
||||
});
|
||||
top.location.reload();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
url: 'ajax/clearcache'
|
||||
}, function (ret) {
|
||||
Layer.closeAll();
|
||||
Backend.api.success();
|
||||
Toastr.success(__('Operation completed'));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'sortable'], function
|
|||
$.post("wechat/menu/edit", {menu: JSON.stringify(getMenuList())}, function (data) {
|
||||
if (data['code'] == 1) {
|
||||
} else {
|
||||
Backend.api.error();
|
||||
Toastr.error(__('Operation failed'));
|
||||
}
|
||||
}, 'json');
|
||||
};
|
||||
|
|
@ -253,11 +253,13 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'sortable'], function
|
|||
updateChangeMenu();
|
||||
});
|
||||
$(document).on('click', "#menuSyn", function () {
|
||||
$.post("wechat/menu/sync", {}, function (data) {
|
||||
if (data['code'] == 1) {
|
||||
$.post("wechat/menu/sync", {}, function (ret) {
|
||||
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code == 1) {
|
||||
Backend.api.toastr.success('菜单同步更新成功,生效时间看微信官网说明,或者你重新关注微信号!');
|
||||
} else {
|
||||
Backend.api.toastr.error(data['content']);
|
||||
Backend.api.toastr.error(msg ? msg : __('Operation failed'));
|
||||
}
|
||||
}, 'json');
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
define(['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function ($, undefined, Toastr, Layer, Config) {
|
||||
define(['jquery', 'bootstrap', 'toastr', 'layer', 'lang', 'config'], function ($, undefined, Toastr, Layer, Lang, Config) {
|
||||
var Frontend = {
|
||||
config: {
|
||||
//toastr默认配置
|
||||
|
|
@ -26,20 +26,21 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function ($, undefi
|
|||
options = $.extend({
|
||||
type: "POST",
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
success: function (ret) {
|
||||
Frontend.api.layer.close(index);
|
||||
if (data.hasOwnProperty("code")) {
|
||||
var content = data.hasOwnProperty("content") && data.content != "" ? data.content : "";
|
||||
if (data.code == 0) {
|
||||
if (ret.hasOwnProperty("code")) {
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code === 1) {
|
||||
if (typeof success == 'function') {
|
||||
var onAfterResult = success.call(undefined, content);
|
||||
var onAfterResult = success.call(undefined, data);
|
||||
if (!onAfterResult) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Toastr.success(content ? content : __('Operation completed'));
|
||||
Toastr.success(msg ? msg : __('Operation completed'));
|
||||
} else {
|
||||
Toastr.error(content ? content : __('Operation failed'));
|
||||
Toastr.error(msg ? msg : __('Operation failed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(__('Unknown data format'));
|
||||
|
|
@ -56,11 +57,25 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function ($, undefi
|
|||
if (url.substr(0, 1) !== "/") {
|
||||
var r = new RegExp('^(?:[a-z]+:)?//', 'i');
|
||||
if (!r.test(url)) {
|
||||
url = (Config.moduleurl) + "/" + url;
|
||||
url = Config.moduleurl + "/" + url;
|
||||
}
|
||||
}
|
||||
return url;
|
||||
},
|
||||
//查询Url参数
|
||||
query: function (name, url) {
|
||||
if (!url) {
|
||||
url = window.location.href;
|
||||
}
|
||||
name = name.replace(/[\[\]]/g, "\\$&");
|
||||
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
|
||||
results = regex.exec(url);
|
||||
if (!results)
|
||||
return null;
|
||||
if (!results[2])
|
||||
return '';
|
||||
return decodeURIComponent(results[2].replace(/\+/g, " "));
|
||||
},
|
||||
//上传文件
|
||||
upload: function (file, callback) {
|
||||
var data = new FormData();
|
||||
|
|
@ -73,14 +88,23 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function ($, undefi
|
|||
processData: false,
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
if (data.hasOwnProperty("code")) {
|
||||
var content = data.hasOwnProperty("content") && data.content != "" ? data.content : "";
|
||||
if (data.code == 0) {
|
||||
$('.summernote').summernote("insertImage", data.content, 'filename');
|
||||
success: function (ret) {
|
||||
if (ret.hasOwnProperty("code")) {
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code === 1) {
|
||||
if (typeof callback == 'function') {
|
||||
var onAfterResult = success.call(undefined, data);
|
||||
if (!onAfterResult) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if ($('.summernote').size() > 0 && data && typeof data.url !== 'undefined') {
|
||||
$('.summernote').summernote("insertImage", data.url, 'filename');
|
||||
}
|
||||
Toastr.success(__('Operation completed'));
|
||||
} else {
|
||||
Toastr.error(content ? content : __('Operation failed'));
|
||||
Toastr.error(msg ? msg : __('Operation failed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(__('Unknown data format'));
|
||||
|
|
@ -152,7 +176,7 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function ($, undefi
|
|||
}
|
||||
return Frontend.api.layer.msg(__('Operation completed'), $.extend({
|
||||
offset: 0, icon: 1
|
||||
}, type ? {} : options));
|
||||
}, type ? {} : options), callback);
|
||||
},
|
||||
error: function (options, callback) {
|
||||
var type = typeof options === 'function';
|
||||
|
|
@ -161,7 +185,7 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function ($, undefi
|
|||
}
|
||||
return Frontend.api.layer.msg(__('Operation failed'), $.extend({
|
||||
offset: 0, icon: 2
|
||||
}, type ? {} : options));
|
||||
}, type ? {} : options), callback);
|
||||
},
|
||||
toastr: Toastr,
|
||||
layer: Layer
|
||||
|
|
@ -170,7 +194,26 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function ($, undefi
|
|||
var args = arguments,
|
||||
string = args[0],
|
||||
i = 1;
|
||||
string = Lang[string] != undefined ? Lang[string] : string;
|
||||
string = string.toLowerCase();
|
||||
//string = typeof Lang[string] != 'undefined' ? Lang[string] : string;
|
||||
if (typeof Lang[string] != 'undefined') {
|
||||
if (typeof Lang[string] == 'object')
|
||||
return Lang[string];
|
||||
string = Lang[string];
|
||||
} else if (string.indexOf('.') !== -1) {
|
||||
var arr = string.split('.');
|
||||
var current = Lang[arr[0]];
|
||||
for (var i = 1; i < arr.length; i++) {
|
||||
current = typeof current[arr[i]] != 'undefined' ? current[arr[i]] : '';
|
||||
if (typeof current != 'object')
|
||||
break;
|
||||
}
|
||||
if (typeof current == 'object')
|
||||
return current;
|
||||
string = current;
|
||||
} else {
|
||||
string = args[0];
|
||||
}
|
||||
return string.replace(/%((%)|s|d)/g, function (m) {
|
||||
// m is the matched format, e.g. %s, %d
|
||||
var val = null;
|
||||
|
|
@ -199,7 +242,9 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function ($, undefi
|
|||
window.Toastr = Toastr;
|
||||
//将语言方法暴露到全局中去
|
||||
window.__ = Frontend.lang;
|
||||
//将Frontend渲染至全局,以便于在子框架中调用
|
||||
window.Frontend = Frontend;
|
||||
//Toastr定义
|
||||
Toastr.options = Frontend.config.toastr;
|
||||
return Frontend;
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1939,20 +1939,21 @@ define('backend',['jquery', 'bootstrap', 'toastr', 'layer', 'lang', 'config'], f
|
|||
options = $.extend({
|
||||
type: "POST",
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
success: function (ret) {
|
||||
Backend.api.layer.close(index);
|
||||
if (data.hasOwnProperty("code")) {
|
||||
var content = data.hasOwnProperty("content") && data.content != "" ? data.content : "";
|
||||
if (data.code === 1) {
|
||||
if (ret.hasOwnProperty("code")) {
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code === 1) {
|
||||
if (typeof success == 'function') {
|
||||
var onAfterResult = success.call(undefined, content);
|
||||
var onAfterResult = success.call(undefined, data);
|
||||
if (!onAfterResult) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Toastr.success(content ? content : __('Operation completed'));
|
||||
Toastr.success(msg ? msg : __('Operation completed'));
|
||||
} else {
|
||||
Toastr.error(content ? content : __('Operation failed'));
|
||||
Toastr.error(msg ? msg : __('Operation failed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(__('Unknown data format'));
|
||||
|
|
@ -2000,14 +2001,23 @@ define('backend',['jquery', 'bootstrap', 'toastr', 'layer', 'lang', 'config'], f
|
|||
processData: false,
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
if (data.hasOwnProperty("code")) {
|
||||
var content = data.hasOwnProperty("content") && data.content != "" ? data.content : "";
|
||||
if (data.code === 1) {
|
||||
$('.summernote').summernote("insertImage", data.content, 'filename');
|
||||
success: function (ret) {
|
||||
if (ret.hasOwnProperty("code")) {
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code === 1) {
|
||||
if (typeof callback == 'function') {
|
||||
var onAfterResult = success.call(undefined, data);
|
||||
if (!onAfterResult) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if ($('.summernote').size() > 0 && data && typeof data.url !== 'undefined') {
|
||||
$('.summernote').summernote("insertImage", data.url, 'filename');
|
||||
}
|
||||
Toastr.success(__('Operation completed'));
|
||||
} else {
|
||||
Toastr.error(content ? content : __('Operation failed'));
|
||||
Toastr.error(msg ? msg : __('Operation failed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(__('Unknown data format'));
|
||||
|
|
@ -7381,7 +7391,7 @@ define('table',['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'moment',
|
|||
table: table.bootstrapTable('getOptions').extend.table
|
||||
}
|
||||
};
|
||||
Backend.api.ajax(options, function (content) {
|
||||
Backend.api.ajax(options, function (data) {
|
||||
Toastr.success(__('Operation completed'));
|
||||
table.bootstrapTable('refresh');
|
||||
});
|
||||
|
|
@ -7400,7 +7410,7 @@ define('table',['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'moment',
|
|||
var url = action == "del" ? options.extend.del_url : options.extend.multi_url;
|
||||
url = url + "/ids/" + ($.isArray(ids) ? ids.join(",") : ids);
|
||||
var options = {url: url, data: {action: action, ids: ids, params: element ? $(element).data("params") : ''}};
|
||||
Backend.api.ajax(options, function (content) {
|
||||
Backend.api.ajax(options, function (data) {
|
||||
Toastr.success(__('Operation completed'));
|
||||
table.bootstrapTable('refresh');
|
||||
});
|
||||
|
|
@ -7438,6 +7448,8 @@ define('table',['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'moment',
|
|||
// 单元格数据格式化
|
||||
formatter: {
|
||||
icon: function (value, row, index) {
|
||||
if (!value)
|
||||
return '';
|
||||
value = value.indexOf(" ") > -1 ? value : "fa fa-" + value;
|
||||
//渲染fontawesome图标
|
||||
return '<i class="' + value + '"></i> ' + value;
|
||||
|
|
@ -7564,6 +7576,7 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
|
|||
var maxsize = $(this).data("maxsize");
|
||||
var mimetype = $(this).data("mimetype");
|
||||
var multipart = $(this).data("multipart");
|
||||
var multiple = $(this).data("multiple");
|
||||
//上传URL
|
||||
url = url ? url : Config.upload.uploadurl;
|
||||
//最大可上传
|
||||
|
|
@ -7572,10 +7585,13 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
|
|||
mimetype = mimetype ? mimetype : Config.upload.mimetype;
|
||||
//请求的表单参数
|
||||
multipart = multipart ? multipart : Config.upload.multipart;
|
||||
//是否支持批量上传
|
||||
multiple = multiple ? multiple : Config.upload.multiple;
|
||||
//生成Plupload实例
|
||||
Upload.list[id] = new Plupload.Uploader({
|
||||
runtimes: 'html5,flash,silverlight,html4',
|
||||
multi_selection: false, //是否允许多选批量上传
|
||||
browse_button: id, // you can pass an id...
|
||||
multi_selection: multiple, //是否允许多选批量上传
|
||||
browse_button: id, // 浏览按钮的ID
|
||||
container: $(this).parent().get(0), //取按钮的上级元素
|
||||
flash_swf_url: '/assets/libs/plupload/js/Moxie.swf',
|
||||
silverlight_xap_url: '/assets/libs/plupload/js/Moxie.xap',
|
||||
|
|
@ -7612,13 +7628,13 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
|
|||
//document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML += (' [Url]: ' + '<a href="' + url + '" target="_blank">' + url + '</a>');
|
||||
//这里建议不修改
|
||||
try {
|
||||
var data = JSON.parse(info.response);
|
||||
if (data.hasOwnProperty('code')) {
|
||||
data.code = data.code == 200 ? 0 : data.code;
|
||||
if (data.hasOwnProperty("url")) {
|
||||
data.content = data.url;
|
||||
}
|
||||
$("input[data-plupload-id='" + id + "-text']").val(data.content);
|
||||
var ret = JSON.parse(info.response);
|
||||
if (ret.hasOwnProperty('code')) {
|
||||
ret.data = ret.code == 200 ? ret : ret.data;
|
||||
ret.code = ret.code == 200 ? 1 : ret.code;
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
$("input[data-plupload-id='" + id + "-text']").val(data.url);
|
||||
var afterUpload = $("#" + id).data("after-upload");
|
||||
if (afterUpload && typeof Upload.api.custom[afterUpload] == 'function') {
|
||||
Upload.api.custom[afterUpload].call(info, id, data);
|
||||
|
|
@ -7656,22 +7672,21 @@ define('upload',['jquery', 'bootstrap', 'backend', 'config', 'plupload'], functi
|
|||
processData: false,
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
if (data.hasOwnProperty("code")) {
|
||||
data.code = data.code == 200 ? 1 : data.code;
|
||||
if (data.hasOwnProperty("url")) {
|
||||
data.content = data.url;
|
||||
}
|
||||
var content = data.hasOwnProperty("content") && data.content != "" ? data.content : "";
|
||||
if (data.code === 1) {
|
||||
success: function (ret) {
|
||||
if (ret.hasOwnProperty("code")) {
|
||||
ret.data = ret.code == 200 ? ret : ret.data;
|
||||
ret.code = ret.code == 200 ? 1 : ret.code;
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code === 1) {
|
||||
// 如果回调存在,则直接调用回调
|
||||
if (typeof callback == 'function') {
|
||||
callback.call(this, data);
|
||||
} else {
|
||||
Toastr.success(content ? content : __('Operation completed'));
|
||||
Toastr.success(msg ? msg : __('Operation completed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(content ? content : __('Operation failed'));
|
||||
Toastr.error(msg ? msg : __('Operation failed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(__('Unknown data format'));
|
||||
|
|
@ -8251,28 +8266,29 @@ define('form',['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'upload', '
|
|||
url: url,
|
||||
data: form.serialize(),
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
if (data.hasOwnProperty("code")) {
|
||||
var content = data.hasOwnProperty("content") && data.content != "" ? data.content : "";
|
||||
if (data.code === 1) {
|
||||
success: function (ret) {
|
||||
if (ret.hasOwnProperty("code")) {
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code === 1) {
|
||||
$('.form-group', form).removeClass('has-feedback has-success has-error');
|
||||
//成功提交后事件
|
||||
var afterSubmit = form.data("after-submit");
|
||||
//元素绑定函数
|
||||
if (afterSubmit && typeof Form.api.custom[afterSubmit] == 'function') {
|
||||
if (!Form.api.custom[afterSubmit].call(form, content)) {
|
||||
if (!Form.api.custom[afterSubmit].call(form, data)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//自定义函数
|
||||
if (typeof onAfterSubmit == 'function') {
|
||||
if (!onAfterSubmit.call(form, content)) {
|
||||
if (!onAfterSubmit.call(form, data)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Toastr.success(content ? content : __('Operation completed'));
|
||||
Toastr.success(msg ? msg : __('Operation completed'));
|
||||
} else {
|
||||
Toastr.error(content ? content : __('Operation failed'));
|
||||
Toastr.error(msg ? msg : __('Operation failed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(__('Unknown data format'));
|
||||
|
|
@ -8289,19 +8305,16 @@ define('form',['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'upload', '
|
|||
if (e.isDefaultPrevented()) {
|
||||
//验证不通过
|
||||
Toastr.error("验证失败,请检查表单输入是否正确");
|
||||
//Backend.api.error();
|
||||
} else {
|
||||
//验证通过提交表单
|
||||
Form.api.submit(form, onBeforeSubmit, function (content) {
|
||||
Form.api.submit(form, onBeforeSubmit, function (data) {
|
||||
if (typeof onAfterSubmit == 'function') {
|
||||
if (!onAfterSubmit.call(form, content)) {
|
||||
if (!onAfterSubmit.call(form, data)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//提示及关闭当前窗口
|
||||
parent.Layer.msg(__('Operation completed'), {
|
||||
offset: 0, icon: 1
|
||||
});
|
||||
parent.Toastr.success(__('Operation completed'));
|
||||
parent.$(".btn-refresh").trigger("click");
|
||||
var index = parent.Layer.getFrameIndex(window.name);
|
||||
parent.Layer.close(index);
|
||||
|
|
@ -8336,8 +8349,8 @@ define('form',['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'upload', '
|
|||
remote: {
|
||||
url: '/ajax/typeahead?search=%QUERY&field=' + $(input).attr("name"),
|
||||
wildcard: '%QUERY',
|
||||
transform: function (data) {
|
||||
return data.content.searchlist;
|
||||
transform: function (ret) {
|
||||
return ret.data.searchlist;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -8437,7 +8450,7 @@ define('form',['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'upload', '
|
|||
//依次上传图片
|
||||
for (var i = 0; i < files.length; i++) {
|
||||
Upload.api.send(files[i], function (data) {
|
||||
var url = Config.upload.cdnurl + data.content;
|
||||
var url = Config.upload.cdnurl + data.url;
|
||||
$(that).summernote("insertImage", url, 'filename');
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,28 +29,29 @@ define(['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'upload', 'bootstr
|
|||
url: url,
|
||||
data: form.serialize(),
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
if (data.hasOwnProperty("code")) {
|
||||
var content = data.hasOwnProperty("content") && data.content != "" ? data.content : "";
|
||||
if (data.code === 1) {
|
||||
success: function (ret) {
|
||||
if (ret.hasOwnProperty("code")) {
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code === 1) {
|
||||
$('.form-group', form).removeClass('has-feedback has-success has-error');
|
||||
//成功提交后事件
|
||||
var afterSubmit = form.data("after-submit");
|
||||
//元素绑定函数
|
||||
if (afterSubmit && typeof Form.api.custom[afterSubmit] == 'function') {
|
||||
if (!Form.api.custom[afterSubmit].call(form, content)) {
|
||||
if (!Form.api.custom[afterSubmit].call(form, data)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//自定义函数
|
||||
if (typeof onAfterSubmit == 'function') {
|
||||
if (!onAfterSubmit.call(form, content)) {
|
||||
if (!onAfterSubmit.call(form, data)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Toastr.success(content ? content : __('Operation completed'));
|
||||
Toastr.success(msg ? msg : __('Operation completed'));
|
||||
} else {
|
||||
Toastr.error(content ? content : __('Operation failed'));
|
||||
Toastr.error(msg ? msg : __('Operation failed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(__('Unknown data format'));
|
||||
|
|
@ -67,19 +68,16 @@ define(['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'upload', 'bootstr
|
|||
if (e.isDefaultPrevented()) {
|
||||
//验证不通过
|
||||
Toastr.error("验证失败,请检查表单输入是否正确");
|
||||
//Backend.api.error();
|
||||
} else {
|
||||
//验证通过提交表单
|
||||
Form.api.submit(form, onBeforeSubmit, function (content) {
|
||||
Form.api.submit(form, onBeforeSubmit, function (data) {
|
||||
if (typeof onAfterSubmit == 'function') {
|
||||
if (!onAfterSubmit.call(form, content)) {
|
||||
if (!onAfterSubmit.call(form, data)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//提示及关闭当前窗口
|
||||
parent.Layer.msg(__('Operation completed'), {
|
||||
offset: 0, icon: 1
|
||||
});
|
||||
parent.Toastr.success(__('Operation completed'));
|
||||
parent.$(".btn-refresh").trigger("click");
|
||||
var index = parent.Layer.getFrameIndex(window.name);
|
||||
parent.Layer.close(index);
|
||||
|
|
@ -114,8 +112,8 @@ define(['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'upload', 'bootstr
|
|||
remote: {
|
||||
url: '/ajax/typeahead?search=%QUERY&field=' + $(input).attr("name"),
|
||||
wildcard: '%QUERY',
|
||||
transform: function (data) {
|
||||
return data.content.searchlist;
|
||||
transform: function (ret) {
|
||||
return ret.data.searchlist;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -215,7 +213,7 @@ define(['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'upload', 'bootstr
|
|||
//依次上传图片
|
||||
for (var i = 0; i < files.length; i++) {
|
||||
Upload.api.send(files[i], function (data) {
|
||||
var url = Config.upload.cdnurl + data.content;
|
||||
var url = Config.upload.cdnurl + data.url;
|
||||
$(that).summernote("insertImage", url, 'filename');
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1912,7 +1912,7 @@ window.layui && layui.define ? (
|
|||
}
|
||||
}));
|
||||
|
||||
define('frontend',['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function ($, undefined, Toastr, Layer, Config) {
|
||||
define('frontend',['jquery', 'bootstrap', 'toastr', 'layer', 'lang', 'config'], function ($, undefined, Toastr, Layer, Lang, Config) {
|
||||
var Frontend = {
|
||||
config: {
|
||||
//toastr默认配置
|
||||
|
|
@ -1940,20 +1940,21 @@ define('frontend',['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function
|
|||
options = $.extend({
|
||||
type: "POST",
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
success: function (ret) {
|
||||
Frontend.api.layer.close(index);
|
||||
if (data.hasOwnProperty("code")) {
|
||||
var content = data.hasOwnProperty("content") && data.content != "" ? data.content : "";
|
||||
if (data.code == 0) {
|
||||
if (ret.hasOwnProperty("code")) {
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code === 1) {
|
||||
if (typeof success == 'function') {
|
||||
var onAfterResult = success.call(undefined, content);
|
||||
var onAfterResult = success.call(undefined, data);
|
||||
if (!onAfterResult) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Toastr.success(content ? content : __('Operation completed'));
|
||||
Toastr.success(msg ? msg : __('Operation completed'));
|
||||
} else {
|
||||
Toastr.error(content ? content : __('Operation failed'));
|
||||
Toastr.error(msg ? msg : __('Operation failed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(__('Unknown data format'));
|
||||
|
|
@ -1970,11 +1971,25 @@ define('frontend',['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function
|
|||
if (url.substr(0, 1) !== "/") {
|
||||
var r = new RegExp('^(?:[a-z]+:)?//', 'i');
|
||||
if (!r.test(url)) {
|
||||
url = (Config.moduleurl) + "/" + url;
|
||||
url = Config.moduleurl + "/" + url;
|
||||
}
|
||||
}
|
||||
return url;
|
||||
},
|
||||
//查询Url参数
|
||||
query: function (name, url) {
|
||||
if (!url) {
|
||||
url = window.location.href;
|
||||
}
|
||||
name = name.replace(/[\[\]]/g, "\\$&");
|
||||
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
|
||||
results = regex.exec(url);
|
||||
if (!results)
|
||||
return null;
|
||||
if (!results[2])
|
||||
return '';
|
||||
return decodeURIComponent(results[2].replace(/\+/g, " "));
|
||||
},
|
||||
//上传文件
|
||||
upload: function (file, callback) {
|
||||
var data = new FormData();
|
||||
|
|
@ -1987,14 +2002,23 @@ define('frontend',['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function
|
|||
processData: false,
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
if (data.hasOwnProperty("code")) {
|
||||
var content = data.hasOwnProperty("content") && data.content != "" ? data.content : "";
|
||||
if (data.code == 0) {
|
||||
$('.summernote').summernote("insertImage", data.content, 'filename');
|
||||
success: function (ret) {
|
||||
if (ret.hasOwnProperty("code")) {
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code === 1) {
|
||||
if (typeof callback == 'function') {
|
||||
var onAfterResult = success.call(undefined, data);
|
||||
if (!onAfterResult) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if ($('.summernote').size() > 0 && data && typeof data.url !== 'undefined') {
|
||||
$('.summernote').summernote("insertImage", data.url, 'filename');
|
||||
}
|
||||
Toastr.success(__('Operation completed'));
|
||||
} else {
|
||||
Toastr.error(content ? content : __('Operation failed'));
|
||||
Toastr.error(msg ? msg : __('Operation failed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(__('Unknown data format'));
|
||||
|
|
@ -2066,7 +2090,7 @@ define('frontend',['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function
|
|||
}
|
||||
return Frontend.api.layer.msg(__('Operation completed'), $.extend({
|
||||
offset: 0, icon: 1
|
||||
}, type ? {} : options));
|
||||
}, type ? {} : options), callback);
|
||||
},
|
||||
error: function (options, callback) {
|
||||
var type = typeof options === 'function';
|
||||
|
|
@ -2075,7 +2099,7 @@ define('frontend',['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function
|
|||
}
|
||||
return Frontend.api.layer.msg(__('Operation failed'), $.extend({
|
||||
offset: 0, icon: 2
|
||||
}, type ? {} : options));
|
||||
}, type ? {} : options), callback);
|
||||
},
|
||||
toastr: Toastr,
|
||||
layer: Layer
|
||||
|
|
@ -2084,7 +2108,26 @@ define('frontend',['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function
|
|||
var args = arguments,
|
||||
string = args[0],
|
||||
i = 1;
|
||||
string = Lang[string] != undefined ? Lang[string] : string;
|
||||
string = string.toLowerCase();
|
||||
//string = typeof Lang[string] != 'undefined' ? Lang[string] : string;
|
||||
if (typeof Lang[string] != 'undefined') {
|
||||
if (typeof Lang[string] == 'object')
|
||||
return Lang[string];
|
||||
string = Lang[string];
|
||||
} else if (string.indexOf('.') !== -1) {
|
||||
var arr = string.split('.');
|
||||
var current = Lang[arr[0]];
|
||||
for (var i = 1; i < arr.length; i++) {
|
||||
current = typeof current[arr[i]] != 'undefined' ? current[arr[i]] : '';
|
||||
if (typeof current != 'object')
|
||||
break;
|
||||
}
|
||||
if (typeof current == 'object')
|
||||
return current;
|
||||
string = current;
|
||||
} else {
|
||||
string = args[0];
|
||||
}
|
||||
return string.replace(/%((%)|s|d)/g, function (m) {
|
||||
// m is the matched format, e.g. %s, %d
|
||||
var val = null;
|
||||
|
|
@ -2113,7 +2156,10 @@ define('frontend',['jquery', 'bootstrap', 'toastr', 'layer', 'config'], function
|
|||
window.Toastr = Toastr;
|
||||
//将语言方法暴露到全局中去
|
||||
window.__ = Frontend.lang;
|
||||
//将Frontend渲染至全局,以便于在子框架中调用
|
||||
window.Frontend = Frontend;
|
||||
//Toastr定义
|
||||
Toastr.options = Frontend.config.toastr;
|
||||
return Frontend;
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -196,7 +196,7 @@ define(['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'moment', 'bootstr
|
|||
table: table.bootstrapTable('getOptions').extend.table
|
||||
}
|
||||
};
|
||||
Backend.api.ajax(options, function (content) {
|
||||
Backend.api.ajax(options, function (data) {
|
||||
Toastr.success(__('Operation completed'));
|
||||
table.bootstrapTable('refresh');
|
||||
});
|
||||
|
|
@ -215,7 +215,7 @@ define(['jquery', 'bootstrap', 'backend', 'config', 'toastr', 'moment', 'bootstr
|
|||
var url = action == "del" ? options.extend.del_url : options.extend.multi_url;
|
||||
url = url + "/ids/" + ($.isArray(ids) ? ids.join(",") : ids);
|
||||
var options = {url: url, data: {action: action, ids: ids, params: element ? $(element).data("params") : ''}};
|
||||
Backend.api.ajax(options, function (content) {
|
||||
Backend.api.ajax(options, function (data) {
|
||||
Toastr.success(__('Operation completed'));
|
||||
table.bootstrapTable('refresh');
|
||||
});
|
||||
|
|
|
|||
|
|
@ -67,19 +67,19 @@ define(['jquery', 'bootstrap', 'backend', 'config', 'plupload'], function ($, un
|
|||
//document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML += (' [Url]: ' + '<a href="' + url + '" target="_blank">' + url + '</a>');
|
||||
//这里建议不修改
|
||||
try {
|
||||
var response = JSON.parse(info.response);
|
||||
if (response.hasOwnProperty('code')) {
|
||||
response.code = response.code == 200 ? 1 : response.code;
|
||||
if (response.hasOwnProperty("url")) {
|
||||
response.data = response.url;
|
||||
}
|
||||
$("input[data-plupload-id='" + id + "-text']").val(response.data);
|
||||
var ret = JSON.parse(info.response);
|
||||
if (ret.hasOwnProperty('code')) {
|
||||
ret.data = ret.code == 200 ? ret : ret.data;
|
||||
ret.code = ret.code == 200 ? 1 : ret.code;
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
$("input[data-plupload-id='" + id + "-text']").val(data.url);
|
||||
var afterUpload = $("#" + id).data("after-upload");
|
||||
if (afterUpload && typeof Upload.api.custom[afterUpload] == 'function') {
|
||||
Upload.api.custom[afterUpload].call(info, id, response);
|
||||
Upload.api.custom[afterUpload].call(info, id, data);
|
||||
}
|
||||
if (typeof onAfterUpload == 'function') {
|
||||
onAfterUpload.call(info, id, response);
|
||||
onAfterUpload.call(info, id, data);
|
||||
}
|
||||
} else {
|
||||
Toastr.error(e.message + "(code:-2)");
|
||||
|
|
@ -111,22 +111,21 @@ define(['jquery', 'bootstrap', 'backend', 'config', 'plupload'], function ($, un
|
|||
processData: false,
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
if (data.hasOwnProperty("code")) {
|
||||
data.code = data.code == 200 ? 1 : data.code;
|
||||
if (data.hasOwnProperty("url")) {
|
||||
data.content = data.url;
|
||||
}
|
||||
var content = data.hasOwnProperty("content") && data.content != "" ? data.content : "";
|
||||
if (data.code === 1) {
|
||||
success: function (ret) {
|
||||
if (ret.hasOwnProperty("code")) {
|
||||
ret.data = ret.code == 200 ? ret : ret.data;
|
||||
ret.code = ret.code == 200 ? 1 : ret.code;
|
||||
var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : null;
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code === 1) {
|
||||
// 如果回调存在,则直接调用回调
|
||||
if (typeof callback == 'function') {
|
||||
callback.call(this, data);
|
||||
} else {
|
||||
Toastr.success(content ? content : __('Operation completed'));
|
||||
Toastr.success(msg ? msg : __('Operation completed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(content ? content : __('Operation failed'));
|
||||
Toastr.error(msg ? msg : __('Operation failed'));
|
||||
}
|
||||
} else {
|
||||
Toastr.error(__('Unknown data format'));
|
||||
|
|
|
|||
Loading…
Reference in New Issue