feat:Configure plug-ins to support this feature (#2647)

diff --git a/web/.eslintrc.js b/web/.eslintrc.js
index e3b873b..36fbf31 100644
--- a/web/.eslintrc.js
+++ b/web/.eslintrc.js
@@ -15,7 +15,12 @@
  * limitations under the License.
  */
 module.exports = {
-  extends: [require.resolve('@umijs/fabric/dist/eslint')],
+  extends: [
+    require.resolve('@umijs/fabric/dist/eslint'),
+    'plugin:import/errors',
+    'plugin:import/warnings',
+  ],
+  plugins: ['simple-import-sort'],
   globals: {
     ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION: true,
     page: true,
@@ -23,5 +28,27 @@
   },
   rules: {
     '@typescript-eslint/naming-convention': 'off',
+    'import/no-unresolved': [2, { ignore: ['^@/', '^umi/', '^@@/'] }],
+    'sort-imports': 'off',
+    'import/order': 'off',
+    'simple-import-sort/imports': 'error',
+    'simple-import-sort/exports': 'error',
   },
+  settings: {
+    'import/resolver': {
+      node: {
+        path: ['src'],
+        extensions: ['.js', '.ts', '.tsx', '.jsx'],
+      },
+    },
+  },
+  overrides: [
+    {
+      files: 'server/**/*.js',
+      env: { node: true },
+      rules: {
+        'import/order': ['error', { 'newlines-between': 'always' }],
+      },
+    },
+  ],
 };
diff --git a/web/copy-folder.mjs b/web/copy-folder.mjs
index ef88729..a0bf8c6 100644
--- a/web/copy-folder.mjs
+++ b/web/copy-folder.mjs
@@ -10,5 +10,7 @@
   const [, , ...srcDirs] = process.argv;
   const tarDir = srcDirs.pop();
 
-  await Promise.allSettled(srcDirs.map((srcDir) => copyDir(`./node_modules/${srcDir}`, `${tarDir}/${srcDir}`)));
+  await Promise.allSettled(
+    srcDirs.map((srcDir) => copyDir(`./node_modules/${srcDir}`, `${tarDir}/${srcDir}`)),
+  );
 })();
diff --git a/web/cypress/e2e/consumer/create-consumer-with-basic-auth-plugin-form.cy.js b/web/cypress/e2e/consumer/create-consumer-with-basic-auth-plugin-form.cy.js
index 9a2331a..8aecfbd 100644
--- a/web/cypress/e2e/consumer/create-consumer-with-basic-auth-plugin-form.cy.js
+++ b/web/cypress/e2e/consumer/create-consumer-with-basic-auth-plugin-form.cy.js
@@ -28,7 +28,7 @@
     notification: '.ant-notification-notice-message',
     notificationCloseIcon: '.ant-notification-close-icon',
     monacoViewZones: '.view-zones',
