使用油猴脚本,自动填写Jira任务

公司使用Jira作为日常管理,所以Jira填写就比较频繁了,我做了一个示例,剩下的功能就各位自己添加吧!

版本1 

最基本的方法,而且也bug,没有时间格式化,已放弃。

 

版本2

复制代码
// ==UserScript==
// @name         Jira填写
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  自动填充,每周填写的任务计划
// @author       Jack Meng
// @match        http://jira.cares.sh.cn/secure/CreateSubTaskIssue.*
// @match        http://jira.cares.sh.cn/browse/*
// @icon
// @run-at       document-end
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    // Your code here...


    Date.prototype.Format = function(fmt){
        var o = {
            "M+" : this.getMonth()+1,                 //月份
            "d+" : this.getDate(),                    //
            "h+" : this.getHours(),                   //小时
            "m+" : this.getMinutes(),                 //
            "s+" : this.getSeconds(),                 //
            "q+" : Math.floor((this.getMonth()+3)/3), //季度
            "S"  : this.getMilliseconds()             //毫秒
        };
        if(/(y+)/.test(fmt))
            fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
        for(var k in o)
            if(new RegExp("("+ k +")").test(fmt))
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
        return fmt;
    }


    var loginfo=(msg)=>console.log(`%c【${new Date().Format("yyyy-MM-dd hh:mm:ss")}】%c ========> ${msg}`,"background:red;font-size: 16px; padding: 1px; border-radius: 3px;","background:transparent");

    var subTask = $("#stqc_show");
    if(subTask.length>0)
    {
        loginfo("已找到添加子任务按钮")
        subTask[0].onclick=()=>{
            loginfo("添加子任务onClick事件监听。");
            setTimeout(AddFun,1000);
        }
    }
    else
    {
        loginfo("未找到添加子任务按钮")
    }

    function AddFun()
    {
        var isAdd=false;
        var host = window.location.host;
        if(host=="jira.cares.sh.cn")
        {
            var par = document.getElementById("span_userinfo");
            loginfo("注入填充数据按钮");

            par = $(".form-footer")[0];//field-group
            if(par==undefined) return isAdd;
            var f = par.firstElementChild;

            //填充1周
            var a = document.createElement("a");
            a.id="aLink";
            a.href="#";
            a.style="vertical-align: middle;margin-right: 10px;";
            a.target="_blank"
            a.onclick = ()=>fillData(14);
            a.innerText="填充1周";
            par.insertBefore(a,f);

            //填充2周
            var a2 = document.createElement("a");
            a2.id="aLink2";
            a2.href="#";
            a2.style="vertical-align: middle;";
            a2.target="_blank"
            a2.onclick = ()=>fillData(21);
            a2.innerText="填充2周";
            par.insertBefore(a2,f);

            //填充2周--按钮
            var a3 = document.createElement("input");
            a3.id="btnFillData";
            a3.type="button";
            a3.className="aui-button aui-button-primary";
            a3.onclick = ()=>fillData(21);
            a3.value="填充2周";
            //par.insertBefore(a3,f);

            isAdd=true;
        }
        return isAdd;
    }

    var fillData = (dayCount)=>{
        loginfo(`给页面表单填充下${dayCount==14?"":"下"}周数据`);
        var d = new Date();
        d.setDate(d.getDate()+ dayCount - d.getDay());
        //$("#duedate")[0].value=d.toLocaleDateString('zh');
        $("#duedate")[0].value=d.Format("yyyy-MM-dd");
        $("#timetracking_originalestimate")[0].value='1w';
        $("#timetracking_remainingestimate")[0].value='1w';
        var endDate=d.Format("MMdd");
        d.setDate(d.getDate() - 6);
        var beginDate=d.Format("MMdd");
        $("#summary")[0].value=`${$("#summary-val")[0].innerText}子任务${d.Format("yyyy")}(${beginDate}-${endDate})`;
        $("#assign-to-me-trigger")[0].click();

        return false;
    }



    // 创建一个定时器,每秒执行一次任务,如果任务完成或超过尝试次数时,停止执行
    /*     var taskCount=0;
    var intervalId = setInterval(function() {
        // 执行任务
        var taskIsFinished = AddFun();// 在这里执行你的任务,并返回执行结果
        taskCount++;
        // 如果任务完成或尝试指定次数时,停止定时器
        if (taskIsFinished || taskCount > 10) {
            clearInterval(intervalId);
        }
    }, 1000); */


})();
View Code
复制代码

 

