子组件和父组件之间传值#Vue3#defineProps

子组件和父组件之间传值#Vue3#defineProps

效果:
在这里插入图片描述

6s执行项图片缩略图

子组件:

<!-- 6s执行项详情图片的子组件 -->
<template>
  <div>
    <img
      v-if="itemsLocal.url"
      :src="itemsLocal.url"
      style="width: 50px; height: 50px; margin: 2px"
    />
    <el-link type="primary" v-else>{{
      itemsLocal.name + itemsLocal.suffix
    }}</el-link>
  </div>
</template>

<script setup lang="ts">
import { ref, onMounted } from "vue";
import { DownFile } from "@/api/sixData/index";



const props = defineProps(["info"]);//用来接收父组件的值
const itemsLocal = ref({});
onMounted(() => {
  itemsLocal.value = { ...props.info };
  getUrl(props.info);
});

//文件下载
async function getUrl({ fileID: id, name, suffix }) {
  const blob1 = await DownFile({ id });
  let imageUrl = "";
  if ([".jpg", ".jpeg", ".png"].includes(suffix)) {
    imageUrl = (window.URL || window.webkitURL).createObjectURL(blob1);
    itemsLocal.value.url = imageUrl;
    itemsLocal.value = JSON.parse(JSON.stringify(itemsLocal.value));
  }
}
</script>
<style scoped lang="scss"></style>

父组件:

<!-- 6s执行项详情图片的父组件 -->
<template>
  <!-- 执行项的des显示 -->
  <splitter title="执行项" />
  <el-descriptions
    class="box1"
    v-if="itemsData.length > 0"
    style="width: 50%; float: left"
    :column="1"
    border
  >
    <el-descriptions-item
      v-for="(item, index) in itemsData"
      :key="index"
      align="center"
      label-class-name="my-label"
      class-name="my-content"
      :span="1"
      :label="`执行项${index + 1}`"
    >
      <section class="flex items-center justify-between">
        <span>{{ item.content }}</span>
        <svg-icon
          v-if="item.state == 1"
          class-name="text-green-700 text-4xl"
          icon-class="pass"
        />
        <svg-icon v-else class-name="text-red-700 text-4xl" icon-class="fail" />
      </section>
    </el-descriptions-item>
  </el-descriptions>
  <!-- 执行项的显示图片 -->
  <el-descriptions
    v-if="ExecutionItemDataOne.length > 0"
    style="width: 50%; float: left"
    :column="1"
    border
  >
    <el-descriptions-item
      v-for="(item, index) in ExecutionItemDataOne"
      :key="index"
      label-class-name="my-label"
      class-name="my-content"
      :span="1"
      align="center"
      :label="`标准图片${index + 1}`"
    >
      <ul class="cell-link">
        <li
          class="truncate"
          v-for="(items, indexx) in item"
          :key="indexx"
          @click="handlePreview(items)"
        >
          <imageC :info="items" />
          <!-- <el-link type="primary" v-else>{{ items.name + items.suffix }}</el-link> -->
        </li>
      </ul>
    </el-descriptions-item>
  </el-descriptions>
  <el-empty
    v-else
    description="该方案暂未绑定执行项"
    :image-size="60"
  ></el-empty>
</template>

<script setup lang="ts">
import saveAs from "file-saver";
import { ref, onMounted, watch } from "vue";
import { searchMapDic, searchFileMap,DownFile } from "@/api/sixData/index";
import imageC from "./imageC.vue";//导入子组件

// 判断是否是图片
const imgValue = ref({
  show: false,
  row: [],
  type: "",
}) as any;
const imgVideoType = reactive({
  imgType: [".jpg", ".jpeg", ".png"],
});

const ExecutionItemDataOne = ref([]) as any; //执行项附件
const demoArr = ref([]) as any;

// 监听执行项
watch(
  () => props.itemsData,
  (newVal: any) => {
    console.log("执行项newVal", newVal);
    searchMapDic({
      linkTable: "AttachmentExecutionItem", //外部关联表/处理的地图释义详情
      linkType: "", //同表标识
      remark: "", //备注
    }).then((res: any) => {
      // 获取linkID和mapID
      if (newVal.length > 0) {
        newVal.forEach((item: any) => {
          let data = {
            mapDicID: res.data[0].id, //地图释义ID
            linkID: item.iD_Item, //外部关联ID
          };
          demoArr.value.push(data);
        });
        console.log("demoArr.value", demoArr.value);
      }
      // 按顺序获取linkID和mapID
      let test = [];
      for (let j = 0; j < demoArr.value.length; j++) {
        let result = searchFileMap(
          JSON.parse(JSON.stringify(demoArr.value[j]))
        );
        test.push(result);
      }
      // 按顺序获取文件id
      Promise.all(test).then((itemList: any) => {
        console.log("itemList", itemList);
        itemList.forEach((val: any) => {
          console.log("文件id", val.data);
          // val.data.forEach(async e1 => {
          //   e1.url = await getUrl(e1)
          // })
          //  setTimeout(() => {
          ExecutionItemDataOne.value.push(val.data);
          // }, 10000)
        });
      });
    });
  }
);

