You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by zh...@apache.org on 2021/12/17 07:06:32 UTC

[dolphinscheduler] branch dev updated: [Feature][UI Next] Add apis. (#7463)

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

zhongjiajie pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new b54482c  [Feature][UI Next] Add apis. (#7463)
b54482c is described below

commit b54482cbb5ff51fc69df626767d807e033556c3f
Author: songjianet <17...@qq.com>
AuthorDate: Fri Dec 17 15:06:13 2021 +0800

    [Feature][UI Next] Add apis. (#7463)
---
 dolphinscheduler-ui-next/src/App.tsx               |   2 +
 .../src/locales/modules/en_US.ts                   |   2 +-
 .../src/locales/modules/zh_CN.ts                   |   2 +-
 dolphinscheduler-ui-next/src/router/index.ts       |  12 +-
 dolphinscheduler-ui-next/src/router/routes.ts      |   8 +-
 .../src/service/modules/alert-group/index.ts       |  73 ++++++
 .../modules/alert-group/types.ts}                  |  26 ++-
 .../src/service/modules/alert-plugin/index.ts      |  81 +++++++
 .../modules/alert-plugin/types.ts}                 |  39 +++-
 .../src/service/modules/data-source/index.ts       | 118 ++++++++++
 .../{service.ts => modules/data-source/types.ts}   |  58 +++--
 .../src/service/modules/environment/index.ts       |  80 +++++++
 .../modules/environment/types.ts}                  |  38 +++-
 .../{service.ts => modules/executors/index.ts}     |  49 +++--
 .../src/service/modules/executors/types.ts         |  75 +++++++
 .../en_US.ts => service/modules/log/index.ts}      |  24 +-
 .../index.ts => service/modules/log/types.ts}      |  11 +-
 .../src/{utils => service/modules/login}/index.ts  |  13 +-
 .../index.ts => service/modules/login/types.ts}    |   9 +-
 .../en_US.ts => service/modules/monitor/index.ts}  |  28 ++-
 .../index.ts => service/modules/monitor/types.ts}  |   8 -
 .../service/modules/process-definition/index.ts    | 244 +++++++++++++++++++++
 .../service/modules/process-definition/types.ts    |  82 +++++++
 .../modules/process-instances}/index.ts            |   8 -
 .../src/service/modules/process-instances/types.ts |  71 ++++++
 .../src/service/modules/projects-analysis/index.ts |  57 +++++
 .../modules/projects-analysis/types.ts}            |  11 +-
 .../{utils => service/modules/sign-out}/index.ts   |  11 +-
 .../index.ts => service/modules/sign-out/types.ts} |   8 -
 .../service/{service.ts => modules/token/index.ts} |  44 ++--
 .../service/{service.ts => modules/token/types.ts} |  44 ++--
 dolphinscheduler-ui-next/src/service/service.ts    |   2 +-
 dolphinscheduler-ui-next/src/utils/index.ts        |   2 +-
 dolphinscheduler-ui-next/src/views/home/index.tsx  |  14 +-
 dolphinscheduler-ui-next/src/views/login/index.tsx |  50 +++--
 35 files changed, 1211 insertions(+), 193 deletions(-)

