Merge remote-tracking branch 'origin/flow' into flow

This commit is contained in:
xlsea
2025-07-19 15:35:55 +08:00
8 changed files with 49 additions and 42 deletions

View File

@ -77,36 +77,34 @@ 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
const modalLogoutCodes = import.meta.env.VITE_SERVICE_MODAL_LOGOUT_CODES?.split(',') || [];
if (modalLogoutCodes.includes(responseCode) && isLogin) {
const isExist = request.state.errMsgStack.includes(response.data.msg);
const isExist = request.state.errMsgStack && request.state.errMsgStack.includes(response.data.msg);
if (isExist) {
return null;
}
if (!window.location.pathname?.startsWith('/login')) {
request.state.errMsgStack = [...(request.state.errMsgStack || []), response.data.msg];
// prevent the user from refreshing the page
window.addEventListener('beforeunload', handleLogout);
window.$dialog?.warning({
title: '系统提示',
content: '登录状态已过期,您可以继续留在该页面,或者重新登录',
positiveText: '重新登录',
negativeText: '取消',
maskClosable: false,
closeOnEsc: false,
onPositiveClick() {
logoutAndCleanup();
},
onClose() {
window.removeEventListener('beforeunload', handleLogout);
request.state.errMsgStack = request.state.errMsgStack.filter(msg => msg !== response.data.msg);
}
});
request.cancelAllRequest();
if (window.location.pathname?.startsWith('/login')) {
logoutAndCleanup();
return null;
}
logoutAndCleanup();
request.state.errMsgStack = [...(request.state.errMsgStack || []), response.data.msg];
// prevent the user from refreshing the page
window.addEventListener('beforeunload', handleLogout);
window.$dialog?.warning({
title: '系统提示',
content: '登录状态已过期,您可以继续留在该页面,或者重新登录',
positiveText: '重新登录',
negativeText: '取消',
maskClosable: false,
closeOnEsc: false,
onPositiveClick() {
logoutAndCleanup();
},
onClose() {
window.removeEventListener('beforeunload', handleLogout);
request.state.errMsgStack = request.state.errMsgStack.filter(msg => msg !== response.data.msg);
}
});
request.cancelAllRequest();
return null;
}

View File

@ -40,7 +40,7 @@ declare namespace Api {
/** leave search params */
type LeaveSearchParams = CommonType.RecordNullable<
Pick<Api.Workflow.Leave, 'leaveDays'> & Api.Common.CommonSearchParams
{ startLeaveDays: number; endLeaveDays: number } & Api.Common.CommonSearchParams
>;
/** leave operate params */

View File

@ -34,13 +34,13 @@ async function search() {
<NCollapseItem :title="$t('common.search')" name="user-search">
<NForm ref="formRef" :model="model" label-placement="left" :label-width="80">
<NGrid responsive="screen" item-responsive>
<NFormItemGi span="24 s:12 m:6" label="IP地址" path="ipaddr" class="pr-24px">
<NFormItemGi span="24 s:12 m:8" label="IP地址" path="ipaddr" class="pr-24px">
<NInput v-model:value="model.ipaddr" placeholder="请输入IP地址" />
</NFormItemGi>
<NFormItemGi span="24 s:12 m:6" label="用户账号" path="userName" class="pr-24px">
<NFormItemGi span="24 s:12 m:8" label="用户账号" path="userName" class="pr-24px">
<NInput v-model:value="model.userName" placeholder="请输入用户账号" />
</NFormItemGi>
<NFormItemGi span="24" class="pr-24px">
<NFormItemGi span="24 s:24 m:8" class="pr-24px">
<NSpace class="w-full" justify="end">
<NButton @click="reset">
<template #icon>

View File

@ -77,7 +77,7 @@ async function search() {
clearable
/>
</NFormItemGi>
<NFormItemGi span="24 s:12 m:12" label="创建时间" path="createTime" class="pr-24px">
<NFormItemGi span="24 s:12 m:6" label="创建时间" path="createTime" class="pr-24px">
<NDatePicker
v-model:formatted-value="dateRangeCreateTime"
type="datetimerange"
@ -86,7 +86,7 @@ async function search() {
@update:formatted-value="onDateRangeCreateTimeUpdate"
/>
</NFormItemGi>
<NFormItemGi span="24 s:12 m:12" class="pr-24px">
<NFormItemGi span="24" class="pr-24px">
<NSpace class="w-full" justify="end">
<NButton @click="reset">
<template #icon>

View File

@ -33,17 +33,16 @@ async function search() {
<NCollapse>
<NCollapseItem :title="$t('common.search')" name="user-search">
<NForm ref="formRef" :model="model" label-placement="left" :label-width="80">
<NGrid responsive="self" item-responsive>
<NGrid responsive="screen" item-responsive>
<NFormItemGi
:show-feedback="false"
span="12"
span="24 s:12 m:12"
:label="$t('page.system.dict.data.label')"
path="dictLabel"
class="pr-24px"
>
<NInput v-model:value="model.dictLabel" :placeholder="$t('page.system.dict.form.dictLabel.required')" />
</NFormItemGi>
<NFormItemGi :show-feedback="false" span="12" class="pr-24px">
<NFormItemGi span="24 s:12 m:12" class="pr-24px">
<NSpace class="w-full" justify="end">
<NButton @click="reset">
<template #icon>

View File

@ -38,7 +38,7 @@ async function search() {
<NForm ref="formRef" :model="model" label-placement="left" :label-width="80">
<NGrid responsive="screen" item-responsive>
<NFormItemGi
span="8"
span="24 s:12 m:8"
:label="$t('page.system.tenantPackage.packageName')"
path="packageName"
class="pr-24px"
@ -48,7 +48,12 @@ async function search() {
:placeholder="$t('page.system.tenantPackage.form.packageName.required')"
/>
</NFormItemGi>
<NFormItemGi span="8" :label="$t('page.system.tenantPackage.status')" path="status" class="pr-24px">
<NFormItemGi
span="24 s:12 m:8"
:label="$t('page.system.tenantPackage.status')"
path="status"
class="pr-24px"
>
<NSelect
v-model:value="model.status"
:placeholder="$t('page.system.tenantPackage.form.status.required')"
@ -56,7 +61,7 @@ async function search() {
clearable
/>
</NFormItemGi>
<NFormItemGi span="8" class="pr-24px">
<NFormItemGi span="24 s:24 m:8" class="pr-24px">
<NSpace class="w-full" justify="end">
<NButton @click="reset">
<template #icon>

View File

@ -43,7 +43,8 @@ const {
pageSize: 10,
// if you want to use the searchParams in Form, you need to define the following properties, and the value is null
// the value can not be undefined, otherwise the property in Form will not be reactive
leaveDays: null,
startLeaveDays: null,
endLeaveDays: null,
params: {}
},
columns: () => [

View File

@ -35,10 +35,14 @@ async function search() {
<NCollapseItem :title="$t('common.search')" name="user-search">
<NForm ref="formRef" :model="model" label-placement="left" :label-width="80">
<NGrid responsive="screen" item-responsive>
<NFormItemGi span="24 s:12 m:6" label="请假天数" path="leaveDays" class="pr-24px">
<NInputNumber v-model:value="model.leaveDays" placeholder="请输入请假天数" />
<NFormItemGi span="24 s:12 m:16" label="请假天数" path="startLeaveDays" class="pr-24px">
<NSpace align="center" class="w-full">
<NInputNumber v-model:value="model.startLeaveDays" placeholder="开始天数" />
<span class="mx-2"></span>
<NInputNumber v-model:value="model.endLeaveDays" placeholder="结束天数" />
</NSpace>
</NFormItemGi>
<NFormItemGi span="24" class="pr-24px">
<NFormItemGi span="24 s:12 m:8" class="pr-24px">
<NSpace class="w-full" justify="end">
<NButton @click="reset">
<template #icon>