yuthon_web module for pengyuthon.cn
This commit is contained in:
commit
381736057d
2
yuthon_web/__init__.py
Normal file
2
yuthon_web/__init__.py
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from . import models
|
||||||
23
yuthon_web/__manifest__.py
Normal file
23
yuthon_web/__manifest__.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
{
|
||||||
|
'name': 'Yuthon Website',
|
||||||
|
'version': '18.0.1.0.0',
|
||||||
|
'category': 'Website',
|
||||||
|
'summary': 'PengYuSen Official Website Theme',
|
||||||
|
'description': 'Custom website theme for pengyuthon.cn',
|
||||||
|
'author': 'PengYuSen Data Technology',
|
||||||
|
'website': 'https://pengyuthon.cn',
|
||||||
|
'depends': ['website', 'website_blog', 'website_sale'],
|
||||||
|
'data': [
|
||||||
|
'data/website_data.xml',
|
||||||
|
],
|
||||||
|
'assets': {
|
||||||
|
'web.assets_frontend': [
|
||||||
|
'yuthon_web/static/src/css/yuthon_style.css',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'installable': True,
|
||||||
|
'application': False,
|
||||||
|
'auto_install': False,
|
||||||
|
'license': 'LGPL-3',
|
||||||
|
}
|
||||||
339
yuthon_web/data/website_data.xml
Normal file
339
yuthon_web/data/website_data.xml
Normal file
@ -0,0 +1,339 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="menu_home" model="website.menu">
|
||||||
|
<field name="name">Home</field>
|
||||||
|
<field name="url">/</field>
|
||||||
|
<field name="sequence">1</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="menu_services" model="website.menu">
|
||||||
|
<field name="name">Services</field>
|
||||||
|
<field name="url">/services</field>
|
||||||
|
<field name="sequence">2</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="menu_cases" model="website.menu">
|
||||||
|
<field name="name">Cases</field>
|
||||||
|
<field name="url">/cases</field>
|
||||||
|
<field name="sequence">3</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="menu_blog" model="website.menu">
|
||||||
|
<field name="name">Blog</field>
|
||||||
|
<field name="url">/blog</field>
|
||||||
|
<field name="sequence">4</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="menu_about" model="website.menu">
|
||||||
|
<field name="name">About</field>
|
||||||
|
<field name="url">/about</field>
|
||||||
|
<field name="sequence">5</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="menu_contact" model="website.menu">
|
||||||
|
<field name="name">Contact</field>
|
||||||
|
<field name="url">/contact</field>
|
||||||
|
<field name="sequence">6</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="menu_platform" model="website.menu">
|
||||||
|
<field name="name">Platform</field>
|
||||||
|
<field name="url">/web/login</field>
|
||||||
|
<field name="sequence">7</field>
|
||||||
|
<field name="parent_id" ref="website.main_menu"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Homepage -->
|
||||||
|
<record id="homepage" model="website.page">
|
||||||
|
<field name="name">Home</field>
|
||||||
|
<field name="website_id" ref="website.default_website"/>
|
||||||
|
<field name="url">/</field>
|
||||||
|
<field name="type">qweb</field>
|
||||||
|
<field name="key">yuthon_web.homepage</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<t t-name="yuthon_web.homepage">
|
||||||
|
<t t-call="website.layout">
|
||||||
|
<div id="wrap">
|
||||||
|
<section class="yuthon-hero">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row align-items-center">
|
||||||
|
<div class="col-lg-7">
|
||||||
|
<h1 class="yuthon-hero-title mb-3">Digital Transformation<br/>Powered by Odoo</h1>
|
||||||
|
<p class="yuthon-hero-subtitle mb-4">Specialized in Odoo ERP customization, training and consulting<br/>One-stop digital solutions for enterprises</p>
|
||||||
|
<div class="yuthon-hero-actions">
|
||||||
|
<a href="/web/login" class="btn btn-primary btn-lg me-3 yuthon-btn-primary">Go to Platform</a>
|
||||||
|
<a href="/contact" class="btn btn-outline-light btn-lg">Contact Us</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-5 text-center d-none d-lg-block">
|
||||||
|
<div class="yuthon-hero-visual">
|
||||||
|
<t t-call="yuthon_web.hero_illustration"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="yuthon-section">
|
||||||
|
<div class="container">
|
||||||
|
<div class="text-center mb-5">
|
||||||
|
<h2 class="yuthon-section-title">Our Services</h2>
|
||||||
|
<p class="yuthon-section-desc">Full lifecycle services from implementation to operations</p>
|
||||||
|
</div>
|
||||||
|
<div class="row g-4">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<div class="yuthon-card">
|
||||||
|
<div class="yuthon-card-icon">⚙</div>
|
||||||
|
<h3 class="yuthon-card-title">Odoo Custom Development</h3>
|
||||||
|
<p class="yuthon-card-text">Module development, feature customization, system integration for your business needs</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<div class="yuthon-card">
|
||||||
|
<div class="yuthon-card-icon">📚</div>
|
||||||
|
<h3 class="yuthon-card-title">Training and Consulting</h3>
|
||||||
|
<p class="yuthon-card-text">Odoo hands-on training, business process analysis, ERP deployment guidance</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<div class="yuthon-card">
|
||||||
|
<div class="yuthon-card-icon">🚀</div>
|
||||||
|
<h3 class="yuthon-card-title">Managed Operations</h3>
|
||||||
|
<p class="yuthon-card-text">Server maintenance, system upgrades, technical support and troubleshooting</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="yuthon-section yuthon-section-alt">
|
||||||
|
<div class="container">
|
||||||
|
<div class="text-center mb-5">
|
||||||
|
<h2 class="yuthon-section-title">Case Studies</h2>
|
||||||
|
<p class="yuthon-section-desc">Serving enterprises across multiple industries</p>
|
||||||
|
</div>
|
||||||
|
<div class="row g-4">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="yuthon-case-card">
|
||||||
|
<div class="yuthon-case-tag">Investment Management</div>
|
||||||
|
<h4>Tianhe Investment - Full ERP System</h4>
|
||||||
|
<p>Custom-built Odoo ERP: HR management, asset management, project lifecycle control</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="yuthon-case-card">
|
||||||
|
<div class="yuthon-case-tag">Smart Manufacturing</div>
|
||||||
|
<h4>Langchi Tech - Production and Material Control</h4>
|
||||||
|
<p>Deep MRP customization: BOM management, routing, scheduling, end-to-end procurement-stock integration</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="text-center mt-4">
|
||||||
|
<a href="/cases" class="btn btn-outline-primary">View All Cases</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="yuthon-section">
|
||||||
|
<div class="container text-center">
|
||||||
|
<h2 class="yuthon-section-title mb-3">Make Enterprise Management Simple</h2>
|
||||||
|
<p class="yuthon-section-desc mb-4">Start your digital journey with Odoo today</p>
|
||||||
|
<a href="/web/login" class="btn btn-primary btn-lg yuthon-btn-primary">Get Started Free</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
</t>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="page_services" model="website.page">
|
||||||
|
<field name="name">Services</field>
|
||||||
|
<field name="website_id" ref="website.default_website"/>
|
||||||
|
<field name="url">/services</field>
|
||||||
|
<field name="type">qweb</field>
|
||||||
|
<field name="key">yuthon_web.services</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<t t-name="yuthon_web.services">
|
||||||
|
<t t-call="website.layout">
|
||||||
|
<div class="container py-5">
|
||||||
|
<h1 class="text-center mb-4">Our Services</h1>
|
||||||
|
<p class="text-center mb-5">Comprehensive Odoo ERP digital services</p>
|
||||||
|
<div class="row mb-5">
|
||||||
|
<div class="col-md-6 mb-4">
|
||||||
|
<h3>Odoo Custom Development</h3>
|
||||||
|
<p>Tailored modules on Odoo 18 platform: HR, CRM, MRP, Inventory, Accounting and more.</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-4">
|
||||||
|
<h3>Training and Consulting</h3>
|
||||||
|
<p>From zero to one: business diagnosis, solution design, staff training, deployment support.</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-4">
|
||||||
|
<h3>System Integration</h3>
|
||||||
|
<p>Connect Odoo with WeCom, DingTalk, WeChat Pay and other platforms for seamless data flow.</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-4">
|
||||||
|
<h3>Technical Support</h3>
|
||||||
|
<p>Professional ops team: server maintenance, database optimization, security hardening, emergency response.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="text-center">
|
||||||
|
<a href="/contact" class="btn btn-primary btn-lg">Get in Touch</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
</t>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="page_cases" model="website.page">
|
||||||
|
<field name="name">Cases</field>
|
||||||
|
<field name="website_id" ref="website.default_website"/>
|
||||||
|
<field name="url">/cases</field>
|
||||||
|
<field name="type">qweb</field>
|
||||||
|
<field name="key">yuthon_web.cases</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<t t-name="yuthon_web.cases">
|
||||||
|
<t t-call="website.layout">
|
||||||
|
<div class="container py-5">
|
||||||
|
<h1 class="text-center mb-4">Case Studies</h1>
|
||||||
|
<p class="text-center mb-5">Selected client projects</p>
|
||||||
|
<div class="row g-4">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="yuthon-case-card">
|
||||||
|
<div class="yuthon-case-tag">Investment</div>
|
||||||
|
<h4>Tianhe Investment</h4>
|
||||||
|
<p>Full Odoo ERP: HR, attendance integration, asset tracking, project management for multi-department collaboration.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="yuthon-case-card">
|
||||||
|
<div class="yuthon-case-tag">Manufacturing</div>
|
||||||
|
<h4>Langchi Technology</h4>
|
||||||
|
<p>MRP deep customization: BOM, routing, production scheduling, end-to-end procurement integration.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="yuthon-case-card">
|
||||||
|
<div class="yuthon-case-tag">Education</div>
|
||||||
|
<h4>Zibo Education Platform</h4>
|
||||||
|
<p>Odoo-based LMS: course management, student tracking, online learning, assessments, multi-org support.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="yuthon-case-card">
|
||||||
|
<div class="yuthon-case-tag">AI</div>
|
||||||
|
<h4>AI Smart Assistant</h4>
|
||||||
|
<p>Self-developed AI Agent platform with DeepSeek LLM integration for smart Q&A, workflow automation, intelligent reports.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
</t>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="page_about" model="website.page">
|
||||||
|
<field name="name">About</field>
|
||||||
|
<field name="website_id" ref="website.default_website"/>
|
||||||
|
<field name="url">/about</field>
|
||||||
|
<field name="type">qweb</field>
|
||||||
|
<field name="key">yuthon_web.about</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<t t-name="yuthon_web.about">
|
||||||
|
<t t-call="website.layout">
|
||||||
|
<div class="container py-5">
|
||||||
|
<h1 class="text-center mb-4">About PengYuSen</h1>
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-lg-8">
|
||||||
|
<p class="lead mb-4">PengYuSen Data Technology is a digital transformation service company. Our core team has extensive Odoo ERP hands-on experience.</p>
|
||||||
|
<p>We believe every enterprise deserves its own digital system. Through Odoo open-source customization, we deliver cost-effective ERP solutions for SMEs.</p>
|
||||||
|
<hr class="my-4"/>
|
||||||
|
<h4>Our Philosophy</h4>
|
||||||
|
<ul>
|
||||||
|
<li>Business-driven, no unnecessary complexity</li>
|
||||||
|
<li>Open-source lowers the digital barrier</li>
|
||||||
|
<li>Continuous iteration, growing with clients</li>
|
||||||
|
</ul>
|
||||||
|
<hr class="my-4"/>
|
||||||
|
<h4>Core Competencies</h4>
|
||||||
|
<ul>
|
||||||
|
<li>Odoo 18 Full Stack (Python / JavaScript / PostgreSQL)</li>
|
||||||
|
<li>WeCom / DingTalk API Integration</li>
|
||||||
|
<li>Linux Server Operations and Security</li>
|
||||||
|
<li>AI Large Language Model Development</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
</t>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="page_contact" model="website.page">
|
||||||
|
<field name="name">Contact</field>
|
||||||
|
<field name="website_id" ref="website.default_website"/>
|
||||||
|
<field name="url">/contact</field>
|
||||||
|
<field name="type">qweb</field>
|
||||||
|
<field name="key">yuthon_web.contact</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<t t-name="yuthon_web.contact">
|
||||||
|
<t t-call="website.layout">
|
||||||
|
<div class="container py-5">
|
||||||
|
<h1 class="text-center mb-4">Contact Us</h1>
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<div class="yuthon-card mb-4">
|
||||||
|
<h4 class="mb-3">PengYuSen Data Technology</h4>
|
||||||
|
<p>Location: Zibo, Shandong, China</p>
|
||||||
|
<p>Website: <a href="https://pengyuthon.cn">pengyuthon.cn</a></p>
|
||||||
|
<p>Email: contact@pengyuthon.cn</p>
|
||||||
|
</div>
|
||||||
|
<div class="yuthon-card">
|
||||||
|
<h4 class="mb-3">Send a Message</h4>
|
||||||
|
<form action="/website/form/" method="post">
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="form-label">Name</label>
|
||||||
|
<input type="text" name="contact_name" class="form-control" required="required"/>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="form-label">Email</label>
|
||||||
|
<input type="email" name="email_from" class="form-control" required="required"/>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="form-label">Message</label>
|
||||||
|
<textarea name="description" class="form-control" rows="4" required="required"></textarea>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary">Send Message</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
</t>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<template id="hero_illustration" name="Hero Illustration">
|
||||||
|
<div class="yuthon-hero-graphic">
|
||||||
|
<div class="yuthon-hero-boxes">
|
||||||
|
<div class="yuthon-box yuthon-box-1">CRM</div>
|
||||||
|
<div class="yuthon-box yuthon-box-2">MRP</div>
|
||||||
|
<div class="yuthon-box yuthon-box-3">HR</div>
|
||||||
|
<div class="yuthon-box yuthon-box-4">FIN</div>
|
||||||
|
</div>
|
||||||
|
<div class="yuthon-hero-center">Odoo</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
0
yuthon_web/models/__init__.py
Normal file
0
yuthon_web/models/__init__.py
Normal file
28
yuthon_web/static/src/css/yuthon_style.css
Normal file
28
yuthon_web/static/src/css/yuthon_style.css
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
.yuthon-hero { padding: 80px 0 60px; background: linear-gradient(135deg, #0f172a 0%, #1e293b 50%, #0f172a 100%); color: #fff; position: relative; overflow: hidden; }
|
||||||
|
.yuthon-hero::before { content: ''; position: absolute; top: -50%; right: -20%; width: 600px; height: 600px; background: radial-gradient(circle, rgba(99,102,241,0.15) 0%, transparent 70%); border-radius: 50%; }
|
||||||
|
.yuthon-hero-title { font-size: 3rem; font-weight: 700; line-height: 1.2; color: #fff; }
|
||||||
|
.yuthon-hero-subtitle { font-size: 1.15rem; color: rgba(255,255,255,0.75); line-height: 1.8; }
|
||||||
|
.yuthon-btn-primary { background: #6366f1; border-color: #6366f1; border-radius: 8px; padding: 12px 32px; font-weight: 500; }
|
||||||
|
.yuthon-btn-primary:hover { background: #4f46e5; border-color: #4f46e5; }
|
||||||
|
.yuthon-hero-visual { display: flex; align-items: center; justify-content: center; min-height: 280px; }
|
||||||
|
.yuthon-hero-graphic { position: relative; width: 240px; height: 240px; }
|
||||||
|
.yuthon-hero-boxes { position: relative; width: 100%; height: 100%; }
|
||||||
|
.yuthon-box { position: absolute; padding: 16px 20px; border-radius: 10px; font-size: 0.85rem; font-weight: 600; color: #fff; opacity: 0.9; }
|
||||||
|
.yuthon-box-1 { top: 10px; left: 10px; background: #6366f1; }
|
||||||
|
.yuthon-box-2 { top: 10px; right: 10px; background: #8b5cf6; }
|
||||||
|
.yuthon-box-3 { bottom: 10px; left: 10px; background: #06b6d4; }
|
||||||
|
.yuthon-box-4 { bottom: 10px; right: 10px; background: #10b981; }
|
||||||
|
.yuthon-hero-center { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: #fff; color: #6366f1; padding: 10px 24px; border-radius: 20px; font-weight: 700; font-size: 1rem; box-shadow: 0 4px 20px rgba(0,0,0,0.2); }
|
||||||
|
.yuthon-section { padding: 70px 0; }
|
||||||
|
.yuthon-section-alt { background: #f8fafc; }
|
||||||
|
.yuthon-section-title { font-size: 2rem; font-weight: 700; color: #0f172a; }
|
||||||
|
.yuthon-section-desc { font-size: 1.05rem; color: #64748b; }
|
||||||
|
.yuthon-card { background: #fff; border: 1px solid #e2e8f0; border-radius: 12px; padding: 30px 24px; height: 100%; transition: transform 0.2s, box-shadow 0.2s; }
|
||||||
|
.yuthon-card:hover { transform: translateY(-4px); box-shadow: 0 8px 30px rgba(0,0,0,0.08); }
|
||||||
|
.yuthon-card-icon { font-size: 2rem; margin-bottom: 12px; }
|
||||||
|
.yuthon-card-title { font-size: 1.15rem; font-weight: 600; margin-bottom: 8px; color: #0f172a; }
|
||||||
|
.yuthon-card-text { color: #64748b; font-size: 0.95rem; line-height: 1.6; }
|
||||||
|
.yuthon-case-card { background: #fff; border: 1px solid #e2e8f0; border-radius: 12px; padding: 24px; height: 100%; }
|
||||||
|
.yuthon-case-tag { display: inline-block; background: #eef2ff; color: #6366f1; padding: 3px 12px; border-radius: 20px; font-size: 0.8rem; font-weight: 500; margin-bottom: 12px; }
|
||||||
|
.yuthon-case-card h4 { font-size: 1.1rem; font-weight: 600; color: #0f172a; margin-bottom: 8px; }
|
||||||
|
@media (max-width: 768px) { .yuthon-hero { padding: 50px 0 40px; } .yuthon-hero-title { font-size: 2rem; } .yuthon-section { padding: 40px 0; } .yuthon-section-title { font-size: 1.5rem; } }
|
||||||
Loading…
Reference in New Issue
Block a user