sign.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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="unloadWeight">
  11. <a-input-number v-model:value="formData.unloadWeight" style="width:90%" :precision="2" :min="0.01" :max="999999" placeholder="请输入卸货重量" allow-clear /><span style="margin-left:10px;">吨</span>
  12. </a-form-item>
  13. <!-- <a-form-item label="单据图片:" name="licensePlate">
  14. <a-input v-model:value="formData.licensePlate" placeholder="请输入车牌号码" allow-clear />
  15. </a-form-item>-->
  16. <a-form-item label="上传图片:" name="filePathList" :rules="[{ required: true, message: '请上传图片' }]">
  17. <a-upload
  18. v-model:file-list="fileList"
  19. class="avatar-uploader"
  20. list-type="picture"
  21. :show-upload-list="true"
  22. :custom-request="customRequest"
  23. :remove="file => removeOtherFile(file,index)"
  24. :before-upload="beforeUpload"
  25. accept="image/png, image/jpeg, image/jpg"
  26. >
  27. <a-button>
  28. <upload-outlined></upload-outlined>
  29. upload
  30. </a-button>
  31. </a-upload>
  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="bizRecordForm">
  41. import { cloneDeep } from 'lodash-es'
  42. import { required } from '@/utils/formRules'
  43. import bizRecordApi from '@/api/biz/bizRecordApi'
  44. import fileApi from '@/api/dev/fileApi'
  45. import sysConfig from "@/config";
  46. import {message, Modal, Upload } from 'ant-design-vue';
  47. // 抽屉状态
  48. const open = ref(false)
  49. const emit = defineEmits({ successful: null })
  50. const formRef = ref()
  51. // 表单数据
  52. const formData = ref({filePathList:[],fileNameList:[]})
  53. const submitLoading = ref(false)
  54. //设置表单样式
  55. const labelCol = ref({ span: 5})
  56. const wrapperCol = ref({ span: 16})
  57. const fileList = ref([])
  58. // 打开抽屉
  59. const onOpen = (record) => {
  60. open.value = true
  61. if (record) {
  62. let recordData = cloneDeep(record)
  63. formData.value = Object.assign({}, recordData)
  64. formData.value.id = record.recordId
  65. formData.value.filePathList = []
  66. formData.value.fileNameList = []
  67. fileList.value = []
  68. if(formData.value.unloadImg!=null){
  69. for (var i=0;i<formData.value.unloadImg.split(',').length;i++){
  70. fileList.value.push({
  71. name: formData.value.unloadName.split(',')[i],
  72. url:sysConfig.PREVIEW_PATH + formData.value.unloadImg.split(',')[i]
  73. })
  74. formData.value.filePathList.push(formData.value.unloadImg.split(",")[i])
  75. formData.value.fileNameList.push(formData.value.unloadName.split(",")[i])
  76. }
  77. }
  78. }
  79. }
  80. // 关闭抽屉
  81. const onClose = () => {
  82. formRef.value.resetFields()
  83. formData.value = {}
  84. formData.value.fileNameList = []
  85. formData.value.filePathList = []
  86. fileList.value = []
  87. open.value = false
  88. }
  89. // 默认要校验的
  90. const formRules = {
  91. unloadWeight: [required('请输入卸货重量')],
  92. }
  93. // 验证并提交数据
  94. const onSubmit = () => {
  95. formRef.value
  96. .validate()
  97. .then(() => {
  98. submitLoading.value = true
  99. const formDataParam = cloneDeep(formData.value)
  100. console.log("formData:"+formDataParam.filePahList)
  101. bizRecordApi
  102. .updateWeight(formDataParam)
  103. .then(() => {
  104. onClose()
  105. emit('successful')
  106. })
  107. .finally(() => {
  108. submitLoading.value = false
  109. })
  110. })
  111. .catch(() => {})
  112. }
  113. const customRequest = (data) => {
  114. console.log("data:"+JSON.stringify(data.file.name))
  115. //保存图片
  116. const fileData = new FormData()
  117. fileData.append('file', data.file)
  118. fileApi
  119. .uploadImgMap(fileData)
  120. .then((result) => {
  121. formData.value.filePathList.push(result.imageFile)
  122. formData.value.fileNameList.push(data.file.name)
  123. }).finally(()=>{
  124. data.onSuccess()
  125. })
  126. }
  127. //文件删除
  128. const removeOtherFile = (file) => {
  129. fileList.value.forEach((item,index)=>{
  130. console.log(item.name+"======="+file.name)
  131. if(item.name === file.name){
  132. fileList.value.splice(index, 1);
  133. formData.value.filePathList.splice(index,1)
  134. formData.value.fileNameList.splice(index,1)
  135. }
  136. })
  137. }
  138. const beforeUpload = (file) => {
  139. const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'
  140. if (!isJpgOrPng) {
  141. message.error('请上传JPG/PNG格式的图片!')
  142. }
  143. return isJpgOrPng || Upload.LIST_IGNORE
  144. }
  145. // 抛出函数
  146. defineExpose({
  147. onOpen
  148. })
  149. </script>