版本3

优化:因为structure页面加载耗时,所以使用延时函数初始化页面。

复制代码
// ==UserScript==
// @name         Jira填写
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  自动填充,每周填写的任务计划
// @author       Jack Meng
// @match        http://jira.cares.sh.cn/secure/CreateSubTaskIssue.*
// @match        http://jira.cares.sh.cn/browse/*
// @match        http://jira.cares.sh.cn/projects/*
// @icon
// @run-at       document-end
// @grant        none
// ==/UserScript==

var SS=(p)=>document.querySelector(p);

(function() {
    'use strict';
    // Your code here...


    $(document).ready(function(){
        // 在此处执行希望在页面加载完成后执行的操作
        setTimeout(InitPage,3000);

    });

    Date.prototype.Format = function(fmt){
        var o = {
            "M+" : this.getMonth()+1,                 //月份
            "d+" : this.getDate(),                    //
            "h+" : this.getHours(),                   //小时
            "m+" : this.getMinutes(),                 //
            "s+" : this.getSeconds(),                 //
            "q+" : Math.floor((this.getMonth()+3)/3), //季度
            "S"  : this.getMilliseconds()             //毫秒
        };
        if(/(y+)/.test(fmt))
            fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
        for(var k in o)
            if(new RegExp("("+ k +")").test(fmt))
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
        return fmt;
    }


    var loginfo=(msg)=>console.log(`%c【${new Date().Format("yyyy-MM-dd hh:mm:ss")}】%c ========> ${msg}`,"background:red;font-size: 16px; padding: 1px; border-radius: 3px;","background:transparent");

    function InitPage(){
        var subTask = $("#stqc_show");

        if(subTask.length>0)
        {
            loginfo("已找到添加子任务按钮")
            subTask[0].onclick=()=>{
                loginfo("添加子任务onClick事件监听。");
                setTimeout(AddFun,1000);
            }
        }
        else
        {
            loginfo("未找到添加子任务按钮")
        }
    }

    function AddFun()
    {
        var isAdd=false;
        var host = window.location.host;
        if(host=="jira.cares.sh.cn")
        {
            var par = document.getElementById("span_userinfo");
            loginfo("注入填充数据按钮");

            par = $(".form-footer")[0];//field-group
            if(par==undefined) return isAdd;
            var f = par.firstElementChild;

            //填充1周
            var a = document.createElement("a");
            a.id="aLink";
            a.href="#";
            a.style="vertical-align: middle;margin-right: 10px;";
            a.target="_blank"
            a.onclick = ()=>fillData(14);
            a.innerText="填充1周";
            par.insertBefore(a,f);

            //填充2周
            var a2 = document.createElement("a");
            a2.id="aLink2";
            a2.href="#";
            a2.style="vertical-align: middle;";
            a2.target="_blank"
            a2.onclick = ()=>fillData(21);
            a2.innerText="填充2周";
            par.insertBefore(a2,f);

            //填充2周--按钮
            var a3 = document.createElement("input");
            a3.id="btnFillData";
            a3.type="button";
            a3.className="aui-button aui-button-primary";
            a3.onclick = ()=>fillData(21);
            a3.value="填充2周";
            //par.insertBefore(a3,f);

            isAdd=true;
        }
        return isAdd;
    }

    var fillData = (dayCount)=>{
        loginfo(`给页面表单填充下${dayCount==14?"":"下"}周数据`);
        var d = new Date();
        d.setDate(d.getDate()+ dayCount - d.getDay());
        //$("#duedate")[0].value=d.toLocaleDateString('zh');
        $("#duedate")[0].value=d.Format("yyyy-MM-dd");
        $("#timetracking_originalestimate")[0].value='1w';
        $("#timetracking_remainingestimate")[0].value='1w';
        var endDate=d.Format("MMdd");
        d.setDate(d.getDate() - 6);
        var beginDate=d.Format("MMdd");
        $("#summary")[0].value=`${$("#summary-val")[0].innerText}子任务${d.Format("yyyy")}(${beginDate}-${endDate})`;
        $("#assign-to-me-trigger")[0].click();

        return false;
    }



    // 创建一个定时器,每秒执行一次任务,如果任务完成或超过尝试次数时,停止执行
    /*     var taskCount=0;
    var intervalId = setInterval(function() {
        // 执行任务
        var taskIsFinished = AddFun();// 在这里执行你的任务,并返回执行结果
        taskCount++;
        // 如果任务完成或尝试指定次数时,停止定时器
        if (taskIsFinished || taskCount > 10) {
            clearInterval(intervalId);
        }
    }, 1000); */


})();
View Code
复制代码

 

