You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@inlong.apache.org by lz...@apache.org on 2022/08/11 10:53:19 UTC

[inlong] branch master updated: [INLONG-5479][Dashboard] Optimize the group configuration process and use meta management (#5480)

This is an automated email from the ASF dual-hosted git repository.

lzwang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new a9a99ebaf [INLONG-5479][Dashboard] Optimize the group configuration process and use meta management (#5480)
a9a99ebaf is described below

commit a9a99ebafdc74f080e804c925f86a817b500a0b1
Author: Daniel <le...@apache.org>
AuthorDate: Thu Aug 11 18:53:14 2022 +0800

    [INLONG-5479][Dashboard] Optimize the group configuration process and use meta management (#5480)
    
    * [INLONG-5479][Dashboard] Optimize the data group configuration management process and use meta management
    
    * chore: translate key rename.
---
 .../AccessHelper/DataSourcesEditor/index.tsx       | 240 -----------
 .../AccessHelper/DataStorageEditor/Editor.tsx      | 238 ----------
 .../src/components/AccessHelper/index.ts           |  32 --
 .../BusinessSelect/MyBusinessModal.tsx             | 159 -------
 .../ConsumeHelper/BusinessSelect/index.tsx         |  94 ----
 .../src/components/ConsumeHelper/index.ts          |  20 -
 inlong-dashboard/src/locales/cn.json               | 477 ++++++++++-----------
 inlong-dashboard/src/locales/en.json               | 477 ++++++++++-----------
 .../basicFields.tsx => meta/consumption/index.tsx} |  65 ++-
 .../businessFields.tsx => meta/group/index.tsx}    |  56 +--
 inlong-dashboard/src/meta/sinks/clickhouse.tsx     |  56 ++-
 .../src/meta/sinks/common/sourceFields.ts          |   6 +-
 inlong-dashboard/src/meta/sinks/es.tsx             |  36 +-
 inlong-dashboard/src/meta/sinks/greenplum.tsx      |  24 +-
 inlong-dashboard/src/meta/sinks/hbase.tsx          |  24 +-
 inlong-dashboard/src/meta/sinks/hive.tsx           |  66 +--
 inlong-dashboard/src/meta/sinks/iceberg.tsx        |  32 +-
 inlong-dashboard/src/meta/sinks/index.ts           |   4 +-
 inlong-dashboard/src/meta/sinks/kafka.tsx          |   8 +-
 inlong-dashboard/src/meta/sinks/mysql.tsx          |  24 +-
 inlong-dashboard/src/meta/sinks/oracle.tsx         |  24 +-
 inlong-dashboard/src/meta/sinks/postgreSql.tsx     |  26 +-
 inlong-dashboard/src/meta/sinks/sqlServer.tsx      |  30 +-
 .../src/meta/sinks/tdsqlPostgreSql.tsx             |  30 +-
 inlong-dashboard/src/meta/sources/binLog.ts        |  24 +-
 inlong-dashboard/src/meta/sources/file.ts          |  12 +-
 .../dataFields.tsx => meta/stream/index.tsx}       |  38 +-
 .../AccessDetail/DataSources/DetailModal.tsx}      |  11 +-
 .../src/pages/AccessDetail/DataSources/index.tsx   |   4 +-
 .../AccessDetail/DataStorage}/DetailModal.tsx      |  20 +-
 .../src/pages/AccessDetail/DataStorage/index.tsx   |  12 +-
 .../AccessDetail/DataStream/StreamItemModal.tsx    |  15 +-
 .../src/pages/AccessDetail/Info/config.tsx         |   6 +-
 .../src/pages/ApprovalDetail/AccessConfig.tsx      |   8 +-
 .../src/pages/ApprovalDetail/ConsumeConfig.tsx     |   8 +-
 .../src/pages/ConsumeCreate/Info/config.tsx        |  52 ---
 .../src/pages/ConsumeCreate/Info/index.tsx         | 114 -----
 inlong-dashboard/src/pages/ConsumeCreate/index.tsx | 134 ------
 .../src/pages/ConsumeDetail/Info/config.tsx        |   6 +-
 39 files changed, 811 insertions(+), 1901 deletions(-)

diff --git a/inlong-dashboard/src/components/AccessHelper/DataSourcesEditor/index.tsx b/inlong-dashboard/src/components/AccessHelper/DataSourcesEditor/index.tsx
deleted file mode 100644
index f4d3c85c1..000000000
--- a/inlong-dashboard/src/components/AccessHelper/DataSourcesEditor/index.tsx
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, { useState, useMemo } from 'react';
-import { Button, Table, Modal, message } from 'antd';
-import { useTranslation } from 'react-i18next';
-import request from '@/utils/request';
-import { useUpdateEffect, usePrevious } from '@/hooks';
-import { sources } from '@/meta/sources';
-import CreateModal from './CreateModal';
-
-export interface DataSourcesEditorProps {
-  value?: Record<string, any>[];
-  onChange?: Function;
-  readonly?: boolean;
-  type?: 'MYSQL_BINLOG' | 'FILE';
-  // Whether to use real operations (for example, to call the background interface when deleting/newing, etc.)
-  useActionRequest?: boolean;
-  inlongGroupId?: string;
-  // Data stream ID, required for real operation
-  inlongStreamId?: string;
-}
-
-const removeIdFromValues = values =>
-  values.map(item => {
-    const obj = { ...item };
-    delete obj._etid;
-    return obj;
-  });
-
-const addIdToValues = values =>
-  values?.map(item => {
-    const obj = { ...item };
-    obj._etid = Math.random().toString();
-    return obj;
-  });
-
-const cache: Record<string, any> = {};
-
-const Comp = ({
-  value,
-  onChange,
-  readonly = false,
-  type = 'FILE',
-  useActionRequest,
-  inlongGroupId,
-  inlongStreamId,
-}: DataSourcesEditorProps) => {
-  const { t } = useTranslation();
-
-  const [data, setData] = useState(addIdToValues(value) || []);
-  const previousType = usePrevious(type);
-
-  const [createModal, setCreateModal] = useState({
-    visible: false,
-    _etid: '',
-    id: '',
-    record: {},
-  }) as any;
-
-  const triggerChange = newData => {
-    if (onChange) {
-      onChange(removeIdFromValues(newData));
-    }
-  };
-
-  useUpdateEffect(() => {
-    cache[previousType] = data;
-    const cacheData = cache[type] || [];
-    setData(cacheData);
-    triggerChange(cacheData);
-  }, [type]);
-
-  const onSaveRequest = async values => {
-    const isUpdate = createModal.id;
-    const submitData = {
-      ...values,
-      inlongGroupId,
-      inlongStreamId,
-      sourceType: type,
-    };
-    if (isUpdate) submitData.id = createModal.id;
-    const newId = await request({
-      url: `/source/${isUpdate ? 'update' : 'save'}`,
-      method: 'POST',
-      data: submitData,
-    });
-    return isUpdate ? createModal.id : newId;
-  };
-
-  const onAddRow = async rowValues => {
-    const newData = data.concat(addIdToValues([rowValues]));
-    setData(newData);
-    triggerChange(newData);
-  };
-
-  const onDeleteRequest = id => {
-    return new Promise(resolve => {
-      Modal.confirm({
-        title: t('basic.DeleteConfirm'),
-        onOk: async () => {
-          await request({
-            url: `/source/delete/${id}`,
-            method: 'DELETE',
-            params: {
-              sourceType: type,
-            },
-          });
-          resolve(true);
-          message.success(t('DeleteSuccess'));
-        },
-      });
-    });
-  };
-
-  const onDeleteRow = async record => {
-    const { _etid, id } = record;
-    if (useActionRequest) {
-      await onDeleteRequest(id);
-    }
-    const newData = [...data];
-    const index = newData.findIndex(item => item._etid === _etid);
-    newData.splice(index, 1);
-    setData(newData);
-    triggerChange(newData);
-  };
-
-  const onEditRow = record => {
-    setCreateModal({
-      visible: true,
-      id: useActionRequest ? record?.id : true,
-      _etid: record?._etid,
-      record,
-    });
-  };
-
-  const onUpdateRow = (_etid, record) => {
-    const newData = data.map(item => {
-      if (item._etid === _etid) {
-        return record;
-      }
-      return item;
-    });
-
-    setData(newData);
-  };
-
-  const columnsMap = useMemo(
-    () =>
-      sources.reduce(
-        (acc, cur) => ({
-          ...acc,
-          [cur.value]: cur.tableColumns,
-        }),
-        {},
-      ),
-    [],
-  );
-
-  const columns = columnsMap[type].concat(
-    readonly
-      ? []
-      : [
-          {
-            title: t('basic.Operating'),
-            dataIndex: 'actions',
-            width: 120,
-            render: (text, record) => (
-              <>
-                <Button type="link" onClick={() => onEditRow(record)}>
-                  {t('basic.Edit')}
-                </Button>
-                <Button type="link" onClick={() => onDeleteRow(record)}>
-                  {t('basic.Delete')}
-                </Button>
-              </>
-            ),
-          },
-        ],
-  );
-
-  return (
-    <>
-      <Table
-        pagination={false}
-        dataSource={data}
-        columns={columns}
-        rowKey="_etid"
-        size="small"
-        scroll={{
-          y: 520,
-        }}
-        footer={
-          readonly
-            ? null
-            : () => (
-                <>
-                  <Button type="link" onClick={() => setCreateModal({ visible: true })}>
-                    {t('components.AccessHelper.DataSourcesEditor.NewDataSource')}
-                  </Button>
-                </>
-              )
-        }
-      />
-
-      <CreateModal
-        {...createModal}
-        type={type}
-        id={createModal.id !== true && createModal.id}
-        visible={createModal.visible}
-        onOk={async values => {
-          const isUpdate = createModal.id;
-          const id = useActionRequest ? await onSaveRequest(values) : '';
-          const result = id ? { id, ...values } : { ...createModal.record, ...values };
-          isUpdate ? onUpdateRow(createModal._etid, result) : onAddRow(result);
-          setCreateModal({ visible: false });
-        }}
-        onCancel={() => setCreateModal({ visible: false })}
-      />
-    </>
-  );
-};
-
-export default Comp;
diff --git a/inlong-dashboard/src/components/AccessHelper/DataStorageEditor/Editor.tsx b/inlong-dashboard/src/components/AccessHelper/DataStorageEditor/Editor.tsx
deleted file mode 100644
index e722cfcb1..000000000
--- a/inlong-dashboard/src/components/AccessHelper/DataStorageEditor/Editor.tsx
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, { useState, useMemo, useEffect } from 'react';
-import { Button, Table, Modal, message } from 'antd';
-import request from '@/utils/request';
-import isEqual from 'lodash/isEqual';
-import { useTranslation } from 'react-i18next';
-import DetailModal from './DetailModal';
-import { Storages } from '@/meta/sinks';
-
-export interface Props {
-  value?: Record<string, any>[];
-  onChange?: Function;
-  readonly?: boolean;
-  // datastorage type
-  type: string;
-  // defaultRowTypeFields, can be used to automatically fill in the form default values
-  defaultRowTypeFields?: Record<string, unknown>[];
-  dataType?: string;
-  // Whether to use real operations (for example, to call the background interface when deleting/newing, etc.)
-  useActionRequest?: boolean;
-  inlongGroupId?: string;
-  // Data stream ID, required for real operation
-  inlongStreamId?: string;
-}
-
-const removeIdFromValues = values =>
-  values.map(item => {
-    const obj = { ...item };
-    delete obj._etid;
-    return obj;
-  });
-
-const addIdToValues = values =>
-  values?.map(item => {
-    const obj = { ...item };
-    obj._etid = Math.random().toString();
-    return obj;
-  });
-
-const Comp = ({
-  value,
-  onChange,
-  readonly,
-  type = 'HIVE',
-  defaultRowTypeFields,
-  dataType,
-  useActionRequest,
-  inlongGroupId,
-  inlongStreamId,
-}: Props) => {
-  const { t } = useTranslation();
-  const [data, setData] = useState(addIdToValues(value) || []);
-
-  useEffect(() => {
-    if (value && !isEqual(value, removeIdFromValues(data))) {
-      setData(addIdToValues(value));
-    }
-    // eslint-disable-next-line
-  }, [value]);
-
-  const [detailModal, setDetailModal] = useState({
-    visible: false,
-    _etid: '',
-    id: '',
-    record: {},
-  }) as any;
-
-  const triggerChange = newData => {
-    if (onChange) {
-      onChange(removeIdFromValues(newData));
-    }
-  };
-
-  const onSaveRequest = async values => {
-    const isUpdate = detailModal.id;
-    const submitData = {
-      ...values,
-      sinkType: type,
-      inlongGroupId,
-      inlongStreamId,
-    };
-    if (isUpdate) submitData.id = detailModal.id;
-    const newId = await request({
-      url: `/sink/${isUpdate ? 'update' : 'save'}`,
-      method: 'POST',
-      data: submitData,
-    });
-    return isUpdate ? detailModal.id : newId;
-  };
-
-  const onAddRow = rowValues => {
-    const newData = data.concat(addIdToValues([rowValues]));
-    setData(newData);
-    triggerChange(newData);
-  };
-
-  const onDeleteRequest = id => {
-    return new Promise(resolve => {
-      Modal.confirm({
-        title: t('basic.DeleteConfirm'),
-        onOk: async () => {
-          await request({
-            url: `/sink/delete/${id}`,
-            method: 'DELETE',
-            params: {
-              sinkType: type,
-            },
-          });
-          resolve(true);
-          message.success(t('DeleteSuccess'));
-        },
-      });
-    });
-  };
-
-  const onDeleteRow = async record => {
-    const { _etid, id } = record;
-    if (useActionRequest) {
-      await onDeleteRequest(id);
-    }
-    const newData = [...data];
-    const index = newData.findIndex(item => item._etid === _etid);
-    newData.splice(index, 1);
-    setData(newData);
-    triggerChange(newData);
-  };
-
-  const onEditRow = record => {
-    setDetailModal({
-      visible: true,
-      id: useActionRequest ? record?.id : true,
-      _etid: record?._etid,
-      record,
-    });
-  };
-
-  const onUpdateRow = (_etid, rowValues) => {
-    const newData = data.map(item => {
-      if (item._etid === _etid) {
-        return {
-          ...item,
-          ...rowValues,
-        };
-      }
-      return item;
-    });
-
-    setData(newData);
-    triggerChange(newData);
-  };
-
-  const tableColumns = useMemo(() => {
-    return Storages.reduce(
-      (acc, cur) => ({
-        ...acc,
-        [cur.value]: cur.tableColumns,
-      }),
-      {},
-    )[type];
-  }, [type]);
-
-  const columns = tableColumns.concat(
-    readonly
-      ? []
-      : [
-          {
-            title: t('basic.Operating'),
-            dataIndex: 'actions',
-            render: (text, record: Record<string, unknown>) => (
-              <>
-                <Button type="link" onClick={() => onEditRow(record)}>
-                  {t('basic.Edit')}
-                </Button>
-                <Button type="link" onClick={() => onDeleteRow(record)}>
-                  {t('basic.Delete')}
-                </Button>
-              </>
-            ),
-          },
-        ],
-  );
-
-  return (
-    <>
-      <div>
-        <span>{type}</span>
-        {!readonly && (
-          <Button
-            type="link"
-            onClick={() => setDetailModal({ visible: true })}
-            disabled={data.length}
-          >
-            {t('components.AccessHelper.DataStorageEditor.Editor.AddTo')}
-          </Button>
-        )}
-      </div>
-
-      <Table pagination={false} size="small" dataSource={data} columns={columns} rowKey="_etid" />
-
-      <DetailModal
-        {...detailModal}
-        inlongGroupId={inlongGroupId}
-        id={detailModal.id !== true && detailModal.id}
-        dataType={dataType}
-        defaultRowTypeFields={defaultRowTypeFields}
-        sinkType={type}
-        onOk={async values => {
-          const isUpdate = detailModal.id;
-          const id = useActionRequest ? await onSaveRequest(values) : '';
-          const result = id ? { id, ...values } : { ...detailModal.record, ...values };
-          isUpdate ? onUpdateRow(detailModal._etid, result) : onAddRow(result);
-          setDetailModal({ visible: false });
-        }}
-        onCancel={() => setDetailModal({ visible: false })}
-      />
-    </>
-  );
-};
-
-export default Comp;
diff --git a/inlong-dashboard/src/components/AccessHelper/index.ts b/inlong-dashboard/src/components/AccessHelper/index.ts
deleted file mode 100644
index eb465be82..000000000
--- a/inlong-dashboard/src/components/AccessHelper/index.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// Field configuration list
-export { default as genBusinessFields } from './FieldsConfig/businessFields';
-export { default as genDataFields } from './FieldsConfig/dataFields';
-
-// Data source creation/selector
-export { default as DataSourcesCreateModal } from './DataSourcesEditor/CreateModal';
-
-// Data source configuration editor
-export { default as DataSourcesEditor } from './DataSourcesEditor';
-
-// Flow editor
-export { default as DataStorageEditor } from './DataStorageEditor/Editor';
-export { default as DataStorageDetailModal } from './DataStorageEditor/DetailModal';
diff --git a/inlong-dashboard/src/components/ConsumeHelper/BusinessSelect/MyBusinessModal.tsx b/inlong-dashboard/src/components/ConsumeHelper/BusinessSelect/MyBusinessModal.tsx
deleted file mode 100644
index 45a02ad8a..000000000
--- a/inlong-dashboard/src/components/ConsumeHelper/BusinessSelect/MyBusinessModal.tsx
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, { useState } from 'react';
-import { Button, Modal } from 'antd';
-import { ModalProps } from 'antd/es/modal';
-import { useTranslation } from 'react-i18next';
-import HighTable from '@/components/HighTable';
-import { useRequest, useUpdateEffect } from '@/hooks';
-
-export interface MyAccessModalProps extends Omit<ModalProps, 'onOk'> {
-  onOk?: (value: string, record: Record<string, unknown>) => void;
-}
-
-const getFilterFormContent = () => [
-  {
-    type: 'inputsearch',
-    name: 'keyword',
-  },
-];
-
-const Comp: React.FC<MyAccessModalProps> = ({ ...modalProps }) => {
-  const { t } = useTranslation();
-
-  const [options, setOptions] = useState({
-    keyword: '',
-    pageSize: 10,
-    pageNum: 1,
-  });
-
-  const { run: getData, data, loading } = useRequest(
-    {
-      url: '/group/list',
-      method: 'POST',
-      data: {
-        ...options,
-        status: 130,
-      },
-    },
-    {
-      manual: true,
-    },
-  );
-
-  useUpdateEffect(() => {
-    if (modalProps.visible) {
-      getData();
-    }
-  }, [modalProps.visible, options]);
-
-  const onChange = ({ current: pageNum, pageSize }) => {
-    setOptions(prev => ({
-      ...prev,
-      pageNum,
-      pageSize,
-    }));
-  };
-
-  const closeAll = () => {
-    setOptions({
-      keyword: '',
-      pageSize: 10,
-      pageNum: 1,
-    });
-  };
-
-  const onFilter = allValues => {
-    setOptions(prev => ({
-      ...prev,
-      ...allValues,
-      pageNum: 1,
-    }));
-  };
-
-  const onOk = record => {
-    const { inlongGroupId } = record;
-    modalProps.onOk && modalProps.onOk(inlongGroupId, record);
-  };
-
-  const columns = [
-    {
-      title: 'ID',
-      dataIndex: 'inlongGroupId',
-    },
-    {
-      title: t('components.ConsumeHelper.BusinessSelect.MyBusinessModal.BusinessName'),
-      dataIndex: 'name',
-    },
-    {
-      title: t('components.ConsumeHelper.BusinessSelect.MyBusinessModal.Owners'),
-      dataIndex: 'inCharges',
-    },
-    {
-      title: t('basic.CreateTime'),
-      dataIndex: 'createTime',
-    },
-    {
-      title: t('basic.Operating'),
-      dataIndex: 'action',
-      render: (text, record) => (
-        <Button type="link" onClick={() => onOk(record)}>
-          {t('components.ConsumeHelper.BusinessSelect.MyBusinessModal.Select')}
-        </Button>
-      ),
-    },
-  ];
-
-  const pagination = {
-    pageSize: 10,
-    current: options.pageNum,
-    total: data?.total,
-  };
-
-  return (
-    <Modal
-      {...modalProps}
-      title={t('components.ConsumeHelper.BusinessSelect.MyBusinessModal.MyAccessBusiness')}
-      width={1024}
-      footer={null}
-      onOk={onOk}
-      afterClose={closeAll}
-      destroyOnClose
-    >
-      <HighTable
-        filterForm={{
-          content: getFilterFormContent(),
-          onFilter,
-        }}
-        table={{
-          columns,
-          rowKey: 'id',
-          size: 'small',
-          dataSource: data?.list,
-          pagination,
-          loading,
-          onChange,
-        }}
-      />
-    </Modal>
-  );
-};
-
-export default Comp;
diff --git a/inlong-dashboard/src/components/ConsumeHelper/BusinessSelect/index.tsx b/inlong-dashboard/src/components/ConsumeHelper/BusinessSelect/index.tsx
deleted file mode 100644
index a19335364..000000000
--- a/inlong-dashboard/src/components/ConsumeHelper/BusinessSelect/index.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, { useState, useEffect } from 'react';
-import { Button, Input, Space } from 'antd';
-import type { InputProps } from 'antd/es/input';
-import request from '@/utils/request';
-import { useTranslation } from 'react-i18next';
-import MyBusinessModal from './MyBusinessModal';
-
-export interface Props extends Omit<InputProps, 'onChange'> {
-  value?: string;
-  onChange?: (value: string, record: Record<string, unknown>) => void;
-  onSelect?: (value: Record<string, any>) => void;
-}
-
-const Comp: React.FC<Props> = ({ value, onChange, onSelect, ...rest }) => {
-  const { t } = useTranslation();
-
-  const [data, setData] = useState(value);
-
-  const [myBusinessModal, setMyBusinessModal] = useState({
-    visible: false,
-  });
-
-  useEffect(() => {
-    if (value !== data) {
-      setData(value);
-    }
-    // eslint-disable-next-line
-  }, [value]);
-
-  const triggerChange = (newData, record) => {
-    if (onChange) {
-      onChange(newData, record);
-    }
-  };
-
-  const onSelectRow = (rowValue, record) => {
-    setData(rowValue);
-    triggerChange(rowValue, record);
-  };
-
-  const onTextChange = async value => {
-    setData(value);
-
-    const bussinessData = await request(`/group/get/${value}`);
-    if (bussinessData) {
-      triggerChange(value, bussinessData);
-    }
-  };
-
-  return (
-    <>
-      <Space>
-        <Input value={data} onChange={e => onTextChange(e.target.value)} {...rest} />
-        <Button type="link" onClick={() => setMyBusinessModal({ visible: true })}>
-          {t('components.ConsumeHelper.BusinessSelect.Search')}
-        </Button>
-      </Space>
-
-      <MyBusinessModal
-        {...myBusinessModal}
-        visible={myBusinessModal.visible}
-        onOk={(value, record) => {
-          onSelectRow(value, record);
-          if (onSelect) {
-            onSelect(record);
-          }
-          setMyBusinessModal({ visible: false });
-        }}
-        onCancel={() => setMyBusinessModal({ visible: false })}
-      />
-    </>
-  );
-};
-
-export default Comp;
diff --git a/inlong-dashboard/src/components/ConsumeHelper/index.ts b/inlong-dashboard/src/components/ConsumeHelper/index.ts
deleted file mode 100644
index c9c187bd7..000000000
--- a/inlong-dashboard/src/components/ConsumeHelper/index.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-export { default as genBasicFields } from './FieldsConfig/basicFields';
diff --git a/inlong-dashboard/src/locales/cn.json b/inlong-dashboard/src/locales/cn.json
index f10f1afa7..e970d27e1 100644
--- a/inlong-dashboard/src/locales/cn.json
+++ b/inlong-dashboard/src/locales/cn.json
@@ -17,248 +17,243 @@
   "components.AccessHelper.DataSourcesEditor.NewDataSource": "新建数据源",
   "components.AccessHelper.DataSourcesEditor.CreateModal.DataSourceName": "数据源名称",
   "components.AccessHelper.DataSourcesEditor.CreateModal.File": "文件",
