diff --git a/apps/web-antd/src/api/system/oss-config/index.ts b/apps/web-antd/src/api/system/oss-config/index.ts new file mode 100644 index 00000000..3774e8af --- /dev/null +++ b/apps/web-antd/src/api/system/oss-config/index.ts @@ -0,0 +1,41 @@ +import type { OssConfig } from './model'; + +import type { ID, IDS, PageQuery } from '#/api/common'; + +import { requestClient } from '#/api/request'; + +enum Api { + ossConfigChangeStatus = '/resource/oss/config/changeStatus', + ossConfigList = '/resource/oss/config/list', + root = '/resource/oss/config', +} + +// 获取OSS配置列表 +export function ossConfigList(params?: PageQuery) { + return requestClient.get(Api.ossConfigList, { params }); +} + +// 获取OSS配置的信息 +export function ossConfigInfo(ossConfigId: ID) { + return requestClient.get(`${Api.root}/${ossConfigId}`); +} + +// 添加新的OSS配置 +export function ossConfigAdd(data: any) { + return requestClient.postWithMsg(Api.root, data); +} + +// 更新现有的OSS配置 +export function ossConfigUpdate(data: any) { + return requestClient.putWithMsg(Api.root, data); +} + +// 删除OSS配置 +export function ossConfigRemove(ossConfigIds: IDS) { + return requestClient.deleteWithMsg(`${Api.root}/${ossConfigIds}`); +} + +// 更改OSS配置的状态 +export function ossConfigChangeStatus(data: any) { + return requestClient.putWithMsg(Api.ossConfigChangeStatus, data); +} diff --git a/apps/web-antd/src/api/system/oss-config/model.d.ts b/apps/web-antd/src/api/system/oss-config/model.d.ts new file mode 100644 index 00000000..b80b210d --- /dev/null +++ b/apps/web-antd/src/api/system/oss-config/model.d.ts @@ -0,0 +1,16 @@ +export interface OssConfig { + ossConfigId: number; + configKey: string; + accessKey: string; + secretKey: string; + bucketName: string; + prefix: string; + endpoint: string; + domain: string; + isHttps: string; + region: string; + status: string; + ext1: string; + remark: string; + accessPolicy: string; +} diff --git a/apps/web-antd/src/router/routes/local.ts b/apps/web-antd/src/router/routes/local.ts index dfbac7cd..ee967476 100644 --- a/apps/web-antd/src/router/routes/local.ts +++ b/apps/web-antd/src/router/routes/local.ts @@ -33,6 +33,30 @@ const profileRoute: RouteRecordStringComponent[] = [ }, ], }, + { + component: 'BasicLayout', + meta: { + hideChildrenInMenu: true, + hideInMenu: true, + title: 'oss配置', + }, + name: 'OssConfig', + path: '/', + redirect: '/system/oss-config', + children: [ + { + component: '/system/oss-config/index', + meta: { + activePath: '/system/oss', + icon: 'mingcute:profile-line', + keepAlive: true, + title: 'oss配置', + }, + name: 'OssConfigIndex', + path: '/system/oss-config', + }, + ], + }, ]; /** diff --git a/apps/web-antd/src/views/system/oss-config/data.tsx b/apps/web-antd/src/views/system/oss-config/data.tsx new file mode 100644 index 00000000..2b949351 --- /dev/null +++ b/apps/web-antd/src/views/system/oss-config/data.tsx @@ -0,0 +1,173 @@ +import { DictEnum } from '@vben/constants'; + +import { type FormSchemaGetter, z } from '#/adapter'; +import { getDictOptions } from '#/utils/dict'; + +const accessPolicyOptions = [ + { color: 'orange', label: '私有', value: '0' }, + { color: 'green', label: '公开', value: '1' }, + { color: 'blue', label: '自定义', value: '2' }, +]; + +export const drawerSchema: FormSchemaGetter = () => [ + { + component: 'Input', + dependencies: { + show: () => false, + triggerFields: [''], + }, + fieldName: 'ossConfigId', + }, + { + component: 'Divider', + componentProps: { + orientation: 'center', + }, + fieldName: 'divider1', + labelClass: 'w-0', + renderComponentContent: () => ({ + default: () => '基本信息', + }), + }, + { + component: 'Input', + componentProps: { + placeholder: '请输入', + }, + fieldName: 'configKey', + label: '配置名称', + rules: 'required', + }, + { + component: 'Input', + componentProps: { + placeholder: '请输入', + }, + fieldName: 'endpoint', + label: '服务地址', + renderComponentContent: (formModel) => ({ + addonBefore: () => (formModel.isHttps === 'Y' ? 'https://' : 'http://'), + }), + rules: z + .string({ message: '请输入服务地址' }) + .refine( + (domain) => + !(domain.startsWith('http://') || domain.startsWith('https://')), + { message: '请输入正确的域名, 不需要http(s)' }, + ), + }, + { + component: 'Input', + componentProps: { + placeholder: '请输入', + }, + fieldName: 'domain', + label: '自定义域名', + rules: z + .string() + .refine( + (domain) => + !(domain.startsWith('http://') || domain.startsWith('https://')), + { message: '请输入正确的域名, 不需要http(s)' }, + ) + .optional(), + }, + { + component: 'Divider', + componentProps: { + orientation: 'center', + }, + fieldName: 'divider2', + labelClass: 'w-0', + renderComponentContent: () => ({ + default: () => '认证信息', + }), + }, + { + component: 'Input', + componentProps: { + placeholder: '请输入', + }, + fieldName: 'accessKey', + label: 'accessKey', + rules: 'required', + }, + { + component: 'Input', + componentProps: { + placeholder: '请输入', + }, + fieldName: 'secretKey', + label: 'secretKey', + rules: 'required', + }, + { + component: 'Divider', + componentProps: { + orientation: 'center', + }, + fieldName: 'divider3', + labelClass: 'w-0', + renderComponentContent: () => ({ + default: () => '其他信息', + }), + }, + { + component: 'Input', + componentProps: { + placeholder: '请输入', + }, + fieldName: 'bucketName', + label: '桶名称', + rules: 'required', + }, + { + component: 'Input', + componentProps: { + placeholder: '请输入', + }, + fieldName: 'prefix', + label: '前缀', + }, + { + component: 'RadioGroup', + componentProps: { + buttonStyle: 'solid', + options: accessPolicyOptions, + optionType: 'button', + }, + defaultValue: '0', + fieldName: 'accessPolicy', + formItemClass: 'col-span-3 lg:col-span-2', + label: '权限桶类型', + }, + { + component: 'RadioGroup', + componentProps: { + buttonStyle: 'solid', + options: getDictOptions(DictEnum.SYS_YES_NO), + optionType: 'button', + }, + defaultValue: 'N', + fieldName: 'isHttps', + formItemClass: 'col-span-3 lg:col-span-1', + label: '是否https', + rules: 'required', + }, + { + component: 'Input', + componentProps: { + placeholder: '请输入', + }, + fieldName: 'region', + label: '区域', + }, + { + component: 'Textarea', + componentProps: { + placeholder: '请输入', + }, + fieldName: 'remark', + label: '备注', + }, +]; diff --git a/apps/web-antd/src/views/system/oss-config/index.vue b/apps/web-antd/src/views/system/oss-config/index.vue new file mode 100644 index 00000000..f20f6577 --- /dev/null +++ b/apps/web-antd/src/views/system/oss-config/index.vue @@ -0,0 +1,24 @@ + + + diff --git a/apps/web-antd/src/views/system/oss-config/oss-config-drawer.vue b/apps/web-antd/src/views/system/oss-config/oss-config-drawer.vue new file mode 100644 index 00000000..8bd5f630 --- /dev/null +++ b/apps/web-antd/src/views/system/oss-config/oss-config-drawer.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/apps/web-antd/src/views/system/oss/index.vue b/apps/web-antd/src/views/system/oss/index.vue index 06372a15..de83d011 100644 --- a/apps/web-antd/src/views/system/oss/index.vue +++ b/apps/web-antd/src/views/system/oss/index.vue @@ -1,9 +1,13 @@