/**
* Created by Lynn on 2016/3/9.
* 本上传为上传到本地
*/
;
(function () {
window.up = [];
// 检查是否引入了jquery库
if (typeof jQuery == 'undefined')
return false;
// 检查是否支持File等对象
if (!window.File || !window.FileReader || !window.FileList || !window.Blob || !File.prototype.slice)
return false;
// 处理不同浏览器中的File、Blob对象分割方法slice
if ((typeof File == 'undefined'))
return false;
if (!File.prototype.slice) {
if (File.prototype.webkitSlice)
File.prototype.slice = File.prototype.webkitSlice;
else if (File.prototype.mozSlice)
File.prototype.slice = File.prototype.mozSlice;
}
return true;
})() && (function ($) {
/**
* 工具方法集
*/
var util = g = {
rotl: function (a, b) {
return a << b | a >>> 32 - b;
},
rotr: function (a, b) {
return a << 32 - b | a >>> b;
},
endian: function (a) {
if (a.constructor == Number)
return g.rotl(a, 8) & 16711935 | g.rotl(a, 24) & 4278255360;
for (var b = 0; b < a.length; b++)
a[b] = g.endian(a[b]);
return a;
},
randomBytes: function (a) {
for (var b = []; a > 0; a--)
b.push(Math.floor(Math.random() * 256));
return b;
},
bytesToWords: function (a) {
for (var b = [], c = 0, d = 0; c < a.length; c++, d += 8)
b[d >>> 5] |= a[c] << 24 - d % 32;
return b;
},
wordsToBytes: function (a) {
for (var b = [], c = 0; c < a.length * 32; c += 8)
b.push(a[c >>> 5] >>> 24 - c % 32 & 255);
return b;
},
bytesToHex: function (a) {
for (var b = [], c = 0; c < a.length; c++)
b.push((a[c] >>> 4).toString(16)), b.push((a[c] & 15).toString(16));
return b.join("");
},
hexToBytes: function (a) {
for (var b = [], c = 0; c < a.length; c += 2)
b.push(parseInt(a.substr(c, 2), 16));
return b;
},
bytesToBase64: function (a) {
if (typeof btoa == "function")
return btoa(f.bytesToString(a));
for (var b = [], c = 0; c < a.length; c += 3)
for (var d = a[c] << 16 | a[c + 1] << 8 | a[c + 2], e = 0; e < 4; e++)
c * 8 + e * 6 <= a.length * 8 ? b.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d >>> 6 * (3 - e) & 63)) : b.push("=");
return b.join("");
},
base64ToBytes: function (a) {
if (typeof atob == "function")
return f.stringToBytes(atob(a));
for (var a = a.replace(/[^A-Z0-9+/]/ig, ""), b = [], c = 0, d = 0; c < a.length; d = ++c % 4)
d != 0 && b.push(("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c - 1)) & Math.pow(2, -2 * d + 8) - 1) << d * 2 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c)) >>> 6 - d * 2);
return b;
}
};
/**
* sha1算法处理
*
* @param (Array){block}分块数组
* @param (Array){hash}当前计算出的hash数组
*/
var sha1 = function (block, hash) {
var words = [];
var count_parts = 16;
var h0 = hash[0],
h1 = hash[1],
h2 = hash[2],
h3 = hash[3],
h4 = hash[4];
for (var i = 0; i < block.length; i += count_parts) {
var th0 = h0,
th1 = h1,
th2 = h2,
th3 = h3,
th4 = h4;
for (var j = 0; j < 80; j++) {
if (j < count_parts)
words[j] = block[i + j] | 0;
else {
var n = words[j - 3] ^ words[j - 8] ^ words[j - 14] ^ words[j - count_parts];
words[j] = (n << 1) | (n >>> 31);
}
var f, k;
if (j < 20) {
f = (h1 & h2 | ~h1 & h3);
k = 1518500249;
} else if (j < 40) {
f = (h1 ^ h2 ^ h3);
k = 1859775393;
} else if (j < 60) {
f = (h1 & h2 | h1 & h3 | h2 & h3);
k = -1894007588;
} else {
f = (h1 ^ h2 ^ h3);
k = -899497514;
}
var t = ((h0 << 5) | (h0 >>> 27)) + h4 + (words[j] >>> 0) + f + k;
h4 = h3;
h3 = h2;
h2 = (h1 << 30) | (h1 >>> 2);
h1 = h0;
h0 = t;
}
h0 = (h0 + th0) | 0;
h1 = (h1 + th1) | 0;
h2 = (h2 + th2) | 0;
h3 = (h3 + th3) | 0;
h4 = (h4 + th4) | 0;
}
return [h0, h1, h2, h3, h4];
}
/**
* 通过字符数组对应的Unicode数组得到相应的hash值
*
* @param (Uint8Array){charCodeArr}字符数组对应的Unicode数组,例如:[97,98,99]
* @param (Function){method}计算hash所用的加密方法,如sha1等
* @param (Number)buffer分块处理的块大小
* @return (Array){hash}hash数组
*/
var getHash = function (charCodeArr, method, buffer) {
(buffer && buffer > 0) || (buffer = 1024 * 16 * 64); // 处理默认的buffer
var hash = [1732584193, -271733879, -1732584194, 271733878, -1009589776];
var len = charCodeArr.length;
var start = 0;
var end = buffer - 1;
var block;
while (start + 1 <= len) {
end = Math.min(end, len - 1);
block = util.bytesToWords(charCodeArr.subarray(start, end + 1));
if (end === len - 1) {
var bTotal, bLeft, bTotalH, bTotalL;
bTotal = len * 8;
bLeft = (end - start + 1) * 8;
bTotalH = Math.floor(bTotal / 0x100000000);
bTotalL = bTotal & 0xFFFFFFFF;
// Padding
block[bLeft >>> 5] |= 0x80 << (24 - bLeft % 32);
block[((bLeft + 64 >>> 9) << 4) + 14] = bTotalH;
block[((bLeft + 64 >>> 9) << 4) + 15] = bTotalL;
}
hash = method(block, hash);
start += buffer;
end += buffer;
}
return hash;
}
/**
* 通过字符数组对应的Unicode数组得到sha1值
*
* @param (Uint8Array){charCodeArr}字符数组对应的Unicode数组,例如:[97,98,99]
* @param (Number){buffer}分块处理的块大小
* @return (String){sha1}sha1值
*/
var getSha1 = function (charCodeArr, buffer) {
var hash = getHash(charCodeArr, sha1, buffer);
return util.bytesToHex(hash);
}
/**
* 获取字符串的sha1
*
* @param (String){str}字符串
* @return (String){sha1}字符串对应的sha1值
*/
var getSha1FromStr = function (str) {
var len = str.length;
var b = [len];
for (var i = 0; i < len; i++) {
b[i] = str.charCodeAt(i);
}
return getSha1(new Uint8Array(b), 10240);
}
/**
* 获取文件的sha1
*
* @param (File){file}文件对象
* @return (String){sha1}sha1值
*/
var getSha1FromFile = function (file, callback) {
var reader = new FileReader();
try {
reader.readAsArrayBuffer(file);
} catch (e) {
reader.readAsArrayBuffer(file.source.source);
}
reader.onload = function (e) {
var u8Arr = new Uint8Array(e.target.result);
var sha1 = jQuery.hash.getSha1(u8Arr, 10240);
file.sha1 = sha1;
// console.log(file);
callback(e, sha1);
}
};
$.hash = {
util: util,
getSha1: getSha1,
getSha1FromStr: getSha1FromStr,
getSha1FromFile: getSha1FromFile
};
})(jQuery);
(function ($, window, document, undefined) {
"use strict";
$.fn.imageGroup = function (options) {
return this.each(function () {
new ImageGroup(this, $.extend({}, $.fn.imageGroup.defaults, options));
});
};//用以一开始生成页面缩略图
// Defaults
$.fn.imageGroup.defaults = {
multi: !1, // 是否多图
editable: !0, // 图片名称是否可编辑
moveable: !0, //图片是否能移动
deletable: !0, //图片是否可删除
upload: !0, // 是否允许上传图片
uploadText: ' ',
uploadAction: UPLOAD_IMG, //图片上传接口
server: !1, //是否允许从服务器端选择图片
serverText: ' ',
thumb_width: 160,
thumb_height: 120,
defaultName: '上传图片',
compress: false,
maxPhoto: 100,
overSize: 100000
};
var uploaded = {};
function getUrlFile(url){
var tmp= new Array();
tmp=url.split("/");
return tmp[tmp.length-1];
}
// WebUploader.Deferred()
// 在文件开始发送前做些异步操作。
// WebUploader会等待此异步操作完成后,开始发送文件。
WebUploader.Uploader.register({//此为类似函数原型,让每个调用webuploader插件的函数都调用里面的步骤
"before-send-file": "beforeSendFile",
'before-send': 'beforeSend'
}, {
beforeSendFile: function (file) {
if (file.size > 102400) {//文件少于 100k 时直接让他上传
var task = new $.Deferred(),
callback = function (daa, sha1) {
if (typeof uploaded[sha1] == 'undefined') {
task.resolve();
} else {
CallUploadSuccess(file, uploaded[sha1]);
task.reject();
}
};
$.when(sha1File(file.source.source, callback))
.done(function (data, e) {
})
.fail(function () {
toast('网络出现错误')
});
return $.when(task);
}
},
beforeSend: function (file) {
if (file.file.size > 102400) {//文件少于 100k 时直接让他上传
var task = new $.Deferred(), sha1 = file.file.source.source.filename;
if (typeof uploaded[sha1] == 'undefined') {
$.ajax({
type: "GET",
url: getUrl("upload/hash?hash=" + sha1),
dataType: 'json'
}).then(function (rs, textStatus, jqXHR) {
task.resolve();
// if (rs.state == 1) {//已存在的直接算作秒传
// uploaded[sha1] = rs;
// CallUploadSuccess(file, uploaded[sha1]);
// task.reject();//停止上传
// } else {//没有该图片
// task.resolve();
// }
}, function (jqXHR, textStatus, errorThrown) {//任何形式的验证失败,都触发重新上传
task.resolve();
});
return $.when(task);
} else {
CallUploadSuccess(file, uploaded[sha1]);//移除加载 并添加控件
task.reject();//停止上传
}
}
}
});
function CallUploadSuccess(file, rs, options) {//从服务器成功拿回数据
file = file.file || file;
var item = $('#' + file.id),
tr = $('#' + file.id +'tr');
if(tr){//资源管理处处理
var res = rs.content;//此处应该无论组件形式还是资源管理形式都会调用,不要在此处阻止上传过程
// toast('文件 ' + file.name + ' 已上传过');
// tr.remove();
// local.removeFile(file.id, true);
// return;
}
//组件处处理
if (!options) {
var element = item.closest('.vc-img-edit');
options = element.data('web-uploader-options');
}
if (1 != rs.state) { // 不为1 则为上传错误
if (rs != '') {
$('
').appendTo(item.find('.vc-img-img'));
return;
} else {
return;
}
}
item.addClass('upload-state-success');
var source = rs.content, src, img;
if (options && typeof options.size != 'undefined') {
src = SOSO.getImageUrl(source, options.size);
} else {
src = source.origin + source.path;
}
img = item.find('img').attr('src', src);
CallSetValues(item, {name: source.name || source.filename, path: source.path}, options);
if (options && options.uploadSuccess) {
options.uploadSuccess.call(item.get(0), file, source);
}
item.find('.vc-img-loading').remove();
if(rs){
}
}
function CallSetValues(item, values, options) {
if(options){
values = values || {};
if (options && options.editable) CallSetText(item, values.title || values.name || '', values.desc || '');
values.update = 1;
$.each(values, function () {
var k = arguments[0],
v = arguments[1],
n = 'field' + k.substring(0, 1).toUpperCase() + k.substring(1),
ipt;
if (options && options[n]) {
ipt = item.find("input[name='" + options[n] + "']");
if (!ipt.length) {
ipt = $(' ').appendTo(item);
}
ipt.val(v);
}
});
item.data('soso.images', values);
if (options && typeof options.setValues == 'function') {
options.setValues(options, item, values);
}
}
}
function CallSetText(item, title, desc) {
var h6 = item.find('h6');
if (!h6.length) {
h6 = $(' ').appendTo(item);
}
h6.text(title);
}
function ImageGroup(element, options) {
if (!arguments.length) {
return;
}
var img_uploaded_num = 0,
cls_item = 'vc-img-item',
cls_uploaded = 'upload-state-done',
cls_success = 'upload-state-success',
btns,
uploadItem,
uploader,
fields = null,
deleteIdsInput,
_server;
element = $(element).addClass('vc-img-edit');
$.extend(options, element.data());
element.data('web-uploader-options', options);
render();
function render() {
var items = element.find('.' + cls_item),
i = 0;
img_uploaded_num = items.length;
for (; i < img_uploaded_num; i++) {
var item = items.eq(i),
img = item.find('img');
if (img.length) {
renderImg(item, img);
} else if (!options.multi && 0 == i) {//渲染只允许单选的按钮
renderBtns(item);
}
if (options.itemWidth > 0) ct.css({width: options.itemWidth, 'max-width': 'none'});
}
if (options.multi || 0 == img_uploaded_num) renderItem();
if (options.fixedHeight > 0) {
element.addClass('vc-img-fixed-height');
}
element.on('click', function (e) {
var el = $(e.target), func = el.data('func'), item;
if (!func && el.is('.fa')) {
el = el.parent();
func = el.data('func');
}
if (func) {
item = el.parent().parent().parent()
switch (func) {
case 'edit':
edit(item);
break;
case 'del':
del(item);
break;
case 'leftMove':
move(item, 'left');
break;
case 'rightMove':
move(item, 'right');
break;
case 'server':
server(el.parent().parent());
break;
}
}
});
element.on('dblclick', function (e) {//给每个 img 添加双击查看原图弹窗
var el = $(e.target);
if (el.is('img')) {
if ($.isFunction(options.dblclick)) {
options.dblclick(element, el);
} else {
top.lightBox(el, {src: SOSO.getImageUrl(el.attr('src'), !1)});
}
} else if (el.is('h6')) {
if (options.editable) {
edit(element);
}
}
});
}//渲染
function renderBtns(item) {//渲染五个上传按钮
if (btns) {
btns.show();
return;
}
uploadItem = item;
var cls = options.upload && options.server ? 'vc-img-btns' : 'vc-img-btn';//判断是否允许使用上传功能
btns = $('
').prependTo(item.addClass('vc-img-upload'));
if (options.upload) {
var btn = $('' + options.uploadText + '
').appendTo(btns);
if (options.fixedHeight > 0) {
btn.height(options.fixedHeight).addClass('btn-fixed-height');
}
renderUploader(item, btn);
}
if (options.server) btns.append($('' + options.serverText + ' '));//判断是否允许使用在线选择功能
//window.setTimeout(function(){btns.show()}, 100);
}
function renderImg(item, img) {
var ct = $('
').prependTo(item);
item.addClass(cls_uploaded);
if (typeof img == 'string') {
img = $(' ');
item.addClass(cls_success);
} else if (typeof img == 'object' && img.source) {
img = $('');
}
if (options.fixedHeight > 0 && img.is('img')) {
img.height(options.fixedHeight);
}
ct.append(img);
var span = $(' ').appendTo(ct);
if (options.editable) {
span.append(' ');
}
if (options.deletable) {
span.append(' ');
}
if (options.multi && options.moveable) {
span.append(' ');
span.append(' ');
}
return img;
}
function renderItem(file, item) {
var l = element.find('.' + cls_item).length,
ct = $('
');
if (item) {
item.before(ct);
} else {
element.append(ct);
}
if (options.itemWidth > 0) ct.css({width: options.itemWidth, 'max-width': 'none'});
if (!file) {
renderBtns(ct);//渲染多选按钮
setText(ct, options.defaultName);
return ct;
} else if (typeof file == 'string') {
renderImg(ct, file);
} else {
ct.attr('id', file.id);
var title = file.title || file.name;
if (file.ext) {
title = title.substring(0, title.length - file.ext.length - 1);
}
setText(ct, title);
}
img_uploaded_num++;
if (uploadItem && options.multi && img_uploaded_num >= options.maxPhoto) {
uploadItem.hide();
}
return ct;
}
function setText(item, title, desc) {
return CallSetText(item, title, desc);
// var h6 = item.find('h6');
// if (!h6.length) {
// h6 = $(' ').appendTo(item);
// }
// h6.text(title);
}
function setValues(item, values) {
if(!values.path){
var source = values, src, img;
if (typeof options.size != 'undefined') {
src = SOSO.getImageUrl(source, options.size);
} else {
if(source.type == '云端'){
src = source.url;
}else{
src = 'http://'+ window.location.host +'/'+ source.url;
}
// src = source.origin + source.path;
}
if(typeof values.desc == 'undefined'){
img = item.find('img').attr('src', src);
if(source.type == '云端'){//若为上传,本应请求cp/upload 的接口,此处从在线图中上传时则没有path值,暂时先用资源处的地址代替
CallSetValues(item, {name: source.name || source.filename, path: source.url}, options);
}else{
CallSetValues(item, {name: source.name || source.filename, path: 'http://'+ window.location.host +'/'+ source.url}, options);
}
}
}
//CallSetValues(item, {name: source.name || source.filename, path: source.path}, options);
// CallSetValues(item, values, options);
values = values || {};
if (options.editable) setText(item, values.title || values.name || '', values.desc || '');
values.update = 1;
$.each(values, function () {
var k = arguments[0],
v = arguments[1],
n = 'field' + k.substring(0, 1).toUpperCase() + k.substring(1),
ipt,
ipi;
if (options[n]) {
ipt = item.find("input[name='" + options[n] + "']");
if (!ipt.length) {
ipt = $(' ').appendTo(item);
}
ipt.val(v);
}
/* 图片li列表,添加id */
// if(k =='id' && v){
// ipi = item.find("input[name='photos_desc[]']");
// if (!ipi.length) {
// ipi = $(' ').appendTo(item);
// }
// ipi.val(v);
// }
});
item.data('soso.images', values);
if (typeof options.setValues == 'function') {
options.setValues(options, item, values);
}
}
function getFields() {
if ($.isArray(fields)) return fields;
fields = [];
$.each(options, function (k, v) {
if (k.indexOf('field') == 0 && k.length > 5) {
fields.push(k.substring(5).toLowerCase());
}
});
return fields;
}
function getValue(item, fields) {
if (fields) {
if (!$.isArray(fields)) fields = [fields];
} else {
fields = getFields();
}
var values = {};
$.each(fields, function (v, k) {
var n = 'field' + k.substring(0, 1).toUpperCase() + k.substring(1), ipt;
if (options[n]) {
ipt = item.find("input[name='" + options[n] + "']");
if (ipt.length) {
values[k] = ipt.val();
}
}
});
return values;
}
function edit(item) {
if (!item.hasClass(cls_uploaded)) return;
if (options.editor) {
options.editor.call(null, item, getValue(item), function (values) {
setValues(item, values);
});
return;
}
var form = $(''),
dialog = top.bootbox.dialog({
title: '图片属性',
width: 560,
draggable: true,
message: form,
buttons: {
success: {
label: "确定", className: "btn-success", callback: function () {
var F = form.get(0), n = F.name.value.trim();
if (!n) return false;
setValues(item, {name: n, desc: F.desc.value.trim()});// 设置页面显示
}
},
cancel: {label: "取消", className: "btn-default"}
}
});
form.find('input').val(item.find('h6').text());
if (options.enabledesc !== false) {
form.find('textarea').val(getValue(item, 'desc').desc || '');
} else {
form.find('textarea').parent().parent().hide();
}
}
function del(item) {
if (uploader) {//uploader.getFiles() != ''
var i = 0,
fileList = uploader.getFiles(),
fileLen = fileList.length,
fileId = item["0"].id;
for (; i < fileLen; i++) {
if (fileList[i].id == fileId) {
uploaded = $.grep(uploaded, function (value) {
return value != removeItem;
});
uploader.removeFile(fileId);
uploader.getFiles().splice(i, 1);
}
}
}
if (options.deletable !== false) {
if (item.hasClass(cls_success) && $.isFunction(options.onBeforeDelete) && options.onBeforeDelete.call(null, item, function () {
doDel(item);
}) !== true) {
return;
}
doDel(item);
}
if (options.delete) {
options.delete.call(null, item);
}
}
function doDel(item) {
if (!options.multi) {
item.removeClass(cls_uploaded).removeClass(cls_success).find('.vc-img-img').remove();
item.find('>input').remove();
renderBtns(item);//删除后重新渲染
} else {
updateDelIds(item);
img_uploaded_num--;
uploadItem.show();
item.remove();
}
if ($.isFunction(options.onDelete)) {
options.onDelete.call(null, item);
}
}
function updateDelIds(item) {
var id = options['fieldId'],
ids = options['deleteids'];
if (id && ids) {
if (!deleteIdsInput) {
deleteIdsInput = element.find("input[name='" + ids + "']");
if (!deleteIdsInput.length) {
deleteIdsInput = $(' ').appendTo(element);
}
}
ids = deleteIdsInput.val();
id = item.find("input[name='" + id + "']").val();
ids = ids ? ids + ',' + id : id;
deleteIdsInput.val(ids);
}
}
function move(item, direction) {
var cls = '.' + cls_item;
if ('left' == direction) {
item.after(item.prev(cls));
} else if ('right' == direction) {
item.insertAfter(item.next(cls));
}
}
function server(item) {
if (_server) return;
_server = true;
SOSO.Dialog.image({
singleSelect: !options.multi,
max: options.maxPhoto,
clasification: options.clasification,
callback: function (rs) {
if (options.multi && $.isArray(rs)) {
$.each(rs, function () {
// if(this.type == '云端'){
// setValues(renderItem(this.url, item), this);
// }else{
// setValues(renderItem('http://'+window.location.host + '/' + this.url, item), this);
// }
setValues(renderItem(this.url, item), this);
});
} else {
btns.hide();
renderImg(item, SOSO.getImageUrl(rs, false));
setValues(item, rs);
}
return true;
}
});
_server = false;
}
function uploadSuccess(file, rs) {//从服务器成功拿回数据
CallUploadSuccess(file, rs, options);
// var item = element.find('#' + file.id);
// if (1 != rs.state) { // 不为1 则为上传错误
// if (rs != '') {
// $('').appendTo(item.find('.vc-img-img'));
// return;
// } else {
// return;
// }
// }
// item.addClass(cls_success);
// var source = rs.content, src, img;
// if (typeof options.size != 'undefined') {
// src = SOSO.getImageUrl(source, options.size);
// } else {
// src = source.origin + source.path;
// }
// img = item.find('img').attr('src', src);
// setValues(item, {name: source.name || source.filename, path: source.path, id: source.id});
// if (options.uploadSuccess) {//此处去保存数组图片
// options.uploadSuccess.call(item.get(0), file, source);
// }
// element.find('#' + file.id).find('.vc-img-loading').remove();
}
function renderUploader(item, btn) {//
uploader = WebUploader.create({//设置上传参数
// 选完文件后,是否自动上传。
auto: true,
// swf文件路径
swf: WU_SWF,
// 文件接收服务端。
server: options.uploadAction,
duplicate: true,//是否允许重复上传
// 选择文件的按钮。可选。
pick: {
id: btn,
multiple: options.multi
},
formData: {
brand: options.clasification ? options.clasification.brand : null,
series: options.clasification ? options.clasification.series : null
},
compress: false,
// 只允许选择图片文件。
accept: {
title: 'Images',
extensions: 'gif,jpg,jpeg,bmp,png',
mimeTypes: 'image/gif,image/jpg,image/jpeg,image/png,image/bmp'
}
});
if (btn.hasClass('btn-fixed-height')) {
btn.find('.webuploader-pick').css('line-height', btn.height() + 'px');
}
// 当有文件加入队列的时候
uploader.on('fileQueued', function (file) {
// console.log('文件加入')
// console.log('WU_SWF',WU_SWF)
var img;
if (options.multi) {
if (img_uploaded_num >= options.maxPhoto) {
alert('图片不能超过' + options.maxPhoto + '张');
return;
}
img = renderImg(renderItem(file, item), file);
if (img_uploaded_num >= options.maxPhoto) {
item.hide();
}
} else {
btns.hide();
item.attr('id', file.id);
img = renderImg(item, file);
}
// 创建缩略图
this.makeThumb(file, function (error, src) {
if (error) {
img.replaceWith('');
return;
}
$(' ').prependTo(img.parent());
}, options.thumb_width, options.thumb_height);
});
uploader.on('uploadProgress', function (file, percentage) {
var item = element.find('#' + file.id), el = item.find('.vc-img-loading');
// 避免重复创建
if (!el.length) {
el = $('').appendTo(item.find('.vc-img-img'));
}
el.find('p').text('上传中');
});
// 文件上传失败,显示上传出错。
uploader.on('uploadError', function (file) {
if (uploaded[fn] == '') {
var fn = file.source.source.filename;
var item = $('#' + file.id),
el = item.find('.vc-img-error');
if (!el.length) {
el = $('').appendTo(item.find('.vc-img-img'));
}
el.find('p').text('上传失败');
}
});
// 文件上传成功
uploader.on('uploadSuccess', function (file, rs) {
// console.log('触发uploadSuccess,文件上传成功');
if (rs) uploadSuccess(file, rs);
});
// 完成上传完了,成功或者失败,先删除加载进度条。(成功或失败之后才触发)
uploader.on('uploadComplete', function (file) {
// console.log('触发uploadComplete,完成上传完了,成功或者失败');
element.find('#' + file.id).find('.vc-img-loading').remove();
});
uploader.on('error', function (type, file) {
console.log(type)
if (type == 'F_DUPLICATE') {
toast('图片 "' + file.name + '" 已经上传过,请勿重复上传');
}
});
return false;
}
};
})(jQuery, window, document);
function ImageButtonInit(btn, options, force) { //生成顶部删除按钮上传
var btn = $(btn), options = options || btn.data('options');
try {
if (typeof options == 'string') options = $.parseJSON("{" + options + "}");
} catch (e) {
console.log("解析JSON出错(img-upload):" + options);
return;
}
options = options || {};
if (!force && options && options.render === false) return;
var emptyCls = 'img-wrap-empty', closest;
closest = options.closest ? btn.parent().closest(options.closest) : null;
if (closest && closest.length) {
options.el = closest.find(options.target),
options.ipt = closest.find(options.input);
} else {
options.el = $(options.target),
options.ipt = $(options.input);
}
options.src = options.src || options.ipt.val();
options.callback = function (rs, file, uploader) {
options.ipt.val(rs.path);
options.el.removeClass(emptyCls);
};
ImageUploader(btn, options);
if (options.el.length) {
$(' ').appendTo(options.el).on('click', function () {
options.ipt.val('');
options.el.find('img').remove();
options.el.addClass(emptyCls);
});
var cls = 'img-wrap-hover';
options.el.hover(function () {
if (options.el.find('img').length) options.el.addClass(cls)
}, function () {
options.el.removeClass(cls)
});
if (!options.el.find('img').length) options.el.addClass(emptyCls)
}
}
function ImageUploader(el, options) {//调用上传方法
var opt = $.extend({}, $.fn.imageGroup.defaults, options)
options = options || {};
var img_uploaded_num = 100,
error = '图片上传失败';
function setSrc(img, src) {
if (!src) return;
if (!img) img = $();
if (img.is('img')) {
img.attr('src', src);
} else {
var _img = img.find('img');
if (_img.length > 0) {
_img.eq(0).attr('src', src);
} else {
img.prepend(' ');
// console.log(img.html())
}
}
}
if (options.src && options.el) {
setSrc(options.el, SOSO.getPathImage(options.src));
}
// console.log(UPLOAD_IMG);
var uploader = WebUploader.create({
auto: true,
swf: WU_SWF,
server: options.uploadAction || UPLOAD_IMG,
duplicate: true,
pick: {
id: el,
multiple: opt.multi
},
thumb: {
width: 200,
height: 200,
quality: 100,
allowMagnify: false,
crop: false
},
accept: {
title: 'Images',
extensions: 'gif,jpg,jpeg,bmp,png',
mimeTypes: 'image/gif,image/jpg,image/jpeg,image/png,image/bmp'
}
}).on('fileQueued', function (file) {//push file
// console.log('isMultiple',options);
if (options.multi && img_uploaded_num >= options.max) {
toast('图片不能超过' + options.max + '张');
return;
}
if (options.el) {
this.makeThumb(file, function (error, src) {
if (error) return toast('读取图片失败');
setSrc(options.el, src);
});
}
}).on('uploadError', function (file) {
uploader.reset();
toast(error);
}).on('uploadSuccess', function (file, rs) {
if(rs){
if (1 != rs.state) {
toast(error);
return;
}
setSrc(options.el, rs.content.origin + rs.content.path);
if (options.callback) {
options.callback.call(null, rs.content, file);
}
}
});
}
function ImageSelector(options) {
options = options || {};
SOSO.Dialog.image({
singleSelect: !options.multi,
max: options.max,
callback: function (rs) {
if ($.isFunction(options.callback)) {
return options.callback(rs);
}
return true;
}
});
}