useTable.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. import { ElMessage, ElMessageBox } from 'element-plus'
  2. export const useTable = (props: any, emits: any) => {
  3. const loading = ref(false)
  4. const tableData = ref<any>([])
  5. const total = ref(0)
  6. const curPage = ref(1)
  7. /**
  8. * 获取表格数据
  9. * @param query - 查询参数
  10. */
  11. const getTableData = (query?: any) => {
  12. loading.value = true
  13. props.crud
  14. ?.getList({
  15. ...query,
  16. pageSize: props.pageSize,
  17. pageNo: curPage.value
  18. })
  19. .then((res: any) => {
  20. tableData.value = res.infos || res.list || res.rows
  21. total.value = res.total || res.totalCount
  22. })
  23. .finally(() => {
  24. loading.value = false
  25. })
  26. }
  27. watch(
  28. curPage,
  29. () => {
  30. getTableData()
  31. },
  32. {
  33. immediate: true
  34. }
  35. )
  36. const refresh = () => {
  37. curPage.value = 1
  38. getTableData()
  39. }
  40. // ============== crud部分开始 ===============
  41. const formRoute = ref<any>(props.formConfig.route)
  42. const formData = ref<any>({})
  43. const formVisible = ref(false)
  44. const doCreate = () => {
  45. emits('click-create')
  46. if (formRoute.value) {
  47. const router = useRouter()
  48. router.push(formRoute.value)
  49. } else {
  50. formData.value = {}
  51. props.formConfig.disabled = false
  52. formVisible.value = true
  53. }
  54. }
  55. const handleCreate = async () => {
  56. if (!props.beforeCreate) {
  57. return doCreate()
  58. }
  59. let result = true
  60. try {
  61. const beforeUploadPromise = props.beforeCreate(formData.value)
  62. result = await beforeUploadPromise
  63. } catch {
  64. result = false
  65. }
  66. if (result === false) {
  67. return
  68. }
  69. doCreate()
  70. }
  71. // 编辑、查看
  72. const useRecordData = (row: any, disabled: boolean) => {
  73. // 此函数用于获取记录数据并设置相应的表单配置
  74. if (formRoute.value) {
  75. const router = useRouter()
  76. router.push(formRoute.value)
  77. } else {
  78. if (props.crud?.getRecord) {
  79. props.crud.getRecord({ id: row.id }).then((res: any) => {
  80. formData.value = res.data
  81. })
  82. } else {
  83. formData.value = { ...row }
  84. }
  85. props.formConfig.disabled = disabled
  86. formVisible.value = true
  87. }
  88. }
  89. const handleUpdate = (row: any) => {
  90. emits('click-edit', row)
  91. useRecordData(row, false)
  92. }
  93. const handleView = (row: any) => {
  94. emits('click-view', row)
  95. useRecordData(row, true)
  96. }
  97. // 删除成功
  98. const deleteSuccess = (data: any) => {
  99. if (data.success || data.code === 200) {
  100. getTableData()
  101. ElMessage({
  102. type: 'success',
  103. message: '删除成功'
  104. })
  105. } else {
  106. ElMessage.error(data.msg)
  107. }
  108. }
  109. const handleDelete = (id: string | number) => {
  110. ElMessageBox.confirm('您确定要删除该项吗', '提示', {
  111. type: 'warning'
  112. }).then(async () => {
  113. const data = await props.crud?.delete({ id })
  114. deleteSuccess(data)
  115. })
  116. }
  117. const multipleSelection = ref<any[]>([])
  118. const handleBatchDelete = () => {
  119. ElMessageBox.confirm('您确定要删除吗', '提示', {
  120. type: 'warning'
  121. }).then(async () => {
  122. if (props.crud.deleteBatch) {
  123. const data = await props.crud?.deleteBatch({
  124. ids: multipleSelection.value.map(item => item.id).join(',')
  125. })
  126. deleteSuccess(data)
  127. } else {
  128. ElMessage({
  129. type: 'error',
  130. message: '未提供deleteBatch方法'
  131. })
  132. }
  133. })
  134. }
  135. // ============== crud部分结束 ===============
  136. const handleFormSuccess = () => {
  137. getTableData()
  138. }
  139. return {
  140. tableData,
  141. total,
  142. curPage,
  143. loading,
  144. formData,
  145. formVisible,
  146. multipleSelection,
  147. getTableData,
  148. refresh,
  149. handleCreate,
  150. handleDelete,
  151. handleBatchDelete,
  152. handleUpdate,
  153. handleView,
  154. handleFormSuccess
  155. }
  156. }