-  "components.AccessHelper.DataSourceMetaData.File.SerializationType": "文件类型",
-  "components.AccessHelper.DataSourceMetaData.File.DataSourceIP": "数据源IP",
-  "components.AccessHelper.DataSourceMetaData.File.FilePath": "⽂件路径",
-  "components.AccessHelper.DataSourceMetaData.File.FilePathHelp": "必须是绝对路径,支持正则表达式,多个时以逗号分隔,如:/data/*.log",
-  "components.AccessHelper.DataSourceMetaData.File.IpRule": "请输入正确的IP地址",
-  "components.AccessHelper.DataSourceMetaData.File.TimeOffset": "时间偏移量",
-  "components.AccessHelper.DataSourceMetaData.File.TimeOffsetHelp": "从文件的某个时间开始采集,'1m'表示1分钟之后,'-1m'表示1分钟之前,支持m(分钟),h(小时),d(天),空则从当前时间开始采集",
-  "components.AccessHelper.DataSourceMetaData.Db.Server": "服务器地址",
-  "components.AccessHelper.DataSourceMetaData.Db.Port": "服务器端口",
-  "components.AccessHelper.DataSourceMetaData.Db.ServerTimezone": "服务器时区",
-  "components.AccessHelper.DataSourceMetaData.Db.IntervalMs": "位点刷新间隔",
-  "components.AccessHelper.DataSourceMetaData.Db.User": "用户名",
-  "components.AccessHelper.DataSourceMetaData.Db.Password": "密码",
-  "components.AccessHelper.DataSourceMetaData.Db.HistoryFilename": "历史文件名",
-  "components.AccessHelper.DataSourceMetaData.Db.AllMigration": "是否整库迁移",
-  "components.AccessHelper.DataSourceMetaData.Db.DatabaseWhiteList": "库名白名单",
-  "components.AccessHelper.DataSourceMetaData.Db.TableWhiteList": "表名白名单",
-  "components.AccessHelper.DataSourceMetaData.Db.WhiteListHelp": "多个白名单之间用英文逗号分隔,单个为正则表达式,比如:b1,b*",
+  "meta.Sources.File.SerializationType": "文件类型",
+  "meta.Sources.File.DataSourceIP": "数据源IP",
+  "meta.Sources.File.FilePath": "⽂件路径",
+  "meta.Sources.File.FilePathHelp": "必须是绝对路径,支持正则表达式,多个时以逗号分隔,如:/data/*.log",
+  "meta.Sources.File.IpRule": "请输入正确的IP地址",
+  "meta.Sources.File.TimeOffset": "时间偏移量",
+  "meta.Sources.File.TimeOffsetHelp": "从文件的某个时间开始采集,'1m'表示1分钟之后,'-1m'表示1分钟之前,支持m(分钟),h(小时),d(天),空则从当前时间开始采集",
+  "meta.Sources.Db.Server": "服务器地址",
+  "meta.Sources.Db.Port": "服务器端口",
+  "meta.Sources.Db.ServerTimezone": "服务器时区",
+  "meta.Sources.Db.IntervalMs": "位点刷新间隔",
+  "meta.Sources.Db.User": "用户名",
+  "meta.Sources.Db.Password": "密码",
+  "meta.Sources.Db.HistoryFilename": "历史文件名",
+  "meta.Sources.Db.AllMigration": "是否整库迁移",
+  "meta.Sources.Db.DatabaseWhiteList": "库名白名单",
+  "meta.Sources.Db.TableWhiteList": "表名白名单",
+  "meta.Sources.Db.WhiteListHelp": "多个白名单之间用英文逗号分隔,单个为正则表达式,比如:b1,b*",
   "components.AccessHelper.DataStorageEditor.Editor.AddTo": "添加",
-  "components.AccessHelper.StorageMetaData.SinkName": "流向名称",
-  "components.AccessHelper.StorageMetaData.SinkNameRule": "以英文字母开头,只能包含英文字母、数字、中划线、下划线",
-  "components.AccessHelper.StorageMetaData.Description": "流向描述",
-  "components.AccessHelper.StorageMetaData.SourceFieldName": "源字段名",
-  "components.AccessHelper.StorageMetaData.SourceFieldType": "源字段类型",
-  "components.AccessHelper.StorageMetaData.SourceFieldNameRule": "以英文字母开头,只能包含英文字母、数字、下划线",
-  "components.AccessHelper.StorageMetaData.Username": "用户名",
-  "components.AccessHelper.StorageMetaData.Password": "密码",
-  "components.AccessHelper.StorageMetaData.EnableCreateResource": "是否创建资源",
-  "components.AccessHelper.StorageMetaData.EnableCreateResourceHelp": "如果库表已经存在,且无需修改,则选【不创建】,否则请选择【创建】,由系统自动创建资源。",
-  "components.AccessHelper.StorageMetaData.Hive.FileFormat": "落地格式",
-  "components.AccessHelper.StorageMetaData.Hive.Day": "天",
-  "components.AccessHelper.StorageMetaData.Hive.DataEncoding": "数据编码",
-  "components.AccessHelper.StorageMetaData.Hive.DataSeparator": "字段分隔符",
-  "components.AccessHelper.StorageMetaData.Hive.PartitionFieldList": "分区字段",
-  "components.AccessHelper.StorageMetaData.Hive.PartitionFieldListHelp": "字段类型若为timestamp,则必须设置此字段值的格式,支持 MICROSECONDS,MILLISECONDS,SECONDS,SQL,ISO_8601,以及自定义,比如:yyyy-MM-dd HH:mm:ss 等",
-  "components.AccessHelper.StorageMetaData.Hive.DbName": "DB名称",
-  "components.AccessHelper.StorageMetaData.Hive.TableName": "表名称",
-  "components.AccessHelper.StorageMetaData.Hive.FieldNameRule": "以小写英文字母开头,只能包含小写英文字母、数字、下划线",
-  "components.AccessHelper.StorageMetaData.Hive.ConnectionTest": "测试连接",
-  "components.AccessHelper.StorageMetaData.Hive.ConnectionSucceeded": "连接成功",
-  "components.AccessHelper.StorageMetaData.Hive.ConnectionFailed": "连接失败",
-  "components.AccessHelper.StorageMetaData.Hive.DataPath": "数据路径",
-  "components.AccessHelper.StorageMetaData.Hive.ConfDir": "配置路径",
-  "components.AccessHelper.StorageMetaData.Hive.ConfDirHelp": "将 Hive 集群的 hive-site.xml 文件上传到 HDFS 的某个目录下,如:/user/hive/conf",
-  "components.AccessHelper.StorageMetaData.DataPathHelp": "DB的存储路径,不包括表名,如:hdfs://127.0.0.1:9000/warehouse/inlong.db",
-  "components.AccessHelper.StorageMetaData.Hive.FieldName": "字段名",
-  "components.AccessHelper.StorageMetaData.Hive.FieldType": "字段类型",
-  "components.AccessHelper.StorageMetaData.Hive.FieldDescription": "字段描述",
-  "components.AccessHelper.StorageMetaData.Hive.IsMetaField": "是否为元字段",
-  "components.AccessHelper.StorageMetaData.Hive.FieldFormat": "字段格式",
-  "components.AccessHelper.StorageMetaData.Clickhouse.DbName": "DB名称",
-  "components.AccessHelper.StorageMetaData.Clickhouse.TableName": "表名称",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FlushInterval": "刷新的间隔",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FlushIntervalUnit": "秒",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FlushRecord": "刷新的数据条数",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FlushRecordUnit": "条",
-  "components.AccessHelper.StorageMetaData.Clickhouse.RetryTimes": "重试次数",
-  "components.AccessHelper.StorageMetaData.Clickhouse.RetryTimesUnit": "次",
-  "components.AccessHelper.StorageMetaData.Clickhouse.IsDistributed": "分布式表",
-  "components.AccessHelper.StorageMetaData.Clickhouse.Yes": "是",
-  "components.AccessHelper.StorageMetaData.Clickhouse.No": "否",
-  "components.AccessHelper.StorageMetaData.Clickhouse.PartitionStrategy": "分区策略",
-  "components.AccessHelper.StorageMetaData.Clickhouse.PartitionFields": "分区字段",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FieldName": "字段名",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FieldNameRule": "以英文字母开头,只能包含英文字母、数字、下划线",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FieldType": "字段类型",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FieldDescription": "字段描述",
-  "components.AccessHelper.StorageMetaData.Clickhouse.Engine": "引擎",
-  "components.AccessHelper.StorageMetaData.Clickhouse.OrderBy": "排序",
-  "components.AccessHelper.StorageMetaData.Clickhouse.PartitionBy": "分区",
-  "components.AccessHelper.StorageMetaData.Clickhouse.PrimaryKey": "主键",
-  "components.AccessHelper.StorageMetaData.Clickhouse.CompressionCode": "压缩格式",
-  "components.AccessHelper.StorageMetaData.Clickhouse.TtlExpr": "生命周期",
-  "components.AccessHelper.StorageMetaData.Es.IndexName": "索引名称",
-  "components.AccessHelper.StorageMetaData.Es.FlushInterval": "刷新的间隔",
-  "components.AccessHelper.StorageMetaData.Es.FlushIntervalUnit": "秒",
-  "components.AccessHelper.StorageMetaData.Es.FlushRecord": "刷新的数据条数",
-  "components.AccessHelper.StorageMetaData.Es.FlushRecordUnit": "条",
-  "components.AccessHelper.StorageMetaData.Es.RetryTimes": "重试次数",
-  "components.AccessHelper.StorageMetaData.Es.RetryTimesUnit": "次",
-  "components.AccessHelper.StorageMetaData.Es.Host": "主机地址",
-  "components.AccessHelper.StorageMetaData.Es.Port": "端口",
-  "components.AccessHelper.StorageMetaData.Es.FieldName": "字段名",
-  "components.AccessHelper.StorageMetaData.Es.FieldNameRule": "以英文字母开头,只能包含英文字母、数字、下划线",
-  "components.AccessHelper.StorageMetaData.Es.FieldType": "字段类型",
-  "components.AccessHelper.StorageMetaData.Es.FieldDescription": "字段描述",
-  "components.AccessHelper.StorageMetaData.Es.DateFormat": "日期格式",
-  "components.AccessHelper.StorageMetaData.Kafka.Server": "服务器地址",
-  "components.AccessHelper.StorageMetaData.Kafka.SerializationType": "序列化类型",
-  "components.AccessHelper.StorageMetaData.Kafka.PartitionNum": "Topic分区数",
-  "components.AccessHelper.StorageMetaData.Kafka.AutoOffsetReset": "自动偏移量重置",
-  "components.AccessHelper.StorageMetaData.Iceberg.DbName": "DB名称",
-  "components.AccessHelper.StorageMetaData.Iceberg.TableName": "表名称",
-  "components.AccessHelper.StorageMetaData.Iceberg.Warehouse": "仓库路径",
-  "components.AccessHelper.StorageMetaData.Iceberg.FileFormat": "⽂件格式",
-  "components.AccessHelper.StorageMetaData.Iceberg.Description": "表描述",
-  "components.AccessHelper.StorageMetaData.Iceberg.ExtList": "属性",
-  "components.AccessHelper.StorageMetaData.Iceberg.DataConsistency": "数据一致性",
-  "components.AccessHelper.StorageMetaData.Iceberg.FieldName": "字段名",
-  "components.AccessHelper.StorageMetaData.Iceberg.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
-  "components.AccessHelper.StorageMetaData.Iceberg.FieldType": "字段类型",
-  "components.AccessHelper.StorageMetaData.Iceberg.FieldDescription": "字段描述",
-  "components.AccessHelper.StorageMetaData.Iceberg.PartitionStrategy": "分区策略",
-  "components.AccessHelper.StorageMetaData.Greenplum.TableName": "表名称",
-  "components.AccessHelper.StorageMetaData.Greenplum.PrimaryKey": "主键",
-  "components.AccessHelper.StorageMetaData.Greenplum.FieldName": "字段名",
-  "components.AccessHelper.StorageMetaData.Greenplum.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
-  "components.AccessHelper.StorageMetaData.Greenplum.FieldType": "字段类型",
-  "components.AccessHelper.StorageMetaData.Greenplum.IsMetaField": "是否为元字段",
-  "components.AccessHelper.StorageMetaData.Greenplum.FieldFormat": "字段格式",
-  "components.AccessHelper.StorageMetaData.Greenplum.FieldDescription": "字段描述",
-  "components.AccessHelper.StorageMetaData.MySQL.TableName": "表名称",
-  "components.AccessHelper.StorageMetaData.MySQL.PrimaryKey": "主键",
-  "components.AccessHelper.StorageMetaData.MySQL.FieldName": "字段名",
-  "components.AccessHelper.StorageMetaData.MySQL.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
-  "components.AccessHelper.StorageMetaData.MySQL.FieldType": "字段类型",
-  "components.AccessHelper.StorageMetaData.MySQL.IsMetaField": "是否为元字段",
-  "components.AccessHelper.StorageMetaData.MySQL.FieldFormat": "字段格式",
-  "components.AccessHelper.StorageMetaData.MySQL.FieldDescription": "字段描述",
-  "components.AccessHelper.StorageMetaData.Oracle.TableName": "表名称",
-  "components.AccessHelper.StorageMetaData.Oracle.PrimaryKey": "主键",
-  "components.AccessHelper.StorageMetaData.Oracle.FieldName": "字段名",
-  "components.AccessHelper.StorageMetaData.Oracle.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
-  "components.AccessHelper.StorageMetaData.Oracle.FieldType": "字段类型",
-  "components.AccessHelper.StorageMetaData.Oracle.IsMetaField": "是否为元字段",
-  "components.AccessHelper.StorageMetaData.Oracle.FieldFormat": "字段格式",
-  "components.AccessHelper.StorageMetaData.Oracle.FieldDescription": "字段描述",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.DbName": "DB名称",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.TableName": "表名称",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.PrimaryKey": "主键",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.FieldName": "字段名",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.FieldType": "字段类型",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.IsMetaField": "是否为元字段",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.FieldFormat": "字段格式",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.FieldDescription": "字段描述",
-  "components.AccessHelper.StorageMetaData.SQLServer.SchemaName": "架构名称",
-  "components.AccessHelper.StorageMetaData.SQLServer.AllMigration": "是否迁移所有数据库",
-  "components.AccessHelper.StorageMetaData.SQLServer.ServerTimezone": "数组库时区",
-  "components.AccessHelper.StorageMetaData.SQLServer.TableName": "表名称",
-  "components.AccessHelper.StorageMetaData.SQLServer.PrimaryKey": "主键",
-  "components.AccessHelper.StorageMetaData.SQLServer.FieldName": "字段名",
-  "components.AccessHelper.StorageMetaData.SQLServer.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
-  "components.AccessHelper.StorageMetaData.SQLServer.FieldType": "字段类型",
-  "components.AccessHelper.StorageMetaData.SQLServer.IsMetaField": "是否为元字段",
-  "components.AccessHelper.StorageMetaData.SQLServer.FieldFormat": "字段格式",
-  "components.AccessHelper.StorageMetaData.SQLServer.FieldDescription": "字段描述",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.SchemaName": "架构名称",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.TableName": "表名称",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.PrimaryKey": "主键",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldName": "字段名",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldType": "字段类型",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.IsMetaField": "是否为元字段",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldFormat": "字段格式",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldDescription": "字段描述",
-  "components.AccessHelper.StorageMetaData.HBase.Namespace": "命名空间",
-  "components.AccessHelper.StorageMetaData.HBase.TableName": "表名称",
-  "components.AccessHelper.StorageMetaData.HBase.RowKey": "RowKey",
-  "components.AccessHelper.StorageMetaData.HBase.ZkQuorum": "ZooKeeper 集群地址",
-  "components.AccessHelper.StorageMetaData.HBase.ZkNodeParent": "ZooKeeper 根目录",
-  "components.AccessHelper.StorageMetaData.HBase.BufferFlushMaxSize": "缓存刷新的最大容量",
-  "components.AccessHelper.StorageMetaData.HBase.BufferFlushMaxRows": "缓存刷新的最大行数",
-  "components.AccessHelper.StorageMetaData.HBase.BufferFlushInterval": "缓存区刷新间隔",
-  "components.AccessHelper.StorageMetaData.HBase.FlushIntervalUnit": "秒",
-  "components.AccessHelper.StorageMetaData.HBase.FieldName": "字段名",
-  "components.AccessHelper.StorageMetaData.HBase.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
-  "components.AccessHelper.StorageMetaData.HBase.FieldType": "字段类型",
-  "components.AccessHelper.StorageMetaData.HBase.IsMetaField": "是否为元字段",
-  "components.AccessHelper.StorageMetaData.HBase.FieldFormat": "字段格式",
-  "components.AccessHelper.StorageMetaData.HBase.FieldDescription": "字段描述",
-  "components.AccessHelper.FieldsConfig.businessFields.Stripe/Second": "条/秒",
-  "components.AccessHelper.FieldsConfig.businessFields.MessageMiddleware": "消息中间件",
-  "components.AccessHelper.FieldsConfig.businessFields.AccessSize": "按天接入大小",
-  "components.AccessHelper.FieldsConfig.businessFields.GB/Day": "GB/天",
-  "components.AccessHelper.FieldsConfig.businessFields.BusinessIntroduction": "分组描述",
-  "components.AccessHelper.FieldsConfig.businessFields.BusinessOwners": "分组责任人",
-  "components.AccessHelper.FieldsConfig.businessFields.SingleStripMaximumLength": "单条最大长度",
-  "components.AccessHelper.FieldsConfig.businessFields.thousand/day": "万条/天",
-  "components.AccessHelper.FieldsConfig.businessFields.AccessPeakPerSecond": "每秒接入峰值",
-  "components.AccessHelper.FieldsConfig.businessFields.InlongGroupId": "分组ID",
-  "components.AccessHelper.FieldsConfig.businessFields.InlongGroupIdRules": "只能包含小写字母、数字、中划线、下划线",
-  "components.AccessHelper.FieldsConfig.businessFields.InlongGroupName": "分组名称",
-  "components.AccessHelper.FieldsConfig.businessFields.NumberOfAccess": "按天接入条数",
-  "components.AccessHelper.FieldsConfig.businessFields.BusinessOwnersExtra": "分组责任人,可查看、修改分组信息",
-  "components.AccessHelper.FieldsConfig.businessFields.QueueModule": "队列模型",
-  "components.AccessHelper.FieldsConfig.businessFields.Parallel": "并行",
-  "components.AccessHelper.FieldsConfig.businessFields.Serial": "顺序",
-  "components.AccessHelper.FieldsConfig.businessFields.PartitionNum": "Topic分区数",
-  "components.AccessHelper.FieldsConfig.businessFields.EnsembleSuffix": "节点数",
-  "components.AccessHelper.FieldsConfig.businessFields.EnsembleExtra": "Topic保存到多少个节点,最高可配置10个",
-  "components.AccessHelper.FieldsConfig.businessFields.WriteQuorumSuffix": "副本数",
-  "components.AccessHelper.FieldsConfig.businessFields.WriteQuorumExtra": "每条消息保存多少个副本,最高可配置10个",
-  "components.AccessHelper.FieldsConfig.businessFields.AckQuorumSuffix": "响应数",
-  "components.AccessHelper.FieldsConfig.businessFields.AckQuorumExtra": "写请求成功所需的ack数,最高可配置10个",
-  "components.AccessHelper.FieldsConfig.businessFields.RetentionTimeExtra": "处于ack状态的消息的保存时⻓,超过此值时消息会被删除(最多保留14天)",
-  "components.AccessHelper.FieldsConfig.businessFields.TtlExtra": "消息的time-to-live时⻓,超过此值的消息会被标记为ack(最多保留14天)",
-  "components.AccessHelper.FieldsConfig.businessFields.RetentionSizeExtra": "处于ack状态的消息容量,超过此值的消息会被删除(-1表示永不删除)",
-  "components.AccessHelper.FieldsConfig.businessFields.DataCopyTitle": "数据副本信息",
-  "components.AccessHelper.FieldsConfig.businessFields.DataStoragePeriodTitle": "数据存储周期信息",
-  "components.AccessHelper.FieldsConfig.dataFields.DataStreamID": "数据流ID",
-  "components.AccessHelper.FieldsConfig.dataFields.InlongStreamIdRules": "只能包含小写字母、数字、中划线、下划线",
-  "components.AccessHelper.FieldsConfig.dataFields.fileDelimiter": "源数据字段分割符",
-  "components.AccessHelper.FieldsConfig.dataFields.Asterisk": "星号(*)",
-  "components.AccessHelper.FieldsConfig.dataFields.DataStreamName": "数据流名称",
-  "components.AccessHelper.FieldsConfig.dataFields.FieldName": "字段名",
-  "components.AccessHelper.FieldsConfig.dataFields.FieldNameRule": "以英文字母开头,只能包含英文字母、数字、下划线",
-  "components.AccessHelper.FieldsConfig.dataFields.Semicolon": "分号(;)",
-  "components.AccessHelper.FieldsConfig.dataFields.AutoConsumption": "自主消费",
-  "components.AccessHelper.FieldsConfig.dataFields.DataFlowDirection": "数据流向",
-  "components.AccessHelper.FieldsConfig.dataFields.DataType": "数据格式",
-  "components.AccessHelper.FieldsConfig.dataFields.DataTypeCsvHelp": "CSV:按特定分隔符分隔的任意文件",
-  "components.AccessHelper.FieldsConfig.dataFields.Source": "消息来源",
-  "components.AccessHelper.FieldsConfig.dataFields.FieldType": "字段类型",
-  "components.AccessHelper.FieldsConfig.dataFields.FieldComment": "字段描述",
-  "components.AccessHelper.FieldsConfig.dataFields.DoubleQuotes": "双引号(\")",
-  "components.AccessHelper.FieldsConfig.dataFields.DataEncoding": "数据编码",
-  "components.AccessHelper.FieldsConfig.dataFields.DataStreamOwners": "责任人",
-  "components.AccessHelper.FieldsConfig.dataFields.DataStreamOwnerHelp": "责任人可查看、修改数据流信息",
-  "components.AccessHelper.FieldsConfig.dataFields.Space": "空格",
-  "components.AccessHelper.FieldsConfig.dataFields.Comma": "逗号(,)",
-  "components.AccessHelper.FieldsConfig.dataFields.DataFlowIntroduction": "介绍",
-  "components.AccessHelper.FieldsConfig.dataFields.SourceDataField": "源数据字段",
-  "components.AccessHelper.FieldsConfig.dataFields.VerticalLine": "竖线(|)",
-  "components.AccessHelper.FieldsConfig.dataFields.File": "文件",
-  "components.AccessHelper.FieldsConfig.dataFields.Autonomous": "自主推送",
-  "components.ConsumeHelper.BusinessSelect.MyBusinessModal.BusinessName": "分组名称",
-  "components.ConsumeHelper.BusinessSelect.MyBusinessModal.Select": "选择",
-  "components.ConsumeHelper.BusinessSelect.MyBusinessModal.Owners": "责任人",
-  "components.ConsumeHelper.BusinessSelect.MyBusinessModal.MyAccessBusiness": "我的数据分组",
-  "components.ConsumeHelper.BusinessSelect.Search": "查询",
-  "components.ConsumeHelper.FieldsConfig.basicFields.Consumption": "消费责任人",
-  "components.ConsumeHelper.FieldsConfig.basicFields.ConsumerGroupName": "消费组名称",
-  "components.ConsumeHelper.FieldsConfig.basicFields.ConsumerGroupNameRules": "只能包含小写字母、数字、中划线、下划线",
-  "components.ConsumeHelper.FieldsConfig.basicFields.DataStreamIDsHelp": "多个数据流ID之间用逗号(,)隔开",
-  "components.ConsumeHelper.FieldsConfig.basicFields.ConsumerDataStreamID": "消费的数据流ID",
-  "components.ConsumeHelper.FieldsConfig.basicFields.ConsumerTargetBusinessID": "消费的数据分组ID",
-  "components.ConsumeHelper.FieldsConfig.basicFields.No": "否",
-  "components.ConsumeHelper.FieldsConfig.basicFields.filterEnabled": "是否过滤消费",
-  "components.ConsumeHelper.FieldsConfig.basicFields.MasterAddress": "Master地址",
-  "components.ConsumeHelper.FieldsConfig.basicFields.Yes": "是",
-  "components.ConsumeHelper.FieldsConfig.basicFields.OwnersExtra": "消费责任人,可查看、修改消费信息",
+  "meta.Sinks.SinkName": "流向名称",
+  "meta.Sinks.SinkNameRule": "以英文字母开头,只能包含英文字母、数字、中划线、下划线",
+  "meta.Sinks.Description": "流向描述",
+  "meta.Sinks.SourceFieldName": "源字段名",
+  "meta.Sinks.SourceFieldType": "源字段类型",
+  "meta.Sinks.SourceFieldNameRule": "以英文字母开头,只能包含英文字母、数字、下划线",
+  "meta.Sinks.Username": "用户名",
+  "meta.Sinks.Password": "密码",
+  "meta.Sinks.EnableCreateResource": "是否创建资源",
+  "meta.Sinks.EnableCreateResourceHelp": "如果库表已经存在,且无需修改,则选【不创建】,否则请选择【创建】,由系统自动创建资源。",
+  "meta.Sinks.Hive.FileFormat": "落地格式",
+  "meta.Sinks.Hive.Day": "天",
+  "meta.Sinks.Hive.DataEncoding": "数据编码",
+  "meta.Sinks.Hive.DataSeparator": "字段分隔符",
+  "meta.Sinks.Hive.PartitionFieldList": "分区字段",
+  "meta.Sinks.Hive.PartitionFieldListHelp": "字段类型若为timestamp,则必须设置此字段值的格式,支持 MICROSECONDS,MILLISECONDS,SECONDS,SQL,ISO_8601,以及自定义,比如:yyyy-MM-dd HH:mm:ss 等",
+  "meta.Sinks.Hive.DbName": "DB名称",
+  "meta.Sinks.Hive.TableName": "表名称",
+  "meta.Sinks.Hive.FieldNameRule": "以小写英文字母开头,只能包含小写英文字母、数字、下划线",
+  "meta.Sinks.Hive.ConnectionTest": "测试连接",
+  "meta.Sinks.Hive.ConnectionSucceeded": "连接成功",
+  "meta.Sinks.Hive.ConnectionFailed": "连接失败",
+  "meta.Sinks.Hive.DataPath": "数据路径",
+  "meta.Sinks.Hive.ConfDir": "配置路径",
+  "meta.Sinks.Hive.ConfDirHelp": "将 Hive 集群的 hive-site.xml 文件上传到 HDFS 的某个目录下,如:/user/hive/conf",
+  "meta.Sinks.DataPathHelp": "DB的存储路径,不包括表名,如:hdfs://127.0.0.1:9000/warehouse/inlong.db",
+  "meta.Sinks.Hive.FieldName": "字段名",
+  "meta.Sinks.Hive.FieldType": "字段类型",
+  "meta.Sinks.Hive.FieldDescription": "字段描述",
+  "meta.Sinks.Hive.IsMetaField": "是否为元字段",
+  "meta.Sinks.Hive.FieldFormat": "字段格式",
+  "meta.Sinks.Clickhouse.DbName": "DB名称",
+  "meta.Sinks.Clickhouse.TableName": "表名称",
+  "meta.Sinks.Clickhouse.FlushInterval": "刷新的间隔",
+  "meta.Sinks.Clickhouse.FlushIntervalUnit": "秒",
+  "meta.Sinks.Clickhouse.FlushRecord": "刷新的数据条数",
+  "meta.Sinks.Clickhouse.FlushRecordUnit": "条",
+  "meta.Sinks.Clickhouse.RetryTimes": "重试次数",
+  "meta.Sinks.Clickhouse.RetryTimesUnit": "次",
+  "meta.Sinks.Clickhouse.IsDistributed": "分布式表",
+  "meta.Sinks.Clickhouse.Yes": "是",
+  "meta.Sinks.Clickhouse.No": "否",
+  "meta.Sinks.Clickhouse.PartitionStrategy": "分区策略",
+  "meta.Sinks.Clickhouse.PartitionFields": "分区字段",
+  "meta.Sinks.Clickhouse.FieldName": "字段名",
+  "meta.Sinks.Clickhouse.FieldNameRule": "以英文字母开头,只能包含英文字母、数字、下划线",
+  "meta.Sinks.Clickhouse.FieldType": "字段类型",
+  "meta.Sinks.Clickhouse.FieldDescription": "字段描述",
+  "meta.Sinks.Clickhouse.Engine": "引擎",
+  "meta.Sinks.Clickhouse.OrderBy": "排序",
+  "meta.Sinks.Clickhouse.PartitionBy": "分区",
+  "meta.Sinks.Clickhouse.PrimaryKey": "主键",
+  "meta.Sinks.Clickhouse.CompressionCode": "压缩格式",
+  "meta.Sinks.Clickhouse.TtlExpr": "生命周期",
+  "meta.Sinks.Es.IndexName": "索引名称",
+  "meta.Sinks.Es.FlushInterval": "刷新的间隔",
+  "meta.Sinks.Es.FlushIntervalUnit": "秒",
+  "meta.Sinks.Es.FlushRecord": "刷新的数据条数",
+  "meta.Sinks.Es.FlushRecordUnit": "条",
+  "meta.Sinks.Es.RetryTimes": "重试次数",
+  "meta.Sinks.Es.RetryTimesUnit": "次",
+  "meta.Sinks.Es.Host": "主机地址",
+  "meta.Sinks.Es.Port": "端口",
+  "meta.Sinks.Es.FieldName": "字段名",
+  "meta.Sinks.Es.FieldNameRule": "以英文字母开头,只能包含英文字母、数字、下划线",
+  "meta.Sinks.Es.FieldType": "字段类型",
+  "meta.Sinks.Es.FieldDescription": "字段描述",
+  "meta.Sinks.Es.DateFormat": "日期格式",
+  "meta.Sinks.Kafka.Server": "服务器地址",
+  "meta.Sinks.Kafka.SerializationType": "序列化类型",
+  "meta.Sinks.Kafka.PartitionNum": "Topic分区数",
+  "meta.Sinks.Kafka.AutoOffsetReset": "自动偏移量重置",
+  "meta.Sinks.Iceberg.DbName": "DB名称",
+  "meta.Sinks.Iceberg.TableName": "表名称",
+  "meta.Sinks.Iceberg.Warehouse": "仓库路径",
+  "meta.Sinks.Iceberg.FileFormat": "⽂件格式",
+  "meta.Sinks.Iceberg.Description": "表描述",
+  "meta.Sinks.Iceberg.ExtList": "属性",
+  "meta.Sinks.Iceberg.DataConsistency": "数据一致性",
+  "meta.Sinks.Iceberg.FieldName": "字段名",
+  "meta.Sinks.Iceberg.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
+  "meta.Sinks.Iceberg.FieldType": "字段类型",
+  "meta.Sinks.Iceberg.FieldDescription": "字段描述",
+  "meta.Sinks.Iceberg.PartitionStrategy": "分区策略",
+  "meta.Sinks.Greenplum.TableName": "表名称",
+  "meta.Sinks.Greenplum.PrimaryKey": "主键",
+  "meta.Sinks.Greenplum.FieldName": "字段名",
+  "meta.Sinks.Greenplum.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
+  "meta.Sinks.Greenplum.FieldType": "字段类型",
+  "meta.Sinks.Greenplum.IsMetaField": "是否为元字段",
+  "meta.Sinks.Greenplum.FieldFormat": "字段格式",
+  "meta.Sinks.Greenplum.FieldDescription": "字段描述",
+  "meta.Sinks.MySQL.TableName": "表名称",
+  "meta.Sinks.MySQL.PrimaryKey": "主键",
+  "meta.Sinks.MySQL.FieldName": "字段名",
+  "meta.Sinks.MySQL.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
+  "meta.Sinks.MySQL.FieldType": "字段类型",
+  "meta.Sinks.MySQL.IsMetaField": "是否为元字段",
+  "meta.Sinks.MySQL.FieldFormat": "字段格式",
+  "meta.Sinks.MySQL.FieldDescription": "字段描述",
+  "meta.Sinks.Oracle.TableName": "表名称",
+  "meta.Sinks.Oracle.PrimaryKey": "主键",
+  "meta.Sinks.Oracle.FieldName": "字段名",
+  "meta.Sinks.Oracle.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
+  "meta.Sinks.Oracle.FieldType": "字段类型",
+  "meta.Sinks.Oracle.IsMetaField": "是否为元字段",
+  "meta.Sinks.Oracle.FieldFormat": "字段格式",
+  "meta.Sinks.Oracle.FieldDescription": "字段描述",
+  "meta.Sinks.PostgreSQL.DbName": "DB名称",
+  "meta.Sinks.PostgreSQL.TableName": "表名称",
+  "meta.Sinks.PostgreSQL.PrimaryKey": "主键",
+  "meta.Sinks.PostgreSQL.FieldName": "字段名",
+  "meta.Sinks.PostgreSQL.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
+  "meta.Sinks.PostgreSQL.FieldType": "字段类型",
+  "meta.Sinks.PostgreSQL.IsMetaField": "是否为元字段",
+  "meta.Sinks.PostgreSQL.FieldFormat": "字段格式",
+  "meta.Sinks.PostgreSQL.FieldDescription": "字段描述",
+  "meta.Sinks.SQLServer.SchemaName": "架构名称",
+  "meta.Sinks.SQLServer.AllMigration": "是否迁移所有数据库",
+  "meta.Sinks.SQLServer.ServerTimezone": "数组库时区",
+  "meta.Sinks.SQLServer.TableName": "表名称",
+  "meta.Sinks.SQLServer.PrimaryKey": "主键",
+  "meta.Sinks.SQLServer.FieldName": "字段名",
+  "meta.Sinks.SQLServer.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
+  "meta.Sinks.SQLServer.FieldType": "字段类型",
+  "meta.Sinks.SQLServer.IsMetaField": "是否为元字段",
+  "meta.Sinks.SQLServer.FieldFormat": "字段格式",
+  "meta.Sinks.SQLServer.FieldDescription": "字段描述",
+  "meta.Sinks.TDSQLPostgreSQL.SchemaName": "架构名称",
+  "meta.Sinks.TDSQLPostgreSQL.TableName": "表名称",
+  "meta.Sinks.TDSQLPostgreSQL.PrimaryKey": "主键",
+  "meta.Sinks.TDSQLPostgreSQL.FieldName": "字段名",
+  "meta.Sinks.TDSQLPostgreSQL.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
+  "meta.Sinks.TDSQLPostgreSQL.FieldType": "字段类型",
+  "meta.Sinks.TDSQLPostgreSQL.IsMetaField": "是否为元字段",
+  "meta.Sinks.TDSQLPostgreSQL.FieldFormat": "字段格式",
+  "meta.Sinks.TDSQLPostgreSQL.FieldDescription": "字段描述",
+  "meta.Sinks.HBase.Namespace": "命名空间",
+  "meta.Sinks.HBase.TableName": "表名称",
+  "meta.Sinks.HBase.RowKey": "RowKey",
+  "meta.Sinks.HBase.ZkQuorum": "ZooKeeper 集群地址",
+  "meta.Sinks.HBase.ZkNodeParent": "ZooKeeper 根目录",
+  "meta.Sinks.HBase.BufferFlushMaxSize": "缓存刷新的最大容量",
+  "meta.Sinks.HBase.BufferFlushMaxRows": "缓存刷新的最大行数",
+  "meta.Sinks.HBase.BufferFlushInterval": "缓存区刷新间隔",
+  "meta.Sinks.HBase.FlushIntervalUnit": "秒",
+  "meta.Sinks.HBase.FieldName": "字段名",
+  "meta.Sinks.HBase.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
+  "meta.Sinks.HBase.FieldType": "字段类型",
+  "meta.Sinks.HBase.IsMetaField": "是否为元字段",
+  "meta.Sinks.HBase.FieldFormat": "字段格式",
+  "meta.Sinks.HBase.FieldDescription": "字段描述",
+  "meta.Group.Stripe/Second": "条/秒",
+  "meta.Group.MessageMiddleware": "消息中间件",
+  "meta.Group.AccessSize": "按天接入大小",
+  "meta.Group.GB/Day": "GB/天",
+  "meta.Group.BusinessIntroduction": "分组描述",
+  "meta.Group.BusinessOwners": "分组责任人",
+  "meta.Group.SingleStripMaximumLength": "单条最大长度",
+  "meta.Group.thousand/day": "万条/天",
+  "meta.Group.AccessPeakPerSecond": "每秒接入峰值",
+  "meta.Group.InlongGroupId": "分组ID",
+  "meta.Group.InlongGroupIdRules": "只能包含小写字母、数字、中划线、下划线",
+  "meta.Group.InlongGroupName": "分组名称",
+  "meta.Group.NumberOfAccess": "按天接入条数",
+  "meta.Group.BusinessOwnersExtra": "分组责任人,可查看、修改分组信息",
+  "meta.Group.QueueModule": "队列模型",
+  "meta.Group.Parallel": "并行",
+  "meta.Group.Serial": "顺序",
+  "meta.Group.PartitionNum": "Topic分区数",
+  "meta.Group.EnsembleSuffix": "节点数",
+  "meta.Group.EnsembleExtra": "Topic保存到多少个节点,最高可配置10个",
+  "meta.Group.WriteQuorumSuffix": "副本数",
+  "meta.Group.WriteQuorumExtra": "每条消息保存多少个副本,最高可配置10个",
+  "meta.Group.AckQuorumSuffix": "响应数",
+  "meta.Group.AckQuorumExtra": "写请求成功所需的ack数,最高可配置10个",
+  "meta.Group.RetentionTimeExtra": "处于ack状态的消息的保存时⻓,超过此值时消息会被删除(最多保留14天)",
+  "meta.Group.TtlExtra": "消息的time-to-live时⻓,超过此值的消息会被标记为ack(最多保留14天)",
+  "meta.Group.RetentionSizeExtra": "处于ack状态的消息容量,超过此值的消息会被删除(-1表示永不删除)",
+  "meta.Group.DataCopyTitle": "数据副本信息",
+  "meta.Group.DataStoragePeriodTitle": "数据存储周期信息",
+  "meta.Stream.DataStreamID": "数据流ID",
+  "meta.Stream.InlongStreamIdRules": "只能包含小写字母、数字、中划线、下划线",
+  "meta.Stream.fileDelimiter": "源数据字段分割符",
+  "meta.Stream.Asterisk": "星号(*)",
+  "meta.Stream.DataStreamName": "数据流名称",
+  "meta.Stream.FieldName": "字段名",
+  "meta.Stream.FieldNameRule": "以英文字母开头,只能包含英文字母、数字、下划线",
+  "meta.Stream.Semicolon": "分号(;)",
+  "meta.Stream.AutoConsumption": "自主消费",
+  "meta.Stream.DataFlowDirection": "数据流向",
+  "meta.Stream.DataType": "数据格式",
+  "meta.Stream.DataTypeCsvHelp": "CSV:按特定分隔符分隔的任意文件",
+  "meta.Stream.Source": "消息来源",
+  "meta.Stream.FieldType": "字段类型",
+  "meta.Stream.FieldComment": "字段描述",
+  "meta.Stream.DoubleQuotes": "双引号(\")",
+  "meta.Stream.DataEncoding": "数据编码",
+  "meta.Stream.DataStreamOwners": "责任人",
+  "meta.Stream.DataStreamOwnerHelp": "责任人可查看、修改数据流信息",
+  "meta.Stream.Space": "空格",
+  "meta.Stream.Comma": "逗号(,)",
+  "meta.Stream.DataFlowIntroduction": "介绍",
+  "meta.Stream.SourceDataField": "源数据字段",
+  "meta.Stream.VerticalLine": "竖线(|)",
+  "meta.Stream.File": "文件",
+  "meta.Stream.Autonomous": "自主推送",
+  "meta.Consumption.Owner": "消费责任人",
+  "meta.Consumption.ConsumerGroupName": "消费组名称",
+  "meta.Consumption.ConsumerGroupNameRules": "只能包含小写字母、数字、中划线、下划线",
+  "meta.Consumption.DataStreamIDsHelp": "多个数据流ID之间用逗号(,)隔开",
+  "meta.Consumption.ConsumerDataStreamID": "消费的数据流ID",
+  "meta.Consumption.ConsumerTargetBusinessID": "消费的数据分组ID",
+  "meta.Consumption.No": "否",
+  "meta.Consumption.filterEnabled": "是否过滤消费",
+  "meta.Consumption.MasterAddress": "Master地址",
+  "meta.Consumption.Yes": "是",
+  "meta.Consumption.OwnersExtra": "消费责任人,可查看、修改消费信息",
   "components.EditableTable.NewLine": "新增一行",
   "components.FormGenerator.plugins.PleaseChoose": "请选择",
   "components.FormGenerator.plugins.PleaseInput": "请输入",
