Biz.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <route lang="yaml">
  2. meta:
  3. enabled: false
  4. </route>
  5. <script lang="ts" setup>
  6. import type { FormInstance, FormRules } from 'element-plus'
  7. import { createBiz, getBizById, updateBiz } from '@/api/biz/bizApi'
  8. const emit = defineEmits(['success'])
  9. const formRef = ref<FormInstance>()
  10. const formRules = ref<FormRules>({
  11. bizTitle: [
  12. { required: true, message: '请输入标题', trigger: 'blur' },
  13. ],
  14. bizDesc: [
  15. { required: false, message: '请输入描述', trigger: 'blur' },
  16. ],
  17. })
  18. const state = reactive({
  19. title: '',
  20. dialogVisible: false,
  21. loading: false,
  22. formData: {
  23. bizId: 1,
  24. bizTitle: '',
  25. bizDesc: '',
  26. },
  27. actionType: 1,
  28. })
  29. onMounted(() => {})
  30. const getData = async (bizId: number) => {
  31. state.loading = true
  32. const { data } = await getBizById(bizId)
  33. state.loading = false
  34. state.formData = data
  35. }
  36. function onSubmit() {
  37. formRef.value && formRef.value.validate(async (valid) => {
  38. if (valid) {
  39. if (state.actionType === 1) {
  40. await createBiz(state.formData)
  41. state.dialogVisible = false
  42. emit('success')
  43. }
  44. else {
  45. await updateBiz(state.formData)
  46. state.dialogVisible = false
  47. emit('success')
  48. }
  49. }
  50. })
  51. }
  52. function onCancel() {
  53. state.dialogVisible = false
  54. }
  55. function resetFormData() {
  56. state.formData = {
  57. bizId: -1,
  58. bizTitle: '',
  59. bizDesc: '',
  60. }
  61. }
  62. defineExpose({
  63. showAddModel() {
  64. resetFormData()
  65. state.title = '新增业务'
  66. state.actionType = 1
  67. state.dialogVisible = true
  68. },
  69. showEditModel(bizId: any) {
  70. resetFormData()
  71. state.title = '编辑业务'
  72. state.actionType = 2
  73. state.dialogVisible = true
  74. getData(bizId)
  75. },
  76. })
  77. </script>
  78. <template>
  79. <div>
  80. <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
  81. <div v-loading="state.loading">
  82. <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
  83. <el-form-item label="业务名称" prop="bizTitle">
  84. <el-input v-model="state.formData.bizTitle" placeholder="请输入标题" />
  85. </el-form-item>
  86. <el-form-item label="简要说明" prop="bizDesc">
  87. <el-input v-model="state.formData.bizDesc" type="textarea" rows="10" placeholder="请输入标题" />
  88. </el-form-item>
  89. </el-form>
  90. </div>
  91. <template #footer>
  92. <el-button size="large" @click="onCancel">
  93. 取消
  94. </el-button>
  95. <el-button type="primary" size="large" @click="onSubmit">
  96. 保存
  97. </el-button>
  98. </template>
  99. </el-dialog>
  100. </div>
  101. </template>