1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import http from '/admin/support/http'
- import { ref, unref, watch } from 'vue'
- import { Code } from '/admin/enum/app'
- import Message from '/admin/support/message'
- import { FormInstance } from 'element-plus'
- import { AxiosResponse } from 'axios'
- import { isFunction } from '/admin/support/helper'
- // get table list
- export function useCreate(path: string, id: string | number | null = null, _formData: object = {}) {
- const formData = ref<object>(_formData)
- const loading = ref<boolean>()
- const isClose = ref<boolean>(false)
- // 创建前 hook
- const beforeCreate = ref()
- // 更新前 hook
- const beforeUpdate = ref()
- const afterCreate = ref()
- const afterUpdate = ref()
- // store
- function store(path: string, id: string | number | null = null) {
- loading.value = true
- let promise: Promise<AxiosResponse> | null = null
- if (id) {
- if (isFunction(beforeUpdate.value)) {
- beforeUpdate.value()
- }
- promise = http.put(path + '/' + id, unref(formData))
- } else {
- if (isFunction(beforeCreate.value)) {
- beforeCreate.value()
- }
- promise = http.post(path, unref(formData))
- }
- promise
- .then(r => {
- if (r.data.code === Code.SUCCESS) {
- isClose.value = true
- Message.success(r.data.message)
- // 创建后的操作
- if (!id && isFunction(afterCreate.value)) {
- afterCreate.value()
- }
- // 更新后的操作
- if (id && isFunction(afterUpdate.value)) {
- afterUpdate.value()
- }
- } else {
- Message.error(r.data.message)
- }
- })
- .finally(() => {
- loading.value = false
- })
- }
- const form = ref<FormInstance>()
- const submitForm = (formEl: FormInstance | undefined) => {
- if (!formEl) return
- formEl
- .validate(valid => {
- if (valid) {
- store(path, id)
- } else {
- loading.value = false
- }
- })
- .then(() => {})
- }
- const close = (func: Function) => {
- watch(isClose, function (value) {
- if (value && isFunction(func)) {
- func()
- }
- })
- }
- return { formData, loading, form, submitForm, close, beforeCreate, beforeUpdate, afterCreate, afterUpdate }
- }
|