From de9acf14c1f363d88634859b6ee7af81ff9a8726 Mon Sep 17 00:00:00 2001
From: Bang <15622356989@163.com>
Date: Mon, 20 Mar 2023 23:09:58 +0800
Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9Emessage=E6=B6=88?=
=?UTF-8?q?=E6=81=AF=E6=8F=90=E7=A4=BA=E7=BB=84=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/components/message/OMessage.vue | 42 +++++++
.../src/components/message/OMessageList.vue | 66 +++++++++++
.../message/__demo__/IndexMessage.vue | 10 ++
.../message/__demo__/MessageBasic.vue | 43 +++++++
.../src/components/message/index.ts | 14 +++
.../src/components/message/style/index.scss | 43 +++++++
.../src/components/message/style/index.ts | 2 +
.../src/components/message/style/var.scss | 29 +++++
.../src/components/message/types.ts | 26 +++++
.../src/components/message/use-message.ts | 108 ++++++++++++++++++
packages/portal/src/router.ts | 12 ++
11 files changed, 395 insertions(+)
create mode 100644 packages/opendesign/src/components/message/OMessage.vue
create mode 100644 packages/opendesign/src/components/message/OMessageList.vue
create mode 100644 packages/opendesign/src/components/message/__demo__/IndexMessage.vue
create mode 100644 packages/opendesign/src/components/message/__demo__/MessageBasic.vue
create mode 100644 packages/opendesign/src/components/message/index.ts
create mode 100644 packages/opendesign/src/components/message/style/index.scss
create mode 100644 packages/opendesign/src/components/message/style/index.ts
create mode 100644 packages/opendesign/src/components/message/style/var.scss
create mode 100644 packages/opendesign/src/components/message/types.ts
create mode 100644 packages/opendesign/src/components/message/use-message.ts
diff --git a/packages/opendesign/src/components/message/OMessage.vue b/packages/opendesign/src/components/message/OMessage.vue
new file mode 100644
index 00000000..b55cef66
--- /dev/null
+++ b/packages/opendesign/src/components/message/OMessage.vue
@@ -0,0 +1,42 @@
+
+
+
+ {{ props.content }}
+
diff --git a/packages/opendesign/src/components/message/OMessageList.vue b/packages/opendesign/src/components/message/OMessageList.vue
new file mode 100644
index 00000000..0b45998f
--- /dev/null
+++ b/packages/opendesign/src/components/message/OMessageList.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
diff --git a/packages/opendesign/src/components/message/__demo__/IndexMessage.vue b/packages/opendesign/src/components/message/__demo__/IndexMessage.vue
new file mode 100644
index 00000000..e074ad35
--- /dev/null
+++ b/packages/opendesign/src/components/message/__demo__/IndexMessage.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/packages/opendesign/src/components/message/__demo__/MessageBasic.vue b/packages/opendesign/src/components/message/__demo__/MessageBasic.vue
new file mode 100644
index 00000000..651c77c8
--- /dev/null
+++ b/packages/opendesign/src/components/message/__demo__/MessageBasic.vue
@@ -0,0 +1,43 @@
+
+
+
+ 基础用法
+
+ Info Message
+ Success Message
+ Warning Message
+ Danger Message
+
+
diff --git a/packages/opendesign/src/components/message/index.ts b/packages/opendesign/src/components/message/index.ts
new file mode 100644
index 00000000..c5bf9797
--- /dev/null
+++ b/packages/opendesign/src/components/message/index.ts
@@ -0,0 +1,14 @@
+import type { App } from 'vue';
+
+import _OMessage from './OMessage.vue';
+import useMessage from './use-message';
+
+const OMessage = Object.assign(_OMessage, {
+ install(app: App) {
+ app.component(_OMessage.name, _OMessage);
+ },
+});
+
+export * from './types';
+
+export { OMessage, useMessage };
diff --git a/packages/opendesign/src/components/message/style/index.scss b/packages/opendesign/src/components/message/style/index.scss
new file mode 100644
index 00000000..370d2754
--- /dev/null
+++ b/packages/opendesign/src/components/message/style/index.scss
@@ -0,0 +1,43 @@
+@use './var.scss';
+
+.o-message {
+ display: flex;
+ align-items: center;
+ padding: var(--message-padding);
+ font-size: var(--message-text-size);
+ line-height: var(--message-text-height);
+ color: var(--message-color);
+ background-color: var(--message-bg-color);
+ border-radius: var(--message-radius);
+ border: 1px solid var(--message-bd-color);
+ width: fit-content;
+ transition: all var(--o-duration-m1) var(--o-easing-standard-out);
+}
+
+.o-message + .o-message {
+ margin-top: 16px;
+}
+
+.o-message-list {
+ position: fixed;
+ z-index: 1001;
+ left: 50%;
+ top: 32px;
+ transform: translateX(-50%);
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+.fade-message-enter-from {
+ opacity: 0;
+}
+
+.fade-message-enter-active,
+.fade-message-leave-active {
+ transition: all var(--o-duration-m1) var(--o-easing-standard-out);
+}
+
+.fade-message-leave-to {
+ opacity: 0;
+}
diff --git a/packages/opendesign/src/components/message/style/index.ts b/packages/opendesign/src/components/message/style/index.ts
new file mode 100644
index 00000000..591b2fbd
--- /dev/null
+++ b/packages/opendesign/src/components/message/style/index.ts
@@ -0,0 +1,2 @@
+import '../../style';
+import './index.scss';
diff --git a/packages/opendesign/src/components/message/style/var.scss b/packages/opendesign/src/components/message/style/var.scss
new file mode 100644
index 00000000..70cb1eeb
--- /dev/null
+++ b/packages/opendesign/src/components/message/style/var.scss
@@ -0,0 +1,29 @@
+.o-message {
+ --message-padding: 8px 16px;
+ --message-text-size: var(--o-font_size-text1);
+ --message-text-height: var(--o-line_height-text1);
+
+ --message-color: var(--o-color-info1);
+
+ --message-radius: var(--o-radius-control-m);
+}
+
+.o-message-normal {
+ --message-bg-color: var(--o-color-control-light);
+ --message-bd-color: var(--o-color-control1);
+}
+
+.o-message-success {
+ --message-bg-color: var(--o-color-success4-light);
+ --message-bd-color: var(--o-color-success1);
+}
+
+.o-message-warning {
+ --message-bg-color: var(--o-color-warning4-light);
+ --message-bd-color: var(--o-color-warning1);
+}
+
+.o-message-danger {
+ --message-bg-color: var(--o-color-danger4-light);
+ --message-bd-color: var(--o-color-danger1);
+}
diff --git a/packages/opendesign/src/components/message/types.ts b/packages/opendesign/src/components/message/types.ts
new file mode 100644
index 00000000..6f7d7b19
--- /dev/null
+++ b/packages/opendesign/src/components/message/types.ts
@@ -0,0 +1,26 @@
+import type { ExtractPropTypes, PropType } from 'vue';
+import { ColorT } from '../_shared/global';
+
+export const messageProps = {
+ color: {
+ type: String as PropType,
+ default: 'normal',
+ },
+ content: {
+ type: String,
+ default: '',
+ },
+ duration: {
+ type: Number,
+ default: 3000,
+ },
+ onClose: {
+ type: Function as PropType<() => void>,
+ },
+};
+
+export type MessagePropsT = ExtractPropTypes;
+
+export type MessagePositionT = 'top' | 'bottom';
+
+export type MessageParamsT = Partial;
diff --git a/packages/opendesign/src/components/message/use-message.ts b/packages/opendesign/src/components/message/use-message.ts
new file mode 100644
index 00000000..4df6da19
--- /dev/null
+++ b/packages/opendesign/src/components/message/use-message.ts
@@ -0,0 +1,108 @@
+import { createVNode, render } from 'vue';
+import { isString } from '../_shared/is';
+import { MessageParamsT } from './types';
+import OMessageList from './OMessageList.vue';
+
+const DEFAULT_OPTIONS: MessageParamsT = {
+ color: 'normal',
+ position: 'top',
+ duration: 3000,
+};
+
+const instanceMap = new Map();
+
+const normalizeOptions = (params: MessageParamsT) => {
+ const options: MessageParamsT = !params || isString(params) ? { content: params } : params;
+
+ const normalized = {
+ ...DEFAULT_OPTIONS,
+ ...options,
+ };
+
+ return normalized;
+};
+
+const showMessage = (params: MessageParamsT) => {
+ const { position } = params;
+
+ const instance = instanceMap.get(position);
+ if (!instance) {
+ let wrap: HTMLDivElement | null = document.createElement('div');
+
+ const vnode = createVNode(OMessageList, {
+ position: params.position,
+ onDestory: () => {
+ if (wrap) {
+ document.body.removeChild(wrap);
+ wrap = null;
+ }
+ instanceMap.set(position, undefined);
+ },
+ });
+
+ render(vnode, wrap);
+
+ const vm = vnode.component!;
+ vm.exposed?.add(params);
+
+ instanceMap.set(position, vm);
+
+ document.body.appendChild(wrap);
+ } else {
+ instance.exposed?.add(params);
+ }
+};
+
+const normal = (params: MessageParamsT): void => {
+ const options: MessageParamsT = normalizeOptions(params);
+ showMessage({
+ ...options,
+ color: 'normal',
+ });
+};
+
+const primary = (params: MessageParamsT): void => {
+ const options: MessageParamsT = normalizeOptions(params);
+ showMessage({
+ ...options,
+ color: 'primary',
+ });
+};
+
+const success = (params: MessageParamsT): void => {
+ const options: MessageParamsT = normalizeOptions(params);
+ showMessage({
+ ...options,
+ color: 'success',
+ });
+};
+
+const warning = (params: MessageParamsT): void => {
+ const options: MessageParamsT = normalizeOptions(params);
+ showMessage({
+ ...options,
+ color: 'warning',
+ });
+};
+
+const danger = (params: MessageParamsT): void => {
+ const options: MessageParamsT = normalizeOptions(params);
+ showMessage({
+ ...options,
+ color: 'danger',
+ });
+};
+
+const Message = {
+ normal,
+ primary,
+ success,
+ warning,
+ danger,
+};
+
+const useMessage = () => {
+ return Message;
+};
+
+export default useMessage;
diff --git a/packages/portal/src/router.ts b/packages/portal/src/router.ts
index f57e6dfa..4848a27a 100644
--- a/packages/portal/src/router.ts
+++ b/packages/portal/src/router.ts
@@ -68,6 +68,12 @@ export const routes = [
label: '下拉框',
component: () => import('@components/select/__demo__/IndexSelect.vue'),
},
+ // {
+ // path: '/cascader',
+ // name: 'Cascader',
+ // label: '级联选择器',
+ // component: () => import('@components/cascader/__demo__/IndexCascader.vue'),
+ // },
{
path: '/radio',
name: 'Radio',
@@ -164,6 +170,12 @@ export const routes = [
label: '卡片',
component: () => import('@components/card/__demo__/IndexCard.vue'),
},
+ {
+ path: '/message',
+ name: 'Message',
+ label: '消息提示',
+ component: () => import('@components/message/__demo__/IndexMessage.vue'),
+ },
{
path: '/resize-observer',
name: 'ResizeObserver',
--
Gitee
From d05b8c5fd19502f772482b5294e013d8857679ea Mon Sep 17 00:00:00 2001
From: Bang <15622356989@163.com>
Date: Mon, 20 Mar 2023 23:14:54 +0800
Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E5=AF=BC=E5=87=BAmessagebox?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/opendesign/src/components/index.ts | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/packages/opendesign/src/components/index.ts b/packages/opendesign/src/components/index.ts
index 175db70d..b55680ec 100644
--- a/packages/opendesign/src/components/index.ts
+++ b/packages/opendesign/src/components/index.ts
@@ -27,9 +27,12 @@ export * from './form';
export * from './menu';
export * from './breadcrumb';
export * from './progress';
-// export * from './dropdown';
-// export * from './scrollbar';
+export * from './dropdown';
export * from './dialog';
+export * from './message';
+
+// export * from './scrollbar';
+
export * from './intersection-observer';
export * from './resize-observer';
--
Gitee