版本4

优化:增加本周填写

复制代码
// ==UserScript==
// @name         Jira填写
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  自动填充,每周填写的任务计划
// @author       Jack Meng
// @match        http://jira.cares.sh.cn/secure/CreateSubTaskIssue.*
// @match        http://jira.cares.sh.cn/browse/*
// @match        http://jira.cares.sh.cn/projects/*
// @icon
// @run-at       document-end
// @grant        none
// ==/UserScript==

var SS=(p)=>document.querySelector(p);

(function() {
    'use strict';
    // Your code here...


    $(document).ready(function(){
        // 在此处执行希望在页面加载完成后执行的操作
        setTimeout(InitPage,3000);

    });

    Date.prototype.Format = function(fmt){
        var o = {
            "M+" : this.getMonth()+1,                 //月份
            "d+" : this.getDate(),                    //
            "h+" : this.getHours(),                   //小时
            "m+" : this.getMinutes(),                 //
            "s+" : this.getSeconds(),                 //
            "q+" : Math.floor((this.getMonth()+3)/3), //季度
            "S"  : this.getMilliseconds()             //毫秒
        };
        if(/(y+)/.test(fmt))
            fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
        for(var k in o)
            if(new RegExp("("+ k +")").test(fmt))
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
        return fmt;
    }


    var loginfo=(msg)=>console.log(`%c【${new Date().Format("yyyy-MM-dd hh:mm:ss")}】%c ========> ${msg}`,"background:red;font-size: 16px; padding: 1px; border-radius: 3px;","background:transparent");

    function InitPage(){
        var subTask = $("#stqc_show");

        if(subTask.length>0)
        {
            loginfo("已找到添加子任务按钮")
            subTask[0].onclick=()=>{
                loginfo("添加子任务onClick事件监听。");
                setTimeout(AddFun,1000);
            }
        }
        else
        {
            loginfo("未找到添加子任务按钮")
        }
    }

    function AddFun()
    {
        var isAdd=false;
        var host = window.location.host;
        if(host=="jira.cares.sh.cn")
        {
            var par = document.getElementById("span_userinfo");
            loginfo("注入填充数据按钮");

            par = $(".form-footer")[0];//field-group
            if(par==undefined) return isAdd;
            var f = par.firstElementChild;

            //填充本周
            var a = document.createElement("a");
            a.id="aLink";
            a.href="#";
            a.style="vertical-align: middle;margin-right: 10px;";
            a.target="_blank"
            a.onclick = ()=>fillData(7);
            a.innerText="填充本周";
            par.insertBefore(a,f);

            //填充1周
            var a1 = document.createElement("a");
            a1.id="aLink";
            a1.href="#";
            a1.style="vertical-align: middle;margin-right: 10px;";
            a1.target="_blank"
            a1.onclick = ()=>fillData(14);
            a1.innerText="填充1周";
            par.insertBefore(a1,f);

            //填充2周
            var a2 = document.createElement("a");
            a2.id="aLink2";
            a2.href="#";
            a2.style="vertical-align: middle;";
            a2.target="_blank"
            a2.onclick = ()=>fillData(21);
            a2.innerText="填充2周";
            par.insertBefore(a2,f);

            //填充2周--按钮
            var a3 = document.createElement("input");
            a3.id="btnFillData";
            a3.type="button";
            a3.className="aui-button aui-button-primary";
            a3.onclick = ()=>fillData(21);
            a3.value="填充2周";
            //par.insertBefore(a3,f);

            isAdd=true;
        }
        return isAdd;
    }

    var fillData = (dayCount)=>{
        loginfo(`给页面表单填充下${dayCount==14?"":"下"}周数据`);
        var d = new Date();
        d.setDate(d.getDate()+ dayCount - d.getDay());
        //$("#duedate")[0].value=d.toLocaleDateString('zh');
        $("#duedate")[0].value=d.Format("yyyy-MM-dd");
        $("#timetracking_originalestimate")[0].value='1w';
        $("#timetracking_remainingestimate")[0].value='1w';
        var endDate=d.Format("MMdd");
        d.setDate(d.getDate() - 6);
        var beginDate=d.Format("MMdd");
        $("#summary")[0].value=`${$("#summary-val")[0].innerText}子任务${d.Format("yyyy")}(${beginDate}-${endDate})`;
        $("#assign-to-me-trigger")[0].click();

        return false;
    }



    // 创建一个定时器,每秒执行一次任务,如果任务完成或超过尝试次数时,停止执行
    /*     var taskCount=0;
    var intervalId = setInterval(function() {
        // 执行任务
        var taskIsFinished = AddFun();// 在这里执行你的任务,并返回执行结果
        taskCount++;
        // 如果任务完成或尝试指定次数时,停止定时器
        if (taskIsFinished || taskCount > 10) {
            clearInterval(intervalId);
        }
    }, 1000); */


})();
View Code
复制代码

 

