/**
* 附件模块提供了附件上传、下载、编辑等功能,并根据V5业务需求适配一套有UI界面的调用接口,使开发者在适配附件功能时更加快捷、方便、统一
* @module file
*/
/**
* 系统类
* @class system
* @namespace cmp
*/
/**
* 判断是否支持附件上传下载,避免盲目做业务应用
* @method filePermission
* @namespace cmp.system
* @constructor
* @returns {Boolean} 是否有附件操作功能 true:有,false:没有
*
*/
/**
* 附件部分的上传,下载,查看,编辑等<br>
* <span style="color:red">! 附件类只支持在cmp壳里面</span>
* @class att
* @namespace cmp
* @type {{}}
*/
/**
* 附件下载
* @method download
* @namespace cmp.att
* @param {Object} options 配置参数
* @param {String} options.url 附件的下载地址(默认:"")
* @param {String} [options.title] 在下载进度中的显示名称(默认:"")
* @param {Object} [options.extData] 额外参数,用于优化方面的需求的配置(目前可以配置的是文件本地缓存,避免同一个文件重复被下载)
* @param {String} [options.extData.fileId] 用于本地缓存的附件唯一ID
* @param {String} [options.extData.lastModified] 用于本地缓存的附件唯一更新时间
* @param {String} [options.extData.origin] 用于本地缓存的附件唯一的服务器地址,如:http://10.5.6.7:8080
* @param {Function} [options.success] 下载成功后的回调,附件成功下载到本地后的文件地址,文件名称,文件大小等信息返回
* @param {Function} [options.error] 下载错误的回调
* @param {Function} [options.progress] 下载进度的回调
* @example
* ```
* <script>
* cmp.att.download({
* url:"",
* title:"",
* extData:{
* fileId:id,
* lastModified:lastModified,
* origin: _.origin
* }
* progress:function(result){
* //do something with progress result
* },
* success:function(result){
* var localUrl = result.url, //保存到本地的地址
* localFilename=result.filename, //保存到本地的文件名
* size=result.size //文件大小
* ....
* }
* error:function(error){
* //do something with error obj
* }
* });
* </script>
* ```
*/
/**
* 附件上传(支持多文件上传)
* @method upload
* @namespace cmp.att
* @param {Object} options 附件上传配置参数
* @param {String} options.url 附件提交到服务器的地址
* @param {Array} options.fileList 本地附件资源的路径集,其中单个file对象的格式为<br>
* {filepath:"文件路径",fileId:"文件唯一id"}
* @param {String} [options.extData] 扩展到业务数据,如对象ID,业务类型等,用JSon字符串转码后提交到服务器
* @param {String} [options.imgIndex] 多张文件上传的时候服务器端认证的顺序关键字段,默认sortNum
* @param {Function} [options.progress] 上传进度回调
* @param {Function} [options.success] 上传成功回调
* @param {Function} [options.error] 上传失败回调
* @example
* ```
* <script>
* cmp.att.upload({
* url:"", //附件上传的服务器地址
* fileList:"",//需要上传的附件列表
* title:"", //上传进度显示名称
* extData:"",
* progress:function(result){
* var progressVal = result["pos"]; //0~1的小数,即上传进度的百分比
* },
* success:function(result){ //服务器端返回的相应数据
* var filename = result.filename,
* url = result.url,
* size = result.size
* }
* error:function(error){
* //do something
* }
* });
* </script>
* ```
*/
/**
* 获取下载列表信息
* @method getDownLoadListInfo
* @namespace cmp.att
* @param {Object} [options] 配置参数
* @param {Function} [options.success] 成功回调
* @param {Function} [options.error] 失败回调
*/
/**
* 获取上传列表信息
* @method getUploadListInfo
* @namespace cmp.att
* @param {Object} [options] 配置参数
* @param {Function} [options.success] 成功回调
* @param {Function} [options.error] 失败回调
*/
/**
* 根据路径读取文件信息
* @method getFileInfo
* @namespace cmp.att
* @param {Object} [options] 配置参数
* @param {Array} options.filepath 可以传多个文件路径,返回的信息对应到相应的文件上
* @param {Function} [options.success] 成功回调
* @param {Function} [options.error] 失败回调
*/
/**
* 查看附件内容,包括pdf,excel,word,jpeg...
* @method read
* @namespace cmp.att
* @param {Object} options 附件查看配置参数
* @param {String} options.path 附件查看的地址,可以是远程地址或者本地地址
* @param {String} options.filename 附件名称
* @param {Boolean} [options.edit] 是否可以进行编辑,默认:false(注:目前只支持office文档文件的修改编辑,且只能通过wps软件进行修改)
* @param {Object} [options.extData] 额外参数,用于优化方面的需求的配置(目前可以配置的是文件本地缓存,避免同一个文件重复被下载)
* @param {String} [options.extData.fileId] 用于本地缓存的附件唯一ID
* @param {String} [options.extData.lastModified] 用于本地缓存的附件唯一更新时间
* @param {String} [options.extData.origin] 用于本地缓存的附件唯一的服务器地址,如:http://10.5.6.7:8080
* @param {Function} [options.success] 成功回调
* @param {Function} [options.error] 失败回调
* @example
* ```
* <script>
* cmp.att.read({
* path:"", //附件查看的地址
* filename:"",//附件名称
* edit:false, //是否可以进行修改编辑
* extData:{
* fileId:id,
* lastModified:lastModified,
* origin: _.origin
* }
* success:function(result){
* //do something
* }
* error:function(error){
* //do something
* }
* });
* </script>
* ```
*/
/**
* 保存base64数据到本地
* @method saveBase64
* @namespace cmp.att
* @param {Object} options 配置参数
* @param {String} options.base64 base64数据
* @param {String} options.filename 保存成文件的名称
* @param {String} options.type 保存成文件的类型
* @param {Function} [options.success] 保存成功回调
* @param {Function} [options.error] 保存失败回调
* @example
* ```
* <script>
* cmp.att.saveBase64({
* base64:"",
* filename:"",//附件名称
* type:"png",
* success:function(result){
* //do something
* }
* error:function(error){
* //do something
* }
* });
* </script>
* ```
*/
/**
* 获取本地离线文件
* @method getOfflineFiles
* @namespace cmp.att
* @param {Object} options 配置参数
* @param {Function} [options.success] 成功回调
* @param {Function} [options.error] 失败回调
* @example
* ```
* <script>
* cmp.att.getOfflineFiles({
* success:function(result){
* //do something
* }
* error:function(error){
* //do something
* }
* });
* </script>
* ```
*/
/**
* 打开离线文档模块
* @method openOfflineFilesModule
* @namespace cmp.att
* @param {Object} options 配置参数
* @param {Function} [options.success] 成功回调
* @param {Function} [options.error] 失败回调
* @example
* ```
* <script>
* cmp.att.openOfflineFilesModule({
* success:function(result){
* //do something
* }
* error:function(error){
* //do something
* }
* });
* </script>
* ```
*/
/**
* office文件编辑
* @method officeEdit
* @namespace cmp.att
* @param {Object} options 配置参数
* @param {Function} [options.path] 文件地址
* @param {Function} [options.filename] 文件名称
* @param {Function} [options.uploadPath] 上传到服务器的地址
* @param {Function} [options.callback] 回调函数
* @example
* ```
* <script>
* cmp.att.officeEdit({
* path:"",
* filename:"",
* uploadPath:"",
* callback:function(){
* //do something
* }
* });
* </script>
* ```
*/
/**
* 专门为V5封装的一套附件上传,下载,查看和关联文档的组件
* @method initUpload
* @namespace cmp.att
* @param {String} selector 组件显示的容器
* @param {Object} options 配置参数
* @param {Number} [options.showAuth] 附件按钮显示权限<br>
* <ul>
* <li>1:只显示附件(包括:【拍照】、【语音】、【本地文件】、【本地图片】</li>
* <li>2:只显示【关联文档】</li>
* <li>其他数字:全部显示</li>
* </ul>
* @param {Object} [options.initData] 初始附件数据
* @param {Object} [options.initDocData] 初始关联文档数据
* @param {Function} [options.callback] 选择数据后的回调
* @param {Function} [options.delCallback] 删除数据的回调
* @example
* ```
* <script>
* cmp.att.initUpload("showAreaID",{
* showAuth:-1, //按钮显示权限
* initData:null, //初始附件数据
* initDocData:null, //初始关联文档数据
* callback:function(result){ //选择成功后的回调
* //do something
* },
* delCallback:function(result){ //删除数据时的回调
* //do something
* }
* });
* </script>
* ```
* @returns {AttUpload}
*/
/**
* 附件组件套件(不涉及到ue)
* @method suite
* @namespace cmp.att
* @param {Object} options 配置参数
* @param {String} options.type 调用的类型:<br>
* <ul>
* <li>“photo”:照相</li>
* <li>“picture”:本地图片</li>
* <li>“accDoc”:关联文档</li>
* <li>“voice”:录音</li>
* <li>“localFile”:本地文件</li>
* </ul>
* @param {String} [options.initDocData] 如果type是"accDoc",有初始关联文档值的话,需要传初始关联文档值
* @param {Function} [options.success] 成功回调
* @param {Function} [options.error] 失败回调
* @example
* ```
* <script>
* cmp.att.suite({
* type:"photo",
* initDocData:null, //初始关联文档数据
* success:function(result){ //选择成功后的回调
* //do something
* },
* error:function(result){ //删除数据时的回调
* //do something
* }
* });
* </script>
* ```
*/
/**
* V5附件类(直接渲染已经存在的附件)
* @method init
* @namespace cmp.att
* @param {String} selector 容器选择器,定义于页面装载附件对象的容器
* @param {Object} [atts] //附件数据
* @param {Object} [docs]//关联文档数据
* @param {Object} [options] 附件操作配置参数
* @param {Function} [options:callback] 关联文档协同查看走开发者自定义的回调函数
* @param {Boolean} [options.isShowDelete] 是否显示删除按钮,删除按钮会绑定开发者自定义的删除事件,默认:true
* @param {Boolean} [options.isDefault] 是否显示默认的附件样式
* @param {Function} [options.delCallback] 删除附件的回调
* @constructor
* @example
* ```
* <script>
* cmp.att.init(
* selector:"#attsArea",
* atts://v5附件对象数据
* docs://v5文档对象数据
* {
* callback:function seeDoc(docData){
* },
* isShowDelete:true,
* isDefault:true,
* delCallback:function(data){
* //data:将要被删除的附件数据,回调给开发者,开发者自行操作
* }
* }
* );
* </script>
* ```
*/