本项目改编自“云商店应用库”中的“门户首页顶部导航栏添加当前日期”项目,原作者:王斌(上海)
原项目简介:门户首页顶部导航栏添加当前日期*备注:此思路可以适用于在门户首页右侧导航栏自定义添加内容,比如:当前日期、天气、股票形势、特别事项等
本项目为丸子对ecode组件重写ecodeSDK.overwriteClassFnQueueMapSet(name,option)
的学习与尝试~
丸子近期较忙,暂不梳理该小项目过程,且暂不提供帮助,文中代码回复可见,有问题请留言或一起在下面讨论区交流。
国际化欢迎词适配更新
2024年5月8日 12:04:14 更新添加国际化实现示例~现在,你可以对欢迎词进行国际化配置了~实现滚动走马灯播放公告?这样!
2024年7月3日 17:57:57 可以自行修改代码实现走马灯效果,兼容性未测试~<div className='ecode-new-popover-date'>{generatedGreeting}</div>
修改为:
<marquee className='ecode-new-popover-date'>{generatedGreeting}</marquee>
//更花里胡哨的操作,请参考HTML marquee API~
显示实时时间 yyyy年mm月dd日 hh:mm:ss 星期x
2024年7月4日 08:56:34 增加新能力,显示实时时间一、项目介绍
以下介绍内容为Claude 2 AI生成~
1.介绍
这个组件通过复写 Ant Design 的 Popover 组件,实现在门户界面内根据时间显示随机问候语的功能,个性化交互场景增强用户体验。
2.特性
- 根据不同时间段,显示不同问候语
- 支持显示用户名,更个性化
- 不影响 Popover 原有功能
- 提供前置 CSS 样式,方便集成
- 代码开箱即用,可直接用于项目中
3.技术优势
- 通过组件复写方式扩展,无侵入
- 模块化代码,具有可扩展性
- 注释清晰,便于二次开发
4.总结
该组件让 OA 系统原有的门户首页顶部导航栏支持显示更友好的问候语,可以增加内部员工的亲和感和归属感。组件代码开箱即用,无侵入式集成,为 OA 系统提供了一个轻量级的用户体验优化方案。可以减少员工使用系统时的冷漠感,增强团队融洽度。
二、效果图
三、代码
代码中保留并沿用了原项目的所有变量名及元素等,强迫症请自行更改~
init.js(前置加载)
此处内容需要评论回复后方可阅读
index.js
此处内容需要评论回复后方可阅读
init.css(前置加载)
此处内容需要评论回复后方可阅读
四、国际化实现示例
getGreeting方法的修改
getGreeting() {
const { username, userLanguage } = JSON.parse(localStorage.getItem("theme-account"));
const currentHour = new Date().getHours();
let greetingCategory = "";
if (currentHour >= 0 && currentHour < 5) {
greetingCategory = "night";
} else if (currentHour >= 5 && currentHour < 6) {
greetingCategory = "earlyMorning";
} else if (currentHour >= 6 && currentHour < 12) {
greetingCategory = "morning";
} else if (currentHour >= 12 && currentHour < 14) {
greetingCategory = "noon";
} else if (currentHour >= 14 && currentHour < 19) {
greetingCategory = "afternoon";
} else if (currentHour >= 19 && currentHour < 21) {
greetingCategory = "dusk";
} else if (currentHour >= 21 && currentHour < 24) {
greetingCategory = "evening";
}
// 根据用户语言偏好选择对应的问候语数据
const greetings = greetingsData[userLanguage][greetingCategory];
const greeting = greetings[Math.floor(Math.random() * greetings.length)];
return greeting.replace("{username}", username);
}
greetingsData数据的修改
const greetingsData = {
"7": { // 简体中文
"night": [
"凌晨好,{username},夜深了,早些歇息吧。",
"深夜时分,{username},注意保重身体哦。"
],
"earlyMorning": [
"早上好,{username}!美好的一天从早安开始!",
"清晨好,{username},早起的鸟儿有虫吃呢。",
"早晨好,{username}!希望您拥有一个精神饱满的好开始!"
],
// 其他时间段的问候语
},
"8": { // 英文
"night": [
"Good night, {username}. It's late, get some rest.",
"Late at night, {username}. Take care of yourself."
],
"earlyMorning": [
"Good morning, {username}! A great day starts with a good morning!",
"Good morning, {username}. The early bird catches the worm.",
"Good morning, {username}! Wishing you a vibrant start!"
],
// 其他时间段的问候语
},
"9": { // 繁體中文
"night": [
"凌晨好,{username},夜深了,早些歇息吧。",
"深夜時分,{username},注意保重身體哦。"
],
"earlyMorning": [
"早上好,{username}!美好的一天從早安開始!",
"清晨好,{username},早起的鳥兒有蟲吃呢。",
"早晨好,{username}!希望您擁有一個精神飽滿的好開始!"
],
// 其他时间段的问候语
}
};
五、显示实时时间
如果你想右上角实时显示时间,那你可以这样做:
index.js替换为以下内容
index.js
const { Popover } = antd;
class NewPopover extends React.Component {
constructor(props) {
super(props);
this.state = {
currentDateTime: this.getCurrentDateTime()
}
}
componentDidMount() {
this.intervalId = setInterval(() => {
this.setState({ currentDateTime: this.getCurrentDateTime() });
}, 1000); // 每秒更新一次
}
componentWillUnmount() {
clearInterval(this.intervalId);
}
getCurrentDateTime() {
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const date = String(now.getDate()).padStart(2, '0');
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0');
const daysOfWeek = ["星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
const dayOfWeek = daysOfWeek[now.getDay()];
return `${year}年${month}月${date}日 ${hours}:${minutes}:${seconds} ${dayOfWeek}`;
}
render() {
const { currentDateTime } = this.state;
let newProps = { ...this.props };
return (
<div className='ecode-new-popover'>
<Popover {...newProps} _noOverwrite />
<div className='ecode-new-popover-date'>{currentDateTime}</div>
</div>
)
}
}
//发布模块
ecodeSDK.setCom('${appId}','NewPopover',NewPopover);
[泛微ecode] 组件重写-门户首页顶部导航栏欢迎词 by https://oneszhang.com/archives/50.html
@(吐舌)
这个功能特别帮,感谢大佬,拿来测试下
牛
1
niupi
墙都不扶就服你
666
小黄鸭让我来看的
来学习了
qqqq
bucuo
顶
\#(献花)优化:可在.ecode-new-popover-date的css中增加以下两个属性,以取消鼠标手型与文字禁止选中: cursor: default; user-select: none;
6
@(哈哈)
测试
来学习了
1
学习学习
dong
woyeyaoyanjiu@(哈哈)
6
感谢
感谢
还厉害@(呵呵)
来学习!
这方面的知识太少,非常感谢
666
非常不错。
1
1
6
我看看你
优秀
学习一下!
1
怎么每次看都要评论
0.0,唔,因为没有记录当前用户登录状态。
啛啛喳喳
发现新大陆了,
牛子
想看
这是迟到的签到
非常需要
学习下,感谢分享
超牛的技术,来学习一下这篇帖子
再看一次
发现新大陆
让我看看
问题来了。。。可以实现国际化吗,比如切换英文...
好需求!这是可以实现的!修改getGreeting方法并配置greetingsData的欢迎词内容即可,稍后,我将更新这篇文章~已更新,现在,你可以在本文章看到国际化实现示例段落~
牛的\#(高兴)
··
牛逼了丸子
@(小乖)
前来学习一下@(呵呵)
学习
@(呵呵)
测试
学习
牛逼
仰望大佬
666
大佬
老六
来学习一下
1
学习一下@(真棒)
太牛了
1
学习一下
膜拜
虽然我也会,过来直接白嫖吧
一个字绝了