多租户前端修改提交
This commit is contained in:
@ -6,6 +6,7 @@ import appSearch from './src/search/AppSearch.vue';
|
||||
import appLocalePicker from './src/AppLocalePicker.vue';
|
||||
import appDarkModeToggle from './src/AppDarkModeToggle.vue';
|
||||
import userPostChange from './src/UserPostChange.vue';
|
||||
import userTenantChange from './src/UserTenantChange.vue';
|
||||
export { useAppProviderContext } from './src/useAppContext';
|
||||
|
||||
export const AppLogo = withInstall(appLogo);
|
||||
@ -14,3 +15,4 @@ export const AppSearch = withInstall(appSearch);
|
||||
export const AppLocalePicker = withInstall(appLocalePicker);
|
||||
export const AppDarkModeToggle = withInstall(appDarkModeToggle);
|
||||
export const UserPostChange = withInstall(userPostChange);
|
||||
export const UserTenantChange = withInstall(userTenantChange);
|
||||
|
||||
116
src/components/Application/src/UserTenantChange.vue
Normal file
116
src/components/Application/src/UserTenantChange.vue
Normal file
@ -0,0 +1,116 @@
|
||||
<template>
|
||||
<Tooltip placement="bottom" :mouseEnterDelay="0.5">
|
||||
<Dropdown v-if="formInfo.tenants.length>1"
|
||||
placement="bottom"
|
||||
:trigger="['click']"
|
||||
:dropMenuList="formInfo.tenants"
|
||||
:selectedKeys="selectedKeys"
|
||||
@menu-event="handleMenuEvent"
|
||||
overlayClassName="app-locale-picker-overlay"
|
||||
>
|
||||
<span class="cursor-pointer flex items-center" style="margin-left: 10px;">
|
||||
<Icon icon="ant-design:apartment-outlined" size="18" style="color:#222222"/>
|
||||
<span style="color: rgba(0, 0, 0, 0.85);margin-left: 5px;">{{formInfo.tenantName}}</span>
|
||||
</span>
|
||||
</Dropdown>
|
||||
<span v-else class="flex items-center" style="margin-left: 10px;">
|
||||
<Icon icon="ant-design:apartment-outlined" size="18" style="color:#222222"/>
|
||||
<span style="color: rgba(0, 0, 0, 0.85);margin-left: 5px;">{{formInfo.tenantName}}</span>
|
||||
</span>
|
||||
</Tooltip>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import type { DropMenu } from '/@/components/Dropdown';
|
||||
import { ref, watchEffect, watch, h } from 'vue';
|
||||
import { Dropdown } from '/@/components/Dropdown';
|
||||
import { Icon } from '/@/components/Icon';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { Tooltip } from 'ant-design-vue';
|
||||
import { useUserStore } from '/@/store/modules/user';
|
||||
import { changeTenant } from '/@/api/system/tenant';
|
||||
import { useI18n } from '/@/hooks/web/useI18n';
|
||||
import {useMessage} from "/@/hooks/web/useMessage";
|
||||
import {useTabs} from "/@/hooks/web/useTabs";
|
||||
import {router} from "/@/router";
|
||||
import {setupRouterGuard} from "/@/router/guard";
|
||||
import {usePermissionStore} from "/@/store/modules/permission";
|
||||
import {useMenuSetting} from "/@/hooks/setting/useMenuSetting";
|
||||
import {useAppInject} from "/@/hooks/web/useAppInject";
|
||||
import {useAppStore} from "/@/store/modules/app";
|
||||
|
||||
const userStore = useUserStore();
|
||||
const { t } = useI18n();
|
||||
const { userInfo } = storeToRefs(userStore);
|
||||
const { closeAll } = useTabs(router);
|
||||
const permissionStore = usePermissionStore();
|
||||
const { getShowTopMenu } = useMenuSetting();
|
||||
const { getIsMobile } = useAppInject();
|
||||
const appStore = useAppStore();
|
||||
const formInfo: any = ref({
|
||||
tenants: [],
|
||||
tenantId: '',
|
||||
tenantCode: '',
|
||||
tenantName: '',
|
||||
});
|
||||
getDropMenuList();
|
||||
watch(
|
||||
() => userInfo.value,
|
||||
(val) => {
|
||||
if (val) getDropMenuList();
|
||||
},
|
||||
);
|
||||
const selectedKeys = ref<string[]>([]);
|
||||
|
||||
watchEffect(() => {
|
||||
selectedKeys.value = [formInfo.value.tenantCode];
|
||||
});
|
||||
function getDropMenuList() {
|
||||
if (userInfo.value?.tenants) {
|
||||
formInfo.value = userInfo.value;
|
||||
formInfo.value.tenants.forEach((o) => {
|
||||
o.text = o.name;
|
||||
o.event = o.code;
|
||||
});
|
||||
}
|
||||
}
|
||||
async function toggleLocale(lang: string) {
|
||||
appStore.setPageLoadingAction(true);
|
||||
let res = await changeTenant(lang);
|
||||
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("");
|
||||
}
|
||||
//appStore.setPageLoadingAction(false);
|
||||
//location.reload();
|
||||
}
|
||||
|
||||
function handleMenuEvent(menu: DropMenu) {
|
||||
if (formInfo.value.tenantCode === menu.event) {
|
||||
return;
|
||||
}
|
||||
const { createConfirm } = useMessage();
|
||||
createConfirm({
|
||||
iconType: 'warning',
|
||||
title: () => h('span', t('温馨提醒')),
|
||||
content: () => h('span', t('是否确认切换租户?未保存的数据可能会丢失!')),
|
||||
onOk: async () => {
|
||||
toggleLocale(menu.event as string);
|
||||
},
|
||||
okText: () => t('确认'),
|
||||
cancelText: () => t('取消'),
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.app-locale-picker-overlay {
|
||||
.ant-dropdown-menu-item {
|
||||
min-width: 160px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -1,58 +1,58 @@
|
||||
<template>
|
||||
<a-date-picker
|
||||
:size="size"
|
||||
v-model:value="modelValue"
|
||||
:placeholder="placeholder"
|
||||
:format="format"
|
||||
:valueFormat="format"
|
||||
:allowClear="allowClear"
|
||||
:disabled="disabled"
|
||||
:showTime="format === 'YYYY-MM-DD HH:mm:ss'"
|
||||
:picker="picker"
|
||||
@change="handleChange"
|
||||
/>
|
||||
<a-date-picker
|
||||
:size="size"
|
||||
v-model:value="modelValue"
|
||||
:placeholder="placeholder"
|
||||
:format="format"
|
||||
:valueFormat="format"
|
||||
:allowClear="allowClear"
|
||||
:disabled="originalDisabled"
|
||||
:showTime="format === 'YYYY-MM-DD HH:mm:ss'"
|
||||
:picker="picker"
|
||||
@change="handleChange"
|
||||
/>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import dayjs from 'dayjs';
|
||||
import { ref, watch, computed } from 'vue';
|
||||
import dayjs, {Dayjs} from 'dayjs';
|
||||
import {ref, watch, computed} from 'vue';
|
||||
|
||||
const props = defineProps({
|
||||
const props = defineProps({
|
||||
value: [dayjs, String, Object],
|
||||
size: String,
|
||||
placeholder: String,
|
||||
format: String,
|
||||
allowClear: Boolean,
|
||||
disabled: Boolean,
|
||||
});
|
||||
const modelValue = ref<string>();
|
||||
const emit = defineEmits(['update:value']);
|
||||
originalDisabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
});
|
||||
const modelValue = ref<Dayjs>();
|
||||
const emit = defineEmits(['update:value']);
|
||||
|
||||
const picker = computed(() => {
|
||||
const picker = computed(() => {
|
||||
let time = 'date';
|
||||
switch (props.format) {
|
||||
case 'YYYY-MM':
|
||||
time = 'month';
|
||||
break;
|
||||
case 'YYYY':
|
||||
time = 'year';
|
||||
break;
|
||||
case 'YYYY-MM':
|
||||
time = 'month';
|
||||
break;
|
||||
case 'YYYY':
|
||||
time = 'year';
|
||||
break;
|
||||
}
|
||||
return time;
|
||||
});
|
||||
watch(
|
||||
});
|
||||
watch(
|
||||
() => props.value,
|
||||
(val) => {
|
||||
if (val && typeof val !== 'string') {
|
||||
modelValue.value = val?.format(props.format);
|
||||
} else {
|
||||
modelValue.value = val || '';
|
||||
}
|
||||
modelValue.value = dayjs(val || '');
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
immediate: true,
|
||||
},
|
||||
);
|
||||
const handleChange = (time) => {
|
||||
);
|
||||
const handleChange = (time) => {
|
||||
emit('update:value', time);
|
||||
};
|
||||
};
|
||||
</script>
|
||||
|
||||
@ -99,6 +99,7 @@ componentMap.set('CheckboxGroup', Checkbox.Group);
|
||||
componentMap.set('ApiCascader', ApiCascader);
|
||||
componentMap.set('Slider', Slider);
|
||||
componentMap.set('Rate', Rate);
|
||||
componentMap.set('DeptTree', SelectDepartment);
|
||||
componentMap.set('Dept', SelectDepartmentV2);
|
||||
componentMap.set('User', SelectUserV2);
|
||||
componentMap.set('Info', CommonInfo);
|
||||
|
||||
@ -124,6 +124,7 @@ export type ComponentType =
|
||||
| 'Card'
|
||||
| 'ChildTable'
|
||||
| 'Divider'
|
||||
| 'DeptTree'
|
||||
| 'Dept'
|
||||
| 'User'
|
||||
| 'Info'
|
||||
|
||||
@ -178,7 +178,12 @@
|
||||
let id = await submit(saveRowKey);
|
||||
let rowKey = getRowKey();
|
||||
values[rowKey] = id;
|
||||
values['_id'] = id
|
||||
values['_id'] = id;
|
||||
//重新查一遍
|
||||
let newValues=await SystemFormRef.value.setFormDataFromId(id);
|
||||
if(newValues){
|
||||
values=newValues;
|
||||
}
|
||||
}
|
||||
|
||||
return values;
|
||||
|
||||
Reference in New Issue
Block a user