deliver.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <template>
  2. <el-dialog :title="title" :visible.sync="dialogFormVisible" width="500px">
  3. <el-form ref="form" label-position="top" :model="form" :rules="rules">
  4. <el-row :gutter="20">
  5. <!-- <el-col :span="24">
  6. <el-form-item label="附件" prop="fileUrl">
  7. <el-upload
  8. ref="uploadRef"
  9. action="#"
  10. :before-upload="
  11. (file) => {
  12. return beforeAvatarUpload(file)
  13. }
  14. "
  15. :http-request="uploadRequest"
  16. :limit="1">
  17. <el-button size="mini" type="primary">点击上传</el-button>
  18. </el-upload>
  19. <el-button v-show="form.fileUrl != ''" @click="showFile(form.fileUrl)">查看</el-button>
  20. </el-form-item>
  21. </el-col> -->
  22. <el-col :span="24">
  23. <el-form-item label="快递名称" prop="expressName">
  24. <el-input v-model="form.expressName" placeholder="请输入快递名称" />
  25. </el-form-item>
  26. </el-col>
  27. <el-col :span="24">
  28. <el-form-item label="快递单号" prop="expressCode">
  29. <el-input v-model="form.expressCode" placeholder="请输入快递单号" />
  30. </el-form-item>
  31. </el-col>
  32. <el-col :span="24">
  33. <el-form-item label="选择预计到货日期" prop="date">
  34. <el-date-picker
  35. v-model="form.date"
  36. placeholder="请选择日期"
  37. style="width: 100%"
  38. type="date"
  39. value-format="yyyy-MM-dd HH:mm:ss" />
  40. </el-form-item>
  41. </el-col>
  42. <el-col :span="24">
  43. <el-form-item label="选择实际发货时间" prop="realDeliveryTime">
  44. <el-date-picker
  45. v-model="form.realDeliveryTime"
  46. placeholder="请选择日期"
  47. style="width: 100%"
  48. type="date"
  49. value-format="yyyy-MM-dd HH:mm:ss" />
  50. </el-form-item>
  51. </el-col>
  52. <!-- <el-col :span="24">
  53. <el-form-item label="备注" prop="remark">
  54. <el-input v-model="form.remark" placeholder="请输入备注" />
  55. </el-form-item>
  56. </el-col> -->
  57. </el-row>
  58. </el-form>
  59. <template #footer>
  60. <el-button @click="dialogFormVisible = false">取 消</el-button>
  61. <el-button type="primary" @click="deliver">确 定</el-button>
  62. </template>
  63. </el-dialog>
  64. </template>
  65. <script>
  66. import deliverWorkApi from '@/api/work/deliverWork'
  67. import to from 'await-to-js'
  68. import axios from 'axios'
  69. import asyncUploadFile from '@/utils/uploadajax'
  70. export default {
  71. name: 'Deliver',
  72. components: {},
  73. props: {
  74. // orderStatusOptions: {
  75. // type: Array,
  76. // default: () => [],
  77. // },
  78. },
  79. data() {
  80. return {
  81. form: {
  82. date: '',
  83. realDeliveryTime: '',
  84. expressName: '',
  85. expressCode: '',
  86. remark: '',
  87. },
  88. progress: {},
  89. rules: {
  90. expressCode: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  91. expressName: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  92. date: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  93. realDeliveryTime: [{ required: true, message: '不能为空', trigger: ['blur', 'change'] }],
  94. },
  95. dialogFormVisible: false,
  96. planId: 0,
  97. title: '',
  98. fileSettings: {
  99. // 文件配置信息
  100. fileSize: 52428800,
  101. fileTypes: '.pdf,.doc,.docx,.zip,.xls,.xlsx,.rar,.jpg,.jpeg,.gif,.png,.jfif,.txt',
  102. pictureSize: 52428800,
  103. pictureTypes: '.jpg,.jpeg,.gif,.png,.jfif,.txt',
  104. types: '.pdf,.doc,.docx,.zip,.xls,.xlsx,.rar,.jpg,.jpeg,.gif,.png,.jfif,.mp4,.txt',
  105. videoSize: 104857600,
  106. videoType: '.mp4',
  107. },
  108. }
  109. },
  110. mounted() {},
  111. methods: {
  112. // 打开弹窗
  113. async open(row) {
  114. let flag = false
  115. await deliverWorkApi
  116. .list({ deliverProgressId: row.id })
  117. .then((res) => {
  118. if (res.data.list && res.data.list.length > 0) {
  119. if (res.data.list[0].progressStatus != '30') {
  120. flag = true
  121. }
  122. }
  123. })
  124. .catch((err) => {
  125. console.error(err)
  126. })
  127. if (flag) {
  128. this.$message.warning('组装任务单未完成,不可发货')
  129. return
  130. }
  131. this.title = '发货'
  132. this.progress = row
  133. this.form.date = ''
  134. this.form.realDeliveryTime = ''
  135. this.form.expressName = ''
  136. this.form.expressCode = ''
  137. this.form.remark = ''
  138. if (this.$refs['form']) {
  139. this.$refs['form'].resetFields()
  140. }
  141. if (this.$refs.uploadRef) {
  142. this.$refs.uploadRef.clearFiles() //去掉文件列表
  143. }
  144. this.dialogFormVisible = true
  145. },
  146. // 上传附件
  147. beforeAvatarUpload(file) {
  148. let flag1 = file.size < this.fileSettings.fileSize
  149. if (!flag1) {
  150. this.$message.warning('文件过大,请重新选择!')
  151. return false
  152. }
  153. let flag2 = this.fileSettings.fileTypes.split(',').includes('.' + file.name.split('.').pop())
  154. if (!flag2) {
  155. this.$message.warning('文件类型不符合,请重新选择!')
  156. return false
  157. }
  158. return true
  159. },
  160. // 上传
  161. uploadRequest(option) {
  162. let _this = this
  163. let url = process.env.VUE_APP_UPLOAD_WEED
  164. axios
  165. .post(url)
  166. .then(function (res) {
  167. if (res.data && res.data.fid && res.data.fid !== '') {
  168. option.action = `${process.env.VUE_APP_PROTOCOL}${res.data.publicUrl}/${res.data.fid}`
  169. asyncUploadFile(option).then(() => {
  170. _this.form.fileName = option.file.name
  171. _this.form.fileUrl = `${process.env.VUE_APP_PROTOCOL}${res.data.publicUrl}/${res.data.fid}` // 资料存储url
  172. })
  173. } else {
  174. _this.$message({
  175. type: 'warning',
  176. message: '未上传成功!请刷新界面重新上传!',
  177. })
  178. }
  179. })
  180. .catch(function () {
  181. _this.$message({
  182. type: 'warning',
  183. message: '未上传成功!请重新上传!',
  184. })
  185. })
  186. },
  187. // 查看附件
  188. showFile(url) {
  189. let fileName = this.form.fileName
  190. const xhr = new XMLHttpRequest()
  191. xhr.open('GET', url, true)
  192. xhr.responseType = 'blob' // 通过文件下载url拿到对应的blob对象
  193. xhr.onload = () => {
  194. if (xhr.status === 200) {
  195. let link = document.createElement('a')
  196. let body = document.querySelector('body')
  197. link.href = window.URL.createObjectURL(xhr.response)
  198. link.download = fileName
  199. link.click()
  200. this.$message.success('下载成功')
  201. body.removeChild(link)
  202. window.URL.revokeObjectURL(link.href)
  203. }
  204. }
  205. xhr.send()
  206. },
  207. // 完成
  208. async deliver() {
  209. this.$refs['form'].validate(async (valid) => {
  210. if (valid) {
  211. const [err, res] = await to(
  212. deliverWorkApi.deliverGoods({
  213. id: this.progress.id,
  214. estimatedArrivalTime: this.form.date,
  215. realDeliveryTime: this.form.realDeliveryTime,
  216. expressName: this.form.expressName,
  217. expressCode: this.form.expressCode,
  218. // remark: this.form.remark,
  219. })
  220. )
  221. if (err) return
  222. if (res.code == 200) {
  223. this.$baseMessage(res.msg, 'success', 'vab-hey-message-success')
  224. this.$emit('fetch-data')
  225. }
  226. this.dialogFormVisible = false
  227. }
  228. })
  229. },
  230. },
  231. }
  232. </script>