| 
					
				 | 
			
			
				@@ -0,0 +1,389 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// CloudObject.ts 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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 = `http://dev.fmode.cn:1337/parse/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(`http://dev.fmode.cn:1337/parse/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) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.queryParams["where"][key] = value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  async get(id: string) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const url = `http://dev.fmode.cn:1337/parse/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(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // return json || {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const exists = json?.results?.[0] || null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (exists) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          let existsObject = this.dataToObj(exists) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          return existsObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  async find() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let url = `http://dev.fmode.cn:1337/parse/classes/${this.className}?`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let queryStr = `` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      Object.keys(this.queryParams).forEach(key=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          let paramStr = JSON.stringify(this.queryParams[key]); // 作用是将对象转换为JSON字符串 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if(key=="include"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              paramStr = this.queryParams[key]?.join(",") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if(key=="where"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              paramStr = JSON.stringify(this.queryParams[key]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if(queryStr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              url += `${key}=${paramStr}`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              url += `&${key}=${paramStr}`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      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 = `http://dev.fmode.cn:1337/parse/classes/${this.className}?`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (Object.keys(this.queryParams["where"]).length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const whereStr = JSON.stringify(this.queryParams["where"]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          url += `where=${whereStr}`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let list = json?.results || [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let objList = list.map((item:any)=>this.dataToObj(item)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return objList || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  dataToObj(exists:any):CloudObject{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let existsObject = new CloudObject(this.className); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      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(`http://dev.fmode.cn:1337/parse/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(`http://dev.fmode.cn:1337/parse/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(`http://dev.fmode.cn:1337/parse/logout`, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          headers: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              "x-parse-application-id": "dev", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              "x-parse-session-token": this.sessionToken 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          method: "POST" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const result = await response?.json(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (result?.error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          console.error(result?.error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 清除用户信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      localStorage.removeItem("NCloud/dev/User") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.id = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.sessionToken = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.data = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 注册 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  async signUp(username: string, password: string, additionalData: Record<string, any> = {}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const userData = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          username, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          password, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ...additionalData // 合并额外的用户数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const response = await fetch(`http://dev.fmode.cn:1337/parse/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 = `http://dev.fmode.cn:1337/parse/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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |