CardList.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <script setup lang="ts">
  2. import type { BasicForm, ICRUD } from '@/types/form'
  3. const CRUD: ICRUD = {
  4. create(data: any) {
  5. return new Promise(resolve => console.log(data))
  6. },
  7. update(data: any) {
  8. return new Promise(resolve => console.log(data))
  9. },
  10. getList() {
  11. return new Promise(resolve => {
  12. resolve({
  13. list: [
  14. {
  15. id: 1,
  16. image: 'https://shadow.elemecdn.com/app/element/hamburger.9cf7b091-55e9-11e9-a976-7f4d0b07eef6.png',
  17. name: '轮播1'
  18. },
  19. {
  20. id: 2,
  21. image: 'https://shadow.elemecdn.com/app/element/hamburger.9cf7b091-55e9-11e9-a976-7f4d0b07eef6.png',
  22. name: '轮播2'
  23. }
  24. ],
  25. total: 2
  26. })
  27. })
  28. },
  29. delete(data: any) {
  30. return new Promise(resolve => console.log(data))
  31. },
  32. deleteBatch(data: any) {
  33. return new Promise(resolve => console.log(data))
  34. }
  35. }
  36. const formConfig = reactive<BasicForm>({
  37. span: 24,
  38. formItems: [
  39. {
  40. label: '图片',
  41. value: '',
  42. name: 'image',
  43. type: 'imageUpload',
  44. rules: [{ required: true, message: '请上传图片', trigger: 'blur' }]
  45. },
  46. {
  47. label: '标题',
  48. value: '',
  49. name: 'name',
  50. type: 'input',
  51. search: true
  52. }
  53. // {
  54. // label: '跳转地址',
  55. // value: '',
  56. // name: 'src',
  57. // type: 'input'
  58. // }
  59. ]
  60. })
  61. const cardList = ref<any>()
  62. const handleEdit = (item: any) => {
  63. cardList.value.handleUpdate(item)
  64. }
  65. const handleDelete = (item: any) => {
  66. cardList.value.handleDelete(item.id)
  67. }
  68. </script>
  69. <template>
  70. <pro-card-list :crud="CRUD" :formConfig="formConfig" ref="cardList">
  71. <template #default="{ item }">
  72. <img :src="item.image" class="block w-full h-160px" />
  73. <el-row class="text-center p-10px card-operate">
  74. <el-col :span="12">
  75. <el-button link icon="edit" @click="handleEdit(item)">编辑</el-button>
  76. </el-col>
  77. <el-col :span="12">
  78. <el-button link icon="delete" @click="handleDelete(item)">删除</el-button>
  79. </el-col>
  80. </el-row>
  81. </template>
  82. </pro-card-list>
  83. </template>
  84. <style lang="scss" scoped>
  85. .card-operate {
  86. border: 1px solid var(--el-border-color-light);
  87. }
  88. </style>