优化useDownloadBlob和FormItemsRenderer

master
LiuJiaNan 2025-10-28 08:48:18 +08:00
parent af0c6462bf
commit 3ba3a70a9e
4 changed files with 71 additions and 63 deletions

View File

@ -15,12 +15,6 @@ export type FormItemRenderType
* *
*/ */
export interface OptionItem { export interface OptionItem {
/** 值字段 */
value?: any;
/** 标签字段 */
label?: string;
/** 字典ID */
dictionariesId?: any;
/** ID字段 */ /** ID字段 */
id?: any; id?: any;
/** 名称字段 */ /** 名称字段 */
@ -32,9 +26,9 @@ export interface OptionItem {
* *
*/ */
export interface itemsFieldConfig { export interface itemsFieldConfig {
/** 值字段的键名,默认为 'value' */ /** 值字段的键名,默认为 'id' */
valueKey?: string; valueKey?: string;
/** 标签字段的键名,默认为 'label' */ /** 标签字段的键名,默认为 'name' */
labelKey?: string; labelKey?: string;
} }

View File

@ -75,8 +75,8 @@ const FormItemsRenderer = ({
// 获取items里的value和label字段key // 获取items里的value和label字段key
const getItemsFieldKey = (option) => { const getItemsFieldKey = (option) => {
return { return {
valueKey: option?.itemsField?.valueKey || "value", valueKey: option?.itemsField?.valueKey || "id",
labelKey: option?.itemsField?.labelKey || "label", labelKey: option?.itemsField?.labelKey || "name",
}; };
}; };
@ -144,8 +144,8 @@ const FormItemsRenderer = ({
return ( return (
<Select placeholder={placeholder} {...componentProps}> <Select placeholder={placeholder} {...componentProps}>
{(option.items || []).map((item) => { {(option.items || []).map((item) => {
const value = item[itemsFieldKey.valueKey] ?? item.dictionariesId ?? item.id; const value = item[itemsFieldKey.valueKey];
const label = item[itemsFieldKey.labelKey] ?? item.name; const label = item[itemsFieldKey.labelKey];
return ( return (
<Select.Option key={value} value={value}> <Select.Option key={value} value={value}>
{label} {label}
@ -159,8 +159,8 @@ const FormItemsRenderer = ({
return ( return (
<Radio.Group {...componentProps}> <Radio.Group {...componentProps}>
{(option.items || []).map((item) => { {(option.items || []).map((item) => {
const value = item[itemsFieldKey.valueKey] ?? item.dictionariesId ?? item.id; const value = item[itemsFieldKey.valueKey];
const label = item[itemsFieldKey.labelKey] ?? item.name; const label = item[itemsFieldKey.labelKey];
return ( return (
<Radio key={value} value={value}> <Radio key={value} value={value}>
{label} {label}
@ -174,8 +174,8 @@ const FormItemsRenderer = ({
return ( return (
<Checkbox.Group {...componentProps}> <Checkbox.Group {...componentProps}>
{(option.items || []).map((item) => { {(option.items || []).map((item) => {
const value = item[itemsFieldKey.valueKey] ?? item.dictionariesId ?? item.id; const value = item[itemsFieldKey.valueKey];
const label = item[itemsFieldKey.labelKey] ?? item.name; const label = item[itemsFieldKey.labelKey];
return ( return (
<Checkbox key={value} value={value}> <Checkbox key={value} value={value}>
{label} {label}

View File

@ -7,10 +7,14 @@ interface UseDownloadBlobOptions {
params?: Record<string, any>; params?: Record<string, any>;
} }
export interface downloadBlobOptions {
url: string;
options?: UseDownloadBlobOptions;
}
export type DeleteFileFunction = (options: downloadBlobOptions) => Promise<any>;
/** /**
* Blob * Blob
*/ */
export default function useDownloadBlob( export default function useDownloadBlob(): [boolean, DeleteFileFunction];
url: string,
options?: UseDownloadBlobOptions
): Promise<any>;

View File

@ -1,14 +1,18 @@
import { message } from "antd"; import { message } from "antd";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { useState } from "react";
import { getFileUrl } from "../../utils/index.js"; import { getFileUrl } from "../../utils/index.js";
/** /**
* 下载Blob流文件 * 下载Blob流文件
*/ */
export default function useDownloadBlob( export default function useDownloadBlob() {
url, // loading状态
options = { name: "", type: "", params: {} }, const [loading, setLoading] = useState(false);
) {
// 下载Blob流文件
const downloadBlob = (url, options = { name: "", type: "", params: {} }) => {
setLoading(true);
const fileUrl = getFileUrl(); const fileUrl = getFileUrl();
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const finalUrl = !url.includes(fileUrl) ? fileUrl + url : url; const finalUrl = !url.includes(fileUrl) ? fileUrl + url : url;
@ -47,6 +51,12 @@ export default function useDownloadBlob(
.catch((err) => { .catch((err) => {
message.error("导出失败"); message.error("导出失败");
reject(err); reject(err);
})
.finally(() => {
setLoading(false);
}); });
}); });
};
return [loading, downloadBlob];
} }