multiimage.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596
  1. (function (K) {
  2. var ZYFILE = {
  3. fileInput: null, // 选择文件按钮dom对象
  4. uploadInput: null, // 上传文件按钮dom对象
  5. dragDrop: null, //拖拽敏感区域
  6. url: "", // 上传action路径
  7. filePostName: "imgFile", // 上传action路径
  8. uploadFile: [], // 需要上传的文件数组
  9. lastUploadFile: [], // 上一次选择的文件数组,方便继续上传使用
  10. perUploadFile: [], // 存放永久的文件数组,方便删除使用
  11. fileNum: 0, // 代表文件总个数,因为涉及到继续添加,所以下一次添加需要在它的基础上添加索引
  12. /* 提供给外部的接口 */
  13. filterFile: function (files) { // 提供给外部的过滤文件格式等的接口,外部需要把过滤后的文件返回
  14. return files;
  15. },
  16. onSelect: function (selectFile, files) { // 提供给外部获取选中的文件,供外部实现预览等功能 selectFile:当前选中的文件 allFiles:还没上传的全部文件
  17. },
  18. onDelete: function (file, files) { // 提供给外部获取删除的单个文件,供外部实现删除效果 file:当前删除的文件 files:删除之后的文件
  19. },
  20. onProgress: function (file, loaded, total) { // 提供给外部获取单个文件的上传进度,供外部实现上传进度效果
  21. },
  22. onSuccess: function (file, responseInfo) { // 提供给外部获取单个文件上传成功,供外部实现成功效果
  23. },
  24. onFailure: function (file, responseInfo) { // 提供给外部获取单个文件上传失败,供外部实现失败效果
  25. },
  26. onComplete: function (responseInfo) { // 提供给外部获取全部文件上传完成,供外部实现完成效果
  27. },
  28. /* 内部实现功能方法 */
  29. // 获得选中的文件
  30. //文件拖放
  31. funDragHover: function (e) {
  32. e.stopPropagation();
  33. e.preventDefault();
  34. this[e.type === "dragover" ? "onDragOver" : "onDragLeave"].call(e.target);
  35. return this;
  36. },
  37. // 获取文件
  38. funGetFiles: function (e) {
  39. var self = this;
  40. // 取消鼠标经过样式
  41. this.funDragHover(e);
  42. // 从事件中获取选中的所有文件
  43. var files = e.target.files || e.dataTransfer.files;
  44. self.lastUploadFile = this.uploadFile;
  45. this.uploadFile = this.uploadFile.concat(this.filterFile(files));
  46. var tmpFiles = [];
  47. // 因为jquery的inArray方法无法对object数组进行判断是否存在于,所以只能提取名称进行判断
  48. var lArr = []; // 之前文件的名称数组
  49. var uArr = []; // 现在文件的名称数组
  50. $.each(self.lastUploadFile, function (k, v) {
  51. lArr.push(v.name);
  52. });
  53. $.each(self.uploadFile, function (k, v) {
  54. uArr.push(v.name);
  55. });
  56. $.each(uArr, function (k, v) {
  57. // 获得当前选择的每一个文件 判断当前这一个文件是否存在于之前的文件当中
  58. if ($.inArray(v, lArr) < 0) { // 不存在
  59. tmpFiles.push(self.uploadFile[k]);
  60. }
  61. });
  62. // 如果tmpFiles进行过过滤上一次选择的文件的操作,需要把过滤后的文件赋值
  63. //if(tmpFiles.length!=0){
  64. this.uploadFile = tmpFiles;
  65. //}
  66. // 调用对文件处理的方法
  67. this.funDealtFiles();
  68. return true;
  69. },
  70. // 处理过滤后的文件,给每个文件设置下标
  71. funDealtFiles: function () {
  72. var self = this;
  73. // 目前是遍历所有的文件,给每个文件增加唯一索引值
  74. $.each(this.uploadFile, function (k, v) {
  75. // 因为涉及到继续添加,所以下一次添加需要在总个数的基础上添加
  76. v.index = self.fileNum;
  77. // 添加一个之后自增
  78. self.fileNum++;
  79. });
  80. // 先把当前选中的文件保存备份
  81. var selectFile = this.uploadFile;
  82. // 要把全部的文件都保存下来,因为删除所使用的下标是全局的变量
  83. this.perUploadFile = this.perUploadFile.concat(this.uploadFile);
  84. // 合并下上传的文件
  85. this.uploadFile = this.lastUploadFile.concat(this.uploadFile);
  86. // 执行选择回调
  87. this.onSelect(selectFile, this.uploadFile);
  88. return this;
  89. },
  90. // 处理需要删除的文件 isCb代表是否回调onDelete方法
  91. // 因为上传完成并不希望在页面上删除div,但是单独点击删除的时候需要删除div 所以用isCb做判断
  92. funDeleteFile: function (delFileIndex, isCb) {
  93. var self = this; // 在each中this指向没个v 所以先将this保留
  94. var tmpFile = []; // 用来替换的文件数组
  95. // 合并下上传的文件
  96. var delFile = this.perUploadFile[delFileIndex];
  97. // 目前是遍历所有的文件,对比每个文件 删除
  98. $.each(this.uploadFile, function (k, v) {
  99. if (delFile != v) {
  100. // 如果不是删除的那个文件 就放到临时数组中
  101. tmpFile.push(v);
  102. }
  103. });
  104. this.uploadFile = tmpFile;
  105. if (isCb) { // 执行回调
  106. // 回调删除方法,供外部进行删除效果的实现
  107. self.onDelete(delFile, this.uploadFile);
  108. }
  109. return true;
  110. },
  111. // 上传多个文件
  112. funUploadFiles: function () {
  113. var self = this; // 在each中this指向没个v 所以先将this保留
  114. // 遍历所有文件 ,在调用单个文件上传的方法
  115. $.each(this.uploadFile, function (k, v) {
  116. self.funUploadFile(v);
  117. });
  118. },
  119. // 上传单个个文件
  120. funUploadFile: function (file) {
  121. var self = this; // 在each中this指向没个v 所以先将this保留
  122. var formdata = new FormData();
  123. formdata.append(self.filePostName, file);
  124. var xhr = new XMLHttpRequest();
  125. // 绑定上传事件
  126. // 进度
  127. xhr.upload.addEventListener("progress", function (e) {
  128. // 回调到外部
  129. self.onProgress(file, e.loaded, e.total);
  130. }, false);
  131. // 完成
  132. xhr.addEventListener("load", function (e) {
  133. // 从文件中删除上传成功的文件 false是不执行onDelete回调方法
  134. self.funDeleteFile(file.index, false);
  135. // 回调到外部
  136. self.onSuccess(file, xhr.responseText);
  137. if (self.uploadFile.length == 0) {
  138. // 回调全部完成方法
  139. self.onComplete("全部完成");
  140. }
  141. }, false);
  142. // 错误
  143. xhr.addEventListener("error", function (e) {
  144. // 回调到外部
  145. self.onFailure(file, xhr.responseText);
  146. }, false);
  147. xhr.open("POST", self.url, true);
  148. //xhr.setRequestHeader("X_FILENAME", file.name);
  149. xhr.send(formdata);
  150. },
  151. // 返回需要上传的文件
  152. funReturnNeedFiles: function () {
  153. return this.uploadFile;
  154. },
  155. // 初始化
  156. init: function () { // 初始化方法,在此给选择、上传按钮绑定事件
  157. var self = this; // 克隆一个自身
  158. self.uploadFile = []; // 需要上传的文件数组
  159. self.lastUploadFile = []; // 上一次选择的文件数组,方便继续上传使用
  160. self.perUploadFile = []; // 存放永久的文件数组,方便删除使用
  161. self.fileNum = 0; // 代表文件总个数,因为涉及到继续添加,所以下一次添加需要在它的基础上添加索引
  162. if (this.dragDrop) {
  163. this.dragDrop.addEventListener("dragover", function (e) { self.funDragHover(e); }, false);
  164. this.dragDrop.addEventListener("dragleave", function (e) { self.funDragHover(e); }, false);
  165. this.dragDrop.addEventListener("drop", function (e) { self.funGetFiles(e); }, false);
  166. }
  167. // 如果选择按钮存在
  168. if (self.fileInput) {
  169. // 绑定change事件
  170. this.fileInput.addEventListener("change", function (e) {
  171. self.funGetFiles(e);
  172. this.value = '';
  173. }, false);
  174. }
  175. // 如果上传按钮存在
  176. if (self.uploadInput) {
  177. // 绑定click事件
  178. this.uploadInput.addEventListener("click", function (e) {
  179. self.funUploadFiles(e);
  180. }, false);
  181. }
  182. }
  183. };
  184. $.fn.zyUpload = function (options, param) {
  185. var otherArgs = Array.prototype.slice.call(arguments, 1);
  186. if (typeof options == 'string') {
  187. var fn = this[0][options];
  188. if ($.isFunction(fn)) {
  189. return fn.apply(this, otherArgs);
  190. } else {
  191. throw ("zyUpload - No such method: " + options);
  192. }
  193. }
  194. return this.each(function () {
  195. var para = {}; // 保留参数
  196. var self = this; // 保存组件对象
  197. var defaults = {
  198. itemWidth: "140px", // 文件项的宽度
  199. itemHeight: "120px", // 文件项的高度
  200. url: "/upload/UploadAction", // 上传文件的路径
  201. filePostName: "imgFile", // name值
  202. multiple: true, // 是否可以多个文件上传
  203. dragDrop: true, // 是否可以拖动上传文件
  204. del: true, // 是否可以删除文件
  205. finishDel: false, // 是否在上传文件完成后删除预览
  206. /* 提供给外部的接口方法 */
  207. onSelect: function (selectFiles, files) { },// 选择文件的回调方法 selectFile:当前选中的文件 allFiles:还没上传的全部文件
  208. onDelete: function (file, files) { }, // 删除一个文件的回调方法 file:当前删除的文件 files:删除之后的文件
  209. onSuccess: function (file) { }, // 文件上传成功的回调方法
  210. onFailure: function (file) { }, // 文件上传失败的回调方法
  211. onComplete: function (responseInfo) { }, // 上传完成的回调方法
  212. };
  213. para = $.extend(defaults, options);
  214. this.init = function () {
  215. this.createHtml(); // 创建组件html
  216. this.createCorePlug(); // 调用核心js
  217. };
  218. /**
  219. * 功能:创建上传所使用的html
  220. * 参数: 无
  221. * 返回: 无
  222. */
  223. this.createHtml = function () {
  224. var multiple = ""; // 设置多选的参数
  225. para.multiple ? multiple = "multiple" : multiple = "";
  226. var html = '';
  227. html += [
  228. '<div class="ke-swfupload">',
  229. '<div class="ke-swfupload-top">',
  230. '<div class="ke-inline-block ke-swfupload-button">',
  231. '<span class="ke-button-common ke-button-outer">',
  232. '<input type="button" class="ke-button-common ke-button webuploader_pick" value="选择文件" />',
  233. '</span>',
  234. '</div>',
  235. '<div class="ke-inline-block ke-swfupload-desc">' + options.uploadDesc + '<span class="status_info"></span></div>',
  236. '<span class="ke-button-common ke-button-outer ke-swfupload-startupload">',
  237. '<input type="button" class="ke-button-common ke-button upload_btn" value="' + options.startButtonValue + '" />',
  238. '</span>',
  239. '</div>',
  240. '<div class="ke-swfupload-body upload_preview preview"></div>',
  241. '</div>',
  242. '<form class="uploadForm" action="' + para.url + '" method="post" enctype="multipart/form-data">',
  243. '<input class="fileImage" style="display:none;" type="file" size="30" name="fileImage" ' + multiple + '>',
  244. '<button type="button" class="upload_submit_btn fileSubmit">确认上传文件</button>',
  245. '</form>',
  246. ].join('');
  247. $(self).append(html);
  248. $(self).data('uploadList', []);
  249. // 初始化html之后绑定按钮的点击事件
  250. this.addEvent();
  251. };
  252. /**
  253. * 功能:显示统计信息和绑定继续上传和上传按钮的点击事件
  254. * 参数: 无
  255. * 返回: 无
  256. */
  257. this.funSetStatusInfo = function (files) {
  258. return ;
  259. };
  260. /**
  261. * 功能:过滤上传的文件格式等
  262. * 参数: files 本次选择的文件
  263. * 返回: 通过的文件
  264. */
  265. this.funFilterEligibleFile = function (files) {
  266. var arrFiles = []; // 替换的文件数组
  267. for (var i = 0, file; file = files[i]; i++) {
  268. if (file.size >= 51200000) {
  269. alert('您这个"' + file.name + '"文件大小过大');
  270. } else {
  271. // 在这里需要判断当前所有文件中
  272. arrFiles.push(file);
  273. }
  274. }
  275. return arrFiles;
  276. };
  277. /**
  278. * 功能: 处理参数和格式上的预览html
  279. * 参数: files 本次选择的文件
  280. * 返回: 预览的html
  281. */
  282. this.funDisposePreviewHtml = function (file, e) {
  283. var html = "";
  284. var imgWidth = parseInt(para.itemWidth.replace("px", "")) - 5;
  285. // 处理配置参数删除按钮
  286. var delHtml = "";
  287. if (para.del) { // 显示删除按钮
  288. delHtml = '<span class="file_del" data-index="' + file.index + '" title="删除"></span>';
  289. }
  290. // 处理不同类型文件代表的图标
  291. var fileImgSrc = "control/images/fileType/";
  292. if (file.type.indexOf("rar") > 0) {
  293. fileImgSrc = fileImgSrc + "rar.png";
  294. } else if (file.type.indexOf("zip") > 0) {
  295. fileImgSrc = fileImgSrc + "zip.png";
  296. } else if (file.type.indexOf("text") > 0) {
  297. fileImgSrc = fileImgSrc + "txt.png";
  298. } else {
  299. fileImgSrc = fileImgSrc + "file.png";
  300. }
  301. // 图片上传的是图片还是其他类型文件
  302. if (file.type.indexOf("image") == 0) {
  303. html += '<div class="upload_append_list uploadList_' + file.index + '">';
  304. html += ' <div class="file_bar">';
  305. html += ' <div style="padding:5px;">';
  306. html += ' <p class="file_name">' + file.name + '</p>';
  307. html += delHtml; // 删除按钮的html
  308. html += ' </div>';
  309. html += ' </div>';
  310. html += ' <a style="width:' + para.itemWidth + ';height:' + para.itemHeight + ';line-height:' + para.itemHeight + ';" href="#" >';
  311. html += ' <img class="upload_image uploadImage_' + file.index + '" src="' + e.target.result + '"/>';
  312. /* html += ' <div class="uploadImg" style="width:'+para.itemWidth+'px;)">';
  313. html += ' </div>'; */
  314. html += ' </a>';
  315. html += ' <p class="file_progress uploadProgress_' + file.index + '" ></p>';
  316. html += ' <p class="file_failure uploadFailure_' + file.index + '" >上传失败,请重试</p>';
  317. html += ' <p class="file_success uploadSuccess_' + file.index + '" ></p>';
  318. html += '</div>';
  319. } else {
  320. html += '<div class="upload_append_list uploadList_' + file.index + '">';
  321. html += ' <div class="file_bar">';
  322. html += ' <div style="padding:5px;">';
  323. html += ' <p class="file_name">' + file.name + '</p>';
  324. html += delHtml; // 删除按钮的html
  325. html += ' </div>';
  326. html += ' </div>';
  327. html += ' <a style="width:' + para.itemWidth + ';height:' + para.itemHeight + ';line-height:' + para.itemHeight + ';" href="#" >';
  328. html += ' <img class="upload_image uploadImage_' + file.index + '" src="' + fileImgSrc + '"/>';
  329. html += ' </a>';
  330. html += ' <p class="file_progress uploadProgress_' + file.index + '" ></p>';
  331. html += ' <p class="file_failure uploadFailure_' + file.index + '" >上传失败,请重试</p>';
  332. html += ' <p class="file_success uploadSuccess_' + file.index + '" ></p>';
  333. html += '</div>';
  334. }
  335. return html;
  336. };
  337. /**
  338. * 功能:调用核心插件
  339. * 参数: 无
  340. * 返回: 无
  341. */
  342. this.createCorePlug = function () {
  343. var params = {
  344. fileInput: $(self).find(".fileImage").get(0),
  345. uploadInput: $(self).find(".fileSubmit").get(0),
  346. dragDrop: $(self).find(".fileDragArea").get(0),
  347. url: $(self).find(".uploadForm").attr("action"),
  348. filePostName: para.filePostName,
  349. filterFile: function (files) {
  350. // 过滤合格的文件
  351. return self.funFilterEligibleFile(files);
  352. },
  353. onSelect: function (selectFiles, allFiles) {
  354. para.onSelect(selectFiles, allFiles); // 回调方法
  355. self.funSetStatusInfo(ZYFILE.funReturnNeedFiles()); // 显示统计信息
  356. var html = '', i = 0;
  357. // 组织预览html
  358. var funDealtPreviewHtml = function () {
  359. file = selectFiles[i];
  360. if (file) {
  361. var reader = new FileReader()
  362. reader.onload = function (e) {
  363. // 处理下配置参数和格式的html
  364. html += self.funDisposePreviewHtml(file, e);
  365. i++;
  366. // 再接着调用此方法递归组成可以预览的html
  367. funDealtPreviewHtml();
  368. }
  369. reader.readAsDataURL(file);
  370. } else {
  371. // 走到这里说明文件html已经组织完毕,要把html添加到预览区
  372. funAppendPreviewHtml(html);
  373. }
  374. };
  375. // 添加预览html
  376. var funAppendPreviewHtml = function (html) {
  377. // 添加到添加按钮前
  378. $(self).find(".preview").append(html);
  379. // 绑定删除按钮
  380. funBindDelEvent();
  381. funBindHoverEvent();
  382. };
  383. // 绑定删除按钮事件
  384. var funBindDelEvent = function () {
  385. if ($(self).find(".file_del").length > 0) {
  386. // 删除方法
  387. $(self).find(".file_del").click(function () {
  388. ZYFILE.funDeleteFile(parseInt($(this).attr("data-index")), true);
  389. return false;
  390. });
  391. }
  392. if ($(self).find(".file_edit").length > 0) {
  393. // 编辑方法
  394. $(self).find(".file_edit").click(function () {
  395. // 调用编辑操作
  396. //ZYFILE.funEditFile(parseInt($(this).attr("data-index")), true);
  397. return false;
  398. });
  399. }
  400. };
  401. // 绑定显示操作栏事件
  402. var funBindHoverEvent = function () {
  403. $(self).find(".upload_append_list").hover(
  404. function (e) {
  405. $(this).find(".file_bar").addClass("file_hover");
  406. }, function (e) {
  407. $(this).find(".file_bar").removeClass("file_hover");
  408. }
  409. );
  410. };
  411. funDealtPreviewHtml();
  412. },
  413. onDelete: function (file, files) {
  414. // 移除效果
  415. $(self).find(".uploadList_" + file.index).fadeOut();
  416. // 重新设置统计栏信息
  417. self.funSetStatusInfo(files);
  418. var list = $(self).data('uploadList');
  419. $.each(list, function (k, v) {
  420. if (file.index == v.index) {
  421. list.splice(k, 1);
  422. }
  423. })
  424. },
  425. onProgress: function (file, loaded, total) {
  426. var eleProgress = $(self).find(".uploadProgress_" + file.index), percent = (loaded / total * 100).toFixed(2) + '%';
  427. if (eleProgress.is(":hidden")) {
  428. eleProgress.show();
  429. }
  430. eleProgress.css("width", percent);
  431. },
  432. onSuccess: function (file, response) {
  433. file.res = JSON.parse(response);
  434. $(self).data('uploadList').push(file);
  435. $(self).find(".uploadProgress_" + file.index).hide();
  436. $(self).find(".uploadSuccess_" + file.index).show();
  437. //$(self).find(".uploadInf").append("<p>上传成功,文件地址是:" + response + "</p>");
  438. // 根据配置参数确定隐不隐藏上传成功的文件
  439. if (para.finishDel) {
  440. // 移除效果
  441. $(self).find(".uploadList_" + file.index).fadeOut();
  442. // 重新设置统计栏信息
  443. self.funSetStatusInfo(ZYFILE.funReturnNeedFiles());
  444. }
  445. },
  446. onFailure: function (file) {
  447. $(self).find(".uploadProgress_" + file.index).hide();
  448. $(self).find(".uploadSuccess_" + file.index).show();
  449. $(self).find(".uploadInf").append("<p>文件" + file.name + "上传失败!</p>");
  450. //$(self).find(".uploadImage_" + file.index).css("opacity", 0.2);
  451. },
  452. onComplete: function (response) {
  453. },
  454. onDragOver: function () {
  455. $(this).addClass("upload_drag_hover");
  456. },
  457. onDragLeave: function () {
  458. $(this).removeClass("upload_drag_hover");
  459. }
  460. };
  461. ZYFILE = $.extend(ZYFILE, params);
  462. ZYFILE.init();
  463. };
  464. /**
  465. * 功能:绑定事件
  466. * 参数: 无
  467. * 返回: 无
  468. */
  469. this.addEvent = function () {
  470. // 如果快捷添加文件按钮存在
  471. if ($(self).find(".filePicker").length > 0) {
  472. // 绑定选择事件
  473. $(self).find(".filePicker").bind("click", function (e) {
  474. $(self).find(".fileImage").click();
  475. });
  476. }
  477. // 绑定继续添加点击事件
  478. $(self).find(".webuploader_pick").bind("click", function (e) {
  479. $(self).find(".fileImage").click();
  480. });
  481. // 绑定上传点击事件
  482. $(self).find(".upload_btn").bind("click", function (e) {
  483. // 判断当前是否有文件需要上传
  484. if (ZYFILE.funReturnNeedFiles().length > 0) {
  485. $(self).find(".fileSubmit").click();
  486. } else {
  487. alert("请先选中文件再点击上传");
  488. }
  489. });
  490. // 如果快捷添加文件按钮存在
  491. if ($(self).find(".rapidAddImg").length > 0) {
  492. // 绑定添加点击事件
  493. $(self).find(".rapidAddImg").bind("click", function (e) {
  494. $(self).find(".fileImage").click();
  495. });
  496. }
  497. };
  498. // 初始化上传控制层插件
  499. this.init();
  500. });
  501. };
  502. })(KindEditor);
  503. KindEditor.plugin('multiimage', function (K) {
  504. var self = this, name = 'multiimage',
  505. formatUploadUrl = K.undef(self.formatUploadUrl, true),
  506. uploadJson = K.undef(self.uploadJson, self.basePath + '/Home/Notify/mulUploadImg'),
  507. imgPath = self.pluginsPath + 'multiimage/images/',
  508. imageSizeLimit = K.undef(self.imageSizeLimit, '2MB'),
  509. imageFileTypes = K.undef(self.imageFileTypes, '*.jpg;*.gif;*.png'),
  510. imageUploadLimit = K.undef(self.imageUploadLimit, 20),
  511. filePostName = K.undef(self.filePostName, 'imgFile'),
  512. lang = self.lang(name + '.');
  513. self.plugin.multiImageDialog = function (options) {
  514. var clickFn = options.clickFn,
  515. uploadDesc = K.tmpl(lang.uploadDesc, { uploadLimit: imageUploadLimit, sizeLimit: imageSizeLimit });
  516. var html = [
  517. '<div style="padding:20px;">',
  518. '<div class="swfupload">',
  519. '</div>',
  520. '</div>'
  521. ].join('');
  522. var dialog = self.createDialog({
  523. name: name,
  524. width: 650,
  525. height: 510,
  526. title: self.lang(name),
  527. body: html,
  528. previewBtn: {
  529. name: lang.insertAll,
  530. click: function (e) {
  531. var urlList = [];
  532. $.each(uploadEle.data('uploadList'), function (k, v) {
  533. urlList.push({
  534. url: v.res.url,
  535. title: v.name,
  536. });
  537. })
  538. clickFn.call(self, urlList);
  539. }
  540. },
  541. yesBtn: {
  542. name: lang.clearAll,
  543. click: function (e) {
  544. uploadEle.find('.file_del').click();
  545. }
  546. },
  547. beforeRemove: function () {
  548. }
  549. }),
  550. div = dialog.div,
  551. uploadEle = $(div[0]).find('.swfupload').zyUpload({
  552. itemWidth: "120px", // 文件项的宽度
  553. itemHeight: "100px", // 文件项的高度
  554. url: uploadJson, // 上传文件的路径
  555. multiple: true, // 是否可以多个文件上传
  556. dragDrop: false, // 是否可以拖动上传文件
  557. del: true, // 是否可以删除文件
  558. finishDel: false, // 是否在上传文件完成后删除预览
  559. uploadDesc: uploadDesc,
  560. startButtonValue: lang.startUpload,
  561. filePostName: filePostName,
  562. /* 外部获得的回调接口 */
  563. onSelect: function (files, allFiles) { // 选择文件的回调方法
  564. },
  565. onDelete: function (file, surplusFiles) { // 删除一个文件的回调方法
  566. },
  567. onSuccess: function (file, res) { // 文件上传成功的回调方法
  568. //zyUpload
  569. },
  570. onFailure: function (file) { // 文件上传失败的回调方法
  571. },
  572. onComplete: function (responseInfo) { // 上传完成的回调方法
  573. }
  574. });
  575. return dialog;
  576. };
  577. self.clickToolbar(name, function () {
  578. self.plugin.multiImageDialog({
  579. clickFn: function (urlList) {
  580. if (urlList.length === 0) {
  581. return;
  582. }
  583. K.each(urlList, function (i, data) {
  584. if (self.afterUpload) {
  585. self.afterUpload.call(self, data.url, data, 'multiimage');
  586. }
  587. self.exec('insertimage', data.url, data.title, data.width, data.height, data.border, data.align);
  588. });
  589. // Bugfix: [Firefox] 上传图片后,总是出现正在加载的样式,需要延迟执行hideDialog
  590. setTimeout(function () {
  591. self.hideDialog().focus();
  592. }, 0);
  593. }
  594. });
  595. });
  596. });