Bug fix for custom action

This commit is contained in:
naibo 2023-12-10 06:22:30 +08:00
parent bad6e5bdf5
commit 32f357a866
7 changed files with 90 additions and 43 deletions

View File

@ -36,8 +36,10 @@
height: 45px;
width: 180px;
border-radius: 7px;
border: skyblue solid;
background: rgb(73, 156, 189);
/*border: skyblue solid;*/
border: #007bff solid;
/*background: rgb(73, 156, 189);*/
background: rgb(10, 120, 200);
color: white;
text-align: center;
padding: 5px;
@ -76,7 +78,9 @@
}
.loop {
border: skyblue solid;
/*border: skyblue solid;*/
border: rgb(10,120,200) solid;
border-color: deepskyblue;
text-align: center;
padding: 5px;
width: 90%;
@ -104,7 +108,7 @@
.branch {
display: inline-block;
margin: 5px;
border: skyblue solid;
border: deepskyblue solid;
text-align: center;
padding: 5px;
width: 300px;

View File

@ -91,7 +91,7 @@
</div>
<div>
<label>Hint: Move the mouse to the smiley face to view the hint, double-click the option in the flowchart to try to run.</label>
<label>Hint: Move the mouse to the smiley face to view the hint, <b>double-click</b> the option in the flowchart to try to run.</label>
<label>Option Name:</label>
<input onkeydown="inputDelete(event)" class="form-control" v-model='list.nl[index.nowNodeIndex]["title"]'></input>
</div>
@ -369,18 +369,18 @@
<div class="elements" v-if="nodeType==5">
<p><input onkeydown="inputDelete(event)" type="checkbox" v-model='nowNode["parameters"]["iframe"]'></input>Action is inside iframe</p>
<label>Custom Action Mode</label>
<select v-model='codeMode' class="form-control">
<option value = 0>Execute JavaScript script (Start with "return " if you want to get return value)</option>
<option value = 1>Execute operating system-level command</option>
<option v-if="nowNode['isInLoop']" value = 2>Execute JavaScript script for the current element inside the loop</option>
<option v-if="nowNode['isInLoop']" value = 3>Exit Current Loop (the "Break" operation)</option>
<option v-if="nowNode['isInLoop']" value = 4>Skip Current Loop (the "Continue" operation)</option>
<option value = 5>Run Python code on current environment (the "exec" operation)</option>
<option value = 6>Get value of a Python expression (the "eval" operation)</option>
<option value = 7>Pause program execution (such as when the captcha box appears)</option>
<option value = 8>Refresh page</option>
<option value = 9>Send Email</option>
<label>Action Mode</label>
<select v-model='codeMode' class="form-control" @change="handleCodeModeChange">
<option :value = 0>Execute JavaScript script (Start with "return " if you want to get return value)</option>
<option :value = 1>Execute operating system-level command</option>
<option v-if="nowNode['isInLoop']" :value = 2>Execute JavaScript script for the current element inside the loop</option>
<option v-if="nowNode['isInLoop']" :value = 3>Exit Current Loop (the "Break" operation)</option>
<option v-if="nowNode['isInLoop']" :value = 4>Skip Current Loop (the "Continue" operation)</option>
<option :value = 5>Run Python code on current environment (the "exec" operation)</option>
<option :value = 6>Get value of a Python expression (the "eval" operation)</option>
<option :value = 7>Pause program execution (such as when the captcha box appears)</option>
<option :value = 8>Refresh page</option>
<option :value = 9>Send Email</option>
</select>
<div v-if='nowNode["parameters"]["codeMode"] < 3 || nowNode["parameters"]["codeMode"] >= 5 && nowNode["parameters"]["codeMode"] <=6'>
<label>Code (Use Field["FieldName"] to input the lastest value of a field): </label>

View File

@ -45,7 +45,7 @@ let app = new Vue({
index: vueData,
nodeType: 0, // 当前元素的类型
nowNode: null, // 用来临时存储元素的节点
codeMode: 0, //代码模式
codeMode: -1, //代码模式
loopType: -1, //点击循环时候用来循环选项
useLoop: false, //记录是否使用循环内元素
nowArrow: {"position": -1, "pId": 0, "num": 0},
@ -112,18 +112,60 @@ let app = new Vue({
},
codeMode: {
handler: function (newVal, oldVal) {
this.nowNode["parameters"]["codeMode"] = newVal;
// if(newVal == 3){
// this.nowNode["title"] = LANG("退出循环", "Exit Loop");
// } else if(newVal == 4){
// this.nowNode["title"] = LANG("跳过当前循环", "Skip Loop");
// } else {
// this.nowNode["title"] = LANG("自定义操作", "Custom Action");
// this.nowNode["parameters"]["codeMode"] = newVal;
// console.log(newVal, oldVal);
// if (newVal == undefined){
// this.codeMode = parseInt(oldVal);
// }
// select绑定一定要用:value不然会出现奇怪的问题
}
}
},
methods: {
handleCodeModeChange: function (value) {
// if (this.codeMode == undefined || this.codeMode == null || this.codeMode == -1) {
// return;
// }
this.nowNode["parameters"]["codeMode"] = this.codeMode;
// console.log(this.codeMode, value);
switch (parseInt(this.codeMode)) {
case 0:
this.nowNode["title"] = LANG("执行JavaScript", "Run JavaScript");
break;
case 1:
this.nowNode["title"] = LANG("运行操作系统命令", "Run OS Command");
break;
case 2:
this.nowNode["title"] = LANG("执行JavaScript", "Run JavaScript");
break;
case 3:
this.nowNode["title"] = LANG("退出循环", "Exit Loop");
break;
case 4:
this.nowNode["title"] = LANG("跳过当前循环", "Skip Loop");
break;
case 5:
this.nowNode["title"] = LANG("执行Python代码", "Exec Python");
break;
case 6:
this.nowNode["title"] = LANG("获得Python表达式值", "Eval Python");
break;
case 7:
this.nowNode["title"] = LANG("暂停程序", "Pause Task");
break;
case 8:
this.nowNode["title"] = LANG("刷新页面", "Refresh Page");
break;
case 9:
this.nowNode["title"] = LANG("发送邮件", "Send Email");
break;
case -1: // 跳转到其他操作时,不改变标题
break;
default: // 默认情况
this.nowNode["title"] = LANG("自定义操作", "Custom Action");
break;
}
},
getCookies: function () { //获取cookies
let command = new WebSocket("ws://localhost:" + getUrlParam("wsport"))
command.onopen = function () {
@ -402,7 +444,6 @@ function toolBoxKernel(e, para = null) {
let id = nowNode.getAttribute('data');
let pidt = pId2;
let move = true;
console.log(pidt, id);
while (pidt != 0) {
if (pidt == id) {
move = false;
@ -540,7 +581,6 @@ function toolBoxKernel(e, para = null) {
return t;
}
option = 0;
}
$(".options").mousedown(function () {

View File

@ -91,7 +91,7 @@
</div>
<div>
<label>提示:鼠标移到笑脸可查看提示,在流程图中双击选项可试运行。</label>
<label>提示:鼠标移到笑脸可查看提示,在流程图中<b>双击</b>选项可试运行。</label>
<label>选项名称</span></label>
<input onkeydown="inputDelete(event)" class="form-control" v-model='list.nl[index.nowNodeIndex]["title"]'></input>
</div>
@ -369,18 +369,18 @@
<div class="elements" v-if="nodeType==5">
<p><input onkeydown="inputDelete(event)" type="checkbox" v-model='nowNode["parameters"]["iframe"]'></input>操作在iframe内</p>
<label>自定义执行模式</label>
<select v-model='codeMode' class="form-control">
<option value = 0>执行一段JavaScript脚本如要获得返回值则需以return 开头)</option>
<option value = 1>执行一段操作系统级别命令</option>
<option v-if="nowNode['isInLoop']" value = 2>针对当前循环项的JavaScript脚本</option>
<option v-if="nowNode['isInLoop']" value = 3>退出当前循环Break操作</option>
<option v-if="nowNode['isInLoop']" value = 4>跳过当前循环后面的操作Continue操作</option>
<option value = 5>在执行环境下运行Python代码exec操作</option>
<option value = 6>在执行环境下获得Python表达式值eval操作</option>
<option value = 7>暂停程序执行(如检测到验证码框出现时暂停执行)</option>
<option value = 8>刷新页面</option>
<option value = 9>发送邮件</option>
<label>执行模式</label>
<select v-model='codeMode' class="form-control" @change="handleCodeModeChange">
<option :value = 0>执行一段JavaScript脚本如要获得返回值则需以return 开头)</option>
<option :value = 1>执行一段操作系统级别命令</option>
<option v-if="nowNode['isInLoop']" :value = 2>针对当前循环项的JavaScript脚本</option>
<option v-if="nowNode['isInLoop']" :value = 3>退出当前循环Break操作</option>
<option v-if="nowNode['isInLoop']" :value = 4>跳过当前循环后面的操作Continue操作</option>
<option :value = 5>在执行环境下运行Python代码exec操作</option>
<option :value = 6>在执行环境下获得Python表达式值eval操作</option>
<option :value = 7>暂停程序执行(如检测到验证码框出现时暂停执行)</option>
<option :value = 8>刷新页面</option>
<option :value = 9>发送邮件</option>
</select>
<div v-if='nowNode["parameters"]["codeMode"] < 3 || nowNode["parameters"]["codeMode"] >= 5 && nowNode["parameters"]["codeMode"] <=6'>
<label>代码/脚本内容用Field["字段名"]来输入某字段/自定义操作的最新提取/返回值): </label>
@ -470,7 +470,7 @@ print(emotlib.emoji()) # 使用其中的函数。
<label>邮件内容:</label>
<textarea onkeydown="inputDelete(event)" class="form-control" rows="2" v-model='nowNode["parameters"]["emailConfig"]["content"]' placeholder="这里写邮件内容"></textarea>
</div>
</div>
<div class="elements" v-if="nodeType==6">

View File

@ -141,12 +141,13 @@ function handleElement() {
app._data["nowNode"] = nodeList[vueData.nowNodeIndex];
app._data["nodeType"] = app._data["nowNode"]["option"];
app._data.useLoop = app._data["nowNode"]["parameters"]["useLoop"];
app._data["codeMode"] = -1; //自定义初始化
if (app._data["nodeType"] == 8) {
app._data.loopType = app._data["nowNode"]["parameters"]["loopType"];
} else if (app._data["nodeType"] == 3) {
app._data.paraIndex = 0; //参数索引初始化
app._data.paras.parameters = app._data["nowNode"]["parameters"]["paras"];
} else if(app._data["nodeType"] == 5){
} else if (app._data["nodeType"] == 5){
app._data.codeMode = app._data["nowNode"]["parameters"]["codeMode"];
} else if (app._data["nodeType"] == 10) {
app._data.TClass = app._data["nowNode"]["parameters"]["class"];
@ -204,6 +205,7 @@ function addParameters(t) {
t["parameters"]["afterJS"] = ""; //执行后执行的js
t["parameters"]["afterJSWaitTime"] = 0; //执行后js等待时间
} else if(t.option == 5) { //自定义操作
t["title"] = LANG("执行JavaScript", "Run JavaScript");
t["parameters"]["clear"] = 0; //清空其他字段数据
t["parameters"]["newLine"] = 1; //生成新行
t["parameters"]["codeMode"] = 0; //代码模式0代表JS, 2代表系统级别

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long