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

昌平企业网站建设广告公司图片

昌平企业网站建设,广告公司图片,做网站的资料修改,抖音矩阵排名软件seo前置文章 一、vue使用element-ui自定义样式思路分享【实操】 二、vue3&ts&el-tabs多个tab表单校验 现状确认 点击添加按钮,没有点击样式,用户感知不明显没有限制最大的tab添加数量,可以无限添加 调整目标&代码编写 调整目标…

前置文章

一、vue使用element-ui自定义样式思路分享【实操】
二、vue3&ts&el-tabs多个tab表单校验

现状确认

  • 点击添加按钮,没有点击样式,用户感知不明显
  • 没有限制最大的tab添加数量,可以无限添加
    请添加图片描述

调整目标&代码编写

调整目标

  • 点击添加按钮,按钮背景变成蓝色,加号图标变成白色
  • 限制最大的tab添加数量为10,超过10添加按钮设置为灰色不可点击

代码编写

点击添加按钮,按钮背景变成蓝色

在vue使用element-ui自定义样式思路分享【实操】提到了如何给el-tabs按钮自定义样式,文本在按钮已经设置了自定义样式的基础上进行,首先实现点击按钮时,背景颜色变成蓝色,考虑使用伪类选择器active来实现。
蓝色保持与element框架默认提供的一致,可以通过Snipaste来拾取:F1开启截屏,鼠标移动到蓝色区域,Shift切换颜色数据类型,按C完整复制。
在这里插入图片描述
代码调整如下

/*添加按钮点击显示蓝色*/
.asset-tab :deep(.el-tabs__new-tab):active {background: #409eff;
}

效果
请添加图片描述

点击添加按钮,加号图标变成白色

观察svg的样式选择器,观察到通过fill设置颜色不生效,修改color颜色才生效,例如下图中设置为红色
在这里插入图片描述
添加代码

/*设置svg点击颜色显示白色*/
.asset-tab :deep(.el-tabs__new-tab):active .is-icon-plus svg {color: white;
}

效果
请添加图片描述

js动态禁止按钮点击&设置按钮禁止样式

添加禁止样式(主要关注前面三行)

/*禁止样式*/
.asset-tab :deep(.el-tabs__new-tab.disabled) {pointer-events: none;opacity: 0.8;background: lightgray;height: 30px;width: 30px;border-radius: 15px;font-size: 16px;
}

操作document动态添加或去除禁止样式,注意document.querySelector()选择器不需要加:deep(),并将修改逻辑抽取成方法setAddBtnStatus,在增减tab逻辑后调用即可

const setAddBtnStatus = function () {const newTab = document.querySelector('.asset-tab .el-tabs__new-tab')console.log('newTab', newTab)const index = tabs.value.lengthif (index >= 10) {newTab?.classList.add('disabled')} else {newTab?.classList.remove('disabled')}
}

最终效果&完整代码

请添加图片描述
完整代码:

