van-uploader上传图片

<van-uploader
    :disabled="form.status=='1'"
     style="display: flex;"
     v-model="fileList"
     multiple
     :max-count="4"
     :after-read="afterRead">
     <div style="width: 100%;" v-show="fileList.length < 4">      
     <img style="width:100%;height:75px;"src="./images/uploadbg.png" alt=""></div>
 </van-uploader>
new Vue({
	fileList: [],
	formData: new FormData(),
	form: {}
})
methods: {
	afterRead(file) {
      if(file instanceof Array) {
      // 多张图片
        file.forEach(f => {
          this.formData.append('files',f.file)
        })
      }else{
      // 单张图片
        this.formData.append("files",file.file)
      }
    },
    // 提交按钮	
    submitBtn() {
      if(this.fileList.length <= 0) {
        vant.Toast('提示内容');
        return;
      }
      vant.Toast.loading({
        duration: 0,
        message: '提交中...',
        forbidClick: true
      });
      // api 要求传参 pathCode (根据api而定)
      this.formData.append('pathCode','0102')
      axios({
      	// 上传图片到服务器api
        url:`https://www.qyflc.com/gateway-api/file/uploads`,
        data:this.formData,
        method:'POST',
        headers: {
          "content-type": "multipart/form-data",
        }
      }).then((res) => {
        this.form.status = '1'
        this.form.images = res.data.data.map((item) => {
          return item.url
        })
        // 上传图片成功后的处理逻辑,仅上传功能可以无视
        return axios({
          url:`https://www.qyflc.com/gateway-api/device/maintain`,
          data:this.form,
          method:'PUT',
        }).then((response) => {
          if(response.data.code == '200') {
          	// 强制刷新页面
            location.reload()
            vant.Toast.clear()
            vant.Toast.success('提交成功');
          }else{
            vant.Toast.fail('提交失败');
          }
        })
      })
    },
}
### 如何为 `van-uploader` 组件自定义预览样式 为了实现 `van-uploader` 的自定义预览样式,可以通过覆盖默认的 CSS 样式或者利用插槽(slots)来自定义内容展示方式。以下是详细的解决方案: #### 使用插槽自定义预览样式 Vant 提供了丰富的插槽支持,允许开发者灵活定制组件的内容结构。对于 `van-uploader` 而言,可以使用 `preview-cover` 插槽来自定义文件项的封面。 ```html <template> <van-uploader v-model="fileList" multiple :max-count="3"> <!-- 自定义预览样式 --> <template #preview-cover="{ file }"> <div class="custom-preview"> <i class="iconfont custom-icon"></i> <!-- 替换为自定义图标 --> <span>{{ getFileType(file.name) }}</span> </div> </template> </van-uploader> </template> <script> import { ref } from 'vue'; export default { setup() { const fileList = ref([]); const getFileType = (fileName) => { const extension = fileName.split('.').pop().toLowerCase(); switch (extension) { case 'pdf': return 'PDF'; case 'doc': case 'docx': return 'Word Document'; case 'xls': case 'xlsx': return 'Excel Sheet'; default: return 'File'; } }; return { fileList, getFileType }; }, }; </script> <style scoped> .custom-preview { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); color: white; } .custom-icon { font-size: 24px; margin-right: 8px; } </style> ``` 上述代码展示了如何通过 `preview-cover` 插槽替换默认的文件预览样式,并添加自定义图标和文字说明[^1]。 --- #### 动态加载字体图标库 如果需要动态加载特定的字体图标库(如 IconFont),可以在项目初始化阶段引入对应的资源文件。例如,在 `main.js` 中配置如下: ```javascript // main.js import './assets/iconfont.css'; // 引入阿里云矢量图标的 CSS 文件 ``` 随后即可在模板中直接调用 `<i>` 标签渲染所需图标[^2]。 --- #### 利用外部工具增强调试体验 开发过程中可能遇到样式未生效或其他问题,此时推荐借助 Vue 开发者工具进行实时排查。安装 Chrome 扩展程序 **Vue.js devtools** 后,能够快速定位 DOM 结构异常以及绑定事件逻辑错误等问题[^4]。 --- ### 性能优化建议 当处理大量文件上传时,应考虑减少不必要的重新渲染操作。可通过设置 `v-if` 条件判断仅加载必要的子组件,从而提升整体效率[^3]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值