直接跳到内容

在线表单 开发指导

介绍

在线表单是基于 vue 继承的机制,把在线 vue 模板混入到本地代码中,所以在线表单可以使用 vue 的基本语法。

在二次开发之前,请确认能否通过配置形式解决,如通过以下表单控件 动态联动,自定义查询,函数计算,动态权限

注意

该文档是在用户对表单功能有了基本理解后想利用源码模式深入使用定制表单时使用,使用者需要具备 vue 语法的基础

在线表单 源码模式开发介绍

源码模式分为 html 部分和 Js 部分(下面案例以一个简单的主子表表单为例)

  • 在线表单 html 示例(该部分为纯原生的 vue 语法结合一些系统提供的 ab-开头的表单组件组成) 在线表单html
html
<div class="gongwen-title">主子表测试</div>
<table class="gongwen-table">
  <tr v-ab-permission="permission.zzbcs.zzb_zb.a">
    <th colspan="2"><ab-required></ab-required>a</th>
    <td colspan="10">
      <ab-input
        v-model="data.zzbcs.a"
        placeholder="请输入a"
        :permission="permission.zzbcs.zzb_zb.a"
        :rules="[{'message':'必填','required':true}]"
        desc="主子表_主表-a"
      ></ab-input>
    </td>
    <th colspan="2">
      <ab-required :permission="permission.zzbcs.zzb_zb.b"></ab-required>b
    </th>
    <td colspan="10">
      <ab-input
        v-model="data.zzbcs.b"
        placeholder="请输入b"
        :permission="permission.zzbcs.zzb_zb.b"
        :rules="[]"
        desc="主子表_主表-b"
      ></ab-input>
    </td>
  </tr>
  <tr table-key="zzb_zib" v-ab-permission="tablePermission.zzbcs.zzb_zib">
    <td colspan="24">
      <span class="subtable-title-gongwen">
        子表
        <ab-sub-load
          v-model="data.zzbcs"
          table-path="zzb_zibList"
          bo-code="zzbcs"
          :permission-type="permissionType"
          :permission-value="permissionValue"
          :permission="tablePermission.zzbcs.zzb_zib"
          fk="id"
        ></ab-sub-load>
        <ab-sub-add
          style="margin-left:10px;"
          class="el-button el-button--primary"
          v-model="data.zzbcs.zzb_zibList"
          :init-data="initData.zzbcs.zzb_zib"
          :permission="tablePermission.zzbcs.zzb_zib"
          >添加</ab-sub-add
        >
      </span>
      <ab-sub-scope
        v-slot="{scopePermission, scopeTablePermission}"
        :permission="permission.zzbcs.zzb_zib"
        :table-permission="tablePermission"
        v-for="(zzb_zib,index) in data.zzbcs.zzb_zibList"
        :key="zzb_zib.$$abHashCode"
      >
        <div class="subtable-toolbar-gongwen">
          <ab-sub-del
            v-model="data.zzbcs.zzb_zibList"
            :index="index"
            :permission="scopeTablePermission.zzbcs.zzb_zib"
            >移除</ab-sub-del
          >
        </div>
        <table class="subtable-gongwen">
          <tr v-ab-permission="permission.zzbcs.zzb_zib.xh">
            <th colspan="2">
              <ab-required :permission="scopePermission.xh"></ab-required>序号
            </th>
            <td colspan="22">
              <ab-sn
                v-model="zzb_zib.xh"
                :permission="scopePermission.xh"
                :index="index"
              ></ab-sn>
            </td>
          </tr>
          <tr v-ab-permission="permission.zzbcs.zzb_zib.c">
            <th colspan="2">
              <ab-required :permission="scopePermission.c"></ab-required>c
            </th>
            <td colspan="22">
              <ab-input
                v-model="zzb_zib.c"
                placeholder="请输入c"
                :permission="scopePermission.c"
                :rules="[]"
                :desc="'子表-c【第'+(index+1)+'条】'"
                :disabled="false"
              ></ab-input>
            </td>
          </tr>
          <tr v-ab-permission="permission.zzbcs.zzb_zib.d">
            <th colspan="2">
              <ab-required :permission="scopePermission.d"></ab-required>d
            </th>
            <td colspan="22">
              <ab-input
                v-model="zzb_zib.d"
                placeholder="请输入d"
                :permission="scopePermission.d"
                :rules="[]"
                :desc="'子表-d【第'+(index+1)+'条】'"
                :disabled="false"
              ></ab-input>
            </td>
          </tr>
        </table>
      </ab-sub-scope>
    </td>
  </tr>
