我的租户菜单加提醒:需要在多租户模式下使用,否则数据会出现混乱

pull/859/head
zhangdaiscott 2023-11-05 10:34:32 +08:00
parent bffd067985
commit 9b87a03522
5 changed files with 80 additions and 49 deletions

View File

@ -6,6 +6,9 @@ import { reactive } from "vue";
import { getTenantId, getToken } from "/@/utils/auth";
import { useUserStoreWithOut } from "/@/store/modules/user";
import { Modal } from "ant-design-vue";
import { defHttp } from "@/utils/http/axios";
const globSetting = useGlobSetting();
const baseApiUrl = globSetting.domainUrl;
/**
@ -459,3 +462,52 @@ export function replaceUserInfoByExpression(expression: string | any[]) {
// @ts-ignore
return isString ? replace(expression) : expression.map(replace);
}
/**
* 退
*
* @param tenantId
*/
export async function userExitChangeLoginTenantId(tenantId){
const userStore = useUserStoreWithOut();
//step 1 获取用户租户
const url = '/sys/tenant/getCurrentUserTenant'
let currentTenantId = null;
const data = await defHttp.get({ url });
if(data && data.list){
let arr = data.list;
if(arr.length>0){
//step 2.判断当前id是否存在用户租户中
let filterTenantId = arr.filter((item) => item.id == tenantId);
//存在说明不是退出的不是当前租户,还用用来的租户即可
if(filterTenantId && filterTenantId.length>0){
currentTenantId = tenantId;
}else{
//不存在默认第一个
currentTenantId = arr[0].id
}
}
}
userStore.setTenant(currentTenantId);
//切换租户后要刷新首页
window.location.reload();
}
/**
*
*
* @param title
*/
export function tenantSaasMessage(title){
let tenantId = getTenantId();
if(!tenantId){
Modal.confirm({
title:title,
content: '此菜单需要在多租户模式下使用,否则数据会出现混乱',
okText: '确认',
okType: 'danger',
// @ts-ignore
cancelButtonProps: { style: { display: 'none' } },
})
}
}

View File

@ -30,7 +30,7 @@
<RoleDesc @register="registerDesc"></RoleDesc>
</template>
<script lang="ts" name="system-role" setup>
import { ref } from 'vue';
import { onMounted, ref } from 'vue';
import { BasicTable, TableAction } from '/@/components/Table';
import { useDrawer } from '/@/components/Drawer';
import { useModal } from '/@/components/Modal';
@ -41,6 +41,8 @@
import { listByTenant, deleteRole, batchDeleteRole, getExportUrl, getImportUrl } from './role.api';
import { useListPage } from '/@/hooks/system/useListPage';
import { getLoginTenantName } from "/@/views/system/tenant/tenant.api";
import { tenantSaasMessage } from "@/utils/common/compUtils";
const showFooter = ref(true);
const [roleUserDrawer, { openDrawer: openRoleUserDrawer }] = useDrawer();
const [registerDrawer, { openDrawer }] = useDrawer();
@ -167,6 +169,10 @@
async function getTenantName(){
loginTenantName.value = await getLoginTenantName();
}
onMounted(()=>{
tenantSaasMessage('租户角色')
})
</script>
<style scoped lang="less">

View File

