我的租户菜单加提醒:需要在多租户模式下使用,否则数据会出现混乱
This commit is contained in:
parent
bffd067985
commit
9b87a03522
|
@ -6,6 +6,9 @@ import { reactive } from "vue";
|
||||||
import { getTenantId, getToken } from "/@/utils/auth";
|
import { getTenantId, getToken } from "/@/utils/auth";
|
||||||
import { useUserStoreWithOut } from "/@/store/modules/user";
|
import { useUserStoreWithOut } from "/@/store/modules/user";
|
||||||
|
|
||||||
|
import { Modal } from "ant-design-vue";
|
||||||
|
import { defHttp } from "@/utils/http/axios";
|
||||||
|
|
||||||
const globSetting = useGlobSetting();
|
const globSetting = useGlobSetting();
|
||||||
const baseApiUrl = globSetting.domainUrl;
|
const baseApiUrl = globSetting.domainUrl;
|
||||||
/**
|
/**
|
||||||
|
@ -459,3 +462,52 @@ export function replaceUserInfoByExpression(expression: string | any[]) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
return isString ? replace(expression) : expression.map(replace);
|
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' } },
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -30,7 +30,7 @@
|
||||||
<RoleDesc @register="registerDesc"></RoleDesc>
|
<RoleDesc @register="registerDesc"></RoleDesc>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="system-role" setup>
|
<script lang="ts" name="system-role" setup>
|
||||||
import { ref } from 'vue';
|
import { onMounted, ref } from 'vue';
|
||||||
import { BasicTable, TableAction } from '/@/components/Table';
|
import { BasicTable, TableAction } from '/@/components/Table';
|
||||||
import { useDrawer } from '/@/components/Drawer';
|
import { useDrawer } from '/@/components/Drawer';
|
||||||
import { useModal } from '/@/components/Modal';
|
import { useModal } from '/@/components/Modal';
|
||||||
|
@ -41,6 +41,8 @@
|
||||||
import { listByTenant, deleteRole, batchDeleteRole, getExportUrl, getImportUrl } from './role.api';
|
import { listByTenant, deleteRole, batchDeleteRole, getExportUrl, getImportUrl } from './role.api';
|
||||||
import { useListPage } from '/@/hooks/system/useListPage';
|
import { useListPage } from '/@/hooks/system/useListPage';
|
||||||
import { getLoginTenantName } from "/@/views/system/tenant/tenant.api";
|
import { getLoginTenantName } from "/@/views/system/tenant/tenant.api";
|
||||||
|
import { tenantSaasMessage } from "@/utils/common/compUtils";
|
||||||
|
|
||||||
const showFooter = ref(true);
|
const showFooter = ref(true);
|
||||||
const [roleUserDrawer, { openDrawer: openRoleUserDrawer }] = useDrawer();
|
const [roleUserDrawer, { openDrawer: openRoleUserDrawer }] = useDrawer();
|
||||||
const [registerDrawer, { openDrawer }] = useDrawer();
|
const [registerDrawer, { openDrawer }] = useDrawer();
|
||||||
|
@ -167,6 +169,10 @@
|
||||||
async function getTenantName(){
|
async function getTenantName(){
|
||||||
loginTenantName.value = await getLoginTenantName();
|
loginTenantName.value = await getLoginTenantName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(()=>{
|
||||||
|
tenantSaasMessage('租户角色')
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
<script lang="ts" name="tenant-system-user" setup>
|
<script lang="ts" name="tenant-system-user" setup>
|
||||||
//ts语法
|
//ts语法
|
||||||
import { ref, unref } from 'vue';
|
import { onMounted, ref, unref } from 'vue';
|
||||||
import { BasicTable, TableAction, ActionItem } from '/@/components/Table';
|
import { BasicTable, TableAction, ActionItem } from '/@/components/Table';
|
||||||
import UserDrawer from '../user/UserDrawer.vue';
|
import UserDrawer from '../user/UserDrawer.vue';
|
||||||
import JThirdAppButton from '/@/components/jeecg/thirdApp/JThirdAppButton.vue';
|
import JThirdAppButton from '/@/components/jeecg/thirdApp/JThirdAppButton.vue';
|
||||||
|
@ -48,6 +48,7 @@
|
||||||
import { changeOwenUserTenant } from "/@/views/system/usersetting/UserSetting.api";
|
import { changeOwenUserTenant } from "/@/views/system/usersetting/UserSetting.api";
|
||||||
import { getLoginTenantName } from "/@/views/system/tenant/tenant.api";
|
import { getLoginTenantName } from "/@/views/system/tenant/tenant.api";
|
||||||
import TenantUserDrawer from './components/TenantUserDrawer.vue';
|
import TenantUserDrawer from './components/TenantUserDrawer.vue';
|
||||||
|
import { tenantSaasMessage } from "@/utils/common/compUtils";
|
||||||
|
|
||||||
const { createMessage, createConfirm } = useMessage();
|
const { createMessage, createConfirm } = useMessage();
|
||||||
|
|
||||||
|
@ -157,7 +158,9 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '离职',
|
label: '离职',
|
||||||
onClick: handleQuit.bind(null, record.username),
|
//update-begin---author:wangshuai---date:2023-10-25---for:【QQYUN-6822】9.离职交接人选的是自己,完成之后数据没了---
|
||||||
|
onClick: handleQuit.bind(null, record.id),
|
||||||
|
//update-end---author:wangshuai---date:2023-10-25---for:【QQYUN-6822】9.离职交接人选的是自己,完成之后数据没了---
|
||||||
//update-begin---author:wangshuai ---date:20230130 for:[QQYUN-3974]租户的创建人 不应该有离职按钮------------
|
//update-begin---author:wangshuai ---date:20230130 for:[QQYUN-3974]租户的创建人 不应该有离职按钮------------
|
||||||
ifShow: () =>{
|
ifShow: () =>{
|
||||||
return record.status === '1' && record.username!== record.createBy;
|
return record.status === '1' && record.username!== record.createBy;
|
||||||
|
@ -278,6 +281,10 @@
|
||||||
loginTenantName.value = await getLoginTenantName();
|
loginTenantName.value = await getLoginTenantName();
|
||||||
}
|
}
|
||||||
//update-end---author:wangshuai ---date:20230710 for:【QQYUN-5723】4、显示当前登录租户------------
|
//update-end---author:wangshuai ---date:20230710 for:【QQYUN-5723】4、显示当前登录租户------------
|
||||||
|
|
||||||
|
onMounted(()=>{
|
||||||
|
tenantSaasMessage('租户用户')
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="my-tenant-list" setup>
|
<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 { BasicTable, TableAction } from '/@/components/Table';
|
||||||
import { useModal } from '/@/components/Modal';
|
import { useModal } from '/@/components/Modal';
|
||||||
import { invitationUserJoin, getTenantPageListByUserId } from '../tenant.api';
|
import { invitationUserJoin, getTenantPageListByUserId } from '../tenant.api';
|
||||||
|
@ -43,6 +43,7 @@
|
||||||
import TenantPackList from '../pack/TenantPackList.vue';
|
import TenantPackList from '../pack/TenantPackList.vue';
|
||||||
import { getTenantId } from '/@/utils/auth';
|
import { getTenantId } from '/@/utils/auth';
|
||||||
import { useUserStore } from '/@/store/modules/user';
|
import { useUserStore } from '/@/store/modules/user';
|
||||||
|
import { tenantSaasMessage } from "@/utils/common/compUtils";
|
||||||
|
|
||||||
const { createMessage } = useMessage();
|
const { createMessage } = useMessage();
|
||||||
const [registerModal, { openModal }] = useModal();
|
const [registerModal, { openModal }] = useModal();
|
||||||
|
@ -137,4 +138,9 @@
|
||||||
function handleSuccess() {
|
function handleSuccess() {
|
||||||
(selectedRowKeys.value = []) && reload();
|
(selectedRowKeys.value = []) && reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(()=>{
|
||||||
|
//提示信息
|
||||||
|
tenantSaasMessage('我的租户')
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -69,42 +69,6 @@
|
||||||
<Icon icon="ant-design:edit-outlined" class="footer-icon" />
|
<Icon icon="ant-design:edit-outlined" class="footer-icon" />
|
||||||
<span>查看租户名片</span>
|
<span>查看租户名片</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
|
<span
|
||||||
v-if="item.userTenantStatus !== '3'"
|
v-if="item.userTenantStatus !== '3'"
|
||||||
@click.stop="footerClick('exitTenant', item)"
|
@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 { getTenantListByUserId, cancelApplyTenant, exitUserTenant, changeOwenUserTenant, agreeOrRefuseJoinTenant } from "./UserSetting.api";
|
||||||
import { useUserStore } from "/@/store/modules/user";
|
import { useUserStore } from "/@/store/modules/user";
|
||||||
import { CollapseContainer } from "/@/components/Container";
|
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 headerImg from "/@/assets/images/header.jpg";
|
||||||
import {useMessage} from "/@/hooks/web/useMessage";
|
import {useMessage} from "/@/hooks/web/useMessage";
|
||||||
import { initDictOptions } from '/@/utils/dict';
|
import { initDictOptions } from '/@/utils/dict';
|
||||||
|
@ -424,11 +388,7 @@ const userDetail = ref({
|
||||||
if (res.success) {
|
if (res.success) {
|
||||||
createMessage.success(res.message);
|
createMessage.success(res.message);
|
||||||
cancelVisible.value = false;
|
cancelVisible.value = false;
|
||||||
//update-begin---author:wangshuai ---date:20230703 for:【QQYUN-5632】退出租户后 再点击主页 已退出的租户应用还可以操作------------
|
userExitChangeLoginTenantId(unref(myTenantInfo).tenantUserId);
|
||||||
userStore.setTenant(null);
|
|
||||||
//update-end---author:wangshuai ---date:20230703 for:【QQYUN-5632】退出租户后 再点击主页 已退出的租户应用还可以操作------------
|
|
||||||
//切换租户后要刷新首页
|
|
||||||
window.location.reload();
|
|
||||||
} else {
|
} else {
|
||||||
if (res.message === 'assignedOwen') {
|
if (res.message === 'assignedOwen') {
|
||||||
//需要指定变更者
|
//需要指定变更者
|
||||||
|
@ -480,9 +440,9 @@ const userDetail = ref({
|
||||||
changeOwenUserTenant({ userId:unref(tenantOwen), tenantId:unref(myTenantInfo).tenantUserId }).then((res) =>{
|
changeOwenUserTenant({ userId:unref(tenantOwen), tenantId:unref(myTenantInfo).tenantUserId }).then((res) =>{
|
||||||
if(res.success){
|
if(res.success){
|
||||||
createMessage.success(res.message);
|
createMessage.success(res.message);
|
||||||
userStore.setTenant(null);
|
//update-begin---author:wangshuai---date:2023-10-23---for:【QQYUN-6822】7、登录拥有多个租户身份的用户,退出租户,只剩下一个租户后显示为空---
|
||||||
//切换租户后要刷新首页
|
userExitChangeLoginTenantId(unref(myTenantInfo).tenantUserId);
|
||||||
window.location.reload();
|
//update-end---author:wangshuai---date:2023-10-23---for:【QQYUN-6822】7、登录拥有多个租户身份的用户,退出租户,只剩下一个租户后显示为空---
|
||||||
} else {
|
} else {
|
||||||
createMessage.warning(res.message);
|
createMessage.warning(res.message);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue