获取分支

创建bug、关闭bug等操作时,可以快速获取分支

目前為 2021-04-19 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         获取分支
// @namespace    ydr
// @version      1.6
// @description  创建bug、关闭bug等操作时,可以快速获取分支
// @author       ydr
// @match        https://jira.meitu.com/*
// @grant        GM_xmlhttpRequest
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==

(function () {
    'use strict';
    const refreshTime = 1000;
    //评论上的获取分支按钮
    function addCommentButton() {
        // 生成获取分支对应输入框和按钮UI
        let $branch_span_comment = $('<span style="font-size: 15px" id="comment_text">输入id:</span>');
        let $input_text = $('<input type="text" class="text medium-field" id="build_id_comment">');
        let $branch_btn_comment = $('<input class="aui-button" type="button" value="获取分支" id="get_branch_btn_comment">');
        let $last_branch_btn_comment = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn_comment">');
        // 判断UI是否存在,存在则不再重复添加,不存在则添加到对应的位置
        var is_btn = document.getElementById('get_branch_btn_comment');
        if (!is_btn) {
            let $b = $branch_span_comment.append($input_text).append($branch_btn_comment).append($last_branch_btn_comment);
            $("#addcomment").after($b);
        }
    }
    //关闭jira时获取分支按钮
    function closeJiraButton() {
        // 因点击关闭按钮时,弹窗元素需要等一会才弹出,所以这边设置了展示延迟
        setTimeout(function () {
            // 生成获取分支对应输入框和按钮UI
            let $branch_span_close = $('<span id="close_text">输入id:</span>');
            let $input_text_close = $('<input type="text" class="text medium-field" id="build_id_close">');
            let $branch_btn_close = $('<input type="button" class="aui-button" value="获取分支" id="get_branch_btn_close">');
            let $last_branch_btn_close = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn_close">');
            // 判断UI是否存在,存在则不再重复添加,不存在则添加到对应的位置
            var is_close_btn = document.getElementById('get_branch_btn_close');
            if (!is_close_btn) {
                let $c = $branch_span_close.append($input_text_close).append($branch_btn_close).append($last_branch_btn_close);
                $("#issue-workflow-transition-submit").before($c);
            }
        }, 800);
    }
    //重新打开jira时获取分支按钮
    function openJiraButton() {
        // 因点击重新打开按钮时,弹窗元素需要等一会才弹出,所以这边设置了展示延迟
        setTimeout(function () {
            // 生成获取分支对应输入框和按钮UI
            let $branch_span_open = $('<span id="open_text">输入id:</span>');
            let $input_text_open = $('<input type="text" class="text medium-field" id="build_id_open">');
            let $branch_btn_open = $('<input type="button" class="aui-button" value="获取分支" id="get_branch_btn_open"><br>');
            let $last_branch_btn_open = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn_open">');
            // 判断UI是否存在,存在则不再重复添加,不存在则添加到对应的位置
            var is_open_btn = document.getElementById('get_branch_btn_open');
            if (!is_open_btn) {
                let $d = $branch_span_open.append($input_text_open).append($branch_btn_open).append($last_branch_btn_open);
                $("#issue-workflow-transition-submit").before($d);
            }
        }, 800);

    }

    // 创建jira时添加获取分支按钮
    function addJiraButton() {
        //创建jira上的获取分支按钮
        let $branch_span = $('<label for="customfield_10304"></label>');
        let $branch_btn = $('<input type="button" class="aui-button" value="获取分支" id="get_branch_btn">');
        let $a = $branch_span.append($branch_btn);
        $("#customfield_10303").after($a);
        let $last_branch_btn = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn">');
        $branch_span.append($last_branch_btn);
    }
    // 通过平台+build id,获取对应分支,并回调到对应的函数上
    function get_branch(platform, build_id) {
        var url = '';
        var branch = '';
        var result = '';
        // 获取iOS的分支
        if (platform == 'iOS') {
            url = 'http://ios.meitu-int.com/ipa/mtxx/build/' + build_id;
            GM_xmlhttpRequest({
                url: url,
                method: 'GET',
                onload: function (res) {
                    if (res.status === 200) {
                        // 通过正则匹配获取分支名称
                        var r = '<span class="branch-name">(.*?)</span>';
                        try {
                            branch = res.responseText.match(r)[1];
                        } catch {
                            branch = '未找到该包的分支';
                        }
                    } else {
                        branch = '未找到该包的分支';
                    }
                        // 拼接成分支+build id并返回
                        result = branch + '#' + build_id;
                        GM_setValue('branch_value', result);
                },
                onerror: function (err) {
                    result = '接口请求失败,建议重新关闭开启脚本再试试';
                    GM_setValue('branch_value', result);
                }
            });
        }
        // 获取Android的分支
        else if (platform == 'Android') {
            url = 'https://api-ci-data.meitu.city/ci/api/v2/build?project=Meitu&build=' + build_id;
            GM_xmlhttpRequest({
                url: url,
                method: 'GET',
                onload: function (res) {
                    if (res.status === 200) {
                        // 通过正则匹配获取分支名称
                        var r = '"branch":"(.*?)"';
                        try {
                            branch = res.responseText.match(r)[1];
                        } catch {
                            branch = '未找到该包的分支';
                        }
                    } else {
                        console.log("失败");
                        branch = '未找到该包的分支';
                    }
                    // 拼接成分支+build id并返回
                        // 拼接成分支+build id并返回
                        result = branch + '#' + build_id;
                        console.log("Android分支:" + result);
                        GM_setValue('branch_value', result);
                        console.log("Android分支设置成功:" + result);
                },
                onerror: function (err) {
                    result = '接口请求失败,建议重新关闭开启脚本再试试';
                    GM_setValue('branch_value', result);
                    console.log("error");
                    console.log(err);
                }
            });
        }
    }

    // 当是jira域名时,才触发后续的操作,如果不是则不触发
    if (location.href.indexOf('jira.meitu.com') > 0) {
        clearInterval(refreshTime);
        setInterval(function () {
            // 因创建jira入口较多,这边默认1s刷新一次
            addJiraButton();
            // 点击【备注】时,进行插入UI相关操作
            $('#footer-comment-button').unbind("click").click(function () {
                addJiraButton(); // 评论位置加入icon
                var is_btn_comment = document.getElementById('get_branch_btn_comment');
                // 如果不存在则添加
                if (!is_btn_comment) {
                    addCommentButton();
                }
            });
            // 点击【重新打开】时,进行插入UI相关操作
            $('#action_id_31').unbind("click").click(function () {
                var is_btn_open = document.getElementById('get_branch_btn_open');
                // 如果不存在则添加
                if (!is_btn_open) {
                    openJiraButton();
                }
            });
            // 点击【关闭问题】时,进行插入UI相关操作
            $('#action_id_21').unbind("click").click(function () {
                console.log("点击几次");
                //var is_btn_close_dialog =  document.getElementById('workflow-transition-21-dialog');
                var is_btn_close = document.getElementById('get_branch_btn_close');
                // 如果不存在则添加
                if (!is_btn_close) {
                    closeJiraButton();
                }
            });
            // 评论入口,点击【获取分支】按钮时,获取对应分支
            $("#get_branch_btn_comment").unbind("click").click(function () {
                // 获取bug页面的平台
                var platform_text = $("#customfield_10301-val").text();
                var platform = platform_text.replace(/(^\s*)|(\s*$)/g, ""); //去掉前后的空格
                var input_build_id_comment = document.getElementById("build_id_comment").value;
                var build_id_comment = input_build_id_comment.replace(/[^0-9]/ig, ""); //只提取里面的数字,避免有空格之类的
                var comment_text = $("#addcomment textarea[id='comment']").val();
                // 判断平台是否正确,如果不正确则弹出弹窗提示,正确则调用回调函数
                if (platform == '' || platform == "Web") {
                    get_branch('Android', build_id_comment);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_comment);
                        var default_value = '未找到该包的分支'+"#"+build_id_comment
                        if (value == default_value){
                            get_branch('iOS', build_id_comment);
                        }
                        setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_comment);
                        document.getElementById('build_id_comment').value = value;
                        var result_value = comment_text + value;
                        $("#addcomment textarea[id='comment']").val(result_value);
                        var e = document.getElementById("build_id_comment"); //对象是contents
                        e.select(); //选择对象 (全选)
                        document.execCommand("Copy"); //执行浏览器复制命令
                        $("#addcomment textarea[id='comment']").focus();
                    }, 500);
                    }, 500);
                }
                else {
                    get_branch(platform, build_id_comment);
                    // 支持直接复制分支操作,设置了300ms的延迟,避免接口没来得及返回
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_comment);
                        document.getElementById('build_id_comment').value = value;
                        var result_value = comment_text + value;
                        $("#addcomment textarea[id='comment']").val(result_value);
                        var e = document.getElementById("build_id_comment"); //对象是contents
                        e.select(); //选择对象 (全选)
                        document.execCommand("Copy"); //执行浏览器复制命令
                        $("#addcomment textarea[id='comment']").focus();
                    }, 500);
                }
            })
            // 重新打开jira入口,点击【获取分支】按钮时,获取对应分支
            $("#get_branch_btn_open").unbind("click").click(function () {
                // 获取bug页面的平台
                var platform_text = $("#customfield_10301-val").text();
                var platform = platform_text.replace(/(^\s*)|(\s*$)/g, ""); //去掉前后的空格
                var open_text = $("#workflow-transition-31-dialog textarea[id='comment']").val();
                console.log("jira上的平台:", platform);
                var input_build_id_open = document.getElementById("build_id_open").value;
                var build_id_open = input_build_id_open.replace(/[^0-9]/ig, ""); //只提取里面的数字,避免有空格之类的
                // 判断平台是否正确,如果不正确则弹出弹窗提示,正确则调用回调函数
                if (platform == '' || platform == "Web") {
                    get_branch('Android', build_id_open);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_open);
                        var default_value = '未找到该包的分支'+"#"+build_id_open
                        if (value == default_value){
                            get_branch('iOS', build_id_open);
                        }
                        setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_open);
                        document.getElementById('build_id_open').value = value;
                        var result_value = open_text + value;
                        $("#workflow-transition-31-dialog textarea[id='comment']").val(result_value);
                        var e = document.getElementById("build_id_open"); //对象是contents
                        e.select(); //选择对象 (全选)
                        document.execCommand("Copy"); //执行浏览器复制命令
                        $("#workflow-transition-31-dialog textarea[id='comment']").focus();
                    }, 500);
                    }, 500);
                } else {
                    get_branch(platform, build_id_open);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_open);
                        console.log("重新打开jira获取的分支:",value);
                        document.getElementById('build_id_open').value = value;
                        var result_value = open_text + value;
                        $("#workflow-transition-31-dialog textarea[id='comment']").val(result_value);
                        var e = document.getElementById("build_id_open"); //对象是contents
                        e.select(); //选择对象 (全选)
                        document.execCommand("Copy"); //执行浏览器复制命令
                        $("#workflow-transition-31-dialog textarea[id='comment']").focus();
                    }, 500);
                }
            })
            // 关闭jira入口,点击【获取分支】按钮时,获取对应分支
            $("#get_branch_btn_close").unbind("click").click(function () {
                // 获取bug页面的平台
                var platform_text = $("#customfield_10301-val").text();
                var platform = platform_text.replace(/(^\s*)|(\s*$)/g, ""); //去掉前后的空格
                console.log("jira上的平台:", platform);
                var close_text = $("#workflow-transition-21-dialog textarea[id='comment']").val();
                console.log("有获取到吗?",close_text);
                var input_build_id_close = document.getElementById("build_id_close").value;
                var build_id_close = input_build_id_close.replace(/[^0-9]/ig, ""); //只提取里面的数字,避免有空格之类的
                // 判断平台是否正确,如果不正确则弹出弹窗提示,正确则调用回调函数
                if (platform == '' || platform == "Web") {
                    get_branch('Android', build_id_close);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_close);
                        var default_value = '未找到该包的分支'+"#"+build_id_close
                        if (value == default_value){
                            get_branch('iOS', build_id_close);
                        }
                        setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_close);
                        var result_value = close_text + value;
                        console.log("关闭jira获取的总文案:",result_value);
                        $("#workflow-transition-21-dialog textarea[id='comment']").val(result_value);
                        console.log("最终有执行到这边吗?",result_value);
                        document.getElementById('build_id_close').value = value;
                        var e = document.getElementById("build_id_close"); //对象是contents
                        e.select(); //选择对象 (全选)
                        document.execCommand("Copy"); //执行浏览器复制命令
                        $("#workflow-transition-21-dialog textarea[id='comment']").focus();
                    }, 500);
                    }, 500);
                } else {
                    get_branch(platform, build_id_close);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_close);
                        var result_value = close_text + value;
                        console.log("关闭jira获取的总文案:",result_value);
                        $("#workflow-transition-21-dialog textarea[id='comment']").val(result_value);
                        console.log("最终有执行到这边吗?",result_value);
                        document.getElementById('build_id_close').value = value;
                        var e = document.getElementById("build_id_close"); //对象是contents
                        e.select(); //选择对象 (全选)
                        document.execCommand("Copy"); //执行浏览器复制命令
                        $("#workflow-transition-21-dialog textarea[id='comment']").focus();
                    }, 500);
                }
            })
            // 创建jira入口,点击【获取分支】按钮时,获取对应分支
            $("#get_branch_btn").unbind("click").click(function () {
                //获取创建bug页面上的平台
                var create_platform = '';
                var platform_list = ['Android', 'iOS', 'Web'];
                let inputs = document.getElementsByName("customfield_10301");
                // 遍历获取哪个平台是被选中的,从而根据平台去获取分支
                for (var i = 0; i < inputs.length; i++) {
                    if (inputs[i].checked) { // 选中则代表指向该平台
                        create_platform = platform_list[i]
                    }
                };
                var input_build_id = document.getElementById("customfield_10303").value;
                var build_id = input_build_id.replace(/[^0-9]/ig, ""); //只提取里面的数字,避免有空格之类的
                if (create_platform == '' || create_platform == "Web") {
                    get_branch('Android', build_id);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id);
                        var default_value = '未找到该包的分支'+"#"+build_id
                        if (value == default_value){
                            get_branch('iOS', build_id);
                        }
                        setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id);
                        console.log("创建jira获取的分支:",value);
                        // 创建jira时的分支展示的地方
                        document.getElementById('customfield_10303').value = value;
                    }, 500);
                    }, 500);
                    //alert("请选择Android或iOS平台");
                } else {
                    get_branch(create_platform, build_id);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id);
                        console.log("创建jira获取的分支:",value);
                        // 创建jira时的分支展示的地方
                        document.getElementById('customfield_10303').value = value;
                    }, 500);
                }
            });
            // 创建bug获取上次分支按钮
            $("#last_branch_btn").unbind("click").click(function () {
                var value = GM_getValue('branch_value', '未找到记录');
                document.getElementById('customfield_10303').value = value;
            });
            // 重新打开bug获取上次分支按钮
            $("#last_branch_btn_open").unbind("click").click(function () {
                var value = GM_getValue('branch_value', '未找到记录');
                var open_text = $("#workflow-transition-31-dialog textarea[id='comment']").val();
                var result_value = open_text + value;
                $("#workflow-transition-31-dialog textarea[id='comment']").val(result_value);
                $("#workflow-transition-31-dialog textarea[id='comment']").focus();
            });
            // 关闭bug获取上次分支按钮
            $("#last_branch_btn_close").unbind("click").click(function () {
                var value = GM_getValue('branch_value', '未找到记录');
                var close_text = $("#workflow-transition-21-dialog textarea[id='comment']").val();
                var result_value = close_text + value;
                $("#workflow-transition-21-dialog textarea[id='comment']").val(result_value);
                $("#workflow-transition-21-dialog textarea[id='comment']").focus();
            });
            // 评论bug获取上次分支按钮
            $("#last_branch_btn_comment").unbind("click").click(function () {
                var value = GM_getValue('branch_value', '未找到记录');
                var comment_text = $("#addcomment textarea[id='comment']").val();
                var result_value = comment_text + value;
                $("#addcomment textarea[id='comment']").val(result_value);
                $("#addcomment textarea[id='comment']").focus();
            });
        }, refreshTime);
    }


    // Your code here...
})();