1. 如何获取明细的行数

前提:假设表单中有一个明细组件,id 为 tableField_k6age73g
代码:**

  1. const ctx = window.LeGao.getContext();
  2. const tableField = ctx.store.get('tableField_k6age73g');
  3. const value = tableField.getVal();
  4. const length = (value || []).length;
  5. console.log('length: ', length);

示例:
image.png

2. 如何给“关联其它表单数据”的“下拉单选框”添加默认值?

前提:假设表单中有一个“下拉单选框”,id为selectField_k6blcyi6,然后选项是“关联其它表单数据”
代码:

  1. function didMount(ctx) {
  2. // 判断当前属于什么状态
  3. const instanceData = ctx.getInstanceData() || {};
  4. const modeData = instanceData.flowData || {};
  5. const isViewMode = modeData.viewMode;
  6. const isEditMode = modeData.editMode;
  7. const isSubmitMode = !(isViewMode || isEditMode);
  8. const select = ctx.store.get('selectField_k6bm4ef4');
  9. // 只有提交态才需要设置默认值,详情页不需要设置
  10. if (isSubmitMode) {
  11. // 如果参数是从 url 上面获取的,需要添加一个延时,否则无法赋值成功
  12. setTimeout(() => {
  13. select.set('fieldData', {
  14. text: '1148-中',
  15. value: '1148-中',
  16. });
  17. }, 10);
  18. }
  19. }

示例:
image.png
image.png

3. 如何判断当前表单或者流程的状态?

依照下列代码,可以判断当前表单的提交态、编辑态、预览态

  1. const ctx = window.LeGao.getContext();
  2. /* 判断页面状态的代码 -begin */
  3. const instanceData = ctx.getInstanceData() || {};
  4. const modeData = instanceData.flowData || {};
  5. // 详情态
  6. const isViewMode = modeData.viewMode;
  7. // 单据详情页编辑态 & 流程审批态
  8. const isEditMode = modeData.editMode;
  9. // 提交态
  10. const isSubmitMode = !(isViewMode || isEditMode);
  11. /* 判断页面状态的代码 -end */
  12. /* 测试代码 */
  13. if (isSubmitMode) {
  14. ctx.fn.dialog({
  15. method: 'alert', // 或confirm
  16. title: '当前是提交态',
  17. });
  18. }
  19. if (isViewMode) {
  20. ctx.fn.dialog({
  21. method: 'alert', // 或confirm
  22. title: '当前是详情态',
  23. });
  24. }
  25. if (isEditMode) {
  26. ctx.fn.dialog({
  27. method: 'alert', // 或confirm
  28. title: '当前是详情页编辑态',
  29. });
  30. }
  31. /* 测试代码 */

4. 单据页面提交成功后的回调函数执行

说明:定义一个名为“onYidaPageSubmit”的函数,然后 export 出来即可。在单据提交成功后,页面链接跳转之前,会执行 onYidaPageSubmit 这个函数。
PS:

  • onYidaPageSubmit 需要返回一个 Promise。标准格式代码如下所示;
  • 如果需要嵌套调用多个远程接口,可以直接在回调里面再 return Promise 即可;
  • 如果是单据免登页面提交的话,需要首先在「设置」里面配置好跳转链接,否则该回调不会执行。

代码:

  1. export function onYidaPageSubmit(ctx, params) {
  2. return ctx.fn.fetch({
  3. url: 'https://mocks.alibaba-inc.com/mock/xxpt/demo/DescribeDBInstances.json',
  4. data: {},
  5. method: 'GET'
  6. }).then((content) => {
  7. debugger;
  8. console.log('content: ', content);
  9. return ctx.fn.fetch({
  10. url: 'https://mocks.alibaba-inc.com/mock/xxpt/demo/DescribeDBInstances.json',
  11. data: {},
  12. method: 'GET'
  13. }).then(result => {
  14. debugger;
  15. console.log('result: ', result);
  16. return ctx.fn.fetch({
  17. url: 'https://mocks.alibaba-inc.com/mock/xxpt/demo/DescribeDBInstances.json',
  18. data: {},
  19. method: 'GET'
  20. }).then(haha => {
  21. debugger;
  22. console.log('haha: ', haha);
  23. });
  24. });
  25. }).catch(function (error) {
  26. console.log(error)
  27. });
  28. }

示例:
image.png

image.png

在设置中配置跳转的地址方式
image.png

5. JS 如何动态设置表单组件必填

说明:假设表单中有一个 id 为 textField_k6jfrb12单行输入框
代码:

  1. const ctx = window.LeGao.getContext();
  2. const name = ctx.store.get('textField_k6jfrb12');
  3. name.set('validation', [{ type: 'required', message: '请输入名字' }]);
  4. name.forceValid();

示例:
image.png
image.png
**

6. 如何监听数据联动值变化?

  1. const _context = window.LeGao && window.LeGao.getContext();
  2. _context && _context.emitter.on(设置了数据联动的组件id, (params = {}) => {
  3. console.log('params: ', params);
  4. })

利用上面这段代码,将“设置了数据联动的组件id”替换成实际的组件 id,即可监听数据联动值变化,触发后面的回调函数,打印出 params 参数。