Greasy Fork is available in English.

提问小助手v2.1

在技术支持空间内提问时有了更高效的提问方式,丰富的选项和提示文字可以提升大家的提问效率

Version vom 16.12.2021. Aktuellste Version

// ==UserScript==
// @name         提问小助手v2.1
// @namespace    armstrong@fanruan.com
// @version      3.9.1
// @description  在技术支持空间内提问时有了更高效的提问方式,丰富的选项和提示文字可以提升大家的提问效率
// @author       Armstrong
// @match        https://kms.fineres.com/qa/questions/ask
// @match        https://kms.fineres.com/display/support/qa/questions/ask
// @match        https://kms.fineres.com/tnqa/ask.action
// @match        https://kms.fineres.com/qa/questions/*
// @match        https://kms.fineres.com/display/support/qa/questions/*
// @match        https://kms.fineres.com/qa/questions
// @match        https://kms.fineres.com/display/support/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("已经添加所有官方插件的问答标签,请在上方标签输入框中直接搜索插件名称~搜不到请联系Armstrong")
})//点击展开官方插件列表

},2000)
}
window.getColor=function(name){
        var color="#00CED1";
       if(name.indexOf("finereport-")!=-1)
       {color="#FFFFE0"}
       else if (name.indexOf("决策报表-")!=-1)
       {color="#FFE1FF"}
       else if (name.indexOf("参数-")!=-1)
       {color="#F0FFF0"}
       else if (name.indexOf("图表-")!=-1||(name.indexOf("移动端")!=-1))
       {color='#D1EEEE'}
       else if(name.indexOf("填报-")!=-1)
       {color='#8DB6CD'}
       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-7.0','finereport-8.0','finereport-9.0','数据源-原生方法(非插件)','输出-导出pdf','输出-打印&导出(除了pdf)','决策报表-展现/布局/性能','决策报表-离屏控制','决策报表-设计/制作','参数-参数计算','参数-参数面板控件','填报-导入excel','填报-控件','填报-提交入库&插入删除行','填报-新填报预览','填报-暂存',
    '展现-html解析&参数组合&icu换行','展现-其他展现效果(例如边框/背景等)','展现-冻结','展现-国际化','展现-折叠树&工具栏&条形码',
    '展现-数据分析预览','展现-条件属性&形态&超链','展现-水印','展现-自适应','计算-公式计算和解析',
    '计算-单元格过滤','计算-新引擎','计算-行式引擎&分页sql','计算-计算性能','设计器-操作/交互/性能','设计器-更新升级',
    '设计器-模板版本管理','设计器-远程设计','独立模块-压测相关','独立模块-多级上报','独立模块-安全','独立模块-宕机&性能问题','独立模块-性能优化插件',
    '独立模块-模板展现性能','独立模块-独立/嵌入式/集成部署','独立模块-短信','独立模块-邮件','第三方插件功能确认','未知-找armstrong'];
    break;
    case "平台":
    tags=['finereport-11.0','finereport-10.0','finereport-7.0','finereport-8.0','finereport-9.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-7.0','finereport-8.0','finereport-9.0','图表-报错','图表-接口','图表-难还原','图表-需求&方案咨询','第三方插件-图表类'];
    break;
    case "移动端":
    tags=['finereport-11.0','finereport-10.0','finereport-7.0','finereport-8.0','finereport-9.0',"移动端"];
    break;
    default:
    tags=['finereport-10.0','finereport-7.0','finereport-8.0','finereport-9.0','数据源-原生方法(非插件)','输出-导出pdf','输出-打印&导出(除了pdf)','决策报表-展现/布局/性能','决策报表-离屏控制','决策报表-设计/制作','参数-参数计算','参数-参数面板控件','填报-导入excel','填报-控件','填报-提交入库&插入删除行','填报-新填报预览','填报-暂存',
    '展现-html解析&参数组合&icu换行','展现-其他展现效果(例如边框/背景等)','展现-冻结','展现-国际化','展现-折叠树&工具栏&条形码',
    '展现-数据分析预览','展现-条件属性&形态&超链','展现-水印','展现-自适应','计算-公式计算和解析',
    '计算-单元格过滤','计算-新引擎','计算-行式引擎&分页sql','计算-计算性能','设计器-操作/交互/性能','设计器-更新升级',
    '设计器-模板版本管理','设计器-远程设计','平台-8.0&9.0平台数据迁移','平台-8.0/9.0平台功能','平台-finedb相关','平台-logdb相关','平台-swift相关',
    '平台-websocket相关问题','平台-代理相关','平台-其他基础模块(不包含于其他标签)','平台-前台交互&展现逻辑','平台-外接数据库/迁移',
    '平台-外观配置','平台-安全管理','平台-官方接口使用','平台-定时调度','平台-定时调度-附件','平台-插件管理','平台-智能运维-云端运维',
    '平台-智能运维-内存管理/智能检测','平台-智能运维-备份还原','平台-智能运维-平台日志','平台-智能运维-资源迁移','平台-权限管理',
    '平台-模板认证','平台-注册管理','平台-用户管理','平台-登录/用户认证','平台-单点登录','平台-目录管理','平台-移动平台','平台-系统管理','独立模块-10.0升级工具&问题',
    '独立模块-web集群','独立模块-公有私有云','独立模块-压测相关','独立模块-多级上报','独立模块-安全','独立模块-宕机&性能问题','独立模块-性能优化插件',
    '独立模块-模板展现性能','独立模块-注册机制&注册异常','独立模块-独立/嵌入式/集成部署','独立模块-短信','独立模块-邮件','图表-报错','图表-接口','图表-难还原','图表-需求&方案咨询','第三方插件-图表类','移动端','未知-找armstrong','第三方插件功能确认']
      }}
    else {
     tags=['finereport-11.0','finereport-10.0','finereport-7.0','finereport-8.0','finereport-9.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("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('support').trigger('change');
document.getElementById('postSpaceKey').value="support";
document.getElementById('postSpaceName').value="3.2 技术支持组";
document.getElementById('question-body_ifr').contentDocument.getElementById('tinymce').innerHTML=
"<p>【BUG链接】:</p><p>【现象】:</p><p>【详情】:</p><p>【主要疑问】:</p><p>【已参考的文档】:</p><p>【JAR包版本】:</p><p>【相关插件】:</p><p>【运行环境】:</p><p>【日志】:</p>";
    document.getElementById('question-body_ifr').contentDocument.getElementById('tinymce').title=
        `【SLA链接】:若关联,请务必直接复制SLA链接,后台可以识别到SLA信息来反馈给研发
【参考过的文档】:若查阅了相关文档但仍未解决,可以说明一下,减少重复工作
【详情】:写上执行过的排查步骤,如查询知识库/需求看板、二分法到最简;需求类问题需补充上客户的完整需求场景
【主要疑问】:结合当前问题的核心阻塞点来提问,多个问题可以用序号分开
【JAR包版本/相关插件】:如果不是最新版本,补充不能升级的原因;看看是否有二开插件
【附件】:尽量获取日志和内置数据集模版,使用insert link来上传文件
        `
//内容和标题填充
var notice='<label  style="color:green;">标签不少于3项(团队+版本+模块),团队已经自动选择为fr技术支持。</br>模块项请选择最接近标签,后台根据标签推送给问题的责任研发/模块专家,<a target="_blank_" href="https://kms.fineres.com/pages/viewpage.action?pageId=281122133">标签选择常见问题</a>!</br>点击最下方的表格,可自动添加标签,不用再搜索啦!</br>问答推送时间:上午11点15&下午16点15,加急请找larry或<a target="_blank_" href="https://www.jiandaoyun.com/app/59f96c4ae1ddba302aaa624a/entry/607803373bb0e00007a5c5b5">填写表单</a></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:inline"><label style="font-size:20px;color:royalblue;font-weight:bold;">请选择向谁提问</label></div><div class="radio" style="display:inline"><input type="radio" class="radio-label" name="target" id="putong" value="普通版"</input><label for="putong" class="radio-label">普通版</label></div><div class="radio" style="display:inline"><input type="radio" class="radio-label" name="target" id="zhuanjia" value="专家版(快速响应,多渠道推送)"</input><label for="zhuanjia" 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="bi" value="BI"</input><label for="bi" class="radio-label">BI</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>';
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">需求(确认逻辑/不知道是需求还是BUG)</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('fr技术支持')
  $('#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=101228930">&nbsp;&nbsp;&nbsp;&nbsp;请熟读问答规范</a>')
$('#question-form > div.page-title > h1').append('<a  name="my-link" target="_blank" href="https://kms.fineres.com/pages/viewpage.action?pageId=89685745">&nbsp;&nbsp;&nbsp;&nbsp;高效提问,请看我</a>')
$('#question-form > div.page-title > h1').append("<label name='xswl' style='color:red'>  ←这是两个超链</label>")
//加两个超链
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">&nbsp;&nbsp;&nbsp;&nbsp;来看看专家负责的问题</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/support/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/support/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)
  //全文检索功能
}
}
})();