diff --git a/module/admin/config/register.php b/module/admin/config/register.php index b6ef21535f..3fff567a03 100644 --- a/module/admin/config/register.php +++ b/module/admin/config/register.php @@ -1,6 +1,7 @@ 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 = ''; diff --git a/module/admin/css/register.ui.css b/module/admin/css/register.ui.css index 2c736843b8..17bdd3aaa4 100644 --- a/module/admin/css/register.ui.css +++ b/module/admin/css/register.ui.css @@ -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;} \ No newline at end of file +#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;} \ No newline at end of file diff --git a/module/admin/js/register.ui.js b/module/admin/js/register.ui.js index 90213b0c05..66fc2b916f 100644 --- a/module/admin/js/register.ui.js +++ b/module/admin/js/register.ui.js @@ -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) +} \ No newline at end of file diff --git a/module/admin/lang/zh-cn.php b/module/admin/lang/zh-cn.php index 643fcc440c..9a7666e6e6 100755 --- a/module/admin/lang/zh-cn.php +++ b/module/admin/lang/zh-cn.php @@ -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 = '已同意'; diff --git a/module/admin/ui/register.html.php b/module/admin/ui/register.html.php index 6afff8e002..319c5b55ce 100644 --- a/module/admin/ui/register.html.php +++ b/module/admin/ui/register.html.php @@ -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'), ) ) )