</table>
<abTablePlugins>
  <ab-calculate
    v-model="data.zzbcs.b"
    :script=" abSubSum(data.zzbcs.zzb_zibList,'d')  "
    desc="主表B字段=子表D字段的合"
    :decimals="2"
  ></ab-calculate>
</abTablePlugins>
  • 在线表单 js 示例(该部分是 vue 的混入写法) 在线表单js
js
window.custFormComponentMixin = {
  data: function () {
    return { user: { name: '张珊' } }
  },
  created: function () {
    console.log('脚本将会混入自定义表单组件中...')
  },
  methods: {
    testaaa: function () {
      alert(1)
    },
    custValid: function () {
      // 执行业务校验,return false则终止提交
      return true
    }
  },
  watch: {
    'data.xxx.xxx': function () {
      debugger
      console.log(this.data.xxx.xxx)
    }
  }
}

源码模式可用的参数

源码模式可以直接使用表单中的数据

  • 业务对象 数据 data.boCode.xxx
  • 子表默认数据 initData.tableCode.xxx
  • 表单权限 permisson.boCode.tableCode.xxx
  • 在流程环境时
    • 任务数据 bpmTask
    • 流程实例数据 bpmInstance

源码模式内置的通用函数 - 请求函数 request 如:this.request({url: xxx,method: 'post', params}) - 工具类 abUtil 暂时未加入,如果需要请参考 request 自行引入package\ab-form\components\custFormBaseImports.ts

参数详细说明
  • data 的示例和字段说明 :业务数据,以 boCode 为别名可以访问业务对象数据 如:js 中通过 this.data.boCode.name 取值,或者 Vue HTML 模板中 通过 data.boCode.name 取值。
js
"data": {
	"zzbcs": {//业务对象的编码
		"a": "11111111111",//字段a
		"b": "222222222222",//字段b
		"id": "1612731573972353024",//主键
		"_loadMap": {//子表的加载情况,用于异步加载数据
			"zzb_zb": true,
			"zzb_zib": true
		},
		"zzb_zibList": [{//子表编码zzb_zib,因为是一对多的关系,自带List后缀
			"xh": 1,
			"c": "11",
			"d": "22",
			"_loadMap": {
				"zzb_zb_zb": true,
				"zzb_zib": true
			},
			"id": "1612731574148513792",
			"aid": "1612731573972353024",
			"zzb_zb_zbList": []
		}],
	}
},
  • initData 的示例和字段说明 :表单的初始化数据,路径格式:initData.业务对象编码.业务实体编码.字段,在新增子表时,会以初始化数据为目标增加数据。
js
"initData": {
	"zzbcs": {//业务对象编码
		"zzb_zb": {//业务实体编码-主表
			"a": "",
			"b": "",
			"_loadMap": {
				"zzb_zb": true,
				"zzb_zib": true
			}
		},
		"zzb_zib": {//业务实体编码-子表
			"xh": "",
			"c": "系统管理员",//配置了当前用户名称为默认值
			"d": "",
			"_loadMap": {
				"zzb_zb_zb": true,
				"zzb_zib": true
			}
		},
		"zzb_zb_zb": {},//业务实体编码-子表的子表(第三层子表),这种数据格式是表单没有引入它
	}
},
  • permission 的示例和字段说明 :表单字段的权限数据,路径格式:permission.业务对象编码.业务实体编码.字段权限,权限值 n:无权限、r:只读、w:编辑、b:必填。
