form.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <template>
  2. <xn-form-container
  3. :title="formData.id ? '编辑供货商' : '增加供货商'"
  4. :width="700"
  5. v-model:open="open"
  6. :destroy-on-close="true"
  7. @close="onClose"
  8. >
  9. <a-form ref="formRef" :model="formData" :rules="formRules" :wrapper-col="wrapperCol" :label-col="labelCol">
  10. <a-form-item label="供货商名称:" name="supplierName">
  11. <a-input v-model:value="formData.supplierName" placeholder="请输入供货商名称" allow-clear />
  12. </a-form-item>
  13. <a-form-item label="运输类型:" name="transportType">
  14. <a-radio-group button-style="solid" v-model:value="formData.transportType">
  15. <a-radio-button v-for="transportItem in transportTypeOptions" :key="transportItem.value" :value="transportItem.value" >
  16. {{ transportItem.label }}
  17. </a-radio-button>
  18. </a-radio-group>
  19. </a-form-item>
  20. <a-form-item label="供货商地址:" name="supplierAddress">
  21. <a-input v-model:value="formData.supplierAddress" placeholder="请输入供货商地址" allow-clear />
  22. </a-form-item>
  23. <a-form-item label="联系人:" name="supplierContactName">
  24. <a-input v-model:value="formData.supplierContactName" placeholder="请输入联系人" allow-clear />
  25. </a-form-item>
  26. <a-form-item label="手机号:" name="supplierPhone">
  27. <a-input v-model:value="formData.supplierPhone" placeholder="请输入手机号" allow-clear />
  28. </a-form-item>
  29. <a-form-item label="备注:" name="supplierRemark">
  30. <a-textarea
  31. v-model:value="formData.supplierRemark"
  32. placeholder="请输入备注"
  33. allow-clear
  34. :auto-size="{ minRows: 3, maxRows: 6 }"
  35. />
  36. </a-form-item>
  37. </a-form>
  38. <template #footer>
  39. <a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
  40. <a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
  41. </template>
  42. </xn-form-container>
  43. </template>
  44. <script setup name="supplierForm">
  45. import { cloneDeep } from 'lodash-es'
  46. import { required } from '@/utils/formRules'
  47. import bizSupplierApi from '@/api/biz/bizSupplierApi'
  48. import tool from '@/utils/tool'
  49. // 抽屉状态
  50. const open = ref(false)
  51. const emit = defineEmits({ successful: null })
  52. const formRef = ref()
  53. // 表单数据
  54. const formData = ref({})
  55. const submitLoading = ref(false)
  56. //设置表单样式
  57. const labelCol = ref({ span: 4})
  58. const wrapperCol = ref({ span: 16})
  59. // 运输方式
  60. const transportTypeOptions = tool.dictList('transport_type')
  61. // 打开抽屉
  62. const onOpen = (record) => {
  63. open.value = true
  64. if (record) {
  65. let recordData = cloneDeep(record)
  66. formData.value = Object.assign({}, recordData)
  67. }
  68. }
  69. // 关闭抽屉
  70. const onClose = () => {
  71. formRef.value.resetFields()
  72. formData.value = {}
  73. open.value = false
  74. }
  75. // 默认要校验的
  76. const formRules = {
  77. supplierName: [required('请输入供货商名称')],
  78. supplierContactName:[required('请输入联系人')],
  79. supplierPhone:[required('请输入手机号')],
  80. transportType:[required('请选择运输类型')],
  81. }
  82. // 验证并提交数据
  83. const onSubmit = () => {
  84. formRef.value
  85. .validate()
  86. .then(() => {
  87. submitLoading.value = true
  88. const formDataParam = cloneDeep(formData.value)
  89. bizSupplierApi
  90. .bizSupplierSubmitForm(formDataParam, formDataParam.id)
  91. .then(() => {
  92. onClose()
  93. emit('successful')
  94. })
  95. .finally(() => {
  96. submitLoading.value = false
  97. })
  98. })
  99. .catch(() => {})
  100. }
  101. // 抛出函数
  102. defineExpose({
  103. onOpen
  104. })
  105. </script>