sa2kit 1.6.57 → 1.6.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AliyunOSSProvider-KSYW2IOG.js +15 -0
- package/dist/{AliyunOSSProvider-2FARPAQD.js.map → AliyunOSSProvider-KSYW2IOG.js.map} +1 -1
- package/dist/AliyunOSSProvider-TBK3G7YK.mjs +6 -0
- package/dist/{AliyunOSSProvider-UMVGVBDJ.mjs.map → AliyunOSSProvider-TBK3G7YK.mjs.map} +1 -1
- package/dist/LocalStorageProvider-2DGYRQAB.mjs +6 -0
- package/dist/{LocalStorageProvider-PYOHETJV.mjs.map → LocalStorageProvider-2DGYRQAB.mjs.map} +1 -1
- package/dist/LocalStorageProvider-SSRW3ZJW.js +15 -0
- package/dist/{LocalStorageProvider-JQF5WK5H.js.map → LocalStorageProvider-SSRW3ZJW.js.map} +1 -1
- package/dist/UniversalFileService-336GFY6N.mjs +6 -0
- package/dist/{UniversalFileService-TNYKO6JN.mjs.map → UniversalFileService-336GFY6N.mjs.map} +1 -1
- package/dist/UniversalFileService-J6ET6KZK.js +15 -0
- package/dist/{UniversalFileService-RBV6EN5J.js.map → UniversalFileService-J6ET6KZK.js.map} +1 -1
- package/dist/calendar/index.js +11 -11
- package/dist/calendar/index.mjs +4 -4
- package/dist/chunk-25OFOKNF.js +171 -0
- package/dist/chunk-25OFOKNF.js.map +1 -0
- package/dist/chunk-3DXPQ4YV.mjs +165 -0
- package/dist/chunk-3DXPQ4YV.mjs.map +1 -0
- package/dist/{chunk-4VJQZSPU.mjs → chunk-3NHAT7D4.mjs} +3 -4
- package/dist/chunk-3NHAT7D4.mjs.map +1 -0
- package/dist/{chunk-3JW4X3AC.mjs → chunk-622Y6LTH.mjs} +3 -3
- package/dist/{chunk-3JW4X3AC.mjs.map → chunk-622Y6LTH.mjs.map} +1 -1
- package/dist/chunk-CIVO4R6N.mjs +37 -0
- package/dist/chunk-CIVO4R6N.mjs.map +1 -0
- package/dist/{chunk-6BJ76BYC.mjs → chunk-EGJPS7OL.mjs} +3 -3
- package/dist/{chunk-6BJ76BYC.mjs.map → chunk-EGJPS7OL.mjs.map} +1 -1
- package/dist/{chunk-U7AQC2Z7.js → chunk-EKIOJEJK.js} +1179 -2002
- package/dist/chunk-EKIOJEJK.js.map +1 -0
- package/dist/{chunk-53WLQ22S.js → chunk-EOWTOG7Y.js} +6 -6
- package/dist/{chunk-53WLQ22S.js.map → chunk-EOWTOG7Y.js.map} +1 -1
- package/dist/chunk-HDMIOOZY.mjs +546 -0
- package/dist/chunk-HDMIOOZY.mjs.map +1 -0
- package/dist/{chunk-MZKATHB7.js → chunk-HHVDOIPV.js} +4 -4
- package/dist/{chunk-MZKATHB7.js.map → chunk-HHVDOIPV.js.map} +1 -1
- package/dist/chunk-HJ6MH7J7.js +552 -0
- package/dist/chunk-HJ6MH7J7.js.map +1 -0
- package/dist/chunk-KH6RQ4J5.js +28 -0
- package/dist/chunk-KH6RQ4J5.js.map +1 -0
- package/dist/{chunk-35CXIK5Y.js → chunk-NCOXT7SK.js} +11 -11
- package/dist/{chunk-35CXIK5Y.js.map → chunk-NCOXT7SK.js.map} +1 -1
- package/dist/chunk-NZZZUMMX.mjs +784 -0
- package/dist/chunk-NZZZUMMX.mjs.map +1 -0
- package/dist/{chunk-OBIPI4GU.mjs → chunk-OFYBMMWT.mjs} +4 -4
- package/dist/{chunk-OBIPI4GU.mjs.map → chunk-OFYBMMWT.mjs.map} +1 -1
- package/dist/{chunk-W2NCOORK.js → chunk-PVLLRDUT.js} +951 -145
- package/dist/chunk-PVLLRDUT.js.map +1 -0
- package/dist/chunk-Q5EDCKQA.js +336 -0
- package/dist/chunk-Q5EDCKQA.js.map +1 -0
- package/dist/{chunk-6NMIKAE7.mjs → chunk-SNBILYSH.mjs} +5 -5
- package/dist/{chunk-6NMIKAE7.mjs.map → chunk-SNBILYSH.mjs.map} +1 -1
- package/dist/{chunk-IPY26RQH.js → chunk-UVHPCLP6.js} +5 -5
- package/dist/{chunk-IPY26RQH.js.map → chunk-UVHPCLP6.js.map} +1 -1
- package/dist/{chunk-V6BXO6ZS.mjs → chunk-WGD2NBVR.mjs} +835 -38
- package/dist/chunk-WGD2NBVR.mjs.map +1 -0
- package/dist/{chunk-HYZ5C6FY.mjs → chunk-WS3QZYBI.mjs} +1175 -1996
- package/dist/chunk-WS3QZYBI.mjs.map +1 -0
- package/dist/{chunk-UR5TU4MW.mjs → chunk-XLR6QUDR.mjs} +3 -3
- package/dist/{chunk-UR5TU4MW.mjs.map → chunk-XLR6QUDR.mjs.map} +1 -1
- package/dist/chunk-YMS6BPXS.js +807 -0
- package/dist/chunk-YMS6BPXS.js.map +1 -0
- package/dist/chunk-YOTQG4NP.mjs +314 -0
- package/dist/chunk-YOTQG4NP.mjs.map +1 -0
- package/dist/chunk-ZGVB35L2.mjs +25 -0
- package/dist/chunk-ZGVB35L2.mjs.map +1 -0
- package/dist/chunk-ZRAW3HXA.js +43 -0
- package/dist/chunk-ZRAW3HXA.js.map +1 -0
- package/dist/{chunk-4XXIBWCO.js → chunk-ZRWED7Q6.js} +66 -66
- package/dist/{chunk-4XXIBWCO.js.map → chunk-ZRWED7Q6.js.map} +1 -1
- package/dist/{chunk-DVENFCQY.js → chunk-ZWQJSZEY.js} +4 -5
- package/dist/chunk-ZWQJSZEY.js.map +1 -0
- package/dist/components/index.js +104 -104
- package/dist/components/index.mjs +4 -4
- package/dist/index.js +146 -148
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8 -11
- package/dist/index.mjs.map +1 -1
- package/dist/logger/index.js +7 -7
- package/dist/logger/index.mjs +1 -4
- package/dist/mikuFusionGame/index.js +4 -4
- package/dist/mikuFusionGame/index.mjs +3 -3
- package/dist/portfolio/index.js +10 -10
- package/dist/portfolio/index.mjs +5 -5
- package/dist/showmasterpiece/db/index.js +42 -42
- package/dist/showmasterpiece/db/index.mjs +1 -1
- package/dist/showmasterpiece/index.js +143 -144
- package/dist/showmasterpiece/index.js.map +1 -1
- package/dist/showmasterpiece/index.mjs +7 -9
- package/dist/showmasterpiece/index.mjs.map +1 -1
- package/dist/showmasterpiece/logic/index.js +19 -19
- package/dist/showmasterpiece/logic/index.mjs +2 -2
- package/dist/showmasterpiece/server/index.js +42 -42
- package/dist/showmasterpiece/server/index.mjs +1 -1
- package/dist/showmasterpiece/ui/web/index.js +34 -34
- package/dist/showmasterpiece/ui/web/index.mjs +6 -6
- package/dist/universalExport/server/index.js +2 -4
- package/dist/universalExport/server/index.js.map +1 -1
- package/dist/universalExport/server/index.mjs +1 -3
- package/dist/universalExport/server/index.mjs.map +1 -1
- package/dist/universalFile/index.js +6 -9
- package/dist/universalFile/index.js.map +1 -1
- package/dist/universalFile/index.mjs +1 -5
- package/dist/universalFile/index.mjs.map +1 -1
- package/dist/universalFile/server/index.js +31 -64
- package/dist/universalFile/server/index.js.map +1 -1
- package/dist/universalFile/server/index.mjs +7 -42
- package/dist/universalFile/server/index.mjs.map +1 -1
- package/dist/utils/index.js +11 -11
- package/dist/utils/index.mjs +2 -2
- package/package.json +1 -1
- package/dist/AliyunOSSProvider-2FARPAQD.js +0 -15
- package/dist/AliyunOSSProvider-UMVGVBDJ.mjs +0 -9
- package/dist/LocalStorageProvider-JQF5WK5H.js +0 -15
- package/dist/LocalStorageProvider-PYOHETJV.mjs +0 -9
- package/dist/UniversalFileService-RBV6EN5J.js +0 -15
- package/dist/UniversalFileService-TNYKO6JN.mjs +0 -9
- package/dist/chunk-4NFOSCM6.js +0 -34
- package/dist/chunk-4NFOSCM6.js.map +0 -1
- package/dist/chunk-4VJQZSPU.mjs.map +0 -1
- package/dist/chunk-6AHYPPUP.js +0 -344
- package/dist/chunk-6AHYPPUP.js.map +0 -1
- package/dist/chunk-76V7EKBX.mjs +0 -796
- package/dist/chunk-76V7EKBX.mjs.map +0 -1
- package/dist/chunk-ACLOJXXE.js +0 -195
- package/dist/chunk-ACLOJXXE.js.map +0 -1
- package/dist/chunk-AEXPAH7Z.mjs +0 -32
- package/dist/chunk-AEXPAH7Z.mjs.map +0 -1
- package/dist/chunk-CFGX3EKK.js +0 -560
- package/dist/chunk-CFGX3EKK.js.map +0 -1
- package/dist/chunk-D2HXMGXS.js +0 -46
- package/dist/chunk-D2HXMGXS.js.map +0 -1
- package/dist/chunk-DVENFCQY.js.map +0 -1
- package/dist/chunk-HYZ5C6FY.mjs.map +0 -1
- package/dist/chunk-K7WNCB4V.mjs +0 -554
- package/dist/chunk-K7WNCB4V.mjs.map +0 -1
- package/dist/chunk-L4ZYBFB2.mjs +0 -44
- package/dist/chunk-L4ZYBFB2.mjs.map +0 -1
- package/dist/chunk-M4HGHTIC.js +0 -820
- package/dist/chunk-M4HGHTIC.js.map +0 -1
- package/dist/chunk-PXWDQFWV.mjs +0 -192
- package/dist/chunk-PXWDQFWV.mjs.map +0 -1
- package/dist/chunk-U7AQC2Z7.js.map +0 -1
- package/dist/chunk-V6BXO6ZS.mjs.map +0 -1
- package/dist/chunk-VTGPHE4Z.mjs +0 -322
- package/dist/chunk-VTGPHE4Z.mjs.map +0 -1
- package/dist/chunk-W2NCOORK.js.map +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { init_hooks,
|
|
1
|
+
import { init_hooks, init_masterpiecesService, init_masterpiecesConfigService, init_cartService, init_bookingService, init_bookingAdminService, init_cartHistoryService, init_CartContext, useCartContext, useDeadlinePopup, useBooking, useBookingForm, updateCollectionOrder, moveCollectionDown, moveCollectionUp, getAllCollections, updateArtworkOrder, moveArtworkDown, moveArtworkUp, getArtworksByCollection, BookingService, useMasterpieces, CartProvider, useMasterpiecesConfig, useBookingAdmin, getConfig, createCategory } from './chunk-WS3QZYBI.mjs';
|
|
2
2
|
import { normalizeHomeTabConfig, getCategoryDisplayName, buildDefaultHomeTabConfig } from './chunk-MFG2Y6UR.mjs';
|
|
3
3
|
import { UniversalExportClient, UniversalExportButton } from './chunk-TGNUEULF.mjs';
|
|
4
|
-
import { Card, Badge, CardContent, Button, GenericOrderManager, Modal, CardHeader, CardTitle, CardDescription, Tabs, TabsList, TabsTrigger, TabsContent, Label, Input, Textarea, Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-
|
|
4
|
+
import { Card, Badge, CardContent, Button, GenericOrderManager, Modal, CardHeader, CardTitle, CardDescription, Tabs, TabsList, TabsTrigger, TabsContent, Label, Input, Textarea, Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-622Y6LTH.mjs';
|
|
5
|
+
import { __require } from './chunk-WMJKH4XE.mjs';
|
|
5
6
|
import React29, { createContext, useState, useEffect, useRef, useCallback, useMemo, useContext } from 'react';
|
|
6
7
|
import { Check, Minus, Plus, ShoppingCart, ShoppingBag, Book, Eye, ImageIcon, ChevronLeft, ChevronRight, Grid3x3, X, Trash2, Calendar, Clock, CheckCircle, Package, Search, RefreshCw, Download, XCircle, Save, Edit, Settings, AlertTriangle, EyeOff, Database, Loader, ArrowLeft, User, Image, Info, History, Bell, Cog, RotateCcw, ArrowUpDown, LogOut, LogIn, Lock, Phone } from 'lucide-react';
|
|
7
8
|
import Link from 'next/link';
|
|
@@ -725,8 +726,804 @@ var ThumbnailSidebar = ({
|
|
|
725
726
|
))));
|
|
726
727
|
};
|
|
727
728
|
|
|
728
|
-
// src/showmasterpiece/
|
|
729
|
-
|
|
729
|
+
// src/showmasterpiece/services/index.ts
|
|
730
|
+
init_masterpiecesService();
|
|
731
|
+
init_masterpiecesConfigService();
|
|
732
|
+
init_cartService();
|
|
733
|
+
init_bookingService();
|
|
734
|
+
init_bookingAdminService();
|
|
735
|
+
init_cartHistoryService();
|
|
736
|
+
|
|
737
|
+
// src/services/universalFile/config/index.ts
|
|
738
|
+
if (typeof window === "undefined") {
|
|
739
|
+
try {
|
|
740
|
+
__require("dotenv").config({ path: __require("path").join(process.cwd(), ".env.local") });
|
|
741
|
+
} catch (error) {
|
|
742
|
+
console.warn("\u26A0\uFE0F [ConfigManager] \u65E0\u6CD5\u52A0\u8F7D.env.local\u6587\u4EF6:", error);
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
var DEFAULT_CONFIG = {
|
|
746
|
+
defaultStorage: "aliyun-oss",
|
|
747
|
+
// 修改默认存储为OSS
|
|
748
|
+
storageProviders: {
|
|
749
|
+
"local": {
|
|
750
|
+
type: "local",
|
|
751
|
+
enabled: false,
|
|
752
|
+
// 默认禁用本地存储
|
|
753
|
+
rootPath: process.env.FILE_STORAGE_PATH || "uploads",
|
|
754
|
+
baseUrl: process.env.FILE_BASE_URL || "/uploads"
|
|
755
|
+
},
|
|
756
|
+
"aliyun-oss": {
|
|
757
|
+
type: "aliyun-oss",
|
|
758
|
+
enabled: true,
|
|
759
|
+
// 默认启用OSS
|
|
760
|
+
region: "",
|
|
761
|
+
bucket: "",
|
|
762
|
+
accessKeyId: "",
|
|
763
|
+
accessKeySecret: ""
|
|
764
|
+
},
|
|
765
|
+
"aws-s3": {
|
|
766
|
+
type: "aws-s3",
|
|
767
|
+
enabled: false
|
|
768
|
+
},
|
|
769
|
+
"qcloud-cos": {
|
|
770
|
+
type: "qcloud-cos",
|
|
771
|
+
enabled: false
|
|
772
|
+
}
|
|
773
|
+
},
|
|
774
|
+
defaultCDN: "none",
|
|
775
|
+
cdnProviders: {
|
|
776
|
+
"none": {
|
|
777
|
+
type: "none",
|
|
778
|
+
enabled: false
|
|
779
|
+
},
|
|
780
|
+
"aliyun-cdn": {
|
|
781
|
+
type: "aliyun-cdn",
|
|
782
|
+
enabled: false,
|
|
783
|
+
domain: "",
|
|
784
|
+
accessKeyId: "",
|
|
785
|
+
accessKeySecret: ""
|
|
786
|
+
},
|
|
787
|
+
"aws-cloudfront": {
|
|
788
|
+
type: "aws-cloudfront",
|
|
789
|
+
enabled: false
|
|
790
|
+
},
|
|
791
|
+
"qcloud-cdn": {
|
|
792
|
+
type: "qcloud-cdn",
|
|
793
|
+
enabled: false
|
|
794
|
+
}
|
|
795
|
+
},
|
|
796
|
+
maxFileSize: parseInt(process.env.MAX_FILE_SIZE || "104857600"),
|
|
797
|
+
// 100MB
|
|
798
|
+
allowedMimeTypes: [
|
|
799
|
+
// 图片类型
|
|
800
|
+
"image/jpeg",
|
|
801
|
+
"image/png",
|
|
802
|
+
"image/gif",
|
|
803
|
+
"image/webp",
|
|
804
|
+
"image/svg+xml",
|
|
805
|
+
// 音频类型
|
|
806
|
+
"audio/mpeg",
|
|
807
|
+
"audio/wav",
|
|
808
|
+
"audio/ogg",
|
|
809
|
+
"audio/mp4",
|
|
810
|
+
"audio/aac",
|
|
811
|
+
// 视频类型
|
|
812
|
+
"video/mp4",
|
|
813
|
+
"video/avi",
|
|
814
|
+
"video/mov",
|
|
815
|
+
"video/webm",
|
|
816
|
+
"video/mkv",
|
|
817
|
+
// 文档类型
|
|
818
|
+
"application/pdf",
|
|
819
|
+
"text/plain",
|
|
820
|
+
"application/json",
|
|
821
|
+
"application/javascript",
|
|
822
|
+
"text/css",
|
|
823
|
+
"text/html",
|
|
824
|
+
"text/markdown",
|
|
825
|
+
// 压缩文件
|
|
826
|
+
"application/zip",
|
|
827
|
+
"application/x-zip-compressed",
|
|
828
|
+
"application/x-rar-compressed",
|
|
829
|
+
"application/x-7z-compressed",
|
|
830
|
+
// 3D模型文件
|
|
831
|
+
"application/octet-stream",
|
|
832
|
+
// PMD/PMX文件
|
|
833
|
+
"model/gltf+json",
|
|
834
|
+
"model/gltf-binary"
|
|
835
|
+
],
|
|
836
|
+
enableProcessing: process.env.ENABLE_FILE_PROCESSING === "true",
|
|
837
|
+
processingQueueSize: parseInt(process.env.PROCESSING_QUEUE_SIZE || "10"),
|
|
838
|
+
cache: {
|
|
839
|
+
metadataTTL: parseInt(process.env.METADATA_CACHE_TTL || "3600"),
|
|
840
|
+
// 1小时
|
|
841
|
+
urlTTL: parseInt(process.env.URL_CACHE_TTL || "1800")
|
|
842
|
+
// 30分钟
|
|
843
|
+
}
|
|
844
|
+
};
|
|
845
|
+
var FileServiceConfigManager = class {
|
|
846
|
+
constructor(customConfig) {
|
|
847
|
+
this.config = this.mergeConfig(DEFAULT_CONFIG, customConfig);
|
|
848
|
+
this.validateConfig();
|
|
849
|
+
}
|
|
850
|
+
/**
|
|
851
|
+
* 获取完整配置
|
|
852
|
+
*/
|
|
853
|
+
getConfig() {
|
|
854
|
+
return { ...this.config };
|
|
855
|
+
}
|
|
856
|
+
/**
|
|
857
|
+
* 获取存储提供者配置
|
|
858
|
+
*/
|
|
859
|
+
getStorageConfig(type) {
|
|
860
|
+
return this.config.storageProviders[type];
|
|
861
|
+
}
|
|
862
|
+
/**
|
|
863
|
+
* 获取CDN提供者配置
|
|
864
|
+
*/
|
|
865
|
+
getCDNConfig(type) {
|
|
866
|
+
return this.config.cdnProviders[type];
|
|
867
|
+
}
|
|
868
|
+
/**
|
|
869
|
+
* 更新配置
|
|
870
|
+
*/
|
|
871
|
+
updateConfig(updates) {
|
|
872
|
+
this.config = this.mergeConfig(this.config, updates);
|
|
873
|
+
this.validateConfig();
|
|
874
|
+
}
|
|
875
|
+
/**
|
|
876
|
+
* 启用存储提供者
|
|
877
|
+
*/
|
|
878
|
+
enableStorageProvider(type, config) {
|
|
879
|
+
if (this.config.storageProviders[type]) {
|
|
880
|
+
this.config.storageProviders[type] = {
|
|
881
|
+
...this.config.storageProviders[type],
|
|
882
|
+
...config,
|
|
883
|
+
enabled: true
|
|
884
|
+
};
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
/**
|
|
888
|
+
* 禁用存储提供者
|
|
889
|
+
*/
|
|
890
|
+
disableStorageProvider(type) {
|
|
891
|
+
if (this.config.storageProviders[type]) {
|
|
892
|
+
this.config.storageProviders[type].enabled = false;
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
/**
|
|
896
|
+
* 启用CDN提供者
|
|
897
|
+
*/
|
|
898
|
+
enableCDNProvider(type, config) {
|
|
899
|
+
if (this.config.cdnProviders[type]) {
|
|
900
|
+
this.config.cdnProviders[type] = {
|
|
901
|
+
...this.config.cdnProviders[type],
|
|
902
|
+
...config,
|
|
903
|
+
enabled: true
|
|
904
|
+
};
|
|
905
|
+
this.config.defaultCDN = type;
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
/**
|
|
909
|
+
* 禁用CDN提供者
|
|
910
|
+
*/
|
|
911
|
+
disableCDNProvider(type) {
|
|
912
|
+
if (this.config.cdnProviders[type]) {
|
|
913
|
+
this.config.cdnProviders[type].enabled = false;
|
|
914
|
+
if (this.config.defaultCDN === type) {
|
|
915
|
+
this.config.defaultCDN = "none";
|
|
916
|
+
}
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
/**
|
|
920
|
+
* 从环境变量加载阿里云OSS配置
|
|
921
|
+
*/
|
|
922
|
+
loadAliyunOSSFromEnv() {
|
|
923
|
+
const config = {
|
|
924
|
+
region: process.env.ALIYUN_OSS_REGION,
|
|
925
|
+
bucket: process.env.ALIYUN_OSS_BUCKET,
|
|
926
|
+
accessKeyId: process.env.ALIYUN_OSS_ACCESS_KEY_ID,
|
|
927
|
+
accessKeySecret: process.env.ALIYUN_OSS_ACCESS_KEY_SECRET,
|
|
928
|
+
customDomain: process.env.ALIYUN_OSS_CUSTOM_DOMAIN,
|
|
929
|
+
secure: process.env.ALIYUN_OSS_SECURE === "true",
|
|
930
|
+
internal: process.env.ALIYUN_OSS_INTERNAL === "true"
|
|
931
|
+
};
|
|
932
|
+
console.log("\u{1F50D} [ConfigManager] \u963F\u91CC\u4E91OSS\u914D\u7F6E:", {
|
|
933
|
+
region: config.region,
|
|
934
|
+
bucket: config.bucket,
|
|
935
|
+
accessKeyId: config.accessKeyId ? "***" : "\u672A\u8BBE\u7F6E",
|
|
936
|
+
accessKeySecret: config.accessKeySecret ? "***" : "\u672A\u8BBE\u7F6E",
|
|
937
|
+
customDomain: config.customDomain || "\u672A\u8BBE\u7F6E"
|
|
938
|
+
});
|
|
939
|
+
if (config.region && config.bucket && config.accessKeyId && config.accessKeySecret) {
|
|
940
|
+
this.enableStorageProvider("aliyun-oss", config);
|
|
941
|
+
this.config.defaultStorage = "aliyun-oss";
|
|
942
|
+
console.log("\u2705 [ConfigManager] \u4ECE\u73AF\u5883\u53D8\u91CF\u52A0\u8F7D\u963F\u91CC\u4E91OSS\u914D\u7F6E\u6210\u529F");
|
|
943
|
+
} else {
|
|
944
|
+
console.warn("\u26A0\uFE0F [ConfigManager] \u963F\u91CC\u4E91OSS\u73AF\u5883\u53D8\u91CF\u914D\u7F6E\u4E0D\u5B8C\u6574");
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
/**
|
|
948
|
+
* 从配置管理模块加载阿里云OSS配置
|
|
949
|
+
*/
|
|
950
|
+
async loadAliyunOSSFromConfigManager() {
|
|
951
|
+
return;
|
|
952
|
+
}
|
|
953
|
+
/**
|
|
954
|
+
* 从环境变量加载阿里云CDN配置
|
|
955
|
+
*/
|
|
956
|
+
loadAliyunCDNFromEnv() {
|
|
957
|
+
const config = {
|
|
958
|
+
domain: process.env.ALIYUN_CDN_DOMAIN,
|
|
959
|
+
accessKeyId: process.env.ALIYUN_CDN_ACCESS_KEY_ID,
|
|
960
|
+
accessKeySecret: process.env.ALIYUN_CDN_ACCESS_KEY_SECRET,
|
|
961
|
+
region: process.env.ALIYUN_CDN_REGION
|
|
962
|
+
};
|
|
963
|
+
if (config.domain && config.accessKeyId && config.accessKeySecret) {
|
|
964
|
+
this.enableCDNProvider("aliyun-cdn", config);
|
|
965
|
+
console.log("\u2705 [ConfigManager] \u4ECE\u73AF\u5883\u53D8\u91CF\u52A0\u8F7D\u963F\u91CC\u4E91CDN\u914D\u7F6E\u6210\u529F");
|
|
966
|
+
} else {
|
|
967
|
+
console.log("\u2139\uFE0F [ConfigManager] \u963F\u91CC\u4E91CDN\u672A\u914D\u7F6E\uFF0C\u5C06\u4F7F\u7528\u9ED8\u8BA4\u5B58\u50A8\u65B9\u5F0F");
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
/**
|
|
971
|
+
* 验证配置有效性
|
|
972
|
+
*/
|
|
973
|
+
validateConfig() {
|
|
974
|
+
const defaultStorageConfig = this.config.storageProviders[this.config.defaultStorage];
|
|
975
|
+
if (!defaultStorageConfig || !defaultStorageConfig.enabled) {
|
|
976
|
+
console.warn(`\u26A0\uFE0F [ConfigManager] \u9ED8\u8BA4\u5B58\u50A8\u63D0\u4F9B\u8005 ${this.config.defaultStorage} \u672A\u542F\u7528`);
|
|
977
|
+
}
|
|
978
|
+
if (this.config.maxFileSize <= 0) {
|
|
979
|
+
throw new Error("\u6587\u4EF6\u5927\u5C0F\u9650\u5236\u5FC5\u987B\u5927\u4E8E0");
|
|
980
|
+
}
|
|
981
|
+
if (this.config.processingQueueSize <= 0) {
|
|
982
|
+
throw new Error("\u5904\u7406\u961F\u5217\u5927\u5C0F\u5FC5\u987B\u5927\u4E8E0");
|
|
983
|
+
}
|
|
984
|
+
if (this.config.cache.metadataTTL <= 0 || this.config.cache.urlTTL <= 0) {
|
|
985
|
+
throw new Error("\u7F13\u5B58TTL\u5FC5\u987B\u5927\u4E8E0");
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
/**
|
|
989
|
+
* 合并配置
|
|
990
|
+
*/
|
|
991
|
+
mergeConfig(base, override) {
|
|
992
|
+
if (!override) return { ...base };
|
|
993
|
+
return {
|
|
994
|
+
...base,
|
|
995
|
+
...override,
|
|
996
|
+
storageProviders: {
|
|
997
|
+
...base.storageProviders,
|
|
998
|
+
...override.storageProviders || {}
|
|
999
|
+
},
|
|
1000
|
+
cdnProviders: {
|
|
1001
|
+
...base.cdnProviders,
|
|
1002
|
+
...override.cdnProviders || {}
|
|
1003
|
+
},
|
|
1004
|
+
cache: {
|
|
1005
|
+
...base.cache,
|
|
1006
|
+
...override.cache || {}
|
|
1007
|
+
}
|
|
1008
|
+
};
|
|
1009
|
+
}
|
|
1010
|
+
};
|
|
1011
|
+
async function createFileServiceConfig(customConfig) {
|
|
1012
|
+
const configManager = new FileServiceConfigManager(customConfig);
|
|
1013
|
+
await configManager.loadAliyunOSSFromEnv();
|
|
1014
|
+
await configManager.loadAliyunCDNFromEnv();
|
|
1015
|
+
await configManager.loadAliyunOSSFromConfigManager();
|
|
1016
|
+
return configManager;
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
// src/showmasterpiece/services/fileService.ts
|
|
1020
|
+
var cachedConfigManager = null;
|
|
1021
|
+
async function getShowmasterpieceOSSConfig() {
|
|
1022
|
+
try {
|
|
1023
|
+
console.log("\u{1F3A8} [ShowMasterpiece] \u5C1D\u8BD5\u4ECE\u72EC\u7ACB\u914D\u7F6E\u8BFB\u53D6OSS\u914D\u7F6E...");
|
|
1024
|
+
const environment = process.env.NODE_ENV === "production" ? "production" : "development";
|
|
1025
|
+
console.log(`\u{1F3A8} [ShowMasterpiece] \u5F53\u524D\u73AF\u5883: ${environment}`);
|
|
1026
|
+
if (typeof window !== "undefined") {
|
|
1027
|
+
console.log("\u{1F310} [ShowMasterpiece] \u5BA2\u6237\u7AEF\u73AF\u5883\uFF0C\u901A\u8FC7API\u8BFB\u53D6\u914D\u7F6E");
|
|
1028
|
+
const configKeys = "ALIYUN_OSS_REGION,ALIYUN_OSS_BUCKET,ALIYUN_OSS_ACCESS_KEY_ID,ALIYUN_OSS_ACCESS_KEY_SECRET,ALIYUN_OSS_CUSTOM_DOMAIN,ALIYUN_OSS_SECURE,ALIYUN_OSS_INTERNAL";
|
|
1029
|
+
const response = await fetch(`/api/showmasterpiece/config/items?environment=${environment}&keys=${configKeys}`);
|
|
1030
|
+
if (!response.ok) {
|
|
1031
|
+
console.warn("\u26A0\uFE0F [ShowMasterpiece] \u8BFB\u53D6\u72EC\u7ACB\u914D\u7F6EAPI\u5931\u8D25:", response.status);
|
|
1032
|
+
return null;
|
|
1033
|
+
}
|
|
1034
|
+
const data = await response.json();
|
|
1035
|
+
if (!data.success || !data.items) {
|
|
1036
|
+
console.warn("\u26A0\uFE0F [ShowMasterpiece] \u72EC\u7ACB\u914D\u7F6EAPI\u54CD\u5E94\u5F02\u5E38:", data);
|
|
1037
|
+
return null;
|
|
1038
|
+
}
|
|
1039
|
+
const configMap = {};
|
|
1040
|
+
data.items.forEach((item) => {
|
|
1041
|
+
if (item.value) {
|
|
1042
|
+
configMap[item.key] = item.value;
|
|
1043
|
+
}
|
|
1044
|
+
});
|
|
1045
|
+
const ossConfig = {
|
|
1046
|
+
region: configMap["ALIYUN_OSS_REGION"],
|
|
1047
|
+
bucket: configMap["ALIYUN_OSS_BUCKET"],
|
|
1048
|
+
accessKeyId: configMap["ALIYUN_OSS_ACCESS_KEY_ID"],
|
|
1049
|
+
accessKeySecret: configMap["ALIYUN_OSS_ACCESS_KEY_SECRET"],
|
|
1050
|
+
customDomain: configMap["ALIYUN_OSS_CUSTOM_DOMAIN"],
|
|
1051
|
+
secure: configMap["ALIYUN_OSS_SECURE"] === "true",
|
|
1052
|
+
internal: configMap["ALIYUN_OSS_INTERNAL"] === "true"
|
|
1053
|
+
};
|
|
1054
|
+
console.log("\u{1F3A8} [ShowMasterpiece] \u72EC\u7ACB\u914D\u7F6E\u8BFB\u53D6\u7ED3\u679C:", {
|
|
1055
|
+
region: ossConfig.region || "\u672A\u914D\u7F6E",
|
|
1056
|
+
bucket: ossConfig.bucket || "\u672A\u914D\u7F6E",
|
|
1057
|
+
accessKeyId: ossConfig.accessKeyId ? "***" : "\u672A\u914D\u7F6E",
|
|
1058
|
+
accessKeySecret: ossConfig.accessKeySecret ? "***" : "\u672A\u914D\u7F6E",
|
|
1059
|
+
customDomain: ossConfig.customDomain || "\u672A\u914D\u7F6E",
|
|
1060
|
+
secure: ossConfig.secure,
|
|
1061
|
+
internal: ossConfig.internal
|
|
1062
|
+
});
|
|
1063
|
+
if (ossConfig.region && ossConfig.bucket && ossConfig.accessKeyId && ossConfig.accessKeySecret) {
|
|
1064
|
+
console.log("\u2705 [ShowMasterpiece] \u72EC\u7ACB\u914D\u7F6E\u5B8C\u6574\uFF0C\u5C06\u4F7F\u7528\u72EC\u7ACBOSS\u914D\u7F6E");
|
|
1065
|
+
return ossConfig;
|
|
1066
|
+
} else {
|
|
1067
|
+
console.log("\u26A0\uFE0F [ShowMasterpiece] \u72EC\u7ACB\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF0C\u5C06\u56DE\u9000\u5230\u516C\u5171\u914D\u7F6E");
|
|
1068
|
+
console.log("\u{1F50D} [ShowMasterpiece] \u7F3A\u5931\u914D\u7F6E\u9879:", {
|
|
1069
|
+
region: !ossConfig.region,
|
|
1070
|
+
bucket: !ossConfig.bucket,
|
|
1071
|
+
accessKeyId: !ossConfig.accessKeyId,
|
|
1072
|
+
accessKeySecret: !ossConfig.accessKeySecret
|
|
1073
|
+
});
|
|
1074
|
+
return null;
|
|
1075
|
+
}
|
|
1076
|
+
} else {
|
|
1077
|
+
console.log("\u{1F5A5}\uFE0F [ShowMasterpiece] \u670D\u52A1\u5668\u7AEF\u73AF\u5883\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u914D\u7F6E\u56DE\u9000");
|
|
1078
|
+
return null;
|
|
1079
|
+
}
|
|
1080
|
+
} catch (error) {
|
|
1081
|
+
console.warn("\u26A0\uFE0F [ShowMasterpiece] \u8BFB\u53D6\u72EC\u7ACB\u914D\u7F6E\u5931\u8D25:", error);
|
|
1082
|
+
return null;
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
async function getCachedConfigManager() {
|
|
1086
|
+
if (!cachedConfigManager) {
|
|
1087
|
+
const showmasterpieceOSSConfig = await getShowmasterpieceOSSConfig();
|
|
1088
|
+
if (showmasterpieceOSSConfig) {
|
|
1089
|
+
console.log("\u{1F3A8} [ShowMasterpiece] \u4F7F\u7528\u72EC\u7ACBOSS\u914D\u7F6E\u521B\u5EFA\u914D\u7F6E\u7BA1\u7406\u5668");
|
|
1090
|
+
cachedConfigManager = await createFileServiceConfig({
|
|
1091
|
+
defaultStorage: "aliyun-oss",
|
|
1092
|
+
storageProviders: {
|
|
1093
|
+
"local": {
|
|
1094
|
+
type: "local",
|
|
1095
|
+
enabled: false,
|
|
1096
|
+
rootPath: "uploads",
|
|
1097
|
+
baseUrl: "/uploads"
|
|
1098
|
+
},
|
|
1099
|
+
"aliyun-oss": {
|
|
1100
|
+
type: "aliyun-oss",
|
|
1101
|
+
enabled: true,
|
|
1102
|
+
...showmasterpieceOSSConfig
|
|
1103
|
+
},
|
|
1104
|
+
"aws-s3": {
|
|
1105
|
+
type: "aws-s3",
|
|
1106
|
+
enabled: false
|
|
1107
|
+
},
|
|
1108
|
+
"qcloud-cos": {
|
|
1109
|
+
type: "qcloud-cos",
|
|
1110
|
+
enabled: false
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
});
|
|
1114
|
+
} else {
|
|
1115
|
+
console.log("\u{1F3A8} [ShowMasterpiece] \u72EC\u7ACB\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u914D\u7F6E");
|
|
1116
|
+
cachedConfigManager = await createFileServiceConfig({
|
|
1117
|
+
defaultStorage: "local",
|
|
1118
|
+
// 默认使用本地存储
|
|
1119
|
+
storageProviders: {
|
|
1120
|
+
"local": {
|
|
1121
|
+
type: "local",
|
|
1122
|
+
enabled: true,
|
|
1123
|
+
rootPath: "uploads",
|
|
1124
|
+
baseUrl: "/uploads"
|
|
1125
|
+
},
|
|
1126
|
+
"aliyun-oss": {
|
|
1127
|
+
type: "aliyun-oss",
|
|
1128
|
+
enabled: false
|
|
1129
|
+
// 如果独立配置失败,禁用OSS
|
|
1130
|
+
},
|
|
1131
|
+
"aws-s3": {
|
|
1132
|
+
type: "aws-s3",
|
|
1133
|
+
enabled: false
|
|
1134
|
+
},
|
|
1135
|
+
"qcloud-cos": {
|
|
1136
|
+
type: "qcloud-cos",
|
|
1137
|
+
enabled: false
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1140
|
+
});
|
|
1141
|
+
}
|
|
1142
|
+
}
|
|
1143
|
+
return cachedConfigManager;
|
|
1144
|
+
}
|
|
1145
|
+
async function getShowMasterpieceFileConfig() {
|
|
1146
|
+
const configManager = await getCachedConfigManager();
|
|
1147
|
+
const config = configManager.getConfig();
|
|
1148
|
+
const ossConfig = config.storageProviders["aliyun-oss"];
|
|
1149
|
+
if (ossConfig && ossConfig.enabled) {
|
|
1150
|
+
console.log("\u2705 [ShowMasterpiece] \u4F7F\u7528\u963F\u91CC\u4E91OSS\u5B58\u50A8");
|
|
1151
|
+
return configManager;
|
|
1152
|
+
} else {
|
|
1153
|
+
console.log("\u2139\uFE0F [ShowMasterpiece] OSS\u672A\u914D\u7F6E\uFF0C\u4F7F\u7528\u672C\u5730\u5B58\u50A8");
|
|
1154
|
+
return configManager;
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1157
|
+
async function uploadArtworkImage(file, collectionId) {
|
|
1158
|
+
console.log("\u{1F3A8} [ShowMasterpiece] \u5F00\u59CB\u4E0A\u4F20\u4F5C\u54C1\u56FE\u7247:", file.name);
|
|
1159
|
+
const formData = new FormData();
|
|
1160
|
+
formData.append("file", file);
|
|
1161
|
+
formData.append("moduleId", "showmasterpiece");
|
|
1162
|
+
formData.append("businessId", collectionId ? `collection-${collectionId}` : "artwork");
|
|
1163
|
+
const timestamp = Date.now();
|
|
1164
|
+
const randomId = Math.random().toString(36).substr(2, 9);
|
|
1165
|
+
const extension = file.name.split(".").pop()?.toLowerCase() || "jpg";
|
|
1166
|
+
const basePath = collectionId ? `showmasterpiece/collection-${collectionId}` : "showmasterpiece/artwork";
|
|
1167
|
+
formData.append("folderPath", `${basePath}/${timestamp}_${randomId}.${extension}`);
|
|
1168
|
+
formData.append("needsProcessing", "true");
|
|
1169
|
+
const response = await fetch("/api/universal-file/upload", {
|
|
1170
|
+
method: "POST",
|
|
1171
|
+
body: formData
|
|
1172
|
+
});
|
|
1173
|
+
if (!response.ok) {
|
|
1174
|
+
const errorData = await response.json();
|
|
1175
|
+
throw new Error(errorData.error || `HTTP ${response.status}: ${response.statusText}`);
|
|
1176
|
+
}
|
|
1177
|
+
const result = await response.json();
|
|
1178
|
+
if (!result.success) {
|
|
1179
|
+
throw new Error(result.error || "\u4E0A\u4F20\u5931\u8D25");
|
|
1180
|
+
}
|
|
1181
|
+
console.log("\u2705 [ShowMasterpiece] \u4F5C\u54C1\u56FE\u7247\u4E0A\u4F20\u6210\u529F:", {
|
|
1182
|
+
fileId: result.data.fileId,
|
|
1183
|
+
accessUrl: result.data.accessUrl
|
|
1184
|
+
});
|
|
1185
|
+
return {
|
|
1186
|
+
fileId: result.data.fileId,
|
|
1187
|
+
accessUrl: result.data.accessUrl
|
|
1188
|
+
};
|
|
1189
|
+
}
|
|
1190
|
+
async function getArtworkImageUrl(fileId) {
|
|
1191
|
+
console.log("\u{1F517} [ShowMasterpiece] \u83B7\u53D6\u4F5C\u54C1\u56FE\u7247URL:", fileId);
|
|
1192
|
+
const response = await fetch(`/api/universal-file/${fileId}`);
|
|
1193
|
+
if (!response.ok) {
|
|
1194
|
+
throw new Error(`\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: HTTP ${response.status}`);
|
|
1195
|
+
}
|
|
1196
|
+
const result = await response.json();
|
|
1197
|
+
if (!result.success) {
|
|
1198
|
+
throw new Error(result.error || "\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25");
|
|
1199
|
+
}
|
|
1200
|
+
return result.data.accessUrl;
|
|
1201
|
+
}
|
|
1202
|
+
async function shouldUseUniversalFileService() {
|
|
1203
|
+
try {
|
|
1204
|
+
const configManager = await getCachedConfigManager();
|
|
1205
|
+
const config = configManager.getConfig();
|
|
1206
|
+
const ossConfig = config.storageProviders["aliyun-oss"];
|
|
1207
|
+
if (ossConfig && ossConfig.enabled) {
|
|
1208
|
+
return true;
|
|
1209
|
+
}
|
|
1210
|
+
return true;
|
|
1211
|
+
} catch (error) {
|
|
1212
|
+
console.warn("\u26A0\uFE0F [ShowMasterpiece] \u68C0\u67E5\u6587\u4EF6\u670D\u52A1\u914D\u7F6E\u5931\u8D25:", error);
|
|
1213
|
+
return false;
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
async function getStorageModeDisplayName() {
|
|
1217
|
+
const shouldUse = await shouldUseUniversalFileService();
|
|
1218
|
+
if (shouldUse) {
|
|
1219
|
+
const configManager = await getCachedConfigManager();
|
|
1220
|
+
const config = configManager.getConfig();
|
|
1221
|
+
const ossConfig = config.storageProviders["aliyun-oss"];
|
|
1222
|
+
if (ossConfig && ossConfig.enabled) {
|
|
1223
|
+
return "\u963F\u91CC\u4E91OSS + CDN (\u72EC\u7ACB\u914D\u7F6E)";
|
|
1224
|
+
} else {
|
|
1225
|
+
return "\u672C\u5730\u5B58\u50A8 + \u6587\u4EF6\u670D\u52A1";
|
|
1226
|
+
}
|
|
1227
|
+
} else {
|
|
1228
|
+
return "Base64\u6570\u636E\u5E93\u5B58\u50A8";
|
|
1229
|
+
}
|
|
1230
|
+
}
|
|
1231
|
+
function clearConfigCache() {
|
|
1232
|
+
console.log("\u{1F9F9} [ShowMasterpiece] \u6E05\u9664\u914D\u7F6E\u7F13\u5B58");
|
|
1233
|
+
cachedConfigManager = null;
|
|
1234
|
+
}
|
|
1235
|
+
async function refreshFileServiceConfig() {
|
|
1236
|
+
console.log("\u{1F504} [ShowMasterpiece] \u5F3A\u5236\u5237\u65B0\u6587\u4EF6\u670D\u52A1\u914D\u7F6E");
|
|
1237
|
+
clearConfigCache();
|
|
1238
|
+
const configManager = await getCachedConfigManager();
|
|
1239
|
+
if (typeof window === "undefined") {
|
|
1240
|
+
try {
|
|
1241
|
+
const config = configManager.getConfig();
|
|
1242
|
+
const ossConfig = config?.storageProviders?.["aliyun-oss"];
|
|
1243
|
+
if (ossConfig && ossConfig.enabled) {
|
|
1244
|
+
console.log("\u{1F504} [ShowMasterpiece] \u91CD\u65B0\u521D\u59CB\u5316OSS Provider\u4EE5\u5E94\u7528\u65B0\u914D\u7F6E");
|
|
1245
|
+
const { UniversalFileService } = await import('./UniversalFileService-336GFY6N.mjs');
|
|
1246
|
+
const fileService = new UniversalFileService(config);
|
|
1247
|
+
await fileService.initialize();
|
|
1248
|
+
await fileService.reinitializeStorageProviders?.();
|
|
1249
|
+
}
|
|
1250
|
+
} catch (error) {
|
|
1251
|
+
console.warn("\u26A0\uFE0F [ShowMasterpiece] \u91CD\u65B0\u521D\u59CB\u5316Provider\u5931\u8D25:", error);
|
|
1252
|
+
}
|
|
1253
|
+
}
|
|
1254
|
+
return configManager;
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
// src/showmasterpiece/services/exportConfig.ts
|
|
1258
|
+
var BOOKING_EXPORT_FIELDS = [
|
|
1259
|
+
{
|
|
1260
|
+
key: "id",
|
|
1261
|
+
label: "\u9884\u8BA2ID",
|
|
1262
|
+
type: "number",
|
|
1263
|
+
enabled: true,
|
|
1264
|
+
required: true,
|
|
1265
|
+
description: "\u9884\u8BA2\u8BB0\u5F55\u7684\u552F\u4E00\u6807\u8BC6",
|
|
1266
|
+
alignment: "center"
|
|
1267
|
+
},
|
|
1268
|
+
{
|
|
1269
|
+
key: "collectionId",
|
|
1270
|
+
label: "\u753B\u96C6ID",
|
|
1271
|
+
type: "number",
|
|
1272
|
+
enabled: true,
|
|
1273
|
+
required: true,
|
|
1274
|
+
description: "\u753B\u96C6\u7684\u552F\u4E00\u6807\u8BC6",
|
|
1275
|
+
alignment: "center"
|
|
1276
|
+
},
|
|
1277
|
+
{
|
|
1278
|
+
key: "qqNumber",
|
|
1279
|
+
label: "QQ\u53F7",
|
|
1280
|
+
type: "string",
|
|
1281
|
+
enabled: true,
|
|
1282
|
+
required: false,
|
|
1283
|
+
description: "\u7528\u6237\u7684QQ\u53F7\u7801",
|
|
1284
|
+
alignment: "left"
|
|
1285
|
+
},
|
|
1286
|
+
{
|
|
1287
|
+
key: "phoneNumber",
|
|
1288
|
+
label: "\u624B\u673A\u53F7",
|
|
1289
|
+
type: "string",
|
|
1290
|
+
enabled: true,
|
|
1291
|
+
required: false,
|
|
1292
|
+
description: "\u7528\u6237\u7684\u624B\u673A\u53F7\u7801",
|
|
1293
|
+
alignment: "left"
|
|
1294
|
+
},
|
|
1295
|
+
{
|
|
1296
|
+
key: "collectionTitle",
|
|
1297
|
+
label: "\u753B\u96C6\u6807\u9898",
|
|
1298
|
+
type: "string",
|
|
1299
|
+
enabled: true,
|
|
1300
|
+
required: true,
|
|
1301
|
+
description: "\u9884\u8BA2\u7684\u753B\u96C6\u6807\u9898",
|
|
1302
|
+
alignment: "left"
|
|
1303
|
+
},
|
|
1304
|
+
{
|
|
1305
|
+
key: "collectionNumber",
|
|
1306
|
+
label: "\u753B\u96C6\u7F16\u53F7",
|
|
1307
|
+
type: "string",
|
|
1308
|
+
enabled: true,
|
|
1309
|
+
required: true,
|
|
1310
|
+
description: "\u753B\u96C6\u7684\u7F16\u53F7",
|
|
1311
|
+
alignment: "left"
|
|
1312
|
+
},
|
|
1313
|
+
{
|
|
1314
|
+
key: "collectionPrice",
|
|
1315
|
+
label: "\u753B\u96C6\u4EF7\u683C",
|
|
1316
|
+
type: "number",
|
|
1317
|
+
enabled: true,
|
|
1318
|
+
required: true,
|
|
1319
|
+
description: "\u753B\u96C6\u7684\u4EF7\u683C",
|
|
1320
|
+
alignment: "right",
|
|
1321
|
+
formatter: (value) => `\xA5${Number(value).toFixed(2)}`
|
|
1322
|
+
},
|
|
1323
|
+
{
|
|
1324
|
+
key: "status",
|
|
1325
|
+
label: "\u9884\u8BA2\u72B6\u6001",
|
|
1326
|
+
type: "string",
|
|
1327
|
+
enabled: true,
|
|
1328
|
+
required: true,
|
|
1329
|
+
description: "\u9884\u8BA2\u7684\u5F53\u524D\u72B6\u6001",
|
|
1330
|
+
alignment: "center",
|
|
1331
|
+
formatter: (value) => {
|
|
1332
|
+
const statusMap = {
|
|
1333
|
+
pending: "\u5F85\u786E\u8BA4",
|
|
1334
|
+
confirmed: "\u5DF2\u786E\u8BA4",
|
|
1335
|
+
completed: "\u5DF2\u5B8C\u6210",
|
|
1336
|
+
cancelled: "\u5DF2\u53D6\u6D88"
|
|
1337
|
+
};
|
|
1338
|
+
return statusMap[value] || value;
|
|
1339
|
+
}
|
|
1340
|
+
},
|
|
1341
|
+
{
|
|
1342
|
+
key: "quantity",
|
|
1343
|
+
label: "\u9884\u8BA2\u6570\u91CF",
|
|
1344
|
+
type: "number",
|
|
1345
|
+
enabled: true,
|
|
1346
|
+
required: true,
|
|
1347
|
+
description: "\u9884\u8BA2\u7684\u6570\u91CF",
|
|
1348
|
+
alignment: "center"
|
|
1349
|
+
},
|
|
1350
|
+
{
|
|
1351
|
+
key: "price",
|
|
1352
|
+
label: "\u5355\u4EF7",
|
|
1353
|
+
type: "number",
|
|
1354
|
+
enabled: true,
|
|
1355
|
+
required: true,
|
|
1356
|
+
description: "\u5355\u4E2A\u753B\u96C6\u7684\u4EF7\u683C",
|
|
1357
|
+
alignment: "right",
|
|
1358
|
+
formatter: (value) => `\xA5${Number(value).toFixed(2)}`
|
|
1359
|
+
},
|
|
1360
|
+
{
|
|
1361
|
+
key: "totalPrice",
|
|
1362
|
+
label: "\u603B\u4EF7\u683C",
|
|
1363
|
+
type: "number",
|
|
1364
|
+
enabled: true,
|
|
1365
|
+
required: true,
|
|
1366
|
+
description: "\u603B\u4EF7\u683C\uFF08\u5355\u4EF7 \xD7 \u6570\u91CF\uFF09",
|
|
1367
|
+
alignment: "right",
|
|
1368
|
+
formatter: (value) => `\xA5${Number(value).toFixed(2)}`
|
|
1369
|
+
},
|
|
1370
|
+
{
|
|
1371
|
+
key: "notes",
|
|
1372
|
+
label: "\u7528\u6237\u5907\u6CE8",
|
|
1373
|
+
type: "string",
|
|
1374
|
+
enabled: true,
|
|
1375
|
+
required: false,
|
|
1376
|
+
description: "\u7528\u6237\u63D0\u4EA4\u7684\u5907\u6CE8\u4FE1\u606F",
|
|
1377
|
+
alignment: "left"
|
|
1378
|
+
},
|
|
1379
|
+
{
|
|
1380
|
+
key: "pickupMethod",
|
|
1381
|
+
label: "\u9886\u53D6\u65B9\u5F0F",
|
|
1382
|
+
type: "string",
|
|
1383
|
+
enabled: true,
|
|
1384
|
+
required: false,
|
|
1385
|
+
description: "\u7528\u6237\u9009\u62E9\u7684\u9886\u53D6\u65B9\u5F0F",
|
|
1386
|
+
alignment: "left"
|
|
1387
|
+
},
|
|
1388
|
+
{
|
|
1389
|
+
key: "adminNotes",
|
|
1390
|
+
label: "\u7BA1\u7406\u5458\u5907\u6CE8",
|
|
1391
|
+
type: "string",
|
|
1392
|
+
enabled: true,
|
|
1393
|
+
required: false,
|
|
1394
|
+
description: "\u7BA1\u7406\u5458\u6DFB\u52A0\u7684\u5907\u6CE8\u4FE1\u606F",
|
|
1395
|
+
alignment: "left"
|
|
1396
|
+
},
|
|
1397
|
+
{
|
|
1398
|
+
key: "createdAt",
|
|
1399
|
+
label: "\u521B\u5EFA\u65F6\u95F4",
|
|
1400
|
+
type: "date",
|
|
1401
|
+
enabled: true,
|
|
1402
|
+
required: true,
|
|
1403
|
+
description: "\u9884\u8BA2\u521B\u5EFA\u7684\u65F6\u95F4",
|
|
1404
|
+
alignment: "center",
|
|
1405
|
+
formatter: (value) => {
|
|
1406
|
+
if (!value) return "";
|
|
1407
|
+
const date = new Date(value);
|
|
1408
|
+
return date.toLocaleString("zh-CN");
|
|
1409
|
+
}
|
|
1410
|
+
},
|
|
1411
|
+
{
|
|
1412
|
+
key: "updatedAt",
|
|
1413
|
+
label: "\u66F4\u65B0\u65F6\u95F4",
|
|
1414
|
+
type: "date",
|
|
1415
|
+
enabled: true,
|
|
1416
|
+
required: true,
|
|
1417
|
+
description: "\u9884\u8BA2\u6700\u540E\u66F4\u65B0\u7684\u65F6\u95F4",
|
|
1418
|
+
alignment: "center",
|
|
1419
|
+
formatter: (value) => {
|
|
1420
|
+
if (!value) return "";
|
|
1421
|
+
const date = new Date(value);
|
|
1422
|
+
return date.toLocaleString("zh-CN");
|
|
1423
|
+
}
|
|
1424
|
+
},
|
|
1425
|
+
{
|
|
1426
|
+
key: "confirmedAt",
|
|
1427
|
+
label: "\u786E\u8BA4\u65F6\u95F4",
|
|
1428
|
+
type: "date",
|
|
1429
|
+
enabled: true,
|
|
1430
|
+
required: false,
|
|
1431
|
+
description: "\u9884\u8BA2\u786E\u8BA4\u7684\u65F6\u95F4",
|
|
1432
|
+
alignment: "center",
|
|
1433
|
+
formatter: (value) => {
|
|
1434
|
+
if (!value) return "";
|
|
1435
|
+
const date = new Date(value);
|
|
1436
|
+
return date.toLocaleString("zh-CN");
|
|
1437
|
+
}
|
|
1438
|
+
},
|
|
1439
|
+
{
|
|
1440
|
+
key: "completedAt",
|
|
1441
|
+
label: "\u5B8C\u6210\u65F6\u95F4",
|
|
1442
|
+
type: "date",
|
|
1443
|
+
enabled: true,
|
|
1444
|
+
required: false,
|
|
1445
|
+
description: "\u9884\u8BA2\u5B8C\u6210\u7684\u65F6\u95F4",
|
|
1446
|
+
alignment: "center",
|
|
1447
|
+
formatter: (value) => {
|
|
1448
|
+
if (!value) return "";
|
|
1449
|
+
const date = new Date(value);
|
|
1450
|
+
return date.toLocaleString("zh-CN");
|
|
1451
|
+
}
|
|
1452
|
+
},
|
|
1453
|
+
{
|
|
1454
|
+
key: "cancelledAt",
|
|
1455
|
+
label: "\u53D6\u6D88\u65F6\u95F4",
|
|
1456
|
+
type: "date",
|
|
1457
|
+
enabled: true,
|
|
1458
|
+
required: false,
|
|
1459
|
+
description: "\u9884\u8BA2\u53D6\u6D88\u7684\u65F6\u95F4",
|
|
1460
|
+
alignment: "center",
|
|
1461
|
+
formatter: (value) => {
|
|
1462
|
+
if (!value) return "";
|
|
1463
|
+
const date = new Date(value);
|
|
1464
|
+
return date.toLocaleString("zh-CN");
|
|
1465
|
+
}
|
|
1466
|
+
},
|
|
1467
|
+
{
|
|
1468
|
+
key: "userTotalPrice",
|
|
1469
|
+
label: "\u7528\u6237\u603B\u4EF7",
|
|
1470
|
+
type: "number",
|
|
1471
|
+
enabled: false,
|
|
1472
|
+
// 默认不启用,需要勾选才启用
|
|
1473
|
+
required: false,
|
|
1474
|
+
description: "\u6839\u636EQQ\u53F7\u548C\u624B\u673A\u53F7\u7EDF\u4E00\u5339\u914D\u7684\u8BE5\u7528\u6237\u6240\u6709\u9884\u8BA2\u5546\u54C1\u7684\u603B\u4EF7\u683C",
|
|
1475
|
+
alignment: "right",
|
|
1476
|
+
formatter: (value) => `\xA5${Number(value || 0).toFixed(2)}`
|
|
1477
|
+
}
|
|
1478
|
+
];
|
|
1479
|
+
var DEFAULT_BOOKING_EXPORT_CONFIG = {
|
|
1480
|
+
id: "default_booking_export",
|
|
1481
|
+
name: "\u9884\u8BA2\u4FE1\u606F\u5BFC\u51FA",
|
|
1482
|
+
description: "\u5BFC\u51FA\u6240\u6709\u9884\u8BA2\u4FE1\u606F\u4E3AExcel\u683C\u5F0F\uFF0C\u652F\u6301QQ\u53F7\u548C\u624B\u673A\u53F7\u5408\u5E76\u5355\u5143\u683C",
|
|
1483
|
+
format: "excel",
|
|
1484
|
+
fields: BOOKING_EXPORT_FIELDS,
|
|
1485
|
+
grouping: {
|
|
1486
|
+
enabled: true,
|
|
1487
|
+
fields: [
|
|
1488
|
+
{
|
|
1489
|
+
key: "phoneNumber",
|
|
1490
|
+
label: "\u624B\u673A\u53F7",
|
|
1491
|
+
mode: "merge",
|
|
1492
|
+
valueProcessing: "first",
|
|
1493
|
+
showGroupHeader: false,
|
|
1494
|
+
mergeCells: true
|
|
1495
|
+
},
|
|
1496
|
+
{
|
|
1497
|
+
key: "qqNumber",
|
|
1498
|
+
label: "QQ\u53F7",
|
|
1499
|
+
mode: "merge",
|
|
1500
|
+
valueProcessing: "first",
|
|
1501
|
+
showGroupHeader: false,
|
|
1502
|
+
mergeCells: true
|
|
1503
|
+
},
|
|
1504
|
+
{
|
|
1505
|
+
key: "userTotalPrice",
|
|
1506
|
+
label: "\u7528\u6237\u603B\u4EF7",
|
|
1507
|
+
mode: "merge",
|
|
1508
|
+
valueProcessing: "first",
|
|
1509
|
+
showGroupHeader: false,
|
|
1510
|
+
mergeCells: true
|
|
1511
|
+
}
|
|
1512
|
+
],
|
|
1513
|
+
preserveOrder: true,
|
|
1514
|
+
nullValueHandling: "separate"
|
|
1515
|
+
},
|
|
1516
|
+
fileNameTemplate: "\u9884\u8BA2\u4FE1\u606F_{date}",
|
|
1517
|
+
includeHeader: true,
|
|
1518
|
+
delimiter: ",",
|
|
1519
|
+
encoding: "utf-8",
|
|
1520
|
+
addBOM: true,
|
|
1521
|
+
maxRows: void 0,
|
|
1522
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
1523
|
+
updatedAt: /* @__PURE__ */ new Date(),
|
|
1524
|
+
moduleId: "showmasterpiece",
|
|
1525
|
+
businessId: "bookings"
|
|
1526
|
+
};
|
|
730
1527
|
|
|
731
1528
|
// src/showmasterpiece/ui/web/components/CollectionOrderManagerV2.tsx
|
|
732
1529
|
function CollectionOrderManagerV2({
|
|
@@ -1107,11 +1904,11 @@ var CartPage = ({ userId, onClose }) => {
|
|
|
1107
1904
|
cart,
|
|
1108
1905
|
loading,
|
|
1109
1906
|
error,
|
|
1110
|
-
updateCartItem,
|
|
1111
|
-
removeFromCart,
|
|
1112
|
-
batchBooking,
|
|
1907
|
+
updateCartItem: updateCartItem2,
|
|
1908
|
+
removeFromCart: removeFromCart2,
|
|
1909
|
+
batchBooking: batchBooking2,
|
|
1113
1910
|
refreshCart,
|
|
1114
|
-
clearCart
|
|
1911
|
+
clearCart: clearCart2
|
|
1115
1912
|
} = useCartContext();
|
|
1116
1913
|
const {
|
|
1117
1914
|
configs: popupConfigs,
|
|
@@ -1195,7 +1992,7 @@ var CartPage = ({ userId, onClose }) => {
|
|
|
1195
1992
|
const performCheckout = async () => {
|
|
1196
1993
|
setIsCheckingOut(true);
|
|
1197
1994
|
try {
|
|
1198
|
-
const result = await
|
|
1995
|
+
const result = await batchBooking2({
|
|
1199
1996
|
qqNumber: formData.qqNumber,
|
|
1200
1997
|
phoneNumber: formData.phoneNumber,
|
|
1201
1998
|
items: cart.items,
|
|
@@ -1269,7 +2066,7 @@ var CartPage = ({ userId, onClose }) => {
|
|
|
1269
2066
|
) : /* @__PURE__ */ React29.createElement("div", { className: "w-16 h-16 sm:w-16 sm:h-16 bg-gray-100 rounded-md flex-shrink-0 flex items-center justify-center text-gray-400 text-xs" }, "\u6682\u65E0\u56FE\u7247"), /* @__PURE__ */ React29.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React29.createElement("h3", { className: "font-semibold text-gray-900 text-sm sm:text-base line-clamp-2" }, item.collection.title), /* @__PURE__ */ React29.createElement("p", { className: "text-xs sm:text-sm text-gray-600" }, "\u7F16\u53F7\uFF1A", item.collection.number), /* @__PURE__ */ React29.createElement("p", { className: "text-xs sm:text-sm text-gray-600" }, "\u4EF7\u683C\uFF1A", item.collection.price ? `\xA5${item.collection.price}` : "\u4EF7\u683C\u5F85\u5B9A")), /* @__PURE__ */ React29.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-2 sm:gap-4 w-full sm:w-auto" }, /* @__PURE__ */ React29.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React29.createElement(
|
|
1270
2067
|
"button",
|
|
1271
2068
|
{
|
|
1272
|
-
onClick: () =>
|
|
2069
|
+
onClick: () => updateCartItem2({ collectionId: item.collectionId, quantity: item.quantity - 1 }),
|
|
1273
2070
|
disabled: loading,
|
|
1274
2071
|
className: "w-10 h-10 sm:w-8 sm:h-8 rounded-full border border-gray-300 flex items-center justify-center hover:bg-gray-50 disabled:opacity-50"
|
|
1275
2072
|
},
|
|
@@ -1277,7 +2074,7 @@ var CartPage = ({ userId, onClose }) => {
|
|
|
1277
2074
|
), /* @__PURE__ */ React29.createElement("span", { className: "w-16 sm:w-12 text-center font-medium text-sm sm:text-base" }, item.quantity), /* @__PURE__ */ React29.createElement(
|
|
1278
2075
|
"button",
|
|
1279
2076
|
{
|
|
1280
|
-
onClick: () =>
|
|
2077
|
+
onClick: () => updateCartItem2({ collectionId: item.collectionId, quantity: item.quantity + 1 }),
|
|
1281
2078
|
disabled: loading,
|
|
1282
2079
|
className: "w-10 h-10 sm:w-8 sm:h-8 rounded-full border border-gray-300 flex items-center justify-center hover:bg-gray-50 disabled:opacity-50"
|
|
1283
2080
|
},
|
|
@@ -1285,7 +2082,7 @@ var CartPage = ({ userId, onClose }) => {
|
|
|
1285
2082
|
)), /* @__PURE__ */ React29.createElement("div", { className: "text-center sm:text-right" }, /* @__PURE__ */ React29.createElement("p", { className: "font-semibold text-gray-900 text-sm sm:text-base" }, "\xA5", (item.collection.price || 0) * item.quantity))), /* @__PURE__ */ React29.createElement(
|
|
1286
2083
|
"button",
|
|
1287
2084
|
{
|
|
1288
|
-
onClick: () =>
|
|
2085
|
+
onClick: () => removeFromCart2({ collectionId: item.collectionId }),
|
|
1289
2086
|
disabled: loading,
|
|
1290
2087
|
className: "text-red-500 hover:text-red-700 disabled:opacity-50 p-2 sm:p-1"
|
|
1291
2088
|
},
|
|
@@ -1355,7 +2152,7 @@ var CartPage = ({ userId, onClose }) => {
|
|
|
1355
2152
|
"button",
|
|
1356
2153
|
{
|
|
1357
2154
|
type: "button",
|
|
1358
|
-
onClick:
|
|
2155
|
+
onClick: clearCart2,
|
|
1359
2156
|
disabled: loading || isCheckingOut,
|
|
1360
2157
|
className: "flex-1 bg-gray-200 text-gray-800 py-3 sm:py-2 px-4 rounded-lg hover:bg-gray-300 transition-colors disabled:opacity-50 text-base"
|
|
1361
2158
|
},
|
|
@@ -5102,14 +5899,14 @@ function ConfigPageContent() {
|
|
|
5102
5899
|
tags,
|
|
5103
5900
|
loading,
|
|
5104
5901
|
error,
|
|
5105
|
-
updateConfig,
|
|
5106
|
-
resetConfig,
|
|
5107
|
-
createCollection,
|
|
5108
|
-
updateCollection,
|
|
5109
|
-
deleteCollection,
|
|
5110
|
-
addArtworkToCollection,
|
|
5111
|
-
updateArtwork,
|
|
5112
|
-
deleteArtwork,
|
|
5902
|
+
updateConfig: updateConfig2,
|
|
5903
|
+
resetConfig: resetConfig2,
|
|
5904
|
+
createCollection: createCollection2,
|
|
5905
|
+
updateCollection: updateCollection2,
|
|
5906
|
+
deleteCollection: deleteCollection2,
|
|
5907
|
+
addArtworkToCollection: addArtworkToCollection2,
|
|
5908
|
+
updateArtwork: updateArtwork2,
|
|
5909
|
+
deleteArtwork: deleteArtwork2,
|
|
5113
5910
|
moveArtworkUp: moveArtworkUp2,
|
|
5114
5911
|
moveArtworkDown: moveArtworkDown2,
|
|
5115
5912
|
updateArtworkOrder: updateArtworkOrder2,
|
|
@@ -5138,9 +5935,9 @@ function ConfigPageContent() {
|
|
|
5138
5935
|
refreshData: refreshBookingData,
|
|
5139
5936
|
searchBookings,
|
|
5140
5937
|
clearSearch,
|
|
5141
|
-
updateBookingStatus,
|
|
5142
|
-
deleteBooking,
|
|
5143
|
-
exportBookings
|
|
5938
|
+
updateBookingStatus: updateBookingStatus3,
|
|
5939
|
+
deleteBooking: deleteBooking3,
|
|
5940
|
+
exportBookings: exportBookings2
|
|
5144
5941
|
} = useBookingAdmin();
|
|
5145
5942
|
const [useUniversalService, setUseUniversalService] = useState(false);
|
|
5146
5943
|
const [storageModeDisplay, setStorageModeDisplay] = useState("\u68C0\u67E5\u4E2D...");
|
|
@@ -5356,7 +6153,7 @@ function ConfigPageContent() {
|
|
|
5356
6153
|
}, [activeTab, showArtworkOrder, showArtworkForm, editingArtwork]);
|
|
5357
6154
|
const handleSaveConfig = async () => {
|
|
5358
6155
|
try {
|
|
5359
|
-
await
|
|
6156
|
+
await updateConfig2(configForm);
|
|
5360
6157
|
alert("\u914D\u7F6E\u4FDD\u5B58\u6210\u529F\uFF01");
|
|
5361
6158
|
} catch (err) {
|
|
5362
6159
|
alert("\u914D\u7F6E\u4FDD\u5B58\u5931\u8D25\uFF01");
|
|
@@ -5365,7 +6162,7 @@ function ConfigPageContent() {
|
|
|
5365
6162
|
const handleResetConfig = async () => {
|
|
5366
6163
|
if (confirm("\u786E\u5B9A\u8981\u91CD\u7F6E\u4E3A\u9ED8\u8BA4\u914D\u7F6E\u5417\uFF1F")) {
|
|
5367
6164
|
try {
|
|
5368
|
-
await
|
|
6165
|
+
await resetConfig2();
|
|
5369
6166
|
alert("\u914D\u7F6E\u91CD\u7F6E\u6210\u529F\uFF01");
|
|
5370
6167
|
} catch (err) {
|
|
5371
6168
|
alert("\u914D\u7F6E\u91CD\u7F6E\u5931\u8D25\uFF01");
|
|
@@ -5375,10 +6172,10 @@ function ConfigPageContent() {
|
|
|
5375
6172
|
const handleSaveCollection = async () => {
|
|
5376
6173
|
try {
|
|
5377
6174
|
if (editingCollection) {
|
|
5378
|
-
await
|
|
6175
|
+
await updateCollection2(editingCollection, collectionForm);
|
|
5379
6176
|
setEditingCollection(null);
|
|
5380
6177
|
} else {
|
|
5381
|
-
await
|
|
6178
|
+
await createCollection2(collectionForm);
|
|
5382
6179
|
}
|
|
5383
6180
|
setShowCollectionForm(false);
|
|
5384
6181
|
setCollectionForm({
|
|
@@ -5413,14 +6210,14 @@ function ConfigPageContent() {
|
|
|
5413
6210
|
collectionId: editingArtwork.collectionId,
|
|
5414
6211
|
artworkId: editingArtwork.artworkId
|
|
5415
6212
|
});
|
|
5416
|
-
await
|
|
6213
|
+
await updateArtwork2(editingArtwork.collectionId, editingArtwork.artworkId, artworkForm);
|
|
5417
6214
|
setEditingArtwork(null);
|
|
5418
6215
|
console.log("\u2705 [\u914D\u7F6E\u9875\u9762] \u5546\u54C1\u8BE6\u60C5\u56FE\u66F4\u65B0\u5B8C\u6210");
|
|
5419
6216
|
} else {
|
|
5420
6217
|
console.log("\u2795 [\u914D\u7F6E\u9875\u9762] \u6267\u884C\u5546\u54C1\u8BE6\u60C5\u56FE\u521B\u5EFA...", {
|
|
5421
6218
|
collectionId: selectedCollection
|
|
5422
6219
|
});
|
|
5423
|
-
await
|
|
6220
|
+
await addArtworkToCollection2(selectedCollection, artworkForm);
|
|
5424
6221
|
console.log("\u2705 [\u914D\u7F6E\u9875\u9762] \u5546\u54C1\u8BE6\u60C5\u56FE\u521B\u5EFA\u5B8C\u6210");
|
|
5425
6222
|
}
|
|
5426
6223
|
console.log("\u{1F9F9} [\u914D\u7F6E\u9875\u9762] \u6E05\u7406\u8868\u5355\u72B6\u6001...");
|
|
@@ -5725,7 +6522,7 @@ function ConfigPageContent() {
|
|
|
5725
6522
|
{
|
|
5726
6523
|
onClick: async () => {
|
|
5727
6524
|
if (confirm("\u786E\u5B9A\u8981\u5220\u9664\u8FD9\u4E2A\u5546\u54C1\u5417\uFF1F")) {
|
|
5728
|
-
await
|
|
6525
|
+
await deleteCollection2(collection.id);
|
|
5729
6526
|
}
|
|
5730
6527
|
},
|
|
5731
6528
|
className: "flex items-center gap-1 px-3 py-1 bg-red-100 text-red-700 border border-red-200 rounded text-sm hover:bg-red-200 transition-colors"
|
|
@@ -5799,7 +6596,7 @@ function ConfigPageContent() {
|
|
|
5799
6596
|
{
|
|
5800
6597
|
onClick: () => {
|
|
5801
6598
|
if (confirm("\u786E\u5B9A\u8981\u5220\u9664\u8FD9\u4E2A\u5546\u54C1\u8BE6\u60C5\u56FE\u5417\uFF1F")) {
|
|
5802
|
-
|
|
6599
|
+
deleteArtwork2(selectedCollection, artwork.id);
|
|
5803
6600
|
}
|
|
5804
6601
|
},
|
|
5805
6602
|
className: "flex items-center gap-1 px-3 py-1 bg-red-100 text-red-700 border border-red-200 rounded text-sm hover:bg-red-200 transition-colors"
|
|
@@ -5826,9 +6623,9 @@ function ConfigPageContent() {
|
|
|
5826
6623
|
onRefresh: handleBookingRefresh,
|
|
5827
6624
|
onSearch: handleBookingSearch,
|
|
5828
6625
|
onClearSearch: handleBookingClearSearch,
|
|
5829
|
-
onUpdateStatus:
|
|
5830
|
-
onDeleteBooking:
|
|
5831
|
-
onExportBookings:
|
|
6626
|
+
onUpdateStatus: updateBookingStatus3,
|
|
6627
|
+
onDeleteBooking: deleteBooking3,
|
|
6628
|
+
onExportBookings: exportBookings2
|
|
5832
6629
|
}
|
|
5833
6630
|
)), /* @__PURE__ */ React29.createElement(TabsContent, { value: "popup", className: "space-y-6" }, /* @__PURE__ */ React29.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React29.createElement("h2", { className: "text-2xl font-bold text-slate-800 mb-2" }, "\u5F39\u7A97\u914D\u7F6E"), /* @__PURE__ */ React29.createElement("p", { className: "text-slate-600" }, "\u7BA1\u7406\u8D2D\u7269\u8F66\u63D0\u4EA4\u65F6\u7684\u9650\u65F6\u63D0\u9192\u5F39\u7A97\u8BBE\u7F6E")), /* @__PURE__ */ React29.createElement(PopupConfigManagement, null)), /* @__PURE__ */ React29.createElement(TabsContent, { value: "system", className: "space-y-6" }, /* @__PURE__ */ React29.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React29.createElement("h2", { className: "text-2xl font-bold text-slate-800 mb-2" }, "\u7CFB\u7EDF\u914D\u7F6E"), /* @__PURE__ */ React29.createElement("p", { className: "text-slate-600" }, "\u7BA1\u7406ShowMasterPieces\u6A21\u5757\u7684\u7CFB\u7EDF\u7EA7\u914D\u7F6E\u9879\uFF0C\u4E3A\u6A21\u5757\u72EC\u7ACB\u5316\u505A\u51C6\u5907"), /* @__PURE__ */ React29.createElement("div", { className: "mt-4 p-4 bg-blue-50 border border-blue-200 rounded-lg" }, /* @__PURE__ */ React29.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React29.createElement(Cog, { className: "text-blue-600 mt-0.5", size: 20 }), /* @__PURE__ */ React29.createElement("div", null, /* @__PURE__ */ React29.createElement("h3", { className: "font-semibold text-blue-900" }, "\u914D\u7F6E\u8BF4\u660E"), /* @__PURE__ */ React29.createElement("p", { className: "text-blue-800 text-sm mt-1" }, "\u8FD9\u91CC\u7684\u914D\u7F6E\u9879\u5C06\u7528\u4E8EShowMasterPieces\u6A21\u5757\u7684\u72EC\u7ACB\u8FD0\u884C\u3002 \u65B0\u521B\u5EFA\u7684\u914D\u7F6E\u9879\u4F1A\u81EA\u52A8\u6DFB\u52A0", /* @__PURE__ */ React29.createElement("code", { className: "bg-blue-100 px-1 rounded" }, "SHOWMASTER_"), "\u524D\u7F00\u3002"), /* @__PURE__ */ React29.createElement("p", { className: "text-blue-700 text-xs mt-2" }, "\u{1F4A1} \u63D0\u793A\uFF1A\u8FD9\u4E9B\u914D\u7F6E\u72EC\u7ACB\u4E8E\u5168\u5C40\u914D\u7F6E\uFF0C\u4FBF\u4E8E\u6A21\u5757\u6253\u5305\u548C\u90E8\u7F72\u3002"))))), /* @__PURE__ */ React29.createElement(SystemConfigManager, null)))), showCollectionForm && /* @__PURE__ */ React29.createElement("div", { className: "fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50" }, /* @__PURE__ */ React29.createElement("div", { className: "bg-white rounded-lg shadow-xl max-w-2xl w-full max-h-[90vh] overflow-hidden" }, /* @__PURE__ */ React29.createElement("div", { className: "flex items-center justify-between p-6 border-b border-slate-200" }, /* @__PURE__ */ React29.createElement("h3", { className: "text-xl font-semibold text-slate-800" }, editingCollection ? "\u7F16\u8F91\u5546\u54C1" : "\u6DFB\u52A0\u5546\u54C1"), /* @__PURE__ */ React29.createElement(
|
|
5834
6631
|
"button",
|
|
@@ -6102,6 +6899,6 @@ function UserHistoryPage() {
|
|
|
6102
6899
|
))));
|
|
6103
6900
|
}
|
|
6104
6901
|
|
|
6105
|
-
export { AddConfigItemDialog, AddToCartButton, ArtworkOrderManagerV2, ArtworkViewer, BookingAdminPanel, BookingModal, BookingPage, CartButton, CartHistoryPage, CartModal, CartPage, CollectionCard, CollectionList, CollectionOrderManagerV2, ConfigPage, DeadlinePopup, DeadlinePopupManager, DeleteConfirmDialog, MobileAlbumViewer, PopupConfigManagement, ShowMasterPieces, SystemConfigManager, ThumbnailSidebar, UniversalImageUpload, UserHistoryPage };
|
|
6106
|
-
//# sourceMappingURL=chunk-
|
|
6107
|
-
//# sourceMappingURL=chunk-
|
|
6902
|
+
export { AddConfigItemDialog, AddToCartButton, ArtworkOrderManagerV2, ArtworkViewer, BOOKING_EXPORT_FIELDS, BookingAdminPanel, BookingModal, BookingPage, CartButton, CartHistoryPage, CartModal, CartPage, CollectionCard, CollectionList, CollectionOrderManagerV2, ConfigPage, DEFAULT_BOOKING_EXPORT_CONFIG, DeadlinePopup, DeadlinePopupManager, DeleteConfirmDialog, MobileAlbumViewer, PopupConfigManagement, ShowMasterPieces, SystemConfigManager, ThumbnailSidebar, UniversalImageUpload, UserHistoryPage, clearConfigCache, getArtworkImageUrl, getShowMasterpieceFileConfig, getStorageModeDisplayName, refreshFileServiceConfig, shouldUseUniversalFileService, uploadArtworkImage };
|
|
6903
|
+
//# sourceMappingURL=chunk-WGD2NBVR.mjs.map
|
|
6904
|
+
//# sourceMappingURL=chunk-WGD2NBVR.mjs.map
|