// const handleLoad = () => {};
// const getImage = async (items: any) => {
//   const imageUrl = await getUrl(items);
//   const htmlValue = `<img :src="${imageUrl}" alt="" style="width: 100px; height: 100px;">`;
//   return htmlValue;
// };
//文件下载
// async function getUrl({ fileID: id, name, suffix }: any) {
//   const blob = await DownFile({ id });
//   console.log("blob", blob);
//   let imageUrl = "";
//   if (imgVideoType.imgType.includes(suffix)) {
//     imageUrl = (window.URL || window.webkitURL).createObjectURL(blob);
//     console.log(imageUrl, "imageUrl1");
//     return imageUrl;
//   } else {
//     return imageUrl;
//   }
// }
//文件下载
async function handlePreview({ fileID: id, name, suffix }: any) {
  console.log("id", id);
  const blob = await DownFile({ id });
  console.log("blob", blob);
  if (imgVideoType.imgType.includes(suffix)) {
    const imageUrl = (window.URL || window.webkitURL).createObjectURL(blob);
    imgValue.value.type = "img";
    imgValue.value.row = [imageUrl];
    imgValue.value.show = true;
    console.log("imageUrl", imageUrl);
  } else {
    saveAs(blob as unknown as Blob, name + suffix);
  }
}
</script>
<style scoped lang="scss">
.cell-link {
  display: flex;
  margin-left: 10px;
  .el-link {
    float: left;
    margin-left: 5px;
  }
  .el-image {
    float: left;
    margin-left: 5px;
  }
}

:deep(.my-label) {
  height: 115px;
  width: 95px;
}
:deep(.my-content) {
  height: 100px;
}

.cell-link {
  max-width: 265px;
  .el-link {
    display: inline;
  }

  :deep(.el-link__inner) {
    display: inline;
  }
}
</style>

ccc感谢某大佬!!!!我tmd还在找循环的问题,毫不核心的问题。大佬的解决思路就是清奇!!思路清晰!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/728659.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024届本科专业就业率排行:榜一遥遥领先,计算机跌出前五 计算机行业发展迅速,程序员应该学习哪种编程语言?

在大多数家庭中&#xff0c;选择大学专业时&#xff0c;他们更倾向于通过大学教育和专业学习来增强自身的竞争力&#xff0c;以便在未来的就业市场中获得一份既稳定又收入丰厚的工作。 在这种现实驱动下&#xff0c;家长们和学生们都倾向于关注那些就业率持续高企的专业&#…

第N5周:调用Gensim库训练Word2Vec模型

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 目录 本周任务: 1.安装Gensim库 2.对原始语料分词 3.停用词 4.训练Woed2Vec模型 …

示例:WPF中使用IsAsync的方式绑定数据来优化用户体验

一、目的&#xff1a;开发过程中&#xff0c;有时需要绑定大量数据&#xff0c;比如弹出一个窗口&#xff0c;窗口中包含一个ListBox绑定了大量数据&#xff0c;这时会出现点击按钮后出现假死卡顿影响用户体验&#xff0c;这理通过用IsAsync的方式将窗口优先弹出来再加载数据 二…

AWS Lambda + Flask 应用示例

前言 AWS Lambda 本身是一个以事件驱动的 Serverless 服务, 最简单的应用就是在入口函数中对接收到的事件/请求进行处理并返回响应. 对于像 Flask 这样的 Web 框架, 并不能直接在 Lambda 上提供服务, 不过我们可以借助 AWS Lambda Web Adapter 实现一个基于 Flask 框架的 Web …

ThinkPHP:查询数据库数据之后,更改查询数据的字段名称

一、原始查询数据 含有字段item_no&#xff0c;lot_num&#xff0c;position $data[brushed] db::table(wip_station_transaction) ->where([wip_entity_name>$wip_entity_name,line_code>$line_code,]) ->field([item_no, lot_num, position]) ->select(); …

python 霍夫曼解码

Huffman Tree 进行解码 示例图 c语言&#xff1a;c语言 霍夫曼编码 | 贪婪算法&#xff08;Huffman Coding | Greedy Algo&#xff09;_霍夫曼的贪婪c语言-CSDN博客 c&#xff1a;c 霍夫曼编码 | 贪婪算法&#xff08;Huffman Coding | Greedy Algo&#xff09;_霍夫曼的贪…

适用于所有 Android 手机的 8 大 Android 解锁工具

有时您无法解锁手机&#xff0c;因为您忘记了密码或设备停止响应解锁图案。不要惊慌。我们在这里为您列出了最好的 Android 解锁工具。只需选择一个您喜欢的。 为了保护重要数据&#xff0c;许多手机用户倾向于使用图案锁、密码、指纹甚至面部识别来锁定设备。但有时&#xff…

docker 配置与使用

目录 安装docker 作者遇到的问题1&#xff1a;安装docker 错误说明 解决方法&#xff1a; 作者遇到问题2&#xff1a;GPG密钥问题 问题说明 解决方法&#xff1a; 方法一&#xff1a;使用备用的GPG密钥服务器 方法二&#xff1a;使用国内镜像源 方法3&#xff1a;手动下…

关于IntelliJ IDEA 2024.1版本更新的问题

希望文章能给到你启发和灵感&#xff5e; 感谢支持和关注&#xff5e; 阅读指南 序幕一、基础环境说明1.1 硬件环境1.2 软件环境 二、起因三、解决四、总结 序幕 近期&#xff0c;IntelliJ IDEA 推出了全新2024版本&#xff0c;相信很多编程的爱好者或者刚接触编程的小伙伴都会…

论文阅读--Cross-view Transformers for real-time Map-view Semantic Segmentation

一种新的2D维度的bev特征提取方案&#xff0c;其通过引入相机先验信息&#xff08;相机内参和外参&#xff09;构建了一个多视图交叉注意力机制&#xff0c;能够将多视图特征映射为BEV特征。 cross view attention&#xff1a;BEV位置编码由根据相机标定结果&#xff08;内参和…

工业制造领涉及的8大常见管理系统,如mes、scada、aps、wms等

在工业生产和制造领域有一些常见的管理系统&#xff0c;很多小伙伴分不清&#xff0c;这次大美B端工场带领大家了解清楚。 MES&#xff08;Manufacturing Execution System&#xff0c;制造执行系统&#xff09;&#xff1a; MES是一种用于监控、控制和优化生产过程的软件系统…

商超仓库管理系统

摘要 随着全球经济和互联网技术的快速发展&#xff0c;依靠互联网技术的各种管理系统逐渐应用到社会的方方面面。各行业的有识之士都逐渐开始意识到过去传统的人工管理模式已经逐渐成为企业发展的绊脚石&#xff0c;不再适应现代企业的发展需要。企业想要得到更好的发展&#…

异地如何共享视频文件?

人们对于信息流动的需求越来越高。尤其在分布式团队合作、远程办公的背景下&#xff0c;异地共享视频文件成为了一项重要的技术需求。本文将介绍一款名为【天联】的组网产品&#xff0c;它能够实现不同地区间快速组建局域网&#xff0c;解决不同设备间的信息远程通信问题。 2.…

【C++题解】1741 - 求出1~n中满足条件的数的个数和总和?

问题&#xff1a;1741 - 求出1~n中满足条件的数的个数和总和&#xff1f; 类型&#xff1a;简单循环 题目描述&#xff1a; 请求出 1∼n 之间所有满足 2 的倍数但不是 3 的倍数的数&#xff0c;有多少个&#xff0c;总和是多少&#xff1f; 输入&#xff1a; 读入一个整数 …

【SpringMVC】第1-7章

第1章 初始SpringMVC 1.1 学习本套教程前的知识储备 JavaSEHTMLCSSJavaScriptVueAJAX axiosThymeleafServletMavenSpring 1.2 什么是MVC MVC架构模式相关课程&#xff0c;在老杜的JavaWeb课程中已经详细的讲解了&#xff0c;如果没有学过的&#xff0c;可以看这个视频&…

PostgreSQL的学习心得和知识总结(一百四十六)|深入理解PostgreSQL数据库之客户端侧auto savepoint的使用和实现

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

计算机网络:应用层 - 文件传输协议 FTP 电子邮件

计算机网络&#xff1a;应用层 - 文件传输协议 FTP & 电子邮件 文件传输协议 FTP电子邮件 文件传输协议 FTP 文件传送协议 FTP(File Transfer Protocol)&#xff0c;曾是互联网祝频讲解上使用得最广泛的文件传送协议。 其特点是&#xff1a;若要存取一个文件&#xff0c;…

前端基础操作1——利用nvm任意切换(管理)node版本

在实际前端项目开发过程中&#xff0c;同时开发多个项目或者切换新项目时&#xff0c;因为node版本问题造成项目无法运行的问题比比皆是&#xff0c;这时候通过nvm管理切换不同版本的node&#xff0c;就能很快进入开发模式&#xff0c;避免因为环境问题浪费大量精力&#xff0c…

hive on spark 的架构和常见问题 - hive on spark 使用的是 yarn client 模式还是 yarn cluster 模式?

hive on spark 的架构和常见问题 - hive on spark 使用的是 yarn client 模式还是 yarn cluster 模式&#xff1f; 1. 回顾下 spark 的架构图和部署模式 来自官方的经典的 spark 架构图如下&#xff1a; 上述架构图&#xff0c;从进程的角度来讲&#xff0c;有四个角色/组件&…

[C++][数据结构][B-树][上]详细讲解

目录 0.常见的搜索结构1.B树概念2.B-树的插入分析1.流程分析2.插入过程总结 0.常见的搜索结构 种类数据格式时间复杂度顺序查找无要求 O ( N ) O(N) O(N)二分查找有序 O ( l o g 2 N ) O(log_2 N) O(log2​N)二叉搜索树无要求 O ( N ) O(N) O(N)二叉平衡树无要求 O ( l o g 2 …