Service

Service

Service 公文编辑器服务。

Constructor

new Service()

处理公文编辑器与后端服务器的交互。需要重载实现五个方法:getData、saveData、listHistory、getHistory、saveHistory,用于公文编辑器与后端服务交互

Source:
Examples
import DocEditor from '@o2oa/doceditor';
const service = new DocEditor.Service();
service.listHistory = function(docid){
    //实现获取历史痕迹列表,返回一个数组列表
};
service.getHistory = function(id){
    //实现获取历史痕迹数据
};
service.saveHistory = function(data){
    //实现保存历史痕迹数据
};
service.getData = function(docid){
    //实现获取编辑器数据
};
service.listHistory = function(data){
    //实现保存编辑器数据
};
service.listHandwritingLog = function(docid){
    //返回当前文档的手写签批记录(已提交的)列表,返回一个数组列表
}
service.getHandwritingImage = function(imageId, stauts){
    //根据图片id获取图片地址或者是图片base64编码后的数据
    //stauts为数字,获取图片的类型,1表示正在编辑的手写签批图片,2表示签批历史记录里不带正文背景的图片,3表示历史记录里带正文背景的图片
}
service.getEditedHandwriting = function(options){
    //实现获取当前处理人编辑的手写数据
}
service.saveHandwriting = function(data){
    //保存手写签批数据
}
service.submitHandwritingWithDoc = function(data){
    //带正文背景提交手写签批
}
service.submitHandwritingWithoutDoc = function(data){
    //不带正文背景提交手写签批
}
service.htmlToImage = function(data){
    //html转图片, 获取图片地址
}

const editor = DocEditor.createEditor("#div", options, service);
editor.load().then(()=>{
    //做一些其他的事情,比如绑定事件
});
import DocEditor from '@o2oa/doceditor';
class MyService extends DocEditor.Service {
    async listHistory(id) {
        //实现获取历史痕迹列表,返回一个数组列表
    }
    async getHistory(id){
        //实现获取历史痕迹数据
    }
    async saveHistory(data){
        //实现保存历史痕迹数据
    }
    async getData(id){
        //实现获取编辑器数据
    }
    async saveData(data){
        //实现保存编辑器数据
    }
    async listHandwritingLog(docid){
         //返回当前文档的手写签批记录(已提交的)列表,返回一个数组列表
    }
    async getHandwritingImage(imageId){
         //根据图片id获取图片地址或者是图片base64编码后的数据
    }
    async getEditedHandwriting(options){
         //实现获取当前处理人编辑的手写数据
    }
    async saveHandwriting(data){
        //保存手写签批数据
     }
    async submitHandwritingWithDoc(data){
        //带正文背景提交手写签批
    }
    async submitHandwritingWithoutDoc(data){
        //不带正文背景提交手写签批
    }
    async htmlToImage(data){
        //html转图片, 获取图片地址
    }
};

const service = new MyService()
const editor = DocEditor.createEditor("#div", options, service);
editor.load().then(()=>{
    //做一些其他的事情,比如绑定事件
});

Methods

(async) getData(id) → {Promise.<Object>}

获取编辑器数据

Source:
Example
service.getData = function(data){
    return Promise.resolve({
                "copies": "",
                "secret": "",
                "priority": "",
                "redHeader": "文件红头",
                "fileno": "[文号]",
                "signerTitle": "签发人:",
                "signer": "[签发人]",
                "subject": "[文件标题]",
                "mainSend": "[主送单位:]",
                "filetext": "[请在此处编辑正文内容]",
                "attachmentTitle": "附件:",
                "attachment": "",
                "issuanceUnit": "[发文机关]",
                "issuanceDate": "[成文日期]",
                "annotation": "",
                "copytoTitle": "抄送:",
                "copyto": "[抄送]",
                "copyto2Title": "发:",
                "copyto2": "[发]",
                "editionUnit": "[印发机关]",
                "editionDate": "[印发日期]",
                "meetingAttendTitle": "出席:",
                "meetingLeaveTitle": "请假:",
                "meetingSitTitle": "列席:",
                "meetingAttend": "",
                "meetingLeave": "",
                "meetingSit": "",
                "meetingRecord": ""
            });
};
Parameters:
Name Type Description
id String 当前文档的唯一标识,创建编辑器时的options中的docId
Returns:
返回一个Promise resolve一个编辑器数据对象
Type
Promise.<Object>

(async) getEditedHandwriting(options) → {Promise.<Object>}

实现获取当前处理人编辑的手写数据

