流程优化

This commit is contained in:
vben
2025-11-17 20:05:11 +08:00
parent 69f19bfe10
commit 9ad4e93231
49 changed files with 174 additions and 174 deletions
+1 -1
View File
@@ -3,7 +3,7 @@
[![码云Gitee](https://gitee.com/vben/vben-web/badge/star.svg?theme=blue)](https://gitee.com/vben/vben-web)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)]()
vben-web 是vben系列框架的统一WEB前端,基于```玲娜贝er```大佬的 [ruoyi-plus-vben5](https://gitee.com/dapppp/ruoyi-plus-vben5) 改造,将Ant Design版本改造成Element Plus版本。
vben-web 是vben系列框架的统一WEB前端,基于```玲娜贝er```大佬的 [ruoyi-plus-vben5](https://gitee.com/dapppp/ruoyi-plus-vben5) 改造,将Ant Design Vue版本改造成Element Plus版本。
vben5 使用了最新前端技术栈,提供丰富的组件和模板以及N种偏好设置组合方案, 应用层可自由选择UI框架(Element Plus,Ant Design Vue,Native UI)
@@ -51,7 +51,7 @@ onMounted(async () => {
bpmnModeler.value.get('keyboard').bind(document);
if (props.prdid) {
const defData = (await requestClient.get(`/wf/def/${props.prdid}`)) as any;
const defData = (await requestClient.get(`/bpm/def/${props.prdid}`)) as any;
bpmnModeler.value.importXML(defData.dixml, (err: any) => {
if (err) {
console.error(err);
@@ -63,7 +63,7 @@ onMounted(async () => {
});
const initInfo = async () => {
const initVo = (await requestClient.get(`/wf/initInfo?prdid=${props.prdid}&busty=${props.busty}`)) as any;
const initVo = (await requestClient.get(`/bpm/initInfo?prdid=${props.prdid}&busty=${props.busty}`)) as any;
state.intro = initVo.intro;
for (const goal of initVo.goals) {
state.tarnos.push(goal.tarno);
@@ -80,7 +80,7 @@ const initInfo = async () => {
// 流程图切换
const toggleFlowChart = async () => {
if (!state.xml) {
state.xml = (await requestClient.get(`/wf/initXml?prdid=${props.prdid}`)) as any;
state.xml = (await requestClient.get(`/bpm/initXml?prdid=${props.prdid}`)) as any;
bpmnModeler.value = new CustomModeler({
container: canvasRef.value,
additionalModules: [
@@ -19,7 +19,7 @@ const props = defineProps({
const emit = defineEmits(['submit']);
// import Pmodal from '#/components/wf/pmodal.vue';
// import Pmodal from '#/components/bpm/pmodal.vue';
const headers = ref(globalHeaders());
@@ -82,7 +82,7 @@ onMounted(async () => {
});
const viewInfo = async () => {
const viewVo = (await requestClient.get(`/wf/viewInfo?proid=${props.proid}`)) as any;
const viewVo = (await requestClient.get(`/bpm/viewInfo?proid=${props.proid}`)) as any;
audits.value = viewVo.audits;
state.hiHamen = viewVo.hiHamen;
state.cutag = viewVo.cutag;
@@ -108,7 +108,7 @@ const viewInfo = async () => {
console.log(state.form);
// form.value = viewVo.zproc;
if (state.cutag) {
const passInfo: any = await requestClient.get(`/wf/passInfo?proid=${props.proid}&facno=${form.value.facno}&busty=${props.busty}`);
const passInfo: any = await requestClient.get(`/bpm/passInfo?proid=${props.proid}&facno=${form.value.facno}&busty=${props.busty}`);
for (const goal of passInfo.goals) {
if(passInfo.bacid){
@@ -171,7 +171,7 @@ const viewInfo = async () => {
};
const toggleFlowChart = async () => {
if (!state.xml) {
// const result = (await requestClient.get('/wf/zproc?proid=' + props.proid)) as any;
// const result = (await requestClient.get('/bpm/zproc?proid=' + props.proid)) as any;
//
// audits.value = result.audits;
// state.hiHamen = result.hiHamen;
@@ -180,7 +180,7 @@ const toggleFlowChart = async () => {
// state.cutag = result.cutag;
// form.value = result.zproc;
const map = (await requestClient.get(`/wf/viewXml?proid=${props.proid}`)) as any;
const map = (await requestClient.get(`/bpm/viewXml?proid=${props.proid}`)) as any;
state.xml = map.xml;
state.nodeList = map.nodeList;
state.lineList = map.lineList;
@@ -379,7 +379,7 @@ const addEventBusListener = () => {
const opChange = async (key: any) => {
if (key === 'refuse') {
state.refNodes = await requestClient.get(`/wf/refuseInfo?proid=${props.proid}&facno=${form.value.facno}`);
state.refNodes = await requestClient.get(`/bpm/refuseInfo?proid=${props.proid}&facno=${form.value.facno}`);
state.form.refno = state.refNodes[0].refno;
state.form.refna = '起草节点';
@@ -403,7 +403,7 @@ const opChange = async (key: any) => {
// { id: 'N6', name: 'xxx', exman: 'w5' },
// ];
} else if (key === 'cacommunicate') {
state.ccmen = await requestClient.get(`/wf/ccInfo?proid=${props.proid}`);
state.ccmen = await requestClient.get(`/bpm/ccInfo?proid=${props.proid}`);
}
};
@@ -424,7 +424,7 @@ const cdata = reactive({}) as any;
const tumanModal = () => {
orgModal.value.open({
opener: 'tuman',
orgType: 8,
orgType: 6,
selectMode: 1,
});
};
@@ -432,7 +432,7 @@ const tumanModal = () => {
const comenModal = () => {
orgModal.value.open({
opener: 'comen',
orgType: 8,
orgType: 6,
selectMode: 2,
orgs: toRaw(form.value.comen),
});
+1 -1
View File
@@ -12,7 +12,7 @@ export const overridesPreferences = defineOverridesPreferences({
* 不要动这里 后端路由模式
*/
// accessMode: 'frontend',
// defaultHomePath: '/wf/bus/main',
// defaultHomePath: '/bpm/bus/main',
accessMode: 'backend',
/**
* 不需要refresh token 由后端处理
@@ -0,0 +1,109 @@
import type { RouteRecordRaw } from 'vue-router';
const routes: RouteRecordRaw[] = [
{
meta: {
order: 11,
title: '流程管理',
},
name: 'Bpm',
path: '/bpm',
children: [
{
name: 'BpmBusCate',
path: '/bpm/bus/cate',
component: () => import('#/views/bpm/bus/cate/index.vue'),
meta: {
title: '流程分类',
},
},
{
name: 'BpmBusTmpl',
path: '/bpm/bus/tmpl',
component: () => import('#/views/bpm/bus/tmpl/index.vue'),
meta: {
title: '流程模板',
},
},
{
name: 'BpmBusTmplEdit',
path: '/bpm/bus/tmpl/edit',
component: () => import('#/views/bpm/bus/tmpl/edit.vue'),
meta: {
title: '流程模板编辑',
hideInMenu: true,
keepAlive: true,
activePath: '/bpm/bus/tmpl',
},
},
{
name: 'BpmBusMain',
path: '/bpm/bus/main',
component: () => import('#/views/bpm/bus/main/index.vue'),
meta: {
title: '流程清单',
affixTab: true,
},
},
{
name: 'BpmBusMainEdit',
path: '/bpm/bus/main/edit',
component: () => import('#/views/bpm/bus/main/edit.vue'),
meta: {
title: '流程编辑',
hideInMenu: true,
keepAlive: true,
activePath: '/bpm/bus/main',
},
},
{
name: 'BpmBusMainView',
path: '/bpm/bus/main/view',
component: () => import('#/views/bpm/bus/main/view.vue'),
meta: {
title: '流程查看',
hideInMenu: true,
keepAlive: true,
activePath: '/bpm/bus/main',
},
},
{
name: 'BpmTodo',
path: '/bpm/todo',
component: () => import('#/views/bpm/todo/index.vue'),
meta: {
title: '流程待办',
},
},
{
name: 'BpmOrgTree',
path: '/bpm/org/tree',
component: () => import('#/views/bpm/org/tree/index.vue'),
meta: {
title: '流程组织',
},
},
{
name: 'BpmOrgNode',
path: '/bpm/org/node',
component: () => import('#/views/bpm/org/node/index.vue'),
meta: {
title: '组织节点',
hideInMenu: true,
keepAlive: true,
activePath: '/bpm/org/node',
},
},
{
name: 'BpmOrgTree2',
path: '/bpm/org/tree2',
component: () => import('#/views/bpm/todo/index2.vue'),
meta: {
title: '待办测试',
},
},
],
},
];
export default routes;
@@ -1,109 +0,0 @@
import type { RouteRecordRaw } from 'vue-router';
const routes: RouteRecordRaw[] = [
{
meta: {
order: 11,
title: '流程管理',
},
name: 'Wf',
path: '/wf',
children: [
{
name: 'WfBusCate',
path: '/wf/bus/cate',
component: () => import('#/views/wf/bus/cate/index.vue'),
meta: {
title: '流程分类',
},
},
{
name: 'WfBusTmpl',
path: '/wf/bus/tmpl',
component: () => import('#/views/wf/bus/tmpl/index.vue'),
meta: {
title: '流程模板',
},
},
{
name: 'WfBusTmplEdit',
path: '/wf/bus/tmpl/edit',
component: () => import('#/views/wf/bus/tmpl/edit.vue'),
meta: {
title: '流程模板编辑',
hideInMenu: true,
keepAlive: true,
activePath: '/wf/bus/tmpl',
},
},
{
name: 'WfBusMain',
path: '/wf/bus/main',
component: () => import('#/views/wf/bus/main/index.vue'),
meta: {
title: '流程清单',
affixTab: true,
},
},
{
name: 'WfBusMainEdit',
path: '/wf/bus/main/edit',
component: () => import('#/views/wf/bus/main/edit.vue'),
meta: {
title: '流程编辑',
hideInMenu: true,
keepAlive: true,
activePath: '/wf/bus/main',
},
},
{
name: 'WfBusMainView',
path: '/wf/bus/main/view',
component: () => import('#/views/wf/bus/main/view.vue'),
meta: {
title: '流程查看',
hideInMenu: true,
keepAlive: true,
activePath: '/wf/bus/main',
},
},
{
name: 'WfTodo',
path: '/wf/todo',
component: () => import('#/views/wf/todo/index.vue'),
meta: {
title: '流程待办',
},
},
{
name: 'WfOrgTree',
path: '/wf/org/tree',
component: () => import('#/views/wf/org/tree/index.vue'),
meta: {
title: '流程组织',
},
},
{
name: 'WfOrgNode',
path: '/wf/org/node',
component: () => import('#/views/wf/org/node/index.vue'),
meta: {
title: '组织节点',
hideInMenu: true,
keepAlive: true,
activePath: '/wf/org/node',
},
},
{
name: 'WfOrgTree2',
path: '/wf/org/tree2',
component: () => import('#/views/wf/todo/index2.vue'),
meta: {
title: '待办测试',
},
},
],
},
];
export default routes;
@@ -6,7 +6,7 @@ const emits = defineEmits(['close']);
const formRef = ref();
const state = reactive({
url: '/wf/bus/cate',
url: '/bpm/bus/cate',
show: false,
form: {} as any,
});
@@ -6,7 +6,7 @@ import { treeItemDelete, treeQuery } from '#/utils/page/tree';
import DrawerEdit from './edit.vue';
const state = reactive({
url: '/wf/bus/cate',
url: '/bpm/bus/cate',
list: [] as any,
form: { name: '' } as any,
});
@@ -10,7 +10,7 @@ const props = defineProps({
const formRef = ref();
const state = reactive({
url: '/wf/bus/leave',
url: '/bpm/bus/leave',
form: {} as any,
});
@@ -7,7 +7,7 @@ import { parseTime } from '#/utils/ruoyi';
import DrawerEdit from './edit.vue';
const state = reactive({
url: '/wf/bus/leave',
url: '/bpm/bus/leave',
loading: false,
ids: [],
form: {
@@ -9,7 +9,7 @@ const props = defineProps({
const formRef = ref();
const state = reactive({
url: '/wf/bus/leave',
url: '/bpm/bus/leave',
form: {} as any,
});
@@ -12,7 +12,7 @@ import { useTabs } from '@vben/hooks';
import formCreate from '@form-create/element-ui';
import { requestClient } from '#/api/request';
import WfEdit from '#/components/wf/inst/iedit.vue';
import WfEdit from '#/components/bpm/inst/iedit.vue';
import { checkSubmit, tabSave } from '#/utils/page/edit';
import { emitter } from './mitt';
@@ -23,14 +23,14 @@ const formComp = shallowRef(null as any);
// const ComponentA = () => import('./ComponentA.vue');
const state = reactive({
url: '/wf/bus/main',
url: '/bpm/bus/main',
form: { prxml: '' } as any,
});
const tmplData = ref({} as any);
const { form } = toRefs(state);
const modules = import.meta.glob('/src/views/wf/bus/*/*.vue');
const modules = import.meta.glob('/src/views/bpm/bus/*/*.vue');
console.log("modules", modules);
onMounted(async () => {
const id = useRoute().query?.id;
@@ -39,7 +39,7 @@ onMounted(async () => {
state.form.tmpid = useRoute().query?.tmpid;
state.form.tmpna = useRoute().query?.tmpna;
}
tmplData.value = await requestClient.get(`wf/bus/tmpl/info/${state.form.tmpid}`);
tmplData.value = await requestClient.get(`bpm/bus/tmpl/info/${state.form.tmpid}`);
rule.value = JSON.parse(tmplData.value.frule);
state.form.prdid = tmplData.value.prdid;
if (tmplData.value.ftype === 1) {
@@ -64,7 +64,7 @@ const save = async () => {
if (!canSubmit) {
return false;
}
state.form.wfStartBo = wfEditRef.value.getOperateInfo();
state.form.bpmStartBo = wfEditRef.value.getOperateInfo();
if (tmplData.value.ftype === 1) {
const back = await formCompRef.value.save(state.form);
console.log(back);
@@ -3,12 +3,12 @@ import { Page } from '@vben/common-ui';
import CateTree from '#/components/tree/ViewTree.vue';
import { listDelete, listItemDelete, listQuery, listSelect } from '#/utils/page/list';
import TmplModal from '#/views/wf/bus/tmpl/select.vue';
import TmplModal from '#/views/bpm/bus/tmpl/select.vue';
import { emitter } from './mitt';
const state = reactive({
url: '/wf/bus/main',
url: '/bpm/bus/main',
loading: false,
ids: [],
form: {
@@ -88,7 +88,7 @@ const closeFlowTmplModal = (item: any) => {
<Page auto-content-height>
<div class="flex h-full gap-[8px]">
<div class="w-[260px]">
<CateTree @node-click="nodeClick" url="/wf/bus/tmpl/tree" tip="模板名称" />
<CateTree @node-click="nodeClick" url="/bpm/bus/tmpl/tree" tip="模板名称" />
</div>
<el-card style="height: 100%" body-style="height: 100%" class="box-card flex-1 overflow-hidden">
<template #header>
@@ -11,16 +11,16 @@ import { useTabs } from '@vben/hooks';
import formCreate from '@form-create/element-ui';
import { requestClient } from '#/api/request';
import WfView from '#/components/wf/inst/iview.vue';
import WfView from '#/components/bpm/inst/iview.vue';
import { checkSubmit, tabSave } from '#/utils/page/edit';
const formComp = shallowRef(null as any);
// const FormComponent = defineAsyncComponent(() => import('#/views/wf/bus/leave/view.vue'));
// const FormComponent = defineAsyncComponent(() => import('#/views/bpm/bus/leave/view.vue'));
const formRef = ref();
const state = reactive({
url: '/wf/bus/main',
url: '/bpm/bus/main',
form: {} as any,
});
@@ -28,12 +28,12 @@ const tmplData = ref({} as any);
const { form } = toRefs(state);
const modules = import.meta.glob('/src/views/wf/bus/*/*.vue');
const modules = import.meta.glob('/src/views/bpm/bus/*/*.vue');
console.log("modules2", modules);
onMounted(async () => {
const id = useRoute().query?.id;
state.form = await requestClient.get(`${state.url}/info/${id}`);
tmplData.value = await requestClient.get(`wf/bus/tmpl/info/${state.form.tmpid}`);
tmplData.value = await requestClient.get(`bpm/bus/tmpl/info/${state.form.tmpid}`);
rule.value = JSON.parse(tmplData.value.frule);
console.log(state.form);
initTag.value = true;
@@ -8,7 +8,7 @@ import FcDesigner from '@form-create/designer';
import { requestClient } from '#/api/request';
import OrgModal from '#/components/sys/OrgModal.vue';
import WfDefEdit from '#/components/wf/def/dedit.vue';
import WfDefEdit from '#/components/bpm/def/dedit.vue';
import { tabSave } from '#/utils/page/edit';
import { emitter } from './mitt';
@@ -16,7 +16,7 @@ import { emitter } from './mitt';
const formRef = ref();
const state = reactive({
url: '/wf/bus/tmpl',
url: '/bpm/bus/tmpl',
form: { prxml: '' } as any,
});
@@ -31,7 +31,7 @@ onMounted(async () => {
state.form.catid = catid;
}
}
cateOptions.value = await requestClient.get('/wf/bus/cate/tree');
cateOptions.value = await requestClient.get('/bpm/bus/cate/tree');
wfShowTag.value = true;
formRef?.value?.clearValidate();
if (id) {
@@ -44,7 +44,7 @@ const save = async () => {
if (state.form.ftype === 2) {
state.form.frule = designer.value?.getJson();
}
state.form.wfXml = await wfDefEditRef.value.getXml();
state.form.bpmXml = await wfDefEditRef.value.getXml();
const back = await tabSave({
formRef: formRef.value,
state,
@@ -7,7 +7,7 @@ import { listDelete, listItemDelete, listQuery, listSelect } from '#/utils/page/
import { emitter } from './mitt';
const state = reactive({
url: '/wf/bus/tmpl',
url: '/bpm/bus/tmpl',
loading: false,
ids: [],
form: {
@@ -64,7 +64,7 @@ function handleEdit(row: any) {
<Page auto-content-height>
<div class="flex h-full gap-[8px]">
<div class="w-[260px]">
<CateTree @node-click="nodeClick" url="/wf/bus/cate/tree" />
<CateTree @node-click="nodeClick" url="/bpm/bus/cate/tree" />
</div>
<el-card style="height: 100%" body-style="height: 100%" class="box-card flex-1 overflow-hidden">
<template #header>
@@ -23,7 +23,7 @@ async function onSearch() {
}
const receInit = async () => {
const res = await requestClient.get(`/wf/bus/tmpl/list`);
const res = await requestClient.get(`/bpm/bus/tmpl/list`);
receItems.value = res.rows;
};
@@ -38,7 +38,7 @@ function receItemClick(item: any) {
async function nodeClick(node: any) {
if (node && node.id) {
tierItems.value = await requestClient.get(`/wf/bus/tmpl/list?catid=${node.id}`);
tierItems.value = await requestClient.get(`/bpm/bus/tmpl/list?catid=${node.id}`);
}
}
@@ -55,7 +55,7 @@ function tierItemClick(item: any) {
// region 与父组件的交互逻辑
const openModal = async (data: any) => {
state.show = true;
tierItems.value = await requestClient.get(`/wf/bus/tmpl/list`);
tierItems.value = await requestClient.get(`/bpm/bus/tmpl/list`);
};
defineExpose({ openModal });
@@ -86,7 +86,7 @@ onMounted(async () => {
<el-row>
<el-col :span="12">
<div style="height: 390px">
<CateTree @node-click="nodeClick" url="/wf/bus/cate/tree" />
<CateTree @node-click="nodeClick" url="/bpm/bus/cate/tree" />
</div>
</el-col>
<el-col :span="12">
@@ -135,7 +135,7 @@ function receItemClick(item: any) {
async function nodeClick(node: any) {
if (node && node.id) {
const res = await requestClient.get(`/wf/bus/tmpl/list?cateId=${node.id}`);
const res = await requestClient.get(`/bpm/bus/tmpl/list?cateId=${node.id}`);
tierItems.value = res.rows;
for (const tItem of tierItems.value) {
for (const sItem of seldItems.value) {
@@ -305,7 +305,7 @@ const clearAndcloseModal = () => {
<el-row>
<el-col :span="12">
<div style="height: 390px">
<CateTree @node-click="nodeClick" url="/wf/bus/cate" ref="cateTreeRef" />
<CateTree @node-click="nodeClick" url="/bpm/bus/cate" ref="cateTreeRef" />
</div>
</el-col>
<el-col :span="12">
@@ -6,7 +6,7 @@ import { modalSave, reset } from '#/utils/page/edit';
const emits = defineEmits(['close']);
const state = reactive({
url: '/wf/org/node',
url: '/bpm/org/node',
show: false,
form: {} as any,
});
@@ -8,7 +8,7 @@ import { treeDelete, treeItemDelete, treeQuery, treeSelect } from '#/utils/page/
import DrawerEdit from './edit.vue';
const state = reactive({
url: '/wf/org/node',
url: '/bpm/org/node',
loading: false,
ids: [],
form: {} as any,
@@ -11,7 +11,7 @@ const emits = defineEmits(['close']);
const formRef = ref();
const state = reactive({
url: '/wf/org/tree',
url: '/bpm/org/tree',
show: false,
form: {} as any,
});
@@ -28,7 +28,7 @@ const open = async (data: any) => {
state.form.catid = data.catid;
}
}
rdata.cates = await requestClient.get(`/wf/org/treec/tree`);
rdata.cates = await requestClient.get(`/bpm/org/treec/tree`);
state.show = true;
formRef?.value?.clearValidate();
};
@@ -7,7 +7,7 @@ import { listDelete, listItemDelete, listQuery, listSelect } from '#/utils/page/
import DrawerEdit from './edit.vue';
const state = reactive({
url: '/wf/org/tree',
url: '/bpm/org/tree',
loading: false,
ids: [],
form: {
@@ -36,7 +36,7 @@ const editClose = async () => {
const router = useRouter();
const toNode = (data: any) => {
router.push({ path: '/wf/org/node', query: data });
router.push({ path: '/bpm/org/node', query: data });
};
</script>
@@ -44,7 +44,7 @@ const toNode = (data: any) => {
<Page auto-content-height>
<div class="flex h-full gap-[8px]">
<div class="w-[260px]">
<EditTree @node-click="nodeClick" url="/wf/org/treec" tip="组织树分类" :type="0" />
<EditTree @node-click="nodeClick" url="/bpm/org/treec" tip="组织树分类" :type="0" />
</div>
<el-card style="height: 100%" body-style="height: 100%" class="box-card flex-1 overflow-hidden">
<template #header>
@@ -8,7 +8,7 @@ import { tabSave } from '#/utils/page/edit';
const formRef = ref();
const state = reactive({
url: '/wf/todo/main',
url: '/bpm/todo/main',
show: true,
form: { avtag: true } as any,
});
@@ -4,7 +4,7 @@ import { Page } from '@vben/common-ui';
import { listDelete, listItemDelete, listQuery, listSelect } from '#/utils/page/list';
const state = reactive({
url: '/wf/todo/main',
url: '/bpm/todo/main',
loading: false,
ids: [],
form: {
@@ -19,11 +19,11 @@ const state = reactive({
const router = useRouter();
function handleAdd() {
router.push('/wf/todo/main/edit');
router.push('/bpm/todo/main/edit');
}
function handleEdit(row: any) {
router.push({ path: '/wf/todo/main/edit', query: { id: row.id } });
router.push({ path: '/bpm/todo/main/edit', query: { id: row.id } });
}
onMounted(async () => {
@@ -6,7 +6,7 @@ import { debounce } from 'lodash-es';
import AppvCard from './approval-card.vue';
const state = reactive({
url: '/wf/org/tree',
url: '/bpm/org/tree',
loading: false,
ids: [],
form: {
@@ -67,7 +67,7 @@ const save = async () => {
<el-form-item label="账号名称" prop="usnam" :rules="[{ required: true, message: '用户名称不能为空' }]">
<el-input v-model="form.usnam" />
</el-form-item>
<el-form-item label="用户密码" prop="pacod" :rules="[{ required: true, message: '用户密码不能为空' }]">
<el-form-item label="用户密码" prop="pacod" :rules="[{ required: true, message: '用户密码不能为空' }]" v-if="!form.id">
<el-input v-model="form.pacod" type="password" maxlength="32" show-password />
</el-form-item>
<el-form-item label="手机号码" prop="monum" :rules="[{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: '请输入正确的手机号码', trigger: 'blur' }]">
+8 -8
View File
@@ -7,11 +7,11 @@ export {}
/* prettier-ignore */
declare module 'vue' {
export interface GlobalComponents {
Code: typeof import('./../src/components/wf/def/code.vue')['default']
Code: typeof import('./../src/components/bpm/def/code.vue')['default']
Cropper: typeof import('./../src/components/cropper/src/cropper.vue')['default']
CropperAvatar: typeof import('./../src/components/cropper/src/cropper-avatar.vue')['default']
CropperModal: typeof import('./../src/components/cropper/src/cropper-modal.vue')['default']
Dedit: typeof import('./../src/components/wf/def/dedit.vue')['default']
Dedit: typeof import('./../src/components/bpm/def/dedit.vue')['default']
DictTag: typeof import('./../src/components/DictTag/index.vue')['default']
Editor: typeof import('./../src/components/tinymce/src/editor.vue')['default']
EditTree: typeof import('./../src/components/tree/EditTree.vue')['default']
@@ -61,19 +61,19 @@ declare module 'vue' {
ElUpload: typeof import('element-plus/es')['ElUpload']
FileUpload: typeof import('./../src/components/FileUpload/index.vue')['default']
FileUpload2: typeof import('./../src/components/tool/FileUpload2.vue')['default']
Func: typeof import('./../src/components/wf/def/func.vue')['default']
Iedit: typeof import('./../src/components/wf/inst/iedit.vue')['default']
Func: typeof import('./../src/components/bpm/def/func.vue')['default']
Iedit: typeof import('./../src/components/bpm/inst/iedit.vue')['default']
ImageUpload: typeof import('./../src/components/ImageUpload/index.vue')['default']
Iview: typeof import('./../src/components/wf/inst/iview.vue')['default']
Modal: typeof import('./../src/components/wf/def/modal.vue')['default']
Iview: typeof import('./../src/components/bpm/inst/iview.vue')['default']
Modal: typeof import('./../src/components/bpm/def/modal.vue')['default']
OrgModal: typeof import('./../src/components/sys/OrgModal.vue')['default']
OrgModal_old: typeof import('./../src/components/sys/OrgModal_old.vue')['default']
OrgModal2: typeof import('./../src/components/sys/OrgModal2.vue')['default']
Pmodal: typeof import('./../src/components/wf/pmodal.vue')['default']
Pmodal: typeof import('./../src/components/bpm/pmodal.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
Src: typeof import('./../src/components/RePhoneInput/src/index.vue')['default']
TaskModal: typeof import('./../src/components/wf/def/modal/TaskModal.vue')['default']
TaskModal: typeof import('./../src/components/bpm/def/modal/TaskModal.vue')['default']
ViewTree: typeof import('./../src/components/tree/ViewTree.vue')['default']
}
export interface ComponentCustomProperties {