react+antdMobie实现消息通知页面样式

一、实现效果

二、代码

import React, { useEffect, useState } from 'react';
import style from './style/index.less';
import { CapsuleTabs, Ellipsis, Empty, SearchBar, Tag } from 'antd-mobile';
//消息通知页面
export default function Notification(props) {
    const [options, setOptions] = useState([
        {
            label: '最近',
            value: 'zj',
            checked: true,
        },
        {
            label: '评审通知',
            value: 'pstz',
            checked: false,
        },
        {
            label: '政策制度',
            value: 'zczd',
            checked: false,
        },
        {
            label: '知识库',
            value: 'zsk',
            checked: false,
        },
        {
            label: '常见问题',
            value: 'cjwt',
            checked: false,
        },
    ]);

    const [list, setList] = useState([
        {
            title: '通知公告名称1111',
            ywlx: 'pstz',
            content: '公告简介:公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介介公告简介公告简介公告简介公告简介',
        },
        {
            title: '通知公告名称1111',
            ywlx: 'zczd',
            content: '公告简介:公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介介公告简介公告简介公告简介公告简介',
        },
        {
            title: '通知公告名称1111',
            ywlx: 'zsk',
            content: '公告简介:公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介介公告简介公告简介公告简介公告简介',
        },
        {
            title: '通知公告名称1111',
            ywlx: 'cjwt',
            content: '公告简介:公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介介公告简介公告简介公告简介公告简介',
        },
        {
            title: '通知公告名称1111',
            ywlx: 'pstz',
            content: '公告简介:公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介公告简介介公告简介公告简介公告简介公告简介简介公告简介公告简简介公告简介公告简简介公告简介公告简',
        },
    ]);
    const [checkedList, setCheckedList] = useState([]);

    useEffect(() => {
        setCheckedList(list);
    }, [props]);

    //切换条件
    const toggle = (item, index) => {
        const element = document.getElementById('option');
        if (element) {
            element.scroll({
                top: 0,
                left: 50 * Number(index), // 计算目标位置
                behavior: 'smooth',
            });
        }
        const newoptions = options.map((res) => {
            return {
                ...res,
                checked: res == item,
            };
        });
        setOptions(newoptions);
        toggleList(item);
    };
    const toggleList = (item) => {
        if (item.value == 'zj') {
            setCheckedList(list);
        } else {
            const newList = list.filter((res) => {
                return res.ywlx == item.value;
            });
            setCheckedList(newList);
        }
    };

    return (
        <>
            <div className={style.container}>
                <div className={style.top}>
                    <SearchBar
                        placeholder="输入事项名称或者关键字"
                        className={style.search}
                        style={{
                            '--background': 'rgba(255, 255, 255, 0.35)',
                            '--height': '32px',
                            '--placeholder-color': 'rgba(255, 255, 255, 0.65)',
                        }}
                    />
                </div>
                <div className={style.option} id="option">
                    {options.map((item, index) => {
                        return (
                            <div
                                key={index}
                                className={`${item.checked ? style.checked : style.block}`}
                                onClick={() => {
                                    toggle(item, index);
                                }}
                            >
                                {item.label}
                            </div>
                        );
                    })}
                </div>
                <div className={style.content}>
                    {checkedList.map((item, index) => {
                        return (
                            <div key={index} className={style.card}>
                                <div style={{ display: 'flex', alignItems: 'center', borderBottom: '1px solid #979797' }}>
                                    {item.ywlx == 'pstz' && <Tag color="#2db7f5">评审通知</Tag>}
                                    {item.ywlx == 'zczd' && <Tag color="#1ac4c4">政策制度</Tag>}
                                    {item.ywlx == 'zsk' && <Tag color="#87d068">知识库</Tag>}
                                    {item.ywlx == 'cjwt' && <Tag color="#cf1322">常见问题</Tag>}

                                    <span className={style.title}>{item.title}</span>
                                </div>

                                <div className={style.desc}>
                                    <Ellipsis direction="end" content={item.content} rows={2} />
                                </div>
                            </div>
                        );
                    })}
                    {checkedList.length == 0 && <Empty style={{ padding: '64px 0' }} imageStyle={{ width: 128 }} description="暂无数据" />}
                </div>
            </div>
        </>
    );
}

三、css样式

::-webkit-scrollbar {
    width: 0px;
}

