diff --git a/apps/vben5/apps/app-antd/src/locales/langs/en-US/abp.json b/apps/vben5/apps/app-antd/src/locales/langs/en-US/abp.json index 16d8c78f7..7e8a3c8fa 100644 --- a/apps/vben5/apps/app-antd/src/locales/langs/en-US/abp.json +++ b/apps/vben5/apps/app-antd/src/locales/langs/en-US/abp.json @@ -65,7 +65,8 @@ "noticeSettings": "Notice Settings", "authenticatorSettings": "Authenticator Settings", "changeAvatar": "Change Avatar", - "sessionSettings": "Session Settings" + "sessionSettings": "Session Settings", + "personalDataSettings": "Personal Data Settings" }, "profile": "My Profile" }, diff --git a/apps/vben5/apps/app-antd/src/locales/langs/zh-CN/abp.json b/apps/vben5/apps/app-antd/src/locales/langs/zh-CN/abp.json index 241a6a2de..4e424b605 100644 --- a/apps/vben5/apps/app-antd/src/locales/langs/zh-CN/abp.json +++ b/apps/vben5/apps/app-antd/src/locales/langs/zh-CN/abp.json @@ -65,7 +65,8 @@ "noticeSettings": "新消息通知", "authenticatorSettings": "身份验证程序", "changeAvatar": "更改头像", - "sessionSettings": "会话管理" + "sessionSettings": "会话管理", + "personalDataSettings": "个人信息管理" }, "profile": "个人中心" }, diff --git a/apps/vben5/apps/app-antd/src/store/auth.ts b/apps/vben5/apps/app-antd/src/store/auth.ts index deb7fe4b8..6de88173e 100644 --- a/apps/vben5/apps/app-antd/src/store/auth.ts +++ b/apps/vben5/apps/app-antd/src/store/auth.ts @@ -100,14 +100,17 @@ export const useAuthStore = defineStore('auth', () => { } async function fetchUserInfo() { - let userInfo: ({ [key: string]: any } & UserInfo) | null = null; + let userInfo: null | (UserInfo & { [key: string]: any }) = null; const userInfoRes = await getUserInfoApi(); const abpConfig = await getConfigApi(); userInfo = { userId: userInfoRes.sub ?? abpConfig.currentUser.id, username: userInfoRes.uniqueName ?? abpConfig.currentUser.userName, - realName: userInfoRes.name ?? abpConfig.currentUser.name, - avatar: userInfoRes.avatarUrl ?? userInfoRes.picture, + realName: + userInfoRes.name ?? + abpConfig.currentUser.name ?? + abpConfig.currentUser.userName, + avatar: userInfoRes.avatarUrl ?? userInfoRes.picture ?? '', desc: userInfoRes.uniqueName ?? userInfoRes.name, email: userInfoRes.email ?? userInfoRes.email, emailVerified: diff --git a/apps/vben5/apps/app-antd/src/views/_core/authentication/login.vue b/apps/vben5/apps/app-antd/src/views/_core/authentication/login.vue index d0cd7f002..16e9a25ab 100644 --- a/apps/vben5/apps/app-antd/src/views/_core/authentication/login.vue +++ b/apps/vben5/apps/app-antd/src/views/_core/authentication/login.vue @@ -1,5 +1,6 @@ + + + + + + diff --git a/apps/vben5/packages/@abp/gdpr/package.json b/apps/vben5/packages/@abp/gdpr/package.json new file mode 100644 index 000000000..89d869902 --- /dev/null +++ b/apps/vben5/packages/@abp/gdpr/package.json @@ -0,0 +1,36 @@ +{ + "name": "@abp/gdpr", + "version": "9.0.4", + "homepage": "https://github.com/colinin/abp-next-admin", + "bugs": "https://github.com/colinin/abp-next-admin/issues", + "repository": { + "type": "git", + "url": "git+https://github.com/colinin/abp-next-admin.git", + "directory": "packages/@abp/gdpr" + }, + "license": "MIT", + "type": "module", + "sideEffects": [ + "**/*.css" + ], + "exports": { + ".": { + "types": "./src/index.ts", + "default": "./src/index.ts" + } + }, + "dependencies": { + "@abp/core": "workspace:*", + "@abp/request": "workspace:*", + "@abp/ui": "workspace:*", + "@ant-design/icons-vue": "catalog:", + "@vben/common-ui": "workspace:*", + "@vben/hooks": "workspace:*", + "@vben/icons": "workspace:*", + "@vben/layouts": "workspace:*", + "@vben/locales": "workspace:*", + "ant-design-vue": "catalog:", + "dayjs": "catalog:", + "vue": "catalog:*" + } +} diff --git a/apps/vben5/packages/@abp/gdpr/src/api/index.ts b/apps/vben5/packages/@abp/gdpr/src/api/index.ts new file mode 100644 index 000000000..da43240af --- /dev/null +++ b/apps/vben5/packages/@abp/gdpr/src/api/index.ts @@ -0,0 +1 @@ +export * from './useGdprRequestsApi'; diff --git a/apps/vben5/packages/@abp/gdpr/src/api/useGdprRequestsApi.ts b/apps/vben5/packages/@abp/gdpr/src/api/useGdprRequestsApi.ts new file mode 100644 index 000000000..5f15f709b --- /dev/null +++ b/apps/vben5/packages/@abp/gdpr/src/api/useGdprRequestsApi.ts @@ -0,0 +1,100 @@ +import type { PagedResultDto } from '@abp/core'; + +import type { GdprRequestDto, GdprRequestGetListInput } from '../types'; + +import { useRequest } from '@abp/request'; + +export function useGdprRequestsApi() { + const { cancel, request } = useRequest(); + + /** + * 删除个人数据请求 + * @param {string} id 请求Id + * @returns {void} + */ + function deleteApi(id: string): Promise { + return request(`/api/gdpr/requests/${id}`, { + method: 'DELETE', + }); + } + + /** + * 删除用户账户 + * @returns {Promise} + */ + function deletePersonalAccountApi(): Promise { + return request(`/api/gdpr/requests/personal-account`, { + method: 'DELETE', + }); + } + + /** + * 删除用户数据 + * @returns {Promise} + */ + function deletePersonalDataApi(): Promise { + return request(`/api/gdpr/requests/personal-data`, { + method: 'DELETE', + }); + } + + /** + * 准备用户数据 + * @returns {Promise} + */ + function preparePersonalDataApi(): Promise { + return request(`/api/gdpr/requests/personal-data/prepare`, { + method: 'POST', + }); + } + + /** + * 下载用户数据 + * @returns {Promise} 用户数据文件 + */ + function downloadPersonalDataApi(requestId: string): Promise { + return request( + `/api/gdpr/requests/personal-data/download/${requestId}`, + { + method: 'GET', + responseType: 'blob', + }, + ); + } + + /** + * 查询个人数据请求 + * @param {string} id 请求Id + * @returns {Promise} 个人数据请求 + */ + function getApi(id: string): Promise { + return request(`/api/gdpr/requests/${id}`, { + method: 'GET', + }); + } + + /** + * 查询个人数据请求分页列表 + * @param {GdprRequestGetListInput} input 参数 + * @returns {Promise>} 个人数据请求列表 + */ + function getPagedListApi( + input?: GdprRequestGetListInput, + ): Promise> { + return request>(`/api/gdpr/requests`, { + method: 'GET', + params: input, + }); + } + + return { + cancel, + deleteApi, + deletePersonalAccountApi, + deletePersonalDataApi, + downloadPersonalDataApi, + getApi, + getPagedListApi, + preparePersonalDataApi, + }; +} diff --git a/apps/vben5/packages/@abp/gdpr/src/components/GdprCard.vue b/apps/vben5/packages/@abp/gdpr/src/components/GdprCard.vue new file mode 100644 index 000000000..a0808f2ee --- /dev/null +++ b/apps/vben5/packages/@abp/gdpr/src/components/GdprCard.vue @@ -0,0 +1,60 @@ + + + + + + + {{ $t('AbpGdpr.DeletePersonalAccount') }} + + + + + + + diff --git a/apps/vben5/packages/@abp/gdpr/src/components/GdprTable.vue b/apps/vben5/packages/@abp/gdpr/src/components/GdprTable.vue new file mode 100644 index 000000000..a7cd54a6b --- /dev/null +++ b/apps/vben5/packages/@abp/gdpr/src/components/GdprTable.vue @@ -0,0 +1,218 @@ + + + + + + + + {{ $t('AbpGdpr.RequestPersonalData') }} + + + {{ $t('AbpGdpr.DeletePersonalData') }} + + + + + {{ row.readyTime }} + + {{ $t('AbpGdpr.Preparing') }} + + + + + + {{ $t('AbpGdpr.Download') }} + + + {{ $t('AbpUi.Delete') }} + + + + + + + diff --git a/apps/vben5/packages/@abp/gdpr/src/components/index.ts b/apps/vben5/packages/@abp/gdpr/src/components/index.ts new file mode 100644 index 000000000..f3d7e456d --- /dev/null +++ b/apps/vben5/packages/@abp/gdpr/src/components/index.ts @@ -0,0 +1,2 @@ +export { default as GdprCard } from './GdprCard.vue'; +export { default as GdprTable } from './GdprTable.vue'; diff --git a/apps/vben5/packages/@abp/gdpr/src/index.ts b/apps/vben5/packages/@abp/gdpr/src/index.ts new file mode 100644 index 000000000..314dad0cd --- /dev/null +++ b/apps/vben5/packages/@abp/gdpr/src/index.ts @@ -0,0 +1,3 @@ +export * from './api'; +export * from './components'; +export * from './types'; diff --git a/apps/vben5/packages/@abp/gdpr/src/types/index.ts b/apps/vben5/packages/@abp/gdpr/src/types/index.ts new file mode 100644 index 000000000..c3dff2f3f --- /dev/null +++ b/apps/vben5/packages/@abp/gdpr/src/types/index.ts @@ -0,0 +1 @@ +export * from './requests'; diff --git a/apps/vben5/packages/@abp/gdpr/src/types/requests.ts b/apps/vben5/packages/@abp/gdpr/src/types/requests.ts new file mode 100644 index 000000000..32f6fd480 --- /dev/null +++ b/apps/vben5/packages/@abp/gdpr/src/types/requests.ts @@ -0,0 +1,17 @@ +import type { EntityDto, PagedAndSortedResultRequestDto } from '@abp/core'; + +interface GdprRequestDto extends EntityDto { + /** 创建时间 */ + creationTime: string; + /** 就绪时间 */ + readyTime: string; +} + +interface GdprRequestGetListInput extends PagedAndSortedResultRequestDto { + /** 创建时间 */ + creationTime?: string; + /** 就绪时间 */ + readyTime?: string; +} + +export type { GdprRequestDto, GdprRequestGetListInput }; diff --git a/apps/vben5/packages/@abp/gdpr/tsconfig.json b/apps/vben5/packages/@abp/gdpr/tsconfig.json new file mode 100644 index 000000000..ce1a891fb --- /dev/null +++ b/apps/vben5/packages/@abp/gdpr/tsconfig.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@vben/tsconfig/web.json", + "include": ["src"], + "exclude": ["node_modules"] +}