diff --git a/docs/sql/sys_menu.sql b/docs/sql/sys_menu.sql index fa2c755b..9ab4fce6 100644 --- a/docs/sql/sys_menu.sql +++ b/docs/sql/sys_menu.sql @@ -48,7 +48,7 @@ UPDATE sys_menu SET component = 'workflow/task/myDocument/index', icon = 'hugeic UPDATE sys_menu SET component = 'Layout', icon = 'lucide:monitor-cog' WHERE menu_id = 11630; UPDATE sys_menu SET component = 'workflow/task/allTaskWaiting/index', icon = 'ri:todo-line' WHERE menu_id = 11631; UPDATE sys_menu SET component = 'workflow/task/taskFinish/index', icon = 'hugeicons:task-done-01' WHERE menu_id = 11632; -UPDATE sys_menu SET component = 'workflow/task/taskCopyList/index', icon = 'mynaui:copy' WHERE menu_id = 11633; +UPDATE sys_menu SET path = 'taskCopy', component = 'workflow/task/taskCopy/index', icon = 'mynaui:copy' WHERE menu_id = 11633; UPDATE sys_menu SET icon = 'pepicons-pencil:leave' WHERE menu_id = 11638; UPDATE sys_menu SET path = 'design', component = 'workflow/design/index' WHERE menu_id = 11700; diff --git a/src/locales/langs/en-us.ts b/src/locales/langs/en-us.ts index 932471ee..ea87ba8a 100644 --- a/src/locales/langs/en-us.ts +++ b/src/locales/langs/en-us.ts @@ -244,7 +244,9 @@ const local: App.I18n.Schema = { 'workflow_task_all-task-waiting': 'All Task Waiting', workflow_leave: 'Leave Apply', 'workflow_task_my-document': 'My Document', - 'workflow_task_task-waiting': 'My Task Waiting' + 'workflow_task_task-waiting': 'My Task Waiting', + 'workflow_task_task-finish': 'My Task Finish', + 'workflow_task_task-copy': 'My Task Copy' }, menu: { system_tenant: 'Tenant Management', diff --git a/src/locales/langs/zh-cn.ts b/src/locales/langs/zh-cn.ts index 47915fe1..920b7041 100644 --- a/src/locales/langs/zh-cn.ts +++ b/src/locales/langs/zh-cn.ts @@ -244,7 +244,9 @@ const local: App.I18n.Schema = { 'workflow_task_all-task-waiting': '待办任务', workflow_leave: '请假申请', 'workflow_task_my-document': '我发起的', - 'workflow_task_task-waiting': '我的待办' + 'workflow_task_task-waiting': '我的待办', + 'workflow_task_task-finish': '我的已办', + 'workflow_task_task-copy': '我的抄送' }, menu: { system_tenant: '租户管理', diff --git a/src/router/elegant/imports.ts b/src/router/elegant/imports.ts index 6b0ab302..b4813136 100644 --- a/src/router/elegant/imports.ts +++ b/src/router/elegant/imports.ts @@ -50,5 +50,7 @@ export const views: Record Promise import("@/views/workflow/process-instance/index.vue"), "workflow_task_all-task-waiting": () => import("@/views/workflow/task/all-task-waiting/index.vue"), "workflow_task_my-document": () => import("@/views/workflow/task/my-document/index.vue"), + "workflow_task_task-copy": () => import("@/views/workflow/task/task-copy/index.vue"), + "workflow_task_task-finish": () => import("@/views/workflow/task/task-finish/index.vue"), "workflow_task_task-waiting": () => import("@/views/workflow/task/task-waiting/index.vue"), }; diff --git a/src/router/elegant/routes.ts b/src/router/elegant/routes.ts index bc77e497..636d3033 100644 --- a/src/router/elegant/routes.ts +++ b/src/router/elegant/routes.ts @@ -412,6 +412,24 @@ export const generatedRoutes: GeneratedRoute[] = [ i18nKey: 'route.workflow_task_my-document' } }, + { + name: 'workflow_task_task-copy', + path: '/workflow/task/task-copy', + component: 'view.workflow_task_task-copy', + meta: { + title: 'workflow_task_task-copy', + i18nKey: 'route.workflow_task_task-copy' + } + }, + { + name: 'workflow_task_task-finish', + path: '/workflow/task/task-finish', + component: 'view.workflow_task_task-finish', + meta: { + title: 'workflow_task_task-finish', + i18nKey: 'route.workflow_task_task-finish' + } + }, { name: 'workflow_task_task-waiting', path: '/workflow/task/task-waiting', diff --git a/src/router/elegant/transform.ts b/src/router/elegant/transform.ts index 5e47b36e..42882ae3 100644 --- a/src/router/elegant/transform.ts +++ b/src/router/elegant/transform.ts @@ -208,6 +208,8 @@ const routeMap: RouteMap = { "workflow_task": "/workflow/task", "workflow_task_all-task-waiting": "/workflow/task/all-task-waiting", "workflow_task_my-document": "/workflow/task/my-document", + "workflow_task_task-copy": "/workflow/task/task-copy", + "workflow_task_task-finish": "/workflow/task/task-finish", "workflow_task_task-waiting": "/workflow/task/task-waiting" }; diff --git a/src/service/api/workflow/task.ts b/src/service/api/workflow/task.ts index fc5384d7..70bd9348 100644 --- a/src/service/api/workflow/task.ts +++ b/src/service/api/workflow/task.ts @@ -87,6 +87,7 @@ export function fetchGetTaskWaitList(data: Api.Workflow.TaskSearchParams) { params: data }); } + /** 获取可驳回节点 */ export function fetchGetBackNode(definitionId: CommonType.IdType, nodeCode: string) { return request({ @@ -94,6 +95,7 @@ export function fetchGetBackNode(definitionId: CommonType.IdType, nodeCode: stri method: 'get' }); } + /** 驳回任务 */ export function fetchBackTask(data: Api.Workflow.BackOperateParams) { return request({ @@ -102,3 +104,21 @@ export function fetchBackTask(data: Api.Workflow.BackOperateParams) { data }); } + +/** 获取我的已办任务 */ +export function fetchGetFinishedTask(data: Api.Workflow.TaskSearchParams) { + return request({ + url: '/workflow/task/pageByTaskFinish', + method: 'get', + params: data + }); +} + +/** 获取我的抄送任务 */ +export function fetchGetCopyTask(data: Api.Workflow.TaskSearchParams) { + return request({ + url: '/workflow/task/pageByTaskCopy', + method: 'get', + params: data + }); +} diff --git a/src/typings/api/workflow.api.d.ts b/src/typings/api/workflow.api.d.ts index fa8f1c06..9f809abc 100644 --- a/src/typings/api/workflow.api.d.ts +++ b/src/typings/api/workflow.api.d.ts @@ -423,7 +423,7 @@ declare namespace Api { /** 任务搜索参数 */ type TaskSearchParams = CommonType.RecordNullable< - Pick & + Pick & Api.Common.CommonSearchParams & { createByIds: CommonType.IdType[]; } diff --git a/src/typings/components.d.ts b/src/typings/components.d.ts index d2dbb67d..c4e23535 100644 --- a/src/typings/components.d.ts +++ b/src/typings/components.d.ts @@ -81,6 +81,7 @@ declare module 'vue' { NButton: typeof import('naive-ui')['NButton'] NCard: typeof import('naive-ui')['NCard'] NCheckbox: typeof import('naive-ui')['NCheckbox'] + NCheckboxGroup: typeof import('naive-ui')['NCheckboxGroup'] NCode: typeof import('naive-ui')['NCode'] NCollapse: typeof import('naive-ui')['NCollapse'] NCollapseItem: typeof import('naive-ui')['NCollapseItem'] diff --git a/src/typings/elegant-router.d.ts b/src/typings/elegant-router.d.ts index d46ef4aa..cbe5625e 100644 --- a/src/typings/elegant-router.d.ts +++ b/src/typings/elegant-router.d.ts @@ -62,6 +62,8 @@ declare module "@elegant-router/types" { "workflow_task": "/workflow/task"; "workflow_task_all-task-waiting": "/workflow/task/all-task-waiting"; "workflow_task_my-document": "/workflow/task/my-document"; + "workflow_task_task-copy": "/workflow/task/task-copy"; + "workflow_task_task-finish": "/workflow/task/task-finish"; "workflow_task_task-waiting": "/workflow/task/task-waiting"; }; @@ -163,6 +165,8 @@ declare module "@elegant-router/types" { | "workflow_process-instance" | "workflow_task_all-task-waiting" | "workflow_task_my-document" + | "workflow_task_task-copy" + | "workflow_task_task-finish" | "workflow_task_task-waiting" >; diff --git a/src/views/workflow/task/all-task-waiting/index.vue b/src/views/workflow/task/all-task-waiting/index.vue index b05e1d53..9a6baf5a 100644 --- a/src/views/workflow/task/all-task-waiting/index.vue +++ b/src/views/workflow/task/all-task-waiting/index.vue @@ -164,7 +164,7 @@ const { } }); -const { checkedRowKeys, editingData: _editingData, handleEdit: _handleEdit } = useTableOperate(data, getData); +const { checkedRowKeys } = useTableOperate(data, getData); watch(waitingStatus, async () => { const newApiFn = waitingStatus.value ? fetchGetAllWaitingTask : fetchGetAllFinishedTask; diff --git a/src/views/workflow/task/my-document/index.vue b/src/views/workflow/task/my-document/index.vue index 3ce7d28c..332c5a7d 100644 --- a/src/views/workflow/task/my-document/index.vue +++ b/src/views/workflow/task/my-document/index.vue @@ -178,7 +178,7 @@ const { ] }); -const { checkedRowKeys, editingData: _editingData, handleEdit: _handleEdit } = useTableOperate(data, getData); +const { checkedRowKeys } = useTableOperate(data, getData); const { loading: treeLoading, startLoading: startTreeLoading, endLoading: endTreeLoading } = useLoading(); const categoryPattern = ref(); diff --git a/src/views/workflow/task/my-document/modules/my-document-search.vue b/src/views/workflow/task/my-document/modules/my-document-search.vue index 9d2469b3..7d4f78c2 100644 --- a/src/views/workflow/task/my-document/modules/my-document-search.vue +++ b/src/views/workflow/task/my-document/modules/my-document-search.vue @@ -12,7 +12,7 @@ interface Emits { const emit = defineEmits(); const { formRef, validate, restoreValidation } = useNaiveForm(); -const model = defineModel('model', { required: true }); +const model = defineModel('model', { required: true }); async function reset() { await restoreValidation(); diff --git a/src/views/workflow/task/task-copy/index.vue b/src/views/workflow/task/task-copy/index.vue new file mode 100644 index 00000000..cf5be5b0 --- /dev/null +++ b/src/views/workflow/task/task-copy/index.vue @@ -0,0 +1,252 @@ + + + diff --git a/src/views/workflow/task/task-copy/modules/task-copy-search.vue b/src/views/workflow/task/task-copy/modules/task-copy-search.vue new file mode 100644 index 00000000..7d4f78c2 --- /dev/null +++ b/src/views/workflow/task/task-copy/modules/task-copy-search.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/views/workflow/task/task-finish/index.vue b/src/views/workflow/task/task-finish/index.vue new file mode 100644 index 00000000..a3b38b76 --- /dev/null +++ b/src/views/workflow/task/task-finish/index.vue @@ -0,0 +1,265 @@ + + + diff --git a/src/views/workflow/task/task-finish/modules/task-finish-search.vue b/src/views/workflow/task/task-finish/modules/task-finish-search.vue new file mode 100644 index 00000000..7d4f78c2 --- /dev/null +++ b/src/views/workflow/task/task-finish/modules/task-finish-search.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/views/workflow/task/task-waiting/index.vue b/src/views/workflow/task/task-waiting/index.vue index 5584bd4e..748cc724 100644 --- a/src/views/workflow/task/task-waiting/index.vue +++ b/src/views/workflow/task/task-waiting/index.vue @@ -121,7 +121,7 @@ const { ] }); -const { checkedRowKeys, editingData: _editingData, handleEdit: _handleEdit } = useTableOperate(data, getData); +const { checkedRowKeys } = useTableOperate(data, getData); const { loading: treeLoading, startLoading: startTreeLoading, endLoading: endTreeLoading } = useLoading(); const categoryPattern = ref();