clay : 触发器的http请求有没有已经实现 #50

Merged
clay merged 4 commits from master into pro 2023-03-25 15:17:39 +00:00
10 changed files with 124 additions and 81 deletions
Showing only changes of commit 059ac66d7a - Show all commits

View File

@ -17,7 +17,7 @@
created() { created() {
}, },
mounted() { mounted() {
let beforeUrl = sessionStorage.getItem('router-path') let beforeUrl = localStorage.getItem('router-path')
if(beforeUrl === undefined || beforeUrl === ''){ if(beforeUrl === undefined || beforeUrl === ''){
//this.$router.push("/workPanel") //this.$router.push("/workPanel")
}else { }else {

View File

@ -6,12 +6,11 @@ import { Notification, MessageBox, Message } from "element-ui";
// 第三方插件 // 第三方插件
import "element-ui/lib/theme-chalk/index.css"; import "element-ui/lib/theme-chalk/index.css";
Vue.prototype.$axios = axios;
// 字体图标 // 字体图标
export function getBaseUrl(){ export function getBaseUrl(){
return "http://gateway.mytwins.top" // return "http://gateway.mytwins.top"
// return "http://192.168.101.8:8000" return "http://192.168.101.8:8000"
// return "http://localhost:8000" // return "http://localhost:8000"
} }
@ -26,7 +25,7 @@ service.defaults.withCredentials = true; // 让ajax携带cookie
service.interceptors.request.use( service.interceptors.request.use(
// 每次请求都自动携带Cookie // 每次请求都自动携带Cookie
config => { config => {
config.headers['authorization'] = sessionStorage.getItem("token") // 让每个请求携带自定义token 请根据实际情况自行修改 config.headers['authorization'] = localStorage.getItem("token") // 让每个请求携带自定义token 请根据实际情况自行修改
return config; return config;
}, },
error => { error => {
@ -38,8 +37,8 @@ service.interceptors.response.use(
rsp => { rsp => {
let data = rsp.data let data = rsp.data
if (data.code === 401){ if (data.code === 401){
sessionStorage.clear() localStorage.clear()
window.open("/") window.location.href = "/"
} }
if (data.code === 1000){ if (data.code === 1000){
return data return data

View File

@ -59,7 +59,7 @@ export default {
computed:{ computed:{
_value :{ _value :{
get(){ get(){
return this.value; return this.value || "";
}, },
set(val){ set(val){
this.value = val; this.value = val;
@ -72,7 +72,7 @@ export default {
}) })
this.$refs.codeEdit.codemirror.on("change", (cm) => { this.$refs.codeEdit.codemirror.on("change", (cm) => {
this._value = cm.getValue() this._value = cm.getValue()
this.$emit("input",this._value) this.$emit("input",cm.getValue())
}) })
}, },
methods:{ methods:{

View File

@ -137,7 +137,7 @@ export default {
uploadParams: {}, uploadParams: {},
uploadFileUrl: getBaseUrl() + "/flowable/process/file", uploadFileUrl: getBaseUrl() + "/flowable/process/file",
headers: { headers: {
authorization: sessionStorage.getItem("token") authorization: localStorage.getItem("token")
}, },
context: null, context: null,
rollBackId: null, rollBackId: null,

View File

@ -18,19 +18,6 @@ import WDialog from '@/components/common/WDialog'
import Tip from '@/components/common/Tip' import Tip from '@/components/common/Tip'
Vue.use(ElementUI); Vue.use(ElementUI);
Vue.use(AvatarEllipsis); Vue.use(AvatarEllipsis);
Vue.use(Ellipsis); Vue.use(Ellipsis);

View File

@ -77,7 +77,7 @@ router.beforeEach((to, from, next) => {
head[0].appendChild(meta) head[0].appendChild(meta)
} }
next(); next();
sessionStorage.setItem('router-path', to.path) localStorage.setItem('router-path', to.path)
}) })
export default router; export default router;

View File

@ -44,13 +44,13 @@ export default {
components: {UserPicker}, components: {UserPicker},
data() { data() {
return { return {
token: sessionStorage.getItem("token"), token: localStorage.getItem("token"),
select: [], select: [],
loginUser: {} loginUser: {}
} }
}, },
mounted() { mounted() {
let user = sessionStorage.getItem("userInfo") let user = localStorage.getItem("userInfo")
if (user !== null && user !== '') { if (user !== null && user !== '') {
this.loginUser = JSON.parse(user) this.loginUser = JSON.parse(user)
this.select.push(this.loginUser) this.select.push(this.loginUser)
@ -58,7 +58,7 @@ export default {
}, },
methods: { methods: {
getToken() { getToken() {
sessionStorage.clear() localStorage.clear()
axios.post( axios.post(
"http://gateway.mytwins.top/auth/workflow/login", "http://gateway.mytwins.top/auth/workflow/login",
// "http://localhost:8000/auth/workflow/login", // "http://localhost:8000/auth/workflow/login",
@ -69,9 +69,9 @@ export default {
uuid: "string" uuid: "string"
} }
).then(res => { ).then(res => {
sessionStorage.setItem("userInfo",JSON.stringify(this.loginUser)) localStorage.setItem("userInfo",JSON.stringify(this.loginUser))
this.token = res.data.data this.token = res.data.data
sessionStorage.setItem("token", this.token) localStorage.setItem("token", this.token)
}) })
}, },
selectedUser(select) { selectedUser(select) {
@ -90,7 +90,7 @@ export default {
}, },
// //
showRolePicker() { showRolePicker() {
sessionStorage.clear() localStorage.clear()
this.$refs.userPicker.showUserPicker() this.$refs.userPicker.showUserPicker()
}, },
to(path) { to(path) {

View File

@ -90,8 +90,8 @@ export const TRIGGER_PROPS = {
], ],
retry: 1, retry: 1,
handlerByScript: false, handlerByScript: false,
success: 'function handlerSuccess(res) {\n return true;\n}', success: 'function handlerSuccess(res) {\n return {\n state: true, \n msg: "请求成功!" \n };\n}',
fail: 'function handlerFail(res) {\n return true;\n}' fail: 'function handlerFail(res) {\n return {\n state: true, \n msg: "请求失败!" \n };\n}'
}, },
email: { email: {
subject: '', subject: '',

View File

@ -105,7 +105,7 @@ export default {
disabled: false, disabled: false,
uploadFileUrl: getBaseUrl() + "/flowable/process/file", uploadFileUrl: getBaseUrl() + "/flowable/process/file",
headers: { headers: {
authorization: sessionStorage.getItem("token") authorization: localStorage.getItem("token")
}, },
uploadParams: {}, uploadParams: {},
dialogImageUrl: '', dialogImageUrl: '',

View File

@ -9,7 +9,7 @@
</el-form-item> </el-form-item>
<div v-if="config.type === 'WEBHOOK'"> <div v-if="config.type === 'WEBHOOK'">
<el-form-item label="请求地址" prop="text"> <el-form-item label="请求地址" prop="text">
<el-input placeholder="请输入URL地址" size="medium" v-model="config.http.url" > <el-input placeholder="请输入URL地址" size="medium" v-model="config.http.url">
<el-select v-model="config.http.method" style="width: 85px;" slot="prepend" placeholder="URL"> <el-select v-model="config.http.method" style="width: 85px;" slot="prepend" placeholder="URL">
<el-option label="GET" value="GET"></el-option> <el-option label="GET" value="GET"></el-option>
<el-option label="POST" value="POST"></el-option> <el-option label="POST" value="POST"></el-option>
@ -24,22 +24,25 @@
<el-button type="text" @click="addItem(config.http.headers)"> + 添加</el-button> <el-button type="text" @click="addItem(config.http.headers)"> + 添加</el-button>
</div> </div>
<div v-for="(header, index) in config.http.headers" :key="index"> <div v-for="(header, index) in config.http.headers" :key="index">
- <el-input placeholder="参数名" size="small" style="width: 100px;" v-model="header.name" /> -
<el-input placeholder="参数名" size="small" style="width: 100px;" v-model="header.name"/>
<el-radio-group size="small" style="margin: 0 5px;" v-model="header.isField"> <el-radio-group size="small" style="margin: 0 5px;" v-model="header.isField">
<el-radio-button :label="true">表单</el-radio-button> <el-radio-button :label="true">表单</el-radio-button>
<el-radio-button :label="false">固定</el-radio-button> <el-radio-button :label="false">固定</el-radio-button>
</el-radio-group> </el-radio-group>
<el-select v-if="header.isField" style="width: 180px;" v-model="header.value" size="small" placeholder="请选择表单字段"> <el-select v-if="header.isField" style="width: 180px;" v-model="header.value" size="small"
placeholder="请选择表单字段">
<el-option v-for="form in forms" :key="form.id" :label="form.title" :value="form.title"></el-option> <el-option v-for="form in forms" :key="form.id" :label="form.title" :value="form.title"></el-option>
</el-select> </el-select>
<el-input v-else placeholder="请设置字段值" size="small" v-model="header.value" style="width: 180px;"/> <el-input v-else placeholder="请设置字段值" size="small" v-model="header.value" style="width: 180px;"/>
<el-icon class="el-icon-delete" @click="delItem(config.http.headers, index)" style="margin-left: 5px; color: #c75450; cursor: pointer"/> <el-icon class="el-icon-delete" @click="delItem(config.http.headers, index)"
style="margin-left: 5px; color: #c75450; cursor: pointer"/>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="Header请求参数" prop="text"> <el-form-item label="Header请求参数" prop="text">
<div slot="label"> <div slot="label">
<span style="margin-right: 10px">请求参数 </span> <span style="margin-right: 10px">请求参数 </span>
<el-button style="margin-right: 20px" type="text" @click="addItem(config.http.params)"> + 添加</el-button> <el-button style="margin-right: 20px" type="text" @click="addItem(config.http.params)"> + 添加</el-button>
<span>参数类型 - </span> <span>参数类型 - </span>
<el-radio-group size="mini" style="margin: 0 5px;" v-model="config.http.contentType"> <el-radio-group size="mini" style="margin: 0 5px;" v-model="config.http.contentType">
<el-radio-button label="JSON">json</el-radio-button> <el-radio-button label="JSON">json</el-radio-button>
@ -47,65 +50,76 @@
</el-radio-group> </el-radio-group>
</div> </div>
<div v-for="(param, index) in config.http.params" :key="index"> <div v-for="(param, index) in config.http.params" :key="index">
- <el-input placeholder="参数名" size="small" style="width: 100px;" v-model="param.name" /> -
<el-input placeholder="参数名" size="small" style="width: 100px;" v-model="param.name"/>
<el-radio-group size="small" style="margin: 0 5px;" v-model="param.isField"> <el-radio-group size="small" style="margin: 0 5px;" v-model="param.isField">
<el-radio-button :label="true">表单</el-radio-button> <el-radio-button :label="true">表单</el-radio-button>
<el-radio-button :label="false">固定</el-radio-button> <el-radio-button :label="false">固定</el-radio-button>
</el-radio-group> </el-radio-group>
<el-select v-if="param.isField" style="width: 180px;" v-model="param.value" size="small" placeholder="请选择表单字段"> <el-select v-if="param.isField" style="width: 180px;" v-model="param.value" size="small"
placeholder="请选择表单字段">
<el-option v-for="form in forms" :key="form.id" :label="form.title" :value="form.id"></el-option> <el-option v-for="form in forms" :key="form.id" :label="form.title" :value="form.id"></el-option>
</el-select> </el-select>
<el-input v-else placeholder="请设置字段值" size="small" v-model="param.value" style="width: 180px;"/> <el-input v-else placeholder="请设置字段值" size="small" v-model="param.value" style="width: 180px;"/>
<el-icon class="el-icon-delete" @click="delItem(config.http.params, index)" style="margin-left: 5px; color: #c75450; cursor: pointer"/> <el-icon class="el-icon-delete" @click="delItem(config.http.params, index)"
style="margin-left: 5px; color: #c75450; cursor: pointer"/>
</div> </div>
<div> <div>
</div> </div>
</el-form-item> </el-form-item>
<!-- <el-form-item label="请求结果处理" prop="text">--> <!-- <el-form-item label="请求结果处理" prop="text">-->
<div slot="label"> <div slot="label">
<span>请求结果处理</span> <span>请求结果处理</span>
<span style="margin-left: 20px">自定义脚本: </span> <span style="margin-left: 20px">自定义脚本: </span>
<el-switch v-model="config.http.handlerByScript"></el-switch> <el-switch v-model="config.http.handlerByScript"></el-switch>
</div> </div>
<span class="item-desc" v-if="config.http.handlerByScript"> <span class="item-desc" v-if="config.http.handlerByScript">
👉 返回值为 ture 则流程通过 false 则流程将被驳回 <p>👉 返回值为 ture 则流程通过 false 则流程将被驳回</p>
<!-- <div>支持函数--> <p>👉 (上线注意)占不支持ES高级语法</p>
<!-- <span style="color: dodgerblue">setFormByName(--> <p>👉 (上线注意)不支持浏览器的内置函数</p>
<!-- <span style="color: #939494">'表单字段名', '表单字段值'</span>--> <!-- <div>支持函数-->
<!-- )</span>--> <!-- <span style="color: dodgerblue">setFormByName(-->
<!-- 可改表单数据--> <!-- <span style="color: #939494">'表单字段名', '表单字段值'</span>-->
<!-- </div>--> <!-- )</span>-->
<!-- 可改表单数据-->
<!-- </div>-->
</span> </span>
<span class="item-desc" v-else>👉 无论请求结果如何均通过</span> <span class="item-desc" v-else>👉 无论请求结果如何均通过</span>
<div v-if="config.http.handlerByScript"> <div v-if="config.http.handlerByScript">
<div> <div>
<span>请求成功😀</span> <el-button @click="testHander">测试</el-button>
<code-edit v-model="config.http.success"/>
</div>
<div>
<span>请求失败😥</span>
<code-edit v-model="config.http.fail"/>
</div>
</div> </div>
<!-- </el-form-item>--> <div>
<span>请求成功😀</span>
<code-edit v-model="config.http.success"/>
</div>
<div>
<span>请求失败😥</span>
<code-edit v-model="config.http.fail"/>
</div>
</div>
<!-- </el-form-item>-->
</div> </div>
<div v-else-if="config.type === 'EMAIL'"> <div v-else-if="config.type === 'EMAIL'">
<el-form-item label="邮件主题" prop="text"> <el-form-item label="邮件主题" prop="text">
<el-input placeholder="请输入邮件主题" size="medium" v-model="config.email.subject" /> <el-input placeholder="请输入邮件主题" size="medium" v-model="config.email.subject"/>
</el-form-item> </el-form-item>
<el-form-item label="收件方" prop="text"> <el-form-item label="收件方" prop="text">
<el-select size="small" style="width: 100%;" v-model="config.email.to" filterable multiple allow-create default-first-option placeholder="请输入收件人"> <el-select size="small" style="width: 100%;" v-model="config.email.to" filterable multiple allow-create
default-first-option placeholder="请输入收件人">
<el-option v-for="sender in config.email.to" :key="sender" :label="sender" :value="sender"></el-option> <el-option v-for="sender in config.email.to" :key="sender" :label="sender" :value="sender"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="抄送方" prop="text"> <el-form-item label="抄送方" prop="text">
<el-select size="small" style="width: 100%;" v-model="config.email.cc" filterable multiple allow-create default-first-option placeholder="请输入收件人"> <el-select size="small" style="width: 100%;" v-model="config.email.cc" filterable multiple allow-create
default-first-option placeholder="请输入收件人">
<el-option v-for="item in config.email.cc" :key="item" :label="item" :value="item"></el-option> <el-option v-for="item in config.email.cc" :key="item" :label="item" :value="item"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="邮件正文" prop="text"> <el-form-item label="邮件正文" prop="text">
<el-input type="textarea" v-model="config.email.content" :rows="4" placeholder="邮件内容,支持变量提取表单数据 ${表单字段名} "></el-input> <el-input type="textarea" v-model="config.email.content" :rows="4"
placeholder="邮件内容,支持变量提取表单数据 ${表单字段名} "></el-input>
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
@ -114,44 +128,87 @@
<script> <script>
import CodeEdit from "@/components/common/CodeEdit"; import CodeEdit from "@/components/common/CodeEdit";
import axios from "axios";
export default { export default {
name: "TriggerNodeConfig", name: "TriggerNodeConfig",
components: {CodeEdit}, components: {CodeEdit},
props:{ props: {
config:{ config: {
type: Object, type: Object,
default: ()=>{ default: () => {
return {} return {}
} }
} }
}, },
computed:{ computed: {
forms(){ forms() {
return this.$store.state.design.formItems || [] return this.$store.state.design.formItems || []
} }
}, },
data() { data() {
return { return {}
}
}, },
methods: { methods: {
addItem(items){ addItem(items) {
if (items.length > 0 && (items[items.length - 1].name.trim() === '' if (items.length > 0 && (items[items.length - 1].name.trim() === ''
|| items[items.length - 1].value.trim() === '')){ || items[items.length - 1].value.trim() === '')) {
this.$message.warning("请完善之前项后在添加") this.$message.warning("请完善之前项后在添加")
return; return;
} }
items.push({name: '', value: '', isField: true}) items.push({name: '', value: '', isField: true})
}, },
delItem(items, index){ delItem(items, index) {
items.splice(index, 1) items.splice(index, 1)
}, },
testHander() {
let http = this.config.http;
if (http.url == null || http.url === '') {
this.$message.error("请填写请求路径!")
return
}
let headers = {}
for (let header of http.headers) {
if (header.isField) {
this.$message.error("测试只支持固定参数")
return
}
if (header.name !== "" && header.value !== "") {
this.$set(headers, header.name, header.value);
}
}
if (http.contentType === "FORM") {
this.$set(headers, "Content-Type", "multipart/form-data")
} else {
this.$set(headers, "Content-Type", "application/json")
}
console.log("==================[测试打印内容]==================")
axios.request({
method: http.method,
url: http.url,
headers: headers
}).then(res => {
console.log(res)
if (res.status === 200) {
let data = res.data
let successFun = eval("(false ||" + http.success + ")");
let result = successFun(data);
console.log(result, "成功函数执行的返回结果")
} else {
let failFun = eval("(false ||" + http.fail + ")");
let result = failFun(res);
console.log(result, "失败函数执行的返回结果")
}
}).finally(() => {
console.log("==================[测试打印结束]==================")
})
},
} }
} }
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.item-desc{ .item-desc {
color: #939494; color: #939494;
} }
</style> </style>