Greasy Fork

Greasy Fork is available in English.

快速查包

快速跳转至指定包或指定分支

当前为 2024-01-16 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         快速查包
// @namespace    fsh
// @version      4.4
// @description  快速跳转至指定包或指定分支
// @author       xxtest
// @match        *://ci.meitu.city/*
// @match        *://ios.meitu-int.com/ipa/*
// @match        *://jira.meitu.com/*
// @grant        GM_xmlhttpRequest
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @require      https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js
// @homepage     http://greasyfork.icu/zh-CN/scripts/454567-%E5%BF%AB%E9%80%9F%E6%9F%A5%E5%8C%85
// @license MIT
// @note 4.4 最近版本日期格式变化,进行适配。屏蔽starii创建djalog无效ui
// @note 4.3 优化跳转至指定build的逻辑
// @note 4.2 添加homepage地址
// @note 4.1 获取分支功能支持Starii
// @note 4.0 一键选择平台、日期功能支持Starii
// @note 3.9 搜索分支功能,支持starii项目
// @note 3.8 starii域名变更,重新适配
// @note 3.7 支持Android跳转starii
// @note 3.6 优化获取未发布版本的方式,避免获取不到新版本
// @note 3.5 更新创建bug Dialog获取分支按钮添加的判断条件
// @note 3.4 支持在备注输入框获取上次分支
// @note 3.3 支持在备注输入框获取分支
// @note 3.2 优化填入分支流程,支持搜索框回车代替点击
// @note 3.1 修复跳转分支时,bug平台获取错误的问题
// @note 3.0 修复跳转分支时,bug平台获取错误的问题
// @note 2.9 获取分支新增异常判断
// @note 2.8 整合代码
// @note 2.7 测试脚本自动升级
// @note 2.6 完善jira页面跳转按钮逻辑
// @note 2.5 修复img节点高度被限制的问题
// @note 2.4 granary支持全项目
// @note 2.3 Bug模版支持一键切换web,删除UpdateUrl和DownloadUrl
// @note 2.2 Cicity支持全项目搜索和跳转
// @note 2.1 添加UpdateUrl和DownloadUrl配置
// @note 2.0 修复无法正确获取版本的问题(参数类型由str转int),填写完毕后主动失去焦点
// ==/UserScript==

