diff --git a/apps/web-antd/src/api/infra/data-source-config/index.ts b/apps/web-antd/src/api/infra/data-source-config/index.ts new file mode 100644 index 000000000..2b9b7617b --- /dev/null +++ b/apps/web-antd/src/api/infra/data-source-config/index.ts @@ -0,0 +1,38 @@ +import { requestClient } from '#/api/request'; + +export namespace InfraDataSourceConfigApi { + /** 数据源配置信息 */ + export interface InfraDataSourceConfig { + id?: number; + name: string; + url: string; + username: string; + password: string; + createTime?: Date; + } +} + +/** 查询数据源配置列表 */ +export function getDataSourceConfigList() { + return requestClient.get('/infra/data-source-config/list'); +} + +/** 查询数据源配置详情 */ +export function getDataSourceConfig(id: number) { + return requestClient.get(`/infra/data-source-config/get?id=${id}`); +} + +/** 新增数据源配置 */ +export function createDataSourceConfig(data: InfraDataSourceConfigApi.InfraDataSourceConfig) { + return requestClient.post('/infra/data-source-config/create', data); +} + +/** 修改数据源配置 */ +export function updateDataSourceConfig(data: InfraDataSourceConfigApi.InfraDataSourceConfig) { + return requestClient.put('/infra/data-source-config/update', data); +} + +/** 删除数据源配置 */ +export function deleteDataSourceConfig(id: number) { + return requestClient.delete(`/infra/data-source-config/delete?id=${id}`); +} \ No newline at end of file diff --git a/apps/web-antd/src/views/infra/dataSourceConfig/data.ts b/apps/web-antd/src/views/infra/dataSourceConfig/data.ts new file mode 100644 index 000000000..71424a8f6 --- /dev/null +++ b/apps/web-antd/src/views/infra/dataSourceConfig/data.ts @@ -0,0 +1,119 @@ +import type { VbenFormSchema } from '#/adapter/form'; +import type { OnActionClickFn, VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { InfraDataSourceConfigApi } from '#/api/infra/data-source-config'; + +import { useAccess } from '@vben/access'; + +const { hasAccessByCodes } = useAccess(); + +/** 新增/修改的表单 */ +export function useFormSchema(): VbenFormSchema[] { + return [ + { + component: 'Input', + fieldName: 'id', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + fieldName: 'name', + label: '数据源名称', + component: 'Input', + componentProps: { + placeholder: '请输入数据源名称', + }, + rules: 'required', + }, + { + fieldName: 'url', + label: '数据源连接', + component: 'Input', + componentProps: { + placeholder: '请输入数据源连接', + }, + rules: 'required', + }, + { + fieldName: 'username', + label: '用户名', + component: 'Input', + componentProps: { + placeholder: '请输入用户名', + }, + rules: 'required', + }, + { + fieldName: 'password', + label: '密码', + component: 'Input', + componentProps: { + placeholder: '请输入密码', + type: 'password', + }, + rules: 'required', + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns( + onActionClick: OnActionClickFn, +): VxeTableGridOptions['columns'] { + return [ + { + field: 'id', + title: '主键编号', + minWidth: 100, + }, + { + field: 'name', + title: '数据源名称', + minWidth: 150, + }, + { + field: 'url', + title: '数据源连接', + minWidth: 300, + }, + { + field: 'username', + title: '用户名', + minWidth: 120, + }, + { + field: 'createTime', + title: '创建时间', + minWidth: 180, + formatter: 'formatDateTime', + }, + { + field: 'operation', + title: '操作', + minWidth: 130, + align: 'center', + fixed: 'right', + cellRender: { + attrs: { + nameField: 'name', + nameTitle: '数据源', + onClick: onActionClick, + }, + name: 'CellOperation', + options: [ + { + code: 'edit', + show: hasAccessByCodes(['infra:data-source-config:update']), + disabled: (row: any) => row.id === 0, + }, + { + code: 'delete', + show: hasAccessByCodes(['infra:data-source-config:delete']), + disabled: (row: any) => row.id === 0, + }, + ], + }, + }, + ]; +} diff --git a/apps/web-antd/src/views/infra/dataSourceConfig/index.vue b/apps/web-antd/src/views/infra/dataSourceConfig/index.vue new file mode 100644 index 000000000..eade76669 --- /dev/null +++ b/apps/web-antd/src/views/infra/dataSourceConfig/index.vue @@ -0,0 +1,114 @@ + + + \ No newline at end of file diff --git a/apps/web-antd/src/views/infra/dataSourceConfig/modules/form.vue b/apps/web-antd/src/views/infra/dataSourceConfig/modules/form.vue new file mode 100644 index 000000000..1978f9593 --- /dev/null +++ b/apps/web-antd/src/views/infra/dataSourceConfig/modules/form.vue @@ -0,0 +1,75 @@ + + + diff --git a/packages/@core/base/typings/src/menu-record.ts b/packages/@core/base/typings/src/menu-record.ts index 21f6ab516..861bc6843 100644 --- a/packages/@core/base/typings/src/menu-record.ts +++ b/packages/@core/base/typings/src/menu-record.ts @@ -1,5 +1,23 @@ import type { Component } from 'vue'; -import type { RouteRecordRaw } from 'vue-router'; +import type { RouteMeta, RouteRecordRaw } from 'vue-router'; + +/** 路由元信息 */ +interface AppRouteRecordRaw extends Omit { + children?: AppRouteRecordRaw[]; + component?: any; + componentName?: string; + components?: any; + fullPath?: string; + icon?: string; + id?: any; + keepAlive?: boolean; + meta: RouteMeta; + name: string; + parentId?: number; + props?: any; + sort?: number; + visible?: boolean; +} /** * 扩展路由原始对象 @@ -73,4 +91,4 @@ interface MenuRecordRaw extends MenuRecordBadgeRaw { show?: boolean; } -export type { ExRouteRecordRaw, MenuRecordBadgeRaw, MenuRecordRaw }; +export type { ExRouteRecordRaw, MenuRecordBadgeRaw, MenuRecordRaw, AppRouteRecordRaw }; diff --git a/packages/types/src/user.ts b/packages/types/src/user.ts index baba7278f..478141537 100644 --- a/packages/types/src/user.ts +++ b/packages/types/src/user.ts @@ -1,5 +1,4 @@ -import type { BasicUserInfo } from '@vben-core/typings'; -import type { RouteMeta, RouteRecordRaw } from 'vue-router'; +import type { AppRouteRecordRaw, BasicUserInfo } from '@vben-core/typings'; /** 用户信息 */ interface UserInfo extends BasicUserInfo { @@ -21,23 +20,4 @@ interface AuthPermissionInfo { } -/** 路由元信息 */ -interface AppRouteRecordRaw extends Omit { - - children?: AppRouteRecordRaw[]; - component?: any; - componentName?: string; - components?: any; - fullPath?: string; - icon?: string; - keepAlive?: boolean; - meta: RouteMeta; - name: string; - parentId?: number; - props?: any; - sort?: number; - visible?: boolean; - -} - -export type { UserInfo, AuthPermissionInfo, AppRouteRecordRaw }; +export type { UserInfo, AuthPermissionInfo }; diff --git a/packages/utils/src/helpers/generate-menus.ts b/packages/utils/src/helpers/generate-menus.ts index 7f14a1a74..a4e453a45 100644 --- a/packages/utils/src/helpers/generate-menus.ts +++ b/packages/utils/src/helpers/generate-menus.ts @@ -1,9 +1,8 @@ import type { Router, RouteRecordRaw } from 'vue-router'; -import type { ExRouteRecordRaw, MenuRecordRaw, RouteRecordStringComponent } from '@vben-core/typings'; +import type { ExRouteRecordRaw, MenuRecordRaw, RouteRecordStringComponent, AppRouteRecordRaw } from '@vben-core/typings'; import { filterTree, mapTree, isHttpUrl } from '@vben-core/shared/utils'; -import type { AppRouteRecordRaw } from '@vben/types'; // TODO @芋艿:这里的报错,解决 /** * 根据 routes 生成菜单列表