| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431 | 
							- // CloudObject.ts
 
- let serverURL = `https://dev.fmode.cn/parse`;
 
- if(location.protocol=="http:"){
 
-    serverURL = `http://dev.fmode.cn:1337/parse`;
 
- }
 
- export class CloudObject {
 
-     className: string;
 
-     id: string | null = null;
 
-     createdAt:any;
 
-     updatedAt:any;
 
-     data: Record<string, any> = {};
 
-     constructor(className: string) {
 
-         this.className = className;
 
-     }
 
-     toPointer() {
 
-         return { "__type": "Pointer", "className": this.className, "objectId": this.id };
 
-     }
 
-     set(json: Record<string, any>) {
 
-         Object.keys(json).forEach(key => {
 
-             if (["objectId", "id", "createdAt", "updatedAt"].indexOf(key) > -1) {
 
-                 return;
 
-             }
 
-             this.data[key] = json[key];
 
-         });
 
-     }
 
-     get(key: string) {
 
-         return this.data[key] || null;
 
-     }
 
-     async save() {
 
-         let method = "POST";
 
-         let url = serverURL + `/classes/${this.className}`;
 
-         // 更新
 
-         if (this.id) {
 
-             url += `/${this.id}`;
 
-             method = "PUT";
 
-         }
 
-         const body = JSON.stringify(this.data);
 
-         const response = await fetch(url, {
 
-             headers: {
 
-                 "content-type": "application/json;charset=UTF-8",
 
-                 "x-parse-application-id": "dev"
 
-             },
 
-             body: body,
 
-             method: method,
 
-             mode: "cors",
 
-             credentials: "omit"
 
-         });
 
-         const result = await response?.json();
 
-         if (result?.error) {
 
-             console.error(result?.error);
 
-         }
 
-         if (result?.objectId) {
 
-             this.id = result?.objectId;
 
-         }
 
-         return this;
 
-     }
 
-     async destroy() {
 
-         if (!this.id) return;
 
-         const response = await fetch(serverURL + `/classes/${this.className}/${this.id}`, {
 
-             headers: {
 
-                 "x-parse-application-id": "dev"
 
-             },
 
-             body: null,
 
-             method: "DELETE",
 
-             mode: "cors",
 
-             credentials: "omit"
 
-         });
 
-         const result = await response?.json();
 
-         if (result) {
 
-             this.id = null;
 
-         }
 
-         return true;
 
-     }
 
- }
 
- // CloudQuery.ts
 
