From 141a90a53b2f6cd18be814c582114f9dc709b93c Mon Sep 17 00:00:00 2001 From: puhui999 Date: Wed, 14 May 2025 17:11:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20ele=20infra=20?= =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=B8=AD=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/cropper/cropper-avatar.vue | 157 ++++++++ .../src/components/cropper/cropper-modal.vue | 371 ++++++++++++++++++ .../src/components/cropper/cropper.vue | 173 ++++++++ apps/web-ele/src/components/cropper/index.ts | 3 + apps/web-ele/src/components/cropper/typing.ts | 68 ++++ .../web-ele/src/views/_core/profile/index.vue | 66 +++- .../views/_core/profile/modules/base-info.vue | 107 +++++ .../_core/profile/modules/profile-user.vue | 144 +++++++ .../views/_core/profile/modules/reset-pwd.vue | 94 +++++ .../_core/profile/modules/user-social.vue | 214 ++++++++++ 10 files changed, 1393 insertions(+), 4 deletions(-) create mode 100644 apps/web-ele/src/components/cropper/cropper-avatar.vue create mode 100644 apps/web-ele/src/components/cropper/cropper-modal.vue create mode 100644 apps/web-ele/src/components/cropper/cropper.vue create mode 100644 apps/web-ele/src/components/cropper/index.ts create mode 100644 apps/web-ele/src/components/cropper/typing.ts create mode 100644 apps/web-ele/src/views/_core/profile/modules/base-info.vue create mode 100644 apps/web-ele/src/views/_core/profile/modules/profile-user.vue create mode 100644 apps/web-ele/src/views/_core/profile/modules/reset-pwd.vue create mode 100644 apps/web-ele/src/views/_core/profile/modules/user-social.vue diff --git a/apps/web-ele/src/components/cropper/cropper-avatar.vue b/apps/web-ele/src/components/cropper/cropper-avatar.vue new file mode 100644 index 00000000..0ba42f6b --- /dev/null +++ b/apps/web-ele/src/components/cropper/cropper-avatar.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/apps/web-ele/src/components/cropper/cropper-modal.vue b/apps/web-ele/src/components/cropper/cropper-modal.vue new file mode 100644 index 00000000..7e700837 --- /dev/null +++ b/apps/web-ele/src/components/cropper/cropper-modal.vue @@ -0,0 +1,371 @@ + + + + + diff --git a/apps/web-ele/src/components/cropper/cropper.vue b/apps/web-ele/src/components/cropper/cropper.vue new file mode 100644 index 00000000..c2d62755 --- /dev/null +++ b/apps/web-ele/src/components/cropper/cropper.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/apps/web-ele/src/components/cropper/index.ts b/apps/web-ele/src/components/cropper/index.ts new file mode 100644 index 00000000..43fd89ff --- /dev/null +++ b/apps/web-ele/src/components/cropper/index.ts @@ -0,0 +1,3 @@ +export { default as CropperAvatar } from './cropper-avatar.vue'; +export { default as CropperImage } from './cropper.vue'; +export type { CropperType } from './typing'; diff --git a/apps/web-ele/src/components/cropper/typing.ts b/apps/web-ele/src/components/cropper/typing.ts new file mode 100644 index 00000000..f9ba238f --- /dev/null +++ b/apps/web-ele/src/components/cropper/typing.ts @@ -0,0 +1,68 @@ +import type Cropper from 'cropperjs'; +import type { ButtonProps } from 'element-plus'; + +import type { CSSProperties } from 'vue'; + +export interface apiFunParams { + file: Blob; + filename: string; + name: string; +} + +export interface CropendResult { + imgBase64: string; + imgInfo: Cropper.Data; +} + +export interface CropperProps { + src?: string; + alt?: string; + circled?: boolean; + realTimePreview?: boolean; + height?: number | string; + crossorigin?: '' | 'anonymous' | 'use-credentials' | undefined; + imageStyle?: CSSProperties; + options?: Cropper.Options; +} + +export interface CropperAvatarProps { + width?: number | string; + value?: string; + showBtn?: boolean; + btnProps?: ButtonProps; + btnText?: string; + uploadApi?: (params: apiFunParams) => Promise; + size?: number; +} + +export interface CropperModalProps { + circled?: boolean; + uploadApi?: (params: apiFunParams) => Promise; + src?: string; + size?: number; +} + +export const defaultOptions: Cropper.Options = { + aspectRatio: 1, + zoomable: true, + zoomOnTouch: true, + zoomOnWheel: true, + cropBoxMovable: true, + cropBoxResizable: true, + toggleDragModeOnDblclick: true, + autoCrop: true, + background: true, + highlight: true, + center: true, + responsive: true, + restore: true, + checkCrossOrigin: true, + checkOrientation: true, + scalable: true, + modal: true, + guides: true, + movable: true, + rotatable: true, +}; + +export type { Cropper as CropperType }; diff --git a/apps/web-ele/src/views/_core/profile/index.vue b/apps/web-ele/src/views/_core/profile/index.vue index 936032a1..98b7b3f3 100644 --- a/apps/web-ele/src/views/_core/profile/index.vue +++ b/apps/web-ele/src/views/_core/profile/index.vue @@ -1,7 +1,65 @@ - + + +
+ + + + - + + + + + + + + + + + + + + + +
+
+ diff --git a/apps/web-ele/src/views/_core/profile/modules/base-info.vue b/apps/web-ele/src/views/_core/profile/modules/base-info.vue new file mode 100644 index 00000000..154e92c6 --- /dev/null +++ b/apps/web-ele/src/views/_core/profile/modules/base-info.vue @@ -0,0 +1,107 @@ + + + diff --git a/apps/web-ele/src/views/_core/profile/modules/profile-user.vue b/apps/web-ele/src/views/_core/profile/modules/profile-user.vue new file mode 100644 index 00000000..52afe989 --- /dev/null +++ b/apps/web-ele/src/views/_core/profile/modules/profile-user.vue @@ -0,0 +1,144 @@ + + + diff --git a/apps/web-ele/src/views/_core/profile/modules/reset-pwd.vue b/apps/web-ele/src/views/_core/profile/modules/reset-pwd.vue new file mode 100644 index 00000000..b357a310 --- /dev/null +++ b/apps/web-ele/src/views/_core/profile/modules/reset-pwd.vue @@ -0,0 +1,94 @@ + + + diff --git a/apps/web-ele/src/views/_core/profile/modules/user-social.vue b/apps/web-ele/src/views/_core/profile/modules/user-social.vue new file mode 100644 index 00000000..47a82b95 --- /dev/null +++ b/apps/web-ele/src/views/_core/profile/modules/user-social.vue @@ -0,0 +1,214 @@ + + +