future 1 rok pred
rodič
commit
bfd17bd9e0

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1290 - 137
assets/resources/ui/feedback.prefab


+ 2 - 0
assets/script/config.ts

@@ -17,6 +17,8 @@ export class config  {
         user_set_region: "/snake/user/set_region",
         user_set_default_car_id: "/snake/user/set_default_car_id",
         unlock_number_status: "/snake/user/unlock_number_status",
+        feedback: "/snake/user/feedback",
+        up_feedback_img: "/tool/file/up_feedback_img",   
     }
 
 

+ 1 - 0
assets/script/data.ts

@@ -65,6 +65,7 @@ export class rankData{
     public score:number = 0 //最大积分
     public number:number = 0 //排名 0 没有分数和排名
     public ranking_desc:string = "" //	排名描述
+    public user_id:number = 0 // 用户id
     public avatarUrl:string = "" //	头像
     public nickName:string = "" //昵称
     public license_code:string = "" //车牌号

+ 79 - 4
assets/script/http.ts

@@ -1,15 +1,16 @@
-import { _decorator, Component, Node, sys } from 'cc';
+import { _decorator, Component, Node, sys, url } from 'cc';
 import { config } from './config';
 import { tools } from './tools';
 import { userDataManager } from './manager/userDataManager';
 const { ccclass, property } = _decorator;
 @ccclass('http')
 export class http {
+    public static domain = "https://zcapi.xwrun.com"
     public static static_domain =  "https://zcapi.xwrun.com"
     public static statistics_domain =  "https://zcapi.xwrun.com"
     public static post(url,opt, call_back,method:string='POST') {
         var xml = new XMLHttpRequest()
-        let request_url = http.static_domain+url
+        let request_url = http.domain+url
         xml.open(method,  request_url)
         xml.setRequestHeader('Content-Type', 'application/json');
         if(userDataManager.user_data!=null){
@@ -83,9 +84,83 @@ export class http {
         };
     }
 
-   
+    public static uploadFile(url, filePath, progress_call_back, call_back) {
+        if(sys.platform == sys.Platform.BYTEDANCE_MINI_GAME) {
+            let task = tt.uploadFile({
+                url: http.domain + url,
+                filePath: filePath,
+                name: "file",
+                success(res) {
+                    if (res.statusCode === 200) {
+                        // console.log(`uploadFile调用成功 ${res.data}`);
+                        call_back(null,res.data)
+                    } else {
+                        call_back(res.statusCode,null)
+                    }
+                },
+                fail(err) {
+                    console.log(`uploadFile调用失败`,err);
+                    call_back(err,null)
+                },
+            });
+              
+            task.onProgressUpdate((res) => {
+                // console.log('res.progress=',res.progress)
+                if(progress_call_back) {
+                    progress_call_back(res.progress)
+                }
+            }); 
+
+            return
+        }
+
+        var xml = new XMLHttpRequest()
+        let request_url = http.domain+url
+        console.log('request_url=',request_url)
+        xml.open('POST', request_url, true)
+        xml.setRequestHeader('Content-Type', 'multipart/form-data');
+        if(userDataManager.user_data!=null){
+            xml.setRequestHeader('token',userDataManager.user_data.token);
+        }
+
+        //创建一个FormData对象来处理文件上传
+        let formData = new FormData()
+        formData.append("file", filePath)
+        //发送请求
+        xml.send(formData)
 
-   
+        // 监听上传进度事件
+        xml.upload.onprogress = function(event) {
+            if (event.lengthComputable) {
+                var percentComplete = (event.loaded / event.total) * 100;
+                console.log(Math.round(percentComplete) + "% uploaded");
+            }
+        };
+
+        // 监听请求完成事件
+        xml.onload = function() {
+            if (xml.status === 200) {
+                console.log("File uploaded successfully");
+            } else {
+                console.log("Upload failed with status: " + xml.status);
+            }
+        }
+
+        // 监听错误事件
+        xml.onerror = function() {
+            console.log("Network error occurred");
+        };
+
+        // Special event
+        xml.onreadystatechange = function () {
+            console.log('xml.readyState=',xml.readyState,'       xml.status=',xml.status)
+            if (xml.readyState === 4 && xml.status >= 200) {
+                call_back(null, xml.responseText);
+            } else if (xml.status === 404) {
+                call_back('404 page not found!', null);
+            }
+        }
+    }
 
 }
 

+ 75 - 70
assets/script/sdkUtil.ts

@@ -39,24 +39,6 @@ export class SdkUtil {
         })
     }
 
