Compare commits

..

No commits in common. "3ba3a70a9e152c7a5449ccf1a329b361b7b89d5e" and "2ee481d817c19110b9cd5ae893a0e613ecdd9292" have entirely different histories.

5 changed files with 64 additions and 72 deletions

View File

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

View File

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

View File

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

View File

@ -1,62 +1,52 @@
import { message } from "antd";
import dayjs from "dayjs";
import { useState } from "react";
import { getFileUrl } from "../../utils/index.js";
/**
* 下载Blob流文件
*/
export default function useDownloadBlob() {
// loading状态
const [loading, setLoading] = useState(false);
// 下载Blob流文件
const downloadBlob = (url, options = { name: "", type: "", params: {} }) => {
setLoading(true);
const fileUrl = getFileUrl();
return new Promise((resolve, reject) => {
const finalUrl = !url.includes(fileUrl) ? fileUrl + url : url;
Object.entries(options.params).forEach(([key, value]) => {
finalUrl.searchParams.append(key, value);
});
fetch(finalUrl, {
method: "GET",
mode: "cors",
headers: {
"Content-Type": "application/json",
},
})
.then((response) => {
if (!response.ok) {
throw new Error("Network response was not ok");
}
return response.blob();
})
.then((blob) => {
const finalBlob = new Blob([blob], {
type: options.type || "application/vnd.ms-excel",
});
const downloadElement = document.createElement("a");
const href = window.URL.createObjectURL(finalBlob);
downloadElement.style.display = "none";
downloadElement.href = href;
downloadElement.download
= options.name || dayjs().format("YYYY-MM-DD HH:mm:ss");
document.body.appendChild(downloadElement);
downloadElement.click();
document.body.removeChild(downloadElement);
window.URL.revokeObjectURL(href);
resolve({ data: finalBlob });
})
.catch((err) => {
message.error("导出失败");
reject(err);
})
.finally(() => {
setLoading(false);
});
export default function useDownloadBlob(
url,
options = { name: "", type: "", params: {} },
) {
const fileUrl = getFileUrl();
return new Promise((resolve, reject) => {
const finalUrl = !url.includes(fileUrl) ? fileUrl + url : url;
Object.entries(options.params).forEach(([key, value]) => {
finalUrl.searchParams.append(key, value);
});
};
return [loading, downloadBlob];
fetch(finalUrl, {
method: "GET",
mode: "cors",
headers: {
"Content-Type": "application/json",
},
})
.then((response) => {
if (!response.ok) {
throw new Error("Network response was not ok");
}
return response.blob();
})
.then((blob) => {
const finalBlob = new Blob([blob], {
type: options.type || "application/vnd.ms-excel",
});
const downloadElement = document.createElement("a");
const href = window.URL.createObjectURL(finalBlob);
downloadElement.style.display = "none";
downloadElement.href = href;
downloadElement.download
= options.name || dayjs().format("YYYY-MM-DD HH:mm:ss");
document.body.appendChild(downloadElement);
downloadElement.click();
document.body.removeChild(downloadElement);
window.URL.revokeObjectURL(href);
resolve({ data: finalBlob });
})
.catch((err) => {
message.error("导出失败");
reject(err);
});
});
}

View File

@ -1,7 +1,7 @@
{
"name": "zy-react-library",
"private": false,
"version": "1.0.4",
"version": "1.0.3",
"type": "module",
"description": "",
"author": "LiuJiaNan",