diff --git a/application/common.php b/application/common.php index 2eea8480..100f5488 100755 --- a/application/common.php +++ b/application/common.php @@ -7,14 +7,15 @@ if (!function_exists('__')) { /** * 获取语言变量值 * @param string $name 语言变量名 - * @param array $vars 动态变量值 + * @param array $vars 动态变量值 * @param string $lang 语言 * @return mixed */ function __($name, $vars = [], $lang = '') { - if (is_numeric($name) || !$name) + if (is_numeric($name) || !$name) { return $name; + } if (!is_array($vars)) { $vars = func_get_args(); array_shift($vars); @@ -22,32 +23,31 @@ if (!function_exists('__')) { } return \think\Lang::get($name, $vars, $lang); } - } if (!function_exists('format_bytes')) { /** * 将字节转换为可读文本 - * @param int $size 大小 + * @param int $size 大小 * @param string $delimiter 分隔符 * @return string */ function format_bytes($size, $delimiter = '') { $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB'); - for ($i = 0; $size >= 1024 && $i < 6; $i++) + for ($i = 0; $size >= 1024 && $i < 6; $i++) { $size /= 1024; + } return round($size, 2) . $delimiter . $units[$i]; } - } if (!function_exists('datetime')) { /** * 将时间戳转换为日期时间 - * @param int $time 时间戳 + * @param int $time 时间戳 * @param string $format 日期时间格式 * @return string */ @@ -56,14 +56,13 @@ if (!function_exists('datetime')) { $time = is_numeric($time) ? $time : strtotime($time); return date($format, $time); } - } if (!function_exists('human_date')) { /** * 获取语义化时间 - * @param int $time 时间 + * @param int $time 时间 * @param int $local 本地时间 * @return string */ @@ -71,27 +70,26 @@ if (!function_exists('human_date')) { { return \fast\Date::human($time, $local); } - } if (!function_exists('cdnurl')) { /** * 获取上传资源的CDN的地址 - * @param string $url 资源相对地址 + * @param string $url 资源相对地址 * @param boolean $domain 是否显示域名 或者直接传入域名 * @return string */ function cdnurl($url, $domain = false) { - $url = preg_match("/^https?:\/\/(.*)/i", $url) ? $url : \think\Config::get('upload.cdnurl') . $url; - if ($domain && !preg_match("/^(http:\/\/|https:\/\/)/i", $url)) { + $regex = "/^((?:[a-z]+:)?\/\/|data:image\/)(.*)/i"; + $url = preg_match($regex, $url) ? $url : \think\Config::get('upload.cdnurl') . $url; + if ($domain && !preg_match($regex, $url)) { $domain = is_bool($domain) ? request()->domain() : $domain; $url = $domain . $url; } return $url; } - } @@ -109,36 +107,37 @@ if (!function_exists('is_really_writable')) { } if (is_dir($file)) { $file = rtrim($file, '/') . '/' . md5(mt_rand()); - if (($fp = @fopen($file, 'ab')) === FALSE) { - return FALSE; + if (($fp = @fopen($file, 'ab')) === false) { + return false; } fclose($fp); @chmod($file, 0777); @unlink($file); - return TRUE; - } elseif (!is_file($file) OR ($fp = @fopen($file, 'ab')) === FALSE) { - return FALSE; + return true; + } elseif (!is_file($file) or ($fp = @fopen($file, 'ab')) === false) { + return false; } fclose($fp); - return TRUE; + return true; } - } if (!function_exists('rmdirs')) { /** * 删除文件夹 - * @param string $dirname 目录 - * @param bool $withself 是否删除自身 + * @param string $dirname 目录 + * @param bool $withself 是否删除自身 * @return boolean */ function rmdirs($dirname, $withself = true) { - if (!is_dir($dirname)) + if (!is_dir($dirname)) { return false; + } $files = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($dirname, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST + new RecursiveDirectoryIterator($dirname, RecursiveDirectoryIterator::SKIP_DOTS), + RecursiveIteratorIterator::CHILD_FIRST ); foreach ($files as $fileinfo) { @@ -150,7 +149,6 @@ if (!function_exists('rmdirs')) { } return true; } - } if (!function_exists('copydirs')) { @@ -158,7 +156,7 @@ if (!function_exists('copydirs')) { /** * 复制文件夹 * @param string $source 源文件夹 - * @param string $dest 目标文件夹 + * @param string $dest 目标文件夹 */ function copydirs($source, $dest) { @@ -167,7 +165,9 @@ if (!function_exists('copydirs')) { } foreach ( $iterator = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST) as $item + new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), + RecursiveIteratorIterator::SELF_FIRST + ) as $item ) { if ($item->isDir()) { $sontDir = $dest . DS . $iterator->getSubPathName(); @@ -179,30 +179,28 @@ if (!function_exists('copydirs')) { } } } - } if (!function_exists('mb_ucfirst')) { - function mb_ucfirst($string) { return mb_strtoupper(mb_substr($string, 0, 1)) . mb_strtolower(mb_substr($string, 1)); } - } if (!function_exists('addtion')) { /** * 附加关联字段数据 - * @param array $items 数据列表 + * @param array $items 数据列表 * @param mixed $fields 渲染的来源字段 * @return array */ function addtion($items, $fields) { - if (!$items || !$fields) + if (!$items || !$fields) { return $items; + } $fieldsArr = []; if (!is_array($fields)) { $arr = explode(',', $fields); @@ -260,14 +258,13 @@ if (!function_exists('addtion')) { } return $items; } - } if (!function_exists('var_export_short')) { /** * 返回打印数组结构 - * @param string $var 数组 + * @param string $var 数组 * @param string $indent 缩进字符 * @return string */ @@ -288,8 +285,80 @@ if (!function_exists('var_export_short')) { case "boolean": return $var ? "TRUE" : "FALSE"; default: - return var_export($var, TRUE); + return var_export($var, true); } } +} -} \ No newline at end of file +if (!function_exists('letter_avatar')) { + /** + * 首字母头像 + * @param $text + * @return string + */ + function letter_avatar($text) + { + $total = unpack('L', hash('adler32', $text, true))[1]; + $hue = $total % 360; + list($r, $g, $b) = hsv2rgb($hue / 360, 0.3, 0.9); + + $bg = "rgb({$r},{$g},{$b})"; + $color = "#ffffff"; + $first = mb_strtoupper(mb_substr($text, 0, 1)); + $src = base64_encode('' . $first . ''); + $value = 'data:image/svg+xml;base64,' . $src; + return $value; + } +} + +if (!function_exists('hsv2rgb')) { + function hsv2rgb($h, $s, $v) + { + $r = $g = $b = 0; + + $i = floor($h * 6); + $f = $h * 6 - $i; + $p = $v * (1 - $s); + $q = $v * (1 - $f * $s); + $t = $v * (1 - (1 - $f) * $s); + + switch ($i % 6) { + case 0: + $r = $v; + $g = $t; + $b = $p; + break; + case 1: + $r = $q; + $g = $v; + $b = $p; + break; + case 2: + $r = $p; + $g = $v; + $b = $t; + break; + case 3: + $r = $p; + $g = $q; + $b = $v; + break; + case 4: + $r = $t; + $g = $p; + $b = $v; + break; + case 5: + $r = $v; + $g = $p; + $b = $q; + break; + } + + return [ + floor($r * 255), + floor($g * 255), + floor($b * 255) + ]; + } +} diff --git a/application/common/model/User.php b/application/common/model/User.php index 6afdb79c..dcb24428 100644 --- a/application/common/model/User.php +++ b/application/common/model/User.php @@ -39,7 +39,12 @@ class User extends Model */ public function getAvatarAttr($value, $data) { - return $value ? $value : '/assets/img/avatar.png'; + if (!$value) { + //如果不需要启用首字母头像,请使用 + //$value = '/assets/img/avatar.png'; + $value = letter_avatar($data['nickname']); + } + return $value; } /** diff --git a/application/index/controller/User.php b/application/index/controller/User.php index 184082ea..1b8bd318 100644 --- a/application/index/controller/User.php +++ b/application/index/controller/User.php @@ -27,11 +27,6 @@ class User extends Frontend $this->error(__('User center already closed')); } - $ucenter = get_addon_info('ucenter'); - if ($ucenter && $ucenter['state']) { - include ADDON_PATH . 'ucenter' . DS . 'uc.php'; - } - //监听注册登录注销的事件 Hook::add('user_login_successed', function ($user) use ($auth) { $expire = input('post.keeplogin') ? 30 * 86400 : 0; @@ -82,7 +77,7 @@ class User extends Frontend { $url = $this->request->request('url'); if ($this->auth->id) { - $this->success(__('You\'ve logged in, do not login again'), $url); + $this->success(__('You\'ve logged in, do not login again'), $url ? $url : url('user/index')); } if ($this->request->isPost()) { $username = $this->request->post('username'); @@ -124,13 +119,7 @@ class User extends Frontend $this->error(__($validate->getError()), null, ['token' => $this->request->token()]); } if ($this->auth->register($username, $password, $email, $mobile)) { - $synchtml = ''; - ////////////////同步到Ucenter//////////////// - if (defined('UC_STATUS') && UC_STATUS) { - $uc = new \addons\ucenter\library\client\Client(); - $synchtml = $uc->uc_user_synregister($this->auth->id, $password); - } - $this->success(__('Sign up successful') . $synchtml, $url ? $url : url('user/index')); + $this->success(__('Sign up successful'), $url ? $url : url('user/index')); } else { $this->error($this->auth->getError(), null, ['token' => $this->request->token()]); } @@ -153,7 +142,7 @@ class User extends Frontend { $url = $this->request->request('url'); if ($this->auth->id) { - $this->success(__('You\'ve logged in, do not login again'), $url); + $this->success(__('You\'ve logged in, do not login again'), $url ? $url : url('user/index')); } if ($this->request->isPost()) { $account = $this->request->post('account'); @@ -184,13 +173,7 @@ class User extends Frontend return false; } if ($this->auth->login($account, $password)) { - $synchtml = ''; - ////////////////同步到Ucenter//////////////// - if (defined('UC_STATUS') && UC_STATUS) { - $uc = new \addons\ucenter\library\client\Client(); - $synchtml = $uc->uc_user_synlogin($this->auth->id); - } - $this->success(__('Logged in successful') . $synchtml, $url ? $url : url('user/index')); + $this->success(__('Logged in successful'), $url ? $url : url('user/index')); } else { $this->error($this->auth->getError(), null, ['token' => $this->request->token()]); } @@ -213,13 +196,7 @@ class User extends Frontend { //注销本站 $this->auth->logout(); - $synchtml = ''; - ////////////////同步到Ucenter//////////////// - if (defined('UC_STATUS') && UC_STATUS) { - $uc = new \addons\ucenter\library\client\Client(); - $synchtml = $uc->uc_user_synlogout(); - } - $this->success(__('Logout successful') . $synchtml, url('user/index')); + $this->success(__('Logout successful'), url('user/index')); } /** @@ -270,13 +247,7 @@ class User extends Frontend $ret = $this->auth->changepwd($newpassword, $oldpassword); if ($ret) { - $synchtml = ''; - ////////////////同步到Ucenter//////////////// - if (defined('UC_STATUS') && UC_STATUS) { - $uc = new \addons\ucenter\library\client\Client(); - $synchtml = $uc->uc_user_synlogout(); - } - $this->success(__('Reset password successful') . $synchtml, url('user/login')); + $this->success(__('Reset password successful'), url('user/login')); } else { $this->error($this->auth->getError(), null, ['token' => $this->request->token()]); } diff --git a/public/assets/js/backend/index.js b/public/assets/js/backend/index.js index 5d420dd1..b5ff8ea2 100755 --- a/public/assets/js/backend/index.js +++ b/public/assets/js/backend/index.js @@ -354,7 +354,7 @@ define(['jquery', 'bootstrap', 'backend', 'addtabs', 'adminlte', 'form'], functi function setup() { var tmp = localStorage.getItem('skin'); - if (tmp && $.inArray(tmp, my_skins)) + if (tmp && $.inArray(tmp, my_skins) != -1) change_skin(tmp); // 皮肤切换 diff --git a/public/assets/js/fast.js b/public/assets/js/fast.js index e5ae383c..e4fee8e2 100644 --- a/public/assets/js/fast.js +++ b/public/assets/js/fast.js @@ -95,8 +95,14 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, undefine return url; }, //获取修复后可访问的cdn链接 - cdnurl: function (url) { - return /^(?:[a-z]+:)?\/\//i.test(url) ? url : Config.upload.cdnurl + url; + cdnurl: function (url, domain) { + var rule = new RegExp("^((?:[a-z]+:)?\\/\\/|data:image\\/)", "i"); + var url = rule.test(url) ? url : Config.upload.cdnurl + url; + if (domain && !rule.test(url)) { + domain = typeof domain === 'string' ? domain : location.origin; + url = domain + url; + } + return url; }, //查询Url参数 query: function (name, url) { diff --git a/public/assets/js/require-upload.js b/public/assets/js/require-upload.js index 154e0f36..1c5846cf 100755 --- a/public/assets/js/require-upload.js +++ b/public/assets/js/require-upload.js @@ -1,328 +1,400 @@ define(['jquery', 'bootstrap', 'plupload', 'template'], function ($, undefined, Plupload, Template) { var Upload = { - list: {}, - config: { - container: document.body, - classname: '.plupload:not([initialized])', - previewtpl: '
  • ', - }, - events: { - onInit: function (up) { - //修复少数安卓浏览器无法上传图片的Bug - var input = $("input[type=file]", $(up.settings.button).next()); - if (input && input.prop("accept").match(/image\/jpeg/)) { - input.prop("accept", "image/jpg," + input.prop("accept")); - } + list: {}, + config: { + container: document.body, + classname: '.plupload:not([initialized])', + previewtpl: '
  • ', }, - //初始化完成 - onPostInit: function (up) { - - }, - //文件添加成功后 - onFileAdded: function (up, files) { - var button = up.settings.button; - $(button).data("bakup-html", $(button).html()); - var maxcount = $(button).data("maxcount"); - var input_id = $(button).data("input-id") ? $(button).data("input-id") : ""; - maxcount = typeof maxcount !== "undefined" ? maxcount : 0; - if (maxcount > 0 && input_id) { - var inputObj = $("#" + input_id); - if (inputObj.size() > 0) { - var value = $.trim(inputObj.val()); - var nums = value === '' ? 0 : value.split(/\,/).length; - var remains = maxcount - nums; - if (files.length > remains) { - for (var i = 0; i < files.length; i++) { - up.removeFile(files[i]); - } - Toastr.error(__('You can upload up to %d file%s', remains)); - return false; - } + events: { + onInit: function (up) { + //修复少数安卓浏览器无法上传图片的Bug + var input = $("input[type=file]", $(up.settings.button).next()); + if (input && input.prop("accept").match(/image\/jpeg/)) { + input.prop("accept", "image/jpg," + input.prop("accept")); } - } - //添加后立即上传 - setTimeout(function () { - up.start(); - }, 1); - }, - //上传进行中的回调 - onUploadProgress: function (up, file) { + }, + //初始化完成 + onPostInit: function (up) { - }, - //上传之前的回调 - onBeforeUpload: function (up, file) { - - }, - //上传成功的回调 - onUploadSuccess: function (up, ret) { - var button = up.settings.button; - var onUploadSuccess = up.settings.onUploadSuccess; - var data = typeof ret.data !== 'undefined' ? ret.data : null; - //上传成功后回调 - if (button) { - //如果有文本框则填充 + }, + //文件添加成功后 + onFileAdded: function (up, files) { + var button = up.settings.button; + $(button).data("bakup-html", $(button).html()); + var maxcount = $(button).data("maxcount"); var input_id = $(button).data("input-id") ? $(button).data("input-id") : ""; - if (input_id) { - var urlArr = []; + maxcount = typeof maxcount !== "undefined" ? maxcount : 0; + if (maxcount > 0 && input_id) { var inputObj = $("#" + input_id); - if ($(button).data("multiple") && inputObj.val() !== "") { - urlArr.push(inputObj.val()); - } - urlArr.push(data.url); - inputObj.val(urlArr.join(",")).trigger("change"); - } - //如果有回调函数 - var onDomUploadSuccess = $(button).data("upload-success"); - if (onDomUploadSuccess) { - if (typeof onDomUploadSuccess !== 'function' && typeof Upload.api.custom[onDomUploadSuccess] === 'function') { - onDomUploadSuccess = Upload.api.custom[onDomUploadSuccess]; - } - if (typeof onDomUploadSuccess === 'function') { - var result = onDomUploadSuccess.call(button, data, ret); - if (result === false) - return; + if (inputObj.size() > 0) { + var value = $.trim(inputObj.val()); + var nums = value === '' ? 0 : value.split(/\,/).length; + var remains = maxcount - nums; + if (files.length > remains) { + for (var i = 0; i < files.length; i++) { + up.removeFile(files[i]); + } + Toastr.error(__('You can upload up to %d file%s', remains)); + return false; + } } } - } + //添加后立即上传 + setTimeout(function () { + up.start(); + }, 1); + }, + //上传进行中的回调 + onUploadProgress: function (up, file) { - if (typeof onUploadSuccess === 'function') { - var result = onUploadSuccess.call(button, data, ret); - if (result === false) - return; + }, + //上传之前的回调 + onBeforeUpload: function (up, file) { + + }, + //上传成功的回调 + onUploadSuccess: function (up, ret) { + var button = up.settings.button; + var onUploadSuccess = up.settings.onUploadSuccess; + var data = typeof ret.data !== 'undefined' ? ret.data : null; + //上传成功后回调 + if (button) { + //如果有文本框则填充 + var input_id = $(button).data("input-id") ? $(button).data("input-id") : ""; + if (input_id) { + var urlArr = []; + var inputObj = $("#" + input_id); + if ($(button).data("multiple") && inputObj.val() !== "") { + urlArr.push(inputObj.val()); + } + urlArr.push(data.url); + inputObj.val(urlArr.join(",")).trigger("change"); + } + //如果有回调函数 + var onDomUploadSuccess = $(button).data("upload-success"); + if (onDomUploadSuccess) { + if (typeof onDomUploadSuccess !== 'function' && typeof Upload.api.custom[onDomUploadSuccess] === 'function') { + onDomUploadSuccess = Upload.api.custom[onDomUploadSuccess]; + } + if (typeof onDomUploadSuccess === 'function') { + var result = onDomUploadSuccess.call(button, data, ret); + if (result === false) + return; + } + } + } + + if (typeof onUploadSuccess === 'function') { + var result = onUploadSuccess.call(button, data, ret); + if (result === false) + return; + } + }, + //上传错误的回调 + onUploadError: function (up, ret) { + var button = up.settings.button; + var onUploadError = up.settings.onUploadError; + var data = typeof ret.data !== 'undefined' ? ret.data : null; + if (button) { + var onDomUploadError = $(button).data("upload-error"); + if (onDomUploadError) { + if (typeof onDomUploadError !== 'function' && typeof Upload.api.custom[onDomUploadError] === 'function') { + onDomUploadError = Upload.api.custom[onDomUploadError]; + } + if (typeof onDomUploadError === 'function') { + var result = onDomUploadError.call(button, data, ret); + if (result === false) + return; + } + } + } + + if (typeof onUploadError === 'function') { + var result = onUploadError.call(button, data, ret); + if (result === false) { + return; + } + } + Toastr.error(ret.msg + "(code:" + ret.code + ")"); + }, + //服务器响应数据后 + onUploadResponse: function (response) { + try { + var ret = typeof response === 'object' ? response : JSON.parse(response); + if (!ret.hasOwnProperty('code')) { + $.extend(ret, {code: -2, msg: response, data: null}); + } + } catch (e) { + var ret = {code: -1, msg: e.message, data: null}; + } + return ret; + }, + //上传全部结束后 + onUploadComplete: function (up, files) { + var button = up.settings.button; + var onUploadComplete = up.settings.onUploadComplete; + if (button) { + var onDomUploadComplete = $(button).data("upload-complete"); + if (onDomUploadComplete) { + if (typeof onDomUploadComplete !== 'function' && typeof Upload.api.custom[onDomUploadComplete] === 'function') { + onDomUploadComplete = Upload.api.custom[onDomUploadComplete]; + } + if (typeof onDomUploadComplete === 'function') { + var result = onDomUploadComplete.call(button, files); + if (result === false) + return; + } + } + } + + if (typeof onUploadComplete === 'function') { + var result = onUploadComplete.call(button, files); + if (result === false) { + return; + } + } } }, - //上传错误的回调 - onUploadError: function (up, ret) { - var button = up.settings.button; - var onUploadError = up.settings.onUploadError; - var data = typeof ret.data !== 'undefined' ? ret.data : null; - if (button) { - var onDomUploadError = $(button).data("upload-error"); - if (onDomUploadError) { - if (typeof onDomUploadError !== 'function' && typeof Upload.api.custom[onDomUploadError] === 'function') { - onDomUploadError = Upload.api.custom[onDomUploadError]; + api: { + //Plupload上传 + plupload: function (element, onUploadSuccess, onUploadError, onUploadComplete) { + element = typeof element === 'undefined' ? Upload.config.classname : element; + $(element, Upload.config.container).each(function () { + if ($(this).attr("initialized")) { + return true; } - if (typeof onDomUploadError === 'function') { - var result = onDomUploadError.call(button, data, ret); - if (result === false) - return; - } - } - } + $(this).attr("initialized", true); + var that = this; + var id = $(this).prop("id"); + var url = $(this).data("url"); + var maxsize = $(this).data("maxsize"); + var mimetype = $(this).data("mimetype"); + var multipart = $(this).data("multipart"); + var multiple = $(this).data("multiple"); - if (typeof onUploadError === 'function') { - var result = onUploadError.call(button, data, ret); - if (result === false) { - return; - } - } - Toastr.error(ret.msg + "(code:" + ret.code + ")"); - }, - //服务器响应数据后 - onUploadResponse: function (response) { - try { - var ret = typeof response === 'object' ? response : JSON.parse(response); - if (!ret.hasOwnProperty('code')) { - $.extend(ret, {code: -2, msg: response, data: null}); - } - } catch (e) { - var ret = {code: -1, msg: e.message, data: null}; - } - return ret; - }, - //上传全部结束后 - onUploadComplete: function (up, files) { - var button = up.settings.button; - var onUploadComplete = up.settings.onUploadComplete; - if (button) { - var onDomUploadComplete = $(button).data("upload-complete"); - if (onDomUploadComplete) { - if (typeof onDomUploadComplete !== 'function' && typeof Upload.api.custom[onDomUploadComplete] === 'function') { - onDomUploadComplete = Upload.api.custom[onDomUploadComplete]; - } - if (typeof onDomUploadComplete === 'function') { - var result = onDomUploadComplete.call(button, files); - if (result === false) - return; - } - } - } + //填充ID + var input_id = $(that).data("input-id") ? $(that).data("input-id") : ""; + //预览ID + var preview_id = $(that).data("preview-id") ? $(that).data("preview-id") : ""; - if (typeof onUploadComplete === 'function') { - var result = onUploadComplete.call(button, files); - if (result === false) { - return; + //上传URL + url = url ? url : Config.upload.uploadurl; + url = Fast.api.fixurl(url); + //最大可上传文件大小 + maxsize = typeof maxsize !== "undefined" ? maxsize : Config.upload.maxsize; + //文件类型 + mimetype = typeof mimetype !== "undefined" ? mimetype : Config.upload.mimetype; + //请求的表单参数 + multipart = typeof multipart !== "undefined" ? multipart : Config.upload.multipart; + //是否支持批量上传 + multiple = typeof multiple !== "undefined" ? multiple : Config.upload.multiple; + var mimetypeArr = new Array(); + //支持后缀和Mimetype格式,以,分隔 + if (mimetype && mimetype !== "*" && mimetype.indexOf("/") === -1) { + var tempArr = mimetype.split(','); + for (var i = 0; i < tempArr.length; i++) { + mimetypeArr.push({title: __('Files'), extensions: tempArr[i]}); + } + mimetype = mimetypeArr; + } + //生成Plupload实例 + Upload.list[id] = new Plupload.Uploader({ + runtimes: 'html5,flash,silverlight,html4', + 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', + drop_element: [id, $(this).data("input-id")], + filters: { + max_file_size: maxsize, + mime_types: mimetype, + }, + url: url, + multipart_params: $.isArray(multipart) ? {} : multipart, + init: { + PostInit: Upload.events.onPostInit, + FilesAdded: Upload.events.onFileAdded, + BeforeUpload: Upload.events.onBeforeUpload, + UploadProgress: function (up, file) { + var button = up.settings.button; + $(button).prop("disabled", true).html(" " + __('Upload') + file.percent + "%"); + Upload.events.onUploadProgress(up, file); + }, + FileUploaded: function (up, file, info) { + var button = up.settings.button; + //还原按钮文字及状态 + $(button).prop("disabled", false).html($(button).data("bakup-html")); + var ret = Upload.events.onUploadResponse(info.response, info, up, file); + file.ret = ret; + if (ret.code === 1) { + Upload.events.onUploadSuccess(up, ret, file); + } else { + Upload.events.onUploadError(up, ret, file); + } + }, + UploadComplete: Upload.events.onUploadComplete, + Error: function (up, err) { + var button = up.settings.button; + $(button).prop("disabled", false).html($(button).data("bakup-html")); + var ret = {code: err.code, msg: err.message, data: null}; + Upload.events.onUploadError(up, ret); + } + }, + onUploadSuccess: onUploadSuccess, + onUploadError: onUploadError, + onUploadComplete: onUploadComplete, + button: that + }); + + //拖动排序 + if (preview_id && multiple) { + require(['dragsort'], function () { + $("#" + preview_id).dragsort({ + dragSelector: "li a:not(.btn-trash)", + dragEnd: function () { + $("#" + preview_id).trigger("fa.preview.change"); + }, + placeHolderTemplate: '
  • ' + }); + }); + } + if (preview_id && input_id) { + $(document.body).on("keyup change", "#" + input_id, function () { + var inputStr = $("#" + input_id).val(); + var inputArr = inputStr.split(/\,/); + $("#" + preview_id).empty(); + var tpl = $("#" + preview_id).data("template") ? $("#" + preview_id).data("template") : ""; + $.each(inputArr, function (i, j) { + if (!j) { + return true; + } + var data = {url: j, fullurl: Fast.api.cdnurl(j), data: $(that).data()}; + var html = tpl ? Template(tpl, data) : Template.render(Upload.config.previewtpl, data); + $("#" + preview_id).append(html); + }); + }); + $("#" + input_id).trigger("change"); + } + if (preview_id) { + // 监听事件 + $(document.body).on("fa.preview.change", "#" + preview_id, function () { + var urlArr = new Array(); + $("#" + preview_id + " [data-url]").each(function (i, j) { + urlArr.push($(this).data("url")); + }); + if (input_id) { + $("#" + input_id).val(urlArr.join(",")); + } + }); + // 移除按钮事件 + $(document.body).on("click", "#" + preview_id + " .btn-trash", function () { + $(this).closest("li").remove(); + $("#" + preview_id).trigger("fa.preview.change"); + }); + } + if (input_id) { + //粘贴上传 + $("body").on('paste', "#" + input_id, function (event) { + var that = this; + var image, pasteEvent; + pasteEvent = event.originalEvent; + if (pasteEvent.clipboardData && pasteEvent.clipboardData.items) { + image = Upload.api.getImageFromClipboard(pasteEvent); + if (image) { + event.preventDefault(); + var button = $(".plupload[data-input-id='" + $(that).attr("id") + "']"); + Upload.api.send(image, function (data) { + var urlArr = []; + if (button && button.data("multiple") && $(that).val() !== '') { + urlArr.push($(that).val()); + } + urlArr.push(data.url); + $(that).val(urlArr.join(",")).trigger("change"); + }); + } + } + }); + //拖拽上传 + $("body").on('drop', "#" + input_id, function (event) { + var that = this; + var images, pasteEvent; + pasteEvent = event.originalEvent; + if (pasteEvent.dataTransfer && pasteEvent.dataTransfer.files) { + images = Upload.api.getImageFromDrop(pasteEvent); + if (images.length > 0) { + event.preventDefault(); + var button = $(".plupload[data-input-id='" + $(that).attr("id") + "']"); + $.each(images, function (i, image) { + Upload.api.send(image, function (data) { + var urlArr = []; + if (button && button.data("multiple") && $(that).val() !== '') { + urlArr.push($(that).val()); + } + urlArr.push(data.url); + $(that).val(urlArr.join(",")).trigger("change"); + }); + }); + } + } + }); + } + Upload.list[id].init(); + }); + }, + // AJAX异步上传 + send: function (file, onUploadSuccess, onUploadError, onUploadComplete) { + var index = Layer.msg(__('Uploading'), {offset: 't', time: 0}); + var id = Plupload.guid(); + var _onPostInit = Upload.events.onPostInit; + Upload.events.onPostInit = function () { + // 当加载完成后添加文件并上传 + Upload.list[id].addFile(file); + //Upload.list[id].start(); + }; + $('