第一章. Web前端设计
1. 概述
本项目的Web前端采用AngularJS+SeaJS的框架来实现。
Web前端的工作涵盖如下几大块内容:
1. 基本功能流程
2. 单元测试
3. 页面动画
2. 安装和部署
前端代码采用bower进行版本管理,用grunt来跑代码。安装部署过程如下(以crm_oa_web_admin为例,crm_oa_web_frontend过程一致):
Mac OSX下的过程如下(前提是安装了brew)
安装nodejs:
brew install nodejs
安装grunt
npm install -g grunt-cli --registry=https://registry.npm.taobao.org
安装Compass
a. 安装ruby
brew install rubyb. 安装compass
gem sources --remove https://rubygems.org gem sources -a https://ruby.taobao.org/ gem install compass安装bower
npm install -g bower --registry=https://registry.npm.taobao.org
安装依赖的JS:
a. cd crm_oa_web_admin
b. bower install
c. npm install --registry=https://registry.npm.taobao.org
启动代码
a. cd crm_oa_web_admin
b. grunt server
Windows的过程如下
安装和配置nodejs
参考资料:http://jingyan.baidu.com/article/2d5afd69e243cc85a2e28efa.html 注意:请将nodejs安装到C:/根目录下
安装Python 2.7.x,若已经安装,则无需安装。
注意:需要将Python的可执行程序加入到环境变量中去。默认安装路径应该是C:\python27。
安装grunt
a. npm install -g grunt-cli --registry=https://registry.npm.taobao.org
b. 配置环境变量:添加grunt的路径到变量Path,以胡小根的Win7为例,路径为:C:\Users\hxgqh\AppData\Roaming\npm\node_modules\grunt-cli\bin
安装Compass(因为本系统的前端CSS采用SASS编写)
a. 安装ruby-2.2.3 64位(点击32位版本)

