diff --git a/CHANGELOG.en-US.md b/CHANGELOG.en-US.md
index f67b6c48486..cdf9d5041e6 100644
--- a/CHANGELOG.en-US.md
+++ b/CHANGELOG.en-US.md
@@ -12,6 +12,7 @@
- `n-date-picker` prop `defaultTime` can also accept a function that will return a formatted string
- `n-steps` adds `content-placement` prop, closes [#7044](https://github.com/tusen-ai/naive-ui/issues/7044).
+- `n-date-picker` adds `single-panel` 支持 `type="daterange"` 选择日期范围时打开单面板
## 2.43.1
diff --git a/CHANGELOG.zh-CN.md b/CHANGELOG.zh-CN.md
index 2d9976d2a57..b6bf4080d87 100644
--- a/CHANGELOG.zh-CN.md
+++ b/CHANGELOG.zh-CN.md
@@ -12,6 +12,7 @@
- `n-date-picker` 的 `defaultTime` 属性可以接受返回格式化字符串的函数
- `n-steps` 增加 `content-placement` 属性,关闭 [#7044](https://github.com/tusen-ai/naive-ui/issues/7044)
+- `n-date-picker` 新增 `single-panel` 支持 `type="daterange"` 选择日期范围时打开单面板
## 2.43.1
diff --git a/src/date-picker/demos/enUS/index.demo-entry.md b/src/date-picker/demos/enUS/index.demo-entry.md
index 2d97dff2e97..b8375a0d663 100644
--- a/src/date-picker/demos/enUS/index.demo-entry.md
+++ b/src/date-picker/demos/enUS/index.demo-entry.md
@@ -31,6 +31,7 @@ focus.vue
status.vue
icon.vue
panel.vue
+single-panel.vue
```
## API
@@ -113,6 +114,7 @@ panel.vue
| default-calendar-start-time | `number` | `undefined` | Default panel calendar start month timestamp. | 2.28.3 |
| default-calendar-end-time | `number` | `undefined` | Default panel calendar end month timestamp. | 2.28.3 |
| end-placeholder | `string` | `'End Date'` | Placeholder at end part of the input. | |
+| single-panel | `boolean` | `false` | Whether to use a single panel | NEXT_VERSION |
| format | `string` | `'yyyy-MM-dd'` | Format of the input. For detail please see [format](https://date-fns.org/v2.23.0/docs/format). | |
| is-date-disabled | `(current: number, phase: 'start' \| 'end', value: [number, number] \| null) => boolean` | `undefined` | Validator of the date. | `detail` 2.37.1 |
| is-time-disabled | `(current: number, phase: 'start' \| 'end', value: [number, number]) => { isHourDisabled?: (hour: number) => boolean, isMinuteDisabled?: (minute: number, hour: number \| null) => boolean, isSecondDisabled?: (second: number, minute: number \| null, hour: number \| null) => boolean }` | `undefined` | Validator of the time. `null` in validators means value of picker is empty. | |
diff --git a/src/date-picker/demos/enUS/single-panel.demo.vue b/src/date-picker/demos/enUS/single-panel.demo.vue
new file mode 100644
index 00000000000..7bea9b70df9
--- /dev/null
+++ b/src/date-picker/demos/enUS/single-panel.demo.vue
@@ -0,0 +1,28 @@
+{{ JSON.stringify(range) }}
+
diff --git a/src/date-picker/demos/zhCN/index.demo-entry.md b/src/date-picker/demos/zhCN/index.demo-entry.md
index 47de63e9fd6..492f00b3151 100644
--- a/src/date-picker/demos/zhCN/index.demo-entry.md
+++ b/src/date-picker/demos/zhCN/index.demo-entry.md
@@ -29,6 +29,7 @@ footerslot.vue
status.vue
icon.vue
panel.vue
+single-panel.vue
panel-debug.vue
form-debug.vue
```
@@ -113,6 +114,7 @@ form-debug.vue
| bind-calendar-months | `boolean` | `false` | 面板月份是否连续 | 2.28.3 |
| default-calendar-start-time | `number` | `undefined` | 面板日历默认开始的月份时间戳 | 2.28.3 |
| default-calendar-end-time | `number` | `undefined` | 面板日历默认结束的月份时间戳 | 2.28.3 |
+| single-panel | `boolean` | `false` | 是否使用单面板 | NEXT_VERSION |
| format | `string` | `'yyyy-MM-dd'` | 时间格式化字符串,详情见 [format](https://date-fns.org/v2.23.0/docs/format) | |
| is-date-disabled | `(current: number, phase: 'start' \| 'end', value: [number, number] \| null) => boolean` | `undefined` | 日期禁用的校验函数 | |
| is-time-disabled | `(current: number, phase: 'start' \| 'end', value: [number, number]) => { isHourDisabled?: (hour: number) => boolean, isMinuteDisabled?: (minute: number, hour: number \| null) => boolean, isSecondDisabled?: (second: number, minute: number \| null, hour: number \| null) => boolean }` | `undefined` | 时间禁用的校验函数,校验函数中的 `null` 表示当前没有选中值 | |
diff --git a/src/date-picker/demos/zhCN/single-panel.demo.vue b/src/date-picker/demos/zhCN/single-panel.demo.vue
new file mode 100644
index 00000000000..345d04605e9
--- /dev/null
+++ b/src/date-picker/demos/zhCN/single-panel.demo.vue
@@ -0,0 +1,28 @@
+{{ JSON.stringify(range) }}
+
diff --git a/src/date-picker/src/DatePicker.tsx b/src/date-picker/src/DatePicker.tsx
index e919eccdbcf..d114326c19b 100644
--- a/src/date-picker/src/DatePicker.tsx
+++ b/src/date-picker/src/DatePicker.tsx
@@ -977,6 +977,7 @@ export default defineComponent({
defaultTime: this.defaultTime,
themeClass: this.themeClass,
panel: this.panel,
+ singlePanel: this.singlePanel,
inputReadonly: this.inputReadonly || this.mergedDisabled,
onRender: this.onRender,
onNextMonth: this.onNextMonth,
diff --git a/src/date-picker/src/panel/daterange.tsx b/src/date-picker/src/panel/daterange.tsx
index b364ca3d2b8..28cfaf3c94a 100644
--- a/src/date-picker/src/panel/daterange.tsx
+++ b/src/date-picker/src/panel/daterange.tsx
@@ -156,105 +156,109 @@ export default defineComponent({
))}
-