customization-content.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <template>
  2. <el-button text @click="table = true">Open Drawer with nested table</el-button>
  3. <el-button text @click="dialog = true">Open Drawer with nested form</el-button>
  4. <el-drawer v-model="table" title="I have a nested table inside!" direction="rtl" size="50%">
  5. <el-table :data="gridData">
  6. <el-table-column property="date" label="Date" width="150" />
  7. <el-table-column property="name" label="Name" width="200" />
  8. <el-table-column property="address" label="Address" />
  9. </el-table>
  10. </el-drawer>
  11. <el-drawer ref="drawerRef" v-model="dialog" title="I have a nested form inside!" :before-close="handleClose" direction="ltr" custom-class="demo-drawer">
  12. <div class="demo-drawer__content">
  13. <el-form :model="form">
  14. <el-form-item label="Name" :label-width="formLabelWidth">
  15. <el-input v-model="form.name" autocomplete="off" />
  16. </el-form-item>
  17. <el-form-item label="Area" :label-width="formLabelWidth">
  18. <el-select v-model="form.region" placeholder="Please select activity area">
  19. <el-option label="Area1" value="shanghai" />
  20. <el-option label="Area2" value="beijing" />
  21. </el-select>
  22. </el-form-item>
  23. </el-form>
  24. <div class="demo-drawer__footer">
  25. <el-button @click="cancelForm">Cancel</el-button>
  26. <el-button type="primary" :loading="loading" @click="onClick">{{ loading ? 'Submitting ...' : 'Submit' }}</el-button>
  27. </div>
  28. </div>
  29. </el-drawer>
  30. </template>
  31. <script lang="ts" setup>
  32. import { reactive, ref } from 'vue'
  33. import { ElMessageBox } from 'element-plus'
  34. import type { ElDrawer } from 'element-plus'
  35. const formLabelWidth = '80px'
  36. let timer
  37. const table = ref(false)
  38. const dialog = ref(false)
  39. const loading = ref(false)
  40. const form = reactive({
  41. name: '',
  42. region: '',
  43. date1: '',
  44. date2: '',
  45. delivery: false,
  46. type: [],
  47. resource: '',
  48. desc: '',
  49. })
  50. const gridData = [
  51. {
  52. date: '2016-05-02',
  53. name: 'Peter Parker',
  54. address: 'Queens, New York City',
  55. },
  56. {
  57. date: '2016-05-04',
  58. name: 'Peter Parker',
  59. address: 'Queens, New York City',
  60. },
  61. {
  62. date: '2016-05-01',
  63. name: 'Peter Parker',
  64. address: 'Queens, New York City',
  65. },
  66. {
  67. date: '2016-05-03',
  68. name: 'Peter Parker',
  69. address: 'Queens, New York City',
  70. },
  71. ]
  72. const drawerRef = ref<InstanceType<typeof ElDrawer>>()
  73. const onClick = () => {
  74. drawerRef.value!.close()
  75. }
  76. const handleClose = done => {
  77. if (loading.value) {
  78. return
  79. }
  80. ElMessageBox.confirm('Do you want to submit?')
  81. .then(() => {
  82. loading.value = true
  83. timer = setTimeout(() => {
  84. done()
  85. // 动画关闭需要一定的时间
  86. setTimeout(() => {
  87. loading.value = false
  88. }, 400)
  89. }, 2000)
  90. })
  91. .catch(() => {
  92. // catch error
  93. })
  94. }
  95. const cancelForm = () => {
  96. loading.value = false
  97. dialog.value = false
  98. clearTimeout(timer)
  99. }
  100. </script>