* [story#75371,doing,0.1h] rebase

This commit is contained in:
zhangjialiang
2025-06-18 17:56:18 +08:00
parent 17996d588b
commit 77264e9dd1
5 changed files with 290 additions and 144 deletions
+1
View File
@@ -1,6 +1,7 @@
<?php
declare(strict_types=1);
$config->admin->register = new stdclass();
$config->admin->register->community = 'https://www.zentao.net';
$config->admin->register->apiRoot = 'https://www.zentao.net';
$config->admin->register->bindCommunity = 'false';
$config->admin->register->bindCommunityMobile = '';
+45 -7
View File
@@ -1,9 +1,47 @@
#mainContent {width: 600px;}
.panel-form {margin-top: 200px;}
.mobile-captcha {display: inline; width: 83%;}
.a-captcha {height: 34px; line-height: 24px; width: 120px; margin-left:12px; max-width: 30%;}
.captcha-mobile-sender {width: 204px; height: 124px; position: absolute; top: 36px; right: 0; box-shadow: 0px 2px 24px 3px #1F232914; background-color: #fff; margin-top: 7px;}
.page-title span {margin-left: 1rem;}
.panel-form {padding: 0; max-width: 36rem;}
.form-title {background: linear-gradient(98.73deg, #28A5FF 1.4%, #0084FF 100%); display: block; color: #ffffff; margin-top: 14rem; max-width: 36rem; padding-left: 12px;}
.form-title .main-title {padding-top: 26px; padding-left: 12px;}
.form-title .sub-title {width: 24%; display: inline-block; color: #ffffff; margin-top: 28px; text-align: center;}
.form-title .sub-title .icon {margin-right: 4px;}
.label-text {font-size: 16px; margin-left: 10px;}
.no-label-mobile {width: 32rem;}
.no-label-code {width: 32rem; margin-left: 0.9rem;}
.no-label-input {height: 40px;}
#captchaImageLabel {margin-top: -1.5rem}
#captchaImage {width: 8rem; margin-left: 0.8rem; display: inline;}
#checkMobileSenderID {display: inline; cursor: pointer;}
#captcha-btn {width: 7rem; line-height: 40px; padding-left: 2rem; font-size: 15px; color: #0084FF}
.form-agree-ux {color: #5A6D88}
#experience-plan-show {color: #0084FF}
.open-url{display: none;}
.captcha-mobile-sender {width: 204px; height: 124px; position: absolute; top: 480px; margin-left: 562px; box-shadow: 0px 2px 24px 3px #1F232914; background-color: #fff; margin-top: 7px;}
.captcha-wrapper {height:68px; margin-bottom: 12px;}
.captcha-wrapper img, .image-box {width: 100%; height: 100%;}
.captcha-wrapper img, .image-box {width: 100%;height: 100%;}
#checkMobileSender {height: 36px; line-height: 36px; color: #007AFF; background: #fff; padding:0;}
#checkMobileSender:hover,#checkMobileSender:active,#checkMobileSender:focus {box-shadow: none;}
#checkMobileSender:hover,#checkMobileSender:active,#checkMobileSender:focus {box-shadow: none;}
button[type="submit"] {height: 40px; width: 120px;}
.panel-form {padding: 0; max-width: 36rem;}
.z-box-container {width: 100%; margin: 0 auto; background: white; border-radius: 8px; padding: 24px; box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);}
.z-bind-info-image {display: flex; align-items: center; margin-top: 0.4rem; margin-left: 0.4rem;}
.z-bind-info-image img {width: 44px; height: 44px; margin-right: 12px;}
.z-bind-info-website {font-size: 18px; color: #666; margin-bottom: 4px;}
.z-bind-info-mobile {font-size: 15px;}
.z-unbind-btn {border: 1px solid #E6ECF8; color: #0084FF; border-radius: 16px; padding: 6px 16px; margin-left: 17.4rem; font-size: 15px; line-height: 15px;}
.z-plan-info {margin-top: 20px; padding-top: 20px;}
.z-plan-info-box {margin-top: -2px; margin-left: 12px}
.z-plan-info-box a {color: #0084FF; text-decoration: none;}
.z-plan-info-box span {color: #666;}
.z-switch {display: inline-block; margin-left: 6.6rem;}
.switch {min-height: 16px;}
.z-switch-toggle {height: 24px; background: #0084FF; border-radius: 12px; position: relative;}
.z-footer-btn {
margin-top: 24px;
display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
height: 40px;
}
.z-footer-btn button {height: 40px; width: 120px; font-size: 16px;}
.z-bind-info {border: 1px solid #f0f0f0; border-radius: 5px;height: 4.4rem;}
.z-plan-info {border: 1px solid #f0f0f0; border-radius: 5px;height: 3.6rem;}
+13 -11
View File
@@ -38,12 +38,8 @@ window.showCaptcha = function()
$('.captcha-mobile-sender').show();
}
window.checkMobileSender = function(e)
window.checkMobileSender = function()
{
e = $(checkMobileSenderID);
e.preventDefault();
$('#captchaImageError').html('');
$('#captchaMobileError').html('');
$.post($.createLink('admin', 'sendCode'),{mobile:$('#mobile-captcha').val(), captchaContent: $('#captchaImage').val()},function(response)
{
response = JSON.parse(response);
@@ -53,17 +49,15 @@ window.checkMobileSender = function(e)
countdown = 60;
setSmsSenderTime();
$('.captcha-mobile-sender').hide();
$('#captchaMobileError').html(response.message);
}
else
{
$('#captchaImageError').html(response.message);
if(response.captchaContent) $('.captch-box .image-box').html(response.captchaContent);
if(response.captchaContent) $('.captcha-box .image-box').html(response.captchaContent);
}
});
}
function setSmsSenderTime()
window.setSmsSenderTime = function()
{
$('#captcha-btn').html(countdown + 's').off('click').removeClass('captcha-btn-class');
smsSenderTimer = setInterval(function(){
@@ -72,12 +66,20 @@ function setSmsSenderTime()
$('#captcha-btn').html(countdown + 's').off('click').removeClass('captcha-btn-class');
}else{
window.clearInterval(smsSenderTimer);
$('#captchaMobileError').html('');
$('#captcha-btn').html('重新发送').on('click', function(e)
{
$('#captchaMobileError').html('');
$('.captcha-mobile-sender').show();
}).addClass('captcha-btn-class');
}
},1000);
}
window.goBack = function()
{
location.href = $.createLink('admin', 'index');
}
window.goCommunity = function(link)
{
window.open(link)
}
+12 -3
View File
@@ -230,15 +230,24 @@ $lang->admin->register->uxPlanTitle = '禅道用户体验改进计划';
$lang->admin->register->loginFailed = '登录失败';
$lang->admin->register->officialWebsite = '禅道官网 ';
$lang->admin->register->uxPlanWithBookTitle = '《禅道用户体验改进计划》';
$lang->admin->register->uxPlanStatusTitle = '帮助我们了解产品使用情况';
$lang->admin->register->uxPlanStatusTitle = '帮助我们了解产品使用情况,您可在后台关闭此功能。';
$lang->admin->register->mobile = '手机号';
$lang->admin->register->smsCode = '短信验证码';
$lang->admin->register->smsCode = '验证码';
$lang->admin->register->sendCode = '获取验证码';
$lang->admin->register->join = '加入';
$lang->admin->register->joinDesc = '帮助我们了解产品使用情况,您可在后台关闭此功能。';
$lang->admin->register->joinDesc = '帮助我们了解产品使用情况。';
$lang->admin->register->captchaTip = '请输入图形验证码';
$lang->admin->register->sure = '确定';
$lang->admin->register->unBindText = '解绑';
$lang->admin->register->welcome = '欢迎您加入禅道社区。在这里,您可以获得:';
$lang->admin->register->advantage1 = '项目管理大礼包';
$lang->admin->register->advantage2 = '技术支持服务';
$lang->admin->register->advantage3 = '体验各版本Demo';
$lang->admin->register->advantage4 = '禅道软件手册';
$lang->admin->register->goCommunity = '前往社区';
$lang->admin->register->enterMobile = '请输入手机号';
$lang->admin->register->enterCode = '请输入验证码';
$lang->admin->register->goBack = '返回';
$lang->admin->register->uxPlan = new stdclass();
$lang->admin->register->uxPlan->agree = '已同意';
+219 -123
View File
@@ -10,16 +10,37 @@ declare(strict_types=1);
*/
namespace zin;
set::zui(true);
use function Symfony\Component\String\b;
modalHeader(set::title($this->lang->admin->register->registerTitle));
set::zui(true);
$checked = $agreeUX == 'true' ? 'checked' : '';
if (strpos($_SERVER['REQUEST_URI'], '_single=1') !== false) {
$backBtn = '';
}
else
{
$backBtn = div(
setClass('page-title'),
button(
icon
(
setClass('icon icon-rocket')
),
setClass('btn capitalize primary'),
on::click('goBack'),
$lang->admin->register->goBack
),
span($lang->admin->register->registerTitle),
);
}
if($bindCommunity)
{
panel
div
(
$backBtn,
setID('main'),
setClass('flex justify-center'),
div
@@ -27,40 +48,89 @@ if($bindCommunity)
setID('mainContent'),
setClass('px-1 mt-2 w-full max-w-7xl'),
div(
setClass('max-w-7xl h-40'),
$lang->admin->register->officialWebsite,
br(),
span(
$bindCommunityMobile
setClass('panel panel-form pt-4 size-sm is-lite'),
div(
setClass('max-w-7xl h-32 form-title'),
div(
setClass('main-title text-xl'),
$lang->admin->register->welcome,
),
div(setClass('sub-title'), icon(setClass('icon icon-rocket')), $lang->admin->register->advantage1),
div(setClass('sub-title'), icon(setClass('icon icon-rocket')), $lang->admin->register->advantage2),
div(setClass('sub-title'), icon(setClass('icon icon-rocket')), $lang->admin->register->advantage3),
div(setClass('sub-title'), icon(setClass('icon icon-rocket')), $lang->admin->register->advantage4),
),
div(
button(
setClass('btn btn-wide btn-primary'),
setID('unBind'),
$lang->admin->register->unBindText,
on::click()->call('unBind'),
setClass('z-box-container'),
div(
setClass('z-bind-info'),
div(
setClass('z-bind-info-image'),
img(
set::src('static/images/register-logo.png')
),
div(
div(
setClass('z-bind-info-website'),
$lang->admin->register->officialWebsite,
),
div(
setClass('z-bind-info-mobile'),
$bindCommunityMobile
)
),
button(
icon
(
setClass('icon icon-rocket')
),
setClass('btn btn-primary z-unbind-btn'),
setID('unBind'),
$lang->admin->register->unBindText,
on::click()->call('unBind'),
)
)
),
div(
setClass('z-plan-info'),
div(
setClass('z-plan-info-box'),
span(
$lang->admin->register->join,
),
a
(
setID('experience-plan-show'),
set('data-size', 'sm'),
$lang->admin->register->uxPlanWithBookTitle,
set::href(createLink('admin', 'planModal')),
set('data-toggle', 'modal')
),
span(
$lang->admin->register->joinDesc,
),
div(
setClass('z-switch'),
switcher
(
setClass('z-switch-toggle'),
setID('agreeUX'),
set('checked', $checked),
on::change()->call('changeAgreeUX', '#agreeUX'),
)
)
),
),
div
(
setClass('z-footer-btn'),
button(
setClass('btn capitalize primary'),
$lang->admin->register->goCommunity,
on::click()->call('goCommunity', $config->admin->register->community),
)
)
)
),
div(
$lang->admin->register->join,
a
(
setID('experience-plan-show'),
set('data-size', 'sm'),
$lang->admin->register->uxPlanWithBookTitle,
set::href(createLink('admin', 'planModal')),
set('data-toggle', 'modal')
),
$lang->admin->register->joinDesc,
),
div(
input(
set('type', 'checkbox'),
setID('agreeUX'),
set('checked', $checked),
on::change()->call('changeAgreeUX', '#agreeUX'),
)
)
)
);
@@ -69,123 +139,149 @@ else
{
div
(
$backBtn,
setID('main'),
setClass('flex justify-center'),
div
(
setID('mainContent'),
setClass('px-1 mt-2 w-full max-w-7xl'),
formPanel
(
set::formID('joinForm'),
div(
setClass('panel panel-form pt-4 size-sm is-lite'),
div(
setClass('max-w-7xl h-40'),
setClass('max-w-7xl h-32 form-title'),
div(
setClass('main-title text-xl'),
$lang->admin->register->welcome,
),
div(setClass('sub-title'), icon(setClass('icon icon-rocket')), $lang->admin->register->advantage1),
div(setClass('sub-title'), icon(setClass('icon icon-rocket')), $lang->admin->register->advantage2),
div(setClass('sub-title'), icon(setClass('icon icon-rocket')), $lang->admin->register->advantage3),
div(setClass('sub-title'), icon(setClass('icon icon-rocket')), $lang->admin->register->advantage4),
),
setClass('bg-canvas m-auto mw-auto'),
set::headingClass('w-96 m-auto'),
set::submitBtnText($lang->save),
formRow
formPanel
(
setClass('w-96 m-auto'),
formGroup
set::formID('joinForm'),
setClass('bg-canvas m-auto mw-auto'),
set::headingClass('w-96 m-auto'),
set::submitBtnText($lang->admin->register->registerTitle),
div(
setClass('label-text'),
$lang->admin->register->mobile,
),
formRow
(
set::label($lang->admin->register->mobile),
input
setClass('m-auto no-label-mobile'),
formGroup
(
set::name('mobile'),
setID('mobile-captcha')
)
)
),
p
(
setID('captchaImageError')
),
p
(
setID('captchaMobileError')
),
formRow
(
setClass('w-96 m-auto'),
formGroup
(
set::label($lang->admin->register->smsCode),
input
(
set::name('code')
setClass('no-label'),
input
(
setClass('no-label-input'),
set::name('mobile'),
setID('mobile-captcha'),
set::placeholder($lang->admin->register->enterMobile)
)
)
),
a
p
(
setID('captcha-btn'),
setClass('captcha-btn-class'),
set('href', 'javascript:;'),
$lang->admin->register->sendCode,
on::click()->call('showCaptcha'),
)
),
formRow
(
setClass('w-96 m-auto'),
formGroup
setID('captchaImageError')
),
p
(
checkbox
setID('captchaMobileError')
),
div(
setID('captchaImageLabel'),
setClass('label-text'),
$lang->admin->register->smsCode,
),
formRow
(
setClass('m-auto no-label-code'),
formGroup
(
set::name('agreeUX'),
set::value(1)
),
span
(
$lang->admin->register->join,
a
setClass('no-label'),
input
(
setID('experience-plan-show'),
set('data-size', 'sm'),
$lang->admin->register->uxPlanWithBookTitle,
set::href(createLink('admin', 'planModal')),
set('data-toggle', 'modal')
setClass('no-label-input'),
set::name('code'),
set::placeholder($lang->admin->register->enterCode)
)
),
a
(
setID('captcha-btn'),
setClass('captcha-btn-class'),
set('href', 'javascript:;'),
$lang->admin->register->sendCode,
on::click()->call('showCaptcha'),
)
),
formRow
(
setClass('m-auto form-agree-ux'),
formGroup
(
checkbox
(
set::name('agreeUX'),
set::value(1)
),
$lang->admin->register->uxPlanStatusTitle
span
(
$lang->admin->register->join,
a
(
setID('experience-plan-show'),
set('data-size', 'sm'),
$lang->admin->register->uxPlanWithBookTitle,
set::href(createLink('admin', 'planModal')),
set('data-toggle', 'modal')
),
$lang->admin->register->uxPlanStatusTitle
)
)
)
)
),
div(
setClass('captcha-mobile-sender captch-box'),
set::style(array('display' => 'none')),
div
(
setClass('form-group captch-box'),
set::style(array('margin-bottom' => 0)),
),
div(
setClass('captcha-mobile-sender captcha-box'),
set::style(array('display' => 'none')),
div
(
set::style(array('padding-right' => 0)),
setClass('captcha-wrapper'),
setClass('form-group captch-box'),
set::style(array('margin-bottom' => 0)),
div
(
setClass('image-box'),
on::init()->call('getCaptchaContent', ".image-box"),
on::click()->call('getCaptchaContent', ".image-box"),
set::style(array('padding-right' => 0)),
setClass('captcha-wrapper'),
div
(
setClass('image-box'),
on::init()->call('getCaptchaContent', ".image-box"),
on::click()->call('getCaptchaContent', ".image-box"),
)
)
)
),
div
(
setClass('w-96 m-auto'),
input
),
div
(
set::name('captchaImage'),
set::placeholder($lang->admin->register->captchaTip)
setClass('w-96 m-auto'),
input
(
set::name('captchaImage'),
set::placeholder($lang->admin->register->captchaTip)
),
div
(
setID('checkMobileSenderID'),
setClass('px-4'),
set::type('primary'),
$lang->admin->register->sure,
on::click()->call('checkMobileSender', '#checkMobileSenderID'),
)
)
),
btn
(
setID('checkMobileSenderID'),
setClass('px-4'),
set::type('primary'),
$lang->admin->register->sure,
on::click()->call('checkMobileSender', '#checkMobileSenderID'),
)
)
)