当前位置: 首页 > article >正文

Vue3:uv-upload图片上传

效果图:

参考文档:

Upload 上传 | 我的资料管理-uv-ui 是全面兼容vue3+2、nvue、app、h5、小程序等多端的uni-app生态框架 (uvui.cn)

代码:

<view class="greenBtn_zw2" @click="handleAddGroup">添加班级群</view>

  //添加班级群
  const handleAddGroup = () => {
    addDialog.value.open();
  };

<!-- 添加班级群弹窗 -->
    <uv-popup ref="addDialog" mode="center" :customStyle="dialogStyle2" :closeOnClickOverlay="false">
      <view class="dialogBG">
        <view class="dialog-all">
          <view class="dialog-small-close" @click="cancelRoom">
            <uv-icon name="close-circle-fill" size="28" color="#B1B1B1"></uv-icon>
          </view>
          <view class="dialog-center">
            <view class="dialog-title pb-10">班级群</view>
            <view class="diaText">班级群名称</view>
            <uv-input maxlength="10" placeholder="请输入班级群名称" border="surround" clearable v-model="addGroup.info.groupName"></uv-input>
            <view class="diaText statusD">
              群二维码
              <view class="gray_s">
                <text style="margin-right: 38rpx; font-size: 28rpx; color: #555555">状态</text>
                <uv-switch v-model="addGroup.info.status" size="20" activeColor="#287e66" inactive-color="#c0c0c0" asyncChange @change="changeValue"></uv-switch>
              </view>
            </view>
            <view class="m-flex" style="align-items: center">
              <uv-upload
                :fileList="fileList"
                name="fileList"
                :maxCount="1"
                @afterRead="afterRead"
                @delete="deletePic"
                width="360rpx"
                height="360rpx"
                :customStyle="{ width: '360rpx', height: '360rpx', marginBottom: '40rpx', display: 'flex', alignItems: 'center' }"
              ></uv-upload>
            </view>
            <view class="dialog_footer1 displayFlexSB">
              <view class="common-sure-btn-1" @click="confirmRoom()">确定</view>
              <view class="common-sure-btn-2" @click="cancelRoom()">取消</view>
            </view>
          </view>
        </view>
      </view>
    </uv-popup>

<script setup lang="ts"> 
  import { onLoad, onShow } from '@dcloudio/uni-app';
  import { ref, reactive, toRefs, onMounted, defineComponent } from 'vue';
  import { getFirstPage, getFirstClass, sessionUpdate, sessionCreate, sessionDelete } from '@/apis/vocabulary.ts';  

  const dialogStyle2 = reactive({ width: '597rpx', height: '855rpx', background: '#FFFFFF', borderRadius: '48rpx' });

  const addGroup = reactive<object>({ info: { groupName: '', status: true } });
  const fileList = ref([]);

  const validateClassForm = () => {
    if (addGroup.info.groupName == '') {
      toast.value.show({ message: '请输入班级群名称', success: false });
      return false;
    }
    if (addGroup.info.groupName.trim().length >= 11) {
      toast.value.show({ message: '班级群名称不能超过10个字符', success: false });
      return false;
    }
    if (fileList.value.length < 1) {
      toast.value.show({ message: '请上传群二维码', success: false });
      return false;
    }
    return true;
  };

    
  //关闭/取消 弹框按钮方法
  const cancelRoom = () => {
    addGroup.info = {
      groupName: '',
      status: true
    };
    fileList.value = [];
    addDialog.value.close();
  };


  //是否切换switch进行状态推送
  const changeValue = (e: any) => {
    uni.showModal({
      content: e ? `确定要开启${addGroup.info.groupName}吗` : `确定要关闭${addGroup.info.groupName}吗`,
      success: (res) => {
        if (res.confirm) {
          addGroup.info.status = e;
          console.log('e------', addGroup.info.status);
        }
      }
    });
  };


  //图片上传方法
  //afterRead读取后的处理函数
  const afterRead = async (event: any) => {
    // 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
    let lists = [].concat(event.file);
    let fileListLen = fileList.value.length;
    lists.map((item) => {
      fileList.value.push({
        ...item,
        status: 'uploading',
        message: '上传中'
      });
    });
    for (let i = 0; i < lists.length; i++) {
      const result = await uploadFilePromise(lists[i].url);
      // console.log(result, '1111111111111111');
      let item = fileList.value[fileListLen];
      fileList.value.splice(
        fileListLen,
        1,
        Object.assign(item, {
          status: 'success',
          message: '',
          url: result ? result : ''
        })
      );
      fileListLen++;
    }
  };

  const uploadFilePromise = (url) => {
    return new Promise((resolve, reject) => {
      let a = uni.uploadFile({
        // url: `${config.baseURL}/zx/common/uploadFile`, // 仅为示例,非真实的接口地址
        url: 'https://baiduway.baijy.com/zx/common/uploadFile', // 仅为示例,非真实的接口地址
        filePath: url,
        name: 'file',
        // formData: {
        //   user: 'test'
        // },
        header: {
          Token: uni.getStorageSync('token')
        },
        success: (res) => {
          let result = JSON.parse(res.data);
          setTimeout(() => {
            resolve(result.data.fileUrl);
          }, 1000);
        }
      });
    });
  };


  // 删除图片
  const deletePic = (event: any) => {
    console.log(event);
    console.log('fileList.value', fileList.value);
    console.log('fileList${event.name}', `fileList${event.name}`);
    // fileList[event.name]
    fileList.value.splice(event.index, 1);
    // this[`fileList${event.name}`].splice(event.index, 1);
  };


  //确定方法
  const confirmRoom = () => {
    if (validateClassForm()) {
      let obj = {
        groupName: addGroup.info.groupName,
        status: addGroup.info.status ? 1 : 0,
        qrcodeUrl: fileList.value[0].url
      };
      addGroupList(obj).then((res: any) => {
        if (res.success) {
          toast.value.show({ message: '班级群添加成功', success: true });
          getclassList();
          cancelRoom();
        } else {
          toast.value.show({ message: res.message, success: false });
        }
      });
    }
  };

</script>


http://www.kler.cn/a/450240.html

相关文章:

  • LeetCode:101. 对称二叉树
  • Vue3 组件 view-shadcn-ui 2024.5.3 发布
  • 如何利用Java爬虫按关键字搜索苏宁易购商品
  • 精准提升:从94.5%到99.4%——目标检测调优全纪录
  • 搭建Docker Harbor仓库
  • Qt5 cmake引用private头文件
  • scrapy 融合selenium
  • web的五个Observer API
  • 过滤掉list中两个连续的元素
  • C# 文件系统I/O操作--什么是I/O
  • day14-补充静态网卡配置
  • git 提交代码无法连接:Failed to connect to github.com port 443 after 21060 ms
  • 数据结构:双向循坏链表
  • 一文搞懂MYSQL、SQL、SQLServer、SQLyog的区别和联系
  • 英语四六级备考必备:2015-2024年历年真题+解析全汇总
  • 最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解LRMOP1-LRMOP6及工程应用---盘式制动器设计,提供完整MATLAB代码
  • 最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解GLSMOP1-GLSMOP9及工程应用---盘式制动器设计,提供完整MATLAB代码
  • 利用代码程序计算数学函数的泰勒展开式(MATLAB推导函数泰勒展开式+Python推导函数泰勒展开式)
  • springboot/ssm个人博客系统Java代码编写web在线博客相册管理项目
  • 垂起固定翼无人机大面积森林草原巡检技术详解