表格的选择弹窗,选中后返显到表格中

项目场景:

提示:这里简述项目相关背景:

表格的下拉框可以直接显示选项,那如果选择框不是下拉的,而是弹窗,那么在表格中如何返显呢?


问题描述

如上图所示,点击表格中的选择,出现一个弹窗,在弹窗中选择后,需要返显到表格中(返显到表格,不是表单)


解决方案:

提示:这里填写该问题的具体解决方案:

点击事件传参时利用scope的另一个属性 scope.index ,scope.row可以获取当前行的数据,而 scope.index 可以得到点击的是表格的哪一条(第几个)数据。

下面是一个可编辑/查看的弹窗,弹窗中有表格,表格的选项是弹窗型式的,要求点击选项弹窗后表格要显示选中的数据

1:父组件

1:html

html 复制代码
<template>
  <!-- 编辑查看的弹窗 -->
  <Dialog 
    v-model="dialogVisible" 
    :title="questionTitle" 
    :width="props.questionWidth" 
    :close-on-click-modal="false" 
    :close-on-press-escape="false">
    <!-- 型式试验 -->
    <QuestionType 
    ref="child1"
    :tableList="questionData.testList"
    :title="'型式试验'"
    @carSelect="carSelect"
    />
    <template #footer>
      <el-button 
        type="primary" 
        @click="submitForm">暂 存</el-button>
      <el-button @click="dialogVisible = false">取 消</el-button>
    </template>
  </Dialog>
</template>

2:ts

javascript 复制代码
<script setup lang="ts">
import QuestionType from './questionTable/questionType.vue'
defineOptions({ name: 'questionCheckEdit' })
//接收父组件传过来的值
const props = defineProps({
  questionWidth:{
    type:String,
    default:"100%",//默认编辑/查看 弹窗宽度100%
  },
})
interface questioninter{
  status:number|string,
  testList:Array<yearAdd1Item>,
}
interface yearAdd1Item{
  questionsCode:string|number,
  questionsCategory:string|number,
  questionsSubCategory:string|number,
  questionsNature:string|number,
  happenType:string|number,
  proposedTime:string|number,
  vehicleModel:string|number,
  questionsSource:string|number,
}

const questionData=ref<questioninter>({
  status:0,
  testList:[],
})
const questionTitle=ref("");//弹窗类型 编辑/查看
const dialogVisible = ref(false) // 查看/编辑 弹窗的是否展示默认不展示
/** 打开弹窗 请求数据*/
const loading=ref(true)
const questionCheckEditOpen = (params) => {
  dialogVisible.value = true;
  if(params.btnType=="edit"){
    questionTitle.value="编辑";
  }else{
    questionTitle.value="查看";
  }
  loading.value=true;
  YearPerformanceApi.getYearPerformance(params.row.id)
  .then(res=>{
    // 数据请求成功关闭 loading效果
    loading.value=false;
    questionData.value=res
    if(res.testList==null){
      questionData.value.testList=[]
    }
  })
}
defineExpose({ questionCheckEditOpen }) // 提供 open 方法,用于打开弹窗

//引入 emits 将子组件的数据变化传给父组件 
// 通知列表 
const emits=defineEmits([
  "success",
]);
// 父组件接受子组件发过来的选中的数据 父组件给那一条数据 赋值
const carSelect=(params)=>{
  if(params.arr=="testList"){//如果是型式试验
    questionData.value.testList[params.index].vehicleModel=params.res
  }
}

// 提交输入的表格
const submitForm=(status:number)=>{
  
}

</script>
<style scoped>

</style>

2:子组件

1:html

html 复制代码
<template>
  <ContentWrap>
    <h5 class="titleGB">{{ props.title }}</h5>
    <el-table 
      ref="tableRef"
      :data="props.tableList" 
      :stripe="true" 
      :show-overflow-tooltip="true" 
      :border="true"
      :header-cell-style="{textAlign:'center'}"
      :cell-style="{textAlign:'center'}">
      <el-table-column type="selection" width="80" fixed="left" />
      <el-table-column 
        label="问题性质说明"
        min-width="160"
        prop="questionsNature"/>
      <el-table-column 
        label="车型"
        min-width="160"
        prop="vehicleModel">
        <template #default="scope">
            <div style="display:flex">
              <el-input 
                 v-model="scope.row.vehicleModel" 
                 placeholder="请选择车型" disabled/>
              <el-button
                v-if="!disabled"
                link type="primary"
                @click="carType(row,scope.$index)">选择</el-button>
            </div>
        </template>
      </el-table-column>
    </el-table>
  </ContentWrap>
  <!-- 车型选择弹窗 -->
  <ProjectPickModel
    ref="projectPickModelRef"
    dialog-title="选择车型"
    :is-multiple="false"
    width="60%"
    @on-pick-change="projectOnPickChange"
  />
</template>

2:ts

javascript 复制代码
<script setup lang="ts">
import ProjectPickModel from "@/views/components/ProjectPickModel.vue";
defineOptions({ name: 'questionType' })
//接收父组件传过来的值
const props = defineProps({
  tableList:{
    type:Array,
  },
  title:{
    type:String,
    default:"型式试验"
  },
  disabled:{
    type:Boolean,
    default:false,
  }
})

const tableRef =ref() // 表格ref
// =======================================操作表格

// 车型的选择按钮 点击打开车型选择弹窗
const selectedIndex=ref<string|number>();//选中的那一行的index
const projectPickModelRef =ref();
// 点击选择 打开选择车型的弹窗 获取点击的数据的index
const carType=async (row,index)=>{
  //调用选择车型的自定义open方法 打开这个弹窗  也可以用父组件控制 车型弹窗的显示/隐藏
  projectPickModelRef.value.open();
  selectedIndex.value=index;
}
// 车型选择
const projectOnPickChange = (selectedRow: any) => {
  if (selectedRow.length > 0) {
    const res=selectedRow[0].engineModel;//获得选中的车型
    let params={
      res:res,
      index:selectedIndex.value,
    }
    //将选中的 数据 和 点击表格的index传给父组件,让父组件 赋值
    emits("carSelect",params)
  }
}
</script>
<style scoped>

</style>
相关推荐
宾有为2 分钟前
【Android】Proxyman 抓 HTTP 数据包
android·网络协议·http·抓包·proxyman
尹中文2 小时前
FileProvider高版本使用,跨进程传输文件
android
南宫真汀2 小时前
Android学生信息管理APP的设计与开发
android
小狗蛋ing2 小时前
Android读取NFC卡片数据
android·nfc读取
CodeCraft Studio4 小时前
【实用教程】如何利用 JxBrowser 在 Kotlin 中实现屏幕共享
android·开发语言·kotlin
徐浪老师4 小时前
用 Android Studio 从零开发一个多功能计算器应用
android·ide·android studio
小黄人软件4 小时前
【android USB 串口通信助手】stm32 源码demo 单片机与手机通信 Android studio 20241118
android·stm32·单片机
梁辰兴4 小时前
移动应用开发:Android Studio实现简易注册页(数据存放以SharedPreferences形式)
android·ide·android studio·登录页·移动应用开发
未来之窗软件服务4 小时前
android studio无法下载,Could not GET xxx, Received status code 400
android·ide·android studio