From cfd39087d3ce0f313b269dd95883c87a6385cc38 Mon Sep 17 00:00:00 2001
From: clay <20932067@zju.edu.cn>
Date: Sun, 26 Mar 2023 23:26:03 +0800
Subject: [PATCH 1/2] =?UTF-8?q?clay=20:=20=E8=A7=A6=E5=8F=91=E5=99=A8http?=
=?UTF-8?q?=E8=AF=B7=E6=B1=82=E6=A0=A1=E9=AA=8C=E8=A7=84=E5=88=99=E5=AE=8C?=
=?UTF-8?q?=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/components/Pagination/index.vue | 94 -----------
.../src/components/RightToolbar/index.vue | 38 -----
flowable-engine-web/src/main.js | 8 -
.../process/config/TriggerNodeConfig.vue | 151 ++++++++++++++++--
.../common/process/nodes/TriggerNode.vue | 19 ++-
5 files changed, 158 insertions(+), 152 deletions(-)
delete mode 100644 flowable-engine-web/src/components/Pagination/index.vue
delete mode 100644 flowable-engine-web/src/components/RightToolbar/index.vue
diff --git a/flowable-engine-web/src/components/Pagination/index.vue b/flowable-engine-web/src/components/Pagination/index.vue
deleted file mode 100644
index c1d9ecf..0000000
--- a/flowable-engine-web/src/components/Pagination/index.vue
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
-
diff --git a/flowable-engine-web/src/components/RightToolbar/index.vue b/flowable-engine-web/src/components/RightToolbar/index.vue
deleted file mode 100644
index 494c0b8..0000000
--- a/flowable-engine-web/src/components/RightToolbar/index.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/flowable-engine-web/src/main.js b/flowable-engine-web/src/main.js
index a327490..4d4031c 100644
--- a/flowable-engine-web/src/main.js
+++ b/flowable-engine-web/src/main.js
@@ -26,7 +26,6 @@ Vue.use(Tip);
Vue.config.productionTip = false
-Vue.prototype.BASE_URL = 'http://' + (process.env.NODE_ENV === 'development-' ? "localhost" : "localhost");
Vue.prototype.$isNotEmpty = function (obj) {
return (obj !== undefined && obj !== null && obj !== '' && obj !== 'null')
@@ -49,13 +48,6 @@ Vue.prototype.$deepCopy = function (obj) {
return JSON.parse(JSON.stringify(obj))
}
-import Pagination from "@/components/Pagination";
-//自定义表格工具扩展
-import RightToolbar from "@/components/RightToolbar"
-// 全局组件挂载
-Vue.component('Pagination', Pagination)
-Vue.component('RightToolbar', RightToolbar)
-
new Vue({
router,
diff --git a/flowable-engine-web/src/views/common/process/config/TriggerNodeConfig.vue b/flowable-engine-web/src/views/common/process/config/TriggerNodeConfig.vue
index 4ebeec8..9d86fde 100644
--- a/flowable-engine-web/src/views/common/process/config/TriggerNodeConfig.vue
+++ b/flowable-engine-web/src/views/common/process/config/TriggerNodeConfig.vue
@@ -88,7 +88,7 @@
👉 无论请求结果如何,均通过
- 测试
+ 测试
请求成功😀:
@@ -161,12 +161,57 @@ export default {
delItem(items, index) {
items.splice(index, 1)
},
- testHander() {
- let http = this.config.http;
- if (http.url == null || http.url === '') {
- this.$message.error("请填写请求路径!")
- return
+ //url规范性检查
+ restfulCheck(url) {
+ const httpProtocolPattern = /^http:/;
+ const httpsProtocolPattern = /^https:/;
+ const restfulUrlPattern = /\/\w+\/\w+(\/\{[^}]+\})*/;
+ if (httpProtocolPattern.test(url) || httpsProtocolPattern.test(url)) {
+ return restfulUrlPattern.test(url);
+ } else {
+ return false;
}
+ },
+ //是否含有动态参数
+ hasUrlParams(url) {
+ const pattern = /{[^{}]+}/g;
+ let match;
+ while ((match = pattern.exec(url)) !== null) {
+ return true;
+ }
+ return false;
+ },
+ //获取到动态参数的名称
+ getDynamicParamNames(url) {
+ const pattern = /{([^{}]+)}/g;
+ let match;
+ const paramNames = [];
+ while ((match = pattern.exec(url)) !== null) {
+ if (match[0].startsWith('{') && match[0].endsWith('}')) {
+ const paramName = match[1];
+ paramNames.push(paramName);
+ }
+ }
+ return paramNames;
+ },
+ //替换rul动态参数
+ replaceDynamicParams(url, params) {
+ const dynamicParamPattern = /{\s*(\w+)\s*}/g;
+ return url.replace(dynamicParamPattern, (match, param) => {
+ return params[param] || '0';
+ });
+ },
+ //获取到参数值
+ getParamsValue(params, paramName) {
+ for (let param of params) {
+ if (param.name === paramName) {
+ return param.value
+ }
+ }
+ return null;
+ },
+ //设置头部
+ setHeaders(http) {
let headers = {}
for (let header of http.headers) {
if (header.isField) {
@@ -182,15 +227,99 @@ export default {
} else {
this.$set(headers, "Content-Type", "application/json")
}
+ return headers;
+ },
+ //设置post和put参数
+ setPostAndPutParams(http) {
+ let params = {}
+ for (let param of http.params) {
+ params[param.name] = param.value
+ }
+ return params;
+ },
+ //设置get和delete的参数
+ setGetAndDeleteParams(http) {
+ let dynamicParams = []
+ let url = http.url
+ let hasParams = this.hasUrlParams(url)
+ if (hasParams) {
+ dynamicParams = this.getDynamicParamNames(url);
+ let replaceParams = {}
+ for (let paramsName of dynamicParams) {
+ let value = this.getParamsValue(http.params, paramsName)
+ if (null == value) {
+ this.$message.error(paramsName + '参数未设置')
+ return;
+ }
+ replaceParams[paramsName] = value
+ }
+ url = this.replaceDynamicParams(url, replaceParams);
+ }
+ if (http.method === "DELETE") {
+ return url;
+ }
+ let getParams = []
+ for (let param of http.params) {
+ if (dynamicParams.indexOf(param.name) === -1 && param.name !== '' && param.value !== '') {
+ getParams.push(param.name + "=" + param.value)
+ }
+ }
+ if (getParams.length > 0) {
+ url += "?"
+ for (let i = 0; i < getParams.length; i++) {
+ if (i !== getParams.length-1) {
+ url += getParams[i] + "&";
+ } else {
+ url += getParams[i];
+ }
+ }
+ }
+ return url;
+ },
+ //请求测试
+ requestTestHandler() {
+ let http = this.config.http;
+ if (http.url == null || http.url === '') {
+ this.$message.error("请填写请求路径!")
+ return
+ }
+ if (!this.restfulCheck(http.url)) {
+ this.$message.error("当前只支持 RESTful URL!")
+ return
+ }
+ let headers = this.setHeaders(http)
+ let request
+ switch (http.method) {
+ case "GET":
+ case "DELETE":
+ let url = this.setGetAndDeleteParams(http)
+ if (null == url) {
+ return;
+ }
+ request = axios.request({
+ method: http.method,
+ url: url,
+ headers: headers,
+ });
+ break;
+ case "POST":
+ case "PUT":
+ request = axios.request({
+ method: http.method,
+ url: http.url,
+ headers: headers,
+ data: this.setPostAndPutParams(http)
+ });
+ break;
+ default:
+ break;
+ }
console.log("==================[测试打印内容]==================")
- axios.request({
- method: http.method,
- url: http.url,
- headers: headers
- }).then(res => {
+ request.then(res => {
console.log(res)
if (res.status === 200) {
let data = res.data
+ console.log(data)
let successFun = eval("(false ||" + http.success + ")");
let result = successFun(data);
console.log(result, "成功函数执行的返回结果")
diff --git a/flowable-engine-web/src/views/common/process/nodes/TriggerNode.vue b/flowable-engine-web/src/views/common/process/nodes/TriggerNode.vue
index a68475a..26f1cae 100644
--- a/flowable-engine-web/src/views/common/process/nodes/TriggerNode.vue
+++ b/flowable-engine-web/src/views/common/process/nodes/TriggerNode.vue
@@ -53,6 +53,12 @@ export default {
this.showError = true
this.errorInfo = '请设置WEBHOOK的URL地址'
}
+ if (this.restfulCheck(this.config.props.http.url)){
+ this.showError = false
+ }else {
+ this.showError = true
+ this.errorInfo = 'WEBHOOK的URL地址不符合RESTful标准'
+ }
}else if(this.config.props.type === 'EMAIL'){
if(!this.$isNotEmpty(this.config.props.email.subject)
|| this.config.props.email.to.length === 0
@@ -67,7 +73,18 @@ export default {
err.push(`${this.config.name} 触发动作未设置完善`)
}
return !this.showError
- }
+ },
+ //url规范性检查
+ restfulCheck(url) {
+ const httpProtocolPattern = /^http:/;
+ const httpsProtocolPattern = /^https:/;
+ const restfulUrlPattern = /\/\w+\/\w+(\/\{[^}]+\})*/;
+ if (httpProtocolPattern.test(url) || httpsProtocolPattern.test(url)) {
+ return restfulUrlPattern.test(url);
+ } else {
+ return false;
+ }
+ },
}
}
--
2.40.1
From bcfddb53a19e7b8ec6d695956a3e88bb45e60e4e Mon Sep 17 00:00:00 2001
From: clay <20932067@zju.edu.cn>
Date: Mon, 27 Mar 2023 14:55:41 +0800
Subject: [PATCH 2/2] =?UTF-8?q?clay=20:=20=E8=A7=A6=E5=8F=91=E5=99=A8http?=
=?UTF-8?q?=E8=AF=B7=E6=B1=82=E6=A0=A1=E9=AA=8C=E8=A7=84=E5=88=99=E5=AE=8C?=
=?UTF-8?q?=E6=88=90(=E7=AE=80=E5=8D=95=E6=B5=8B=E8=AF=95=E5=AE=8C?=
=?UTF-8?q?=E6=88=90)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
flowable-engine-web/src/api/request.js | 5 ++---
.../src/views/admin/FormProcessDesign.vue | 12 +++++++-----
2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/flowable-engine-web/src/api/request.js b/flowable-engine-web/src/api/request.js
index ecbb5f1..63aa677 100644
--- a/flowable-engine-web/src/api/request.js
+++ b/flowable-engine-web/src/api/request.js
@@ -1,4 +1,3 @@
-import Vue from "vue";
import axios from "axios";
import { Notification, MessageBox, Message } from "element-ui";
@@ -9,8 +8,8 @@ import "element-ui/lib/theme-chalk/index.css";
// 字体图标
export function getBaseUrl(){
- return "http://gateway.mytwins.top"
- // return "http://192.168.101.8:8000"
+ // return "http://gateway.mytwins.top"
+ return "http://192.168.101.8:8000"
// return "http://localhost:8000"
}
diff --git a/flowable-engine-web/src/views/admin/FormProcessDesign.vue b/flowable-engine-web/src/views/admin/FormProcessDesign.vue
index 0efd78b..62faf16 100644
--- a/flowable-engine-web/src/views/admin/FormProcessDesign.vue
+++ b/flowable-engine-web/src/views/admin/FormProcessDesign.vue
@@ -258,12 +258,14 @@ export default {
}
console.log(JSON.stringify(this.setup.process))
addProcessDefinition(template).then(res => {
- if (this.isNew){
- this.$message.success("更新表单成功")
- }else {
- this.$message.success("创建表单成功")
+ if (res.code === 1000){
+ if (this.isNew){
+ this.$message.success("更新表单成功")
+ }else {
+ this.$message.success("创建表单成功")
+ }
+ this.$router.push("/formsPanel")
}
- this.$router.push("/formsPanel")
}).catch(err => {
this.$message.error(err)
})
--
2.40.1