config.ts 5.51 KB
import { FormSchema } from '/@/components/Form';
import { useI18n } from '/@/hooks/web/useI18n';

const { t } = useI18n();
const PolicyTypeEnum = {
  SEQUENTIAL_BY_ORIGINATOR: 'SEQUENTIAL_BY_ORIGINATOR',
  SEQUENTIAL_BY_TENANT: 'SEQUENTIAL_BY_TENANT',
  SEQUENTIAL: 'SEQUENTIAL',
  BURST: 'BURST',
  BATCH: 'BATCH',
};
const PolicyTypeLabelEnum = {
  SEQUENTIAL_BY_ORIGINATOR: 'tenant.config.enum.PolicyTypeLabelEnum.SEQUENTIAL_BY_ORIGINATOR',
  SEQUENTIAL_BY_TENANT: 'tenant.config.enum.PolicyTypeLabelEnum.SEQUENTIAL_BY_TENANT',
  SEQUENTIAL: 'tenant.config.enum.PolicyTypeLabelEnum.SEQUENTIAL',
  BURST: 'tenant.config.enum.PolicyTypeLabelEnum.BURST',
  BATCH: 'tenant.config.enum.PolicyTypeLabelEnum.BATCH',
};

const ProcessTypeEnum = {
  RETRY_FAILED_AND_TIMED_OUT: 'RETRY_FAILED_AND_TIMED_OUT',
  SKIP_ALL_FAILURES: 'SKIP_ALL_FAILURES',
  SKIP_ALL_FAILURES_AND_TIMED_OUT: 'SKIP_ALL_FAILURES_AND_TIMED_OUT',
  RETRY_ALL: 'RETRY_ALL',
  RETRY_FAILED: 'RETRY_FAILED',
  RETRY_TIMED_OUT: 'RETRY_TIMED_OUT',
};

const ProcessTypeLabelEnum = {
  RETRY_FAILED_AND_TIMED_OUT: 'tenant.config.enum.ProcessTypeLabelEnum.RETRY_FAILED_AND_TIMED_OUT',
  SKIP_ALL_FAILURES: 'tenant.config.enum.ProcessTypeLabelEnum.SKIP_ALL_FAILURES',
  SKIP_ALL_FAILURES_AND_TIMED_OUT:
    'tenant.config.enum.ProcessTypeLabelEnum.SKIP_ALL_FAILURES_AND_TIMED_OUT',
  RETRY_ALL: 'tenant.config.enum.ProcessTypeLabelEnum.RETRY_ALL',
  RETRY_FAILED: 'tenant.config.enum.ProcessTypeLabelEnum.RETRY_FAILED',
  RETRY_TIMED_OUT: 'tenant.config.enum.ProcessTypeLabelEnum.RETRY_TIMED_OUT',
};

export const formSchema: FormSchema[] = [
  {
    field: 'name',
    label: t('tenant.config.form.name'),
    component: 'Input',
    required: true,
    rules: [
      {
        pattern: /^[A-Za-z0-9._-]*$/,
        message: t('tenant.config.form.nameRule'),
      },
      {
        required: true,
      },
    ],
    slot: 'nameSlot',
  },
  {
    field: 'disabled',
    label: '',
    component: 'Checkbox',
    ifShow: false,
  },
  {
    // 用于判断名称是否是唯一的
    field: 'nameOnly',
    label: '',
    defaultValue: true,
    component: 'Checkbox',
    ifShow: false,
  },
  {
    field: 'topic',
    label: '',
    component: 'Input',
    ifShow: false,
  },
  {
    field: 'customProperties',
    label: t('tenant.config.form.customAttribute'),
    component: 'Input',
    helpMessage: [t('tenant.config.form.customQueueMessage')],
  },
  {
    field: 'description',
    label: t('tenant.config.form.illustrate'),
    component: 'InputTextArea',
    helpMessage: [t('tenant.config.form.descriptionMessage')],
  },
];

export const submitStrategySchema: FormSchema[] = [
  {
    field: 'type',
    label: t('tenant.config.form.policyType'),
    component: 'Select',
    helpMessage: [
      t('tenant.config.form.policyMessage.m1'),
      t('tenant.config.form.policyMessage.m2'),
      t('tenant.config.form.policyMessage.m3'),
      t('tenant.config.form.policyMessage.m4'),
      t('tenant.config.form.policyMessage.m5'),
    ],
    defaultValue: PolicyTypeEnum.BURST,
    componentProps: {
      options: Object.keys(PolicyTypeLabelEnum).map((item) => ({
        label: t(PolicyTypeLabelEnum[item]),
        value: PolicyTypeEnum[item],
      })),
    },
  },
  {
    field: 'batchSize',
    label: t('tenant.config.form.batchProcessingSize'),
    required: true,
    component: 'InputNumber',
    ifShow: ({ model }) => model.type === PolicyTypeEnum.BATCH,
  },
];

export const processingStrategySchema: FormSchema[] = [
  {
    field: 'type',
    label: t('tenant.config.form.processType'),
    component: 'Select',
    colProps: { span: 24 },
    required: true,
    componentProps: {
      options: Object.keys(ProcessTypeLabelEnum).map((item) => ({
        label: t(ProcessTypeLabelEnum[item]),
        value: ProcessTypeEnum[item],
      })),
    },
    helpMessage: [
      t('tenant.config.form.processMessage,m1'),
      t('tenant.config.form.processMessage,m2'),
      t('tenant.config.form.processMessage,m3'),
      t('tenant.config.form.processMessage,m4'),
      t('tenant.config.form.processMessage,m5'),
      t('tenant.config.form.processMessage,m6'),
    ],
    defaultValue: ProcessTypeEnum.SKIP_ALL_FAILURES,
  },
  {
    field: 'retries',
    label: t('tenant.config.form.numberRetries'),
    required: true,
    component: 'InputNumber',
    colProps: { span: 12 },
  },

  {
    field: 'failurePercentage',
    label: t('tenant.config.form.percentageFailed'),
    required: true,
    component: 'InputNumber',
    colProps: { span: 12 },
  },
  {
    field: 'pauseBetweenRetries',
    label: t('tenant.config.form.retryInterval'),
    required: true,
    component: 'InputNumber',
    colProps: { span: 12 },
  },
  {
    field: 'maxPauseBetweenRetries',
    label: t('tenant.config.form.maxRetryInterval'),
    required: true,
    component: 'InputNumber',
    colProps: { span: 12 },
  },
];

export const pollingSettingsSchema: FormSchema[] = [
  {
    field: 'pollInterval',
    label: t('tenant.config.form.pollingInterval'),
    required: true,
    colProps: { span: 12 },
    component: 'InputNumber',
  },
  {
    field: 'partitions',
    label: t('tenant.config.form.partition'),
    required: true,
    colProps: { span: 12 },
    component: 'InputNumber',
  },
  {
    field: 'consumerPerPartition',
    label: t('tenant.config.form.eachPartitionCon'),
    required: true,
    colProps: { span: 12 },
    component: 'Checkbox',
  },
  {
    field: 'packProcessingTimeout',
    label: t('tenant.config.form.processingTimeout'),
    required: true,
    colProps: { span: 12 },
    component: 'InputNumber',
  },
];