|
|
/** layui-v2.5.6 MIT License By https://www.layui.com */
|
|
|
;layui.define("layer",function(e){"use strict";
|
|
|
var t=layui.$, // 使用 layui 的 jQuery 封装
|
|
|
i=layui.layer, // 引入 layer 模块
|
|
|
n=layui.hint(), // 提示模块
|
|
|
o=layui.device(), // 设备模块
|
|
|
a={config:{}, // 配置项
|
|
|
set:function(e){var i=this;
|
|
|
return i.config=t.extend({},i.config,e),i}, // 设置配置
|
|
|
on:function(e,t){return layui.onevent.call(this,r,e,t)}}, // 监听事件
|
|
|
l=function(){var e=this;
|
|
|
return{upload:function(t){e.upload.call(e,t)}, // 上传方法
|
|
|
reload:function(t){e.reload.call(e,t)}, // 重新加载方法
|
|
|
config:e.config}}, // 返回配置
|
|
|
r="upload", // 模块名
|
|
|
u="layui-upload-file", // 文件上传的类名
|
|
|
c="layui-upload-form", // 上传表单的类名
|
|
|
f="layui-upload-iframe", // iframe 类名
|
|
|
s="layui-upload-choose", // 选择文件的类名
|
|
|
p=function(e){var i=this;
|
|
|
i.config=t.extend({},i.config,a.config,e),i.render()}; // 构造函数,初始化配置
|
|
|
|
|
|
// 定义上传组件的原型
|
|
|
p.prototype.config={
|
|
|
accept:"images", // 默认接受的文件类型是图片
|
|
|
exts:"", // 文件扩展名
|
|
|
auto:!0, // 是否自动上传
|
|
|
bindAction:"", // 绑定的上传按钮
|
|
|
url:"", // 上传的服务器地址
|
|
|
field:"file", // 上传的字段名称
|
|
|
acceptMime:"", // 接受的 MIME 类型
|
|
|
method:"post", // 请求方法
|
|
|
data:{}, // 附加的表单数据
|
|
|
drag:!0, // 是否支持拖拽上传
|
|
|
size:0, // 文件大小限制
|
|
|
number:0, // 上传文件数量限制
|
|
|
multiple:!1 // 是否支持多文件上传
|
|
|
};
|
|
|
|
|
|
// 渲染上传控件
|
|
|
p.prototype.render=function(e){
|
|
|
var i=this,e=i.config;
|
|
|
e.elem=t(e.elem), // 获取上传控件的元素
|
|
|
e.bindAction=t(e.bindAction), // 绑定上传按钮
|
|
|
i.file(), // 初始化文件上传功能
|
|
|
i.events() // 初始化事件
|
|
|
};
|
|
|
|
|
|
// 初始化文件上传功能
|
|
|
p.prototype.file=function(){
|
|
|
var e=this,i=e.config,
|
|
|
n=e.elemFile=t(['<input class="'+u+'" type="file" accept="'+i.acceptMime+'" name="'+i.field+'"',i.multiple?" multiple":"",">"].join("")),
|
|
|
a=i.elem.next(); // 获取上传元素的下一个兄弟元素
|
|
|
(a.hasClass(u)||a.hasClass(c))&&a.remove(), // 删除已存在的文件上传组件
|
|
|
o.ie&&o.ie<10&&i.elem.wrap('<div class="layui-upload-wrap"></div>'), // IE 10 以下需要包裹一个 div
|
|
|
e.isFile()?(e.elemFile=i.elem,i.field=i.elem[0].name):i.elem.after(n), // 如果是文件类型的 input,则直接使用
|
|
|
o.ie&&o.ie<10&&e.initIE(); // 如果是 IE 10 以下,进行额外的初始化处理
|
|
|
};
|
|
|
|
|
|
// 初始化 IE 特定的处理
|
|
|
p.prototype.initIE=function(){
|
|
|
var e=this,i=e.config,
|
|
|
n=t('<iframe id="'+f+'" class="'+f+'" name="'+f+'" frameborder="0"></iframe>'),
|
|
|
o=t(['<form target="'+f+'" class="'+c+'" method="post" key="set-mine" enctype="multipart/form-data" action="'+i.url+'">',"</form>"].join(""));
|
|
|
t("#"+f)[0]||t("body").append(n), // 添加 iframe
|
|
|
i.elem.next().hasClass(c)||(e.elemFile.wrap(o),i.elem.next("."+c).append(function(){var e=[];return layui.each(i.data,function(t,i){i="function"==typeof i?i():i,e.push('<input type="hidden" name="'+t+'" value="'+i+'">')}),e.join("")}()));
|
|
|
};
|
|
|
|
|
|
// 显示错误信息
|
|
|
p.prototype.msg=function(e){
|
|
|
return i.msg(e,{icon:2,shift:6});
|
|
|
};
|
|
|
|
|
|
// 检查元素是否为文件类型
|
|
|
p.prototype.isFile=function(){
|
|
|
var e=this.config.elem[0];
|
|
|
if(e)return"input"===e.tagName.toLocaleLowerCase()&&"file"===e.type;
|
|
|
};
|
|
|
|
|
|
// 文件预览
|
|
|
p.prototype.preview=function(e){
|
|
|
var t=this;
|
|
|
window.FileReader&&layui.each(t.chooseFiles,function(t,i){
|
|
|
var n=new FileReader;
|
|
|
n.readAsDataURL(i),
|
|
|
n.onload=function(){e&&e(t,i,this.result)}}
|
|
|
);
|
|
|
};
|
|
|
|
|
|
// 文件上传方法
|
|
|
p.prototype.upload=function(e,i){
|
|
|
var n,a=this,l=a.config,r=a.elemFile[0],
|
|
|
u=function(){
|
|
|
var i=0,n=0,o=e||a.files||a.chooseFiles||r.files,u=function(){
|
|
|
l.multiple&&i+n===a.fileLength&&"function"==typeof l.allDone&&l.allDone({total:a.fileLength,successful:i,aborted:n});
|
|
|
};
|
|
|
layui.each(o,function(e,o){var r=new FormData;r.append(l.field,o),layui.each(l.data,function(e,t){t="function"==typeof t?t():t,r.append(e,t)});var c={url:l.url,type:"post",data:r,contentType:!1,processData:!1,dataType:"json",headers:l.headers||{},success:function(t){i++,d(e,t),u()},error:function(){n++,a.msg("请求上传接口出现异常"),m(e),u()}};
|
|
|
"function"==typeof l.progress&&(c.xhr=function(){var e=t.ajaxSettings.xhr();return e.upload.addEventListener("progress",function(e){if(e.lengthComputable){var t=Math.floor(e.loaded/e.total*100);l.progress(t,l.item[0],e)}}),e}),t.ajax(c)})};
|
|
|
c=function(){
|
|
|
var e=t("#"+f);
|
|
|
a.elemFile.parent().submit(),
|
|
|
clearInterval(p.timer),
|
|
|
p.timer=setInterval(function(){var t,i=e.contents().find("body");try{t=i.text()}catch(n){a.msg("获取上传后的响应信息出现异常"),clearInterval(p.timer),m()}t&&(clearInterval(p.timer),i.html(""),d(0,t))},30)
|
|
|
};
|
|
|
}
|
|
|
};
|
|
|
|
|
|
// 上传成功后的处理
|
|
|
d=function(e,t){ // 调用文件上传成功后的处理
|
|
|
// 处理成功后的回调逻辑
|
|
|
};
|
|
|
|
|
|
// 其他相关代码
|
|
|
// ...
|