diff --git a/package.json b/package.json
index 9b48b76..467eb6f 100644
--- a/package.json
+++ b/package.json
@@ -22,12 +22,11 @@
"axios": "0.27.2",
"bpmn-js-token-simulation": "0.10.0",
"clipboard": "^2.0.11",
- "diagram-js": "^11.4.1",
"echarts": "5.4.0",
"element-plus": "2.2.21",
"file-saver": "2.0.5",
"fuse.js": "6.6.2",
- "highlight.js": "^11.7.0",
+ "highlight.js": "10.5.0",
"js-cookie": "3.0.1",
"jsencrypt": "3.3.1",
"nprogress": "0.2.0",
@@ -47,8 +46,8 @@
"@vue/babel-helper-vue-transform-on": "^1.0.2",
"@vue/compiler-sfc": "3.2.45",
"bpmn-js": "7.4.0",
- "bpmn-js-properties-panel": "^1.13.1",
- "camunda-bpmn-moddle": "^7.0.1",
+ "bpmn-js-properties-panel": "0.37.2",
+ "camunda-bpmn-moddle": "4.4.1",
"sass": "1.56.1",
"unplugin-auto-import": "0.11.4",
"vite": "3.2.3",
diff --git a/src/components/ProcessDesigner/index.vue b/src/components/ProcessDesigner/index.vue
index a65b2e2..6672974 100644
--- a/src/components/ProcessDesigner/index.vue
+++ b/src/components/ProcessDesigner/index.vue
@@ -5,7 +5,7 @@
v-bind="controlForm"
keyboard
ref="processDesigner"
- :events="[
+ :eventlist="[
'element.click',
'connection.added',
'connection.removed',
@@ -28,10 +28,13 @@
import BmpnProcessPenal from "@/plugins/package/penal";
import BpmnProcessDesigner from "@/plugins/package/designer";
import "@/plugins/package/theme/index.scss";
+// import vuePlugin from "@/plugins/package/highlight";
+// import "highlight.js/styles/atom-one-dark-reasonable.css";
// import "highlight.js/styles/atom-one-dark-reasonable.css";
import CustomContentPadProvider from "@/plugins/package/designer/plugins/content-pad";
import CustomPaletteProvider from "@/plugins/package/designer/plugins/palette";
import { ref } from "vue";
+
const props = defineProps({
bpmnXml: {
type: String,
@@ -43,12 +46,12 @@ const props = defineProps({
},
});
const { bpmnXml, designerForm } = toRefs(props);
+let element;
const modeler = ref(null);
const height = ref(document.documentElement.clientHeight - 94.5 + "px;");
const xmlString = ref(bpmnXml.value);
const emit = defineEmits(["save"]);
const data = reactive({
- element: null,
controlForm: {
processId: designerForm.value.processKey || "",
processName: designerForm.value.processName || "",
@@ -60,16 +63,14 @@ const data = reactive({
additionalModel: [CustomContentPadProvider, CustomPaletteProvider],
},
});
-const { controlForm, element } = toRefs(data);
+const { controlForm } = toRefs(data);
function elementClick(elementArgv) {
- element.value = elementArgv;
- console.log(elementArgv);
+ element = elementArgv;
}
function initModeler(modelerArgv) {
setTimeout(() => {
modeler.value = modelerArgv;
- console.log(modeler.value.get("eventBus"), "71");
}, 10);
}
function handlerEvent(eventName, element) {}
diff --git a/src/components/ProcessViewer/index.vue b/src/components/ProcessViewer/index.vue
index 3bc6594..c02d26e 100644
--- a/src/components/ProcessViewer/index.vue
+++ b/src/components/ProcessViewer/index.vue
@@ -1,49 +1,183 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
diff --git a/src/plugins/package/penal/task/task-components/ReceiveTask.vue b/src/plugins/package/penal/task/task-components/ReceiveTask.vue
index c8d8195..81df7e8 100644
--- a/src/plugins/package/penal/task/task-components/ReceiveTask.vue
+++ b/src/plugins/package/penal/task/task-components/ReceiveTask.vue
@@ -17,7 +17,7 @@
-
+
确 认
diff --git a/src/plugins/package/theme/process-panel.scss b/src/plugins/package/theme/process-panel.scss
index 5c7c3df..390e84f 100644
--- a/src/plugins/package/theme/process-panel.scss
+++ b/src/plugins/package/theme/process-panel.scss
@@ -8,6 +8,8 @@
overflow-y: scroll;
}
.panel-tab__title {
+ display: flex;
+ align-items: center;
font-weight: 600;
padding: 0 8px;
font-size: 1.1em;
@@ -93,7 +95,7 @@
.element-drawer__button > .el-button {
width: 100%;
}
-
+
.el-collapse-item__content {
padding-bottom: 0;
}
@@ -107,4 +109,3 @@
}
}
}
-
diff --git a/src/utils/request.js b/src/utils/request.js
index 001ec11..f87ec7d 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -1,108 +1,146 @@
-import axios from 'axios'
-import { ElNotification , ElMessageBox, ElMessage, ElLoading } from 'element-plus'
-import { getToken } from '@/utils/auth'
-import errorCode from '@/utils/errorCode'
-import { tansParams, blobValidate } from '@/utils/ruoyi'
-import cache from '@/plugins/cache'
-import { saveAs } from 'file-saver'
-import useUserStore from '@/store/modules/user'
+import axios from "axios";
+import {
+ ElNotification,
+ ElMessageBox,
+ ElMessage,
+ ElLoading,
+} from "element-plus";
+import { getToken } from "@/utils/auth";
+import errorCode from "@/utils/errorCode";
+import { tansParams, blobValidate } from "@/utils/ruoyi";
+import cache from "@/plugins/cache";
+import { saveAs } from "file-saver";
+import useUserStore from "@/store/modules/user";
let downloadLoadingInstance;
// 是否显示重新登录
export let isRelogin = { show: false };
-axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
+axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: import.meta.env.VITE_APP_BASE_API,
// 超时
- timeout: 10000
-})
+ timeout: 10000,
+});
// request拦截器
-service.interceptors.request.use(config => {
- // 是否需要设置 token
- const isToken = (config.headers || {}).isToken === false
- // 是否需要防止数据重复提交
- const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
- if (getToken() && !isToken) {
- config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
- }
- // get请求映射params参数
- if (config.method === 'get' && config.params) {
- let url = config.url + '?' + tansParams(config.params);
- url = url.slice(0, -1);
- config.params = {};
- config.url = url;
- }
- if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
- const requestObj = {
- url: config.url,
- data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
- time: new Date().getTime()
+service.interceptors.request.use(
+ (config) => {
+ // 是否需要设置 token
+ const isToken = (config.headers || {}).isToken === false;
+ // 是否需要防止数据重复提交
+ const isRepeatSubmit = (config.headers || {}).repeatSubmit === false;
+ if (getToken() && !isToken) {
+ config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
}
- const sessionObj = cache.session.getJSON('sessionObj')
- if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
- cache.session.setJSON('sessionObj', requestObj)
- } else {
- const s_url = sessionObj.url; // 请求地址
- const s_data = sessionObj.data; // 请求数据
- const s_time = sessionObj.time; // 请求时间
- const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
- if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
- const message = '数据正在处理,请勿重复提交';
- console.warn(`[${s_url}]: ` + message)
- return Promise.reject(new Error(message))
+ // get请求映射params参数
+ if (config.method === "get" && config.params) {
+ let url = config.url + "?" + tansParams(config.params);
+ url = url.slice(0, -1);
+ config.params = {};
+ config.url = url;
+ }
+ if (
+ !isRepeatSubmit &&
+ (config.method === "post" || config.method === "put")
+ ) {
+ const requestObj = {
+ url: config.url,
+ data:
+ typeof config.data === "object"
+ ? JSON.stringify(config.data)
+ : config.data,
+ time: new Date().getTime(),
+ };
+ const sessionObj = cache.session.getJSON("sessionObj");
+ if (
+ sessionObj === undefined ||
+ sessionObj === null ||
+ sessionObj === ""
+ ) {
+ cache.session.setJSON("sessionObj", requestObj);
} else {
- cache.session.setJSON('sessionObj', requestObj)
+ const s_url = sessionObj.url; // 请求地址
+ const s_data = sessionObj.data; // 请求数据
+ const s_time = sessionObj.time; // 请求时间
+ const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
+ if (
+ s_data === requestObj.data &&
+ requestObj.time - s_time < interval &&
+ s_url === requestObj.url
+ ) {
+ const message = "数据正在处理,请勿重复提交";
+ console.warn(`[${s_url}]: ` + message);
+ return Promise.reject(new Error(message));
+ } else {
+ cache.session.setJSON("sessionObj", requestObj);
+ }
}
}
+ return config;
+ },
+ (error) => {
+ console.log(error);
+ Promise.reject(error);
}
- return config
-}, error => {
- console.log(error)
- Promise.reject(error)
-})
+);
// 响应拦截器
-service.interceptors.response.use(res => {
+service.interceptors.response.use(
+ (res) => {
// 未设置状态码则默认成功状态
const code = res.data.code || 200;
// 获取错误信息
- const msg = errorCode[code] || res.data.msg || errorCode['default']
+ const msg = errorCode[code] || res.data.msg || errorCode["default"];
// 二进制数据则直接返回
- if(res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer'){
- return res.data
+ if (
+ res.request.responseType === "blob" ||
+ res.request.responseType === "arraybuffer"
+ ) {
+ return res.data;
}
if (code === 401) {
if (!isRelogin.show) {
isRelogin.show = true;
- ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
- isRelogin.show = false;
- useUserStore().logOut().then(() => {
- location.href = '/index';
+ ElMessageBox.confirm(
+ "登录状态已过期,您可以继续留在该页面,或者重新登录",
+ "系统提示",
+ {
+ confirmButtonText: "重新登录",
+ cancelButtonText: "取消",
+ type: "warning",
+ }
+ )
+ .then(() => {
+ isRelogin.show = false;
+ useUserStore()
+ .logOut()
+ .then(() => {
+ location.href = "/index";
+ });
})
- }).catch(() => {
- isRelogin.show = false;
- });
- }
- return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
+ .catch(() => {
+ isRelogin.show = false;
+ });
+ }
+ return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
} else if (code === 500) {
- ElMessage({ message: msg, type: 'error' })
- return Promise.reject(new Error(msg))
+ ElMessage({ message: msg, type: "error" });
+ return Promise.reject(new Error(msg));
} else if (code === 601) {
- ElMessage({ message: msg, type: 'warning' })
- return Promise.reject(new Error(msg))
+ ElMessage({ message: msg, type: "warning" });
+ return Promise.reject(new Error(msg));
} else if (code !== 200) {
- ElNotification.error({ title: msg })
- return Promise.reject('error')
+ ElNotification.error({ title: msg });
+ return Promise.reject("error");
} else {
- return Promise.resolve(res.data)
+ return Promise.resolve(res.data);
}
},
- error => {
- console.log('err' + error)
+ (error) => {
+ console.log("err" + error);
let { message } = error;
if (message == "Network Error") {
message = "后端接口连接异常";
@@ -111,36 +149,47 @@ service.interceptors.response.use(res => {
} else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
- ElMessage({ message: message, type: 'error', duration: 5 * 1000 })
- return Promise.reject(error)
+ ElMessage({ message: message, type: "error", duration: 5 * 1000 });
+ return Promise.reject(error);
}
-)
+);
// 通用下载方法
export function download(url, params, filename, config) {
- downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)", })
- return service.post(url, params, {
- transformRequest: [(params) => { return tansParams(params) }],
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
- responseType: 'blob',
- ...config
- }).then(async (data) => {
- const isLogin = await blobValidate(data);
- if (isLogin) {
- const blob = new Blob([data])
- saveAs(blob, filename)
- } else {
- const resText = await data.text();
- const rspObj = JSON.parse(resText);
- const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
- ElMessage.error(errMsg);
- }
- downloadLoadingInstance.close();
- }).catch((r) => {
- console.error(r)
- ElMessage.error('下载文件出现错误,请联系管理员!')
- downloadLoadingInstance.close();
- })
+ downloadLoadingInstance = ElLoading.service({
+ text: "正在下载数据,请稍候",
+ background: "rgba(0, 0, 0, 0.7)",
+ });
+ return service
+ .post(url, params, {
+ transformRequest: [
+ (params) => {
+ return tansParams(params);
+ },
+ ],
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
+ responseType: "blob",
+ ...config,
+ })
+ .then(async (data) => {
+ const isLogin = await blobValidate(data);
+ if (isLogin) {
+ const blob = new Blob([data]);
+ saveAs(blob, filename);
+ } else {
+ const resText = await data.text();
+ const rspObj = JSON.parse(resText);
+ const errMsg =
+ errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
+ ElMessage.error(errMsg);
+ }
+ downloadLoadingInstance.close();
+ })
+ .catch((r) => {
+ console.error(r);
+ ElMessage.error("下载文件出现错误,请联系管理员!");
+ downloadLoadingInstance.close();
+ });
}
-export default service
+export default service;
diff --git a/src/views/flowable/form/index.vue b/src/views/flowable/form/index.vue
index 025874d..a615d72 100644
--- a/src/views/flowable/form/index.vue
+++ b/src/views/flowable/form/index.vue
@@ -100,14 +100,14 @@
详情
-
+
{{ row.modelName }}
@@ -159,60 +159,62 @@
class-name="small-padding fixed-width"
>
- 修改
- 设计
- 部署
-
-
-
-
-
- 更多
-
-
-
-
- 流程图
-
- 历史
-
- 删除
-
-
-
+
+
修改
+
设计
+
部署
+
+
+
+
+
+ 更多
+
+
+
+
+ 流程图
+
+ 历史
+
+ 删除
+
+
+
+
@@ -323,16 +325,16 @@
-
+ />
@@ -452,10 +454,11 @@ import {
import { listCategory } from "@/api/flowable/category";
import { ArrowDown } from "@element-plus/icons-vue";
import ProcessDesigner from "@/components/ProcessDesigner";
-// import ProcessViewer from "@/components/ProcessViewer";
+import ProcessViewer from "@/components/ProcessViewer";
import { getToken } from "@/utils/auth";
import { toRefs } from "vue";
-import { ElMessage } from "element-plus";
+import { ElMessage, ElMessageBox } from "element-plus";
+let bpmnXml;
// 显示搜索条件
const showSearch = ref(true);
// 遮罩层
@@ -598,12 +601,12 @@ function handleSelectionChange(selection) {
}
/** 部署流程 */
function handleDeploy(row) {
- this.loading = true;
+ loading.value = true;
deployModel({
modelId: row.modelId,
})
.then((response) => {
- this.$modal.msgSuccess(response.msg);
+ ElMessage.success(response.msg);
let obj = { name: "Deploy", path: "/workflow/deploy" };
return this.$store
.dispatch("tagsView/delCachedView", obj)
@@ -613,36 +616,36 @@ function handleDeploy(row) {
});
})
.finally(() => {
- this.loading = false;
+ loading.value = false;
});
}
/** 查看流程图 */
function handleProcessView(row) {
let modelId = row.modelId;
- this.processView.title = "流程图";
- this.processView.index = modelId;
+ processView.value.title = "流程图";
+ processView.value.index = modelId;
// 发送请求,获取xml
getBpmnXml(modelId).then((response) => {
- this.processView.xmlData = response.data;
+ processView.value.xmlData = response.data;
});
- this.processView.open = true;
+ processView.value.open = true;
}
function getHistoryList() {
- this.history.loading = true;
- historyModel(this.queryHistoryParams).then((response) => {
- this.historyTotal = response.total;
- this.historyList = response.rows;
- this.history.loading = false;
+ history.value.loading = true;
+ historyModel(queryHistoryParams.value).then((response) => {
+ historyTotal.value = response.total;
+ historyList.value = response.rows;
+ history.value.loading = false;
});
}
function handleHistory(row) {
- this.history.open = true;
- this.queryHistoryParams.modelKey = row.modelKey;
- this.getHistoryList();
+ history.value.open = true;
+ queryHistoryParams.value.modelKey = row.modelKey;
+ getHistoryList();
}
/** 设为最新版 */
function handleLatest(row) {
- this.$modal.confirm("是否确认将此版本设为最新?").then(() => {
+ ElMessageBox.confirm("是否确认将此版本设为最新?").then(() => {
this.history.loading = true;
latestModel({
modelId: row.modelId,
@@ -650,7 +653,7 @@ function handleLatest(row) {
.then((response) => {
this.history.open = false;
this.getList();
- this.$modal.msgSuccess(response.msg);
+ ElMessage.success(response.msg);
})
.finally(() => {
this.history.loading = false;
@@ -719,59 +722,58 @@ function handleDesigner(row) {
});
}
}
-function onSaveDesigner(bpmnXml) {
- this.bpmnXml = bpmnXml;
+function onSaveDesigner(bpmnXmlArgv) {
+ // bpmnXml = bpmnXmlArgv;
let dataBody = {
- modelId: this.designerData.modelId,
- bpmnXml: this.bpmnXml,
+ modelId: designerData.value.modelId,
+ bpmnXml: bpmnXmlArgv,
};
- this.$confirm("是否将此模型保存为新版本?", "提示", {
+ ElMessageBox.confirm("是否将此模型保存为新版本?", "提示", {
distinguishCancelAndClose: true,
confirmButtonText: "是",
cancelButtonText: "否",
})
.then(() => {
- this.confirmSave(dataBody, true);
+ confirmSave(dataBody, true);
})
.catch((action) => {
if (action === "cancel") {
- this.confirmSave(dataBody, false);
+ confirmSave(dataBody, false);
}
});
}
function confirmSave(body, newVersion) {
- this.designerData.loading = true;
+ designerData.value.loading = true;
saveModel(
Object.assign(body, {
newVersion: newVersion,
})
)
.then((res) => {
- this.$modal.msgSuccess(res.msg);
- this.designerOpen = false;
- this.getList();
+ ElMessage.success(res.msg);
+ designerOpen.value = false;
+ getList();
})
.catch((res) => {
- this.$modal.msgError(res.msg);
- this.designerData.loading = false;
+ ElMessage.error(res.msg);
+ designerData.value.loading = false;
});
}
/** 删除按钮操作 */
function handleDelete(row) {
- const modelIds = row.modelId || this.ids;
- this.$modal
- .confirm('是否确认删除模型编号为"' + modelIds + '"的数据项?')
+ const modelIds = row.modelId || ids.value;
+ ElMessageBox.confirm('是否确认删除模型编号为"' + modelIds + '"的数据项?')
.then(() => {
- this.loading = true;
+ loading.value = true;
return delModel(modelIds);
})
.then(() => {
- this.loading = false;
- this.getList();
- this.$modal.msgSuccess("删除成功");
+ loading.value = false;
+ getList();
+ ElMessage.success("删除成功");
})
.finally(() => {
- this.loading = false;
+ loading.value = false;
});
}
/** 导出按钮操作 */
@@ -821,6 +823,12 @@ function submitSave() {
getList();
getCategoryList();
+