摹客增强插件

增强项目导航菜单,设置默认手型工具(按h键可切换)

目前为 2021-07-18 提交的版本。查看 最新版本

// ==UserScript==
// @name         摹客增强插件
// @namespace    https://gf.qytechs.cn/zh-CN/scripts/429346
// @version      0.1.8
// @description  增强项目导航菜单,设置默认手型工具(按h键可切换)
// @author       Wilson
// @match        https://app.mockplus.cn/app/*/*
// @icon         https://app.mockplus.cn/favicon.ico
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';

    //http请求
    function httpRequest(url, fn, method, data, header) {
        method = method || "get";
        data = data || "";
        header = header || {};
        GM_xmlhttpRequest({
            method: method,
            url: url,
            data: data,
            headers: header,
            onload: function(res){
                if(res.status === 200){
                    //console.log('sucess',method,url);
                    if(fn) fn(res);
                }else{
                    console.log('error',method,url);
                    console.log(res);
                    if(fn) fn(null);
                }
            },
            onerror : function(err){
                console.log('error',method,url);
                console.log(err);
                if(fn) fn(null);
            }
        });
    }

    $('#app').on("DOMNodeInserted", function(event){
        if(!event || !event.target || !event.target.className) return;
        let className = event.target.className || "";
        //app-container app-header
        if(className == "app-container" || className == "app-header"){
            httpRequest("https://app.mockplus.cn/api/v1/user/info", function(info){
                if(info && info.response){
                    info = JSON.parse(info.response);
                    if(info.code != 0){
                        console.log('error', info.message,catUrl, info);
                        return;
                    }
                    let defaultIDocTeamID = info.payload.defaultIDocTeamID;
                    let catUrl = "https://app.mockplus.cn/api/v1/app/allAppAndAppSet/"+defaultIDocTeamID+"?needArchivedApp=true&source=all&needAppSet=true&rnd="+Math.random();
                    httpRequest(catUrl, function(res){
                        if(res && res.response){
                            //get menu list
                            let data = JSON.parse(res.response);
                            // console.log(11111,catUrl,data);
                            if(data.code != 0){
                                console.log('error', data.message,catUrl,data);
                                return;
                            }
                            data = data.payload.apps;
                            //按访问时间倒序
                            data.sort(function(x, y) { return new Date(y['accessedAt']).getTime() - new Date(x['accessedAt']).getTime()});
                            //console.log(data, 222);
                            //menu
                            setTimeout(function(){
                                //设置默认手型工具
                                let movehand = document.querySelector(".icon-_artboard_movehand");
                                movehand.click();
                                //绑定h按键
                                document.addEventListener("keypress", function(event){
                                    if (event.keyCode == 104){
                                        movehand.click();
                                    }
                                }, false);

                                //获取项目菜单
                                let appsetUrl = "https://app.mockplus.cn/team/"+defaultIDocTeamID+"/AppSet/";
                                let list = "";
                                for(let i in data){
                                    let item = data[i];
                                    let href = location.href.replace(/\/app\/.+\//i, '/app/'+item._id+'/');
                                    let subarrow = '';
                                    if(item.isAppSet) {
                                        href = appsetUrl + item._id;
                                        subarrow = `<i class="dsm-c-icon idoc_iconfont icon-_tag_rightarrow" style="font-size: 16px; width: 16px; height: 16px; color: rgb(150, 151, 152); visibility: visible;float:right;margin-right:5px;"></i>`;
                                    }
                                    let id = location.href.replace(/(.+\/app\/)(.+)(\/.+)/i, '$2');
                                    if(id == item._id) continue;
                                    let a = '<li class=""><a class="menu-item" isAppSet="'+(item.isAppSet?1:0)+'" appSetID="'+item._id+'" href="'+href+'" >'+item.name+subarrow+'</a></li>';
                                    list += a;
                                    if(i == 4){
                                        list += '<li class="split-line"></li>';
                                    }
                                }
                                let menu = `
  <div class="menu-mode-popup" style="display:none;">
   <ul class="dsm-c-drop" style="width: 225px;top: 25px;">
   `+list+`
   </ul>
  </div>
    `;
                                //arrow
                                let arrow = `
                <div class="down-arrow" style="position: relative;top: 2px;"><i class="dsm-c-icon idoc_iconfont icon-_tag_downarrow" style="font-size: 16px; width: 16px; height: 16px; visibility: visible;"></i></div>
                `;
                                //show/hide
                                let menuwrap = null;
                                function oMenuWrap(){
                                    menuwrap = menuwrap || $(".app-header .logo > .dsm-c-tooltip .menu-mode-popup");
                                    return menuwrap;
                                }
                                let lia = null;
                                function oLiA(){
                                    lia = lia || $(".app-header .logo > .dsm-c-tooltip .menu-mode-popup li a.menu-item");
                                    return lia;
                                }
                                $(".app-header .logo > .dsm-c-tooltip").append(arrow).append(menu).click(function(e){
                                    let act = location.href.replace(/(.+\/app\/)(.+)(\/)(.+)$/i, '$4');
                                    oLiA().each(function(){
                                        let me = $(this);
                                        let href = me.attr("href");
                                        href = href.replace(/(.+\/app\/.+\/)(.+)$/i, '$1'+act);
                                        if(me.attr("isAppSet")==1) href = appsetUrl + me.attr("appSetID");
                                        me.attr("href", href);
                                    });
                                    if(oMenuWrap().is(":hidden")) {
                                        oMenuWrap().show();
                                    } else {
                                        oMenuWrap().hide();
                                    }
                                    e.stopPropagation();
                                });
                                $(".app-header .logo > .dsm-c-tooltip .menu-mode-popup .dsm-c-drop").on('mouseleave', function(){
                                    oMenuWrap().hide();
                                });
                                $("body").click(function(){
                                    oMenuWrap().hide();
                                });
                            }, 200);
                        }
                    });
                }
            });
        }
    });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址