diff --git a/packages/element-plus/index.ts b/packages/element-plus/index.ts
index ae3ca78d6d..03d121a419 100644
--- a/packages/element-plus/index.ts
+++ b/packages/element-plus/index.ts
@@ -16,6 +16,7 @@ import ElRate from '@element-plus/rate'
import ElSwitch from '@element-plus/switch'
import ElContainer from '@element-plus/container'
import ElNotification from '@element-plus/notification'
+import ElPageHeader from '@element-plus/page-header'
export {
ElAvatar,
@@ -35,6 +36,7 @@ export {
ElSwitch,
ElContainer,
ElNotification,
+ ElPageHeader,
}
export default function install(app: App): void {
@@ -55,4 +57,5 @@ export default function install(app: App): void {
ElSwitch(app)
ElContainer(app)
ElNotification(app)
+ ElPageHeader(app)
}
diff --git a/packages/page-header/__tests__/page-header.spec.ts b/packages/page-header/__tests__/page-header.spec.ts
new file mode 100644
index 0000000000..e33872d80b
--- /dev/null
+++ b/packages/page-header/__tests__/page-header.spec.ts
@@ -0,0 +1,43 @@
+import { mount } from '@vue/test-utils'
+import PageHeader from '../src/index.vue'
+
+const AXIOM = 'Rem is the best girl'
+
+describe('PageHeader.vue', () => {
+ test('render test', () => {
+ const wrapper = mount(PageHeader, {
+ props: { content: AXIOM },
+ })
+ expect(wrapper.find('.el-page-header__content').text()).toEqual(AXIOM)
+ })
+
+ test('slot content', () => {
+ const wrapper = mount(PageHeader, {
+ slots: { content: AXIOM },
+ })
+ expect(wrapper.find('.el-page-header__content').text()).toEqual(AXIOM)
+ })
+
+ test('prop title', () => {
+ const wrapper = mount(PageHeader, {
+ props: { title: AXIOM },
+ })
+ expect(wrapper.find('.el-page-header__title').text()).toEqual(AXIOM)
+ })
+
+ test('slot prop', () => {
+ const wrapper = mount(PageHeader, {
+ slots: { title: AXIOM },
+ })
+ expect(wrapper.find('.el-page-header__title').text()).toEqual(AXIOM)
+ })
+
+ test('event back', async () => {
+ const wrapper = mount(PageHeader, {
+ props: { content: AXIOM },
+ })
+
+ await wrapper.find('.el-icon-back').trigger('click')
+ expect(wrapper.emitted('back')).toBeDefined()
+ })
+})
diff --git a/packages/page-header/doc/basic.vue b/packages/page-header/doc/basic.vue
new file mode 100644
index 0000000000..ea5678480f
--- /dev/null
+++ b/packages/page-header/doc/basic.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/packages/page-header/doc/index.stories.ts b/packages/page-header/doc/index.stories.ts
new file mode 100644
index 0000000000..8d1326d9db
--- /dev/null
+++ b/packages/page-header/doc/index.stories.ts
@@ -0,0 +1,6 @@
+export default {
+ title: 'PageHeader',
+}
+
+export { default as BasicUsage } from './basic.vue'
+
diff --git a/packages/page-header/index.ts b/packages/page-header/index.ts
new file mode 100644
index 0000000000..4534516143
--- /dev/null
+++ b/packages/page-header/index.ts
@@ -0,0 +1,5 @@
+import { App } from 'vue'
+import PageHeader from './src/index.vue'
+export default (app: App): void => {
+ app.component(PageHeader.name, PageHeader)
+}
diff --git a/packages/page-header/package.json b/packages/page-header/package.json
new file mode 100644
index 0000000000..77725262e4
--- /dev/null
+++ b/packages/page-header/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "@element-plus/page-header",
+ "version": "0.0.0",
+ "main": "dist/index.js",
+ "license": "MIT",
+ "peerDependencies": {
+ "vue": "^3.0.0-rc.1"
+ },
+ "devDependencies": {
+ "@vue/test-utils": "^2.0.0-beta.0"
+ }
+}
diff --git a/packages/page-header/src/index.vue b/packages/page-header/src/index.vue
new file mode 100644
index 0000000000..f5b5cdc2da
--- /dev/null
+++ b/packages/page-header/src/index.vue
@@ -0,0 +1,41 @@
+
+
+
+
+