首页 > 其他分享 >封装按钮信息与按钮数量动态显示与提示信息并进行触发按钮组件

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

时间:2025-01-15 13:45:30浏览次数:1  
标签:动态显示 const value item common 提示信息 按钮 swpT

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

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

封装组件页面: 

<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>






 

标签:动态显示,const,value,item,common,提示信息,按钮,swpT
From: https://www.cnblogs.com/nwy2012/p/18672700

相关文章

  • Winform自定义控件与案例 - 打造炫酷的自定义开关按钮控件
    文章目录1、控件效果2、开关控件需求说明3、案例实现1、属性扩展代码实现2、控件外观绘制3、事件实现4、拓展方法4、案例演示5、总结1、控件效果2、开关控件需求说明在开发Winform应用程序时,拥有一个美观且功能强大的UI控件库是非常重要的。本文将详细介绍如......
  • 【docker】docker desktop换国内源时 apply按钮为灰色or换源失败 解决方法
    配docker环境时复制进去国内镜像源后,发现apply按钮为灰色,点不了,如下图解决方法:往下滑,找到下图圈住的选项打勾再回到DockerEngine界面,发现可以点apply按钮了在文本框中添加"registry-mirrors":["http://mirrors.ustc.edu.cn", "http://mirror.azure.cn"]......
  • 用QT实现自定义样式按钮控件
    目录一、资源准备二、添加资源1)创建资源文件 2)添加图片资源 三、设置按钮样式1)定义QPixmap对象2)设置按钮图标3)图标切换4)实际效果四、总结在用QT开发界面程序时,默认的按钮控件样式不美观。当需要构建自定义的按钮样式,使界面显示效果更加美观时,可以对QT提供的默认......
  • win32汇编环境,对话框程序中对按钮控件常用操作的示例
    ;运行效果;win32汇编环境,对话框程序中对按钮控件常用操作的示例;常用的操作,例如创建按钮控件,使其无效,改变文本,得到文本等。;将代码复制进radasm软件里,直接就可以编译运行。重点部分加备注。;以下为asm文件。;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&......
  • 在 .NET Framework 中,C#代码防止按钮重复点击的后端处理
    ai生成:在.NETFramework中,防止按钮重复点击的后端处理通常涉及到Web应用程序(如ASP.NETWebForms或ASP.NETMVC)。以下是一些常见的后端处理方法和示例代码:ASP.NETWebForms在WebForms中,你可以使用ViewState或Session来防止按钮重复点击。以下是一个使用ViewSta......
  • 在浏览器中以按钮的方式执行Shell脚本
    一、功能描述有时候我们需要不定时的在服务器上执行某些脚本,当然我们可以使用电脑+XShell等工具登录到服务器运行脚本,如果使用手机就不方便操作了,那我们把脚本放在WEB页面中,只要手机可以正常访问到服务器,就可以使用浏览器打开页面,点击对应的按钮完成操作。在网页上规划好相应的......
  • 解决方案 | aardio的plus控件实现无边框悬浮窗带按钮带置顶
    importfonts.fontAwesome;importwin.ui;/*DSG{{*/varwinform=win.form(text="aardioform";right=312;bottom=50;border="none";menu=false;title=false)winform.add(bkplus={cls="bkplus";left=2;top=5;right=205;bottom=46;backgro......
  • 解决方案 | aardio 右上角和托盘区的关闭按钮功能不同源代码
    importwin.ui;/*DSG{{*/varwinform=..win.form(text="aardioForm";right=599;bottom=399)winform.add()/*}}*/importwin.util.tray;vartray=win.util.tray(winform,"~\extensions\res\app.ico")//创建托盘图标,如果不能显示图标,可能是图标问题,要复合图标tray......
  • 点击锁定按钮,锁定按钮要变成解锁按钮,然后状态要从待绑定变成 已锁定
    点击锁定按钮,锁定按钮要变成解锁按钮,然后状态要从待绑定变成已锁定点击解锁按钮,解锁按钮要变成锁定按钮,然后状态要从已锁定变成待绑定{"code":0,"msg":"状态更新成功","data":{"status":3}}1、状态列的el-table-column<el-table-c......
  • 如何使用底部导航按钮功能
    文章目录1概念介绍2使用方法3示例代码4经验总结我们在上一章回中介绍了BottomNavigationBarWidget,本章回中将介绍如何使用BottomNavigationBar切换页面。闲话休提,让我们一起TalkFlutter吧。1概念介绍我们在上一章回中介绍了BottomNavigationBar相关......