diff --git a/components.d.ts b/components.d.ts index 18db858..92d712e 100644 --- a/components.d.ts +++ b/components.d.ts @@ -13,6 +13,7 @@ declare module 'vue' { ABadge: typeof import('ant-design-vue/es')['Badge'] AButton: typeof import('ant-design-vue/es')['Button'] ACard: typeof import('ant-design-vue/es')['Card'] + ACardMeta: typeof import('ant-design-vue/es')['CardMeta'] ACascader: typeof import('ant-design-vue/es')['Cascader'] AccountSetting: typeof import('./src/views/User/AccountSetting/AccountSetting.vue')['default'] AccountSettingHome: typeof import('./src/views/User/AccountSetting/components/AccountSettingHome/AccountSettingHome.vue')['default'] @@ -20,6 +21,7 @@ declare module 'vue' { AccountSettingSidebar: typeof import('./src/views/User/AccountSetting/components/AccountSettingSidebar/AccountSettingSidebar.vue')['default'] AccountSettingStorage: typeof import('./src/views/User/AccountSetting/components/AccountSettingStorage/AccountSettingStorage.vue')['default'] ACheckbox: typeof import('ant-design-vue/es')['Checkbox'] + ACol: typeof import('ant-design-vue/es')['Col'] AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider'] ADivider: typeof import('ant-design-vue/es')['Divider'] ADrawer: typeof import('ant-design-vue/es')['Drawer'] @@ -53,6 +55,7 @@ declare module 'vue' { ARadio: typeof import('ant-design-vue/es')['Radio'] ARadioGroup: typeof import('ant-design-vue/es')['RadioGroup'] ARangePicker: typeof import('ant-design-vue/es')['RangePicker'] + ARow: typeof import('ant-design-vue/es')['Row'] ASelect: typeof import('ant-design-vue/es')['Select'] ASelectOption: typeof import('ant-design-vue/es')['SelectOption'] ASkeleton: typeof import('ant-design-vue/es')['Skeleton'] @@ -91,6 +94,7 @@ declare module 'vue' { 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'] + EllipsisOutlined: typeof import('@ant-design/icons-vue')['EllipsisOutlined'] EyeInvisibleOutlined: typeof import('@ant-design/icons-vue')['EyeInvisibleOutlined'] EyeOutlined: typeof import('@ant-design/icons-vue')['EyeOutlined'] FileImageOutlined: typeof import('@ant-design/icons-vue')['FileImageOutlined'] @@ -98,6 +102,8 @@ declare module 'vue' { Folder: typeof import('./src/components/Folder/Folder.vue')['default'] ForgetPage: typeof import('./src/views/Forget/ForgetPage.vue')['default'] GradientText: typeof import('./src/components/MyUI/GradientText/GradientText.vue')['default'] + Heatmap: typeof import('./src/components/Heatmap/Heatmap.vue')['default'] + HeatmapPro: typeof import('./src/components/HeatmapPro/HeatmapPro.vue')['default'] ImageShare: typeof import('./src/views/Share/ImageShare/ImageShare.vue')['default'] ImageToolbar: typeof import('./src/components/ImageToolbar/ImageToolbar.vue')['default'] ImageUpload: typeof import('./src/components/ImageUpload/ImageUpload.vue')['default'] @@ -106,6 +112,7 @@ declare module 'vue' { LeftOutlined: typeof import('@ant-design/icons-vue')['LeftOutlined'] LinkOutlined: typeof import('@ant-design/icons-vue')['LinkOutlined'] LoadingGraphic: typeof import('./src/components/LoadingGraphic/LoadingGraphic.vue')['default'] + LoadingOutlined: typeof import('@ant-design/icons-vue')['LoadingOutlined'] LocationAlbumDetail: typeof import('./src/views/Album/LocationAlbum/LocationAlbumDetail.vue')['default'] LocationAlbumIndex: typeof import('./src/views/Album/LocationAlbum/LocationAlbumIndex.vue')['default'] LocationAlbumList: typeof import('./src/views/Album/LocationAlbum/LocationAlbumList.vue')['default'] @@ -136,6 +143,7 @@ declare module 'vue' { Rate: typeof import('./src/components/MyUI/Rate/Rate.vue')['default'] RecentUpload: typeof import('./src/views/Photograph/RecentUpload/RecentUpload.vue')['default'] RecyclingBin: typeof import('./src/views/RecyclingBin/RecyclingBin.vue')['default'] + RedoOutlined: typeof import('@ant-design/icons-vue')['RedoOutlined'] ReplyInput: typeof import('./src/components/CommentReply/src/ReplyInput/ReplyInput.vue')['default'] ReplyList: typeof import('./src/components/CommentReply/src/ReplyList/ReplyList.vue')['default'] ReplyReply: typeof import('./src/components/CommentReply/src/ReplyReplyInput/ReplyReply.vue')['default'] @@ -145,12 +153,14 @@ declare module 'vue' { SearchOutlined: typeof import('@ant-design/icons-vue')['SearchOutlined'] SearchResult: typeof import('./src/views/Photograph/SearchResult/SearchResult.vue')['default'] SendOutlined: typeof import('@ant-design/icons-vue')['SendOutlined'] + SettingOutlined: typeof import('@ant-design/icons-vue')['SettingOutlined'] SharePhoneUpload: typeof import('./src/views/Phone/SharePhoneUpload/SharePhoneUpload.vue')['default'] ShareSidebar: typeof import('./src/views/Share/ShareViewList/ShareSidebar.vue')['default'] ShareUpload: typeof import('./src/views/Share/ImageShare/ShareUpload.vue')['default'] ShareViewList: typeof import('./src/views/Share/ShareViewList/index.vue')['default'] Spin: typeof import('./src/components/MyUI/Spin/Spin.vue')['default'] StarButton: typeof import('./src/components/StarButton/StarButton.vue')['default'] + StorageCard: typeof import('./src/views/User/AccountSetting/components/AccountSettingStorage/StorageCard.vue')['default'] TabletOutlined: typeof import('@ant-design/icons-vue')['TabletOutlined'] ThingAlbumDetail: typeof import('./src/views/Album/ThingAlbum/ThingAlbumDetail.vue')['default'] ThingAlbumIndex: typeof import('./src/views/Album/ThingAlbum/ThingAlbumIndex.vue')['default'] diff --git a/package.json b/package.json index 800b8bb..712c654 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "dependencies": { "@alova/adapter-axios": "^2.0.13", "@ant-design/icons-vue": "^7.0.1", + "@fcli/vue-calendar-map": "^1.0.2", "@intlify/eslint-plugin-vue-i18n": "^3.2.0", "@mediapipe/face_detection": "^0.4.1646425229", "@mediapipe/face_mesh": "^0.4.1633559619", @@ -55,6 +56,7 @@ "jszip": "^3.10.1", "less": "^4.2.2", "localforage": "^1.10.0", + "lodash-es": "^4.17.21", "moment": "^2.30.1", "nprogress": "^0.2.0", "nsfwjs": "^4.2.1", diff --git a/src/api/phone/index.ts b/src/api/phone/index.ts index 47b7e49..f8f382b 100644 --- a/src/api/phone/index.ts +++ b/src/api/phone/index.ts @@ -1,4 +1,4 @@ -import {service} from "@/utils/alova/service.ts"; +import {service} from "@/utils/alova/service_app.ts"; export const uploadImage = (data: any) => { return service.Post('/api/auth/phone/upload', { @@ -26,3 +26,37 @@ export const sharePhoneUploadApi = (data: any) => { } }); }; + +/** + * 上传文件 + * @param formData + * @param headers + */ +export const uploadFile = (formData: any, headers: any) => { + return service.Post('/api/auth/storage/uploads', formData, { + headers: headers, + meta: { + ignoreToken: false, + signature: false, + }, + name: "upload-file", + }); +}; + +export const albumListApi = (type: number, sort: boolean, headers: any) => { + return service.Post('/api/auth/storage/album/list', { + type: type, + sort: sort, + }, { + headers: headers, + cacheFor: { + expire: 60 * 60 * 24 * 7, + mode: "restore", + }, + meta: { + ignoreToken: false, + signature: false, + }, + hitSource: ["create-album", "rename-album", "delete-album", "album-share"], + }); +}; diff --git a/src/api/storage/index.ts b/src/api/storage/index.ts index 278d673..910a108 100644 --- a/src/api/storage/index.ts +++ b/src/api/storage/index.ts @@ -350,6 +350,7 @@ export const getStorageConfigListApi = () => { signature: false, }, name: "storage-config-list", + hitSource: ["delete-storage-config", "add-storage-config"] }); }; /** @@ -509,3 +510,54 @@ export const downloadAlbumImagesApi = (id: number, provider: string, bucket: str name: "download-album-images", }); }; +/** + * 获取用户存储配置 + */ +export const listUserStorageConfigApi = () => { + return service.Post('/api/auth/storage/user/storage/list', {}, { + cacheFor: { + expire: 60 * 60 * 24 * 7, + mode: "restore", + }, + meta: { + ignoreToken: false, + signature: false, + }, + name: "list-user-storage-config", + hitSource: ["delete-storage-config", "add-storage-config"], + }); +}; +/** + * 创建存储配置 + * @param id + * @param provider + * @param bucket + */ +export const deleteStorageConfigApi = (id: number, provider: string, bucket: string) => { + return service.Post('/api/auth/storage/config/delete', { + id: id, + provider: provider, + bucket: bucket, + }, { + meta: { + ignoreToken: false, + signature: false, + }, + name: "delete-storage-config", + }); +}; +/** + * 创建存储配置 + * @param params + */ +export const addStorageConfigApi = (params: any) => { + return service.Post('/api/auth/storage/config/add', { + ...params, + }, { + meta: { + ignoreToken: false, + signature: false, + }, + name: "add-storage-config", + }); +}; diff --git a/src/assets/styles/theme.scss b/src/assets/styles/theme.scss index 2f4828b..e52ab03 100644 --- a/src/assets/styles/theme.scss +++ b/src/assets/styles/theme.scss @@ -76,10 +76,6 @@ html { } } -// 取消antd table 最后一行的边框 -.ant-table-wrapper .ant-table:not(.ant-table-bordered) .ant-table-tbody > tr:last-child > td { - border-bottom: none !important; -} // 空白内容样式 .empty-content { @@ -90,7 +86,3 @@ html { height: 100%; width: 100%; } - -//:not(button) > svg:not([color]) { -// color: var(--text-color) !important; -//} diff --git a/src/assets/svgs/account_security.svg b/src/assets/svgs/account_security.svg new file mode 100644 index 0000000..1ce53a5 --- /dev/null +++ b/src/assets/svgs/account_security.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svgs/deleted-circle.svg b/src/assets/svgs/deleted-circle.svg new file mode 100644 index 0000000..4e0734c --- /dev/null +++ b/src/assets/svgs/deleted-circle.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svgs/email_security.svg b/src/assets/svgs/email_security.svg new file mode 100644 index 0000000..0192c29 --- /dev/null +++ b/src/assets/svgs/email_security.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svgs/file-size.svg b/src/assets/svgs/file-size.svg new file mode 100644 index 0000000..923c71f --- /dev/null +++ b/src/assets/svgs/file-size.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svgs/image-icon.svg b/src/assets/svgs/image-icon.svg new file mode 100644 index 0000000..e0b6992 --- /dev/null +++ b/src/assets/svgs/image-icon.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svgs/login_security.svg b/src/assets/svgs/login_security.svg new file mode 100644 index 0000000..a07ceff --- /dev/null +++ b/src/assets/svgs/login_security.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svgs/password_security.svg b/src/assets/svgs/password_security.svg new file mode 100644 index 0000000..453c420 --- /dev/null +++ b/src/assets/svgs/password_security.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svgs/phone_security.svg b/src/assets/svgs/phone_security.svg new file mode 100644 index 0000000..6236dc8 --- /dev/null +++ b/src/assets/svgs/phone_security.svg @@ -0,0 +1 @@ + diff --git a/src/assets/svgs/share-icon.svg b/src/assets/svgs/share-icon.svg new file mode 100644 index 0000000..4d8ae47 --- /dev/null +++ b/src/assets/svgs/share-icon.svg @@ -0,0 +1 @@ + diff --git a/src/components/HeatmapPro/HeatmapPro.vue b/src/components/HeatmapPro/HeatmapPro.vue new file mode 100644 index 0000000..67ec26f --- /dev/null +++ b/src/components/HeatmapPro/HeatmapPro.vue @@ -0,0 +1,406 @@ + + + + + diff --git a/src/components/ImageToolbar/ImageToolbar.vue b/src/components/ImageToolbar/ImageToolbar.vue index 7942915..b53bb36 100644 --- a/src/components/ImageToolbar/ImageToolbar.vue +++ b/src/components/ImageToolbar/ImageToolbar.vue @@ -216,6 +216,11 @@ const editImages = async () => { image.onload = () => { imageStore.imageEditVisible = true; }; + image.onerror = () => { + message.warning("图片已过期,请刷新后重试"); + imageStore.selected = []; + imageStore.imageEditVisible = false; + }; }; @@ -285,7 +290,6 @@ async function addImagesToAlbum(albumId: number) { */ function handleImageEditClose() { imageStore.selected = []; - image.src = ''; imageStore.imageEditVisible = false; } diff --git a/src/constant/provider_icon.ts b/src/constant/provider_icon.ts deleted file mode 100644 index 55814eb..0000000 --- a/src/constant/provider_icon.ts +++ /dev/null @@ -1,6 +0,0 @@ -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/constant/provider_map.ts b/src/constant/provider_map.ts new file mode 100644 index 0000000..63ceb98 --- /dev/null +++ b/src/constant/provider_map.ts @@ -0,0 +1,50 @@ +export const ProviderIcon = { + "ali": "/provider_icon/ali.svg", + "tencent": "/provider_icon/tencent.svg", + "minio": "/provider_icon/minio.svg", + "huawei": "/provider_icon/huawei.svg", +}; + +export const ProviderNameMap = { + "ali": "阿里云", + "tencent": "腾讯云", + "minio": "MinIO", + "huawei": "华为云", +}; +export const ProviderColorMap = { + 'ali': 'orange', + 'tencent': 'blue', + 'minio': 'red', + 'huawei': 'red', +}; + +export const AliRegionMap = { + "cn-hangzhou": "杭州", + "cn-shanghai": "上海", + "cn-qingdao": "青岛", + "cn-beijing": "北京", + "cn-zhangjiakou": "张家口", + "cn-huhehaote": "呼和浩特", + "cn-shenzhen": "深圳", + "cn-chengdu": "成都", + "cn-heyuan": "河源", + "cn-wulanchabu": "乌兰察布", + "cn-ningxia": "宁夏", + "cn-shaoxing": "绍兴", + "cn-jiaxing": "嘉兴", + "cn-zhengzhou": "郑州", + "cn-hongkong": "香港", + "ap-southeast-1": "新加坡", + "ap-southeast-2": "悉尼", + "ap-southeast-3": "吉隆坡", + "ap-southeast-5": "雅加达", + "ap-northeast-1": "东京", + "ap-south-1": "孟买", + "eu-west-1": "伦敦", + "eu-central-1": "法兰克福", + "us-west-1": "硅谷", + "us-east-1": "弗吉尼亚", + "us-east-2": "米兰", + "us-west-2": "弗吉尼亚", + "me-east-1": "迪拜", +}; diff --git a/src/layout/default/Header/Menu.vue b/src/layout/default/Header/Menu.vue index d3ecc55..77531cf 100644 --- a/src/layout/default/Header/Menu.vue +++ b/src/layout/default/Header/Menu.vue @@ -155,7 +155,7 @@ import wenhao from "@/assets/svgs/wenhao.svg"; import useStore from "@/store"; import ImageUpload from "@/components/ImageUpload/ImageUpload.vue"; import {getStorageConfigListApi} from "@/api/storage"; -import {ProviderIcon} from "@/constant/provider_icon.ts"; +import {ProviderIcon} from "@/constant/provider_map.ts"; const router = useRouter(); diff --git a/src/layout/default/Header/Search.vue b/src/layout/default/Header/Search.vue index 7af39cf..970ccf8 100644 --- a/src/layout/default/Header/Search.vue +++ b/src/layout/default/Header/Search.vue @@ -9,6 +9,7 @@ :style="{borderRadius: borderRadius, boxShadow: boxShadow}" :placeholder="searchStore.searchOption[0]? '#'+searchStore.searchOption[0] : '搜索...'" @pressEnter="search" + :allowClear="true " > 动态 - - - 个人信息 - - - - 数据分析 - - - - 我的分享 -