// ==UserScript==
// @name 项目组提问小助手v1.0
// @namespace [email protected]
// @version 1.0.0
// @description 在项目组空间内提问时有了更高效的提问方式,丰富的选项和提示文字可以提升大家的提问效率
// @author lipei
// @match https://kms.fineres.com/qa/questions/ask
// @match https://kms.fineres.com/display/project/qa/questions/ask
// @match https://kms.fineres.com/tnqa/ask.action
// @match https://kms.fineres.com/qa/questions/*
// @match https://kms.fineres.com/display/project/qa/questions/*
// @match https://kms.fineres.com/qa/questions
// @match https://kms.fineres.com/display/project/qa/questions
// @grant none
// @icon https://kms.finedevelop.com/download/resources/com.elitesoftsp.confluence.tiny.question.answer.plugins:tiny-qa-main-res/images/favicon.ico
// ==/UserScript==
(function() {
'use strict';
// Your code here...
window.addCss = function(cssString) {
const head = document.getElementsByTagName('head')[0];
const newCss = document.createElement('style');
newCss.type = "text/css";
newCss.innerHTML = cssString;
head.appendChild(newCss);
}
//添加css的全局方法
//以下是添加标签的一些方法的封装
window.addTag = function(fineTag) {
var chosen = ''; //已经选择的标签
$('li.select2-search-choice').each(function() {
chosen = chosen + $(this).text().trim() + ","
})
if (chosen.indexOf(fineTag) == -1) {
$('input#tags').val(chosen + fineTag.replace("</br>", ""))
console.log(chosen + fineTag.replace("</br>", ""))
$('input#tags').trigger('change')
}
}
window.addClick = function() {
setTimeout(function() {
$('table#t1').find('td[index]').click(function() {
console.log($(this).text())
addTag($(this).text())
})
//非插件的单元格,点击之后直接设置标签为当前值+已选择的标签值
$('#chajian').click(function() {
alert("已经添加所有官方插件的问答标签,请在上方标签输入框中直接搜索插件名称~若搜不到,建议选择最接近的模块")
}) //点击展开官方插件列表
}, 2000)
}
window.getColor = function(name) {
var color = "#00CED1";
if (name.indexOf("finereport-") != -1 || name.indexOf("BI-") != -1) {
color = "#FFFFE0"
} else if (name.indexOf("决策报表-") != -1) {
color = "#FFE1FF"
} else if (name.indexOf("参数-") != -1) {
color = "#F0FFF0"
} else if (name.indexOf("图表-") != -1) {
color = '#D1EEEE'
} else if (name.indexOf("填报-") != -1) {
color = '#8DB6CD'
} else if (name.indexOf("移动端-") != -1) {
color = 'pink'
} else if (name.indexOf("官方插件-") != -1) {
color = '#E0EEEE'
} else if (name.indexOf("展现-") != -1) {
color = '#E0FFFF'
} else if (name.indexOf("平台-") != -1) {
color = '#FAF0E6'
} else if (name.indexOf("独立模块-") != -1) {
color = '#F0F8FF'
} else if (name.indexOf("计算-") != -1 || name.indexOf("输出-") != -1) {
color = '#EEB4B4'
} else if (name.indexOf("设计器-") != -1) {
color = 'FFAEB9'
} else if (name == "js协助") {
color = 'pink'
} else {
color = '#EBEBEB'
}
return color;
}
window.getTitle = function(name) {
var title = name;
switch (name) {
case "图表-需求&方案咨询":
title = "图表的需求和逻辑确认";
break;
case "图表-难还原":
title = "本地不能复现/无法稳定复现的问题";
break;
case "图表-接口":
title = "图表使用中的API接口咨询";
break;
case "图表-报错":
title = "图表的报错/Bug咨询";
break;
case "平台-其他基础模块(不包含于其他标签)":
title = "不包含于其他标签的平台基础内容";
break;
}
return title;
}
window.MakeTags = function(type) {
$('#beforeAll').remove()
var beforeAll =
'<div id="beforeAll" style="width:1500px;margin:0 auto"><table id="t1" class="x-table" style="table-layout:fixed;width:100%;" cellspacing="0" id="0" cellpadding="0"><label style="color:red" id="qiyong">标签名称含【旧】的请勿使用,点击下方单元格可直接添加标签</label><p>选择技巧:选择范围最大的标签,例如在新填报预览的时候入库数据不对,则选“新填报”而不是“填报-提交入库”。</br>如果是定时调度发送短信的功能异常,其他功能正常,则选择“独立模块-短信”而不是“平台-定时调度”</p></table><table id="t2" class="x-table" style="table-layout:fixed;width:100%;" cellspacing="0" id="0" cellpadding="0"><label style="color:red" id="chajian">点我展开官方插件列表</label></table><div>'
$('#main').append(beforeAll); //先添加两个table,要加在main后面,加在content后面的话会格式错乱
$('td[index][name="tags"]').remove()
$('[name="cols"]').remove()
var tags = []
if (type == "common") {
switch ($('input[name="module"]:checked').val()) {
case "报表":
tags = ['finereport-11.0', 'finereport-10.0', 'finereport-9.0', 'finereport-8.0',
'数据源-原生方法(非插件)', '输出-导出pdf', '输出-打印&导出(除了pdf)', '决策报表-设计/制作',
'决策报表-展现/布局', '决策报表-离屏控制', '决策报表-取数/计算','决策报表-新自适应', '参数-参数计算', '参数-参数面板控件', '填报-导入excel',
'填报-控件', '填报-提交入库&插入删除行', '填报-新填报预览', '填报-暂存',
'展现-html解析&参数组合&icu换行', '展现-其他展现效果(例如边框/背景等)', '展现-冻结', '展现-国际化', '展现-折叠树&工具栏&条形码',
'展现-数据分析预览', '展现-条件属性&形态&超链', '展现-水印', '展现-自适应', '独立模块-新前端', '计算-公式计算和解析',
'计算-单元格过滤', '计算-新引擎', '计算-行式引擎&分页sql', '计算-计算性能', '设计器-操作/交互/性能', '设计器-更新升级',
'独立模块-fvs',
'设计器-模板版本管理', '设计器-远程设计', '独立模块-压测相关', '独立模块-多级上报', '独立模块-安全', '独立模块-宕机',
'独立模块-性能问题', '独立模块-性能优化插件',
'独立模块-模板展现性能', '独立模块-独立/嵌入式/集成部署', '独立模块-短信', '独立模块-邮件', '第三方插件功能确认',
'未知-找armstrong'
];
break;
case "平台":
tags = ['finereport-11.0', 'finereport-10.0','finereport-9.0', 'finereport-8.0',
'BI-5.0', 'BI-6.0', '独立模块-注册机制&注册异常', '独立模块-10.0升级工具&问题', '独立模块-公有私有云', '独立模块-web集群',
'平台-8.0&9.0平台数据迁移', '平台-8.0/9.0平台功能', '平台-finedb相关', '平台-logdb相关', '平台-swift相关',
'平台-websocket相关问题', '平台-代理相关', '平台-其他基础模块(不包含于其他标签)', '平台-前台交互&展现逻辑', '平台-外接数据库/迁移',
'平台-外观配置', '平台-安全管理', '平台-官方接口使用', '平台-定时调度', '平台-定时调度-附件', '平台-插件管理',
'平台-智能运维-云端运维',
'平台-智能运维-内存管理/智能检测', '平台-智能运维-备份还原', '平台-智能运维-平台日志', '平台-智能运维-资源迁移', '平台-权限管理',
'平台-模板认证', '平台-注册管理', '平台-用户管理', '平台-登录/用户认证', '平台-单点登录', '平台-目录管理', '平台-移动平台',
'平台-系统管理'
];
break;
case "图表":
tags = ['finereport-11.0', 'finereport-10.0', 'finereport-9.0', 'finereport-8.0', 'BI-5.0', 'BI-6.0',
'图表-报错', '图表-接口', '图表-难还原', '图表-需求&方案咨询','图表-扩展图表', '第三方插件-图表类'
];
break;
case "移动端":
tags = ['finereport-11.0', 'finereport-10.0', 'finereport-9.0', 'finereport-8.0', 'BI-5.0', 'BI-6.0',
"移动端-fr图表", "移动端-后端&性能", "移动端-报表展现", "移动端-控件&oem平台", "移动端-集成&bi"
];
break;
default:
tags = ['finereport-10.0', 'finereport-9.0', 'finereport-8.0', 'BI-5.0', 'BI-6.0',
'数据源-原生方法(非插件)', '输出-导出pdf', '输出-打印&导出(除了pdf)', '决策报表-展现/布局/性能', '决策报表-离屏控制',
'决策报表-设计/制作', '参数-参数计算', '参数-参数面板控件', '填报-导入excel', '填报-控件', '填报-提交入库&插入删除行',
'填报-新填报预览', '填报-暂存',
'展现-html解析&参数组合&icu换行', '展现-其他展现效果(例如边框/背景等)', '展现-冻结', '展现-国际化', '展现-折叠树&工具栏&条形码',
'展现-数据分析预览', '展现-条件属性&形态&超链', '展现-水印', '展现-自适应', '独立模块-新前端', '计算-公式计算和解析',
'计算-单元格过滤', '计算-新引擎', '计算-行式引擎&分页sql', '计算-计算性能', '设计器-操作/交互/性能', '设计器-更新升级',
'设计器-模板版本管理', '设计器-远程设计', '平台-8.0&9.0平台数据迁移', '平台-8.0/9.0平台功能', '平台-finedb相关',
'平台-logdb相关', '平台-swift相关',
'平台-websocket相关问题', '平台-代理相关', '平台-其他基础模块(不包含于其他标签)', '平台-前台交互&展现逻辑', '平台-外接数据库/迁移',
'平台-外观配置', '平台-安全管理', '平台-官方接口使用', '平台-定时调度', '平台-定时调度-附件', '平台-插件管理',
'平台-智能运维-云端运维',
'平台-智能运维-内存管理/智能检测', '平台-智能运维-备份还原', '平台-智能运维-平台日志', '平台-智能运维-资源迁移', '平台-权限管理',
'平台-模板认证', '平台-注册管理', '平台-用户管理', '平台-登录/用户认证', '平台-单点登录', '平台-目录管理', '平台-移动平台',
'平台-系统管理', '独立模块-fvs', '独立模块-10.0升级工具&问题',
'独立模块-web集群', '独立模块-公有私有云', '独立模块-压测相关', '独立模块-多级上报', '独立模块-安全', '独立模块-宕机',
'独立模块-性能问题', '独立模块-性能优化插件',
'独立模块-模板展现性能', '独立模块-注册机制&注册异常', '独立模块-独立/嵌入式/集成部署', '独立模块-短信', '独立模块-邮件', '图表-报错',
'图表-接口', '图表-难还原', '图表-需求&方案咨询', '第三方插件-图表类', "移动端-fr图表", "移动端-后端&性能", "移动端-报表展现",
"移动端-控件&oem平台", "移动端-集成&bi", '未知-找armstrong', '第三方插件功能确认'
]
}
} else {
tags = ['finereport-11.0', 'finereport-10.0', 'finereport-9.0', 'finereport-8.0', 'BI-5.0', 'BI-6.0',
"js协助", "独立模块-安全", "数据源-原生方法(非插件)", "平台-代理相关", "平台-外接数据库", "平台-单点登录", "独立模块-web集群",
'独立模块-宕机', '独立模块-性能问题', "独立模块-模板展现性能", "独立模块-独立/嵌入式/集成部署"
]
}
var len = tags.length; //标签的总个数
var everyCol = type = "common" ? 12 : 5; //每列标签的个数
console.log(len + "," + everyCol)
for (let j = 0; j < everyCol; j++) {
$('table#t1').append('<tr name="cols" col="' + j + '"></tr>'); //生成了everyCol个tr元素
}
var colNum = parseInt(len / Number(everyCol)) + 1; //要生成的列数=取整(元素数量/每行元素数量)+1
console.log(colNum)
for (let i = 0; i < everyCol; i++) //i行
{
for (let t = 0; t < colNum; t++) //t列
{
if (tags[Number(Number(t * everyCol) + i)] != undefined) {
var myName = tags[Number(Number(t * everyCol) + i)];
$('table#t1').find('tr[col="' + i + '"]').append('<td name="tags" title=' + getTitle(
myName) + ' index=' + Number(Number(t * everyCol) + i) +
' style="cursor:pointer;font-size:16px;border:thin solid #00CED1;background-color:' +
getColor(myName) + '">' + myName + '</td>')
}
}
}
}
//以上为生成标签列表的功能
//
//
if (window.location.href.indexOf("ask") != -1) {
const radioCss = `
.radio {
margin: 0.1rem;
}
.radio-label {
font-weight:bold;
}
.radio input[type="radio"]:checked + .radio-label:before {
background-color: #3197EE;
box-shadow: inset 0 0 0 4px #f4f4f4;
}
}`
window.addCss(radioCss)
//标签输入的合理性校验
$('input#post').mouseenter(function() {
window.chosen = ''; //已经选择的标签
var zhuanjia_tags = ['fr技术支持', 'finereport-11.0', 'finereport-10.0', 'finereport-7.0',
'finereport-8.0', 'finereport-9.0', 'fr专家协助', "js协助", "独立模块-安全", "数据源-原生方法(非插件)",
"平台-代理相关", "平台-外接数据库", "平台-单点登录", "平台-登录", "独立模块-web集群", "独立模块-宕机", "独立模块-性能问题",
"独立模块-模板展现性能", "独立模块-独立/嵌入式/集成部署"
]
var common_tags = ['fr技术支持', 'finereport-11.0', 'finereport-10.0', 'finereport-7.0',
'finereport-8.0', 'finereport-9.0', 'fr专家协助'
]
window.incorrect_tags = []
window.module_tags = [] //已经选择的模块标签数组
$('li.select2-search-choice').each(function() {
chosen = chosen + $(this).text().trim() + ",";
if (zhuanjia_tags.indexOf($(this).text().trim()) < 0) {
incorrect_tags.push($(this).text())
} //incorrect_tags存储的是非专家模块的标签个数
if (common_tags.indexOf($(this).text().trim()) < 0) {
module_tags.push($(this).text())
} //module_tags存储的是除了固定的几个标签以外,指定模块的标签
})
if (chosen.indexOf("fr技术支持") >= 0) {
if (chosen.indexOf("finereport-") < 0) {
alert("别忘了选择版本标签~")
}
if (chosen.indexOf("fr专家协助") >= 0 && incorrect_tags.length > 0) {
alert("您选择了一个不在专家协助范围内的标签,请去除~")
}
if (module_tags.length == 0) {
alert("您没有选择功能模块标签,这会导致问题无法推送")
}
}
})
document.getElementById("title").value = "【报表】【问题】问题描述"
//标题
$('input#postSpaceKeyAutoComplete').attr("placeholder", "请手动输入kms空间,然后下拉列表选择") //提示文字
$('#postSpaceKey').val('project').trigger('change');
document.getElementById('postSpaceKey').value = "project";
document.getElementById('postSpaceName').value = "3.1 项目组";
document.getElementById('question-body_ifr').contentDocument.getElementById('tinymce').innerHTML =
"<p>【问题描述】:</p><p>【已查文档】:</p><p>【JAR包版本】:</p><p>【相关插件】:</p><p>【环境信息】:</p><p>【相关日志】:</p><p>【报错截图】:</p>";
document.getElementById('question-body_ifr').contentDocument.getElementById('tinymce').title =
`【已查文档】:若查阅了相关文档但仍未解决,可以反馈给三线优化
【问题描述】:写上执行过的排查步骤,需求类问题需补充上客户的完整需求场景
【环境信息】:若对环境有特殊需求则备注上方便定问
【JAR包版本/相关插件】:如果不是最新版本,补充不能升级的原因;以及插件的影响
【截图/日志附件】:尽量获取日志和内置数据集模版,使用insert link来上传文件
`
//内容和标题填充
var notice =
'<label style="color:green;">标签不少于3项(团队+版本+模块),团队已经自动选择为项目组</br>点击最下方表格,可自动添加标签</br>问答推送时间:上午11点15&下午16点15,加急请找young.yang</label>'
$('input#tags').parent('div.form-item').children('label').click(function() {
window.open("https://kms.fineres.com/pages/viewpage.action?pageId=110273236")
})
$('input#tags').parent('div.form-item').children('label').css("text-decoration", "underline").css("color",
"blue") //标签可点击,高亮
$('input#tags').parent('div.form-item').children('label').eq(0).after(notice);
//标签说明
//这部分无论选什么都不会变
var target =
'<div style="display:none"><label style="font-size:20px;color:royalblue;font-weight:bold;">请选择向谁提问</label></div><div class="radio" style="display:none"><input type="radio" class="radio-label" name="target" id="putong" value="普通版"</input><label for="putong" class="radio-label">普通版</label></div>';
var module =
'<div style="display:inline"><label style="font-size:20px;color:turquoise;font-weight:bold">问题模块</label></div><div class="radio" style="display:inline"><input type="radio" class="radio-label" name="module" id="report" checked value="报表"</input><label class="radio-label" for="report" >报表</label></div><div class="radio" style="display:inline"><input type="radio" class="radio-label" name="module" id="chart" value="图表"</input><label for="chart" class="radio-label">图表</label></div><div class="radio" style="display:inline"><input type="radio" class="radio-label" name="module" id="mobile" value="移动端"</input><label class="radio-label" for="mobile" >移动端</label></div><div class="radio" style="display:inline"><input type="radio" class="radio-label" name="module" id="dec" value="平台"</input><label for="dec" class="radio-label">平台</label></div><br/>';
var type =
'<div style="display:inline"><label style="font-size:20px;color:SkyBlue;font-weight:bold">问题类型</label></div><div class="radio" style="display:inline"><input type="radio" class="radio-label" name="leixing" id="wenti" checked value="问题"</input><label for="wenti" class="radio-label">问题</label></div><div class="radio" style="display:inline"><input type="radio" class="radio-label" name="leixing" id="xuqiu" value="需求"</input><label for="xuqiu" class="radio-label">需求</label></div>'
$('#question-form > div.page-title > h1').before("<div >" + module + "<br>" + type + "<br>" + target +
"</div>")
setTimeout(function() {
$('input[type="radio"][name="target"][value="普通版"]').click()
}, 2000)
$('input[type="radio"][name="target"]').click(function() {
$('a[name="my-link"]').remove()
$('#ps').remove()
if ($(this).val() == "普通版") {
$('#tags').val('项目组')
$('#tags').trigger('change')
$("[name='xswl']").remove()
$("[name='yqtx']").remove()
//$('.post-editor').after("<div id='ps'><p style='color:red;font-size:25px'>P.S</p><p>详情有图片现象则直接贴图,省去下载的步骤。</p><p>如果对这个问题做出了自己的尝试,务必列出排查过程</p><p>说明主要疑问可以帮助理解,解决问题更高效</p><p>相关插件若无则不写</p><p>使用insert link来上传文件,尽量截取与问题相关的那一段日志,尽量避免整个上传</p></div>")
$('#question-form > div.page-title > h1').append(
'<a name="my-link" target="_blank" href="https://kms.fineres.com/pages/viewpage.action?pageId=399969739"> 请熟读问答规范</a>'
)
//加两个超链
MakeTags("common");
addClick()
} else {
$('#tags').val('fr技术支持,fr专家协助,finereport-10.0')
$('#tags').trigger('change')
$('#chajian').remove()
$("[name='xswl']").remove()
$('#question-form > div.page-title > h1').append(
'<a name="my-link" target="_blank" href="https://kms.fineres.com/pages/viewpage.action?pageId=250009228"> 来看看专家负责的问题</a>'
)
$('#question-form > div.page-title > h1').append(
"<label name='xswl' style='color:red'> ←这是一个超链</label><label name='yqtx' style='color:green'><br/>专家版仅支持选择表格中列出的标签!!其他勿选!!</label>"
)
MakeTags("special")
addClick()
}
})
$('input[type="radio"][name!="target"][id]').click(function() {
MakeTags("common")
addClick()
document.getElementById("title").value = "【" + $('input[name="module"]:checked').val() + "】【" +
$('input[name="leixing"]:checked').val() + "】问题描述"
}) //上面两个单选按钮组选中时修改标题
$('label[for="xuqiu"]').click(function() {
var xuqiukanban =
"<a id='xuqiukanban' href='https://bi.finereporthelp.com/webroot/decision/link/R3lT' style='font-weight:bold;font-color:red' target='_blank_'>请先打开需求查询看板进行搜索</a>"
if ($('#xuqiukanban').length == 0) {
$(this).after(xuqiukanban)
}
})
} else if (window.location.href.indexOf("edit") != -1) {
setTimeout(function() {
console.log("编辑界面")
MakeTags("common")
addClick()
}, 1000)
} else {
function MySearch() {
var inputString = $('#question-search').children('input').attr("value");
if (inputString.length == 0) {
alert("请输入搜索内容")
} else {
window.open('https://kms.fineres.com/dosearchsite.action?cql=siteSearch+~+"' + inputString +
'"+and+type+%3D+%22com.elitesoftsp.confluence.tiny.question.answer.plugins%3Aquestion%22')
}
window.open('http://knowledge.fanruan.com/index.php?search-fulltext-title-' + inputString)
}
if (window.location.href.indexOf("qa/questions/?page=") != -1 || window.location.href ==
"https://kms.fineres.com/display/project/qa/questions" || window.location.href ==
"https://kms.fineres.com/qa/questions") {
console.log("首页")
setTimeout(function() {
$('#content').css("max-width", "none")
$('#question-search').after('<button id="myButton">点我可以全文检索</button>')
$('a.question-hyperlink[href^="/display/project/qa/questions/"]').css("font-size", "18px")
.css("font-weight", 700).css("color", "rgba(64,116,52,0.8)")
$('.excerpt').eq(0).css("color", "rgba(3,38,58,1").css("font-weight", 500)
//修改字体样式
var w = $('.status').eq(0).css("width")
var ht = $('.status').eq(0).css("height")
var imgg = '<div align="center" style="width:' + w + ';height:' + ht +
'"><img id="solved" alt="Solved" title="Solved" src="/download/resources/com.elitesoftsp.confluence.tiny.question.answer.plugins:tiny-qa-main-res/images/accepted.png"></div>'
$('.question-summary').has('#solved-question').each(function() {
$(this).find('.statscontainer').find('.stats').find('.status').after(imgg)
})
//闭环更明显
$('#myButton').click(function() {
MySearch()
})
}, 500)
//全文检索功能
}
}
})();