vue2:v-for实现的el-radio-group选中时显示角标,并自定义选中按钮的字体颜色和背景色

59 篇文章 ¥19.90 ¥99.00

        项目中需要实现一组预定义查询,每一个查询按钮在选中时右上角显示一个角标,展示当前查询返回的数据条目。

1、text-color="#3785FF" fill="#E6EAF1" 处理选中时的字体颜色和背景色,如上图,分别为蓝色和浅灰色。

2、badge中:value="selectedRadio === item?total:''" 动态显示内容,当前按钮选中状态下才显示数字,非选中状态下置为空。

<el-radio-group v-for="(item, index) in searchGroupList" :key="index"
                          v-model="selectedRadio" size="small" 
                          @change="handleSearchGroupChange(item)"
                          text-color="#3785FF" fill="#E6EAF1">
            <el-badge :value="selectedRadio === item?total:''" class="custom-badge" type="warni
<template> <div class="search-form-container"> <el-select v-model="selectedItem" filterable clearable placeholder="请搜索选择菜单" @change="handleSelectChange" :filter-method="filterMenu" @clear="handleClear" @focus="handleFocus" remote :remote-method="remoteMethod" > <el-option v-for="item in filteredMenus" :key="item.funcId" :label="item.name" :value="item.menuUrl" /> </el-select> <el-form :model="formData" label-width="120px" class="form-container"> <el-form-item label="操作员编号"> <el-input v-model="formData.createOpId" disabled /> </el-form-item> <el-form-item label="操作员编码"> <el-input v-model="formData.createOpCode" disabled /> </el-form-item> <el-form-item label="菜单编号"> <el-input v-model="formData.funcId" disabled /> </el-form-item> <el-form-item label="系统来源"> <el-input v-model="formData.opSource" disabled /> </el-form-item> <el-form-item label="页面编码"> <el-input v-model="formData.pageCode" disabled /> </el-form-item> <el-form-item label="菜单名称"> <el-input v-model="formData.funcName" disabled /> </el-form-item> <el-form-item label="创建间"> <el-date-picker v-model="formData.createDate" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期间" disabled /> </el-form-item> <el-form-item label="生效间"> <el-date-picker v-model="formData.effectiveDate" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择生效间" /> </el-form-item> <el-form-item label="失效间"> <el-date-picker v-model="formData.expireDate" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择失效间" /> </el-form-item> <el-form-item label="是否可以评价"> <el-radio-group v-model="formData.enabled"> <el-radio :label="true">是</el-radio> <el-radio :label="false">否</el-radio> </el-radio-group> </el-form-item> <div class="form-actions"> <el-button @click="resetForm">重置</el-button> <el-button type="primary" @click="saveForm">保存</el-button> </div> </el-form> </div> </template> <script> import { MUTATION } from '../config/constant.js'; import WbStore from '../utils/wbstore'; import { Button, Input, Select, FormItem, RadioGroup, Radio, Form, DatePicker, Option, } from 'element-ui'; import PinyinMatch from 'pinyin-match'; export default { name: 'MenuConfiguration', components: { [Button.name]: Button, [Input.name]: Input, [Select.name]: Select, [FormItem.name]: FormItem, [RadioGroup.name]: RadioGroup, [Form.name]: Form, [DatePicker.name]: DatePicker, [Option.name]: Option, [Radio.name]: Radio, }, data() { return { allMenus: [], selectedItem: null, formData: { createOpId: '', //创建的操作员编号 createOpCode: '', //创建的操作员编码 ext_C: '', //优化举措 ext_B: '', //下载地址 ext_A: '', //详细内容 funcId: '', //菜单编号 opSource: '', //系统来源 pageCode: '', //页面编号 enabled: '', //是否可以评价 A:允许 C:不允许 funcName: '', //菜单名称 hallFuncBaseId: '', //菜单基础编号 expireDate: '', //失效间 effectiveDate: '', //生效间 createDate: '', //创建间 }, filteredMenus: [], }; }, mounted() { let menu_ = WbStore.opsForHash.get(MUTATION.MENUS, 'menus') || {}; this.$store.commit(MUTATION.MENUS, menu_.kMenu); this.allMenus = Object.values(menu_.kMenu); }, methods: { handleFocus() { this.filteredMenus = []; }, handleClear() { this.filteredMenus = []; this.resetForm(); }, remoteMethod(query) { if (query !== '') { this.filterMenu(query); } else { this.filteredMenus = []; } }, filterMenu(query) { this.filteredMenus = this.allMenus.filter(item => { const nameMatch = item.name.includes(query); const pinyinMatch = PinyinMatch.match(item.name, query); return nameMatch || (pinyinMatch && pinyinMatch !== false); }); }, async handleSelectChange(pageCode) { if (!pageCode) { this.resetForm(); return; } console.log('e', this.selectedItem, pageCode); try { const result = await this.$http.post( 'GW_QRY_HOME_BUSIHOME_QRYHALLFUNCBASEINFO', { pageCode: pageCode }, ); console.log('返回result',result) this.formData = this.transformData(result); } catch (error) { console.error('获取菜单配置失败:', error); } }, transformData(rawData) { delete rawData.retCode; delete rawData.retMessage; return { ...rawData, opSource: rawData.opSource === '1' ? '业务大厅' : '网格通', enabled: rawData.upvoteState === 'A', expireDate: rawData.expireDate.replace('.0', ''), effectiveDate: rawData.effectiveDate.replace('.0', ''), createDate: rawData.createDate.replace('.0', ''), }; }, resetForm() { this.formData.effectiveDate = ''; this.formData.expireDate = ''; this.formData.enabled = ''; }, async saveForm() { if (!this.formData.pageCode) { this.$message.warning('请先选择菜单'); return; } try { console.log('传来的数据表单:', this.formData); let data = { ...this.formData, opSource: '1', upvoteState: this.formData.enabled ? 'A' : 'C' } delete data.enabled; console.log('保存的数据data:', data); await this.$http.post('GW_DEAL_HOME_BUSIHOME_SAVEBASEINFO', data); this.$message({ message: '保存成功', type: 'success', }); } catch (error) { this.$message({ message: '保存失败', type: 'warning', }); } }, }, }; </script> <style scoped> .search-form-container { max-width: 800px; margin: 20px auto; padding: 20px; border: 1px solid #ebeef5; border-radius: 4px; } .form-container { margin-top: 20px; } .form-actions { display: flex; justify-content: flex-end; margin-top: 20px; } </style> 以上述代码为基础,实现整个页面的样式优化,最好表单一行内三列,冒号对齐
最新发布
07-17
<template> <div class=“background” style=“font-family:kaiti”> <div class=“login-box” > <div style=“margin-bottom: 30px; font-size: 20px;“margin-right:500px > <div class=“blur-box” style=“margin-left: 500px;margin-right: 500px;margin-top: 35px;”> <h2 style=“color: black;margin-bottom: 20px;”>欢迎登录</h2> <el-form ref=“formRef” :rules=“data.rules” :model=“data.form” style=“margin-left: 35px;margin-bottom: 50px;”> <div class=“input-group” > <el-form-item prop=“username”> <input type=“text” v-model=“data.form.username” autocomplete=“off” prefix-icon=“Uaer” placeholder=“请输入账号” required </el-form-item> </div> <div class=“input-group” style=“margin-top: 10px;”> <el-form-item prop=“password”> <input show-password type=“password” v-model=“data.form.password” placeholder=“请输入密码” required </el-form-item> </div> <div class=“input-group” style=“margin-top: 10px;”> <el-form-item prop=“role”> </el-form-item> </div> <el-button @click=“login” type=“primary” style=“color: black;width: 91%;margin-top: 3px;margin-bottom: 10px;”>登 录</el-button> <div style=“text-align: right;”> 还没有账号? 请<a style=“color: #0742b1;text-decoration: none;” href=”/register”>注册</a> </div> </el-form> </div> </div> </div> </div> </template> <script setup> import { reactive } from ‘vue’; import { ref } from ‘vue’ import { User } from ‘@element-plus/icons-vue’; import request from ‘@/utils/request’; import { ElMessage } from ‘element-plus’; const data=reactive({ form:{ role:‘admin’ }, rules:{ username:[{ required:true,message:‘请输入账号’,trigger:‘blur’ }], password:[{ required:true, message:‘请输入密码’,trigger:‘blur’ }], }, user: null }) const formRef=ref() const username = ref(‘’) const password = ref(‘’) const login = () => { // 处理登录逻辑 formRef.value.validate((valid)=>{ if(valid){ request.post(‘/login’,data.form).then(res=>{ if(res.code===‘200’){ //存储后台返回的用户数据信息this.$set(this.data, ‘user’, response.data.user) localStorage.setItem(‘xm-pro-user’,JSON.stringify(res.data))//把json对象转换成json字符串存储 ElMessage.success(‘登录成功’) setTimeout(()=>{ location.href=‘/manager/home’ },500) } else{ ElMessage.error(res.msg) } })}})} </script> <style scoped> .background{ background: url(“@/assets/bg.png”); width:100%; height:100%; /**宽高100%是为了图片铺满屏幕 */ position: absolute; background-size: 100% 100%; } .login-box{ width: 50%; height: 100%; display: flex; align-items: center; position: absolute; } .blur-box { background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border-radius: 16px; padding: 40px; width: 400px; height: 270px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); border: 1px solid rgba(255, 255, 255, 0.18); position: relative; align-items: center; } h2 { color: rgba(255, 255, 255, 0.9); text-align: center; margin-bottom: 30px; } .input-group input { width: 80%; padding: 12px 20px; margin: 8px 0; background: rgba(255, 255, 255, 0.1); border: 1px solid rgba(255, 255, 255, 0.3); border-radius: 8px; color: #0c0b0b; transition: all 0.3s ease; } .input-group input:focus { outline: none; border-color: rgba(255, 255, 255, 0.6); background: rgba(255, 255, 255, 0.2); } button { width: 100%; padding: 12px; margin-top: 20px; background: #0742b1(2, 66, 139, 0.2); border: 1px solid rgba(160, 99, 99, 0.3); color: #43bbef; border-radius: 8px; cursor: pointer; transition: all 0.3s ease; } button:hover { background: rgba(255, 255, 255, 0.3); } </style>修改这个登录的前端页面,要求样式不要改变还是半透明磨砂,输入账号框里加一个用户图标,密码框里加一个密码图标.再在密码框下面给出多角色权限登录,其中角色有管理员,老师学生.给出小圆圈的样式选择角色,要求整体设计美观.要求角色选择在同一行上面而且选择按钮颜色要小清新的蓝色,登录框整体要在页面正中间,而且整体登录框占整个页面的大小也要十分合适.在给出的代码上作出修改之后再给我,需要完整代码
03-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值