123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/12 09:03:00
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
- import { useForm, useModal } from '.'
- const ACTIONS = {
- view: '查看',
- edit: '编辑',
- add: '新增',
- }
- export function useCrud({ name, initForm = {}, doCreate, doDelete, doUpdate, refresh }) {
- const modalAction = ref('')
- const [modalRef, okLoading] = useModal()
- const [modalFormRef, modalForm, validation] = useForm(initForm)
- let handleAddcallback, handleEditcallback
- /** 新增 */
- function handleAdd(row = {}, title, addcallback) {
- handleOpen({ action: 'add', title, row: { ...initForm, ...row } })
- if (typeof addcallback === 'function') {
- handleAddcallback = addcallback
- }
- }
- /** 修改 */
- function handleEdit(row, title, editcallback) {
- handleOpen({ action: 'edit', title, row })
- if (typeof editcallback === 'function') {
- handleEditcallback = editcallback
- }
- }
- /** 查看 */
- function handleView(row, title) {
- handleOpen({ action: 'view', title, row })
- }
- /** 打开modal */
- function handleOpen(options = {}) {
- const { action, row, title, onOk } = options
- modalAction.value = action
- modalForm.value = { ...row }
- modalRef.value?.open({
- ...options,
- async onOk() {
- if (typeof onOk === 'function') {
- return await onOk()
- }
- else {
- return await handleSave()
- }
- },
- title: title ?? (ACTIONS[modalAction.value] || '') + name,
- })
- }
- /** 保存 */
- async function handleSave(action) {
- if (!action && !['edit', 'add'].includes(modalAction.value)) {
- return false
- }
- await validation()
- const actions = {
- add: {
- api: () => doCreate(modalForm.value),
- cb: () => {
- $message.success('新增成功')
- handleAddcallback && handleAddcallback()
- },
- },
- edit: {
- api: () => doUpdate(modalForm.value),
- cb: () => {
- $message.success('保存成功')
- handleEditcallback && handleEditcallback()
- // debugger
- },
- },
- }
- action = action || actions[modalAction.value]
- try {
- okLoading.value = true
- const data = await action.api()
- action.cb()
- okLoading.value = false
- data && refresh(data)
- }
- catch (error) {
- console.error(error)
- okLoading.value = false
- return false
- }
- }
- /** 删除 */
- function handleDelete(id, confirmOptions) {
- if (!id && id !== 0)
- return
- const d = $dialog.warning({
- content: '确定删除?',
- title: '提示',
- positiveText: '确定',
- negativeText: '取消',
- async onPositiveClick() {
- try {
- d.loading = true
- const data = await doDelete(id)
- $message.success('删除成功')
- d.loading = false
- refresh(data, true)
- }
- catch (error) {
- console.error(error)
- d.loading = false
- }
- },
- ...confirmOptions,
- })
- }
- return {
- modalRef,
- modalFormRef,
- modalAction,
- modalForm,
- okLoading,
- validation,
- handleAdd,
- handleDelete,
- handleEdit,
- handleView,
- handleOpen,
- handleSave,
- }
- }
|