js
"permission": {
	"zzbcs": {//业务对象编码
		"zzb_zb": {//业务实体编码
			"a": "w",//字段权限
			"b": "w"
		},
		"zzb_zb_zb": {
			"e": "w",
			"f": "w",
			"bid": "w"
		},
		"zzb_zib": {
			"xh": "w",
			"c": "w",
			"d": "w",
			"aid": "w"
		}
	}
},
  • tablePermission 的示例和字段说明 :表单业务表的权限数据,路径格式:tablePermission.业务对象编码.业务实体权限,权限值 n:无权限、r:只读、w:编辑、b:必填。
js
"tablePermission": {
	"zzbcs": {//业务对象编码
		"zzb_zb": "w",//业务实体权限
		"zzb_zb_zb": "w",
		"zzb_zib": "w"
	}
},
  • permissionType 和 permissionValue :这两个值主要用于异步加载数据。permissionType:权限的类型 form-表单、flow-流程、flowNode-流程节点;permissionValue:权限的值;

源码模式使用流程参数

  • 在流程中使用业务表单时,表单可用额外的流程数据

  • bpmTask 的示例和字段说明 :流程任务的相关信息,路径格式:bpmTask.字段,详细字段可参考后端 BpmTask.java。

js
"bpmTask": {
	"id": "1605047070176845824",//任务主键
	"name": "用户任务1",//任务名称
	"nodeKey": "UserTask1",//任务节点key
	"title": "系统管理员11发起的峻哥专用_会签测试",//任务标题
	"instId": "1605046838202474496",//流程实例主键
	"actTaskId": "1605047070176845824",//activiti引擎任务ID
	"actExecutionId": "1605047069300236288",//activiti引擎执行ID
	"defId": "1548864331912663040",//流程定义ID
	"statusArr": "normal",//任务的状态历史,多状态用,分割。eg:normal,sign
	"assigneeNames": "系统管理员11",//候选人名称
	"priority": 50,//紧急程度
	"supportMobile": 0,//任务是否支持移动端
	"taskType": "userTask",//任务类型
	"taskTypeDeclaringClass": "com.dstz.bpm.api.enums.TaskType",//任务类型显示信息
	"taskTypeKey": "userTask",//任务类型显示信息
	"taskTypeLabelCss": "primary",//任务类型显示信息
	"taskTypeValue": "用户任务",//任务类型名称
	"parentId": "",//父ID
	"typeCode": "flowcs",//流程定义的分类编码
	"createBy": "1",//创建人ID
	"createTime": "2022-12-20 11:46:56",//创建时间
	"createOrgId": "1574336018731565056",//创建人所在组织
	"updater": "系统管理员11",//更新人名称
	"updateTime": "2022-12-20 11:46:56",//更新时间
	"updateBy": "1",//更新人ID
	"status": "normal",//任务状态
	"statusDeclaringClass": "com.dstz.bpm.api.enums.TaskStatus",//任务状态显示信息
	"statusDesc": "普通任务",//任务状态显示信息
	"statusKey": "normal",//任务状态显示信息
	"statusLabelCss": "primary",//任务状态显示信息
	"statusValue": "普通",//任务状态名称
	"durMs": 1853622180,//持续时间
	"isDue": false//是否逾期
}
  • bpmInstance 的示例和字段说明 :流程实例的相关信息,路径格式:bpmInstance.字段,详细字段可参考后端 BpmInstance.java。
js
"bpmInstance": {
	"id": "1605046838202474496",//流程实例ID
	"title": "系统管理员11发起的峻哥专用_会签测试",//标题
	"defId": "1548864331912663040",//流程定义ID
	"actInstId": "1605047069283459072",//activiti引擎实例ID
	"parentId": "",//父ID
	"defKey": "jgzy_hqcs",//流程定义key
	"bizId": "1605047068612370432",//业务数据ID
	"status": "running",//实例状态
	"statusDesc": "运行中",//实例状态名称
	"statusCss": "primary",//实例状态显示相关
	"supportMobile": 0,//是否支持移动端
	"suspensionState": 0,//是否挂起
	"typeCode": "flowcs",//流程定义分类编码
	"summary": "a1:1\nb:1",//概要字段
	"createTime": "2022-12-20 11:46:57",//创建时间
	"creator": "系统管理员11",//创建人名称
	"createBy": "1",//创建人ID
	"createOrgId": "1574336018731565056",//创建人组织ID
	"updateTime": "2022-12-20 11:46:57",//更新时间
	"updater": "系统管理员11",//更新人名称
	"updateBy": "1",//更新人ID
	"rev": 0//版本号
},