<!--AssetCreate.vue-->
<template><div style="margin-bottom: 10px"><h3>数据源选择:</h3><el-switch v-model="isUseLocalFlag" active-text="使用本地服务数据" inactive-text="使用mock数据"/><el-button @click="setTabData" style="margin-left: 10px;">给tab赋值</el-button><el-button @click="clearTabData" >清空tab赋值</el-button></div><div class="asset-tab"><el-tabs v-model="activeTab" type="card" editable class="demo-tabs" @edit="handleTabsEdit"><el-tab-pane v-for="tab in tabs" :key="tab.name" :label="tab.label" :name="tab.name"><AssetItem ref="assetItemRefs" :insertForm="tab.insertForm"/></el-tab-pane></el-tabs></div><div class="bottom-btn"><el-button @click="submitAsset" type="primary">提交</el-button></div>
</template><script setup lang="ts">
import { ref } from 'vue'
import axios from 'axios'
import type { TabPaneName } from 'element-plus'
import { removeRedundantFields } from '@/utils/methodUtil'
import AssetItem from '@/components/asset/AssetItem.vue'
import type { AssetFormData } from '@/types'
import { ElMessage } from 'element-plus'
// 当前激活的tab
const activeTab = ref('表单 1')
// tabs初始数据
const tabs = ref([{ label: '表单 1', name: '表单 1', insertForm: {} }
])
const isUseLocalFlag = ref(true)
const clearTabData = function () {tabs.value = [{ label: '表单 1', name: '表单 1', insertForm: {} }]activeTab.value = '表单 1'setAddBtnStatus()
}
const setTabData = async function () {const bizId = '0777c40218114c35a29b0d4d84355668'if (isUseLocalFlag.value) {await axios.post(`/asset/assetInfo/${bizId}/byBizId`).then(result => {if (result.status === 200) {tabs.value = []const assetInfoList = result?.data?.data?.assetInfoListconst removeResult = removeRedundantFields(assetInfoList, ['extAttribute11', 'extAttribute12','extAttribute13', 'extAttribute14', 'extAttribute15', 'extAttribute16', 'extAttribute17', 'extAttribute18','extAttribute19', 'extAttribute20'])removeResult.forEach((item, index) => {const newTabName = `表单 ${index + 1}`tabs.value.push({label: newTabName,name: newTabName,insertForm: item})setAddBtnStatus()activeTab.value = newTabName})}})} else {// 请求mock数据await axios.post('/mock/asset/assetInfo', { bizId }).then(result => {const assetInfoList: Array<AssetFormData> = result?.data?.data?.assetInfoListtabs.value = []assetInfoList.forEach((asset, idx) => {const newTabName = `表单 ${idx + 1}`tabs.value.push({label: newTabName,name: newTabName,insertForm: asset})setAddBtnStatus()activeTab.value = newTabName})})}
}
const assetItemRefs = ref<InstanceType<typeof AssetItem>[]>([])
const handleTabsEdit = (targetName: TabPaneName | undefined,action: 'remove' | 'add'
) => {if (action === 'add') {let index = tabs.value.lengthif (index >= 10) returnconst newTabName = `表单 ${++index}`tabs.value.push({label: newTabName,name: newTabName,insertForm: {}})activeTab.value = newTabName} else if (action === 'remove') {const activeName = activeTab.valueif (tabs.value.length === 1) returntabs.value = tabs.value.filter((tab) => tab.name !== targetName)tabs.value.forEach((item, index) => {item.name = `表单 ${++index}`item.label = item.name})const currentExist = tabs.value.some((item, index) => {if (item.name === activeName) {return index}return false})if (!currentExist) activeTab.value = tabs.value[tabs.value.length - 1].name}setAddBtnStatus()
}
const setAddBtnStatus = function () {const newTab = document.querySelector('.asset-tab .el-tabs__new-tab')const index = tabs.value.lengthif (index >= 10) {newTab?.classList.add('disabled')} else {newTab?.classList.remove('disabled')}
}
const verifyPass = ref(true)
const submitAsset = async function () {for (const index in assetItemRefs.value) {const verifyResult = await assetItemRefs.value[index].submitForm()// 定位到第一个校验失败的tabif (!verifyResult) {verifyPass.value = falseactiveTab.value = `表单 ${Number(index) + 1}`break} else {verifyPass.value = true}}if (verifyPass.value) ElMessage({ message: '表单校验通过', type: 'success' })
}
</script><style scoped>
/*禁止样式*/
.asset-tab :deep(.el-tabs__new-tab.disabled) {pointer-events: none;opacity: 0.8;background: lightgray;height: 30px;width: 30px;border-radius: 15px;font-size: 16px;
}
.asset-tab :deep(.el-tabs__new-tab) {height: 30px;width: 30px;border-radius: 15px;font-size: 16px;
}/*添加按钮点击显示蓝色*/
.asset-tab :deep(.el-tabs__new-tab):active {background: #409eff;
}
/*设置svg点击颜色显示白色*/
.asset-tab :deep(.el-tabs__new-tab):active .is-icon-plus svg {color: white;
}
.bottom-btn {text-align: center;margin-bottom: 10px;
}
</style>

代码仓:hello_vue3


文章转载自:

http://A08f7Q7V.rhjhy.cn
http://ZlByPIxG.rhjhy.cn
http://TdrXnvtR.rhjhy.cn
http://kWJTUHs2.rhjhy.cn
http://eioBkJ8n.rhjhy.cn
http://dMmgocMM.rhjhy.cn
http://zsa7NEsa.rhjhy.cn
http://Sc5iH6bB.rhjhy.cn
http://NGHmcmWY.rhjhy.cn
http://SKdQY703.rhjhy.cn
http://l3W6n4rq.rhjhy.cn
http://RRcptoIQ.rhjhy.cn
http://l7hHONVX.rhjhy.cn
http://Y0dff5b6.rhjhy.cn
http://5gU0u2fE.rhjhy.cn
http://IVpJGGCp.rhjhy.cn
http://In6VlOOf.rhjhy.cn
http://sXRO9fZy.rhjhy.cn
http://RZy1TBs3.rhjhy.cn
http://J3ZJojym.rhjhy.cn
http://2hJTqjKr.rhjhy.cn
http://rSAm7YWr.rhjhy.cn
http://K1yAcoVj.rhjhy.cn
http://08PlDWAd.rhjhy.cn
http://YCpz4QaC.rhjhy.cn
http://QJULgXAy.rhjhy.cn
http://Ll2aSGjk.rhjhy.cn
http://MEOwnVVA.rhjhy.cn
http://yJDSOyUK.rhjhy.cn
http://uwy1m1H0.rhjhy.cn
http://www.dtcms.com/wzjs/770343.html

相关文章:

  • 滁州网站建设价格专门做字体设计的网站
  • 遵义市网站建设自己怎么设计公司logo
  • 网站建设 微信公众号运营南宁哪家公司建设网站比较好
  • 做百度推广送网站吗网页制作与设计考试
  • 安徽合肥建设局网站布吉做棋牌网站建设哪家便宜
  • 如何做视频类网站wordpress 公众号
  • 购物网站项目开发wordpress媒体库+下载
  • 在线精品课程网站开发效果图制作软件免费
  • 网站开发与发布四川大良网站建设
  • 烟台专业的做网站公司Seo建设网站的步骤
  • 企业品牌营销型网站建设wordpress分页标签
  • 于飞网站开发wordpress编辑下行
  • 做毕业设计资料网站钦州做网站的公司
  • 企业网站维护工作计划房产网站推广方法
  • 淘宝网站内站建设wordpress 字号
  • 福田做网站优化乐云seo星宿网站建设
  • 建卖手机网站东莞网站建设设计价格
  • 北京企业网站seo平台浏览器老是出现站长工具
  • 网站建站和维护成都 建设网站
  • 怎样做团购网站网站建设+人员+年终总结
  • 主流门户网站公司简介样本
  • 手机网站总是自动跳转奖励网站代码
  • 建设网站要不要工商执照公司网站管理维护
  • 长沙河西网站建设seo系统是什么
  • 装修公司企业网站开发规划猫眼网站建设
  • 廊坊商昊网站建设石家庄今天又发现一例
  • 企业网站未来发展趋势设计师个人作品展示网站
  • 东莞市专注网站建设梅州做网站
  • 永宝网站建设招聘信息怎么做企业网站推广
  • 网站优化建设广州郑州网站推广排名公司