- 基于css-vars-ponyfill实现换肤
小马甲丫
#换肤#npmcsscss前端换肤
文章目录一、换肤二、换肤调研2.1、`ElementUI`2.2、`ant.design`三、换肤痛点和思考四、换肤架构五、换肤技术选型和实现5.1、该方案的亮点和规则5.2、核心原理5.3、色组`&`色值平台设计5.4、获取在当前主题自定义变量颜色六、总结七、最后一、换肤网站或者应用一键切换主题(简称:换肤)功能,对每个前端开发者来说已经非常常见了,通常是一深一浅,或自由组合衍生出众多主题,或任
- 测试平台系列(33) 编写环境配置页面(下)
米洛丶
阅读本文可能需要一些时间,建议通勤/蹲坑的时候观看。回顾上篇编写了一部分结构,还剩下表格没有编写。以及和后端接口的联调,也会在本文补充。补充Table内容在此之前,我们给新增环境这个按钮加一个icon,这样会更直观。icon地址:https://ant.design/components/icon-cn/点击复制image其实icon也是一个组件,我们把它嵌入到Button补充Table组件需要注
- 封装ProTable组件
_琉
react.js前端前端框架
今天分享一篇关于ProComponents(ant.design)的文章,后面也会围绕ProTable这个组件去更新一个比较好用的table。这次主要用到的技术点:import{createContext,useEffect}from'react';import{useRef,useState}from'react';importProTablefrom'@ant-design/pro-table
- react: useMemo
小强有个dream
react18react.jsjavascript前端
useMemo避免组件更新结果重新计算,提高性能在https://ant.design/components/button-cn打开codesanbox,替换代码保存importReact,{useMemo,useState,useEffect}from"react";functionMyComponent({propB=2}){const[data,setData]=useState(1);co
- react: useEffect
小强有个dream
react18react.jsjavascript前端
可以吧useEffect看作是componentDidMountcomponentDidUpdatecomponentWillUnmount三个函数的组合在https://ant.design/components/button-cn打开一个codesanbox,替换下面代码importReact,{useEffect,useState}from"react";importReactDomfrom
- react: useState
小强有个dream
react18react.jsjavascriptecmascript
用来改变数据在https://ant.design/components/button-cn打开一个codesanbox替换importReact,{useState}from"react";import"./index.css";import{Button,Flex}from"antd";constApp:React.FC=()=>{const[data,setData]=useState({a
- React - Form.create
惊鸿尘
antd4之前使用Form.create()控制表单域Form.create()是一个高阶函数,包装过的组件可以通过props.form属性获取表单数据props.formantd4废弃了Form.create方法,见https://ant.design/docs/react/migration-v4-cn#%E7%A7%BB%E9%99%A4%E5%BA%9F%E5%BC%83%E7%9A%84
- antd ProTable 列配置枚举值 request无效
jack钱
ProTable-高级表格-ProComponents(ant.design)Columns列定义枚举值方式:1.valueEnum2.requestrequest无效,原因是需要设置valueType:'select',{title:'状态',dataIndex:'validSta',valueType:'select',request:async()=>[{label:'新建',value:'
- 关于清空ant.design 中表单内容的方法
IDIOT___IDIOT
javascript前端react.js
关于清空ant.design中表单内容的方法其实就两个方法具体怎么清除一个一个试试就知道了表单有两个可能的属性:formformRef可以用他们绑定两个用法在代码部分定义:form=useRef()form=Form.useForm()清空的方法:form.current?.setFieldsValue({这里把你的值放进来并且赋值空字符串就好})form.setFieldsValue({这里把你
- AntDesignPro快速入门
智商偏低
JavaScripttypescriptjavascript前端
学习代码很简单,找对思路是关键,当我们看到一个项目的时候,总想着打开项目看一下代码,一看代码两眼发黑,互联网时代不可能把认识所有代码,当我们接触一个项目的时候,先看项目目录结构,对着目录结构写一套增删查改就算是入门了。安装环境node+vscode创建项目参考官方:入门-蚂蚁设计专业版(ant.design)项目创建好了,打开一看,这么多目录无从入手啊,然后看官方文档,又要去了解umi,又要去了解
- ant.design(简称antd)中时间DatePicker中RangePicker的日期选择限定为只能选择某一天的0点之前的日期
王鹏飞的解忧屋
Reacthtml5javascriptreact.jscsshtml
需求:开始时间和结束时间只能选在一天之内,不能跨天选择。比如开始时间选择为2022年7月20日12点11分06秒,结束时间范围只能选择2022年7月20日12点11分06秒到2022年7月20日23点59分59秒。解答思路,开始选择的时分秒范围不做限制,当拿到开始的时分秒之后,在开始的时分秒基础上往后推即可,日期(年月日)就是选择开始和结束的日期(年月日)相同即可,主要是时分秒问题。下图是开始选择
- Antd Select 设置偏移量
优资园
组件antd前端javascriptreact.jscss
对于Select组件我要想实现如下效果,该如何处理呢?我们查看你select组件https://ant.design/components/select-cn#select-props并没有相关的属性API,如何去处理这个呢?添加dropdownAlign={{offset:[0,30]}}这个属性,可以设置偏移量,可以看https://github.com/ant-design/ant-desi
- 前端项目开发中用到的20个轮子 开发效率提升200%
耿先森_fd76
ReactUI组件库公司的测试项目和我自己的项目全部使用React开发,所以先来推荐我经常使用的React组件库。AntDesign:文档齐全,社区生态良好,有手机版,还有PC版。可以用来快速创建手机/后台/内部应用的UI组件库。我的博客,就是那这个组件库制作的。网址:https://ant.design/ReactBootstrap:BootStrap我在JQuery时代就开始使用,现在已经推出
- ant.design 的 Pro Component 的 ProTable 清除表单内容的方法
IDIOT___IDIOT
前端ant.design
ant.design的ProComponent的ProTable清除表单内容的方法我们用ProTable进行一个表单的呈现,只需要在属性上进行一个type={“form”}的属性即可,用到表单的时候肯定需要对表单的数据进行提取,以及当数据提交的完的时候我们要进行清空原来的数据。使用示例(不能清除表单中的数据):首先需要知道的是,我们想要拿到在表单中的数据,只要在onSubmit事件定义一个参数,组
- react 引入antd 样式_react引入antd组件
新德里的雨
react引入antd样式
1.antd官网:https://ant.design/docs/react/introduce-cn2、React中使用Antd1、安装antdnpminstallantd--save/yarnaddantd/cnpminstallantd--save2、在您的react项目的css文件中引入Antd的css@import'~antd/dist/antd.css';3、看文档使用:如使用Butt
- Warning: [antd: Menu] `children` will be removed in next major version. Please use `items` instead.
忘喧
报错前端javascript开发语言
Warning:[antd:Menu]childrenwillberemovedinnextmajorversion.Pleaseuseitemsinstead.andt更新导致警告https://ant.design/components/menu-cn/在4.20.0版本后,我们提供了的简写方式,有更好的性能和更方便的数据组织方式,开发者不再需要自行拼接JSX。同时我们废弃了原先的写法,你还是
- react学习
qiu_lovejun998
前段react
react相关的组件APIhttps://ant.design/components/card-cn/#目录结构#我们已经为你生成了一个完整的开发框架,提供了涵盖中后台开发的各类功能和坑位,下面是整个项目的目录结构。├──config#umi配置,包含路由,构建等配置├──mock#本地模拟数据├──public│└──favicon.png#Favicon├──src│├──assets#本地静
- next.js+react+typescript+antd+antd-mobile+axios+redux+sass react服务端渲染构建项目,从构建到发布,兼容pc+移动端
局外人LZ
前端javascriptreact.jssass前端typescript
简介:该教程兼容pc+移动端,如只需一端,可忽略兼容部分教程,根据需要运行的客户端构建项目antd官网:https://ant.design/components/overview-cn/antd-mobile官网:https://mobile.ant.design/zhnext.js:https://www.nextjs.cn/react:https://react.zcopy.site/red
- react调用antd4.X自定义图标 icon(深入,解决阿里巴巴矢量图标自定义更改后无法引用问题)
你好昵称已存在
大前端reactantd4.x
1先贴图2看官网代码https://ant.design/components/icon-cn/#components-icon-demo-custom使用iconfont.cn,使用多个和单个是异曲同工之处。那里的scriptUrl是生成的一个远程链接,我们在react里面调用它即可。3看这篇博客https://blog.csdn.net/weixin_44021270/article/deta
- React项目中常用的插件
Jie221
Axios中文网站说明:https://www.kancloud.cn/yunye/axios/234845一个基于promise的HTTP库,可以用在浏览器和node.js中。AntDesign中文网站:https://ant.design/docs/react/introduce-cn由蚂蚁金服提供的一套企业级的UI设计语言和React实现。DvaJsgithub地址:https://gith
- 接口自动化平台(一):antd + antd pro 安装和简介
出处不详,经久不息
四.react.jsantd
目录1.antd1.1进入ant.design官网做初步了解1.2安装antd1.3动手实际操作2.antdesignpro2.1antdpro介绍2.2antdpro安装2.3andtpro项目目录介绍2.4函数式组件的扩展2.4.1函数式组件的state,用React.useState()2.4.2函数式组件的props2.4.3函数式组件的ref,用React.useRef2.4.4函数式组
- react中ant.design框架如何配置动态路由
晓同哇哇~
react.js前端javascript
目录什么是动态路由?应用场景:ant.design动态路由如何配置:首先:找到app.tsx文件然后:找到menuHeaderRender其次:修改menuHeaderRender为menuDataRender编辑最后:在箭头函数里return出对应的数据代码例子代码片段1:代码片段2:总结:什么是动态路由?动态路由是一种在Web应用程序中用于根据特定参数或条件生成路由路径的方式。与静态路由不同,
- 基于ant.design的FormList,通过配置生成动态列表
吃瓜群众欢乐多
Reactant.design
目前只配置了输入框和文本框,需要的可自定义添加type实现效果如图constinitValues=[{type:'input',name:'start',label:'最小值',initValue:'',},{type:'input',name:'end',label:'最大值',initValue:'',},{type:'text',name:'unit',label:'采购单位',initVa
- [React] Antd Form.List 的基本使用
iChangebaobao
Reactreact.jsjavascript前端
[React]AntdForm.List的基本使用Form.List为字段提供数组化管理。官网:https://ant.design/components/form-cn/#Form.List{(fields,{add,remove})=>({gettext('用户填写信息')}add()}>+{gettext('请在下方输入框中配置用户需要填写的信息标题,如手机号码')}{fields.map(
- ant.design组件Table嵌套子表格
赵羽珩
image.png数据格式importReact,{Component}from'react'import{Table}from'antd';constdataSource=[{busi_name:"指标用户1103",prov_name:"西藏",task_id:7911,item:[{busi_name:"指标用户1103",log_id:8955,prov_name:"西藏",},{busi
- 05-React Antd UI库
十六夜之彼岸舞
react.jsuijavascript前端ecmascript
AntDesignUI库地址https://ant.design/components添加依赖yarnaddantd我在使用的时候一致报错超时npminstallantd--save可以使用NPM尝试基础使用引入组件import{Button}from'antd'引入样式(一般全局引入一次)import'antd/dist/antd.css'使用按钮importReact,{Component}f
- 对下拉框进行模糊查询:一边输入一边模糊匹配
outstanding木槿
react+antd组件javascript前端框架react
目录1、对下拉框进行模糊查询:一边输入一边模糊匹配2、拓展:使用antdUI框架中的select需要注意的一些问题3、Antd-Select提供几种类型1、对下拉框进行模糊查询:一边输入一边模糊匹配AntDesign组件:https://ant.design/components/select-cn代码中实现:allowClear:可点击小叉号清除输入框中的数据,输入框尾部出现这个‘x’showS
- ant.design table的defaultExpandAllRows不起作用问题 笔记
KK_boy
1、table的defaultExpandAllRows不起作用问题:设置rowKey会影响其不起作用。2、table指向行不变颜色问题:原因是设置了size=“small”3、css实现鼠标指向父级div时,子类div的内容变颜色.calEvent:hover.eventText{color:blue;}
- react + ant.design实现tree组件懒加载保持目录展开的状态
幽冥雪羽
ant-designreact.js前端
需求实现树形数据懒加载,需要新增、删除等功能,数据新增删除后,能够保持子目录及以下目录的数据存在问题目前antd组件库提供的tree组件使用loadDataapi来实现树形数据的懒加载,但是涉及数据的删除和新增,就会导致子级及以下的目录数据缺失(原因是新获取的数据没有子集数据),还需要处理loadedKeys(已加载的目录)等,才能重新加载新的子数据,过程繁琐。解决方式利用展开目录的事件api(o
- 1.1 初始化react项目
LetsStudy
Reactreactreact-ts项目
一、创建react-ts项目yarncreatevitemyreact--templatereact-ts二、安装依赖yarn三、启动项目npmrundev四、新建目录五、pages目录新建个index.tsx,代码来源AntDesgin,然后改造为TShttps://pro.ant.design/https://motion.ant.design/https://ant.design/impor
- jQuery 键盘事件keydown ,keypress ,keyup介绍
107x
jsjquerykeydownkeypresskeyup
本文章总结了下些关于jQuery 键盘事件keydown ,keypress ,keyup介绍,有需要了解的朋友可参考。
一、首先需要知道的是: 1、keydown() keydown事件会在键盘按下时触发. 2、keyup() 代码如下 复制代码
$('input').keyup(funciton(){  
- AngularJS中的Promise
bijian1013
JavaScriptAngularJSPromise
一.Promise
Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。
为了展示它的优点,下面来看一个例子,其中需要获取用户当前的配置文件:
var cu
- c++ 用数组实现栈类
CrazyMizzz
数据结构C++
#include<iostream>
#include<cassert>
using namespace std;
template<class T, int SIZE = 50>
class Stack{
private:
T list[SIZE];//数组存放栈的元素
int top;//栈顶位置
public:
Stack(
- java和c语言的雷同
麦田的设计者
java递归scaner
软件启动时的初始化代码,加载用户信息2015年5月27号
从头学java二
1、语言的三种基本结构:顺序、选择、循环。废话不多说,需要指出一下几点:
a、return语句的功能除了作为函数返回值以外,还起到结束本函数的功能,return后的语句
不会再继续执行。
b、for循环相比于whi
- LINUX环境并发服务器的三种实现模型
被触发
linux
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器。按处理方式来分有循环服务器和并发服务器。
1 循环服务器与并发服务器模型
在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。
目前最常用的服务器模型有:
·循环服务器:服务器在同一时刻只能响应一个客户端的请求
·并发服务器:服
- Oracle数据库查询指令
肆无忌惮_
oracle数据库
20140920
单表查询
-- 查询************************************************************************************************************
-- 使用scott用户登录
-- 查看emp表
desc emp
- ext右下角浮动窗口
知了ing
JavaScriptext
第一种
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/
- 浅谈REDIS数据库的键值设计
矮蛋蛋
redis
http://www.cnblogs.com/aidandan/
原文地址:http://www.hoterran.info/redis_kv_design
丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。
- maven编译可执行jar包
alleni123
maven
http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven
<build>
<plugins>
<plugin>
<artifactId>maven-asse
- 人力资源在现代企业中的作用
百合不是茶
HR 企业管理
//人力资源在在企业中的作用人力资源为什么会存在,人力资源究竟是干什么的 人力资源管理是对管理模式一次大的创新,人力资源兴起的原因有以下点: 工业时代的国际化竞争,现代市场的风险管控等等。所以人力资源 在现代经济竞争中的优势明显的存在,人力资源在集团类公司中存在着 明显的优势(鸿海集团),有一次笔者亲自去体验过红海集团的招聘,只 知道人力资源是管理企业招聘的 当时我被招聘上了,当时给我们培训 的人
- Linux自启动设置详解
bijian1013
linux
linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。
阅读之前建议先看一下附图。
本文中假设inittab中设置的init tree为:
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc
- Spring Aop Schema实现
bijian1013
javaspringAOP
本例使用的是Spring2.5
1.Aop配置文件spring-aop.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmln
- 【Gson七】Gson预定义类型适配器
bit1129
gson
Gson提供了丰富的预定义类型适配器,在对象和JSON串之间进行序列化和反序列化时,指定对象和字符串之间的转换方式,
DateTypeAdapter
public final class DateTypeAdapter extends TypeAdapter<Date> {
public static final TypeAdapterFacto
- 【Spark八十八】Spark Streaming累加器操作(updateStateByKey)
bit1129
update
在实时计算的实际应用中,有时除了需要关心一个时间间隔内的数据,有时还可能会对整个实时计算的所有时间间隔内产生的相关数据进行统计。
比如: 对Nginx的access.log实时监控请求404时,有时除了需要统计某个时间间隔内出现的次数,有时还需要统计一整天出现了多少次404,也就是说404监控横跨多个时间间隔。
Spark Streaming的解决方案是累加器,工作原理是,定义
- linux系统下通过shell脚本快速找到哪个进程在写文件
ronin47
一个文件正在被进程写 我想查看这个进程 文件一直在增大 找不到谁在写 使用lsof也没找到
这个问题挺有普遍性的,解决方法应该很多,这里我给大家提个比较直观的方法。
linux下每个文件都会在某个块设备上存放,当然也都有相应的inode, 那么透过vfs.write我们就可以知道谁在不停的写入特定的设备上的inode。
幸运的是systemtap的安装包里带了inodewatch.stp,位
- java-两种方法求第一个最长的可重复子串
bylijinnan
java算法
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MaxPrefix {
public static void main(String[] args) {
String str="abbdabcdabcx";
- Netty源码学习-ServerBootstrap启动及事件处理过程
bylijinnan
javanetty
Netty是采用了Reactor模式的多线程版本,建议先看下面这篇文章了解一下Reactor模式:
http://bylijinnan.iteye.com/blog/1992325
Netty的启动及事件处理的流程,基本上是按照上面这篇文章来走的
文章里面提到的操作,每一步都能在Netty里面找到对应的代码
其中Reactor里面的Acceptor就对应Netty的ServerBo
- servelt filter listener 的生命周期
cngolon
filterlistenerservelt生命周期
1. servlet 当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后调用它的service方法处理请求。当第二次请求这个servlet资源时,servlet容器就不在创建实例,而是直接调用它的service方法处理请求,也就是说
- jmpopups获取input元素值
ctrain
JavaScript
jmpopups 获取弹出层form表单
首先,我有一个div,里面包含了一个表单,默认是隐藏的,使用jmpopups时,会弹出这个隐藏的div,其实jmpopups是将我们的代码生成一份拷贝。
当我直接获取这个form表单中的文本框时,使用方法:$('#form input[name=test1]').val();这样是获取不到的。
我们必须到jmpopups生成的代码中去查找这个值,$(
- vi查找替换命令详解
daizj
linux正则表达式替换查找vim
一、查找
查找命令
/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
字符串匹配
pattern是需要匹配的字符串,例如:
1: /abc<En
- 对网站中的js,css文件进行打包
dcj3sjt126com
PHP打包
一,为什么要用smarty进行打包
apache中也有给js,css这样的静态文件进行打包压缩的模块,但是本文所说的不是以这种方式进行的打包,而是和smarty结合的方式来把网站中的js,css文件进行打包。
为什么要进行打包呢,主要目的是为了合理的管理自己的代码 。现在有好多网站,你查看一下网站的源码的话,你会发现网站的头部有大量的JS文件和CSS文件,网站的尾部也有可能有大量的J
- php Yii: 出现undefined offset 或者 undefined index解决方案
dcj3sjt126com
undefined
在开发Yii 时,在程序中定义了如下方式:
if($this->menuoption[2] === 'test'),那么在运行程序时会报:undefined offset:2,这样的错误主要是由于php.ini 里的错误等级太高了,在windows下错误等级
- linux 文件格式(1) sed工具
eksliang
linuxlinux sed工具sed工具linux sed详解
转载请出自出处:
http://eksliang.iteye.com/blog/2106082
简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾
- Android应用程序获取系统权限
gqdy365
android
引用
如何使Android应用程序获取系统权限
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点
- HoverTree开发日志之验证码
hvt
.netC#asp.nethovertreewebform
HoverTree是一个ASP.NET的开源CMS,目前包含文章系统,图库和留言板功能。代码完全开放,文章内容页生成了静态的HTM页面,留言板提供留言审核功能,文章可以发布HTML源代码,图片上传同时生成高品质缩略图。推出之后得到许多网友的支持,再此表示感谢!留言板不断收到许多有益留言,但同时也有不少广告,因此决定在提交留言页面增加验证码功能。ASP.NET验证码在网上找,如果不是很多,就是特别多
- JSON API:用 JSON 构建 API 的标准指南中文版
justjavac
json
译文地址:https://github.com/justjavac/json-api-zh_CN
如果你和你的团队曾经争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 就是你的 anti-bikeshedding 武器。
通过遵循共同的约定,可以提高开发效率,利用更普遍的工具,可以是你更加专注于开发重点:你的程序。
基于 JSON API 的客户端还能够充分利用缓存,
- 数据结构随记_2
lx.asymmetric
数据结构笔记
第三章 栈与队列
一.简答题
1. 在一个循环队列中,队首指针指向队首元素的 前一个 位置。
2.在具有n个单元的循环队列中,队满时共有 n-1 个元素。
3. 向栈中压入元素的操作是先 移动栈顶指针&n
- Linux下的监控工具dstat
网络接口
linux
1) 工具说明dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具. 与sysstat相比, dstat拥有一个彩色的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都会每秒刷新显示. 和sysstat相同的是,
- C 语言初级入门--二维数组和指针
1140566087
二维数组c/c++指针
/*
二维数组的定义和二维数组元素的引用
二维数组的定义:
当数组中的每个元素带有两个下标时,称这样的数组为二维数组;
(逻辑上把数组看成一个具有行和列的表格或一个矩阵);
语法:
类型名 数组名[常量表达式1][常量表达式2]
二维数组的引用:
引用二维数组元素时必须带有两个下标,引用形式如下:
例如:
int a[3][4]; 引用:
- 10点睛Spring4.1-Application Event
wiselyman
application
10.1 Application Event
Spring使用Application Event给bean之间的消息通讯提供了手段
应按照如下部分实现bean之间的消息通讯
继承ApplicationEvent类实现自己的事件
实现继承ApplicationListener接口实现监听事件
使用ApplicationContext发布消息