diff --git a/inlong-dashboard/src/locales/en.json b/inlong-dashboard/src/locales/en.json
index 226306f06..1ae3b44bc 100644
--- a/inlong-dashboard/src/locales/en.json
+++ b/inlong-dashboard/src/locales/en.json
@@ -17,248 +17,243 @@
   "components.AccessHelper.DataSourcesEditor.NewDataSource": "New DataSource",
   "components.AccessHelper.DataSourcesEditor.CreateModal.DataSourceName": "DataSource Name",
   "components.AccessHelper.DataSourcesEditor.CreateModal.File": "File",
-  "components.AccessHelper.DataSourceMetaData.File.SerializationType": "File type",
-  "components.AccessHelper.DataSourceMetaData.File.DataSourceIP": "Data source IP",
-  "components.AccessHelper.DataSourceMetaData.File.FilePath": "File path",
-  "components.AccessHelper.DataSourceMetaData.File.FilePathHelp": "Must be an absolute path and support regular expressions, such as: /data/*.log",
-  "components.AccessHelper.DataSourceMetaData.File.IpRule": "Please enter the IP address correctly",
-  "components.AccessHelper.DataSourceMetaData.File.TimeOffset": "Time offset",
-  "components.AccessHelper.DataSourceMetaData.File.TimeOffsetHelp": "The file will be collected from a certain time,' 1m' means 1 minute later,' -1m' means 1 minute before, and m(minute), h(hour), d(day) are supported. If it is empty, the file will be collected from the current time",
-  "components.AccessHelper.DataSourceMetaData.Db.Server": "Server",
-  "components.AccessHelper.DataSourceMetaData.Db.Port": "Port",
-  "components.AccessHelper.DataSourceMetaData.Db.ServerTimezone": "Timezone",
-  "components.AccessHelper.DataSourceMetaData.Db.IntervalMs": "Recording Offset",
-  "components.AccessHelper.DataSourceMetaData.Db.User": "User",
-  "components.AccessHelper.DataSourceMetaData.Db.Password": "Password",
-  "components.AccessHelper.DataSourceMetaData.Db.HistoryFilename": "History Filename",
-  "components.AccessHelper.DataSourceMetaData.Db.AllMigration": "Migration Total Database",
-  "components.AccessHelper.DataSourceMetaData.Db.DatabaseWhiteList": "Database WhiteList",
-  "components.AccessHelper.DataSourceMetaData.Db.TableWhiteList": "Table WhiteList",
-  "components.AccessHelper.DataSourceMetaData.Db.WhiteListHelp": "Multiple whitelists are separated by commas, each of which is a regular expression, for example b1,b*",
+  "meta.Sources.File.SerializationType": "File type",
+  "meta.Sources.File.DataSourceIP": "Data source IP",
+  "meta.Sources.File.FilePath": "File path",
+  "meta.Sources.File.FilePathHelp": "Must be an absolute path and support regular expressions, such as: /data/*.log",
+  "meta.Sources.File.IpRule": "Please enter the IP address correctly",
+  "meta.Sources.File.TimeOffset": "Time offset",
+  "meta.Sources.File.TimeOffsetHelp": "The file will be collected from a certain time,' 1m' means 1 minute later,' -1m' means 1 minute before, and m(minute), h(hour), d(day) are supported. If it is empty, the file will be collected from the current time",
+  "meta.Sources.Db.Server": "Server",
+  "meta.Sources.Db.Port": "Port",
+  "meta.Sources.Db.ServerTimezone": "Timezone",
+  "meta.Sources.Db.IntervalMs": "Recording Offset",
+  "meta.Sources.Db.User": "User",
+  "meta.Sources.Db.Password": "Password",
+  "meta.Sources.Db.HistoryFilename": "History Filename",
+  "meta.Sources.Db.AllMigration": "Migration Total Database",
+  "meta.Sources.Db.DatabaseWhiteList": "Database WhiteList",
+  "meta.Sources.Db.TableWhiteList": "Table WhiteList",
+  "meta.Sources.Db.WhiteListHelp": "Multiple whitelists are separated by commas, each of which is a regular expression, for example b1,b*",
   "components.AccessHelper.DataStorageEditor.Editor.AddTo": "Add",
