Dialog.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <!--
  2. * @Author: fxs bjnsfxs@163.com
  3. * @Date: 2024-09-04 11:21:05
  4. * @LastEditors: fxs bjnsfxs@163.com
  5. * @LastEditTime: 2024-09-04 18:21:52
  6. * @FilePath: \Game-Backstage-Management-System\src\components\common\Dialog.vue
  7. * @Description:
  8. *
  9. -->
  10. <script setup lang="ts">
  11. import Form from '../form/Form.vue'
  12. import { useDialog } from '@/hooks/useDialog'
  13. import { onMounted, reactive, ref } from 'vue'
  14. import type { DialogConfig } from '@/types/dialog'
  15. interface DialogProps {
  16. config: DialogConfig
  17. }
  18. // 临时用的close
  19. const { dialogClose2 } = useDialog()
  20. // 对话框ref
  21. const dialogFormRef = ref<InstanceType<typeof Form>>()
  22. // props
  23. const props = withDefaults(defineProps<DialogProps>(), {})
  24. // props中的关于配置的信息
  25. const dialogConfigInfo = props.config
  26. // 游戏配置对话框设置
  27. const dialogConfig = reactive({
  28. dialogVisible: false,
  29. title: '',
  30. formLabelWidth: '150px',
  31. type: 0 // 0 是新增 1是修改
  32. })
  33. // 游戏配置提交
  34. const submiteGameChange = () => {
  35. dialogFormRef.value?.submitFormData()
  36. }
  37. // 改变显示状态
  38. const changeVisable = () => {
  39. dialogConfig.dialogVisible = !dialogConfig.dialogVisible
  40. }
  41. // 表单关闭
  42. const closeDialog = () => {
  43. dialogClose2(dialogFormRef.value, dialogConfig)
  44. }
  45. onMounted(() => {
  46. dialogConfig.title = dialogConfigInfo.title
  47. })
  48. defineExpose({
  49. changeVisable
  50. })
  51. </script>
  52. <template>
  53. <div class="dialog">
  54. <el-dialog
  55. @close="closeDialog"
  56. v-model="dialogConfig.dialogVisible"
  57. :title="dialogConfig.title"
  58. style="width: 40vw"
  59. >
  60. <Form
  61. ref="dialogFormRef"
  62. :config="{
  63. fieldsInfo: dialogConfigInfo.fieldsInfo,
  64. reqConfig: dialogConfigInfo.reqConfig,
  65. rules: dialogConfigInfo.rules
  66. }"
  67. ></Form>
  68. <template #footer>
  69. <div class="dialog-footer">
  70. <el-button type="primary" @click="submiteGameChange()"> 确认 </el-button>
  71. <el-button @click="closeDialog">取消</el-button>
  72. </div>
  73. </template>
  74. </el-dialog>
  75. </div>
  76. </template>
  77. <style scoped></style>