mirror of
https://github.com/m-xlsea/ruoyi-plus-soybean.git
synced 2025-09-23 23:39:47 +08:00
Merge branch 'dev' of https://gitee.com/xlsea/ruoyi-plus-soybean into flow
This commit is contained in:
@ -21,27 +21,27 @@ const attrs: SelectProps = useAttrs();
|
|||||||
|
|
||||||
const { loading: postLoading, startLoading: startPostLoading, endLoading: endPostLoading } = useLoading();
|
const { loading: postLoading, startLoading: startPostLoading, endLoading: endPostLoading } = useLoading();
|
||||||
|
|
||||||
/** the enabled role options */
|
/** the enabled post options */
|
||||||
const roleOptions = ref<CommonType.Option<CommonType.IdType>[]>([]);
|
const postOptions = ref<CommonType.Option<CommonType.IdType>[]>([]);
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.deptId,
|
() => props.deptId,
|
||||||
() => {
|
() => {
|
||||||
if (!props.deptId) {
|
if (!props.deptId) {
|
||||||
roleOptions.value = [];
|
postOptions.value = [];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
getRoleOptions();
|
getPostOptions();
|
||||||
},
|
},
|
||||||
{ immediate: true }
|
{ immediate: true }
|
||||||
);
|
);
|
||||||
|
|
||||||
async function getRoleOptions() {
|
async function getPostOptions() {
|
||||||
startPostLoading();
|
startPostLoading();
|
||||||
const { error, data } = await fetchGetPostSelect(props.deptId!);
|
const { error, data } = await fetchGetPostSelect(props.deptId!);
|
||||||
|
|
||||||
if (!error) {
|
if (!error) {
|
||||||
roleOptions.value = data.map(item => ({
|
postOptions.value = data.map(item => ({
|
||||||
label: item.postName,
|
label: item.postName,
|
||||||
value: item.postId
|
value: item.postId
|
||||||
}));
|
}));
|
||||||
@ -54,7 +54,7 @@ async function getRoleOptions() {
|
|||||||
<NSelect
|
<NSelect
|
||||||
v-model:value="value"
|
v-model:value="value"
|
||||||
:loading="postLoading"
|
:loading="postLoading"
|
||||||
:options="roleOptions"
|
:options="postOptions"
|
||||||
v-bind="attrs"
|
v-bind="attrs"
|
||||||
placeholder="请选择岗位"
|
placeholder="请选择岗位"
|
||||||
/>
|
/>
|
||||||
|
@ -77,7 +77,7 @@ export const request = createFlatRequest<App.Service.Response, RequestInstanceSt
|
|||||||
// when the backend response code is in `modalLogoutCodes`, it means the user will be logged out by displaying a modal
|
// when the backend response code is in `modalLogoutCodes`, it means the user will be logged out by displaying a modal
|
||||||
const modalLogoutCodes = import.meta.env.VITE_SERVICE_MODAL_LOGOUT_CODES?.split(',') || [];
|
const modalLogoutCodes = import.meta.env.VITE_SERVICE_MODAL_LOGOUT_CODES?.split(',') || [];
|
||||||
if (modalLogoutCodes.includes(responseCode) && isLogin) {
|
if (modalLogoutCodes.includes(responseCode) && isLogin) {
|
||||||
const isExist = request.state.errMsgStack && request.state.errMsgStack.includes(response.data.msg);
|
const isExist = request.state.errMsgStack?.includes(response.data.msg);
|
||||||
if (isExist) {
|
if (isExist) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -85,23 +85,24 @@ export const request = createFlatRequest<App.Service.Response, RequestInstanceSt
|
|||||||
logoutAndCleanup();
|
logoutAndCleanup();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
request.state.errMsgStack = [...(request.state.errMsgStack || []), response.data.msg];
|
request.state.errMsgStack = [...(request.state.errMsgStack || []), response.data.msg];
|
||||||
// prevent the user from refreshing the page
|
|
||||||
window.addEventListener('beforeunload', handleLogout);
|
|
||||||
|
|
||||||
window.$dialog?.warning({
|
window.$dialog?.warning({
|
||||||
title: '系统提示',
|
title: '系统提示',
|
||||||
content: '登录状态已过期,您可以继续留在该页面,或者重新登录',
|
content: '登录状态已过期,请重新登录',
|
||||||
positiveText: '重新登录',
|
positiveText: '重新登录',
|
||||||
negativeText: '取消',
|
|
||||||
maskClosable: false,
|
maskClosable: false,
|
||||||
closeOnEsc: false,
|
closeOnEsc: false,
|
||||||
|
onAfterEnter() {
|
||||||
|
// prevent the user from refreshing the page
|
||||||
|
window.addEventListener('beforeunload', handleLogout);
|
||||||
|
},
|
||||||
onPositiveClick() {
|
onPositiveClick() {
|
||||||
logoutAndCleanup();
|
logoutAndCleanup();
|
||||||
},
|
},
|
||||||
onClose() {
|
onClose() {
|
||||||
window.removeEventListener('beforeunload', handleLogout);
|
logoutAndCleanup();
|
||||||
request.state.errMsgStack = request.state.errMsgStack.filter(msg => msg !== response.data.msg);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
request.cancelAllRequest();
|
request.cancelAllRequest();
|
||||||
|
2
src/typings/api/system.api.d.ts
vendored
2
src/typings/api/system.api.d.ts
vendored
@ -164,6 +164,8 @@ declare namespace Api {
|
|||||||
postIds: string[];
|
postIds: string[];
|
||||||
/** user role ids */
|
/** user role ids */
|
||||||
roleIds: string[];
|
roleIds: string[];
|
||||||
|
/** roles */
|
||||||
|
roles: Role[];
|
||||||
};
|
};
|
||||||
|
|
||||||
/** user list */
|
/** user list */
|
||||||
|
@ -21,9 +21,12 @@ const dateRangeCreateTime = ref<[string, string] | null>(null);
|
|||||||
const model = defineModel<Api.System.ConfigSearchParams>('model', { required: true });
|
const model = defineModel<Api.System.ConfigSearchParams>('model', { required: true });
|
||||||
|
|
||||||
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
|
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
|
||||||
if (value?.length) {
|
const params = model.value.params!;
|
||||||
model.value.params!.beginTime = value[0];
|
if (value && value.length === 2) {
|
||||||
model.value.params!.endTime = value[1];
|
[params.beginTime, params.endTime] = value;
|
||||||
|
} else {
|
||||||
|
params.beginTime = undefined;
|
||||||
|
params.endTime = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,9 +21,12 @@ const dateRangeCreateTime = ref<[string, string] | null>(null);
|
|||||||
const model = defineModel<Api.System.OssSearchParams>('model', { required: true });
|
const model = defineModel<Api.System.OssSearchParams>('model', { required: true });
|
||||||
|
|
||||||
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
|
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
|
||||||
if (value?.length) {
|
const params = model.value.params!;
|
||||||
model.value.params!.beginCreateTime = value[0];
|
if (value && value.length === 2) {
|
||||||
model.value.params!.endCreateTime = value[1];
|
[params.beginTime, params.endTime] = value;
|
||||||
|
} else {
|
||||||
|
params.beginTime = undefined;
|
||||||
|
params.endTime = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,9 +168,12 @@ const dateRangeCreateTime = ref<[string, string] | null>(null);
|
|||||||
const datePickerRef = ref<InstanceType<typeof NDatePicker>>();
|
const datePickerRef = ref<InstanceType<typeof NDatePicker>>();
|
||||||
|
|
||||||
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
|
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
|
||||||
if (value?.length) {
|
const params = searchParams.params!;
|
||||||
searchParams.params!.beginTime = value[0];
|
if (value && value.length === 2) {
|
||||||
searchParams.params!.endTime = value[1];
|
[params.beginTime, params.endTime] = value;
|
||||||
|
} else {
|
||||||
|
params.beginTime = undefined;
|
||||||
|
params.endTime = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,9 +24,12 @@ const model = defineModel<Api.System.RoleSearchParams>('model', { required: true
|
|||||||
const { options: sysNormalDisableOptions } = useDict('sys_normal_disable', false);
|
const { options: sysNormalDisableOptions } = useDict('sys_normal_disable', false);
|
||||||
|
|
||||||
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
|
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
|
||||||
if (value?.length) {
|
const params = model.value.params!;
|
||||||
model.value.params!.beginTime = `${value[0]} 00:00:00`;
|
if (value && value.length === 2) {
|
||||||
model.value.params!.endTime = `${value[1]} 23:59:59`;
|
[params.beginTime, params.endTime] = value;
|
||||||
|
} else {
|
||||||
|
params.beginTime = undefined;
|
||||||
|
params.endTime = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,6 +48,7 @@ function closeDrawer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function handleSubmit() {
|
async function handleSubmit() {
|
||||||
|
console.log(data.value);
|
||||||
fileList.value.forEach(item => {
|
fileList.value.forEach(item => {
|
||||||
item.status = 'pending';
|
item.status = 'pending';
|
||||||
});
|
});
|
||||||
@ -91,6 +92,7 @@ function handleDownloadTemplate() {
|
|||||||
|
|
||||||
watch(visible, () => {
|
watch(visible, () => {
|
||||||
if (visible.value) {
|
if (visible.value) {
|
||||||
|
data.value.updateSupport = false;
|
||||||
fileList.value = [];
|
fileList.value = [];
|
||||||
success.value = false;
|
success.value = false;
|
||||||
message.value = '';
|
message.value = '';
|
||||||
@ -140,7 +142,7 @@ watch(visible, () => {
|
|||||||
</NUploadDragger>
|
</NUploadDragger>
|
||||||
</NUpload>
|
</NUpload>
|
||||||
<div class="flex-center">
|
<div class="flex-center">
|
||||||
<NCheckbox v-model="data.updateSupport">{{ $t('common.updateExisting') }}</NCheckbox>
|
<NCheckbox v-model:checked="data.updateSupport">{{ $t('common.updateExisting') }}</NCheckbox>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<NAlert v-if="message" :title="$t('common.importResult')" :type="success ? 'success' : 'error'" :bordered="false">
|
<NAlert v-if="message" :title="$t('common.importResult')" :type="success ? 'success' : 'error'" :bordered="false">
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, reactive, watch } from 'vue';
|
import { computed, reactive, ref, watch } from 'vue';
|
||||||
import { useLoading } from '@sa/hooks';
|
import { useLoading } from '@sa/hooks';
|
||||||
import { fetchCreateUser, fetchGetUserInfo, fetchUpdateUser } from '@/service/api/system';
|
import { fetchCreateUser, fetchGetUserInfo, fetchUpdateUser } from '@/service/api/system';
|
||||||
import { useFormRules, useNaiveForm } from '@/hooks/common/form';
|
import { useFormRules, useNaiveForm } from '@/hooks/common/form';
|
||||||
@ -49,6 +49,8 @@ type Model = Api.System.UserOperateParams;
|
|||||||
|
|
||||||
const model: Model = reactive(createDefaultModel());
|
const model: Model = reactive(createDefaultModel());
|
||||||
|
|
||||||
|
const roleOptions = ref<CommonType.Option<CommonType.IdType>[]>([]);
|
||||||
|
|
||||||
function createDefaultModel(): Model {
|
function createDefaultModel(): Model {
|
||||||
return {
|
return {
|
||||||
deptId: null,
|
deptId: null,
|
||||||
@ -82,6 +84,10 @@ async function getUserInfo() {
|
|||||||
if (!error) {
|
if (!error) {
|
||||||
model.roleIds = data.roleIds;
|
model.roleIds = data.roleIds;
|
||||||
model.postIds = data.postIds;
|
model.postIds = data.postIds;
|
||||||
|
roleOptions.value = data.roles.map(role => ({
|
||||||
|
label: role.roleName,
|
||||||
|
value: role.roleId
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
endLoading();
|
endLoading();
|
||||||
}
|
}
|
||||||
@ -209,7 +215,14 @@ watch(visible, () => {
|
|||||||
<PostSelect v-model:value="model.postIds" :dept-id="model.deptId" multiple clearable />
|
<PostSelect v-model:value="model.postIds" :dept-id="model.deptId" multiple clearable />
|
||||||
</NFormItem>
|
</NFormItem>
|
||||||
<NFormItem :label="$t('page.system.user.roleIds')" path="roleIds">
|
<NFormItem :label="$t('page.system.user.roleIds')" path="roleIds">
|
||||||
<RoleSelect v-model:value="model.roleIds" multiple clearable />
|
<NSelect
|
||||||
|
v-model:value="model.roleIds"
|
||||||
|
:loading="loading"
|
||||||
|
:options="roleOptions"
|
||||||
|
multiple
|
||||||
|
clearable
|
||||||
|
placeholder="请选择角色"
|
||||||
|
/>
|
||||||
</NFormItem>
|
</NFormItem>
|
||||||
<NFormItem :label="$t('page.system.user.status')" path="status">
|
<NFormItem :label="$t('page.system.user.status')" path="status">
|
||||||
<DictRadio v-model:value="model.status" dict-code="sys_normal_disable" />
|
<DictRadio v-model:value="model.status" dict-code="sys_normal_disable" />
|
||||||
|
@ -24,9 +24,12 @@ const datePickerRef = ref<InstanceType<typeof NDatePicker>>();
|
|||||||
const model = defineModel<Api.System.UserSearchParams>('model', { required: true });
|
const model = defineModel<Api.System.UserSearchParams>('model', { required: true });
|
||||||
|
|
||||||
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
|
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
|
||||||
if (value?.length) {
|
const params = model.value.params!;
|
||||||
model.value.params!.beginTime = value[0];
|
if (value && value.length === 2) {
|
||||||
model.value.params!.endTime = value[1];
|
[params.beginTime, params.endTime] = value;
|
||||||
|
} else {
|
||||||
|
params.beginTime = undefined;
|
||||||
|
params.endTime = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user