主题 还原

This commit is contained in:
ljmwkx
2025-01-18 21:34:11 +08:00
parent 7ed5450aa8
commit 60beedde39
3 changed files with 42 additions and 198 deletions
@@ -2,4 +2,3 @@
from . import main
from . import sh_firebase_notification
from . import home
from . import login
@@ -1,72 +0,0 @@
# -*- encoding: utf-8 -*-
import hashlib
import odoo
from odoo import http
from odoo.tools import pycompat
from odoo.tools.translate import _
from odoo.http import request
from odoo.addons.web.controllers.home import Home as WebHome
from odoo.addons.web.controllers.utils import ensure_db, _get_login_redirect_url
# Shared parameters for all login/signup flows
SIGN_UP_REQUEST_PARAMS = {'db', 'login', 'debug', 'token', 'message', 'error',
'scope', 'mode', 'redirect', 'redirect_hostname',
'email', 'name', 'partner_id', 'password',
'confirm_password', 'city', 'country_id', 'lang'}
class Home(WebHome):
@http.route(route='/web/login', type='http', auth="none")
def web_login(self, redirect=None, **kw):
"""Override web_login function to add features of this module."""
ensure_db()
request.params['login_success'] = False
if request.httprequest.method == 'GET' and redirect and request.session.uid:
return request.redirect(redirect)
if not request.uid:
request.update_env(user=odoo.SUPERUSER_ID)
values = {val: item for val, item in request.params.items() if
val in SIGN_UP_REQUEST_PARAMS}
try:
values['databases'] = http.db_list()
except odoo.exceptions.AccessDenied:
values['databases'] = None
if request.httprequest.method == 'POST':
old_uid = request.update_env(user=request.session.uid)
try:
uid = request.session.authenticate(request.session.db,
request.params['login'],
request.params['password'])
request.params['login_success'] = True
return request.redirect(
self._login_redirect(uid, redirect=redirect))
except odoo.exceptions.AccessDenied as e:
request.update_env = old_uid
if e.args == odoo.exceptions.AccessDenied().args:
values['error'] = _("错误的用户名和密码!")
else:
values['error'] = e.args[0]
else:
if 'error' in request.params and request.params.get(
'error') == 'access':
values['error'] = _("只有员工才能访问此数据库。请联系管理员。")
if 'login' not in values and request.session.get('auth_login'):
values['login'] = request.session.get('auth_login')
if not odoo.tools.config['list_db']:
values['disable_database_manager'] = True
response = request.render('sh_backmate_theme_adv_enterprise.sh_backmate_theme_web_login_main_template', values)
response.headers['X-Frame-Options'] = 'DENY'
return response
class Website(Home):
# override
@http.route(website=True, auth="public", sitemap=False)
def web_login(self, *args, **kw):
return super().web_login(*args, **kw)
@@ -1,90 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="sh_backmate_theme_adv_enterprise.login_layout" name="Login Layout">
<t t-call="web.frontend_layout">
<t t-set="html_data" t-value="{'style': 'height: 100%;'}"/>
<t t-set="body_classname" t-value="'bg-100'"/>
<t t-set="no_header" t-value="True"/>
<t t-set="no_footer" t-value="True"/>
<div class="container py-5">
<div t-attf-class="card border-0 mx-auto bg-100 {{login_card_classes}} o_database_list" style="max-width: 300px;">
<div class="card-body">
<div t-attf-class="text-center pb-3 border-bottom {{'mb-3' if form_small else 'mb-4'}}">
<img t-attf-src="/web/binary/company_logo{{ '?dbname='+db if db else '' }}" alt="Logo" style="max-height:120px; max-width: 100%; width:auto"/>
</div>
<t t-out="0"/>
<div class="text-center small mt-4 pt-3 border-top" t-if="not disable_footer">
<t t-if="not disable_database_manager">
<a class="border-end pe-2 me-1" href="/web/database/manager">管理数据库</a>
</t>
<a href="https://www.odoo.com?utm_source=db&amp;utm_medium=auth" target="_blank">提供者 <span>Odoo</span></a>
</div>
</div>
</div>
</div>
</t>
</template>
<template id="sh_backmate_theme_adv_enterprise.login" name="Login">
<t t-call="sh_backmate_theme_adv_enterprise.login_layout">
<form class="oe_login_form" role="form" t-attf-action="/web/login" method="post" onsubmit="this.action = '/web/login' + location.hash">
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<div class="mb-3" t-if="databases and len(databases) &gt; 1">
<label for="db" class="col-form-label">Database</label>
<div t-attf-class="input-group {{'input-group-sm' if form_small else ''}}">
<input type="text" name="db" t-att-value="request.db" id="db" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" readonly="readonly"/>
<a role="button" href="/web/database/selector" class="btn btn-secondary">选择 <i class="fa fa-database" role="img" aria-label="Database" title="Database"></i></a>
</div>
</div>
<div class="mb-3 field-login">
<label for="login" class="form-label">用户名</label>
<input type="text" placeholder="Email" name="login" t-att-value="login" id="login" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" autocomplete="username" autofocus="autofocus" autocapitalize="off"/>
</div>
<div class="mb-3">
<label for="password" class="form-label">密码</label>
<input type="password" placeholder="Password" name="password" id="password" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" autocomplete="current-password" t-att-autofocus="'autofocus' if login else None" maxlength="4096"/>
</div>
<p class="alert alert-danger" t-if="error" role="alert">
<t t-esc="error"/>
</p>
<p class="alert alert-success" t-if="message" role="status">
<t t-esc="message"/>
</p>
<div t-attf-class="clearfix oe_login_buttons text-center gap-1 d-grid mb-1 {{'pt-2' if form_small else 'pt-3'}}">
<button type="submit" class="btn btn-primary">登 录</button>
<t t-if="debug">
<button type="submit" name="redirect" value="/web/become" class="btn btn-link btn-sm">以超级用户身份登录</button>
</t>
<div class="o_login_auth"/>
</div>
<input type="hidden" name="redirect" t-att-value="redirect"/>
</form>
</t>
</template>
<template id="sh_backmate_theme_adv_enterprise.login_successful" name="Login successful">
<t t-call="sh_backmate_theme_adv_enterprise.login_layout">
<div class="oe_login_form">
<p>
您已登录
</p>
<div t-attf-class="clearfix oe_login_buttons text-center mb-1 pt-3">
<a class="btn btn-primary btn-block" href="/web/session/logout">注 销</a>
</div>
</div>
</t>
</template>
<template id="sh_backmate_theme_web_login_layout" inherit_id="sh_backmate_theme_adv_enterprise.login_layout" name="Backmate Login Layout">
<template id="sh_backmate_theme_web_login_layout" inherit_id="web.login_layout" name="Backmate Login Layout">
<xpath expr="//div[hasclass('container')]" position="replace">
<t t-set="pageName" t-value="'sh_backmate_advance_enterprise_website_login_page_wrapper'" />
<t t-set="theme_config" t-value="request.env['sh.back.theme.config.settings'].search([('id','=',1)],limit = 1)" />
@@ -105,9 +22,9 @@
<t t-raw="0"/>
<div class="text-center small mt-4 pt-3 border-top" t-if="not disable_footer">
<t t-if="not disable_database_manager">
<a class="pr-2 mr-1" href="/web/database/manager">管理数据库</a>
<a class="pr-2 mr-1" href="/web/database/manager">Manage Databases</a>
</t>
<a href="https://www.odoo.com?utm_source=db&amp;utm_medium=auth" target="_blank">提供者 <span>Odoo</span></a>
<a href="https://www.odoo.com?utm_source=db&amp;utm_medium=auth" target="_blank">Powered by <span>Odoo</span></a>
</div>
</div>
</div>
@@ -129,9 +46,9 @@
<t t-raw="0"/>
<div class="text-center small mt-4 pt-3 border-top" t-if="not disable_footer">
<t t-if="not disable_database_manager">
<a class="border-right pr-2 mr-1" href="/web/database/manager">管理数据库</a>
<a class="border-right pr-2 mr-1" href="/web/database/manager">Manage Databases</a>
</t>
<a href="https://www.odoo.com?utm_source=db&amp;utm_medium=auth" target="_blank">提供者 <span>Odoo</span></a>
<a href="https://www.odoo.com?utm_source=db&amp;utm_medium=auth" target="_blank">Powered by <span>Odoo</span></a>
</div>
</div>
</div>
@@ -157,13 +74,13 @@
<div t-attf-class="card border-0 mx-auto mt-5 bg-100 {{login_card_classes}} o_database_list col-lg-6 col-md-6 col-sm-6 col-12" style="max-width: 300px;">
<div class="card-body">
<!-- -->
<h1><center><span class="sign_in">登录</span></center></h1>
<h1><center><span class="sign_in">Sign In</span></center></h1>
<t t-raw="0"/>
<div class="text-center small mt-4 pt-3 border-top" t-if="not disable_footer">
<t t-if="not disable_database_manager">
<a class="border-right pr-2 mr-1" href="/web/database/manager">管理数据库</a>
<a class="border-right pr-2 mr-1" href="/web/database/manager">Manage Databases</a>
</t>
<a href="https://www.odoo.com?utm_source=db&amp;utm_medium=auth" target="_blank">提供者 <span>Odoo</span></a>
<a href="https://www.odoo.com?utm_source=db&amp;utm_medium=auth" target="_blank">Powered by <span>Odoo</span></a>
</div>
</div>
</div>
@@ -187,9 +104,9 @@
</div>
<div class="text-center small mt-4 pt-3 border-top" t-if="not disable_footer">
<t t-if="not disable_database_manager">
<a class="pr-2 mr-1" href="/web/database/manager">管理数据库</a>
<a class="pr-2 mr-1" href="/web/database/manager">Manage Databases</a>
</t>
<a href="https://www.odoo.com?utm_source=db&amp;utm_medium=auth" target="_blank">提供者 <span>Odoo</span></a>
<a href="https://www.odoo.com?utm_source=db&amp;utm_medium=auth" target="_blank">Powered by <span>Odoo</span></a>
</div>
</div>
</div>
@@ -205,9 +122,9 @@
<t t-raw="0"/>
<div class="text-center small mt-4 pt-3 border-top" t-if="not disable_footer">
<t t-if="not disable_database_manager">
<a class="border-right pr-2 mr-1" href="/web/database/manager">管理数据库</a>
<a class="border-right pr-2 mr-1" href="/web/database/manager">Manage Databases</a>
</t>
<a href="https://www.odoo.com?utm_source=db&amp;utm_medium=auth" target="_blank">提供者 <span>Odoo</span></a>
<a href="https://www.odoo.com?utm_source=db&amp;utm_medium=auth" target="_blank">Powered by <span>Odoo</span></a>
</div>
</div>
</div>
@@ -215,7 +132,7 @@
</t>
</xpath>
</template>
<template id="sh_backmate_theme_web_login_main_template" inherit_id="sh_backmate_theme_adv_enterprise.login" name="Backmate Login" primary="True">
<template id="sh_backmate_theme_web_login_main_template" inherit_id="web.login" name="Backmate Login" primary="True">
<xpath expr="//form[hasclass('oe_login_form')]" position="replace">
<t t-set="theme_config" t-value="request.env['sh.back.theme.config.settings'].search([('id','=',1)],limit = 1)" />
<t t-if="theme_config.login_page_style == 'style_1'">
@@ -229,7 +146,7 @@
</div>
<input type="text" name="db" t-att-value="request.db" id="db" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" readonly="readonly"/>
<span class="input-group-append">
<a role="button" href="/web/database/selector" class="btn btn-secondary">选择</a>
<a role="button" href="/web/database/selector" class="btn btn-secondary">Select</a>
</span>
</div>
</div>
@@ -265,18 +182,18 @@
<div class="row">
<div class="col-8">
<div class="justify-content-between mt-2 d-flex small">
<a t-if="signup_enabled" style="color:#919191;text-decoration:none;" t-attf-href="/web/signup?{{ keep_query() }}">没有帐户?</a>
<a t-if="reset_password_enabled" style="color:#5c77ff;" t-attf-href="/web/reset_password?{{ keep_query() }}">重置密码</a>
<a t-if="signup_enabled" style="color:#919191;text-decoration:none;" t-attf-href="/web/signup?{{ keep_query() }}">Don't have an account?</a>
<a t-if="reset_password_enabled" style="color:#5c77ff;" t-attf-href="/web/reset_password?{{ keep_query() }}">Reset Password</a>
</div>
</div>
<div class="col-4">
<button type="submit" class="btn btn-primary btn-block">登 录</button>
<button type="submit" class="btn btn-primary btn-block">Log in</button>
</div>
</div>
<t t-if="debug">
<button type="submit" name="redirect" value="/web/become" class="btn btn-link btn-sm btn-block">以超级用户身份登录</button>
<button type="submit" name="redirect" value="/web/become" class="btn btn-link btn-sm btn-block">Log in as superuser</button>
</t>
<div class="o_login_auth"></div>
@@ -290,22 +207,22 @@
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<div class="form-group field-db" t-if="databases and len(databases) &gt; 1">
<label for="db" class="col-form-label">数据库</label>
<label for="db" class="col-form-label">Database</label>
<div t-attf-class="input-group {{'input-group-sm' if form_small else ''}}">
<input type="text" name="db" t-att-value="request.db" id="db" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" readonly="readonly"/>
<span class="input-group-append">
<a role="button" href="/web/database/selector" class="btn btn-secondary">选择 <i class="fa fa-database" role="img" aria-label="Database" title="Database"></i></a>
<a role="button" href="/web/database/selector" class="btn btn-secondary">Select <i class="fa fa-database" role="img" aria-label="Database" title="Database"></i></a>
</span>
</div>
</div>
<div class="form-group field-login">
<label for="login">用户名</label>
<label for="login">Username</label>
<input type="text" name="login" t-att-value="login" id="login" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" autofocus="autofocus" autocapitalize="off"/>
</div>
<div class="form-group field-password">
<label for="password">密码</label>
<label for="password">Password</label>
<input type="password" name="password" id="password" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" autocomplete="current-password" t-att-autofocus="'autofocus' if login else None" maxlength="4096"/>
</div>
@@ -317,13 +234,13 @@
</p>
<div t-attf-class="clearfix oe_login_buttons text-center mb-1 {{'pt-2' if form_small else 'pt-3'}}">
<button type="submit" class="btn btn-primary btn-block">登录</button>
<button type="submit" class="btn btn-primary btn-block">Log in</button>
<div class="justify-content-between mt-2 d-flex small">
<a t-if="signup_enabled" t-attf-href="/web/signup?{{ keep_query() }}">没有帐户?</a>
<a t-if="reset_password_enabled" t-attf-href="/web/reset_password?{{ keep_query() }}">重置密码</a>
<a t-if="signup_enabled" t-attf-href="/web/signup?{{ keep_query() }}">Don't have an account?</a>
<a t-if="reset_password_enabled" t-attf-href="/web/reset_password?{{ keep_query() }}">Reset Password</a>
</div>
<t t-if="debug">
<button type="submit" name="redirect" value="/web/become" class="btn btn-link btn-sm btn-block">以超级用户身份登录</button>
<button type="submit" name="redirect" value="/web/become" class="btn btn-link btn-sm btn-block">Log in as superuser</button>
</t>
<div class="o_login_auth"></div>
</div>
@@ -341,7 +258,7 @@
<div t-attf-class="input-group {{'input-group-sm' if form_small else ''}}">
<input type="text" name="db" t-att-value="request.db" id="db" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" readonly="readonly"/>
<span class="input-group-append">
<a role="button" href="/web/database/selector" class="btn btn-secondary">选择 <i class="fa fa-database" role="img" aria-label="Database" title="Database"></i></a>
<a role="button" href="/web/database/selector" class="btn btn-secondary">Select <i class="fa fa-database" role="img" aria-label="Database" title="Database"></i></a>
</span>
</div>
</div>
@@ -376,11 +293,11 @@
<div t-attf-class="clearfix oe_login_buttons text-center mb-1 {{'pt-2' if form_small else 'pt-3'}}">
<button type="submit" class="btn btn-primary btn-block">Log in</button>
<div class="justify-content-between mt-2 d-flex small">
<a t-if="signup_enabled" t-attf-href="/web/signup?{{ keep_query() }}">没有帐户?</a>
<a t-if="reset_password_enabled" t-attf-href="/web/reset_password?{{ keep_query() }}">重置密码</a>
<a t-if="signup_enabled" t-attf-href="/web/signup?{{ keep_query() }}">Don't have an account?</a>
<a t-if="reset_password_enabled" t-attf-href="/web/reset_password?{{ keep_query() }}">Reset Password</a>
</div>
<t t-if="debug">
<button type="submit" name="redirect" value="/web/become" class="btn btn-link btn-sm btn-block">以超级用户身份登录</button>
<button type="submit" name="redirect" value="/web/become" class="btn btn-link btn-sm btn-block">Log in as superuser</button>
</t>
<div class="o_login_auth"></div>
</div>
@@ -393,11 +310,11 @@
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<div class="form-group field-db" t-if="databases and len(databases) &gt; 1">
<label for="db" class="col-form-label">数据库</label>
<label for="db" class="col-form-label">Database</label>
<div t-attf-class="input-group {{'input-group-sm' if form_small else ''}}">
<input type="text" name="db" t-att-value="request.db" id="db" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" readonly="readonly"/>
<span class="input-group-append">
<a role="button" href="/web/database/selector" class="btn btn-secondary">选择 <i class="fa fa-database" role="img" aria-label="Database" title="Database"></i></a>
<a role="button" href="/web/database/selector" class="btn btn-secondary">Select <i class="fa fa-database" role="img" aria-label="Database" title="Database"></i></a>
</span>
</div>
</div>
@@ -433,15 +350,15 @@
<button type="submit" class="btn btn-primary btn-block">Log in</button>
<div class="justify-content-between mt-2 d-flex small">
<a t-if="signup_enabled" style="color:#919191;text-decoration:none;" t-attf-href="/web/signup?{{ keep_query() }}">没有帐户?</a>
<a t-if="reset_password_enabled" style="color:#5c77ff;" t-attf-href="/web/reset_password?{{ keep_query() }}">重置密码</a>
<a t-if="signup_enabled" style="color:#919191;text-decoration:none;" t-attf-href="/web/signup?{{ keep_query() }}">Don't have an account?</a>
<a t-if="reset_password_enabled" style="color:#5c77ff;" t-attf-href="/web/reset_password?{{ keep_query() }}">Reset Password</a>
</div>
<t t-if="debug">
<button type="submit" name="redirect" value="/web/become" class="btn btn-link btn-sm btn-block">以超级用户身份登录</button>
<button type="submit" name="redirect" value="/web/become" class="btn btn-link btn-sm btn-block">Log in as superuser</button>
</t>
<div class="o_login_auth"></div>
@@ -455,22 +372,22 @@
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<div class="form-group field-db" t-if="databases and len(databases) &gt; 1">
<label for="db" class="col-form-label">数据库</label>
<label for="db" class="col-form-label">Database</label>
<div t-attf-class="input-group {{'input-group-sm' if form_small else ''}}">
<input type="text" name="db" t-att-value="request.db" id="db" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" readonly="readonly"/>
<span class="input-group-append">
<a role="button" href="/web/database/selector" class="btn btn-secondary">选择 <i class="fa fa-database" role="img" aria-label="Database" title="Database"></i></a>
<a role="button" href="/web/database/selector" class="btn btn-secondary">Select <i class="fa fa-database" role="img" aria-label="Database" title="Database"></i></a>
</span>
</div>
</div>
<div class="form-group field-login">
<label for="login">用户名</label>
<label for="login">Email</label>
<input type="text" placeholder="Email" name="login" t-att-value="login" id="login" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" autofocus="autofocus" autocapitalize="off"/>
</div>
<div class="form-group field-password">
<label for="password">密码</label>
<label for="password">Password</label>
<input type="password" placeholder="Password" name="password" id="password" t-attf-class="form-control #{'form-control-sm' if form_small else ''}" required="required" autocomplete="current-password" t-att-autofocus="'autofocus' if login else None" maxlength="4096"/>
</div>
@@ -482,9 +399,9 @@
</p>
<div t-attf-class="clearfix oe_login_buttons text-center mb-1 {{'pt-2' if form_small else 'pt-3'}}">
<button type="submit" class="btn btn-primary btn-block">登录</button>
<button type="submit" class="btn btn-primary btn-block">Log in</button>
<t t-if="debug">
<button type="submit" name="redirect" value="/web/become" class="btn btn-link btn-sm btn-block">以超级用户身份登录</button>
<button type="submit" name="redirect" value="/web/become" class="btn btn-link btn-sm btn-block">Log in as superuser</button>
</t>
<div class="o_login_auth"/>
</div>