-    alert: '.ant-form-item-explain-error [role=alert]'
+    alert: '.ant-form-item-explain-error [role=alert]',
   };
 
   const data = {
diff --git a/web/cypress/e2e/rest/service-edit-service-with-upstream.cy.js b/web/cypress/e2e/rest/service-edit-service-with-upstream.cy.js
index 8badbbb..a658930 100644
--- a/web/cypress/e2e/rest/service-edit-service-with-upstream.cy.js
+++ b/web/cypress/e2e/rest/service-edit-service-with-upstream.cy.js
@@ -90,7 +90,7 @@
 
     cy.contains(data.upstreamName).click();
     cy.wait(500);
-    cy.contains('.ant-select-item-option-content','Custom').click();
+    cy.contains('.ant-select-item-option-content', 'Custom').click();
     cy.get(selector.nodes_0_host)
       .click({
         force: true,
diff --git a/web/cypress/e2e/rest/service-save-paginator-status.cy.js b/web/cypress/e2e/rest/service-save-paginator-status.cy.js
index 3935c32..37557dd 100644
--- a/web/cypress/e2e/rest/service-save-paginator-status.cy.js
+++ b/web/cypress/e2e/rest/service-save-paginator-status.cy.js
@@ -50,7 +50,7 @@
     cy.visit('/');
     cy.contains('Service').click();
 
-    for (let i = 0; i <= 10; i+=1) {
+    for (let i = 0; i <= 10; i += 1) {
       cy.request(
         {
           method: 'POST',
diff --git a/web/package.json b/web/package.json
index 9919a03..43efd0d 100644
--- a/web/package.json
+++ b/web/package.json
@@ -68,6 +68,8 @@
     "classnames": "^2.2.6",
     "dayjs": "1.8.28",
     "dotenv": "^16.0.1",
+    "eslint-plugin-import": "^2.26.0",
+    "eslint-plugin-simple-import-sort": "^8.0.0",
     "file-saver": "^2.0.5",
     "hexo-fs": "^3.1.0",
     "js-beautify": "^1.13.0",
diff --git a/web/src/app.tsx b/web/src/app.tsx
index 6c3a553..5346b58 100644
--- a/web/src/app.tsx
+++ b/web/src/app.tsx
@@ -14,18 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import { history } from 'umi';
-import type { RequestConfig } from 'umi';
+import './libs/iconfont';
+
 import type { Settings as LayoutSettings } from '@ant-design/pro-layout';
 import { isPlainObject } from 'lodash';
+import React from 'react';
+import type { RequestConfig } from 'umi';
+import { history } from 'umi';
 
-import RightContent from '@/components/RightContent';
 import Footer from '@/components/Footer';
+import RightContent from '@/components/RightContent';
+import { errorHandler, getMenuData, getUrlQuery } from '@/helpers';
 import { queryCurrent } from '@/services/user';
-import { getMenuData, errorHandler, getUrlQuery } from '@/helpers';
 
-import './libs/iconfont';
 import defaultSettings from '../config/defaultSettings';
 
 export async function getInitialState(): Promise<{
diff --git a/web/src/components/ActionBar/ActionBar.tsx b/web/src/components/ActionBar/ActionBar.tsx
index 43354d0..8229dcd 100644
--- a/web/src/components/ActionBar/ActionBar.tsx
+++ b/web/src/components/ActionBar/ActionBar.tsx
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
+import { Button, Col, Row } from 'antd';
 import type { CSSProperties } from 'react';
-import { Row, Col, Button } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/ActionBar/index.ts b/web/src/components/ActionBar/index.ts
index 2621d28..3d2a0fc 100644
--- a/web/src/components/ActionBar/index.ts
+++ b/web/src/components/ActionBar/index.ts
@@ -15,5 +15,5 @@
  * limitations under the License.
  */
 export { default } from './ActionBar';
-export { default as ActionBarZhCN } from './locales/zh-CN';
 export { default as ActionBarEnUS } from './locales/en-US';
+export { default as ActionBarZhCN } from './locales/zh-CN';
diff --git a/web/src/components/Footer/index.tsx b/web/src/components/Footer/index.tsx
index 1537678..a994445 100644
--- a/web/src/components/Footer/index.tsx
+++ b/web/src/components/Footer/index.tsx
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { GithubOutlined } from '@ant-design/icons';
 import { DefaultFooter } from '@ant-design/pro-layout';
+import React from 'react';
 
 export default () => (
   <DefaultFooter
diff --git a/web/src/components/HeaderDropdown/index.tsx b/web/src/components/HeaderDropdown/index.tsx
index 310f34d..98893a9 100644
--- a/web/src/components/HeaderDropdown/index.tsx
+++ b/web/src/components/HeaderDropdown/index.tsx
@@ -21,10 +21,11 @@
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
-import type { DropDownProps } from 'antd/es/dropdown';
 import { Dropdown } from 'antd';
-import React from 'react';
+import type { DropDownProps } from 'antd/es/dropdown';
 import classNames from 'classnames';
+import React from 'react';
+
 import styles from './index.less';
 
 declare type OverlayFunc = () => React.ReactNode;
diff --git a/web/src/components/LabelsfDrawer/LabelsDrawer.tsx b/web/src/components/LabelsfDrawer/LabelsDrawer.tsx
index a818ec5..63c07d1 100644
--- a/web/src/components/LabelsfDrawer/LabelsDrawer.tsx
+++ b/web/src/components/LabelsfDrawer/LabelsDrawer.tsx
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useCallback, useEffect, useMemo, useState } from 'react';
-import { AutoComplete, Button, Col, Drawer, Form, notification, Row } from 'antd';
 import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+import { AutoComplete, Button, Col, Drawer, Form, notification, Row } from 'antd';
+import React, { useCallback, useEffect, useMemo, useState } from 'react';
 import { useIntl } from 'umi';
 
 import { transformLabelValueToKeyValue } from '../../helpers';
diff --git a/web/src/components/NoticeIcon/NoticeList.tsx b/web/src/components/NoticeIcon/NoticeList.tsx
index 4131d03..b50dd05 100644
--- a/web/src/components/NoticeIcon/NoticeList.tsx
+++ b/web/src/components/NoticeIcon/NoticeList.tsx
@@ -22,9 +22,9 @@
 * SOFTWARE.
 */
 import { Avatar, List } from 'antd';
-
-import React from 'react';
 import classNames from 'classnames';
+import React from 'react';
+
 import styles from './NoticeList.less';
 
 export type NoticeIconTabProps = {
diff --git a/web/src/components/NoticeIcon/index.tsx b/web/src/components/NoticeIcon/index.tsx
index 8308e42..9b383e6 100644
--- a/web/src/components/NoticeIcon/index.tsx
+++ b/web/src/components/NoticeIcon/index.tsx
@@ -23,14 +23,14 @@
 */
 import { BellOutlined } from '@ant-design/icons';
 import { Badge, Spin, Tabs } from 'antd';
-import useMergeValue from 'use-merge-value';
-import React from 'react';
 import classNames from 'classnames';
+import React from 'react';
+import useMergeValue from 'use-merge-value';
 
-import NoticeList from './NoticeList';
-import type { NoticeIconTabProps } from './NoticeList';
 import HeaderDropdown from '../HeaderDropdown';
 import styles from './index.less';
+import type { NoticeIconTabProps } from './NoticeList';
+import NoticeList from './NoticeList';
 
 const { TabPane } = Tabs;
 
diff --git a/web/src/components/PanelSection/index.tsx b/web/src/components/PanelSection/index.tsx
index 6af6311..b24d36e 100644
--- a/web/src/components/PanelSection/index.tsx
+++ b/web/src/components/PanelSection/index.tsx
@@ -14,9 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { CSSProperties } from 'react';
-import { Divider, Tooltip } from 'antd';
 import { QuestionCircleOutlined } from '@ant-design/icons';
+import { Divider, Tooltip } from 'antd';
+import type { CSSProperties } from 'react';
+import React from 'react';
 
 const PanelSection: React.FC<{
   title: string;
diff --git a/web/src/components/Plugin/Models.ts b/web/src/components/Plugin/Models.ts
index 2e2e550..e8dbe95 100644
--- a/web/src/components/Plugin/Models.ts
+++ b/web/src/components/Plugin/Models.ts
@@ -19,202 +19,179 @@
  * Model List of PluginType of Monaco editor
  */
 
-import { Uri, editor } from "monaco-editor";
-import * as modelCode from './modelCode'
+import { editor, Uri } from 'monaco-editor';
+
+import * as modelCode from './modelCode';
 
 /**
-* Model type is authentication as fllows:
-*/
+ * Model type is authentication as fllows:
+ */
 export const authzcasbinModel = editor.createModel(
-    modelCode.authzcasbin,
-    "json",
-    Uri.parse("file:authz-casbin")
-  );
+  modelCode.authzcasbin,
+  'json',
+  Uri.parse('file:authz-casbin'),
+);
 
 export const authzkeycloakModel = editor.createModel(
   modelCode.authzkeycloak,
-  "json",
-  Uri.parse("file:authz-keycloak")
+  'json',
+  Uri.parse('file:authz-keycloak'),
 );
 
 export const forwardauthModel = editor.createModel(
   modelCode.forwardauth,
-  "json",
-  Uri.parse("file:forward-auth")
+  'json',
+  Uri.parse('file:forward-auth'),
 );
 
-export const opaModel = editor.createModel(
-  modelCode.opa,
-  "json",
-  Uri.parse("file:opa")
-);
+export const opaModel = editor.createModel(modelCode.opa, 'json', Uri.parse('file:opa'));
 
 export const openidconnectModel = editor.createModel(
   modelCode.openidconnect,
-  "json",
-  Uri.parse("file:openid-connect")
+  'json',
+  Uri.parse('file:openid-connect'),
 );
 
 /**
-* Model type is security as fllows:
-*/
+ * Model type is security as fllows:
+ */
 
-export const csrfModel = editor.createModel(
-  modelCode.csrf,
-  "json",
-  Uri.parse("file:csrf")
-);
+export const csrfModel = editor.createModel(modelCode.csrf, 'json', Uri.parse('file:csrf'));
 
 export const iprestrictionModel = editor.createModel(
   modelCode.iprestriction,
-  "json",
-  Uri.parse("file:ip-restriction")
+  'json',
+  Uri.parse('file:ip-restriction'),
 );
 
 export const uarestrictionModel = editor.createModel(
   modelCode.uarestriction,
-  "json",
-  Uri.parse("file:ua-restriction")
+  'json',
+  Uri.parse('file:ua-restriction'),
 );
 
 export const uriblockerModel = editor.createModel(
   modelCode.uriblocker,
-  "json",
-  Uri.parse("file:uri-blocker")
+  'json',
+  Uri.parse('file:uri-blocker'),
 );
 
 /**
-* Model type is traffic as fllows:
-*/
+ * Model type is traffic as fllows:
+ */
 
 export const clientcontrolModel = editor.createModel(
   modelCode.clientcontrol,
-  "json",
-  Uri.parse("file:client-control")
+  'json',
+  Uri.parse('file:client-control'),
 );
 
 export const trafficsplitModel = editor.createModel(
   modelCode.trafficsplit,
-  "json",
-  Uri.parse("file:traffic-split")
+  'json',
+  Uri.parse('file:traffic-split'),
 );
 
 /**
-* Model type is serverless as fllows:
-*/
+ * Model type is serverless as fllows:
+ */
 
 export const awslambdaModel = editor.createModel(
   modelCode.awslambda,
-  "json",
-  Uri.parse("file:aws-lambda")
+  'json',
+  Uri.parse('file:aws-lambda'),
 );
 
 export const azurefunctionsModel = editor.createModel(
   modelCode.azurefunctions,
-  "json",
-  Uri.parse("file:azure-functions")
+  'json',
+  Uri.parse('file:azure-functions'),
 );
 
 export const openwhiskModel = editor.createModel(
   modelCode.openwhisk,
-  "json",
-  Uri.parse("file:openwhisk")
+  'json',
+  Uri.parse('file:openwhisk'),
 );
 
 /**
-* Model type is observability as fllows:
-*/
+ * Model type is observability as fllows:
+ */
 
 export const clickhouseloggerModel = editor.createModel(
   modelCode.clickhouselogger,
-  "json",
-  Uri.parse("file:clickhouse-logger")
+  'json',
+  Uri.parse('file:clickhouse-logger'),
 );
 
 export const fileloggerModel = editor.createModel(
   modelCode.filelogger,
-  "json",
-  Uri.parse("file:file-logger")
+  'json',
+  Uri.parse('file:file-logger'),
 );
 
 export const googlecloudloggingModel = editor.createModel(
   modelCode.googlecloudlogging,
-  "json",
-  Uri.parse("file:google-cloud-logging")
+  'json',
+  Uri.parse('file:google-cloud-logging'),
 );
 
 export const httploggerModel = editor.createModel(
   modelCode.httplogger,
-  "json",
-  Uri.parse("file:http-logger")
+  'json',
+  Uri.parse('file:http-logger'),
 );
 
 export const kafkaloggerModel = editor.createModel(
   modelCode.kafkalogger,
-  "json",
-  Uri.parse("file:kafka-logger")
+  'json',
+  Uri.parse('file:kafka-logger'),
 );
 
-export const logglyModel = editor.createModel(
-  modelCode.loggly,
-  "json",
-  Uri.parse("file:loggly")
-);
+export const logglyModel = editor.createModel(modelCode.loggly, 'json', Uri.parse('file:loggly'));
 
 export const rocketmqloggerModel = editor.createModel(
   modelCode.rocketmqlogger,
-  "json",
-  Uri.parse("file:rocketmq-logger")
+  'json',
+  Uri.parse('file:rocketmq-logger'),
 );
 
 export const skywalkingModel = editor.createModel(
   modelCode.skywalking,
-  "json",
-  Uri.parse("file:sky-walking")
+  'json',
+  Uri.parse('file:sky-walking'),
 );
 
 export const slsloggerModel = editor.createModel(
   modelCode.slslogger,
-  "json",
-  Uri.parse("file:sls-logger")
+  'json',
+  Uri.parse('file:sls-logger'),
 );
 
 export const splunkhecloggingModel = editor.createModel(
   modelCode.splunkheclogging,
-  "json",
-  Uri.parse("file:splunk-hec-logging")
+  'json',
+  Uri.parse('file:splunk-hec-logging'),
 );
 
-export const syslogModel = editor.createModel(
-  modelCode.syslog,
-  "json",
-  Uri.parse("file:syslog")
-);
+export const syslogModel = editor.createModel(modelCode.syslog, 'json', Uri.parse('file:syslog'));
 
 export const tcploggerModel = editor.createModel(
   modelCode.tcplogger,
-  "json",
-  Uri.parse("file:tcp-logger")
+  'json',
+  Uri.parse('file:tcp-logger'),
 );
 
-export const zipkinModel = editor.createModel(
-  modelCode.zipkin,
-  "json",
-  Uri.parse("file:zipkin")
-);
+export const zipkinModel = editor.createModel(modelCode.zipkin, 'json', Uri.parse('file:zipkin'));
 
 /**
-* Model type is other as fllows:
-*/
+ * Model type is other as fllows:
+ */
 
 export const extpluginprereqModel = editor.createModel(
   modelCode.extpluginprereq,
-  "json",
-  Uri.parse("file:ext-plugin-pre-req")
+  'json',
+  Uri.parse('file:ext-plugin-pre-req'),
 );
 
-export const realipModel = editor.createModel(
-  modelCode.realip,
-  "json",
-  Uri.parse("file:real-ip")
-);
+export const realipModel = editor.createModel(modelCode.realip, 'json', Uri.parse('file:real-ip'));
diff --git a/web/src/components/Plugin/PluginDetail.tsx b/web/src/components/Plugin/PluginDetail.tsx
index c4b3996..8fc98ac 100644
--- a/web/src/components/Plugin/PluginDetail.tsx
+++ b/web/src/components/Plugin/PluginDetail.tsx
@@ -14,7 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useEffect, useState } from 'react';
+import { LinkOutlined } from '@ant-design/icons';
+import type { Monaco } from '@monaco-editor/react';
+import Editor from '@monaco-editor/react';
+import type { DefinedError } from 'ajv';
+import Ajv from 'ajv';
+import addFormats from 'ajv-formats';
 import {
   Alert,
   Button,
@@ -29,22 +34,18 @@
   Space,
   Switch,
 } from 'antd';
-import { useIntl } from 'umi';
 import { js_beautify } from 'js-beautify';
-import { LinkOutlined } from '@ant-design/icons';
-import Ajv from 'ajv';
-import type { DefinedError } from 'ajv';
-import addFormats from 'ajv-formats';
 import { compact, omit } from 'lodash';
-import type { Monaco } from '@monaco-editor/react';
-import Editor from '@monaco-editor/react';
 import type { languages } from 'monaco-editor';
+import React, { useEffect, useState } from 'react';
+import { useIntl } from 'umi';
 
-import { fetchSchema } from './service';
 import { json2yaml, yaml2json } from '../../helpers';
-import { PluginForm, PLUGIN_UI_LIST } from './UI';
-import * as allModels from './Models';
 import * as modelCode from './modelCode';
+/* eslint import/namespace: ['error', { allowComputed: true }] */
+import * as allModels from './Models';
+import { fetchSchema } from './service';
+import { PLUGIN_UI_LIST, PluginForm } from './UI';
 
 type Props = {
   name: string;
@@ -118,7 +119,7 @@
     { label: monacoModeList.YAML, value: monacoModeList.YAML },
   ];
   const targetPluginName = pluginList.find((item) => item.name === name)?.name;
-  const filteredName = name.replace("-","");
+  const filteredName = name.replace('-', '');
   const targetModel = allModels[`${filteredName}Model`];
   const targetModelCode = modelCode?.[`${filteredName}`];
 
@@ -487,7 +488,7 @@
             // NOTE: for debug & test
             // @ts-ignore
             window.monacoEditor = editor;
-            if(targetModel)editor.setValue(targetModelCode);
+            if (targetModel) editor.setValue(targetModelCode);
           }}
           options={{
             scrollbar: {
diff --git a/web/src/components/Plugin/PluginPage.tsx b/web/src/components/Plugin/PluginPage.tsx
index ddc77ea..62460cf 100644
--- a/web/src/components/Plugin/PluginPage.tsx
+++ b/web/src/components/Plugin/PluginPage.tsx
@@ -14,16 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import { Alert, Anchor, Button, Card, Form, Layout, Select, Tabs } from 'antd';
+import { omit, orderBy } from 'lodash';
 import React, { useEffect, useState } from 'react';
-import { Anchor, Layout, Card, Button, Form, Select, Alert, Tabs } from 'antd';
-import { orderBy, omit } from 'lodash';
 import { useIntl } from 'umi';
 
 import PanelSection from '@/components/PanelSection';
+
+import defaultPluginImg from '../../../public/static/default-plugin.png';
+import { PLUGIN_FILTER_LIST, PLUGIN_ICON_LIST } from './data';
 import PluginDetail from './PluginDetail';
 import { fetchList, fetchPluginTemplateList } from './service';
-import { PLUGIN_ICON_LIST, PLUGIN_FILTER_LIST } from './data';
-import defaultPluginImg from '../../../public/static/default-plugin.png';
 
 type Props = {
   readonly?: boolean;
diff --git a/web/src/components/Plugin/UI/api-breaker.tsx b/web/src/components/Plugin/UI/api-breaker.tsx
index a319e09..b655b8c 100644
--- a/web/src/components/Plugin/UI/api-breaker.tsx
+++ b/web/src/components/Plugin/UI/api-breaker.tsx
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import type { FormInstance } from 'antd/es/form';
-import { Button, Col, Form, Input, InputNumber, Row } from 'antd';
 import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+import { Button, Col, Form, Input, InputNumber, Row } from 'antd';
+import type { FormInstance } from 'antd/es/form';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Plugin/UI/basic-auth.tsx b/web/src/components/Plugin/UI/basic-auth.tsx
index 507bc51..d3e960c 100644
--- a/web/src/components/Plugin/UI/basic-auth.tsx
+++ b/web/src/components/Plugin/UI/basic-auth.tsx
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import type { FormInstance } from 'antd/es/form';
 import { Form, Input } from 'antd';
+import type { FormInstance } from 'antd/es/form';
+import React from 'react';
 
 type Props = {
   form: FormInstance;
diff --git a/web/src/components/Plugin/UI/cors.tsx b/web/src/components/Plugin/UI/cors.tsx
index 5c2bbd2..ae08775 100644
--- a/web/src/components/Plugin/UI/cors.tsx
+++ b/web/src/components/Plugin/UI/cors.tsx
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import type { FormInstance } from 'antd/es/form';
-import { Button, Col, Form, Input, InputNumber, Row, Select, Switch } from 'antd';
 import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+import { Button, Col, Form, Input, InputNumber, Row, Select, Switch } from 'antd';
+import type { FormInstance } from 'antd/es/form';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Plugin/UI/limit-conn.tsx b/web/src/components/Plugin/UI/limit-conn.tsx
index 7542c17..dc7e744 100644
--- a/web/src/components/Plugin/UI/limit-conn.tsx
+++ b/web/src/components/Plugin/UI/limit-conn.tsx
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import type { FormInstance } from 'antd/es/form';
 import { Form, Input, InputNumber, Select, Switch } from 'antd';
+import type { FormInstance } from 'antd/es/form';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Plugin/UI/limit-count.tsx b/web/src/components/Plugin/UI/limit-count.tsx
index 29c359e..1acfce9 100644
--- a/web/src/components/Plugin/UI/limit-count.tsx
+++ b/web/src/components/Plugin/UI/limit-count.tsx
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState } from 'react';
-import type { FormInstance } from 'antd/es/form';
-import { Button, Col, Form, Input, InputNumber, Row, Select, Switch } from 'antd';
 import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+import { Button, Col, Form, Input, InputNumber, Row, Select, Switch } from 'antd';
+import type { FormInstance } from 'antd/es/form';
+import React, { useState } from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Plugin/UI/limit-req.tsx b/web/src/components/Plugin/UI/limit-req.tsx
index f94d608..7364724 100644
--- a/web/src/components/Plugin/UI/limit-req.tsx
+++ b/web/src/components/Plugin/UI/limit-req.tsx
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import type { FormInstance } from 'antd/es/form';
 import { Form, Input, InputNumber, Select, Switch } from 'antd';
+import type { FormInstance } from 'antd/es/form';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Plugin/UI/plugin.tsx b/web/src/components/Plugin/UI/plugin.tsx
index 5fe0533..6a75a38 100644
--- a/web/src/components/Plugin/UI/plugin.tsx
+++ b/web/src/components/Plugin/UI/plugin.tsx
@@ -14,19 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import type { FormInstance } from 'antd/es/form';
 import { Empty } from 'antd';
+import type { FormInstance } from 'antd/es/form';
+import React from 'react';
 import { useIntl } from 'umi';
 
+import ApiBreaker from './api-breaker';
 import BasicAuth from './basic-auth';
+import Cors from './cors';
+import LimitConn from './limit-conn';
 import LimitCount from './limit-count';
 import LimitReq from './limit-req';
-import ApiBreaker from './api-breaker';
 import ProxyMirror from './proxy-mirror';
-import LimitConn from './limit-conn';
 import RefererRestriction from './referer-restriction';
-import Cors from './cors';
 
 type Props = {
   name: string;
diff --git a/web/src/components/Plugin/UI/proxy-mirror.tsx b/web/src/components/Plugin/UI/proxy-mirror.tsx
index 4fca5a0..5c3754c 100644
--- a/web/src/components/Plugin/UI/proxy-mirror.tsx
+++ b/web/src/components/Plugin/UI/proxy-mirror.tsx
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import type { FormInstance } from 'antd/es/form';
 import { Form, Input, InputNumber } from 'antd';
+import type { FormInstance } from 'antd/es/form';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Plugin/UI/referer-restriction.tsx b/web/src/components/Plugin/UI/referer-restriction.tsx
index a32e9c8..5627686 100644
--- a/web/src/components/Plugin/UI/referer-restriction.tsx
+++ b/web/src/components/Plugin/UI/referer-restriction.tsx
@@ -14,11 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import type { FormInstance } from 'antd/es/form';
-import { Form, Input, Button, Switch, Row, Col } from 'antd';
-import { useIntl } from 'umi';
 import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+import { Button, Col, Form, Input, Row, Switch } from 'antd';
+import type { FormInstance } from 'antd/es/form';
+import React from 'react';
+import { useIntl } from 'umi';
 
 type Props = {
   form: FormInstance;
diff --git a/web/src/components/Plugin/index.ts b/web/src/components/Plugin/index.ts
index cee617d..5365454 100644
--- a/web/src/components/Plugin/index.ts
+++ b/web/src/components/Plugin/index.ts
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-export { default } from './PluginPage';
 export { PLUGIN_ICON_LIST } from './data';
+export { default } from './PluginPage';
diff --git a/web/src/components/Plugin/modelCode.ts b/web/src/components/Plugin/modelCode.ts
index 52f04ba..d75580c 100644
--- a/web/src/components/Plugin/modelCode.ts
+++ b/web/src/components/Plugin/modelCode.ts
@@ -20,8 +20,8 @@
  */
 
 /**
-* Model code of authentication type as fllows:
-*/
+ * Model code of authentication type as fllows:
+ */
 
 export const authzcasbin = `{
     "model_path":
@@ -29,14 +29,14 @@
     "username":
 }`;
 
-export const authzkeycloak =`{
+export const authzkeycloak = `{
     "token_endpoint":
     "permissions":
     "audience":
 }
 `;
 
-export const forwardauth =`{
+export const forwardauth = `{
     "uri":
     "request_headers":
     "upstream_headers":
@@ -72,7 +72,7 @@
 }
 `;
 
-export const openidconnect =`{
+export const openidconnect = `{
     "client_id":
     "client_secret":
     "discovery":
@@ -84,41 +84,41 @@
 `;
 
 /**
-* Model code of security type as fllows:
-*/
+ * Model code of security type as fllows:
+ */
 
-export const csrf =`{
+export const csrf = `{
     "key":
 }
 `;
 
-export const iprestriction =`{
+export const iprestriction = `{
     "whitelist":
 }
 `;
 
-export const uarestriction =`{
+export const uarestriction = `{
     "bypass_missing":
     "allowlist":
     "denylist":
 }
 `;
 
-export const uriblocker =`{
+export const uriblocker = `{
     "block_rules":
 }
 `;
 
 /**
-* Model code of traffic type as fllows:
-*/
+ * Model code of traffic type as fllows:
+ */
 
-export const clientcontrol =`{
+export const clientcontrol = `{
     "max_body_size":
 }
 `;
 
-export const trafficsplit =`{
+export const trafficsplit = `{
     "rules": [
         {
             "weighted_upstreams": [
@@ -145,17 +145,17 @@
 `;
 
 /**
-* Model code of serverless type as fllows:
-*/
+ * Model code of serverless type as fllows:
+ */
 
-export const awslambda =`{
+export const awslambda = `{
   "token_endpoint":
   "permissions":
   "audience":
 }
 `;
 
-export const azurefunctions =`{
+export const azurefunctions = `{
     "azure-functions": {
         "function_uri":
         "authorization": {
@@ -165,7 +165,7 @@
 }
 `;
 
-export const openwhisk =`{
+export const openwhisk = `{
     "api_host":
     "service_token":
     "namespace":
@@ -174,10 +174,10 @@
 `;
 
 /**
-* Model code of observability type as fllows:
-*/
+ * Model code of observability type as fllows:
+ */
 
-export const clickhouselogger =`{
+export const clickhouselogger = `{
     "user":
     "password":
     "database":
@@ -186,12 +186,12 @@
 }
 `;
 
-export const filelogger =`{
+export const filelogger = `{
     "path":
 }
 `;
 
-export const googlecloudlogging =`{
+export const googlecloudlogging = `{
     "auth_config":{
         "project_id":
         "private_key":
@@ -211,12 +211,12 @@
 }
 `;
 
-export const httplogger =`{
+export const httplogger = `{
     "uri":
 }
 `;
 
-export const kafkalogger =`{
+export const kafkalogger = `{
     "broker_list" :
     "kafka_topic" :
     "key" :
@@ -225,7 +225,7 @@
 }
 `;
 
-export const loggly =`{
+export const loggly = `{
     "nameserver_list":
     "topic":
     "batch_max_size":
@@ -233,24 +233,24 @@
 }
 `;
 
-export const rocketmqlogger =`{
+export const rocketmqlogger = `{
   "token_endpoint":
   "permissions":
   "audience":
 }
 `;
 
-export const skywalking =`{
+export const skywalking = `{
     "sample_ratio":
 }
 `;
 
-export const skywalkinglogger =`{
+export const skywalkinglogger = `{
     "endpoint_addr":
 }
 `;
 
-export const slslogger =`{
+export const slslogger = `{
     "host":
     "port":
     "project":
@@ -261,7 +261,7 @@
 }
 `;
 
-export const splunkheclogging =`{
+export const splunkheclogging = `{
     "endpoint":{
         "uri":
         "token":
@@ -276,14 +276,14 @@
 }
 `;
 
-export const syslog =`{
+export const syslog = `{
     "host":
     "port":
     "flush_limit":
 }
 `;
 
-export const tcplogger =`{
+export const tcplogger = `{
     "host":
     "port":
     "tls":
@@ -292,7 +292,7 @@
 }
 `;
 
-export const zipkin =`{
+export const zipkin = `{
     "endpoint":
     "sample_ratio":
     "service_name":
@@ -301,15 +301,15 @@
 `;
 
 /**
-* Model code of other type as fllows:
-*/
+ * Model code of other type as fllows:
+ */
 
-export const extpluginprereq =`{
+export const extpluginprereq = `{
     "conf":
 }
 `;
 
-export const realip =`{
+export const realip = `{
     "source":
     "trusted_addresses":
 }
diff --git a/web/src/components/PluginFlow/PluginFlow.tsx b/web/src/components/PluginFlow/PluginFlow.tsx
index 7794139..86e07a5 100644
--- a/web/src/components/PluginFlow/PluginFlow.tsx
+++ b/web/src/components/PluginFlow/PluginFlow.tsx
@@ -14,11 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import type { Cell } from '@antv/x6';
+import { Alert, Form, Input, Modal } from 'antd';
 import React, { useEffect, useState } from 'react';
-import { Modal, Form, Input, Alert } from 'antd';
-import { Cell } from '@antv/x6';
 import { useIntl } from 'umi';
 
+import PluginDetail from '../Plugin/PluginDetail';
+import { fetchList } from '../Plugin/service';
 import FlowGraph from './components/FlowGraph';
 import Toolbar from './components/Toolbar';
 import {
@@ -29,8 +31,6 @@
   FlowGraphEvent,
 } from './constants';
 import styles from './style.less';
-import PluginDetail from '../Plugin/PluginDetail';
-import { fetchList } from '../Plugin/service';
 
 type Props = {
   chart: {
diff --git a/web/src/components/PluginFlow/components/FlowGraph/FlowGraph.ts b/web/src/components/PluginFlow/components/FlowGraph/FlowGraph.ts
index cb35920..0826c64 100644
--- a/web/src/components/PluginFlow/components/FlowGraph/FlowGraph.ts
+++ b/web/src/components/PluginFlow/components/FlowGraph/FlowGraph.ts
@@ -14,12 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Graph, Addon, FunctionExt } from '@antv/x6';
-import type { Model, Cell } from '@antv/x6';
-import { formatMessage } from 'umi';
-import { notification } from 'antd';
-
 import './shapes';
+
+import type { Cell, Model } from '@antv/x6';
+import { Addon, FunctionExt, Graph } from '@antv/x6';
+import { notification } from 'antd';
+import { formatMessage } from 'umi';
+
 import {
   DEFAULT_OPINIONS,
   DEFAULT_PLUGIN_FLOW_DATA,
diff --git a/web/src/components/PluginFlow/components/Toolbar/index.tsx b/web/src/components/PluginFlow/components/Toolbar/index.tsx
index 8cb2cf3..094d2da 100644
--- a/web/src/components/PluginFlow/components/Toolbar/index.tsx
+++ b/web/src/components/PluginFlow/components/Toolbar/index.tsx
@@ -21,21 +21,23 @@
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
-import React, { useEffect, useState } from 'react';
-import { Toolbar } from '@antv/x6-react-components';
-import FlowGraph from '../FlowGraph';
-import { DataUri } from '@antv/x6';
+import '@antv/x6-react-components/es/toolbar/style/index.css';
+
 import {
   ClearOutlined,
-  SaveOutlined,
-  PrinterOutlined,
-  UndoOutlined,
-  RedoOutlined,
   CopyOutlined,
+  PrinterOutlined,
+  RedoOutlined,
+  SaveOutlined,
   ScissorOutlined,
   SnippetsOutlined,
+  UndoOutlined,
 } from '@ant-design/icons';
-import '@antv/x6-react-components/es/toolbar/style/index.css';
+import { DataUri } from '@antv/x6';
+import { Toolbar } from '@antv/x6-react-components';
+import React, { useEffect, useState } from 'react';
+
+import FlowGraph from '../FlowGraph';
 
 const { Item, Group } = Toolbar;
 
diff --git a/web/src/components/PluginFlow/constants.ts b/web/src/components/PluginFlow/constants.ts
index f1d3987..07eb77d 100644
--- a/web/src/components/PluginFlow/constants.ts
+++ b/web/src/components/PluginFlow/constants.ts
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Shape, Dom } from '@antv/x6';
-import type { Addon, Graph, Cell } from '@antv/x6';
+import type { Addon, Cell, Graph } from '@antv/x6';
+import { Dom, Shape } from '@antv/x6';
 import { formatMessage } from 'umi';
 
 export const DEFAULT_STENCIL_WIDTH = 280;
diff --git a/web/src/components/PluginFlow/locales/tr-TR.ts b/web/src/components/PluginFlow/locales/tr-TR.ts
index 2c8041f..93bb144 100644
--- a/web/src/components/PluginFlow/locales/tr-TR.ts
+++ b/web/src/components/PluginFlow/locales/tr-TR.ts
@@ -28,15 +28,14 @@
   'component.plugin-flow.text.nodes-area': 'Uygun nodelar',
   'component.plugin-flow.text.nodes.not-found': 'Bulunamadı',
   'component.plugin-flow.text.search-nodes.placeholder': 'İsme göre eklenti ara',
-  'component.plugin-flow.text.condition-rule.tooltip':
-    'Nodeların karar durumu. örnek: code == 503',
+  'component.plugin-flow.text.condition-rule.tooltip': 'Nodeların karar durumu. örnek: code == 503',
   'component.plugin-flow.text.line': 'Çizgi',
   'component.plugin-flow.text.grid': 'Kare',
   'component.plugin-flow.text.background': 'Arkaplan',
   'component.plugin-flow.text.node': 'Node',
   'component.plugin-flow.text.text': 'Metin',
   'component.plugin-flow.text.condition-without-configuration':
-    "Lütfen tüm durum nodelarının verilerini kontrol edin",
+    'Lütfen tüm durum nodelarının verilerini kontrol edin',
   'component.plugin-flow.text.preview.readonly':
     'NOT: Aşağıdaki çekmecedeki işlemleriniz korunmayacak.',
   'component.plugin-flow.text.both-modes-exist':
diff --git a/web/src/components/RawDataEditor/RawDataEditor.tsx b/web/src/components/RawDataEditor/RawDataEditor.tsx
index 7fd09bb..1c003d5 100644
--- a/web/src/components/RawDataEditor/RawDataEditor.tsx
+++ b/web/src/components/RawDataEditor/RawDataEditor.tsx
@@ -14,15 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useEffect, useState } from 'react';
-import { Button, Drawer, notification, PageHeader, Select, Space } from 'antd';
 import { LinkOutlined } from '@ant-design/icons';
-import { CopyToClipboard } from 'react-copy-to-clipboard';
-import { useIntl } from 'umi';
-import { js_beautify } from 'js-beautify';
 import type { Monaco } from '@monaco-editor/react';
 import Editor from '@monaco-editor/react';
+import { Button, Drawer, notification, PageHeader, Select, Space } from 'antd';
+import { js_beautify } from 'js-beautify';
 import type { languages } from 'monaco-editor';
+import React, { useEffect, useState } from 'react';
+import { CopyToClipboard } from 'react-copy-to-clipboard';
+import { useIntl } from 'umi';
 
 import { json2yaml, yaml2json } from '../../helpers';
 
diff --git a/web/src/components/RawDataEditor/locales/tr-TR.ts b/web/src/components/RawDataEditor/locales/tr-TR.ts
index d4776b8..3aa399a 100644
--- a/web/src/components/RawDataEditor/locales/tr-TR.ts
+++ b/web/src/components/RawDataEditor/locales/tr-TR.ts
@@ -15,5 +15,5 @@
  * limitations under the License.
  */
 export default {
-  'component.rawDataEditor.tip': "Şu anda düzenleme modunu desteklemiyor",
+  'component.rawDataEditor.tip': 'Şu anda düzenleme modunu desteklemiyor',
 };
diff --git a/web/src/components/RightContent/AvatarDropdown.tsx b/web/src/components/RightContent/AvatarDropdown.tsx
index 9221a05..6e16726 100644
--- a/web/src/components/RightContent/AvatarDropdown.tsx
+++ b/web/src/components/RightContent/AvatarDropdown.tsx
@@ -21,12 +21,12 @@
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
-import React, { useCallback } from 'react';
-import { SettingOutlined, UserOutlined, SettingFilled, LogoutOutlined } from '@ant-design/icons';
+import { LogoutOutlined, SettingFilled, SettingOutlined, UserOutlined } from '@ant-design/icons';
 import { Avatar, Menu, Spin } from 'antd';
-import { history, useModel, useIntl } from 'umi';
-
 import { stringify } from 'querystring';
+import React, { useCallback } from 'react';
+import { history, useIntl, useModel } from 'umi';
+
 import HeaderDropdown from '../HeaderDropdown';
 import styles from './index.less';
 
diff --git a/web/src/components/RightContent/index.tsx b/web/src/components/RightContent/index.tsx
index f2c425f..51d69bb 100644
--- a/web/src/components/RightContent/index.tsx
+++ b/web/src/components/RightContent/index.tsx
@@ -21,10 +21,10 @@
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
-import { Tooltip, Tag, Space } from 'antd';
 import { QuestionCircleOutlined } from '@ant-design/icons';
+import { Space, Tag, Tooltip } from 'antd';
 import React from 'react';
-import { useModel, SelectLang } from 'umi';
+import { SelectLang, useModel } from 'umi';
 
 import Avatar from './AvatarDropdown';
 import styles from './index.less';
diff --git a/web/src/components/Upstream/UpstreamForm.tsx b/web/src/components/Upstream/UpstreamForm.tsx
index 7d1a34d..b75332c 100644
--- a/web/src/components/Upstream/UpstreamForm.tsx
+++ b/web/src/components/Upstream/UpstreamForm.tsx
@@ -15,24 +15,25 @@
  * limitations under the License.
  */
 import { Divider, Form, notification, Switch } from 'antd';
-import React, { useState, forwardRef, useImperativeHandle, useEffect } from 'react';
-import { useIntl, useLocation } from 'umi';
 import type { FormInstance } from 'antd/es/form';
+import React, { forwardRef, useEffect, useImperativeHandle, useState } from 'react';
+import { useIntl, useLocation } from 'umi';
 
 import PanelSection from '@/components/PanelSection';
-import PassiveCheck from './components/passive-check';
+
 import ActiveCheck from './components/active-check';
+import KeepalivePool from './components/KeepalivePool';
+import PassHost from './components/PassHost';
+import PassiveCheck from './components/passive-check';
+import Retries from './components/Retries';
+import RetryTimeout from './components/RetryTimeout';
 import Scheme from './components/Scheme';
 import Timeout from './components/Timeout';
+import TLSComponent from './components/TLS';
 import Type from './components/Type';
 import UpstreamSelector from './components/UpstreamSelector';
-import Retries from './components/Retries';
-import PassHost from './components/PassHost';
-import TLSComponent from './components/TLS';
 import UpstreamType from './components/UpstreamType';
 import { convertToRequestData } from './service';
-import RetryTimeout from './components/RetryTimeout';
-import KeepalivePool from './components/KeepalivePool';
 
 type Upstream = {
   name?: string;
diff --git a/web/src/components/Upstream/components/KeepalivePool.tsx b/web/src/components/Upstream/components/KeepalivePool.tsx
index f1fcc98..7acb08f 100644
--- a/web/src/components/Upstream/components/KeepalivePool.tsx
+++ b/web/src/components/Upstream/components/KeepalivePool.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import { Col, Form, InputNumber, Row } from 'antd';
 import React from 'react';
-import { Row, Col, Form, InputNumber } from 'antd';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/Nodes.tsx b/web/src/components/Upstream/components/Nodes.tsx
index 0747c51..4012254 100644
--- a/web/src/components/Upstream/components/Nodes.tsx
+++ b/web/src/components/Upstream/components/Nodes.tsx
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import { Form, Input, Row, Col, InputNumber, Button } from 'antd';
-import { useIntl } from 'umi';
 import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+import { Button, Col, Form, Input, InputNumber, Row } from 'antd';
+import React from 'react';
+import { useIntl } from 'umi';
 
 import { removeBtnStyle } from '..';
 
diff --git a/web/src/components/Upstream/components/PassHost.tsx b/web/src/components/Upstream/components/PassHost.tsx
index 7382ba0..a813e68 100644
--- a/web/src/components/Upstream/components/PassHost.tsx
+++ b/web/src/components/Upstream/components/PassHost.tsx
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import type { FormInstance } from 'antd';
 import { Form, Input, notification, Select } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/Retries.tsx b/web/src/components/Upstream/components/Retries.tsx
index 7baf7b4..9dcb3f3 100644
--- a/web/src/components/Upstream/components/Retries.tsx
+++ b/web/src/components/Upstream/components/Retries.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, InputNumber } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/RetryTimeout.tsx b/web/src/components/Upstream/components/RetryTimeout.tsx
index 2fab431..92318f2 100644
--- a/web/src/components/Upstream/components/RetryTimeout.tsx
+++ b/web/src/components/Upstream/components/RetryTimeout.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, InputNumber } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/Scheme.tsx b/web/src/components/Upstream/components/Scheme.tsx
index c173c26..200ead4 100644
--- a/web/src/components/Upstream/components/Scheme.tsx
+++ b/web/src/components/Upstream/components/Scheme.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, Select } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 const options = [
diff --git a/web/src/components/Upstream/components/ServiceDiscovery.tsx b/web/src/components/Upstream/components/ServiceDiscovery.tsx
index cbd6eb4..7329dc5 100644
--- a/web/src/components/Upstream/components/ServiceDiscovery.tsx
+++ b/web/src/components/Upstream/components/ServiceDiscovery.tsx
@@ -14,10 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import type { FormInstance } from 'antd';
 import { Form, Input, Select } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
+
 import ServiceDiscoveryArgs from '@/components/Upstream/components/ServiceDiscoveryArgs';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/ServiceDiscoveryArgs.tsx b/web/src/components/Upstream/components/ServiceDiscoveryArgs.tsx
index 12d6425..47c0523 100644
--- a/web/src/components/Upstream/components/ServiceDiscoveryArgs.tsx
+++ b/web/src/components/Upstream/components/ServiceDiscoveryArgs.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, Input } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/TLS.tsx b/web/src/components/Upstream/components/TLS.tsx
index b247271..c5f4007 100644
--- a/web/src/components/Upstream/components/TLS.tsx
+++ b/web/src/components/Upstream/components/TLS.tsx
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import type { FormInstance } from 'antd';
+import { Col, Form, Input, Row, Select } from 'antd';
 import React from 'react';
-import { Form, Row, Col, Select, FormInstance, Input } from 'antd';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/Timeout.tsx b/web/src/components/Upstream/components/Timeout.tsx
index 2063018..df2be6d 100644
--- a/web/src/components/Upstream/components/Timeout.tsx
+++ b/web/src/components/Upstream/components/Timeout.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, InputNumber } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 import TimeUnit from './TimeUnit';
diff --git a/web/src/components/Upstream/components/Type.tsx b/web/src/components/Upstream/components/Type.tsx
index a710ce5..8e81ef2 100644
--- a/web/src/components/Upstream/components/Type.tsx
+++ b/web/src/components/Upstream/components/Type.tsx
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState } from 'react';
 import type { FormInstance } from 'antd';
 import { AutoComplete, Form, Select } from 'antd';
+import React, { useState } from 'react';
 import { useIntl } from 'umi';
 
-import { HashOnEnum, CommonHashKeyEnum, AlgorithmEnum } from '../constant';
+import { AlgorithmEnum, CommonHashKeyEnum, HashOnEnum } from '../constant';
 
 type Props = {
   readonly?: boolean;
diff --git a/web/src/components/Upstream/components/UpstreamSelector.tsx b/web/src/components/Upstream/components/UpstreamSelector.tsx
index d5eaaca..0b4e367 100644
--- a/web/src/components/Upstream/components/UpstreamSelector.tsx
+++ b/web/src/components/Upstream/components/UpstreamSelector.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, Select } from 'antd';
+import React from 'react';
 import { useIntl, useLocation } from 'umi';
 
 type Upstream = {
diff --git a/web/src/components/Upstream/components/UpstreamType.tsx b/web/src/components/Upstream/components/UpstreamType.tsx
index 608f036..ffa5244 100644
--- a/web/src/components/Upstream/components/UpstreamType.tsx
+++ b/web/src/components/Upstream/components/UpstreamType.tsx
@@ -14,10 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, Select } from 'antd';
-import { useIntl } from 'umi';
 import type { FormInstance } from 'antd/lib/form';
+import React from 'react';
+import { useIntl } from 'umi';
+
 import Nodes from '@/components/Upstream/components/Nodes';
 import ServiceDiscovery from '@/components/Upstream/components/ServiceDiscovery';
 
diff --git a/web/src/components/Upstream/components/active-check/Concurrency.tsx b/web/src/components/Upstream/components/active-check/Concurrency.tsx
index 4233ee3..5f25dc7 100644
--- a/web/src/components/Upstream/components/active-check/Concurrency.tsx
+++ b/web/src/components/Upstream/components/active-check/Concurrency.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, InputNumber } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/active-check/Healthy/HttpStatuses.tsx b/web/src/components/Upstream/components/active-check/Healthy/HttpStatuses.tsx
index cf91467..d1e5da9 100644
--- a/web/src/components/Upstream/components/active-check/Healthy/HttpStatuses.tsx
+++ b/web/src/components/Upstream/components/active-check/Healthy/HttpStatuses.tsx
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import { Form, Row, Col, Button, InputNumber } from 'antd';
-import { useIntl } from 'umi';
 import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+import { Button, Col, Form, InputNumber, Row } from 'antd';
+import React from 'react';
+import { useIntl } from 'umi';
 
 import { removeBtnStyle } from '@/components/Upstream';
 
diff --git a/web/src/components/Upstream/components/active-check/Healthy/Interval.tsx b/web/src/components/Upstream/components/active-check/Healthy/Interval.tsx
index 53240d0..8892bec 100644
--- a/web/src/components/Upstream/components/active-check/Healthy/Interval.tsx
+++ b/web/src/components/Upstream/components/active-check/Healthy/Interval.tsx
@@ -14,9 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, InputNumber } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
+
 import TimeUnit from '../../TimeUnit';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/active-check/Healthy/index.ts b/web/src/components/Upstream/components/active-check/Healthy/index.ts
index e6ea2ca..682590a 100644
--- a/web/src/components/Upstream/components/active-check/Healthy/index.ts
+++ b/web/src/components/Upstream/components/active-check/Healthy/index.ts
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import HttpStatuses from './HttpStatuses';
 import Interval from './Interval';
 import Successes from './Successes';
-import HttpStatuses from './HttpStatuses';
 
 export default {
   Interval,
diff --git a/web/src/components/Upstream/components/active-check/Host.tsx b/web/src/components/Upstream/components/active-check/Host.tsx
index 10fe1ac..3244e2d 100644
--- a/web/src/components/Upstream/components/active-check/Host.tsx
+++ b/web/src/components/Upstream/components/active-check/Host.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, Input } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/active-check/HttpPath.tsx b/web/src/components/Upstream/components/active-check/HttpPath.tsx
index c62a81a..f269007 100644
--- a/web/src/components/Upstream/components/active-check/HttpPath.tsx
+++ b/web/src/components/Upstream/components/active-check/HttpPath.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, Input } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/active-check/HttpsVerifyCertificate.tsx b/web/src/components/Upstream/components/active-check/HttpsVerifyCertificate.tsx
index f53c583..b86bc11 100644
--- a/web/src/components/Upstream/components/active-check/HttpsVerifyCertificate.tsx
+++ b/web/src/components/Upstream/components/active-check/HttpsVerifyCertificate.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, Switch } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/active-check/Port.tsx b/web/src/components/Upstream/components/active-check/Port.tsx
index e9069b0..ba89c15 100644
--- a/web/src/components/Upstream/components/active-check/Port.tsx
+++ b/web/src/components/Upstream/components/active-check/Port.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, InputNumber } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/active-check/ReqHeaders.tsx b/web/src/components/Upstream/components/active-check/ReqHeaders.tsx
index ce0d72e..09b7f96 100644
--- a/web/src/components/Upstream/components/active-check/ReqHeaders.tsx
+++ b/web/src/components/Upstream/components/active-check/ReqHeaders.tsx
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import { Form, Row, Col, Input, Button } from 'antd';
-import { useIntl } from 'umi';
 import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+import { Button, Col, Form, Input, Row } from 'antd';
+import React from 'react';
+import { useIntl } from 'umi';
 
 import { removeBtnStyle } from '../../constant';
 
diff --git a/web/src/components/Upstream/components/active-check/Timeout.tsx b/web/src/components/Upstream/components/active-check/Timeout.tsx
index 1289cca..fb79971 100644
--- a/web/src/components/Upstream/components/active-check/Timeout.tsx
+++ b/web/src/components/Upstream/components/active-check/Timeout.tsx
@@ -14,9 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, InputNumber } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
+
 import TimeUnit from '../TimeUnit';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/active-check/Type.tsx b/web/src/components/Upstream/components/active-check/Type.tsx
index cb7ab79..26c06ff 100644
--- a/web/src/components/Upstream/components/active-check/Type.tsx
+++ b/web/src/components/Upstream/components/active-check/Type.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import { Col, Form, Row, Select } from 'antd';
 import React from 'react';
-import { Form, Select, Row, Col } from 'antd';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/active-check/Unhealthy/HttpStatuses.tsx b/web/src/components/Upstream/components/active-check/Unhealthy/HttpStatuses.tsx
index 93eb4d7..3c52abe 100644
--- a/web/src/components/Upstream/components/active-check/Unhealthy/HttpStatuses.tsx
+++ b/web/src/components/Upstream/components/active-check/Unhealthy/HttpStatuses.tsx
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import { Form, Row, Col, Button, InputNumber } from 'antd';
-import { useIntl } from 'umi';
 import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+import { Button, Col, Form, InputNumber, Row } from 'antd';
+import React from 'react';
+import { useIntl } from 'umi';
 
 import { removeBtnStyle } from '@/components/Upstream';
 
diff --git a/web/src/components/Upstream/components/active-check/Unhealthy/Interval.tsx b/web/src/components/Upstream/components/active-check/Unhealthy/Interval.tsx
index 38c9826..a968db9 100644
--- a/web/src/components/Upstream/components/active-check/Unhealthy/Interval.tsx
+++ b/web/src/components/Upstream/components/active-check/Unhealthy/Interval.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, InputNumber } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 import TimeUnit from '../../TimeUnit';
diff --git a/web/src/components/Upstream/components/active-check/Unhealthy/Timeouts.tsx b/web/src/components/Upstream/components/active-check/Unhealthy/Timeouts.tsx
index 2ba2280..5853a5c 100644
--- a/web/src/components/Upstream/components/active-check/Unhealthy/Timeouts.tsx
+++ b/web/src/components/Upstream/components/active-check/Unhealthy/Timeouts.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, InputNumber } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/active-check/Unhealthy/index.ts b/web/src/components/Upstream/components/active-check/Unhealthy/index.ts
index 06d6c8b..3362417 100644
--- a/web/src/components/Upstream/components/active-check/Unhealthy/index.ts
+++ b/web/src/components/Upstream/components/active-check/Unhealthy/index.ts
@@ -14,11 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import Timeouts from './Timeouts';
-import Interval from './Interval';
-import HttpStatuses from './HttpStatuses';
 import HttpFailures from './HttpFailures';
+import HttpStatuses from './HttpStatuses';
+import Interval from './Interval';
 import TCPFailures from './TCPFailures';
+import Timeouts from './Timeouts';
 
 export default {
   Timeouts,
diff --git a/web/src/components/Upstream/components/active-check/index.ts b/web/src/components/Upstream/components/active-check/index.ts
index 4b82188..c970324 100644
--- a/web/src/components/Upstream/components/active-check/index.ts
+++ b/web/src/components/Upstream/components/active-check/index.ts
@@ -14,17 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import Unhealthy from './Unhealthy';
+import Concurrency from './Concurrency';
 import Healthy from './Healthy';
-
+import Host from './Host';
+import HttpPath from './HttpPath';
+import HttpsVerifyCertificate from './HttpsVerifyCertificate';
+import Port from './Port';
+import ReqHeaders from './ReqHeaders';
 import Timeout from './Timeout';
 import Type from './Type';
-import ReqHeaders from './ReqHeaders';
-import Host from './Host';
-import Port from './Port';
-import HttpPath from './HttpPath';
-import Concurrency from './Concurrency';
-import HttpsVerifyCertificate from './HttpsVerifyCertificate';
+import Unhealthy from './Unhealthy';
 
 export default {
   Unhealthy,
diff --git a/web/src/components/Upstream/components/passive-check/Healthy/HttpStatuses.tsx b/web/src/components/Upstream/components/passive-check/Healthy/HttpStatuses.tsx
index 6c93ef6..e884796 100644
--- a/web/src/components/Upstream/components/passive-check/Healthy/HttpStatuses.tsx
+++ b/web/src/components/Upstream/components/passive-check/Healthy/HttpStatuses.tsx
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import { Form, Row, Col, InputNumber, Button } from 'antd';
-import { useIntl } from 'umi';
 import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+import { Button, Col, Form, InputNumber, Row } from 'antd';
+import React from 'react';
+import { useIntl } from 'umi';
 
 import { removeBtnStyle } from '@/components/Upstream/constant';
 
diff --git a/web/src/components/Upstream/components/passive-check/Healthy/Successes.tsx b/web/src/components/Upstream/components/passive-check/Healthy/Successes.tsx
index 714f9d9..949dea4 100644
--- a/web/src/components/Upstream/components/passive-check/Healthy/Successes.tsx
+++ b/web/src/components/Upstream/components/passive-check/Healthy/Successes.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, InputNumber } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/passive-check/Type.tsx b/web/src/components/Upstream/components/passive-check/Type.tsx
index 881b060..ad3527c 100644
--- a/web/src/components/Upstream/components/passive-check/Type.tsx
+++ b/web/src/components/Upstream/components/passive-check/Type.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import { Col, Form, Row, Select } from 'antd';
 import React from 'react';
-import { Form, Select, Row, Col } from 'antd';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/passive-check/Unhealthy/HttpFailures.tsx b/web/src/components/Upstream/components/passive-check/Unhealthy/HttpFailures.tsx
index 632bd15..d9cb3ad 100644
--- a/web/src/components/Upstream/components/passive-check/Unhealthy/HttpFailures.tsx
+++ b/web/src/components/Upstream/components/passive-check/Unhealthy/HttpFailures.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, InputNumber } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/passive-check/Unhealthy/HttpStatuses.tsx b/web/src/components/Upstream/components/passive-check/Unhealthy/HttpStatuses.tsx
index 3b3e37b..e40e8eb 100644
--- a/web/src/components/Upstream/components/passive-check/Unhealthy/HttpStatuses.tsx
+++ b/web/src/components/Upstream/components/passive-check/Unhealthy/HttpStatuses.tsx
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import { Form, Row, Col, InputNumber, Button } from 'antd';
-import { useIntl } from 'umi';
 import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+import { Button, Col, Form, InputNumber, Row } from 'antd';
+import React from 'react';
+import { useIntl } from 'umi';
 
 import { removeBtnStyle } from '@/components/Upstream/constant';
 
diff --git a/web/src/components/Upstream/components/passive-check/Unhealthy/TcpFailures.tsx b/web/src/components/Upstream/components/passive-check/Unhealthy/TcpFailures.tsx
index fec689e..18bb111 100644
--- a/web/src/components/Upstream/components/passive-check/Unhealthy/TcpFailures.tsx
+++ b/web/src/components/Upstream/components/passive-check/Unhealthy/TcpFailures.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, InputNumber } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/passive-check/Unhealthy/Timeouts.tsx b/web/src/components/Upstream/components/passive-check/Unhealthy/Timeouts.tsx
index aeaacf7..b086689 100644
--- a/web/src/components/Upstream/components/passive-check/Unhealthy/Timeouts.tsx
+++ b/web/src/components/Upstream/components/passive-check/Unhealthy/Timeouts.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, InputNumber } from 'antd';
+import React from 'react';
 import { useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/components/Upstream/components/passive-check/Unhealthy/index.ts b/web/src/components/Upstream/components/passive-check/Unhealthy/index.ts
index e00e521..c33c941 100644
--- a/web/src/components/Upstream/components/passive-check/Unhealthy/index.ts
+++ b/web/src/components/Upstream/components/passive-check/Unhealthy/index.ts
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import Timeouts from './Timeouts';
 import HttpFailures from './HttpFailures';
-import TcpFailures from './TcpFailures';
 import HttpStatuses from './HttpStatuses';
+import TcpFailures from './TcpFailures';
+import Timeouts from './Timeouts';
 
 export default {
   Timeouts,
diff --git a/web/src/components/Upstream/components/passive-check/index.ts b/web/src/components/Upstream/components/passive-check/index.ts
index 1756651..926e8e7 100644
--- a/web/src/components/Upstream/components/passive-check/index.ts
+++ b/web/src/components/Upstream/components/passive-check/index.ts
@@ -15,8 +15,8 @@
  * limitations under the License.
  */
 import Healthy from './Healthy';
-import Unhealthy from './Unhealthy';
 import Type from './Type';
+import Unhealthy from './Unhealthy';
 
 export default {
   Healthy,
diff --git a/web/src/components/Upstream/index.ts b/web/src/components/Upstream/index.ts
index f653d02..23eeda7 100644
--- a/web/src/components/Upstream/index.ts
+++ b/web/src/components/Upstream/index.ts
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-export { default } from './UpstreamForm';
 export * from './constant';
+export { default } from './UpstreamForm';
diff --git a/web/src/components/Upstream/locales/tr-TR.ts b/web/src/components/Upstream/locales/tr-TR.ts
index 4cc31ed..56ace27 100644
--- a/web/src/components/Upstream/locales/tr-TR.ts
+++ b/web/src/components/Upstream/locales/tr-TR.ts
@@ -63,7 +63,8 @@
     'Yeniden denemelerin sürdürülebileceği saniye miktarını sınırlamak için bir sayı yapılandırın ve önceki istek ve yeniden deneme istekleri çok uzun sürdüyse yeniden denemelere devam etmeyin. 0, yeniden deneme zaman aşımı mekanizmasını devre dışı bırakmak anlamına gelir.',
 
   'component.upstream.fields.keepalive_pool': 'Keepalive Poolu',
-  'component.upstream.fields.keepalive_pool.tooltip': 'Upstream için bağımsız bir keepalive poolu ayarla',
+  'component.upstream.fields.keepalive_pool.tooltip':
+    'Upstream için bağımsız bir keepalive poolu ayarla',
   'component.upstream.fields.keepalive_pool.size': 'Ölçü',
   'component.upstream.fields.keepalive_pool.size.placeholder': 'Ölçüyü giriniz',
   'component.upstream.fields.keepalive_pool.idle_timeout': 'Boşta kalma zaman aşımı',
@@ -90,7 +91,7 @@
 
   'component.upstream.fields.checks.active.http_path': 'HTTP Yolu',
   'component.upstream.fields.checks.active.http_path.tooltip':
-  'Hedefe HTTP GET isteği düzenlenirken kullanılması gereken yoldur. Öntanımlı değer /.',
+    'Hedefe HTTP GET isteği düzenlenirken kullanılması gereken yoldur. Öntanımlı değer /.',
   'component.upstream.fields.checks.active.http_path.placeholder':
     'Lütfen HTTP istek yolunu giriniz. ',
 
@@ -134,9 +135,8 @@
 
   'component.upstream.fields.checks.active.unhealthy.interval': 'Aralıklar',
   'component.upstream.fields.checks.active.unhealthy.interval.tooltip':
-  'Sağlıksız hedefler için aktif sağlık kontrolleri arasındaki aralık (saniye cinsinden). Sıfır değeri, sağlıklı hedefler için aktif probların gerçekleştirilmemesi gerektiğini gösterir.',
-  'component.upstream.fields.checks.active.unhealthy.required':
-    'Lütfen sağlıksız aralığı girin ',
+    'Sağlıksız hedefler için aktif sağlık kontrolleri arasındaki aralık (saniye cinsinden). Sıfır değeri, sağlıklı hedefler için aktif probların gerçekleştirilmemesi gerektiğini gösterir.',
+  'component.upstream.fields.checks.active.unhealthy.required': 'Lütfen sağlıksız aralığı girin ',
 
   'component.upstream.fields.checks.passive.healthy.successes': 'Başarımlar',
   'component.upstream.fields.checks.passive.healthy.successes.tooltip':
@@ -146,7 +146,7 @@
 
   'component.upstream.fields.checks.passive.unhealthy.timeouts': 'Zaman Aşımı',
   'component.upstream.fields.checks.passive.unhealthy.timeouts.tooltip':
-  'Pasif sağlık kontrollerinde gözlemlendiği gibi, bir hedefi sağlıksız olarak değerlendirmek için proxy trafiğindeki zaman aşımlarının sayısı.',
+    'Pasif sağlık kontrollerinde gözlemlendiği gibi, bir hedefi sağlıksız olarak değerlendirmek için proxy trafiğindeki zaman aşımlarının sayısı.',
 
   'component.upstream.other.none': 'Yok (Yalnızca hizmeti bağlarken kullanılabilir)',
   'component.upstream.other.pass_host-with-multiple-nodes.title':
@@ -154,6 +154,7 @@
   'component.upstream.other.pass_host-with-multiple-nodes':
     'Hedef düğüm listesinde bir ana bilgisayar adı veya IP kullanırken yalnızca bir hedef düğüm olduğundan emin olun',
   'component.upstream.other.health-check.passive-only':
-  'Pasif sağlık denetimi etkinleştirildiğinde, aynı anda etkin sağlık denetiminin de etkinleştirilmesi gerekir.',
-  'component.upstream.other.health-check.invalid': 'Lütfen sağlık kontrolü yapılandırmasını kontrol edin',
+    'Pasif sağlık denetimi etkinleştirildiğinde, aynı anda etkin sağlık denetiminin de etkinleştirilmesi gerekir.',
+  'component.upstream.other.health-check.invalid':
+    'Lütfen sağlık kontrolü yapılandırmasını kontrol edin',
 };
diff --git a/web/src/components/Upstream/service.ts b/web/src/components/Upstream/service.ts
index 4baa449..c7587d7 100644
--- a/web/src/components/Upstream/service.ts
+++ b/web/src/components/Upstream/service.ts
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 import { notification } from 'antd';
-import { isNil, omitBy, omit, cloneDeep } from 'lodash';
+import { cloneDeep, isNil, omit, omitBy } from 'lodash';
 import { formatMessage, request } from 'umi';
 
 /**
@@ -58,9 +58,9 @@
   // nodes have two types
   // https://github.com/apache/apisix-dashboard/issues/2080
   if (data.nodes instanceof Array) {
-    data['submitNodes'] = data.nodes;
+    data.submitNodes = data.nodes;
   } else if (data.nodes) {
-    data['submitNodes'] = Object.keys(data.nodes as Object).map((key) => ({
+    data.submitNodes = Object.keys(data.nodes as Object).map((key) => ({
       host: key.split(':')[0],
       port: key.split(':')[1],
       weight: (data.nodes as Object)[key],
diff --git a/web/src/components/Upstream/typings.d.ts b/web/src/components/Upstream/typings.d.ts
index 1f9ba96..af074be 100644
--- a/web/src/components/Upstream/typings.d.ts
+++ b/web/src/components/Upstream/typings.d.ts
@@ -35,9 +35,7 @@
     priority?: number;
   };
 
-  type SubmitNode = {
-    [propName: string]: number;
-  };
+  type SubmitNode = Record<string, number>;
 
   type Timeout = {
     connect: number;
diff --git a/web/src/global.tsx b/web/src/global.tsx
index 398baa4..1db77aa 100644
--- a/web/src/global.tsx
+++ b/web/src/global.tsx
@@ -14,12 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Button, message, notification } from 'antd';
-
-import React from 'react';
-import { formatMessage } from 'umi';
 import { loader } from '@monaco-editor/react';
-import { getLocale } from 'umi';
+import { Button, message, notification } from 'antd';
+import React from 'react';
+import { formatMessage, getLocale } from 'umi';
 
 import defaultSettings from '../config/defaultSettings';
 
diff --git a/web/src/helpers.tsx b/web/src/helpers.tsx
index 19978a7..0ee1050 100644
--- a/web/src/helpers.tsx
+++ b/web/src/helpers.tsx
@@ -14,17 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import { notification } from 'antd';
+import { FileTextOutlined, InfoCircleOutlined } from '@ant-design/icons';
 import type { MenuDataItem } from '@ant-design/pro-layout';
-import { InfoCircleOutlined, FileTextOutlined } from '@ant-design/icons';
-import { history } from 'umi';
-import moment from 'moment';
-import YAML from 'yaml';
+import { notification } from 'antd';
 import yaml from 'js-yaml';
+import moment from 'moment';
+import React from 'react';
+import { history } from 'umi';
+import YAML from 'yaml';
 
-import { codeMessage } from './constants';
 import IconFont from './components/IconFont';
+import { codeMessage } from './constants';
 
 export const getMenuData = (): MenuDataItem[] => {
   return [
diff --git a/web/src/hooks/usePagination.ts b/web/src/hooks/usePagination.ts
index c6b1a02..6a6385d 100644
--- a/web/src/hooks/usePagination.ts
+++ b/web/src/hooks/usePagination.ts
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { useEffect, useState } from 'react';
-import { useLocation, history } from 'umi';
-import querystring from 'query-string';
-import type { PageInfo } from '@ant-design/pro-table/lib/typing';
 import type { ActionType } from '@ant-design/pro-table';
+import type { PageInfo } from '@ant-design/pro-table/lib/typing';
+import querystring from 'query-string';
 import type { MutableRefObject } from 'react';
+import { useEffect, useState } from 'react';
+import { history, useLocation } from 'umi';
 
 export default function usePagination() {
   const location = useLocation();
diff --git a/web/src/locales/en-US.ts b/web/src/locales/en-US.ts
index fa2bfdd..6f9b2b8 100644
--- a/web/src/locales/en-US.ts
+++ b/web/src/locales/en-US.ts
@@ -16,17 +16,17 @@
  */
 import { ActionBarEnUS } from '@/components/ActionBar';
 
-import component from './en-US/component';
-import globalHeader from './en-US/globalHeader';
-import menu from './en-US/menu';
-import pwa from './en-US/pwa';
-import settingDrawer from './en-US/settingDrawer';
-import settings from './en-US/setting';
-import other from './en-US/other';
 import Plugin from '../components/Plugin/locales/en-US';
 import PluginFlow from '../components/PluginFlow/locales/en-US';
 import RawDataEditor from '../components/RawDataEditor/locales/en-US';
 import UpstreamComponent from '../components/Upstream/locales/en-US';
+import component from './en-US/component';
+import globalHeader from './en-US/globalHeader';
+import menu from './en-US/menu';
+import other from './en-US/other';
+import pwa from './en-US/pwa';
+import settings from './en-US/setting';
+import settingDrawer from './en-US/settingDrawer';
 
 export default {
   'navBar.lang': 'Languages',
diff --git a/web/src/locales/en-US/component.ts b/web/src/locales/en-US/component.ts
index a9e6643..802c698 100644
--- a/web/src/locales/en-US/component.ts
+++ b/web/src/locales/en-US/component.ts
@@ -54,7 +54,7 @@
   'component.global.notification.success.message.deleteSuccess': 'Deleted Successfully',
   'component.global.create.consumer.success': 'Create Consumer Successfully',
   'component.global.delete.consumer.success': 'Delete Consumer Successfully',
-  'component.global.delete.routes.success':'Delete Route Successfully',
+  'component.global.delete.routes.success': 'Delete Route Successfully',
   'component.global.edit.consumer.success': 'Edit Consumer Successfully',
 
   'component.global.steps.stepTitle.basicInformation': 'Basic Information',
diff --git a/web/src/locales/tr-TR.ts b/web/src/locales/tr-TR.ts
index 7ef9c87..7c2fa8e 100644
--- a/web/src/locales/tr-TR.ts
+++ b/web/src/locales/tr-TR.ts
@@ -16,17 +16,17 @@
  */
 import { ActionBarEnUS } from '@/components/ActionBar';
 
-import component from './tr-TR/component';
-import globalHeader from './tr-TR/globalHeader';
-import menu from './tr-TR/menu';
-import pwa from './tr-TR/pwa';
-import settingDrawer from './tr-TR/settingDrawer';
-import settings from './tr-TR/setting';
-import other from './tr-TR/other';
 import Plugin from '../components/Plugin/locales/tr-TR';
 import PluginFlow from '../components/PluginFlow/locales/tr-TR';
 import RawDataEditor from '../components/RawDataEditor/locales/tr-TR';
 import UpstreamComponent from '../components/Upstream/locales/tr-TR';
+import component from './tr-TR/component';
+import globalHeader from './tr-TR/globalHeader';
+import menu from './tr-TR/menu';
+import other from './tr-TR/other';
+import pwa from './tr-TR/pwa';
+import settings from './tr-TR/setting';
+import settingDrawer from './tr-TR/settingDrawer';
 
 export default {
   'navBar.lang': 'Dil Seçenekleri',
diff --git a/web/src/locales/tr-TR/component.ts b/web/src/locales/tr-TR/component.ts
index 58c8b16..76d3e8c 100644
--- a/web/src/locales/tr-TR/component.ts
+++ b/web/src/locales/tr-TR/component.ts
@@ -54,7 +54,7 @@
   'component.global.notification.success.message.deleteSuccess': 'Başarıyla silindi',
   'component.global.create.consumer.success': 'Başarıyla oluşturuldu',
   'component.global.delete.consumer.success': 'Başarıyla silindi',
-  'component.global.delete.routes.success':'Sil Yöneltmeler Başarılı',
+  'component.global.delete.routes.success': 'Sil Yöneltmeler Başarılı',
   'component.global.edit.consumer.success': 'Başarıyla güncellendi',
 
   'component.global.steps.stepTitle.basicInformation': 'Temel Bilgiler',
@@ -74,9 +74,9 @@
   'component.global.name': 'Ad',
   'component.global.id': 'ID',
   'component.global.updateTime': 'Zamanı Güncelle',
-  'component.global.form.itemExtraMessage.nameGloballyUnique': 'İsim global olarak benzersiz olmalıdır',
-  'component.global.input.placeholder.description':
-    'Açıklama girin, max 256 karakter',
+  'component.global.form.itemExtraMessage.nameGloballyUnique':
+    'İsim global olarak benzersiz olmalıdır',
+  'component.global.input.placeholder.description': 'Açıklama girin, max 256 karakter',
   // User component
   'component.user.loginByPassword': 'Kullanıcı adı ve şifre',
   'component.user.login': 'Giriş',
diff --git a/web/src/locales/tr-TR/settingDrawer.ts b/web/src/locales/tr-TR/settingDrawer.ts
index b8526cf..f4d8ed6 100644
--- a/web/src/locales/tr-TR/settingDrawer.ts
+++ b/web/src/locales/tr-TR/settingDrawer.ts
@@ -41,7 +41,7 @@
   'app.setting.othersettings': 'Diğer ayarlar',
   'app.setting.weakmode': 'Zayıf mod',
   'app.setting.copy': 'Ayarları Kopyala',
-  'app.setting.copyinfo': 'Kopyalama başarılı,Lütfen, defaultSettings ayalarını src/models/setting.js da değiştirin',
-  'app.setting.production.hint':
-    'Bu panel, sadece geliştirme modunda görüntülenebilir.',
+  'app.setting.copyinfo':
+    'Kopyalama başarılı,Lütfen, defaultSettings ayalarını src/models/setting.js da değiştirin',
+  'app.setting.production.hint': 'Bu panel, sadece geliştirme modunda görüntülenebilir.',
 };
diff --git a/web/src/locales/zh-CN.ts b/web/src/locales/zh-CN.ts
index 11a8ec0..1958b6a 100644
--- a/web/src/locales/zh-CN.ts
+++ b/web/src/locales/zh-CN.ts
@@ -16,17 +16,17 @@
  */
 import { ActionBarZhCN } from '@/components/ActionBar';
 
-import component from './zh-CN/component';
-import globalHeader from './zh-CN/globalHeader';
-import menu from './zh-CN/menu';
-import pwa from './zh-CN/pwa';
-import other from './zh-CN/other';
-import settingDrawer from './zh-CN/settingDrawer';
-import settings from './zh-CN/setting';
 import Plugin from '../components/Plugin/locales/zh-CN';
 import PluginFlow from '../components/PluginFlow/locales/zh-CN';
 import RawDataEditor from '../components/RawDataEditor/locales/zh-CN';
 import UpstreamComponent from '../components/Upstream/locales/zh-CN';
+import component from './zh-CN/component';
+import globalHeader from './zh-CN/globalHeader';
+import menu from './zh-CN/menu';
+import other from './zh-CN/other';
+import pwa from './zh-CN/pwa';
+import settings from './zh-CN/setting';
+import settingDrawer from './zh-CN/settingDrawer';
 
 export default {
   'navBar.lang': '语言',
diff --git a/web/src/locales/zh-CN/component.ts b/web/src/locales/zh-CN/component.ts
index bf48733..9f9a3be 100644
--- a/web/src/locales/zh-CN/component.ts
+++ b/web/src/locales/zh-CN/component.ts
@@ -61,7 +61,7 @@
   'component.global.updateTime': '更新时间',
   'component.global.create.consumer.success': '创建消费者成功',
   'component.global.delete.consumer.success': '删除消费者成功',
-  'component.global.delete.routes.success':'删除路由成功',
+  'component.global.delete.routes.success': '删除路由成功',
   'component.global.edit.consumer.success': '配置消费者成功',
 
   'component.global.popconfirm.title.delete': '确定删除该条记录吗?',
diff --git a/web/src/pages/Consumer/Create.tsx b/web/src/pages/Consumer/Create.tsx
index 4f44467..e417c5d 100644
--- a/web/src/pages/Consumer/Create.tsx
+++ b/web/src/pages/Consumer/Create.tsx
@@ -14,18 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState, useEffect } from 'react';
 import { PageContainer } from '@ant-design/pro-layout';
-import { Card, Steps, notification, Form } from 'antd';
+import { useRequest } from 'ahooks';
+import { Card, Form, notification, Steps } from 'antd';
+import React, { useEffect, useState } from 'react';
 import { history, useIntl } from 'umi';
 
 import ActionBar from '@/components/ActionBar';
 import PluginPage from '@/components/Plugin';
 
-import Step1 from './components/Step1';
 import Preview from './components/Preview';
-import { fetchItem, create, update } from './service';
-import { useRequest } from 'ahooks';
+import Step1 from './components/Step1';
+import { create, fetchItem, update } from './service';
 
 const Page: React.FC = (props) => {
   const [step, setStep] = useState(1);
diff --git a/web/src/pages/Consumer/List.tsx b/web/src/pages/Consumer/List.tsx
index 31508f1..e1f6a82 100644
--- a/web/src/pages/Consumer/List.tsx
+++ b/web/src/pages/Consumer/List.tsx
@@ -14,21 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useRef, useState } from 'react';
-import { PageContainer } from '@ant-design/pro-layout';
-import ProTable from '@ant-design/pro-table';
-import type { ProColumns, ActionType } from '@ant-design/pro-table';
-import { Popconfirm, Button, notification } from 'antd';
-import { history, useIntl } from 'umi';
-import usePagination from '@/hooks/usePagination';
 import { PlusOutlined } from '@ant-design/icons';
+import { PageContainer } from '@ant-design/pro-layout';
+import type { ActionType, ProColumns } from '@ant-design/pro-table';
+import ProTable from '@ant-design/pro-table';
+import { Button, notification, Popconfirm } from 'antd';
 import { omit } from 'lodash';
+import React, { useRef, useState } from 'react';
+import { history, useIntl } from 'umi';
 
+import { RawDataEditor } from '@/components/RawDataEditor';
 import { DELETE_FIELDS } from '@/constants';
 import { timestampToLocaleString } from '@/helpers';
-import { RawDataEditor } from '@/components/RawDataEditor';
+import usePagination from '@/hooks/usePagination';
 
-import { fetchList, remove, create, update } from './service';
+import { create, fetchList, remove, update } from './service';
 
 const Page: React.FC = () => {
   const ref = useRef<ActionType>();
diff --git a/web/src/pages/Consumer/components/Preview.tsx b/web/src/pages/Consumer/components/Preview.tsx
index 4e140ad..5990b7b 100644
--- a/web/src/pages/Consumer/components/Preview.tsx
+++ b/web/src/pages/Consumer/components/Preview.tsx
@@ -14,10 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import type { FormInstance } from 'antd/lib/form';
+import React from 'react';
 
 import PluginPage from '@/components/Plugin';
+
 import Step1 from './Step1';
 
 type Props = {
diff --git a/web/src/pages/Consumer/components/Step1.tsx b/web/src/pages/Consumer/components/Step1.tsx
index b246f46..dbca1a0 100644
--- a/web/src/pages/Consumer/components/Step1.tsx
+++ b/web/src/pages/Consumer/components/Step1.tsx
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, Input } from 'antd';
 import type { FormInstance } from 'antd/lib/form';
+import React from 'react';
 import { useIntl } from 'umi';
 
 const FORM_LAYOUT = {
diff --git a/web/src/pages/Consumer/locales/tr-TR.ts b/web/src/pages/Consumer/locales/tr-TR.ts
index 3a5551b..ff3a205 100644
--- a/web/src/pages/Consumer/locales/tr-TR.ts
+++ b/web/src/pages/Consumer/locales/tr-TR.ts
@@ -21,11 +21,11 @@
   'page.consumer.notification.warning.enableAuthenticationPlugin':
     'Lütfen aşağıdaki kimlik doğrulama eklentisinden en az birini etkinleştirin:',
   'page.consumer.username': 'Ad',
-  'page.consumer.username.required': "Lütfen kullanıcının adını girin",
+  'page.consumer.username.required': 'Lütfen kullanıcının adını girin',
   'page.consumer.updateTime': 'Güncelleme Zamanı',
   'page.consumer.list': 'Kullanıcı Listesi',
   'page.consumer.description':
-  'Tüketiciler, örneğin geliştiriciler, son kullanıcılar, API çağrıları vb. gibi Routesın tüketicileridir. Bir tüketici oluştururken, en az bir Kimlik Doğrulama eklentisi bağlamanız gerekir.',
+    'Tüketiciler, örneğin geliştiriciler, son kullanıcılar, API çağrıları vb. gibi Routesın tüketicileridir. Bir tüketici oluştururken, en az bir Kimlik Doğrulama eklentisi bağlamanız gerekir.',
   'page.consumer.create': 'Kullanıcı Oluştur',
   'page.consumer.configure': 'Kullanıcı Yapılandır',
 };
diff --git a/web/src/pages/Dashboard/Dashboard.tsx b/web/src/pages/Dashboard/Dashboard.tsx
index 780dda8..25bbbbf 100644
--- a/web/src/pages/Dashboard/Dashboard.tsx
+++ b/web/src/pages/Dashboard/Dashboard.tsx
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState, useEffect } from 'react';
+import { QuestionCircleOutlined } from '@ant-design/icons';
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
-import { Empty, Button, Card, Tooltip } from 'antd';
+import { Button, Card, Empty, Tooltip } from 'antd';
+import React, { useEffect, useState } from 'react';
 import { history, useIntl } from 'umi';
 
 import { getGrafanaURL } from './service';
-import { QuestionCircleOutlined } from '@ant-design/icons';
 
 const Dashboard: React.FC = () => {
   const [grafanaURL, setGrafanaURL] = useState<string | undefined>();
diff --git a/web/src/pages/Dashboard/locales/tr-TR.ts b/web/src/pages/Dashboard/locales/tr-TR.ts
index 28fa6c3..b6f6fb7 100644
--- a/web/src/pages/Dashboard/locales/tr-TR.ts
+++ b/web/src/pages/Dashboard/locales/tr-TR.ts
@@ -17,5 +17,6 @@
 export default {
   'page.dashboard.empty.description.grafanaNotConfig': 'Grafanayı yapılandımardınız.',
   'page.dashboard.button.grafanaConfig': 'Yapılandır',
-  'page.dashboard.tip': 'Tarayıcı localStorage\'ında yönetim sayfası URL\'sini saklar, yalnızca yerel.',
+  'page.dashboard.tip':
+    "Tarayıcı localStorage'ında yönetim sayfası URL'sini saklar, yalnızca yerel.",
 };
diff --git a/web/src/pages/Plugin/List.tsx b/web/src/pages/Plugin/List.tsx
index 1668fca..f0434e4 100644
--- a/web/src/pages/Plugin/List.tsx
+++ b/web/src/pages/Plugin/List.tsx
@@ -14,19 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useEffect, useRef, useState } from 'react';
-import { PageHeaderWrapper } from '@ant-design/pro-layout';
-import { history, useIntl } from 'umi';
-import usePagination from '@/hooks/usePagination';
-import ProTable from '@ant-design/pro-table';
-import type { ActionType, ProColumns } from '@ant-design/pro-table';
-import { Button, Popconfirm, Space, notification } from 'antd';
 import { PlusOutlined } from '@ant-design/icons';
+import { PageHeaderWrapper } from '@ant-design/pro-layout';
+import type { ActionType, ProColumns } from '@ant-design/pro-table';
+import ProTable from '@ant-design/pro-table';
+import { Button, notification, Popconfirm, Space } from 'antd';
 import { omit } from 'lodash';
+import React, { useEffect, useRef, useState } from 'react';
+import { history, useIntl } from 'umi';
 
 import PluginDetail from '@/components/Plugin/PluginDetail';
+import usePagination from '@/hooks/usePagination';
 
-import { fetchList, fetchPluginList, createOrUpdate } from './service';
+import { createOrUpdate, fetchList, fetchPluginList } from './service';
 
 const Page: React.FC = () => {
   const ref = useRef<ActionType>();
diff --git a/web/src/pages/Plugin/PluginMarket.tsx b/web/src/pages/Plugin/PluginMarket.tsx
index aca5003..5854434 100644
--- a/web/src/pages/Plugin/PluginMarket.tsx
+++ b/web/src/pages/Plugin/PluginMarket.tsx
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useEffect, useState } from 'react';
-import { Card, notification } from 'antd';
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
+import { Card, notification } from 'antd';
+import React, { useEffect, useState } from 'react';
+import { useIntl } from 'umi';
 
 import PluginPage from '@/components/Plugin';
-import { fetchList, createOrUpdate } from './service';
-import { useIntl } from 'umi';
+
+import { createOrUpdate, fetchList } from './service';
 
 const PluginMarket: React.FC = () => {
   const [initialData, setInitialData] = useState({});
diff --git a/web/src/pages/PluginTemplate/Create.tsx b/web/src/pages/PluginTemplate/Create.tsx
index 218f85c..7fac342 100644
--- a/web/src/pages/PluginTemplate/Create.tsx
+++ b/web/src/pages/PluginTemplate/Create.tsx
@@ -14,18 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState, useEffect } from 'react';
 import { PageContainer } from '@ant-design/pro-layout';
-import { Card, Steps, notification, Form } from 'antd';
+import { Card, Form, notification, Steps } from 'antd';
+import React, { useEffect, useState } from 'react';
 import { history, useIntl } from 'umi';
 
 import ActionBar from '@/components/ActionBar';
 import PluginPage from '@/components/Plugin';
 import { transformLabelValueToKeyValue } from '@/helpers';
 
-import Step1 from './components/Step1';
 import Preview from './components/Preview';
-import { fetchItem, create, update } from './service';
+import Step1 from './components/Step1';
+import { create, fetchItem, update } from './service';
 
 const Page: React.FC = (props) => {
   const [step, setStep] = useState(1);
diff --git a/web/src/pages/PluginTemplate/List.tsx b/web/src/pages/PluginTemplate/List.tsx
index b96ea7c..977fe94 100644
--- a/web/src/pages/PluginTemplate/List.tsx
+++ b/web/src/pages/PluginTemplate/List.tsx
@@ -14,15 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useEffect, useRef, useState } from 'react';
-import { PageHeaderWrapper } from '@ant-design/pro-layout';
-import { history, useIntl } from 'umi';
-import ProTable from '@ant-design/pro-table';
-import type { ActionType, ProColumns } from '@ant-design/pro-table';
-import { Button, notification, Popconfirm, Select, Space, Tag } from 'antd';
 import { PlusOutlined } from '@ant-design/icons';
+import { PageHeaderWrapper } from '@ant-design/pro-layout';
+import type { ActionType, ProColumns } from '@ant-design/pro-table';
+import ProTable from '@ant-design/pro-table';
+import { Button, notification, Popconfirm, Select, Space, Tag } from 'antd';
+import React, { useEffect, useRef, useState } from 'react';
+import { history, useIntl } from 'umi';
+
 import usePagination from '@/hooks/usePagination';
-import { fetchList, remove, fetchLabelList } from './service';
+
+import { fetchLabelList, fetchList, remove } from './service';
 
 const Page: React.FC = () => {
   const ref = useRef<ActionType>();
diff --git a/web/src/pages/PluginTemplate/components/Preview.tsx b/web/src/pages/PluginTemplate/components/Preview.tsx
index 4e140ad..5990b7b 100644
--- a/web/src/pages/PluginTemplate/components/Preview.tsx
+++ b/web/src/pages/PluginTemplate/components/Preview.tsx
@@ -14,10 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import type { FormInstance } from 'antd/lib/form';
+import React from 'react';
 
 import PluginPage from '@/components/Plugin';
+
 import Step1 from './Step1';
 
 type Props = {
diff --git a/web/src/pages/PluginTemplate/components/Step1.tsx b/web/src/pages/PluginTemplate/components/Step1.tsx
index 37d5f04..f6fadb9 100644
--- a/web/src/pages/PluginTemplate/components/Step1.tsx
+++ b/web/src/pages/PluginTemplate/components/Step1.tsx
@@ -14,12 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState } from 'react';
 import { Button, Form, Input, Select, Tag } from 'antd';
 import type { FormInstance } from 'antd/lib/form';
+import React, { useState } from 'react';
 import { useIntl } from 'umi';
 
 import LabelsDrawer from '@/components/LabelsfDrawer';
+
 import { fetchLabelList } from '../service';
 
 const FORM_LAYOUT = {
diff --git a/web/src/pages/Proto/List.tsx b/web/src/pages/Proto/List.tsx
index 00ba09f..da447bc 100755
--- a/web/src/pages/Proto/List.tsx
+++ b/web/src/pages/Proto/List.tsx
@@ -14,18 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useRef, useState } from 'react';
-import { PageHeaderWrapper } from '@ant-design/pro-layout';
-import type { ProColumns, ActionType } from '@ant-design/pro-table';
-import ProTable from '@ant-design/pro-table';
-import ProtoDrawer from './components/ProtoDrawer';
-import { Button, notification, Popconfirm, Space } from 'antd';
-import { useIntl } from 'umi';
-import usePagination from '@/hooks/usePagination';
-
 import { PlusOutlined } from '@ant-design/icons';
+import { PageHeaderWrapper } from '@ant-design/pro-layout';
+import type { ActionType, ProColumns } from '@ant-design/pro-table';
+import ProTable from '@ant-design/pro-table';
+import { Button, notification, Popconfirm, Space } from 'antd';
+import React, { useRef, useState } from 'react';
+import { useIntl } from 'umi';
 
 import { timestampToLocaleString } from '@/helpers';
+import usePagination from '@/hooks/usePagination';
+
+import ProtoDrawer from './components/ProtoDrawer';
 import { fetchList, remove } from './service';
 
 const Page: React.FC = () => {
diff --git a/web/src/pages/Proto/components/ProtoDrawer/index.tsx b/web/src/pages/Proto/components/ProtoDrawer/index.tsx
index 1636f32..16c66a5 100644
--- a/web/src/pages/Proto/components/ProtoDrawer/index.tsx
+++ b/web/src/pages/Proto/components/ProtoDrawer/index.tsx
@@ -14,15 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useEffect } from 'react';
-import { Button, Drawer, Form, notification, Space } from 'antd';
-import { useIntl } from 'umi';
 import Editor from '@monaco-editor/react';
-import { Input } from 'antd';
+import { useRequest, useThrottleFn } from 'ahooks';
+import { Button, Drawer, Form, Input, notification, Space } from 'antd';
+import React, { useEffect } from 'react';
+import { useIntl } from 'umi';
 
 import { create, update } from '../../service';
 import styles from './index.less';
-import { useRequest, useThrottleFn } from 'ahooks';
 
 const ProtoDrawer: React.FC<ProtoModule.ProtoDrawerProps> = ({
   protoData,
diff --git a/web/src/pages/Proto/locales/tr-TR.ts b/web/src/pages/Proto/locales/tr-TR.ts
index b9d25e4..4529537 100644
--- a/web/src/pages/Proto/locales/tr-TR.ts
+++ b/web/src/pages/Proto/locales/tr-TR.ts
@@ -24,13 +24,13 @@
   'page.proto.list.cancel': 'İptal',
   'page.proto.list.delete.successfully': 'Proto başarıyla silindi',
   'page.proto.list.delete': 'Sil',
-  'page.proto.id.tooltip': ".proto dosya türü",
+  'page.proto.id.tooltip': '.proto dosya türü',
 
   'page.proto.desc': 'açıklama',
-  'page.proto.desc.tooltip': ".proto dosya açıklaması",
+  'page.proto.desc.tooltip': '.proto dosya açıklaması',
 
   'page.proto.content': 'içerik',
-  'page.proto.content.tooltip': ".proto dosya içeriği",
+  'page.proto.content.tooltip': '.proto dosya içeriği',
 
   'page.proto.drawer.create': 'Proto Oluştur',
   'page.proto.drawer.edit': 'Proto Düzenle',
diff --git a/web/src/pages/Route/Create.tsx b/web/src/pages/Route/Create.tsx
index 5b7df12..d0240bf 100644
--- a/web/src/pages/Route/Create.tsx
+++ b/web/src/pages/Route/Create.tsx
@@ -14,24 +14,25 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState, useEffect, useRef } from 'react';
-import { Card, Steps, Form, Modal } from 'antd';
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
-import { history, useIntl } from 'umi';
-import { isEmpty } from 'lodash';
 import { useRequest } from 'ahooks';
+import { Card, Form, Modal, Steps } from 'antd';
+import { isEmpty } from 'lodash';
+import React, { useEffect, useRef, useState } from 'react';
+import { history, useIntl } from 'umi';
+
 import ActionBar from '@/components/ActionBar';
 import FlowGraph from '@/components/PluginFlow/components/FlowGraph';
 
-import { create, fetchItem, update, checkUniqueName, checkHostWithSSL } from './service';
-import { transformProxyRewrite2Plugin } from './transform';
+import CreateStep4 from './components/CreateStep4';
+import ResultView from './components/ResultView';
 import Step1 from './components/Step1';
 import Step2 from './components/Step2';
 import Step3 from './components/Step3';
-import CreateStep4 from './components/CreateStep4';
 import { DEFAULT_STEP_1_DATA, DEFAULT_STEP_3_DATA } from './constants';
-import ResultView from './components/ResultView';
 import styles from './Create.less';
+import { checkHostWithSSL, checkUniqueName, create, fetchItem, update } from './service';
+import { transformProxyRewrite2Plugin } from './transform';
 
 const { Step } = Steps;
 
diff --git a/web/src/pages/Route/List.tsx b/web/src/pages/Route/List.tsx
index 7f131dd..63de96e 100755
--- a/web/src/pages/Route/List.tsx
+++ b/web/src/pages/Route/List.tsx
@@ -14,51 +14,52 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import type { ReactNode } from 'react';
-import React, { useRef, useEffect, useState } from 'react';
+import { DownOutlined, ExportOutlined, ImportOutlined, PlusOutlined } from '@ant-design/icons';
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
+import type { ActionType, ProColumns } from '@ant-design/pro-table';
 import ProTable from '@ant-design/pro-table';
-import type { ProColumns, ActionType } from '@ant-design/pro-table';
+import { useThrottleFn } from 'ahooks';
 import {
   Button,
-  Popconfirm,
-  notification,
-  Tag,
-  Space,
-  Select,
-  Radio,
-  Form,
-  Modal,
-  Menu,
   Dropdown,
+  Form,
+  Menu,
+  Modal,
+  notification,
+  Popconfirm,
+  Radio,
+  Select,
+  Space,
   Table,
+  Tag,
   Tooltip,
 } from 'antd';
-import { history, useIntl } from 'umi';
-import usePagination from '@/hooks/usePagination';
-import { PlusOutlined, ExportOutlined, ImportOutlined, DownOutlined } from '@ant-design/icons';
+import { saveAs } from 'file-saver';
 import { js_beautify } from 'js-beautify';
 import yaml from 'js-yaml';
-import moment from 'moment';
-import { saveAs } from 'file-saver';
 import { omit } from 'lodash';
-import { useThrottleFn } from 'ahooks';
+import moment from 'moment';
+import type { ReactNode } from 'react';
+import React, { useEffect, useRef, useState } from 'react';
+import { history, useIntl } from 'umi';
+
+import { RawDataEditor } from '@/components/RawDataEditor';
 import { DELETE_FIELDS } from '@/constants';
 import { timestampToLocaleString } from '@/helpers';
+import usePagination from '@/hooks/usePagination';
+import DataLoaderImport from '@/pages/Route/components/DataLoader/Import';
 
+import { DebugDrawView } from './components/DebugViews';
+import { EXPORT_FILE_MIME_TYPE_SUPPORTED } from './constants';
 import {
-  update,
   create,
+  exportRoutes,
+  fetchLabelList,
   fetchList,
   remove,
-  fetchLabelList,
+  update,
   updateRouteStatus,
-  exportRoutes,
 } from './service';
-import { DebugDrawView } from './components/DebugViews';
-import { RawDataEditor } from '@/components/RawDataEditor';
-import { EXPORT_FILE_MIME_TYPE_SUPPORTED } from './constants';
-import DataLoaderImport from '@/pages/Route/components/DataLoader/Import';
 
 const { OptGroup, Option } = Select;
 
diff --git a/web/src/pages/Route/components/CreateStep4/CreateStep4.tsx b/web/src/pages/Route/components/CreateStep4/CreateStep4.tsx
index 0c327df..5dfabb1 100644
--- a/web/src/pages/Route/components/CreateStep4/CreateStep4.tsx
+++ b/web/src/pages/Route/components/CreateStep4/CreateStep4.tsx
@@ -14,12 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import type { FormInstance } from 'antd/lib/form';
+import React from 'react';
 import { useIntl } from 'umi';
 
 import PluginPage from '@/components/Plugin';
 import PluginFlow from '@/components/PluginFlow';
+
 import Step1 from '../Step1';
 import Step2 from '../Step2';
 
diff --git a/web/src/pages/Route/components/DataLoader/Import.tsx b/web/src/pages/Route/components/DataLoader/Import.tsx
index e85903c..a99b308 100644
--- a/web/src/pages/Route/components/DataLoader/Import.tsx
+++ b/web/src/pages/Route/components/DataLoader/Import.tsx
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { memo, useState } from 'react';
+import { UploadOutlined } from '@ant-design/icons';
 import {
   Button,
   Col,
@@ -30,11 +30,13 @@
   Space,
   Upload,
 } from 'antd';
-import { UploadOutlined } from '@ant-design/icons';
-import { useIntl } from '@@/plugin-locale/localeExports';
-import OpenAPI3 from './loader/OpenAPI3';
 import type { RcFile } from 'antd/lib/upload';
+import React, { memo, useState } from 'react';
+
 import { importRoutes } from '@/pages/Route/service';
+import { useIntl } from '@@/plugin-locale/localeExports';
+
+import OpenAPI3 from './loader/OpenAPI3';
 
 type Props = {
   onClose: (finish: boolean) => void;
diff --git a/web/src/pages/Route/components/DataLoader/loader/OpenAPI3.tsx b/web/src/pages/Route/components/DataLoader/loader/OpenAPI3.tsx
index 4eea08b..300de43 100644
--- a/web/src/pages/Route/components/DataLoader/loader/OpenAPI3.tsx
+++ b/web/src/pages/Route/components/DataLoader/loader/OpenAPI3.tsx
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { memo } from 'react';
 import { Col, Form, Row, Switch } from 'antd';
+import React, { memo } from 'react';
+
 import { useIntl } from '@@/plugin-locale/localeExports';
 
 const DataLoaderOpenAPI3: React.FC = () => {
diff --git a/web/src/pages/Route/components/DebugViews/AuthenticationView.tsx b/web/src/pages/Route/components/DebugViews/AuthenticationView.tsx
index 1e8a9c9..7288764 100644
--- a/web/src/pages/Route/components/DebugViews/AuthenticationView.tsx
+++ b/web/src/pages/Route/components/DebugViews/AuthenticationView.tsx
@@ -14,9 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import { Card, Form, Input, Radio } from 'antd';
 import React, { useState } from 'react';
-import { Form, Input, Radio, Card } from 'antd';
 import { useIntl } from 'umi';
+
 import { AUTH_LIST } from '../../constants';
 import styles from './index.less';
 
diff --git a/web/src/pages/Route/components/DebugViews/DebugDrawView.tsx b/web/src/pages/Route/components/DebugViews/DebugDrawView.tsx
index 6f6e8ab..a828ee0 100644
--- a/web/src/pages/Route/components/DebugViews/DebugDrawView.tsx
+++ b/web/src/pages/Route/components/DebugViews/DebugDrawView.tsx
@@ -14,16 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useEffect, useState } from 'react';
-import { Button, Card, Drawer, Form, Input, notification, Radio, Select, Spin, Tabs } from 'antd';
-import { useIntl } from 'umi';
-import queryString from 'query-string';
-import Base64 from 'base-64';
-import CopyToClipboard from 'react-copy-to-clipboard';
 import { CopyOutlined } from '@ant-design/icons';
-import type * as monacoEditor from 'monaco-editor';
 import type { Monaco } from '@monaco-editor/react';
 import Editor from '@monaco-editor/react';
+import { Button, Card, Drawer, Form, Input, notification, Radio, Select, Spin, Tabs } from 'antd';
+import Base64 from 'base-64';
+import type * as monacoEditor from 'monaco-editor';
+import queryString from 'query-string';
+import React, { useEffect, useState } from 'react';
+import CopyToClipboard from 'react-copy-to-clipboard';
+import { useIntl } from 'umi';
 
 import PanelSection from '@/components/PanelSection';
 
@@ -37,8 +37,8 @@
   HTTP_METHOD_OPTION_LIST,
   PROTOCOL_SUPPORTED,
 } from '../../constants';
-import { AuthenticationView, DebugFormDataView, DebugParamsView } from '.';
 import { debugRoute } from '../../service';
+import { AuthenticationView, DebugFormDataView, DebugParamsView } from '.';
 import styles from './index.less';
 
 const { Option } = Select;
diff --git a/web/src/pages/Route/components/DebugViews/DebugFormDataView.tsx b/web/src/pages/Route/components/DebugViews/DebugFormDataView.tsx
index 7bedf86..95976c9 100644
--- a/web/src/pages/Route/components/DebugViews/DebugFormDataView.tsx
+++ b/web/src/pages/Route/components/DebugViews/DebugFormDataView.tsx
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import { ImportOutlined, MinusCircleOutlined } from '@ant-design/icons';
+import { Button, Checkbox, Col, Form, Input, Row, Select, Upload } from 'antd';
 import React, { useState } from 'react';
-import { Form, Input, Row, Col, Checkbox, Select, Upload, Button } from 'antd';
 import { useIntl } from 'umi';
-import { MinusCircleOutlined, ImportOutlined } from '@ant-design/icons';
-import { DebugBodyFormDataValueType } from '../../constants';
 
+import { DebugBodyFormDataValueType } from '../../constants';
 import styles from './index.less';
 
 const DebugFormDataView: React.FC<RouteModule.DebugViewProps> = (props) => {
diff --git a/web/src/pages/Route/components/DebugViews/DebugParamsView.tsx b/web/src/pages/Route/components/DebugViews/DebugParamsView.tsx
index 9a897ae..0bb7f5b 100644
--- a/web/src/pages/Route/components/DebugViews/DebugParamsView.tsx
+++ b/web/src/pages/Route/components/DebugViews/DebugParamsView.tsx
@@ -14,10 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState } from 'react';
-import { Form, Input, Row, Col, Checkbox, AutoComplete } from 'antd';
-import { useIntl } from 'umi';
 import { MinusCircleOutlined } from '@ant-design/icons';
+import { AutoComplete, Checkbox, Col, Form, Input, Row } from 'antd';
+import React, { useState } from 'react';
+import { useIntl } from 'umi';
+
 import { HEADER_LIST } from '@/pages/Route/constants';
 
 import styles from './index.less';
diff --git a/web/src/pages/Route/components/DebugViews/index.ts b/web/src/pages/Route/components/DebugViews/index.ts
index e3f512e..72eab4f 100644
--- a/web/src/pages/Route/components/DebugViews/index.ts
+++ b/web/src/pages/Route/components/DebugViews/index.ts
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-export { default as DebugParamsView } from './DebugParamsView';
 export { default as AuthenticationView } from './AuthenticationView';
 export { default as DebugDrawView } from './DebugDrawView';
 export { default as DebugFormDataView } from './DebugFormDataView';
+export { default as DebugParamsView } from './DebugParamsView';
diff --git a/web/src/pages/Route/components/ResultView/ResultView.tsx b/web/src/pages/Route/components/ResultView/ResultView.tsx
index 4aefce1..008dcbf 100644
--- a/web/src/pages/Route/components/ResultView/ResultView.tsx
+++ b/web/src/pages/Route/components/ResultView/ResultView.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import { Button, Result } from 'antd';
 import React from 'react';
-import { Result, Button } from 'antd';
 import { history, useIntl } from 'umi';
 
 type Props = {
diff --git a/web/src/pages/Route/components/Step1/MatchingRulesView.tsx b/web/src/pages/Route/components/Step1/MatchingRulesView.tsx
index 76ed20e..e924afc 100644
--- a/web/src/pages/Route/components/Step1/MatchingRulesView.tsx
+++ b/web/src/pages/Route/components/Step1/MatchingRulesView.tsx
@@ -14,19 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState } from 'react';
 import {
   Button,
-  Table,
-  Modal,
   Form,
-  Select,
   Input,
-  Space,
+  Modal,
   notification,
-  Typography,
+  Select,
+  Space,
   Switch,
+  Table,
+  Typography,
 } from 'antd';
+import React, { useState } from 'react';
 import { useIntl } from 'umi';
 
 import PanelSection from '@/components/PanelSection';
diff --git a/web/src/pages/Route/components/Step1/MetaView.tsx b/web/src/pages/Route/components/Step1/MetaView.tsx
index 272199d..1521ec5 100644
--- a/web/src/pages/Route/components/Step1/MetaView.tsx
+++ b/web/src/pages/Route/components/Step1/MetaView.tsx
@@ -14,15 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { createContext, FC, useContext, useEffect } from 'react';
-import React, { useState } from 'react';
+import { AutoComplete, Button, Col, Input, notification, Row, Select, Switch, Tag } from 'antd';
 import Form from 'antd/es/form';
-import { Input, Switch, Select, Button, Tag, AutoComplete, Row, Col, notification } from 'antd';
+import type { FC } from 'react';
+import React, { createContext, useContext, useEffect, useState } from 'react';
 import { useIntl } from 'umi';
 
+import LabelsDrawer from '@/components/LabelsfDrawer';
 import PanelSection from '@/components/PanelSection';
 import { FORM_ITEM_WITHOUT_LABEL } from '@/pages/Route/constants';
-import LabelsDrawer from '@/components/LabelsfDrawer';
+
 import { fetchLabelList, fetchServiceList } from '../../service';
 
 const field = 'custom_normal_labels';
diff --git a/web/src/pages/Route/components/Step1/ProxyRewrite.tsx b/web/src/pages/Route/components/Step1/ProxyRewrite.tsx
index 5359fbb..7770ab2 100644
--- a/web/src/pages/Route/components/Step1/ProxyRewrite.tsx
+++ b/web/src/pages/Route/components/Step1/ProxyRewrite.tsx
@@ -14,19 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
+import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+import { Button, Col, Input, Radio, Row, Select } from 'antd';
 import Form from 'antd/es/form';
-import { Button, Input, Radio, Row, Col, Select } from 'antd';
-import { PlusOutlined, MinusCircleOutlined } from '@ant-design/icons';
+import React from 'react';
 import { useIntl } from 'umi';
 
 import PanelSection from '@/components/PanelSection';
-
 import {
   FORM_ITEM_WITHOUT_LABEL,
+  HOST_REWRITE_TYPE,
   SCHEME_REWRITE,
   URI_REWRITE_TYPE,
-  HOST_REWRITE_TYPE,
 } from '@/pages/Route/constants';
 
 const removeBtnStyle = {
diff --git a/web/src/pages/Route/components/Step1/RequestConfigView.tsx b/web/src/pages/Route/components/Step1/RequestConfigView.tsx
index a2ae82d..1fd6a6b 100644
--- a/web/src/pages/Route/components/Step1/RequestConfigView.tsx
+++ b/web/src/pages/Route/components/Step1/RequestConfigView.tsx
@@ -14,15 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
+import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
+import { Button, Col, Input, InputNumber, Row, Select } from 'antd';
 import Form from 'antd/es/form';
-import { Button, Input, Select, Row, Col, InputNumber } from 'antd';
-import { PlusOutlined, MinusCircleOutlined } from '@ant-design/icons';
+import React from 'react';
 import { useIntl } from 'umi';
 
 import PanelSection from '@/components/PanelSection';
-
-import { HTTP_METHOD_OPTION_LIST, FORM_ITEM_WITHOUT_LABEL } from '@/pages/Route/constants';
+import { FORM_ITEM_WITHOUT_LABEL, HTTP_METHOD_OPTION_LIST } from '@/pages/Route/constants';
 
 const removeBtnStyle = {
   marginLeft: 20,
diff --git a/web/src/pages/Route/components/Step1/index.tsx b/web/src/pages/Route/components/Step1/index.tsx
index 735f11f..32a69fe 100644
--- a/web/src/pages/Route/components/Step1/index.tsx
+++ b/web/src/pages/Route/components/Step1/index.tsx
@@ -14,15 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form } from 'antd';
-import { FORM_ITEM_LAYOUT } from '@/pages/Route/constants';
-import styles from '../../Create.less';
+import React from 'react';
 
-import MetaView from './MetaView';
-import RequestConfigView from './RequestConfigView';
+import { FORM_ITEM_LAYOUT } from '@/pages/Route/constants';
+
+import styles from '../../Create.less';
 import MatchingRulesView from './MatchingRulesView';
+import MetaView from './MetaView';
 import ProxyRewrite from './ProxyRewrite';
+import RequestConfigView from './RequestConfigView';
 
 const Step1: React.FC<RouteModule.Step1PassProps> = (props) => {
   return (
diff --git a/web/src/pages/Route/components/Step3/index.tsx b/web/src/pages/Route/components/Step3/index.tsx
index 2264795..07f10b1 100644
--- a/web/src/pages/Route/components/Step3/index.tsx
+++ b/web/src/pages/Route/components/Step3/index.tsx
@@ -14,16 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState } from 'react';
-import { Radio, Tooltip } from 'antd';
 import { QuestionCircleOutlined } from '@ant-design/icons';
+import { Radio, Tooltip } from 'antd';
+import React, { useState } from 'react';
 import { isChrome, isChromium, isEdgeChromium } from 'react-device-detect';
 import { useIntl } from 'umi';
 
 import PluginPage from '@/components/Plugin';
 import PluginFlow from '@/components/PluginFlow';
-import { DEFAULT_PLUGIN_FLOW_DATA } from '@/components/PluginFlow/constants';
 import FlowGraph from '@/components/PluginFlow/components/FlowGraph';
+import { DEFAULT_PLUGIN_FLOW_DATA } from '@/components/PluginFlow/constants';
 
 type Props = {
   data: {
diff --git a/web/src/pages/Route/locales/en-US.ts b/web/src/pages/Route/locales/en-US.ts
index 3ba2011..84b78e5 100644
--- a/web/src/pages/Route/locales/en-US.ts
+++ b/web/src/pages/Route/locales/en-US.ts
@@ -46,7 +46,7 @@
   'page.route.batchDeletion': 'BatchDeletion Routes',
   'page.route.unSelect': 'Unselect',
   'page.route.item': 'items',
-  'page.route.chosen':'chosen',
+  'page.route.chosen': 'chosen',
 
   'page.route.input.placeholder.parameterNameHttpHeader': 'Request header name, for example: HOST',
   'page.route.input.placeholder.parameterNameRequestParameter': 'Parameter name, for example: id',
diff --git a/web/src/pages/Route/locales/tr-TR.ts b/web/src/pages/Route/locales/tr-TR.ts
index 6bd6e6a..3c58722 100644
--- a/web/src/pages/Route/locales/tr-TR.ts
+++ b/web/src/pages/Route/locales/tr-TR.ts
@@ -46,7 +46,7 @@
   'page.route.batchDeletion': 'Toplu yolu sil',
   'page.route.unSelect': 'Seçilme',
   'page.route.item': 'term',
-  'page.route.chosen':'Seçili',
+  'page.route.chosen': 'Seçili',
 
   'page.route.input.placeholder.parameterNameHttpHeader': 'Request header adı örn :HOST',
   'page.route.input.placeholder.parameterNameRequestParameter': 'Parameter adı örn :userId',
diff --git a/web/src/pages/Route/locales/zh-CN.ts b/web/src/pages/Route/locales/zh-CN.ts
index 3b5bc47..7ea2526 100644
--- a/web/src/pages/Route/locales/zh-CN.ts
+++ b/web/src/pages/Route/locales/zh-CN.ts
@@ -54,7 +54,7 @@
   'page.route.batchDeletion': '批量删除路由',
   'page.route.unSelect': '取消选择',
   'page.route.item': '项',
-  'page.route.chosen':'已选择',
+  'page.route.chosen': '已选择',
 
   // button
   'page.route.button.returnList': '返回路由列表',
diff --git a/web/src/pages/Route/service.ts b/web/src/pages/Route/service.ts
index bba3681..dbd182a 100644
--- a/web/src/pages/Route/service.ts
+++ b/web/src/pages/Route/service.ts
@@ -14,12 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import { identity, pickBy } from 'lodash';
 import { request } from 'umi';
-import { pickBy, identity } from 'lodash';
 
-import { transformStepData, transformRouteData, transformUpstreamNodes } from './transform';
 import { transformLabelList } from '@/helpers';
 
+import { transformRouteData, transformStepData, transformUpstreamNodes } from './transform';
+
 export const create = (data: RouteModule.RequestData, mode?: RouteModule.RequestMode) =>
   request(`/routes`, {
     method: 'POST',
diff --git a/web/src/pages/Route/transform.ts b/web/src/pages/Route/transform.ts
index 4261f63..a68667b 100644
--- a/web/src/pages/Route/transform.ts
+++ b/web/src/pages/Route/transform.ts
@@ -14,11 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { omit, pick, cloneDeep, isEmpty, unset } from 'lodash';
+import { cloneDeep, isEmpty, omit, pick, unset } from 'lodash';
 
-import { transformLabelValueToKeyValue } from '@/helpers';
-import { SCHEME_REWRITE, URI_REWRITE_TYPE, HOST_REWRITE_TYPE } from '@/pages/Route/constants';
 import { convertToFormData } from '@/components/Upstream/service';
+import { transformLabelValueToKeyValue } from '@/helpers';
+import { HOST_REWRITE_TYPE, SCHEME_REWRITE, URI_REWRITE_TYPE } from '@/pages/Route/constants';
 
 export const transformProxyRewrite2Plugin = (
   data: RouteModule.ProxyRewrite,
diff --git a/web/src/pages/SSL/Create.tsx b/web/src/pages/SSL/Create.tsx
index 3a56d17..5245801 100644
--- a/web/src/pages/SSL/Create.tsx
+++ b/web/src/pages/SSL/Create.tsx
@@ -14,16 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState } from 'react';
-import { Card, Steps, Form } from 'antd';
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
+import { Card, Form, Steps } from 'antd';
 import moment from 'moment';
+import React, { useState } from 'react';
 import { history, useIntl } from 'umi';
 
 import ActionBar from '@/components/ActionBar';
 import Step1 from '@/pages/SSL/components/Step1';
 import Step2 from '@/pages/SSL/components/Step2';
-import { verifyKeyPaire, create, update } from '@/pages/SSL/service';
+import { create, update, verifyKeyPaire } from '@/pages/SSL/service';
 import styles from '@/pages/SSL/style.less';
 
 const Page: React.FC = (props) => {
diff --git a/web/src/pages/SSL/List.tsx b/web/src/pages/SSL/List.tsx
index dc4c8d2..1316934 100644
--- a/web/src/pages/SSL/List.tsx
+++ b/web/src/pages/SSL/List.tsx
@@ -14,16 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useRef, useState } from 'react';
-import { PageHeaderWrapper } from '@ant-design/pro-layout';
-import ProTable from '@ant-design/pro-table';
-import type { ProColumns, ActionType } from '@ant-design/pro-table';
-import { Button, Popconfirm, notification, Tag } from 'antd';
-import { useIntl, history } from 'umi';
-import usePagination from '@/hooks/usePagination';
 import { PlusOutlined } from '@ant-design/icons';
-import { fetchList, remove as removeSSL } from '@/pages/SSL/service';
+import { PageHeaderWrapper } from '@ant-design/pro-layout';
+import type { ActionType, ProColumns } from '@ant-design/pro-table';
+import ProTable from '@ant-design/pro-table';
+import { Button, notification, Popconfirm, Tag } from 'antd';
+import React, { useRef, useState } from 'react';
+import { history, useIntl } from 'umi';
+
 import { timestampToLocaleString } from '@/helpers';
+import usePagination from '@/hooks/usePagination';
+import { fetchList, remove as removeSSL } from '@/pages/SSL/service';
 
 const Page: React.FC = () => {
   const tableRef = useRef<ActionType>();
diff --git a/web/src/pages/SSL/components/CertificateForm/index.tsx b/web/src/pages/SSL/components/CertificateForm/index.tsx
index 9395d99..bc8b408 100644
--- a/web/src/pages/SSL/components/CertificateForm/index.tsx
+++ b/web/src/pages/SSL/components/CertificateForm/index.tsx
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, Input, Tag } from 'antd';
-import { useIntl } from 'umi';
 import type { FormInstance } from 'antd/lib/form';
+import React from 'react';
+import { useIntl } from 'umi';
 
 type CertificateFormProps = {
   mode: 'EDIT' | 'VIEW';
diff --git a/web/src/pages/SSL/components/CertificateUploader/index.tsx b/web/src/pages/SSL/components/CertificateUploader/index.tsx
index 415af6a..bf0b3da 100644
--- a/web/src/pages/SSL/components/CertificateUploader/index.tsx
+++ b/web/src/pages/SSL/components/CertificateUploader/index.tsx
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
-import { Form, Button, Upload } from 'antd';
 import { UploadOutlined } from '@ant-design/icons';
+import { Button, Form, Upload } from 'antd';
 import type { UploadFile } from 'antd/lib/upload/interface';
-import styles from '@/pages/SSL/style.less';
+import React from 'react';
 import { useIntl } from 'umi';
 
+import styles from '@/pages/SSL/style.less';
+
 export type UploadType = 'PUBLIC_KEY' | 'PRIVATE_KEY';
 
 type UploaderProps = {
diff --git a/web/src/pages/SSL/components/Step1/index.tsx b/web/src/pages/SSL/components/Step1/index.tsx
index 21c48ef..b86cd78 100644
--- a/web/src/pages/SSL/components/Step1/index.tsx
+++ b/web/src/pages/SSL/components/Step1/index.tsx
@@ -14,15 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState } from 'react';
 import { Form, Select } from 'antd';
-import type { UploadFile } from 'antd/lib/upload/interface';
 import type { FormInstance } from 'antd/es/form';
+import type { UploadFile } from 'antd/lib/upload/interface';
+import React, { useState } from 'react';
 import { useIntl } from 'umi';
 
 import CertificateForm from '@/pages/SSL/components/CertificateForm';
-import CertificateUploader from '@/pages/SSL/components/CertificateUploader';
 import type { UploadType } from '@/pages/SSL/components/CertificateUploader';
+import CertificateUploader from '@/pages/SSL/components/CertificateUploader';
 
 type CreateType = 'Upload' | 'Input';
 
diff --git a/web/src/pages/SSL/components/Step2/index.tsx b/web/src/pages/SSL/components/Step2/index.tsx
index 7b80771..3597ce9 100644
--- a/web/src/pages/SSL/components/Step2/index.tsx
+++ b/web/src/pages/SSL/components/Step2/index.tsx
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import type { FormInstance } from 'antd/es/form';
+import React from 'react';
 
 import CertificateForm from '@/pages/SSL/components/CertificateForm';
 
diff --git a/web/src/pages/SSL/locales/tr-TR.ts b/web/src/pages/SSL/locales/tr-TR.ts
index e6611c6..80fcc84 100644
--- a/web/src/pages/SSL/locales/tr-TR.ts
+++ b/web/src/pages/SSL/locales/tr-TR.ts
@@ -41,7 +41,7 @@
   'component.ssl.removeSSLItemModalContent': 'Bu öğeyi silmek üzeresiniz!',
 
   'component.ssl.description':
-  'Sertifika, ağ geçidi tarafından SNI ile ilişkilendirilecek ve Rotadaki ana bilgisayar adına bağlı olacak şifreli istekleri işlemek için kullanılır.',
+    'Sertifika, ağ geçidi tarafından SNI ile ilişkilendirilecek ve Rotadaki ana bilgisayar adına bağlı olacak şifreli istekleri işlemek için kullanılır.',
   'component.ssl.fields.cert.required': 'Sertifika gerekli',
   'component.ssl.fields.key.required': 'Özel anahtar gerekli',
 };
diff --git a/web/src/pages/ServerInfo/List.tsx b/web/src/pages/ServerInfo/List.tsx
index 99443ba..ba92194 100644
--- a/web/src/pages/ServerInfo/List.tsx
+++ b/web/src/pages/ServerInfo/List.tsx
@@ -14,11 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useEffect, useState } from 'react';
-import { Select, Empty, Form, Card } from 'antd';
 import { PageContainer } from '@ant-design/pro-layout';
-import { useIntl, getIntl } from 'umi';
+import { Card, Empty, Form, Select } from 'antd';
 import moment from 'moment';
+import React, { useEffect, useState } from 'react';
+import { getIntl, useIntl } from 'umi';
 
 import { fetchInfoList, fetchVersion } from './service';
 import styles from './style.less';
diff --git a/web/src/pages/Service/Create.tsx b/web/src/pages/Service/Create.tsx
index 6f60870..b434a11 100644
--- a/web/src/pages/Service/Create.tsx
+++ b/web/src/pages/Service/Create.tsx
@@ -14,18 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState, useRef, useEffect } from 'react';
-import { useIntl, history } from 'umi';
-import { Card, Steps, Form, notification } from 'antd';
 import { PageHeaderWrapper } from '@ant-design/pro-layout';
+import { Card, Form, notification, Steps } from 'antd';
 import { omit } from 'lodash';
+import React, { useEffect, useRef, useState } from 'react';
+import { history, useIntl } from 'umi';
 
 import ActionBar from '@/components/ActionBar';
 import PluginPage from '@/components/Plugin';
 import { convertToFormData } from '@/components/Upstream/service';
+
 import Preview from './components/Preview';
 import Step1 from './components/Step1';
-import { create, update, fetchItem } from './service';
+import { create, fetchItem, update } from './service';
 
 const { Step } = Steps;
 
diff --git a/web/src/pages/Service/List.tsx b/web/src/pages/Service/List.tsx
index 6fa4343..c509a95 100644
--- a/web/src/pages/Service/List.tsx
+++ b/web/src/pages/Service/List.tsx
@@ -14,19 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useRef, useState } from 'react';
-import { history, useIntl } from 'umi';
-import usePagination from '@/hooks/usePagination';
-import { PageHeaderWrapper } from '@ant-design/pro-layout';
-import ProTable from '@ant-design/pro-table';
-import type { ActionType, ProColumns } from '@ant-design/pro-table';
 import { PlusOutlined } from '@ant-design/icons';
+import { PageHeaderWrapper } from '@ant-design/pro-layout';
+import type { ActionType, ProColumns } from '@ant-design/pro-table';
+import ProTable from '@ant-design/pro-table';
 import { Button, notification, Popconfirm, Space } from 'antd';
 import { omit } from 'lodash';
+import React, { useRef, useState } from 'react';
+import { history, useIntl } from 'umi';
 
-import { DELETE_FIELDS } from '@/constants';
 import { RawDataEditor } from '@/components/RawDataEditor';
-import { fetchList, remove, create, update } from './service';
+import { DELETE_FIELDS } from '@/constants';
+import usePagination from '@/hooks/usePagination';
+
+import { create, fetchList, remove, update } from './service';
 
 const Page: React.FC = () => {
   const ref = useRef<ActionType>();
diff --git a/web/src/pages/Service/components/Preview.tsx b/web/src/pages/Service/components/Preview.tsx
index b26ba92..2108095 100644
--- a/web/src/pages/Service/components/Preview.tsx
+++ b/web/src/pages/Service/components/Preview.tsx
@@ -14,10 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import type { FormInstance } from 'antd/lib/form';
+import React from 'react';
 
 import PluginPage from '@/components/Plugin';
+
 import Step1 from './Step1';
 
 type Props = {
diff --git a/web/src/pages/Service/components/Step1.tsx b/web/src/pages/Service/components/Step1.tsx
index 18b43f4..f3b68a2 100644
--- a/web/src/pages/Service/components/Step1.tsx
+++ b/web/src/pages/Service/components/Step1.tsx
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useEffect, useState } from 'react';
+import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
 import { Button, Col, Form, Input, Row } from 'antd';
+import React, { useEffect, useState } from 'react';
 import { useIntl } from 'umi';
 
 import UpstreamForm from '@/components/Upstream';
 import { fetchUpstreamList } from '@/components/Upstream/service';
-import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
 import { FORM_ITEM_WITHOUT_LABEL } from '@/pages/Route/constants';
 
 const FORM_LAYOUT = {
diff --git a/web/src/pages/Service/locales/tr-TR.ts b/web/src/pages/Service/locales/tr-TR.ts
index 3d76f4d..56d7c97 100644
--- a/web/src/pages/Service/locales/tr-TR.ts
+++ b/web/src/pages/Service/locales/tr-TR.ts
@@ -20,7 +20,7 @@
   'page.service.steps.stepTitle.preview': 'Önizleme',
   'page.service.list': 'Hizmet Listesi',
   'page.service.description':
-  'Bir hizmet, bir rotadaki genel eklenti yapılandırması ve yukarı akış hedef bilgilerinin bir kombinasyonundan oluşur. Hizmetler, Yollar ve Yukarı Akışlar ile ilişkilidir ve bir hizmet, bir dizi yukarı akış düğümüne karşılık gelebilir ve birden çok yolla bağlanabilir.',
+    'Bir hizmet, bir rotadaki genel eklenti yapılandırması ve yukarı akış hedef bilgilerinin bir kombinasyonundan oluşur. Hizmetler, Yollar ve Yukarı Akışlar ile ilişkilidir ve bir hizmet, bir dizi yukarı akış düğümüne karşılık gelebilir ve birden çok yolla bağlanabilir.',
   'page.service.fields.name.required': 'Lütfen hizmet adını girin',
   'page.service.fields.hosts': 'Hostlar',
   'page.service.fields.hosts.placeholder': 'Lütfen hizmet hostlarını girin',
diff --git a/web/src/pages/Service/service.ts b/web/src/pages/Service/service.ts
index d01f542..b652335 100644
--- a/web/src/pages/Service/service.ts
+++ b/web/src/pages/Service/service.ts
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 import { request } from 'umi';
+
 import { transformData } from './transform';
 
 export const fetchList = ({ current = 1, pageSize = 10, ...res }) =>
diff --git a/web/src/pages/Setting/Setting.tsx b/web/src/pages/Setting/Setting.tsx
index 0b2febc..90e56e1 100644
--- a/web/src/pages/Setting/Setting.tsx
+++ b/web/src/pages/Setting/Setting.tsx
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useEffect } from 'react';
 import { PageContainer } from '@ant-design/pro-layout';
-import { Card, Form, Input, Row, Col, notification } from 'antd';
+import { Card, Col, Form, Input, notification, Row } from 'antd';
+import React, { useEffect } from 'react';
 import { history, useIntl } from 'umi';
 
-import { getUrlQuery } from '@/helpers';
 import ActionBar from '@/components/ActionBar';
+import { getUrlQuery } from '@/helpers';
 import { getGrafanaURL } from '@/pages/Dashboard/service';
 
 import { updateMonitorURL } from './service';
diff --git a/web/src/pages/Setting/index.ts b/web/src/pages/Setting/index.ts
index 8fe8eef..588a524 100644
--- a/web/src/pages/Setting/index.ts
+++ b/web/src/pages/Setting/index.ts
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-export { default } from './Setting';
 export * from './service';
+export { default } from './Setting';
diff --git a/web/src/pages/Upstream/Create.tsx b/web/src/pages/Upstream/Create.tsx
index 15edbdc..0b8047d 100644
--- a/web/src/pages/Upstream/Create.tsx
+++ b/web/src/pages/Upstream/Create.tsx
@@ -14,15 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useState, useEffect, useRef } from 'react';
 import { PageContainer } from '@ant-design/pro-layout';
-import { Card, Steps, notification, Form } from 'antd';
+import { Card, Form, notification, Steps } from 'antd';
+import React, { useEffect, useRef, useState } from 'react';
 import { history, useIntl } from 'umi';
 
 import ActionBar from '@/components/ActionBar';
 
 import Step1 from './components/Step1';
-import { fetchOne, create, update } from './service';
+import { create, fetchOne, update } from './service';
 
 const Page: React.FC = (props) => {
   const [step, setStep] = useState(1);
diff --git a/web/src/pages/Upstream/List.tsx b/web/src/pages/Upstream/List.tsx
index 3966b52..c593b1e 100644
--- a/web/src/pages/Upstream/List.tsx
+++ b/web/src/pages/Upstream/List.tsx
@@ -14,22 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React, { useRef, useState } from 'react';
+import { PlusOutlined } from '@ant-design/icons';
 import { PageContainer } from '@ant-design/pro-layout';
+import type { ActionType, ProColumns } from '@ant-design/pro-table';
 import ProTable from '@ant-design/pro-table';
-import type { ProColumns, ActionType } from '@ant-design/pro-table';
-import { Popconfirm, Button, notification, Space } from 'antd';
+import { Button, notification, Popconfirm, Space } from 'antd';
+import { omit } from 'lodash';
+import React, { useRef, useState } from 'react';
 import { history, useIntl } from 'umi';
 
-import { PlusOutlined } from '@ant-design/icons';
-import { omit } from 'lodash';
-import usePagination from '@/hooks/usePagination';
-import { DELETE_FIELDS } from '@/constants';
-
 import { RawDataEditor } from '@/components/RawDataEditor';
+import { DELETE_FIELDS } from '@/constants';
 import { timestampToLocaleString } from '@/helpers';
+import usePagination from '@/hooks/usePagination';
 
-import { fetchList, remove, create, update } from './service';
+import { create, fetchList, remove, update } from './service';
 
 const Page: React.FC = () => {
   const ref = useRef<ActionType>();
diff --git a/web/src/pages/Upstream/components/Step1.tsx b/web/src/pages/Upstream/components/Step1.tsx
index 0157056..2c2fb81 100644
--- a/web/src/pages/Upstream/components/Step1.tsx
+++ b/web/src/pages/Upstream/components/Step1.tsx
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
 import { Form, Input } from 'antd';
 import type { FormInstance } from 'antd/lib/form';
+import React from 'react';
 import { useIntl } from 'umi';
 
 import UpstreamForm from '@/components/Upstream';
diff --git a/web/src/pages/Upstream/index.ts b/web/src/pages/Upstream/index.ts
index 0ee2b1d..4521673 100644
--- a/web/src/pages/Upstream/index.ts
+++ b/web/src/pages/Upstream/index.ts
@@ -14,5 +14,5 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-export { default as UpstreamZhCN } from './locales/zh-CN';
 export { default as UpstreamEnUS } from './locales/en-US';
+export { default as UpstreamZhCN } from './locales/zh-CN';
diff --git a/web/src/pages/Upstream/locales/tr-TR.ts b/web/src/pages/Upstream/locales/tr-TR.ts
index a24c846..6c12f85 100644
--- a/web/src/pages/Upstream/locales/tr-TR.ts
+++ b/web/src/pages/Upstream/locales/tr-TR.ts
@@ -35,7 +35,7 @@
   'page.upstream.step.name.should.unique': 'Adınız benzersiz olmalıdır',
   'page.upstream.step.input.upstream.name': 'Upstream adı girin',
   'page.upstream.step.description': 'Açıklama',
-  'page.upstream.step.input.description': "Upstream için açıklama girin",
+  'page.upstream.step.input.description': 'Upstream için açıklama girin',
   'page.upstream.step.type': 'Algoritma',
   'page.upstream.step.pass-host': 'Host adı',
   'page.upstream.step.pass-host.pass': 'İstemci isteğinden gelen host adını bırak',
@@ -47,7 +47,8 @@
     'İstekten yukarı akış sunucusuna bağlantı kurarken zaman aşımına uğradı.',
   'page.upstream.step.input.connect.timeout': 'Bağlantı zaman aşımı girin',
   'page.upstream.step.send.timeout': 'Gönderme zaman aşımı',
-  'page.upstream.step.send.timeout.desc': 'Yukarı akış sunucularına veri göndermek için zaman aşımı',
+  'page.upstream.step.send.timeout.desc':
+    'Yukarı akış sunucularına veri göndermek için zaman aşımı',
   'page.upstream.step.input.send.timeout': 'Zaman aşımı gönnderme girin',
   'page.upstream.step.read.timeout': 'Okuma zaman aşımı',
   'page.upstream.step.read.timeout.desc': 'Upstream sunucularının okuma zaman aşımı',
@@ -68,7 +69,8 @@
   'page.upstream.step.healthyCheck.passive.tcp_failures': 'TCP hataları',
   'page.upstream.step.input.healthyCheck.passive.tcp_failures': 'TCP hataları girin',
   'page.upstream.step.keepalive_pool': 'Keepalive Pool',
-  'page.upstream.notificationMessage.enableHealthCheckFirst': 'Sağlık kontrolünü etkinleştirmek için önce bir upstream oluşturun',
+  'page.upstream.notificationMessage.enableHealthCheckFirst':
+    'Sağlık kontrolünü etkinleştirmek için önce bir upstream oluşturun',
   'page.upstream.upstream_host.required': 'Upstream host gerekli',
 
   'page.upstream.create': 'Yeni Upstream',
diff --git a/web/src/pages/User/Login.tsx b/web/src/pages/User/Login.tsx
index 7a4427c..3092fcf 100644
--- a/web/src/pages/User/Login.tsx
+++ b/web/src/pages/User/Login.tsx
@@ -15,15 +15,17 @@
  * limitations under the License.
  */
 import { GithubOutlined } from '@ant-design/icons';
-import React, { useState } from 'react';
 import { Button, notification, Tabs } from 'antd';
-import { SelectLang } from '@@/plugin-locale/SelectLang';
-import { Link, useIntl, history } from 'umi';
+import React, { useState } from 'react';
+import { history, Link, useIntl } from 'umi';
+
+import logo from '@/assets/logo.svg';
+import Footer from '@/components/Footer';
+import { getUrlQuery } from '@/helpers';
 import LoginMethodPassword from '@/pages/User/components/LoginMethodPassword';
 import type { UserModule } from '@/pages/User/typing';
-import logo from '@/assets/logo.svg';
-import { getUrlQuery } from '@/helpers';
-import Footer from '@/components/Footer';
+import { SelectLang } from '@@/plugin-locale/SelectLang';
+
 import styles from './Login.less';
 
 const Tab = Tabs.TabPane;
diff --git a/web/src/pages/User/Logout.tsx b/web/src/pages/User/Logout.tsx
index 6ea2333..3da97c5 100644
--- a/web/src/pages/User/Logout.tsx
+++ b/web/src/pages/User/Logout.tsx
@@ -16,9 +16,9 @@
  */
 import type React from 'react';
 
+import { getUrlQuery } from '@/helpers';
 import LoginMethodPassword from '@/pages/User/components/LoginMethodPassword';
 import type { UserModule } from '@/pages/User/typing';
-import { getUrlQuery } from '@/helpers';
 
 /**
  * Login Methods List
diff --git a/web/src/pages/User/components/LoginMethodPassword.tsx b/web/src/pages/User/components/LoginMethodPassword.tsx
index 3729324..2815edb 100644
--- a/web/src/pages/User/components/LoginMethodPassword.tsx
+++ b/web/src/pages/User/components/LoginMethodPassword.tsx
@@ -14,11 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import React from 'react';
+import { LockTwoTone, UserOutlined } from '@ant-design/icons';
 import { Form, Input, Tooltip } from 'antd';
 import type { FormInstance } from 'antd/lib/form';
-import { UserOutlined, LockTwoTone } from '@ant-design/icons';
-import { request, formatMessage } from 'umi';
+import React from 'react';
+import { formatMessage, request } from 'umi';
 
 import type { UserModule } from '@/pages/User/typing';
 
diff --git a/web/src/pages/User/index.ts b/web/src/pages/User/index.ts
index 0cb3be4..bf265ff 100644
--- a/web/src/pages/User/index.ts
+++ b/web/src/pages/User/index.ts
@@ -15,5 +15,5 @@
  * limitations under the License.
  */
 
-export { default as UserZhCN } from './locales/zh-CN';
 export { default as UserEnUS } from './locales/en-US';
+export { default as UserZhCN } from './locales/zh-CN';
diff --git a/web/src/pages/User/locales/tr-TR.ts b/web/src/pages/User/locales/tr-TR.ts
index 355ec72..f0a6d26 100644
--- a/web/src/pages/User/locales/tr-TR.ts
+++ b/web/src/pages/User/locales/tr-TR.ts
@@ -25,7 +25,8 @@
   'component.user.loginMethodPassword.incorrectPassword': 'Kullanıcı adı veya şifre yanlış',
   'component.user.loginMethodPassword.fieldInvalid': 'Lütfen kullanıcı adı ve şifreyi kontrol edin',
   'component.user.loginMethodPassword.success': 'Giriş Başarılı',
-  'component.user.loginMethodPassword.changeDefaultAccount': 'Kullanıcı adı ve şifreyi değiştirmek nasıl yapılır?',
+  'component.user.loginMethodPassword.changeDefaultAccount':
+    'Kullanıcı adı ve şifreyi değiştirmek nasıl yapılır?',
   'component.user.loginMethodPassword.modificationMethod':
     'Lütfen /api/conf/conf.yaml dosyasındaki kullanıcılar alanını değiştirin',
 };