-  "components.AccessHelper.StorageMetaData.SinkName": "SinkName",
-  "components.AccessHelper.StorageMetaData.SinkNameRule": "At the beginning of English letters, only English letters, numbers, minus, and underscores",
-  "components.AccessHelper.StorageMetaData.Description": "SinkDescription",
-  "components.AccessHelper.StorageMetaData.SourceFieldName": "SourceFieldName",
-  "components.AccessHelper.StorageMetaData.SourceFieldType": "SourceFieldType",
-  "components.AccessHelper.StorageMetaData.SourceFieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
-  "components.AccessHelper.StorageMetaData.Username": "Username",
-  "components.AccessHelper.StorageMetaData.Password": "Password",
-  "components.AccessHelper.StorageMetaData.EnableCreateResource": "EnableCreateResource",
-  "components.AccessHelper.StorageMetaData.EnableCreateResourceHelp": "If the library table already exists and does not need to be modified, select [Do not create], otherwise select [Create], and the system will automatically create the resource.",
-  "components.AccessHelper.StorageMetaData.Hive.FileFormat": "File format",
-  "components.AccessHelper.StorageMetaData.Hive.Day": "Day(s)",
-  "components.AccessHelper.StorageMetaData.Hive.DataEncoding": "Data encoding",
-  "components.AccessHelper.StorageMetaData.Hive.DataSeparator": "Data separator",
-  "components.AccessHelper.StorageMetaData.Hive.PartitionFieldList": "PartitionFieldList",
-  "components.AccessHelper.StorageMetaData.Hive.PartitionFieldListHelp": "If the field type is timestamp, you must set the format of the field value, support MICROSECONDS, MILLISECONDS, SECONDS, SQL, ISO_8601, and custom, such as: yyyy-MM-dd HH:mm:ss, etc.",
-  "components.AccessHelper.StorageMetaData.Hive.DbName": "DbName",
-  "components.AccessHelper.StorageMetaData.Hive.TableName": "TableName",
-  "components.AccessHelper.StorageMetaData.Hive.FieldNameRule": "At the beginning of lowercase letters, only lowercase letters, numbers, and underscores",
-  "components.AccessHelper.StorageMetaData.Hive.ConnectionTest": "Test connection",
-  "components.AccessHelper.StorageMetaData.Hive.ConnectionSucceeded": "Connection succeeded",
-  "components.AccessHelper.StorageMetaData.Hive.ConnectionFailed": "Connection failed",
-  "components.AccessHelper.StorageMetaData.Hive.DataPath": "DataPath",
-  "components.AccessHelper.StorageMetaData.Hive.ConfDir": "ConfDir",
-  "components.AccessHelper.StorageMetaData.Hive.ConfDirHelp": "Upload the hive-site.xml file of the Hive cluster to a directory in HDFS, such as: /user/hive/conf",
-  "components.AccessHelper.StorageMetaData.DataPathHelp": "Storage path of the DB, excluding the table name, such as: hdfs://127.0.0.1:9000/warehouse/inlong.db",
-  "components.AccessHelper.StorageMetaData.Hive.FieldName": "FieldName",
-  "components.AccessHelper.StorageMetaData.Hive.FieldType": "FieldType",
-  "components.AccessHelper.StorageMetaData.Hive.FieldDescription": "Field description",
-  "components.AccessHelper.StorageMetaData.Hive.IsMetaField": "IsMetaField",
-  "components.AccessHelper.StorageMetaData.Hive.FieldFormat": "FieldFormat",
-  "components.AccessHelper.StorageMetaData.Clickhouse.DbName": "DbName",
-  "components.AccessHelper.StorageMetaData.Clickhouse.TableName": "TableName",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FlushInterval": "FlushInterval",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FlushIntervalUnit": "S",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FlushRecord": "FlushRecord",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FlushRecordUnit": "items",
-  "components.AccessHelper.StorageMetaData.Clickhouse.RetryTimes": "RetryTimes",
-  "components.AccessHelper.StorageMetaData.Clickhouse.RetryTimesUnit": "items",
-  "components.AccessHelper.StorageMetaData.Clickhouse.IsDistributed": "IsDistributedTable",
-  "components.AccessHelper.StorageMetaData.Clickhouse.Yes": "Yes",
-  "components.AccessHelper.StorageMetaData.Clickhouse.No": "No",
-  "components.AccessHelper.StorageMetaData.Clickhouse.PartitionStrategy": "PartitionStrategy",
-  "components.AccessHelper.StorageMetaData.Clickhouse.PartitionFields": "PartitionFields",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FieldName": "FieldName",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FieldType": "FieldType",
-  "components.AccessHelper.StorageMetaData.Clickhouse.FieldDescription": "FieldDescription",
-  "components.AccessHelper.StorageMetaData.Clickhouse.Engine": "Engine",
-  "components.AccessHelper.StorageMetaData.Clickhouse.OrderBy": "OrderBy",
-  "components.AccessHelper.StorageMetaData.Clickhouse.PartitionBy": "PartitionBy",
-  "components.AccessHelper.StorageMetaData.Clickhouse.PrimaryKey": "PrimaryKey",
-  "components.AccessHelper.StorageMetaData.Clickhouse.CompressionCode": "CompressionCode",
-  "components.AccessHelper.StorageMetaData.Clickhouse.TtlExpr": "TtlExpr",
-  "components.AccessHelper.StorageMetaData.Es.IndexName": "IndexName",
-  "components.AccessHelper.StorageMetaData.Es.FlushInterval": "FlushInterval",
-  "components.AccessHelper.StorageMetaData.Es.FlushIntervalUnit": "S",
-  "components.AccessHelper.StorageMetaData.Es.FlushRecord": "FlushRecord",
-  "components.AccessHelper.StorageMetaData.Es.FlushRecordUnit": "items",
-  "components.AccessHelper.StorageMetaData.Es.RetryTimes": "RetryTimes",
-  "components.AccessHelper.StorageMetaData.Es.RetryTimesUnit": "items",
-  "components.AccessHelper.StorageMetaData.Es.Host": "Host",
-  "components.AccessHelper.StorageMetaData.Es.Port": "Port",
-  "components.AccessHelper.StorageMetaData.Es.FieldName": "FieldName",
-  "components.AccessHelper.StorageMetaData.Es.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
-  "components.AccessHelper.StorageMetaData.Es.FieldType": "FieldType",
-  "components.AccessHelper.StorageMetaData.Es.FieldDescription": "FieldDescription",
-  "components.AccessHelper.StorageMetaData.Es.DateFormat": "DateFormat",
-  "components.AccessHelper.StorageMetaData.Kafka.Server": "Server",
-  "components.AccessHelper.StorageMetaData.Kafka.SerializationType": "SerializationType",
-  "components.AccessHelper.StorageMetaData.Kafka.PartitionNum": "PartitionNum",
-  "components.AccessHelper.StorageMetaData.Kafka.AutoOffsetReset": "AutoOffsetReset",
-  "components.AccessHelper.StorageMetaData.Iceberg.DbName": "DbName",
-  "components.AccessHelper.StorageMetaData.Iceberg.TableName": "TableName",
-  "components.AccessHelper.StorageMetaData.Iceberg.Warehouse": "Warehouse",
-  "components.AccessHelper.StorageMetaData.Iceberg.FileFormat": "FileFormat",
-  "components.AccessHelper.StorageMetaData.Iceberg.Description": "Description",
-  "components.AccessHelper.StorageMetaData.Iceberg.ExtList": "ExtList",
-  "components.AccessHelper.StorageMetaData.Iceberg.DataConsistency": "DataConsistency",
-  "components.AccessHelper.StorageMetaData.Iceberg.FieldName": "FieldName",
-  "components.AccessHelper.StorageMetaData.Iceberg.FieldNameRule": "At the beginning of English letters or underscore, only English letters, numbers, and underscores",
-  "components.AccessHelper.StorageMetaData.Iceberg.FieldType": "FieldType",
-  "components.AccessHelper.StorageMetaData.Iceberg.FieldDescription": "FieldDescription",
-  "components.AccessHelper.StorageMetaData.Iceberg.PartitionStrategy": "PartitionStrategy",
-  "components.AccessHelper.StorageMetaData.Greenplum.TableName": "TableName",
-  "components.AccessHelper.StorageMetaData.Greenplum.PrimaryKey": "PrimaryKey",
-  "components.AccessHelper.StorageMetaData.Greenplum.FieldName": "FieldName",
-  "components.AccessHelper.StorageMetaData.Greenplum.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
-  "components.AccessHelper.StorageMetaData.Greenplum.FieldType": "FieldType",
-  "components.AccessHelper.StorageMetaData.Greenplum.IsMetaField": "IsMetaField",
-  "components.AccessHelper.StorageMetaData.Greenplum.FieldFormat": "FieldFormat",
-  "components.AccessHelper.StorageMetaData.Greenplum.FieldDescription": "FieldDescription",
-  "components.AccessHelper.StorageMetaData.MySQL.TableName": "TableName",
-  "components.AccessHelper.StorageMetaData.MySQL.PrimaryKey": "PrimaryKey",
-  "components.AccessHelper.StorageMetaData.MySQL.FieldName": "FieldName",
-  "components.AccessHelper.StorageMetaData.MySQL.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
-  "components.AccessHelper.StorageMetaData.MySQL.FieldType": "FieldType",
-  "components.AccessHelper.StorageMetaData.MySQL.IsMetaField": "IsMetaField",
-  "components.AccessHelper.StorageMetaData.MySQL.FieldFormat": "FieldFormat",
-  "components.AccessHelper.StorageMetaData.MySQL.FieldDescription": "FieldDescription",
-  "components.AccessHelper.StorageMetaData.Oracle.TableName": "TableName",
-  "components.AccessHelper.StorageMetaData.Oracle.PrimaryKey": "PrimaryKey",
-  "components.AccessHelper.StorageMetaData.Oracle.FieldName": "FieldName",
-  "components.AccessHelper.StorageMetaData.Oracle.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
-  "components.AccessHelper.StorageMetaData.Oracle.FieldType": "FieldType",
-  "components.AccessHelper.StorageMetaData.Oracle.IsMetaField": "IsMetaField",
-  "components.AccessHelper.StorageMetaData.Oracle.FieldFormat": "FieldFormat",
-  "components.AccessHelper.StorageMetaData.Oracle.FieldDescription": "FieldDescription",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.DbName": "DbName",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.TableName": "TableName",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.PrimaryKey": "PrimaryKey",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.FieldName": "FieldName",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.FieldType": "FieldType",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.IsMetaField": "IsMetaField",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.FieldFormat": "FieldFormat",
-  "components.AccessHelper.StorageMetaData.PostgreSQL.FieldDescription": "FieldDescription",
-  "components.AccessHelper.StorageMetaData.SQLServer.SchemaName": "SchemaName",
-  "components.AccessHelper.StorageMetaData.SQLServer.AllMigration": "AllMigration",
-  "components.AccessHelper.StorageMetaData.SQLServer.ServerTimezone": "ServerTimezone",
-  "components.AccessHelper.StorageMetaData.SQLServer.TableName": "TableName",
-  "components.AccessHelper.StorageMetaData.SQLServer.PrimaryKey": "PrimaryKey",
-  "components.AccessHelper.StorageMetaData.SQLServer.FieldName": "FieldName",
-  "components.AccessHelper.StorageMetaData.SQLServer.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
-  "components.AccessHelper.StorageMetaData.SQLServer.FieldType": "FieldType",
-  "components.AccessHelper.StorageMetaData.SQLServer.IsMetaField": "IsMetaField",
-  "components.AccessHelper.StorageMetaData.SQLServer.FieldFormat": "FieldFormat",
-  "components.AccessHelper.StorageMetaData.SQLServer.FieldDescription": "FieldDescription",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.SchemaName": "SchemaName",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.TableName": "TableName",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.PrimaryKey": "PrimaryKey",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldName": "FieldName",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldType": "FieldType",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.IsMetaField": "IsMetaField",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldFormat": "FieldFormat",
-  "components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldDescription": "FieldDescription",
-  "components.AccessHelper.StorageMetaData.HBase.Namespace": "Namespace",
-  "components.AccessHelper.StorageMetaData.HBase.TableName": "TableName",
-  "components.AccessHelper.StorageMetaData.HBase.RowKey": "RowKey",
-  "components.AccessHelper.StorageMetaData.HBase.ZkQuorum": "ZooKeeper address",
-  "components.AccessHelper.StorageMetaData.HBase.ZkNodeParent": "ZooKeeper node parent",
-  "components.AccessHelper.StorageMetaData.HBase.BufferFlushMaxSize": "Buffer flush max size",
-  "components.AccessHelper.StorageMetaData.HBase.BufferFlushMaxRows": "Buffer flush max rows",
-  "components.AccessHelper.StorageMetaData.HBase.BufferFlushInterval": "Buffer flush interval",
-  "components.AccessHelper.StorageMetaData.HBase.FlushIntervalUnit": "S",
-  "components.AccessHelper.StorageMetaData.HBase.FieldName": "FieldName",
-  "components.AccessHelper.StorageMetaData.HBase.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
-  "components.AccessHelper.StorageMetaData.HBase.FieldType": "FieldType",
-  "components.AccessHelper.StorageMetaData.HBase.IsMetaField": "IsMetaField",
-  "components.AccessHelper.StorageMetaData.HBase.FieldFormat": "FieldFormat",
-  "components.AccessHelper.StorageMetaData.HBase.FieldDescription": "FieldDescription",
-  "components.AccessHelper.FieldsConfig.businessFields.Stripe/Second": "Stripe / S",
-  "components.AccessHelper.FieldsConfig.businessFields.MessageMiddleware": "Middleware",
-  "components.AccessHelper.FieldsConfig.businessFields.AccessSize": "Access Size",
-  "components.AccessHelper.FieldsConfig.businessFields.GB/Day": "GB / Day",
-  "components.AccessHelper.FieldsConfig.businessFields.BusinessIntroduction": "Description",
-  "components.AccessHelper.FieldsConfig.businessFields.BusinessOwners": "Group Owners",
-  "components.AccessHelper.FieldsConfig.businessFields.SingleStripMaximumLength": "Single Max Length",
-  "components.AccessHelper.FieldsConfig.businessFields.thousand/day": "Ten Thousand / day",
-  "components.AccessHelper.FieldsConfig.businessFields.AccessPeakPerSecond": "PeakRecords",
-  "components.AccessHelper.FieldsConfig.businessFields.InlongGroupId": "Group ID",
-  "components.AccessHelper.FieldsConfig.businessFields.InlongGroupIdRules": "Only lowercase letters, numbers, minus, and underscores",
-  "components.AccessHelper.FieldsConfig.businessFields.InlongGroupName": "Group Name",
-  "components.AccessHelper.FieldsConfig.businessFields.NumberOfAccess": "Number of Access",
-  "components.AccessHelper.FieldsConfig.businessFields.BusinessOwnersExtra": "Group in charges, they can view, modify Group information",
-  "components.AccessHelper.FieldsConfig.businessFields.QueueModule": "Queue Module",
-  "components.AccessHelper.FieldsConfig.businessFields.Parallel": "Parallel",
-  "components.AccessHelper.FieldsConfig.businessFields.Serial": "Serial",
-  "components.AccessHelper.FieldsConfig.businessFields.PartitionNum": "Topic Part Nums",
-  "components.AccessHelper.FieldsConfig.businessFields.EnsembleSuffix": "Number of nodes",
-  "components.AccessHelper.FieldsConfig.businessFields.EnsembleExtra": "How many nodes are Topic saved to, up to 10 can be configured",
-  "components.AccessHelper.FieldsConfig.businessFields.WriteQuorumSuffix": "Number of copies",
-  "components.AccessHelper.FieldsConfig.businessFields.WriteQuorumExtra": "How many copies of each message are saved, up to 10 can be configured",
-  "components.AccessHelper.FieldsConfig.businessFields.AckQuorumSuffix": "Number of responses",
-  "components.AccessHelper.FieldsConfig.businessFields.AckQuorumExtra": "The number of ack required for a successful write request, up to 10 can be configured",
-  "components.AccessHelper.FieldsConfig.businessFields.RetentionTimeExtra": "The save time of the message in the ack state, the message will be deleted when this value is exceeded (up to 14 days)",
-  "components.AccessHelper.FieldsConfig.businessFields.TtlExtra": "The time-to-live time of the message, messages exceeding this value will be marked as ack (retained for up to 14 days)",
-  "components.AccessHelper.FieldsConfig.businessFields.RetentionSizeExtra": "Message capacity in ack state, messages exceeding this value will be deleted (-1 means never delete)",
-  "components.AccessHelper.FieldsConfig.businessFields.DataCopyTitle": "Data copy information",
-  "components.AccessHelper.FieldsConfig.businessFields.DataStoragePeriodTitle": "Data storage period information",
-  "components.AccessHelper.FieldsConfig.dataFields.DataStreamID": "Inlong stream ID",
-  "components.AccessHelper.FieldsConfig.dataFields.InlongStreamIdRules": "Only lowercase letters, numbers, minus, and underscores",
-  "components.AccessHelper.FieldsConfig.dataFields.fileDelimiter": "Source data fileDelimiter",
-  "components.AccessHelper.FieldsConfig.dataFields.Asterisk": "Asterisk(*)",
-  "components.AccessHelper.FieldsConfig.dataFields.DataStreamName": "Stream name",
-  "components.AccessHelper.FieldsConfig.dataFields.FieldName": "Field name",
-  "components.AccessHelper.FieldsConfig.dataFields.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
-  "components.AccessHelper.FieldsConfig.dataFields.Semicolon": "Semicolon(;)",
-  "components.AccessHelper.FieldsConfig.dataFields.AutoConsumption": "Auto Consumption",
-  "components.AccessHelper.FieldsConfig.dataFields.DataFlowDirection": "Stream direction",
-  "components.AccessHelper.FieldsConfig.dataFields.DataType": "DataType",
-  "components.AccessHelper.FieldsConfig.dataFields.DataTypeCsvHelp": "CSV: Any file separated by a specific delimiter",
-  "components.AccessHelper.FieldsConfig.dataFields.Source": "Source",
-  "components.AccessHelper.FieldsConfig.dataFields.FieldType": "FieldType",
-  "components.AccessHelper.FieldsConfig.dataFields.FieldComment": "FieldComment",
-  "components.AccessHelper.FieldsConfig.dataFields.DoubleQuotes": "Double quotes(\")",
-  "components.AccessHelper.FieldsConfig.dataFields.DataEncoding": "Data encoding",
-  "components.AccessHelper.FieldsConfig.dataFields.DataStreamOwners": "Owners",
-  "components.AccessHelper.FieldsConfig.dataFields.DataStreamOwnerHelp": "Owners can view and modify data flow information",
-  "components.AccessHelper.FieldsConfig.dataFields.Space": "Space",
-  "components.AccessHelper.FieldsConfig.dataFields.Comma": "Comma(,)",
-  "components.AccessHelper.FieldsConfig.dataFields.DataFlowIntroduction": "Description",
-  "components.AccessHelper.FieldsConfig.dataFields.SourceDataField": "Source data field",
-  "components.AccessHelper.FieldsConfig.dataFields.VerticalLine": "Vertical line (|)",
-  "components.AccessHelper.FieldsConfig.dataFields.File": "File",
-  "components.AccessHelper.FieldsConfig.dataFields.Autonomous": "Auto Push",
-  "components.ConsumeHelper.BusinessSelect.MyBusinessModal.BusinessName": "Group Name",
-  "components.ConsumeHelper.BusinessSelect.MyBusinessModal.Select": "Select",
-  "components.ConsumeHelper.BusinessSelect.MyBusinessModal.Owners": "Owners",
-  "components.ConsumeHelper.BusinessSelect.MyBusinessModal.MyAccessBusiness": "My Data Streams Group",
-  "components.ConsumeHelper.BusinessSelect.Search": "Search",
-  "components.ConsumeHelper.FieldsConfig.basicFields.Consumption": "Consumption",
-  "components.ConsumeHelper.FieldsConfig.basicFields.ConsumerGroupName": "Consumer group name",
-  "components.ConsumeHelper.FieldsConfig.basicFields.ConsumerGroupNameRules": "Only lowercase letters, numbers, minus, and underscores",
-  "components.ConsumeHelper.FieldsConfig.basicFields.DataStreamIDsHelp": "Inlong stream IDs are divided by commas;",
-  "components.ConsumeHelper.FieldsConfig.basicFields.ConsumerDataStreamID": "Consumer data stream ID",
-  "components.ConsumeHelper.FieldsConfig.basicFields.ConsumerTargetBusinessID": "Consume Group ID",
-  "components.ConsumeHelper.FieldsConfig.basicFields.No": "No",
-  "components.ConsumeHelper.FieldsConfig.basicFields.filterEnabled": "FilterEnabled",
-  "components.ConsumeHelper.FieldsConfig.basicFields.MasterAddress": "Master address",
-  "components.ConsumeHelper.FieldsConfig.basicFields.Yes": "Yes",
-  "components.ConsumeHelper.FieldsConfig.basicFields.OwnersExtra": "Consumption in charges, they can view, modify consumption information",
+  "meta.Sinks.SinkName": "SinkName",
+  "meta.Sinks.SinkNameRule": "At the beginning of English letters, only English letters, numbers, minus, and underscores",
+  "meta.Sinks.Description": "SinkDescription",
+  "meta.Sinks.SourceFieldName": "SourceFieldName",
+  "meta.Sinks.SourceFieldType": "SourceFieldType",
+  "meta.Sinks.SourceFieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
+  "meta.Sinks.Username": "Username",
+  "meta.Sinks.Password": "Password",
+  "meta.Sinks.EnableCreateResource": "EnableCreateResource",
+  "meta.Sinks.EnableCreateResourceHelp": "If the library table already exists and does not need to be modified, select [Do not create], otherwise select [Create], and the system will automatically create the resource.",
+  "meta.Sinks.Hive.FileFormat": "File format",
+  "meta.Sinks.Hive.Day": "Day(s)",
+  "meta.Sinks.Hive.DataEncoding": "Data encoding",
+  "meta.Sinks.Hive.DataSeparator": "Data separator",
+  "meta.Sinks.Hive.PartitionFieldList": "PartitionFieldList",
+  "meta.Sinks.Hive.PartitionFieldListHelp": "If the field type is timestamp, you must set the format of the field value, support MICROSECONDS, MILLISECONDS, SECONDS, SQL, ISO_8601, and custom, such as: yyyy-MM-dd HH:mm:ss, etc.",
+  "meta.Sinks.Hive.DbName": "DbName",
+  "meta.Sinks.Hive.TableName": "TableName",
+  "meta.Sinks.Hive.FieldNameRule": "At the beginning of lowercase letters, only lowercase letters, numbers, and underscores",
+  "meta.Sinks.Hive.ConnectionTest": "Test connection",
+  "meta.Sinks.Hive.ConnectionSucceeded": "Connection succeeded",
+  "meta.Sinks.Hive.ConnectionFailed": "Connection failed",
+  "meta.Sinks.Hive.DataPath": "DataPath",
+  "meta.Sinks.Hive.ConfDir": "ConfDir",
+  "meta.Sinks.Hive.ConfDirHelp": "Upload the hive-site.xml file of the Hive cluster to a directory in HDFS, such as: /user/hive/conf",
+  "meta.Sinks.DataPathHelp": "Storage path of the DB, excluding the table name, such as: hdfs://127.0.0.1:9000/warehouse/inlong.db",
+  "meta.Sinks.Hive.FieldName": "FieldName",
+  "meta.Sinks.Hive.FieldType": "FieldType",
+  "meta.Sinks.Hive.FieldDescription": "Field description",
+  "meta.Sinks.Hive.IsMetaField": "IsMetaField",
+  "meta.Sinks.Hive.FieldFormat": "FieldFormat",
+  "meta.Sinks.Clickhouse.DbName": "DbName",
+  "meta.Sinks.Clickhouse.TableName": "TableName",
+  "meta.Sinks.Clickhouse.FlushInterval": "FlushInterval",
+  "meta.Sinks.Clickhouse.FlushIntervalUnit": "S",
+  "meta.Sinks.Clickhouse.FlushRecord": "FlushRecord",
+  "meta.Sinks.Clickhouse.FlushRecordUnit": "items",
+  "meta.Sinks.Clickhouse.RetryTimes": "RetryTimes",
+  "meta.Sinks.Clickhouse.RetryTimesUnit": "items",
+  "meta.Sinks.Clickhouse.IsDistributed": "IsDistributedTable",
+  "meta.Sinks.Clickhouse.Yes": "Yes",
+  "meta.Sinks.Clickhouse.No": "No",
+  "meta.Sinks.Clickhouse.PartitionStrategy": "PartitionStrategy",
+  "meta.Sinks.Clickhouse.PartitionFields": "PartitionFields",
+  "meta.Sinks.Clickhouse.FieldName": "FieldName",
+  "meta.Sinks.Clickhouse.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
+  "meta.Sinks.Clickhouse.FieldType": "FieldType",
+  "meta.Sinks.Clickhouse.FieldDescription": "FieldDescription",
+  "meta.Sinks.Clickhouse.Engine": "Engine",
+  "meta.Sinks.Clickhouse.OrderBy": "OrderBy",
+  "meta.Sinks.Clickhouse.PartitionBy": "PartitionBy",
+  "meta.Sinks.Clickhouse.PrimaryKey": "PrimaryKey",
+  "meta.Sinks.Clickhouse.CompressionCode": "CompressionCode",
+  "meta.Sinks.Clickhouse.TtlExpr": "TtlExpr",
+  "meta.Sinks.Es.IndexName": "IndexName",
+  "meta.Sinks.Es.FlushInterval": "FlushInterval",
+  "meta.Sinks.Es.FlushIntervalUnit": "S",
+  "meta.Sinks.Es.FlushRecord": "FlushRecord",
+  "meta.Sinks.Es.FlushRecordUnit": "items",
+  "meta.Sinks.Es.RetryTimes": "RetryTimes",
+  "meta.Sinks.Es.RetryTimesUnit": "items",
+  "meta.Sinks.Es.Host": "Host",
+  "meta.Sinks.Es.Port": "Port",
+  "meta.Sinks.Es.FieldName": "FieldName",
+  "meta.Sinks.Es.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
+  "meta.Sinks.Es.FieldType": "FieldType",
+  "meta.Sinks.Es.FieldDescription": "FieldDescription",
+  "meta.Sinks.Es.DateFormat": "DateFormat",
+  "meta.Sinks.Kafka.Server": "Server",
+  "meta.Sinks.Kafka.SerializationType": "SerializationType",
+  "meta.Sinks.Kafka.PartitionNum": "PartitionNum",
+  "meta.Sinks.Kafka.AutoOffsetReset": "AutoOffsetReset",
+  "meta.Sinks.Iceberg.DbName": "DbName",
+  "meta.Sinks.Iceberg.TableName": "TableName",
+  "meta.Sinks.Iceberg.Warehouse": "Warehouse",
+  "meta.Sinks.Iceberg.FileFormat": "FileFormat",
+  "meta.Sinks.Iceberg.Description": "Description",
+  "meta.Sinks.Iceberg.ExtList": "ExtList",
+  "meta.Sinks.Iceberg.DataConsistency": "DataConsistency",
+  "meta.Sinks.Iceberg.FieldName": "FieldName",
+  "meta.Sinks.Iceberg.FieldNameRule": "At the beginning of English letters or underscore, only English letters, numbers, and underscores",
+  "meta.Sinks.Iceberg.FieldType": "FieldType",
+  "meta.Sinks.Iceberg.FieldDescription": "FieldDescription",
+  "meta.Sinks.Iceberg.PartitionStrategy": "PartitionStrategy",
+  "meta.Sinks.Greenplum.TableName": "TableName",
+  "meta.Sinks.Greenplum.PrimaryKey": "PrimaryKey",
+  "meta.Sinks.Greenplum.FieldName": "FieldName",
+  "meta.Sinks.Greenplum.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
+  "meta.Sinks.Greenplum.FieldType": "FieldType",
+  "meta.Sinks.Greenplum.IsMetaField": "IsMetaField",
+  "meta.Sinks.Greenplum.FieldFormat": "FieldFormat",
+  "meta.Sinks.Greenplum.FieldDescription": "FieldDescription",
+  "meta.Sinks.MySQL.TableName": "TableName",
+  "meta.Sinks.MySQL.PrimaryKey": "PrimaryKey",
+  "meta.Sinks.MySQL.FieldName": "FieldName",
+  "meta.Sinks.MySQL.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
+  "meta.Sinks.MySQL.FieldType": "FieldType",
+  "meta.Sinks.MySQL.IsMetaField": "IsMetaField",
+  "meta.Sinks.MySQL.FieldFormat": "FieldFormat",
+  "meta.Sinks.MySQL.FieldDescription": "FieldDescription",
+  "meta.Sinks.Oracle.TableName": "TableName",
+  "meta.Sinks.Oracle.PrimaryKey": "PrimaryKey",
+  "meta.Sinks.Oracle.FieldName": "FieldName",
+  "meta.Sinks.Oracle.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
+  "meta.Sinks.Oracle.FieldType": "FieldType",
+  "meta.Sinks.Oracle.IsMetaField": "IsMetaField",
+  "meta.Sinks.Oracle.FieldFormat": "FieldFormat",
+  "meta.Sinks.Oracle.FieldDescription": "FieldDescription",
+  "meta.Sinks.PostgreSQL.DbName": "DbName",
+  "meta.Sinks.PostgreSQL.TableName": "TableName",
+  "meta.Sinks.PostgreSQL.PrimaryKey": "PrimaryKey",
+  "meta.Sinks.PostgreSQL.FieldName": "FieldName",
+  "meta.Sinks.PostgreSQL.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
+  "meta.Sinks.PostgreSQL.FieldType": "FieldType",
+  "meta.Sinks.PostgreSQL.IsMetaField": "IsMetaField",
+  "meta.Sinks.PostgreSQL.FieldFormat": "FieldFormat",
+  "meta.Sinks.PostgreSQL.FieldDescription": "FieldDescription",
+  "meta.Sinks.SQLServer.SchemaName": "SchemaName",
+  "meta.Sinks.SQLServer.AllMigration": "AllMigration",
+  "meta.Sinks.SQLServer.ServerTimezone": "ServerTimezone",
+  "meta.Sinks.SQLServer.TableName": "TableName",
+  "meta.Sinks.SQLServer.PrimaryKey": "PrimaryKey",
+  "meta.Sinks.SQLServer.FieldName": "FieldName",
+  "meta.Sinks.SQLServer.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
+  "meta.Sinks.SQLServer.FieldType": "FieldType",
+  "meta.Sinks.SQLServer.IsMetaField": "IsMetaField",
+  "meta.Sinks.SQLServer.FieldFormat": "FieldFormat",
+  "meta.Sinks.SQLServer.FieldDescription": "FieldDescription",
+  "meta.Sinks.TDSQLPostgreSQL.SchemaName": "SchemaName",
+  "meta.Sinks.TDSQLPostgreSQL.TableName": "TableName",
+  "meta.Sinks.TDSQLPostgreSQL.PrimaryKey": "PrimaryKey",
+  "meta.Sinks.TDSQLPostgreSQL.FieldName": "FieldName",
+  "meta.Sinks.TDSQLPostgreSQL.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
+  "meta.Sinks.TDSQLPostgreSQL.FieldType": "FieldType",
+  "meta.Sinks.TDSQLPostgreSQL.IsMetaField": "IsMetaField",
+  "meta.Sinks.TDSQLPostgreSQL.FieldFormat": "FieldFormat",
+  "meta.Sinks.TDSQLPostgreSQL.FieldDescription": "FieldDescription",
+  "meta.Sinks.HBase.Namespace": "Namespace",
+  "meta.Sinks.HBase.TableName": "TableName",
+  "meta.Sinks.HBase.RowKey": "RowKey",
+  "meta.Sinks.HBase.ZkQuorum": "ZooKeeper address",
+  "meta.Sinks.HBase.ZkNodeParent": "ZooKeeper node parent",
+  "meta.Sinks.HBase.BufferFlushMaxSize": "Buffer flush max size",
+  "meta.Sinks.HBase.BufferFlushMaxRows": "Buffer flush max rows",
+  "meta.Sinks.HBase.BufferFlushInterval": "Buffer flush interval",
+  "meta.Sinks.HBase.FlushIntervalUnit": "S",
+  "meta.Sinks.HBase.FieldName": "FieldName",
+  "meta.Sinks.HBase.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
+  "meta.Sinks.HBase.FieldType": "FieldType",
+  "meta.Sinks.HBase.IsMetaField": "IsMetaField",
+  "meta.Sinks.HBase.FieldFormat": "FieldFormat",
+  "meta.Sinks.HBase.FieldDescription": "FieldDescription",
+  "meta.Group.Stripe/Second": "Stripe / S",
+  "meta.Group.MessageMiddleware": "Middleware",
+  "meta.Group.AccessSize": "Access Size",
+  "meta.Group.GB/Day": "GB / Day",
+  "meta.Group.BusinessIntroduction": "Description",
+  "meta.Group.BusinessOwners": "Group Owners",
+  "meta.Group.SingleStripMaximumLength": "Single Max Length",
+  "meta.Group.thousand/day": "Ten Thousand / day",
+  "meta.Group.AccessPeakPerSecond": "PeakRecords",
+  "meta.Group.InlongGroupId": "Group ID",
+  "meta.Group.InlongGroupIdRules": "Only lowercase letters, numbers, minus, and underscores",
+  "meta.Group.InlongGroupName": "Group Name",
+  "meta.Group.NumberOfAccess": "Number of Access",
+  "meta.Group.BusinessOwnersExtra": "Group in charges, they can view, modify Group information",
+  "meta.Group.QueueModule": "Queue Module",
+  "meta.Group.Parallel": "Parallel",
+  "meta.Group.Serial": "Serial",
+  "meta.Group.PartitionNum": "Topic Part Nums",
+  "meta.Group.EnsembleSuffix": "Number of nodes",
+  "meta.Group.EnsembleExtra": "How many nodes are Topic saved to, up to 10 can be configured",
+  "meta.Group.WriteQuorumSuffix": "Number of copies",
+  "meta.Group.WriteQuorumExtra": "How many copies of each message are saved, up to 10 can be configured",
+  "meta.Group.AckQuorumSuffix": "Number of responses",
+  "meta.Group.AckQuorumExtra": "The number of ack required for a successful write request, up to 10 can be configured",
+  "meta.Group.RetentionTimeExtra": "The save time of the message in the ack state, the message will be deleted when this value is exceeded (up to 14 days)",
+  "meta.Group.TtlExtra": "The time-to-live time of the message, messages exceeding this value will be marked as ack (retained for up to 14 days)",
+  "meta.Group.RetentionSizeExtra": "Message capacity in ack state, messages exceeding this value will be deleted (-1 means never delete)",
+  "meta.Group.DataCopyTitle": "Data copy information",
+  "meta.Group.DataStoragePeriodTitle": "Data storage period information",
+  "meta.Stream.DataStreamID": "Inlong stream ID",
+  "meta.Stream.InlongStreamIdRules": "Only lowercase letters, numbers, minus, and underscores",
+  "meta.Stream.fileDelimiter": "Source data fileDelimiter",
+  "meta.Stream.Asterisk": "Asterisk(*)",
+  "meta.Stream.DataStreamName": "Stream name",
+  "meta.Stream.FieldName": "Field name",
+  "meta.Stream.FieldNameRule": "At the beginning of English letters, only English letters, numbers, and underscores",
+  "meta.Stream.Semicolon": "Semicolon(;)",
+  "meta.Stream.AutoConsumption": "Auto Consumption",
+  "meta.Stream.DataFlowDirection": "Stream direction",
+  "meta.Stream.DataType": "DataType",
+  "meta.Stream.DataTypeCsvHelp": "CSV: Any file separated by a specific delimiter",
+  "meta.Stream.Source": "Source",
+  "meta.Stream.FieldType": "FieldType",
+  "meta.Stream.FieldComment": "FieldComment",
+  "meta.Stream.DoubleQuotes": "Double quotes(\")",
+  "meta.Stream.DataEncoding": "Data encoding",
+  "meta.Stream.DataStreamOwners": "Owners",
+  "meta.Stream.DataStreamOwnerHelp": "Owners can view and modify data flow information",
+  "meta.Stream.Space": "Space",
+  "meta.Stream.Comma": "Comma(,)",
+  "meta.Stream.DataFlowIntroduction": "Description",
+  "meta.Stream.SourceDataField": "Source data field",
+  "meta.Stream.VerticalLine": "Vertical line (|)",
+  "meta.Stream.File": "File",
+  "meta.Stream.Autonomous": "Auto Push",
+  "meta.Consumption.Owner": "Consumption",
+  "meta.Consumption.ConsumerGroupName": "Consumer group name",
+  "meta.Consumption.ConsumerGroupNameRules": "Only lowercase letters, numbers, minus, and underscores",
+  "meta.Consumption.DataStreamIDsHelp": "Inlong stream IDs are divided by commas;",
+  "meta.Consumption.ConsumerDataStreamID": "Consumer data stream ID",
+  "meta.Consumption.ConsumerTargetBusinessID": "Consume Group ID",
+  "meta.Consumption.No": "No",
+  "meta.Consumption.filterEnabled": "FilterEnabled",
+  "meta.Consumption.MasterAddress": "Master address",
+  "meta.Consumption.Yes": "Yes",
+  "meta.Consumption.OwnersExtra": "Consumption in charges, they can view, modify consumption information",
   "components.EditableTable.NewLine": "New line",
   "components.FormGenerator.plugins.PleaseChoose": "Please select",
   "components.FormGenerator.plugins.PleaseInput": "Please input",
