Skip to content

将表单、弹窗与动作按钮整合的快捷方法,底层使用 $dialogDataForm

基础用法(用函数包裹触发)

commonDialogMethod 调用即会创建并打开弹窗,推荐用一个函数包裹,在需要时再触发:

javascript
import { commonDialogMethod } from '@xmszm/core'

function openEditDialog(row) {
  const { cancel, model } = commonDialogMethod(
    {
      title: '编辑',
      options: [
        { key: 'name', label: '名称', way: 'input', required: true },
        { key: 'type', label: '类型', way: 'select', options: [{ label: 'A', value: 'a' }] },
      ],
      valueData: row,
      interfaceFn: async (data, { close }) => {
        await save(data)
        close()
      },
    },
    {
      style: { width: '520px' },
    },
  )
  return { cancel, model }
}

// 需要时再调用
openEditDialog(currentRow)

参数

字段名必填类型说明
titlestring弹窗标题,默认 ''
noTitleboolean是否隐藏标题,默认 false
titleFullFunction | string自定义标题渲染函数或完整标题
optionsArray表单项配置,直接传给 DataForm,默认 []
modestring模式,默认 'add'。支持的枚举值见 commonDialogMethod Mode 枚举
modeEnumObject自定义模式枚举,会与默认模式合并
labelFieldstringlabel 字段名,默认 'label'
isNoboolean内容最小高度控制,默认 true
formPropsObject透传给 DataFormformProps,默认 {}
contentStyleObject透传给 DataFormcontentStyle,默认 {}
actionArray | Function自定义底部按钮数组或函数;不传则使用默认“取消 / 确定”
actionPropsObjectNSpace/按钮样式补充,默认 {}
interfaceFnFunction点击默认“确定”时执行,入参 (model, { close, hideLoading })
interfaceFnCancelFunction点击默认“取消”时执行,入参 (model, { close })
readboolean只读模式,默认 false
isReadboolean只读模式(与 read 同义),默认 false
valueDataObject表单初始数据,默认 {}
dialogPropsObject透传给 n-dialog 的属性(第二个参数)

返回值

字段名类型说明
cancel() => void关闭弹窗的方法
setValue(v: any, key?: string) => void设置表单数据,key 为空时更新整个表单对象
modelRef<Object>响应式表单数据快照
modeEnumObject默认模式枚举对象

自定义动作

action 参数支持数组或函数,数组项配置详见 commonDialogMethod Action 配置

javascript
commonDialogMethod({
  action: [
    { label: '关闭', mode: 'cancel' },
    {
      label: '提交',
      valid: true,   // 会执行 DataForm 校验
      loading: true, // 自动切换 loading
      async onClick({ model, cancel }) {
        await save(model)
        cancel()
      },
    },
  ],
})

useCommonDialog Hook

在组件中使用 commonDialogMethod 的便捷方式,自动注册 Dialog 实例。

基础用法

javascript
import { useCommonDialog } from '@xmszm/core'

export default {
  setup() {
    const openDialog = useCommonDialog()
    
    const handleEdit = (row) => {
      openDialog({
        title: '编辑',
        options: [
          { key: 'name', label: '名称', way: 'input', required: true },
        ],
        valueData: row,
        interfaceFn: async (data, { close }) => {
          await save(data)
          close()
        },
      })
    }
    
    return { handleEdit }
  },
}

在 Composition API 中使用

javascript
import { useCommonDialog } from '@xmszm/core'

const openDialog = useCommonDialog()

function handleAdd() {
  openDialog({
    title: '新增',
    options: formOptions,
    interfaceFn: async (data, { close }) => {
      await create(data)
      close()
    },
  })
}

Dialog 工具函数

createDialog

使用 dialog 的工具函数,需要手动传入 dialog 实例。

javascript
import { useDialog } from 'naive-ui'
import { createDialog } from '@xmszm/core'

const dialog = useDialog()

// 创建自定义弹窗
const { destroy } = createDialog(dialog, {
  title: '提示',
  content: '这是一个自定义弹窗',
})

createDialogMethods

创建 Dialog 快捷方法(info、success、warning、error、create)。

javascript
import { useDialog } from 'naive-ui'
import { createDialogMethods } from '@xmszm/core'

const dialog = useDialog()
const dialogMethods = createDialogMethods(dialog)

// 使用快捷方法
dialogMethods.info({
  title: '信息',
  content: '这是一条信息',
})

dialogMethods.success({
  title: '成功',
  content: '操作成功',
})

dialogMethods.warning({
  title: '警告',
  content: '请注意',
})

dialogMethods.error({
  title: '错误',
  content: '操作失败',
})

createDialogOptions

创建 dialog 配置,应用主题色继承设置。通常用于自定义 Dialog 主题。

javascript
import { useDialog } from 'naive-ui'
import { createDialogOptions } from '@xmszm/core'

const dialog = useDialog()

const options = createDialogOptions({
  title: '自定义主题',
  content: '内容',
})

dialog.create(options)

小贴士

  • 表单校验委托给 DataFormvalid: true 时自动调用 formRef.valid()
  • 只读场景可用 mode: 'view',或直接传 read: true
  • 若需要自定义 header,可传 titleFull 为渲染函数。
  • 在组件中推荐使用 useCommonDialog Hook,它会自动处理 Dialog 实例注册。
  • createDialogcreateDialogMethodscreateDialogOptions 适用于需要更细粒度控制的场景。

Released under the UNLICENSED License.