userForm.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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="userId">
  11. <xn-user-selector
  12. :org-tree-api="selectorApiFunction.orgTreeApi"
  13. :user-page-api="selectorApiFunction.userPageApi"
  14. :radio-model="true"
  15. placeholder="请选择装货员"
  16. v-model:value="formData.userId"
  17. />
  18. </a-form-item>
  19. </a-form>
  20. <template #footer>
  21. <a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
  22. <a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
  23. </template>
  24. </xn-form-container>
  25. </template>
  26. <script setup name="bizLoadUserForm">
  27. import { cloneDeep } from 'lodash-es'
  28. import { required } from '@/utils/formRules'
  29. import bizLoadUserApi from '@/api/biz/bizLoadUserApi'
  30. import userApi from '@/api/biz/bizUserApi'
  31. // 抽屉状态
  32. const open = ref(false)
  33. const emit = defineEmits({ successful: null })
  34. const formRef = ref()
  35. // 表单数据
  36. const formData = ref({})
  37. const submitLoading = ref(false)
  38. //设置表单样式
  39. const labelCol = ref({ span: 4})
  40. const wrapperCol = ref({ span: 16})
  41. // 打开抽屉
  42. const onOpen = (record, pointId) => {
  43. open.value = true
  44. formData.value.pointId = pointId
  45. if (record) {
  46. let recordData = cloneDeep(record)
  47. formData.value = Object.assign({}, recordData)
  48. }
  49. }
  50. // 关闭抽屉
  51. const onClose = () => {
  52. formRef.value.resetFields()
  53. formData.value = {}
  54. open.value = false
  55. }
  56. // 默认要校验的
  57. const formRules = {
  58. userId: [required('请选择人员')],
  59. }
  60. // 传递设计器需要的API
  61. const selectorApiFunction = {
  62. orgTreeApi: (param) => {
  63. return userApi.userOrgTreeSelector(param).then((data) => {
  64. return Promise.resolve(data)
  65. })
  66. },
  67. userPageApi: (param) => {
  68. param.roleName = '发货'
  69. return userApi.userSelectorByRole(param).then((data) => {
  70. return Promise.resolve(data)
  71. })
  72. }
  73. }
  74. // 验证并提交数据
  75. const onSubmit = () => {
  76. formRef.value
  77. .validate()
  78. .then(() => {
  79. submitLoading.value = true
  80. const formDataParam = cloneDeep(formData.value)
  81. bizLoadUserApi
  82. .bizLoadUserSubmitForm(formDataParam, formDataParam.id)
  83. .then(() => {
  84. onClose()
  85. emit('successful')
  86. })
  87. .finally(() => {
  88. submitLoading.value = false
  89. })
  90. })
  91. .catch(() => {})
  92. }
  93. // 抛出函数
  94. defineExpose({
  95. onOpen
  96. })
  97. </script>