/**
 * 附件模块提供了附件上传、下载、编辑等功能,并根据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>
 * ```
 */


    
Top