editForm.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <template>
  2. <xn-form-container
  3. :title="'编辑提货配置'"
  4. :width="700"
  5. v-model:open="open"
  6. :destroy-on-close="true"
  7. @close="onClose"
  8. >
  9. <a-descriptions :column="4" size="middle" bordered class="mb-2" :label-style="labelStyle" :contentStyle="contentStyle">
  10. <a-descriptions-item label="货品编码" :span="4">{{ formData.goodsCode }}</a-descriptions-item>
  11. <a-descriptions-item label="货品信息" :span="4">{{ formData.goodsName }} ({{ formData.goodsModel }})</a-descriptions-item>
  12. </a-descriptions>
  13. <a-form ref="formRef" :model="formData" :rules="formRules" :wrapper-col="wrapperCol" :label-col="labelCol">
  14. <a-form-item label="提货开始时间:" name="confStartTime">
  15. <a-date-picker v-model:value="formData.confStartTime" value-format="YYYY-MM-DD HH:mm" show-time :disabled-date="disabledDate" style="width: 100%" />
  16. </a-form-item>
  17. <a-form-item label="提货结束时间:" name="confEndTime">
  18. <a-date-picker v-model:value="formData.confEndTime" value-format="YYYY-MM-DD HH:mm" show-time :disabled-date="disabledDate" style="width: 100%" />
  19. </a-form-item>
  20. <a-form-item label="最大提货重量(吨):" name="confWeight">
  21. <a-input-number v-model:value="formData.confWeight" :min="formData.usedWeight" style="width: 100%;" placeholder="请输入最大提货重量" allow-clear />
  22. </a-form-item>
  23. </a-form>
  24. <template #footer>
  25. <a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
  26. <a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
  27. </template>
  28. </xn-form-container>
  29. </template>
  30. <script setup name="goodsConfForm">
  31. import { cloneDeep } from 'lodash-es'
  32. import { message } from 'ant-design-vue'
  33. import { required } from '@/utils/formRules'
  34. import goodsConfApi from '@/api/biz/goodsConfApi'
  35. import dayjs from 'dayjs'
  36. // 抽屉状态
  37. const open = ref(false)
  38. const emit = defineEmits({ successful: null })
  39. const formRef = ref()
  40. // 表单数据
  41. const formData = ref({})
  42. const submitLoading = ref(false)
  43. //设置表单样式
  44. const labelCol = ref({ span: 5})
  45. const wrapperCol = ref({ span: 16})
  46. // 当前时间
  47. const nowTime = ref(new Date())
  48. // 禁用时间范围
  49. const disabledDate = (current) => {
  50. return (
  51. (current && current < dayjs(nowTime.value).startOf('time'))
  52. )
  53. }
  54. // 打开抽屉
  55. const onOpen = (record) => {
  56. open.value = true
  57. if (record) {
  58. let recordData = cloneDeep(record)
  59. formData.value = Object.assign({}, recordData)
  60. }
  61. }
  62. // 关闭抽屉
  63. const onClose = () => {
  64. formRef.value.resetFields()
  65. formData.value = {}
  66. open.value = false
  67. }
  68. // 默认要校验的
  69. const formRules = {
  70. confStartTime: [required('请选择提货开始时间')],
  71. confEndTime: [required('请选择提货结束时间')],
  72. confWeight: [required('请输入最大提货重量')],
  73. }
  74. // 验证并提交数据
  75. const onSubmit = () => {
  76. formRef.value
  77. .validate()
  78. .then(() => {
  79. submitLoading.value = true
  80. const formDataParam = cloneDeep(formData.value)
  81. // 判断开始和结束时间
  82. let confStartTime = new Date(formDataParam.confStartTime+":00")
  83. let confEndTime = new Date(formDataParam.confEndTime+":00")
  84. if(confStartTime > confEndTime){
  85. message.error('结束时间不得小于开始时间!')
  86. return
  87. }else{
  88. // 重量 吨 转成 公斤
  89. let confWeight = Number(formDataParam.confWeight) * 1000
  90. formDataParam.confWeight = confWeight;
  91. goodsConfApi
  92. .goodsConfSubmitForm(formDataParam, formDataParam.id)
  93. .then(() => {
  94. onClose()
  95. emit('successful')
  96. })
  97. .finally(() => {
  98. submitLoading.value = false
  99. })
  100. }
  101. })
  102. .catch(() => {})
  103. }
  104. // 抛出函数
  105. defineExpose({
  106. onOpen
  107. })
  108. </script>