From 5befcddaf5015383f9bef61fcd1ed4503fe9afb7 Mon Sep 17 00:00:00 2001 From: landaiqing Date: Mon, 24 Feb 2025 00:36:54 +0800 Subject: [PATCH] :construction: developing --- components.d.ts | 4 + public/provider_icon/ali.svg | 1 + public/provider_icon/huawei.svg | 1 + public/provider_icon/minio.svg | 1 + public/provider_icon/tencent.svg | 1 + src/api/{upscale => phone}/index.ts | 2 +- src/api/storage/index.ts | 42 ++++- src/assets/styles/theme.scss | 10 + src/assets/svgs/oss.svg | 1 + src/assets/svgs/wenhao.svg | 1 + src/constant/provider_icon.ts | 6 + src/layout/default/Header/Logo.vue | 4 +- src/layout/default/Header/Menu.vue | 34 ++-- src/router/modules/phone_upload.ts | 11 +- src/router/modules/upscale.ts | 2 +- src/store/modules/imageStore.ts | 22 ++- src/store/modules/uploadStore.ts | 6 +- .../LocationAlbum/LocationAlbumDetail.vue | 4 +- .../Album/LocationAlbum/LocationAlbumList.vue | 14 +- .../Album/PeopleAlbum/PeopleAlbumDetail.vue | 8 +- .../Album/PeopleAlbum/PeopleAlbumList.vue | 28 ++- src/views/Album/Phoalbum/AlbumShareModal.vue | 116 ++++++++++++ src/views/Album/Phoalbum/PhoalbumDetail.vue | 83 +++++++-- src/views/Album/Phoalbum/PhoalbumList.vue | 105 ++++++++--- src/views/Album/ThingAlbum/ThingAlbumList.vue | 12 +- .../SharePhoneUpload/SharePhoneUpload.vue | 173 +++++++++++++++++- .../UpscalePhoneUpload/UpscalePhoneUpload.vue | 2 +- src/views/Photograph/AllPhoto/AllPhoto.vue | 79 ++++++-- .../Photograph/ImageToolbar/ImageToolbar.vue | 12 +- .../Photograph/ImageUpload/ImageUpload.vue | 23 ++- .../Photograph/RecentUpload/RecentUpload.vue | 71 +++++-- src/views/RecyclingBin/RecyclingBin.vue | 4 +- src/views/Share/ImageShare/ShareUpload.vue | 14 +- .../Share/ShareViewList/ShareSidebar.vue | 5 +- src/views/Share/ShareViewList/index.vue | 4 +- src/views/Upscale/CompareImage.vue | 2 +- src/views/Upscale/ParameterSetting.vue | 2 +- 37 files changed, 783 insertions(+), 127 deletions(-) create mode 100644 public/provider_icon/ali.svg create mode 100644 public/provider_icon/huawei.svg create mode 100644 public/provider_icon/minio.svg create mode 100644 public/provider_icon/tencent.svg rename src/api/{upscale => phone}/index.ts (86%) create mode 100644 src/assets/svgs/oss.svg create mode 100644 src/assets/svgs/wenhao.svg create mode 100644 src/constant/provider_icon.ts create mode 100644 src/views/Album/Phoalbum/AlbumShareModal.vue diff --git a/components.d.ts b/components.d.ts index 620fadb..d7ab081 100644 --- a/components.d.ts +++ b/components.d.ts @@ -31,6 +31,7 @@ declare module 'vue' { AInputGroup: typeof import('ant-design-vue/es')['InputGroup'] AInputNumber: typeof import('ant-design-vue/es')['InputNumber'] AInputPassword: typeof import('ant-design-vue/es')['InputPassword'] + AlbumShareModal: typeof import('./src/views/Album/Phoalbum/AlbumShareModal.vue')['default'] AllPhoto: typeof import('./src/views/Photograph/AllPhoto/AllPhoto.vue')['default'] AMenu: typeof import('ant-design-vue/es')['Menu'] AMenuItem: typeof import('ant-design-vue/es')['MenuItem'] @@ -42,6 +43,7 @@ declare module 'vue' { AProgress: typeof import('ant-design-vue/es')['Progress'] AQrcode: typeof import('ant-design-vue/es')['QRCode'] ARangePicker: typeof import('ant-design-vue/es')['RangePicker'] + ArrowDownOutlined: typeof import('@ant-design/icons-vue')['ArrowDownOutlined'] ASelect: typeof import('ant-design-vue/es')['Select'] ASelectOption: typeof import('ant-design-vue/es')['SelectOption'] ASpin: typeof import('ant-design-vue/es')['Spin'] @@ -70,6 +72,7 @@ declare module 'vue' { DownloadOutlined: typeof import('@ant-design/icons-vue')['DownloadOutlined'] DownOutlined: typeof import('@ant-design/icons-vue')['DownOutlined'] DynamicTitle: typeof import('./src/components/DynamicTitle/DynamicTitle.vue')['default'] + EditOutlined: typeof import('@ant-design/icons-vue')['EditOutlined'] EyeInvisibleOutlined: typeof import('@ant-design/icons-vue')['EyeInvisibleOutlined'] FileImageOutlined: typeof import('@ant-design/icons-vue')['FileImageOutlined'] Folder: typeof import('./src/components/Folder/Folder.vue')['default'] @@ -78,6 +81,7 @@ declare module 'vue' { ImageShare: typeof import('./src/views/Share/ImageShare/ImageShare.vue')['default'] ImageToolbar: typeof import('./src/views/Photograph/ImageToolbar/ImageToolbar.vue')['default'] ImageUpload: typeof import('./src/views/Photograph/ImageUpload/ImageUpload.vue')['default'] + ItalicOutlined: typeof import('@ant-design/icons-vue')['ItalicOutlined'] LandingPage: typeof import('./src/views/Landing/LandingPage.vue')['default'] LeftOutlined: typeof import('@ant-design/icons-vue')['LeftOutlined'] LinkOutlined: typeof import('@ant-design/icons-vue')['LinkOutlined'] diff --git a/public/provider_icon/ali.svg b/public/provider_icon/ali.svg new file mode 100644 index 0000000..5fc75e2 --- /dev/null +++ b/public/provider_icon/ali.svg @@ -0,0 +1 @@ + diff --git a/public/provider_icon/huawei.svg b/public/provider_icon/huawei.svg new file mode 100644 index 0000000..34771ec --- /dev/null +++ b/public/provider_icon/huawei.svg @@ -0,0 +1 @@ + diff --git a/public/provider_icon/minio.svg b/public/provider_icon/minio.svg new file mode 100644 index 0000000..2fd167b --- /dev/null +++ b/public/provider_icon/minio.svg @@ -0,0 +1 @@ + diff --git a/public/provider_icon/tencent.svg b/public/provider_icon/tencent.svg new file mode 100644 index 0000000..cd74b6e --- /dev/null +++ b/public/provider_icon/tencent.svg @@ -0,0 +1 @@ + diff --git a/src/api/upscale/index.ts b/src/api/phone/index.ts similarity index 86% rename from src/api/upscale/index.ts rename to src/api/phone/index.ts index 3641b8b..0d91686 100644 --- a/src/api/upscale/index.ts +++ b/src/api/phone/index.ts @@ -2,7 +2,7 @@ import {service} from "@/utils/alova/service.ts"; import {uploadImageRequest} from "@/types/upscale"; export const uploadImage = (data: uploadImageRequest) => { - return service.Post('/api/auth/upscale/phone/upload', { + return service.Post('/api/auth/phone/upload', { image: data.image, access_token: data.access_token, user_id: data.user_id, diff --git a/src/api/storage/index.ts b/src/api/storage/index.ts index 26956da..f6004c9 100644 --- a/src/api/storage/index.ts +++ b/src/api/storage/index.ts @@ -53,7 +53,7 @@ export const getFaceSamplesDetailList = (face_id: number, provider: string, buck ignoreToken: false, signature: false, }, - hitSource: ["modify-face-sample-name", "modify-face-sample-type"], + hitSource: ["modify-face-sample-name", "modify-face-sample-type", "delete-images"], }); }; /** @@ -123,7 +123,7 @@ export const albumListApi = (type: number, sort: boolean) => { ignoreToken: false, signature: false, }, - hitSource: ["create-album", "rename-album", "delete-album"], + hitSource: ["create-album", "rename-album", "delete-album", "album-share"], }); }; /** @@ -147,7 +147,7 @@ export const queryAlbumDetailListApi = (id: number, provider: string, bucket: st signature: false, }, name: "album-detail-list", - hitSource: ["upload-file", "delete-images"], + hitSource: ["upload-file", "delete-images", "album-share"], }); }; @@ -205,7 +205,7 @@ export const queryAllImagesApi = (type: string, sort: boolean, provider: string, ignoreToken: false, signature: false, }, - hitSource: ["upload-file", "delete-images"], + hitSource: ["upload-file", "delete-images", "album-share"], }); }; @@ -213,8 +213,11 @@ export const queryAllImagesApi = (type: string, sort: boolean, provider: string, /** * 获取最近照片列表 */ -export const queryRecentImagesApi = () => { - return service.Post('/api/auth/storage/image/recent/list', {}, { +export const queryRecentImagesApi = (provider: string, bucket: string) => { + return service.Post('/api/auth/storage/image/recent/list', { + provider: provider, + bucket: bucket, + }, { cacheFor: { expire: 60 * 60 * 24 * 7, mode: "restore", @@ -407,6 +410,31 @@ export const getBucketCapacityApi = (provider: string, bucket: string) => { ignoreToken: false, signature: false, }, - name: "delete-images", + name: "get-bucket-capacity", + }); +}; +/** + * 分享相册 + * @param id + * @param expire_date + * @param access_limit + * @param access_password + * @param provider + * @param bucket + */ +export const albumShareApi = (id: number, expire_date: string, access_limit: number, access_password: string, provider: string, bucket: string) => { + return service.Post('/api/auth/storage/album/share', { + id: id, + expire_date: expire_date, + access_limit: access_limit, + access_password: access_password, + provider: provider, + bucket: bucket, + }, { + meta: { + ignoreToken: false, + signature: false, + }, + name: "album-share", }); }; diff --git a/src/assets/styles/theme.scss b/src/assets/styles/theme.scss index b0d3c54..d2be188 100644 --- a/src/assets/styles/theme.scss +++ b/src/assets/styles/theme.scss @@ -80,3 +80,13 @@ html { .ant-table-wrapper .ant-table:not(.ant-table-bordered) .ant-table-tbody > tr:last-child > td { border-bottom: none !important; } + +// 空白内容样式 +.empty-content { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + width: 100%; +} diff --git a/src/assets/svgs/oss.svg b/src/assets/svgs/oss.svg new file mode 100644 index 0000000..23dbeca --- /dev/null +++ b/src/assets/svgs/oss.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svgs/wenhao.svg b/src/assets/svgs/wenhao.svg new file mode 100644 index 0000000..5cb5530 --- /dev/null +++ b/src/assets/svgs/wenhao.svg @@ -0,0 +1 @@ + diff --git a/src/constant/provider_icon.ts b/src/constant/provider_icon.ts new file mode 100644 index 0000000..55814eb --- /dev/null +++ b/src/constant/provider_icon.ts @@ -0,0 +1,6 @@ +export const ProviderIcon = { + "ali": "/provider_icon/ali.svg", + "tencent": "/provider_icon/tencent.svg", + "minio": "/provider_icon/minio.svg", + "huawei": "/provider_icon/huawei.svg", +}; diff --git a/src/layout/default/Header/Logo.vue b/src/layout/default/Header/Logo.vue index 8c3e51d..f9cbc03 100644 --- a/src/layout/default/Header/Logo.vue +++ b/src/layout/default/Header/Logo.vue @@ -58,10 +58,10 @@ -
+
- {{ t('album.upscale') }} + {{ t('album.phone') }}
diff --git a/src/layout/default/Header/Menu.vue b/src/layout/default/Header/Menu.vue index 6256e16..bc420ca 100644 --- a/src/layout/default/Header/Menu.vue +++ b/src/layout/default/Header/Menu.vue @@ -2,13 +2,23 @@ -
- - +
+ + + + + +
@@ -141,15 +151,17 @@ import systemMessage from "@/assets/svgs/sys-msg.svg"; import personalCenter from "@/assets/svgs/personal-center.svg"; import accountSetting from "@/assets/svgs/setting.svg"; import logout from "@/assets/svgs/logout.svg"; +import wenhao from "@/assets/svgs/wenhao.svg"; + import useStore from "@/store"; import ImageUpload from "@/views/Photograph/ImageUpload/ImageUpload.vue"; import {getStorageConfigListApi} from "@/api/storage"; -import type {ShowSearchType} from 'ant-design-vue/es/cascader'; +import {ProviderIcon} from "@/constant/provider_icon.ts"; + const uploadStore = useStore().upload; const user = useStore().user; - const configList = ref([]); async function getUserConfigList() { @@ -159,10 +171,6 @@ async function getUserConfigList() { } } -const filter: ShowSearchType['filter'] = (inputValue, path) => { - return path.some(option => option.label.toLowerCase().indexOf(inputValue.toLowerCase()) > -1); -}; - onMounted(() => { getUserConfigList(); diff --git a/src/router/modules/phone_upload.ts b/src/router/modules/phone_upload.ts index 35a5856..eba2d21 100644 --- a/src/router/modules/phone_upload.ts +++ b/src/router/modules/phone_upload.ts @@ -1,11 +1,20 @@ export default [ { - path: '/upscale/app', + path: '/main/upscale/phone/app', name: 'upscaleApp', component: () => import('@/views/Phone/UpscalePhoneUpload/UpscalePhoneUpload.vue'), meta: { requiresAuth: false, title: '手机上传' } + }, + { + path: '/main/share/phone/app', + name: 'shareApp', + component: () => import('@/views/Phone/SharePhoneUpload/SharePhoneUpload.vue'), + meta: { + requiresAuth: false, + title: '手机上传' + } } ]; diff --git a/src/router/modules/upscale.ts b/src/router/modules/upscale.ts index 19776ea..82656f8 100644 --- a/src/router/modules/upscale.ts +++ b/src/router/modules/upscale.ts @@ -1,6 +1,6 @@ export default [ { - path: '/main/photo/upscale', + path: '/main/photo/phone', name: 'upscale', component: () => import('@/views/Upscale/index.vue'), meta: { diff --git a/src/store/modules/imageStore.ts b/src/store/modules/imageStore.ts index be08ce4..d9724c0 100644 --- a/src/store/modules/imageStore.ts +++ b/src/store/modules/imageStore.ts @@ -18,6 +18,13 @@ export const useImageStore = defineStore( "gif": "动图", "screenshot": "截图", }); + // 清算模式切换 + const switchValue = ref(false); + + // 相册分享弹窗相关 + const openAlbumShareDialog = ref(false); + const albumShareCoverImage = ref(""); + const albumShareId = ref(0); /** * 统计图片总数 @@ -31,13 +38,24 @@ export const useImageStore = defineStore( return imageList.reduce((total, record) => total + record.list.length, 0); } + function openAlbumShareDialogHandler(value: boolean, coverImage: string, albumId: number) { + openAlbumShareDialog.value = value; + albumShareCoverImage.value = coverImage; + albumShareId.value = albumId; + } + return { selected, tabActiveKey, tabMap, homeTabMap, + switchValue, homeTabActiveKey, - countTotalImages + albumShareCoverImage, + albumShareId, + countTotalImages, + openAlbumShareDialog, + openAlbumShareDialogHandler, }; }, { @@ -46,7 +64,7 @@ export const useImageStore = defineStore( persist: true, storage: localStorage, key: 'image', - includePaths: ["tabActiveKey", "tabMap", "homeTabActiveKey", "homeTabMap"], + includePaths: ["tabActiveKey", "tabMap", "homeTabActiveKey", "homeTabMap", "switchValue"], } } ); diff --git a/src/store/modules/uploadStore.ts b/src/store/modules/uploadStore.ts index d3e5581..1581b3d 100644 --- a/src/store/modules/uploadStore.ts +++ b/src/store/modules/uploadStore.ts @@ -15,7 +15,6 @@ interface UploadPredictResult { thumb_size: number | null; } - export const useUploadStore = defineStore( 'upload', () => { @@ -38,6 +37,8 @@ export const useUploadStore = defineStore( const storageSelected = ref([]); + const albumSelected = ref(); + /** * 打开上传抽屉 */ @@ -70,6 +71,7 @@ export const useUploadStore = defineStore( storageSelected, openUploadDrawerFn, clearPredictResult, + albumSelected, }; }, { @@ -78,7 +80,7 @@ export const useUploadStore = defineStore( persist: true, storage: localStorage, key: 'upload', - includePaths: ["storageSelected"] + includePaths: ["storageSelected", "albumSelected"] } } ); diff --git a/src/views/Album/LocationAlbum/LocationAlbumDetail.vue b/src/views/Album/LocationAlbum/LocationAlbumDetail.vue index a944c51..2db6dbf 100644 --- a/src/views/Album/LocationAlbum/LocationAlbumDetail.vue +++ b/src/views/Album/LocationAlbum/LocationAlbumDetail.vue @@ -42,8 +42,8 @@
-
- +
+ + diff --git a/src/views/Album/Phoalbum/PhoalbumDetail.vue b/src/views/Album/Phoalbum/PhoalbumDetail.vue index 3e8370a..6a7e1ea 100644 --- a/src/views/Album/Phoalbum/PhoalbumDetail.vue +++ b/src/views/Album/Phoalbum/PhoalbumDetail.vue @@ -1,31 +1,45 @@