|
@@ -0,0 +1,100 @@
|
|
|
|
|
+<!-- 切换租户 -->
|
|
|
|
|
+<template>
|
|
|
|
|
+ <div class="switchTenantLable-wrapper" v-if="optionsShown">
|
|
|
|
|
+ <el-tree-select
|
|
|
|
|
+ :model-value="currentTenant"
|
|
|
|
|
+ :data="options"
|
|
|
|
|
+ size="small"
|
|
|
|
|
+ check-strictly
|
|
|
|
|
+ show-all-levels
|
|
|
|
|
+ default-expand-all
|
|
|
|
|
+ placeholder="请选择租户"
|
|
|
|
|
+ @change="handleChange"
|
|
|
|
|
+ />
|
|
|
|
|
+ </div>
|
|
|
|
|
+</template>
|
|
|
|
|
+<script lang="ts" setup>
|
|
|
|
|
+ import { ref, computed, onMounted } from 'vue';
|
|
|
|
|
+ import { ElMessageBox, ElMessage } from 'element-plus';
|
|
|
|
|
+ import { useUserStore } from '@/store/modules/user';
|
|
|
|
|
+ import { queryListTenant } from '@/api/tenant';
|
|
|
|
|
+ import { SYS_TENANT_ID, useTargetTenantIdSetting } from '@/utils/useTargetTenantIdSetting';
|
|
|
|
|
+ import { replaceParams } from '@/utils/helper/treeHelper';
|
|
|
|
|
+ import router from '@/router';
|
|
|
|
|
+ import { useRoute } from 'vue-router';
|
|
|
|
|
+
|
|
|
|
|
+ interface TenantOption {
|
|
|
|
|
+ label: string;
|
|
|
|
|
+ value: string;
|
|
|
|
|
+ children?: TenantOption[];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const userStore = useUserStore();
|
|
|
|
|
+ const { setValue, getValue } = useTargetTenantIdSetting();
|
|
|
|
|
+ const localTId = getValue();
|
|
|
|
|
+ const tenantId = computed(() => {
|
|
|
|
|
+ return userStore.info.tenantId;
|
|
|
|
|
+ });
|
|
|
|
|
+ const currentTenant = ref(localTId ? Number(localTId) : Number(tenantId.value));
|
|
|
|
|
+ const options = ref<TenantOption[]>([]);
|
|
|
|
|
+
|
|
|
|
|
+ const route = useRoute();
|
|
|
|
|
+
|
|
|
|
|
+ const optionsShown = computed(() => {
|
|
|
|
|
+ return userStore.info.tenantId === SYS_TENANT_ID;
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ onMounted(() => {
|
|
|
|
|
+ const routeTenantId = route.query.targetTenantId as string;
|
|
|
|
|
+ if (routeTenantId && routeTenantId !== 'undefined') {
|
|
|
|
|
+ const nextTenantId = Number(routeTenantId);
|
|
|
|
|
+ currentTenant.value = nextTenantId;
|
|
|
|
|
+ setValue(routeTenantId);
|
|
|
|
|
+ }
|
|
|
|
|
+ queryListTenant().then((res) => {
|
|
|
|
|
+ if (!res) return;
|
|
|
|
|
+ options.value = replaceParams(res || [], 'tenantName', 'id');
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ /* 选择租户添加二次确认弹窗 */
|
|
|
|
|
+ const handleChange = (targetTenantId: string) => {
|
|
|
|
|
+ ElMessageBox.confirm('是否切换租户?', '提示', {
|
|
|
|
|
+ confirmButtonText: '确定',
|
|
|
|
|
+ cancelButtonText: '取消',
|
|
|
|
|
+ type: 'warning',
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(async () => {
|
|
|
|
|
+ setValue(targetTenantId);
|
|
|
|
|
+ currentTenant.value = Number(targetTenantId);
|
|
|
|
|
+ // 统一返回首页
|
|
|
|
|
+ await router.push('/');
|
|
|
|
|
+ window.location.reload();
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(() => {
|
|
|
|
|
+ ElMessage({
|
|
|
|
|
+ type: 'info',
|
|
|
|
|
+ message: '取消切换',
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ };
|
|
|
|
|
+</script>
|
|
|
|
|
+<style scoped>
|
|
|
|
|
+ .switchTenantLable {
|
|
|
|
|
+ margin-right: 15px;
|
|
|
|
|
+ display: inline-block;
|
|
|
|
|
+ width: 100px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .switchTenantWrapper {
|
|
|
|
|
+ margin-right: 20px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .switchTenantLable-wrapper {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ width: 110px;
|
|
|
|
|
+ margin-left: 10px;
|
|
|
|
|
+ }
|
|
|
|
|
+</style>
|