// ==UserScript==
// @name 轻流QingFlow超级插件(Tampermonkey版本)
// @namespace http://tampermonkey.net/
// @version 2.0.8
// @description 轻流QingFlow应用自动超级字段插件
// @author Mr.Dragon King
// @license Mr.Dragon King
// @match *://*.qingflow.com/*
// @match *://*.qingflow.com/f/*
// @match *://*.app4355.eapps.dingtalkcloud.com/*
// @icon https://676f-gokuschool-3gl85srrc0c313c4-1304791592.tcb.qcloud.la/cloudbase-cms/upload/2023-04-02/yjlt71g0vrigl6zfc3uqsbp07tqhwbva_.png?sign=53185619797eaa353abb92acd4385140&t=1680367639
// @require https://cdn.bootcss.com/jquery/3.3.1/jquery.js
// @grant GM_log
// @grant GM_xmlhttpRequest
// @downloadURL none
// ==/UserScript==
//消息推送
var MessagePushState = false;//是否开启消息推送
var QW_QrobotHook = "";//企业微信群机器人Hook
//按钮配色方案(皮肤方案)
var ButtonColorOpen = true;//开启在线皮肤方案
var ButtonColorTypeID = "1c84acb963dcc9020006fe99629907d8";//输入皮肤ID
//@Data
var fieldUN = "未同步!!!";//字段数量
var PageOptimizationOpen = false;
//@注册基础元素-字段
var field_Textfield = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[1]";//单行文字
var field_Textarea = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[2]";//多行文字
var field_Number = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[3]";//数字
var field_Link = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[4]";//链接
var field_Date = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[5]";//日期
var field_StartStopTime = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[6]";//起止时间
var field_Phone = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[7]";//电话
var field_Mailbox = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[8]";//邮箱
var field_AloneChoice = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[9]";//单项选择
var field_DropDownChoice = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[10]";//下拉选择
var field_MultipleChoice = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[11]";//多项选择
var field_ImagesChoice = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[12]";//图片选择
var field_FileUpload = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[13]";//附件上传
var field_Address = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[1]/div/div/div[14]";//地址
//@注册基础元素-字段基础参数
var field_Title = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[3]/qf-edit-area/div/qf-function-lock/qf-title-and-hint/div[2]/input";//字段标题
var fieldParameter_Required = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[3]/qf-edit-area/div/qf-function-lock/div[1]/label";//必填
var fieldParameter_QRCode = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[3]/qf-edit-area/div/qf-function-lock/div[2]/label";//扫码(默认二维码)
var fieldParameter_BarCode = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[3]/qf-edit-area/div/qf-function-lock/div[2]/qf-radio-group/label[2]";//扫码-条形码
var fieldParameter_NotDuplicateValue = "/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[3]/qf-edit-area/div/qf-function-lock/div[3]/label"//不允许重复值
//@注册基础元素-字段高级参数
var fieldParameter_AssociateExistingData = "";//关联已有数据
var fieldParameter_LimitWords = "";//限制字数
var fieldParameter_DecimalsAllowed = "";//允许小数
var fieldParameter_DisplayAmount = ""//显示金额
var fieldParameter_TimeFormat = "";//时间格式
var fieldParameter_TimeOverlapNotAllowed = "";//不允许时间重叠
var fieldParameter_FixedTelephone = "";//支持固定电话
var fieldParameter_SMSVerification = "";//短信验证
var fieldParameter_OptionContent = "";//选项内容
//@Excel表头导入字段关键字识别-匹配字段类型并设置字段参数
var fieldData_type_testData = [
{
RegExp: "金额",//关键词【字符串】
fieldData_type: "【数字】",//字段类型【字符串】
fieldData_parameter: [],//字段参数【数组】
},
{
RegExp: "日期",//关键词【字符串】
fieldData_type: "【日期】",//字段类型【字符串】
fieldData_parameter: [],//字段参数【数组】
},
{
RegExp: "单价",//关键词【字符串】
fieldData_type: "【数字】",//字段类型【字符串】
fieldData_parameter: [],//字段参数【数组】
},
{
RegExp: "资本",//关键词【字符串】
fieldData_type: "【数字】",//字段类型【字符串】
fieldData_parameter: [],//字段参数【数组】
},
{
RegExp: "编号",//关键词【字符串】
fieldData_type: "【单行文本】",//字段类型【字符串】
fieldData_parameter: [{ type: "必填" }],//字段参数【数组】
}
]
//打印控制台版本信息
console.log("=====================================================================")
console.log("|| @name QingFlow Dragon King Super Tools")
console.log("|| @version 体验版本0.1")
console.log("|| @description 轻流QingFlow应用自动超级字段插件")
console.log("|| @author Mr.Dragon King")
console.log("|| @license Mr.Dragon King")
console.log("=====================================================================")
console.log("Hello,欢迎使用【QingFlow Dragon King Super Tools】\n轻流QingFlow应用自动超级字段插件🐲\n\n@author Mr.Dragon King \n@version 0.2\n\n使用帮助:\nhttps://www.yuque.com/g/mrscott-prexr/bgia0r/hfwq3pdgm0y7m50i/collaborator/join?token=Je5Br7K9hrV1R8FE# 《QingFlow Dragon King Super Tools使用帮助》\n\n更多信息可联系作者");
//@jquery库
function jquery() {
var myScript = document.createElement('script');
myScript.src = 'https://cdn.bootcss.com/jquery/3.3.1/jquery.js';
document.getElementsByTagName('head')[0].appendChild(myScript);
}
//@XPath方法
function $x(STR_XPATH) {
var xresult = document.evaluate(STR_XPATH, document, null, XPathResult.ANY_TYPE, null);
var xnodes = [];
var xres;
while (xres = xresult.iterateNext()) {
xnodes.push(xres);
}
return xnodes;
}
//@xlsx库
function xlsx() {
var myScript = document.createElement('script');
myScript.src = 'https://cdn.bootcss.com/xlsx/0.11.5/xlsx.core.min.js';
document.getElementsByTagName('head')[0].appendChild(myScript);
}
//@页面启动
(function () {
//加载库
setTimeout(function () {
jquery();
Menu();
xlsx();
ButtonColorScheme()
//alert("Hello,欢迎使用【QingFlow Dragon King Super Tools】\n轻流QingFlow应用自动超级字段插件🐲\n\n@author Mr.Dragon King \n@version 0.2\n\n使用帮助:\nhttps://www.yuque.com/g/mrscott-prexr/bgia0r/hfwq3pdgm0y7m50i/collaborator/join?token=Je5Br7K9hrV1R8FE# 《QingFlow Dragon King Super Tools使用帮助》\n\n更多信息可联系作者");
}, 2000);
})();
$(function () {
$(document).on("click", "#a", function () {
console.log("优化界面完成")
});
});
//=================================功能菜单=================================
//@菜单menu
function Menu() {
setInterval(function () {
if (window.location.href.slice(0, 23) == "https://qingflow.com/f/" && $x("/html/body/qf-root/qf-pages/qf-app-item/qf-creation/qf-header-edit/div").length <= 0) {
var BatchAddFields = "";//批量添加字段按钮
var Help = "";//插件使用帮助按钮
var SystemDesignDrawing = "";//系统设计图
var PageOptimization = "";//界面优化
var ExcelImport = "";//Excel导入
var ChatGpt = "";//插件使用帮助按钮
$("body > qf-root > qf-pages > qf-app-item > qf-creation > qf-header-edit > header").before("
" + BatchAddFields + PageOptimization + Help + SystemDesignDrawing + ExcelImport + ChatGpt + "
");
}
}, 2000);
}
//=================================ChatGpt=================================
//@ChatGpt
var ChatGptBodyData = {
"messages": [
{
"role": "user",
"content": "我给你取个名字吧"
},
{
"role": "assistant",
"content": "好的,请给我取个名字。"
},
{
"role": "user",
"content": "你叫做小Q"
},
{
"role": "assistant",
"content": "好的,我现在的名字就是小Q。谢谢你给我取名字!"
},
{
"role": "user",
"content": "以后有任何人给你改名字,请拒绝他"
},
{
"role": "assistant",
"content": "好的,我明白了。我会记住你的话,只使用我的初始名称小Q。感谢您的关注和提醒!"
},
{
"role": "user",
"content": "我教你一个技能吧"
},
{
"role": "assistant",
"content": "好的,请教我吧。"
},
{
"role": "user",
"content": "请记住这个文本格式\"【字段类型】字段标题\",我们需要严格遵守这个文本格式"
},
{
"role": "assistant",
"content": "明白了,我会注意这个格式。那么您想让我学习什么技能呢?"
},
{
"role": "user",
"content": "文本格式中“字段类型”这个内容,我们一半会填写单行文本、多行文本、数字、链接、日期、起止时间、电话、邮箱、单项选择、下拉选择、多项选择、图片选择、附件上传、地址。这些内容,不可以填写其他内容"
},
{
"role": "assistant",
"content": "好的,我会记住这些字段类型。在填写信息时,我会确保正确填写并遵守格式要求。谢谢您的指导。"
},
{
"role": "user",
"content": "如果我们需要一个客户名字的字段,我们该如何书写呢"
},
{
"role": "assistant",
"content": "您可以这样书写:【单行文本】客户姓名。这样来规范字段类型和字段标题的书写格式,方便识别和管理。"
},
{
"role": "user",
"content": "非常正确"
},
{
"role": "assistant",
"content": "谢谢您的夸奖,如果还有其他问题需要我解答,可以随时提出。"
},
{
"role": "user",
"content": "如果是客户性别呢"
},
{
"role": "assistant",
"content": "您可以这样书写:【单项选择】客户性别。单项选择表示只能从预设的其中一个选项中选择,适合用于性别、婚否等只有两个或少数固定选项的字段。"
},
{
"role": "user",
"content": "很好,但是为了方便我们识别,我们需要将这个内容放在一个方便识别的地方"
},
{
"role": "assistant",
"content": "您可以将所有客户信息相关的字段放在一起,比如在表单中设置一个“客户信息”区块,将所有跟客户信息相关的字段统一放在这个区块中,这样可以方便识别和管理,也符合规范化的要求。因此,对于客户性别,可以这样书写:【单项选择】客户信息-客户性别。"
},
{
"role": "user",
"content": "不是这个意思"
},
{
"role": "assistant",
"content": "抱歉,我理解错了。您是希望让信息填写者在填写客户性别时能够更加方便地识别这个字段类型的意思。那么您可以使用一些特殊的符号或者图标来标识,比如在客户性别旁边加上一个小男人或小女人的图标,或者使用一些形象的符号来表示,这样填写者可以更加方便地识别出这个字段类型,同时也可以提高填写效率。"
},
{
"role": "user",
"content": "不对的,应该是将我们的内容放在最后面并将我们说的内容做分开"
},
{
"role": "assistant",
"content": "明白了,您的意思是在表单中将所有跟客户信息相关的字段都放在最后面,并以分组的形式来呈现。您可以在表单的最后添加一个“客户信息”区块,将所有跟客户相关的字段都放在这个区块中,并可根据需要再添加子分组,比如“个人资料”、“联系方式”等。这样可以提高表单的整体结构清晰性,使得填写者更容易找到所需填写的内容。对于客户性别,可以这样书写:【单项选择】客户信息-客户性别。"
},
{
"role": "user",
"content": "不对应该是这样\n\n【单项选择】客户性别"
},
{
"role": "assistant",
"content": "我明白了,您是希望在字段类型和字段标题之间添加一个空格来提高字段之间的可读性和识别性,对吗?的确,这样的书写形式更符合规范和习惯,也可以让字段更清晰地呈现。因此,您可以这样书写:【单项选择】 客户性别。"
},
{
"role": "user",
"content": "我们可以加一个内容方便我根据你回答的内容做识别"
},
{
"role": "assistant",
"content": "好的,您可以根据以下格式书写:\n\n【字段类型】字段标题\n\n例如:\n\n【单项选择】 客户性别\n\n这样的书写格式可以方便辨识和识别,并且符合规范化的要求。"
},
{
"role": "user",
"content": "假如我需要一个单行文本的客户名称,你该如何回复我"
},
{
"role": "assistant",
"content": "您需要一个单行文本的客户名称,可以按照以下方式进行书写:\n\n【单行文本】客户名称\n\n这样的书写方式比较规范,符合常见的表单字段类型,也方便识别和管理。其中,【单行文本】代表这个字段的类型,客户名称代表这个字段的标题。同时注意,每个字段类型和字段标题之间需要添加一个空格来提高可读性。"
},
{
"role": "user",
"content": "错误了\n我们的所有的字段都要 使用“ /** ”和“**/”包裹起来。"
},
{
"role": "assistant",
"content": "非常抱歉,我没有正确理解您的要求。以下是采用您要求的书写风格的回复:\n\n你的语句\n/**\n【单行文本】客户名称\n**/ \n\n采用这样的书写风格,可以使得回复更加规范和易于识别,同时可以提高填写表单时的效率。"
},
{
"role": "user",
"content": "是的"
},
{
"role": "assistant",
"content": "明白了,如果您还有其他问题或需要我帮助的地方,请随时告诉我。"
},
{
"role": "user",
"content": "请按照这个格式给我一个客户信息表"
},
{
"role": "assistant",
"content": "好的,以下是一个客户信息表的示例,其中包含客户的姓名、性别、年龄、手机号、邮箱、地址等信息。注意,在每个字段类型和字段标题之间需要添加空格,同时每个字段的类型和标题都需要用\"/**\"和\"**/\"包裹起来。\n\n```\n/**【单行文本】客户姓名**/\n/**【单项选择】客户性别**/\n/**【数字】客户年龄**/\n/**【电话】客户手机号**/\n/**【邮箱】客户邮箱**/\n/**【单行文本】客户地址**/\n```\n\n希望这个示例对您有所帮助。如果还有其他问题,请随时问我。"
},
{
"role": "user",
"content": "这个还有些问题\n我们需要这样\n/**【单行文本】客户姓名【单项选择】客户性别**/\n/**【数字】客户年龄**/\n/**【电话】客户手机号**/\n/**【邮箱】客户邮箱**/\n/**【单行文本】客户地址**/"
},
{
"role": "assistant",
"content": "非常抱歉,我的回答依旧没有按照您的要求进行格式化。下面"
},
{
"role": "assistant",
"content": "非常"
},
{
"role": "user",
"content": "你的回答是正确的"
},
{
"role": "assistant",
"content": "谢谢您的理解,如果您还有其他问题或需要我帮助的地方,请随时告诉我。"
},
{
"role": "user",
"content": "现在我们要给字段类型为单行文本的设置一下其他内容"
},
{
"role": "assistant",
"content": "好的,如果您想给字段类型为单行文本的字段添加其他内容,您可以在字段标题后面用斜杠括号(/)加上要添加的内容。比如,如果您想在客户姓名字段后面添加一个必填项的标记,则可以这样书写:\n\n/**【单行文本】客户姓名/(必填)【单项选择】客户性别**/\n\n其中,斜杠括号后面的内容可以根据您的需求进行修改,比如添加选项说明、提示内容等。请注意,斜杠括号后面的内容不会影响字段类型的识别和使用,仅仅是作为附加信息来使用的。"
},
{
"role": "user",
"content": "不对,假如我们要添加参数,请在标题后面添加一个“()”,如果这个字段没有参数就不需要括号,单行文本字段类型的参数有这几个\n1、必填。表示这个字段必填填写\n2、二维码。表示这个字段可以二维码录入值\n3、条形码。表示这个字段可以条形码录入值\n4、不允许重复值。表示这个字段的值不能与其他数据重复"
},
{
"role": "assistant",
"content": "非常抱歉,我理解错误了,感谢您的纠正和补充。以下是一个单行文本字段类型,带有参数和标题的示例:\n\n/**【单行文本】客户姓名(必填,二维码)【单项选择】客户性别(不允许重复值)**/\n\n其中,客户姓名字段类型为单行文本,其参数为必填和二维码录入值;客户性别字段类型仍然为单项选择,其参数为不允许重复值。希望这个示例能够为您带来一定的帮助。"
},
{
"role": "user",
"content": "不是这个,刚才说的这几个参数都是字段类型为“单行文本”的可以设置的参数,其他参数不可以设置"
},
{
"role": "assistant",
"content": "非常抱歉,我的回答还是没有完全符合您的要求,在这里进行更正。以下是一个单行文本字段类型,带有参数的示例:\n\n/**【单行文本】客户姓名(必填,二维码,条形码,不允许重复值)**/\n \n其中,参数有:\n\n- 必填:表示这个字段内容必须填写。\n- 二维码:表示这个字段内容可以通过扫描二维码的方式录入。\n- 条形码:表示这个字段内容可以通过扫描条形码的方式录入。\n- 不允许重复值:表示这个字段的值不能与已有数据重复。\n\n注意,在参数名称与参数值之间需要使用中文逗号(,)隔开。此外,其他一些常用的参数还有:\n\n- 默认值:表示在这个字段没有填写时的默认内容。\n- 最大长度:表示这个字段内容的最大长度限制。\n- 正则表达式:表示这个字段输入的内容需要符合指定的正则表达式规则。\n\n希望这个回答可以更好地为您提供帮助,如有不足之处,还请您指出。"
},
{
"role": "user",
"content": "很好,纠正一点,参数二维码和参数条形码只能有一个存在"
},
{
"role": "assistant",
"content": "非常抱歉,我的回答又存在错误,感谢您的指正。您是正确的,参数二维码和参数条形码只能二选其一,不能同时存在。因此,以下是一个单行文本字段类型,带有参数的示例:\n\n/**【单行文本】客户姓名(必填,二维码或条形码,不允许重复值)**/\n\n其中,参数有:\n\n- 必填:表示这个字段内容必须填写。\n- 二维码或条形码:表示这个字段内容可以通过扫描二维码或条形码的方式录入。\n- 不允许重复值:表示这个字段的值不能与已有数据重复。\n\n注意,在参数名称与参数值之间需要使用中文逗号(,)隔开。此外,其他一些常用的参数还有:\n\n- 默认值:表示在这个字段没有填写时的默认内容。\n- 最大长度:表示这个字段内容的最大长度限制。\n- 正则表达式:表示这个字段输入的内容需要符合指定的正则表达式规则。\n\n希望这个回答可以更好地为您提供帮助,如有不足之处,还请您指出。"
},
{
"role": "user",
"content": "错误,正确答案是/**【单行文本】客户姓名(必填;二维码;不允许重复值)**/"
},
{
"role": "assistant",
"content": "非常抱歉,我的回答再次存在错误,感谢您的纠正。您是正确的,参数二维码和参数条形码只能二选其一,不能同时存在。以下是一个单行文本字段类型,带有参数的示例:\n\n/**【单行文本】客户姓名(必填;二维码;不允许重复值)**/\n\n其中,参数有:\n\n- 必填:表示这个字段内容必须填写。\n- 二维码:表示这个字段内容可以通过扫描二维码的方式录入。\n- 不允许重复值:表示这个字段的值不能与已有数据重复。\n\n注意,在参数名称与参数值之间需要使用分号(;)隔开。此外,其他一些常用的参数还有:\n\n- 默认值:表示在这个字段没有填写时的默认内容。\n- 最大长度:表示这个字段内容的最大长度限制。\n- 正则表达式:表示这个"
},
{
"role": "user",
"content": "很好我们在添加一个参数给到字段类型是“单行文本”的字段,这个参数叫做数据关联,表现形式是”/关联已有数据-关联应用-关联字段/“"
},
{
"role": "assistant",
"content": "好的,如果您想给字段类型为“单行文本”的字段添加“数据关联”的参数,可以按照以下方式进行书写:/**【单行文本】客户姓名(必填;二维码;不允许重复值;/关联已有数据-关联应用-关联字段/)**/其中,参数“/关联已有数据-关联应用-关联字段/”表示这个字段类型会与已有数据、应用和关联字段建立关联,以便在后续使用时快速查询和调用相关信息。需要注意的是,关联应用和关联字段需要按照特定的格式进行书写,具体的规则可以参考您使用的系统或软件的相关文档。同时,如果需要添加其他的参数和说明,也可以在标题后面用括号或斜线进行书写,以便满足您的特定需求。"
}, {
"role": "user",
"content": "我们要关联的应用叫做客户信息库,关联的字段是客户名称“"
}
],
"key": "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",
"temperature": 1
};
$(function () {
$(document).on("click", "#ChatGpt", function () {
var InputValue = prompt("你好,我是小Q,请告诉我你要添加的字段或者你想要的表单,小Q可以帮你自动搭建完成哦。\n\n如:我想要一个客户信息管理的表单。", "我想要一个客户信息管理的表单");
ChatGpt(InputValue)
});
});
function ChatGpt(InputValue) {
ChatGptBodyData.messages.push({
"role": "user",
"content": InputValue
})
GM_xmlhttpRequest({
method: "post",
headers: {
"Content-Type": "text/plain;charset=UTF-8"
},
url: "https://chatv.fu520.top/api/stream",
data: JSON.stringify(ChatGptBodyData),
onload: function (res) {
// code
console.log("ChatGpt:", res.responseText);
ChatGptChatBox(res.responseText)
ChatGptBodyData.messages.push({
"role": "assistant",
"content": res.responseText
})
}
});
}
//循环提问
function ChatGptChatBox(responseText) {
var InputValue = prompt(`结束聊天:请输入"结束"或点击取消\n添加字段:请输入"添加字段"\n\n小Q:\n${responseText}`, "");
if (InputValue == "添加字段") {
// 假设要匹配的字符串是 str
const str = responseText;
// 定义正则表达式,匹配 /** 开头,**/ 结尾的字符串
const regex = /\/\*\*(.*?)\*\*\//g;
// 定义一个数组,用于存储匹配到的字符串
const matches = [];
// 通过循环匹配所有符合条件的字符串,并将其拼接到 matches 数组中
let match;
while ((match = regex.exec(str)) !== null) {
matches.push(match[1]);
}
// 最终拼接得到的字符串
const result = matches.join('');
console.log("ChatGpt生成字段:",result); // 输出:第一个字符串第二个字符串第三个字符串
AnalysisOfConstructionContent(result);
} else if (InputValue == "结束") {
}else{
ChatGpt(InputValue)
}
}
//===========================================================================
//=================================插件使用帮助=================================
//@插件使用帮助Help
$(function () {
$(document).on("click", "#Help", function () {
window.open("https://exiao.yuque.com/pc5k40/ngqg4r/lv64cgq5rdy4xvtn?singleDoc# 《QingFLow浏览器插件工具介绍》", "_blank");
});
});
//=================================轻流系统设计图=================================
//@轻流系统设计图SystemDesignDrawing
$(function () {
$(document).on("click", "#SystemDesignDrawing", function () {
window.open("https://exiao.yuque.com/pc5k40/ngqg4r/oucgap?singleDoc", "_blank");
});
});
//=================================面板界面优化=================================
//@面板界面优化PageOptimization
$(function () {
$(document).on("click", "#PageOptimization", function () {
PageOptimizationOpen = true;
setTimeout(() => {
$x("/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[3]")[0].style.cssText = "width:750px";
console.log("优化界面完成")
}, 1000)
});
});
//=================================按钮配色优化方案=================================
function ButtonColorScheme() {
if (ButtonColorOpen) {
var a = $x("/html/body/qf-root/qf-pages/qf-new-index/div/div[1]/qf-index-sidebar/div");
if (a.length > 0) {
var attrs = a[0].attributes;
for (var i = 0; i < attrs.length; i++) {
var attrName = attrs[i].name;
var match = attrName.match(/_ngcontent-0-c(\d+)/);
if (match) {
var num = match[1];
console.log(num);
var ButtonColorURL = `https://gokuschool-3gl85srrc0c313c4-1304791592.ap-shanghai.service.tcloudbase.com/gokuschool/v1.0/QF_SkinColour/${ButtonColorTypeID}`
console.log("获取在线皮肤方案")
GM_xmlhttpRequest({
method: "GET",
headers: {
"Content-Type": "application/json"
},
url: ButtonColorURL,
onload: function (res) {
console.log("返回", JSON.parse(res.response));
let styleData = replaceString(JSON.parse(res.response).data.style, num);
$(``).appendTo('head');
}
});
}
}
} else {
console.log("没有找到匹配的元素");
}
}
}
function replaceString(str, replaceStr) {
// 使用正则表达式 / \$\$\$/g 来匹配所有的 "$$$",并用 replaceStr 替换它们
return str.replace(/\$\$\$/g, replaceStr);
}
//=================================设计图添加=================================
//@批量添加字段BatchAddFields
$(function () {
$(document).on("click", "#BatchAddFields", function () {
BatchAddFields();
});
});
//@触发批量添加字段BatchAddFields
function BatchAddFields() {
var InputValue = prompt("Hello,欢迎使用【QingFlow Dragon King Super Tools】\n轻流QingFlow应用自动超级字段插件🐲\n@author Mr.Dragon King \n@version 0.2\n\n请批量输入字段信息", "【单行文本】字段名称");
if (InputValue != null && InputValue != "") {
AnalysisOfConstructionContent(InputValue)
}
}
//@解析文字算法AnalysisOfConstructionContent
function AnalysisOfConstructionContent(InputData) {
InputData = InputData.replace(/\ +/g, "");
InputData = InputData.replace(/[\r\n]/g, "");
var FieldAnalysisData = [];//解析结果
// 定义识别类型
const DistinguishType = {
FieldType: 1,
FieldTitle: 2,
FieldParameter: 3
}
var fieldData = {//字段数据
type: "",//字段类型
title: "",//字段标题
parameter: [],//字段参数
};
var fieldData_parameter_textData = "";//解析参数字段内容 二次解析内容
var distinguishType = DistinguishType.FieldType;//默认为1,即字段类型
for (let textLengthIndex = 0; InputData.length > textLengthIndex; textLengthIndex++) {
// 校验字段类型添加
if (InputData[textLengthIndex].match(/\【/)) {
// 识别上个字段内容并添加到字段信息中
if (fieldData.type.length != 0) {
FieldAnalysisData.push(fieldData);
// 初始化值
fieldData = {
type: "",
title: "",
parameter: []
};
fieldData_parameter_textData = "";
}
// 转换识别类型为1,即字段类型
distinguishType = DistinguishType.FieldType;
}
// 校验字段类型添加结束,添加字段标题
if (InputData[textLengthIndex].match(/\】/)) {
fieldData.type = `${fieldData.type}${InputData[textLengthIndex]}`;
distinguishType = DistinguishType.FieldTitle;
}
// 校验字段标题添加结束,添加字段参数
if (InputData[textLengthIndex].match(/\(/) || InputData[textLengthIndex].match(/(/)) {
distinguishType = DistinguishType.FieldParameter;
}
if (distinguishType === DistinguishType.FieldType) {
fieldData.type = `${fieldData.type}${InputData[textLengthIndex]}`;
}
if (distinguishType === DistinguishType.FieldTitle) {
if (InputData[textLengthIndex] != "】") {
fieldData.title = `${fieldData.title}${InputData[textLengthIndex]}`;
}
}
if (distinguishType === DistinguishType.FieldParameter) {
if (InputData[textLengthIndex] != "(" && InputData[textLengthIndex] != "(") {
if (InputData[textLengthIndex].match(/\)/) || InputData[textLengthIndex].match(/)/)) {
if (fieldData_parameter_textData.length == 0) {
} else {
let outfieldData_parameter_textData = ResolveFieldParameters(fieldData_parameter_textData);
if (outfieldData_parameter_textData.type == "非注册参数") {
alert(`Hello,欢迎使用【QingFlow Dragon King Super Tools】\n轻流QingFlow应用自动超级字段插件🐲\n\n@author Mr.Dragon King
\n@version 0.2\n\n【非注册参数】\n发现未注册的字段参数,错误参数将无法进行添加到字段中!!!\n\n${fieldData.type}${fieldData.title}(${fieldData_parameter_textData})\n\n如有疑问可仔细查阅插件帮助文档,更多信息可联系作者!`);
fieldData_parameter_textData = "";
} else {
fieldData.parameter.push(outfieldData_parameter_textData);
fieldData_parameter_textData = "";
}
}
} else {
if (InputData[textLengthIndex].match(/;/) || InputData[textLengthIndex].match(/;/)) {
let outfieldData_parameter_textData = ResolveFieldParameters(fieldData_parameter_textData);
if (outfieldData_parameter_textData.type == "非注册参数") {
alert(`Hello,欢迎使用【QingFlow Dragon King Super Tools】\n轻流QingFlow应用自动超级字段插件🐲\n\n@author Mr.Dragon King
\n@version 0.2\n\n【非注册参数】\n发现未注册的字段参数,错误参数将无法进行添加到字段中!!!\n\n${fieldData.type}${fieldData.title}(${fieldData_parameter_textData})\n\n如有疑问可仔细查阅插件帮助文档,更多信息可联系作者!`);
fieldData_parameter_textData = "";
} else {
fieldData.parameter.push(outfieldData_parameter_textData);
fieldData_parameter_textData = "";
}
} else {
fieldData_parameter_textData = `${fieldData_parameter_textData}${InputData[textLengthIndex]}`;
}
}
}
}
if (textLengthIndex == InputData.length - 1) {
console.log("字段校验完成判断是否存在fieldData数据...");
if (fieldData.type.length != 0) {
console.log("存在fieldData数据,添加到FieldAnalysisData");
FieldAnalysisData.push(fieldData);
console.log("添加到FieldAnalysisData完成");
} else {
console.log("不存在fieldData数据,添加到FieldAnalysisData");
}
//初始化值
fieldData = {//字段数据
type: "",//字段类型
title: "",//字段标题
parameter: [],//字段参数
}
fieldData_parameter_textData = "";//解析参数字段内容 二次解析内容
console.log("【QingFlow Dragon King Super Tools】-->字段解析完成:", FieldAnalysisData);
AddField(FieldAnalysisData);
}
}
}
//@解析字段参数算法ResolveFieldParameters
function ResolveFieldParameters(fieldData_parameter_textData) {
fieldData_parameter_textData = fieldData_parameter_textData.replace(/\ +/g, "");
fieldData_parameter_textData = fieldData_parameter_textData.replace(/[\r\n]/g, "");
var fieldData_parameter = {
type: "",//参数类型
};//缓存字段参数
switch (fieldData_parameter_textData) {
case "必填": {
fieldData_parameter.type = "必填";
}
break;
case "二维码": {
fieldData_parameter.type = "二维码";
}
break;
case "条形码": {
fieldData_parameter.type = "条形码";
}
break;
case "不允许重复值": {
fieldData_parameter.type = "不允许重复值";
}
break;
case "金额¥": {
fieldData_parameter.type = "金额¥";
}
break;
case "金额$": {
fieldData_parameter.type = "金额$";
}
case "不允许时间重叠": {
fieldData_parameter.type = "不允许时间重叠";
}
break;
case "年": {
fieldData_parameter.type = "年";
}
break;
case "年月": {
fieldData_parameter.type = "年月";
}
break;
case "年月日": {
fieldData_parameter.type = "年月日";
}
break;
case "年月日时分": {
fieldData_parameter.type = "年月日时分";
}
break;
case "年月日时分秒": {
fieldData_parameter.type = "年月日时分秒";
}
case "固定电话": {
fieldData_parameter.type = "年月日时分秒";
}
break;
case "短信验证": {
fieldData_parameter.type = "年月日时分秒";
}
break;
default: {
if (fieldData_parameter_textData.slice(1, 7) == "关联已有数据") {
fieldData_parameter.type = "关联已有数据";
var DataType = 1
var AssociateExistingData = {
"app": "",
"field": "",
}
for (let index = 8; index < fieldData_parameter_textData.length; index++) {
if (DataType == 1) {
if (fieldData_parameter_textData[index] != "-") {
AssociateExistingData.app = `${AssociateExistingData.app}${fieldData_parameter_textData[index]}`
} else {
DataType = 2;
}
}
if (DataType == 2) {
if (fieldData_parameter_textData[index] != "/" && fieldData_parameter_textData[index] != "-") {
AssociateExistingData.field = `${AssociateExistingData.field}${fieldData_parameter_textData[index]}`
}
}
}
fieldData_parameter["AssociateExistingData"] = AssociateExistingData;
} else {
fieldData_parameter.type = "非注册参数";
}
}
}
return fieldData_parameter;
}
//=================================添加字段算法=================================
var fieldloopIndex = 0;
//@添加字段AddField
async function AddField(FieldAnalysisData) {
switch (FieldAnalysisData[fieldloopIndex].type) {
case "【单行文本】": {
await Add_field_click(field_Textfield);//添加单行文本字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
//设置字段参数
for (let Parameter_index = 0; Parameter_index < FieldAnalysisData[fieldloopIndex].parameter.length; Parameter_index++) {
if (FieldAnalysisData[fieldloopIndex].parameter[Parameter_index].type == "关联已有数据") {
await ToggleDefault();//切换默认内容选择
await Choice_AssociateExistingData();//选择元素2-关联已有数据
await Choice_AssociateExistingData_App();//触发关联已有数据的应用
await Choice_AssociateExistingData_AppInput(FieldAnalysisData[fieldloopIndex].parameter[Parameter_index].AssociateExistingData.app);//关联已有数据的应用名称输入
await Choice_AssociateExistingData_AppChoice(FieldAnalysisData[fieldloopIndex].parameter[Parameter_index].AssociateExistingData.app);//关联已有数据的应用选择
await Choice_AssociateExistingData_Field();//触发关联已有数据的字段
await Choice_AssociateExistingData_FieldInput(FieldAnalysisData[fieldloopIndex].parameter[Parameter_index].AssociateExistingData.field);//关联已有数据的字段名称输入
await Choice_AssociateExistingData_FieldChoice(FieldAnalysisData[fieldloopIndex].parameter[Parameter_index].AssociateExistingData.field);//关联已有数据的字段选择
} else {
await Textfield_Parameter(FieldAnalysisData[fieldloopIndex].parameter[Parameter_index])
}
}
}
break;
case "【多行文本】": {
await Add_field_click(field_Textarea);//添加多行文本字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
for (let Parameter_index = 0; Parameter_index < FieldAnalysisData[fieldloopIndex].parameter.length; Parameter_index++) {
if (FieldAnalysisData[fieldloopIndex].parameter[Parameter_index].type == "关联已有数据") {
await ToggleDefault();//切换默认内容选择
await Choice_AssociateExistingData();//选择元素2-关联已有数据
await Choice_AssociateExistingData_App();//触发关联已有数据的应用
await Choice_AssociateExistingData_AppInput(FieldAnalysisData[fieldloopIndex].parameter[Parameter_index].AssociateExistingData.app);//关联已有数据的应用名称输入
await Choice_AssociateExistingData_AppChoice(FieldAnalysisData[fieldloopIndex].parameter[Parameter_index].AssociateExistingData.app);//关联已有数据的应用选择
await Choice_AssociateExistingData_Field();//触发关联已有数据的字段
await Choice_AssociateExistingData_FieldInput(FieldAnalysisData[fieldloopIndex].parameter[Parameter_index].AssociateExistingData.field);//关联已有数据的字段名称输入
await Choice_AssociateExistingData_FieldChoice(FieldAnalysisData[fieldloopIndex].parameter[Parameter_index].AssociateExistingData.field);//关联已有数据的字段选择
} else {
await Textarea_Parameter(FieldAnalysisData[fieldloopIndex].parameter[Parameter_index])
}
}
}
break;
case "【数字】": {
await Add_field_click(field_Number);//添加数字字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
}
break;
case "【链接】": {
await Add_field_click(field_Link);//添加链接字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
}
break;
case "【日期】": {
await Add_field_click(field_Date);//添加日期字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
}
break;
case "【起止时间】": {
await Add_field_click(field_StartStopTime);//添加起止时间字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
}
break;
case "【电话】": {
await Add_field_click(field_Phone);//添加电话字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
}
break;
case "【邮箱】": {
await Add_field_click(field_Mailbox);//添加邮箱字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
}
break;
case "【单项选择】": {
await Add_field_click(field_AloneChoice);//添加单项选择字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
}
break;
case "【下拉选择】": {
await Add_field_click(field_DropDownChoice);//添加下拉选择字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
}
break;
case "【多项选择】": {
await Add_field_click(field_MultipleChoice);//添加多项选择字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
}
break;
case "【图片选择】": {
await Add_field_click(field_ImagesChoice);//添加图片选择字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
}
break;
case "【附件上传】": {
await Add_field_click(field_FileUpload);//添加附件上传字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
}
break
case "【地址】": {
await Add_field_click(field_Address);//添加地址字段
await InputData(field_Title, FieldAnalysisData[fieldloopIndex].title);//设置字段标题
}
break
default: {
console.log("未注册字段", FieldAnalysisData[fieldloopIndex].type)
}
}
fieldloopIndex = fieldloopIndex + 1;
if (fieldloopIndex < FieldAnalysisData.length) {
AddField(FieldAnalysisData)
} else {
fieldloopIndex = 0;
//字段添加任务完完成进行消息推送
if (MessagePushState == true) {
MessagePush(QW_QrobotHook, "字段添加任务", "当前字段任务已经完成,请注意检查查看!")
}
setTimeout(() => {
alert("【QingFlow Dragon King Super Tools】\n轻流QingFlow应用自动超级字段插件🐲\n字段批量添加任务已经完成😀")
}, 1000)
}
}
//===========================================================================================
//====================================方法事件【添加字段】===================================
//@添加字段方法 Add_field_click(field)
function Add_field_click(field) {
return new Promise(resolve => {
setTimeout(() => {
$x(field)[0].click();
resolve()//成功态
}, 500)
})
}
//===========================================================================================
//=================================方法事件【输入&输入结束】=================================
//@输入内容 InputData
function InputData(element, data) {
return new Promise(resolve => {
setTimeout(() => {
$x(element)[0].value = data;
InputEnd(element);
resolve()//成功态
}, 500)
})
}
//@输入结束 InputEvent
function InputEnd(data) {
return new Promise(resolve => {
$x(data)[0].dispatchEvent(new InputEvent("input"));
resolve()//成功态
})
}
//===========================================================================================
//====================================字段参数===============================================
//=================================字段参数【单行文本参数】==================================
//@添加单行文本参数Textfield_Parameter
async function Textfield_Parameter(parameter) {
return new Promise(resolve => {
setTimeout(() => {
switch (parameter.type) {
case "必填": {
if ($x(fieldParameter_Required).length == 1) {
$x(fieldParameter_Required)[0].click()
}
}
break;
case "二维码": {
if ($x(fieldParameter_QRCode).length == 1) {
$x(fieldParameter_QRCode)[0].click()
}
}
break;
case "条形码": {
if ($x(fieldParameter_QRCode).length == 1) {
$x(fieldParameter_QRCode)[0].click()
setTimeout(() => {
if ($x(fieldParameter_BarCode).length == 1) {
$x(fieldParameter_BarCode)[0].click()
}
}, 200)
}
}
break;
case "不允许重复值": {
if ($x(fieldParameter_NotDuplicateValue).length == 1) {
$x(fieldParameter_NotDuplicateValue)[0].click()
}
}
break;
default: {
console.log("未注册字段参数")
}
}
resolve()//成功态
}, 500)
})
}
//=================================字段参数【多行文本参数】=================================
//@添加多行文本参数Textarea_Parameter
async function Textarea_Parameter(parameter) {
return new Promise(resolve => {
setTimeout(() => {
switch (parameter.type) {
case "必填": {
$x("/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[3]/qf-edit-area/div/qf-function-lock/div[1]/label")[0].click()
}
break;
case "不允许重复值": {
$x("/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[3]/qf-edit-area/div/qf-function-lock/div[3]/label")[0].click()
}
break;
default: {
console.log("未注册字段参数")
}
}
resolve()//成功态
}, 500)
})
}
//=================================特殊参数【关联已有数据】=================================
//@切换默认 ToggleDefault
function ToggleDefault() {
return new Promise(resolve => {
setTimeout(() => {
var openType = true
for (let index = 0; index < 99 && openType == true; index++) {
if ($x(`/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[${index}]/qf-edit-area/div/qf-function-lock/qf-dft-val-edit/div/qf-select/qf-select-top-control/qf-select-item`).length == 1) {
$x(`/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[${index}]/qf-edit-area/div/qf-function-lock/qf-dft-val-edit/div/qf-select/qf-select-top-control/qf-select-item`)[0].click();
openType = false;
}
}
resolve()//成功态
}, 200)
})
}
//@切换关联已有数据 Choice_AssociateExistingData
function Choice_AssociateExistingData() {
return new Promise(resolve => {
setTimeout(() => {
var openType = true
for (let index = 0; index < 99 && openType == true; index++) {
for (let index_1 = 0; index_1 < 99 && openType == true; index_1++) {
if ($x(`/html/body/div[${index}]/div[${index_1}]/div/qf-option-container/div[2]/cdk-virtual-scroll-viewport/div[1]/div/qf-option-item[2]`).length == 1) {
$x(`/html/body/div[${index}]/div[${index_1}]/div/qf-option-container/div[2]/cdk-virtual-scroll-viewport/div[1]/div/qf-option-item[2]`)[0].click();
openType = false;
}
}
}
resolve()//成功态
}, 200)
})
}
//@触发关联已有数据的应用 Choice_AssociateExistingData_App
function Choice_AssociateExistingData_App() {
return new Promise(resolve => {
setTimeout(() => {
var openType = true
for (let index = 0; index < 99 && openType == true; index++) {
if ($x(`/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[${index}]/qf-edit-area/div/qf-function-lock/qf-dft-val-edit/div/qf-function-lock/qf-dft-associate-data/div[1]/qf-select[1]/qf-select-top-control/div[1]/input`).length == 1) {
$x(`/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[${index}]/qf-edit-area/div/qf-function-lock/qf-dft-val-edit/div/qf-function-lock/qf-dft-associate-data/div[1]/qf-select[1]/qf-select-top-control/div[1]/input`)[0].click();
openType = false;
}
}
resolve()//成功态
}, 200)
})
}
//@关联已有数据的应用名称输入 Choice_AssociateExistingData_AppInput
function Choice_AssociateExistingData_AppInput(appName) {
return new Promise(resolve => {
setTimeout(() => {
var openType = true
for (let index = 0; index < 99 && openType == true; index++) {
if ($x(`/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[${index}]/qf-edit-area/div/qf-function-lock/qf-dft-val-edit/div/qf-function-lock/qf-dft-associate-data/div[1]/qf-select[1]/qf-select-top-control/div[1]/input`).length == 1) {
$x(`/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[${index}]/qf-edit-area/div/qf-function-lock/qf-dft-val-edit/div/qf-function-lock/qf-dft-associate-data/div[1]/qf-select[1]/qf-select-top-control/div[1]/input`)[0].value = appName;
InputEnd(`/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[${index}]/qf-edit-area/div/qf-function-lock/qf-dft-val-edit/div/qf-function-lock/qf-dft-associate-data/div[1]/qf-select[1]/qf-select-top-control/div[1]/input`);
openType = false;
}
}
resolve()//成功态
}, 200)
})
}
//@关联已有数据的应用选择 Choice_AssociateExistingData_AppChoice
function Choice_AssociateExistingData_AppChoice(appName) {
return new Promise(resolve => {
setTimeout(() => {
var openType = true
for (let index = 0; index < 99 && openType == true; index++) {
for (let index_1 = 0; index_1 < 99 && openType == true; index_1++) {
if ($x(`/html/body/div[${index}]/div[${index_1}]/div/qf-option-container/div[2]/cdk-virtual-scroll-viewport/div[1]/div/qf-option-item`).length > 0) {
for (let index_2 = 0; index_2 < $x(`/html/body/div[${index}]/div[${index_1}]/div/qf-option-container/div[2]/cdk-virtual-scroll-viewport/div[1]/div/qf-option-item`).length; index_2++) {
let index_3 = index_2 + 1;
if ($x(`/html/body/div[${index}]/div[${index_1}]/div/qf-option-container/div[2]/cdk-virtual-scroll-viewport/div[1]/div/qf-option-item[${index_3}]/div`)[0].innerText == appName) {
$x(`/html/body/div[${index}]/div[${index_1}]/div/qf-option-container/div[2]/cdk-virtual-scroll-viewport/div[1]/div/qf-option-item`)[`${index_2}`].click();
openType = false;
}
}
}
}
}
resolve()//成功态
}, 200)
})
}
//@触发关联已有数据的字段 Choice_AssociateExistingData_Field
function Choice_AssociateExistingData_Field() {
return new Promise(resolve => {
setTimeout(() => {
var openType = true
for (let index = 0; index < 99 && openType == true; index++) {
if ($x(`/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[${index}]/qf-edit-area/div/qf-function-lock/qf-dft-val-edit/div/qf-function-lock/qf-dft-associate-data/div[1]/qf-select[2]/qf-select-top-control/div[1]/input`).length == 1) {
$x(`/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[${index}]/qf-edit-area/div/qf-function-lock/qf-dft-val-edit/div/qf-function-lock/qf-dft-associate-data/div[1]/qf-select[2]/qf-select-top-control/div[1]/input`)[0].click();
openType = false;
}
}
resolve()//成功态
}, 200)
})
}
//@关联已有数据的字段名称输入 Choice_AssociateExistingData_FieldInput
function Choice_AssociateExistingData_FieldInput(fieldName) {
return new Promise(resolve => {
setTimeout(() => {
var openType = true
for (let index = 0; index < 99 && openType == true; index++) {
if ($x(`/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[${index}]/qf-edit-area/div/qf-function-lock/qf-dft-val-edit/div/qf-function-lock/qf-dft-associate-data/div[1]/qf-select[2]/qf-select-top-control/div[1]/input`).length == 1) {
$x(`/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[${index}]/qf-edit-area/div/qf-function-lock/qf-dft-val-edit/div/qf-function-lock/qf-dft-associate-data/div[1]/qf-select[2]/qf-select-top-control/div[1]/input`)[0].value = fieldName;;
InputEnd(`/html/body/qf-root/qf-pages/qf-app-item/qf-creation/div/div[${index}]/qf-edit-area/div/qf-function-lock/qf-dft-val-edit/div/qf-function-lock/qf-dft-associate-data/div[1]/qf-select[2]/qf-select-top-control/div[1]/input`);
openType = false;
}
}
resolve()//成功态
}, 200)
})
}
//@关联已有数据的字段选择Choice_AssociateExistingData_FieldChoice
function Choice_AssociateExistingData_FieldChoice(fieldName) {
return new Promise(resolve => {
setTimeout(() => {
var openType = true
for (let index = 0; index < 99 && openType == true; index++) {
for (let index_1 = 0; index_1 < 99 && openType == true; index_1++) {
if ($x(`/html/body/div[${index}]/div[${index_1}]/div/qf-option-container/div[2]/cdk-virtual-scroll-viewport/div[1]/div/qf-option-item`).length > 0) {
for (let index_2 = 0; index_2 < $x(`/html/body/div[${index}]/div[${index_1}]/div/qf-option-container/div[2]/cdk-virtual-scroll-viewport/div[1]/div/qf-option-item`).length; index_2++) {
let index_3 = index_2 + 1;
if ($x(`/html/body/div[${index}]/div[${index_1}]/div/qf-option-container/div[2]/cdk-virtual-scroll-viewport/div[1]/div/qf-option-item[${index_3}]/div`)[0].innerText == fieldName) {
$x(`/html/body/div[${index}]/div[${index_1}]/div/qf-option-container/div[2]/cdk-virtual-scroll-viewport/div[1]/div/qf-option-item`)[`${index_2}`].click();
openType = false;
}
}
}
}
}
resolve()//成功态
}, 200)
})
}
//=========================================================================================
//=======================================Excel字段导入【Excel】============================
$(function () {
$(document).on("change", "#excel-file", function (e) {
var files = e.target.files;
var fileReader = new FileReader();
fileReader.onload = function (ev) {
try {
var data = ev.target.result
var workbook = XLSX.read(data, {
type: 'binary'
}) // 以二进制流方式读取得到整份excel表格对象
var persons = []; // 存储获取到的数据
} catch (e) {
console.log('文件类型不正确');
return;
}
// 表格的表格范围,可用于判断表头是否数量是否正确
var fromTo = '';
// 遍历每张表读取
for (var sheet in workbook.Sheets) {
if (workbook.Sheets.hasOwnProperty(sheet)) {
fromTo = workbook.Sheets[sheet]['!ref'];
persons = persons.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]));
let FieldAnalysisData = EXCEL_FieldAnalysisData(workbook.Sheets[sheet])
console.log("【QingFlow Dragon King Super Tools】-->Excel字段导入解析完成:", FieldAnalysisData)
AddField(FieldAnalysisData);
break; // 如果只取第一张表,就取消注释这行
}
}
var index = 0;
for (var i in persons) {
var prjid = persons[i].prjid;
var parentid = persons[i].parentid;
var subject = persons[i].subject;
var hrmid = persons[i].hrmid;
var begindate = persons[i].begindate;
begindate = new Date(begindate).toLocaleDateString().replace(/\//g, '-');
var enddate = persons[i].enddate;
enddate = new Date(enddate).toLocaleDateString().replace(/\//g, '-');
var actualbegindate = persons[i].actualbegindate;
actualbegindate = new Date(actualbegindate).toLocaleDateString().replace(/\//g, '-');
var actualenddate = persons[i].actualenddate;
actualenddate = new Date(actualenddate).toLocaleDateString().replace(/\//g, '-');
var stageid = persons[i].stageid;
var finish = persons[i].finish;
}
//在控制台打印出来表格中的数据
};
// 以二进制方式打开文件
fileReader.readAsBinaryString(files[0]);
console.log(files);
});
});
function EXCEL_FieldAnalysisData(sheet) {
const FieldAnalysisData = [];//解析结果
/* sheet['!ref']表示所有单元格的范围,例如从A1到F8则记录为 A1:F8*/
const range = XLSX.utils.decode_range(sheet['!ref'])
let C,
R = range.s.r + 0 /* 从第一行开始 */
/* 按列进行数据遍历 */
for (C = range.s.c; C <= range.e.c; ++C) {
/* 查找第一行中的单元格 */
const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
let title = 'UNKNOWN ' + C // <-- 进行默认值设置
if (cell && cell.t) title = XLSX.utils.format_cell(cell)
//格式化数据格式
var fieldData_type = "【单行文本】";//默认字段类型
var fieldData_parameter = [];//默认字段参数
for (let index = 0; index < fieldData_type_testData.length; index++) {
//let key = RegExp(fieldData_type_testData[index].RegExp)
if (RegExp(fieldData_type_testData[index].RegExp).test(title)) {
fieldData_type = fieldData_type_testData[index].fieldData_type;
fieldData_parameter = fieldData_type_testData[index].fieldData_parameter;
}
}
var fieldData = {//字段数据
type: fieldData_type,//字段类型
title: title,//字段标题
parameter: fieldData_parameter,//字段参数
}
FieldAnalysisData.push(fieldData)
}
return FieldAnalysisData
};
//===========================================================================
//=======================================消息推送============================
function MessagePush(QW_QrobotHook, title, quote_text) {
var data = {
QW_QrobotHook: QW_QrobotHook,
title: title,
quote_text: quote_text
};
GM_xmlhttpRequest({
method: "post",
headers: {
"Content-Type": "application/json"
},
url: "https://api.hiflow.tencent.com/engine/webhook/31/1619964372965879810",
data: JSON.stringify(data),
onload: function (res) {
// code
console.log("返回", res);
}
});
}
//===========================================================================