表单中可以用的组件和指令

  • 系统为表单提供了丰富的 vue 组件和指令,表单的引入组件和指令的文件src\agilebpm\ab-form\custFormBaseImports.ts
js
// 函数计算
import { formCalculateFunctions } from './form-base/calculateFunctions'
// agileBPM 通用組件庫
import abSubAdd from './form-base/sub-table/ab-sub-add.vue'
import abSubDel from './form-base/sub-table/ab-sub-del.vue'
import abSubScopeTr from './form-base/sub-table/ab-sub-scope-tr.vue'
import abSubTrScope from './form-base/sub-table/ab-sub-tr-scope.vue'
import abRequired from './form-base/ab-required.vue'
import abSubScope from './form-base/sub-table/ab-sub-scope.vue'
import abSubDetail from './form-base/sub-table/ab-sub-detail.vue'
import abSubDetailDialog from './form-base/sub-table/ab-sub-detail-dialog.vue'
import abSubLoad from './form-base/sub-table/ab-sub-load.vue'
import abFormGroup from './form-base/form-group/ab-form-group.vue'
import abFormItem from './form-base/form-group/ab-form-item.vue'
import abPermission from './form-base/ab-permission'
import { ElButtonGroup as abButtonGroup, ElCard as abCard } from 'element-plus'
import abInput from './ab-input/abInput.vue'
import abDate from './ab-date/abDate.vue'
import abMultipleDate from './ab-multiple-date/abMultipleDate.vue'
import abCascader from './ab-cascader/abCascader.vue'
import abCheckboxGroup from './ab-checkbox-group/abCheckboxGroup.vue'
import abDynamicSelect from './ab-dynamic-select/abDynamicSelect.vue'
import abNumber from './ab-number/abNumber.vue'
import abRadioGroup from './ab-radio-group/abRadioGroup.vue'
import abSelect from './ab-select/abSelect.vue'
import abTreeSelect from './ab-tree-select/abTreeSelect.vue'
import abSerialNo from './ab-serial-no/index.vue'
import abSignature from './ab-signature/index.vue'
import abSn from './ab-sn/abSn.vue'
import abSwitch from './ab-switch/abSwitch.vue'
import abRate from './ab-rate/abRate.vue'
import abUpload from './ab-upload/abUpload.vue'
import abCustomDialog from './ab-custom-dialog/abCustomDialog.vue'
import abTablePlugins from './ab-table-plugins/index.vue'
import abCalculate from './ab-table-plugins/abCalculate.vue'
import abCustomQuery from './ab-table-plugins/abCustomQuery.vue'
import abFlowQuote from './ab-flow-quote/index.vue'
import abRichEditor from './ab-rich-editor/abRichEditor.vue'
  • 在源码模式下,用户可自行使用这些组件和指令,每个指令的功能和使用方式可查阅文档或到对应指令内部看功能说明(注意:大部分组件是可在表单设计中配置出来的,例如:全部字段相关的组件abInput、abSn...、高级控件:自定义对话框abCustomDialog、自定义查询abCustomQuery、函数计算abCalculate等)。同时,用户也可以自行开发表单组件,并在该文件中引入则可在表单中使用。

注意

移动端与 PC 端支持一次生成,但是移动端与 PC 端 vue 模板源码是分别存储的。 如果源码模式二次开发,请分别修改两边的源码,不过他们语法、组件都基本相同,只有部分风格模板的子表展示组件略有不同

在线表单 开发指导 has loaded