diff --git a/jsconfig.json b/jsconfig.json
new file mode 100644
index 0000000..abe04df
--- /dev/null
+++ b/jsconfig.json
@@ -0,0 +1,8 @@
+{
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ }
+}
diff --git a/package.json b/package.json
index 467eb6f..4f382a0 100644
--- a/package.json
+++ b/package.json
@@ -52,6 +52,7 @@
"unplugin-auto-import": "0.11.4",
"vite": "3.2.3",
"vite-plugin-compression": "0.5.1",
+ "vite-plugin-node-polyfills": "^0.5.0",
"vite-plugin-svg-icons": "2.0.1",
"vite-plugin-vue-setup-extend": "0.4.0"
}
diff --git a/src/api/flowable/category.js b/src/api/flowable/category.js
index 447ec72..cec6a71 100644
--- a/src/api/flowable/category.js
+++ b/src/api/flowable/category.js
@@ -1,8 +1,20 @@
import request from "@/utils/request";
-export const listCategory = (query) =>
+export const listAllCategory = (query) =>
request({
url: "/flowable/category/list",
method: "get",
params: query,
});
+export const addCategory = (data) =>
+ request({
+ url: "/flowable/category",
+ method: "post",
+ data
+ });
+export const delCategory = (ids) =>
+ request({
+ url: "/flowable/category",
+ method: "delete",
+ data: { ids }
+ });
diff --git a/src/api/flowable/deploy.js b/src/api/flowable/deploy.js
new file mode 100644
index 0000000..3a8ff76
--- /dev/null
+++ b/src/api/flowable/deploy.js
@@ -0,0 +1,51 @@
+import request from '@/utils/request'
+
+// 查询流程部署列表
+export function listDeploy(query) {
+ return request({
+ url: '/workflow/deploy/list',
+ method: 'get',
+ params: query
+ })
+}
+
+export function listPublish(query) {
+ return request({
+ url: '/workflow/deploy/publishList',
+ method: 'get',
+ params: query
+ })
+}
+
+// 获取流程模型流程图
+export function getBpmnXml(definitionId) {
+ return request({
+ url: '/workflow/deploy/bpmnXml/' + definitionId,
+ method: 'get'
+ })
+}
+
+// 修改流程状态
+export function changeState(params) {
+ return request({
+ url: '/workflow/deploy/changeState',
+ method: 'put',
+ params: params
+ })
+}
+
+// 删除流程部署
+export function delDeploy(deployIds) {
+ return request({
+ url: '/workflow/deploy/' + deployIds,
+ method: 'delete'
+ })
+}
+
+// 查询流程部署关联表单信息
+export function getFormByDeployId(deployId) {
+ return request({
+ url: '/workflow/deploy/form/' + deployId,
+ method: 'get',
+ })
+}
diff --git a/src/plugins/package/penal/PropertiesPanel.vue b/src/plugins/package/penal/PropertiesPanel.vue
index 0decdd9..279c076 100644
--- a/src/plugins/package/penal/PropertiesPanel.vue
+++ b/src/plugins/package/penal/PropertiesPanel.vue
@@ -127,7 +127,6 @@ import ElementProperties from "./properties/ElementProperties";
import ElementForm from "./form/ElementForm";
import UserTaskListeners from "./listeners/UserTaskListeners";
import { provide, toRefs, watch } from "vue";
-import useBpmnStore from "@/store/modules/bpmn";
const props = defineProps({
bpmnModeler: Object,
diff --git a/src/plugins/package/utils.js b/src/plugins/package/utils.js
index a367aa0..b031539 100644
--- a/src/plugins/package/utils.js
+++ b/src/plugins/package/utils.js
@@ -1,5 +1,3 @@
-import useBpmnStore from "@/store/modules/bpmn";
-const bpmnStore = useBpmnStore();
// 创建监听器实例
export function createListenerObject(options, isTask, prefix) {
const listenerObj = Object.create(null);
diff --git a/src/utils/generator/parser.jsx b/src/utils/generator/parser.jsx
index bf440bc..58fb29a 100644
--- a/src/utils/generator/parser.jsx
+++ b/src/utils/generator/parser.jsx
@@ -1,59 +1,66 @@
-import { deepClone } from '@/utils/index';
-import { getToken } from '@/utils/auth';
-import render from '@/utils/generator/render';
-import axios from 'axios'
-import Vue from 'vue';
+import { deepClone } from "@/utils/index";
+import { getToken } from "@/utils/auth";
+import render from "@/utils/generator/render";
+import axios from "axios";
+import { defineComponent } from "vue";
-Vue.prototype.$axios = axios
+// Vue.prototype.$axios = axios;
const ruleTrigger = {
- 'el-input': 'blur',
- 'el-input-number': 'blur',
- 'el-select': 'change',
- 'el-radio-group': 'change',
- 'el-checkbox-group': 'change',
- 'el-cascader': 'change',
- 'el-time-picker': 'change',
- 'el-date-picker': 'change',
- 'el-rate': 'change',
- 'el-upload': 'change'
-}
+ "el-input": "blur",
+ "el-input-number": "blur",
+ "el-select": "change",
+ "el-radio-group": "change",
+ "el-checkbox-group": "change",
+ "el-cascader": "change",
+ "el-time-picker": "change",
+ "el-date-picker": "change",
+ "el-rate": "change",
+ "el-upload": "change",
+};
const layouts = {
colFormItem(h, scheme) {
- const config = scheme.__config__
- const listeners = buildListeners.call(this, scheme)
+ const config = scheme.__config__;
+ const listeners = buildListeners.call(this, scheme);
- let labelWidth = config.labelWidth ? `${config.labelWidth}px` : null
- if (config.showLabel === false) labelWidth = '0'
+ let labelWidth = config.labelWidth ? `${config.labelWidth}px` : null;
+ if (config.showLabel === false) labelWidth = "0";
return (
-
+
- )
+ );
},
rowFormItem(h, scheme) {
- let child = renderChildren.apply(this, arguments)
- if (scheme.type === 'flex') {
- child =
- {child}
-
+ let child = renderChildren.apply(this, arguments);
+ if (scheme.type === "flex") {
+ child = (
+
+ {child}
+
+ );
}
return (
-
- {child}
-
+ {child}
- )
- }
-}
+ );
+ },
+};
function renderFrom(h) {
- const { formConfCopy } = this
+ const { formConfCopy } = this;
return (
@@ -71,173 +78,181 @@ function renderFrom(h) {
{formConfCopy.formBtns && formBtns.call(this, h)}
- )
+ );
}
function formBtns(h) {
- return
-
- 提交
- 重置
-
-
+ return (
+
+
+
+ 提交
+
+ 重置
+
+
+ );
}
function renderFormItem(h, elementList) {
- return elementList.map(scheme => {
- const config = scheme.__config__
- const layout = layouts[config.layout]
+ return elementList.map((scheme) => {
+ const config = scheme.__config__;
+ const layout = layouts[config.layout];
if (layout) {
- return layout.call(this, h, scheme)
+ return layout.call(this, h, scheme);
}
- throw new Error(`没有与${config.layout}匹配的layout`)
- })
+ throw new Error(`没有与${config.layout}匹配的layout`);
+ });
}
function renderChildren(h, scheme) {
- const config = scheme.__config__
- if (!Array.isArray(config.children)) return null
- return renderFormItem.call(this, h, config.children)
+ const config = scheme.__config__;
+ if (!Array.isArray(config.children)) return null;
+ return renderFormItem.call(this, h, config.children);
}
function setValue(event, config, scheme) {
- this.$set(config, 'defaultValue', event)
- this.$set(this[this.formConf.formModel], scheme.__vModel__, event)
+ this.$set(config, "defaultValue", event);
+ this.$set(this[this.formConf.formModel], scheme.__vModel__, event);
}
function buildListeners(scheme) {
- const config = scheme.__config__
- const methods = this.formConf.__methods__ || {}
- const listeners = {}
+ const config = scheme.__config__;
+ const methods = this.formConf.__methods__ || {};
+ const listeners = {};
// 给__methods__中的方法绑定this和event
- Object.keys(methods).forEach(key => {
- listeners[key] = event => methods[key].call(this, event)
- })
+ Object.keys(methods).forEach((key) => {
+ listeners[key] = (event) => methods[key].call(this, event);
+ });
// 响应 render.js 中的 vModel $emit('input', val)
- listeners.input = event => setValue.call(this, event, config, scheme)
+ listeners.input = (event) => setValue.call(this, event, config, scheme);
- return listeners
+ return listeners;
}
-export default {
+export default defineComponent({
components: {
- render
+ render,
},
props: {
formConf: {
type: Object,
- required: true
- }
+ required: true,
+ },
},
data() {
const data = {
formConfCopy: deepClone(this.formConf),
[this.formConf.formModel]: {},
- [this.formConf.formRules]: {}
- }
- this.initFormData(data.formConfCopy.fields, data[this.formConf.formModel])
- this.buildRules(data.formConfCopy.fields, data[this.formConf.formRules])
- return data
+ [this.formConf.formRules]: {},
+ };
+ this.initFormData(data.formConfCopy.fields, data[this.formConf.formModel]);
+ this.buildRules(data.formConfCopy.fields, data[this.formConf.formRules]);
+ return data;
},
methods: {
initFormData(componentList, formData) {
- componentList.forEach(cur => {
- this.buildOptionMethod(cur)
+ componentList.forEach((cur) => {
+ this.buildOptionMethod(cur);
const config = cur.__config__;
if (cur.__vModel__) {
formData[cur.__vModel__] = config.defaultValue;
// 初始化文件列表
if (cur.action && config.defaultValue) {
- cur['file-list'] = config.defaultValue;
+ cur["file-list"] = config.defaultValue;
}
}
if (cur.action) {
- cur['headers'] = {
+ cur["headers"] = {
Authorization: "Bearer " + getToken(),
- }
- cur['on-success'] = (res, file, fileList) => {
+ };
+ cur["on-success"] = (res, file, fileList) => {
formData[cur.__vModel__] = fileList;
if (res.code === 200 && fileList) {
config.defaultValue = fileList;
- config.defaultValue.forEach(val => {
+ config.defaultValue.forEach((val) => {
val.url = file.response.data.url;
val.ossId = file.response.data.ossId;
- val.response = null
- })
+ val.response = null;
+ });
}
};
// 点击文件列表中已上传的文件时的钩子
- cur['on-preview'] = (file) => {
- this.$download.oss(file.ossId)
- }
+ cur["on-preview"] = (file) => {
+ this.$download.oss(file.ossId);
+ };
}
if (config.children) {
this.initFormData(config.children, formData);
}
- })
+ });
},
// 特殊处理的 Option
buildOptionMethod(scheme) {
const config = scheme.__config__;
- if (config && config.tag === 'el-cascader') {
- if (config.dataType === 'dynamic') {
+ if (config && config.tag === "el-cascader") {
+ if (config.dataType === "dynamic") {
this.$axios({
method: config.method,
- url: config.url
- }).then(resp => {
- var { data } = resp
- scheme[config.dataConsumer] = data[config.dataKey]
+ url: config.url,
+ }).then((resp) => {
+ var { data } = resp;
+ scheme[config.dataConsumer] = data[config.dataKey];
});
}
}
},
buildRules(componentList, rules) {
- componentList.forEach(cur => {
- const config = cur.__config__
+ componentList.forEach((cur) => {
+ const config = cur.__config__;
if (Array.isArray(config.regList)) {
if (config.required) {
- const required = { required: config.required, message: cur.placeholder }
+ const required = {
+ required: config.required,
+ message: cur.placeholder,
+ };
if (Array.isArray(config.defaultValue)) {
- required.type = 'array'
- required.message = `请至少选择一个${config.label}`
+ required.type = "array";
+ required.message = `请至少选择一个${config.label}`;
}
- required.message === undefined && (required.message = `${config.label}不能为空`)
- config.regList.push(required)
+ required.message === undefined &&
+ (required.message = `${config.label}不能为空`);
+ config.regList.push(required);
}
- rules[cur.__vModel__] = config.regList.map(item => {
- item.pattern && (item.pattern = eval(item.pattern))
- item.trigger = ruleTrigger && ruleTrigger[config.tag]
- return item
- })
+ rules[cur.__vModel__] = config.regList.map((item) => {
+ item.pattern && (item.pattern = eval(item.pattern));
+ item.trigger = ruleTrigger && ruleTrigger[config.tag];
+ return item;
+ });
}
- if (config.children) this.buildRules(config.children, rules)
- })
+ if (config.children) this.buildRules(config.children, rules);
+ });
},
resetForm() {
- this.formConfCopy = deepClone(this.formConf)
- this.$refs[this.formConf.formRef].resetFields()
+ this.formConfCopy = deepClone(this.formConf);
+ this.$refs[this.formConf.formRef].resetFields();
},
submitForm() {
- this.$refs[this.formConf.formRef].validate(valid => {
- if (!valid) return false
+ this.$refs[this.formConf.formRef].validate((valid) => {
+ if (!valid) return false;
const params = {
formData: this.formConfCopy,
- valData: this[this.formConf.formModel]
- }
- this.$emit('submit', params)
- return true
- })
+ valData: this[this.formConf.formModel],
+ };
+ this.$emit("submit", params);
+ return true;
+ });
},
// 传值给父组件
- getData(){
- debugger
- this.$emit('getData', this[this.formConf.formModel])
+ getData() {
+ debugger;
+ this.$emit("getData", this[this.formConf.formModel]);
// this.$emit('getData',this.formConfCopy)
- }
+ },
},
render(h) {
- return renderFrom.call(this, h)
- }
-}
+ return renderFrom.call(this, h);
+ },
+});
diff --git a/src/views/flowable/category/index.vue b/src/views/flowable/category/index.vue
index b15f3b0..cee7dc5 100644
--- a/src/views/flowable/category/index.vue
+++ b/src/views/flowable/category/index.vue
@@ -145,7 +145,7 @@
-
+
@@ -172,12 +172,13 @@
+
+
diff --git a/src/views/flowable/form/index.vue b/src/views/flowable/form/index.vue
index a615d72..54455db 100644
--- a/src/views/flowable/form/index.vue
+++ b/src/views/flowable/form/index.vue
@@ -19,12 +19,12 @@
搜索
- 重置
@@ -35,10 +35,10 @@
新增
@@ -46,11 +46,11 @@
修改
@@ -58,11 +58,11 @@
删除
@@ -70,15 +70,15 @@
导出
@@ -97,28 +97,26 @@
align="center"
class-name="small-padding fixed-width"
>
-
-
+ 详情
修改
删除
@@ -128,13 +126,13 @@
-
+
@@ -146,16 +144,18 @@
-
+
+
+
@@ -176,6 +176,7 @@ import {
} from "@/api/flowable/form";
import Editor from "@/components/Editor";
import Parser from "@/utils/generator/parser";
+import { ElMessage, ElMessageBox } from "element-plus";
import { reactive } from "vue";
import { useRouter } from "vue-router";
@@ -272,19 +273,12 @@ function handleAdd() {
// this.reset();
// this.open = true;
// this.title = "添加流程表单";
- router.push({ path: "/tool/build/index", query: { formId: null } });
+ router.push({ path: "/flowable/form/build", query: { formId: null } });
}
/** 修改按钮操作 */
function handleUpdate(row) {
- // this.reset();
- // const formId = row.formId || this.ids
- // getForm(formId).then(response => {
- // this.form = response.data;
- // this.open = true;
- // this.title = "修改流程表单";
- // });
router.push({
- path: "/tool/build/index",
+ path: "/flowable/form/build",
query: { formId: row.formId },
});
}
@@ -310,8 +304,8 @@ function submitForm() {
}
/** 删除按钮操作 */
function handleDelete(row) {
- const formIds = row.formId || this.ids;
- this.$confirm(
+ const formIds = row.formId || ids.value;
+ ElMessageBox.confirm(
'是否确认删除流程表单编号为"' + formIds + '"的数据项?',
"警告",
{
@@ -324,8 +318,8 @@ function handleDelete(row) {
return delForm(formIds);
})
.then(() => {
- this.getList();
- this.$modal.msgSuccess("删除成功");
+ getList();
+ ElMessage.success("删除成功");
});
}
/** 导出按钮操作 */
diff --git a/src/views/flowable/model/index.vue b/src/views/flowable/model/index.vue
index 19812f7..a8a3f7c 100644
--- a/src/views/flowable/model/index.vue
+++ b/src/views/flowable/model/index.vue
@@ -451,7 +451,7 @@ import {
delModel,
deployModel,
} from "@/api/flowable/model";
-import { listCategory } from "@/api/flowable/category";
+import { listAllCategory } from "@/api/flowable/category";
import { ArrowDown } from "@element-plus/icons-vue";
import ProcessDesigner from "@/components/ProcessDesigner";
import ProcessViewer from "@/components/ProcessViewer";
@@ -557,7 +557,7 @@ const {
/** 查询流程分类列表 */
function getCategoryList() {
- listCategory().then((response) => (categoryOptions.value = response.rows));
+ listAllCategory().then((response) => (categoryOptions.value = response.rows));
}
/** 查询流程模型列表 */
function getList() {
@@ -608,12 +608,12 @@ function handleDeploy(row) {
.then((response) => {
ElMessage.success(response.msg);
let obj = { name: "Deploy", path: "/workflow/deploy" };
- return this.$store
- .dispatch("tagsView/delCachedView", obj)
+ // return this.$store
+ // .dispatch("tagsView/delCachedView", obj)
- .then(() => {
- this.$router.push(obj);
- });
+ // .then(() => {
+ // this.$router.push(obj);
+ // });
})
.finally(() => {
loading.value = false;
@@ -826,6 +826,7 @@ getCategoryList();
diff --git a/src/views/tool/build/index.vue b/src/views/tool/build/index.vue
index 071d241..fa252ee 100644
--- a/src/views/tool/build/index.vue
+++ b/src/views/tool/build/index.vue
@@ -165,6 +165,7 @@