king
2024-01-10 d1dbe184ea1026e20a202ac9f8f7c8c049665ae3
src/menu/components/form/formaction/formconfig.jsx
@@ -4,13 +4,18 @@
 * @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 = '上一步'
  } else if (card.type === 'next') {
    _type = '下一步'
  } else if (card.type === 'close') {
    _type = '关闭'
  } else if (card.type === 'reset') {
    _type = '重置'
  }
  let menulist = []
@@ -40,10 +45,105 @@
    }
  }
  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 resets = []
  fields.forEach(item => {
    if (item.type !== 'text' && item.type !== 'number') return
    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
    },
@@ -54,6 +154,21 @@
      initVal: card.label,
      required: true,
      readonly: false
    },
    {
      type: 'radio',
      key: 'actionType',
      label: '执行操作',
      initVal: card.actionType || 'default',
      tooltip: '关闭功能:管理系统中会关闭当前标签,子应用中为返回上一页。',
      required: true,
      options: [{
        value: 'default',
        text: '默认'
      }, {
        value: 'close',
        text: '关闭'
      }]
    },
    {
      type: 'radio',
@@ -80,6 +195,7 @@
      key: 'procMode',
      label: '参数处理',
      initVal: card.procMode || 'system',
      tooltip: '当返回值存在 mk_ex_invoke 且值为 false 时,不会调用外部接口;当返回值存在 mk_ex_data 时,将以此为参数分批请求自定义接口。注:当选“无”时,按钮选行时会传递主键,存在表单时会传递表单字段,存在BID时会传BID字段。',
      required: true,
      options: [{
        value: 'system',
@@ -145,15 +261,16 @@
    {
      type: 'radio',
      key: 'sysInterface',
      label: '系统接口',
      label: '系统类型',
      initVal: card.sysInterface || 'false',
      tooltip: '业务系统指同一sso下的其他业务系统',
      required: true,
      options: [{
        value: 'true',
        text: '是'
        text: '单点'
      }, {
        value: 'false',
        text: '否'
        text: '业务'
      }]
    },
    {
@@ -179,35 +296,6 @@
      initVal: card.proInterface || '',
      tooltip: '正式系统所使用的接口地址。',
      required: false
    },
    {
      type: 'radio',
      key: 'method',
      label: '请求方式',
      initVal: card.method || 'post',
      required: true,
      options: [{
        value: 'get',
        text: 'GET'
      }, {
        value: 'post',
        text: 'POST'
      }]
    },
    {
      type: 'radio',
      key: 'cross',
      label: '跨域请求',
      initVal: card.cross || 'true',
      tooltip: '如果自定义接口不支持跨域请求,会通过当前系统转发。',
      required: false,
      options: [{
        value: 'true',
        text: '支持'
      }, {
        value: 'false',
        text: '不支持'
      }]
    },
    {
      type: 'radio',
@@ -247,6 +335,68 @@
    },
    {
      type: 'radio',
      key: 'method',
      label: '请求方式',
      initVal: card.method || 'post',
      required: true,
      options: [{
        value: 'get',
        text: 'GET'
      }, {
        value: 'post',
        text: 'POST'
      }]
    },
    {
      type: 'radio',
      key: 'cross',
      label: '接口跨域',
      initVal: card.cross || 'true',
      tooltip: '如果自定义接口不支持跨域请求,会通过当前系统转发。',
      required: false,
      options: [{
        value: 'true',
        text: '支持'
      }, {
        value: 'false',
        text: '不支持'
      }]
    },
    {
      type: 'radio',
      key: 'stringify',
      label: '序列化',
      initVal: card.stringify || 'text',
      required: false,
      options: [{
        value: 'text',
        text: 'Text'
      }, {
        value: 'JSON',
        text: 'JSON'
      }, {
        value: 'qs',
        text: 'qs'
      }]
    },
    {
      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: '行设置',
      initVal: card.Ot,
@@ -274,7 +424,7 @@
      }, {
        value: 'mainline',
        text: '刷新上级组件 - 行'
      }]
      }, ...refresh]
    },
    {
      type: (appType === 'pc' || appType === 'mob') ? 'select' : 'cascader',
@@ -326,6 +476,26 @@
      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: 'reload',
      label: '上一页',
@@ -340,5 +510,20 @@
        text: '刷新'
      }]
    },
    {
      type: 'radio',
      key: 'formCache',
      label: '表单缓存',
      initVal: card.formCache || 'false',
      tooltip: '主要用于数据修改后,更新相关表单的选项,清空缓存后表单再次打开时数据会重新加载。',
      required: false,
      options: [{
        value: 'false',
        text: '不清空'
      }, {
        value: 'clear',
        text: '清空'
      }]
    },
  ]
}