b. 安装Compass
gem sources --remove https://rubygems.org gem sources -a https://ruby.taobao.org/ gem install compass安装bower
a. 安装bower:
npm install -g bower --registry=https://registry.npm.taobao.orgb. 添加bower的路径到变量Path,以胡小根的Win7为例,路径为:C:\Users\hxgqh\AppData\Roaming\npm\node_modules\bower\bin
安装依赖的JS
a. cd crm_oa_web_admin
b. bower install
c. npm install --registry=https://registry.npm.taobao.org启动代码:
a. cd crm_oa_web_admin
b. grunt server
Ubuntu下的过程如(暂略)
3. 代码结构
Web前端的代码结构如下:
- app # 代码的主目录
- dist # grunt打包后的目录
- docs # grunt-docular生成的代码说明目录
- node_modules # npm依赖库
- bower_compenents # bower依赖库
- test # 测试代码
- tmp # UI人员放置临时代码的目录
4. 页面渲染流程
由于本系统的权限机制控制较为复杂,于是页面的渲染过程需要作进一步的细化。具体来说包括以下主要流程:
1. 用户认证过程
2. 界面功能授权过程
3. 界面数据授权过程
4. 数据渲染过程
本系统前端权限的设计原则是:
1. 凡是用户可见到的操作,除非商业逻辑上不允许,否则都可以操作;
2. 凡是用户为授权的功能,除非后台授权,否则都不能存在;
前台菜单产生
本系统的菜单结构如下:
- 首页
- CRM
- 客户
- 物料
- 自定义业务场景(数量不限。这里取决于后台配置了多少个)
- 办公
- 工作报告
- 通讯录
- 知识库
- 流程
- 统计
前台CRM下内容详情页产生
这里说的内容页指的是点击某条客户、物料或自定义业务场景数据,右边展开的详细内容页面。
#
5. 表单验证
这里根据系统涉及到的增删改查表单进行说明。 以下对字符长度的计算,单位为Byte。
5.1 Web后台
5.1.1 业务场景
5.1.1.1 业务场景
相关字段:
名称:
必填
长度<=10
管理方式:
必填
状态:
必填
描述:
可选
长度<=1024
涉及到的表单:
添加业务场景表单
编辑业务场景表单
5.1.1.2 阶段
相关字段:
名称:
必填
长度<=128
顺序:
必填
只能为正整数,>0且<4294967295
百分比:
必填
只能为正小数
>0.0且<=100.0
描述:
可选
长度<=1024
涉及到的表单:
添加阶段表单
编辑阶段表单
5.1.1.3 事件
相关字段:
名称:
必填
长度<=128
顺序:
必填
只能为正整数,>0且<4294967295
百分比:
必填
只能为正小数
>0.0且<=100.0
描述:
可选
长度<=1024
涉及到的表单:
添加事件表单
编辑事件表单
5.1.1.4 业务场景表定义
相关字段:
表名:
必填
必须以字母开头
长度不能超过30个字符
只能使用字符:A-Z,a-z,0-9
表描述:
必填
长度<=64
顺序:必填
必填
只能为正整数,>0且<4294967295
类型:
必填
描述:(不应该存在)
涉及到的表单:
添加表定义表单
编辑表定义表单
5.1.1.5 业务场景字段定义
相关字段:
字段名:
必填
必须以字母开头
长度不能超过30个字符
只能使用字符:A-Z,a-z,0-9
字段描述:
必填
长度<=64
顺序:
必填
只能为正整数,>0且<4294967295
字段类型:
必填
选项:
当字段类型为“单选”,“复选”,“下拉列表”之一时,必填;
状态:
必填
外链表:
可选。
外链字段:
当外链表已选择时,必选。
涉及到的表单:
添加字段表单
编辑字段表单
5.1.2 办公主数据
5.1.2.1 分类
相关字段:
父分类:
可选
名称:
必填
长度<=64
顺序号:
必填
描述:
可选
长度<=1024
涉及到的表单:
添加表单分类
编辑表单分类
添加流程分类
编辑流程分类
5.1.2.2 表定义
相关字段:
表名:
必填
必须以字母开头
长度不能超过30个字符
只能使用字符:A-Z,a-z,0-9
表描述:
必填
长度<=64
顺序:
必填
只能为正整数,>0且<4294967295
类型:
必填
涉及到的表单:
添加表定义表单
编辑表定义表单
5.1.2.3 字段定义
相关字段:
字段名:
必填
必须以字母开头
长度不能超过30个字符
只能使用字符:A-Z,a-z,0-9
字段描述:
必填
长度<=64
顺序:
必填
只能为正整数,>0且<4294967295
字段类型:
必填
选项:
当字段类型为“单选”,“复选”,“下拉列表”之一时,必填;
状态:
必填
外链表:
可选。
外链字段:
当外链表已选择时,必选。
涉及到的表单:
添加字段定义表单
编辑字段定义表单
5.1.2.4 流程
相关字段:
流程名称:
必填
长度<=128
流程分类:
必填
流程表单:
必填
流程顺序:
必填
只能为正整数,>0且<4294967295
涉及到的表单:
添加流程表单
编辑流程表单
5.1.3 用户权限管理
5.1.3.1 部门
部门表单测试,需要特别注意:
相关字段:
部门编码:
必填
长度<=16
部门名称:
必填
长度<=128
部门类型:
必填
部门名称:
必填
长度<=128
显示顺序:
必填
只能为正整数,>0且<4294967295
描述:
可选
长度<=1024
涉及到的表单:
添加部门表单
编辑部门表单
对于部门的自定义字段,参见5.1.2.3。
5.1.3.2 角色
相关字段:
名称:
必填
长度<=128
描述:
可选
长度<=1024
涉及到的表单:
添加角色表单
编辑角色表单
5.1.3.3 用户
相关字段:
用户名:
必填
长度<=256
密码:
必填
长度<=32
手机号:
必填
长度<=16
邮箱:
可选
长度<=256
头像:
可选
部门:
必填
性别:
必填
上级:
可选
离职:
可选
禁用:
可选
办公电话:
可选
长度<=16
涉及到的表单:
添加用户表单
编辑用户表单
6. 动画设计
如何给第三方进行定制(例如给鸿合系统定制?)
定制需要满足以下原则:
1. 第三方的需求,若跟我们的需求变动较大,则原则上数据库的变动最少为宜(尽量只做增加,不做修改)
2. 若第三方的需求中,在我们基础上进行了删减,则通过前端js的方式将功能进行屏蔽,为每一个第三方制作一个third.patch.js文件,屏蔽不需要的功能模块。本系统的前端设计需要为这种patch机制留下入口。
7. 自定义流程开发前端指南
本系统向自定义开发开放了如下的接口:
1. 页面显示控制:控制按钮功能及表单内容显示的接口
2. 表单交互控制:控制表单输入项交互的接口
3. 流转流程控制:提供了流程的流转的控制接口
4. Rest请求:提供了流程相关的Rest请求接口
5. Api接口:提供了一些帮助函数接口,方便快速二次开发
若要开发自定义流程,可以遵循以下原则进行开发。
7.1 可以继承或复用的模块包括:
FlowApi - 流程相关的通用Api接口
FlowRestService - 流程相关的Rest请求接口
AbstractFlowCtrl - 流程的核心代码
7.2 开发的规则
定制流程开发时,不应该修改以下文件:
1. abstractFlowCtrl.js
2. flowApiService.js
3. flowRestService.js
对于定制的流程,有以下定制方式和内容:
7.2.1 重载AbstractFlow中的函数。
AbstractFlow中的一些显示控制的接口可以重载。
注意:只有形如vm.xxx函数才能重写;形如vm._xxx函数不能重写,只能使用,不能重写。可重写的函数列表如下:
功能按钮控制:
vm.shouldShowAddDetailBtn(tableInstance) 控制增加明细航的按钮显示、隐藏
vm.shouldShowDeleteDetailBtn(tableInstance) 控制删除明细航的按钮显示、隐藏
vm.shouldShowDeleteProcessInstanceBtn() 控制删除流程的按钮显示、隐藏
vm.shouldShowApproveBtn() 控制批准按钮的显示、隐藏
vm.shouldShowArchiveBtn() 控制归档按钮的显示、隐藏
vm.shouldShowReturnBtn() 控制退回按钮的显示、隐藏
vm.shouldShowSaveBtn() 控制保存按钮的显示、隐藏
vm.shouldShowSubmitBtn() 控制提交按钮的显示、隐藏
vm.shouldShowTransferBtn() 控制转发按钮的显示、隐藏
vm.shouldShowWithdrawBtn() 控制收回按钮的显示、隐藏
vm.shouldShowTabMyRequest() 控制“我的请求”Tab页的显示、隐藏。默认显示。
vm.shouldShowTabMyAttention() 控制“我的关注”Tab页的显示、隐藏。默认隐藏。
表单内容控制:
vm.shouldShowTableInstance(tableInstance) 控制表实例的显示、隐藏
vm.shouldShowColumnInstance(tableInstance, columnInstance) 控制字段实例的显示、隐藏
重载的写法如下:
vm.shouldShowXXX = function(){
// 这里写你的逻辑,生成yourFlag的值
// var yourFlag = true|false;
return yourFlag && vm._shouldShowXXX();
}
7.2.2 监听AbstractFlow中抛出的事件。
抛出的事件列表包括如下几类:
1. 流程流转事件
2. 表单交互事件
3. 页面/Tab选项切换事件
所有的事件都是$rootScope级别的。
7.2.2.1 流程流转事件
1) beforeStartProcess 发起流程前。发送数据:process_definition_id。
2) afterStartProcess 发起流程后。发送数据:/process/{process_definition_id}/start接口返回的数据。
3) beforeSubmitForm 提交/批准流程任务表单前 。发送数据:formInstance
4) afterSubmitForm 提交/批准流程任务表单后 。发送数据:/task/{task_id}/form_instance/update接口返回的数据。
5) beforeSaveForm 保存流程任务表单前 。发送数据:formInstance
6) afterSaveForm 保存流程任务表单后 。发送数据:/task/{task_id}/form_instance/save接口返回的数据。
7) beforeLoadTaskFormInstance 加载流程表单前 。发送数据:task
8) afterLoadTaskFormInstance 加载流程表单后 。发送数据:formInstance
9) beforeReturnProcess 退回流程前 。发送数据:/task/{task_id}/form_instance/update接口返回的数据。
10) afterReturnProcess 退回流程后 。发送数据:/task/{task_id}/form_instance/update接口返回的数据。
11) beforeTransferProcess 转发流程前 。发送数据:task
12) afterTransferProcess 转发流程后 。发送数据:/task/{task_id}/transfer接口返回的数据。
13) beforeArchiveProcess 归档流程前 。发送数据:processInstance
14) afterArchiveProcess 归档流程后 。发送数据:/process_instance/{process_instance_id}/archive接口返回的数据
15) beforeWithdrawProcess 收回流程前 。发送数据:processInstance
16) afterWithdrawProcess 收回流程后 。发送数据:发送数据:/process_instance/{process_instance_id}/withdraw接口返回的数据
17) beforeDeleteProcess 删除流程前 。发送数据:processInstance
18) afterDeleteProcess 删除流程后 。发送数据:发送数据:/process_instance/{process_instance_id}/delete接口返回的数据
19) beforeConvertFormInstance2View 转换接口的表单实例数据为页面展示数据前。发送数据:formInstance
19) afterConvertFormInstance2View 转换接口的表单实例数据为页面展示数据后。发送数据:formInstance
7.2.2.2 表单交互事件
1) beforeDeleteDetailTable 删除明细前。发送数据:tableInstance
2) afterDeleteDetailTable 删除明细后。发送数据:tableInstance
3) beforeExpandDetailTable 展开明细前。发送数据:tableInstance
4) afterExpandDetailTable 展开明细后。发送数据:tableInstance
5) beforeCollapseDetailTable 收缩明细前。发送数据:tableInstance
6) afterCollapseDetailTable 收缩明细后。发送数据:tableInstance
7) beforeShowNotCommonColumn 显示非常用字段前。发送数据:tableInstance
8) afterShowNotCommonColumn 显示非常用字段后。发送数据:tableInstance
9) beforeHideNotCommonColumn 隐藏非常用字段前。发送数据:tableInstance
10) afterHideNotCommonColumn 隐藏非常用字段后。发送数据:tableInstance
1) onChangeColumnInstance 表单任意字段值改变。发送数据:{'columnInstance': columnInstance, 'tableInstance': tableInstance}
1) onFocusColumnInstance Input输入框focus。发送数据:{'columnInstance': columnInstance, 'tableInstance': tableInstance}
2) onBlurColumnInstance Input输入框blur。发送数据:{'columnInstance': columnInstance, 'tableInstance': tableInstance}
7.2.2.3 页面/Tab选项切换事件
1) loadPageTodoTask 切换到待办事宜。发送数据:null
2) loadPageResolvedTask 切换到已办事宜。发送数据:null
3) loadPageFinishedTask 切换到办结事宜。发送数据:null
4) loadPageMyRequest 切换到我的请求。发送数据:null
5) switchTabForm 切换到流程表单。发送数据:Null
6) switchTabDiagram 切换到流程图。发送数据:Null
7) onOpenForm 打开流程表单。发送数据:task
8) onCloseForm 关闭流程表单。发送数据:task
7.2.3 Hook流程流转
hookFunc = function(data){
var deferred = $q.defer();
// write your code here
return deferred.promise;
}
支持的hook函数如下(用FlowApi.addHook来注册hook函数):
1) FlowApi.addHook(processDefinitionId, 'beforeStartProcess', hookFunc), hookFunc接受的参数为:process_definition_id
2) FlowApi.addHook(processDefinitionId, 'beforeSubmitForm', hookFunc), hookFunc接受的参数为:form_instance
3) FlowApi.addHook(processDefinitionId, 'beforeSaveForm', hookFunc), hookFunc接受的参数为:form_instance
4) FlowApi.addHook(processDefinitionId, 'beforeLoadFormInstance', hookFunc), hookFunc接受的参数为:task
5) FlowApi.addHook(processDefinitionId, 'beforeReturnProcess', hookFunc), hookFunc接受的参数为:process_instance
6) FlowApi.addHook(processDefinitionId, 'beforeTransferProcess', hookFunc), hookFunc接受的参数为:process_instance
7) FlowApi.addHook(processDefinitionId, 'beforeArchiveProcess', hookFunc), hookFunc接受的参数为:process_instance
8) FlowApi.addHook(processDefinitionId, 'beforeWithdrawProcess', hookFunc), hookFunc接受的参数为:process_instance
9) FlowApi.addHook(processDefinitionId, 'beforeDeleteProcess', hookFunc), hookFunc接受的参数为:process_instance
7.2.4 弹出框的定制
弹出框采用了angular-ui-bootstrap的$uibModal。 以下情况可能需要定制弹出框:
1) 当鼠标进入某个input字段的时候,需要定制弹出框。例如交货申请单里的合同号字段。
2) 添加明细的弹出框,需要进行定制。
定制弹出框需要修改的步骤:
1) 注册弹出框
a. 进入scripts/Common/utils/crmModal.js,添加需要定制的弹出框:
{modalName: {templateUrl: 'yourModalPath.html'}
b. 在新增的xxxFlowCtrl.js中,添加:
$scope.modal_map['modalName'] = crmModal.getModalById('modalName', $scope, {
controller: 'ModalNameCtrl',
size: 'lg'
});
2) 重载openModal和closeModal
$scope.openModal = function (modal) {
// 打开弹出框时,所有的input离焦,防止出现持续打开弹窗
_.each(document.getElementsByTagName("input"), function(input){
input.blur();
});
var modal_instance = $uibModal.open($scope.modal_map[modal]);
$scope.modal_instance_map[modal] = modal_instance;
modal_instance.result.then(function (data) {
if (modal == 'yourModalName') {
// @todo: 这里应该放置关闭弹出框,获取弹出框数据的逻辑代码
}
});
};
$scope.closeModal = function (modal) {
$scope.modal_instance_map[modal].dismiss('cancel');
};
需要说明的是:
1. Hook和事件监听有些不同。
a. Hook的所有函数,必须返回promise对象;事件监听的函数,可以返回任意对象;
b. Hook的所有函数执行完之后,才会执行流程流转的函数;事件监听的函数,和流程流转的函数是"并行"的;
2. 弹出框除了可以新增,也可以系统目前支持的弹出框,包括:
a. addFlowDetailTableInstance 添加明细弹出框
b. archiveProcess 归档流程确认弹出框
c. deleteProcess 删除流程确认弹出框
d. withdrawProcess 收回流程确认弹出框
e. deleteProcess 删除流程确认弹出框
f. returnProcess 退回流程确认弹出框
g. transferTask 转发任务确认弹出框
h. selectNextTaskUsers 选择下一节点操作者弹出框
i. selectSingleCustomer 选择单个客户弹出框
3. 存在多个明细弹出框的情况下,重写弹出框addFlowDetailTableInstance的时候,需要根据$scope.new_detail_table_instance变量(新建表实例)的name属性判断是在添加哪种明细的弹出框;
7.3 数据结构
流程中重要的数据结构说明如下:
1. ProcessInstance - 流程实例,示例如下:
1. Task - 任务实例,示例如下:
{
"owner": null,
"process_definition": {},
"task_status": "pending",
"parent_task_id": null,
"create_time": "2016-08-14 11:50:46",
"delegation_state": null,
"end_time": null,
"due_date": null,
"description": null,
"priority": 50,
"title": "1.申请人",
"task_inst_see": {
"id": "61b56d18f5044f6f8c7c1a7c34b03fbf",
"process_instance_id": null,
"task_id": "1075144",
"user_id": "4db570bc5cca4e11ba27df6315cdaa11",
"create_time": "2016-08-14 11:50:47",
"last_update_time": "2016-08-14 11:50:47"
},
"suspended": false,
"process_instance_id": "1075136",
"name": "1.申请人",
"process_instance_no": {
"id": "e3f2723663fe400db2879267a6e238e4",
"year": null,
"month": null,
"day": null,
"process_instance_id": "1075136",
"process_no": "Z110020019",
"process_definition_id": "f5f71f8e3c5d443da915e420fb94e839",
"serial_number": 20019,
"department_id": "9693f560a2a14c558f2009b504e41556",
"create_time": "2016-08-14 11:51:36"
},
"assignee": {
"id": "4db570bc5cca4e11ba27df6315cdaa11",
"loginid": "3000308",
"username": "王进军",
"mobile": null,
"email": null,
"avatar": null,
"sexual": null,
"type": 1,
"xslx": "2",
"currentUserRoles": null,
"locco": null,
"department_id": "9693f560a2a14c558f2009b504e41556",
"superior_id": null,
"assistant_manager_id": null,
"create_time": "2016-06-15 08:23:20",
"last_update_time": "2016-08-09 08:33:15",
"is_dismissed": 0,
"is_forbidden": 0,
"work_phone": null,
"last_login_time": "2016-08-17 18:18:08",
"security_level": 10,
"department": {
"id": "9693f560a2a14c558f2009b504e41556",
"code": "1100",
"name": "北京分支",
"description": "北京分支",
"parent_department_id": "c4ceb1768f4c4bc9a8328c79443d2bfa",
"view_order": 1,
"department_type_id": "0",
"create_time": "2016-06-13 16:03:03",
"last_update_time": "2016-08-06 15:32:02",
"security_level": null,
"simple_name": "1100"
},
"branch_department": null,
"user_table_instances": null
},
"id": "1075144",
"activiti_process_instance": {
"starter": "com.haomostudio.crm.vo.CrmUserDVO@24074188",
"create_time": "2016-08-14 11:50:46",
"is_archive": false,
"id": "1075136",
"title": "转储申请单-北京分支-王进军-20160814"
},
"task_definition_key": "sid-F02DE457-6630-4044-85D3-09F0FD37B4A6"
}
2. FormInstance - 表单实例,示例如下:
{
"id": "cb38987abb894a1081178f492a9d7a35",
"name": "转储申请单",
"description": "转储申请单",
"withDraw": false,
"transfer": false,
"create_time": null,
"last_update_time": "2016-08-15 09:14:08",
"form_definition_id": "4fbbde85e1074f9aa046790835f6ba54",
"creator_id": "3f4fc2edd2a14e499618967af4bb3980",
"table_instances": [],
"form_definition": {},
"is_transfer": false,
"task_ideas": [],
"is_withdraw": false,
"process_definition": {}
}
3. TableInstance - 表实例,示例如下:
{
"id": "7dc48e4dec1e47e5abe806a81fbdda24",
"rank": 1,
"type": 0,
"name": "EKKO",
"description": null,
"form_instance_id": "cb38987abb894a1081178f492a9d7a35",
"table_definition_id": "c66dc75e1db249abbf2f9789323ef4a5",
"display_name": "转储申请表单主表",
"create_time": "2016-08-15 09:14:08",
"last_update_time": null,
"column_instances": [],
"table_definition": {},
"$$hashKey": "object:498"
}
4. ColumnInstance - 字段实例,示例如下:
{
"id": null,
"type": 1,
"rank": 2,
"name": "WFNO",
"status": 1,
"value": "Z110020021",
"table_instance_id": "7dc48e4dec1e47e5abe806a81fbdda24",
"column_definition_id": "bce5615d74b74fd1909f02ab030d02a4",
"display_name": "转储单号",
"is_visible": 1,
"is_must": 0,
"is_used_often": 1,
"foreign_table_definition_id": null,
"foreign_column_definition_id": null,
"column_definition": {},
"$$hashKey": "object:510",
"is_writable": 0
}
5. ProcessDefinition - 流程定义,示例如下:
{
"id": "f5f71f8e3c5d443da915e420fb94e839",
"name": "转储申请单",
"additionals": {
"activiti_deployment_id": "1017684",
"activiti_title_rule": {
"rule": "{F}-{DE}-{U}-{Y}{M}{D}",
"is_edit": 1
},
"title_rule": "流程规则",
"process_no_rule": {
"year_flag": false,
"month_flag": false,
"length": 5,
"start": "20000",
"alphabet": "Z",
"department_level": "部门"
},
"attributes_linkage": [
],
"activiti_model_id": "408172",
"activiti_process_definition_id": "process:63:1017687"
},
"menuId": "07ab3e1faa0f435e9f72e3bb3ed3e04c",
"status": 1,
"process_category_id": "7af58c0d1c5e4e2e9f19bb155ea65735",
"create_time": "2016-07-14 13:57:24",
"last_update_time": "2016-08-07 10:27:47",
"creator_id": "3f4fc2edd2a14e499618967af4bb3980",
"view_order": 3,
"form_definition_id": "28b4717561ad4def8deb60ff98916698",
"act_model_id": "408172",
"act_process_definition_id": "process:63:1017687"
}
6. FormDefinition - 表单定义,示例如下:
{
"id": "28b4717561ad4def8deb60ff98916698",
"name": "转储申请表单",
"form_definition_id": "4fbbde85e1074f9aa046790835f6ba54",
"creator_id": "3f4fc2edd2a14e499618967af4bb3980",
"create_time": "2016-07-14 13:33:30",
"last_update_time": "2016-08-15 10:16:16",
"form_category_id": "46850533ae2246a2ac17bcdaf4172709",
"view_order": 4
}
7. TableDefinition - 表定义,示例如下:
{
"id": "c66dc75e1db249abbf2f9789323ef4a5",
"rank": 1,
"type": 0,
"name": "EKKO",
"description": null,
"form_definition_id": "4fbbde85e1074f9aa046790835f6ba54",
"display_name": "转储申请表单主表",
"create_time": "2016-07-14 13:34:18",
"last_update_time": "2016-07-14 13:35:05"
}
8. ColumnDefinition - 字段定义,示例如下:
{
"id": "b36fb6a2f11d47fa937403abab035339",
"rank": 104,
"name": "ZC003",
"status": 1,
"type": 1,
"additionals": "{\"options\":[],\"constraint\":{\"decimal\":{\"is_currency\":false,\"decimal_place\":2},\"text_length\":\"18\",\"multiLine_text_length\":4000},\"type\":1,\"javascript\":\"(function(){})\"}",
"table_definition_id": "1ec7dd66df914c78a0a09811f8df1689",
"display_name": "产品编码",
"is_visible": 1,
"is_must": 0,
"is_used_often": 1,
"foreign_table_definition_id": null,
"foreign_column_definition_id": null,
"foreign_column_definition": null,
"is_writable": 0
}
7.4 接口使用说明
7.4.1 页面显示控制
控制按钮功能及表单内容显示的接口,说明文档见:
7.4.2 表单交互控制
控制表单输入项交互的接口,说明文档见:
7.4.3 流转流程控制
提供了流程的流转的控制接口,说明文档见:
7.4.4 Rest请求
提供了流程相关的Rest请求接口,说明文档见:
7.4.5 Api接口
提供了一些帮助函数接口,方便快速二次开发,说明文档见:
7.5 示例
7.5.1 根据某些条件,控制表单的某个字段属性(可见、必填等)
7.5.2 表单元素focus,触发弹框(可以自定义任何触发事件)
7.5.3 在流程提交前,修改某些表单字段的值
第三方库
参考文档
1. http://island205.com/HelloSea.js/reference.html