category-modal.vue 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <script setup lang="ts">
  2. import { ref , watch } from "vue"
  3. import { httpCatList } from "/@/api/serviceParam/supplierCat"
  4. import { useVModel } from "@vueuse/core"
  5. import { useTask } from "/@/hooks/core"
  6. import { ElMessage } from "element-plus"
  7. const initialParameter = { page: 1, size: 10, level: 3, total: 0 , search: '', pid: '' }
  8. const props = defineProps<{ visible: boolean }>()
  9. const emit = defineEmits(['change'])
  10. const selection = ref<any[]>([])
  11. const parameter = ref({ ...initialParameter })
  12. const visible = useVModel(props, 'visible')
  13. const categoryTask = useTask({ initialData: [], success(data: any){ parameter.value.total = data.count }})
  14. const requestCategorylist = () => categoryTask.run(httpCatList(parameter.value))
  15. function onSubmit(){
  16. if(selection.value.length === 0){
  17. ElMessage.warning('至少选择一个分类')
  18. return
  19. }
  20. visible.value = false
  21. emit('change', selection.value)
  22. }
  23. watch(() => visible.value, () => {
  24. if(!visible.value) { return }
  25. requestCategorylist()
  26. })
  27. </script>
  28. <template>
  29. <ElDialog v-model="visible" title="添加分类" center @close="parameter = {...initialParameter}">
  30. <div class="flex flex-col" v-loading="categoryTask.loading">
  31. <div class="flex mb-[10px]">
  32. <ElInput placeholder="分类名" v-model="parameter.search" clearable @change="requestCategorylist" />
  33. </div>
  34. <ElTable
  35. border
  36. size="small"
  37. :data="categoryTask.data.list"
  38. @selection-change="val => selection = val"
  39. >
  40. <ElTableColumn type="selection" width="40px" />
  41. <ElTableColumn type="index" width="50px" label="序号" />
  42. <ElTableColumn prop="search" label="分类名称" show-overflow-tooltip />
  43. </ElTable>
  44. <div class="flex justify-between mt-[10px]">
  45. <ElPagination
  46. v-model:current-page="parameter.page"
  47. v-model:page-size="parameter.size"
  48. @size-change="requestCategorylist"
  49. @current-change="requestCategorylist"
  50. :page-sizes="[10, 30, 50, 100]"
  51. layout="sizes, prev, pager, next"
  52. :total="parameter.total"
  53. :size="'small'"
  54. background
  55. />
  56. <ElButton
  57. type="primary"
  58. @click="onSubmit"
  59. >保存</ElButton>
  60. </div>
  61. </div>
  62. </ElDialog>
  63. </template>