dialog.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <template>
  2. <el-dialog
  3. :model-value="visible"
  4. title="新建人员"
  5. @closed="onClose"
  6. @open="onOpen"
  7. :destroy-on-close="true"
  8. :append-to-body="true"
  9. >
  10. <el-form :model="formUserData" ref="formRef" :rules="rules" label-position="left">
  11. <el-form-item label="人员名称" prop="userName">
  12. <el-input v-model="formUserData.userName"></el-input>
  13. </el-form-item>
  14. <el-form-item label="人员代码" prop="userCode">
  15. <CacpAutocomplete v-model="formUserData.userCode"></CacpAutocomplete>
  16. </el-form-item>
  17. </el-form>
  18. <template #footer>
  19. <div class="dialog-footer">
  20. <el-button @click="onClose">取消</el-button>
  21. <el-button type="primary" @click="onUserSubmit">确定</el-button>
  22. </div>
  23. </template>
  24. </el-dialog>
  25. </template>
  26. <script lang="ts" setup>
  27. import { cloneDeep } from 'lodash-es'
  28. import { ref } from 'vue'
  29. import type { DialogInfo } from './types'
  30. import { CacpAutocomplete } from '@cacp/ui'
  31. const props = defineProps<{
  32. visible: boolean
  33. info: DialogInfo
  34. }>()
  35. const emits = defineEmits<{
  36. (e: 'on-close'): void
  37. (e: 'on-save', info: DialogInfo): void
  38. }>()
  39. const formUserData = ref({ id: '', userName: '', userCode: '' })
  40. const formRef = ref()
  41. const rules = {
  42. userName: [{ required: true, message: '请输入人员名称' }],
  43. userCode: [{ required: true, message: '请输入人员代码' }]
  44. }
  45. async function onUserSubmit() {
  46. if (await formRef.value?.validate()) {
  47. emits('on-save', formUserData.value)
  48. }
  49. }
  50. function onOpen() {
  51. formUserData.value = cloneDeep(props.info)
  52. }
  53. function onClose() {
  54. emits('on-close')
  55. }
  56. </script>