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

vue3组件式开发示例

1,定义组件(根据实际调整提交分析结果方法)

<template><!-- 分析结果上传对话框组件 --><el-dialogv-model="uploadResultDialog":title="title":width="width":before-close="handleBeforeClose"><el-form:model="uploadResultModel":rules="uploadResultRules"ref="uploadResultRef"label-width="80px"><el-form-item label="结果" prop="result"><el-inputv-model="uploadResultModel.result"type="textarea"autocomplete="off":rows="rows"/></el-form-item></el-form><template #footer><div class="dialog-footer"><el-button @click="handleCancel">取消</el-button><el-button type="primary" @click="handleUploadResultSubmit">提交</el-button></div></template></el-dialog>
</template><script setup lang="js">
import { ref, reactive, computed, onMounted, nextTick, watch } from 'vue';
import { ElMessage } from 'element-plus';
import { uploadResult } from '@/api/business/arbovirus/denv/denvSample';// 定义组件 props
const props = defineProps({// 对话框标题title: {type: String,default: '提交分析结果'},// 对话框宽度width: {type: String,default: '500px'},// 文本域行数rows: {type: Number,default: 4},// 数据ID(用于更新操作)ids: {type: [String, Number],default: ''},// 查询条件(用于新增操作)query: {type: Object,default: () => ({})},// 是否显示对话框visible: {type: Boolean,default: false}
});// 定义组件事件
const emit = defineEmits(['update:visible','success','error','close'
]);// 组件状态
const uploadResultDialog = ref(false);
const uploadResultModel = ref({result: ''
});
const uploadResultRef = ref(null);
const uploadResultRules = ref({result: [{ required: true, message: '请输入分析结果', trigger: 'blur' }]
});// 打开对话框
const openDialog = (options = {}) => {// 合并传入的选项if (options.title) {uploadResultDialog.value = true;uploadResultModel.value.result = '';} else {uploadResultDialog.value = true;uploadResultModel.value.result = '';}
};// 关闭前回调
const handleBeforeClose = (done) => {uploadResultDialog.value = false;emit('close');done();
};// 取消按钮点击事件
const handleCancel = () => {uploadResultDialog.value = false;emit('update:visible', false);
};// 提交分析结果
const handleUploadResultSubmit = async () => {try {if (props.ids === 123) {ElMessage.success('上传成功!');uploadResultDialog.value = false;emit('update:visible', false);emit('success', "success");} else {ElMessage.error(props.ids || '上传失败');emit('error', "error");}} catch (error) {console.error('上传失败:', error);ElMessage.error('上传过程中发生错误,请稍后再试');emit('error', error);}
};// 监听visible属性变化
watch(() => props.visible, (newVal) => {if (newVal) {openDialog();} else {uploadResultDialog.value = false;}
});// 组件加载时重置表单
onMounted(() => {uploadResultModel.value.result = '';
});// 暴露组件方法
defineExpose({openDialog,handleUploadResultSubmit
});
</script><style scoped>
.dialog-footer {display: flex;justify-content: flex-end;gap: 10px;
}
</style>

2,组件调用(根据实际情况进行调整)

<template><div><el-button type="primary" @click="openUploadDialog">上传分析结果</el-button><!-- 引用封装的组件 --><UploadResultDialogv-model:visible="dialogVisible":ids="currentId":query="searchQuery"@success="handleUploadSuccess"@error="handleUploadError"/></div>
</template><script setup lang="js">
import { ref } from 'vue';
import UploadResultDialog from '@/components/business/uploadResultDialog.vue';const dialogVisible = ref(false);
const currentId = ref(123); // 当前数据ID
const searchQuery = ref({ /* 查询条件 */ });const openUploadDialog = () => {dialogVisible.value = true;
};const handleUploadSuccess = (data) => {console.log('上传成功:', data);// 刷新数据或执行其他操作
};const handleUploadError = (error) => {console.error('上传错误:', error);
};
</script>

http://www.lryc.cn/news/572688.html

相关文章:

  • 大模型与搜索引擎的技术博弈及未来智能范式演进
  • MySQL查询语句的通配符*
  • 组态王工程运行时间显示
  • 【案例拆解】米客方德 SD NAND 在车联网中(有方模块)的应用:破解传统 TF 卡振动脱落与寿命短板
  • 在VTK中捕捉体绘制图像进阶(同步操作)
  • 零基础入门PCB设计 一实践项目篇 第三章(STM32开发板原理图设计)
  • 云计算处理器选哪款?性能与能效的平衡艺术
  • 【网络安全】文件上传型XSS攻击解析
  • 特征金字塔在Vision Transformer中的创新应用:原理、优势与实现分析
  • AS32系列MCU芯片I2C模块性能解析与调试
  • 408第二季 - 组成原理 - 流水线
  • Linux之线程同步与互斥
  • Rust 学习笔记:Unsafe Rust
  • 使用 .NET Core 8.0 和 SignalR 构建实时聊天服务
  • OPENPPP2 VMUX 技术探秘(高级指南)
  • 北京京东,看看难度
  • 解锁决策树:数据挖掘的智慧引擎
  • ffmpeg 给视频画圆圈
  • Electron (02)集成 SpringBoot:服务与桌面程序协同启动方案
  • 大白话说目标检测中的IOU(Intersection over Union)
  • Maven并行构建
  • 单点登录进阶:基于芋道(yudao)授权码模式的单点登录流程、代码实现与安全设计
  • SAP-ABAP:LOOP ... ASSIGNING高效处理内表数据详解
  • pandas polars 数据类型转换
  • 【pdf】Java代码生成PDF
  • lingma(阿里云Ai)结合idea使用
  • uni-app-配合iOS App项目开发apple watch app
  • Python按钮点击事件快速入门
  • vue3 reactive重新赋值
  • VSCode1.101.1Win多语言语言编辑器便携版安装教程