form.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <template>
  2. <xn-form-container
  3. :title="formData.id ? '编辑监测对象' : '新增监测对象'"
  4. :width="'500px'"
  5. :visible="visible"
  6. :destroy-on-close="true"
  7. @close="onClose"
  8. >
  9. <a-form
  10. ref="formRef"
  11. :model="formData"
  12. :rules="formRules"
  13. layout="inline"
  14. :label-col="{ style: { width: '100px', justifyContent: 'end' } }"
  15. >
  16. <a-form-item label="对象名称" name="name">
  17. <a-input v-model:value="formData.name" placeholder="请输入对象名称" allow-clear />
  18. </a-form-item>
  19. <a-form-item label="对象状态" name="status">
  20. <a-select ref="select" v-model:value="formData.status" placeholder="请选择对象状态">
  21. <a-select-option value="1">正常</a-select-option>
  22. <a-select-option value="2">停用</a-select-option>
  23. </a-select>
  24. </a-form-item>
  25. <a-form-item label="报警接收人" name="alarmUsers">
  26. <a-select
  27. v-model:value="formData.alarmUsers"
  28. mode="multiple"
  29. style="width: 100%"
  30. placeholder="请选择报警接收人"
  31. :options="alarmUsersOptions"
  32. :field-names="{ label: 'userName', value: 'openId' }"
  33. ></a-select>
  34. </a-form-item>
  35. <a-form-item label="监测位置区域">
  36. <a-input v-model:value="formData.monitorPoint" placeholder="请输入监测位置区域" allow-clear />
  37. </a-form-item>
  38. </a-form>
  39. <template #footer>
  40. <a-button class="xn-mr8" @click="onClose">取消</a-button>
  41. <a-button type="primary" @click="onSubmit">保存</a-button>
  42. </template>
  43. </xn-form-container>
  44. </template>
  45. <script setup>
  46. import { required } from '@/utils/formRules'
  47. import setupApi from '@/api/basicset/setupApi'
  48. import alarmUserApi from '@/api/coldchain/alarmUserApi'
  49. const alarmUsersOptions = ref([]) // 报警接收人数据
  50. // 默认是关闭状态
  51. const visible = ref(false)
  52. const emit = defineEmits({ successful: null })
  53. const formRef = ref()
  54. // 默认要校验的
  55. const formRules = {
  56. name: [required('请输入对象名称')],
  57. status: [required('请选择对象状态')]
  58. // alarmUsers: [required('请选择报警接收人')]
  59. }
  60. // 表单数据
  61. const formData = ref({ status: '1' })
  62. // 打开抽屉
  63. const onOpen = (record) => {
  64. setalarmUsersData()
  65. visible.value = true
  66. if (record) {
  67. formData.value = Object.assign({}, record)
  68. } else {
  69. formData.value = { status: '1' }
  70. }
  71. }
  72. //获取报警接收人的数据
  73. const setalarmUsersData = () => {
  74. alarmUserApi.alarmUserList().then((res) => {
  75. alarmUsersOptions.value = res || []
  76. })
  77. }
  78. // 关闭抽屉
  79. const onClose = () => {
  80. formRef.value.resetFields()
  81. visible.value = false
  82. }
  83. // 验证并提交数据
  84. const onSubmit = () => {
  85. formRef.value
  86. .validate()
  87. .then(() => {
  88. setupApi.submitForm(formData.value, formData.value.id).then(() => {
  89. onClose()
  90. emit('successful')
  91. })
  92. })
  93. .catch((error) => {
  94. console.log(error)
  95. })
  96. }
  97. // 调用这个函数将子组件的一些数据和方法暴露出去
  98. defineExpose({
  99. onOpen
  100. })
  101. </script>
  102. <style lang="less" scoped>
  103. :deep(.ant-form-item) {
  104. width: 100%;
  105. margin-bottom: 10px;
  106. }
  107. </style>