form.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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="licenseNumber">
  11. <a-input v-model:value="formData.licenseNumber" placeholder="请输入车牌号" allow-clear />
  12. </a-form-item>
  13. <a-form-item label="司机信息:" name="driverId">
  14. <xn-user-selector
  15. :org-tree-api="selectorApiFunction.orgTreeApi"
  16. :user-page-api="selectorApiFunction.userPageApi"
  17. :radio-model="true"
  18. placeholder="请选择司机"
  19. v-model:value="formData.driverId"
  20. />
  21. </a-form-item>
  22. <a-form-item label="是否过磅:" name="isWeigh">
  23. <a-radio-group button-style="solid" v-model:value="formData.isWeigh">
  24. <a-radio-button value="1">
  25. </a-radio-button>
  26. <a-radio-button value="2">
  27. </a-radio-button>
  28. </a-radio-group>
  29. </a-form-item>
  30. <a-form-item label="备注:" name="remark">
  31. <a-textarea v-model:value="formData.remark" placeholder="请输入备注" allow-clear />
  32. </a-form-item>
  33. </a-form>
  34. <template #footer>
  35. <a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
  36. <a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
  37. </template>
  38. </xn-form-container>
  39. </template>
  40. <script setup name="bizAppointmentRecordForm">
  41. import { cloneDeep } from 'lodash-es'
  42. import { required } from '@/utils/formRules'
  43. import bizOtherAppointmentApi from '@/api/biz/bizOtherAppointmentApi'
  44. import userApi from '@/api/biz/bizUserApi'
  45. // 抽屉状态
  46. const open = ref(false)
  47. const emit = defineEmits({ successful: null })
  48. const formRef = ref()
  49. // 表单数据
  50. const formData = ref({})
  51. const submitLoading = ref(false)
  52. const orderIdList = ref()
  53. const timeIdList = ref()
  54. const overIdList = ref()
  55. const loadPointIdList = ref()
  56. const loadTimeIdList = ref()
  57. //设置表单样式
  58. const labelCol = ref({ span: 5})
  59. const wrapperCol = ref({ span: 16})
  60. // 打开抽屉
  61. const onOpen = (record) => {
  62. open.value = true
  63. if (record) {
  64. let recordData = cloneDeep(record)
  65. formData.value = Object.assign({}, recordData)
  66. }
  67. }
  68. // 传递设计器需要的API
  69. const selectorApiFunction = {
  70. orgTreeApi: (param) => {
  71. return userApi.userOrgTreeSelector(param).then((data) => {
  72. return Promise.resolve(data)
  73. })
  74. },
  75. userPageApi: (param) => {
  76. param.roleName = '司机'
  77. return userApi.userSelectorByRole(param).then((data) => {
  78. debugger
  79. return Promise.resolve(data)
  80. })
  81. }
  82. }
  83. // 关闭抽屉
  84. const onClose = () => {
  85. formRef.value.resetFields()
  86. formData.value = {}
  87. open.value = false
  88. }
  89. // 默认要校验的
  90. const formRules = {
  91. licenseNumber: [required('请输入车牌号')],
  92. driverId: [required('请选择司机')],
  93. isWeigh: [required('请选择是否过磅')]
  94. }
  95. // 验证并提交数据
  96. const onSubmit = () => {
  97. formRef.value
  98. .validate()
  99. .then(() => {
  100. submitLoading.value = true
  101. const formDataParam = cloneDeep(formData.value)
  102. debugger
  103. bizOtherAppointmentApi
  104. .bizOtherAppointmentSubmitForm(formDataParam, formDataParam.id)
  105. .then(() => {
  106. onClose()
  107. emit('successful')
  108. })
  109. .finally(() => {
  110. submitLoading.value = false
  111. })
  112. })
  113. .catch(() => {})
  114. }
  115. // 抛出函数
  116. defineExpose({
  117. onOpen
  118. })
  119. </script>