diff --git a/application/admin/command/Install.php b/application/admin/command/Install.php
index 85baa5e1..391b6863 100644
--- a/application/admin/command/Install.php
+++ b/application/admin/command/Install.php
@@ -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");
diff --git a/application/admin/controller/Index.php b/application/admin/controller/Index.php
index 6f222d0e..c009f88f 100644
--- a/application/admin/controller/Index.php
+++ b/application/admin/controller/Index.php
@@ -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;
}
diff --git a/application/admin/lang/zh-cn.php b/application/admin/lang/zh-cn.php
index 61d65839..3bfe0da0 100644
--- a/application/admin/lang/zh-cn.php
+++ b/application/admin/lang/zh-cn.php
@@ -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 秒后自动跳转',
];
diff --git a/application/admin/lang/zh-cn/index.php b/application/admin/lang/zh-cn/index.php
index e66770da..527d4132 100644
--- a/application/admin/lang/zh-cn/index.php
+++ b/application/admin/lang/zh-cn/index.php
@@ -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' => '验证码不正确',
];
diff --git a/application/admin/library/Auth.php b/application/admin/library/Auth.php
index 23f3940b..841447c6 100644
--- a/application/admin/library/Auth.php
+++ b/application/admin/library/Auth.php
@@ -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']] : '';
diff --git a/application/extra/upload.php b/application/extra/upload.php
index bccd53d4..421b3e3e 100644
--- a/application/extra/upload.php
+++ b/application/extra/upload.php
@@ -38,6 +38,10 @@ return [
* 可上传的文件类型
*/
'mimetype' => '*',
+ /**
+ * 是否支持批量上传
+ */
+ 'multiple' => true,
/**
* 又拍云操作员用户名
*/
diff --git a/public/assets/js/backend.js b/public/assets/js/backend.js
index 50e33e4d..9a3910c9 100755
--- a/public/assets/js/backend.js
+++ b/public/assets/js/backend.js
@@ -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'));
diff --git a/public/assets/js/backend/auth/rule.js b/public/assets/js/backend/auth/rule.js
index af5e6cfe..2ae895c6 100755
--- a/public/assets/js/backend/auth/rule.js
+++ b/public/assets/js/backend/auth/rule.js
@@ -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();
});
}
});
diff --git a/public/assets/js/backend/general/configvalue.js b/public/assets/js/backend/general/configvalue.js
index a1cbc802..abfdfe52 100755
--- a/public/assets/js/backend/general/configvalue.js
+++ b/public/assets/js/backend/general/configvalue.js
@@ -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'));
});
});
});
diff --git a/public/assets/js/backend/wechat/menu.js b/public/assets/js/backend/wechat/menu.js
index 3dd52daa..567230bc 100644
--- a/public/assets/js/backend/wechat/menu.js
+++ b/public/assets/js/backend/wechat/menu.js
@@ -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');
});
diff --git a/public/assets/js/frontend.js b/public/assets/js/frontend.js
index 1e953f49..8da1288f 100644
--- a/public/assets/js/frontend.js
+++ b/public/assets/js/frontend.js
@@ -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;
-});
\ No newline at end of file
+});
diff --git a/public/assets/js/require-backend.min.js b/public/assets/js/require-backend.min.js
index e2a3853c..ad5a7157 100644
--- a/public/assets/js/require-backend.min.js
+++ b/public/assets/js/require-backend.min.js
@@ -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 ' ' + 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]: ' + '' + url + '');
//这里建议不修改
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');
});
}
diff --git a/public/assets/js/require-form.js b/public/assets/js/require-form.js
index f673e3ca..618d137d 100755
--- a/public/assets/js/require-form.js
+++ b/public/assets/js/require-form.js
@@ -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');
});
}
diff --git a/public/assets/js/require-frontend.min.js b/public/assets/js/require-frontend.min.js
index a8b521c1..87f947aa 100644
--- a/public/assets/js/require-frontend.min.js
+++ b/public/assets/js/require-frontend.min.js
@@ -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;
});
+
diff --git a/public/assets/js/require-table.js b/public/assets/js/require-table.js
index 96da3b3d..4a1decbd 100644
--- a/public/assets/js/require-table.js
+++ b/public/assets/js/require-table.js
@@ -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');
});
diff --git a/public/assets/js/require-upload.js b/public/assets/js/require-upload.js
index e2571ea0..c5d1826a 100755
--- a/public/assets/js/require-upload.js
+++ b/public/assets/js/require-upload.js
@@ -67,19 +67,19 @@ define(['jquery', 'bootstrap', 'backend', 'config', 'plupload'], function ($, un
//document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML += (' [Url]: ' + '' + url + '');
//这里建议不修改
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'));