|
@@ -14,121 +14,122 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script lang="ts" setup>
|
|
<script lang="ts" setup>
|
|
|
-import { computed, onMounted, ref } from "vue";
|
|
|
|
|
-import { useToast } from "wot-design-uni";
|
|
|
|
|
|
|
+import type { TenantVO } from '@/api/login'
|
|
|
|
|
+import { computed, onMounted, ref } from 'vue'
|
|
|
|
|
+import { useToast } from 'wot-design-uni'
|
|
|
import {
|
|
import {
|
|
|
getTenantByWebsite,
|
|
getTenantByWebsite,
|
|
|
getTenantSimpleList,
|
|
getTenantSimpleList,
|
|
|
- type TenantVO,
|
|
|
|
|
-} from "@/api/login";
|
|
|
|
|
-import { useUserStore } from "@/store/user";
|
|
|
|
|
|
|
|
|
|
-const toast = useToast();
|
|
|
|
|
-const userStore = useUserStore();
|
|
|
|
|
|
|
+} from '@/api/login'
|
|
|
|
|
+import { useUserStore } from '@/store/user'
|
|
|
|
|
+
|
|
|
|
|
+const toast = useToast()
|
|
|
|
|
+const userStore = useUserStore()
|
|
|
|
|
|
|
|
const tenantEnabled = computed(
|
|
const tenantEnabled = computed(
|
|
|
- () => import.meta.env.VITE_APP_TENANT_ENABLE === "true",
|
|
|
|
|
-); // 租户开关:通过环境变量控制
|
|
|
|
|
-const tenantList = ref<TenantVO[]>([]); // 租户列表数据
|
|
|
|
|
|
|
+ () => import.meta.env.VITE_APP_TENANT_ENABLE === 'true',
|
|
|
|
|
+) // 租户开关:通过环境变量控制
|
|
|
|
|
+const tenantList = ref<TenantVO[]>([]) // 租户列表数据
|
|
|
|
|
|
|
|
const tenantId = computed(
|
|
const tenantId = computed(
|
|
|
() =>
|
|
() =>
|
|
|
- userStore.tenantId ||
|
|
|
|
|
- Number(import.meta.env.VITE_APP_DEFAULT_LOGIN_TENANT_ID) ||
|
|
|
|
|
- undefined,
|
|
|
|
|
-); // 当前选中的租户
|
|
|
|
|
|
|
+ userStore.tenantId
|
|
|
|
|
+ || Number(import.meta.env.VITE_APP_DEFAULT_LOGIN_TENANT_ID)
|
|
|
|
|
+ || undefined,
|
|
|
|
|
+) // 当前选中的租户
|
|
|
|
|
|
|
|
/** 获取租户列表,并根据域名/appId 自动选中租户 */
|
|
/** 获取租户列表,并根据域名/appId 自动选中租户 */
|
|
|
async function fetchTenantList() {
|
|
async function fetchTenantList() {
|
|
|
if (!tenantEnabled.value) {
|
|
if (!tenantEnabled.value) {
|
|
|
- return;
|
|
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
try {
|
|
try {
|
|
|
// 1. 并行获取租户列表和域名对应的租户
|
|
// 1. 并行获取租户列表和域名对应的租户
|
|
|
- const websiteTenantPromise = fetchTenantByWebsite();
|
|
|
|
|
- const list = await getTenantSimpleList();
|
|
|
|
|
- tenantList.value = list || [];
|
|
|
|
|
|
|
+ const websiteTenantPromise = fetchTenantByWebsite()
|
|
|
|
|
+ const list = await getTenantSimpleList()
|
|
|
|
|
+ tenantList.value = list || []
|
|
|
|
|
|
|
|
// 2. 确定选中的租户:域名/appId > store 中的租户 > 列表第一个
|
|
// 2. 确定选中的租户:域名/appId > store 中的租户 > 列表第一个
|
|
|
- let selectedTenantId: number | null = null;
|
|
|
|
|
|
|
+ let selectedTenantId: number | null = null
|
|
|
// 2.1 优先使用域名/appId 对应的租户
|
|
// 2.1 优先使用域名/appId 对应的租户
|
|
|
- const websiteTenant = await websiteTenantPromise;
|
|
|
|
|
|
|
+ const websiteTenant = await websiteTenantPromise
|
|
|
if (websiteTenant?.id) {
|
|
if (websiteTenant?.id) {
|
|
|
- selectedTenantId = websiteTenant.id;
|
|
|
|
|
|
|
+ selectedTenantId = websiteTenant.id
|
|
|
}
|
|
}
|
|
|
// 2.2 如果没有从域名获取到,使用 store 中的租户
|
|
// 2.2 如果没有从域名获取到,使用 store 中的租户
|
|
|
if (!selectedTenantId && userStore.tenantId) {
|
|
if (!selectedTenantId && userStore.tenantId) {
|
|
|
- selectedTenantId = userStore.tenantId;
|
|
|
|
|
|
|
+ selectedTenantId = userStore.tenantId
|
|
|
}
|
|
}
|
|
|
// 2.3 如果还是没有,使用列表第一个
|
|
// 2.3 如果还是没有,使用列表第一个
|
|
|
if (!selectedTenantId && tenantList.value.length > 0) {
|
|
if (!selectedTenantId && tenantList.value.length > 0) {
|
|
|
- selectedTenantId = tenantList.value[0].id;
|
|
|
|
|
|
|
+ selectedTenantId = tenantList.value[0].id
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 3. 设置选中的租户
|
|
// 3. 设置选中的租户
|
|
|
if (selectedTenantId && selectedTenantId !== userStore.tenantId) {
|
|
if (selectedTenantId && selectedTenantId !== userStore.tenantId) {
|
|
|
- userStore.setTenantId(selectedTenantId);
|
|
|
|
|
|
|
+ userStore.setTenantId(selectedTenantId)
|
|
|
}
|
|
}
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
- console.error("获取租户列表失败:", error);
|
|
|
|
|
|
|
+ console.error('获取租户列表失败:', error)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/** 根据域名或 appId 获取租户 */
|
|
/** 根据域名或 appId 获取租户 */
|
|
|
async function fetchTenantByWebsite(): Promise<TenantVO | null> {
|
|
async function fetchTenantByWebsite(): Promise<TenantVO | null> {
|
|
|
try {
|
|
try {
|
|
|
- let website: string | null = null;
|
|
|
|
|
|
|
+ let website: string | null = null
|
|
|
|
|
|
|
|
// #ifdef H5
|
|
// #ifdef H5
|
|
|
// H5 环境:使用域名
|
|
// H5 环境:使用域名
|
|
|
if (window?.location?.hostname) {
|
|
if (window?.location?.hostname) {
|
|
|
- website = window.location.hostname;
|
|
|
|
|
|
|
+ website = window.location.hostname
|
|
|
}
|
|
}
|
|
|
// #endif
|
|
// #endif
|
|
|
|
|
|
|
|
// #ifdef MP
|
|
// #ifdef MP
|
|
|
// 小程序环境:使用 appId
|
|
// 小程序环境:使用 appId
|
|
|
- const appId = uni.getAccountInfoSync?.()?.miniProgram?.appId;
|
|
|
|
|
|
|
+ const appId = uni.getAccountInfoSync?.()?.miniProgram?.appId
|
|
|
if (appId) {
|
|
if (appId) {
|
|
|
- website = appId;
|
|
|
|
|
|
|
+ website = appId
|
|
|
}
|
|
}
|
|
|
// #endif
|
|
// #endif
|
|
|
|
|
|
|
|
if (website) {
|
|
if (website) {
|
|
|
- return await getTenantByWebsite(website);
|
|
|
|
|
|
|
+ return await getTenantByWebsite(website)
|
|
|
}
|
|
}
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
// 域名未配置租户时会报错,忽略即可
|
|
// 域名未配置租户时会报错,忽略即可
|
|
|
- console.debug("根据域名获取租户失败:", error);
|
|
|
|
|
|
|
+ console.debug('根据域名获取租户失败:', error)
|
|
|
}
|
|
}
|
|
|
- return null;
|
|
|
|
|
|
|
+ return null
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/** 租户选择确认 */
|
|
/** 租户选择确认 */
|
|
|
function handleConfirm({ value }: { value: number }) {
|
|
function handleConfirm({ value }: { value: number }) {
|
|
|
- userStore.setTenantId(value);
|
|
|
|
|
|
|
+ userStore.setTenantId(value)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/** 校验租户是否已选择 */
|
|
/** 校验租户是否已选择 */
|
|
|
function validate(): boolean {
|
|
function validate(): boolean {
|
|
|
if (!tenantEnabled.value) {
|
|
if (!tenantEnabled.value) {
|
|
|
- return true;
|
|
|
|
|
|
|
+ return true
|
|
|
}
|
|
}
|
|
|
if (!tenantId.value) {
|
|
if (!tenantId.value) {
|
|
|
- toast.warning("请选择租户");
|
|
|
|
|
- return false;
|
|
|
|
|
|
|
+ toast.warning('请选择租户')
|
|
|
|
|
+ return false
|
|
|
}
|
|
}
|
|
|
- return true;
|
|
|
|
|
|
|
+ return true
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/** 页面加载时获取租户列表 */
|
|
/** 页面加载时获取租户列表 */
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
- fetchTenantList();
|
|
|
|
|
-});
|
|
|
|
|
|
|
+ fetchTenantList()
|
|
|
|
|
+})
|
|
|
|
|
|
|
|
-defineExpose({ validate });
|
|
|
|
|
|
|
+defineExpose({ validate })
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
<style lang="scss" scoped>
|
|
|
-@import "../styles/auth.scss";
|
|
|
|
|
|
|
+@import '../styles/auth.scss';
|
|
|
</style>
|
|
</style>
|