-    // 苹果手机是否有灵动岛
-    public static iPhoneIsLingdongdao():boolean {
-        if(sys.platform==sys.Platform.BYTEDANCE_MINI_GAME) {
-            if(SdkUtil.tt_systemInfo !=null) {
-                if(SdkUtil.tt_systemInfo.brand=='Apple'||SdkUtil.tt_systemInfo.brand=='devtools')
-                if(SdkUtil.tt_systemInfo.model=='iPhone 14'||
-                   SdkUtil.tt_systemInfo.model=='iPhone 14 Pro'||
-                   SdkUtil.tt_systemInfo.model=='iPhone 14 Pro Max'||
-                   SdkUtil.tt_systemInfo.model=='iPhone 15'||
-                   SdkUtil.tt_systemInfo.model=='iPhone 15 Pro'||
-                   SdkUtil.tt_systemInfo.model=='iPhone 15 Pro Max') {
-                    return true
-                }
-            }
-        }
-        return false
-    }
-
     // 自定义事件统计
     public static customEventStatistics(eventType: string, objParams?: any) {
         eventType = eventType.toString();
@@ -76,6 +58,81 @@ export class SdkUtil {
             window.cocosAnalytics.CACustomEvent.onStarted(eventType, objParams);
         }
     }
+    
+    // 登录
+    public static login(call){
+        if(sys.platform == sys.Platform.BYTEDANCE_MINI_GAME) {
+            tt.login({
+                force: true,
+                success(res) {
+                  console.log(`login 调用成功${res.code} ${res.anonymousCode}`);
+                  call({"code":res.code,"anonymousCode":res.anonymousCode})
+                },
+                fail(res) {
+                  console.log(`login 调用失败`);
+                  call(null)
+                },
+              });
+              
+        }else{
+            call(null)
+        }
+    }
+
+    // 获取用户信息
+    public static getUserInfo(call){
+        if(sys.platform == sys.Platform.BYTEDANCE_MINI_GAME) {
+            tt.getUserInfo({
+                // withCredentials: true,
+                // withRealNameAuthenticationInfo: true,
+                success(res) {
+                  console.log(`getUserInfo 调用成功`, res.userInfo);
+                  call(res.userInfo)
+                },
+                fail(res) {
+                  console.log(`getUserInfo 调用失败`, res.errMsg);
+                },
+              });
+        }else{
+            call(null)
+        }
+    }
+
+    // 震动
+    public static vibrateShort(){
+        if(sys.platform == sys.Platform.BYTEDANCE_MINI_GAME) {
+            tt.vibrateShort({
+                success(res) {
+                //   console.log(`${res}`);
+                },
+                fail(res) {
+                //   console.log(`vibrateShort调用失败`);
+                },
+              });
+        }
+          
+    }
+
+    // 选择系统相册
+    public static choosSystemImage(call_back) {
+        if(sys.platform == sys.Platform.BYTEDANCE_MINI_GAME) {
+            tt.chooseImage({
+                sourceType: ["album"],
+                count:1,
+                success:(res)=>{
+                    console.log('chooseImage调用成功=',res)
+                    if(res.tempFilePaths.length>0) {
+                        call_back(res.tempFilePaths[0])
+                    }
+                },
+                fail(err) {
+                    console.log(`chooseImage调用失败=`,err);
+                },
+            })
+        } else {
+            // call_back()
+        }
+    }
 
     // 检测显示添加桌面
     public static checkIsShowAddDesktop():boolean {
@@ -374,56 +431,4 @@ export class SdkUtil {
         // })
     }
 
-    //------------------------------  三方分别处理相关  ------------------------------//
-    public static login(call){
-        if(sys.platform == sys.Platform.BYTEDANCE_MINI_GAME) {
-            tt.login({
-                force: true,
-                success(res) {
-                  console.log(`login 调用成功${res.code} ${res.anonymousCode}`);
-                  call({"code":res.code,"anonymousCode":res.anonymousCode})
-                },
-                fail(res) {
-                  console.log(`login 调用失败`);
-                  call(null)
-                },
-              });
-              
-        }else{
-            call(null)
-        }
-    }
-
-    public static getUserInfo(call){
-        if(sys.platform == sys.Platform.BYTEDANCE_MINI_GAME) {
-            tt.getUserInfo({
-                // withCredentials: true,
-                // withRealNameAuthenticationInfo: true,
-                success(res) {
-                  console.log(`getUserInfo 调用成功`, res.userInfo);
-                  call(res.userInfo)
-                },
-                fail(res) {
-                  console.log(`getUserInfo 调用失败`, res.errMsg);
-                },
-              });
-        }else{
-            call(null)
-        }
-    }
-
-    public static vibrateShort(){
-        if(sys.platform == sys.Platform.BYTEDANCE_MINI_GAME) {
-            tt.vibrateShort({
-                success(res) {
-                //   console.log(`${res}`);
-                },
-                fail(res) {
-                //   console.log(`vibrateShort调用失败`);
-                },
-              });
-        }
-          
-    }
-
 }