Source:
Example
service.getEditedHandwriting = async function( options ){
 return Promise.resolve({
   "id": "bfc6cc5b-e171-4f1a-83a0-78a40cf6a581", //正在编辑的手写签批id
   "activityName": "确认",                       //手写签批的步骤  创建编辑器时的options中的activity.name
   "person": "张三@zhangsan@P",                  //签批的用户
   "status": 1,                                  //签批类型,1表示正在编辑中,还未提交(提交后不允许编辑)
   "inputList": [                                //用输入法输入的文本框
       {
           "coordinates":{ //用输入法输入的文本框的位置,top\left\right\bottom是相对于编辑器正文内容的位置
               "left":10,
               "top":30,
               "width":200,
               "height":100,
               "right":700,
               "bottom":900
           },
           "styles":{ //用输入法输入的文本的样式
               "color":"#4bacc6",
               "font-size":"32px"
           },
           "html":"手写输入内容" ////用输入法输入的内容
       }
     ],
   "imageList": [                            //用笔画画出的图片列表
      {
           "id": "4b6f4164-2856-44c8-bd0a-4c43f6b34ff8", //签批图片的id, 和src二选一,如果使用id,需要实现 service.getHandwritingImage 方法
           "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAA...", //签批图片的base64编码或图片地址, 和id二选一,src优先
           "width":"793.6875",                                                 //图片宽度
           "height":"1000"                                                     //图片高度
       },
       {
           "src": "",                                  //src为空及id为空(或无src及id),表示无该页无签批内容
           "width": "793.671875",                                              //占位宽度
           "height":"215"                                                      //占位高度
       }
     ]
 })
}
Parameters:
Name Type Description
options Object 创建编辑器时的options,可以自定义的在这个options设置该手写签批数据的id
Returns:
返回一个Promise resolve一个存储了手写签批数据的对象,如果是新建可以返回 null
Type
Promise.<Object>

(async) getHandwritingImage(imageId, status) → {Promise.<Object>}

根据图片id获取图片地址或者是图片base64编码后的数据

Source:
Examples
service.getHandwritingImage = async function( imageId, status ) {
  switch (status) {
      case 1:
          return "http://www.o2oa.net/handwriting/edting/"+imageId;
      case 2:
          return "http://www.o2oa.net/handwriting/without/"+imageId;
      case 3:
          return "http://www.o2oa.net/handwriting/with/"+imageId;
  }
}
service.getHandwritingImage = function( imageId, status ) {
   return Promise.resolve( "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAA..." )
}
Parameters:
Name Type Description
imageId String 根据getEditedHandwriting或listHandwritingLog方法返回的数据中包含的图片id
status Number 获取图片的类型,1表示正在编辑的手写签批图片,2表示签批历史记录里不带正文背景的图片,3表示历史记录里带正文背景的图片
Returns:
返回一个Promise resolve 的图片地址或者是图片base64编码后的数据
Type
Promise.<Object>

(async) getHistory(id) → {Promise.<Object>}

实现获取历史痕迹数据

Source:
Example
service.listHistory = function(id){
    //实现获取历史痕迹列表,返回一个数组列表,格式如下:
    return Promise.resolve({
         "id": "1746f647-910f-419e-a55a-d07c176a3f87",           //痕迹内容唯一标识,用于获取具体的痕迹数据,由服务器生成
         "person": "胡起",                                         //痕迹修订的用户 创建编辑器时的options中的user.name
         "category": "documenteditor",                            //编辑id号,由创建编辑器时的options中id字段提供
         "data": "...",                                          //修订痕迹数据,保存时的data
         "json": {}                                              //将data中的文本转换为json对象(JSON.parse)
         "activityName": "拟稿",                                   //产生痕迹的步骤 创建编辑器时的options中的activity.name
         "createTime": "2022-03-12 17:23:40",                    //保存时由服务器自动生成
         "updateTime": "2022-03-12 17:23:40"                     //保存时由服务器自动生成
   });
};
Parameters:
Name Type Description
id String 历史痕迹的唯一标识,listHistory方法返回列表中的id
Returns:
返回一个Promise resolve一个存储了痕迹数据的对象
Type
Promise.<Object>

(async) htmlToImage(data) → {Promise.<Object>}

html转图片,此方法用在输入法输入的内容。如果不使用输入法,可以不实现该方法

Source:
Examples
service.htmlToImage = async function(data){
     return Promise.resolve( "http://www.o2oa.net/handwriting/12345" );
}
service.htmlToImage = function(data){
     return Promise.resolve( "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAA..." )
}
Parameters:
Name Type Description
data Object 转换的html数据

    //格式如下:
    {
          workHtml: div.outerHTML,
          htmlWidth: 200, //html正文宽度,允许为空.
          htmlHeight: 300, //html正文高度,允许为空.
          startX: 10,    //html的X轴开始位置,允许为空.
          startY: 20,    //html的Y轴开始位置,允许为空.
          omitBackground: true //背景是否透明
     }
Returns:
返回一个Promise resolve 的图片地址或者是图片base64编码后的数据
Type
Promise.<Object>