@ -27,7 +27,7 @@
<script lang="ts" name="tenant-system-user" setup>
//ts
import { ref, unref } from 'vue';
import { onMounted, ref, unref } from 'vue';
import { BasicTable, TableAction, ActionItem } from '/@/components/Table';
import UserDrawer from '../user/UserDrawer.vue';
import JThirdAppButton from '/@/components/jeecg/thirdApp/JThirdAppButton.vue';
@ -48,6 +48,7 @@
import { changeOwenUserTenant } from "/@/views/system/usersetting/UserSetting.api";
import { getLoginTenantName } from "/@/views/system/tenant/tenant.api";
import TenantUserDrawer from './components/TenantUserDrawer.vue';
import { tenantSaasMessage } from "@/utils/common/compUtils";
const { createMessage, createConfirm } = useMessage();
@ -157,7 +158,9 @@
},
{
label: '离职',
onClick: handleQuit.bind(null, record.username),
//update-begin---author:wangshuai---date:2023-10-25---for:QQYUN-68229.---
onClick: handleQuit.bind(null, record.id),
//update-end---author:wangshuai---date:2023-10-25---for:QQYUN-68229.---
//update-begin---author:wangshuai ---date:20230130 for[QQYUN-3974] ------------
ifShow: () =>{
return record.status === '1' && record.username!== record.createBy;
@ -278,6 +281,10 @@
loginTenantName.value = await getLoginTenantName();
}
//update-end---author:wangshuai ---date:20230710 forQQYUN-57234------------
onMounted(()=>{
tenantSaasMessage('租户用户')
})
</script>
<style scoped>

View File

@ -30,7 +30,7 @@
</div>
</template>
<script lang="ts" name="my-tenant-list" setup>
import { ref, unref } from 'vue';
import { onMounted, ref, unref } from 'vue';
import { BasicTable, TableAction } from '/@/components/Table';
import { useModal } from '/@/components/Modal';
import { invitationUserJoin, getTenantPageListByUserId } from '../tenant.api';
@ -43,6 +43,7 @@
import TenantPackList from '../pack/TenantPackList.vue';
import { getTenantId } from '/@/utils/auth';
import { useUserStore } from '/@/store/modules/user';
import { tenantSaasMessage } from "@/utils/common/compUtils";
const { createMessage } = useMessage();
const [registerModal, { openModal }] = useModal();
@ -137,4 +138,9 @@
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
onMounted(()=>{
//
tenantSaasMessage('我的租户')
})
</script>

View File

@ -69,42 +69,6 @@
<Icon icon="ant-design:edit-outlined" class="footer-icon" />
<span>查看租户名片</span>
</span>
<span
v-if="item.userTenantStatus !== '3' && item.auth"
@click.stop="footerClick('tenantSetting', item)"
class="font-color333 flex-flow margin-right40 font-size13 pointer"
>
<Icon icon="ant-design:tool-outlined" class="footer-icon" />
<span>租户管理</span>
</span>
<span v-else-if="item.userTenantStatus === '3' && item.auth" class="font-color9e flex-flow margin-right40 font-size13">
<Icon icon="ant-design:tool-outlined" class="footer-icon" />
<span>租户管理</span>
</span>
<span
v-if="item.userTenantStatus !== '3' && !item.auth"
@click.stop="footerClick('tenantSetting', item)"
class="font-color333 flex-flow margin-right40 font-size13 pointer"
>
<Icon icon="ant-design:tool-outlined" class="footer-icon" />
<span>申请角色权限</span>
</span>
<span v-else-if="item.userTenantStatus === '3' && !item.auth" class="font-color9e flex-flow margin-right40 font-size13">
<Icon icon="ant-design:tool-outlined" class="footer-icon" />
<span>申请角色权限</span>
</span>
<span
v-if="item.userTenantStatus !== '3'"
@click.stop="footerClick('tenantSetting', item)"
class="font-color333 flex-flow margin-right40 font-size13 pointer"
>
<Icon icon="ant-design:gold-outlined" class="footer-icon" />
<span>我的汇报关系</span>
</span>
<span v-else class="font-color9e flex-flow margin-right40 font-size13">
<Icon icon="ant-design:gold-outlined" class="footer-icon" />
<span>我的汇报关系</span>
</span>
<span
v-if="item.userTenantStatus !== '3'"
@click.stop="footerClick('exitTenant', item)"
@ -226,7 +190,7 @@ import { onMounted, ref, unref } from "vue";
import { getTenantListByUserId, cancelApplyTenant, exitUserTenant, changeOwenUserTenant, agreeOrRefuseJoinTenant } from "./UserSetting.api";
import { useUserStore } from "/@/store/modules/user";
import { CollapseContainer } from "/@/components/Container";
import { getFileAccessHttpUrl } from "/@/utils/common/compUtils";
import { getFileAccessHttpUrl, userExitChangeLoginTenantId } from "/@/utils/common/compUtils";
import headerImg from "/@/assets/images/header.jpg";
import {useMessage} from "/@/hooks/web/useMessage";
import { initDictOptions } from '/@/utils/dict';
@ -424,11 +388,7 @@ const userDetail = ref({
if (res.success) {
createMessage.success(res.message);
cancelVisible.value = false;
//update-begin---author:wangshuai ---date:20230703 forQQYUN-5632退 退------------
userStore.setTenant(null);
//update-end---author:wangshuai ---date:20230703 forQQYUN-5632退 退------------
//
window.location.reload();
userExitChangeLoginTenantId(unref(myTenantInfo).tenantUserId);
} else {
if (res.message === 'assignedOwen') {
//
@ -480,9 +440,9 @@ const userDetail = ref({
changeOwenUserTenant({ userId:unref(tenantOwen), tenantId:unref(myTenantInfo).tenantUserId }).then((res) =>{
if(res.success){
createMessage.success(res.message);
userStore.setTenant(null);
//
window.location.reload();
//update-begin---author:wangshuai---date:2023-10-23---for:QQYUN-68227退---
userExitChangeLoginTenantId(unref(myTenantInfo).tenantUserId);
//update-end---author:wangshuai---date:2023-10-23---for:QQYUN-68227退---
} else {
createMessage.warning(res.message);
}