This commit is contained in:
boi 2025-06-28 00:52:14 +08:00
parent f995fc07c5
commit 442212bfb8
8 changed files with 357 additions and 23 deletions

View File

@ -0,0 +1,227 @@
<!DOCTYPE html>
<html>
<head>
<title>Loading示例</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<link href="/jscss/style.css" rel="stylesheet" type="text/css" />
<style>
</style>
</head>
<body class="px4 py4">
<blockquote>pulse-loader</blockquote>
<div class="pulse-loader"></div>
<style>
.pulse-loader {
width: 20px;
height: 20px;
border-radius: 50%;
background: var(--man6);
box-shadow: 0 0 0 0 var(--man6);
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0% {
transform: scale(0.95);
box-shadow: 0 0 0 0 var(--man6);
}
70% {
transform: scale(1);
box-shadow: 0 0 0 15px #ffffff00;
}
100% {
transform: scale(0.95);
box-shadow: 0 0 0 0 #ffffff00;
}
}
</style>
<blockquote>ring-loader</blockquote>
<div class="ring-loader"></div>
<style>
.ring-loader {
width: 4em;
height: 4em;
border: 0.2em solid var(--man3);
border-radius: 50%;
border-top-color: var(--man6);
border-left-color: var(--man4);
animation: spin 1s ease-in-out infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
</style>
<blockquote>bounce-loader</blockquote>
<div class="bounce-loader">
<div></div>
<div></div>
<div></div>
</div>
<style>
.bounce-loader {
display: flex;
gap: 6px;
}
.bounce-loader div {
width: 10px;
height: 10px;
border-radius: 50%;
background-color: var(--man6);
animation: bounce 1.4s infinite ease-in-out;
}
.bounce-loader div:nth-child(1) {
animation-delay: -0.32s;
}
.bounce-loader div:nth-child(2) {
animation-delay: -0.16s;
}
@keyframes bounce {
0%,
80%,
100% {
transform: scale(0);
}
40% {
transform: scale(1);
}
}
</style>
<blockquote>neon-loader</blockquote>
<div class="neon-bounce">
<span></span>
<span></span>
<span></span>
</div>
<style>
.neon-bounce {
display: flex;
gap: 8px;
}
.neon-bounce span {
width: 12px;
height: 12px;
border-radius: 50%;
background: var(--man4);
box-shadow: 0 0 10px var(--man4), 0 0 20px var(--man4);
animation: neon-bounce 1.2s infinite ease-in-out;
}
.neon-bounce span:nth-child(2) {
background: var(--man5);
box-shadow: 0 0 10px var(--man5), 0 0 20px var(--man5);
animation-delay: 0.2s;
}
.neon-bounce span:nth-child(3) {
background: var(--man6);
box-shadow: 0 0 10px var(--man6), 0 0 20px var(--man6);
animation-delay: 0.4s;
}
@keyframes neon-bounce {
0%,
100% {
transform: translateY(0);
}
50% {
transform: translateY(-20px);
}
}
</style>
<blockquote>fluid-loader</blockquote>
<div class="fluid-bounce"></div>
<style>
.fluid-bounce {
width: 30px;
height: 30px;
border-radius: 50%;
background: linear-gradient(45deg, var(--man6), var(--man3));
animation:
fluid-bounce 1.2s infinite ease-in-out,
color-shift 3s infinite alternate;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
@keyframes fluid-bounce {
0%,
100% {
transform: translateY(0);
}
50% {
transform: translateY(-30px) scale(1.1);
}
}
@keyframes color-shift {
0% {
filter: hue-rotate(0deg);
}
100% {
filter: hue-rotate(360deg);
}
}
</style>
<blockquote>minimal-loader</blockquote>
<div class="minimal-bounce">
<div class="line"></div>
</div>
<style>
.minimal-bounce {
width: 60px;
position: relative;
}
.line {
position: absolute;
bottom: 0;
width: 100%;
height: 3px;
background: var(--man6);
border-radius: 3px;
animation: stretch 1.5s infinite cubic-bezier(0.4, 0, 0.2, 1);
}
@keyframes stretch {
0%,
100% {
transform: scaleX(0.3);
opacity: 0.6;
}
50% {
transform: scaleX(1);
opacity: 1;
}
}
</style>
<script type="text/javascript" src="/jscss/ciy.js"></script>
</body>
</html>

View File

@ -143,6 +143,10 @@
<a class="btn sm" href="demo_css.html" target="_blank">css</a>
当前CSS示例。
</div>
<div>
<a class="btn sm" href="demo_loading.html" target="_blank">loading</a>
Loading CSS3动画。
</div>
<div>
<a class="btn sm" href="demo_cssn.html" target="_blank">cssn</a>
未来关注的CSS。

View File

@ -460,13 +460,40 @@
.btn-menu-caret.show:after {
transform: rotate(180deg);
}
.ring-loader {
width: 3em;
height: 3em;
margin: auto;
border: 0.2em solid var(--man3);
border-radius: 50%;
border-top-color: var(--man6);
border-left-color: var(--man4);
animation: spin 2s ease-in-out infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
.ciy-pageload {
margin-top: 5em;
text-align: center;
font-size: 1.5em;
color: var(--dag5);
}
</style>
</head>
<body>
<div id="id_body" oncontextmenu="return false;" onselectstart="return false">
<div class="menu" onclick="Glob.manage.page_shrink();">MENU</div>
<div class="ciy-layout">
<div class="ciy-pageload">
<div class="ring-loader"></div>
</div>
<div class="ciy-layout" style="display:none;">
<div class="menu" onclick="Glob.manage.page_shrink();">MENU</div>
<div class="ciy-navheader">
<ul class="ciy-nav" style="height:calc(4em - 1px);">
<div class="ciy-logo" style="line-height: 4em;" ondblclick="Glob.manage.page_shrink();">
@ -915,7 +942,13 @@
if (!ciyfn) return setTimeout(function () { location.reload(); }, 1000);
Glob.ciysvg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path class="svgfill" d="M987.136 384.512C919.552 131.584 668.16-22.528 415.232 27.136c219.648-41.984 434.176 79.36 488.96 283.136 57.344 214.016-82.944 437.76-313.344 499.2-49.664 13.312-78.848 64-65.536 113.152 13.312 49.664 64 78.848 113.152 65.536 263.168-70.144 418.816-340.48 348.672-603.648zM116.224 713.216C58.88 499.2 199.68 275.456 430.08 214.016c49.664-13.312 78.848-64 65.536-113.152C482.816 51.2 432.128 21.504 382.464 34.816c-263.68 70.656-419.84 340.992-349.184 604.16 67.584 252.928 319.488 407.04 571.392 356.864-219.648 42.496-433.664-78.848-488.448-282.624z m93.184-203.776L291.84 449.536c44.544-32.256 90.112-32.256 133.12-0.512l83.456 60.928-149.504-230.4-149.504 229.888z m516.096-60.416L808.96 509.952l-149.504-229.888-149.504 229.376 82.432-59.904c44.544-32.256 90.112-32.256 133.12-0.512z m-366.08 291.84L441.856 680.96c44.544-32.256 90.112-32.256 133.12-0.512l83.456 60.928-149.504-230.4-149.504 229.888z"></path></svg>';
ciyfn.callfunc("init", {}, function (json) {
$5('.ciy-pageload').hide();
$5('.ciy-layout').show();
Glob.manage = new ciyclass.managepage(json);
}, {
fail: function (json, xhr) {
$5('.ciy-pageload').html(json.errmsg);
}
});
});
window.addEventListener('message', function (event) {
@ -945,7 +978,7 @@
if (e.ctrlKey && e.keyCode == 83) {//Ctrl+S
e.preventDefault();
var save_s = $5('.ctrl_s');
if(save_s.length == 1)
if (save_s.length == 1)
save_s.trigger('click');
}
if (e.ctrlKey && e.keyCode == 69) {//Ctrl+E

View File

@ -13,6 +13,8 @@ class index {
$csql = new \ciy\sql('zc_menu');
$csql->where('isuse', 1)->order('csort desc,id')->column('id,upid,name,url,pow');
$ret['menu'] = $db->get($csql);
if($ret['menu'] === false)
return errjson('菜单获取失败:' . $db->error);
if (count($ret['menu']) == 0)
$ret['menu'][] = array('id' => 2, 'upid' => 0, 'name' => '您无任何菜单权限', 'url' => '', 'pow' => '', 'csort' => 0);

View File

@ -104,7 +104,7 @@
</ul>
</a>
</div>
<h1 class="ciy-title lang">Ciyon SaaS 总控台</h1>
<h1 class="ciy-title lang">Ciyon SaaS总控台</h1>
<div class="cmain">
<fieldset class="tips">
<legend class="lang">管理员登录</legend>

View File

@ -447,7 +447,7 @@ _ciydomclas.prototype.on = function (evt, selector, func, isone) {
}
if (target) {
ev.currentTarget = target;
func.call(target, ev);
if (isone)
dom.removeEventListener(evt, listenfn);
@ -544,7 +544,7 @@ _ciydomclas.prototype.winheight = function () {
return this[0].ownerDocument.defaultView.innerHeight;
};
_ciydomclas.prototype._getdisplay = function (dom) {
if(!iselement(dom))
if (!iselement(dom))
return 'block';
var dp = window.getComputedStyle(dom).display;
if (dp != 'none')
@ -1075,7 +1075,7 @@ ciyfn.ajax = function (opn) { //IE8 OK
var timeout = opn.timeout || 10;
if (timeout < 1)
timeout = 3;
if(timeout > 20)
if (timeout > 20)
header['ciy-timeout'] = timeout;
var method = opn.method || 'POST';
@ -1122,7 +1122,7 @@ ciyfn.ajax = function (opn) { //IE8 OK
}
}
request.timeout = timeout * 1000;
request.ontimeout = function() {
request.ontimeout = function () {
clearTimeout(aborttime);
console.warn('request timeout: ' + timeout + 's');
};
@ -1136,18 +1136,19 @@ ciyfn.ajax = function (opn) { //IE8 OK
if (typeof opn.success === 'function')
opn.success(this.responseText, this);
} else {
if (typeof opn.fail === 'function') {
var errtxt = '';
if (this.status == 200)
errtxt = 'Server Error: ' + this.responseText;
else if (this.status == 404)
errtxt = "404 Not Found: " + this.responseURL;
else if (this.status == 0)
errtxt = "Server No Response.";
else
errtxt = 'ErrCode:' + this.status + "," + this.statusText;
opn.fail(errtxt, this);
}
var errtxt = 'ErrCode:' + this.status;
if (this.status == 200)
errtxt = 'Server Error: ' + this.responseText;
else if (this.status == 404)
errtxt = "404 Not Found: " + this.responseURL;
else if (this.status == 0)
errtxt = "Server No Response.";
else
errtxt = 'ErrCode:' + this.status + "," + this.statusText;
if (typeof opn.fail === 'function')
opn.fail({ errmsg: errtxt }, this);
else
ciyfn.alert(errtxt);
}
}
}

View File

@ -304,5 +304,39 @@
,"三":"Wed."
,"四":"Thu."
,"五":"Fri."
,"六":"Sat."
,"六":"Sat.",
"平台业务":"Platform Biz",
"客服工作":"CS Work",
"运营工作":"Ops Work",
"财务工作":"Finance Work",
"用户数据":"User Data",
"工单处理":"Tickets",
"意见建议":"Feedback",
"用户服务":"User Service",
"提现审核":"Withdrawal Review",
"金币购买记录":"Coin Purchase",
"收支记录":"Income/Expense",
"付费会员记录":"Premium Members",
"金币流水记录":"Coin Flow",
"板块文章":"Section Articles",
"广告图管理":"Banner Mgmt",
"金币奖励埋点":"Coin Rewards",
"付费会员定价":"Premium Pricing",
"金币购买定价":"Coin Pricing",
"提现支付":"Withdrawal Pay",
"发票开票":"Invoicing",
"付费会员流水":"Premium Flow",
"金币购买流水":"Coin Buy Flow",
"充值流水":"Top-up Flow",
"用户资料":"User Profile",
"用户实名认证":"Real-name Auth",
"用户发票抬头":"Invoice Title",
"用户收件地址":"Shipping Address",
"验证码":"Verification Code",
"AI辅助决策":"AI Decision",
"审批事项":"Approval",
"产业官网":"Ind. Portal",
"AI私域":"AI Private",
"AI自媒体":"AI Media",
"接入管理":"Access Mgmt"
}

View File

@ -305,6 +305,39 @@
,"三":"水"
,"四":"木"
,"五":"金"
,"六":"土"
,"六":"土",
"平台业务":"プラット業務",
"客服工作":"カスタマー対応",
"运营工作":"運営業務",
"財務工作":"財務業務",
"用户数据":"ユーザーデータ",
"工单处理":"チケット処理",
"意见建议":"意見・提案",
"用户服务":"ユーザーサポート",
"提现审核":"出金審査",
"金币购买记录":"コイン購入記録",
"收支记录":"収支記録",
"付费会员记录":"有料会員記録",
"金币流水记录":"コイン流水",
"板块文章":"掲示板記事",
"广告图管理":"広告画像管理",
"金币奖励埋点":"コイン報酬ポイント",
"付费会员定价":"有料会員価格",
"金币购买定价":"コイン購入価格",
"提现支付":"出金支払い",
"发票开票":"請求書発行",
"付费会员流水":"有料会員流水",
"金币购买流水":"コイン購入流水",
"充值流水":"チャージ流水",
"用户资料":"ユーザー情報",
"用户实名认证":"本人確認",
"用户发票抬头":"請求書宛名",
"用户收件地址":"配送先住所",
"验证码":"認証コード",
"AI辅助决策":"AI意思決定支援",
"审批事项":"承認事項",
"产业官网":"産業HP",
"AI私域":"AIプライベート",
"AI自媒体":"AI自メディア",
"接入管理":"アクセス管理"
}