(async) listHandwritingLog(id) → {Promise.<Array>}

返回当前文档的手写签批记录(已提交的)列表,返回一个数组列表

Source:
Example
service.listHandwritingLog = async function(docid){
 //手写签批记录列表,返回一个数组列表,格式如下:
 return Promise.resolve([
     //带正文背景保存的记录
     {
         "status": 3,                                            //签批记录的类别,2表示不带背景保存的记录,3表示带正文背景保存的记录
         "image": {                                        //带正文保存的签批图片
             "id": "4b6f4164-2856-44c8-bd0a-4c43f6b34ff8",       //签批图片的id, 和src二选一,如果使用id,需要实现 service.getHandwritingImage 方法
             "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAA..." //签批图片的base64编码或图片地址, 和id二选一,src优先
         },
         "id": "0d35a43e-8cb5-4af8-ac6a-da681221c350",           //签批记录id,由服务器生成
         "activityName": "核稿",                                 //产生签批的步骤
         "person": "张三@zhangsan@P",                            //签批的用户
         "createTime": "2022-05-30 15:19:13",                    //保存时由服务器自动生成
         "updateTime": "2022-05-30 15:19:13",                    //保存时由服务器自动生成
         ...     //其他自定义的数据
     },
     //不带正文背景保存的记录
     {
         "status": 2,                                            //签批记录的类别,2表示不带背景保存的记录,3表示带正文背景保存的记录
         "id": "dc3bc8d1-0d2a-43e6-a44e-9036c058cf70",           //签批记录id,由服务器生成
         "activityName": "办理",                                 //产生签批的步骤
         "person": "李四@lisi@P",                                //签批的用户
         "createTime": "2022-05-30 15:20:43",                    //保存时由服务器自动生成
         "updateTime": "2022-05-30 15:20:43",                    //保存时由服务器自动生成
         "imageList": [                                    //不带正文保存的签批图片信息
             {
                 "id": "4b6f4164-2856-44c8-bd0a-4c43f6b34ff8", //签批图片的id, 和src二选一,如果使用id,需要实现 service.getHandwritingImage 方法
                 "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAA...", //签批图片的base64编码或图片地址, 和id二选一
                 "type": "image",                                 //表示这是一张图片
                 "width": "793.671875",                           //所占宽度
                 "height": "1000",                                //所占高度
                 ... //其他自定义的数据
             },
             {
                 "type": "placeholder",                           //表示这个位置没有图片,只占一个位置
                 "width": "793.671875",                           //所占宽度
                 "height": "701",                                 //所占高度
                 ... //其他自定义的数据
             }
         ]
     }
 ])
}
Parameters:
Name Type Description
id String 当前文档的唯一标识,创建编辑器时的options中的docId
Returns:
返回一个Promise resolve一个存储了手写签批记录的对象数组
Type
Promise.<Array>

(async) listHistory(id) → {Promise.<Array>}

实现获取历史痕迹列表,返回一个数组列表

Source:
Example
service.listHistory = function(id){
    //实现获取历史痕迹列表,返回一个数组列表,格式如下:
    return Promise.resolve([
         {
           "id": "f2c17bf6-8d00-4204-97ed-00cc843a01cb",         //痕迹内容唯一标识,用于获取具体的痕迹数据,由服务器生成
           "person": "huqi@huqi@P",                              //痕迹修订的用户
           "category": "documenteditor",                         //编辑id号,由创建编辑器时的options中id字段提供
           "activityName": "拟稿",                                //产生痕迹的步骤
           "createTime": "2022-03-14 10:16:05",                  //保存时由服务器自动生成
           "updateTime": "2022-03-14 10:16:05"                   //保存时由服务器自动生成
           ...                                                   //其他数据由创建编辑器时的options中的processInfo对象提供
         }
   ]);
};
Parameters:
Name Type Description
id String 当前文档的唯一标识,创建编辑器时的options中的docId
Returns:
返回一个Promise resolve一个存储了痕迹列表的对象数组
Type
Promise.<Array>

(async) saveData()

保存编辑器数据

Source:
Example
service.saveData = function(data){
    //data为要保存的数据,格式如下:
    {
         "docId": "aaaaaaaa"  //文档的唯一标识
         "copies": "",
         "secret": "",
         "priority": "",
         "redHeader": "文件红头",
         "fileno": "[文号]",
         "signerTitle": "签发人:",
         "signer": "[签发人]",
         "subject": "[文件标题]",
         "mainSend": "[主送单位:]",
         "filetext": "[请在此处编辑正文内容]",
         "attachmentTitle": "附件:",
         "attachment": "",
         "issuanceUnit": "[发文机关]",
         "issuanceDate": "[成文日期]",
         "annotation": "",
         "copytoTitle": "抄送:",
         "copyto": "[抄送]",
         "copyto2Title": "发:",
         "copyto2": "[发]",
         "editionUnit": "[印发机关]",
         "editionDate": "[印发日期]",
         "meetingAttendTitle": "出席:",
         "meetingLeaveTitle": "请假:",
         "meetingSitTitle": "列席:",
         "meetingAttend": "",
         "meetingLeave": "",
         "meetingSit": "",
         "meetingRecord": "",
         ...                                 //其他自定义扩展字段
     }
};

