fix(projects): 修复导出查询参数问题

This commit is contained in:
xlsea 2025-06-17 14:01:41 +08:00
parent 031b7f698a
commit ffa47c37fa
12 changed files with 89 additions and 41 deletions

View File

@ -1,6 +1,7 @@
import { errorCodeRecord } from '@/constants/common';
import { localStg } from '@/utils/storage';
import { getServiceBaseURL } from '@/utils/service';
import { transformToURLSearchParams } from '@/utils/common';
export function useDownload() {
const isHttpProxy = import.meta.env.DEV && import.meta.env.VITE_HTTP_PROXY === 'Y';
@ -24,26 +25,20 @@ export function useDownload() {
window.URL.revokeObjectURL(blobURL);
}
function download(url: string, params: any, fileName: string) {
function download(url: string, params: Record<string, any>, fileName: string) {
window.$loading?.startLoading('正在下载数据,请稍候...');
const token = localStg.get('token');
const clientId = import.meta.env.VITE_APP_CLIENT_ID;
const now = Date.now();
const searchParams = new FormData();
if (params) {
Object.keys(params).forEach(key => {
if (params[key] !== null && params[key] !== undefined) {
searchParams.append(key, params[key]);
}
});
}
const searchParams = transformToURLSearchParams(params);
fetch(`${baseURL}${url}?t=${now}`, {
method: 'post',
body: searchParams,
headers: {
Authorization: `Bearer ${token}`,
Clientid: clientId!,
'Content-Type': 'application/octet-stream'
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then(async response => {

View File

@ -163,3 +163,31 @@ export const handleTree = <T extends Record<string, any>>(data: T[], config: Com
return tree;
};
/**
* URLSearchParams
*
* @param obj
*/
export function transformToURLSearchParams(obj: Record<string, any>, excludeKeys: string[] = []) {
const searchParams = new URLSearchParams();
if (!isNotNull(obj)) {
return searchParams;
}
Object.entries(obj).forEach(([key, value]) => {
if (excludeKeys.includes(key)) {
return;
}
if (typeof value === 'object') {
transformToURLSearchParams(value).forEach((v, k) => {
searchParams.append(`${key}[${k}]`, v);
});
return;
}
if (!isNotNull(value)) {
return;
}
searchParams.append(key, value);
});
return searchParams;
}

View File

@ -18,7 +18,6 @@ const { formRef, validate, restoreValidation } = useNaiveForm();
const model = defineModel<Api.Demo.DemoSearchParams>('model', { required: true });
async function reset() {
Object.assign(model.value.params!, {});
await restoreValidation();
emit('reset');
}

View File

@ -25,7 +25,6 @@ const { formRef, validate, restoreValidation } = useNaiveForm();
const model = defineModel<Api.Demo.TreeSearchParams>('model', { required: true });
async function reset() {
Object.assign(model.value.params!, {});
await restoreValidation();
emit('reset');
}

View File

@ -20,6 +20,13 @@ const dateRangeLoginTime = ref<[string, string] | null>(null);
const model = defineModel<Api.Monitor.LoginInforSearchParams>('model', { required: true });
function onDateRangeLoginTimeUpdate(value: [string, string] | null) {
if (value?.length) {
model.value.params!.beginTime = value[0];
model.value.params!.endTime = value[1];
}
}
async function reset() {
dateRangeLoginTime.value = null;
await restoreValidation();
@ -28,10 +35,6 @@ async function reset() {
async function search() {
await validate();
if (dateRangeLoginTime.value?.length) {
model.value.params!.beginTime = dateRangeLoginTime.value[0];
model.value.params!.endTime = dateRangeLoginTime.value[1];
}
emit('search');
}
</script>
@ -62,6 +65,7 @@ async function search() {
type="datetimerange"
value-format="yyyy-MM-dd HH:mm:ss"
clearable
@update:formatted-value="onDateRangeLoginTimeUpdate"
/>
</NFormItemGi>
<NFormItemGi span="24" class="pr-24px">

View File

@ -20,6 +20,13 @@ const dateRangeOperTime = ref<[string, string] | null>(null);
const model = defineModel<Api.Monitor.OperLogSearchParams>('model', { required: true });
function onDateRangeOperTimeUpdate(value: [string, string] | null) {
if (value?.length) {
model.value.params!.beginTime = value[0];
model.value.params!.endTime = value[1];
}
}
async function reset() {
dateRangeOperTime.value = null;
await restoreValidation();
@ -28,10 +35,6 @@ async function reset() {
async function search() {
await validate();
if (dateRangeOperTime.value?.length) {
model.value.params!.beginTime = dateRangeOperTime.value[0];
model.value.params!.endTime = dateRangeOperTime.value[1];
}
emit('search');
}
</script>
@ -73,6 +76,7 @@ async function search() {
type="datetimerange"
value-format="yyyy-MM-dd HH:mm:ss"
clearable
@update:formatted-value="onDateRangeOperTimeUpdate"
/>
</NFormItemGi>
<NFormItemGi span="24 s:12 m:8" class="pr-24px">

View File

@ -20,6 +20,13 @@ const dateRangeCreateTime = ref<[string, string] | null>(null);
const model = defineModel<Api.System.ConfigSearchParams>('model', { required: true });
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
if (value?.length) {
model.value.params!.beginTime = value[0];
model.value.params!.endTime = value[1];
}
}
async function reset() {
dateRangeCreateTime.value = null;
await restoreValidation();
@ -28,10 +35,6 @@ async function reset() {
async function search() {
await validate();
if (dateRangeCreateTime.value?.length) {
model.value.params!.beginTime = dateRangeCreateTime.value[0];
model.value.params!.endTime = dateRangeCreateTime.value[1];
}
emit('search');
}
</script>
@ -80,6 +83,7 @@ async function search() {
type="datetimerange"
value-format="yyyy-MM-dd HH:mm:ss"
clearable
@update:formatted-value="onDateRangeCreateTimeUpdate"
/>
</NFormItemGi>
<NFormItemGi span="24 s:12 m:12" class="pr-24px">

View File

@ -20,6 +20,13 @@ const dateRangeCreateTime = ref<[string, string] | null>(null);
const model = defineModel<Api.System.OssSearchParams>('model', { required: true });
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
if (value?.length) {
model.value.params!.beginCreateTime = value[0];
model.value.params!.endCreateTime = value[1];
}
}
async function reset() {
dateRangeCreateTime.value = null;
await restoreValidation();
@ -28,10 +35,6 @@ async function reset() {
async function search() {
await validate();
if (dateRangeCreateTime.value?.length) {
model.value.params!.beginCreateTime = dateRangeCreateTime.value[0];
model.value.params!.endCreateTime = dateRangeCreateTime.value[1];
}
emit('search');
}
</script>
@ -60,6 +63,7 @@ async function search() {
type="datetimerange"
value-format="yyyy-MM-dd HH:mm:ss"
clearable
@update:formatted-value="onDateRangeCreateTimeUpdate"
/>
</NFormItemGi>
<NFormItemGi span="24 s:12 m:12" class="pr-24px">

View File

@ -23,6 +23,13 @@ const model = defineModel<Api.System.RoleSearchParams>('model', { required: true
const { options: sysNormalDisableOptions } = useDict('sys_normal_disable');
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
if (value?.length) {
model.value.params!.beginTime = `${value[0]} 00:00:00`;
model.value.params!.endTime = `${value[1]} 23:59:59`;
}
}
async function reset() {
dateRangeCreateTime.value = null;
await restoreValidation();
@ -31,10 +38,6 @@ async function reset() {
async function search() {
await validate();
if (dateRangeCreateTime.value?.length) {
model.value.params!.beginTime = `${dateRangeCreateTime.value[0]} 00:00:00`;
model.value.params!.endTime = `${dateRangeCreateTime.value[1]} 23:59:59`;
}
emit('search');
}
</script>
@ -67,6 +70,7 @@ async function search() {
type="daterange"
value-format="yyyy-MM-dd"
clearable
@update:formatted-value="onDateRangeCreateTimeUpdate"
/>
</NFormItemGi>
<NFormItemGi span="24" class="pr-24px">

View File

@ -21,7 +21,6 @@ const model = defineModel<Api.System.TenantPackageSearchParams>('model', { requi
const { options: sysNormalDisableOptions } = useDict('sys_normal_disable');
async function reset() {
Object.assign(model.value.params!, {});
await restoreValidation();
emit('reset');
}

View File

@ -23,6 +23,13 @@ const datePickerRef = ref<InstanceType<typeof NDatePicker>>();
const model = defineModel<Api.System.UserSearchParams>('model', { required: true });
function onDateRangeCreateTimeUpdate(value: [string, string] | null) {
if (value?.length) {
model.value.params!.beginTime = value[0];
model.value.params!.endTime = value[1];
}
}
async function reset() {
dateRangeCreateTime.value = null;
await restoreValidation();
@ -31,10 +38,6 @@ async function reset() {
async function search() {
await validate();
if (dateRangeCreateTime.value?.length) {
model.value.params!.beginTime = dateRangeCreateTime.value[0];
model.value.params!.endTime = dateRangeCreateTime.value[1];
}
emit('search');
}
</script>
@ -82,6 +85,7 @@ async function search() {
type="datetimerange"
value-format="yyyy-MM-dd HH:mm:ss"
clearable
@update:formatted-value="onDateRangeCreateTimeUpdate"
/>
</NFormItemGi>
<NFormItemGi span="24 s:12 m:12" class="pr-24px">

View File

@ -26,6 +26,13 @@ const model = defineModel<Api.Tool.GenTableSearchParams>('model', { required: tr
const dateRange = ref<[string, string]>();
function onDateRangeUpdate(value: [string, string] | null) {
if (value?.length) {
model.value.params!.beginTime = value[0];
model.value.params!.endTime = value[1];
}
}
async function reset() {
await restoreValidation();
emit('reset');
@ -33,10 +40,6 @@ async function reset() {
async function search() {
await validate();
if (dateRange.value?.length) {
model.value.params!.beginTime = dateRange.value[0];
model.value.params!.endTime = dateRange.value[0];
}
emit('search');
}
</script>
@ -62,6 +65,7 @@ async function search() {
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
clearable
@update:formatted-value="onDateRangeUpdate"
/>
</NFormItemGi>
<NFormItemGi :show-feedback="false" span="24" class="pb-6px pr-24px">