You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/public/react/src/modules/page
杨树明 6f610eebd2
调整
5 years ago
..
component update editor style 5 years ago
images 调整 5 years ago
layers 调整 5 years ago
main 调整实训tpi测试集 5 years ago
taskList update backgroundcolor 5 years ago
Header.js update tpi style 5 years ago
Index.js 调整 5 years ago
IndexWrapper.js first commit 6 years ago
LeftNav.js 调整 6 years ago
MainContent.js 修复选择题遗留问题 5 years ago
MainContentContainer.js 修复选择题遗留问题 5 years ago
VNC.css update tpi ui 5 years ago
VNCContainer.js update tpi style 5 years ago
VNCDisplay.js update tpi style 5 years ago
header.scss update tpi style 5 years ago
readme.txt 注释 5 years ago
tpiPage.css update tpi style 5 years ago
tpiPageForMobile.css tpi 本次评测耗时 文字放出来 6 years ago

readme.txt

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

state说明
    顶层state--tasks详情接口
        allowed_unlock  为true时才允许非管理员用户解锁隐藏测试集
        discusses_count 总评论数

        challenge       实训关卡信息
            exec_time       --
            modify_time     --
            path            关卡文件路径
            position        第几关
            praises_count   点赞数
            score           分数
            shixun_id
            st              0-编程题 1-选择题
            subject         关卡名称
            task_pass       过关任务
            web_route       --

        game            为每一个用户独立创建的实训关卡对应的信息
            accuracy        --
            answer_deduction--
            answer_open     --
            challenge_id    
            cost_time       通关耗时
            created_at      
            end_time        
            evaluate_count  
            final_score     
            id              
            identifier      
            modify_time     
            myshixun_id     
            open_time       
            picture_path    
            resubmit_identifier     
            retry_status    
            star            
            status          2-已通关
            test_sets_view  true-测试集已解锁
            updated_at      
            user_id      
        game_count      关卡数   
        git_url         仓库地址vnc会用到
        has_answer
        is_teacher      是否是老师      初始化被赋值到 user.is_teacher
        last_compile_output
        mirror_name     镜像名称    TPIMonaco会用到这个属性来判断当前关卡使用的什么语言 见 mirror2LanguageMap
        myshixun
            commit_id: "80cb6fc55a14bdd64a9c99913f416966238ed3de"
            created_at: "2019-07-26T09:00:31.000+08:00"
            git_url: null
            gpid: null
            id: 542543
            identifier: "ns53g8vfeo"                                有些接口会用到
            is_public: true
            modify_time: "2017-11-02T18:12:23.000+08:00"
            onclick_time: "2019-07-26T09:00:31.000+08:00"
            repo_name: "p15478209/ns53g8vfeo20190726090031"
            reset_time: "2017-10-25T09:33:03.000+08:00"
            shixun_id: 61
            status: 0
            system_tip: true                (如果修改了测试集 || 修改了代码) && system_tip为true 也就是下面代码为true时才显示更新通知弹框
                                            const showUpdateButton = (tpm_cases_modified || needUpdateScript) && myshixun.system_tip === true;
            updated_at: "2019-11-05T10:58:35.000+08:00"
            user_id: 24731
        myshixun_manager: true
        next_game: "so7ijzqe63a9"       下一关identifier
        praise_count: 120               点赞数
        prev_game: "bxg5w9uonhts"       上一关identifier
        record_onsume_time: 0.296       上一次评测耗时      初始化被赋值到newResData.record = newResData.record_onsume_time
        sets_error_count: 0             失败测试集数量
        shixun
            authentication: false
            averge_star: 4.9
            can_copy: false
            challenges_count: 4             关卡数
            closer_id: null
            code_edit_permission: false     是否允许修改代码
            code_hidden: false              是否隐藏文件目录按钮
            created_at: "2017-06-09T11:32:16.000+08:00"
            end_time: null
            excute_time: null
            exec_time: 25
            forbid_copy: false              forbid_copy ? "不允许学员复制和粘贴代码" : "允许学员复制和粘贴代码"
            fork_from: null
            git_url: "educoder/uznmbg54"
            gpid: 2448
            hidden: false
            hide_code: false                是否隐藏代码tab
            homepage_show: true
            id: 61
            identifier: "uznmbg54"
            image_text: null
            language: "Python3.6"           !!
            major_id: 635
            mirror_script_id: null
            modify_time: "2017-11-02T18:12:23.000+08:00"
            multi_webssh: false             多命令行tab
            myshixuns_count: 9655           学员数
            name: "Python表达式问题求解※"
            opening_time: null
            pod_life: 0
            publish_time: "2017-09-01T10:37:49.000+08:00"
            repo_name: "educoder/uznmbg54"
            reset_time: "2017-10-25T09:33:03.000+08:00"
            sigle_training: false
            status: 2                       shixun.status >= 2 实训已发布       shixun.status <= 1 模拟实战
            task_pass:                      task_pass ? "允许学员跳关挑战" : "不允许学员跳关挑战"
            test_set_permission: true       test_set_permission ? "允许学员通过金币解锁查看测试集内容" : "不允许学员通过金币解锁查看测试集内容"
            trainee: 1
            updated_at: "2019-10-11T08:50:59.000+08:00"
            use_scope: 0
            user_id: 3039
            users_count: 4
            visits: 69699
            webssh: 1                       是否显示命令行tab
        st              0-编程题 1-选择题
        test_sets       测试集
        test_sets_count: 1
        time_limit: 25                      game_status.json轮训次数
        tomcat_url: "http://47.96.157.89"   web类型实训可以打开展现一个测试服务用来查看评测结果  const webDisplayUrl = `${tomcat_url}:${data.port}/${path}`
        tpm_cases_modified: false           参考system_tip属性
        tpm_modified: true                  参考system_tip属性
        user                当前关卡所属用户的信息
        user_praise         当前用户是否点赞

    /MainContentContainer 里的state
        repositoryCode: '',
        open: false,			// 繁忙等级等提示用Dialog考虑重构封装到根组件
        gameBuilding: false, // 评测中标志
        codeStatus: SAVED, //  0 已修改  1 保存中  2 已保存   3 保存失败

        codeLoading: true,		 			// code加载中
        readRepoTimeout: false,	            // 加载代码轮训超时
        resetCodeDialogOpen: false,			// 重新加载初始代码弹框的bool控制
        resetPassedCodeDialogOpen: false,	// 重新加载上次通过的代码的bool控制

        isEditablePath: true                // 当前文件是否可编辑

    CodeRepositoryViewContainer 里的state
        drawerOpen: false,                  // 代码目录Drawer的bool控制 repoFilesDrawer
        loadingFirstRepoFiles: false,       // 代码目录树加载中的bool控制
        fileTreeData: "",                   // 目录树节点数据[]
        fileTreeSelectedKeys: [],           // 目录树被选择的节点的key
        codeRepositoryViewExpanded: false,  --
        tabIndex: 0,                        // tab值
        settingDrawerOpen: false            // 设置面板Drawer的bool控制
        