(async) saveHandwriting()

保存手写签批数据

Source:
Example
service.saveHandwriting = async function(data){
    //data为要保存的数据,格式如下:
    {
      "docId": "aaaaa",                 //当前文档的唯一标识,创建编辑器时的options中的docId
      "id": "bbbbbbbb",                 //当前签批的唯一标识,依赖于getEditedHandwriting获取的数据是否包含id。如果没有,表示新建。
      "activityName": "确认",                       //手写签批的步骤  创建编辑器时的options中的activity.name
      "person": "张三@zhangsan@P",                  //签批的用户
      "status": 1,                                  //签批类型,1表示正在编辑中,还未提交(提交后不允许编辑)
      "inputList": [                                //用输入法输入的文本框
          {
           "coordinates":{ //用输入法输入的文本框的位置,top\left\right\bottom是相对于编辑器正文内容的位置
               "left":10,
               "top":30,
               "width":200,
               "height":100,
               "right":700,
               "bottom":900
           },
           "styles":{ //用输入法输入的文本的样式
               "color":"#4bacc6",
               "font-size":"32px"
           },
           "html":"手写输入内容" ////用输入法输入的内容
       }
     ],
   "imageList": [                            //用笔画画出的图片列表
      {
           "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAA...", //签批图片base64编码,
           "width":"793.6875",                                                 //图片宽度
           "height":"1000"                                                     //图片高度
       },
       {
           "src": "",                                                          //src为空表示无该页无签批内容
           "width": "793.671875",                                              //占位宽度
           "height":"215"                                                      //占位高度
       }
     ]
 }
}

(async) saveHistory()

保存历史痕迹

Source:
Example
service.saveHistory = function(data){
    //data为要保存的数据,格式如下:
    {
         "docId": "aaaaa"                 //当前文档的唯一标识,创建编辑器时的options中的docId
         "category": "documenteditor",   //编辑id号,由创建编辑器时的options中id字段提供
         "data": "...",                  //修订痕迹数据
         "person": "测试",                //修订用户 创建编辑器时的options中的user.name
         "activityName": "核稿"            //修订时的活动状态 创建编辑器时的options中的activity.name
          ...                            //其他数据由创建编辑器时的options中的processInfo对象提供
     }
};

(async) submitHandwritingWithDoc()

带正文背景提交手写签批,提交后不允许编辑这份签批。需要后台将html内容转换成图片

Source:
Example
service.submitHandwritingWithDoc = async function(data){
    //data为要保存的数据,格式如下:
    {
      "docId": "aaaaa",                 //当前文档的唯一标识,创建编辑器时的options中的docId
      "id": "bbbbbbbb",                 //当前签批的唯一标识,依赖于getEditedHandwriting获取的数据是否包含id。如果没有,表示新建。
      "activityName": "确认",                       //手写签批的步骤  创建编辑器时的options中的activity.name
      "person": "张三@zhangsan@P",                  //签批的用户
      "status": 3,                                  //签批类型,3表示带正文背景提交
      "htmlContent": "<div>....</div>",              //包含正文和手写签批图片的html内容,需要后台
      "htmlWidth": "793.671875",                     //html内容的宽度
      "htmlHeight": "1000"                           //html内容的高度
     }
}

(async) submitHandwritingWithoutDoc()

不带正文背景提交手写签批,提交后不允许编辑这份签批

Source:
Example
service.submitHandwritingWithoutDoc = async function(data){
    //data为要保存的数据,格式如下:
    {
      "docId": "aaaaa",                 //当前文档的唯一标识,创建编辑器时的options中的docId
      "id": "bbbbbbbb",                //当前签批的唯一标识,依赖于getEditedHandwriting获取的数据是否包含id。如果没有,表示新建。
      "activityName": "确认",                       //手写签批的步骤  创建编辑器时的options中的activity.name
      "person": "张三@zhangsan@P",                  //签批的用户
      "status": 2,                                  //签批类型,2表示不带背景提交
      "imageList": [                            //用笔画画出的图片列表
         {
           "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAA...", //签批图片base64编码,
           "width":"793.6875",                                                 //图片宽度
           "height":"1000"                                                     //图片高度
         },
         {
           "src": "",                                                          //src为空表示无该页无签批内容
           "width": "793.671875",                                              //占位宽度
           "height":"215"                                                      //占位高度
         }
     ]
 }
}