+ 20 - 2
assets/script/ui/feedback/feedback.ts

@@ -1,6 +1,10 @@
 import { _decorator, Component, Node, Sprite, SpriteFrame } from 'cc';
 import { base_ui } from '../../fw/base_ui';
 import { feedback_selected } from './feedback_selected';
+import { feedback_submit } from './feedback_submit';
+import { http } from '../../http';
+import { config } from '../../config';
+import { uiManager } from '../../manager/uiManager';
 const { ccclass, property } = _decorator;
 
 @ccclass('feedback')
@@ -29,15 +33,29 @@ export class feedback extends base_ui {
         })
 
         this.selected_node.getComponent(feedback_selected).initView((r)=>{
+            this.img_title.getComponent(Sprite).spriteFrame = r.sf
             this.selected_node.active = false
             this.submit_bottom.active = true
             this.submit_node.active = true
-            this.img_title.getComponent(Sprite).spriteFrame = r.sf
+            this.submit_node.getComponent(feedback_submit).initView(r)
         })
     }
 
     onClickSubmit() {
-        console.log('提交 提交')
+        let data = this.submit_node.getComponent(feedback_submit).getData()
+        // console.log('submit data=',data)
+        if(data!=null) {
+            uiManager.Instance().showLoading()
+            http.post(config.API.feedback, data, (err,d)=>{
+                uiManager.Instance().hideLoading()
+                if(!err){
+                    let nd = JSON.parse(d)
+                    if(nd.code === config.status.SUCCESS){
+                        this.close()
+                    }   
+                }
+            })
+        }
     }
 
 }

+ 54 - 4
assets/script/ui/feedback/feedback_submit.ts

@@ -1,14 +1,64 @@
-import { _decorator, Component, Node } from 'cc';
+import { _decorator, Component, EditBox, Label, Node, Sprite, SpriteFrame } from 'cc';
+import { base_ui } from '../../fw/base_ui';
+import { SdkUtil } from '../../sdkUtil';
+import { http } from '../../http';
+import { config } from '../../config';
+import { tools } from '../../tools';
 const { ccclass, property } = _decorator;
 
 @ccclass('feedback_submit')