- export class CloudQuery {
 
-     className: string;
 
-     queryParams: Record<string, any> = {};
 
-     constructor(className: string) {
 
-         this.className = className;
 
-     }
 
-     include(...fileds:string[]) {
 
-         this.queryParams["include"] = fileds;
 
-     }
 
-     greaterThan(key: string, value: any) {
 
-         if (!this.queryParams["where"][key]) this.queryParams["where"][key] = {};
 
-         this.queryParams["where"][key]["$gt"] = value;
 
-     }
 
-     greaterThanAndEqualTo(key: string, value: any) {
 
-         if (!this.queryParams["where"][key]) this.queryParams["where"][key] = {};
 
-         this.queryParams["where"][key]["$gte"] = value;
 
-     }
 
-     lessThan(key: string, value: any) {
 
-         if (!this.queryParams["where"][key]) this.queryParams["where"][key] = {};
 
-         this.queryParams["where"][key]["$lt"] = value;
 
-     }
 
-     lessThanAndEqualTo(key: string, value: any) {
 
-         if (!this.queryParams["where"][key]) this.queryParams["where"][key] = {};
 
-         this.queryParams["where"][key]["$lte"] = value;
 
-     }
 
-     equalTo(key: string, value: any) {
 
-         if (!this.queryParams["where"]) this.queryParams["where"] = {};
 
-         this.queryParams["where"][key] = value;
 
-     }
 
-     async get(id: string) {
 
-         const url = serverURL + `/classes/${this.className}/${id}?`;
 
-         const response = await fetch(url, {
 
-             headers: {
 
-                 "if-none-match": "W/\"1f0-ghxH2EwTk6Blz0g89ivf2adBDKY\"",
 
-                 "x-parse-application-id": "dev"
 
-             },
 
-             body: null,
 
-             method: "GET",
 
-             mode: "cors",
 
-             credentials: "omit"
 
-         });
 
-         const json = await response?.json();
 
-         if (json) {
 
-             let existsObject = this.dataToObj(json)
 
-             return existsObject;
 
-         }
 
-         return null
 
-     }
 
-     async find():Promise<Array<CloudObject>> {
 
-         let url = serverURL + `/classes/${this.className}?`;
 
-         let queryStr = ``
 
-         Object.keys(this.queryParams).forEach(key=>{
 
-             let paramStr = JSON.stringify(this.queryParams[key]);
 
-             if(key=="include"){
 
-                 paramStr = this.queryParams[key]?.join(",")
 
-             }
 
-             if(queryStr) {
 
-                 url += `${key}=${paramStr}`;
 
-             }else{
 
-                 url += `&${key}=${paramStr}`;
 
-             }
 
-         })
 
-         // if (Object.keys(this.queryParams["where"]).length) {
 
-         // }
 
-         const response = await fetch(url, {
 
-             headers: {
 
-                 "if-none-match": "W/\"1f0-ghxH2EwTk6Blz0g89ivf2adBDKY\"",
 
-                 "x-parse-application-id": "dev"
 
-             },
 
-             body: null,
 
-             method: "GET",
 
-             mode: "cors",
 
-             credentials: "omit"
 
-         });
 
-         const json = await response?.json();
 
-         let list = json?.results || []
 
-         let objList = list.map((item:any)=>this.dataToObj(item))
 
-         return objList || [];
 
-     }
 
-     async first() {
 
-         let url = serverURL + `/classes/${this.className}?`;
 
-         if (Object.keys(this.queryParams["where"]).length) {
 
-             const whereStr = JSON.stringify(this.queryParams["where"]);
 
-             url += `where=${whereStr}&limit=1`;
 
-         }
 
-         const response = await fetch(url, {
 
-             headers: {
 
-                 "if-none-match": "W/\"1f0-ghxH2EwTk6Blz0g89ivf2adBDKY\"",
 
-                 "x-parse-application-id": "dev"
 
-             },
 
-             body: null,
 
-             method: "GET",
 
-             mode: "cors",
 
-             credentials: "omit"
 
-         });
 
-         const json = await response?.json();
 
-         const exists = json?.results?.[0] || null;
 
-         if (exists) {
 
-             let existsObject = this.dataToObj(exists)
 
-             return existsObject;
 
-         }
 
-         return null
 
-     }
 
-     dataToObj(exists:any):CloudObject{
 
-         let existsObject = new CloudObject(this.className);
 
-         Object.keys(exists).forEach(key=>{
 
-           if(exists[key]?.__type =="Object"){
 
-             exists[key] = this.dataToObj(exists[key])
 
-           }
 
-         })
 
-         existsObject.set(exists);
 
-         existsObject.id = exists.objectId;
 
-         existsObject.createdAt = exists.createdAt;
 
-         existsObject.updatedAt = exists.updatedAt;
 
-         return existsObject;
 
-     }
 
- }
 
- // CloudUser.ts
 
