upload.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. },
  31. methods: {
  32. // 删除图片
  33. deletePic(event) {
  34. uni.showModal({
  35. title: '有极提示',
  36. content: '是否删除该附件',
  37. success: res => {
  38. if (res.confirm) {
  39. this.fileList.splice(event.index, 1)
  40. }
  41. }
  42. });
  43. },
  44. // 新增图片
  45. async afterRead(event) {
  46. // 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
  47. let lists = [].concat(event.file)
  48. let fileListLen = this.fileList.length;
  49. lists.map((item) => {
  50. this.fileList.push({
  51. ...item,
  52. status: 'uploading',
  53. message: '上传中'
  54. })
  55. })
  56. for (let i = 0; i < lists.length; i++) {
  57. console.log(lists[i]);
  58. const result = await this.uploadFilePromise(lists[i].url)
  59. console.log(result);
  60. let item = this.fileList[fileListLen]
  61. this.fileList.splice(fileListLen, 1, Object.assign(item, {
  62. status: 'success',
  63. message: '',
  64. url: result.node.url,
  65. id: result.id,
  66. name: result.name
  67. }))
  68. console.log(this.fileList);
  69. fileListLen++
  70. }
  71. },
  72. uploadFilePromise(url) {
  73. return new Promise((resolve, reject) => {
  74. let a = uni.uploadFile({
  75. url: 'https://www.waywish.com/file/filenode/-1', // 仅为示例,非真实的接口地址
  76. filePath: url,
  77. name: 'uploadFile',
  78. success: (res) => {
  79. setTimeout(() => {
  80. resolve(JSON.parse(res.data).data)
  81. }, 1000)
  82. }
  83. });
  84. })
  85. },
  86. getFile() {
  87. return this.fileList.map(res => {
  88. return {
  89. id: res.id,
  90. name: res.name,
  91. url: res.url,
  92. type: res.type
  93. }
  94. })
  95. }
  96. }
  97. }
  98. </script>
  99. <style>
  100. </style>