// ==UserScript== // @name 获取分支 // @namespace ydr // @version 1.8 // @description 创建bug、关闭bug等操作时,可以快速获取分支 // @author ydr // @match https://jira.meitu.com/* // @grant GM_xmlhttpRequest // @grant GM_setValue // @grant GM_getValue // @downloadURL https://update.greasyfork.icu/scripts/422996/%E8%8E%B7%E5%8F%96%E5%88%86%E6%94%AF.user.js // @updateURL https://update.greasyfork.icu/scripts/422996/%E8%8E%B7%E5%8F%96%E5%88%86%E6%94%AF.meta.js // ==/UserScript== (function () { 'use strict'; const refreshTime = 1000; //评论上的获取分支按钮 function addCommentButton() { // 生成获取分支对应输入框和按钮UI let $branch_span_comment = $('输入id:'); let $input_text = $(''); let $branch_btn_comment = $(''); let $last_branch_btn_comment = $(''); let $camera_template_btn_comment = $(''); let $camera_file_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).append($camera_template_btn_comment).append($camera_file_btn_comment); $("#addcomment").after($b); } } //关闭jira时获取分支按钮 function closeJiraButton() { // 因点击关闭按钮时,弹窗元素需要等一会才弹出,所以这边设置了展示延迟 setTimeout(function () { // 生成获取分支对应输入框和按钮UI let $branch_span_close = $('输入id:'); let $input_text_close = $(''); let $branch_btn_close = $(''); let $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 = $('输入id:'); let $input_text_open = $(''); let $branch_btn_open = $('
'); let $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 = $(''); let $branch_btn = $(''); let $a = $branch_span.append($branch_btn); $("#customfield_10303").after($a); let $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 = '(.*?)'; 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); // 增加重试机制,等1s再重新取一次 if(value.indexOf(build_id_comment) != -1){ setTimeout(function () { var value = GM_getValue('branch_value', build_id_comment); }, 1000); } 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); // 增加重试机制,等1s再重新取一次 if(value.indexOf(build_id_open) != -1){ setTimeout(function () { var value = GM_getValue('branch_value', build_id_open); }, 1000); } 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); // 增加重试机制,等1s再重新取一次 if(value.indexOf(build_id_close) != -1){ setTimeout(function () { var value = GM_getValue('branch_value', build_id_close); }, 1000); } 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); // 增加重试机制,等1s再重新取一次 if(value.indexOf(build_id) != -1){ setTimeout(function () { var value = GM_getValue('branch_value', build_id); }, 1000); } // 创建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(); }); // 评论入口,点击【相机模板】按钮时,获取对应分支 $("#get_camera_template_btn_comment").unbind("click").click(function () { let camera_text = "h1. 模板示例 \n【效果引擎--前置check】{color:red}check结果备注{color}\n 1、AI引擎版本是否满足需求(引擎日志查看版本;确认是否引入期望的版本;排查maven/pod导致版本覆盖)\n 2、模型引擎正确设置(引擎日志确认模型是否下载;是否存在读取模型失败)\n 3、AI引擎相关功能是否正确开启(引擎日志确认是否存在依赖未开启 \n \n【效果引擎】\n 1、配置信息(Dump效果配置是否加载;效果参数值):{color:red}xx{color} \n \n【AI引擎--前置check】{color:red}check结果备注{color}\n 1、相关配置是否加载(可在config信息中,查看加载的配置是否存在)\n 2、相关参数是否生效(可在config信息中,查看相关参数是否生效)\n 3、相关数据是否设置\n \n【AI引擎】\n 1、AI引擎模型内置or线上:{color:red}xx{color}\n 2、AI引擎日志(初始化时Debug模式,关键词 “mtai:”):{color:red}附件{color}\n 3、素材配置的方式:{color:red}xx{color}\n \n 【LDS链接】\n https://techgit.meitu.com/MTLabEngines/libs/mtlablds/-/blob/0.9.0-support-mtxx-beta-51-beautyResource-7/mtlablds.txt\n {color:red}链接替换成当前{color}\n【LDS对比】\n http://mtat.meitu.com/TestManageProject/upload.jhtml?p=ldsTool&code=nxRmi8lQ-DSXKPUrrHh2o5Xp9lOtk57NeLtzDudltZI&state=undefined&appid=wxb7b291e71c4e8823 \n{color:#707070}使用上面👆地址,对比结果{color},{color:red}结果粘贴在此处{color}\n【其他】\n 1、已经查到的信息\n 2、排查思路建议"; $("#addcomment textarea[id='comment']").val(camera_text); //$("#addcomment textarea[id='comment']").focus(); }); // 评论入口,点击【相机附件】按钮时,获取对应分支 $("#get_camera_file_btn_comment").unbind("click").click(function () { let camera_file = 'jira单要求一定有附件:\n 1、原图、结果图(保存出来的 不要截屏)\n 2、效果差异:提供原图、结果图、旧版本原图、旧版本的结果图(保存出来的 不要截屏)\n 3、单机/全机问题:手机系统写清楚\n 4、客户端版本:影响版本字段\n 5、分支信息:分支链接,如:https://ci.meitu.city/build/Meitu/number/45084\n 6、dump日志:查看方式 https://cf.meitu.com/confluence/pages/viewpage.action?pageId=294610610\n 7、log信息 \n \n默认指派给客户端开发,备注相关信息后可指给中台:\n 安卓:xxx\n iOS:xxx123'; $("#addcomment textarea[id='comment']").val(camera_file); }); s }, refreshTime); } // Your code here... })();