-export class feedback_submit extends Component {
+export class feedback_submit extends base_ui {
+    @property(Node) lab_title:Node = null
+    @property(Node) btn_add_img:Node = null
+    @property(EditBox) editbox_content:EditBox = null
+    @property(EditBox) editbox_contact:EditBox = null
+
+    private m_data = null
+    private img_url:string = ''
     start() {
+        this.onButtonListen(this.btn_add_img, ()=>{
+            this.onClickAddImg()
+        })
+        this.editbox_content.node.on(EditBox.EventType.EDITING_DID_ENDED, ()=>{
+            console.log('this.editbox_content=',this.editbox_content.string)
+        })
+        this.editbox_contact.node.on(EditBox.EventType.EDITING_DID_ENDED, ()=>{
+            console.log('this.editbox_contact=',this.editbox_contact.string)
+        })
+    }
+
+    initView(data) {
+        this.m_data = data
+        this.lab_title.getComponent(Label).string = '--  ' + data.title +'内容'
+    }
 
+    private onClickAddImg() {
+        SdkUtil.choosSystemImage((filePath)=>{
+            http.uploadFile(config.API.up_feedback_img,filePath,null,(err,d)=>{
+                if(!err){
+                    let data = JSON.parse(d)
+                    if(data.code===config.status.SUCCESS){
+                        // console.log('data=',data.content)
+                        this.img_url = data.content.surl
+                        tools.loadRemoteImg(this.img_url, (res)=>{
+                            this.btn_add_img.getComponent(Sprite).spriteFrame = res.sf
+                        })
+                    }
+                }
+            })           
+        })
     }
 
-    update(deltaTime: number) {
-        
+    public getData() {
+        if(this.editbox_content.string.length<=0) {
+            return null
+        }
+        let data =  {'title': this.m_data.title, 
+                     'describe':this.editbox_content.string,
+                     'img_url':this.img_url,
+                     'mobile':this.editbox_contact.string,
+                    }
+        return data
     }
 }
 

+ 7 - 1
assets/script/ui/rank/rank_list_item.ts

@@ -6,6 +6,8 @@ import { uiManager } from '../../manager/uiManager';
 import { config } from '../../config';
 import { base_ui } from '../../fw/base_ui';
 import { user_info_view } from '../user_info_view';
+import { userDataManager } from '../../manager/userDataManager';
+import { GameManager } from '../../GameManager';
 const { ccclass, property } = _decorator;
 
 @ccclass('rank_list_item')
@@ -33,7 +35,11 @@ export class rank_list_item extends base_ui {
         })
         this.lab_nickname.getComponent(Label).string = data.nickName
         this.lab_score.getComponent(Label).string = data.score + ' 分'
-        this.img_car.getComponent(Sprite).spriteFrame = imageCacheManager.getRankCarImageById(data.car_id)
+        if(data.user_id==userDataManager.user_data.id) {
+            this.img_car.getComponent(Sprite).spriteFrame = GameManager.getUserDefaultRankCarSf()
+        } else {
+            this.img_car.getComponent(Sprite).spriteFrame = imageCacheManager.getRankCarImageById(data.car_id)
+        }
     }
 }
 

+ 7 - 1
assets/script/ui/rank/rank_list_top.ts

@@ -6,6 +6,8 @@ import { base_ui } from '../../fw/base_ui';
 import { uiManager } from '../../manager/uiManager';
 import { config } from '../../config';
 import { user_info_view } from '../user_info_view';
+import { userDataManager } from '../../manager/userDataManager';
+import { GameManager } from '../../GameManager';
 const { ccclass, property } = _decorator;
 
 @ccclass('rank_list_top')
@@ -108,7 +110,11 @@ export class rank_list_top extends base_ui {
     }
 
     private setImgCar(node:Node, data:rankData) {
-        node.getComponent(Sprite).spriteFrame = imageCacheManager.getRankCarImageById(data.car_id)
+        if(data.user_id==userDataManager.user_data.id) {
+            node.getComponent(Sprite).spriteFrame = GameManager.getUserDefaultRankCarSf()
+        } else {
+            node.getComponent(Sprite).spriteFrame = imageCacheManager.getRankCarImageById(data.car_id)
+        }
     }
 
     private onClickRankGotoUserInfo(data:rankData) {

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov