vue3组件间传值

news2025/1/11 9:51:33

definProps方式

子组件:assignSuppliers.vue

const prop=defineProps({fid:String});

父组件:index.vue

  <!-- 供应商分配 -->
    <n-drawer
      width="800"
      v-model:visible="drawerSupplierConfig.visible"
      :title="drawerSupplierConfig.title"
      :closable="false">
      
      <assignSuppliers v-if="drawerSupplierConfig.visible" ref="assignSuppliersRef" :fid="fid" />

      <template #extra>
        <div class="drawer-footer flex">
          <n-button style="margin-right: 8px" type="primary" key="submit" @click="handleCancel">保存</n-button> 
          <n-button key="back" @click="handleCancel">取消</n-button>
        </div>
      </template>
    </n-drawer>

在父组件中,给子组件参数赋值


const handleAction = (e: string) => {
  let rows = tableRef.value?.getSelectedRows(),
    record = rows?.[rows.length - 1];
  switch (e) {
    case "create":
      create();
      break;
    case "edit":
      if (!record) return message.warn(langMap.value["common.noDataMsg"]);
      handle(record, "edit");
      break;
    case "view":
      if (!record) return message.warn(langMap.value["common.noDataMsg"]);
      handle(record, "detail");
      break;
    case "do_AssignSupplier":
      if (!record) return message.warn(langMap.value["common.noDataMsg"]); 
     
      //给子组件变量赋值
      console.log("record[0].objId==", record.objId);
      drawerSupplierConfig.visible = true;
      fid.value=record.objId;
 

      break;

    default:
      break;
  }

defineExpose方式

子组件

<template>
  <div class="w-full h-full bg-white flex flex-col rounded-8 page-goods">
    <Header
      :labelCol="{ span: 6 }"
      :wrapperCol="{ span: 18 }"
      :formConfig="searchConfig"
      @onQuery="handleSearch"
      @onReset="handleReset"
      v-if="false"
    />
    <div>SelectRows.FatherId:{{ fatherID }}</div>
    <!-- 列表 -->
    <base-table
      ref="tableRef"
      checkbox="radio"
      :autoWidth="false"
      :columns="columnsSuppler"
      :query-api="QueryDetail"
      :query-args="queryArgs"
    >
    <template #columns="{ column, currentRecord }">
      <n-input
            class="w-full"
            placeholder="采购订单行号"
            v-model:value="currentRecord.tj0warehouseLocationDes"
            v-if="column.key == 'tj0warehouseLocationDes'"
            :maxlength="50"
          ></n-input>
          <n-input-number
            class="w-full"
            placeholder="分配数量"
            v-model:value="currentRecord.tj0wareHouse"
            v-if="column.key == 'tj0wareHouse'"
            :maxlength="50"
          ></n-input-number>
     
      </template>
    </base-table>
  </div>
</template>

<script setup lang="ts">
import { QueryDetail } from "@/api/wms/vmiManged";
import type { BaseTableExpose } from "@/types/baseTable";
import { EditOutlined, EyeOutlined, PlusOutlined } from "@nancal-icon/icons-vue";
import { message } from "n-designv3";
import { ExtendConfig } from "./extend";
const {columnsSuppler , searchConfig, langMap } = ExtendConfig;
const tableRef = ref<BaseTableExpose>();
const fatherID = ref<string>();
const prop=defineProps({fid:String});

 const SelectRows = reactive({
  FatherId: "22",
});
 const setFatherID = (ids: string = "11") => { 
  fatherID.value = ids;
  console.log("FatherId ===================", fatherID.value);
};
 const setSelectRows = (ids: string) => { 
  SelectRows.FatherId = ids;
  console.log("SelectRows.FatherId ===================", SelectRows.FatherId);
};
const queryArgs: any = reactive({
  attrSet: [],
  condition: [],
  sorts: [
    {
      name: "createAt",
      sort: "desc",
    },
  ],
  page: {
    pageNo: 1,
    pageSize: 15,
  },
});

const enable = (event: any) => {
  if (!event.enable) return "否";
  if (!!event.enable) return "是";
};
// 搜索
const handleSearch = (model: any) => {
  queryArgs.page.pageNo = 1;
  tableRef.value?.setQueryArgs(model);
  queryList2();
};
// 重置搜索
const handleReset = () => {
  tableRef.value?.setSelectedRows([]);
  queryArgs.condition = [];
  queryList2();
};

const queryList2 = () => {
  tableRef.value?.refreshList();
};
onMounted(() => {
  queryList2();
  console.log('prop.fid===================',prop.fid);
 
});
const exposeObj = {
  setSelectRows,
  fatherID,
  setFatherID,
  SelectRows,
  queryList2,
};
 

export type AssignSupplierExpose = typeof exposeObj;
defineExpose(exposeObj);
</script>

<style scoped lang="less">
:deep(.nl-tabs-nav) {
  border-bottom: 1px solid #e5e5e5;
  .nl-tabs-nav-wrap {
    padding: 0px 10px;
  }
}
.button-sy {
  color: #595959;
}
.icon-sy {
  color: #999999;
}
</style>

 父组件

<template>
  <div class="flex flex-col">
    <Header
      :labelCol="{ span: 6 }"
      :wrapperCol="{ span: 18 }"
      :formConfig="searchConfig"
      @onQuery="handleSearch"
      @onReset="handleReset"
    />

    <menu-boll :btnList="btnList" @btnclickEmit="handleAction" />

    <!-- 列表 -->
    <base-table
      ref="tableRef"
      :autoWidth="false"
      :columns="columns"
      :query-api="QueryData"
      :query-args="queryArgs"
    >
    </base-table>

    <!-- 备料单详情 -->
    <n-drawer
      width="800"
      v-model:visible="drawerDetailConfig.visible"
      :title="drawerDetailConfig.title"
    >
      <Part-Details v-if="drawerDetailConfig.visible" ref="assignSuppliersRef" />
    </n-drawer>
    <!-- 供应商分配 -->
    <n-drawer
      width="800"
      v-model:visible="drawerSupplierConfig.visible"
      :title="drawerSupplierConfig.title"
      :closable="false">

      <assignSuppliers v-if="drawerSupplierConfig.visible" ref="assignSuppliersRef" :fid="fid" />

      <template #extra>
        <div class="drawer-footer flex">
          <n-button style="margin-right: 8px" type="primary" key="submit" @click="handleCancel">保存</n-button> 
          <n-button key="back" @click="handleCancel">取消</n-button>
        </div>
      </template>
    </n-drawer>
  </div>
</template>

<script setup lang="ts">
import { Add, Detail, QueryData, Update } from "@/api/wms/vmiManged";
import type { BaseTableExpose } from "@/types/baseTable";
import {
  AssociationOutlined,
  DistributeOutlined,
  EditOutlined,
  EyeOutlined,
  NextLevelOutlined,
  ShoppingCartOutlined,
  PlusOutlined,
  UserOutlined,
} from "@nancal-icon/icons-vue";
import { message } from "n-designv3";
import { ExtendConfig } from "./extend";
import PartDetails from "./details.vue";
import assignSuppliers , { type AssignSupplierExpose }  from "./assignSuppliers.vue";
const { columns, formConfig, searchConfig, langMap } = ExtendConfig;
const tableRef = ref<BaseTableExpose>();
const fid = ref<string>();
const assignSuppliersRef = ref<AssignSupplierExpose>();
const btnList = [
  { type: "create", icon: ShoppingCartOutlined, name: "生成拣料任务" },
  { type: "delete", icon: AssociationOutlined, name: "取消拣料任务" },
  { type: "do_AssignSupplier", icon: UserOutlined, name: "供应商分配" },
  { type: "view", icon: EyeOutlined, name: "详 情" },
];
const drawerDetailConfig = reactive({
  title: "备料单详情",
  visible: false,
});

const drawerSupplierConfig = reactive({
  title: "供应商分配",
  visible: false,
});
const partEditRef = ref<PartEditExpose>();

const handleCancel = () => {
  drawerSupplierConfig.visible = false;
};
// 表单
const formModel = ref<any>({
  enable: 1,
});
const visible = ref<boolean>(false);
const status = ref<string>("add");
const title = ref<string>("新建");
const formRef = ref();

const queryArgs: any = reactive({
  attrSet: [],
  condition: [],
  sorts: [
    {
      name: "createAt",
      sort: "desc",
    },
  ],
  page: {
    pageNo: 1,
    pageSize: 15,
  },
});

const enable = (event: any) => {
  if (!event.enable) return "否";
  if (!!event.enable) return "是";
};
// 搜索
const handleSearch = (model: any) => {
  queryArgs.page.pageNo = 1;
  tableRef.value?.setQueryArgs(model);
  queryList();
};
// 重置搜索
const handleReset = () => {
  tableRef.value?.setSelectedRows([]);
  queryArgs.condition = [];
  queryList();
};

const handleAction = (e: string) => {
  let rows = tableRef.value?.getSelectedRows(),
    record = rows?.[rows.length - 1];
  switch (e) {
    case "create":
      create();
      break;
    case "edit":
      if (!record) return message.warn(langMap.value["common.noDataMsg"]);
      handle(record, "edit");
      break;
    case "view":
      if (!record) return message.warn(langMap.value["common.noDataMsg"]);
      handle(record, "detail");
      break;
    case "do_AssignSupplier":
      if (!record) return message.warn(langMap.value["common.noDataMsg"]);

     // supplerHandle(record, "do_AssignSupplier");
   
      console.log("record[0].objId==", record.objId);
      drawerSupplierConfig.visible = true;
      // fid.value=record.objId;
      // setTimeout(() => {
      //   fid.value="aaaaaaaaaaaaaaaaa";//record.objId;
      // }, 0);
      nextTick(()=>{
        fid.value="aaaaaaaaaaaaaaaaa";//record.objId;
        // assignSuppliersRef.value?.setFatherID("dddddddddddddddd");
        // assignSuppliersRef.value?.setSelectRows(record.objId);
      });
     

      break;

    default:
      break;
  }
};

const create = () => {
  visible.value = true;
  status.value = "add";
  formConfig.value[0].attrs.disabled = false;
};

const handle = (row: any, type: string) => {
  drawerDetailConfig.visible = true;
};
const supplerHandle = (row: any, type: string) => {
  drawerSupplierConfig.visible = true;
};
const close = () => {
  title.value = "新建";
  visible.value = false;
  formModel.value = {
    enable: 1,
  };
  formRef?.value?.fields();
};

const confirm = async () => {
  try {
    await formRef?.value?.validate();
    const API = status.value === "add" ? Add : Update;
    if (typeof formModel.value.enable == "boolean") {
      formModel.value.enable = formModel.value.enable ? 1 : 0;
    }

    API(formModel.value).then((res: any) => {
      if (res.code === "0") {
        message.success("操作成功");
        close();
        handleReset();
      }
    });
  } catch (err) {
    console.log(err);
  }
};

const queryList = () => {
  tableRef.value?.refreshList();
};
onMounted(() => {
  queryList();
});
defineExpose({ queryList });
</script>

<style scoped lang="less">
:deep(.nl-tabs-nav) {
  border-bottom: 1px solid #e5e5e5;
  .nl-tabs-nav-wrap {
    padding: 0px 10px;
  }
}
.button-sy {
  color: #595959;
}
.icon-sy {
  color: #999999;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《网络安全编程基础》之Socket编程

我的代码 server.c // server.cpp : Defines the entry point for the console application. //#include "stdafx.h" #include <Winsock2.h> #pragma comment(lib,"ws2_32.lib") //添加静态链接库文件 void main(int argc,char* argv[]) {WSADATA …

不只是请求和响应:使用Fiddler解读Cookie与状态码全指南(下)

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! 不只是请求和响应&#xff1a;使用Fiddler抓包HTTP协议全指南(上)_fiddler 获取响应脚本-CSDN博客https://blog.csdn.net/Chunfeng6yugan/article/details/144005872?spm1001.2014.3001.5501 不只是请求和响…

Linx下自动化之路:Redis安装包一键安装脚本实现无网极速部署并注册成服务

目录 简介 安装包下载 安装脚本 服务常用命令 简介 通过一键安装脚本实现 Redis 安装包的无网极速部署&#xff0c;并将其成功注册为系统服务&#xff0c;开机自启。 安装包下载 redis-7.0.8.tar.gzhttp://download.redis.io/releases/redis-7.0.8.tar.gz 安装脚本 修…

第3章.垃圾收集器与内存分配策略

概述 对象已死 引用计数法 可达性分析算法 再谈引用 生存还是死亡 回收方法区 垃圾收集算法 分代收集理论 3种垃圾收集算法 HotSpot的算法细节实现 根节点枚举 安全点 安全区域 记忆集与卡表 写屏障 并发的可达性分析 误消亡问题 经典垃圾收集器 概述 简单的一些GC CMS G1 低延…

Python 类的设计(以植物大战僵尸为例)

关于类的设计——以植物大战僵尸为例 一、设计类需满足的三要素1. 类名2. 属性和方法 二、以植物大战僵尸的为例的类的设计1. 尝试分类2. 创建对象调用类的属性和方法*【代码二】*3. 僵尸的继承 三、代码实现 一、设计类需满足的三要素 1. 类名 类名&#xff1a;某类事物的名…

如何使用WinCC DataMonitor基于Web发布浏览Excel报表文档

本文介绍使用 WinCC DataMonitor 的 "Excel Workbooks" 功能&#xff0c;通过 Excel 表格显示 WinCC 项目的过程值、归档变量值和报警归档消息。并可以通过 Web 发布浏览访问数据 1&#xff0e;WinCC DataMonitor是什么 ? DataMonitor 是 SIMATIC WinCC 工厂智能中…

【Java】—— 图书管理系统

基于往期学习的类和对象、继承、多态、抽象类和接口来完成一个控制台版本的 “图书管理系统” 在控制台界面中实现用户与程序交互 任务目标&#xff1a; 1、系统中能够表示多本图书的信息 2、提供两种用户&#xff08;普通用户&#xff0c;管理员&#xff09; 3、普通用户…

记录ubuntu22.04重启以后无法获取IP地址的问题处理方案

现象描述&#xff1a;我的虚拟机网络设置为桥接模式&#xff0c;输入ifconfig只显示127.0.0.1&#xff0c;不能连上外网。&#xff0c;且无法上网&#xff0c;用ifconfig只有如下显示&#xff1a; 1、sudo -i切换为root用户 2、输入dhclient -v 再输入ifconfig就可以看到多了…

异步操作,promise、axios

一、异步操作&#xff08;异步编程&#xff09;、同步操作 异步操作是指在编程中&#xff0c;某个任务的执行不会立即完成&#xff0c;同时不会阻塞后续代码的执行。在异步操作中&#xff0c;程序可以继续运行&#xff0c;并在异步任务完成时得到通知并处理结果。这与同步操作…

第一性原理构造医疗信创域高质量发展路径应用探析

门诊电子病历录入 摘要&#xff1a; 主要介绍了第一性原理在医疗系统开发中的应用及其重要性。阐述了第一性原理的概念及发展历程&#xff0c;并指出其在各个领域的重要性和应用价值。详细分析了第一性原理在医疗系统开发中的具体影响&#xff0c;包括对医院管理和互联网医疗的…

MySQL8下载安装教程

前言 1.个人经验&#xff0c;仅供参考&#xff01;&#xff01;&#xff01; 2.如果之前有下载过MySQL&#xff0c;请检查是否有删除干净&#xff0c;在控制面板删除最好 下载网址&#xff1a;MySQL :: MySQL Community Downloads 下载步骤 进入网址选择要下载的 下一步网…

算法日记 45 day 图论(并查集基础)

并查集解决什么问题 并查集常用来解决连通性问题。 大白话就是当我们需要判断两个元素是否在同一个集合里的时候&#xff0c;我们就要想到用并查集。 原理 既然是查找是否在同一个集合中&#xff0c;那么这个集合是怎么构建的呢&#xff1f;用一维数组来表示一个有向图&…

PTA DS 6-4 带头结点的链队列的基本操作 (C补全函数)

6-4 带头结点的链队列的基本操作 分数 10 全屏浏览 切换布局 作者 黄复贤 单位 菏泽学院 实现链队列的入队列及出队列操作。 函数接口定义&#xff1a; Status QueueInsert(LinkQueue *Q,ElemType e)&#xff1b; Status QueueDelete(LinkQueue *Q,ElemType *e)&#x…

Windows 系统没有网络链接常见原因以及解决方案

在使用 Windows 电脑时&#xff0c;有时会遇到电脑显示已连接网络&#xff0c;但却无法访问 Internet 的情况&#xff0c;这可能是由多种原因导致的。以下简鹿办公将详细介绍一些常见原因及对应的解决方案。 一、网络连接问题 原因 路由器故障&#xff1a;路由器长时间运行可…

lnmp+discuz论坛 附实验:搭建discuz论坛

Inmpdiscuz论坛 Inmp: t: linux操作系统 nr: nginx前端页面 me: mysql数据库 账号密码&#xff0c;等等都是保存在这个数据库里面 p: php——nginx擅长处理的是静态页面&#xff0c;页面登录账户&#xff0c;需要请求到数据库&#xff0c;通过php把动态请求转发到数据库 n…

杨振宁大学物理视频中黄色的字,c#写程序去掉

先看一下效果&#xff1a;&#xff08;还有改进的余地&#xff09; 我的方法是笨方法&#xff0c;也比较刻板。 1&#xff0c;首先想到&#xff0c;把屏幕打印下来。c#提供了这样一个函数&#xff1a; Bitmap bmp new Bitmap(640, 480, PixelFormat.Format32bppArgb); // 创…

Openlayers基础知识回顾(五)

1、GeoJSON数据的加载 GeoJSON是一种基于JSON的地理空间数据交换格式&#xff0c;它定义了几种类型JSON对象以及它们组合在一起的方法&#xff0c;以表示有关地理要素、属性和它们的空间范围的数据 2、GeoJSON转化为ol要素 new ol.format.GeoJSON().readFeatures() 一、canv…

VTK知识学习(21)- 数据的读写

1、前言 对于应用程序而言&#xff0c;都需要处理特定的数据&#xff0c;VTK应用程序也不例外。 VTK应用程序所需的数据可以通过两种途径获取: 第一种是生成模型&#xff0c;然后处理这些模型数据(如由类 vtkCylinderSource 生成的多边形数据); 第二种是从外部存储介质里导…

javaWeb之过滤器(Filter)

目录 前言 过滤器概述 什么是过滤器 过滤器详细 过滤器的生命周期 过滤器的应用 创建一个简单的Filter类步骤 注意&#xff1a;指定拦截路径&#xff0c;我们有两种方式 实例 前言 本篇博客的核心 知道过滤器的整个拦截过程知道如何指定拦截路径知道过滤器的生命周期…

如何增强通信监控系统

随着员工工作方式的改变&#xff0c;创建安全的远程通信通道至关重要。这对于数据安全也很重要。通信监控系统是确保数据和网络安全的当务之急。 如今&#xff0c;员工越来越多地使用电子通信。在理想世界中&#xff0c;这些渠道的范围是明确界定的。在现实世界中&#xff0c;…