.container {
    height: 100vh;
    width: 100%;
    overflow-y: auto;
    overflow-x: hidden;
    position: fixed;
    font-size: 14px;

    .top {
        background-color: #BF120D;
        height: 90px;
        display: flex;
        align-items: center;

        .search {
            width: 95%;
            margin: auto;
            padding-top: 20px;
        }
    }

    .option {
        display: flex;
        align-items: center;
        overflow-x: auto;
        min-height: 70px;

        .block {
            color: #979797;
            font-weight: 400;
            border-radius: 6px;
            border: 1px solid #979797;
            margin: 0px 10px;
            padding: 5px 10px;
            min-width: 100px;
            text-align: center;
        }

        .checked {
            color: #fff;
            background-color: #BF120D;
            font-weight: 400;
            border-radius: 6px;
            border: 1px solid #BF120D;
            margin: 0px 10px;
            padding: 5px 10px;
            min-width: 100px;
            text-align: center;
            position: relative;
        }

        .checked::after {
            content: '';
            position: absolute;
            left: 50%;
            bottom: -10px;
            /* 小箭头的位置调整 */
            width: 0;
            height: 0;
            border-left: 10px solid transparent;
            border-right: 10px solid transparent;
            border-top: 10px solid #BF120D;
            /* 小箭头的颜色 */
            transform: translateX(-50%);
        }
    }

    .content {
        position: relative;
        margin-bottom: 10%;

        .card {
            padding: 10px;
            border-radius: 8px;
            margin: 10px auto;
            width: 96%;
            background-color: #fff;
            display: flex;
            align-items: center;

            .title {
                font-weight: 600;
                display: flex;
                align-items: center;
                line-height: 0.3rem;
                font-size: 0.18rem;
            }

            .sj {
                text-align: end;
                color: #999;
            }
        }
    }

    // 消息明细
    .detail_content {
        padding: 10px;
        background-color: #fff;

        .title {
            font-size: 0.16rem;
            font-weight: 700;
            line-height: 0.4rem;
            text-align: center;
        }

        .qt {
            display: flex;
            align-items: center;
            justify-content: space-between;
            color: #999;
            line-height: 0.4rem;
        }
    }

}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

国家推动工业制造业数字化转型的政策与措施综述

在全球化与信息化浪潮的推动下&#xff0c;工业制造业正经历着前所未有的数字化转型。这一变革不仅深刻重塑了生产方式与商业模式&#xff0c;更成为提升国家竞争力、促进经济高质量发展的关键驱动力。随着科技的飞速发展&#xff0c;数字化转型已成为工业制造业转型升级的必然…

基于微信小程序的健康管理系统(源码+定制+文档)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

叉车防撞系统方案,引领安全作业新时代

在现代工业的舞台上&#xff0c;叉车如同忙碌的“搬运工”&#xff0c;在仓储和制造环境中发挥着不可或缺的作用。然而&#xff0c;随着叉车使用频率的不断攀升&#xff0c;安全事故也如影随形&#xff0c;给企业带来经济损失的同时&#xff0c;更严重威胁着操作人员的生命安全…

拓扑结构的理解

拓扑结构是数学中的一个重要概念&#xff0c;主要研究空间的性质及其在连续变换下的保持不变的特征。它是拓扑学的基础内容之一&#xff0c;广泛应用于多个领域&#xff0c;包括数学、物理、计算机科学等。 基本概念 1. 拓扑空间&#xff1a; 一个集合 X 和一个拓扑T 的组合…

毕业设计选题:基于ssm+vue+uniapp的购物系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

基于Python可视化的学习系统的设计与实现(源码+文档+调试+答疑)

文章目录 一、项目介绍二、视频展示三、开发环境四、系统展示五、代码展示六、项目文档展示七、项目总结 大家可以帮忙点赞、收藏、关注、评论啦 &#x1f447;&#x1f3fb; 一、项目介绍 随着计算机技术发展&#xff0c;计算机系统的应用已延伸到社会的各个领域&#xff0c…

真正的Open AI ——LLaMA颠覆开源大模型

1. LLaMA 简介 LLaMA&#xff08;Large Language Model Meta AI&#xff09;是由Meta&#xff08;原Facebook&#xff09;推出的一个大型语言模型系列&#xff0c;旨在通过更小的模型规模和更少的计算资源&#xff0c;实现与其他主流语言模型&#xff08;如GPT&#xff09;相媲…

Linux-TCP重传

问题描述&#xff1a; 应用系统进行切换&#xff0c;包含业务流量切换&#xff08;即TongWeb主备切换&#xff09;和MYSQL数据库主备切换。首先进行流量切换&#xff0c;然后进行数据库主备切换。切换后发现备机TongWeb上有两批次慢请求&#xff0c;第一批慢请求响应时间在133…

