|
@@ -0,0 +1,68 @@
|
|
|
+import { isObj } from '../common/validator';
|
|
|
+const defaultOptions = {
|
|
|
+ type: 'text',
|
|
|
+ mask: false,
|
|
|
+ message: '',
|
|
|
+ show: true,
|
|
|
+ zIndex: 1000,
|
|
|
+ duration: 2000,
|
|
|
+ position: 'middle',
|
|
|
+ forbidClick: false,
|
|
|
+ loadingType: 'circular',
|
|
|
+ selector: '#van-toast',
|
|
|
+};
|
|
|
+let queue = [];
|
|
|
+let currentOptions = Object.assign({}, defaultOptions);
|
|
|
+function parseOptions(message) {
|
|
|
+ return isObj(message) ? message : { message };
|
|
|
+}
|
|
|
+function getContext() {
|
|
|
+ const pages = getCurrentPages();
|
|
|
+ return pages[pages.length - 1];
|
|
|
+}
|
|
|
+function Toast(toastOptions) {
|
|
|
+ const options = Object.assign(Object.assign({}, currentOptions), parseOptions(toastOptions));
|
|
|
+ const context = (typeof options.context === 'function'
|
|
|
+ ? options.context()
|
|
|
+ : options.context) || getContext();
|
|
|
+ const toast = context.selectComponent(options.selector);
|
|
|
+ if (!toast) {
|
|
|
+ console.warn('未找到 van-toast 节点,请确认 selector 及 context 是否正确');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ delete options.context;
|
|
|
+ delete options.selector;
|
|
|
+ toast.clear = () => {
|
|
|
+ toast.setData({ show: false });
|
|
|
+ if (options.onClose) {
|
|
|
+ options.onClose();
|
|
|
+ }
|
|
|
+ };
|
|
|
+ queue.push(toast);
|
|
|
+ toast.setData(options);
|
|
|
+ clearTimeout(toast.timer);
|
|
|
+ if (options.duration != null && options.duration > 0) {
|
|
|
+ toast.timer = setTimeout(() => {
|
|
|
+ toast.clear();
|
|
|
+ queue = queue.filter((item) => item !== toast);
|
|
|
+ }, options.duration);
|
|
|
+ }
|
|
|
+ return toast;
|
|
|
+}
|
|
|
+const createMethod = (type) => (options) => Toast(Object.assign({ type }, parseOptions(options)));
|
|
|
+Toast.loading = createMethod('loading');
|
|
|
+Toast.success = createMethod('success');
|
|
|
+Toast.fail = createMethod('fail');
|
|
|
+Toast.clear = () => {
|
|
|
+ queue.forEach((toast) => {
|
|
|
+ toast.clear();
|
|
|
+ });
|
|
|
+ queue = [];
|
|
|
+};
|
|
|
+Toast.setDefaultOptions = (options) => {
|
|
|
+ Object.assign(currentOptions, options);
|
|
|
+};
|
|
|
+Toast.resetDefaultOptions = () => {
|
|
|
+ currentOptions = Object.assign({}, defaultOptions);
|
|
|
+};
|
|
|
+export default Toast;
|