diff --git a/dolphinscheduler-ui-next/src/App.tsx b/dolphinscheduler-ui-next/src/App.tsx
index a23f144..62ceab3 100644
--- a/dolphinscheduler-ui-next/src/App.tsx
+++ b/dolphinscheduler-ui-next/src/App.tsx
@@ -36,6 +36,8 @@ const App = defineComponent({
     const themeOverrides: GlobalThemeOverrides =
       themeList[this.currentTheme ? 'dark' : 'light']
 
+    console.log(themeOverrides)
+
     return (
       <NConfigProvider
         theme={this.currentTheme}
diff --git a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts b/dolphinscheduler-ui-next/src/locales/modules/en_US.ts
index b80b09b..66c5d90 100644
--- a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts
+++ b/dolphinscheduler-ui-next/src/locales/modules/en_US.ts
@@ -21,7 +21,7 @@ const login = {
   username_tips: 'Please enter your username',
   password: 'Password',
   password_tips: 'Please enter your password',
-  signin: 'Sign In'
+  signin: 'Sign In',
 }
 
 export default {
diff --git a/dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts b/dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts
index b7d3ccf..8e7cdd7 100644
--- a/dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts
+++ b/dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts
@@ -21,7 +21,7 @@ const login = {
   username_tips: '请输入用户名',
   password: '密码',
   password_tips: '请输入密码',
-  signin: '登录'
+  signin: '登录',
 }
 
 export default {
diff --git a/dolphinscheduler-ui-next/src/router/index.ts b/dolphinscheduler-ui-next/src/router/index.ts
index df0e37c..5aaae75 100644
--- a/dolphinscheduler-ui-next/src/router/index.ts
+++ b/dolphinscheduler-ui-next/src/router/index.ts
@@ -15,7 +15,13 @@
  * limitations under the License.
  */
 
-import { createRouter, createWebHistory, RouteRecordRaw, NavigationGuardNext, RouteLocationNormalized } from 'vue-router'
+import {
+  createRouter,
+  createWebHistory,
+  RouteRecordRaw,
+  NavigationGuardNext,
+  RouteLocationNormalized,
+} from 'vue-router'
 import routes from './routes'
 
 // NProgress
@@ -24,7 +30,7 @@ import 'nprogress/nprogress.css'
 
 const router = createRouter({
   history: createWebHistory(),
-  routes
+  routes,
 })
 
 /**
@@ -46,4 +52,4 @@ router.afterEach(() => {
   NProgress.done()
 })
 
-export default router
\ No newline at end of file
+export default router
diff --git a/dolphinscheduler-ui-next/src/router/routes.ts b/dolphinscheduler-ui-next/src/router/routes.ts
index bb92803..52b4f32 100644
--- a/dolphinscheduler-ui-next/src/router/routes.ts
+++ b/dolphinscheduler-ui-next/src/router/routes.ts
@@ -44,15 +44,15 @@ const basePage: RouteRecordRaw[] = [
 /**
  * Login page
  */
- const loginPage: RouteRecordRaw[] = [
+const loginPage: RouteRecordRaw[] = [
   {
     path: '/login',
     name: 'login',
-    component: components['login']
-  }
+    component: components['login'],
+  },
 ]
 
 const routes: RouteRecordRaw[] = [...basePage, ...loginPage]
 
 // 重新组织后导出
-export default routes
\ No newline at end of file
+export default routes
diff --git a/dolphinscheduler-ui-next/src/service/modules/alert-group/index.ts b/dolphinscheduler-ui-next/src/service/modules/alert-group/index.ts
new file mode 100644
index 0000000..4a4e95c
--- /dev/null
+++ b/dolphinscheduler-ui-next/src/service/modules/alert-group/index.ts
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { axios } from '@/service/service'
+import { ListReq, GroupNameReq, IdReq, GroupReq } from './types'
+
+export function queryAlertGroupListPaging(params: ListReq): any {
+  return axios({
+    url: '/alert-groups',
+    method: 'get',
+    params,
+  })
+}
+
+export function createAlertGroup(data: GroupReq): any {
+  return axios({
+    url: '/alert-groups',
+    method: 'post',
+    data,
+  })
+}
+
+export function listAlertGroupById(): any {
+  return axios({
+    url: '/alert-groups/list',
+    method: 'get',
+  })
+}
+
+export function queryAlertGroupById(data: IdReq): any {
+  return axios({
+    url: '/alert-groups/query',
+    method: 'post',
+    data,
+  })
+}
+
+export function verifyGroupName(params: GroupNameReq): any {
+  return axios({
+    url: '/alert-groups/verify-name',
+    method: 'get',
+    params,
+  })
+}
+
+export function updateAlertGroup(data: GroupReq, id: IdReq): any {
+  return axios({
+    url: `/alert-groups/${id}`,
+    method: 'put',
+    data,
+  })
+}
+
+export function delAlertGroupById(id: IdReq): any {
+  return axios({
+    url: `/alert-groups/${id}`,
+    method: 'delete',
+  })
+}
diff --git a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts b/dolphinscheduler-ui-next/src/service/modules/alert-group/types.ts
similarity index 72%
copy from dolphinscheduler-ui-next/src/locales/modules/en_US.ts
copy to dolphinscheduler-ui-next/src/service/modules/alert-group/types.ts
index b80b09b..640ecd3 100644
--- a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/alert-group/types.ts
@@ -15,15 +15,23 @@
  * limitations under the License.
  */
 
-const login = {
-  test: 'Test',
-  username: 'Username',
-  username_tips: 'Please enter your username',
-  password: 'Password',
-  password_tips: 'Please enter your password',
-  signin: 'Sign In'
+interface ListReq {
+  pageNo: number
+  pageSize: number
+  searchVal?: string
 }
 
-export default {
-  login,
+interface GroupNameReq {
+  groupName: string
 }
+
+interface IdReq {
+  id: number
+}
+
+interface GroupReq extends GroupNameReq {
+  alertInstanceIds: string
+  description?: string
+}
+
+export { ListReq, GroupNameReq, IdReq, GroupReq }
diff --git a/dolphinscheduler-ui-next/src/service/modules/alert-plugin/index.ts b/dolphinscheduler-ui-next/src/service/modules/alert-plugin/index.ts
new file mode 100644
index 0000000..0205b28
--- /dev/null
+++ b/dolphinscheduler-ui-next/src/service/modules/alert-plugin/index.ts
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { axios } from '@/service/service'
+import {
+  ListReq,
+  PluginInstanceReq,
+  InstanceNameReq,
+  IdReq,
+  UpdatePluginInstanceReq,
+} from './types'
+
+export function queryAlertPluginInstanceListPaging(params: ListReq): any {
+  return axios({
+    url: '/alert-plugin-instances',
+    method: 'get',
+    params,
+  })
+}
+
+export function createAlertPluginInstance(data: PluginInstanceReq): any {
+  return axios({
+    url: '/alert-plugin-instances',
+    method: 'post',
+    data,
+  })
+}
+
+export function queryAlertPluginInstanceList(): any {
+  return axios({
+    url: '/alert-plugin-instances/list',
+    method: 'get',
+  })
+}
+
+export function verifyAlertInstanceName(params: InstanceNameReq): any {
+  return axios({
+    url: '/alert-plugin-instances/verify-name',
+    method: 'get',
+    params,
+  })
+}
+
+export function getAlertPluginInstance(id: IdReq): any {
+  return axios({
+    url: `/alert-plugin-instances/${id}`,
+    method: 'get',
+  })
+}
+
+export function updateAlertPluginInstance(
+  data: UpdatePluginInstanceReq,
+  id: IdReq
+): any {
+  return axios({
+    url: `/alert-plugin-instances/${id}`,
+    method: 'put',
+    data,
+  })
+}
+
+export function deleteAlertPluginInstance(id: IdReq): any {
+  return axios({
+    url: `/alert-plugin-instances/${id}`,
+    method: 'delete',
+  })
+}
diff --git a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts b/dolphinscheduler-ui-next/src/service/modules/alert-plugin/types.ts
similarity index 61%
copy from dolphinscheduler-ui-next/src/locales/modules/en_US.ts
copy to dolphinscheduler-ui-next/src/service/modules/alert-plugin/types.ts
index b80b09b..524cf33 100644
--- a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/alert-plugin/types.ts
@@ -15,15 +15,36 @@
  * limitations under the License.
  */
 
-const login = {
-  test: 'Test',
-  username: 'Username',
-  username_tips: 'Please enter your username',
-  password: 'Password',
-  password_tips: 'Please enter your password',
-  signin: 'Sign In'
+interface ListReq {
+  pageNo: number
+  pageSize: number
+  searchVal?: string
 }
 
-export default {
-  login,
+interface PluginInstanceReq {
+  instanceName: string
+  pluginDefineId: number
+  pluginInstanceParams: string
+}
+
+interface InstanceNameReq {
+  alertInstanceName: string
+}
+
+interface IdReq {
+  id: number
+}
+
+interface UpdatePluginInstanceReq {
+  alertPluginInstanceId: number
+  instanceName: string
+  pluginInstanceParams: string
+}
+
+export {
+  ListReq,
+  PluginInstanceReq,
+  InstanceNameReq,
+  IdReq,
+  UpdatePluginInstanceReq,
 }
diff --git a/dolphinscheduler-ui-next/src/service/modules/data-source/index.ts b/dolphinscheduler-ui-next/src/service/modules/data-source/index.ts
new file mode 100644
index 0000000..b2ebd86
--- /dev/null
+++ b/dolphinscheduler-ui-next/src/service/modules/data-source/index.ts
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { axios } from '@/service/service'
+import {
+  ListReq,
+  DataSourceReq,
+  UserIdReq,
+  TypeReq,
+  NameReq,
+  IdReq,
+} from './types'
+
+export function queryDataSourceListPaging(params: ListReq): any {
+  return axios({
+    url: '/datasources',
+    method: 'get',
+    params,
+  })
+}
+
+export function createDataSource(data: DataSourceReq): any {
+  return axios({
+    url: '/datasources',
+    method: 'post',
+    data,
+  })
+}
+
+export function authedDatasource(params: UserIdReq): any {
+  return axios({
+    url: '/datasources/authed-datasource',
+    method: 'get',
+    params,
+  })
+}
+
+export function connectDataSource(data: DataSourceReq): any {
+  return axios({
+    url: '/datasources/connect',
+    method: 'post',
+    data,
+  })
+}
+
+export function getKerberosStartupState(): any {
+  return axios({
+    url: '/datasources/kerberos-startup-state',
+    method: 'get',
+  })
+}
+
+export function queryDataSourceList(params: TypeReq): any {
+  return axios({
+    url: '/datasources/list',
+    method: 'get',
+    params,
+  })
+}
+
+export function unAuthDatasource(params: UserIdReq): any {
+  return axios({
+    url: '/datasources/unauth-datasource',
+    method: 'get',
+    params,
+  })
+}
+
+export function verifyDataSourceName(params: NameReq): any {
+  return axios({
+    url: '/datasources/verify-name',
+    method: 'get',
+    params,
+  })
+}
+
+export function queryDataSource(id: IdReq): any {
+  return axios({
+    url: `/datasources/${id}`,
+    method: 'get',
+  })
+}
+
+export function updateDataSource(data: DataSourceReq, id: IdReq): any {
+  return axios({
+    url: `/datasources/${id}`,
+    method: 'put',
+    data,
+  })
+}
+
+export function deleteDataSource(id: IdReq): any {
+  return axios({
+    url: `/datasources/${id}`,
+    method: 'delete',
+  })
+}
+
+export function connectionTest(id: IdReq): any {
+  return axios({
+    url: `/datasources/${id}/connect-test`,
+    method: 'get',
+  })
+}
diff --git a/dolphinscheduler-ui-next/src/service/service.ts b/dolphinscheduler-ui-next/src/service/modules/data-source/types.ts
similarity index 53%
copy from dolphinscheduler-ui-next/src/service/service.ts
copy to dolphinscheduler-ui-next/src/service/modules/data-source/types.ts
index 72f58c5..212e965 100644
--- a/dolphinscheduler-ui-next/src/service/service.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/data-source/types.ts
@@ -15,25 +15,55 @@
  * limitations under the License.
  */
 
-import axios, { AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios'
+type DataBase =
+  | 'MYSQL'
+  | 'POSTGRESQL'
+  | 'HIVE'
+  | 'SPARK'
+  | 'CLICKHOUSE'
+  | 'ORACLE'
+  | 'SQLSERVER'
+  | 'DB2'
+  | 'PRESTO'
+  | 'H2'
 
-const baseRequestConfig: AxiosRequestConfig = {
-  baseURL: '/',
-  timeout: 10000,
+interface DataSource {
+  database?: string
+  host?: string
+  id?: number
+  name?: string
+  note?: string
+  other?: object
+  password?: string
+  port?: number
+  type?: DataBase
+  userName?: string
 }
 
-const service = axios.create(baseRequestConfig)
+interface ListReq {
+  pageNo: number
+  pageSize: number
+  searchVal?: string
+}
+
+interface DataSourceReq {
+  dataSourceParam: DataSource
+}
 
-const err = (error: AxiosError): Promise<AxiosError> => {
-  return Promise.reject(error)
+interface UserIdReq {
+  userId: number
 }
 
-service.interceptors.request.use((config: AxiosRequestConfig<any>) => {
-  return config
-}, err)
+interface TypeReq {
+  type: DataBase
+}
 
-service.interceptors.response.use((res: AxiosResponse) => {
-  return res.data
-}, err)
+interface NameReq {
+  name: string
+}
+
+interface IdReq {
+  id: number
+}
 
-export { service as axios }
+export { ListReq, DataSourceReq, UserIdReq, TypeReq, NameReq, IdReq }
diff --git a/dolphinscheduler-ui-next/src/service/modules/environment/index.ts b/dolphinscheduler-ui-next/src/service/modules/environment/index.ts
new file mode 100644
index 0000000..1f2a117
--- /dev/null
+++ b/dolphinscheduler-ui-next/src/service/modules/environment/index.ts
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { axios } from '@/service/service'
+import {
+  EnvironmentReq,
+  EnvironmentCodeReq,
+  EnvironmentNameReq,
+  ListReq,
+  CodeReq,
+} from './types'
+
+export function createEnvironment(data: EnvironmentReq): any {
+  return axios({
+    url: '/environment/create',
+    method: 'post',
+    data,
+  })
+}
+
+export function deleteEnvironmentByCode(data: EnvironmentCodeReq): any {
+  return axios({
+    url: '/environment/delete',
+    method: 'post',
+    data,
+  })
+}
+
+export function queryEnvironmentListPaging(params: ListReq): any {
+  return axios({
+    url: '/environment/list-paging',
+    method: 'get',
+    params,
+  })
+}
+
+export function queryEnvironmentByCode(params: EnvironmentCodeReq): any {
+  return axios({
+    url: '/environment/query-by-code',
+    method: 'get',
+    params,
+  })
+}
+
+export function queryAllEnvironmentList(): any {
+  return axios({
+    url: '/environment/query-environment-list',
+    method: 'get',
+  })
+}
+
+export function updateEnvironment(data: EnvironmentReq & CodeReq): any {
+  return axios({
+    url: '/environment/update',
+    method: 'post',
+    data,
+  })
+}
+
+export function verifyEnvironment(data: EnvironmentNameReq): any {
+  return axios({
+    url: '/environment/verify-environment',
+    method: 'post',
+    data,
+  })
+}
diff --git a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts b/dolphinscheduler-ui-next/src/service/modules/environment/types.ts
similarity index 64%
copy from dolphinscheduler-ui-next/src/locales/modules/en_US.ts
copy to dolphinscheduler-ui-next/src/service/modules/environment/types.ts
index b80b09b..515cdc1 100644
--- a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/environment/types.ts
@@ -15,15 +15,35 @@
  * limitations under the License.
  */
 
-const login = {
-  test: 'Test',
-  username: 'Username',
-  username_tips: 'Please enter your username',
-  password: 'Password',
-  password_tips: 'Please enter your password',
-  signin: 'Sign In'
+interface EnvironmentReq {
+  config: string
+  name: string
+  description?: string
+  workerGroups?: string
 }
 
-export default {
-  login,
+interface EnvironmentCodeReq {
+  environmentCode: number
+}
+
+interface EnvironmentNameReq {
+  environmentName: string
+}
+
+interface ListReq {
+  pageNo: number
+  pageSize: number
+  searchVal?: string
+}
+
+interface CodeReq {
+  code: number
+}
+
+export {
+  EnvironmentReq,
+  EnvironmentCodeReq,
+  EnvironmentNameReq,
+  ListReq,
+  CodeReq,
 }
diff --git a/dolphinscheduler-ui-next/src/service/service.ts b/dolphinscheduler-ui-next/src/service/modules/executors/index.ts
similarity index 51%
copy from dolphinscheduler-ui-next/src/service/service.ts
copy to dolphinscheduler-ui-next/src/service/modules/executors/index.ts
index 72f58c5..96b4704 100644
--- a/dolphinscheduler-ui-next/src/service/service.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/executors/index.ts
@@ -15,25 +15,40 @@
  * limitations under the License.
  */
 
-import axios, { AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios'
+import { axios } from '@/service/service'
+import {
+  ExecuteReq,
+  ProjectCodeReq,
+  ProcessDefinitionCodeReq,
+  ProcessInstanceReq,
+} from './types'
 
-const baseRequestConfig: AxiosRequestConfig = {
-  baseURL: '/',
-  timeout: 10000,
+export function execute(data: ExecuteReq, code: ProjectCodeReq): any {
+  return axios({
+    url: `/projects/${code}/executors/execute`,
+    method: 'post',
+    data,
+  })
 }
 
-const service = axios.create(baseRequestConfig)
-
-const err = (error: AxiosError): Promise<AxiosError> => {
-  return Promise.reject(error)
+export function startCheckProcessDefinition(
+  data: ProcessDefinitionCodeReq,
+  code: ProjectCodeReq
+): any {
+  return axios({
+    url: `/projects/${code}/executors/start-check`,
+    method: 'post',
+    data,
+  })
 }
 
-service.interceptors.request.use((config: AxiosRequestConfig<any>) => {
-  return config
-}, err)
-
-service.interceptors.response.use((res: AxiosResponse) => {
-  return res.data
-}, err)
-
-export { service as axios }
+export function startProcessInstance(
+  data: ProcessInstanceReq,
+  code: ProjectCodeReq
+): any {
+  return axios({
+    url: `/projects/${code}/executors/start-process-instance`,
+    method: 'post',
+    data,
+  })
+}
diff --git a/dolphinscheduler-ui-next/src/service/modules/executors/types.ts b/dolphinscheduler-ui-next/src/service/modules/executors/types.ts
new file mode 100644
index 0000000..812bf72
--- /dev/null
+++ b/dolphinscheduler-ui-next/src/service/modules/executors/types.ts
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+type Execute =
+  | 'NONE'
+  | 'REPEAT_RUNNING'
+  | 'RECOVER_SUSPENDED_PROCESS'
+  | 'START_FAILURE_TASK_PROCESS'
+  | 'STOP'
+  | 'PAUSE'
+
+type Exec =
+  | 'START_PROCESS'
+  | 'START_CURRENT_TASK_PROCESS'
+  | 'RECOVER_TOLERANCE_FAULT_PROCESS'
+  | 'RECOVER_SUSPENDED_PROCESS'
+  | 'START_FAILURE_TASK_PROCESS'
+  | 'COMPLEMENT_DATA'
+  | 'SCHEDULER'
+  | 'REPEAT_RUNNING'
+  | 'PAUSE'
+  | 'STOP'
+  | 'RECOVER_WAITING_THREAD'
+
+interface ExecuteReq {
+  executeType: Execute
+  processInstanceId: number
+}
+
+interface ProjectCodeReq {
+  projectCode: number
+}
+
+interface ProcessDefinitionCodeReq {
+  processDefinitionCode: number
+}
+
+interface ProcessInstanceReq extends ProcessDefinitionCodeReq {
+  failureStrategy: 'END' | 'CONTINUE'
+  processInstancePriority: 'HIGHEST' | 'HIGH' | 'MEDIUM' | 'LOW' | 'LOWEST'
+  scheduleTime: string
+  warningGroupId: number
+  warningType: 'NONE' | 'SUCCESS' | 'FAILURE' | 'ALL'
+  dryRun?: number
+  environmentCode?: number
+  execType?: Exec
+  expectedParallelismNumber?: number
+  runMode?: 'RUN_MODE_SERIAL' | 'RUN_MODE_PARALLEL'
+  startNodeList?: string
+  startParams?: string
+  taskDependType?: 'TASK_ONLY' | 'TASK_PRE' | 'TASK_POST'
+  timeout?: number
+  workerGroup?: string
+}
+
+export {
+  ExecuteReq,
+  ProjectCodeReq,
+  ProcessDefinitionCodeReq,
+  ProcessInstanceReq,
+}
diff --git a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts b/dolphinscheduler-ui-next/src/service/modules/log/index.ts
similarity index 70%
copy from dolphinscheduler-ui-next/src/locales/modules/en_US.ts
copy to dolphinscheduler-ui-next/src/service/modules/log/index.ts
index b80b09b..51ccf31 100644
--- a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/log/index.ts
@@ -15,15 +15,21 @@
  * limitations under the License.
  */
 
-const login = {
-  test: 'Test',
-  username: 'Username',
-  username_tips: 'Please enter your username',
-  password: 'Password',
-  password_tips: 'Please enter your password',
-  signin: 'Sign In'
+import { axios } from '@/service/service'
+import { IdReq, LogReq } from './types'
+
+export function queryLog(params: LogReq): any {
+  return axios({
+    url: '/log/detail',
+    method: 'get',
+    params,
+  })
 }
 
-export default {
-  login,
+export function downloadTaskLog(params: IdReq): any {
+  return axios({
+    url: '/log/download-log',
+    method: 'get',
+    params,
+  })
 }
diff --git a/dolphinscheduler-ui-next/src/utils/index.ts b/dolphinscheduler-ui-next/src/service/modules/log/types.ts
similarity index 85%
copy from dolphinscheduler-ui-next/src/utils/index.ts
copy to dolphinscheduler-ui-next/src/service/modules/log/types.ts
index c9f8c51..dc89444 100644
--- a/dolphinscheduler-ui-next/src/utils/index.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/log/types.ts
@@ -15,10 +15,13 @@
  * limitations under the License.
  */
 
-import classification from './classification'
+interface IdReq {
+  taskInstanceId: number
+}
 
-const utils = {
-  classification
+interface LogReq extends IdReq {
+  limit: number
+  skipLineNum: number
 }
 
-export default utils
+export { IdReq, LogReq }
diff --git a/dolphinscheduler-ui-next/src/utils/index.ts b/dolphinscheduler-ui-next/src/service/modules/login/index.ts
similarity index 80%
copy from dolphinscheduler-ui-next/src/utils/index.ts
copy to dolphinscheduler-ui-next/src/service/modules/login/index.ts
index c9f8c51..166e342 100644
--- a/dolphinscheduler-ui-next/src/utils/index.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/login/index.ts
@@ -15,10 +15,13 @@
  * limitations under the License.
  */
 
-import classification from './classification'
+import { axios } from '@/service/service'
+import { LoginReq } from './types'
 
-const utils = {
-  classification
+export function queryLog(data: LoginReq): any {
+  return axios({
+    url: '/login',
+    method: 'post',
+    data,
+  })
 }
-
-export default utils
diff --git a/dolphinscheduler-ui-next/src/utils/index.ts b/dolphinscheduler-ui-next/src/service/modules/login/types.ts
similarity index 88%
copy from dolphinscheduler-ui-next/src/utils/index.ts
copy to dolphinscheduler-ui-next/src/service/modules/login/types.ts
index c9f8c51..8ea7d72 100644
--- a/dolphinscheduler-ui-next/src/utils/index.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/login/types.ts
@@ -15,10 +15,9 @@
  * limitations under the License.
  */
 
-import classification from './classification'
-
-const utils = {
-  classification
+interface LoginReq {
+  userName: string
+  userPassword: string
 }
 
-export default utils
+export { LoginReq }
diff --git a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts b/dolphinscheduler-ui-next/src/service/modules/monitor/index.ts
similarity index 68%
copy from dolphinscheduler-ui-next/src/locales/modules/en_US.ts
copy to dolphinscheduler-ui-next/src/service/modules/monitor/index.ts
index b80b09b..4defbd0 100644
--- a/dolphinscheduler-ui-next/src/locales/modules/en_US.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/monitor/index.ts
@@ -15,15 +15,25 @@
  * limitations under the License.
  */
 
-const login = {
-  test: 'Test',
-  username: 'Username',
-  username_tips: 'Please enter your username',
-  password: 'Password',
-  password_tips: 'Please enter your password',
-  signin: 'Sign In'
+import { axios } from '@/service/service'
+
+export function queryDatabaseState(): any {
+  return axios({
+    url: '/monitor/databases',
+    method: 'get',
+  })
+}
+
+export function listMaster(): any {
+  return axios({
+    url: '/monitor/masters',
+    method: 'get',
+  })
 }
 
-export default {
-  login,
+export function listWorker(): any {
+  return axios({
+    url: '/monitor/workers',
+    method: 'get',
+  })
 }
diff --git a/dolphinscheduler-ui-next/src/utils/index.ts b/dolphinscheduler-ui-next/src/service/modules/monitor/types.ts
similarity index 88%
copy from dolphinscheduler-ui-next/src/utils/index.ts
copy to dolphinscheduler-ui-next/src/service/modules/monitor/types.ts
index c9f8c51..3e7c6c2 100644
--- a/dolphinscheduler-ui-next/src/utils/index.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/monitor/types.ts
@@ -14,11 +14,3 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import classification from './classification'
-
-const utils = {
-  classification
-}
-
-export default utils
diff --git a/dolphinscheduler-ui-next/src/service/modules/process-definition/index.ts b/dolphinscheduler-ui-next/src/service/modules/process-definition/index.ts
new file mode 100644
index 0000000..d6f9a24
--- /dev/null
+++ b/dolphinscheduler-ui-next/src/service/modules/process-definition/index.ts
@@ -0,0 +1,244 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { axios } from '@/service/service'
+import {
+  CodeReq,
+  CodesReq,
+  FileReq,
+  NameReq,
+  ReleaseStateReq,
+  VersionReq,
+  LimitReq,
+  PageReq,
+  ListReq,
+  ProcessDefinitionReq,
+  TargetCodeReq,
+} from './types'
+
+export function queryListPaging(params: PageReq & ListReq, code: CodeReq): any {
+  return axios({
+    url: `/projects/${code}/process-definition`,
+    method: 'get',
+    params,
+  })
+}
+
+export function createProcessDefinition(
+  data: ProcessDefinitionReq & NameReq,
+  code: CodeReq
+): any {
+  return axios({
+    url: `/projects/${code}/process-definition`,
+    method: 'post',
+    data,
+  })
+}
+
+export function queryAllByProjectCode(code: CodeReq): any {
+  return axios({
+    url: `/projects/${code}/process-definition/all`,
+    method: 'post',
+  })
+}
+
+export function batchCopyByCodes(
+  data: TargetCodeReq & CodesReq,
+  code: CodeReq
+): any {
+  return axios({
+    url: `/projects/${code}/process-definition/batch-copy`,
+    method: 'post',
+    data,
+  })
+}
+
+export function batchDeleteByCodes(data: CodesReq, code: CodeReq): any {
+  return axios({
+    url: `/projects/${code}/process-definition/batch-delete`,
+    method: 'post',
+    data,
+  })
+}
+
+export function batchExportByCodes(data: CodesReq, code: CodeReq): any {
+  return axios({
+    url: `/projects/${code}/process-definition/batch-export`,
+    method: 'post',
+    data,
+  })
+}
+
+export function batchMoveByCodes(
+  data: TargetCodeReq & CodesReq,
+  code: CodeReq
+): any {
+  return axios({
+    url: `/projects/${code}/process-definition/batch-move`,
+    method: 'post',
+    data,
+  })
+}
+
+export function getTaskListByDefinitionCodes(
+  params: CodesReq,
+  code: CodeReq
+): any {
+  return axios({
+    url: `/projects/${code}/process-definition/batch-query-tasks`,
+    method: 'get',
+    params,
+  })
+}
+
+export function importProcessDefinition(data: FileReq, code: CodeReq): any {
+  return axios({
+    url: `/projects/${code}/process-definition/import`,
+    method: 'post',
+    data,
+  })
+}
+
+export function queryList(code: CodeReq): any {
+  return axios({
+    url: `/projects/${code}/process-definition/list`,
+    method: 'get',
+  })
+}
+
+export function queryProcessDefinitionByName(
+  params: NameReq,
+  code: CodeReq
+): any {
+  return axios({
+    url: `/projects/${code}/process-definition/query-by-name`,
+    method: 'get',
+    params,
+  })
+}
+
+export function querySimpleList(code: CodeReq): any {
+  return axios({
+    url: `/projects/${code}/process-definition/simple-list`,
+    method: 'get',
+  })
+}
+
+export function verifyName(params: NameReq, code: CodeReq): any {
+  return axios({
+    url: `/projects/${code}/process-definition/verify-name`,
+    method: 'get',
+    params,
+  })
+}
+
+export function queryProcessDefinitionByCode(
+  code: CodeReq,
+  processCode: CodeReq
+): any {
+  return axios({
+    url: `/projects/${code}/process-definition/${processCode}`,
+    method: 'get',
+  })
+}
+
+export function update(
+  data: ProcessDefinitionReq & NameReq & ReleaseStateReq,
+  code: CodeReq,
+  processCode: CodeReq
+): any {
+  return axios({
+    url: `/projects/${code}/process-definition/${processCode}`,
+    method: 'put',
+    data,
+  })
+}
+
+export function deleteByCode(code: CodeReq, processCode: CodeReq): any {
+  return axios({
+    url: `/projects/${code}/process-definition/${processCode}`,
+    method: 'delete',
+  })
+}
+
+export function release(
+  data: NameReq & ReleaseStateReq,
+  code: CodeReq,
+  processCode: CodeReq
+): any {
+  return axios({
+    url: `/projects/${code}/process-definition/${processCode}/release`,
+    method: 'post',
+    data,
+  })
+}
+
+export function getTasksByDefinitionCode(
+  code: CodeReq,
+  processCode: CodeReq
+): any {
+  return axios({
+    url: `/projects/${code}/process-definition/${processCode}/tasks`,
+    method: 'get',
+  })
+}
+
+export function queryVersions(
+  params: PageReq,
+  code: CodeReq,
+  processCode: CodeReq
+): any {
+  return axios({
+    url: `/projects/${code}/process-definition/${processCode}/versions`,
+    method: 'get',
+    params,
+  })
+}
+
+export function switchVersion(
+  code: CodeReq,
+  processCode: CodeReq,
+  version: VersionReq
+): any {
+  return axios({
+    url: `/projects/${code}/process-definition/${processCode}/versions/${version}`,
+    method: 'get',
+  })
+}
+
+export function deleteVersion(
+  code: CodeReq,
+  processCode: CodeReq,
+  version: VersionReq
+): any {
+  return axios({
+    url: `/projects/${code}/process-definition/${processCode}/versions/${version}`,
+    method: 'delete',
+  })
+}
+
+export function viewTree(
+  code: CodeReq,
+  processCode: CodeReq,
+  params: LimitReq
+): any {
+  return axios({
+    url: `/projects/${code}/process-definition/${processCode}/view-tree`,
+    method: 'get',
+    params,
+  })
+}
diff --git a/dolphinscheduler-ui-next/src/service/modules/process-definition/types.ts b/dolphinscheduler-ui-next/src/service/modules/process-definition/types.ts
new file mode 100644
index 0000000..3a5ac24
--- /dev/null
+++ b/dolphinscheduler-ui-next/src/service/modules/process-definition/types.ts
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+interface CodeReq {
+  projectCode: number
+}
+
+interface CodesReq {
+  codes: string
+}
+
+interface FileReq {
+  file: any
+}
+
+interface NameReq {
+  name: string
+}
+
+interface ReleaseStateReq {
+  releaseState: 'OFFLINE' | 'ONLINE'
+}
+
+interface VersionReq {
+  version: number
+}
+
+interface LimitReq {
+  limit: number
+}
+
+interface PageReq {
+  pageNo: number
+  pageSize: number
+}
+
+interface ListReq extends PageReq {
+  searchVal?: string
+  userId?: number
+}
+
+interface ProcessDefinitionReq extends NameReq {
+  locations: string
+  taskDefinitionJson: string
+  taskRelationJson: string
+  tenantCode: string
+  description?: string
+  globalParams?: string
+  timeout?: number
+}
+
+interface TargetCodeReq {
+  targetProjectCode: number
+}
+
+export {
+  CodeReq,
+  CodesReq,
+  FileReq,
+  NameReq,
+  ReleaseStateReq,
+  VersionReq,
+  LimitReq,
+  PageReq,
+  ListReq,
+  ProcessDefinitionReq,
+  TargetCodeReq,
+}
diff --git a/dolphinscheduler-ui-next/src/utils/index.ts b/dolphinscheduler-ui-next/src/service/modules/process-instances/index.ts
similarity index 88%
copy from dolphinscheduler-ui-next/src/utils/index.ts
copy to dolphinscheduler-ui-next/src/service/modules/process-instances/index.ts
index c9f8c51..3e7c6c2 100644
--- a/dolphinscheduler-ui-next/src/utils/index.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/process-instances/index.ts
@@ -14,11 +14,3 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import classification from './classification'
-
-const utils = {
-  classification
-}
-
-export default utils
diff --git a/dolphinscheduler-ui-next/src/service/modules/process-instances/types.ts b/dolphinscheduler-ui-next/src/service/modules/process-instances/types.ts
new file mode 100644
index 0000000..12bee2f
--- /dev/null
+++ b/dolphinscheduler-ui-next/src/service/modules/process-instances/types.ts
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+interface CodeReq {
+  projectCode: number
+}
+
+interface ProcessInstanceListReq {
+  pageNo: number
+  pageSize: number
+  endDate?: string
+  executorName?: string
+  host?: string
+  processDefineCode?: number
+  processDefiniteCode?: string
+  searchVal?: string
+  startDate?: string
+  stateType?: string
+}
+
+interface BatchDeleteReq {
+  processInstanceIds: string
+  projectName: string
+  alertGroup?: string
+  createTime?: string
+  email?: string
+  id?: number
+  phone?: string
+  queue?: string
+  queueName?: string
+  state?: number
+  tenantCode?: string
+  tenantId?: number
+  updateTime?: string
+  userName?: string
+  userPassword?: string
+  userType?: string
+}
+
+interface SubIdReq {
+  subId: number
+}
+
+interface TaskReq {
+  taskCode: string
+  taskId: number
+}
+
+interface LongestReq {
+  endTime: string
+  size: number
+  startTime: string
+}
+
+interface IdReq {
+  id: number
+}
diff --git a/dolphinscheduler-ui-next/src/service/modules/projects-analysis/index.ts b/dolphinscheduler-ui-next/src/service/modules/projects-analysis/index.ts
new file mode 100644
index 0000000..b914d1f
--- /dev/null
+++ b/dolphinscheduler-ui-next/src/service/modules/projects-analysis/index.ts
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { axios } from '@/service/service'
+import { CodeReq, StateReq } from './types'
+
+export function countCommandState(): any {
+  return axios({
+    url: '/projects/analysis/command-state-count',
+    method: 'get',
+  })
+}
+
+export function countDefinitionByUser(params: CodeReq): any {
+  return axios({
+    url: '/projects/analysis/define-user-count',
+    method: 'get',
+    params,
+  })
+}
+
+export function countProcessInstanceState(params: StateReq): any {
+  return axios({
+    url: '/projects/analysis/process-state-count',
+    method: 'get',
+    params,
+  })
+}
+
+export function countQueueState(): any {
+  return axios({
+    url: '/projects/analysis/queue-count',
+    method: 'get',
+  })
+}
+
+export function countTaskState(params: StateReq): any {
+  return axios({
+    url: '/projects/analysis/task-state-count',
+    method: 'get',
+    params,
+  })
+}
diff --git a/dolphinscheduler-ui-next/src/utils/index.ts b/dolphinscheduler-ui-next/src/service/modules/projects-analysis/types.ts
similarity index 84%
copy from dolphinscheduler-ui-next/src/utils/index.ts
copy to dolphinscheduler-ui-next/src/service/modules/projects-analysis/types.ts
index c9f8c51..30a21c5 100644
--- a/dolphinscheduler-ui-next/src/utils/index.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/projects-analysis/types.ts
@@ -15,10 +15,13 @@
  * limitations under the License.
  */
 
-import classification from './classification'
+interface CodeReq {
+  projectCode?: number
+}
 
-const utils = {
-  classification
+interface StateReq extends CodeReq {
+  endDate?: string
+  startDate?: string
 }
 
-export default utils
+export { CodeReq, StateReq }
diff --git a/dolphinscheduler-ui-next/src/utils/index.ts b/dolphinscheduler-ui-next/src/service/modules/sign-out/index.ts
similarity index 85%
copy from dolphinscheduler-ui-next/src/utils/index.ts
copy to dolphinscheduler-ui-next/src/service/modules/sign-out/index.ts
index c9f8c51..4b3ebe3 100644
--- a/dolphinscheduler-ui-next/src/utils/index.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/sign-out/index.ts
@@ -15,10 +15,11 @@
  * limitations under the License.
  */
 
-import classification from './classification'
+import { axios } from '@/service/service'
 
-const utils = {
-  classification
+export function signOut(): any {
+  return axios({
+    url: '/signOut',
+    method: 'post',
+  })
 }
-
-export default utils
diff --git a/dolphinscheduler-ui-next/src/utils/index.ts b/dolphinscheduler-ui-next/src/service/modules/sign-out/types.ts
similarity index 88%
copy from dolphinscheduler-ui-next/src/utils/index.ts
copy to dolphinscheduler-ui-next/src/service/modules/sign-out/types.ts
index c9f8c51..3e7c6c2 100644
--- a/dolphinscheduler-ui-next/src/utils/index.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/sign-out/types.ts
@@ -14,11 +14,3 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import classification from './classification'
-
-const utils = {
-  classification
-}
-
-export default utils
diff --git a/dolphinscheduler-ui-next/src/service/service.ts b/dolphinscheduler-ui-next/src/service/modules/token/index.ts
similarity index 54%
copy from dolphinscheduler-ui-next/src/service/service.ts
copy to dolphinscheduler-ui-next/src/service/modules/token/index.ts
index 72f58c5..0b5ab5a 100644
--- a/dolphinscheduler-ui-next/src/service/service.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/token/index.ts
@@ -15,25 +15,37 @@
  * limitations under the License.
  */
 
-import axios, { AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios'
+import { axios } from '@/service/service'
+import { ListReq, TokenReq, UserReq, UpdateTokenReq } from './types'
 
-const baseRequestConfig: AxiosRequestConfig = {
-  baseURL: '/',
-  timeout: 10000,
+export function queryAccessTokenList(params: ListReq): any {
+  return axios({
+    url: '/access-tokens',
+    method: 'get',
+    params,
+  })
 }
 
-const service = axios.create(baseRequestConfig)
-
-const err = (error: AxiosError): Promise<AxiosError> => {
-  return Promise.reject(error)
+export function createToken(data: TokenReq): any {
+  return axios({
+    url: '/access-tokens',
+    method: 'post',
+    data,
+  })
 }
 
-service.interceptors.request.use((config: AxiosRequestConfig<any>) => {
-  return config
-}, err)
-
-service.interceptors.response.use((res: AxiosResponse) => {
-  return res.data
-}, err)
+export function queryAccessTokenByUser(params: UserReq): any {
+  return axios({
+    url: '/access-tokens',
+    method: 'get',
+    params,
+  })
+}
 
-export { service as axios }
+export function updateToken(data: UpdateTokenReq): any {
+  return axios({
+    url: '/access-tokens',
+    method: 'put',
+    data,
+  })
+}
diff --git a/dolphinscheduler-ui-next/src/service/service.ts b/dolphinscheduler-ui-next/src/service/modules/token/types.ts
similarity index 58%
copy from dolphinscheduler-ui-next/src/service/service.ts
copy to dolphinscheduler-ui-next/src/service/modules/token/types.ts
index 72f58c5..98bc1f9 100644
--- a/dolphinscheduler-ui-next/src/service/service.ts
+++ b/dolphinscheduler-ui-next/src/service/modules/token/types.ts
@@ -15,25 +15,37 @@
  * limitations under the License.
  */
 
-import axios, { AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios'
-
-const baseRequestConfig: AxiosRequestConfig = {
-  baseURL: '/',
-  timeout: 10000,
+interface ListReq {
+  pageNo: number
+  pageSize: number
+  searchVal?: string
 }
 
-const service = axios.create(baseRequestConfig)
-
-const err = (error: AxiosError): Promise<AxiosError> => {
-  return Promise.reject(error)
+interface TokenReq {
+  expireTime: string
+  userId: number
+  token?: string
 }
 
-service.interceptors.request.use((config: AxiosRequestConfig<any>) => {
-  return config
-}, err)
+interface UserReq {
+  userId?: number
+}
 
-service.interceptors.response.use((res: AxiosResponse) => {
-  return res.data
-}, err)
+interface UpdateTokenReq extends TokenReq {
+  id: number
+  alertGroup?: string
+  createTime?: string
+  email?: string
+  phone?: string
+  queue?: string
+  queueName?: string
+  state?: number
+  tenantCode?: string
+  tenantId?: number
+  updateTime?: string
+  userName?: string
+  userPassword?: string
+  userType?: string
+}
 
-export { service as axios }
+export { ListReq, TokenReq, UserReq, UpdateTokenReq }
diff --git a/dolphinscheduler-ui-next/src/service/service.ts b/dolphinscheduler-ui-next/src/service/service.ts
index 72f58c5..a8211dc 100644
--- a/dolphinscheduler-ui-next/src/service/service.ts
+++ b/dolphinscheduler-ui-next/src/service/service.ts
@@ -18,7 +18,7 @@
 import axios, { AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios'
 
 const baseRequestConfig: AxiosRequestConfig = {
-  baseURL: '/',
+  baseURL: '/dolphinscheduler',
   timeout: 10000,
 }
 
diff --git a/dolphinscheduler-ui-next/src/utils/index.ts b/dolphinscheduler-ui-next/src/utils/index.ts
index c9f8c51..6c1dbc5 100644
--- a/dolphinscheduler-ui-next/src/utils/index.ts
+++ b/dolphinscheduler-ui-next/src/utils/index.ts
@@ -18,7 +18,7 @@
 import classification from './classification'
 
 const utils = {
-  classification
+  classification,
 }
 
 export default utils
diff --git a/dolphinscheduler-ui-next/src/views/home/index.tsx b/dolphinscheduler-ui-next/src/views/home/index.tsx
index 82f1038..77bcf76 100644
--- a/dolphinscheduler-ui-next/src/views/home/index.tsx
+++ b/dolphinscheduler-ui-next/src/views/home/index.tsx
@@ -19,11 +19,9 @@ import { defineComponent } from 'vue'
 import styles from './index.module.scss'
 
 export default defineComponent({
-    name: 'home',
-    setup() {},
-    render() {
-      return <div class={styles.container}>
-        Home Test
-      </div>
-    }
-})
\ No newline at end of file
+  name: 'home',
+  setup() {},
+  render() {
+    return <div class={styles.container}>Home Test</div>
+  },
+})
diff --git a/dolphinscheduler-ui-next/src/views/login/index.tsx b/dolphinscheduler-ui-next/src/views/login/index.tsx
index 4079cf9..c052007 100644
--- a/dolphinscheduler-ui-next/src/views/login/index.tsx
+++ b/dolphinscheduler-ui-next/src/views/login/index.tsx
@@ -35,21 +35,21 @@ const Login = defineComponent({
       rules: {
         username: {
           trigger: ['input', 'blur'],
-          validator () {
+          validator() {
             if (state.loginForm.username === '') {
               return new Error(`${t('login.username_tips')}`)
             }
-          }
+          },
         },
         password: {
           trigger: ['input', 'blur'],
-          validator () {
+          validator() {
             if (state.loginForm.password === '') {
               return new Error(`${t('login.password_tips')}`)
             }
-          }
-        }
-      } as FormRules
+          },
+        },
+      } as FormRules,
     })
 
     const handleChange = (value: string) => {
@@ -67,16 +67,20 @@ const Login = defineComponent({
       })
     }
 
-    return { t, locale, handleChange, handleLogin, ...toRefs(state)}
+    return { t, locale, handleChange, handleLogin, ...toRefs(state) }
   },
   render() {
     return (
       <div class={styles.container}>
         <div class={styles['language-switch']}>
-          <NSwitch onUpdateValue={this.handleChange} checked-value="en_US" unchecked-value="zh_CN">
+          <NSwitch
+            onUpdateValue={this.handleChange}
+            checked-value='en_US'
+            unchecked-value='zh_CN'
+          >
             {{
-              checked: () => 'en_US', 
-              unchecked: () =>'zh_CN'
+              checked: () => 'en_US',
+              unchecked: () => 'zh_CN',
             }}
           </NSwitch>
         </div>
@@ -85,28 +89,36 @@ const Login = defineComponent({
             <div class={styles['logo-img']}></div>
           </div>
           <div class={styles['form-model']}>
-            <NForm rules={this.rules} ref="loginFormRef">
-              <NFormItem label={this.t('login.username')} label-style={{color:'black'}} path="username">
+            <NForm rules={this.rules} ref='loginFormRef'>
+              <NFormItem
+                label={this.t('login.username')}
+                label-style={{ color: 'black' }}
+                path='username'
+              >
                 <NInput
-                  type="text"
-                  size="large"
+                  type='text'
+                  size='large'
                   v-model={[this.loginForm.username, 'value']}
                   placeholder={this.t('login.username_tips')}
                   autofocus
                   onKeydown={withKeys(this.handleLogin, ['enter'])}
                 />
               </NFormItem>
-              <NFormItem label={this.t('login.password')} label-style={{color:'black'}} path="password">
+              <NFormItem
+                label={this.t('login.password')}
+                label-style={{ color: 'black' }}
+                path='password'
+              >
                 <NInput
-                  type="password"
-                  size="large"
+                  type='password'
+                  size='large'
                   v-model={[this.loginForm.password, 'value']}
                   placeholder={this.t('login.password_tips')}
                   onKeydown={withKeys(this.handleLogin, ['enter'])}
                 />
               </NFormItem>
             </NForm>
-            <NButton round type="primary" onClick={this.handleLogin}>
+            <NButton round type='primary' onClick={this.handleLogin}>
               {this.t('login.signin')}
             </NButton>
           </div>
@@ -116,4 +128,4 @@ const Login = defineComponent({
   },
 })
 
-export default Login
\ No newline at end of file
+export default Login