版本5

优化:移除表格中不能复制的样式

复制代码
// ==UserScript==
// @name         Jira填写
// @namespace    http://tampermonkey.net/
// @version      0.5
// @description  自动填充,每周填写的任务计划
// @author       Jack Meng
// @match        http://jira.cares.sh.cn/secure/CreateSubTaskIssue.*
// @match        http://jira.cares.sh.cn/browse/*
// @match        http://jira.cares.sh.cn/projects/*
// @icon
// @run-at       document-end
// @grant        none
// ==/UserScript==

var SS=(p)=>document.querySelector(p);

(function() {
    'use strict';
    // Your code here...


    $(document).ready(function(){
        // 在此处执行希望在页面加载完成后执行的操作
        setTimeout(InitPage,3000);

    });

    Date.prototype.Format = function(fmt){
        var o = {
            "M+" : this.getMonth()+1,                 //月份
            "d+" : this.getDate(),                    //
            "h+" : this.getHours(),                   //小时
            "m+" : this.getMinutes(),                 //
            "s+" : this.getSeconds(),                 //
            "q+" : Math.floor((this.getMonth()+3)/3), //季度
            "S"  : this.getMilliseconds()             //毫秒
        };
        if(/(y+)/.test(fmt))
            fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
        for(var k in o)
            if(new RegExp("("+ k +")").test(fmt))
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
        return fmt;
    }


    var loginfo=(msg)=>console.log(`%c【${new Date().Format("yyyy-MM-dd hh:mm:ss")}】%c ========> ${msg}`,"background:red;font-size: 16px; padding: 1px; border-radius: 3px;","background:transparent");

    function InitPage(){
        //移除Table的禁止复制
        if(issuePanelTableWrapper!=null){
            var trs=issuePanelTableWrapper.children[0].children[1].rows;
            // 将 HTMLCollection 转换为数组并使用 forEach 遍历每一行
            Array.from(trs).forEach((item, index) =>item.style.userSelect="");
        }

        var subTask = $("#stqc_show");
        if(subTask.length>0)
        {
            loginfo("已找到添加子任务按钮")
            subTask[0].onclick=()=>{
                loginfo("添加子任务onClick事件监听。");
                setTimeout(AddFun,1000);
            }
        }
        else
        {
            loginfo("未找到添加子任务按钮")
        }
        quickSearchInput.value=GM_info.script.author;
    }

    function AddFun()
    {
        var isAdd=false;
        var host = window.location.host;
        if(host=="jira.cares.sh.cn")
        {
            var par = document.getElementById("span_userinfo");
            loginfo("注入填充数据按钮");

            par = $(".form-footer")[0];//field-group
            par = $("#create-issue-submit")[0].parentNode.parentNode;
            if(par==undefined) return isAdd;
            var f = par.firstElementChild;

            //填充本周
            var a = document.createElement("a");
            a.id="aLink";
            a.href="#";
            a.style="vertical-align: middle;margin-right: 10px;";
            a.target="_blank"
            a.onclick = ()=>fillData(7);
            a.innerText="填充本周";
            par.insertBefore(a,f);

            //填充1周
            var a1 = document.createElement("a");
            a1.id="aLink";
            a1.href="#";
            a1.style="vertical-align: middle;margin-right: 10px;";
            a1.target="_blank"
            a1.onclick = ()=>fillData(14);
            a1.innerText="填充1周";
            par.insertBefore(a1,f);

            //填充2周
            var a2 = document.createElement("a");
            a2.id="aLink2";
            a2.href="#";
            a2.style="vertical-align: middle;";
            a2.target="_blank"
            a2.onclick = ()=>fillData(21);
            a2.innerText="填充2周";
            par.insertBefore(a2,f);

            //填充2周--按钮
            var a3 = document.createElement("input");
            a3.id="btnFillData";
            a3.type="button";
            a3.className="aui-button aui-button-primary";
            a3.onclick = ()=>fillData(21);
            a3.value="填充2周";
            //par.insertBefore(a3,f);

            isAdd=true;
        }
        return isAdd;
    }

    var fillData = (dayCount)=>{
        loginfo(`给页面表单填充下${dayCount==14?"":"下"}周数据`);
        var d = new Date();
        d.setDate(d.getDate()+ dayCount - d.getDay());
        //$("#duedate")[0].value=d.toLocaleDateString('zh');
        $("#duedate")[0].value=d.Format("yyyy-MM-dd");
        $("#timetracking_originalestimate")[0].value='1w';
        $("#timetracking_remainingestimate")[0].value='1w';
        var endDate=d.Format("MMdd");
        d.setDate(d.getDate() - 6);
        var beginDate=d.Format("MMdd");
        $("#summary")[0].value=`${$("#summary-val")[0].innerText}子任务${d.Format("yyyy")}(${beginDate}-${endDate})`;
        $("#assign-to-me-trigger")[0].click();

        return false;
    }


    // 创建一个定时器,每秒执行一次任务,如果任务完成或超过尝试次数时,停止执行
    /*     var taskCount=0;
    var intervalId = setInterval(function() {
        // 执行任务
        var taskIsFinished = AddFun();// 在这里执行你的任务,并返回执行结果
        taskCount++;
        // 如果任务完成或尝试指定次数时,停止定时器
        if (taskIsFinished || taskCount > 10) {
            clearInterval(intervalId);
        }
    }, 1000); */


})();
View Code
复制代码

 

posted on   jack_Meng  阅读(212)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-08-18 通过CDN引入jQuery的几种方式
2020-08-18 用7张思维导图带你掌握 “Python学习路线”
2018-08-18 Cisco VPN Client for Windows 7 32/64位
2014-08-18 系列文章--精通CSS.DIV网页样式与布局学习
2014-08-18 实用的树形菜单控件tree

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏

主题色彩