待办列表跨租户审批功能开发:

后端返回tenant信息跟当前用户登录的tenant进行比较,如果不一致,则弹出确认框提示用户切换租户,点击确认后完成租户切换,弹出切换租户成功的通知,然后进入审批详情页面。
This commit is contained in:
suguangxu
2025-05-22 16:42:15 +08:00
parent 784442bd80
commit 499c7be958

View File

@ -30,11 +30,33 @@
import { getSchemaTask } from '/@/api/workflow/process'; import { getSchemaTask } from '/@/api/workflow/process';
import { TaskTypeUrl } from '/@/enums/workflowEnum'; import { TaskTypeUrl } from '/@/enums/workflowEnum';
import { useI18n } from '/@/hooks/web/useI18n'; import { useI18n } from '/@/hooks/web/useI18n';
import { unref, watch, onMounted, onUnmounted } from 'vue'; import { unref, watch, onMounted, onUnmounted ,h} from 'vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import useEventBus from '/@/hooks/event/useEventBus'; import useEventBus from '/@/hooks/event/useEventBus';
import { getAppEnvConfig } from '/@/utils/env';
import { storeToRefs } from 'pinia';
import { useUserStore } from '/@/store/modules/user';
import {useMessage} from "/@/hooks/web/useMessage";
import { changeTenant } from '/@/api/system/tenant';
import {useAppStore} from "/@/store/modules/app";
import {setupRouterGuard} from "/@/router/guard";
import {usePermissionStore} from "/@/store/modules/permission";
import {useTabs} from "/@/hooks/web/useTabs";
import {useMenuSetting} from "/@/hooks/setting/useMenuSetting";
import {useAppInject} from "/@/hooks/web/useAppInject";
const router = useRouter();
const { currentRoute } = router;
const { t } = useI18n(); const { t } = useI18n();
const appStore = useAppStore();
const userStore = useUserStore();
const { userInfo } = storeToRefs(userStore);
const { closeAll } = useTabs(router);
const permissionStore = usePermissionStore();
const { getShowTopMenu } = useMenuSetting();
const { getIsMobile } = useAppInject();
const configColumns: BasicColumn[] = [ const configColumns: BasicColumn[] = [
{ {
title: t('流水号'), title: t('流水号'),
@ -112,9 +134,6 @@
setting: false setting: false
} }
}); });
const router = useRouter();
const { currentRoute } = router;
onMounted(() => { onMounted(() => {
bus.on(FLOW_PROCESSED, onFlowProcessed); bus.on(FLOW_PROCESSED, onFlowProcessed);
@ -131,18 +150,76 @@
{ deep: true } { deep: true }
); );
const onRowDblClick = (record, index) => { const onRowDblClick = (record, index) => {
const { processId, taskId, schemaId } = record; const {tenantId,tenantCode,tenantName} = record;
let tenantEnabled=getAppEnvConfig().VITE_TENANT_ENABLED;
if(tenantEnabled =='true'&&tenantId){
let currentTenantId=userInfo.value.tenantId;
if(tenantId!=currentTenantId){
const { createConfirm} = useMessage();
createConfirm({
iconType: 'warning',
title: () => h('span', t('温馨提醒')),
content: () => h('div', [
h('span', t(`当前流程的发起租户是"${tenantName}",需要切换到该租户才能对该流程进行审批`)),
h('br'),
h('span', t('是否确认切换租户?未保存的数据可能会丢失!'))
]),
width:'600px',
onOk: async () => {
toggleLocale(tenantCode).then(()=>{
openDetailPage(record,true);
})
},
okText: () => t('确认'),
cancelText: () => t('取消'),
});
}else{
openDetailPage(record);
};
}else{
openDetailPage(record);
}
};
function openDetailPage(record,isTenantSwitch){
const { processId, taskId, schemaId} = record;
router.push({ router.push({
path: `/flow/${schemaId}/${processId}/approveFlow`, path: `/flow/${schemaId}/${processId}/approveFlow`,
query: { query: {
taskId taskId
} }
}).then(()=> {
if (isTenantSwitch) {
const {notification} = useMessage();
const {tenantName} = record;
notification.success({
message: 'Tip',
description: t('已切换到租户“' + tenantName + '"'),
}); });
}; }
});
}
function onFlowProcessed() { function onFlowProcessed() {
reload(); reload();
} }
async function toggleLocale(tenantCode: string) {
appStore.setPageLoadingAction(true);
await changeTenant(tenantCode);
await userStore.afterLoginAction(true);
closeAll();
await setupRouterGuard(router);
await permissionStore.changeSubsystem(getShowTopMenu.value, getIsMobile.value);
if(permissionStore.getSubSysList.length>0){
permissionStore.setSubSystem(permissionStore.getSubSysList[0].id);
}else{
permissionStore.setSubSystem("");
}
}
</script> </script>
<style scoped></style> <style scoped></style>