Merge pull request #337 from chengzhongxue/main

优化小板报
This commit is contained in:
困困鱼 2023-07-30 05:42:41 +08:00 committed by GitHub
commit 5327d90da9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 284 additions and 299 deletions

View File

@ -913,12 +913,6 @@ spec:
value: true value: true
- label: 禁用 - label: 禁用
value: false value: false
- $formkit: url
name: fetchUrl
if: $get(enable_footer_group).value
value: "https://moments.0206.ink/randomfriend?num=3"
label: 页脚友链地址
placeholder: 请输入页脚友链地址
- $formkit: group - $formkit: group
name: footerContent name: footerContent
label: 页脚内容 label: 页脚内容
@ -1276,11 +1270,6 @@ spec:
name: bigTitle name: bigTitle
label: 大标题 label: 大标题
value: 我和我的小伙伴们 value: 我和我的小伙伴们
- $formkit: url
name: randomfriendurl
value: "https://moments.0206.ink/randomfriend"
label: 随机访问地址
help: 注意格式 (你的鱼塘token地址 + randomfriend)
- $formkit: url - $formkit: url
name: fcircleUrl name: fcircleUrl
value: "/fcircle" value: "/fcircle"

View File

@ -137,20 +137,16 @@ var heo = {
// 页脚友链 // 页脚友链
addFriendLinksInFooter: function () { addFriendLinksInFooter: function () {
var fetchUrl = "https://moments.0206.ink/randomfriend?num=3" const linksUrl = GLOBAL_CONFIG.source.links.linksUrl
fetch(fetchUrl) const links = GLOBAL_CONFIG.source.links.linksData
.then(res => res.json()) var randomFriendLinks = getArrayItems(links, 3);
.then(json => { var htmlText = '';
var randomFriendLinks = getArrayItems(json, 3); for (let i = 0; i < randomFriendLinks.length; ++i) {
var item = randomFriendLinks[i]
var htmlText = ''; htmlText += `<a class='footer-item' href='${item.spec.url}' target="_blank" rel="noopener nofollow">${item.spec.displayName}</a>`;
for (let i = 0; i < randomFriendLinks.length; ++i) { }
var item = randomFriendLinks[i] htmlText += `<a class='footer-item' href='${linksUrl}'>更多</a>`
htmlText += `<a class='footer-item' href='${item.link}' target="_blank" rel="noopener nofollow">${item.name}</a>`; document.getElementById("friend-links-in-footer").innerHTML = htmlText;
}
htmlText += `<a class='footer-item' href='/links'>更多</a>`
document.getElementById("friend-links-in-footer").innerHTML = htmlText;
})
}, },
//禁止图片右键单击 //禁止图片右键单击

View File

@ -11,6 +11,9 @@ $.ajax({
ipLocation = res; ipLocation = res;
} }
}) })
window.onload = showWelcome;
// 如果使用了pjax在加上下面这行代码
document.addEventListener('pjax:complete', showWelcome);
function getDistance(e1, n1, e2, n2) { function getDistance(e1, n1, e2, n2) {
const R = 6371 const R = 6371
const { sin, cos, asin, PI, hypot } = Math const { sin, cos, asin, PI, hypot } = Math
@ -29,220 +32,232 @@ function getDistance(e1, n1, e2, n2) {
function showWelcome() { function showWelcome() {
let dist = getDistance(GLOBAL_CONFIG.source.welcome.locationLng,GLOBAL_CONFIG.source.welcome.locationLat, ipLocation.result.location.lng, ipLocation.result.location.lat); //这里记得换成自己的经纬度 if (ipLocation.status == 0) {
let pos = ipLocation.result.ad_info.nation; let dist = getDistance(GLOBAL_CONFIG.source.welcome.locationLng, GLOBAL_CONFIG.source.welcome.locationLat, ipLocation.result.location.lng, ipLocation.result.location.lat); //这里记得换成自己的经纬度
let ip; let pos = ipLocation.result.ad_info.nation;
let posdesc; let ip;
//根据国家、省份、城市信息自定义欢迎语 let posdesc;
switch (ipLocation.result.ad_info.nation) { //根据国家、省份、城市信息自定义欢迎语
case "日本": switch (ipLocation.result.ad_info.nation) {
posdesc = "よろしく,一起去看樱花吗"; case "日本":
break; posdesc = "よろしく,一起去看樱花吗";
case "美国": break;
posdesc = "Let us live in peace!"; case "美国":
break; posdesc = "Let us live in peace!";
case "英国": break;
posdesc = "想同你一起夜乘伦敦眼"; case "英国":
break; posdesc = "想同你一起夜乘伦敦眼";
case "俄罗斯": break;
posdesc = "干了这瓶伏特加!"; case "俄罗斯":
break; posdesc = "干了这瓶伏特加!";
case "法国": break;
posdesc = "C'est La Vie"; case "法国":
break; posdesc = "C'est La Vie";
case "德国": break;
posdesc = "Die Zeit verging im Fluge."; case "德国":
break; posdesc = "Die Zeit verging im Fluge.";
case "澳大利亚": break;
posdesc = "一起去大堡礁吧!"; case "澳大利亚":
break; posdesc = "一起去大堡礁吧!";
case "加拿大": break;
posdesc = "拾起一片枫叶赠予你"; case "加拿大":
break; posdesc = "拾起一片枫叶赠予你";
case "中国": break;
pos = ipLocation.result.ad_info.province + " " + ipLocation.result.ad_info.city + " " + ipLocation.result.ad_info.district; case "中国":
ip = ipLocation.result.ip; pos = ipLocation.result.ad_info.province + " " + ipLocation.result.ad_info.city + " " + ipLocation.result.ad_info.district;
switch (ipLocation.result.ad_info.province) { ip = ipLocation.result.ip;
case "北京市": switch (ipLocation.result.ad_info.province) {
posdesc = "北——京——欢迎你~~~"; case "北京市":
break; posdesc = "北——京——欢迎你~~~";
case "天津市": break;
posdesc = "讲段相声吧"; case "天津市":
break; posdesc = "讲段相声吧";
case "河北省": break;
posdesc = "山势巍巍成壁垒,天下雄关铁马金戈由此向,无限江山"; case "河北省":
break; posdesc = "山势巍巍成壁垒,天下雄关铁马金戈由此向,无限江山";
case "山西省": break;
posdesc = "展开坐具长三尺,已占山河五百余"; case "山西省":
break; posdesc = "展开坐具长三尺,已占山河五百余";
case "内蒙古自治区": break;
posdesc = "天苍苍,野茫茫,风吹草低见牛羊"; case "内蒙古自治区":
break; posdesc = "天苍苍,野茫茫,风吹草低见牛羊";
case "辽宁省": break;
posdesc = "我想吃烤鸡架!"; case "辽宁省":
break; posdesc = "我想吃烤鸡架!";
case "吉林省": break;
posdesc = "状元阁就是东北烧烤之王"; case "吉林省":
break; posdesc = "状元阁就是东北烧烤之王";
case "黑龙江省": break;
posdesc = "很喜欢哈尔滨大剧院"; case "黑龙江省":
break; posdesc = "很喜欢哈尔滨大剧院";
case "上海市": break;
posdesc = "众所周知,中国只有两个城市"; case "上海市":
break; posdesc = "众所周知,中国只有两个城市";
case "江苏省": break;
switch (ipLocation.result.ad_info.city) { case "江苏省":
case "南京市": switch (ipLocation.result.ad_info.city) {
posdesc = "这是我挺想去的城市啦"; case "南京市":
break; posdesc = "这是我挺想去的城市啦";
case "苏州市": break;
posdesc = "上有天堂,下有苏杭"; case "苏州市":
break; posdesc = "上有天堂,下有苏杭";
default: break;
posdesc = "散装是必须要散装的"; default:
break; posdesc = "散装是必须要散装的";
} break;
break; }
case "浙江省": break;
posdesc = "东风渐绿西湖柳,雁已还人未南归"; case "浙江省":
break; posdesc = "东风渐绿西湖柳,雁已还人未南归";
case "河南省": break;
switch (ipLocation.result.ad_info.city) { case "河南省":
case "郑州市": switch (ipLocation.result.ad_info.city) {
posdesc = "豫州之域,天地之中"; case "郑州市":
break; posdesc = "豫州之域,天地之中";
case "南阳市": break;
posdesc = "臣本布衣,躬耕于南阳此南阳非彼南阳!"; case "南阳市":
break; posdesc = "臣本布衣,躬耕于南阳此南阳非彼南阳!";
case "驻马店市": break;
posdesc = "峰峰有奇石,石石挟仙气嵖岈山的花很美哦!"; case "驻马店市":
break; posdesc = "峰峰有奇石,石石挟仙气嵖岈山的花很美哦!";
case "开封市": break;
posdesc = "刚正不阿包青天"; case "开封市":
break; posdesc = "刚正不阿包青天";
case "洛阳市": break;
posdesc = "洛阳牡丹甲天下"; case "洛阳市":
break; posdesc = "洛阳牡丹甲天下";
default: break;
posdesc = "可否带我品尝河南烩面啦?"; default:
break; posdesc = "可否带我品尝河南烩面啦?";
} break;
break; }
case "安徽省": break;
posdesc = "蚌埠住了,芜湖起飞"; case "安徽省":
break; posdesc = "蚌埠住了,芜湖起飞";
case "福建省": break;
posdesc = "井邑白云间,岩城远带山"; case "福建省":
break; posdesc = "井邑白云间,岩城远带山";
case "江西省": break;
posdesc = "落霞与孤鹜齐飞,秋水共长天一色"; case "江西省":
break; posdesc = "落霞与孤鹜齐飞,秋水共长天一色";
case "山东省": break;
posdesc = "遥望齐州九点烟,一泓海水杯中泻"; case "山东省":
break; posdesc = "遥望齐州九点烟,一泓海水杯中泻";
case "湖北省": break;
switch (ipLocation.result.ad_info.city) { case "湖北省":
case "黄冈市": switch (ipLocation.result.ad_info.city) {
posdesc = "红安将军县!辈出将才!"; case "黄冈市":
break; posdesc = "红安将军县!辈出将才!";
default: break;
posdesc = "来碗热干面~"; default:
break; posdesc = "来碗热干面~";
} break;
break; }
case "湖南省": break;
posdesc = "74751长沙斯塔克"; case "湖南省":
break; posdesc = "74751长沙斯塔克";
case "广东省": break;
switch (ipLocation.result.ad_info.city) { case "广东省":
case "广州市": switch (ipLocation.result.ad_info.city) {
posdesc = "看小蛮腰,喝早茶了嘛~"; case "广州市":
break; posdesc = "看小蛮腰,喝早茶了嘛~";
case "深圳市": break;
posdesc = "今天你逛商场了嘛~"; case "深圳市":
break; posdesc = "今天你逛商场了嘛~";
case "阳江市": break;
posdesc = "阳春合水!博主家乡~ 欢迎来玩~"; case "阳江市":
break; posdesc = "阳春合水!博主家乡~ 欢迎来玩~";
default: break;
posdesc = "来两斤福建人~"; default:
break; posdesc = "来两斤福建人~";
} break;
break; }
case "广西壮族自治区": break;
posdesc = "桂林山水甲天下"; case "广西壮族自治区":
break; posdesc = "桂林山水甲天下";
case "海南省": break;
posdesc = "朝观日出逐白浪,夕看云起收霞光"; case "海南省":
break; posdesc = "朝观日出逐白浪,夕看云起收霞光";
case "四川省": break;
posdesc = "康康川妹子"; case "四川省":
break; posdesc = "康康川妹子";
case "贵州省": break;
posdesc = "茅台学生再塞200"; case "贵州省":
break; posdesc = "茅台学生再塞200";
case "云南省": break;
posdesc = "玉龙飞舞云缠绕,万仞冰川直耸天"; case "云南省":
break; posdesc = "玉龙飞舞云缠绕,万仞冰川直耸天";
case "西藏自治区": break;
posdesc = "躺在茫茫草原上,仰望蓝天"; case "西藏自治区":
break; posdesc = "躺在茫茫草原上,仰望蓝天";
case "陕西省": break;
posdesc = "来份臊子面加馍"; case "陕西省":
break; posdesc = "来份臊子面加馍";
case "甘肃省": break;
posdesc = "羌笛何须怨杨柳,春风不度玉门关"; case "甘肃省":
break; posdesc = "羌笛何须怨杨柳,春风不度玉门关";
case "青海省": break;
posdesc = "牛肉干和老酸奶都好好吃"; case "青海省":
break; posdesc = "牛肉干和老酸奶都好好吃";
case "宁夏回族自治区": break;
posdesc = "大漠孤烟直,长河落日圆"; case "宁夏回族自治区":
break; posdesc = "大漠孤烟直,长河落日圆";
case "新疆维吾尔自治区": break;
posdesc = "驼铃古道丝绸路,胡马犹闻唐汉风"; case "新疆维吾尔自治区":
break; posdesc = "驼铃古道丝绸路,胡马犹闻唐汉风";
case "台湾省": break;
posdesc = "我在这头,大陆在那头"; case "台湾省":
break; posdesc = "我在这头,大陆在那头";
case "香港特别行政区": break;
posdesc = "永定贼有残留地鬼嚎,迎击光非岁玉"; case "香港特别行政区":
break; posdesc = "永定贼有残留地鬼嚎,迎击光非岁玉";
case "澳门特别行政区": break;
posdesc = "性感荷官,在线发牌"; case "澳门特别行政区":
break; posdesc = "性感荷官,在线发牌";
default: break;
posdesc = "带我去你的城市逛逛吧!"; default:
break; posdesc = "带我去你的城市逛逛吧!";
} break;
break; }
default: break;
posdesc = "带我去你的国家逛逛吧"; default:
break; posdesc = "带我去你的国家逛逛吧";
break;
}
//根据本地时间切换欢迎语
let timeChange;
let date = new Date();
if (date.getHours() >= 5 && date.getHours() < 11) timeChange = "<span>🌤️ 早上好,一日之计在于晨</span>";
else if (date.getHours() >= 11 && date.getHours() < 13) timeChange = "<span>☀️ 中午好,记得午休喔~</span>";
else if (date.getHours() >= 13 && date.getHours() < 17) timeChange = "<span>🕞 下午好,饮茶先啦!</span>";
else if (date.getHours() >= 17 && date.getHours() < 19) timeChange = "<span>🚶‍♂️ 即将下班,记得按时吃饭~</span>";
else if (date.getHours() >= 19 && date.getHours() < 24) timeChange = "<span>🌙 晚上好,夜生活嗨起来!</span>";
else timeChange = "夜深了,早点休息,少熬夜";
// 新增ipv6显示为指定内容
if (ip.includes(":")) {
ip = "<br>好复杂,咱看不懂~(ipv6)";
}
try {
//自定义文本和需要放的位置
document.getElementById("welcome-info").innerHTML =
`欢迎来自 <b><span style="color: var(--hao-ip-color);font-size: var(--hao-gl-size)">${pos}</span></b> 的小友💖<br>${posdesc}🍂<br>当前位置距博主约 <b><span style="color: var(--hao-ip-color)">${dist}</span></b> 公里!<br>您的IP地址为<b><span>${ip}</span></b><br>${timeChange} <br>`;
} catch (err) {
console.log("Pjax无法获取元素")
}
} else {
try {
//自定义文本和需要放的位置
document.getElementById("welcome-info").innerHTML =
`${ipLocation.message}`;
} catch (err) {
console.log("Pjax无法获取元素")
}
} }
//根据本地时间切换欢迎语
let timeChange;
let date = new Date();
if (date.getHours() >= 5 && date.getHours() < 11) timeChange = "<span>🌤️ 早上好,一日之计在于晨</span>";
else if (date.getHours() >= 11 && date.getHours() < 13) timeChange = "<span>☀️ 中午好,记得午休喔~</span>";
else if (date.getHours() >= 13 && date.getHours() < 17) timeChange = "<span>🕞 下午好,饮茶先啦!</span>";
else if (date.getHours() >= 17 && date.getHours() < 19) timeChange = "<span>🚶‍♂️ 即将下班,记得按时吃饭~</span>";
else if (date.getHours() >= 19 && date.getHours() < 24) timeChange = "<span>🌙 晚上好,夜生活嗨起来!</span>";
else timeChange = "夜深了,早点休息,少熬夜";
// 新增ipv6显示为指定内容
if (ip.includes(":")) {
ip = "<br>好复杂,咱看不懂~(ipv6)";
}
try {
//自定义文本和需要放的位置
document.getElementById("welcome-info").innerHTML =
`欢迎来自 <b><span style="color: var(--hao-ip-color);font-size: var(--hao-gl-size)">${pos}</span></b> 的小友💖<br>${posdesc}🍂<br>当前位置距博主约 <b><span style="color: var(--hao-ip-color)">${dist}</span></b> 公里!<br>您的IP地址为<b><span>${ip}</span></b><br>${timeChange} <br>`;
} catch (err) {
console.log("Pjax无法获取元素")
}
} }
window.onload = showWelcome;
// 如果使用了pjax在加上下面这行代码
document.addEventListener('pjax:complete', showWelcome);

View File

@ -370,29 +370,30 @@ document.addEventListener('scroll', btf.throttle(function () {
//友链随机传送 //友链随机传送
function travelling() { function travelling() {
var fetchUrl = GLOBAL_CONFIG.source.links.randomfriendurl const links = GLOBAL_CONFIG.source.links.linksData
fetch(fetchUrl) var name = ''
.then(res => res.json()) var link = ''
.then(json => { if(links.length>0){
var name = json.name; var randomFriendLinks = getArrayItems(links, 1);
var link = json.link; name = randomFriendLinks[0].spec.displayName;
var msg = "点击前往按钮进入随机一个友链,不保证跳转网站的安全性和可用性。本次随机到的是本站友链:「" + name + "」"; link = randomFriendLinks[0].spec.url;
const style = document.createElement('style'); }
document.head.appendChild(style); var msg = "点击前往按钮进入随机一个友链,不保证跳转网站的安全性和可用性。本次随机到的是本站友链:「" + name + "」";
const styleSheet = style.sheet; const style = document.createElement('style');
styleSheet.insertRule(`:root{--heo-snackbar-time: 8000ms!important}`, styleSheet.cssRules.length); document.head.appendChild(style);
Snackbar.show({ const styleSheet = style.sheet;
text: msg, styleSheet.insertRule(`:root{--heo-snackbar-time: 8000ms!important}`, styleSheet.cssRules.length);
duration: 8000, Snackbar.show({
pos: 'top-center', text: msg,
actionText: '前往', duration: 8000,
onActionClick: function (element) { pos: 'top-center',
//Set opacity of element to 0 to close Snackbar actionText: '前往',
$(element).css('opacity', 0); onActionClick: function (element) {
window.open(link, '_blank'); //Set opacity of element to 0 to close Snackbar
} $(element).css('opacity', 0);
}); window.open(link, '_blank');
}) }
});
} }
//前往黑洞 //前往黑洞
@ -804,7 +805,7 @@ document.addEventListener('DOMContentLoaded', function () {
heo.stopImgRightDrag() heo.stopImgRightDrag()
//页脚友联 //页脚友联
if(GLOBAL_CONFIG.isFriendLinksInFooter){ if(GLOBAL_CONFIG.isFriendLinksInFooter){
link.addFriendLinksInFooter() heo.addFriendLinksInFooter()
} }
heo.qrcodeCreate() heo.qrcodeCreate()
heo.onlyHome() heo.onlyHome()

View File

@ -1,29 +0,0 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<!-- 公共js -->
<script th:fragment="common-script">
if(GLOBAL_CONFIG.isFriendLinksInFooter){
var link = {
// 页脚友链
addFriendLinksInFooter: function () {
var linksUrl = '[[${theme.config.link.linksUrl}]]'
var fetchUrl = "[(${theme.config.footer.footer_group.fetchUrl})]"
fetch(fetchUrl)
.then(res => res.json())
.then(json => {
var randomFriendLinks = getArrayItems(json, 3);
var htmlText = '';
for (let i = 0; i < randomFriendLinks.length; ++i) {
var item = randomFriendLinks[i]
htmlText += `<a class='footer-item' href='${item.link}' target="_blank" rel="noopener nofollow">${item.name}</a>`;
}
htmlText += `<a class='footer-item' href='${linksUrl}'>更多</a>`
document.getElementById("friend-links-in-footer").innerHTML = htmlText;
})
}
}
}
</script>
</html>

View File

@ -39,7 +39,7 @@
<div th:if="${theme.config.footer.footer_group.enable_footer_group}" class="footer-group"> <div th:if="${theme.config.footer.footer_group.enable_footer_group}" class="footer-group">
<div class="footer-title-group"> <div class="footer-title-group">
<h3 class="footer-title">友链</h3><a class="random-friends-btn" <h3 class="footer-title">友链</h3><a class="random-friends-btn"
href="javascript:link.addFriendLinksInFooter();" href="javascript:heo.addFriendLinksInFooter();"
rel="external nofollow" title="换一批友情链接" rel="external nofollow" title="换一批友情链接"
data-pjax-state="external"><i data-pjax-state="external"><i
class="haofont hao-icon-arrow-rotate-right"></i></a> class="haofont hao-icon-arrow-rotate-right"></i></a>

View File

@ -170,7 +170,12 @@
<script th:src="${assets_link + '/libs/countup/countup.js'}"></script> <script th:src="${assets_link + '/libs/countup/countup.js'}"></script>
<!-- 小板报 --> <!-- 小板报 -->
<script th:if="${not #strings.isEmpty(theme.config.sidebar.welcome.key)}" defer th:src="${assets_link + '/libs/welcome/welcome.js'}"></script> <script defer th:if="${not #strings.isEmpty(theme.config.sidebar.welcome.key) &&
#strings.contains(theme.config.sidebar.widgetss.indexWidgets,'welcome') ||
#strings.contains(theme.config.sidebar.widgetss.postWidgets,'welcome') ||
#strings.contains(theme.config.sidebar.widgetss.tagWidgets,'welcome') ||
#strings.contains(theme.config.sidebar.widgetss.categoryWidgets,'welcome')}"
th:src="${assets_link + '/libs/welcome/welcome.js'}"></script>
<!-- icon图标 --> <!-- icon图标 -->
<link rel="stylesheet" th:href="'https://npm.elemecdn.com/hao-theme-static@'+${theme.spec.version}+'/icon/iconfont.css'"> <link rel="stylesheet" th:href="'https://npm.elemecdn.com/hao-theme-static@'+${theme.spec.version}+'/icon/iconfont.css'">
@ -204,8 +209,9 @@
assetsLink: [[${assets_link}]], assetsLink: [[${assets_link}]],
profileStyle: [[${theme.config.sidebar.profile.profileStyle}]], profileStyle: [[${theme.config.sidebar.profile.profileStyle}]],
source: { source: {
links:{ links: {
randomfriendurl: [[${theme.config.link.randomfriendurl}]], linksUrl: [[${ theme.config.link.linksUrl }]],
linksData: []
}, },
jQuery: 'https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js', jQuery: 'https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js',
justifiedGallery: { justifiedGallery: {
@ -328,6 +334,16 @@
</script> </script>
<script data-pjax th:inline="javascript" th:if="${pluginFinder.available('PluginLinks')}">
var groupData = [[${ linkFinder.groupBy() }]]
if (groupData.length > 0) {
GLOBAL_CONFIG.source.links.linksData = groupData.flatMap((item) => {
return item.links
})
}
</script>
</head> </head>

View File

@ -109,9 +109,6 @@
<!-- 动态标题 --> <!-- 动态标题 -->
<script th:replace="~{modules/common/diytitle :: diytitle}"></script> <script th:replace="~{modules/common/diytitle :: diytitle}"></script>
<!-- 公共js -->
<script th:replace="~{modules/common/common-script :: common-script}"></script>
<div id="js-pjax"></div> <div id="js-pjax"></div>
<script th:if="${theme.config.envelope_comment.enable_danmu}" th:src="${assets_link + '/libs/twikoo/easy-Danmaku.js'}" id="Danmaku"></script> <script th:if="${theme.config.envelope_comment.enable_danmu}" th:src="${assets_link + '/libs/twikoo/easy-Danmaku.js'}" id="Danmaku"></script>
@ -230,7 +227,7 @@
heo.initThemeColor(); heo.initThemeColor();
//页脚友联 //页脚友联
if(GLOBAL_CONFIG.isFriendLinksInFooter){ if(GLOBAL_CONFIG.isFriendLinksInFooter){
link.addFriendLinksInFooter() heo.addFriendLinksInFooter()
} }
//右下角 snackbar 弹窗 //右下角 snackbar 弹窗