(function() {
    'use strict';
    // 设置刷新时间
    const refreshTime = 1000;
    // 添加CSS
    $('head').append($(`
  <style>
  .search{
    position: relative;
    width: 220px;
  }
  .search input{
    height: 42px;
    width: 220px;
    border-radius: 42px;
    border: 2px solid #324B4E;
    background: #F9F0DA;
    transition: .3s linear;
    float: left;
    text-indent: 10px;
  }

  .search input:focus::placeholder{
    opacity: 0;
  }
  .search button{
    height: 42px;
    border-radius: 42px;
    border-right: 1px solid #324B4E;
    border-left: 0px;
    background: #F9F0DA;
    right: 0;
    position: absolute;
  }

  .btn_find_build{
    width: 42px;
    text-align: center;
  }

  .search_span{
    /*border: 1px dashed #000;*/
    cursor: pointer;
    height: 16px;
    margin: 0px 10px;
    padding: 3px;
    border-radius: 25px;
  }

  .to_new_build{
    height: 30px;
    width: 120px;
    border-radius: 42px;
    border: 1px solid #324B4E;
    background: #fff;
    transition: .3s linear;
    color: #544d4d;
    margin: 0px 10px;
    font-size:14px;
  }

  .myimg{
    height:16px;
  }

  </style>`));
    // 当是ci域名时,才触发后续的操作,如果不是则不触发
    // CI
    // CI
    // CI
    if (location.href.indexOf('ci.meitu.city') > 0) {
        clearInterval(refreshTime);
        setInterval(function () {
            let input_find_build = document.getElementById('input_find_build');
            let to_new_build = document.getElementById('to_new_build');
            
            
            // 不存在输入框和跳转按钮则添加
            if (!input_find_build) {
                addFindButtonCicity();

                // 当用户按下键盘上的某个键时触发
                document.addEventListener("keyup", function(event) {
                    // 如果按下的是回车键
                    if (event.keyCode === 13) {
                        // 触发按钮的点击事件
                        $('#btn_find_build').click();
                    }
                });

                // 跳转按钮点击
                $('#btn_find_build').unbind("click").click(function () {
                    // 获取当前url, 用正则表达式获取项目名
                    let localUrl = window.location.href
                    let project = ''
                    let reg = /(?<=build\/)\w*/
                    project = localUrl.match(reg)[0]

                    if(project != null){
                        let baseUrl = 'https://ci.meitu.city/build/' + project + '/'
                        // 获取用户输入
                        let input_build_content = document.getElementById("input_find_build").value.trim()
                        if(input_build_content===""){
                            return false;
                        }
                        let targetUrl = ""
                        // 如果输入的是纯数字,视为build id
                        if(/^\d+$/.test(input_build_content)){
                            targetUrl = baseUrl + 'number/' + input_build_content
                        }else{// 否则按输入的是分支处理
                            input_build_content = input_build_content.replaceAll("/","%2F")
                            targetUrl = baseUrl + 'branch/' + input_build_content
                        }
                        // 跳转到指定页面
                        window.location.href=targetUrl
                    }
                    else{
                        input_find_build.value = "未能正确获取项目名称"
                    }
                });
        
            }
            
            // 不存在跳转至最新按钮则添加
            if(!to_new_build){
                addToNewCicity();
                $('.to_new_build').unbind("click").click(function(){
                    // 判断当前所处的页面, 用正则表达式获取项目名
                    let localUrl = window.location.href
                    let project = ''
                    let reg = /(?<=build\/)\w*/
                    project = localUrl.match(reg)[0]
                    // 获取所要跳转的分支名
                    let full_build_name = this.parentNode.children[0].innerText.trim()
                    let targetUrl = ""
                    let baseUrl = 'https://ci.meitu.city/build/' + project + '/branch/'
                    full_build_name = full_build_name.replaceAll("/","%2F")
                    targetUrl = baseUrl + full_build_name
                    // 跳转到指定页面
                    window.location.href=targetUrl
                });
            }
        }, refreshTime);
    }

    var project_android = {"美图秀秀":"Meitu","美颜相机":"BeautyCam",
                                "美拍":"Meipai","美妆相机":"MakeupPlus",
                                "潮自拍":"SelfieCity","设计室":"HaiBaoPai",
                                "wink":"WINK","BeautyPlus":"BeautyPlus",
                                "AirBrush":"AirBrush","eve":"eve",
                                "chic":"chic","美图宜肤V":"eveking",
                                "EveNetAssist":"evenetassist","VChat":"vchatbeauty",
                                "vcut":"vcut","Vmake":"beautyplusvideo",
                                "PixEngine":"pixengine","智肤APP":"skinar",
                                "美图秀秀Starii":"starii"
                            }
        
    var project_ios = {"美图秀秀":"mtxx","美颜相机":"myxj",
                            "BeautyPlus":"beautyplus","wink":"wink",
                            "潮自拍":"czp","设计室":"hbp",
                            "wink":"WINK","BeautyPlus":"BeautyPlus",
                            "美图秀秀Starii":"starii"
                        }

    // CI页面,添加输入框和跳转按钮
    function addFindButtonCicity() {
        let span = $('<span class="search"></span>')
        let input_find_build = $('<input type="text" class="text" id="input_find_build" placeholder="  输入Build id或分支名">');
        let btn_find_build = $('<button type="submit" class="btn_find_build" id="btn_find_build">🔍</button>');

        span.append(input_find_build);
        span.append(btn_find_build);
        $(".project-label__name").after(span);
    }

    // CI页面,在分支名后方添加跳转至最新按钮
    function addToNewCicity(){
        let to_new_build = $('<button type="submit" class="to_new_build" id="to_new_build">跳转至最新➔</button>');
        $(".message-card__subtitle").after(to_new_build);
    }

    // 当是granary域名时,才触发后续的操作,如果不是则不触发
    // Granary
    // Granary
    // Granary
    if (location.href.indexOf('ios.meitu-int.com') > 0) {
        clearInterval(refreshTime);
        setInterval(function () {
            let input_find_build = document.getElementById('input_find_build');
            let to_new_build = document.getElementById('to_new_build');

            // 项目名
            var project = ''
            var reg = /(?<=ipa\/)\w*/
            // 当前页面Url, 用正则表达式获取项目名
            var localUrl = window.location.href
            project = localUrl.match(reg)[0]

            // 不存在输入框和跳转按钮则添加
            if (!input_find_build) {
                addFindButtonGranary();

                // 当用户按下键盘上的某个键时触发
                document.addEventListener("keyup", function(event) {
                    // 如果按下的是回车键
                    if (event.keyCode === 13) {
                        // 触发按钮的点击事件
                        $('#btn_find_build').click();
                    }
                });

                // 按钮绑定点击事件
                $('#btn_find_build').unbind("click").click(function () {
                    if(project != null){
                        // 获取用户输入
                        let input_build_content = document.getElementById("input_find_build").value.trim()
                        if(input_build_content===""){
                            return false;
                        }
                        let targetUrl = ""
                        // 如果输入的是纯数字,视为build id
                        if(/^\d+$/.test(input_build_content)){
                            let baseUrl = 'http://ios.meitu-int.com/ipa/'+ project + '/build/'
                            targetUrl = baseUrl + input_build_content
                        }else{// 否则按分支处理
                            let baseUrl = 'http://ios.meitu-int.com/ipa/'+ project + '/'
                            input_build_content = input_build_content.replaceAll("/","%2F")
                            targetUrl = baseUrl + input_build_content
                        }
                        // 跳转到指定页面
                        window.location.href=targetUrl
                    }
                    else{
                        input_build_content.value = "未能正确获取项目名称"
                    }
                });
            }

            //不存在跳转至最新按钮则添加
            if(!to_new_build){
                addToNewGranary();
                // 跳转按钮点击
                $('.to_new_build').unbind("click").click(function(event){
                    // 分支名,去掉首尾的字符串,“/”转为“%2F”
                    let parentNode = event.target.parentNode;
                    let branchName = parentNode.querySelector("span.branch-name").innerText.trim()
                    branchName = branchName.substring(1, branchName.length - 1).replaceAll("/","%2F");
                    
                    // 跳转链接
                    let baseUrl = 'http://ios.meitu-int.com/ipa/'+ project + '/'
                    let targetUrl = baseUrl + branchName

                    // 跳转
                    window.location.href=targetUrl
                });
            }
            
        }, refreshTime);
    }

    // granary页面,添加输入框和跳转按钮
    function addFindButtonGranary() {
        let span = $('<span class="search"></span>')
        let input_find_build = $('<input type="text" class="text" id="input_find_build" placeholder=" 输入Build id或分支名">');
        let btn_find_build = $('<button type="submit" class="btn_find_build" id="btn_find_build">🔍</button>');

        span.append(input_find_build);
        span.append(btn_find_build);
        $("#myTab").append(span);
    }

    // granary页面,在分支名后方添加跳转至最新按钮
    function addToNewGranary(){
        let to_new_build = $('<button type="submit" class="to_new_build" id="to_new_build">跳转至最新➔</button>');
        $("div#list-home span.branch-name").after(to_new_build);
    }

    // 当是jira域名时,才触发后续的操作,如果不是则不触发
    // Jira
    // Jira
    // Jira
    if (location.href.indexOf('jira.meitu.com') > 0) {
        clearInterval(refreshTime);
        // 定时器循环操作:页面元素添加等
        setInterval(function () {
            var search_span = document.getElementById('search_span_create');
            // 因为切至iOS按钮和切至Android按钮一般都会成对出现,所以这里只获取iOS按钮,用于判断按钮是否已存在
            var change_side_button = document.getElementById('change_side_ios');
            var create_input = document.getElementById('customfield_10303');
            var create_issue_dialog = document.getElementById('create-issue-dialog');
            var close_bug_dialog = document.getElementById('workflow-transition-21-dialog');
            var reopen_bug_dialog = document.getElementById('workflow-transition-31-dialog');
            var comment_bug_toolbar = document.getElementById('wiki-edit-wikiEdit0');
        
            // 如果不存在bug跳转按钮则添加一个,需要判断url是bug页面而不是bug列表页,否则会报错
            if (!search_span) {
                addButtonJira();
                // 存储bug平台
                GM_setValue('platform', $('#customfield_10301-val').text().trim())
            }

            // 在创建问题dialog添加获取分支按钮组
            if (create_issue_dialog){
                // 加个计时避免按钮显示不出来
                setTimeout(function () {
                    // Bug模版按钮
                    if(change_side_button == undefined || change_side_button.length == 0){
                        addChangeSideButton();
                    }
                    // 获取分支按钮
                    if(create_input !== undefined || create_input.length !== 0){
                        var branch_span = $('<label for="customfield_10304"></label>');
                        $("#customfield_10303").after(branch_span)
                        add_get_branch_btn($(branch_span));
                    }
                    // 隐藏starii项目不必要的UI
                    hideUI();
                },500)
            }

            // 在关闭问题dialog 或 重新打开dialog 添加获取分支按钮组
            if (close_bug_dialog || reopen_bug_dialog) {
                var pre_text_button = $('<input class="aui-button" id="close-text" type="button" value="上次填写"></input>');
                var pre_text_btn = document.getElementById('close-text');
                var branch_span_close = $('<span id="close_text">输入id:</span>');
                var input_text_close = $('<input type="text" class="text medium-field" id="build_id_close">');
                setTimeout(function () {
                    if (!pre_text_btn) {
                        $(".jira-dialog-content .form-footer").append(branch_span_close).append(input_text_close);// buildid输入框
                        add_get_branch_btn($(".jira-dialog-content").find(".form-footer"));//获取分支按钮
                        $(".jira-dialog-content .form-footer").append(pre_text_button);//上次填写按钮
                    }
                }, 500);
            }

            // 在备注窗口添加获取分支按钮组
            if (comment_bug_toolbar) {
                var pre_text_span = $('<span id="pre_text">输入id:</span>');
                var pre_text_span_element = document.getElementById('pre_text');
                var input_text = $('<input type="text" class="text medium-field" id="input_text">');
                setTimeout(function () {
                    if (!pre_text_span_element && !close_bug_dialog) {
                        var branch_span = $('<span></span>');
                        branch_span.append(pre_text_span).append(input_text);
                        add_get_branch_btn($(branch_span));
                        $(".security-level .current-level").after(branch_span);
                    }
                }, 500);
            }


            // 获取分支按钮点击事件
            $('#get_branch_btn, #last_branch_btn').unbind("click").click(function(event) {

                setTimeout(function () {
                    // 当前节点的父节点
                    var parentNode = event.target.parentNode;

                    // 如果父节点没有Id属性,则往上遍历
                    while (parentNode != null) {
                        if (parentNode.hasAttribute("id")) {
                            // 找到第一个有id属性的父节点
                            var parentWithId = parentNode;
                            break;
                        }
                        parentNode = parentNode.parentNode;
                    }
                    //  第一个拥有Id的父节点的id
                    let parentId = parentWithId.getAttribute("id");

                    // 获取当前节点id
                    var selfId = event.target.id

                    // 往网页中填入分支名
                    set_branch(selfId, parentId);
                },500);
            });

            function hideUI(){
                // 获取具有id为project-options的div元素
                var projectOptionsDiv = document.getElementById('project-options');
                if(projectOptionsDiv){
                    // 获取data-suggestions属性的值
                    var dataSuggestionsValue = projectOptionsDiv.getAttribute('data-suggestions');
                    var jsonObject = JSON.parse(dataSuggestionsValue);
                    // 项目名
                    var project = jsonObject[0]['items'][0].label.trim();
                    var project_name = project.replace(/\s*\([^)]*\)\s*/, '').trim();
                }else{
                    var project_name = $('#project-name-val').text().trim(); // 项目名
                }
                if(project_name === "美图秀秀Starii"){
                    hideParentNodeById("customfield_10422");
                    hideParentNodeById("customfield_10202");
                    hideParentNodeById("customfield_10305");
                    hideParentNodeById("customfield_11100");
                    hideParentNodeById("customfield_11101");
                    hideParentNodeById("customfield_11102");
                    hideParentNodeById("customfield_10304");
                    hideParentNodeById("fixVersions");
                    hideParentNodeById("reporter");
                    hideParentNodeById("customfield_13601");
                }
            }
            
            // 隐藏指定ID节点的父节点
            function hideParentNodeById(childNodeId){
                // 隐藏bug优先级
                var element = document.getElementById(childNodeId);
                // 检查是否找到了元素
                if (element) {
                    // 获取父节点并将其样式的display属性设置为"none"
                    element.parentNode.style.display = "none";
                    console.log(element.parentNode)
                }
            }

            // 往网页中填入分支名称
            function set_branch(selfId, parentId) {
                if (selfId === "get_branch_btn") {
                    switch (parentId) {
                        // 创建Bug窗口填写分支
                        case "create-issue-dialog":
                            // bug平台节点和buildId节点
                            var $platform = $('input:radio[name="customfield_10301"]:checked');
                            var $buildId = $('#customfield_10303');

                            // 通过buildId节点(input)定位到bug平台节点(label)
                            var id = $platform.attr("id")
                            var label = document.querySelector("label[for='" + id + "']");
                            
                            // bug平台和buildId
                            try {
                                var platform = label.textContent;
                            } catch (error) {
                                GM_setValue('branch_value', "#请先选择Bug平台");
                                fillInBranch('#customfield_10303');
                                return;
                            }
                            var buildId = $buildId.val();
                            if (buildId === undefined || buildId === ''||buildId === null) {
                                GM_setValue('branch_value', "#请先填写Build号");
                                fillInBranch('#customfield_10303');
                                return;
                            }

                            // 获取分支名
                            get_branch(platform, buildId);
                            // 填入分支
                            fillInBranch('#customfield_10303');
                            break;

                        // 关闭||重新打开窗口填写分支
                        case "issue-workflow-transition":
                            var $platform = $('#customfield_10301-val');
                            var $buildId = $('#build_id_close');
                        
                            // bug平台和buildId
                            var platform = $platform.text().trim();
                            var buildId = $buildId.val();
                        
                            // 获取分支名
                            get_branch(platform, buildId);
                        
                            // 填入分支
                            fillInBranchTextarea('div#comment-wiki-edit textarea#comment');

                            // 聚焦到输入框
                            sleep(500).then(() => {
                                $('#comment-wiki-edit textarea').focus();
                            })
                            break;
                        // 备注
                        case "issue-comment-add":
                            var $platform = $('#customfield_10301-val');
                            var $buildId = $('#input_text');
                        
                            // bug平台和buildId
                            var platform = $platform.text().trim();
                            var buildId = $buildId.val();
                        
                            // 获取分支名
                            get_branch(platform, buildId);
                        
                            // 填入分支
                            fillInBranchTextarea('div#comment-wiki-edit textarea#comment');

                            // 聚焦到输入框
                            sleep(500).then(() => {
                                $('#comment-wiki-edit textarea').focus();
                            })
                            break;
                        
                        default:
                            
                    }
                  } else if (selfId === "last_branch_btn") {
                    switch (parentId) {
                        case "create-issue-dialog":
                            // 填入分支
                            fillInBranch('#customfield_10303');
                            break;
                    
                        case "issue-workflow-transition":
                            // 填入分支
                            fillInBranchTextarea('div#comment-wiki-edit textarea#comment');
                            break;
                            // 备注 
                        case "issue-comment-add":
                            fillInBranchTextarea('div#comment-wiki-edit textarea#comment');
                            break;
                        default:
                            
                    }
                  }
            }

            // 跳转到创建分支
            $('#search_span_create').unbind("click").click(function () {
                var build_id = getBuildId("customfield_10303-val");
                // 存储bug平台
                GM_setValue('platform', $('#customfield_10301-val').text().trim())
                sleep(500).then(() => {
                    var targetUrl = getBaseUrl() + build_id;
                    window.open(targetUrl);
                })
                
            });

            // 跳转到解决分支
            $('#search_span_solved').unbind("click").click(function () {
                var build_id = getBuildId("customfield_10304-val");
                // 存储bug平台
                GM_setValue('platform', $('#customfield_10301-val').text().trim())
                sleep(500).then(() => {
                    var targetUrl = getBaseUrl() + build_id;
                    window.open(targetUrl);
                })
            });

            // 切换到iOS bug模版
            $('.ios').unbind("click").click(function () {
                changeBugPlatform('iOS')
            });

            // 切换到Androidbug模版
            $('.android').unbind("click").click(function () {
                changeBugPlatform('Android')
            });

            // 切换到Webbug模版
            $('.web').unbind("click").click(function () {
                changeBugPlatform('Web')
            });

            // 点击关闭问题按钮,记录下填写的内容
            var text_area = $('.jira-dialog-content').find('#comment')
            $('#issue-workflow-transition-submit').unbind("click").click(function(){
                if($('#issue-workflow-transition-submit').val().trim()=="关闭问题"){
                    // 存储bug平台
                    GM_setValue('closeText',text_area.val().trim())
                }
            })

            // 点击上次填写按钮,填充上次填写的内容
            $('#close-text').unbind("click").click(function(){
                text_area.val(GM_getValue('closeText'))
                text_area.focus()
            })

            // TODO:点击「创建」按钮时记录下所有的bug信息
            const $createBtn = $('#create-issue-submit');
            const $summary = $('#summary');
            const $business = $('input:radio[name="customfield_12903"]:checked');
            const $platform = $('input:radio[name="customfield_10301"]:checked');
            const $path0 = $("#selectCFLevel0 option:selected");
            const $path1 = $("#selectCFLevel1 option:selected");
            const $assignee = $("#assignee-field");
            const $severity = $("#customfield_10406 option:selected");
            const $version = $("#versions-multi-select .value-text");
            const $find = $("#customfield_10202 option:selected");
            const $frequency = $("#customfield_10204 option:selected");
            const $branch = $("#customfield_10303");
            const $step = $("#customfield_10203");
            const $tips = $("#labels-multi-select .representation .value-text");

            $createBtn.unbind('click').click(function() {
                const bugDict = {
                    'summary': $summary.val(),
                    'business': $business.attr("id"),
                    'platform': $platform.attr("id"),
                    'path0': $path0.text(),
                    'path1': $path1.text(),
                    'assignee': $assignee.val(),
                    'severity': $severity.text(),
                    'version': $version.text(),
                    'find': $find.attr("value"),
                    'frequency': $frequency.attr("value"),
                    'branch': $branch.val(),
                    'step': $step.val(),
                    'tips': $tips.text()
                };
                GM_setValue('bugDict', bugDict);
            });

            // 点击再提一个
            // 已知问题:1. 路径2无法填写
            $('#once-again').unbind('click').click(function() {
                const bugDict = GM_getValue('bugDict');
              
                function setValue(selector, value) {
                  $(selector).val(value);
                }
                function setChecked(selector, value) {
                  $(selector).attr("checked", value);
                }
                function setSelected(selector, value) {
                  $(selector).find(`option[value='${value}']`).attr("selected", true);
                }
              
                console.log(bugDict);
                setValue("#summary", bugDict.summary);
                setChecked(`input[id=${bugDict.business}]`, true);
                setChecked(`input[id=${bugDict.platform}]`, true);
                setValue("#selectCFLevel0", bugDict.path0);
                setValue("#selectCFLevel1", bugDict.path1);
                setValue("#assignee-field", bugDict.assignee);
                // $('#assignee').append($('<option>', {
                //     value: '[email protected]',
                //     text: '丘文坚',
                //     title: "undefined",
                //     selected: "selected",
                //     style: "background-image: url(\"https://jira.meitu.com/secure/useravatar?size=xsmall&ownerId=qwj%40meitu.com&avatarId=13404\");"
                // }));
                setSelected("#customfield_10406", bugDict.severity);
                setValue("#versions-textarea", bugDict.version);
                setSelected("#customfield_10202", bugDict.find);
                //setSelected("#customfield_10204", bugDict.frequency);
                setValue("#customfield_10303", bugDict.branch);
                setValue("#customfield_10203", bugDict.step);
                //setValue("#labels-textarea",bugDict.tips)
            });
              
        }, refreshTime);
        
        
    }

    // 在输入框中填入分支
    // 这里必须加上500ms的延时,否则get_branch尚未填写完成时就会调用该方法,导致填写之前存储的内容
    function fillInBranch(inputSelector) {
        setTimeout(function() {
            var inputElement = $(inputSelector);
            inputElement.val("").val(GM_getValue('branch_value'));
        }, 500);
    }
    
    // 在文本区域中填入分支
    function fillInBranchTextarea(textareaSelector) {
        setTimeout(function() {
            var textareaElement = $(textareaSelector);
            textareaElement.val("").val(GM_getValue('branch_value'));
        }, 500);
    }

    // 在指定节点后添加获取分支按钮
    function add_get_branch_btn(targetElement) {
        var branch_btn = $('<input type="button" class="aui-button" value="获取分支" id="get_branch_btn">');
        var last_branch_btn = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn">');
        targetElement.append(branch_btn).append(last_branch_btn)
    }

    // 根据build号,请求接口获取分支
    function get_branch(platform, build_id) {
        //console.log(platform+ "接收到的" + build_id)
        var url = '';
        var branch = '';
        var result = '';
        
        // 获取具有id为project-options的div元素
        var projectOptionsDiv = document.getElementById('project-options');
        if(projectOptionsDiv){
            // 获取data-suggestions属性的值
            var dataSuggestionsValue = projectOptionsDiv.getAttribute('data-suggestions');
            var jsonObject = JSON.parse(dataSuggestionsValue);
            // 项目名
            var project = jsonObject[0]['items'][0].label.trim();
            var project_name = project.replace(/\s*\([^)]*\)\s*/, '').trim();
        }else{
            var project_name = $('#project-name-val').text().trim(); // 项目名
        }

        if (platform === 'iOS') {
            url = 'http://ios.meitu-int.com/ipa/'+ project_ios[project_name] +'/build/' + build_id;
        }else if (platform === 'Android') {
            url = 'https://api-ci-data.meitu.city/ci/api/v2/build?project='+ project_android[project_name]+ '&build=' + build_id;
        }else {
            url = 'https://api-ci-data.meitu.city/ci/api/v2/build?project='+ project_android[project_name]+ '&build=' + build_id;
        }
        GM_xmlhttpRequest({
            url: url,
            method: 'GET',
            onload: function(res) {
                if (res.status === 200) {
                    var r = '';
                    if (platform === 'iOS') {
                        r = '<span class="branch-name">(.*?)</span>';
                    } else if (platform === 'Android') {
                        r = '"branch":"(.*?)"';
                    } else{
                        r = '"branch":"(.*?)"';
                    }
                    
                    branch = res.responseText.match(r)[1];
                } else {
                    branch = ''
                }
                // branch的值存在$符时,设置为空
                // branch的值为空时,设置返回结果为提示语
                branch = branch.indexOf('$') != -1 ? '' : branch;
                result = branch == '' ? "未找到该包的分支" : branch + '#' + build_id;
                GM_setValue('branch_value', result);
            },
            onerror: function(err) {
                result = '接口请求失败,建议重新关闭开启脚本再试试';
                GM_setValue('branch_value', result);
            }
            
        });
    }

    //在jira页面添加跳转到分支按钮
    function addButtonJira(){
        // 创建分支按钮添加
        var span_create = $('<span class="search_span" id="search_span_create" style=""></span>')
        // 添加图片
        var search_image = "data:image/png;base64,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"
        var img = document.createElement('img');
        img.className = "myimg"
        img.src = search_image;
        span_create.append(img);
        $("#customfield_10303-val").after(span_create);
        // 解决分支按钮添加
        var span_solved = $('<span class="search_span" id="search_span_solved"></span>')
        var img2 = document.createElement('img');
        img2.className = "myimg"
        img2.src = search_image;
        span_solved.append(img2);
        $("#customfield_10304-val").after(span_solved);
    }

    // 正则表达式获取build号
    function getBuildId(elementId) {
        var create_build_content = document.getElementById(elementId).textContent.trim();
        var reg = /#?(\d{1,5})$/;
        var build_id_array = create_build_content.match(reg);
        var build_id = '';
        if (build_id_array == null || build_id_array.length == 0) {
            console.log("未识别到build号");
        } else {
            build_id = build_id_array[0];
            var reg_num = /#?(\d{1,5})$/;
            build_id = build_id.match(reg_num)[0].replace('#', '');
        }
        return build_id;
    }
                        
    // 根据不同的项目,Bug平台拼接url
    function getBaseUrl() {
        var baseUrl = '';
        var project_name = $('#project-name-val').text().trim(); // 项目名
        var platform = $('#customfield_10301-val').text().trim(); //平台
        // TODO:兼容不同的项目
        switch (platform) {
            case 'iOS':
                baseUrl = 'http://ios.meitu-int.com/ipa/'+ project_ios[project_name] +'/build/';
                break;
            case 'Android':
                baseUrl = 'https://ci.meitu.city/build/'+ project_android[project_name] +'/number/';
                break;
            default:
                baseUrl = 'https://ci.meitu.city/build/Meitu/number/';
        }
        return baseUrl;
    }

    // 在创建Bug页面添加Bug模版(iOS、Android、Web)按钮
    function addChangeSideButton(){
        // 创建分支按钮添加
        var btn_ios = $('<button class="ios aui-button" id="change_side_ios" type="button" style="">iOS</button>')
        var btn_android = $('<button class="android aui-button" id="change_side_android" type="button" style="">Android</button>')
        var btn_web = $('<button class="web aui-button" id="change_side_web" type="button" style="">Web</button>')
        var btn_once_again = $('<button class="once-again aui-button" id="once-again" type="button" style="">再提一个</button>')
        $(".jira-dialog-content").find(".form-footer").append(btn_ios).append(btn_android).append(btn_web).append(btn_once_again)
    }

    // 点击按钮更换Bug模版,如:iOS、Android、Web
    function changeBugPlatform(platform){
        var project_name = $('#project-name-val').text().trim(); // 项目名
        switch(project_name){
            case "美图秀秀":
                if(platform == "iOS"){
                    document.getElementById('customfield_12903-1').checked = true
                    document.getElementById('customfield_10301-2').checked = true
                }else if(platform == "Android"){
                    document.getElementById('customfield_12903-1').checked = true
                    document.getElementById('customfield_10301-1').checked = true
                }else if(platform == "Web"){
                    document.getElementById('customfield_12903-1').checked = true
                    document.getElementById('customfield_10301-3').checked = true
                }
                break;
            case "美图秀秀Starii":
                if(platform == "iOS"){
                    document.getElementById('customfield_10301-2').checked = true
                }else if(platform == "Android"){
                    document.getElementById('customfield_10301-1').checked = true
                }else if(platform == "Web"){
                    document.getElementById('customfield_10301-3').checked = true
                }
                break;
            default:
                if(platform == "iOS"){
                    document.getElementById('customfield_10301-2').checked = true
                }else if(platform == "Android"){
                    document.getElementById('customfield_10301-1').checked = true
                }else if(platform == "Web"){
                    document.getElementById('customfield_10301-3').checked = true
                }
        }


        // 获取当前的月份和日期
        const date = new Date()
        const today = date.getDate()
        const curmonth = date.getMonth()+1
        // 获取大于且最接近当前日期的版本
        let minNum = 99
        let similarDate = ""

        // 获取 <optgroup> 元素
        let optgroup = $('.aui-field-versionspicker').find('.multi-select-select').find('[label="未发布版本"]')[0]
        // 获取 <option> 元素集合
        let options = optgroup.getElementsByTagName("option");  
        for(let i = 0; i < options.length; i++){
            let option = options[i];
            let text = option.textContent.trim();
            if(text.toLowerCase().indexOf(platform.toLowerCase())<0){
                continue;
            }else{
                //console.log(text);//打印获取到的版本号
                let startNum = text.lastIndexOf("(") !== -1 ? text.lastIndexOf("(") : text.lastIndexOf("(");
                let endNum = text.lastIndexOf(")") !== -1 ? text.lastIndexOf(")") : text.lastIndexOf(")");
                // theDateStr是形似「1109」的日期形式,下面拆分出月份和日期; theMonth形如「02」,theDate形如「18」
                // theDateStr还有可能是「11.9」的形式,需要对有无小数点进行判断
                let theDateStr = text.slice(startNum + 1, endNum)
                let theMonth = ""
                let theDate = ""
                if (theDateStr.includes('.')) {
                    // 使用 split 方法分割小数点前后的数字
                    let parts = theDateStr.split(".");
                    // 获取小数点前面的数字
                    theMonth = parts[0];
                    // 获取小数点后面的数字
                    theDate = parts[1];

                } else {
                    theMonth = parseInt(theDateStr.slice(4,6))// 2022-12-11调整,theDateStr变为20221109的形式,所以调整slice的区间;原本为(0,2)(2)
                    theDate = parseInt(theDateStr.slice(6))
                }

                if(theMonth<curmonth){
                    continue;
                }else if (theMonth==curmonth){
                    if(theDate-today>=0 && theDate-today<minNum){
                        similarDate = theDateStr
                        minNum = theDate-today
                    }
                }else if (theMonth==curmonth+1){
                    let monthDuration = getDuration()
                    let daysToEnd = monthDuration-today
                    if((theDate + daysToEnd) < minNum){
                        similarDate = theDateStr
                        minNum = theDate+daysToEnd
                    }
                }
            }
            
        }

        // console.log(similarDate)
        // 删掉「影响版本」文本框中的内容
        let div = document.getElementsByClassName('representation')[0]
        let emarr = div.getElementsByTagName('em')
        for(let i=0;i<emarr.length;i++){
            // 这里全部都点击的emmarr[0],是因为第一个节点被删除掉之后,后面的素材会顶上来成为新的第0位节点,加个200ms延时,避免点击不到
            sleep(200).then(() => {
                emarr[0].click()
            })
        }

        // 在「影响版本」文本框填入内容
        for(let i=0;i<options.length;i++){
            let option = options[i];
            let text = option.textContent.trim();
            // 如果a节点当中,存在目标日期字段,且平台与点击的一致,就把a节点的text填入到文本框中
            if(text.indexOf(similarDate)>0 && text.toLowerCase().indexOf(platform.toLowerCase())>0){
                $("#versions-textarea").val(text)
                // 获取控件焦点
                $("#versions-textarea").focus()
                // 主动失去当前控件的焦点
                $("#versions-textarea").blur()
            }
        }
    }

    // 获取当前月份有多少天
    function getDuration () {
        let dt = new Date()
        var month = dt.getMonth()
        dt.setMonth(dt.getMonth() + 1)
        dt.setDate(0)
        return dt.getDate()
    }

    // sleep方法,用于延迟一些操作
    function sleep (time) {
        return new Promise((resolve) => setTimeout(resolve, time));
    }

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