From 75160ee07819ffa15649938bb530627e7bd4f060 Mon Sep 17 00:00:00 2001
From: Bang <15622356989@163.com>
Date: Mon, 10 Apr 2023 18:55:08 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9Eresult=E7=BB=93?=
=?UTF-8?q?=E6=9E=9C=E7=BB=84=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/opendesign/src/components/index.scss | 1 +
packages/opendesign/src/components/index.ts | 1 +
.../src/components/result/OResult.vue | 43 +++++++++++++++++
.../result/__demo__/IndexResult.vue | 13 +++++
.../result/__demo__/ResultBasic.vue | 16 +++++++
.../result/__demo__/ResultSlots.vue | 30 ++++++++++++
.../opendesign/src/components/result/index.ts | 13 +++++
.../src/components/result/style/index.scss | 48 +++++++++++++++++++
.../src/components/result/style/index.ts | 2 +
.../src/components/result/style/var.scss | 30 ++++++++++++
.../opendesign/src/components/result/types.ts | 28 +++++++++++
packages/portal/src/router.ts | 6 +++
12 files changed, 231 insertions(+)
create mode 100644 packages/opendesign/src/components/result/OResult.vue
create mode 100644 packages/opendesign/src/components/result/__demo__/IndexResult.vue
create mode 100644 packages/opendesign/src/components/result/__demo__/ResultBasic.vue
create mode 100644 packages/opendesign/src/components/result/__demo__/ResultSlots.vue
create mode 100644 packages/opendesign/src/components/result/index.ts
create mode 100644 packages/opendesign/src/components/result/style/index.scss
create mode 100644 packages/opendesign/src/components/result/style/index.ts
create mode 100644 packages/opendesign/src/components/result/style/var.scss
create mode 100644 packages/opendesign/src/components/result/types.ts
diff --git a/packages/opendesign/src/components/index.scss b/packages/opendesign/src/components/index.scss
index a9c77e30..75a57b33 100644
--- a/packages/opendesign/src/components/index.scss
+++ b/packages/opendesign/src/components/index.scss
@@ -33,3 +33,4 @@
@use './message/style/index.scss' as *;
@use './cascader/style/index.scss' as *;
@use './grid/style/index.scss' as *;
+@use './result/style/index.scss' as *;
diff --git a/packages/opendesign/src/components/index.ts b/packages/opendesign/src/components/index.ts
index c1e067eb..344a2dd7 100644
--- a/packages/opendesign/src/components/index.ts
+++ b/packages/opendesign/src/components/index.ts
@@ -36,6 +36,7 @@ export * from './message';
export * from './slides';
export * from './cascader';
export * from './grid';
+export * from './result';
// export * from './scrollbar';
export * from './intersection-observer';
diff --git a/packages/opendesign/src/components/result/OResult.vue b/packages/opendesign/src/components/result/OResult.vue
new file mode 100644
index 00000000..40daeefa
--- /dev/null
+++ b/packages/opendesign/src/components/result/OResult.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ props.title }}
+
+
+
+
+ {{ props.description }}
+
+
+
+
+
+
+
+
diff --git a/packages/opendesign/src/components/result/__demo__/IndexResult.vue b/packages/opendesign/src/components/result/__demo__/IndexResult.vue
new file mode 100644
index 00000000..4fc93881
--- /dev/null
+++ b/packages/opendesign/src/components/result/__demo__/IndexResult.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
diff --git a/packages/opendesign/src/components/result/__demo__/ResultBasic.vue b/packages/opendesign/src/components/result/__demo__/ResultBasic.vue
new file mode 100644
index 00000000..41ef166f
--- /dev/null
+++ b/packages/opendesign/src/components/result/__demo__/ResultBasic.vue
@@ -0,0 +1,16 @@
+
+
+
+ 基础用法
+
+
diff --git a/packages/opendesign/src/components/result/__demo__/ResultSlots.vue b/packages/opendesign/src/components/result/__demo__/ResultSlots.vue
new file mode 100644
index 00000000..c2a8ca01
--- /dev/null
+++ b/packages/opendesign/src/components/result/__demo__/ResultSlots.vue
@@ -0,0 +1,30 @@
+
+
+
+ 插槽
+
+
+
+
+
+ 404
+ 页面走丢了
+
+ 返回
+
+
+
+
+
+
diff --git a/packages/opendesign/src/components/result/index.ts b/packages/opendesign/src/components/result/index.ts
new file mode 100644
index 00000000..1af6c728
--- /dev/null
+++ b/packages/opendesign/src/components/result/index.ts
@@ -0,0 +1,13 @@
+import type { App } from 'vue';
+
+import _OResult from './OResult.vue';
+
+const OResult = Object.assign(_OResult, {
+ install(app: App) {
+ app.component(_OResult.name, _OResult);
+ },
+});
+
+export * from './types';
+
+export { OResult };
diff --git a/packages/opendesign/src/components/result/style/index.scss b/packages/opendesign/src/components/result/style/index.scss
new file mode 100644
index 00000000..bf37a5ee
--- /dev/null
+++ b/packages/opendesign/src/components/result/style/index.scss
@@ -0,0 +1,48 @@
+@use './var.scss';
+
+.o-result {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+ padding: var(--result-padding);
+}
+
+.o-result-icon {
+ width: var(--result-icon-size);
+ height: var(--result-icon-size);
+ font-size: var(--result-icon-size);
+ color: var(--result-icon-color);
+}
+
+.o-result-title {
+ color: var(--result-title-color);
+ font-size: var(--result-title-text-size);
+ line-height: var(--result-title-text-height);
+ font-weight: 600;
+ margin-top: var(--result-title-margin-top);
+
+ p {
+ margin: 0;
+ }
+}
+
+.o-result-description {
+ color: var(--result-desc-color);
+ font-size: var(--result-desc-text-size);
+ line-height: var(--result-desc-text-height);
+ margin-top: var(--result-desc-margin-top);
+ p {
+ margin: 0;
+ }
+}
+
+.o-result-extra {
+ margin-top: var(--result-extra-margin-top);
+}
+
+.o-result-icon-custom {
+ width: auto;
+ height: auto;
+}
diff --git a/packages/opendesign/src/components/result/style/index.ts b/packages/opendesign/src/components/result/style/index.ts
new file mode 100644
index 00000000..591b2fbd
--- /dev/null
+++ b/packages/opendesign/src/components/result/style/index.ts
@@ -0,0 +1,2 @@
+import '../../style';
+import './index.scss';
diff --git a/packages/opendesign/src/components/result/style/var.scss b/packages/opendesign/src/components/result/style/var.scss
new file mode 100644
index 00000000..de5267de
--- /dev/null
+++ b/packages/opendesign/src/components/result/style/var.scss
@@ -0,0 +1,30 @@
+.o-result {
+ --result-padding: 40px;
+
+ --result-icon-size: 60px;
+ --result-icon-color: var(--o-color-primary1);
+
+ --result-title-color: var(--o-color-info1);
+ --result-title-text-size: var(--o-font_size-h3);
+ --result-title-text-height: var(--o-line_height-h3);
+ --result-title-margin-top: 16px;
+
+ --result-desc-color: var(--o-color-info2);
+ --result-desc-text-size: var(--o-font_size-text1);
+ --result-desc-text-height: var(--o-line_height-text1);
+ --result-desc-margin-top: 8px;
+
+ --result-extra-margin-top: 24px;
+}
+
+.o-result-success {
+ --result-icon-color: var(--o-color-success1);
+}
+
+.o-result-warning {
+ --result-icon-color: var(--o-color-warning1);
+}
+
+.o-result-danger {
+ --result-icon-color: var(--o-color-danger1);
+}
diff --git a/packages/opendesign/src/components/result/types.ts b/packages/opendesign/src/components/result/types.ts
new file mode 100644
index 00000000..f40d843a
--- /dev/null
+++ b/packages/opendesign/src/components/result/types.ts
@@ -0,0 +1,28 @@
+import { ExtractPropTypes, PropType } from 'vue';
+
+export const ResultStatusTypes = ['info', 'success', 'warning', 'danger'] as const;
+export type ResultStatusT = typeof ResultStatusTypes[number];
+
+export const resultProps = {
+ /**
+ * 状态
+ */
+ status: {
+ type: String as PropType,
+ default: 'info',
+ },
+ /**
+ * 标题
+ */
+ title: {
+ type: String,
+ },
+ /**
+ * 描述
+ **/
+ description: {
+ type: String,
+ },
+};
+
+export type ResultPropsT = ExtractPropTypes;
diff --git a/packages/portal/src/router.ts b/packages/portal/src/router.ts
index cf16f305..dd83d92d 100644
--- a/packages/portal/src/router.ts
+++ b/packages/portal/src/router.ts
@@ -194,6 +194,12 @@ export const routes = [
label: '加载 Loading',
component: () => import('@components/loading/__demo__/IndexLoading.vue'),
},
+ {
+ path: '/result',
+ name: 'Result',
+ label: '结果 Result',
+ component: () => import('@components/result/__demo__/IndexResult.vue'),
+ },
{
path: '/resize-observer',
name: 'ResizeObserver',
--
Gitee