/**
|
* 附件管理
|
* 包括:
|
* 文件查看
|
* 文件上传
|
* 文件预览
|
* 文件分享
|
* weidy重新调整一下
|
* 所有的配置项需需要先传入主键,所有的操作都需要先传入主键
|
* 以前的存在不同的页面都使用这个组件时,配置信息会被覆盖的情况
|
*/
|
layui.define(['layer','util','table','form','upload','code','FilePreviewBase'],function(exports){
|
var fileManager = function(){
|
this.moduleKey='vciWebFileManager';
|
this.backPath = configData.compatibility?path:configData.fileServicePath;
|
this.processPath = configData.compatibility?path:configData.processServicePath;
|
this.url={
|
process:{//流程相关的url
|
dataGrid:'/webProcessDefineController/dataGridFileInProcess',
|
previewUrlByFileOid:'/webFileController/previewFile',//在流程中的单个文件的预览
|
previewUrlByDataOid:'/webProcessDefineController/getPreviewUrlByDataOid'//根据业务数据来获取文件预览的路径
|
},
|
bus:{//普通业务相关的url
|
controller:'vciFileQueryController/',
|
dataGrid:'gridFiles',
|
previewUrlByFileOid:'previewFile'//在流程中的单个文件的预览
|
},
|
downloadByFileOid:'vciFileDownloadController/downloadByFileOid',//下载文件
|
reviseByFileOid:'vciFileUploadController/uploadFile'//修改文件
|
//这个组件只能提供公共的路径,特殊业务的按钮需要自行注册
|
};
|
this.id="vciWebFileManager";
|
this.sourceData = {};
|
this.columns = [];
|
|
this.config = {};
|
this.defaultConfig = {
|
inProcess:false,//是否是流程中的值
|
showInDialog : false,//显示到窗口中
|
dataIsProcessInstance : false,//是否为流程实例
|
reviseButton : false
|
};
|
this.defaultButtonInfos = [{
|
uniqueFlag: "DOWNLOADFILE",
|
alias: '下载文件'
|
},{
|
uniqueFlag:'PREVIEW',
|
alias:'预览'
|
}];
|
this.defaultReviseButtonInfo = {
|
uniqueFlag: 'revisefile',
|
alias: '修改'
|
};
|
this.buttonIconMap = {
|
DOWNLOADFILE:"layui-icon-download-circle",
|
PREVIEW:"layui-icon-carousel",
|
revisefile:"layui-icon-upload"
|
};
|
this.getContent = function(){//不调用
|
return "";
|
};
|
this.getButtonHtml = function(id){
|
//按钮的html
|
var that = this;
|
var options = that.getConfig(id);
|
if(options && $webUtil.isNull(options['toolbarId'])){
|
that.updateConfig(id,"toolbarId",'#toolbar_' + id);
|
that.updateConfig(id,'destoryToolbar',true);
|
return '<div id="toolbar_' + id +'" layui-filter="toolbar_' + id + '" class="layui-btn-container"></div>';
|
}else{
|
return '';
|
}
|
};
|
this.getTableHtml = function(id){
|
var that = this;
|
//表格的html
|
var options = that.getConfig(id);
|
if(options && $webUtil.isNull(options['tableId'])){
|
that.updateConfig(id,'tableId','#table_' + id);
|
that.updateConfig(id,'destoryTable',true);
|
return '<table id="table_' +id+ '" lay-filter="' + id +'"></table>';
|
}else{
|
return '';
|
}
|
};
|
this.init = function(){//不调用
|
var that = this;
|
$webUtil.copyConfig(that,that.moduleKey);
|
};
|
this.setConfig = function(id,options){
|
var that = this;
|
//设置配置项,自动继承默认的配置
|
var ops = {};
|
$.extend(ops,that.defaultConfig,options);
|
/**
|
* 配置相关的内容
|
*
|
*/
|
that.config[id] = ops;
|
};
|
this.updateConfig = function(id,key,value){
|
//更新配置
|
var that = this;
|
var options = that.getConfig(id);
|
options[key] = value;
|
that.config[id]=options;
|
};
|
this.getConfig = function(id){
|
//获取配置项
|
var that = this;
|
if(id in that.config){
|
return that.config[id];
|
}
|
return {};
|
};
|
this.destoryFileManage = function(id){
|
//销毁
|
var that = this;
|
var options = that.getConfig(id);
|
if(options.destoryToolbar){
|
//是这个组件里自己加的
|
$(options.toolbarId).remove();
|
}else{
|
//删除已经存在的按钮
|
$(options.toolbarId).find('button').remove();
|
var searchInput = $(options.toolbarId).find('[name="fast_search_select_value"]');
|
searchInput.prev().remove();
|
searchInput.remove();
|
}
|
if(options.destoryTable){
|
$(options.tableId).remove();
|
}else{
|
//把以前的表格移除
|
var tableContent = $(options.tableId).children();
|
if(tableContent){
|
tableContent.remove();
|
}
|
}
|
delete that.config[id];
|
};
|
this.render = function(id,options){
|
var that = this;
|
if($webUtil.isNull(id)){
|
$webUtil.showErrorMsg("文件管理页面错误,在调用render方法时,没有设置主键");
|
return false;
|
}
|
if(id in that.config){
|
//如果已经存在某个页面,则先销毁
|
that.destoryFileManage(id);
|
}
|
that.setConfig(id,options);
|
options = that.getConfig(id);
|
//最先处理Html
|
that.renderHtml(id,options);
|
//处理button
|
that.renderButton(id,options);
|
//处理表格
|
that.renderTable(id,options);
|
};
|
this.renderHtml = function(id,options){
|
//处理html,如果没有传递html的id对象
|
var that = this;
|
if($webUtil.isNull(options.elem)){
|
$webUtil.showErrorMsg("没有elem属性");
|
return false;
|
}
|
$(options.elem).prepend(that.getButtonHtml(id) + that.getTableHtml(id));
|
};
|
this.renderButton = function(id,options){
|
//处理按钮
|
var that = this;
|
var buttonHtml = [];
|
var buttonIdPrefix = options.buttonIdPrefix;
|
if(!buttonIdPrefix){
|
buttonIdPrefix = id;
|
}
|
var buttonIconMap = options.buttonIconMap;
|
if(!buttonIconMap){
|
buttonIconMap = that.buttonIconMap;
|
}
|
//是在流程中,那就要全部添加
|
var buttonInfoMap = options.buttonInfoMap;
|
if(!buttonInfoMap && ( options.inProcess || options.buttonSameProcess)){
|
//流程的才添加按钮
|
buttonInfoMap = $.extend(true, [], that.defaultButtonInfos);
|
if(options.reviseButton){
|
buttonInfoMap.push( $.extend(true,{},that.defaultReviseButtonInfo));
|
}
|
}
|
if(!buttonInfoMap){
|
//这个是说明不存在,从后台去获取按钮
|
var sourceData = $.extend(true,{},options.sourceData);
|
$webUtil.createButtonHtmlEx(sourceData, buttonIconMap, $(options.toolbarId), buttonIdPrefix, [{uniqueFlag: 'refresh',alias: '刷新'}], [], function (buttons, hasViewRight, hasQueryRight) {
|
$webUtil.bindDefultButtonLisenter(that, buttonIdPrefix);
|
if(hasQueryRight){
|
$webUtil.createSearchHtml({
|
name: '文件名称'
|
}, $(options.toolbarId), buttonIdPrefix);
|
}
|
$(options.toolbarId).append('<input type="hidden" name="filecomponentid" value="' + id + '"/>');
|
});
|
}else{
|
//说明已经有按钮了
|
buttonInfoMap.push({
|
uniqueFlag: 'refresh',
|
alias: '刷新'
|
});//刷新是都有的
|
if(buttonInfoMap && buttonInfoMap.length > 0){
|
layui.each(buttonInfoMap,function(_index,_item){
|
if(_item.uniqueFlag != 'DOWNLOADFILE' || options.inProcess || options.hasDownloadRight ){
|
//下载,需要获取权限
|
buttonHtml.push($webUtil.getButtonHtmlFromBtnObject(_item, buttonIdPrefix, buttonIconMap));
|
}
|
});
|
}
|
$(options.toolbarId).prepend(buttonHtml.join(''));
|
$(options.toolbarId).append('<input type="hidden" name="filecomponentid" value="' + id + '"/>');
|
$webUtil.bindDefultButtonLisenter(that,buttonIdPrefix);
|
$webUtil.createSearchHtml({
|
name: '文件名称'
|
}, $(options.toolbarId), id);
|
}
|
};
|
this.renderTable = function(id,options){
|
//处理表格
|
var that = this;
|
var fileTableColumns = options.fileTableColumns;
|
if(!fileTableColumns){
|
fileTableColumns = that.getFileTableColumns(id,((options.inProcess || options.hasDownloadRight) == true));
|
}
|
if($webUtil.isNull(options.dataOid)){
|
$webUtil.showErrorMsg("没有业务数据的主键信息,前端调用有问题");
|
return false;
|
}
|
if(!options.inProcess && $webUtil.isNull(options.dataBtmType)){
|
$webUtil.showErrorMsg("没有业务类型的主键信息,前端调用有问题");
|
return false;
|
}
|
var queryMap = {
|
currentButtonKey:'VIEW',
|
ownbizOid:options.ownbizOid,
|
ownbizBtm:options.ownbizBtm
|
};
|
if(options.dataIsProcessInstance){
|
//是流程实例
|
queryMap['executionid'] = options.dataOid;
|
queryMap['dataOid'] = "";
|
delete queryMap['dataOid'];
|
}
|
if(options.inProcess){
|
//在流程中需要绕过权限,传输下面这三个参数
|
queryMap['viewProcessLinkBusinessDataToken']=options.sourceData['viewProcessLinkBusinessToken'];
|
queryMap['executionidOnlyNumber']=options.sourceData['executionidNoInProcess'];
|
queryMap['businessOids']=options.sourceData['businessOidsInProcess'];
|
}
|
if(options.where){
|
$.extend(queryMap,options.where);
|
}
|
var table=layui.table;
|
if(!options.pageObject){
|
options.pageObject = {
|
limit:25,
|
page:1
|
};
|
}
|
if(options.inProcess){
|
options.pageObject = false;
|
}
|
var url = options.url;
|
if($webUtil.isNull(url)){
|
url = options.inProcess?that.url.process.dataGrid:(that.url.bus.controller + that.url.bus.dataGrid);
|
}
|
var tableOption = {
|
elem : options.tableId,
|
url : url,
|
backPath:that.backPath,
|
where : queryMap,
|
selectMode : table.selectMode.muti,
|
id : id,
|
page : options.pageObject,
|
cols : [fileTableColumns],
|
height:(options.tableHeight?options.tableHeight:''),
|
done:function(res,cur,total){
|
table.on('tool(' + id + ')',function(obj){
|
var data = obj.data;//当前选择行的数据
|
var layEvent = obj.event;//点的是什么按钮
|
if(layEvent == 'PREVIEW'){
|
//that.doPreview(data.oid,id,data.id?data.id:data.name);
|
//文件预览
|
layui.use('BaseFileDownloadAction', function () {
|
var vciWebFilePreview = layui['BaseFileDownloadAction'];
|
vciWebFilePreview.PREVIEW(data.oid,{fileOid:data.oid},function (){
|
$webUtil.showErrorMsg("文件预览失败,请联系管理员")
|
})
|
})
|
}
|
});
|
}
|
};
|
table.render(tableOption);
|
}
|
this.reloadByWhere = function(id,dataOid,dataBtmType,where){
|
//利用数据重新加载列表
|
var that = this;
|
var queryMap = {
|
currentButtonKey:'VIEW'
|
};
|
if(dataOid){
|
queryMap['dataOid'] = dataOid;
|
}
|
if(dataBtmType){
|
queryMap['dataBtmType'] = dataBtmType;
|
}
|
var options = that.getConfig(id);
|
if(options.dataIsProcessInstance && dataOid){
|
queryMap['executionid'] = dataOid;
|
queryMap['dataOid'] = "";
|
delete queryMap['dataOid'];
|
}
|
if(where){
|
if(!options.where){
|
options.where = {};
|
}
|
$.extend(queryMap,options.where,where);
|
}
|
layui.table.reload(id,{
|
where:queryMap,
|
done:function(){
|
//delete this.where
|
}
|
});
|
};
|
this.getFileTableColumns = function(filecomponseoid,hasDownloadFileRight){
|
//获取文件的列表
|
var that = this;
|
var table = layui.table;
|
return [
|
table.getIndexColumn(),
|
table.getCheckColumn(),
|
{
|
field:'name',
|
title:'文件名称',
|
width:250,
|
templet:function(d){
|
if(hasDownloadFileRight){
|
//说明有下载文件的权限,那么我们就添加一个超链接
|
return '<a name="filenamedownloadlink " class="layui-btn layui-btn-intable" lay-event="PREVIEW" fileoid="' + d.oid +'" filecomponseoid="' + filecomponseoid + '">' + ($webUtil.isNotNull(d.id)?d.id:d.name) + '</a>';
|
}else{
|
if($webUtil.isNotNull(d.id)){
|
return d.id;
|
}
|
return d.name;
|
}
|
}
|
},{
|
field:'fileSize',
|
title:'大小',
|
width:80,
|
templet:function(d){
|
if(!d.fileSize || d.fileSize == null || d.fileSize*1 == 0 || isNaN(d.fileSize*1) ){
|
return "未知大小";
|
}else{
|
//原始大小是B
|
var filesize = d.fileSize*1;
|
if(filesize>1024*1024*1024*1024){
|
return parseInt(filesize/(1024*1024*1024*1024)) + "TB";
|
}else if(filesize> 1024*1024*1024){
|
return parseInt(filesize/(1024*1024*1024)) + "GB";
|
}else if(filesize> 1024*1024){
|
return parseInt(filesize/(1024*1024)) + "MB";
|
}else if(filesize> 1024){
|
return parseInt(filesize/1024) + "KB";
|
}else {
|
return filesize + "B";
|
}
|
}
|
}
|
},{
|
field:'secretGradeText',
|
title:'密级',
|
width:60,
|
hidden:(!configData.controllerSecret)
|
},{
|
field:'fileDocClassifyName',
|
title:'文档类别',
|
width:130
|
},{
|
field:'creator',
|
title:'上传人/时间',
|
width:210,
|
templet:function(d){
|
return d.creator + "(" + $webUtil.formateDateTimeNoSecond(d.createTime) + ")";
|
}
|
},{
|
field:'downloadCount',
|
title:'下载数量',
|
hidden: true,
|
width:90
|
}
|
];
|
};
|
this.refresh = function(event,thisButtonPoint){
|
var that = this;
|
//刷新,需要找到id
|
var filecomponentid = that.getFileComponentId(thisButtonPoint);
|
that.reloadByWhere(filecomponentid);
|
};
|
this.doPreview = function(fileoid,filecomponentid,fileName){
|
//执行预览
|
var that = this;
|
if($webUtil.isNull(fileoid) || $webUtil.isNull(filecomponentid)){
|
return false;
|
}
|
var options = that.getConfig(filecomponentid);
|
var url = options.previewUrl;
|
if($webUtil.isNull(url)){
|
url = that.url.bus.controller + that.url.bus.previewUrlByFileOid;
|
if(options.inProcess){
|
url = that.url.process.previewUrlByFileOid;
|
}
|
}
|
//后台主要是控制权限
|
$webUtil.post(url,{ownbizOid:options.ownbizOid,ownbizBtm:options.ownbizBtm,fileOid:fileoid},function(result){
|
if(result.success){
|
//直接调用预览的页面
|
//弹出窗口,还是选项卡显示
|
var title = '预览【' + fileName + "】";
|
if("tab" == options.showType){
|
portal.showTabByMenu(options.id + "_preview",{
|
text:title,
|
id:filecomponentid + "_preview",
|
multiCompent:true,
|
url:'usejs:FilePreviewBase?fileOids=' + fileoid + "&reswitch=" + (options.reswitch?options.reswitch:"true") + "&viewtype=" + (options.viewType?options.viewType:"pdf")
|
});
|
}else {
|
//默认是弹出窗口
|
$webUtil.dialog({
|
content:'<div id="' + filecomponentid + '_preview"></div>',
|
title:title,
|
fullScreen:true,
|
success:function(layero){
|
var preview = layui['FilePreviewBase'];
|
|
$("#" + filecomponentid + "_preview").html(preview.getContent(filecomponentid));
|
preview.init(filecomponentid,{
|
id:filecomponentid,
|
fileOids:fileoid,
|
reswitch:(options.reswitch?options.reswitch:"true"),
|
viewtype:(options.viewType?options.viewType:"pdf"),
|
showType:'inner',
|
height:$webUtil.getDialogScreenHeight({fullScreen: true})-55,
|
ownbizOid:options.ownbizOid,
|
ownbizBtm:options.ownbizBtm
|
})
|
}
|
})
|
}
|
}else if(result.code == "notsupportpreview"){
|
$webUtil.showMsg("您选择的文件不支持预览,将为您跳转至下载文件",function(){
|
that.downloadFileByOid(fileoid,filecomponentid);
|
});
|
}else{
|
$webUtil.showErrorMsg(result.msg);
|
}
|
},function(xhr,error){
|
$webUtil.showErrorMsg("在验证是否可以预览的时候出现了错误,可能是文件服务没有启动");
|
},options.inProcess?that.processPath:that.backPath);
|
};
|
this.downloadFileByOid =function(oid,filecomponentid){
|
var that = this;
|
//下载文件
|
var iframeId = MD5(oid + $webUtil.getSystemVar($webUtil.systemValueKey.userOid));
|
$webUtil.fileDownload(that.backPath + that.url.downloadByFileOid + "?fileOid=" + oid +"&downloadUUID=" + iframeId);
|
};
|
this.getFileComponentId = function(button){
|
//根据按钮所在的位置获取文件组件的ID;
|
var that = this;
|
var filecomponentid = $(button).parent().find('[name="filecomponentid"]').val();
|
if($webUtil.isNull(filecomponentid)){
|
$webUtil.showErrorMsg("filecomponentid属性没有值,请前端开发人员检查");
|
return ;
|
}
|
return filecomponentid;
|
};
|
this.PREVIEW = function(event,thisButtonPoint){
|
//预览按钮
|
var that = this;
|
var filecomponentid = that.getFileComponentId(thisButtonPoint);
|
var fileoid = $webUtil.getOidFromGrid(filecomponentid,true,true);
|
if(!fileoid){
|
return false;
|
}
|
var name = $webUtil.getOidFromGrid(filecomponentid,false,false,'name');
|
that.doPreview(fileoid,filecomponentid,name);
|
};
|
this.DOWNLOADFILE = function(event,thisButtonPoint){
|
//下载按钮
|
var that = this;
|
var filecomponentid = that.getFileComponentId(thisButtonPoint);
|
var fileoid = $webUtil.getOidFromGrid(filecomponentid,true,true);
|
if(!fileoid){
|
return false;
|
}
|
that.downloadFileByOid(fileoid,filecomponentid);
|
};
|
this.revisefile = function(event,thisButtonPoint){
|
var that = this;
|
var filecomponentid = that.getFileComponentId(thisButtonPoint);
|
var fileoid = $webUtil.getOidFromGrid(filecomponentid,true,true);
|
if(!fileoid){
|
return false;
|
}
|
var options = that.getConfig(filecomponentid);
|
var form = layui.form;
|
var filter ='upload_form'+options.id;
|
var uploadIndex = layer.open({
|
type:1,
|
title:'修改文件',
|
//skin:'layui-layer-lan',
|
content:'<form id="form_' + filter + '" lay-filter="' + filter + '" class="layui-form" style="margin-top:55px" enctype="multipart/form-data"></form>',
|
area:['370px','200px'],
|
closeBtn:1,
|
shade:true,
|
shadeClose:true,
|
success:function(layero){
|
form.addItems(filter,[{
|
type:'text',
|
name:'oid',
|
text:'文件主键',
|
hidden:true
|
}],function(){
|
if($("#NCFile_upload_form_file" + filter )){
|
$("#NCFile_upload_form_file" + filter).remove();
|
}
|
form.setValues({
|
fileOid:fileoid,
|
updateFileFlag:true
|
},filter);
|
$("#form_" + filter).append('<button type="button" class="layui-btn" id="button_' + filter + '" style="margin-left:100px"><i class="layui-icon"></i>选择文件后自动上传</button>');
|
var upload = layui.upload;
|
//执行实例
|
var uploadForm = upload.render({
|
elem: '#button_' + filter //绑定元素
|
,accept:'file'
|
,auto:true
|
,url: that.backPath + that.url.reviseByFileOid//上传接口
|
,before:function(obj){
|
if(form.validata(filter)){
|
var values = form.getValues(filter);
|
obj.setData(values);
|
$webUtil.showProgress("文件上传中……");
|
return true;
|
}else{
|
$webUtil.showErrorMsg("请先输入内容后再选择文件");
|
return false;
|
}
|
}
|
,done: function(result){
|
if(result.success){
|
layer.close(uploadIndex);
|
$webUtil.showMsg("修改文件成功");
|
$webUtil.closeProgress();
|
that.reloadByWhere(filecomponentid);
|
}else{
|
$webUtil.showErrorMsg(result.msg);
|
$webUtil.closeProgress();
|
}
|
}
|
,error: function(){
|
//请求异常回调
|
$webUtil.showErrorMsg("上传文件出现了异常");
|
}
|
});
|
},{},{
|
defaultColumnOneRow:1
|
});
|
}
|
});
|
};
|
this.showFileDialog = function (id,options){
|
var that = this;
|
if(!("inProcess" in options)) {
|
options.inProcess = false;
|
}
|
if(options.onUse){
|
if(!options.buttonIconMap){
|
options.buttonIconMap=[];
|
}
|
options.buttonInfoMap = [{
|
uniqueFlag: 'DOWNLOADFILE',
|
alias: '下载'
|
},{
|
uniqueFlag:'PREVIEW',
|
alias:'预览'
|
}];
|
options.hasDownloadRight=true;
|
}
|
that.setConfig(id,options);
|
$webUtil.dialog({
|
title:(options.title?options.title:'文件管理'),
|
content:'<div id="referGrid_toolbar_' + id + '" layui-filter="referGrid_toolbar_' + id + '" class="layui-table-toolbar layui-form referGrid_toolbar_'+id+'" style="height:550px;"></div>',
|
area:[(($webUtil.isNotNull(options.width) && options.width*1>1) ?options.width*1 : 950) +'px',
|
(($webUtil.isNotNull(options.height) && options.height*1>1) ?options.height*1 : 670) + 'px'],
|
success:function(layero){
|
options.elem ='#referGrid_toolbar_' + id ;
|
that.render(id,options);
|
}
|
});
|
};
|
};
|
var fm = new fileManager();
|
exports("vciWebFileManager",fm);
|
});
|