- export class CloudUser extends CloudObject {
 
-     constructor() {
 
-         super("_User"); // 假设用户类在Parse中是"_User"
 
-         // 读取用户缓存信息
 
-         let userCacheStr = localStorage.getItem("NCloud/dev/User")
 
-         if(userCacheStr){
 
-             let userData = JSON.parse(userCacheStr)
 
-             // 设置用户信息
 
-             this.id = userData?.objectId;
 
-             this.sessionToken = userData?.sessionToken;
 
-             this.data = userData; // 保存用户数据
 
-         }
 
-     }
 
-     sessionToken:string|null = ""
 
-     /** 获取当前用户信息 */
 
-     async current() {
 
-         if (!this.sessionToken) {
 
-             console.error("用户未登录");
 
-             return null;
 
-         }
 
-         return this;
 
-         // const response = await fetch(serverURL + `/users/me`, {
 
-         //     headers: {
 
-         //         "x-parse-application-id": "dev",
 
-         //         "x-parse-session-token": this.sessionToken // 使用sessionToken进行身份验证
 
-         //     },
 
-         //     method: "GET"
 
-         // });
 
-         // const result = await response?.json();
 
-         // if (result?.error) {
 
-         //     console.error(result?.error);
 
-         //     return null;
 
-         // }
 
-         // return result;
 
-     }
 
-     /** 登录 */
 
-     async login(username: string, password: string):Promise<CloudUser|null> {
 
-         const response = await fetch(serverURL + `/login`, {
 
-             headers: {
 
-                 "x-parse-application-id": "dev",
 
-                 "Content-Type": "application/json"
 
-             },
 
-             body: JSON.stringify({ username, password }),
 
-             method: "POST"
 
-         });
 
-         const result = await response?.json();
 
-         if (result?.error) {
 
-             console.error(result?.error);
 
-             return null;
 
-         }
 
-         // 设置用户信息
 
-         this.id = result?.objectId;
 
-         this.sessionToken = result?.sessionToken;
 
-         this.data = result; // 保存用户数据
 
-         // 缓存用户信息
 
-         console.log(result)
 
-         localStorage.setItem("NCloud/dev/User",JSON.stringify(result))
 
-         return this;
 
-     }
 
-     /** 登出 */
 
-     async logout() {
 
-         if (!this.sessionToken) {
 
-             console.error("用户未登录");
 
-             return;
 
-         }
 
-         const response = await fetch(serverURL + `/logout`, {
 
-             headers: {
 
-                 "x-parse-application-id": "dev",
 
-                 "x-parse-session-token": this.sessionToken
 
-             },
 
-             method: "POST"
 
-         });
 
-         let result = await response?.json();
 
-         if (result?.error) {
 
-             console.error(result?.error);
 
-             if(result?.error=="Invalid session token"){
 
-                 this.clearUserCache()
 
-                 return true;
 
-             }
 
-             return false;
 
-         }
 
-         this.clearUserCache()
 
-         return true;
 
-     }
 
-     clearUserCache(){
 
-         // 清除用户信息
 
-         localStorage.removeItem("NCloud/dev/User")
 
-         this.id = null;
 
-         this.sessionToken = null;
 
-         this.data = {};
 
-     }
 
-     /** 注册 */
 
-     async signUp(username: string, password: string, additionalData: Record<string, any> = {}) {
 
-         const userData = {
 
-             username,
 
-             password,
 
-             ...additionalData // 合并额外的用户数据
 
-         };
 
-         const response = await fetch(serverURL + `/users`, {
 
-             headers: {
 
-                 "x-parse-application-id": "dev",
 
-                 "Content-Type": "application/json"
 
-             },
 
-             body: JSON.stringify(userData),
 
-             method: "POST"
 
-         });
 
-         const result = await response?.json();
 
-         if (result?.error) {
 
-             console.error(result?.error);
 
-             return null;
 
-         }
 
-         // 设置用户信息
 
-         // 缓存用户信息
 
-         console.log(result)
 
-         localStorage.setItem("NCloud/dev/User",JSON.stringify(result))
 
-         this.id = result?.objectId;
 
-         this.sessionToken = result?.sessionToken;
 
-         this.data = result; // 保存用户数据
 
-         return this;
 
-     }
 
-     override async save() {
 
-         let method = "POST";
 
-         let url = serverURL + `/users`;
 
-         // 更新用户信息
 
-         if (this.id) {
 
-             url += `/${this.id}`;
 
-             method = "PUT";
 
-         }
 
-         let data:any = JSON.parse(JSON.stringify(this.data))
 
-         delete data.createdAt
 
-         delete data.updatedAt
 
-         delete data.ACL
 
-         delete data.objectId
 
-         const body = JSON.stringify(data);
 
-         let headersOptions:any = {
 
-             "content-type": "application/json;charset=UTF-8",
 
-             "x-parse-application-id": "dev",
 
-             "x-parse-session-token": this.sessionToken, // 添加sessionToken以进行身份验证
 
-         }
 
-         const response = await fetch(url, {
 
-             headers: headersOptions,
 
-             body: body,
 
-             method: method,
 
-             mode: "cors",
 
-             credentials: "omit"
 
-         });
 
-         const result = await response?.json();
 
-         if (result?.error) {
 
-             console.error(result?.error);
 
-         }
 
-         if (result?.objectId) {
 
-             this.id = result?.objectId;
 
-         }
 
-         localStorage.setItem("NCloud/dev/User",JSON.stringify(this.data))
 
-         return this;
 
-     }
 
- }
 
- export class CloudApi{
 
-     async fetch(path:string,body:any,options?:{
 
-         method:string
 
-         body:any
 
-     }){
 
-         let reqOpts:any =  {
 
-             headers: {
 
-                 "x-parse-application-id": "dev",
 
-                 "Content-Type": "application/json"
 
-             },
 
-             method: options?.method || "POST",
 
-             mode: "cors",
 
-             credentials: "omit"
 
-         }
 
-         if(body||options?.body){
 
-             reqOpts.body = JSON.stringify(body || options?.body);
 
-             reqOpts.json = true;
 
-         }
 
-         let host = `https://dev.fmode.cn`
 
-         // host = `http://127.0.0.1:1337`
 
-         let url = `${host}/api/`+path
 
-         console.log(url,reqOpts)
 
-         const response = await fetch(url,reqOpts);
 
-         let json = await response.json();
 
-         return json
 
-     }
 
- }
 
 
  |