快速查包

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

目前为 2024-01-18 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name 快速查包
  3. // @namespace fsh
  4. // @version 4.5
  5. // @description 快速跳转至指定包或指定分支
  6. // @author xxtest
  7. // @match *://ci.meitu.city/*
  8. // @match *://ios.meitu-int.com/ipa/*
  9. // @match *://jira.meitu.com/*
  10. // @grant GM_xmlhttpRequest
  11. // @grant GM_setValue
  12. // @grant GM_getValue
  13. // @grant GM_deleteValue
  14. // @require https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js
  15. // @homepage https://gf.qytechs.cn/zh-CN/scripts/454567-%E5%BF%AB%E9%80%9F%E6%9F%A5%E5%8C%85
  16. // @license MIT
  17. // @note 4.5 支持创建bug dialog,自动填写build号
  18. // @note 4.4 最近版本日期格式变化,进行适配。屏蔽starii创建djalog无效ui
  19. // @note 4.3 优化跳转至指定build的逻辑
  20. // @note 4.2 添加homepage地址
  21. // @note 4.1 获取分支功能支持Starii
  22. // @note 4.0 一键选择平台、日期功能支持Starii
  23. // @note 3.9 搜索分支功能,支持starii项目
  24. // @note 3.8 starii域名变更,重新适配
  25. // @note 3.7 支持Android跳转starii
  26. // @note 3.6 优化获取未发布版本的方式,避免获取不到新版本
  27. // @note 3.5 更新创建bug Dialog获取分支按钮添加的判断条件
  28. // @note 3.4 支持在备注输入框获取上次分支
  29. // @note 3.3 支持在备注输入框获取分支
  30. // @note 3.2 优化填入分支流程,支持搜索框回车代替点击
  31. // @note 3.1 修复跳转分支时,bug平台获取错误的问题
  32. // @note 3.0 修复跳转分支时,bug平台获取错误的问题
  33. // @note 2.9 获取分支新增异常判断
  34. // @note 2.8 整合代码
  35. // @note 2.7 测试脚本自动升级
  36. // @note 2.6 完善jira页面跳转按钮逻辑
  37. // @note 2.5 修复img节点高度被限制的问题
  38. // @note 2.4 granary支持全项目
  39. // @note 2.3 Bug模版支持一键切换web,删除UpdateUrl和DownloadUrl
  40. // @note 2.2 Cicity支持全项目搜索和跳转
  41. // @note 2.1 添加UpdateUrl和DownloadUrl配置
  42. // @note 2.0 修复无法正确获取版本的问题(参数类型由str转int),填写完毕后主动失去焦点
  43. // ==/UserScript==
  44.  
  45. (function() {
  46. 'use strict';
  47. // 设置刷新时间
  48. const refreshTime = 1000;
  49. // 添加CSS
  50. $('head').append($(`
  51. <style>
  52. .search{
  53. position: relative;
  54. width: 220px;
  55. }
  56. .search input{
  57. height: 42px;
  58. width: 220px;
  59. border-radius: 42px;
  60. border: 2px solid #324B4E;
  61. background: #F9F0DA;
  62. transition: .3s linear;
  63. float: left;
  64. text-indent: 10px;
  65. }
  66.  
  67. .search input:focus::placeholder{
  68. opacity: 0;
  69. }
  70. .search button{
  71. height: 42px;
  72. border-radius: 42px;
  73. border-right: 1px solid #324B4E;
  74. border-left: 0px;
  75. background: #F9F0DA;
  76. right: 0;
  77. position: absolute;
  78. }
  79.  
  80. .btn_find_build{
  81. width: 42px;
  82. text-align: center;
  83. }
  84.  
  85. .search_span{
  86. /*border: 1px dashed #000;*/
  87. cursor: pointer;
  88. height: 16px;
  89. margin: 0px 10px;
  90. padding: 3px;
  91. border-radius: 25px;
  92. }
  93.  
  94. .to_new_build{
  95. height: 30px;
  96. width: 120px;
  97. border-radius: 42px;
  98. border: 1px solid #324B4E;
  99. background: #fff;
  100. transition: .3s linear;
  101. color: #544d4d;
  102. margin: 0px 10px;
  103. font-size:14px;
  104. }
  105.  
  106. .myimg{
  107. height:16px;
  108. }
  109.  
  110. </style>`));
  111. // 当是ci域名时,才触发后续的操作,如果不是则不触发
  112. // CI
  113. // CI
  114. // CI
  115. if (location.href.indexOf('ci.meitu.city') > 0) {
  116. clearInterval(refreshTime);
  117. setInterval(function () {
  118. let input_find_build = document.getElementById('input_find_build');
  119. let to_new_build = document.getElementById('to_new_build');
  120. // 不存在输入框和跳转按钮则添加
  121. if (!input_find_build) {
  122. addFindButtonCicity();
  123.  
  124. // 当用户按下键盘上的某个键时触发
  125. document.addEventListener("keyup", function(event) {
  126. // 如果按下的是回车键
  127. if (event.keyCode === 13) {
  128. // 触发按钮的点击事件
  129. $('#btn_find_build').click();
  130. }
  131. });
  132.  
  133. // 跳转按钮点击
  134. $('#btn_find_build').unbind("click").click(function () {
  135. // 获取当前url, 用正则表达式获取项目名
  136. let localUrl = window.location.href
  137. let project = ''
  138. let reg = /(?<=build\/)\w*/
  139. project = localUrl.match(reg)[0]
  140.  
  141. if(project != null){
  142. let baseUrl = 'https://ci.meitu.city/build/' + project + '/'
  143. // 获取用户输入
  144. let input_build_content = document.getElementById("input_find_build").value.trim()
  145. if(input_build_content===""){
  146. return false;
  147. }
  148. let targetUrl = ""
  149. // 如果输入的是纯数字,视为build id
  150. if(/^\d+$/.test(input_build_content)){
  151. targetUrl = baseUrl + 'number/' + input_build_content
  152. }else{// 否则按输入的是分支处理
  153. input_build_content = input_build_content.replaceAll("/","%2F")
  154. targetUrl = baseUrl + 'branch/' + input_build_content
  155. }
  156. // 跳转到指定页面
  157. window.location.href=targetUrl
  158. }
  159. else{
  160. input_find_build.value = "未能正确获取项目名称"
  161. }
  162. });
  163. }
  164. // 不存在跳转至最新按钮则添加
  165. if(!to_new_build){
  166. addToNewCicity();
  167. $('.to_new_build').unbind("click").click(function(){
  168. // 判断当前所处的页面, 用正则表达式获取项目名
  169. let localUrl = window.location.href
  170. let project = ''
  171. let reg = /(?<=build\/)\w*/
  172. project = localUrl.match(reg)[0]
  173. // 获取所要跳转的分支名
  174. let full_build_name = this.parentNode.children[0].innerText.trim()
  175. let targetUrl = ""
  176. let baseUrl = 'https://ci.meitu.city/build/' + project + '/branch/'
  177. full_build_name = full_build_name.replaceAll("/","%2F")
  178. targetUrl = baseUrl + full_build_name
  179. // 跳转到指定页面
  180. window.location.href=targetUrl
  181. });
  182. }
  183. }, refreshTime);
  184. }
  185.  
  186. var project_android = {"美图秀秀":"Meitu","美颜相机":"BeautyCam",
  187. "美拍":"Meipai","美妆相机":"MakeupPlus",
  188. "潮自拍":"SelfieCity","设计室":"HaiBaoPai",
  189. "wink":"WINK","BeautyPlus":"BeautyPlus",
  190. "AirBrush":"AirBrush","eve":"eve",
  191. "chic":"chic","美图宜肤V":"eveking",
  192. "EveNetAssist":"evenetassist","VChat":"vchatbeauty",
  193. "vcut":"vcut","Vmake":"beautyplusvideo",
  194. "PixEngine":"pixengine","智肤APP":"skinar",
  195. "美图秀秀Starii":"starii"
  196. }
  197. var project_ios = {"美图秀秀":"mtxx","美颜相机":"myxj",
  198. "BeautyPlus":"beautyplus","wink":"wink",
  199. "潮自拍":"czp","设计室":"hbp",
  200. "wink":"WINK","BeautyPlus":"BeautyPlus",
  201. "美图秀秀Starii":"starii"
  202. }
  203.  
  204. // CI页面,添加输入框和跳转按钮
  205. function addFindButtonCicity() {
  206. let span = $('<span class="search"></span>')
  207. let input_find_build = $('<input type="text" class="text" id="input_find_build" placeholder=" 输入Build id或分支名">');
  208. let btn_find_build = $('<button type="submit" class="btn_find_build" id="btn_find_build">🔍</button>');
  209.  
  210. span.append(input_find_build);
  211. span.append(btn_find_build);
  212. $(".project-label__name").after(span);
  213. }
  214.  
  215. // CI页面,在分支名后方添加跳转至最新按钮
  216. function addToNewCicity(){
  217. let to_new_build = $('<button type="submit" class="to_new_build" id="to_new_build">跳转至最新➔</button>');
  218. $(".message-card__subtitle").after(to_new_build);
  219. }
  220.  
  221. // 当是granary域名时,才触发后续的操作,如果不是则不触发
  222. // Granary
  223. // Granary
  224. // Granary
  225. if (location.href.indexOf('ios.meitu-int.com') > 0) {
  226. clearInterval(refreshTime);
  227. setInterval(function () {
  228. let input_find_build = document.getElementById('input_find_build');
  229. let to_new_build = document.getElementById('to_new_build');
  230.  
  231. // 项目名
  232. var project = ''
  233. var reg = /(?<=ipa\/)\w*/
  234. // 当前页面Url, 用正则表达式获取项目名
  235. var localUrl = window.location.href
  236. project = localUrl.match(reg)[0]
  237.  
  238. // 不存在输入框和跳转按钮则添加
  239. if (!input_find_build) {
  240. addFindButtonGranary();
  241.  
  242. // 当用户按下键盘上的某个键时触发
  243. document.addEventListener("keyup", function(event) {
  244. // 如果按下的是回车键
  245. if (event.keyCode === 13) {
  246. // 触发按钮的点击事件
  247. $('#btn_find_build').click();
  248. }
  249. });
  250.  
  251. // 按钮绑定点击事件
  252. $('#btn_find_build').unbind("click").click(function () {
  253. if(project != null){
  254. // 获取用户输入
  255. let input_build_content = document.getElementById("input_find_build").value.trim()
  256. if(input_build_content===""){
  257. return false;
  258. }
  259. let targetUrl = ""
  260. // 如果输入的是纯数字,视为build id
  261. if(/^\d+$/.test(input_build_content)){
  262. let baseUrl = 'http://ios.meitu-int.com/ipa/'+ project + '/build/'
  263. targetUrl = baseUrl + input_build_content
  264. }else{// 否则按分支处理
  265. let baseUrl = 'http://ios.meitu-int.com/ipa/'+ project + '/'
  266. input_build_content = input_build_content.replaceAll("/","%2F")
  267. targetUrl = baseUrl + input_build_content
  268. }
  269. // 跳转到指定页面
  270. window.location.href=targetUrl
  271. }
  272. else{
  273. input_build_content.value = "未能正确获取项目名称"
  274. }
  275. });
  276. }
  277.  
  278. //不存在跳转至最新按钮则添加
  279. if(!to_new_build){
  280. addToNewGranary();
  281. // 跳转按钮点击
  282. $('.to_new_build').unbind("click").click(function(event){
  283. // 分支名,去掉首尾的字符串,“/”转为“%2F”
  284. let parentNode = event.target.parentNode;
  285. let branchName = parentNode.querySelector("span.branch-name").innerText.trim()
  286. branchName = branchName.substring(1, branchName.length - 1).replaceAll("/","%2F");
  287. // 跳转链接
  288. let baseUrl = 'http://ios.meitu-int.com/ipa/'+ project + '/'
  289. let targetUrl = baseUrl + branchName
  290.  
  291. // 跳转
  292. window.location.href=targetUrl
  293. });
  294. }
  295. }, refreshTime);
  296. }
  297.  
  298. // granary页面,添加输入框和跳转按钮
  299. function addFindButtonGranary() {
  300. let span = $('<span class="search"></span>')
  301. let input_find_build = $('<input type="text" class="text" id="input_find_build" placeholder=" 输入Build id或分支名">');
  302. let btn_find_build = $('<button type="submit" class="btn_find_build" id="btn_find_build">🔍</button>');
  303.  
  304. span.append(input_find_build);
  305. span.append(btn_find_build);
  306. $("#myTab").append(span);
  307. }
  308.  
  309. // granary页面,在分支名后方添加跳转至最新按钮
  310. function addToNewGranary(){
  311. let to_new_build = $('<button type="submit" class="to_new_build" id="to_new_build">跳转至最新➔</button>');
  312. $("div#list-home span.branch-name").after(to_new_build);
  313. }
  314.  
  315. // 当是jira域名时,才触发后续的操作,如果不是则不触发
  316. // Jira
  317. // Jira
  318. // Jira
  319. if (location.href.indexOf('jira.meitu.com') > 0) {
  320. clearInterval(refreshTime);
  321. var counter = 0;
  322. // 定时器循环操作:页面元素添加等
  323. setInterval(function () {
  324. var search_span = document.getElementById('search_span_create');
  325. // 因为切至iOS按钮和切至Android按钮一般都会成对出现,所以这里只获取iOS按钮,用于判断按钮是否已存在
  326. var change_side_button = document.getElementById('change_side_ios');
  327. var create_input = document.getElementById('customfield_10303');
  328. var create_issue_dialog = document.getElementById('create-issue-dialog');
  329. var close_bug_dialog = document.getElementById('workflow-transition-21-dialog');
  330. var reopen_bug_dialog = document.getElementById('workflow-transition-31-dialog');
  331. var comment_bug_toolbar = document.getElementById('wiki-edit-wikiEdit0');
  332. // 如果不存在bug跳转按钮则添加一个,需要判断url是bug页面而不是bug列表页,否则会报错
  333. if (!search_span) {
  334. addButtonJira();
  335. // 存储bug平台
  336. GM_setValue('platform', $('#customfield_10301-val').text().trim())
  337. }
  338.  
  339. // 在创建问题dialog添加获取分支按钮组
  340. if (create_issue_dialog){
  341. // 加个计时避免按钮显示不出来
  342. // Bug模版按钮
  343. if(change_side_button == undefined || change_side_button.length == 0){
  344. addChangeSideButton();
  345. }
  346. // 获取分支按钮
  347. if(create_input !== undefined || create_input.length !== 0){
  348. var branch_span = $('<label for="customfield_10304"></label>');
  349. $("#customfield_10303").after(branch_span)
  350. add_get_branch_btn($(branch_span));
  351. }
  352. // 隐藏starii项目不必要的UI
  353. hideUI();
  354. // 自动填充build号
  355. fillBuildIdAuto(counter);
  356. counter++;
  357. }
  358.  
  359. // 自动往指定的input组件中填build号
  360. function fillBuildIdAuto(counter){
  361. // 获取输入框内容
  362. var inputContent = $("#customfield_10303").val();
  363. // 使用正则表达式检查当前文本内容是否是纯数字
  364. var isCurrentNumber = /^\d+$/.test(inputContent);
  365. if (isCurrentNumber) {
  366. // 如果当前文本内容是纯数字
  367. if (counter % 5 === 0) {
  368. // 往输入框内填写
  369. set_branch('get_branch_btn','create-issue-dialog')
  370. }
  371. }
  372. }
  373.  
  374. // 在关闭问题dialog 或 重新打开dialog 添加获取分支按钮组
  375. if (close_bug_dialog || reopen_bug_dialog) {
  376. var pre_text_button = $('<input class="aui-button" id="close-text" type="button" value="上次填写"></input>');
  377. var pre_text_btn = document.getElementById('close-text');
  378. var branch_span_close = $('<span id="close_text">输入id:</span>');
  379. var input_text_close = $('<input type="text" class="text medium-field" id="build_id_close">');
  380. setTimeout(function () {
  381. if (!pre_text_btn) {
  382. $(".jira-dialog-content .form-footer").append(branch_span_close).append(input_text_close);// buildid输入框
  383. add_get_branch_btn($(".jira-dialog-content").find(".form-footer"));//获取分支按钮
  384. $(".jira-dialog-content .form-footer").append(pre_text_button);//上次填写按钮
  385. }
  386. }, 500);
  387. }
  388.  
  389. // 在备注窗口添加获取分支按钮组
  390. if (comment_bug_toolbar) {
  391. var pre_text_span = $('<span id="pre_text">输入id:</span>');
  392. var pre_text_span_element = document.getElementById('pre_text');
  393. var input_text = $('<input type="text" class="text medium-field" id="input_text">');
  394. setTimeout(function () {
  395. if (!pre_text_span_element && !close_bug_dialog) {
  396. var branch_span = $('<span></span>');
  397. branch_span.append(pre_text_span).append(input_text);
  398. add_get_branch_btn($(branch_span));
  399. $(".security-level .current-level").after(branch_span);
  400. }
  401. }, 500);
  402. }
  403.  
  404.  
  405. // 获取分支按钮点击事件
  406. $('#get_branch_btn, #last_branch_btn').unbind("click").click(function(event) {
  407. setTimeout(function () {
  408. // 当前节点的父节点
  409. var parentNode = event.target.parentNode;
  410.  
  411. // 如果父节点没有Id属性,则往上遍历
  412. while (parentNode != null) {
  413. if (parentNode.hasAttribute("id")) {
  414. // 找到第一个有id属性的父节点
  415. var parentWithId = parentNode;
  416. break;
  417. }
  418. parentNode = parentNode.parentNode;
  419. }
  420. // 第一个拥有Id的父节点的id
  421. let parentId = parentWithId.getAttribute("id");
  422.  
  423. // 获取当前节点id
  424. var selfId = event.target.id
  425.  
  426. // 往网页中填入分支名
  427. set_branch(selfId, parentId);
  428. },500);
  429. });
  430.  
  431.  
  432. function hideUI(){
  433. // 获取具有id为project-options的div元素
  434. var projectOptionsDiv = document.getElementById('project-options');
  435. if(projectOptionsDiv){
  436. // 获取data-suggestions属性的值
  437. var dataSuggestionsValue = projectOptionsDiv.getAttribute('data-suggestions');
  438. var jsonObject = JSON.parse(dataSuggestionsValue);
  439. // 项目名
  440. var project = jsonObject[0]['items'][0].label.trim();
  441. var project_name = project.replace(/\s*\([^)]*\)\s*/, '').trim();
  442. }else{
  443. var project_name = $('#project-name-val').text().trim(); // 项目名
  444. }
  445. if(project_name === "美图秀秀Starii"){
  446. hideParentNodeById("customfield_10422");
  447. hideParentNodeById("customfield_10202");
  448. hideParentNodeById("customfield_10305");
  449. hideParentNodeById("customfield_11100");
  450. hideParentNodeById("customfield_11101");
  451. hideParentNodeById("customfield_11102");
  452. hideParentNodeById("customfield_10304");
  453. hideParentNodeById("fixVersions");
  454. hideParentNodeById("reporter");
  455. hideParentNodeById("customfield_13601");
  456. }
  457. }
  458. // 隐藏指定ID节点的父节点
  459. function hideParentNodeById(childNodeId){
  460. // 隐藏bug优先级
  461. var element = document.getElementById(childNodeId);
  462. // 检查是否找到了元素
  463. if (element) {
  464. // 获取父节点并将其样式的display属性设置为"none"
  465. element.parentNode.style.display = "none";
  466. }
  467. }
  468.  
  469. // 往网页中填入分支名称
  470. function set_branch(selfId, parentId) {
  471. if (selfId === "get_branch_btn") {
  472. switch (parentId) {
  473. // 创建Bug窗口填写分支
  474. case "create-issue-dialog":
  475. // bug平台节点和buildId节点
  476. var $platform = $('input:radio[name="customfield_10301"]:checked');
  477. var $buildId = $('#customfield_10303');
  478.  
  479. // 通过buildId节点(input)定位到bug平台节点(label)
  480. var id = $platform.attr("id")
  481. var label = document.querySelector("label[for='" + id + "']");
  482. // bug平台和buildId
  483. try {
  484. var platform = label.textContent;
  485. } catch (error) {
  486. GM_setValue('branch_value', "#请先选择Bug平台");
  487. fillInBranch('#customfield_10303');
  488. return;
  489. }
  490. var buildId = $buildId.val();
  491. if (buildId === undefined || buildId === ''||buildId === null) {
  492. GM_setValue('branch_value', "#请先填写Build号");
  493. fillInBranch('#customfield_10303');
  494. return;
  495. }
  496. console.log(platform)
  497. // 获取分支名
  498. get_branch(platform, buildId);
  499. // 填入分支
  500. fillInBranch('#customfield_10303');
  501. break;
  502.  
  503. // 关闭||重新打开窗口填写分支
  504. case "issue-workflow-transition":
  505. var $platform = $('#customfield_10301-val');
  506. var $buildId = $('#build_id_close');
  507. // bug平台和buildId
  508. var platform = $platform.text().trim();
  509. var buildId = $buildId.val();
  510. // 获取分支名
  511. get_branch(platform, buildId);
  512. // 填入分支
  513. fillInBranchTextarea('div#comment-wiki-edit textarea#comment');
  514.  
  515. // 聚焦到输入框
  516. sleep(500).then(() => {
  517. $('#comment-wiki-edit textarea').focus();
  518. })
  519. break;
  520. // 备注
  521. case "issue-comment-add":
  522. var $platform = $('#customfield_10301-val');
  523. var $buildId = $('#input_text');
  524. // bug平台和buildId
  525. var platform = $platform.text().trim();
  526. var buildId = $buildId.val();
  527. // 获取分支名
  528. get_branch(platform, buildId);
  529. // 填入分支
  530. fillInBranchTextarea('div#comment-wiki-edit textarea#comment');
  531.  
  532. // 聚焦到输入框
  533. sleep(500).then(() => {
  534. $('#comment-wiki-edit textarea').focus();
  535. })
  536. break;
  537. default:
  538. }
  539. } else if (selfId === "last_branch_btn") {
  540. switch (parentId) {
  541. case "create-issue-dialog":
  542. // 填入分支
  543. fillInBranch('#customfield_10303');
  544. break;
  545. case "issue-workflow-transition":
  546. // 填入分支
  547. fillInBranchTextarea('div#comment-wiki-edit textarea#comment');
  548. break;
  549. // 备注
  550. case "issue-comment-add":
  551. fillInBranchTextarea('div#comment-wiki-edit textarea#comment');
  552. break;
  553. default:
  554. }
  555. }
  556. }
  557.  
  558. // 跳转到创建分支
  559. $('#search_span_create').unbind("click").click(function () {
  560. var build_id = getBuildId("customfield_10303-val");
  561. // 存储bug平台
  562. GM_setValue('platform', $('#customfield_10301-val').text().trim())
  563. sleep(500).then(() => {
  564. var targetUrl = getBaseUrl() + build_id;
  565. window.open(targetUrl);
  566. })
  567. });
  568.  
  569. // 跳转到解决分支
  570. $('#search_span_solved').unbind("click").click(function () {
  571. var build_id = getBuildId("customfield_10304-val");
  572. // 存储bug平台
  573. GM_setValue('platform', $('#customfield_10301-val').text().trim())
  574. sleep(500).then(() => {
  575. var targetUrl = getBaseUrl() + build_id;
  576. window.open(targetUrl);
  577. })
  578. });
  579.  
  580. // 切换到iOS bug模版
  581. $('.ios').unbind("click").click(function () {
  582. changeBugPlatform('iOS')
  583. });
  584.  
  585. // 切换到Androidbug模版
  586. $('.android').unbind("click").click(function () {
  587. changeBugPlatform('Android')
  588. });
  589.  
  590. // 切换到Webbug模版
  591. $('.web').unbind("click").click(function () {
  592. changeBugPlatform('Web')
  593. });
  594.  
  595. // 点击关闭问题按钮,记录下填写的内容
  596. var text_area = $('.jira-dialog-content').find('#comment')
  597. $('#issue-workflow-transition-submit').unbind("click").click(function(){
  598. if($('#issue-workflow-transition-submit').val().trim()=="关闭问题"){
  599. // 存储bug平台
  600. GM_setValue('closeText',text_area.val().trim())
  601. }
  602. })
  603.  
  604. // 点击上次填写按钮,填充上次填写的内容
  605. $('#close-text').unbind("click").click(function(){
  606. text_area.val(GM_getValue('closeText'))
  607. text_area.focus()
  608. })
  609.  
  610. // TODO:点击「创建」按钮时记录下所有的bug信息
  611. const $createBtn = $('#create-issue-submit');
  612. const $summary = $('#summary');
  613. const $business = $('input:radio[name="customfield_12903"]:checked');
  614. const $platform = $('input:radio[name="customfield_10301"]:checked');
  615. const $path0 = $("#selectCFLevel0 option:selected");
  616. const $path1 = $("#selectCFLevel1 option:selected");
  617. const $assignee = $("#assignee-field");
  618. const $severity = $("#customfield_10406 option:selected");
  619. const $version = $("#versions-multi-select .value-text");
  620. const $find = $("#customfield_10202 option:selected");
  621. const $frequency = $("#customfield_10204 option:selected");
  622. const $branch = $("#customfield_10303");
  623. const $step = $("#customfield_10203");
  624. const $tips = $("#labels-multi-select .representation .value-text");
  625.  
  626. $createBtn.unbind('click').click(function() {
  627. const bugDict = {
  628. 'summary': $summary.val(),
  629. 'business': $business.attr("id"),
  630. 'platform': $platform.attr("id"),
  631. 'path0': $path0.text(),
  632. 'path1': $path1.text(),
  633. 'assignee': $assignee.val(),
  634. 'severity': $severity.text(),
  635. 'version': $version.text(),
  636. 'find': $find.attr("value"),
  637. 'frequency': $frequency.attr("value"),
  638. 'branch': $branch.val(),
  639. 'step': $step.val(),
  640. 'tips': $tips.text()
  641. };
  642. GM_setValue('bugDict', bugDict);
  643. });
  644.  
  645. // 点击再提一个
  646. // 已知问题:1. 路径2无法填写
  647. $('#once-again').unbind('click').click(function() {
  648. const bugDict = GM_getValue('bugDict');
  649. function setValue(selector, value) {
  650. $(selector).val(value);
  651. }
  652. function setChecked(selector, value) {
  653. $(selector).attr("checked", value);
  654. }
  655. function setSelected(selector, value) {
  656. $(selector).find(`option[value='${value}']`).attr("selected", true);
  657. }
  658. console.log(bugDict);
  659. setValue("#summary", bugDict.summary);
  660. setChecked(`input[id=${bugDict.business}]`, true);
  661. setChecked(`input[id=${bugDict.platform}]`, true);
  662. setValue("#selectCFLevel0", bugDict.path0);
  663. setValue("#selectCFLevel1", bugDict.path1);
  664. setValue("#assignee-field", bugDict.assignee);
  665. // $('#assignee').append($('<option>', {
  666. // value: 'qwj@meitu.com',
  667. // text: '丘文坚',
  668. // title: "undefined",
  669. // selected: "selected",
  670. // style: "background-image: url(\"https://jira.meitu.com/secure/useravatar?size=xsmall&ownerId=qwj%40meitu.com&avatarId=13404\");"
  671. // }));
  672. setSelected("#customfield_10406", bugDict.severity);
  673. setValue("#versions-textarea", bugDict.version);
  674. setSelected("#customfield_10202", bugDict.find);
  675. //setSelected("#customfield_10204", bugDict.frequency);
  676. setValue("#customfield_10303", bugDict.branch);
  677. setValue("#customfield_10203", bugDict.step);
  678. //setValue("#labels-textarea",bugDict.tips)
  679. });
  680. }, refreshTime);
  681. }
  682.  
  683. // 在输入框中填入分支
  684. // 这里必须加上500ms的延时,否则get_branch尚未填写完成时就会调用该方法,导致填写之前存储的内容
  685. function fillInBranch(inputSelector) {
  686. setTimeout(function() {
  687. var inputElement = $(inputSelector);
  688. inputElement.val("").val(GM_getValue('branch_value'));
  689. }, 500);
  690. }
  691. // 在文本区域中填入分支
  692. function fillInBranchTextarea(textareaSelector) {
  693. setTimeout(function() {
  694. var textareaElement = $(textareaSelector);
  695. textareaElement.val("").val(GM_getValue('branch_value'));
  696. }, 500);
  697. }
  698.  
  699. // 在指定节点后添加获取分支按钮
  700. function add_get_branch_btn(targetElement) {
  701. var branch_btn = $('<input type="button" class="aui-button" value="获取分支" id="get_branch_btn">');
  702. var last_branch_btn = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn">');
  703. targetElement.append(branch_btn).append(last_branch_btn)
  704. }
  705.  
  706. // 根据build号,请求接口获取分支
  707. function get_branch(platform, build_id) {
  708. //console.log(platform+ "接收到的" + build_id)
  709. var url = '';
  710. var branch = '';
  711. var result = '';
  712. // 获取具有id为project-options的div元素
  713. var projectOptionsDiv = document.getElementById('project-options');
  714. if(projectOptionsDiv){
  715. // 获取data-suggestions属性的值
  716. var dataSuggestionsValue = projectOptionsDiv.getAttribute('data-suggestions');
  717. var jsonObject = JSON.parse(dataSuggestionsValue);
  718. // 项目名
  719. var project = jsonObject[0]['items'][0].label.trim();
  720. var project_name = project.replace(/\s*\([^)]*\)\s*/, '').trim();
  721. }else{
  722. var project_name = $('#project-name-val').text().trim(); // 项目名
  723. }
  724.  
  725. if (platform === 'iOS') {
  726. url = 'http://ios.meitu-int.com/ipa/'+ project_ios[project_name] +'/build/' + build_id;
  727. }else if (platform === 'Android') {
  728. url = 'https://api-ci-data.meitu.city/ci/api/v2/build?project='+ project_android[project_name]+ '&build=' + build_id;
  729. }else {
  730. url = 'https://api-ci-data.meitu.city/ci/api/v2/build?project='+ project_android[project_name]+ '&build=' + build_id;
  731. }
  732. GM_xmlhttpRequest({
  733. url: url,
  734. method: 'GET',
  735. onload: function(res) {
  736. if (res.status === 200) {
  737. var r = '';
  738. if (platform === 'iOS') {
  739. r = '<span class="branch-name">(.*?)</span>';
  740. } else if (platform === 'Android') {
  741. r = '"branch":"(.*?)"';
  742. } else{
  743. r = '"branch":"(.*?)"';
  744. }
  745. branch = res.responseText.match(r)[1];
  746. } else {
  747. branch = ''
  748. }
  749. // branch的值存在$符时,设置为空
  750. // branch的值为空时,设置返回结果为提示语
  751. branch = branch.indexOf('$') != -1 ? '' : branch;
  752. result = branch == '' ? "未找到该包的分支" : branch + '#' + build_id;
  753. GM_setValue('branch_value', result);
  754. },
  755. onerror: function(err) {
  756. result = '接口请求失败,建议重新关闭开启脚本再试试';
  757. GM_setValue('branch_value', result);
  758. }
  759. });
  760. }
  761.  
  762. //在jira页面添加跳转到分支按钮
  763. function addButtonJira(){
  764. // 创建分支按钮添加
  765. var span_create = $('<span class="search_span" id="search_span_create" style=""></span>')
  766. // 添加图片
  767. var search_image = "data:image/png;base64,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"
  768. var img = document.createElement('img');
  769. img.className = "myimg"
  770. img.src = search_image;
  771. span_create.append(img);
  772. $("#customfield_10303-val").after(span_create);
  773. // 解决分支按钮添加
  774. var span_solved = $('<span class="search_span" id="search_span_solved"></span>')
  775. var img2 = document.createElement('img');
  776. img2.className = "myimg"
  777. img2.src = search_image;
  778. span_solved.append(img2);
  779. $("#customfield_10304-val").after(span_solved);
  780. }
  781.  
  782. // 正则表达式获取build号
  783. function getBuildId(elementId) {
  784. var create_build_content = document.getElementById(elementId).textContent.trim();
  785. var reg = /#?(\d{1,5})$/;
  786. var build_id_array = create_build_content.match(reg);
  787. var build_id = '';
  788. if (build_id_array == null || build_id_array.length == 0) {
  789. console.log("未识别到build号");
  790. } else {
  791. build_id = build_id_array[0];
  792. var reg_num = /#?(\d{1,5})$/;
  793. build_id = build_id.match(reg_num)[0].replace('#', '');
  794. }
  795. return build_id;
  796. }
  797. // 根据不同的项目,Bug平台拼接url
  798. function getBaseUrl() {
  799. var baseUrl = '';
  800. var project_name = $('#project-name-val').text().trim(); // 项目名
  801. var platform = $('#customfield_10301-val').text().trim(); //平台
  802. // TODO:兼容不同的项目
  803. switch (platform) {
  804. case 'iOS':
  805. baseUrl = 'http://ios.meitu-int.com/ipa/'+ project_ios[project_name] +'/build/';
  806. break;
  807. case 'Android':
  808. baseUrl = 'https://ci.meitu.city/build/'+ project_android[project_name] +'/number/';
  809. break;
  810. default:
  811. baseUrl = 'https://ci.meitu.city/build/Meitu/number/';
  812. }
  813. return baseUrl;
  814. }
  815.  
  816. // 在创建Bug页面添加Bug模版(iOS、Android、Web)按钮
  817. function addChangeSideButton(){
  818. // 创建分支按钮添加
  819. var btn_ios = $('<button class="ios aui-button" id="change_side_ios" type="button" style="">iOS</button>')
  820. var btn_android = $('<button class="android aui-button" id="change_side_android" type="button" style="">Android</button>')
  821. var btn_web = $('<button class="web aui-button" id="change_side_web" type="button" style="">Web</button>')
  822. var btn_once_again = $('<button class="once-again aui-button" id="once-again" type="button" style="">再提一个</button>')
  823. $(".jira-dialog-content").find(".form-footer").append(btn_ios).append(btn_android).append(btn_web).append(btn_once_again)
  824. }
  825.  
  826. // 点击按钮更换Bug模版,如:iOS、Android、Web
  827. function changeBugPlatform(platform){
  828. var project_name = $('#project-name-val').text().trim(); // 项目名
  829. switch(project_name){
  830. case "美图秀秀":
  831. if(platform == "iOS"){
  832. document.getElementById('customfield_12903-1').checked = true
  833. document.getElementById('customfield_10301-2').checked = true
  834. }else if(platform == "Android"){
  835. document.getElementById('customfield_12903-1').checked = true
  836. document.getElementById('customfield_10301-1').checked = true
  837. }else if(platform == "Web"){
  838. document.getElementById('customfield_12903-1').checked = true
  839. document.getElementById('customfield_10301-3').checked = true
  840. }
  841. break;
  842. case "美图秀秀Starii":
  843. if(platform == "iOS"){
  844. document.getElementById('customfield_10301-2').checked = true
  845. }else if(platform == "Android"){
  846. document.getElementById('customfield_10301-1').checked = true
  847. }else if(platform == "Web"){
  848. document.getElementById('customfield_10301-3').checked = true
  849. }
  850. break;
  851. default:
  852. if(platform == "iOS"){
  853. document.getElementById('customfield_10301-2').checked = true
  854. }else if(platform == "Android"){
  855. document.getElementById('customfield_10301-1').checked = true
  856. }else if(platform == "Web"){
  857. document.getElementById('customfield_10301-3').checked = true
  858. }
  859. }
  860.  
  861.  
  862. // 获取当前的月份和日期
  863. const date = new Date()
  864. const today = date.getDate()
  865. const curmonth = date.getMonth()+1
  866. // 获取大于且最接近当前日期的版本
  867. let minNum = 99
  868. let similarDate = ""
  869.  
  870. // 获取 <optgroup> 元素
  871. let optgroup = $('.aui-field-versionspicker').find('.multi-select-select').find('[label="未发布版本"]')[0]
  872. // 获取 <option> 元素集合
  873. let options = optgroup.getElementsByTagName("option");
  874. for(let i = 0; i < options.length; i++){
  875. let option = options[i];
  876. let text = option.textContent.trim();
  877. if(text.toLowerCase().indexOf(platform.toLowerCase())<0){
  878. continue;
  879. }else{
  880. //console.log(text);//打印获取到的版本号
  881. let startNum = text.lastIndexOf("(") !== -1 ? text.lastIndexOf("(") : text.lastIndexOf("(");
  882. let endNum = text.lastIndexOf(")") !== -1 ? text.lastIndexOf(")") : text.lastIndexOf(")");
  883. // theDateStr是形似「1109」的日期形式,下面拆分出月份和日期; theMonth形如「02」,theDate形如「18」
  884. // theDateStr还有可能是「11.9」的形式,需要对有无小数点进行判断
  885. let theDateStr = text.slice(startNum + 1, endNum)
  886. let theMonth = ""
  887. let theDate = ""
  888. if (theDateStr.includes('.')) {
  889. // 使用 split 方法分割小数点前后的数字
  890. let parts = theDateStr.split(".");
  891. // 获取小数点前面的数字
  892. theMonth = parts[0];
  893. // 获取小数点后面的数字
  894. theDate = parts[1];
  895.  
  896. } else {
  897. theMonth = parseInt(theDateStr.slice(4,6))// 2022-12-11调整,theDateStr变为20221109的形式,所以调整slice的区间;原本为(0,2)(2)
  898. theDate = parseInt(theDateStr.slice(6))
  899. }
  900.  
  901. if(theMonth<curmonth){
  902. continue;
  903. }else if (theMonth==curmonth){
  904. if(theDate-today>=0 && theDate-today<minNum){
  905. similarDate = theDateStr
  906. minNum = theDate-today
  907. }
  908. }else if (theMonth==curmonth+1){
  909. let monthDuration = getDuration()
  910. let daysToEnd = monthDuration-today
  911. if((theDate + daysToEnd) < minNum){
  912. similarDate = theDateStr
  913. minNum = theDate+daysToEnd
  914. }
  915. }
  916. }
  917. }
  918.  
  919. // console.log(similarDate)
  920. // 删掉「影响版本」文本框中的内容
  921. let div = document.getElementsByClassName('representation')[0]
  922. let emarr = div.getElementsByTagName('em')
  923. for(let i=0;i<emarr.length;i++){
  924. // 这里全部都点击的emmarr[0],是因为第一个节点被删除掉之后,后面的素材会顶上来成为新的第0位节点,加个200ms延时,避免点击不到
  925. sleep(200).then(() => {
  926. emarr[0].click()
  927. })
  928. }
  929.  
  930. // 在「影响版本」文本框填入内容
  931. for(let i=0;i<options.length;i++){
  932. let option = options[i];
  933. let text = option.textContent.trim();
  934. // 如果a节点当中,存在目标日期字段,且平台与点击的一致,就把a节点的text填入到文本框中
  935. if(text.indexOf(similarDate)>0 && text.toLowerCase().indexOf(platform.toLowerCase())>0){
  936. $("#versions-textarea").val(text)
  937. // 获取控件焦点
  938. $("#versions-textarea").focus()
  939. // 主动失去当前控件的焦点
  940. $("#versions-textarea").blur()
  941. }
  942. }
  943. }
  944.  
  945. // 获取当前月份有多少天
  946. function getDuration () {
  947. let dt = new Date()
  948. var month = dt.getMonth()
  949. dt.setMonth(dt.getMonth() + 1)
  950. dt.setDate(0)
  951. return dt.getDate()
  952. }
  953.  
  954. // sleep方法,用于延迟一些操作
  955. function sleep (time) {
  956. return new Promise((resolve) => setTimeout(resolve, time));
  957. }
  958.  
  959. // Your code here...
  960. })();

QingJ © 2025

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