king
2024-06-11 6395fb4075da51f0d0dac057ee27301584aa630f
src/menu/components/form/formaction/formconfig.jsx
@@ -4,8 +4,9 @@
 * @param {*} type           按钮类型,用于区分可选的打开方式
 */
export function getActionForm (card, functip, tableName, usefulFields, modules, anchors) {
export function getActionForm (card, functip, tableName, usefulFields, modules, anchors, uuid, fields) {
  const appType = sessionStorage.getItem('appType')
  let viewType = sessionStorage.getItem('editMenuType') // 弹窗 popview
  let _type = '提交'
  if (card.type === 'prev') {
    _type = '上一步'
@@ -13,6 +14,8 @@
    _type = '下一步'
  } else if (card.type === 'close') {
    _type = '关闭'
  } else if (card.type === 'reset') {
    _type = '重置'
  }
  let menulist = []
@@ -42,10 +45,120 @@
    }
  }
  let linkButtons = []
  let filterComponent = (components) => {
    components.forEach(item => {
      if (item.type === 'tabs') {
        item.subtabs.forEach(tab => {
          filterComponent(tab.components)
        })
      } else if (item.type === 'group') {
        filterComponent(item.components)
      } else {
        item.action && item.action.forEach(cell => {
          if (cell.hidden === 'true' || cell.uuid === uuid) return
          if (!['exec', 'prompt', 'pop'].includes(cell.OpenType)) return
          linkButtons.push({
            value: cell.uuid,
            label: cell.label + '(' + item.name + ')'
          })
        })
        if (item.type === 'card' && item.subcards) {
          item.subcards.forEach(m => {
            if ((item.subtype === 'datacard' || item.subtype === 'dualdatacard') && m.$cardType !== 'extendCard') return
            m.elements.forEach(cell => {
              if (cell.eleType !== 'button' || cell.hidden === 'true' || cell.uuid === uuid) return
              if (!['exec', 'prompt', 'pop'].includes(cell.OpenType)) return
              linkButtons.push({
                value: cell.uuid,
                label: cell.label + '(' + item.name + ')'
              })
            })
          })
        } else if (item.type === 'balcony') {
          item.elements.forEach(cell => {
            if (cell.eleType !== 'button' || cell.hidden === 'true' || cell.uuid === uuid) return
            if (!['exec', 'prompt', 'pop'].includes(cell.OpenType)) return
            linkButtons.push({
              value: cell.uuid,
              label: cell.label + '(' + item.name + ')'
            })
          })
        } else if (item.type === 'form') {
          item.subcards.forEach(group => {
            if(group.uuid === uuid) return
            if (item.subcards.length > 1) {
              linkButtons.push({
                value: group.uuid,
                label: group.subButton.label + '(' + item.name + '-' + group.setting.title + ')'
              })
            } else {
              linkButtons.push({
                value: group.uuid,
                label: group.subButton.label + '(' + item.name + ')'
              })
            }
          })
        }
      }
    })
  }
  filterComponent(window.GLOB.customMenu.components)
  let refresh = []
  if (viewType === 'popview') { // 弹窗标签
    refresh.push({
      value: 'closepoptab', // 关闭弹窗标签
      text: '关闭弹窗'
    })
    refresh.push({
      value: 'popclose',  // 执行弹窗关闭时的刷新
      text: '刷新源组件'
    })
  }
  let closetab = []
  if (!appType && viewType !== 'popview') {
    closetab = [{
      value: 'closetab',
      text: '关闭标签'
    }]
  }
  let resets = []
  fields.forEach(item => {
    if (item.type !== 'text' && item.type !== 'number') return
    if (item.label !== item.field) {
      resets.push({
        value: item.field,
        text: item.label + ' (' + item.field + ')'
      })
    } else {
      resets.push({
        value: item.field,
        text: item.label
      })
    }
  })
  return [
    {
      type: 'tip',
      key: 'type',
      label: '按钮类型',
      initVal: card.type,
      forbid: true
    },
    {
      type: 'tip',
      key: 'typeName',
      label: '按钮类型',
      initVal: _type
    },
@@ -97,7 +210,7 @@
      key: 'procMode',
      label: '参数处理',
      initVal: card.procMode || 'system',
      tooltip: '当返回值存在 mk_ex_invoke 且值为 false 时,不会调用外部接口。',
      tooltip: '当返回值存在 mk_ex_invoke 且值为 false 时,不会调用外部接口;当返回值存在 mk_ex_data 时,将以此为参数分批请求自定义接口。注:当选“无”时,按钮选行时会传递主键,存在表单时会传递表单字段,存在BID时会传BID字段。',
      required: true,
      options: [{
        value: 'system',
@@ -141,7 +254,7 @@
      initVal: card.innerFunc || '',
      tooltip: functip,
      fields: usefulFields,
      tooltipClass: 'middle',
      toolWidth: 350,
      required: true,
      readonly: false
    },
@@ -163,16 +276,16 @@
    {
      type: 'radio',
      key: 'sysInterface',
      label: '系统接口',
      label: '系统类型',
      initVal: card.sysInterface || 'false',
      tooltip: '单点登录系统',
      tooltip: '业务系统指同一sso下的其他业务系统',
      required: true,
      options: [{
        value: 'true',
        text: '是'
        text: '单点'
      }, {
        value: 'false',
        text: '否'
        text: '业务'
      }]
    },
    {
@@ -282,6 +395,22 @@
      }]
    },
    {
      type: 'text',
      key: 'ContentType',
      label: 'Content-Type',
      initVal: card.ContentType || '',
      tooltip: '默认值:application/x-www-form-urlencoded;charset=UTF-8',
      required: false
    },
    {
      type: 'text',
      key: 'outerBlacklist',
      label: '字段黑名单',
      initVal: card.outerBlacklist || '',
      tooltip: '不需要回传的字段可设置字段黑名单,多个值请用逗号分隔。',
      required: false
    },
    {
      type: 'radio',
      key: 'Ot',
      label: '行设置',
@@ -300,6 +429,7 @@
      key: 'execSuccess',
      label: '成功后',
      initVal: card.execSuccess || 'grid',
      tooltip: '如需聚焦表单请以 @focus:聚焦字段@ 格式返回。',
      required: true,
      options: [{
        value: 'never',
@@ -310,7 +440,20 @@
      }, {
        value: 'mainline',
        text: '刷新上级组件 - 行'
      }]
      }, {
        value: 'maingrid',
        text: '刷新上级组件'
      }, ...closetab, ...refresh]
    },
    {
      type: 'cascader',
      key: 'refreshTab',
      label: '刷新菜单',
      initVal: card.refreshTab || [],
      tooltip: '执行成功后(或执行失败且存在刷新项时),需要同步刷新的菜单',
      required: false,
      forbid: appType === 'pc' || appType === 'mob' || viewType === 'popview',
      options: menulist
    },
    {
      type: (appType === 'pc' || appType === 'mob') ? 'select' : 'cascader',
@@ -348,9 +491,18 @@
      key: 'syncComponent',
      label: '同步刷新',
      initVal: card.syncComponent,
      tooltip: '执行成功后需要刷新的组件。注:选择当前组件的上级组件无效,刷新上级组件请选择成功后“刷新上级组件 - 行”。',
      tooltip: '执行成功后(或执行失败且存在刷新项时)需要刷新的组件。注:选择当前组件的上级组件无效,刷新上级组件请选择成功后“刷新上级组件 - 行”。',
      required: false,
      options: modules
    },
    {
      type: 'number',
      key: 'syncDelay',
      label: '刷新延迟',
      initVal: card.syncDelay,
      tooltip: '同步刷新组件的延迟时间,单位毫秒。',
      // placeholder: '单位毫秒',
      required: false
    },
    {
      type: 'cascader',
@@ -360,6 +512,40 @@
      tooltip: '执行成功后,需要跳转的锚点。' + (appType === 'mob' ? '注:小程序中无效' : ''),
      required: false,
      options: anchors
    },
    {
      type: 'select',
      key: 'preButton',
      label: '前置按钮',
      tooltip: '当前按钮执行前,需要执行的按钮。',
      initVal: card.preButton || '',
      required: false,
      allowClear: true,
      options: linkButtons
    },
    {
      type: 'select',
      key: 'resetForms',
      label: '重置表单',
      tooltip: '按钮执行成功后需要重置的表单,表单会恢复默认值并聚焦。',
      initVal: card.resetForms || [],
      required: false,
      mode: 'multiple',
      options: resets
    },
    {
      type: 'radio',
      key: 'returnValue',
      label: '更新表单',
      initVal: card.returnValue || 'false',
      tooltip: '与重置表单配合使用,开启时,必须在自定义脚本中返回数据,用于替换字段集和填充表单。',
      options: [{
        value: 'false',
        text: '禁用'
      }, {
        value: 'true',
        text: '启用'
      }]
    },
    {
      type: 'radio',
@@ -375,6 +561,6 @@
        value: 'true',
        text: '刷新'
      }]
    },
    }
  ]
}