diff --git a/src/components/cloud/ImageDetailModal.vue b/src/components/cloud/ImageDetailModal.vue
index 6d9bedb..43ce071 100644
--- a/src/components/cloud/ImageDetailModal.vue
+++ b/src/components/cloud/ImageDetailModal.vue
@@ -1,4 +1,6 @@
+
+
+
+
+
+
位置地图
+
{{ locationName || '拍摄位置' }}
+
+
+ {{ latitude?.toFixed(4) }}
+ {{ longitude?.toFixed(4) }}
+
+
+
+
+
+
+ 地图加载中...
+
+
+ {{ errorMsg }}
+
+
+
+
diff --git a/src/components/cloud/QuickUploadModal.vue b/src/components/cloud/QuickUploadModal.vue
new file mode 100644
index 0000000..a2d1ffa
--- /dev/null
+++ b/src/components/cloud/QuickUploadModal.vue
@@ -0,0 +1,402 @@
+
+
+
+
+
+
+
+
+
Quick Upload
+
快速上传云图
+
从地图当前位置带入经纬度,提交后进入审核队列。
+
+
+
+
+
+
+
+
+ 图片审核通过后会出现在画廊和地图中。
+
+
+
+
+ 正在上传 {{ currentItemIndex }} / {{ totalItems }}
+ {{ overallProgress }}%
+
+
+
+
+
+
+
选择一张云图
+
支持 JPG、PNG,可点击或拖拽上传。
+
+
+
+
+
+
+
![图片预览]()
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ activeItem.errors.cloudCategory }}
+
+
+
+
+
+
{{ activeItem.errors.capturedAt }}
+
+
+
+
+
+
+
+
{{ activeItem.errors.latitude }}
+
+
+
+
{{ activeItem.errors.longitude }}
+
+
+
+
选填,可手动输入,也可以点击右侧地图按钮选点。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ errorMsg }}
+
+
+
+
+
+ 关闭
+
+ {{ uploading ? '上传中...' : '提交审核' }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/types/amap.d.ts b/src/types/amap.d.ts
index 1fbfcb6..6f3031e 100644
--- a/src/types/amap.d.ts
+++ b/src/types/amap.d.ts
@@ -29,6 +29,11 @@ declare namespace AMap {
features?: string[]
layers?: unknown[]
resizeEnable?: boolean
+ dragEnable?: boolean
+ zoomEnable?: boolean
+ keyboardEnable?: boolean
+ doubleClickZoom?: boolean
+ scrollWheel?: boolean
}
class Marker {
@@ -104,6 +109,10 @@ declare function AMapLoader_load(opts: {
plugins?: string[]
}): Promise
+declare namespace AMap {
+ function getConfig(): { appname?: string }
+}
+
declare module '@amap/amap-jsapi-loader' {
const AMapLoader: {
load: typeof AMapLoader_load
diff --git a/src/views/admin/AdminView.vue b/src/views/admin/AdminView.vue
index 38c9ec2..06068a2 100644
--- a/src/views/admin/AdminView.vue
+++ b/src/views/admin/AdminView.vue
@@ -3,6 +3,7 @@ import { computed, onMounted, ref } from 'vue'
import { NAlert, NButton, NEmpty, NIcon, NSkeleton, NTag, useMessage } from 'naive-ui'
import { Check, Eye, EyeOff, Refresh, Trash, X } from '@vicons/tabler'
import ImageDetailModal from '@/components/cloud/ImageDetailModal.vue'
+import MiniLocationMap from '@/components/cloud/MiniLocationMap.vue'
import { supabase } from '@/lib/supabase'
import { useAuthStore } from '@/stores/auth'
import { useProfileStore } from '@/stores/profile'
@@ -792,6 +793,11 @@ onMounted(loadAdminData)
{{ selectedImage.description || '上传者没有留下额外说明。' }}
+
diff --git a/src/views/encyclopedia/CloudTypeView.vue b/src/views/encyclopedia/CloudTypeView.vue
index db56989..c12a966 100644
--- a/src/views/encyclopedia/CloudTypeView.vue
+++ b/src/views/encyclopedia/CloudTypeView.vue
@@ -3,6 +3,7 @@ import { computed, onMounted, ref, watch } from 'vue'
import { NAlert, NButton, NCard, NEmpty, NSkeleton, NTag } from 'naive-ui'
import { RouterLink, useRoute } from 'vue-router'
import ImageDetailModal from '@/components/cloud/ImageDetailModal.vue'
+import MiniLocationMap from '@/components/cloud/MiniLocationMap.vue'
import { supabase } from '@/lib/supabase'
import { useAuthStore } from '@/stores/auth'
import { useEncyclopediaStore } from '@/stores/encyclopedia'
@@ -334,6 +335,11 @@ watch(() => route.params.id, () => {
{{ selectedGalleryItem.description || '上传者没有留下额外说明。' }}
+
diff --git a/src/views/gallery/GalleryView.vue b/src/views/gallery/GalleryView.vue
index 1a465f3..c125275 100644
--- a/src/views/gallery/GalleryView.vue
+++ b/src/views/gallery/GalleryView.vue
@@ -4,6 +4,7 @@ import { NAlert, NButton, NDropdown, NEmpty, NIcon, NSkeleton, NTag, useMessage
import { Clock, Location, Settings, User } from '@vicons/tabler'
import CloudEditModal, { type CloudEditFormValue } from '@/components/cloud/CloudEditModal.vue'
import ImageDetailModal from '@/components/cloud/ImageDetailModal.vue'
+import MiniLocationMap from '@/components/cloud/MiniLocationMap.vue'
import { supabase } from '@/lib/supabase'
import { useAuthStore } from '@/stores/auth'
import { useCloudsStore } from '@/stores/clouds'
@@ -524,6 +525,11 @@ onUnmounted(() => {
{{ selectedCloud.description || '上传者没有留下额外说明。' }}
+
diff --git a/src/views/map/MapView.vue b/src/views/map/MapView.vue
index 9e1f685..a5b774d 100644
--- a/src/views/map/MapView.vue
+++ b/src/views/map/MapView.vue
@@ -1,10 +1,12 @@