Files
go-view/src/utils/plugin.ts
T
2021-12-20 17:38:44 +08:00

86 lines
2.2 KiB
TypeScript

import { icon } from '@/plugins'
import { DialogEnum } from '@/enums/pluginEnum'
import { dialogIconSize, maskClosable } from '@/settings/designSetting'
import { DialogReactive } from 'naive-ui'
const { InformationCircleIcon } = icon.ionicons5
import { renderIcon } from '@/utils'
/**
* * render 对话框
* @param { Function } dialogFn dialog函数,暂时必须从页面传过来
* @param { Object} params 配置参数
*/
export const goDialog = (
params: {
// 基本
type: DialogEnum
message?: string
// 回调
onPositiveCallback?: Function
onNegativeCallback?: Function
// 异步
promise?: boolean
promiseResCallback?: Function
promiseRejCallback?: Function
},
dialogFn?: Function
) => {
const {
type,
message,
onPositiveCallback,
onNegativeCallback,
promise,
promiseResCallback,
promiseRejCallback
} = params
const typeObj = {
// 自定义
delete: {
fn: dialogFn || window['$dialog'].warning,
message: message || '是否删除此数据?'
},
// 原有
warning: {
fn: window['$dialog'].warning,
message: message || '是否执行此操作?'
},
error: {
fn: window['$dialog'].error,
message: message || '是否执行此操作?'
},
success: {
fn: window['$dialog'].success,
message: message || '是否执行此操作?'
}
}
const d: DialogReactive = (typeObj as any)[type]['fn']({
title: '提示',
icon: renderIcon(InformationCircleIcon, { size: dialogIconSize }),
content: (typeObj as any)[type]['message'],
positiveText: '确定',
negativeText: '取消',
maskClosable: maskClosable,
onPositiveClick: async () => {
// 执行异步
if (promise && onPositiveCallback) {
d.loading = true
try {
const res = await onPositiveCallback()
promiseResCallback && promiseResCallback(res)
} catch (err) {
promiseRejCallback && promiseRejCallback(err)
}
d.loading = false
return
}
onPositiveCallback && onPositiveCallback(d)
},
onNegativeClick: async () => {
onNegativeCallback && onNegativeCallback(d)
}
})
}