-------------- -------------- -------------- -------------- -------------- -------------- -------------- -------------- --------------         

TPIContextProvider
    tpi主要的state容器主要接口`/tasks/${stageId}.json`一次性获取所有tpi首屏展示所需要的信息除了代码内容。
    接口返回的内容包括
        当前用户信息、shixun、challenge、game、测试集、vnc等等

    其他接口:
    `/tasks/${game.identifier}/check_test_sets.json`
        解锁测试集
    `/tasks/${game.identifier}/plus_or_cancel_praise.json`
        给关卡点赞
    `/tasks/${game.identifier}/picture_display.json`
        如果评测通过,服务端返回了`data.picture`,会调用这个接口获取可视化的评测结果,类型包括
            qrcode  二维码  安卓实训
            image   图片    
            txt
            html
            mp3
            mp4

        代码内容通过以下接口获取:
        `/tasks/${game.identifier}/rep_content.json?path=${path}&status=${status}&retry=${isRetry ? 1 : 0}`

层次结构
TPIContextProvider
    page/Index
        Header
            TaskListContainer
                TaskList                                        左侧划出的任务列表
        MainContentContainer
            MainContent
                LeftViewContainer                               左侧区域
                    LeftView
                        ChooseAnswerView                        选择题答案   
                        CommentContainer 
                            Comments                            评论列表
                        CodeEvaluateMultiLevelAnswerUnlock      多级别解锁
                
                // 看设置是vnc or 代码 or 选择题
                CodeRepositoryViewContainer for VNC 
                    VNCContainer
                        CodeEvaluateView                        代码评测结果
                        VNCDisplay                              vnc显示
                    ActionView                                  评测按钮区
                || CodeRepositoryViewContainer                  代码显示区
                    WebSSHTimer                                 ssh倒计时
                    TPIMonaco                                   monaco编辑器
                || ChooseRepositoryView                         选择题显示区

                // 看设置,是代码 or 选择题
                CodeEvaluateView 
                || ChooseEvaluateView

                ActionView                                      评测按钮区

没用的文件 
    LeftNav.js
    AnswerListContainer.js      left 他人解答





TPI SSH
    命令行的js资源都位于这个目录/react/public/js/jsFromMiddleLayer/base64.js

    /page/main/CodeRepositoryView.js文件中open_webssh.json接口返回后会根据代码区试图大小计算ssh视图的大小同样的逻辑在js_min_all中也有
    var h = $("#games_repository_contents").height() - $("#top_repository").height() - repositoryTabHeight; 
        这里有个对应的issue https://www.trustie.net/issues/25279
        这里是要判断特殊的屏幕(公司dell笔记本可重现),针对这些情况处理,加高命令行的高度
    ps js_min_all中搜`$("#games_repository_contents").height()`可以找到相关代码


VNCDisplay
    使用的github上的代码 https://github.com/novnc/noVNC/


tpi拖拽改变视图大小代码
js_min_all.js中搜索     doc.live('mousemove touchmove',function(e){