完成UI界面的绘制

绘制UI 接上文&#xff0c;在Order90Canvas下创建Image子物体&#xff0c;图片资源ui_fish_lv1&#xff0c;设置锚点&#xff08;CountdownPanelImg同理&#xff09;&#xff0c;命名为LvPanelImg,创建Text子物体&#xff0c;边框宽高各50&#xff0c; &#xff0c;重名为LvT…

vue结合element-ui实现列表拖拽变化位置,点击拖动图标拖动整个列表元素,使用tsx格式编写

先来看下需要实现的效果 当鼠标放在左侧图标上时&#xff0c;可以拖动整个列表元素&#xff0c;调整顺序 思路介绍 使用draggable可以设置元素可拖动&#xff0c;然后分别设置三个事件处理函数&#xff0c;监听onDragstart、onDragover、onDragend三个事件 注意&#xff1a…

线性模型到神经网络

&#x1f680; 在初始神经网络那一节&#xff08;链接如下&#xff1a;初始神经网络&#xff09;的最后&#xff0c;我们通过加大考虑的天数使得我们最后得到的模型Loss最终停留在了0.32k&#xff0c;当我们在想让模型更加准确的时候&#xff0c;是做不到的&#xff0c;因为我们…

淘宝商品评论接口技术详解及代码示例

引言 淘宝商品评论接口是电商数据分析中不可或缺的一部分&#xff0c;它可以帮助商家和消费者更好地了解商品的质量、用户满意度等信息。本文将详细介绍如何使用淘宝商品评论接口&#xff0c;并提供相应的代码示例。 淘宝商品评论接口概述 淘宝商品评论接口主要用于获取商品…

【前端开发入门】前端开发环境配置

目录 引言一、Vscode编辑器安装1. 软件下载2. 软件安装3. 插件安装 二、Nodejs环境安装及版本控制1. 安装内容2. 使用nvm安装2.1 软件下载并安装2.2 nvm基本指令2.3 nvm下载过慢导致超时解决 三、git安装及配置1. 软件下载2. 软件安装3. 基础配置 四、总结 引言 本系列教程旨在…

【leetcode】122. 买卖股票的最佳时机 II

题目描述 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获得的 最大 利润 。…

【2025】基于Spring Boot的智慧农业小程序(源码+文档+调试+答疑)

文章目录 一、***-项目介绍二、***-开发环境三、***-系统展示四、***-代码展示五、***-项目文档展示六、***-项目总结 大家可以帮忙点赞、收藏、关注、评论啦 &#x1f447;&#x1f3fb; 一、***-项目介绍 当今社会已经步入了科学技术进步和经济社会快速发展的新时期&#x…

基于SpringBoot的网上租赁服务:设计与实现

第2章 关键技术简介 2.1 Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xf…

深度学习后门攻击分析与实现(二)

前言 在本系列的第一部分中&#xff0c;我们已经掌握了深度学习中的后门攻击的特点以及基础的攻击方式&#xff0c;现在我们在第二部分中首先来学习深度学习后门攻击在传统网络空间安全中的应用。然后再来分析与实现一些颇具特点的深度学习后门攻击方式。 深度学习与网络空间…

解决 Android WebView 无法加载 H5 页面常见问题的实用指南

目录 1. WebView 简介 2. 常见问题 3. 网络权限设置 4. 启用 JavaScript 5. DOM Storage 的重要性 6. 处理 HTTPS 问题 7. 设置 WebViewClient 8. 调试工具 9. 其他调试技巧 10. 结论 相关推荐 1. WebView 简介 Android WebView 是一种视图组件&#xff0c;使得 And…

LiveGBS流媒体平台GB/T28181功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveGBS流媒体平台GB/T28181功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、直播播放2、录像播放3、搭建GB28181视频直播平台 1、直播播放 国标设备-》查看通道-》播放 &#xff0c;左键单击可以拉取矩形框&#xff0c;放大选中的范围&#xff0c;释…

vue-element 表格组合查询 - fc-table-search 组件封装

开发目的 解决搜索form参数读取&#xff0c;配合异步请求&#xff0c;更新渲染数据&#xff1b;支持自适应高度&#xff0c;分页查询&#xff0c;搜索查询/重置。 额外提供formater类型&#xff1a;标签定义&#xff0c;金额&#xff0c;时间格式化&#xff0c;跨页勾选&#x…