diff --git a/.env.production b/.env.production index d857bba..9e6caae 100644 --- a/.env.production +++ b/.env.production @@ -5,7 +5,7 @@ VITE_APP_TITLE = 若依管理系统 VITE_APP_ENV = 'production' # 若依管理系统/生产环境 -VITE_APP_BASE_API = '/prod-api' +VITE_APP_BASE_API = 'http://192.168.110.10:1616' # 是否在打包时开启压缩,支持 gzip 和 brotli VITE_BUILD_COMPRESS = gzip \ No newline at end of file diff --git a/src/api/flowable/finished.js b/src/api/flowable/finished.js new file mode 100644 index 0000000..69a1e8f --- /dev/null +++ b/src/api/flowable/finished.js @@ -0,0 +1,10 @@ +import request from '@/utils/request' + +// 撤回任务 +export function revokeProcess(data) { + return request({ + url: '/workflow/task/revokeProcess', + method: 'post', + data: data + }) +} diff --git a/src/api/flowable/process.js b/src/api/flowable/process.js new file mode 100644 index 0000000..09c207b --- /dev/null +++ b/src/api/flowable/process.js @@ -0,0 +1,141 @@ +import request from '@/utils/request' + +// 查询流程列表 +export function listProcess(query) { + return request({ + url: '/workflow/process/list', + method: 'get', + params: query + }) +} + +// 查询流程列表 +export function getProcessForm(query) { + return request({ + url: '/workflow/process/getProcessForm', + method: 'get', + params: query + }) +} + +// 部署流程实例 +export function startProcess(processDefId, data) { + return request({ + url: '/workflow/process/start/' + processDefId, + method: 'post', + data: data + }) +} + +// 获取流程图 +export function getBpmnXml(processDefId) { + return request({ + url: '/workflow/process/bpmnXml/' + processDefId, + method: 'get' + }) +} + +export function detailProcess(query) { + return request({ + url: '/workflow/process/detail', + method: 'get', + params: query + }) +} + +// 我的发起的流程 +export function listOwnProcess(query) { + return request({ + url: '/workflow/process/ownList', + method: 'get', + params: query + }) +} + +// 我待办的流程 +export function listTodoProcess(query) { + return request({ + url: '/workflow/process/todoList', + method: 'get', + params: query + }) +} + +// 我待签的流程 +export function listClaimProcess(query) { + return request({ + url: '/workflow/process/claimList', + method: 'get', + params: query + }) +} + +// 我已办的流程 +export function listFinishedProcess(query) { + return request({ + url: '/workflow/process/finishedList', + method: 'get', + params: query + }) +} + +// 查询流程抄送列表 +export function listCopyProcess(query) { + return request({ + url: '/workflow/process/copyList', + method: 'get', + params: query + }) +} + +// 完成任务 +export function complete(data) { + return request({ + url: '/workflow/task/complete', + method: 'post', + data: data + }) +} + +// 取消申请 +export function stopProcess(data) { + return request({ + url: '/workflow/task/stopProcess', + method: 'post', + data: data + }) +} + +// 驳回任务 +export function rejectTask(data) { + return request({ + url: '/workflow/task/reject', + method: 'post', + data: data + }) +} + +// 可退回任务列表 +export function returnList(data) { + return request({ + url: '/workflow/task/returnList', + method: 'post', + data: data + }) +} + +// 部署流程实例 +export function deployStart(deployId) { + return request({ + url: '/workflow/process/startFlow/' + deployId, + method: 'get', + }) +} + +// 删除流程实例 +export function delProcess(id) { + return request({ + url: '/workflow/instance/delete/?instanceId=' + id, + method: 'delete' + }) +} diff --git a/src/api/flowable/todo.js b/src/api/flowable/todo.js new file mode 100644 index 0000000..fa69811 --- /dev/null +++ b/src/api/flowable/todo.js @@ -0,0 +1,81 @@ +import request from '@/utils/request' + +// 完成任务 +export function complete(data) { + return request({ + url: '/workflow/task/complete', + method: 'post', + data: data + }) +} + +// 委派任务 +export function delegate(data) { + return request({ + url: '/workflow/task/delegate', + method: 'post', + data: data + }) +} + +// 转办任务 +export function transfer(data) { + return request({ + url: '/workflow/task/transfer', + method: 'post', + data: data + }) +} + +// 退回任务 +export function returnTask(data) { + return request({ + url: '/workflow/task/return', + method: 'post', + data: data + }) +} + +// 拒绝任务 +export function rejectTask(data) { + return request({ + url: '/workflow/task/reject', + method: 'post', + data: data + }) +} + +// 签收任务 +export function claimTask(data) { + return request({ + url: '/workflow/task/claim', + method: 'post', + data: data + }) +} + +// 可退回任务列表 +export function returnList(data) { + return request({ + url: '/workflow/task/returnList', + method: 'post', + data: data + }) +} + +// 下一节点 +export function getNextFlowNode(data) { + return request({ + url: '/workflow/task/nextFlowNode', + method: 'post', + data: data + }) +} + +// 部署流程实例 +export function deployStart(deployId) { + return request({ + url: '/workflow/process/startFlow/' + deployId, + method: 'get', + }) +} diff --git a/src/api/system/user.js b/src/api/system/user.js index c5be25f..9ffe9cf 100644 --- a/src/api/system/user.js +++ b/src/api/system/user.js @@ -1,135 +1,142 @@ -import request from '@/utils/request' +import request from "@/utils/request"; import { parseStrEmpty } from "@/utils/ruoyi"; // 查询用户列表 export function listUser(query) { return request({ - url: '/system/user/list', - method: 'get', - params: query - }) + url: "/system/user/list", + method: "get", + params: query, + }); } // 查询用户详细 export function getUser(userId) { return request({ - url: '/system/user/' + parseStrEmpty(userId), - method: 'get' - }) + url: "/system/user/" + parseStrEmpty(userId), + method: "get", + }); +} +// 查询用户列表,用于流程里的用户选择 +export function selectUser(query) { + return request({ + url: "/system/user/selectUser", + method: "get", + params: query, + }); } - // 新增用户 export function addUser(data) { return request({ - url: '/system/user', - method: 'post', - data: data - }) + url: "/system/user", + method: "post", + data: data, + }); } // 修改用户 export function updateUser(data) { return request({ - url: '/system/user', - method: 'put', - data: data - }) + url: "/system/user", + method: "put", + data: data, + }); } // 删除用户 export function delUser(userId) { return request({ - url: '/system/user/' + userId, - method: 'delete' - }) + url: "/system/user/" + userId, + method: "delete", + }); } // 用户密码重置 export function resetUserPwd(userId, password) { const data = { userId, - password - } + password, + }; return request({ - url: '/system/user/resetPwd', - method: 'put', - data: data - }) + url: "/system/user/resetPwd", + method: "put", + data: data, + }); } // 用户状态修改 export function changeUserStatus(userId, status) { const data = { userId, - status - } + status, + }; return request({ - url: '/system/user/changeStatus', - method: 'put', - data: data - }) + url: "/system/user/changeStatus", + method: "put", + data: data, + }); } // 查询用户个人信息 export function getUserProfile() { return request({ - url: '/system/user/profile', - method: 'get' - }) + url: "/system/user/profile", + method: "get", + }); } // 修改用户个人信息 export function updateUserProfile(data) { return request({ - url: '/system/user/profile', - method: 'put', - data: data - }) + url: "/system/user/profile", + method: "put", + data: data, + }); } // 用户密码重置 export function updateUserPwd(oldPassword, newPassword) { const data = { oldPassword, - newPassword - } + newPassword, + }; return request({ - url: '/system/user/profile/updatePwd', - method: 'put', - params: data - }) + url: "/system/user/profile/updatePwd", + method: "put", + params: data, + }); } // 用户头像上传 export function uploadAvatar(data) { return request({ - url: '/system/user/profile/avatar', - method: 'post', - data: data - }) + url: "/system/user/profile/avatar", + method: "post", + data: data, + }); } // 查询授权角色 export function getAuthRole(userId) { return request({ - url: '/system/user/authRole/' + userId, - method: 'get' - }) + url: "/system/user/authRole/" + userId, + method: "get", + }); } // 保存授权角色 export function updateAuthRole(data) { return request({ - url: '/system/user/authRole', - method: 'put', - params: data - }) + url: "/system/user/authRole", + method: "put", + params: data, + }); } // 查询部门下拉树结构 export function deptTreeSelect() { return request({ - url: '/system/dept/treeselect', - method: 'get' - }) + url: "/system/dept/treeselect", + method: "get", + }); } diff --git a/src/components/ProcessViewer/index.vue b/src/components/ProcessViewer/index.vue index c02d26e..392f671 100644 --- a/src/components/ProcessViewer/index.vue +++ b/src/components/ProcessViewer/index.vue @@ -120,12 +120,11 @@ width="100px" align="center" /> - + + + {{ parseTime(row.createTime) }} + + import "@/plugins/package/theme/index.scss"; +import { parseTime } from "@/utils/ruoyi"; import BpmnViewer from "bpmn-js/lib/Viewer"; import MoveCanvasModule from "diagram-js/lib/navigation/movecanvas"; import { nextTick, onBeforeUnmount, toRefs } from "vue"; diff --git a/src/plugins/package/penal/listeners/ElementListeners.vue b/src/plugins/package/penal/listeners/ElementListeners.vue index 3401c26..aea0be3 100644 --- a/src/plugins/package/penal/listeners/ElementListeners.vue +++ b/src/plugins/package/penal/listeners/ElementListeners.vue @@ -337,7 +337,6 @@ function resetListenersList() { bpmnElement.businessObject?.extensionElements?.values?.filter( (ex) => ex.$type === `${prefix}:ExecutionListener` ) ?? []; - debugger; elementListenersList.value = bpmnElementListeners.map((listener) => initListenerType(listener) ); diff --git a/src/plugins/package/penal/listeners/tst.json b/src/plugins/package/penal/listeners/tst.json deleted file mode 100644 index a6c809f..0000000 --- a/src/plugins/package/penal/listeners/tst.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "msg": "操作成功", - "code": 200, - "data": "\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n" -} diff --git a/src/plugins/package/penal/listeners/utilSelf.js b/src/plugins/package/penal/listeners/utilSelf.js index efd13ec..05fee4a 100644 --- a/src/plugins/package/penal/listeners/utilSelf.js +++ b/src/plugins/package/penal/listeners/utilSelf.js @@ -1,13 +1,13 @@ // 初始化表单数据 export function initListenerForm(listener) { let self = { - ...listener + ...listener, }; if (listener.script) { self = { ...listener, ...listener.script, - scriptType: listener.script.resource ? "externalScript" : "inlineScript" + scriptType: listener.script.resource ? "externalScript" : "inlineScript", }; } if (listener.event === "timeout" && listener.eventDefinitions) { @@ -28,15 +28,17 @@ export function initListenerForm(listener) { } export function initListenerType(listener) { + // debugger; let listenerType; if (listener.class) listenerType = "classListener"; if (listener.expression) listenerType = "expressionListener"; if (listener.delegateExpression) listenerType = "delegateExpressionListener"; if (listener.script) listenerType = "scriptListener"; + return { ...JSON.parse(JSON.stringify(listener)), ...(listener.script ?? {}), - listenerType: listenerType + listenerType: listenerType, }; } @@ -44,7 +46,7 @@ export const listenerType = { classListener: "Java 类", expressionListener: "表达式", delegateExpressionListener: "代理表达式", - scriptListener: "脚本" + scriptListener: "脚本", }; export const eventType = { @@ -53,10 +55,10 @@ export const eventType = { complete: "完成", delete: "删除", update: "更新", - timeout: "超时" + timeout: "超时", }; export const fieldType = { string: "字符串", - expression: "表达式" + expression: "表达式", }; diff --git a/src/plugins/package/penal/properties/ElementProperties.vue b/src/plugins/package/penal/properties/ElementProperties.vue index 4d5a68d..b8e4e56 100644 --- a/src/plugins/package/penal/properties/ElementProperties.vue +++ b/src/plugins/package/penal/properties/ElementProperties.vue @@ -21,7 +21,7 @@ show-overflow-tooltip /> - + 编辑 @@ -29,7 +29,7 @@ 移除 diff --git a/src/plugins/package/penal/signal-message/SignalAndMessage.vue b/src/plugins/package/penal/signal-message/SignalAndMessage.vue index e584d03..c5b70c2 100644 --- a/src/plugins/package/penal/signal-message/SignalAndMessage.vue +++ b/src/plugins/package/penal/signal-message/SignalAndMessage.vue @@ -2,8 +2,20 @@ 消息列表 + + + + 消息列表 信号列表 + + + + 信号列表 import('@/views/redirect/index.vue') - } - ] + path: "/redirect/:path(.*)", + component: () => import("@/views/redirect/index.vue"), + }, + ], }, { - path: '/login', - component: () => import('@/views/login'), - hidden: true + path: "/login", + component: () => import("@/views/login"), + hidden: true, }, { - path: '/register', - component: () => import('@/views/register'), - hidden: true + path: "/register", + component: () => import("@/views/register"), + hidden: true, }, { path: "/:pathMatch(.*)*", - component: () => import('@/views/error/404'), - hidden: true + component: () => import("@/views/error/404"), + hidden: true, }, { - path: '/401', - component: () => import('@/views/error/401'), - hidden: true + path: "/401", + component: () => import("@/views/error/401"), + hidden: true, }, { - path: '', + path: "", component: Layout, - redirect: '/index', + redirect: "/index", children: [ { - path: '/index', - component: () => import('@/views/index'), - name: 'Index', - meta: { title: '首页', icon: 'dashboard', affix: true } - } - ] + path: "/index", + component: () => import("@/views/index"), + name: "Index", + meta: { title: "首页", icon: "dashboard", affix: true }, + }, + ], }, { - path: '/user', + path: "/user", component: Layout, hidden: true, - redirect: 'noredirect', + redirect: "noredirect", children: [ { - path: 'profile', - component: () => import('@/views/system/user/profile/index'), - name: 'Profile', - meta: { title: '个人中心', icon: 'user' } - } - ] - } -] + path: "profile", + component: () => import("@/views/system/user/profile/index"), + name: "Profile", + meta: { title: "个人中心", icon: "user" }, + }, + ], + }, +]; // 动态路由,基于用户权限动态去加载 export const dynamicRoutes = [ { - path: '/system/user-auth', + path: "/system/user-auth", component: Layout, hidden: true, - permissions: ['system:user:edit'], + permissions: ["system:user:edit"], children: [ { - path: 'role/:userId(\\d+)', - component: () => import('@/views/system/user/authRole'), - name: 'AuthRole', - meta: { title: '分配角色', activeMenu: '/system/user' } - } - ] + path: "role/:userId(\\d+)", + component: () => import("@/views/system/user/authRole"), + name: "AuthRole", + meta: { title: "分配角色", activeMenu: "/system/user" }, + }, + ], }, { - path: '/system/role-auth', + path: "/system/role-auth", component: Layout, hidden: true, - permissions: ['system:role:edit'], + permissions: ["system:role:edit"], children: [ { - path: 'user/:roleId(\\d+)', - component: () => import('@/views/system/role/authUser'), - name: 'AuthUser', - meta: { title: '分配用户', activeMenu: '/system/role' } - } - ] + path: "user/:roleId(\\d+)", + component: () => import("@/views/system/role/authUser"), + name: "AuthUser", + meta: { title: "分配用户", activeMenu: "/system/role" }, + }, + ], }, { - path: '/system/dict-data', + path: "/system/dict-data", component: Layout, hidden: true, - permissions: ['system:dict:list'], + permissions: ["system:dict:list"], children: [ { - path: 'index/:dictId(\\d+)', - component: () => import('@/views/system/dict/data'), - name: 'Data', - meta: { title: '字典数据', activeMenu: '/system/dict' } - } - ] + path: "index/:dictId(\\d+)", + component: () => import("@/views/system/dict/data"), + name: "Data", + meta: { title: "字典数据", activeMenu: "/system/dict" }, + }, + ], }, { - path: '/monitor/job-log', + path: "/monitor/job-log", component: Layout, hidden: true, - permissions: ['monitor:job:list'], + permissions: ["monitor:job:list"], children: [ { - path: 'index/:jobId(\\d+)', - component: () => import('@/views/monitor/job/log'), - name: 'JobLog', - meta: { title: '调度日志', activeMenu: '/monitor/job' } - } - ] + path: "index/:jobId(\\d+)", + component: () => import("@/views/monitor/job/log"), + name: "JobLog", + meta: { title: "调度日志", activeMenu: "/monitor/job" }, + }, + ], }, { - path: '/tool/gen-edit', + path: "/tool/gen-edit", component: Layout, hidden: true, - permissions: ['tool:gen:edit'], + permissions: ["tool:gen:edit"], children: [ { - path: 'index/:tableId(\\d+)', - component: () => import('@/views/tool/gen/editTable'), - name: 'GenEdit', - meta: { title: '修改生成配置', activeMenu: '/tool/gen' } - } - ] - } -] + path: "index/:tableId(\\d+)", + component: () => import("@/views/tool/gen/editTable"), + name: "GenEdit", + meta: { title: "修改生成配置", activeMenu: "/tool/gen" }, + }, + ], + }, + { + path: "/flowable/process", + component: Layout, + hidden: true, + permissions: ["flowable:process:query"], + children: [ + { + path: "start/:deployId([\\w|\\-]+)", + component: () => import("@/views/office/start"), + name: "WorkStart", + meta: { title: "发起流程", icon: "" }, + }, + { + path: "detail/:procInsId([\\w|\\-]+)", + component: () => import("@/views/office/detail"), + name: "WorkDetail", + meta: { title: "流程详情", activeMenu: "/office/own" }, + }, + ], + }, +]; const router = createRouter({ history: createWebHistory(), routes: constantRoutes, scrollBehavior(to, from, savedPosition) { if (savedPosition) { - return savedPosition + return savedPosition; } else { - return { top: 0 } + return { top: 0 }; } }, }); diff --git a/src/views/office/claim.vue b/src/views/office/claim.vue new file mode 100644 index 0000000..345231c --- /dev/null +++ b/src/views/office/claim.vue @@ -0,0 +1,184 @@ + + + + + + + + 搜索 + 重置 + + + + + + + + + + + + + + + v{{ row.procDefVersion }} + + + + + {{ row.startUserName }} + {{ + row.startDeptName + }} + + + + + + 签收 + + + + + + + + + + + + diff --git a/src/views/office/copy.vue b/src/views/office/copy.vue new file mode 100644 index 0000000..11f75be --- /dev/null +++ b/src/views/office/copy.vue @@ -0,0 +1,221 @@ + + + + + + + + + + + 搜索 + 重置 + + + + + + 导出 + + + + + + + + + + + + + {{ parseTime(row.createTime) }} + + + + + 详情 + + + + + + + + diff --git a/src/views/office/detail.vue b/src/views/office/detail.vue new file mode 100644 index 0000000..afa2ac8 --- /dev/null +++ b/src/views/office/detail.vue @@ -0,0 +1,831 @@ + + + + + + + 填写表单 + + + + + + + + 审批流程 + + + + + + + + + + {{ item.nickName }} + + + + + + {{ item.nickName }} + + + + + + + + + 通过 + + + 委派 + + + 转办 + + + + + + 退回 + + + 拒绝 + + + + + + + + + + {{ formInfo.title }} + + + + + + + + + + + + + + + + {{ item.activityName }} + + {{ item.assigneeName }} 在 + {{ parseTime(item.createTime) }} 发起流程 + + + + {{ + item.assigneeName || "-" + }} + {{ + item.candidate || "-" + }} + {{ + parseTime(item.createTime) || "-" + }} + {{ + parseTime(item.endTime) || "-" + }} + {{ + item.duration || "-" + }} + + + + + {{ commentType(comment.type) }} + {{ + parseTime(comment.time) + }} + + {{ comment.fullMessage }} + + + + + {{ parseTime(item.createTime) }} 结束流程 + + + + + + + + + + + + + + + + + + + + + {{ item.name }} + + + + + 取 消 + 确 定 + + + + + + + + + + 部门列表 + + + + + + + + + + + + + {{ + "" + }} + + + + + + + + + + + 取 消 + 确 定 + + + + + + + diff --git a/src/views/office/finished.vue b/src/views/office/finished.vue new file mode 100644 index 0000000..8ac9ddc --- /dev/null +++ b/src/views/office/finished.vue @@ -0,0 +1,275 @@ + + + + + + + + + + + + 搜索 + 重置 + + + + + + 删除 + + + + + + + + + + + + {{ row.startUserName }} + {{ + row.startDeptName + }} + + + + + + + + 流转记录 + 撤回 + + + + + + + + + + diff --git a/src/views/office/index.vue b/src/views/office/index.vue new file mode 100644 index 0000000..6c8bed7 --- /dev/null +++ b/src/views/office/index.vue @@ -0,0 +1,221 @@ + + + + + + + + + + + + 搜索 + 重置 + + + + + + + + + + + + {{ row.processName }} + + + + + + + v{{ row.version }} + + + + + 激活 + 挂起 + + + + + + 发起 + + + + + + + + + + + + + diff --git a/src/views/office/own.vue b/src/views/office/own.vue new file mode 100644 index 0000000..c150eff --- /dev/null +++ b/src/views/office/own.vue @@ -0,0 +1,364 @@ + + + + + + + + + + + + 搜索 + 重置 + + + + + + 删除 + + + 导出 + + + + + + + + + + + + v{{ row.procDefVersion }} + + + + + + 进行中 + 已完成 + + + + + + + {{ row.assigneeName }} + {{ row.deptName }} + {{ row.candidate }} + + + + + 详情 + 删除 + 取消 + + + + + + + + + + diff --git a/src/views/office/start.vue b/src/views/office/start.vue new file mode 100644 index 0000000..51981a3 --- /dev/null +++ b/src/views/office/start.vue @@ -0,0 +1,95 @@ + + + + + 发起流程 + + + + + + + + + + + + diff --git a/src/views/office/todo.vue b/src/views/office/todo.vue new file mode 100644 index 0000000..c091510 --- /dev/null +++ b/src/views/office/todo.vue @@ -0,0 +1,260 @@ + + + + + + + + + + + + 搜索 + 重置 + + + + + + 删除 + + + + + + + + + + + + + v{{ row.procDefVersion }} + + + + + {{ row.startUserName }} + {{ + row.startDeptName + }} + + + + + + 办理 + + + + + + + + + +
{{ item.activityName }}