import { messageMethod } from '../../utils/message-util' import { getCurrentInstance, reactive, Ref, ref } from 'vue' import BaseTable from '../../components/table/BaseTable.vue' import { UnwrapNestedRefs } from 'vue' import { BasePo } from '../../entity/common/base' interface Col { /** * 栅格占位格数,为 0 时相当于 display: none */ span?: number /** * 栅格左侧的间隔格数,间隔内不可以有栅格 */ offset?: number } /** * 修改面板的共用方法 */ export const updateMethod = (): Required<{ /** * label 标签的文本对齐方式 */ formLabelAlign: 'left' | 'right' /** * label 标签布局,同 组件,设置 span offset 值,如 {span: 3, offset: 12} 或 sm: {span: 3, offset: 12} */ formLabelCol: Col /** * 需要为输入控件设置布局样式时,使用该属性,用法同 labelCol */ formWrapperCol: Col /** * 表单操作按钮的位置, 底部的提交以及关闭 */ formActionCol: Col /** * 取消弹框的方法 */ handleCancel: () => void /** * 刷新的方法 */ handleRefresh: () => void /** * 刷新弹框的方法 */ handleSave: () => void /** * 是否显示 */ visible: Ref /** * 是否显示表单 */ showForm: () => void /** * 异常消息方法(表单验证失败) */ formFail: ({ errorFields }: { errorFields: Array<{ errors: Array; name: Array }> }) => void }> => { // 获取上下文对象信息 const app = getCurrentInstance() const visible = ref(false) return { handleCancel: (): void => app?.emit('cancel'), handleRefresh: (): void => app?.emit('refresh'), handleSave: (): void => { app?.emit('cancel') app?.emit('refresh') }, formFail: ({ errorFields }: { errorFields: Array<{ errors: Array; name: Array }> }) => { // 错误提示 errorFields.forEach(item => { messageMethod.error(item.errors).then() }) }, visible, showForm: () => { visible.value = true }, formLabelCol: { span: 5 }, formWrapperCol: { span: 20 }, formLabelAlign: 'right', formActionCol: { span: 14, offset: 5 } } } /** * manage页面的共用方法 */ export const manageMethod = (): Required<{ /** * 刷新表格数据 */ refresh: () => void /** * 更新面板的状态 */ update: UnwrapNestedRefs< Required<{ id: string title: string visible: boolean // 弹窗的宽度 width: string [ket: PropertyKey]: unknown }> > /** * 表格ref */ baseTable: InstanceType /** * 打开修改面板的操作 * @param vo */ handleUpdate: (vo: T | undefined) => void }> => { // 获取上下文对象信息 const app = getCurrentInstance() // 修改表单的部分数据 const update = reactive({ id: '', title: '', visible: false, width: '40%' }) return { update, refresh: () => { const baseTable = app?.refs['baseTable'] as InstanceType baseTable.pageRequest() }, baseTable: () => { return app?.refs['baseTable'] as InstanceType }, handleUpdate: (vo: T | undefined) => { update.id = vo?.id ?? '' update.title = vo ? '编辑信息' : '新增信息' update.visible = true } } } /** * 弹框的信息 * @param title 弹框的标题信息 */ export const drawerMethod = ( title?: (vo: T) => string ): Required<{ /** * 更新面板的状态 */ panel: UnwrapNestedRefs< Required<{ id: string title: string visible: boolean width: string [ket: PropertyKey]: unknown }> > /** * 打开修改面板的操作 * @param vo */ open: (vo: T) => void }> => { // 弹框的输入部分数据 const panel = reactive({ id: '', title: '', visible: false, width: '40%' }) return { panel, open: (vo: T) => { panel.id = vo?.id ?? '' panel.title = title ? title(vo) : '查看信息' panel.visible = true } } }