提交 e4c90ebb authored 作者: kxjia's avatar kxjia

完善问题

上级 2d318c87
...@@ -33,10 +33,10 @@ ...@@ -33,10 +33,10 @@
import { ref,onMounted,nextTick } from 'vue' import { ref,onMounted,nextTick } from 'vue'
import { useForm, BasicForm, FormSchema } from '/@/components/Form' import { useForm, BasicForm, FormSchema } from '/@/components/Form'
import { CheckCircleOutlined, CloseCircleOutlined } from '@ant-design/icons-vue' import { CheckCircleOutlined, CloseCircleOutlined } from '@ant-design/icons-vue'
import { complete, getMyTaskFlow,getRejectNode } from '/@/components/Process/api/todo' import { complete, getMyTaskFlow,getRejectNode,rejectTask } from '/@/components/Process/api/todo'
import { message } from 'ant-design-vue' import { message } from 'ant-design-vue'
const emit = defineEmits(['update:visible', 'success', 'error', 'close']) const emit = defineEmits(['update:visible', 'success', 'error', 'close','approval-fail'])
const props = defineProps({ const props = defineProps({
beforeFlowNode: { beforeFlowNode: {
type: Object, type: Object,
...@@ -48,6 +48,8 @@ ...@@ -48,6 +48,8 @@
dataId: { type: String, default: '' }, dataId: { type: String, default: '' },
}) })
const formSchemas: FormSchema[] = [ const formSchemas: FormSchema[] = [
{ {
label: '审批结果', label: '审批结果',
...@@ -119,10 +121,11 @@ ...@@ -119,10 +121,11 @@
} }
const handleSaveApp = async () => { const handleSaveApp = async () => {
const formDataTmp = await validate() const formDataTmp = await validate()
const myTaskFlow = await getMyTaskFlow({ deploymentId: props.deployId, dataId: props.dataId }) const myTaskFlow = await getMyTaskFlow({ deploymentId: props.deployId, dataId: props.dataId })
if (myTaskFlow?.taskId) { if (myTaskFlow?.taskId) {
alert(JSON.stringify(myTaskFlow))
const reviewStatus = formDataTmp.reviewStatus; const reviewStatus = formDataTmp.reviewStatus;
if (reviewStatus === true) { if (reviewStatus === true) {
await complete({ await complete({
...@@ -132,28 +135,21 @@ ...@@ -132,28 +135,21 @@
comment: formDataTmp.comment, comment: formDataTmp.comment,
values: { values: {
approval: formDataTmp.approvalUser || formDataTmp.approvalRole, approval: formDataTmp.approvalUser || formDataTmp.approvalRole,
approvalType: formDataTmp.userType approvalType: props.userType
}, },
}) })
} else { } else {
const rejectNode = await getRejectNode({ // await rejectTask({
deployId: props.deployId, // instanceId: myTaskFlow.procInsId || '',
taskId: myTaskFlow.taskId, // deployId: myTaskFlow.deployId || '',
isApproved: false, // taskId: myTaskFlow.taskId,
}) // comment: formDataTmp.comment,
alert(JSON.stringify(rejectNode)) // values: {
if (rejectNode?.targetNode) { // rejectNode: props.beforeFlowNode,
await complete({ // },
instanceId: myTaskFlow.procInsId || '', // })
deployId: myTaskFlow.deployId || '', emit('approval-fail', props.dataId)
taskId: myTaskFlow.taskId,
comment: formDataTmp.comment,
values: {
rejectNode: rejectNode.targetNode,
},
})
} }
} }
emit('success', props.dataId) emit('success', props.dataId)
...@@ -162,7 +158,7 @@ ...@@ -162,7 +158,7 @@
handleClose() handleClose()
}) })
} }
}
onMounted(async() => { onMounted(async() => {
if (props.userType === 'user') { if (props.userType === 'user') {
......
...@@ -4,6 +4,10 @@ ...@@ -4,6 +4,10 @@
<template #title> <template #title>
<div class="form-header"> <div class="form-header">
<span class="form-title">当前待办[{{ editableNode?.name || '无' }}]</span> <span class="form-title">当前待办[{{ editableNode?.name || '无' }}]</span>
<a-button color="blue" v-if="!isEditStatus" @click="handleSetEditStatus">转阅</a-button>
<a-button color="blue" v-if="!isEditStatus" @click="handleSetEditStatus">转发</a-button>
<a-button color="blue" v-if="!isEditStatus" @click="handleSetEditStatus">退回</a-button>
<a-button color="blue" v-if="!isEditStatus" @click="handleSetEditStatus">编辑</a-button> <a-button color="blue" v-if="!isEditStatus" @click="handleSetEditStatus">编辑</a-button>
<a-button color="blue" v-if="isEditStatus" @click="handleSetEditStatus">只读</a-button> <a-button color="blue" v-if="isEditStatus" @click="handleSetEditStatus">只读</a-button>
</div> </div>
...@@ -255,8 +259,9 @@ function createErrorComponent(msg: string) { ...@@ -255,8 +259,9 @@ function createErrorComponent(msg: string) {
// 处理编辑状态切换 // 处理编辑状态切换
function handleSetEditStatus() { function handleSetEditStatus() {
isEditStatus.value = !isEditStatus.value isEditStatus.value = !isEditStatus.value
if (formComponentRef.value&&typeof formComponentRef.value.formDisabled === 'function') { if (formComponentRef.value&&typeof formComponentRef.value.setFormDisabledStatus === 'function') {
//formComponentRef.value.formDisabled(isEditStatus.value)
formComponentRef.value.setFormDisabledStatus(false)
} }
} }
......
...@@ -3,29 +3,63 @@ ...@@ -3,29 +3,63 @@
@register="registerBasicDrawer" @register="registerBasicDrawer"
:header-style="{ backgroundColor: '#018ffb', borderBottom: '1px solid #e8eef2' }"> :header-style="{ backgroundColor: '#018ffb', borderBottom: '1px solid #e8eef2' }">
<div class="drawer-content"> <div class="drawer-content">
<a-tabs v-model:activeKey="activeKey" type="card" @change="handleTabChange">
<a-tab-pane key="chart" tab="流程图">
<FlowHistoryChart ref="refFlowHistoryChart" /> <FlowHistoryChart ref="refFlowHistoryChart" />
<FlowHistoryRecord :procInsId="procInsId" /> </a-tab-pane>
<a-tab-pane key="record" tab="记录">
<FlowHistoryRecord ref="refFlowHistoryRecord" />
</a-tab-pane>
</a-tabs>
</div> </div>
</BasicDrawer> </BasicDrawer>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { defineComponent,ref } from 'vue'; import { nextTick, ref } from 'vue';
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'; import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
import FlowHistoryChart from './FlowHistoryChart.vue'; import FlowHistoryChart from './FlowHistoryChart.vue';
import FlowHistoryRecord from './FlowHistoryRecord.vue'; import FlowHistoryRecord from './FlowHistoryRecord.vue';
const activeKey = ref('chart');
const procInsId = ref(''); const procInsId = ref('');
const dataId = ref(''); const dataId = ref('');
const deployId = ref(''); const deployId = ref('');
const refFlowHistoryChart = ref(); const refFlowHistoryChart = ref();
const refFlowHistoryRecord = ref();
const curData = ref({});
const callback = (data) => { const callback = (data) => {
refFlowHistoryChart.value.loadData(data); curData.value = data;
handleTabChange('chart');
} }
const handleTabChange = (key) => {
const [registerBasicDrawer, { closeDrawer, setDrawerProps }] = useDrawerInner(callback); if (key === 'chart') {
nextTick(() => {
const handleCloseDrawer = () => { refFlowHistoryChart.value.loadData(curData.value);
closeDrawer(); })
} else if (key === 'record') {
nextTick(() => {
refFlowHistoryRecord.value.loadData(curData.value);
})
} }
activeKey.value = key;
}
const [registerBasicDrawer, { closeDrawer, setDrawerProps }] = useDrawerInner(callback);
</script> </script>
<style scoped>
.drawer-content {
height: 100%;
}
.drawer-content :deep(.ant-tabs) {
height: 100%;
}
.drawer-content :deep(.ant-tabs-content) {
height: calc(100% - 40px);
overflow-y: auto;
}
</style>
\ No newline at end of file
...@@ -82,16 +82,10 @@ ...@@ -82,16 +82,10 @@
import { flowRecord } from '/@/components/Process/api/finished'; import { flowRecord } from '/@/components/Process/api/finished';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
// Props
const props = defineProps<{
procInsId: string;
}>();
// 响应式数据
const loading = ref(false); const loading = ref(false);
const flowRecordList = ref<any[]>([]); const flowRecordList = ref<any[]>([]);
// 方法
const formatTime = (time: string) => { const formatTime = (time: string) => {
if (!time) return ''; if (!time) return '';
return dayjs(time).format('YYYY-MM-DD HH:mm:ss'); return dayjs(time).format('YYYY-MM-DD HH:mm:ss');
...@@ -113,10 +107,9 @@ ...@@ -113,10 +107,9 @@
const loadData = async (data) => { const loadData = async (data) => {
try { try {
loading.value = true; loading.value = true;
const res = await flowRecord({ procInsId: props.procInsId }); const res = await flowRecord({ procInsId: data.procInsId,deployId: data.deployId });
flowRecordList.value = res.flowList || []; flowRecordList.value = res.flowList || [];
} catch (error) { } catch (error) {
console.error('加载流转记录失败:', error);
message.error('加载流转记录失败'); message.error('加载流转记录失败');
throw error; throw error;
} finally { } finally {
......
<template> <template>
<a-drawer <BasicDrawer
title="任务指派" title="任务指派"
:visible="visible"
width="30%" width="30%"
:closable="true" :closable="true"
:mask-closable="false" :mask-closable="false"
:destroy-on-close="true" :destroy-on-close="true"
:footer="null" :footer="null"
@close="handleClose" @register="registerBasicDrawer"
class="task-assignee-drawer" :header-style="{ backgroundColor: '#018ffb', borderBottom: '1px solid #e8eef2' }"
> >
<div class="drawer-content"> <div class="drawer-content" style="height: 80vh">
<a-card title="选择任务指派人" :bordered="false" class="assignee-card"> <a-card title="选择任务指派人" :bordered="false" class="assignee-card">
<a-form layout="vertical"> <a-form layout="vertical">
<a-form-item label="用户类型" required> <a-form-item label="用户类型" required>
...@@ -88,30 +87,30 @@ ...@@ -88,30 +87,30 @@
:showButton="false" :showButton="false"
labelKey="realname" labelKey="realname"
/> />
</a-drawer> </BasicDrawer>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, computed, watch,nextTick } from 'vue' import { ref, computed, watch, nextTick } from 'vue'
import { message } from 'ant-design-vue' import { message } from 'ant-design-vue'
import { useModal } from '/@/components/Modal' import { useModal } from '/@/components/Modal'
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'
import { UserOutlined, TeamOutlined } from '@ant-design/icons-vue' import { UserOutlined, TeamOutlined } from '@ant-design/icons-vue'
import UserSelectModal from '/@/components/Form/src/jeecg/components/modal/UserSelectModal.vue' import UserSelectModal from '/@/components/Form/src/jeecg/components/modal/UserSelectModal.vue'
import RoleSelectModal from '/@/components/Form/src/jeecg/components/modal/RoleSelectModal.vue' import RoleSelectModal from '/@/components/Form/src/jeecg/components/modal/RoleSelectModal.vue'
import { complete, getMyTaskFlow } from '/@/components/Process/api/todo' import { complete, getMyTaskFlow } from '/@/components/Process/api/todo'
const props = defineProps({
visible: { type: Boolean, default: false },
formData: { type: Object, default: () => ({}) },
assignee: { type: String, default: null },
userType: { type: String, default: 'user' },
deployId: { type: String, default: '' },
required: { type: Boolean, default: true },
assigneeName: { type: String, default: null },
dataId: { type: String, default: '' }
})
const emit = defineEmits(['update:visible', 'success', 'error', 'close']) interface formDadta {
assignee: string
userType: string
deployId?: string
required?: string
assigneeName?: string
dataId?: string
}
const emit = defineEmits(['success', 'error', 'close'])
const [registerSelUserModal, { openModal: userOpenModal }] = useModal() const [registerSelUserModal, { openModal: userOpenModal }] = useModal()
const [registerSelRoleModal, { openModal: roleOpenModal }] = useModal() const [registerSelRoleModal, { openModal: roleOpenModal }] = useModal()
...@@ -121,41 +120,25 @@ const localUserType = ref<'user' | 'role'>('user') ...@@ -121,41 +120,25 @@ const localUserType = ref<'user' | 'role'>('user')
const assigneeId = ref('') const assigneeId = ref('')
const assigneeDisplayName = ref('') const assigneeDisplayName = ref('')
const confirmLoading = ref(false) const confirmLoading = ref(false)
const drawerHistoryVisible = ref(false) const dataId = ref('')
const deployId = ref('')
// 计算属性
const hasAssignee = computed(() => !!assigneeId.value) // 使用 useDrawerInner 接收外部传入的数据
const [registerBasicDrawer, { closeDrawer, setDrawerProps }] = useDrawerInner((data) => {
const validateStatus = computed(() => { if (data) {
if (!props.required || hasAssignee.value) return '' dataId.value = data.dataId || ''
return 'error' deployId.value = data.deployId || ''
}) if (data.assignee) {
localUserType.value = data.userType === 'role' ? 'role' : 'user'
const validateHelp = computed(() => assigneeId.value = data.assignee
validateStatus.value === 'error' ? `请选择${localUserType.value === 'user' ? '用户' : '角色'}` : '' if (data.assigneeName) {
) assigneeDisplayName.value = data.assigneeName
// 初始化数据
const initData = () => {
assigneeId.value = ''
assigneeDisplayName.value = ''
if (props.assignee) {
localUserType.value = props.userType === 'role' ? 'role' : 'user'
assigneeId.value = props.assignee
if (props.assigneeName) {
assigneeDisplayName.value = props.assigneeName
} }
} else { } else {
localUserType.value = props.userType === 'role' ? 'role' : 'user' localUserType.value = data.userType === 'role' ? 'role' : 'user'
} }
} }
})
const resetDrawer = () => {
localUserType.value = props.userType === 'role' ? 'role' : 'user'
assigneeId.value = ''
assigneeDisplayName.value = ''
}
const clearAssignee = () => { const clearAssignee = () => {
assigneeId.value = '' assigneeId.value = ''
...@@ -172,7 +155,6 @@ const handleSelect = () => { ...@@ -172,7 +155,6 @@ const handleSelect = () => {
// 选择用户回调 // 选择用户回调
const onSelectUserOk = (options: any[], values: any[]) => { const onSelectUserOk = (options: any[], values: any[]) => {
alert(JSON.stringify(options))
if (!values?.length) return if (!values?.length) return
assigneeId.value = values[0] assigneeId.value = values[0]
assigneeDisplayName.value = options[0]?.label || '' assigneeDisplayName.value = options[0]?.label || ''
...@@ -181,7 +163,6 @@ const onSelectUserOk = (options: any[], values: any[]) => { ...@@ -181,7 +163,6 @@ const onSelectUserOk = (options: any[], values: any[]) => {
// 选择角色回调 // 选择角色回调
const onSelectRoleOk = (options: any[], values: any[]) => { const onSelectRoleOk = (options: any[], values: any[]) => {
alert(JSON.stringify(options))
if (!values?.length) return if (!values?.length) return
assigneeId.value = values[0] assigneeId.value = values[0]
assigneeDisplayName.value = options[0]?.label || '' assigneeDisplayName.value = options[0]?.label || ''
...@@ -189,27 +170,23 @@ const onSelectRoleOk = (options: any[], values: any[]) => { ...@@ -189,27 +170,23 @@ const onSelectRoleOk = (options: any[], values: any[]) => {
} }
const handleClose = () => { const handleClose = () => {
emit('update:visible', false) closeDrawer()
emit('close') emit('close')
} }
const handleConfirm = async () => { const handleConfirm = async () => {
if (props.required && !assigneeId.value) {
message.error(`请选择${localUserType.value === 'user' ? '用户' : '角色'}`)
return
}
confirmLoading.value = true confirmLoading.value = true
try { try {
const dataId = props.dataId?.id || '' if (dataId.value && deployId.value) {
if (dataId && props.deployId) { const myTaskFlow = await getMyTaskFlow({ deploymentId: deployId.value, dataId: dataId.value })
const myTaskFlow = await getMyTaskFlow({ deploymentId: props.deployId, dataId })
if (myTaskFlow?.taskId) { if (myTaskFlow?.taskId) {
await complete({ await complete({
instanceId: myTaskFlow.procInsId || '', instanceId: myTaskFlow.procInsId || '',
deployId: myTaskFlow.deployId || '', deployId: myTaskFlow.deployId || '',
taskId: myTaskFlow.taskId, taskId: myTaskFlow.taskId,
comment: '', dataId: dataId.value,
comment: 'eeeeeee',
values: { values: {
approval: assigneeId.value, approval: assigneeId.value,
approvalType: localUserType.value approvalType: localUserType.value
...@@ -218,7 +195,7 @@ const handleConfirm = async () => { ...@@ -218,7 +195,7 @@ const handleConfirm = async () => {
} }
} }
emit('success', props.dataId) emit('success', dataId.value)
nextTick(() => { nextTick(() => {
message.success('任务发送成功') message.success('任务发送成功')
handleClose() handleClose()
...@@ -229,7 +206,7 @@ const handleConfirm = async () => { ...@@ -229,7 +206,7 @@ const handleConfirm = async () => {
} finally { } finally {
confirmLoading.value = false confirmLoading.value = false
} }
} }
// 对外暴露的方法 // 对外暴露的方法
const getAssigneeData = () => ({ const getAssigneeData = () => ({
...@@ -251,32 +228,7 @@ const setRoleInfo = (roleId: string, roleNameValue: string) => { ...@@ -251,32 +228,7 @@ const setRoleInfo = (roleId: string, roleNameValue: string) => {
localUserType.value = 'role' localUserType.value = 'role'
} }
const openHistoryDrawer = () => {
drawerHistoryVisible.value = true;
};
// 监听 visible 变化
watch(() => props.visible, (newVal) => {
if (newVal) {
initData()
} else {
resetDrawer()
}
}, { immediate: true })
watch(() => props.assignee, () => {
if (props.visible) initData()
})
watch(() => props.userType, () => {
if (props.visible && !props.assignee) {
localUserType.value = props.userType === 'role' ? 'role' : 'user'
}
})
defineExpose({ defineExpose({
resetDrawer,
getAssigneeData, getAssigneeData,
submit: handleConfirm, submit: handleConfirm,
setUserInfo, setUserInfo,
...@@ -285,34 +237,6 @@ defineExpose({ ...@@ -285,34 +237,6 @@ defineExpose({
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.task-assignee-drawer {
:deep(.ant-drawer-body) {
padding: 0;
height: 100%;
overflow: hidden;
}
:deep(.ant-drawer-header) {
background-color: #f5f7fa;
border-bottom: 1px solid #e8eef2;
padding: 16px 24px;
.ant-drawer-title {
font-size: 16px;
font-weight: 500;
color: #1f2f3d;
}
.ant-drawer-close {
color: #8c8c8c;
&:hover {
color: #1f2f3d;
}
}
}
}
.drawer-content { .drawer-content {
height: 100%; height: 100%;
overflow-y: auto; overflow-y: auto;
......
...@@ -43,12 +43,14 @@ ...@@ -43,12 +43,14 @@
<ApprovalPanel style="width: 100%;height: 100%;" <ApprovalPanel style="width: 100%;height: 100%;"
ref="approvalPanelRef" ref="approvalPanelRef"
:current-node="editableNode" :current-node="editableNode"
:before-flow-node="workflowNodes[props.currentNodeIndex - 1]"
:deploy-id="props.deployId" :deploy-id="props.deployId"
:data-id="props.dataId" :data-id="props.dataId"
:assignee="props.assignee" :assignee="props.assignee"
:user-type="props.userType" :user-type="props.userType"
@update:approval-data="handleApprovalDataUpdate" @update:approval-data="handleApprovalDataUpdate"
@success="handleApprovalSuccess" @success="handleApprovalSuccess"
@approval-fail="handleApprovalFail"
/> />
</a-col> </a-col>
...@@ -197,7 +199,7 @@ const props = defineProps({ ...@@ -197,7 +199,7 @@ const props = defineProps({
}) })
const emit = defineEmits(['update:visible', 'submit', 'close', 'form-data-update']) const emit = defineEmits(['update:visible', 'submit', 'close', 'form-data-update','success','approval-fail'])
// 状态 // 状态
const submitLoading = ref(false) const submitLoading = ref(false)
...@@ -251,6 +253,7 @@ function handleFormMounted({ nodeId, instance }: { nodeId: string; instance: any ...@@ -251,6 +253,7 @@ function handleFormMounted({ nodeId, instance }: { nodeId: string; instance: any
function handleApprovalSuccess(dataId: string) { function handleApprovalSuccess(dataId: string) {
if (dataId === props.dataId) { if (dataId === props.dataId) {
message.success('审核成功') message.success('审核成功')
emit('success',dataId)
handleClose() handleClose()
} }
} }
...@@ -319,6 +322,15 @@ function handleClose() { ...@@ -319,6 +322,15 @@ function handleClose() {
emit('close') emit('close')
} }
// 处理审核失败
function handleApprovalFail(dataId: string) {
if (dataId === props.dataId) {
message.error('审核失败')
emit('approval-fail',dataId)
handleClose()
}
}
// 重置数据 // 重置数据
function resetFormData() { function resetFormData() {
if (currentFormPanelRef.value) { if (currentFormPanelRef.value) {
......
...@@ -206,7 +206,6 @@ if (key === '3') { ...@@ -206,7 +206,6 @@ if (key === '3') {
deployId: taskForm.deployId, deployId: taskForm.deployId,
}).then((res) => { }).then((res) => {
flowData.value = res flowData.value = res
console.log("xml88888888888888888",JSON.stringify(res))
}) })
} }
} }
......
...@@ -170,15 +170,15 @@ ...@@ -170,15 +170,15 @@
emit("sendWorkFlow",record) emit("sendWorkFlow",record)
} }
async function handleUpdate(dataId) { async function handleUpdate(dataId,flowNode) {
let record = { let record = {
bmpNodeId: props.nextFlowNode.id, bmpNodeId: flowNode.id,
deployId: props.nextFlowNode.deployId, deployId: flowNode.deployId,
bpmStatus: 2, bpmStatus: 2,
id:dataId id:dataId
} }
await saveOrUpdate(record,true).then(res => { await saveOrUpdate(record,true).then(res => {
handleSuccess(null); (selectedRowKeys.value = []) && reload();
}) })
} }
...@@ -192,8 +192,6 @@ ...@@ -192,8 +192,6 @@
}) })
} }
defineExpose({ defineExpose({
handleUpdate, handleUpdate,
handleStartUpdate handleStartUpdate
......
...@@ -89,11 +89,14 @@ ...@@ -89,11 +89,14 @@
} }
async function handleUpdate(dataId) { async function handleUpdate(dataId,flowNode) {
await saveOrUpdate({ let record = {
bmpNodeId: props.nextFlowNode.id, bmpNodeId: flowNode.id,
id:dataId, deployId: flowNode.deployId,
},true).then(res => { bpmStatus: 2,
id:dataId
}
await saveOrUpdate(record,true).then(res => {
handleSuccess(); handleSuccess();
}) })
} }
......
...@@ -34,20 +34,15 @@ ...@@ -34,20 +34,15 @@
@close="handleDrawerClose" @close="handleDrawerClose"
@form-data-update="handleMultiFormDataUpdate" @form-data-update="handleMultiFormDataUpdate"
width="90%" width="90%"
@success="handlSendSuccess"
@approval-fail="handlApprovalFail"
/> />
<TaskAssigneeDrawer
v-model:visible="drawerTaskVisible" <task-assignee-drawer @register="registerAssigneeDrawer"
:user-type="userType"
:assignee="assignee"
:deploy-id="deployId"
:custom-next-api="customNextApi"
:form-data="formData"
:data-id="dataId"
@success="handlSendSuccess" @success="handlSendSuccess"
@error="handleError" @error="handleError"
/> />
</div> </div>
</template> </template>
...@@ -57,7 +52,9 @@ ...@@ -57,7 +52,9 @@
import { definitionStart, definitionStartByDeployId,addMyTaskFlow } from "/@/components/Process/api/definition"; import { definitionStart, definitionStartByDeployId,addMyTaskFlow } from "/@/components/Process/api/definition";
import WorkFlowFormDrawer from '/@/views/common/WorkFlowFormDrawer.vue'; import WorkFlowFormDrawer from '/@/views/common/WorkFlowFormDrawer.vue';
import TaskAssigneeDrawer from '/@/views/common/TaskAssigneeDrawer.vue' import TaskAssigneeDrawer from '/@/views/common/TaskAssigneeDrawer.vue'
import { CONNREFUSED } from 'dns'; import { useDrawer } from '/@/components/Drawer';
const [ registerAssigneeDrawer, { openDrawer: openAssigneeDrawer }] = useDrawer();
const formTableName = "st_problem_check"; const formTableName = "st_problem_check";
const workflowNodes = ref<any[]>([]); const workflowNodes = ref<any[]>([]);
...@@ -104,7 +101,7 @@ import { CONNREFUSED } from 'dns'; ...@@ -104,7 +101,7 @@ import { CONNREFUSED } from 'dns';
function handleTabChange(key) { function handleTabChange(key) {
activeTab.value = key; activeTab.value = key;
currentMultiFormIndex.value = key - 1; currentMultiFormIndex.value = key - 1;
currentNode.value = workflowNodes.value[key - 1]; currentNode.value = workflowNodes.value[currentMultiFormIndex.value];
} }
function loadComponent(url: string) { function loadComponent(url: string) {
...@@ -154,13 +151,14 @@ import { CONNREFUSED } from 'dns'; ...@@ -154,13 +151,14 @@ import { CONNREFUSED } from 'dns';
const deployId = currentNode.value.deployId || ''; const deployId = currentNode.value.deployId || '';
const startResRaw = await definitionStartByDeployId(deployId, formData); const startResRaw = await definitionStartByDeployId(deployId, formData);
let myTaskFlow = {} let myTaskFlow = {}
if (startResRaw?.procInsId) {
procInsId.value = startResRaw.procInsId; if (startResRaw?.instanceId) {
procInsId.value = startResRaw.instanceId;
alert(procInsId.value)
myTaskFlow["taskId"] = startResRaw.taskId; myTaskFlow["taskId"] = startResRaw.taskId;
myTaskFlow["deployId"] = startResRaw.deployId; myTaskFlow["deployId"] = startResRaw.deployId;
myTaskFlow["procInsId"] = startResRaw.procInsId; myTaskFlow["procInsId"] = startResRaw.instanceId;
myTaskFlow["executionId"] = startResRaw.executionId; myTaskFlow["executionId"] = startResRaw.executionId;
myTaskFlow["procDefId"] = startResRaw.instanceId ;
myTaskFlow["targetId"] = data.id; myTaskFlow["targetId"] = data.id;
myTaskFlow["taskDefinitionKey"] = currentNode.value.id; myTaskFlow["taskDefinitionKey"] = currentNode.value.id;
myTaskFlow["formTableName"] = formTableName; myTaskFlow["formTableName"] = formTableName;
...@@ -179,7 +177,7 @@ import { CONNREFUSED } from 'dns'; ...@@ -179,7 +177,7 @@ import { CONNREFUSED } from 'dns';
if (currentFormComponent && typeof currentFormComponent.handleUpdate === 'function') { if (currentFormComponent && typeof currentFormComponent.handleUpdate === 'function') {
currentFormComponent.handleStartUpdate({ currentFormComponent.handleStartUpdate({
dataId:data.id, dataId:data.id,
procInsId: startResRaw.procInsId, procInsId: procInsId.value,
}); });
} else { } else {
console.warn('当前组件实例不存在或没有 handleUpdate 方法'); console.warn('当前组件实例不存在或没有 handleUpdate 方法');
...@@ -191,10 +189,16 @@ import { CONNREFUSED } from 'dns'; ...@@ -191,10 +189,16 @@ import { CONNREFUSED } from 'dns';
drawerTaskVisible.value = true; drawerTaskVisible.value = true;
dataId.value = data.id; dataId.value = data.id;
deployId.value = currentNode.value.deployId || ''; deployId.value = currentNode.value.deployId || '';
await setNextNodeUser();
openAssigneeDrawer(true, {
assignee: assignee.value,
assigneeName: '',
userType: userType.value,
dataId: data.id,
deployId: deployId.value,
})
await setNextNodeUser();
} }
const setNextNodeUser = async () => { const setNextNodeUser = async () => {
...@@ -205,7 +209,7 @@ import { CONNREFUSED } from 'dns'; ...@@ -205,7 +209,7 @@ import { CONNREFUSED } from 'dns';
if (userTypes.length > 0) { if (userTypes.length > 0) {
userType.value = userTypes[0].value || ''; userType.value = userTypes[0].value || '';
if(userType.value==="role"){ if(userType.value==="role"){
if(nextNode.candidateGroups){ if(nextNode.candidateGroups&&nextNode.candidateGroups.length>0){
assignee.value = nextNode.candidateGroups[0].id; assignee.value = nextNode.candidateGroups[0].id;
} }
} else { } else {
...@@ -215,37 +219,6 @@ import { CONNREFUSED } from 'dns'; ...@@ -215,37 +219,6 @@ import { CONNREFUSED } from 'dns';
} }
// const handleOpenMultiForm = (params: {
// nodeIndex?: number;
// title?: string;
// procDefId?: string;
// formData?: Record<string, any>;
// }) => {
// if (params.nodeIndex !== undefined) {
// currentMultiFormIndex.value = params.nodeIndex;
// } else {
// currentMultiFormIndex.value = activeTab.value - 1;
// }
// if (params.title) {
// drawerTitle.value = params.title;
// } else {
// const currentNode = workflowNodes.value[currentMultiFormIndex.value];
// drawerTitle.value = currentNode ? `${currentNode.name} - 历史表单查看` : '表单处理';
// }
// if (params.procDefId) {
// currentProcDefId.value = params.procDefId;
// } else if (workflowNodes.value[currentMultiFormIndex.value]) {
// currentProcDefId.value = workflowNodes.value[currentMultiFormIndex.value].procDefId || '';
// }
// if (params.formData) {
// externalFormData.value = params.formData;
// } else {
// externalFormData.value = {};
// }
// drawerVisible.value = true;
// };
const handleMultiFormSubmit = async (submitData: { const handleMultiFormSubmit = async (submitData: {
nodeId: string;nodeName: string;formData: any;procDefId: string; nodeId: string;nodeName: string;formData: any;procDefId: string;
}) => { }) => {
...@@ -268,6 +241,7 @@ import { CONNREFUSED } from 'dns'; ...@@ -268,6 +241,7 @@ import { CONNREFUSED } from 'dns';
}; };
const handleMultiFormDataUpdate = (data: any) => { const handleMultiFormDataUpdate = (data: any) => {
//alert(JSON.stringify(data))
console.log('多表单数据更新:', data); console.log('多表单数据更新:', data);
// 可以在这里实时保存数据到本地 // 可以在这里实时保存数据到本地
}; };
...@@ -276,7 +250,8 @@ import { CONNREFUSED } from 'dns'; ...@@ -276,7 +250,8 @@ import { CONNREFUSED } from 'dns';
function handlSendSuccess(dataId: any) { function handlSendSuccess(dataId: any) {
const currentFormComponent = getCurrentFormComponent(); const currentFormComponent = getCurrentFormComponent();
if (currentFormComponent && typeof currentFormComponent.handleUpdate === 'function') { if (currentFormComponent && typeof currentFormComponent.handleUpdate === 'function') {
currentFormComponent.handleUpdate(dataId); const nextNode = workflowNodes.value[currentMultiFormIndex.value+1];
currentFormComponent.handleUpdate(dataId,nextNode);
} else { } else {
console.warn('当前组件实例不存在或没有 handleUpdate 方法'); console.warn('当前组件实例不存在或没有 handleUpdate 方法');
} }
...@@ -286,6 +261,17 @@ import { CONNREFUSED } from 'dns'; ...@@ -286,6 +261,17 @@ import { CONNREFUSED } from 'dns';
console.error('任务处理失败:', error) console.error('任务处理失败:', error)
} }
async function handlApprovalFail (dataId: any) {
const currentFormComponent = getCurrentFormComponent();
if (currentFormComponent && typeof currentFormComponent.handleUpdate === 'function') {
const beforeNode = workflowNodes.value[currentMultiFormIndex.value-1];
alert(JSON.stringify(beforeNode))
await currentFormComponent.handleUpdate(dataId,beforeNode);
} else {
console.warn('当前组件实例不存在或没有 handleUpdate 方法');
}
}
async function handleOpenMultiForm(data: any) { async function handleOpenMultiForm(data: any) {
......
...@@ -81,18 +81,21 @@ ...@@ -81,18 +81,21 @@
label: '计划审核', label: '计划审核',
onClick: handlePlanApproval.bind(null, record), onClick: handlePlanApproval.bind(null, record),
}, },
{ // {
label: '提交', // label: '提交',
onClick: handleSendNext.bind(null, record), // onClick: handleSendNext.bind(null, record),
}, // },
]; ];
} }
async function handleUpdate(dataId) { async function handleUpdate(dataId,flowNode) {
await saveOrUpdate({ let record = {
bmpNodeId: props.nextFlowNode.id, bmpNodeId: flowNode.id,
id:dataId, deployId: flowNode.deployId,
},true).then(res => { bpmStatus: 2,
id:dataId
}
await saveOrUpdate(record,true).then(res => {
handleSuccess(); handleSuccess();
}) })
} }
......
...@@ -86,10 +86,10 @@ ...@@ -86,10 +86,10 @@
]; ];
} }
async function handleUpdate(dataId) { async function handleUpdate(dataId,flowNode) {
let record = { let record = {
bmpNodeId: props.nextFlowNode.id, bmpNodeId: flowNode.id,
deployId: props.nextFlowNode.deployId, deployId: flowNode.deployId,
bpmStatus: 2, bpmStatus: 2,
id:dataId id:dataId
} }
...@@ -103,7 +103,6 @@ ...@@ -103,7 +103,6 @@
}) })
</script> </script>
<style scoped></style> <style scoped></style>
...@@ -118,10 +118,8 @@ ...@@ -118,10 +118,8 @@
initFormData(props.dataId); initFormData(props.dataId);
const setFormDisabledStatus = (isEdit: boolean) => { const setFormDisabledStatus = (isEdit: boolean) => {
if (props.disabled === false) { setProps({ disabled: isEdit });
return false; return isEdit
}
return true;
}; };
return { return {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论