diff --git a/inlong-dashboard/src/components/ConsumeHelper/FieldsConfig/basicFields.tsx b/inlong-dashboard/src/meta/consumption/index.tsx
similarity index 75%
rename from inlong-dashboard/src/components/ConsumeHelper/FieldsConfig/basicFields.tsx
rename to inlong-dashboard/src/meta/consumption/index.tsx
index 316c8cf7d..445ca232d 100644
--- a/inlong-dashboard/src/components/ConsumeHelper/FieldsConfig/basicFields.tsx
+++ b/inlong-dashboard/src/meta/consumption/index.tsx
@@ -22,7 +22,6 @@ import { FormItemProps } from '@/components/FormGenerator';
 import { pickObjectArray } from '@/utils';
 import StaffSelect from '@/components/StaffSelect';
 import i18n from '@/i18n';
-import BusinessSelect from '../BusinessSelect';
 
 export default (
   names: (string | FormItemProps)[],
@@ -31,26 +30,24 @@ export default (
   const fields: FormItemProps[] = [
     {
       type: 'input',
-      label: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.ConsumerGroupName'),
+      label: i18n.t('meta.Consumption.ConsumerGroupName'),
       name: 'consumerGroup',
       initialValue: currentValues.consumerGroup,
-      extra: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.ConsumerGroupNameRules'),
+      extra: i18n.t('meta.Consumption.ConsumerGroupNameRules'),
       rules: [
         { required: true },
         {
           pattern: /^[0-9a-z_\d]+$/,
-          message: i18n.t(
-            'components.ConsumeHelper.FieldsConfig.basicFields.ConsumerGroupNameRules',
-          ),
+          message: i18n.t('meta.Consumption.ConsumerGroupNameRules'),
         },
       ],
     },
     {
       type: <StaffSelect mode="multiple" currentUserClosable={false} />,
-      label: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.Consumption'),
+      label: i18n.t('meta.Consumption.Owner'),
       name: 'inCharges',
       initialValue: currentValues.inCharges,
-      extra: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.OwnersExtra'),
+      extra: i18n.t('meta.Consumption.OwnersExtra'),
       rules: [
         {
           required: true,
@@ -58,17 +55,39 @@ export default (
       ],
     },
     {
-      type: BusinessSelect,
-      label: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.ConsumerTargetBusinessID'),
+      type: 'select',
+      label: i18n.t('meta.Consumption.ConsumerTargetBusinessID'),
       name: 'inlongGroupId',
       extraNames: ['mqType'],
       initialValue: currentValues.inlongGroupId,
       rules: [{ required: true }],
       props: {
-        style: { width: 500 },
-        onChange: (inlongGroupId, record) => ({
+        showSearch: true,
+        filterOption: false,
+        options: {
+          requestTrigger: ['onOpen', 'onSearch'],
+          requestService: keyword => ({
+            url: '/group/list',
+            method: 'POST',
+            data: {
+              keyword,
+              pageNum: 1,
+              pageSize: 20,
+              status: 130,
+            },
+          }),
+          requestParams: {
+            formatResult: result =>
+              result?.list?.map(item => ({
+                ...item,
+                label: `${item.inlongGroupId} (${item.mqType})`,
+                value: item.inlongGroupId,
+              })),
+          },
+        },
+        onChange: (value, option) => ({
           topic: undefined,
-          mqType: record.mqType,
+          mqType: option.mqType,
         }),
       },
     },
@@ -103,17 +122,17 @@ export default (
     },
     {
       type: 'radio',
-      label: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.filterEnabled'),
+      label: i18n.t('meta.Consumption.filterEnabled'),
       name: 'filterEnabled',
       initialValue: currentValues.filterEnabled ?? 0,
       props: {
         options: [
           {
-            label: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.Yes'),
+            label: i18n.t('meta.Consumption.Yes'),
             value: 1,
           },
           {
-            label: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.No'),
+            label: i18n.t('meta.Consumption.No'),
             value: 0,
           },
         ],
@@ -123,10 +142,10 @@ export default (
     },
     {
       type: 'input',
-      label: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.ConsumerDataStreamID'),
+      label: i18n.t('meta.Consumption.ConsumerDataStreamID'),
       name: 'inlongStreamId',
       initialValue: currentValues.inlongStreamId,
-      extra: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.DataStreamIDsHelp'),
+      extra: i18n.t('meta.Consumption.DataStreamIDsHelp'),
       rules: [{ required: true }],
       style:
         currentValues.mqType === 'PULSAR'
@@ -138,7 +157,7 @@ export default (
     },
     {
       type: 'text',
-      label: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.MasterAddress'),
+      label: i18n.t('meta.Consumption.MasterAddress'),
       name: 'masterUrl',
       initialValue: currentValues.masterUrl,
     },
@@ -151,11 +170,11 @@ export default (
       props: {
         options: [
           {
-            label: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.Yes'),
+            label: i18n.t('meta.Consumption.Yes'),
             value: 1,
           },
           {
-            label: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.No'),
+            label: i18n.t('meta.Consumption.No'),
             value: 0,
           },
         ],
@@ -179,11 +198,11 @@ export default (
       props: {
         options: [
           {
-            label: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.Yes'),
+            label: i18n.t('meta.Consumption.Yes'),
             value: 1,
           },
           {
-            label: i18n.t('components.ConsumeHelper.FieldsConfig.basicFields.No'),
+            label: i18n.t('meta.Consumption.No'),
             value: 0,
           },
         ],
diff --git a/inlong-dashboard/src/components/AccessHelper/FieldsConfig/businessFields.tsx b/inlong-dashboard/src/meta/group/index.tsx
similarity index 77%
rename from inlong-dashboard/src/components/AccessHelper/FieldsConfig/businessFields.tsx
rename to inlong-dashboard/src/meta/group/index.tsx
index c27857009..2fb775b5c 100644
--- a/inlong-dashboard/src/components/AccessHelper/FieldsConfig/businessFields.tsx
+++ b/inlong-dashboard/src/meta/group/index.tsx
@@ -18,7 +18,7 @@
  */
 
 import React from 'react';
-import StaffSelect from '../../StaffSelect';
+import StaffSelect from '@/components/StaffSelect';
 import { FormItemProps } from '@/components/FormGenerator';
 import { pickObjectArray } from '@/utils';
 import i18n from '@/i18n';
@@ -30,7 +30,7 @@ export default (
   const fields: FormItemProps[] = [
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.FieldsConfig.businessFields.InlongGroupId'),
+      label: i18n.t('meta.Group.InlongGroupId'),
       name: 'inlongGroupId',
       props: {
         maxLength: 32,
@@ -39,7 +39,7 @@ export default (
         { required: true },
         {
           pattern: /^[a-z_\-\d]+$/,
-          message: i18n.t('components.AccessHelper.FieldsConfig.businessFields.InlongGroupIdRules'),
+          message: i18n.t('meta.Group.InlongGroupIdRules'),
         },
       ],
       initialValue: currentValues.inlongGroupId,
@@ -52,7 +52,7 @@ export default (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.FieldsConfig.businessFields.InlongGroupName'),
+      label: i18n.t('meta.Group.InlongGroupName'),
       name: 'name',
       props: {
         maxLength: 32,
@@ -61,7 +61,7 @@ export default (
     },
     {
       type: <StaffSelect mode="multiple" currentUserClosable={false} />,
-      label: i18n.t('components.AccessHelper.FieldsConfig.businessFields.BusinessOwners'),
+      label: i18n.t('meta.Group.BusinessOwners'),
       name: 'inCharges',
       initialValue: currentValues.inCharges,
       rules: [
@@ -69,11 +69,11 @@ export default (
           required: true,
         },
       ],
-      extra: i18n.t('components.AccessHelper.FieldsConfig.businessFields.BusinessOwnersExtra'),
+      extra: i18n.t('meta.Group.BusinessOwnersExtra'),
     },
     {
       type: 'textarea',
-      label: i18n.t('components.AccessHelper.FieldsConfig.businessFields.BusinessIntroduction'),
+      label: i18n.t('meta.Group.BusinessIntroduction'),
       name: 'description',
       props: {
         showCount: true,
@@ -83,7 +83,7 @@ export default (
     },
     {
       type: 'radio',
-      label: i18n.t('components.AccessHelper.FieldsConfig.businessFields.MessageMiddleware'),
+      label: i18n.t('meta.Group.MessageMiddleware'),
       name: 'mqType',
       initialValue: currentValues.mqType ?? 'TUBEMQ',
       rules: [{ required: true }],
@@ -102,18 +102,18 @@ export default (
     },
     {
       type: 'radio',
-      label: i18n.t('components.AccessHelper.FieldsConfig.businessFields.QueueModule'),
+      label: i18n.t('meta.Group.QueueModule'),
       name: 'queueModule',
       initialValue: currentValues.queueModule ?? 'SERIAL',
       rules: [{ required: true }],
       props: {
         options: [
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.businessFields.Parallel'),
+            label: i18n.t('meta.Group.Parallel'),
             value: 'PARALLEL',
           },
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.businessFields.Serial'),
+            label: i18n.t('meta.Group.Serial'),
             value: 'SERIAL',
           },
         ],
@@ -122,7 +122,7 @@ export default (
     },
     {
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.FieldsConfig.businessFields.PartitionNum'),
+      label: i18n.t('meta.Group.PartitionNum'),
       name: 'partitionNum',
       initialValue: currentValues.partitionNum ?? 3,
       rules: [{ required: true }],
@@ -135,11 +135,11 @@ export default (
     },
     {
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.FieldsConfig.businessFields.NumberOfAccess'),
+      label: i18n.t('meta.Group.NumberOfAccess'),
       name: 'dailyRecords',
       initialValue: currentValues.dailyRecords,
       rules: [{ required: true }],
-      suffix: i18n.t('components.AccessHelper.FieldsConfig.businessFields.thousand/day'),
+      suffix: i18n.t('meta.Group.thousand/day'),
       props: {
         min: 1,
         precision: 0,
@@ -148,11 +148,11 @@ export default (
     },
     {
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.FieldsConfig.businessFields.AccessSize'),
+      label: i18n.t('meta.Group.AccessSize'),
       name: 'dailyStorage',
       initialValue: currentValues.dailyStorage,
       rules: [{ required: true }],
-      suffix: i18n.t('components.AccessHelper.FieldsConfig.businessFields.GB/Day'),
+      suffix: i18n.t('meta.Group.GB/Day'),
       props: {
         min: 1,
         precision: 0,
@@ -161,11 +161,11 @@ export default (
     },
     {
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.FieldsConfig.businessFields.AccessPeakPerSecond'),
+      label: i18n.t('meta.Group.AccessPeakPerSecond'),
       name: 'peakRecords',
       initialValue: currentValues.peakRecords,
       rules: [{ required: true }],
-      suffix: i18n.t('components.AccessHelper.FieldsConfig.businessFields.Stripe/Second'),
+      suffix: i18n.t('meta.Group.Stripe/Second'),
       props: {
         min: 1,
         precision: 0,
@@ -174,7 +174,7 @@ export default (
     },
     {
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.FieldsConfig.businessFields.SingleStripMaximumLength'),
+      label: i18n.t('meta.Group.SingleStripMaximumLength'),
       name: 'maxLength',
       initialValue: currentValues.maxLength,
       rules: [{ required: true }],
@@ -190,8 +190,8 @@ export default (
       label: 'ensemble',
       name: 'ensemble',
       initialValue: currentValues?.ensemble ?? 3,
-      suffix: i18n.t('components.AccessHelper.FieldsConfig.businessFields.EnsembleSuffix'),
-      extra: i18n.t('components.AccessHelper.FieldsConfig.businessFields.EnsembleExtra'),
+      suffix: i18n.t('meta.Group.EnsembleSuffix'),
+      extra: i18n.t('meta.Group.EnsembleExtra'),
       rules: [
         ({ getFieldValue }) => ({
           validator(_, val) {
@@ -218,8 +218,8 @@ export default (
       label: 'Write Quorum',
       name: 'writeQuorum',
       initialValue: currentValues?.writeQuorum ?? 3,
-      suffix: i18n.t('components.AccessHelper.FieldsConfig.businessFields.WriteQuorumSuffix'),
-      extra: i18n.t('components.AccessHelper.FieldsConfig.businessFields.WriteQuorumExtra'),
+      suffix: i18n.t('meta.Group.WriteQuorumSuffix'),
+      extra: i18n.t('meta.Group.WriteQuorumExtra'),
       props: {
         min: 1,
         max: 10,
@@ -232,8 +232,8 @@ export default (
       label: 'ACK Quorum',
       name: 'ackQuorum',
       initialValue: currentValues?.ackQuorum ?? 2,
-      suffix: i18n.t('components.AccessHelper.FieldsConfig.businessFields.AckQuorumSuffix'),
-      extra: i18n.t('components.AccessHelper.FieldsConfig.businessFields.AckQuorumExtra'),
+      suffix: i18n.t('meta.Group.AckQuorumSuffix'),
+      extra: i18n.t('meta.Group.AckQuorumExtra'),
       props: {
         min: 1,
         max: 10,
@@ -275,7 +275,7 @@ export default (
           ],
         },
       },
-      extra: i18n.t('components.AccessHelper.FieldsConfig.businessFields.TtlExtra'),
+      extra: i18n.t('meta.Group.TtlExtra'),
       props: {
         min: 1,
         precision: 0,
@@ -324,7 +324,7 @@ export default (
           ],
         },
       },
-      extra: i18n.t('components.AccessHelper.FieldsConfig.businessFields.RetentionTimeExtra'),
+      extra: i18n.t('meta.Group.RetentionTimeExtra'),
       props: {
         min: -1,
         precision: 0,
@@ -357,7 +357,7 @@ export default (
           ],
         },
       },
-      extra: i18n.t('components.AccessHelper.FieldsConfig.businessFields.RetentionSizeExtra'),
+      extra: i18n.t('meta.Group.RetentionSizeExtra'),
       props: {
         min: -1,
         precision: 0,
diff --git a/inlong-dashboard/src/meta/sinks/clickhouse.tsx b/inlong-dashboard/src/meta/sinks/clickhouse.tsx
index f71df3855..8941fa3bc 100644
--- a/inlong-dashboard/src/meta/sinks/clickhouse.tsx
+++ b/inlong-dashboard/src/meta/sinks/clickhouse.tsx
@@ -52,7 +52,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'dbName',
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.DbName'),
+      label: i18n.t('meta.Sinks.Clickhouse.DbName'),
       rules: [{ required: true }],
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
@@ -62,7 +62,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'tableName',
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.TableName'),
+      label: i18n.t('meta.Sinks.Clickhouse.TableName'),
       rules: [{ required: true }],
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
@@ -72,10 +72,10 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'enableCreateResource',
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResource'),
+      label: i18n.t('meta.Sinks.EnableCreateResource'),
       rules: [{ required: true }],
       initialValue: 1,
-      tooltip: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResourceHelp'),
+      tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
         options: [
@@ -93,7 +93,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'username',
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Username'),
+      label: i18n.t('meta.Sinks.Username'),
       rules: [{ required: true }],
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
@@ -103,7 +103,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'password',
       type: 'password',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Password'),
+      label: i18n.t('meta.Sinks.Password'),
       rules: [{ required: true }],
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
@@ -126,52 +126,52 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'flushInterval',
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.FlushInterval'),
+      label: i18n.t('meta.Sinks.Clickhouse.FlushInterval'),
       initialValue: 1,
       props: {
         min: 1,
         disabled: isEdit && [110, 130].includes(currentValues?.status),
       },
       rules: [{ required: true }],
-      suffix: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.FlushIntervalUnit'),
+      suffix: i18n.t('meta.Sinks.Clickhouse.FlushIntervalUnit'),
     },
     {
       name: 'flushRecord',
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.FlushRecord'),
+      label: i18n.t('meta.Sinks.Clickhouse.FlushRecord'),
       initialValue: 1000,
       props: {
         min: 1,
         disabled: isEdit && [110, 130].includes(currentValues?.status),
       },
       rules: [{ required: true }],
-      suffix: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.FlushRecordUnit'),
+      suffix: i18n.t('meta.Sinks.Clickhouse.FlushRecordUnit'),
     },
     {
       name: 'retryTime',
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.RetryTimes'),
+      label: i18n.t('meta.Sinks.Clickhouse.RetryTimes'),
       initialValue: 3,
       props: {
         min: 1,
         disabled: isEdit && [110, 130].includes(currentValues?.status),
       },
       rules: [{ required: true }],
-      suffix: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.RetryTimesUnit'),
+      suffix: i18n.t('meta.Sinks.Clickhouse.RetryTimesUnit'),
     },
     {
       name: 'isDistributed',
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.IsDistributed'),
+      label: i18n.t('meta.Sinks.Clickhouse.IsDistributed'),
       initialValue: 0,
       props: {
         options: [
           {
-            label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.Yes'),
+            label: i18n.t('meta.Sinks.Clickhouse.Yes'),
             value: 1,
           },
           {
-            label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.No'),
+            label: i18n.t('meta.Sinks.Clickhouse.No'),
             value: 0,
           },
         ],
@@ -182,7 +182,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'partitionStrategy',
       type: 'select',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.PartitionStrategy'),
+      label: i18n.t('meta.Sinks.Clickhouse.PartitionStrategy'),
       initialValue: 'BALANCE',
       rules: [{ required: true }],
       props: {
@@ -207,7 +207,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'partitionFields',
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.PartitionFields'),
+      label: i18n.t('meta.Sinks.Clickhouse.PartitionFields'),
       rules: [{ required: true }],
       visible: values => values.isDistributed && values.partitionStrategy === 'HASH',
       props: {
@@ -217,7 +217,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'engine',
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.Engine'),
+      label: i18n.t('meta.Sinks.Clickhouse.Engine'),
       initialValue: 'Log',
       rules: [{ required: true }],
       props: {
@@ -227,7 +227,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'orderBy',
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.OrderBy'),
+      label: i18n.t('meta.Sinks.Clickhouse.OrderBy'),
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
       },
@@ -235,7 +235,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'partitionBy',
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.PartitionBy'),
+      label: i18n.t('meta.Sinks.Clickhouse.PartitionBy'),
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
       },
@@ -243,7 +243,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'primaryKey',
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.PrimaryKey'),
+      label: i18n.t('meta.Sinks.Clickhouse.PrimaryKey'),
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
       },
@@ -268,13 +268,13 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
   return [
     ...sourceFields,
     {
-      title: `ClickHouse${i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.FieldName')}`,
+      title: `ClickHouse${i18n.t('meta.Sinks.Clickhouse.FieldName')}`,
       dataIndex: 'fieldName',
       rules: [
         { required: true },
         {
           pattern: /^[a-zA-Z][a-zA-Z0-9_]*$/,
-          message: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.FieldNameRule'),
+          message: i18n.t('meta.Sinks.Clickhouse.FieldNameRule'),
         },
       ],
       props: (text, record, idx, isNew) => ({
@@ -282,7 +282,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: `ClickHouse${i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.FieldType')}`,
+      title: `ClickHouse${i18n.t('meta.Sinks.Clickhouse.FieldType')}`,
       dataIndex: 'fieldType',
       initialValue: clickhouseTargetTypes[0].value,
       type: 'select',
@@ -315,23 +315,21 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
         ['DEFAULT', 'EPHEMERAL', 'MATERIALIZED', 'ALIAS'].includes(record.defaultType as string),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.CompressionCode'),
+      title: i18n.t('meta.Sinks.Clickhouse.CompressionCode'),
       dataIndex: 'compressionCode',
       props: (text, record, idx, isNew) => ({
         disabled: [110, 130].includes(currentValues?.status as number) && !isNew,
       }),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Clickhouse.TtlExpr'),
+      title: i18n.t('meta.Sinks.Clickhouse.TtlExpr'),
       dataIndex: 'ttlExpr',
       props: (text, record, idx, isNew) => ({
         disabled: [110, 130].includes(currentValues?.status as number) && !isNew,
       }),
     },
     {
-      title: `ClickHouse${i18n.t(
-        'components.AccessHelper.StorageMetaData.Clickhouse.FieldDescription',
-      )}`,
+      title: `ClickHouse${i18n.t('meta.Sinks.Clickhouse.FieldDescription')}`,
       dataIndex: 'fieldComment',
       props: (text, record, idx, isNew) => ({
         disabled: [110, 130].includes(currentValues?.status as number) && !isNew,
diff --git a/inlong-dashboard/src/meta/sinks/common/sourceFields.ts b/inlong-dashboard/src/meta/sinks/common/sourceFields.ts
index f72bba8b0..0d0267a9e 100644
--- a/inlong-dashboard/src/meta/sinks/common/sourceFields.ts
+++ b/inlong-dashboard/src/meta/sinks/common/sourceFields.ts
@@ -29,14 +29,14 @@ export const fieldTypes = ['int', 'long', 'float', 'double', 'string', 'date', '
 
 export const sourceFields: ColumnsItemProps[] = [
   {
-    title: i18n.t('components.AccessHelper.StorageMetaData.SourceFieldName'),
+    title: i18n.t('meta.Sinks.SourceFieldName'),
     dataIndex: 'sourceFieldName',
     initialValue: '',
     rules: [
       { required: true },
       {
         pattern: /^[a-zA-Z][a-zA-Z0-9_]*$/,
-        message: i18n.t('components.AccessHelper.StorageMetaData.SourceFieldNameRule'),
+        message: i18n.t('meta.Sinks.SourceFieldNameRule'),
       },
     ],
     props: (text, record, idx, isNew) => ({
@@ -44,7 +44,7 @@ export const sourceFields: ColumnsItemProps[] = [
     }),
   },
   {
-    title: i18n.t('components.AccessHelper.StorageMetaData.SourceFieldType'),
+    title: i18n.t('meta.Sinks.SourceFieldType'),
     dataIndex: 'sourceFieldType',
     initialValue: fieldTypes[0].value,
     type: 'select',
diff --git a/inlong-dashboard/src/meta/sinks/es.tsx b/inlong-dashboard/src/meta/sinks/es.tsx
index e2c90b133..4e8c4baa8 100644
--- a/inlong-dashboard/src/meta/sinks/es.tsx
+++ b/inlong-dashboard/src/meta/sinks/es.tsx
@@ -54,7 +54,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'indexName',
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Es.IndexName'),
+      label: i18n.t('meta.Sinks.Es.IndexName'),
       rules: [{ required: true }],
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
@@ -64,10 +64,10 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'enableCreateResource',
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResource'),
+      label: i18n.t('meta.Sinks.EnableCreateResource'),
       rules: [{ required: true }],
       initialValue: 1,
-      tooltip: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResourceHelp'),
+      tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
         options: [
@@ -85,7 +85,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'username',
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Username'),
+      label: i18n.t('meta.Sinks.Username'),
       rules: [{ required: true }],
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
@@ -95,7 +95,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'password',
       type: 'password',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Password'),
+      label: i18n.t('meta.Sinks.Password'),
       rules: [{ required: true }],
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
@@ -106,7 +106,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Es.Host'),
+      label: i18n.t('meta.Sinks.Es.Host'),
       name: 'host',
       rules: [{ required: true }],
       props: {
@@ -116,7 +116,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'port',
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Es.Port'),
+      label: i18n.t('meta.Sinks.Es.Port'),
       initialValue: 9200,
       props: {
         min: 1,
@@ -128,38 +128,38 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'flushInterval',
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Es.FlushInterval'),
+      label: i18n.t('meta.Sinks.Es.FlushInterval'),
       initialValue: 1,
       props: {
         min: 1,
         disabled: isEdit && [110, 130].includes(currentValues?.status),
       },
       rules: [{ required: true }],
-      suffix: i18n.t('components.AccessHelper.StorageMetaData.Es.FlushIntervalUnit'),
+      suffix: i18n.t('meta.Sinks.Es.FlushIntervalUnit'),
     },
     {
       name: 'flushRecord',
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Es.FlushRecord'),
+      label: i18n.t('meta.Sinks.Es.FlushRecord'),
       initialValue: 1000,
       props: {
         min: 1,
         disabled: isEdit && [110, 130].includes(currentValues?.status),
       },
       rules: [{ required: true }],
-      suffix: i18n.t('components.AccessHelper.StorageMetaData.Es.FlushRecordUnit'),
+      suffix: i18n.t('meta.Sinks.Es.FlushRecordUnit'),
     },
     {
       name: 'retryTime',
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Es.RetryTimes'),
+      label: i18n.t('meta.Sinks.Es.RetryTimes'),
       initialValue: 3,
       props: {
         min: 1,
         disabled: isEdit && [110, 130].includes(currentValues?.status),
       },
       rules: [{ required: true }],
-      suffix: i18n.t('components.AccessHelper.StorageMetaData.Es.RetryTimesUnit'),
+      suffix: i18n.t('meta.Sinks.Es.RetryTimesUnit'),
     },
     {
       name: 'sinkFieldList',
@@ -181,13 +181,13 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
   return [
     ...sourceFields,
     {
-      title: `ES ${i18n.t('components.AccessHelper.StorageMetaData.Es.FieldName')}`,
+      title: `ES ${i18n.t('meta.Sinks.Es.FieldName')}`,
       dataIndex: 'fieldName',
       rules: [
         { required: true },
         {
           pattern: /^[a-zA-Z][a-zA-Z0-9_]*$/,
-          message: i18n.t('components.AccessHelper.StorageMetaData.Es.FieldNameRule'),
+          message: i18n.t('meta.Sinks.Es.FieldNameRule'),
         },
       ],
       props: (text, record, idx, isNew) => ({
@@ -195,7 +195,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: `ES ${i18n.t('components.AccessHelper.StorageMetaData.Es.FieldType')}`,
+      title: `ES ${i18n.t('meta.Sinks.Es.FieldType')}`,
       dataIndex: 'fieldType',
       initialValue: esTypes[0].value,
       type: 'select',
@@ -223,7 +223,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       visible: (text, record) => record.fieldType === 'text',
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Es.DateFormat'),
+      title: i18n.t('meta.Sinks.Es.DateFormat'),
       dataIndex: 'format',
       props: (text, record, idx, isNew) => ({
         disabled: [110, 130].includes(currentValues?.status as number) && !isNew,
@@ -239,7 +239,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       visible: (text, record) => record.fieldType === 'scaled_float',
     },
     {
-      title: `ES ${i18n.t('components.AccessHelper.StorageMetaData.Es.FieldDescription')}`,
+      title: `ES ${i18n.t('meta.Sinks.Es.FieldDescription')}`,
       dataIndex: 'fieldComment',
       props: (text, record, idx, isNew) => ({
         disabled: [110, 130].includes(currentValues?.status as number) && !isNew,
diff --git a/inlong-dashboard/src/meta/sinks/greenplum.tsx b/inlong-dashboard/src/meta/sinks/greenplum.tsx
index bddc6ff79..e0f988a93 100644
--- a/inlong-dashboard/src/meta/sinks/greenplum.tsx
+++ b/inlong-dashboard/src/meta/sinks/greenplum.tsx
@@ -76,7 +76,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Greenplum.TableName'),
+      label: i18n.t('meta.Sinks.Greenplum.TableName'),
       name: 'tableName',
       rules: [{ required: true }],
       props: {
@@ -86,7 +86,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Greenplum.PrimaryKey'),
+      label: i18n.t('meta.Sinks.Greenplum.PrimaryKey'),
       name: 'primaryKey',
       rules: [{ required: true }],
       props: {
@@ -96,11 +96,11 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResource'),
+      label: i18n.t('meta.Sinks.EnableCreateResource'),
       name: 'enableCreateResource',
       rules: [{ required: true }],
       initialValue: 1,
-      tooltip: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResourceHelp'),
+      tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
         options: [
@@ -117,7 +117,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Username'),
+      label: i18n.t('meta.Sinks.Username'),
       name: 'username',
       rules: [{ required: true }],
       props: {
@@ -127,7 +127,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'password',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Password'),
+      label: i18n.t('meta.Sinks.Password'),
       name: 'password',
       rules: [{ required: true }],
       props: {
@@ -158,14 +158,14 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
   return [
     ...sourceFields,
     {
-      title: `GREENPLUM${i18n.t('components.AccessHelper.StorageMetaData.Greenplum.FieldName')}`,
+      title: `GREENPLUM${i18n.t('meta.Sinks.Greenplum.FieldName')}`,
       dataIndex: 'fieldName',
       initialValue: '',
       rules: [
         { required: true },
         {
           pattern: /^[a-z][0-9a-z_]*$/,
-          message: i18n.t('components.AccessHelper.StorageMetaData.Greenplum.FieldNameRule'),
+          message: i18n.t('meta.Sinks.Greenplum.FieldNameRule'),
         },
       ],
       props: (text, record, idx, isNew) => ({
@@ -173,7 +173,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: `GREENPLUM${i18n.t('components.AccessHelper.StorageMetaData.Greenplum.FieldType')}`,
+      title: `GREENPLUM${i18n.t('meta.Sinks.Greenplum.FieldType')}`,
       dataIndex: 'fieldType',
       initialValue: greenplumFieldTypes[0].value,
       type: 'select',
@@ -184,7 +184,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       rules: [{ required: true }],
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Greenplum.IsMetaField'),
+      title: i18n.t('meta.Sinks.Greenplum.IsMetaField'),
       dataIndex: 'isMetaField',
       initialValue: 0,
       type: 'select',
@@ -202,7 +202,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Greenplum.FieldFormat'),
+      title: i18n.t('meta.Sinks.Greenplum.FieldFormat'),
       dataIndex: 'fieldFormat',
       initialValue: 0,
       type: 'autocomplete',
@@ -216,7 +216,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
         ['BIGINT', 'DATE', 'TIMESTAMP'].includes(record.fieldType as string),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Greenplum.FieldDescription'),
+      title: i18n.t('meta.Sinks.Greenplum.FieldDescription'),
       dataIndex: 'fieldComment',
       initialValue: '',
     },
diff --git a/inlong-dashboard/src/meta/sinks/hbase.tsx b/inlong-dashboard/src/meta/sinks/hbase.tsx
index 04d09a7a1..6d46d2db0 100644
--- a/inlong-dashboard/src/meta/sinks/hbase.tsx
+++ b/inlong-dashboard/src/meta/sinks/hbase.tsx
@@ -50,7 +50,7 @@ const getForm: GetStorageFormFieldsType = (
   const fileds = [
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.HBase.Namespace'),
+      label: i18n.t('meta.Sinks.HBase.Namespace'),
       name: 'namespace',
       rules: [{ required: true }],
       props: {
@@ -60,7 +60,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.HBase.TableName'),
+      label: i18n.t('meta.Sinks.HBase.TableName'),
       name: 'tableName',
       rules: [{ required: true }],
       props: {
@@ -70,7 +70,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.HBase.RowKey'),
+      label: i18n.t('meta.Sinks.HBase.RowKey'),
       name: 'rowKey',
       rules: [{ required: true }],
       props: {
@@ -80,7 +80,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.HBase.ZkQuorum'),
+      label: i18n.t('meta.Sinks.HBase.ZkQuorum'),
       name: 'zkQuorum',
       rules: [{ required: true }],
       props: {
@@ -91,7 +91,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.HBase.ZkNodeParent'),
+      label: i18n.t('meta.Sinks.HBase.ZkNodeParent'),
       name: 'zkNodeParent',
       rules: [{ required: true }],
       props: {
@@ -102,7 +102,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.StorageMetaData.HBase.BufferFlushMaxSize'),
+      label: i18n.t('meta.Sinks.HBase.BufferFlushMaxSize'),
       name: 'bufferFlushMaxSize',
       initialValue: 2,
       rules: [{ required: true }],
@@ -115,7 +115,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.StorageMetaData.HBase.BufferFlushMaxRows'),
+      label: i18n.t('meta.Sinks.HBase.BufferFlushMaxRows'),
       name: 'bufferFlushMaxRows',
       initialValue: 1000,
       rules: [{ required: true }],
@@ -127,7 +127,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.StorageMetaData.HBase.BufferFlushInterval'),
+      label: i18n.t('meta.Sinks.HBase.BufferFlushInterval'),
       name: 'bufferFlushInterval',
       initialValue: 1,
       rules: [{ required: true }],
@@ -135,7 +135,7 @@ const getForm: GetStorageFormFieldsType = (
         min: 1,
         disabled: isEdit && [110, 130].includes(currentValues?.status),
       },
-      suffix: i18n.t('components.AccessHelper.StorageMetaData.HBase.FlushIntervalUnit'),
+      suffix: i18n.t('meta.Sinks.HBase.FlushIntervalUnit'),
       _inTable: true,
     },
     {
@@ -159,14 +159,14 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
   return [
     ...sourceFields,
     {
-      title: `HBASE${i18n.t('components.AccessHelper.StorageMetaData.HBase.FieldName')}`,
+      title: `HBASE${i18n.t('meta.Sinks.HBase.FieldName')}`,
       dataIndex: 'fieldName',
       initialValue: '',
       rules: [
         { required: true },
         {
           pattern: /^[a-z][0-9a-z_]*$/,
-          message: i18n.t('components.AccessHelper.StorageMetaData.HBase.FieldNameRule'),
+          message: i18n.t('meta.Sinks.HBase.FieldNameRule'),
         },
       ],
       props: (text, record, idx, isNew) => ({
@@ -174,7 +174,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: `HBASE${i18n.t('components.AccessHelper.StorageMetaData.HBase.FieldType')}`,
+      title: `HBASE${i18n.t('meta.Sinks.HBase.FieldType')}`,
       dataIndex: 'fieldType',
       initialValue: hbaseFieldTypes[0].value,
       type: 'select',
diff --git a/inlong-dashboard/src/meta/sinks/hive.tsx b/inlong-dashboard/src/meta/sinks/hive.tsx
index 3f3e827f2..d8806ba8a 100644
--- a/inlong-dashboard/src/meta/sinks/hive.tsx
+++ b/inlong-dashboard/src/meta/sinks/hive.tsx
@@ -61,7 +61,7 @@ const getForm: GetStorageFormFieldsType = (
   const fileds = [
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Hive.DbName'),
+      label: i18n.t('meta.Sinks.Hive.DbName'),
       name: 'dbName',
       rules: [{ required: true }],
       props: {
@@ -71,7 +71,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Hive.TableName'),
+      label: i18n.t('meta.Sinks.Hive.TableName'),
       name: 'tableName',
       rules: [{ required: true }],
       props: {
@@ -81,11 +81,11 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResource'),
+      label: i18n.t('meta.Sinks.EnableCreateResource'),
       name: 'enableCreateResource',
       rules: [{ required: true }],
       initialValue: 1,
-      tooltip: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResourceHelp'),
+      tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
         options: [
@@ -102,7 +102,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Username'),
+      label: i18n.t('meta.Sinks.Username'),
       name: 'username',
       rules: [{ required: true }],
       props: {
@@ -112,7 +112,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'password',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Password'),
+      label: i18n.t('meta.Sinks.Password'),
       name: 'password',
       rules: [{ required: true }],
       props: {
@@ -143,23 +143,23 @@ const getForm: GetStorageFormFieldsType = (
             });
             res
               ? message.success(
-                  i18n.t('components.AccessHelper.StorageMetaData.Hive.ConnectionSucceeded'),
+                  i18n.t('meta.Sinks.Hive.ConnectionSucceeded'),
                 )
               : message.error(
-                  i18n.t('components.AccessHelper.StorageMetaData.Hive.ConnectionFailed'),
+                  i18n.t('meta.Sinks.Hive.ConnectionFailed'),
                 );
           }}
         >
-          {i18n.t('components.AccessHelper.StorageMetaData.Hive.ConnectionTest')}
+          {i18n.t('meta.Sinks.Hive.ConnectionTest')}
         </Button>
       ),*/
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Hive.DataPath'),
+      label: i18n.t('meta.Sinks.Hive.DataPath'),
       name: 'dataPath',
       rules: [{ required: true }],
-      tooltip: i18n.t('components.AccessHelper.StorageMetaData.DataPathHelp'),
+      tooltip: i18n.t('meta.Sinks.DataPathHelp'),
       props: {
         placeholder: 'hdfs://127.0.0.1:9000/user/hive/warehouse/default',
         disabled: isEdit && [110, 130].includes(currentValues?.status),
@@ -167,10 +167,10 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Hive.ConfDir'),
+      label: i18n.t('meta.Sinks.Hive.ConfDir'),
       name: 'hiveConfDir',
       rules: [{ required: true }],
-      tooltip: i18n.t('components.AccessHelper.StorageMetaData.Hive.ConfDirHelp'),
+      tooltip: i18n.t('meta.Sinks.Hive.ConfDirHelp'),
       props: {
         placeholder: '/usr/hive/conf',
         disabled: isEdit && [110, 130].includes(currentValues?.status),
@@ -179,7 +179,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'fileFormat',
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Hive.FileFormat'),
+      label: i18n.t('meta.Sinks.Hive.FileFormat'),
       initialValue: 'TextFile',
       rules: [{ required: true }],
       props: {
@@ -215,7 +215,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'dataEncoding',
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Hive.DataEncoding'),
+      label: i18n.t('meta.Sinks.Hive.DataEncoding'),
       initialValue: 'UTF-8',
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
@@ -235,34 +235,34 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'dataSeparator',
       type: 'select',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Hive.DataSeparator'),
+      label: i18n.t('meta.Sinks.Hive.DataSeparator'),
       initialValue: '124',
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
         dropdownMatchSelectWidth: false,
         options: [
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.VerticalLine'),
+            label: i18n.t('meta.Stream.VerticalLine'),
             value: '124',
           },
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.Comma'),
+            label: i18n.t('meta.Stream.Comma'),
             value: '44',
           },
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.DoubleQuotes'),
+            label: i18n.t('meta.Stream.DoubleQuotes'),
             value: '34',
           },
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.Asterisk'),
+            label: i18n.t('meta.Stream.Asterisk'),
             value: '42',
           },
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.Space'),
+            label: i18n.t('meta.Stream.Space'),
             value: '32',
           },
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.Semicolon'),
+            label: i18n.t('meta.Stream.Semicolon'),
             value: '59',
           },
         ],
@@ -295,20 +295,20 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       name: 'partitionFieldList',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Hive.PartitionFieldList'),
+      label: i18n.t('meta.Sinks.Hive.PartitionFieldList'),
       type: EditableTable,
-      tooltip: i18n.t('components.AccessHelper.StorageMetaData.Hive.PartitionFieldListHelp'),
+      tooltip: i18n.t('meta.Sinks.Hive.PartitionFieldListHelp'),
       props: {
         size: 'small',
         required: false,
         columns: [
           {
-            title: i18n.t('components.AccessHelper.StorageMetaData.Hive.FieldName'),
+            title: i18n.t('meta.Sinks.Hive.FieldName'),
             dataIndex: 'fieldName',
             rules: [{ required: true }],
           },
           {
-            title: i18n.t('components.AccessHelper.StorageMetaData.Hive.FieldType'),
+            title: i18n.t('meta.Sinks.Hive.FieldType'),
             dataIndex: 'fieldType',
             type: 'select',
             initialValue: 'string',
@@ -320,7 +320,7 @@ const getForm: GetStorageFormFieldsType = (
             },
           },
           {
-            title: i18n.t('components.AccessHelper.StorageMetaData.Hive.FieldFormat'),
+            title: i18n.t('meta.Sinks.Hive.FieldFormat'),
             dataIndex: 'fieldFormat',
             type: 'autocomplete',
             props: {
@@ -346,14 +346,14 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
   return [
     ...sourceFields,
     {
-      title: `HIVE${i18n.t('components.AccessHelper.StorageMetaData.Hive.FieldName')}`,
+      title: `HIVE${i18n.t('meta.Sinks.Hive.FieldName')}`,
       dataIndex: 'fieldName',
       initialValue: '',
       rules: [
         { required: true },
         {
           pattern: /^[a-z][0-9a-z_]*$/,
-          message: i18n.t('components.AccessHelper.StorageMetaData.Hive.FieldNameRule'),
+          message: i18n.t('meta.Sinks.Hive.FieldNameRule'),
         },
       ],
       props: (text, record, idx, isNew) => ({
@@ -361,7 +361,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: `HIVE${i18n.t('components.AccessHelper.StorageMetaData.Hive.FieldType')}`,
+      title: `HIVE${i18n.t('meta.Sinks.Hive.FieldType')}`,
       dataIndex: 'fieldType',
       initialValue: hiveFieldTypes[0].value,
       type: 'select',
@@ -372,7 +372,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       rules: [{ required: true }],
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Hive.IsMetaField'),
+      title: i18n.t('meta.Sinks.Hive.IsMetaField'),
       dataIndex: 'isMetaField',
       initialValue: 0,
       type: 'select',
@@ -390,7 +390,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Hive.FieldFormat'),
+      title: i18n.t('meta.Sinks.Hive.FieldFormat'),
       dataIndex: 'fieldFormat',
       initialValue: 0,
       type: 'autocomplete',
@@ -404,7 +404,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
         ['bigint', 'date', 'timestamp'].includes(record.fieldType as string),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Hive.FieldDescription'),
+      title: i18n.t('meta.Sinks.Hive.FieldDescription'),
       dataIndex: 'fieldComment',
       initialValue: '',
     },
diff --git a/inlong-dashboard/src/meta/sinks/iceberg.tsx b/inlong-dashboard/src/meta/sinks/iceberg.tsx
index 4694bfb31..a9259fdf9 100644
--- a/inlong-dashboard/src/meta/sinks/iceberg.tsx
+++ b/inlong-dashboard/src/meta/sinks/iceberg.tsx
@@ -116,7 +116,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'dbName',
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Iceberg.DbName'),
+      label: i18n.t('meta.Sinks.Iceberg.DbName'),
       rules: [{ required: true }],
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
@@ -126,7 +126,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'tableName',
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Iceberg.TableName'),
+      label: i18n.t('meta.Sinks.Iceberg.TableName'),
       rules: [{ required: true }],
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
@@ -135,11 +135,11 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResource'),
+      label: i18n.t('meta.Sinks.EnableCreateResource'),
       name: 'enableCreateResource',
       rules: [{ required: true }],
       initialValue: 1,
-      tooltip: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResourceHelp'),
+      tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
         options: [
@@ -175,20 +175,20 @@ const getForm: GetStorageFormFieldsType = (
             });
             res
               ? message.success(
-                  i18n.t('components.AccessHelper.StorageMetaData.Hive.ConnectionSucceeded'),
+                  i18n.t('meta.Sinks.Hive.ConnectionSucceeded'),
                 )
               : message.error(
-                  i18n.t('components.AccessHelper.StorageMetaData.Hive.ConnectionFailed'),
+                  i18n.t('meta.Sinks.Hive.ConnectionFailed'),
                 );
           }}
         >
-          {i18n.t('components.AccessHelper.StorageMetaData.Hive.ConnectionTest')}
+          {i18n.t('meta.Sinks.Hive.ConnectionTest')}
         </Button>
       ),*/
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Iceberg.Warehouse'),
+      label: i18n.t('meta.Sinks.Iceberg.Warehouse'),
       name: 'warehouse',
       rules: [{ required: true }],
       props: {
@@ -199,7 +199,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'fileFormat',
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Iceberg.FileFormat'),
+      label: i18n.t('meta.Sinks.Iceberg.FileFormat'),
       initialValue: 'Parquet',
       rules: [{ required: true }],
       props: {
@@ -222,7 +222,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       name: 'extList',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Iceberg.ExtList'),
+      label: i18n.t('meta.Sinks.Iceberg.ExtList'),
       type: EditableTable,
       props: {
         size: 'small',
@@ -250,7 +250,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'dataConsistency',
       type: 'select',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Iceberg.DataConsistency'),
+      label: i18n.t('meta.Sinks.Iceberg.DataConsistency'),
       initialValue: 'EXACTLY_ONCE',
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
@@ -287,14 +287,14 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
   return [
     ...sourceFields,
     {
-      title: `Iceberg ${i18n.t('components.AccessHelper.StorageMetaData.Iceberg.FieldName')}`,
+      title: `Iceberg ${i18n.t('meta.Sinks.Iceberg.FieldName')}`,
       width: 110,
       dataIndex: 'fieldName',
       rules: [
         { required: true },
         {
           pattern: /^[a-zA-Z_][a-zA-Z0-9_]*$/,
-          message: i18n.t('components.AccessHelper.StorageMetaData.Iceberg.FieldNameRule'),
+          message: i18n.t('meta.Sinks.Iceberg.FieldNameRule'),
         },
       ],
       props: (text, record, idx, isNew) => ({
@@ -302,7 +302,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: `Iceberg ${i18n.t('components.AccessHelper.StorageMetaData.Iceberg.FieldType')}`,
+      title: `Iceberg ${i18n.t('meta.Sinks.Iceberg.FieldType')}`,
       dataIndex: 'fieldType',
       width: 130,
       initialValue: icebergFieldTypes[0].value,
@@ -355,7 +355,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       visible: (text, record) => record.fieldType === 'decimal',
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Iceberg.PartitionStrategy'),
+      title: i18n.t('meta.Sinks.Iceberg.PartitionStrategy'),
       dataIndex: 'partitionStrategy',
       type: 'select',
       initialValue: 'None',
@@ -365,7 +365,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Iceberg.FieldDescription'),
+      title: i18n.t('meta.Sinks.Iceberg.FieldDescription'),
       dataIndex: 'fieldComment',
     },
   ];
diff --git a/inlong-dashboard/src/meta/sinks/index.ts b/inlong-dashboard/src/meta/sinks/index.ts
index 7bfc886a6..4e3998e6e 100644
--- a/inlong-dashboard/src/meta/sinks/index.ts
+++ b/inlong-dashboard/src/meta/sinks/index.ts
@@ -32,7 +32,7 @@ import { sqlServer } from './sqlServer';
 import { tdsqlPostgreSQL } from './tdsqlPostgreSql';
 import { hbase } from './hbase';
 
-export interface StoragesType {
+export interface SinkType {
   label: string;
   value: string;
   // Generate form configuration for single data
@@ -47,7 +47,7 @@ export interface StoragesType {
   toSubmitValues?: (values: unknown) => unknown;
 }
 
-export const Storages: StoragesType[] = [
+export const Sinks: SinkType[] = [
   {
     label: 'Hive',
     value: 'HIVE',
diff --git a/inlong-dashboard/src/meta/sinks/kafka.tsx b/inlong-dashboard/src/meta/sinks/kafka.tsx
index dc0b0e0f8..4d270fb57 100644
--- a/inlong-dashboard/src/meta/sinks/kafka.tsx
+++ b/inlong-dashboard/src/meta/sinks/kafka.tsx
@@ -30,7 +30,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'bootstrapServers',
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Kafka.Server'),
+      label: i18n.t('meta.Sinks.Kafka.Server'),
       rules: [{ required: true }],
       initialValue: '127.0.0.1:9092',
       props: {
@@ -51,7 +51,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'serializationType',
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Kafka.SerializationType'),
+      label: i18n.t('meta.Sinks.Kafka.SerializationType'),
       initialValue: 'JSON',
       rules: [{ required: true }],
       props: {
@@ -76,7 +76,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'partitionNum',
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Kafka.PartitionNum'),
+      label: i18n.t('meta.Sinks.Kafka.PartitionNum'),
       initialValue: 3,
       props: {
         min: 1,
@@ -88,7 +88,7 @@ const getForm: GetStorageFormFieldsType = (
     {
       name: 'autoOffsetReset',
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Kafka.AutoOffsetReset'),
+      label: i18n.t('meta.Sinks.Kafka.AutoOffsetReset'),
       initialValue: 'earliest',
       rules: [{ required: true }],
       props: {
diff --git a/inlong-dashboard/src/meta/sinks/mysql.tsx b/inlong-dashboard/src/meta/sinks/mysql.tsx
index 555e7420d..b04c19837 100644
--- a/inlong-dashboard/src/meta/sinks/mysql.tsx
+++ b/inlong-dashboard/src/meta/sinks/mysql.tsx
@@ -72,7 +72,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.MySQL.TableName'),
+      label: i18n.t('meta.Sinks.MySQL.TableName'),
       name: 'tableName',
       rules: [{ required: true }],
       props: {
@@ -82,7 +82,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Greenplum.PrimaryKey'),
+      label: i18n.t('meta.Sinks.Greenplum.PrimaryKey'),
       name: 'primaryKey',
       rules: [{ required: true }],
       props: {
@@ -92,11 +92,11 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResource'),
+      label: i18n.t('meta.Sinks.EnableCreateResource'),
       name: 'enableCreateResource',
       rules: [{ required: true }],
       initialValue: 1,
-      tooltip: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResourceHelp'),
+      tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
         options: [
@@ -113,7 +113,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Username'),
+      label: i18n.t('meta.Sinks.Username'),
       name: 'username',
       rules: [{ required: true }],
       props: {
@@ -123,7 +123,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'password',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Password'),
+      label: i18n.t('meta.Sinks.Password'),
       name: 'password',
       rules: [{ required: true }],
       props: {
@@ -154,14 +154,14 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
   return [
     ...sourceFields,
     {
-      title: `MYSQL${i18n.t('components.AccessHelper.StorageMetaData.MySQL.FieldName')}`,
+      title: `MYSQL${i18n.t('meta.Sinks.MySQL.FieldName')}`,
       dataIndex: 'fieldName',
       initialValue: '',
       rules: [
         { required: true },
         {
           pattern: /^[a-z][0-9a-z_]*$/,
-          message: i18n.t('components.AccessHelper.StorageMetaData.MySQL.FieldNameRule'),
+          message: i18n.t('meta.Sinks.MySQL.FieldNameRule'),
         },
       ],
       props: (text, record, idx, isNew) => ({
@@ -169,7 +169,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: `MYSQL${i18n.t('components.AccessHelper.StorageMetaData.MySQL.FieldType')}`,
+      title: `MYSQL${i18n.t('meta.Sinks.MySQL.FieldType')}`,
       dataIndex: 'fieldType',
       initialValue: mysqlFieldTypes[0].value,
       type: 'select',
@@ -180,7 +180,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       rules: [{ required: true }],
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.MySQL.IsMetaField'),
+      title: i18n.t('meta.Sinks.MySQL.IsMetaField'),
       dataIndex: 'isMetaField',
       initialValue: 0,
       type: 'select',
@@ -198,7 +198,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.MySQL.FieldFormat'),
+      title: i18n.t('meta.Sinks.MySQL.FieldFormat'),
       dataIndex: 'fieldFormat',
       initialValue: 0,
       type: 'autocomplete',
@@ -212,7 +212,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
         ['BIGINT', 'DATE', 'TIMESTAMP'].includes(record.fieldType as string),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.MySQL.FieldDescription'),
+      title: i18n.t('meta.Sinks.MySQL.FieldDescription'),
       dataIndex: 'fieldComment',
       initialValue: '',
     },
diff --git a/inlong-dashboard/src/meta/sinks/oracle.tsx b/inlong-dashboard/src/meta/sinks/oracle.tsx
index 727cf289a..e154e0178 100644
--- a/inlong-dashboard/src/meta/sinks/oracle.tsx
+++ b/inlong-dashboard/src/meta/sinks/oracle.tsx
@@ -71,7 +71,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Oracle.TableName'),
+      label: i18n.t('meta.Sinks.Oracle.TableName'),
       name: 'tableName',
       rules: [{ required: true }],
       props: {
@@ -81,7 +81,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Oracle.PrimaryKey'),
+      label: i18n.t('meta.Sinks.Oracle.PrimaryKey'),
       name: 'primaryKey',
       rules: [{ required: true }],
       props: {
@@ -91,11 +91,11 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResource'),
+      label: i18n.t('meta.Sinks.EnableCreateResource'),
       name: 'enableCreateResource',
       rules: [{ required: true }],
       initialValue: 1,
-      tooltip: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResourceHelp'),
+      tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
         options: [
@@ -112,7 +112,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Username'),
+      label: i18n.t('meta.Sinks.Username'),
       name: 'username',
       rules: [{ required: true }],
       props: {
@@ -122,7 +122,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'password',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Password'),
+      label: i18n.t('meta.Sinks.Password'),
       name: 'password',
       rules: [{ required: true }],
       props: {
@@ -153,14 +153,14 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
   return [
     ...sourceFields,
     {
-      title: `ORACLE${i18n.t('components.AccessHelper.StorageMetaData.Oracle.FieldName')}`,
+      title: `ORACLE${i18n.t('meta.Sinks.Oracle.FieldName')}`,
       dataIndex: 'fieldName',
       initialValue: '',
       rules: [
         { required: true },
         {
           pattern: /^[a-z][0-9a-z_]*$/,
-          message: i18n.t('components.AccessHelper.StorageMetaData.Oracle.FieldNameRule'),
+          message: i18n.t('meta.Sinks.Oracle.FieldNameRule'),
         },
       ],
       props: (text, record, idx, isNew) => ({
@@ -168,7 +168,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: `ORACLE${i18n.t('components.AccessHelper.StorageMetaData.Oracle.FieldType')}`,
+      title: `ORACLE${i18n.t('meta.Sinks.Oracle.FieldType')}`,
       dataIndex: 'fieldType',
       initialValue: oracleFieldTypes[0].value,
       type: 'select',
@@ -179,7 +179,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       rules: [{ required: true }],
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Oracle.IsMetaField'),
+      title: i18n.t('meta.Sinks.Oracle.IsMetaField'),
       initialValue: 0,
       dataIndex: 'isMetaField',
       type: 'select',
@@ -197,7 +197,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Oracle.FieldFormat'),
+      title: i18n.t('meta.Sinks.Oracle.FieldFormat'),
       dataIndex: 'fieldFormat',
       initialValue: '',
       type: 'autocomplete',
@@ -211,7 +211,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
         ['BIGINT', 'DATE', 'TIMESTAMP'].includes(record.fieldType as string),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.Oracle.FieldDescription'),
+      title: i18n.t('meta.Sinks.Oracle.FieldDescription'),
       dataIndex: 'fieldComment',
       initialValue: '',
     },
diff --git a/inlong-dashboard/src/meta/sinks/postgreSql.tsx b/inlong-dashboard/src/meta/sinks/postgreSql.tsx
index 079bb5e5c..b1d4edb19 100644
--- a/inlong-dashboard/src/meta/sinks/postgreSql.tsx
+++ b/inlong-dashboard/src/meta/sinks/postgreSql.tsx
@@ -75,7 +75,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.PostgreSQL.DbName'),
+      label: i18n.t('meta.Sinks.PostgreSQL.DbName'),
       name: 'dbName',
       rules: [{ required: true }],
       props: {
@@ -85,7 +85,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.PostgreSQL.TableName'),
+      label: i18n.t('meta.Sinks.PostgreSQL.TableName'),
       name: 'tableName',
       rules: [{ required: true }],
       props: {
@@ -95,7 +95,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.PostgreSQL.PrimaryKey'),
+      label: i18n.t('meta.Sinks.PostgreSQL.PrimaryKey'),
       name: 'primaryKey',
       rules: [{ required: true }],
       props: {
@@ -105,11 +105,11 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResource'),
+      label: i18n.t('meta.Sinks.EnableCreateResource'),
       name: 'enableCreateResource',
       rules: [{ required: true }],
       initialValue: 1,
-      tooltip: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResourceHelp'),
+      tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
         options: [
@@ -126,7 +126,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Username'),
+      label: i18n.t('meta.Sinks.Username'),
       name: 'username',
       rules: [{ required: true }],
       props: {
@@ -136,7 +136,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'password',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Password'),
+      label: i18n.t('meta.Sinks.Password'),
       name: 'password',
       rules: [{ required: true }],
       props: {
@@ -167,14 +167,14 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
   return [
     ...sourceFields,
     {
-      title: `POSTGRESQL${i18n.t('components.AccessHelper.StorageMetaData.PostgreSQL.FieldName')}`,
+      title: `POSTGRESQL${i18n.t('meta.Sinks.PostgreSQL.FieldName')}`,
       dataIndex: 'fieldName',
       initialValue: '',
       rules: [
         { required: true },
         {
           pattern: /^[a-z][0-9a-z_]*$/,
-          message: i18n.t('components.AccessHelper.StorageMetaData.PostgreSQL.FieldNameRule'),
+          message: i18n.t('meta.Sinks.PostgreSQL.FieldNameRule'),
         },
       ],
       props: (text, record, idx, isNew) => ({
@@ -182,7 +182,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: `POSTGRESQL${i18n.t('components.AccessHelper.StorageMetaData.PostgreSQL.FieldType')}`,
+      title: `POSTGRESQL${i18n.t('meta.Sinks.PostgreSQL.FieldType')}`,
       dataIndex: 'fieldType',
       initialValue: postgreSQLFieldTypes[0].value,
       type: 'select',
@@ -193,7 +193,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       rules: [{ required: true }],
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.PostgreSQL.IsMetaField'),
+      title: i18n.t('meta.Sinks.PostgreSQL.IsMetaField'),
       initialValue: 0,
       dataIndex: 'isMetaField',
       type: 'select',
@@ -211,7 +211,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.PostgreSQL.FieldFormat'),
+      title: i18n.t('meta.Sinks.PostgreSQL.FieldFormat'),
       dataIndex: 'fieldFormat',
       initialValue: '',
       type: 'autocomplete',
@@ -225,7 +225,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
         ['BIGINT', 'DATE', 'TIMESTAMP'].includes(record.fieldType as string),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.PostgreSQL.FieldDescription'),
+      title: i18n.t('meta.Sinks.PostgreSQL.FieldDescription'),
       dataIndex: 'fieldComment',
       initialValue: '',
     },
diff --git a/inlong-dashboard/src/meta/sinks/sqlServer.tsx b/inlong-dashboard/src/meta/sinks/sqlServer.tsx
index 1b367daf6..3af312547 100644
--- a/inlong-dashboard/src/meta/sinks/sqlServer.tsx
+++ b/inlong-dashboard/src/meta/sinks/sqlServer.tsx
@@ -77,7 +77,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.SQLServer.SchemaName'),
+      label: i18n.t('meta.Sinks.SQLServer.SchemaName'),
       name: 'schemaName',
       rules: [{ required: true }],
       props: {
@@ -87,7 +87,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.SQLServer.ServerTimezone'),
+      label: i18n.t('meta.Sinks.SQLServer.ServerTimezone'),
       name: 'serverTimezone',
       initialValue: 'UTC',
       rules: [{ required: true }],
@@ -98,7 +98,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.SQLServer.TableName'),
+      label: i18n.t('meta.Sinks.SQLServer.TableName'),
       name: 'tableName',
       rules: [{ required: true }],
       props: {
@@ -108,7 +108,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.SQLServer.PrimaryKey'),
+      label: i18n.t('meta.Sinks.SQLServer.PrimaryKey'),
       name: 'primaryKey',
       rules: [{ required: true }],
       props: {
@@ -118,11 +118,11 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResource'),
+      label: i18n.t('meta.Sinks.EnableCreateResource'),
       name: 'enableCreateResource',
       rules: [{ required: true }],
       initialValue: 1,
-      tooltip: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResourceHelp'),
+      tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
         options: [
@@ -139,7 +139,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.SQLServer.AllMigration'),
+      label: i18n.t('meta.Sinks.SQLServer.AllMigration'),
       name: 'allMigration',
       rules: [{ required: true }],
       initialValue: true,
@@ -159,7 +159,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Username'),
+      label: i18n.t('meta.Sinks.Username'),
       name: 'username',
       rules: [{ required: true }],
       props: {
@@ -169,7 +169,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'password',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Password'),
+      label: i18n.t('meta.Sinks.Password'),
       name: 'password',
       rules: [{ required: true }],
       props: {
@@ -200,14 +200,14 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
   return [
     ...sourceFields,
     {
-      title: `SQLSERVER${i18n.t('components.AccessHelper.StorageMetaData.SQLServer.FieldName')}`,
+      title: `SQLSERVER${i18n.t('meta.Sinks.SQLServer.FieldName')}`,
       dataIndex: 'fieldName',
       initialValue: '',
       rules: [
         { required: true },
         {
           pattern: /^[a-z][0-9a-z_]*$/,
-          message: i18n.t('components.AccessHelper.StorageMetaData.SQLServer.FieldNameRule'),
+          message: i18n.t('meta.Sinks.SQLServer.FieldNameRule'),
         },
       ],
       props: (text, record, idx, isNew) => ({
@@ -215,7 +215,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: `SQLSERVER${i18n.t('components.AccessHelper.StorageMetaData.SQLServer.FieldType')}`,
+      title: `SQLSERVER${i18n.t('meta.Sinks.SQLServer.FieldType')}`,
       dataIndex: 'fieldType',
       initialValue: sqlserverFieldTypes[0].value,
       type: 'select',
@@ -226,7 +226,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       rules: [{ required: true }],
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.SQLServer.IsMetaField'),
+      title: i18n.t('meta.Sinks.SQLServer.IsMetaField'),
       initialValue: 0,
       dataIndex: 'isMetaField',
       type: 'select',
@@ -244,7 +244,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.SQLServer.FieldFormat'),
+      title: i18n.t('meta.Sinks.SQLServer.FieldFormat'),
       dataIndex: 'fieldFormat',
       initialValue: '',
       type: 'autocomplete',
@@ -258,7 +258,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
         ['BIGINT', 'DATE', 'TIMESTAMP'].includes(record.fieldType as string),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.SQLServer.FieldDescription'),
+      title: i18n.t('meta.Sinks.SQLServer.FieldDescription'),
       dataIndex: 'fieldComment',
       initialValue: '',
     },
diff --git a/inlong-dashboard/src/meta/sinks/tdsqlPostgreSql.tsx b/inlong-dashboard/src/meta/sinks/tdsqlPostgreSql.tsx
index eb98b87b7..daf553406 100644
--- a/inlong-dashboard/src/meta/sinks/tdsqlPostgreSql.tsx
+++ b/inlong-dashboard/src/meta/sinks/tdsqlPostgreSql.tsx
@@ -75,7 +75,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.SchemaName'),
+      label: i18n.t('meta.Sinks.TDSQLPostgreSQL.SchemaName'),
       name: 'schemaName',
       rules: [{ required: true }],
       props: {
@@ -85,7 +85,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.TableName'),
+      label: i18n.t('meta.Sinks.TDSQLPostgreSQL.TableName'),
       name: 'tableName',
       rules: [{ required: true }],
       props: {
@@ -95,7 +95,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.PrimaryKey'),
+      label: i18n.t('meta.Sinks.TDSQLPostgreSQL.PrimaryKey'),
       name: 'primaryKey',
       rules: [{ required: true }],
       props: {
@@ -105,11 +105,11 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'radio',
-      label: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResource'),
+      label: i18n.t('meta.Sinks.EnableCreateResource'),
       name: 'enableCreateResource',
       rules: [{ required: true }],
       initialValue: 1,
-      tooltip: i18n.t('components.AccessHelper.StorageMetaData.EnableCreateResourceHelp'),
+      tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
       props: {
         disabled: isEdit && [110, 130].includes(currentValues?.status),
         options: [
@@ -126,7 +126,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Username'),
+      label: i18n.t('meta.Sinks.Username'),
       name: 'username',
       rules: [{ required: true }],
       props: {
@@ -136,7 +136,7 @@ const getForm: GetStorageFormFieldsType = (
     },
     {
       type: 'password',
-      label: i18n.t('components.AccessHelper.StorageMetaData.Password'),
+      label: i18n.t('meta.Sinks.Password'),
       name: 'password',
       rules: [{ required: true }],
       props: {
@@ -167,16 +167,14 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
   return [
     ...sourceFields,
     {
-      title: `TDSQLPOSTGRESQL${i18n.t(
-        'components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldName',
-      )}`,
+      title: `TDSQLPOSTGRESQL${i18n.t('meta.Sinks.TDSQLPostgreSQL.FieldName')}`,
       dataIndex: 'fieldName',
       initialValue: '',
       rules: [
         { required: true },
         {
           pattern: /^[a-z][0-9a-z_]*$/,
-          message: i18n.t('components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldNameRule'),
+          message: i18n.t('meta.Sinks.TDSQLPostgreSQL.FieldNameRule'),
         },
       ],
       props: (text, record, idx, isNew) => ({
@@ -184,9 +182,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: `TDSQLPOSTGRESQL${i18n.t(
-        'components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldType',
-      )}`,
+      title: `TDSQLPOSTGRESQL${i18n.t('meta.Sinks.TDSQLPostgreSQL.FieldType')}`,
       dataIndex: 'fieldType',
       initialValue: tdsqlpostgreSQLFieldTypes[0].value,
       type: 'select',
@@ -197,7 +193,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       rules: [{ required: true }],
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.IsMetaField'),
+      title: i18n.t('meta.Sinks.TDSQLPostgreSQL.IsMetaField'),
       initialValue: 0,
       dataIndex: 'isMetaField',
       type: 'select',
@@ -215,7 +211,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
       }),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldFormat'),
+      title: i18n.t('meta.Sinks.TDSQLPostgreSQL.FieldFormat'),
       dataIndex: 'fieldFormat',
       initialValue: '',
       type: 'autocomplete',
@@ -229,7 +225,7 @@ const getFieldListColumns: GetStorageColumnsType = (dataType, currentValues) =>
         ['BIGINT', 'DATE', 'TIMESTAMP'].includes(record.fieldType as string),
     },
     {
-      title: i18n.t('components.AccessHelper.StorageMetaData.TDSQLPostgreSQL.FieldDescription'),
+      title: i18n.t('meta.Sinks.TDSQLPostgreSQL.FieldDescription'),
       dataIndex: 'fieldComment',
       initialValue: '',
     },
diff --git a/inlong-dashboard/src/meta/sources/binLog.ts b/inlong-dashboard/src/meta/sources/binLog.ts
index a436d4ffb..2428c4523 100644
--- a/inlong-dashboard/src/meta/sources/binLog.ts
+++ b/inlong-dashboard/src/meta/sources/binLog.ts
@@ -27,7 +27,7 @@ const getForm = (type: 'form' | 'col' = 'form', { currentValues } = {} as any) =
     {
       name: 'hostname',
       type: 'input',
-      label: i18n.t('components.AccessHelper.DataSourceMetaData.Db.Server'),
+      label: i18n.t('meta.Sources.Db.Server'),
       rules: [{ required: true }],
       props: {
         disabled: currentValues?.status === 101,
@@ -37,7 +37,7 @@ const getForm = (type: 'form' | 'col' = 'form', { currentValues } = {} as any) =
     {
       name: 'port',
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.DataSourceMetaData.Db.Port'),
+      label: i18n.t('meta.Sources.Db.Port'),
       initialValue: 3306,
       rules: [{ required: true }],
       props: {
@@ -50,7 +50,7 @@ const getForm = (type: 'form' | 'col' = 'form', { currentValues } = {} as any) =
     {
       name: 'user',
       type: 'input',
-      label: i18n.t('components.AccessHelper.DataSourceMetaData.Db.User'),
+      label: i18n.t('meta.Sources.Db.User'),
       rules: [{ required: true }],
       props: {
         disabled: currentValues?.status === 101,
@@ -59,7 +59,7 @@ const getForm = (type: 'form' | 'col' = 'form', { currentValues } = {} as any) =
     {
       name: 'password',
       type: 'password',
-      label: i18n.t('components.AccessHelper.DataSourceMetaData.Db.Password'),
+      label: i18n.t('meta.Sources.Db.Password'),
       rules: [{ required: true }],
       props: {
         disabled: currentValues?.status === 101,
@@ -68,7 +68,7 @@ const getForm = (type: 'form' | 'col' = 'form', { currentValues } = {} as any) =
     {
       name: 'historyFilename',
       type: 'input',
-      label: i18n.t('components.AccessHelper.DataSourceMetaData.Db.HistoryFilename'),
+      label: i18n.t('meta.Sources.Db.HistoryFilename'),
       rules: [{ required: true }],
       initialValue: '/data/inlong-agent/.history',
       props: {
@@ -79,7 +79,7 @@ const getForm = (type: 'form' | 'col' = 'form', { currentValues } = {} as any) =
     {
       name: 'serverTimezone',
       type: 'input',
-      label: i18n.t('components.AccessHelper.DataSourceMetaData.Db.ServerTimezone'),
+      label: i18n.t('meta.Sources.Db.ServerTimezone'),
       tooltip: 'UTC, UTC+8, Asia/Shanghai, ...',
       initialValue: 'UTC',
       rules: [{ required: true }],
@@ -90,7 +90,7 @@ const getForm = (type: 'form' | 'col' = 'form', { currentValues } = {} as any) =
     {
       name: 'intervalMs',
       type: 'inputnumber',
-      label: i18n.t('components.AccessHelper.DataSourceMetaData.Db.IntervalMs'),
+      label: i18n.t('meta.Sources.Db.IntervalMs'),
       initialValue: 1000,
       rules: [{ required: true }],
       suffix: 'ms',
@@ -103,7 +103,7 @@ const getForm = (type: 'form' | 'col' = 'form', { currentValues } = {} as any) =
     {
       name: 'allMigration',
       type: 'radio',
-      label: i18n.t('components.AccessHelper.DataSourceMetaData.Db.AllMigration'),
+      label: i18n.t('meta.Sources.Db.AllMigration'),
       rules: [{ required: true }],
       initialValue: false,
       props: {
@@ -123,8 +123,8 @@ const getForm = (type: 'form' | 'col' = 'form', { currentValues } = {} as any) =
     {
       name: 'databaseWhiteList',
       type: 'input',
-      label: i18n.t('components.AccessHelper.DataSourceMetaData.Db.DatabaseWhiteList'),
-      tooltip: i18n.t('components.AccessHelper.DataSourceMetaData.Db.WhiteListHelp'),
+      label: i18n.t('meta.Sources.Db.DatabaseWhiteList'),
+      tooltip: i18n.t('meta.Sources.Db.WhiteListHelp'),
       rules: [{ required: true }],
       props: {
         disabled: currentValues?.status === 101,
@@ -134,8 +134,8 @@ const getForm = (type: 'form' | 'col' = 'form', { currentValues } = {} as any) =
     {
       name: 'tableWhiteList',
       type: 'input',
-      label: i18n.t('components.AccessHelper.DataSourceMetaData.Db.TableWhiteList'),
-      tooltip: i18n.t('components.AccessHelper.DataSourceMetaData.Db.WhiteListHelp'),
+      label: i18n.t('meta.Sources.Db.TableWhiteList'),
+      tooltip: i18n.t('meta.Sources.Db.WhiteListHelp'),
       rules: [{ required: true }],
       props: {
         disabled: currentValues?.status === 101,
diff --git a/inlong-dashboard/src/meta/sources/file.ts b/inlong-dashboard/src/meta/sources/file.ts
index d9aa6991d..e5b7534ae 100644
--- a/inlong-dashboard/src/meta/sources/file.ts
+++ b/inlong-dashboard/src/meta/sources/file.ts
@@ -26,12 +26,12 @@ const getForm = (type: 'form' | 'col' = 'form', { currentValues } = {} as any) =
   const fileds = [
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.DataSourceMetaData.File.DataSourceIP'),
+      label: i18n.t('meta.Sources.File.DataSourceIP'),
       name: 'ip',
       rules: [
         {
           pattern: rulesPattern.ip,
-          message: i18n.t('components.AccessHelper.DataSourceMetaData.File.IpRule'),
+          message: i18n.t('meta.Sources.File.IpRule'),
           required: true,
         },
       ],
@@ -39,17 +39,17 @@ const getForm = (type: 'form' | 'col' = 'form', { currentValues } = {} as any) =
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.DataSourceMetaData.File.FilePath'),
+      label: i18n.t('meta.Sources.File.FilePath'),
       name: 'pattern',
-      tooltip: i18n.t('components.AccessHelper.DataSourceMetaData.File.FilePathHelp'),
+      tooltip: i18n.t('meta.Sources.File.FilePathHelp'),
       rules: [{ required: true }],
       _inTable: true,
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.DataSourceMetaData.File.TimeOffset'),
+      label: i18n.t('meta.Sources.File.TimeOffset'),
       name: 'timeOffset',
-      tooltip: i18n.t('components.AccessHelper.DataSourceMetaData.File.TimeOffsetHelp'),
+      tooltip: i18n.t('meta.Sources.File.TimeOffsetHelp'),
       _inTable: true,
     },
   ];
diff --git a/inlong-dashboard/src/components/AccessHelper/FieldsConfig/dataFields.tsx b/inlong-dashboard/src/meta/stream/index.tsx
similarity index 74%
rename from inlong-dashboard/src/components/AccessHelper/FieldsConfig/dataFields.tsx
rename to inlong-dashboard/src/meta/stream/index.tsx
index 6282af3db..8bfb3abba 100644
--- a/inlong-dashboard/src/components/AccessHelper/FieldsConfig/dataFields.tsx
+++ b/inlong-dashboard/src/meta/stream/index.tsx
@@ -37,7 +37,7 @@ export default (
   const fields: FormItemProps[] = [
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.DataStreamID'),
+      label: i18n.t('meta.Stream.DataStreamID'),
       name: 'inlongStreamId',
       props: {
         maxLength: 32,
@@ -47,19 +47,19 @@ export default (
         { required: true },
         {
           pattern: /^[0-9a-z_-]+$/,
-          message: i18n.t('components.AccessHelper.FieldsConfig.dataFields.InlongStreamIdRules'),
+          message: i18n.t('meta.Stream.InlongStreamIdRules'),
         },
       ],
     },
     {
       type: 'input',
-      label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.DataStreamName'),
+      label: i18n.t('meta.Stream.DataStreamName'),
       name: 'name',
       initialValue: currentValues.name,
     },
     {
       type: 'textarea',
-      label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.DataFlowIntroduction'),
+      label: i18n.t('meta.Stream.DataFlowIntroduction'),
       name: 'description',
       props: {
         showCount: true,
@@ -69,10 +69,10 @@ export default (
     },
     {
       type: 'radio',
-      label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.DataType'),
+      label: i18n.t('meta.Stream.DataType'),
       name: 'dataType',
       initialValue: currentValues.dataType ?? 'CSV',
-      tooltip: i18n.t('components.AccessHelper.FieldsConfig.dataFields.DataTypeCsvHelp'),
+      tooltip: i18n.t('meta.Stream.DataTypeCsvHelp'),
       props: {
         options: [
           {
@@ -98,7 +98,7 @@ export default (
     },
     {
       type: 'radio',
-      label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.DataEncoding'),
+      label: i18n.t('meta.Stream.DataEncoding'),
       name: 'dataEncoding',
       initialValue: currentValues.dataEncoding ?? 'UTF-8',
       props: {
@@ -118,34 +118,34 @@ export default (
     },
     {
       type: 'select',
-      label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.fileDelimiter'),
+      label: i18n.t('meta.Stream.fileDelimiter'),
       name: 'dataSeparator',
       initialValue: '124',
       props: {
         dropdownMatchSelectWidth: false,
         options: [
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.Space'),
+            label: i18n.t('meta.Stream.Space'),
             value: '32',
           },
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.VerticalLine'),
+            label: i18n.t('meta.Stream.VerticalLine'),
             value: '124',
           },
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.Comma'),
+            label: i18n.t('meta.Stream.Comma'),
             value: '44',
           },
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.Semicolon'),
+            label: i18n.t('meta.Stream.Semicolon'),
             value: '59',
           },
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.Asterisk'),
+            label: i18n.t('meta.Stream.Asterisk'),
             value: '42',
           },
           {
-            label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.DoubleQuotes'),
+            label: i18n.t('meta.Stream.DoubleQuotes'),
             value: '34',
           },
         ],
@@ -175,7 +175,7 @@ export default (
           editing={fieldListEditing}
           columns={[
             {
-              title: i18n.t('components.AccessHelper.FieldsConfig.dataFields.FieldName'),
+              title: i18n.t('meta.Stream.FieldName'),
               dataIndex: 'fieldName',
               props: () => ({
                 disabled: !fieldListEditing,
@@ -184,12 +184,12 @@ export default (
                 { required: true },
                 {
                   pattern: /^[a-zA-Z][a-zA-Z0-9_]*$/,
-                  message: i18n.t('components.AccessHelper.FieldsConfig.dataFields.FieldNameRule'),
+                  message: i18n.t('meta.Stream.FieldNameRule'),
                 },
               ],
             },
             {
-              title: i18n.t('components.AccessHelper.FieldsConfig.dataFields.FieldType'),
+              title: i18n.t('meta.Stream.FieldType'),
               dataIndex: 'fieldType',
               type: 'select',
               initialValue: sourceFieldsTypes[0].value,
@@ -200,13 +200,13 @@ export default (
               rules: [{ required: true }],
             },
             {
-              title: i18n.t('components.AccessHelper.FieldsConfig.dataFields.FieldComment'),
+              title: i18n.t('meta.Stream.FieldComment'),
               dataIndex: 'fieldComment',
             },
           ]}
         />
       ),
-      label: i18n.t('components.AccessHelper.FieldsConfig.dataFields.SourceDataField'),
+      label: i18n.t('meta.Stream.SourceDataField'),
       name: 'rowTypeFields',
       visible: () => !(currentValues.dataType as string[])?.includes('PB'),
     },
diff --git a/inlong-dashboard/src/components/AccessHelper/DataSourcesEditor/CreateModal.tsx b/inlong-dashboard/src/pages/AccessDetail/DataSources/DetailModal.tsx
similarity index 94%
rename from inlong-dashboard/src/components/AccessHelper/DataSourcesEditor/CreateModal.tsx
rename to inlong-dashboard/src/pages/AccessDetail/DataSources/DetailModal.tsx
index a577adec3..a480885af 100644
--- a/inlong-dashboard/src/components/AccessHelper/DataSourcesEditor/CreateModal.tsx
+++ b/inlong-dashboard/src/pages/AccessDetail/DataSources/DetailModal.tsx
@@ -125,16 +125,7 @@ const Comp: React.FC<Props> = ({ type, id, content = [], record, ...modalProps }
 
   return (
     <>
-      <Modal
-        {...modalProps}
-        title={
-          type === 'MYSQL_BINLOG'
-            ? 'MYSQL_BINLOG'
-            : t('components.AccessHelper.DataSourcesEditor.CreateModal.File')
-        }
-        width={666}
-        onOk={onOk}
-      >
+      <Modal {...modalProps} title={sourcesMap[type]?.label} width={666} onOk={onOk}>
         <FormGenerator
           content={content.concat(formContent)}
           onValuesChange={vals => setCurrentValues(prev => ({ ...prev, ...vals }))}
diff --git a/inlong-dashboard/src/pages/AccessDetail/DataSources/index.tsx b/inlong-dashboard/src/pages/AccessDetail/DataSources/index.tsx
index 362e31ef2..8838b955d 100644
--- a/inlong-dashboard/src/pages/AccessDetail/DataSources/index.tsx
+++ b/inlong-dashboard/src/pages/AccessDetail/DataSources/index.tsx
@@ -22,7 +22,7 @@ import { Button, Modal, message } from 'antd';
 import HighTable from '@/components/HighTable';
 import { defaultSize } from '@/configs/pagination';
 import { useRequest } from '@/hooks';
-import { DataSourcesCreateModal } from '@/components/AccessHelper';
+import DetailModal from './DetailModal';
 import { sources } from '@/meta/sources';
 import i18n from '@/i18n';
 import request from '@/utils/request';
@@ -253,7 +253,7 @@ const Comp = ({ inlongGroupId, readonly }: Props, ref) => {
         }}
       />
 
-      <DataSourcesCreateModal
+      <DetailModal
         {...createModal}
         type={options.sourceType as any}
         content={createContent}
diff --git a/inlong-dashboard/src/components/AccessHelper/DataStorageEditor/DetailModal.tsx b/inlong-dashboard/src/pages/AccessDetail/DataStorage/DetailModal.tsx
similarity index 90%
rename from inlong-dashboard/src/components/AccessHelper/DataStorageEditor/DetailModal.tsx
rename to inlong-dashboard/src/pages/AccessDetail/DataStorage/DetailModal.tsx
index eb624366b..54ef0368a 100644
--- a/inlong-dashboard/src/components/AccessHelper/DataStorageEditor/DetailModal.tsx
+++ b/inlong-dashboard/src/pages/AccessDetail/DataStorage/DetailModal.tsx
@@ -27,7 +27,7 @@ import FormGenerator, {
   FormItemProps,
   FormGeneratorProps,
 } from '@/components/FormGenerator';
-import { Storages, StoragesType } from '@/meta/sinks';
+import { Sinks, SinkType } from '@/meta/sinks';
 
 export interface DetailModalProps extends ModalProps {
   inlongGroupId: string;
@@ -46,7 +46,7 @@ export interface DetailModalProps extends ModalProps {
   onValuesChange?: FormGeneratorProps['onValuesChange'];
 }
 
-const StoragesMap: Record<string, StoragesType> = Storages.reduce(
+const SinksMap: Record<string, SinkType> = Sinks.reduce(
   (acc, cur) => ({
     ...acc,
     [cur.value]: cur,
@@ -94,7 +94,7 @@ const Comp: React.FC<DetailModalProps> = ({
 
   const toFormVals = useCallback(
     v => {
-      const mapFunc = StoragesMap[sinkType]?.toFormValues;
+      const mapFunc = SinksMap[sinkType]?.toFormValues;
       return mapFunc ? mapFunc(v) : v;
     },
     [sinkType],
@@ -102,7 +102,7 @@ const Comp: React.FC<DetailModalProps> = ({
 
   const toSubmitVals = useCallback(
     v => {
-      const mapFunc = StoragesMap[sinkType]?.toSubmitValues;
+      const mapFunc = SinksMap[sinkType]?.toSubmitValues;
       return mapFunc ? mapFunc(v) : v;
     },
     [sinkType],
@@ -140,7 +140,7 @@ const Comp: React.FC<DetailModalProps> = ({
           item => item.fieldName && item.fieldType,
         );
         if (fieldListKey && usefulDefaultRowTypeFields?.length) {
-          const getFieldListColumns = Storages.find(item => item.value === sinkType)
+          const getFieldListColumns = Sinks.find(item => item.value === sinkType)
             ?.getFieldListColumns;
           form.setFieldsValue({
             [fieldListKey.columnsKey]: usefulDefaultRowTypeFields?.map(item => ({
@@ -174,7 +174,7 @@ const Comp: React.FC<DetailModalProps> = ({
   }, [modalProps.visible]);
 
   const formContent = useMemo(() => {
-    const getForm = StoragesMap[sinkType].getForm;
+    const getForm = SinksMap[sinkType].getForm;
     const config = getForm('form', {
       currentValues,
       inlongGroupId,
@@ -186,12 +186,12 @@ const Comp: React.FC<DetailModalProps> = ({
       {
         name: 'sinkName',
         type: 'input',
-        label: t('components.AccessHelper.StorageMetaData.SinkName'),
+        label: t('meta.Sinks.SinkName'),
         rules: [
           { required: true },
           {
             pattern: /^[a-zA-Z][a-zA-Z0-9_-]*$/,
-            message: t('components.AccessHelper.StorageMetaData.SinkNameRule'),
+            message: t('meta.Sinks.SinkNameRule'),
           },
         ],
         props: {
@@ -201,7 +201,7 @@ const Comp: React.FC<DetailModalProps> = ({
       {
         name: 'description',
         type: 'textarea',
-        label: t('components.AccessHelper.StorageMetaData.Description'),
+        label: t('meta.Sinks.Description'),
         props: {
           showCount: true,
           maxLength: 300,
@@ -226,7 +226,7 @@ const Comp: React.FC<DetailModalProps> = ({
   };
 
   return (
-    <Modal title={StoragesMap[sinkType]?.label} width={1200} {...modalProps} onOk={onOk}>
+    <Modal title={SinksMap[sinkType]?.label} width={1200} {...modalProps} onOk={onOk}>
       <FormGenerator
         name={name}
         labelCol={{ span: 4 }}
diff --git a/inlong-dashboard/src/pages/AccessDetail/DataStorage/index.tsx b/inlong-dashboard/src/pages/AccessDetail/DataStorage/index.tsx
index 01b13f3ce..7600820e0 100644
--- a/inlong-dashboard/src/pages/AccessDetail/DataStorage/index.tsx
+++ b/inlong-dashboard/src/pages/AccessDetail/DataStorage/index.tsx
@@ -23,8 +23,8 @@ import HighTable from '@/components/HighTable';
 import { defaultSize } from '@/configs/pagination';
 import { useRequest } from '@/hooks';
 import i18n from '@/i18n';
-import { DataStorageDetailModal } from '@/components/AccessHelper';
-import { Storages } from '@/meta/sinks';
+import DetailModal from './DetailModal';
+import { Sinks } from '@/meta/sinks';
 import request from '@/utils/request';
 import { CommonInterface } from '../common';
 import { statusList, genStatusTag } from './status';
@@ -43,7 +43,7 @@ const getFilterFormContent = defaultValues => [
     initialValue: defaultValues.sinkType,
     props: {
       dropdownMatchSelectWidth: false,
-      options: Storages.map(item => ({
+      options: Sinks.map(item => ({
         label: item.label,
         value: item.value,
       })),
@@ -65,7 +65,7 @@ const Comp = ({ inlongGroupId, readonly }: Props, ref) => {
     keyword: '',
     pageSize: defaultSize,
     pageNum: 1,
-    sinkType: Storages[0].value,
+    sinkType: Sinks[0].value,
   });
 
   const [curDataStreamIdentifier, setCurDataStreamIdentifier] = useState<string>();
@@ -168,7 +168,7 @@ const Comp = ({ inlongGroupId, readonly }: Props, ref) => {
 
   const columnsMap = useMemo(
     () =>
-      Storages.reduce(
+      Sinks.reduce(
         (acc, cur) => ({
           ...acc,
           [cur.value]: cur.tableColumns,
@@ -256,7 +256,7 @@ const Comp = ({ inlongGroupId, readonly }: Props, ref) => {
         }}
       />
 
-      <DataStorageDetailModal
+      <DetailModal
         {...createModal}
         inlongGroupId={inlongGroupId}
         content={createContent}
diff --git a/inlong-dashboard/src/pages/AccessDetail/DataStream/StreamItemModal.tsx b/inlong-dashboard/src/pages/AccessDetail/DataStream/StreamItemModal.tsx
index f173f35d1..52438e82b 100644
--- a/inlong-dashboard/src/pages/AccessDetail/DataStream/StreamItemModal.tsx
+++ b/inlong-dashboard/src/pages/AccessDetail/DataStream/StreamItemModal.tsx
@@ -23,7 +23,8 @@ import { ModalProps } from 'antd/es/modal';
 import FormGenerator, { useForm } from '@/components/FormGenerator';
 import { useUpdateEffect, useRequest } from '@/hooks';
 import i18n from '@/i18n';
-import { genBusinessFields, genDataFields } from '@/components/AccessHelper';
+import getGroupFields from '@/meta/group';
+import getStreamFields from '@/meta/stream';
 import request from '@/utils/request';
 import { dataToValues, valuesToData } from './helper';
 
@@ -36,7 +37,7 @@ export interface Props extends ModalProps {
 
 export const genFormContent = (isCreate, mqType) => {
   return [
-    ...genDataFields([
+    ...getStreamFields([
       {
         type: (
           <Divider orientation="left">
@@ -67,12 +68,10 @@ export const genFormContent = (isCreate, mqType) => {
         visible: mqType === 'PULSAR',
       },
     ]),
-    ...genBusinessFields(['dailyRecords', 'dailyStorage', 'peakRecords', 'maxLength']).map(
-      item => ({
-        ...item,
-        visible: mqType === 'PULSAR',
-      }),
-    ),
+    ...getGroupFields(['dailyRecords', 'dailyStorage', 'peakRecords', 'maxLength']).map(item => ({
+      ...item,
+      visible: mqType === 'PULSAR',
+    })),
   ].map(item => {
     const obj = { ...item };
 
diff --git a/inlong-dashboard/src/pages/AccessDetail/Info/config.tsx b/inlong-dashboard/src/pages/AccessDetail/Info/config.tsx
index 401f0009a..7fd1b9e30 100644
--- a/inlong-dashboard/src/pages/AccessDetail/Info/config.tsx
+++ b/inlong-dashboard/src/pages/AccessDetail/Info/config.tsx
@@ -18,7 +18,7 @@
  */
 
 // import React from 'react';
-import { genBusinessFields } from '@/components/AccessHelper';
+import getGroupFields from '@/meta/group';
 
 export const getFormContent = ({ editing, initialValues, isCreate, isUpdate }) => {
   const keys = [
@@ -43,7 +43,7 @@ export const getFormContent = ({ editing, initialValues, isCreate, isUpdate }) =
   ].filter(Boolean);
 
   return isCreate
-    ? genBusinessFields(keys, initialValues).map(item => {
+    ? getGroupFields(keys, initialValues).map(item => {
         if (item.name === 'inlongGroupId' && isUpdate) {
           return {
             ...item,
@@ -55,7 +55,7 @@ export const getFormContent = ({ editing, initialValues, isCreate, isUpdate }) =
         }
         return item;
       })
-    : genBusinessFields(keys, initialValues).map(item => ({
+    : getGroupFields(keys, initialValues).map(item => ({
         ...item,
         type: transType(editing, item, initialValues),
         suffix:
diff --git a/inlong-dashboard/src/pages/ApprovalDetail/AccessConfig.tsx b/inlong-dashboard/src/pages/ApprovalDetail/AccessConfig.tsx
index a9c7ea2c2..6621075c2 100644
--- a/inlong-dashboard/src/pages/ApprovalDetail/AccessConfig.tsx
+++ b/inlong-dashboard/src/pages/ApprovalDetail/AccessConfig.tsx
@@ -20,10 +20,10 @@
 import React from 'react';
 import { Divider, Table } from 'antd';
 import i18n from '@/i18n';
-import { genBusinessFields } from '@/components/AccessHelper';
+import getGroupFields from '@/meta/group';
 
-const getBusinessContent = (initialValues, isFinished, isViwer) => [
-  ...genBusinessFields(
+const getContent = (initialValues, isFinished, isViwer) => [
+  ...getGroupFields(
     [
       'inlongGroupId',
       'name',
@@ -85,7 +85,7 @@ export const getFormContent = ({ isViwer, formData, suffixContent, noExtraForm,
         </Divider>
       ),
     },
-    ...(getBusinessContent(formData.groupInfo, isFinished, isViwer) || []),
+    ...(getContent(formData.groupInfo, isFinished, isViwer) || []),
     {
       type: (
         <Divider orientation="left">
diff --git a/inlong-dashboard/src/pages/ApprovalDetail/ConsumeConfig.tsx b/inlong-dashboard/src/pages/ApprovalDetail/ConsumeConfig.tsx
index 3f06474dc..f68a182de 100644
--- a/inlong-dashboard/src/pages/ApprovalDetail/ConsumeConfig.tsx
+++ b/inlong-dashboard/src/pages/ApprovalDetail/ConsumeConfig.tsx
@@ -20,10 +20,10 @@
 import React from 'react';
 import { Divider } from 'antd';
 import i18n from '@/i18n';
-import { genBasicFields } from '@/components/ConsumeHelper';
+import getConsumptionFields from '@/meta/consumption';
 
-const getConsumerContent = initialValues => {
-  return genBasicFields(
+const getContent = initialValues => {
+  return getConsumptionFields(
     [
       'consumerGroup',
       'inCharges',
@@ -74,7 +74,7 @@ export const getFormContent = (
         </Divider>
       ),
     },
-    ...(getConsumerContent(formData.consumptionInfo) || []),
+    ...(getContent(formData.consumptionInfo) || []),
   ];
 
   const extraForm =
diff --git a/inlong-dashboard/src/pages/ConsumeCreate/Info/config.tsx b/inlong-dashboard/src/pages/ConsumeCreate/Info/config.tsx
deleted file mode 100644
index 0c747eb7c..000000000
--- a/inlong-dashboard/src/pages/ConsumeCreate/Info/config.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React from 'react';
-import { Divider } from 'antd';
-import i18n from '@/i18n';
-import { genBasicFields } from '@/components/ConsumeHelper';
-
-export const getFormContent = ({ changedValues }): ReturnType<typeof genBasicFields> =>
-  genBasicFields(
-    [
-      {
-        type: (
-          <Divider orientation="left">{i18n.t('pages.ConsumeCreate.ConsumerInformation')}</Divider>
-        ),
-      },
-      'consumerGroupName',
-      'inCharges',
-      'inlongGroupId',
-      'topic',
-      'filterEnabled',
-      {
-        type: <Divider orientation="left">DLQ</Divider>,
-        visible: values => values.mqType === 'PULSAR',
-      },
-      'mqExtInfo.isDlq',
-      'mqExtInfo.deadLetterTopic',
-      {
-        type: <Divider orientation="left">RLQ</Divider>,
-        visible: values => values.mqExtInfo?.isDlq && values.mqType === 'PULSAR',
-      },
-      'mqExtInfo.isRlq',
-      'mqExtInfo.retryLetterTopic',
-    ],
-    changedValues,
-  );
diff --git a/inlong-dashboard/src/pages/ConsumeCreate/Info/index.tsx b/inlong-dashboard/src/pages/ConsumeCreate/Info/index.tsx
deleted file mode 100644
index f4f0e37b7..000000000
--- a/inlong-dashboard/src/pages/ConsumeCreate/Info/index.tsx
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, { useState, forwardRef, useImperativeHandle, useEffect, useMemo } from 'react';
-import FormGenerator, { useForm } from '@/components/FormGenerator';
-import { useRequest, useSelector } from '@/hooks';
-import { State } from '@/models';
-import request from '@/utils/request';
-import { getFormContent } from './config';
-
-export interface Props {
-  id?: number;
-}
-
-const Comp = ({ id }: Props, ref) => {
-  const [form] = useForm();
-
-  const { userName } = useSelector<State, State>(state => state);
-
-  const [changedValues, setChangedValues] = useState<Record<string, unknown>>({});
-
-  const isUpdate = useMemo(() => {
-    return !!id;
-  }, [id]);
-
-  const { data: savedData } = useRequest(
-    {
-      url: `/consumption/get/${id}`,
-    },
-    {
-      ready: !!id && !Object.keys(changedValues).length,
-      refreshDeps: [id],
-      formatResult: data => ({
-        ...data,
-        topic: data.topic.split(','),
-        inCharges: data.inCharges?.split(',') || [],
-      }),
-      onSuccess: data => {
-        form.setFieldsValue(data);
-        setChangedValues(data);
-      },
-    },
-  );
-
-  const onOk = async () => {
-    const values = await form.validateFields();
-    const data = {
-      ...values,
-      inCharges: values.inCharges.join(','),
-      consumerGroupId: values.consumerGroupName || savedData.consumerGroupId,
-      topic: Array.isArray(values.topic) ? values.topic.join(',') : values.topic,
-      mqExtInfo: {
-        ...values.mqExtInfo,
-        mqType: values.mqType,
-      },
-    };
-
-    if (id) data.id = id;
-
-    const result = await request({
-      url: '/consumption/save',
-      method: 'POST',
-      data,
-    });
-    await request({
-      url: `/consumption/startProcess/${result}`,
-      method: 'POST',
-    });
-    return result;
-  };
-
-  useEffect(() => {
-    const values = {} as Record<string, unknown>;
-    if (!isUpdate) {
-      if (userName) values.inCharges = [userName];
-      form.setFieldsValue(values);
-      setChangedValues(values);
-    }
-  }, [isUpdate, form, userName]);
-
-  useImperativeHandle(ref, () => ({
-    onOk,
-  }));
-
-  return (
-    <>
-      <FormGenerator
-        form={form}
-        content={getFormContent({ changedValues })}
-        useMaxWidth={800}
-        onValuesChange={(c, v) => setChangedValues(prev => ({ ...prev, ...v }))}
-        allValues={savedData}
-      />
-    </>
-  );
-};
-
-export default forwardRef(Comp);
diff --git a/inlong-dashboard/src/pages/ConsumeCreate/index.tsx b/inlong-dashboard/src/pages/ConsumeCreate/index.tsx
deleted file mode 100644
index 95176514c..000000000
--- a/inlong-dashboard/src/pages/ConsumeCreate/index.tsx
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React, { useState, useRef } from 'react';
-import { Button, Card, Steps, Space, message } from 'antd';
-import { parse } from 'qs';
-import { PageContainer, Container, FooterToolbar } from '@/components/PageContainer';
-import { useHistory, useLocation, useSet } from '@/hooks';
-import { useTranslation } from 'react-i18next';
-import Info from './Info';
-
-const { Step } = Steps;
-
-const Create: React.FC = () => {
-  const { t } = useTranslation();
-  const history = useHistory();
-
-  const location = useLocation();
-
-  const qs = parse(location.search.slice(1));
-
-  const [current, setCurrent] = useState(+qs.step || 0);
-  const [, { add: addOpened, has: hasOpened }] = useSet([current]);
-  const [confirmLoading, setConfirmLoading] = useState(false);
-
-  const [id, setId] = useState(qs.id);
-
-  const infoRef = useRef();
-
-  const steps = [
-    {
-      title: t('pages.ConsumeCreate.ConsumerInformation'),
-      content: <Info ref={infoRef} id={id} />,
-      useCache: true,
-      ref: infoRef,
-    },
-  ];
-
-  const onOk = async current => {
-    const currentStepObj = steps[current] as any;
-    const onOk = currentStepObj.ref?.current?.onOk;
-    setConfirmLoading(true);
-    try {
-      const result = onOk && (await onOk());
-      if (current === 0) {
-        setId(result);
-        history.push({
-          search: `?id=${result}&step=1`,
-        });
-      }
-    } finally {
-      setConfirmLoading(false);
-    }
-  };
-
-  const onSubmit = async current => {
-    await onOk(current);
-    message.success(t('basic.OperatingSuccess'));
-    history.push('/consume');
-  };
-
-  const Footer = () => (
-    <Space style={{ display: 'flex', justifyContent: 'center' }}>
-      {current > 0 && (
-        <Button onClick={() => setCurrent(current - 1)}>{t('pages.ConsumeCreate.Prev')}</Button>
-      )}
-      {current !== steps.length - 1 && (
-        <Button
-          type="primary"
-          loading={confirmLoading}
-          onClick={async () => {
-            await onOk(current);
-
-            const newCurrent = current + 1;
-            setCurrent(newCurrent);
-            if (!hasOpened(newCurrent)) addOpened(newCurrent);
-          }}
-        >
-          {t('pages.ConsumeCreate.Next')}
-        </Button>
-      )}
-      {current === steps.length - 1 && (
-        <Button type="primary" onClick={() => onSubmit(current)}>
-          {t('pages.ConsumeCreate.Submit')}
-        </Button>
-      )}
-      <Button onClick={() => history.push('/consume')}>{t('pages.ConsumeCreate.Back')}</Button>
-    </Space>
-  );
-
-  return (
-    <PageContainer
-      breadcrumb={[{ name: t('pages.ConsumeCreate.NewConsume') }]}
-      useDefaultContainer={false}
-    >
-      <Steps current={current} size="small" style={{ marginBottom: 20, width: 400 }}>
-        {steps.map(item => (
-          <Step key={item.title} title={item.title} />
-        ))}
-      </Steps>
-
-      <Container>
-        <Card>
-          {steps.map((item, index) => (
-            // Lazy load the content of the step, and at the same time make the loaded useCache content not destroy
-            <div key={item.title} style={{ display: `${index === current ? 'block' : 'none'}` }}>
-              {index === current || (item.useCache && hasOpened(index)) ? item.content : null}
-            </div>
-          ))}
-        </Card>
-      </Container>
-
-      <FooterToolbar extra={<Footer />} />
-    </PageContainer>
-  );
-};
-
-export default Create;
diff --git a/inlong-dashboard/src/pages/ConsumeDetail/Info/config.tsx b/inlong-dashboard/src/pages/ConsumeDetail/Info/config.tsx
index e14f557cf..770ac4641 100644
--- a/inlong-dashboard/src/pages/ConsumeDetail/Info/config.tsx
+++ b/inlong-dashboard/src/pages/ConsumeDetail/Info/config.tsx
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-import { genBasicFields } from '@/components/ConsumeHelper';
+import getConsumptionFields from '@/meta/consumption';
 
 export const getFormContent = ({ editing, initialValues, isCreate }) => {
   const keys = [
@@ -35,10 +35,10 @@ export const getFormContent = ({ editing, initialValues, isCreate }) => {
   ].filter(Boolean);
 
   return isCreate
-    ? genBasicFields(keys, initialValues).map(item => {
+    ? getConsumptionFields(keys, initialValues).map(item => {
         return item;
       })
-    : genBasicFields(keys, initialValues).map(item => ({
+    : getConsumptionFields(keys, initialValues).map(item => ({
         ...item,
         type: transType(editing, item, initialValues),
         suffix: