upload.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <template>
  2. <view class="upload-index">
  3. <uv-upload :fileList="fileList" name="1" multiple :maxCount="type === 'insert' ? 5 : list.length"
  4. :deletable="type === 'insert'" @afterRead="afterRead" @delete="deletePic">
  5. </uv-upload>
  6. </view>
  7. </template>
  8. <script>
  9. export default {
  10. name: "preview",
  11. props: {
  12. list: {
  13. type: Array,
  14. default: () => {
  15. return []
  16. }
  17. },
  18. type: {
  19. type: String,
  20. default: 'preview'
  21. },
  22. },
  23. data() {
  24. return {
  25. fileList: []
  26. };
  27. },
  28. created() {
  29. this.fileList = this.list;
  30. console.log(this.list);
  31. },
  32. methods: {
  33. // 删除图片
  34. deletePic(event) {
  35. this[`fileList${event.name}`].splice(event.index, 1)
  36. },
  37. // 新增图片
  38. async afterRead(event) {
  39. // 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
  40. let lists = [].concat(event.file)
  41. let fileListLen = this[`fileList${event.name}`].length
  42. lists.map((item) => {
  43. this[`fileList${event.name}`].push({
  44. ...item,
  45. status: 'uploading',
  46. message: '上传中'
  47. })
  48. })
  49. for (let i = 0; i < lists.length; i++) {
  50. const result = await this.uploadFilePromise(lists[i].url)
  51. let item = this[`fileList${event.name}`][fileListLen]
  52. this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
  53. status: 'success',
  54. message: '',
  55. url: result
  56. }))
  57. fileListLen++
  58. }
  59. },
  60. uploadFilePromise(url) {
  61. return new Promise((resolve, reject) => {
  62. let a = uni.uploadFile({
  63. url: 'http://192.168.2.21:7001/upload', // 仅为示例,非真实的接口地址
  64. filePath: url,
  65. name: 'file',
  66. formData: {
  67. user: 'test'
  68. },
  69. success: (res) => {
  70. setTimeout(() => {
  71. resolve(res.data.data)
  72. }, 1000)
  73. }
  74. });
  75. })
  76. }
  77. }
  78. }
  79. </script>
  80. <style>
  81. </style>