mp-uploadImg.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <template>
  2. <view class="">
  3. <view class="grid grid-square flex-sub margin-top-50" :class="'col-'+count">
  4. <view class="bg-img" v-for="(item,index) in imgList" :key="index" @tap="viewImage(index)">
  5. <image :src="imgList[index]" mode="aspectFill"></image>
  6. <view class="cu-tag bg-red" @tap.stop="delImg(index)">
  7. <text class='cuIcon-close'></text>
  8. </view>
  9. </view>
  10. <view class="border" @click="uploadShopPics" v-if="imgList.length< count">
  11. <image class="icon" src="@/static/icon/camera.png" mode=""></image>
  12. </view>
  13. </view>
  14. </view>
  15. </template>
  16. <script>
  17. export default {
  18. props: {
  19. count: {
  20. type: Number,
  21. default: 4
  22. }
  23. },
  24. data() {
  25. return {
  26. imgList: []
  27. };
  28. },
  29. onLoad() {
  30. },
  31. methods: {
  32. async uploadShopPics() {
  33. let resp = await this.$mpi.chooseImage()
  34. let res=await this.$api.uploadFile(resp[0])
  35. this.imgList.push(res.data.link)
  36. this.$emit('click',this.imgList)
  37. },
  38. viewImage(index) {
  39. uni.previewImage({
  40. urls: this.imgList,
  41. current: index
  42. });
  43. },
  44. delImg(index) {
  45. let _this = this
  46. uni.showModal({
  47. title: '提示',
  48. content: '确定删除',
  49. success: (res) => {
  50. if (res.confirm) {
  51. _this.imgList.splice(index, 1)
  52. }
  53. }
  54. })
  55. },
  56. }
  57. };
  58. </script>
  59. <style lang="scss" scoped>
  60. .border {
  61. border: 4rpx dashed #e1e1e1;
  62. position: relative;
  63. }
  64. .icon {
  65. width: 50rpx;
  66. height: 50rpx;
  67. position: absolute;
  68. left: 0;
  69. right: 0;
  70. bottom: 0;
  71. top: 0;
  72. margin: auto;
  73. }
  74. </style>