king
2024-05-20 8f9f9322f32e0553cb58068b39ae57e3d997ec65
src/menu/components/table/edit-table/columns/editColumn/formconfig.jsx
@@ -2,7 +2,7 @@
 * @description 获取显示列表单配置信息
 * @param {object} card       // 搜索条件对象
 */
export function getColumnForm (card, fields = [], columns = []) {
export function getColumnForm (card, fields = [], columns = [], wrap) {
  let roleList = sessionStorage.getItem('sysRoles')
  if (roleList) {
    try {
@@ -14,7 +14,6 @@
    roleList = []
  }
  // if (['picture', 'link', 'colspan'].includes(card.type)) {
  if (['picture', 'link'].includes(card.type)) {
    card.type = 'text'
  }
@@ -26,63 +25,86 @@
    value: 'number',
    text: '数字'
  }, {
    value: 'textarea',
    text: '多行文本'
  }, {
    value: 'custom',
    text: '自定义列'
  }, {
    value: 'colspan',
    text: '合并列'
  // }, {
  //   value: 'action',
  //   text: '操作'
  }, {
    value: 'formula',
    text: '公式'
  }, {
    value: 'textarea',
    text: '多行文本'
  }, {
    value: 'colspan',
    text: '合并列'
  }, {
    value: 'extend',
    text: '扩展列'
  }, {
    value: 'index',
    text: '序号'
  }]
  if (!card.isSub) {
    options.push({
      value: 'action',
      text: '操作'
    })
  }
  let editCols = [
    // {
    //   field: '$sub',
    //   label: '提交'
    // },
    {
      field: '$sub',
      label: '提交'
      field: '$noAct',
      label: '无动作'
    },
    {
      field: '$next',
      label: '下一行'
    },
    {
      field: '$noAct',
      label: '无动作'
    }
  ]
  columns.forEach(col => {
    if (col.editable === 'true' && col.uuid !== card.uuid) {
      editCols.push({
        field: col.uuid,
        label: col.label
      })
    } else if (col.type === 'colspan') {
      col.subcols.forEach(subcol => {
        if (subcol.editable === 'true' && subcol.uuid !== card.uuid) {
          editCols.push({
            field: subcol.uuid,
            label: col.label + '-' + subcol.label
          })
        }
      })
    }
  if (card.enter === '$sub') {
    card.enter = '$noAct'
  }
  if (wrap.commit === 'change') {
    editCols[0].label = '失去焦点'
  }
  let cols = []
  let getcols = (columns, suplabel = '') => {
    columns.forEach(col => {
      if (col.editable === 'true' && col.uuid !== card.uuid) {
        cols.push({
          field: col.uuid,
          label: suplabel + col.label
        })
      } else if (col.type === 'colspan') {
        getcols(col.subcols, col.label + '-')
      }
    })
  }
  getcols(columns)
  editCols.push(...cols)
  cols.forEach(col => {
    editCols.push({
      field: '$next_' + col.field,
      label: col.label + '(下一行)'
    })
  })
  editCols.push({
    field: '$next_' + card.uuid,
    label: card.label + '(下一行)'
  })
  if (wrap.commit === 'change') {
    editCols.push({
      field: '$noActX',
      label: '无动作',
      disabled: card.editType !== 'select'
    })
  } else if (card.enter === '$noActX') {
    card.enter = '$noAct'
  }
  return [
    {
@@ -136,7 +158,7 @@
      type: 'radio',
      key: 'IsSort',
      label: '排序',
      initVal: card.IsSort || (card.isSub ? 'false' : 'true'),
      initVal: card.IsSort || (card.isSub || card.type === 'custom' ? 'false' : 'true'),
      required: true,
      options: [{
        value: 'true',
@@ -144,6 +166,32 @@
      }, {
        value: 'false',
        text: '否'
      }]
    },
    {
      type: 'select',
      key: 'sortField',
      label: '排序字段',
      initVal: card.sortField || '',
      required: true,
      options: fields
    },
    {
      type: 'radio',
      key: 'eval',
      label: '解析方式',
      initVal: card.eval || 'false',
      tooltip: '当公式内容涉及计算时请选择“计算”,当公式内容为字段拼接时请选择“字段替换”,使用函数时入参为data(数组)。',
      required: false,
      options: [{
        value: 'false',
        text: '字段替换'
      }, {
        value: 'true',
        text: '计算'
      }, {
        value: 'func',
        text: '函数'
      }]
    },
    {
@@ -165,17 +213,91 @@
    },
    {
      type: 'radio',
      key: 'sum',
      label: '显示合计',
      initVal: card.sum || 'false',
      tooltip: '合计信息只在使用系统数据源时有效。',
      required: false,
      key: 'colUnit',
      label: '单位',
      initVal: card.colUnit || 'day',
      required: true,
      options: [{
        value: 'true',
        text: '是'
        value: 'day',
        text: '天'
      }, {
        value: 'false',
        text: '否'
        value: 'hour',
        text: '小时'
      }]
    },
    {
      type: 'number',
      key: 'shift',
      label: '偏移量',
      initVal: card.shift || 0,
      min: -1000,
      max: 1000,
      decimal: 0,
      required: true
    },
    {
      type: 'number',
      key: 'quota',
      label: '指标数',
      initVal: card.quota || 7,
      min: 1,
      max: 1000,
      decimal: 0,
      required: true
    },
    {
      type: 'select',
      key: 'dayFormat',
      label: '格式化',
      initVal: card.dayFormat || 'M/DD',
      required: true,
      options: [{
        value: 'M/DD',
        label: 'M/DD(4/29)'
      }, {
        value: 'M-DD',
        label: 'M-DD(4-29)'
      }, {
        value: 'M月DD日',
        label: 'M月DD日(4月29日)'
      }, {
        value: 'M/DD week',
        label: 'M/DD week(4/29 星期一)'
      }, {
        value: 'M-DD week',
        label: 'M-DD week(4-29 星期一)'
      }, {
        value: 'M月DD日 week',
        label: 'M月DD日 week(4月29日 星期一)'
      }]
    },
    {
      type: 'select',
      key: 'hourFormat',
      label: '格式化',
      initVal: card.hourFormat || 'H:00',
      required: true,
      options: [{
        value: 'H:00',
        label: 'H:00(15:00)'
      }, {
        value: 'H point',
        label: 'H(15点)'
      }, {
        value: 'h:00',
        label: 'h:00(3:00 pm)'
      }]
    },
    {
      type: 'text',
      key: 'supField',
      label: '上级字段',
      initVal: card.supField || '',
      tooltip: '来源于上级组件的字段集(上级组件为空时从url参数中选取),该字段值(用逗号分隔)可控制扩展列的列名。',
      required: false,
      rules: [{
        pattern: /^[0-9a-zA-Z_]*$/ig,
        message: '字段名只允许包含数字、字母以及_'
      }]
    },
    {
@@ -193,7 +315,7 @@
      }]
    },
    {
      type: 'radio',
      type: 'select',
      key: 'editType',
      label: '编辑类型',
      initVal: card.editType || 'text',
@@ -207,6 +329,59 @@
      }, {
        value: 'switch',
        text: '开关'
      }, {
        value: 'date',
        text: '日期(天)'
      }, {
        value: 'popSelect',
        text: '选择器'
      }]
    },
    {
      type: 'radio',
      key: 'precision',
      label: '精确度',
      initVal: card.precision || 'day',
      options: [{
        value: 'day',
        text: '天'
      }, {
        value: 'hour',
        text: '小时'
      }, {
        value: 'minute',
        text: '分钟'
      }, {
        value: 'second',
        text: '秒'
      }]
    },
    {
      type: 'radio',
      key: 'declareType',
      label: '数据类型',
      tooltip: '声明变量时的类型,时间格式datetime或文本格式nvarchar(50)。',
      initVal: card.declareType || 'datetime',
      options: [{
        value: 'datetime',
        text: 'datetime'
      }, {
        value: 'nvarchar(50)',
        text: 'nvarchar(50)'
      }]
    },
    {
      type: 'radio',
      key: 'required',
      label: '必填',
      initVal: card.required || 'false',
      required: false,
      options: [{
        value: 'false',
        text: '否'
      }, {
        value: 'true',
        text: '是'
      }]
    },
    {
@@ -260,16 +435,6 @@
      }]
    },
    {
      type: 'select',
      key: 'editField',
      label: '编辑字段',
      initVal: card.editField || '',
      tooltip: '当值与提示文字不同时,可额外添加编辑字段,作为实际值的录入字段。',
      allowClear: true,
      required: false,
      options: fields
    },
    {
      type: 'options',
      key: 'options',
      label: '选项',
@@ -281,7 +446,187 @@
      key: 'dataSource',
      label: '数据源',
      initVal: card.dataSource || '',
      placeholder: '系统变量:mk_departmentcode、mk_organization、mk_user_type。公共值@BID@。',
      required: true,
    },
    {
      type: 'fields',
      key: 'columns',
      label: '字段集',
      initVal: card.columns || [],
      required: true,
      readonly: false,
      columns: [
        {
          title: '名称',
          dataIndex: 'label',
          inputType: 'input',
          editable: true,
          initval: 'label',
          width: '20%'
        },
        {
          title: '字段',
          dataIndex: 'field',
          inputType: 'input',
          editable: true,
          unique: true,
          strict: true,
          copy: true,
          initval: 'field',
          rules: [{
            pattern: /^[\u4E00-\u9FA50-9a-zA-Z_-]*$/ig,
            message: '请使用数字、字母、汉字以及_-'
          }],
          width: '20%'
        },
        {
          title: '隐藏',
          dataIndex: 'Hide',
          inputType: 'radio',
          editable: true,
          width: '20%',
          initval: 'false',
          options: [
            {value: 'true', text: '是'},
            {value: 'false', text: '否'},
          ],
          render: (text, record) => {
            if (text === 'true') {
              return '是'
            } else {
              return '否'
            }
          }
        },
        {
          title: '排序',
          dataIndex: 'IsSort',
          inputType: 'radio',
          editable: true,
          width: '20%',
          initval: 'false',
          options: [
            {value: 'true', text: '是'},
            {value: 'false', text: '否'},
          ],
          render: (text, record) => {
            if (text === 'true') {
              return '是'
            } else {
              return '否'
            }
          }
        },
        {
          title: '列宽',
          dataIndex: 'Width',
          inputType: 'number',
          editable: true,
          width: '20%',
          initval: 120
        }
      ]
    },
    {
      type: 'select',
      key: 'primaryKey',
      label: '主键',
      initVal: card.primaryKey || '',
      required: true,
      readonly: false,
      options: 'columns'
    },
    {
      type: 'text',
      key: 'order',
      label: '默认排序',
      initVal: card.order || '',
      placeholder: 'ID asc',
      required: true
    },
    {
      type: 'select',
      key: 'showField',
      label: '显示字段',
      initVal: card.showField || '',
      tooltip: '用于控制单元格中的显示内容。',
      required: false,
      options: 'columns'
    },
    {
      type: 'select',
      key: 'controlField',
      label: '禁用字段',
      initVal: card.controlField || '',
      tooltip: '用于控制行数据是否可选择。字段值为true时,选项不可选。',
      required: false,
      allowClear: true,
      options: 'columns'
    },
    {
      type: 'text',
      key: 'searchKey',
      label: '搜索字段',
      initVal: card.searchKey || '',
      tooltip: '多个值请用逗号分隔。',
      required: false,
      rules: [{
        pattern: /^[0-9a-zA-Z,_-]*$/ig,
        message: '字段名只允许包含数字、字母以及_-',
      }]
    },
    {
      type: 'number',
      key: 'popWidth',
      label: '弹窗宽度',
      initVal: card.popWidth || 60,
      tooltip: '小于100时为百分率,大于100时为绝对值。',
      required: true
    },
    {
      type: 'radio',
      key: 'laypage',
      label: '分页',
      initVal: card.laypage || 'true',
      required: false,
      options: [{
        value: 'true',
        text: '是'
      }, {
        value: 'false',
        text: '否'
      }]
    },
    {
      type: 'radio',
      key: 'onload',
      label: '初始化',
      initVal: card.onload || 'true',
      tooltip: '当没有设置搜索字段时,初始化加载数据。',
      required: false,
      options: [{
        value: 'true',
        text: '加载'
      }, {
        value: 'false',
        text: '不加载'
      }]
    },
    {
      type: 'radio',
      key: 'cache',
      label: '选项查询',
      initVal: card.cache || 'true',
      tooltip: '数据查询是否使用缓存。',
      required: false,
      options: [{
        value: 'true',
        text: '缓存'
      }, {
        value: 'false',
        text: '实时'
      }]
    },
    {
      type: 'text',
@@ -341,20 +686,6 @@
    },
    {
      type: 'radio',
      key: 'required',
      label: '必填',
      initVal: card.required || 'false',
      required: false,
      options: [{
        value: 'false',
        text: '否'
      }, {
        value: 'true',
        text: '是'
      }]
    },
    {
      type: 'radio',
      key: 'database',
      label: '数据库',
      initVal: card.database || 'local',
@@ -370,14 +701,14 @@
      type: 'select',
      key: 'enter',
      label: '回车切换',
      initVal: card.enter || '$next',
      tooltip: '包括文本或数值回车事件、下拉菜单选中事件、开关切换事件。',
      initVal: card.enter || '$noAct',
      tooltip: '包括文本或数值回车事件、下拉菜单、选择器、时间变化事件、开关切换事件。',
      options: editCols
    },
    {
      type: 'select',
      key: 'ctrlField',
      label: '禁用字段',
      label: '禁止编辑',
      initVal: card.ctrlField || '',
      tooltip: '控制单元格是否可以编辑。',
      allowClear: true,
@@ -387,28 +718,21 @@
    {
      type: 'text',
      key: 'ctrlValue',
      label: '禁用值',
      label: '禁止值',
      initVal: card.ctrlValue || '',
      tooltip: '多个值用逗号分隔。',
      required: false
    },
    // {
    //   type: 'radio',
    //   key: 'footEnter',
    //   label: '末行回车',
    //   initVal: card.footEnter || 'false',
    //   tooltip: '新增功能仅在表格可新增时有效。',
    //   options: [{
    //     value: 'sub',
    //     text: '提交'
    //   }, {
    //     value: 'add',
    //     text: '新增'
    //   }, {
    //     value: 'false',
    //     text: '无动作'
    //   }]
    // },
    {
      type: 'select',
      key: 'clearField',
      label: '清空字段',
      initVal: card.clearField || '',
      tooltip: '当前字段编辑时需要清空的字段。',
      allowClear: true,
      required: false,
      options: fields
    },
    {
      type: 'number',
      key: 'decimal',
@@ -416,7 +740,7 @@
      max: 18,
      precision: 0,
      label: '小数位',
      initVal: card.decimal || 0,
      initVal: card.decimal,
      required: false
    },
    {
@@ -490,18 +814,6 @@
      required: false,
    },
    {
      type: 'radio',
      key: 'eval',
      label: '解析',
      initVal: card.eval || 'false',
      tooltip: '当公式内容涉及计算时请选择“是”,当公式内容为字段拼接时请选择“否”。',
      required: false,
      options: [
        { value: 'true', text: '是' },
        { value: 'false', text: '否' }
      ]
    },
    {
      type: 'textarea',
      key: 'formula',
      label: '公式',
@@ -519,6 +831,21 @@
      options: fields
    },
    {
      type: 'radio',
      key: 'noValue',
      label: '空值',
      initVal: card.noValue || 'show',
      tooltip: '数值为 0 或时间小于 1949-10-02 时,是否显示',
      required: false,
      options: [{
        value: 'show',
        text: '显示'
      }, {
        value: 'hide',
        text: '隐藏'
      }]
    },
    {
      type: 'multiselect',
      key: 'blacklist',
      label: '黑名单',