封装按钮信息与按钮数量动态显示与提示信息并进行触发按钮组件

news/2025/1/15 13:35:23/文章来源:https://www.cnblogs.com/nwy2012/p/18672700

标题: 封装弹框并点击动态按钮组件进行触发功能:

封装按钮信息与按钮数量动态显示组件页面: 按钮信息与按钮数量动态显示,提示信息不固定

封装组件页面: 

<template>
<el-dialog v-model="dialogVisible" class="stepCustom-dialog custom-dialog-center " destroy-on-close height="500px" title="" width="40%">
<span class="stepDialogTitle"> {{ title }}</span>
<ul style=" font-size: 16px; text-align: left; margin-left:50px">
<li v-for="(tip, index) in tips" :key="index" style="list-style:disc ">{{ tip }}</li>
</ul>
<br/> <br/>
<span :class="['stepDialog-footer', buttonClass]">
<el-button
v-for="(button, index) in buttons"
:key="index"
:type="button.type"
size="large"
@click="button.handler"
>
{{ button.label }}
</el-button>
</span>
</el-dialog>
</template>

<script lang="tsx" setup>

// 导航条->确认变更方案弹窗
import {computed, defineExpose, defineProps, PropType, ref} from 'vue';
// const loading = ref(false);
const dialogVisible = ref(false);
// 定义 props
const props = defineProps({
title: {
type: String,
default: ''
},
tips: {
type: Array as PropType<string[]>,
default: () => []
},
buttons: {
type: Array as PropType<{ label: string; type: string; handler: () => void }[]>,
default: () => []
}
});

// 计算按钮类
const buttonClass = computed(() => {
return props.buttons.length === 1 ? 'single-button' : 'multiple-button';
});


// 打开弹窗
function openModal(flag: boolean) {
dialogVisible.value = flag;
}

const close = () => {
dialogVisible.value = false;
};

defineExpose({
open: openModal,
close
});
</script>
<style scoped>
.stepCustom-dialog {
max-height: 312vh; /* 设置最大高度为视口高度的50% */
overflow-y: auto; /* 超出部分滚动 */
}

.custom-dialog-center {
margin: 0 auto;
top: 50%;
transform: translateY(-50%);
}
.stepDialog-footer {
display: flex;
align-items: center;
}

.stepDialog-footer.single-button {
justify-content: center;
}

.stepDialog-footer.multiple-button {
justify-content: space-between;
}

.stepDialogTitle {
display: flex;
font-size: 20px;
font-weight: bold;
}

</style>

 


<script lang="tsx" setup>

使用组件页面:

<ConfirmStepChangeModal
ref="confirmStepChangeModalRef"
:buttons="modalButtons"
:tips="modalTips"
:title="modalTitle"
/>



<script>
const modalTitle = ref($swpT('warning.tips'));
const modalTips = ref<string[]>([]);
const modalButtons = ref<ModalButton[]>([]);
// 弹框逻辑处理
const openStepChangeModel = debounce(() => {
// 重置 modalTips 和 modalButtons
modalTips.value = [];
modalButtons.value = [];
// 1.软件模块选型 无数据===方案初次创建
if (tableData.value.length === 0) {
// 1.1 方案初次创建-无软件模块选型方案数据-无代码仓发版数据
if (tableCodeData.value.length === 0) {
modalTips.value = [$swpT('common.createNewModules')];
modalButtons.value = [
{
label: $swpT('common.createNewPlan'), // 创建新方案 按钮
type: 'primary',
handler: () => {
nextHandleConfirmModel();
}
}
];
confirmStepChangeModalRef.value.open(true);
return;
} else {
// 1.1 方案初次创建-有发版数据
modalTips.value = [$swpT('common.createNewModules'), $swpT('common.createNewPlanData')];
modalButtons.value = [
{
label: $swpT('common.createNewPlan'), // 按钮:创建新方案
type: 'primary',
handler: () => {
nextHandleConfirmModel();
}
},
{
label: $swpT('common.createBasedReleaseData'), // 按钮:基于发版数据创建新方案
type: 'primary',
handler: () => {
getQueryPmxuData();
}
}
];
confirmStepChangeModalRef.value.open(true);
return;
}
}
// 2.方案非初次创建-方案非审批中
if (tableData.value.length > 0) {
// 2.1 存在审批中数据
const hasApprovaling = tableData.value.some(item => item.flowStatus === 'approvaling');
if (hasApprovaling) {
// 提示 :存在审批中的方案,不允许再次创建新方案,请等待方案审批完成
modalTips.value = [$swpT('common.approvalInProgress')];
confirmStepChangeModalRef.value.open(true);
return;
}
// 2.2 无审批中,有最新草稿数据
const noApprovalHasCreate = tableData.value.some(item => item.flowStatus !== 'approvaling' && item.selectionStatus === 'createLatest');
if (noApprovalHasCreate) {
// 无发版数据
if (tableCodeData.value.length === 0) {
// 提示:存在草稿的方案,不允许再次创建新方案,请修改已有方案
modalTips.value = [$swpT('common.draftExistsCannotCreateNewPlan')];
modalButtons.value = [
{
label: $swpT('common.editExistingPlan'), // 按钮: 修改已有方案
type: 'primary',
handler: () => {
// 根据最新草稿 数据获取orderCode 跳转到草稿详情页修改
const filterData = tableData.value.filter(data => data.selectionStatus === 'createLatest')?.map(item => item.orderCode);
// 跳转到创建页面 1.创建新方案
const url = router.resolve({
name: 'createSwModulePlan',
params: {orderCode: String(filterData), status: '', flowStatus: ''},
query: route.query
}).href;

window.open(url, '_blank');
}
}
];
confirmStepChangeModalRef.value.open(true);
return;
} else {
// 有发版数据
// 提示:修改已有方案: 编辑已有方案进行修改 基于发版更新已有方案: 基于最新发版数据更新已有方案软件模块PMXU表
modalTips.value = [$swpT('common.editExistingPlanForModification'), $swpT('common.updateExistingReleaseData')];
modalButtons.value = [
{
label: $swpT('common.editExistingPlan'), // 按钮: 修改已有方案
type: 'primary',
handler: () => {
// 根据最新草稿 数据获取orderCode 跳转到草稿详情页修改
const filterData = tableData.value.filter(data => data.selectionStatus === 'createLatest')?.map(item => item.orderCode);
// 跳转到创建页面 1.创建新方案
const url = router.resolve({
name: 'createSwModulePlan',
params: {orderCode: String(filterData), status: '', flowStatus: ''},
query: route.query
}).href;

window.open(url, '_blank');
}
},
{
label: $swpT('common.updatePlanBasedOnReleaseData'), // 按钮:基于发版数据更新已有方案
type: 'primary',
handler: () => {
// 调取pmxu接口 根据填充的信息覆盖最新草稿的原有数据Code
// 根据最新草稿
const filterCreateLatestData = tableData.value.filter(data => data.selectionStatus === 'createLatest')?.map(item => item.orderCode);
stepsFormStore.updateStepsOrderCode(String(filterCreateLatestData));
getQueryPmxuData();
}
}
];
}
confirmStepChangeModalRef.value.open(true);
return;
}
// 2.3 无审批中,无草稿,有最新发布
const haveNewApprovaling = tableData.value.some(item => item.flowStatus !== 'approvaling' && item.flowStatus !== 'create' && item.selectionStatus === 'enabledLatest');

}
}
confirmStepChangeModalRef.value.open(true);
}, 150);

</script>






 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图表封装组件

图表封装: 图表封装使用:<template> <!--软件模块复用率图表--> <chart-and-table ref="chartAndTableRef" :chart-desc="chartDesc" :chart-loading="chartLoading" :columns="columns" :list=&qu…

vue3+ts展示条项字段

展示条项组件:<el-form v-if="currentStep === 4" label-position="left" label-width="120px" style="display: flex;flex-wrap: wrap;justify-content: flex-start;margin-left: 138px;"> <el-row v-for="(ro…

elasticsearch的RestAPI之操作文档

RestClient操作文档 新增文档 将DB表中的数据同步到elasticsearch 1)查询数据库 1.1)数据库查询后的结果是一个Hotel类型的对象1 @Data2 @TableName("tb_hotel")3 public class Hotel {4 @TableId(type = IdType.INPUT)5 private Long id;6 private St…

【VPX303】基于 3U VPX 总线架构的双银河飞腾 FT-M6678 DSP 信号处理平台(100%全国产化)

​产品概述 VPX303 是一款基于 3U VPX 总线架构的高性能信号处理板,板载 2 片国防科大银河飞腾 FT-M6678 多核浮点运算 DSP,可以实现各种实时性要求较高的信号处理算法。板卡每个 DSP 均支持 5 片 DDR3 SDRAM 实现数据缓存,两片DSP 之间通过 X4 SRIO 进行互联。每个 DSP 均引…

第七章 中断

本文是对《操作系统真象还原》第七章学习的笔记,欢迎大家一起交流。第七章 中断 本文是对《操作系统真象还原》第七章学习的笔记,欢迎大家一起交流。 a 启用中断 本节的主要任务是打开中断,并且使用时钟中断测试 知识部分 中断分类 中断可以分为外部中断和内部中断,这已经是…

PHP语法进阶

PHP语法进阶 数组 数组能够在单个变量中存储多个值,并且可以根据 键 访问其中的 值PHP有两种数组:数值数组、关联数组。 数值和关联两个词都是针对数组的键而言的。 先介绍下数值数组,数值数组是指数组的键是整数的数组,并且键的整数顺序是从0开始,依次类推。 数值数组 $m…

Agentic RAG 系统的崛起

探秘智能检索新境界:Agentic RAG 系统的崛起 📖阅读时长:10分钟 🕙发布时间:202探秘智能检索新境界:Agentic RAG 系统的崛起 📖阅读时长:10分钟 🕙发布时间:2025-01-15近日热文:全网最全的神经网络数学原理(代码和公式)直观解释 欢迎关注知乎和公众号的专栏内…

5、提升Java的并发性

CompletableFuture及反应式编程背后的概念 :::info ❏线程、Future以及推动Java支持更丰富的并发API的进化动力 ❏ 异步API ❏ 从“线框与管道”的角度看并发计算 ❏ 使用CompletableFuture结合器动态地连接线框❏ 构成Java 9反应式编程Flow API基础的“发布-订阅”协议❏ 反应…

goal vs objective vs target

goal 680 objective 2421 target 1284GOAL vs OBJECTIVE left 4WORD 1: GOAL 过滤200WORD W1 W2SCORED 1423 1 He has scored a further five goals in the Spanish Supercup and the Champions League.他在西班牙超级杯和冠军联赛中又打进了五个进球。 scored Barcas fourth…

大模型备案流程-简易易懂

大模型备案除了资料撰写难度高外,难点还在于各省没有统一标准。备案流程、资料要求、考察重点都会有些许差异。不过,各省的大体申报流程都如下文所示(各省主要差异点我会标出,具体内容可以一起沟通交流): 一、备案申请 报请申请者所在省份/直辖市/自治区网信:向企业注册地…

KingbaseES RAC集群案例之---jmeter压测

KingbaseES RAC、jmeter案例说明: 通过jmeter压测,测试KingbaseES RAC集群负载均衡功能。 数据库版本: test=# select version();version ---------------------KingbaseES V008R006 (1 row)测试架构:一、jmeter版本 1、系统jiava版本 [root@node203 ~]# java -version ope…

{LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度 题解

\(\text{LOJ \#6041. 「雅礼集训 2017 Day7」事情的相似度 题解}\) 解法一 由 parent 树的性质得到,前缀 \(s_i,s_j\) 的最长公共后缀实质上就是 \(i,j\) 在 SAM 中的 \(\operatorname{LCA}\) 在 SAM 中的 \(\operatorname{len}\)。让我们考虑如何处理 \((l,r)\) 区间内的询问…