) : (
- description
+ <>
+ {imageBlock}
+ {titleBlock}
+ {descriptionBlock}
+ >
)}
{actions.length ? (
-
+
{actions.map((action, index) => {
const { text, ...rest } = action
return (
diff --git a/src/packages/empty/index.taro.ts b/src/packages/empty/index.taro.ts
index 63e6f3f254..74b0cdd13a 100644
--- a/src/packages/empty/index.taro.ts
+++ b/src/packages/empty/index.taro.ts
@@ -1,5 +1,10 @@
import { Empty } from './empty.taro'
-export type { EmptyProps } from './empty'
+export type {
+ EmptyAction,
+ EmptyProps,
+ EmptySize,
+ EmptyStatus,
+} from './empty.taro'
export default Empty
diff --git a/src/packages/empty/index.ts b/src/packages/empty/index.ts
index b6e6961588..bba4fddb8d 100644
--- a/src/packages/empty/index.ts
+++ b/src/packages/empty/index.ts
@@ -1,5 +1,5 @@
import { Empty } from './empty'
-export type { EmptyProps } from './empty'
+export type { EmptyAction, EmptyProps, EmptySize, EmptyStatus } from './empty'
export default Empty
diff --git a/src/sites/sites-react/doc/docs/react/migrate-from-v3.en-US.md b/src/sites/sites-react/doc/docs/react/migrate-from-v3.en-US.md
index 74f933d091..47e8cd2b8e 100644
--- a/src/sites/sites-react/doc/docs/react/migrate-from-v3.en-US.md
+++ b/src/sites/sites-react/doc/docs/react/migrate-from-v3.en-US.md
@@ -48,3 +48,33 @@ npm install @nutui/nutui-react-taro
- **Dark Mode Correction**:
- Resolved incorrect color variables/mappings under Dark Mode (`theme-dark`) for Checkbox background colors and borders.
+
+### Empty
+
+> **No v3 compatibility in v4**: no prop aliases, no runtime fallbacks, and no `EmptyState` type alias. Migrate manually using the tables below.
+
+- **`size` Enum Breaking Change**:
+ - Removed `base` / `small`. Aligned with JD APP V11.0 empty-state spec: `full` / `half` / `partial`.
+ - Default changed from `base` to `half`.
+ - Recommended migration:
+ - `size="base"` (v3 default, 160px image) → use `size="full"` for full-page states, or `size="partial"` for embedded partial areas.
+ - `size="small"` (v3, 120px image) → `size="half"` (half-screen, 80px image).
+- **Visual Spec Updates**:
+ - **`full`**: 160px image, title `$font-size-md` / line height 24px / `#11141A`, description `$font-size-base` / line height 22px / `#8D9199`, 160px top spacing.
+ - **`half`**: 80px image, title `$font-size-s` / line height 22px, description `$font-size-m` / line height 20px.
+ - **`partial`**: 32px image in horizontal layout, text `$font-size-m` / line height 32px, padding `0 16px`, 8px gap between image and text.
+- **CSS Class Name Breaking Changes**:
+ - Size modifiers: `.nut-empty-base` / `.nut-empty-small` → `.nut-empty--full` / `.nut-empty--half` / `.nut-empty--partial`.
+ - Image wrapper: `.nut-empty-base` / `.nut-empty-small` → `.nut-empty-image`.
+ - Actions: `.nut-empty-actions-base` / `.nut-empty-actions-small` → `.nut-empty-actions`.
+- **Theme Variable Updates**:
+ - Added `--nutui-empty-title-color`, `--nutui-empty-description-color`, and per-size variables (e.g. `--nutui-empty-full-image-size`).
+ - Font sizes default to `$font-size-*` theme tokens; line heights use `$line-height-*` when available (e.g. 24px, 20px), otherwise design-spec px values (e.g. 22px, 32px).
+ - Legacy `--nutui-empty-image-size`, `--nutui-empty-image-small-size`, and `--nutui-empty-background-color` have been removed; use per-size variables instead. The component itself is transparent; use an outer container (e.g. `Cell`) for display backgrounds.
+- **`status` Enum Breaking Change**:
+ - 8 built-in scenarios: `network` / `comment` / `search` / `shop` / `address` / `order` / `favor` / `cart`.
+ - Removed `empty` and `error`; default changed from `empty` to `network`.
+ - Recommended v3 → v4 mapping (code changes required; no automatic conversion):
+ - `status="empty"` → `status="search"` (generic empty) or another enum above
+ - `status="error"` → `status="network"` or a custom `image`
+ - Images load from CDN URLs at runtime; see `src/types/spec/empty/base.ts` for the mapping.
diff --git a/src/sites/sites-react/doc/docs/react/migrate-from-v3.md b/src/sites/sites-react/doc/docs/react/migrate-from-v3.md
index e03d06d1b8..c942fe3ad1 100644
--- a/src/sites/sites-react/doc/docs/react/migrate-from-v3.md
+++ b/src/sites/sites-react/doc/docs/react/migrate-from-v3.md
@@ -48,3 +48,33 @@ npm install @nutui/nutui-react-taro
- **暗黑模式修复与设计稿适配**:
- 修复并适配了多选框在暗黑模式(`theme-dark`)下的背景色、勾选框边框色等异常色彩映射问题。
+
+### Empty (反馈类)
+
+> **v4 不提供 v3 兼容**:无 Props 别名、无运行时 fallback、无 `EmptyState` 类型别名。请按下表手动迁移。
+
+- **`size` 枚举值变更(不兼容)**:
+ - 移除 `base` / `small`,对齐 JD APP V11.0 缺省状态规范,改为 `full` / `half` / `partial` 三种尺寸。
+ - 默认值由 `base` 调整为 `half`。
+ - 推荐迁移映射:
+ - `size="base"`(v3 默认,插图 160px)→ 整页场景用 `size="full"`,局部内嵌场景用 `size="partial"`。
+ - `size="small"`(v3 插图 120px)→ `size="half"`(半屏型,插图 80px)。
+- **视觉规格对齐设计稿**:
+ - **全屏型 `full`**:插图 160px,标题 `$font-size-md` / 行高 24px / `#11141A`,描述 `$font-size-base` / 行高 22px / `#8D9199`,顶部间距 160px。
+ - **半屏型 `half`**:插图 80px,标题 `$font-size-s` / 行高 22px,描述 `$font-size-m` / 行高 20px。
+ - **局部型 `partial`**:插图 32px 横排,文案 `$font-size-m` / 行高 32px,容器 `padding: 0 16px`,图与文案间距 8px。
+- **CSS 类名变更(不兼容)**:
+ - 尺寸修饰类:`.nut-empty-base` / `.nut-empty-small` → `.nut-empty--full` / `.nut-empty--half` / `.nut-empty--partial`。
+ - 插图容器:`.nut-empty-base` / `.nut-empty-small` → `.nut-empty-image`。
+ - 操作区:`.nut-empty-actions-base` / `.nut-empty-actions-small` → `.nut-empty-actions`。
+- **主题变量调整**:
+ - 新增 `--nutui-empty-title-color`、`--nutui-empty-description-color` 及分尺寸变量(如 `--nutui-empty-full-image-size`)。
+ - 字号默认引用 `$font-size-*` 主题 token;行高有对应 token 时引用 `$line-height-*`(如 24px、20px),其余按设计稿 px 值(如 22px、32px)。
+ - 旧变量 `--nutui-empty-image-size`、`--nutui-empty-image-small-size`、`--nutui-empty-background-color` 已移除,请改用对应尺寸变量;组件本身为透明背景,展示区域背景由外层容器(如 `Cell`)控制。
+- **`status` 枚举变更(不兼容)**:
+ - 内置 8 种业务场景:`network` / `comment` / `search` / `shop` / `address` / `order` / `favor` / `cart`。
+ - 移除 `empty`、`error`;默认值由 `empty` 调整为 `network`。
+ - v3 → v4 推荐映射(需改代码,组件不会自动转换):
+ - `status="empty"` → `status="search"`(通用空态)或按场景选用上表枚举
+ - `status="error"` → `status="network"` 或通过 `image` 传入自定义插图
+ - 插图通过 CDN URL 运行时加载,映射表见 `src/types/spec/empty/base.ts`。
diff --git a/src/sites/sites-react/doc/docs/taro/migrate-from-v3.en-US.md b/src/sites/sites-react/doc/docs/taro/migrate-from-v3.en-US.md
index 74f933d091..47e8cd2b8e 100644
--- a/src/sites/sites-react/doc/docs/taro/migrate-from-v3.en-US.md
+++ b/src/sites/sites-react/doc/docs/taro/migrate-from-v3.en-US.md
@@ -48,3 +48,33 @@ npm install @nutui/nutui-react-taro
- **Dark Mode Correction**:
- Resolved incorrect color variables/mappings under Dark Mode (`theme-dark`) for Checkbox background colors and borders.
+
+### Empty
+
+> **No v3 compatibility in v4**: no prop aliases, no runtime fallbacks, and no `EmptyState` type alias. Migrate manually using the tables below.
+
+- **`size` Enum Breaking Change**:
+ - Removed `base` / `small`. Aligned with JD APP V11.0 empty-state spec: `full` / `half` / `partial`.
+ - Default changed from `base` to `half`.
+ - Recommended migration:
+ - `size="base"` (v3 default, 160px image) → use `size="full"` for full-page states, or `size="partial"` for embedded partial areas.
+ - `size="small"` (v3, 120px image) → `size="half"` (half-screen, 80px image).
+- **Visual Spec Updates**:
+ - **`full`**: 160px image, title `$font-size-md` / line height 24px / `#11141A`, description `$font-size-base` / line height 22px / `#8D9199`, 160px top spacing.
+ - **`half`**: 80px image, title `$font-size-s` / line height 22px, description `$font-size-m` / line height 20px.
+ - **`partial`**: 32px image in horizontal layout, text `$font-size-m` / line height 32px, padding `0 16px`, 8px gap between image and text.
+- **CSS Class Name Breaking Changes**:
+ - Size modifiers: `.nut-empty-base` / `.nut-empty-small` → `.nut-empty--full` / `.nut-empty--half` / `.nut-empty--partial`.
+ - Image wrapper: `.nut-empty-base` / `.nut-empty-small` → `.nut-empty-image`.
+ - Actions: `.nut-empty-actions-base` / `.nut-empty-actions-small` → `.nut-empty-actions`.
+- **Theme Variable Updates**:
+ - Added `--nutui-empty-title-color`, `--nutui-empty-description-color`, and per-size variables (e.g. `--nutui-empty-full-image-size`).
+ - Font sizes default to `$font-size-*` theme tokens; line heights use `$line-height-*` when available (e.g. 24px, 20px), otherwise design-spec px values (e.g. 22px, 32px).
+ - Legacy `--nutui-empty-image-size`, `--nutui-empty-image-small-size`, and `--nutui-empty-background-color` have been removed; use per-size variables instead. The component itself is transparent; use an outer container (e.g. `Cell`) for display backgrounds.
+- **`status` Enum Breaking Change**:
+ - 8 built-in scenarios: `network` / `comment` / `search` / `shop` / `address` / `order` / `favor` / `cart`.
+ - Removed `empty` and `error`; default changed from `empty` to `network`.
+ - Recommended v3 → v4 mapping (code changes required; no automatic conversion):
+ - `status="empty"` → `status="search"` (generic empty) or another enum above
+ - `status="error"` → `status="network"` or a custom `image`
+ - Images load from CDN URLs at runtime; see `src/types/spec/empty/base.ts` for the mapping.
diff --git a/src/sites/sites-react/doc/docs/taro/migrate-from-v3.md b/src/sites/sites-react/doc/docs/taro/migrate-from-v3.md
index e03d06d1b8..c942fe3ad1 100644
--- a/src/sites/sites-react/doc/docs/taro/migrate-from-v3.md
+++ b/src/sites/sites-react/doc/docs/taro/migrate-from-v3.md
@@ -48,3 +48,33 @@ npm install @nutui/nutui-react-taro
- **暗黑模式修复与设计稿适配**:
- 修复并适配了多选框在暗黑模式(`theme-dark`)下的背景色、勾选框边框色等异常色彩映射问题。
+
+### Empty (反馈类)
+
+> **v4 不提供 v3 兼容**:无 Props 别名、无运行时 fallback、无 `EmptyState` 类型别名。请按下表手动迁移。
+
+- **`size` 枚举值变更(不兼容)**:
+ - 移除 `base` / `small`,对齐 JD APP V11.0 缺省状态规范,改为 `full` / `half` / `partial` 三种尺寸。
+ - 默认值由 `base` 调整为 `half`。
+ - 推荐迁移映射:
+ - `size="base"`(v3 默认,插图 160px)→ 整页场景用 `size="full"`,局部内嵌场景用 `size="partial"`。
+ - `size="small"`(v3 插图 120px)→ `size="half"`(半屏型,插图 80px)。
+- **视觉规格对齐设计稿**:
+ - **全屏型 `full`**:插图 160px,标题 `$font-size-md` / 行高 24px / `#11141A`,描述 `$font-size-base` / 行高 22px / `#8D9199`,顶部间距 160px。
+ - **半屏型 `half`**:插图 80px,标题 `$font-size-s` / 行高 22px,描述 `$font-size-m` / 行高 20px。
+ - **局部型 `partial`**:插图 32px 横排,文案 `$font-size-m` / 行高 32px,容器 `padding: 0 16px`,图与文案间距 8px。
+- **CSS 类名变更(不兼容)**:
+ - 尺寸修饰类:`.nut-empty-base` / `.nut-empty-small` → `.nut-empty--full` / `.nut-empty--half` / `.nut-empty--partial`。
+ - 插图容器:`.nut-empty-base` / `.nut-empty-small` → `.nut-empty-image`。
+ - 操作区:`.nut-empty-actions-base` / `.nut-empty-actions-small` → `.nut-empty-actions`。
+- **主题变量调整**:
+ - 新增 `--nutui-empty-title-color`、`--nutui-empty-description-color` 及分尺寸变量(如 `--nutui-empty-full-image-size`)。
+ - 字号默认引用 `$font-size-*` 主题 token;行高有对应 token 时引用 `$line-height-*`(如 24px、20px),其余按设计稿 px 值(如 22px、32px)。
+ - 旧变量 `--nutui-empty-image-size`、`--nutui-empty-image-small-size`、`--nutui-empty-background-color` 已移除,请改用对应尺寸变量;组件本身为透明背景,展示区域背景由外层容器(如 `Cell`)控制。
+- **`status` 枚举变更(不兼容)**:
+ - 内置 8 种业务场景:`network` / `comment` / `search` / `shop` / `address` / `order` / `favor` / `cart`。
+ - 移除 `empty`、`error`;默认值由 `empty` 调整为 `network`。
+ - v3 → v4 推荐映射(需改代码,组件不会自动转换):
+ - `status="empty"` → `status="search"`(通用空态)或按场景选用上表枚举
+ - `status="error"` → `status="network"` 或通过 `image` 传入自定义插图
+ - 插图通过 CDN URL 运行时加载,映射表见 `src/types/spec/empty/base.ts`。
diff --git a/src/styles/variables-daojia.scss b/src/styles/variables-daojia.scss
index 61390c644c..982b6bada4 100644
--- a/src/styles/variables-daojia.scss
+++ b/src/styles/variables-daojia.scss
@@ -1409,18 +1409,30 @@ $segmented-icon-margin-right: var(--nutui-segmented-icon-margin-right,
$spacing-xxxs) !default;
// empty(✅)
-$empty-padding: var(--nutui-empty-padding, 32px 40px) !default;
-$empty-image-size: var(--nutui-empty-image-size, 160px) !default;
-$empty-image-small-size: var(--nutui-empty-image-small-size, 120px) !default;
-$empty-title-margin-top: var(--nutui-empty-title-margin-top, 0px) !default;
-$empty-background-color: var(--nutui-empty-background-color,
- $color-background-overlay) !default;
-$empty-title-margin-bottom: var(--nutui-empty-title-margin-bottom,
- 12px) !default;
-$empty-title-line-height: var(--nutui-empty-title-line-height,
- $font-size-l) !default;
-$empty-description-line-height: var(--nutui-empty-description-line-height,
- 1) !default;
+$empty-padding: var(--nutui-empty-padding, 20px) !default;
+$empty-title-color: var(--nutui-empty-title-color, $color-title) !default;
+$empty-description-color: var(--nutui-empty-description-color, $color-text-help) !default;
+$empty-full-padding-top: var(--nutui-empty-full-padding-top, 160px) !default;
+$empty-full-image-size: var(--nutui-empty-full-image-size, 160px) !default;
+$empty-full-title-font-size: var(--nutui-empty-full-title-font-size, $font-size-md) !default;
+$empty-full-title-line-height: var(--nutui-empty-full-title-line-height, $line-height-xxl) !default;
+$empty-full-description-font-size: var(--nutui-empty-full-description-font-size, $font-size-base) !default;
+$empty-full-description-line-height: var(
+ --nutui-empty-full-description-line-height,
+ 22px
+) !default;
+$empty-full-actions-margin-top: var(--nutui-empty-full-actions-margin-top, 8px) !default;
+$empty-half-image-size: var(--nutui-empty-half-image-size, 80px) !default;
+$empty-half-title-font-size: var(--nutui-empty-half-title-font-size, $font-size-s) !default;
+$empty-half-title-line-height: var(--nutui-empty-half-title-line-height, 22px) !default;
+$empty-half-description-font-size: var(--nutui-empty-half-description-font-size, $font-size-m) !default;
+$empty-half-description-line-height: var(--nutui-empty-half-description-line-height, $line-height-2xl) !default;
+$empty-half-actions-margin-top: var(--nutui-empty-half-actions-margin-top, 8px) !default;
+$empty-partial-padding: var(--nutui-empty-partial-padding, 0px 16px) !default;
+$empty-partial-image-size: var(--nutui-empty-partial-image-size, 32px) !default;
+$empty-partial-content-gap: var(--nutui-empty-partial-content-gap, 8px) !default;
+$empty-partial-description-font-size: var(--nutui-empty-partial-description-font-size, $font-size-m) !default;
+$empty-partial-description-line-height: var(--nutui-empty-partial-description-line-height, 32px) !default;
// cascader(✅)
$cascader-font-size: var(--nutui-cascader-font-size, $font-size-base) !default;
diff --git a/src/styles/variables-jmapp.scss b/src/styles/variables-jmapp.scss
index 4b505b8824..699c9d6666 100644
--- a/src/styles/variables-jmapp.scss
+++ b/src/styles/variables-jmapp.scss
@@ -2364,26 +2364,50 @@ $segmented-icon-margin-right: var(
// empty(✅)
-$empty-padding: var(--nutui-empty-padding, 32px 40px) !default;
-$empty-image-size: var(--nutui-empty-image-size, 160px) !default;
-$empty-image-small-size: var(--nutui-empty-image-small-size, 120px) !default;
-$empty-title-margin-top: var(--nutui-empty-title-margin-top, 0px) !default;
-$empty-background-color: var(--nutui-empty-background-color, #fff) !default;
-$empty-title-margin-bottom: var(
- --nutui-empty-title-margin-bottom,
- 8px
-) !default;
-$empty-title-line-height: var(
- --nutui-empty-title-line-height,
+$empty-padding: var(--nutui-empty-padding, 20px) !default;
+$empty-title-color: var(--nutui-empty-title-color, $color-title) !default;
+$empty-description-color: var(--nutui-empty-description-color, $color-text-help) !default;
+
+// 全屏型
+$empty-full-padding-top: var(--nutui-empty-full-padding-top, 160px) !default;
+$empty-full-image-size: var(--nutui-empty-full-image-size, 160px) !default;
+$empty-full-title-font-size: var(--nutui-empty-full-title-font-size, $font-size-md) !default;
+$empty-full-title-line-height: var(--nutui-empty-full-title-line-height, $line-height-xxl) !default;
+$empty-full-description-font-size: var(
+ --nutui-empty-full-description-font-size,
$font-size-base
) !default;
-$empty-description-margin-top: var(
- --nutui-empty-description-margin-top,
- 0px
+$empty-full-description-line-height: var(
+ --nutui-empty-full-description-line-height,
+ 22px
+) !default;
+$empty-full-actions-margin-top: var(--nutui-empty-full-actions-margin-top, 8px) !default;
+
+// 半屏型
+$empty-half-image-size: var(--nutui-empty-half-image-size, 80px) !default;
+$empty-half-title-font-size: var(--nutui-empty-half-title-font-size, $font-size-s) !default;
+$empty-half-title-line-height: var(--nutui-empty-half-title-line-height, 22px) !default;
+$empty-half-description-font-size: var(
+ --nutui-empty-half-description-font-size,
+ $font-size-m
+) !default;
+$empty-half-description-line-height: var(
+ --nutui-empty-half-description-line-height,
+ $line-height-2xl
) !default;
-$empty-description-line-height: var(
- --nutui-empty-description-line-height,
- 1.2
+$empty-half-actions-margin-top: var(--nutui-empty-half-actions-margin-top, 8px) !default;
+
+// 局部型
+$empty-partial-padding: var(--nutui-empty-partial-padding, 0px 16px) !default;
+$empty-partial-image-size: var(--nutui-empty-partial-image-size, 32px) !default;
+$empty-partial-content-gap: var(--nutui-empty-partial-content-gap, 8px) !default;
+$empty-partial-description-font-size: var(
+ --nutui-empty-partial-description-font-size,
+ $font-size-m
+) !default;
+$empty-partial-description-line-height: var(
+ --nutui-empty-partial-description-line-height,
+ 32px
) !default;
// cascader(✅)
diff --git a/src/styles/variables-jrkf.scss b/src/styles/variables-jrkf.scss
index c82688e2f5..a39df2f708 100644
--- a/src/styles/variables-jrkf.scss
+++ b/src/styles/variables-jrkf.scss
@@ -2439,27 +2439,30 @@ $searchbar-input-text-align: var(
// empty(✅)
-$empty-padding: var(--nutui-empty-padding, 32px 40px) !default;
-$empty-image-size: var(--nutui-empty-image-size, 160px) !default;
-$empty-image-small-size: var(--nutui-empty-image-small-size, 120px) !default;
-$empty-title-margin-top: var(--nutui-empty-title-margin-top, 0px) !default;
-$empty-background-color: var(--nutui-empty-background-color, #fff) !default;
-$empty-title-margin-bottom: var(
- --nutui-empty-title-margin-bottom,
- 8px
-) !default;
-$empty-title-line-height: var(
- --nutui-empty-title-line-height,
- $font-size-base
-) !default;
-$empty-description-margin-top: var(
- --nutui-empty-description-margin-top,
- 0px
-) !default;
-$empty-description-line-height: var(
- --nutui-empty-description-line-height,
- 1.2
+$empty-padding: var(--nutui-empty-padding, 20px) !default;
+$empty-title-color: var(--nutui-empty-title-color, $color-title) !default;
+$empty-description-color: var(--nutui-empty-description-color, $color-text-help) !default;
+$empty-full-padding-top: var(--nutui-empty-full-padding-top, 160px) !default;
+$empty-full-image-size: var(--nutui-empty-full-image-size, 160px) !default;
+$empty-full-title-font-size: var(--nutui-empty-full-title-font-size, $font-size-md) !default;
+$empty-full-title-line-height: var(--nutui-empty-full-title-line-height, $line-height-xxl) !default;
+$empty-full-description-font-size: var(--nutui-empty-full-description-font-size, $font-size-base) !default;
+$empty-full-description-line-height: var(
+ --nutui-empty-full-description-line-height,
+ 22px
) !default;
+$empty-full-actions-margin-top: var(--nutui-empty-full-actions-margin-top, 8px) !default;
+$empty-half-image-size: var(--nutui-empty-half-image-size, 80px) !default;
+$empty-half-title-font-size: var(--nutui-empty-half-title-font-size, $font-size-s) !default;
+$empty-half-title-line-height: var(--nutui-empty-half-title-line-height, 22px) !default;
+$empty-half-description-font-size: var(--nutui-empty-half-description-font-size, $font-size-m) !default;
+$empty-half-description-line-height: var(--nutui-empty-half-description-line-height, $line-height-2xl) !default;
+$empty-half-actions-margin-top: var(--nutui-empty-half-actions-margin-top, 8px) !default;
+$empty-partial-padding: var(--nutui-empty-partial-padding, 0px 16px) !default;
+$empty-partial-image-size: var(--nutui-empty-partial-image-size, 32px) !default;
+$empty-partial-content-gap: var(--nutui-empty-partial-content-gap, 8px) !default;
+$empty-partial-description-font-size: var(--nutui-empty-partial-description-font-size, $font-size-m) !default;
+$empty-partial-description-line-height: var(--nutui-empty-partial-description-line-height, 32px) !default;
// cascader(✅)
$cascader-font-size: var(--nutui-cascader-font-size, $font-size-base) !default;
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index 84851b9e7e..fecc48c7b4 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -1496,7 +1496,7 @@ $steps-horizontal-item-line-padding: var(
) !default;
$steps-horizontal-item-special-padding-right: var(
--nutui-steps-horizontal-item-special-padding-right,
- scale-px(22px)
+ scale-font-px(22px)
) !default;
$steps-horizontal-item-special-3-padding-right: var(
--nutui-steps-horizontal-item-special-3-padding-right,
@@ -2277,26 +2277,33 @@ $segmented-icon-margin-right: var(
) !default;
// empty(✅)
-$empty-padding: var(--nutui-empty-padding, scale-px(32px) scale-px(40px)) !default;
-$empty-image-size: var(--nutui-empty-image-size, scale-px(160px)) !default;
-$empty-image-small-size: var(--nutui-empty-image-small-size, scale-px(120px)) !default;
-$empty-title-margin-top: var(--nutui-empty-title-margin-top, 0px) !default;
-$empty-background-color: var(
- --nutui-empty-background-color,
- $color-background-overlay
-) !default;
-$empty-title-margin-bottom: var(
- --nutui-empty-title-margin-bottom,
- scale-px(12px)
-) !default;
-$empty-title-line-height: var(
- --nutui-empty-title-line-height,
- $font-size-l
-) !default;
-$empty-description-line-height: var(
- --nutui-empty-description-line-height,
- 1
-) !default;
+$empty-padding: var(--nutui-empty-padding, scale-px(20px) ) !default;
+$empty-title-color: var(--nutui-empty-title-color, $color-title) !default;
+$empty-description-color: var(--nutui-empty-description-color, $color-text-help) !default;
+
+// 全屏型
+$empty-full-padding-top: var(--nutui-empty-full-padding-top, scale-px(160px)) !default;
+$empty-full-image-size: var(--nutui-empty-full-image-size, scale-px(160px)) !default;
+$empty-full-title-font-size: var(--nutui-empty-full-title-font-size, $font-size-md) !default;
+$empty-full-title-line-height: var(--nutui-empty-full-title-line-height, $line-height-xxl) !default;
+$empty-full-description-font-size: var(--nutui-empty-full-description-font-size, $font-size-base) !default;
+$empty-full-description-line-height: var(--nutui-empty-full-description-line-height, scale-font-px(22px)) !default;
+$empty-full-actions-margin-top: var(--nutui-empty-full-actions-margin-top, scale-px(8px)) !default;
+
+// 半屏型
+$empty-half-image-size: var(--nutui-empty-half-image-size, scale-px(80px)) !default;
+$empty-half-title-font-size: var(--nutui-empty-half-title-font-size, $font-size-s) !default;
+$empty-half-title-line-height: var(--nutui-empty-half-title-line-height, scale-font-px(22px)) !default;
+$empty-half-description-font-size: var(--nutui-empty-half-description-font-size, $font-size-m) !default;
+$empty-half-description-line-height: var(--nutui-empty-half-description-line-height, $line-height-2xl) !default;
+$empty-half-actions-margin-top: var(--nutui-empty-half-actions-margin-top, scale-px(8px)) !default;
+
+// 局部型
+$empty-partial-padding: var(--nutui-empty-partial-padding, scale-px(0px) scale-px(16px)) !default;
+$empty-partial-image-size: var(--nutui-empty-partial-image-size, scale-px(32px)) !default;
+$empty-partial-content-gap: var(--nutui-empty-partial-content-gap, scale-px(8px)) !default;
+$empty-partial-description-font-size: var(--nutui-empty-partial-description-font-size, $font-size-m) !default;
+$empty-partial-description-line-height: var(--nutui-empty-partial-description-line-height, scale-font-px(32px)) !default;
// cascader(✅)
$cascader-font-size: var(--nutui-cascader-font-size, $font-size-base) !default;
diff --git a/src/types/spec/empty/base.ts b/src/types/spec/empty/base.ts
index 54880f83b1..0b94411d85 100644
--- a/src/types/spec/empty/base.ts
+++ b/src/types/spec/empty/base.ts
@@ -4,17 +4,45 @@ import { SimpleValue, UIFill, UISize, UIType } from '../../base/atoms'
export interface EmptyAction {
text: ReactNode
- type: UIType
- size: UISize
- fill: UIFill
- disabled: boolean
- onClick: () => void
+ type?: UIType
+ size?: UISize
+ fill?: UIFill
+ disabled?: boolean
+ onClick?: () => void
}
-export type EmptyState = 'empty' | 'error' | 'network'
+export type EmptyStatus =
+ | 'network'
+ | 'comment'
+ | 'search'
+ | 'shop'
+ | 'address'
+ | 'order'
+ | 'favor'
+ | 'cart'
-type statusOptions = {
- [key: string]: string
+export type EmptySize = 'full' | 'half' | 'partial'
+
+/** 内置缺省插图 URL;图片本体走 CDN 运行时加载,打进包内的仅为 URL 字符串 */
+export const EMPTY_STATUS_IMAGES: Record = {
+ network:
+ 'https://img10.360buyimg.com/imagetools/jfs/t1/449411/36/15729/19102/6a30e810F36720c83/03e61e01e08ab731.png',
+ comment:
+ 'https://img12.360buyimg.com/imagetools/jfs/t1/458866/29/4221/20560/6a30e810F02e0c676/03e61e01e02c0dab.png',
+ search:
+ 'https://img12.360buyimg.com/imagetools/jfs/t1/453287/39/13487/21638/6a30e810Fc7b15ec6/03e61e01e0bf5f81.png',
+ shop: 'https://img11.360buyimg.com/imagetools/jfs/t1/447986/21/19304/24327/6a30e810F0a9c3aca/03e61e01dd8d09b1.png',
+ address:
+ 'https://img12.360buyimg.com/imagetools/jfs/t1/446923/19/19328/23073/6a30e810F37ec221d/03e61e01e0e69357.png',
+ order:
+ 'https://img11.360buyimg.com/imagetools/jfs/t1/455990/2/7107/24405/6a30e810Fcb5a39b1/03e61e01e0715a43.png',
+ favor:
+ 'https://img12.360buyimg.com/imagetools/jfs/t1/458517/13/4983/22338/6a30e810F9d69ff57/03e61e01e092c3f9.png',
+ cart: 'https://img11.360buyimg.com/imagetools/jfs/t1/453149/9/10304/23216/6a30e810Ff6c0d230/03e61e01e0b41203.png',
+}
+
+export const getEmptyStatusImage = (status: EmptyStatus) => {
+ return EMPTY_STATUS_IMAGES[status] || EMPTY_STATUS_IMAGES.network
}
export interface BaseEmpty extends BaseProps {
@@ -22,7 +50,7 @@ export interface BaseEmpty extends BaseProps {
imageSize: SimpleValue
title: ReactNode
description: ReactNode
- size: Extract
- status: EmptyState
+ size: EmptySize
+ status: EmptyStatus
actions: Array
}