From d08668ca8a52d24a264944d3bf653a337f41a1f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= <9664676+pengyuthon@user.noreply.gitee.com> Date: Wed, 12 Aug 2026 17:06:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=95=99=E8=82=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- college/data/about_pages.xml | 149 ++++++++++++++++++ college/models/about_page.py | 1 + college/static/src/img/product_intro.png | Bin 0 -> 6975 bytes college/static/src/scss/college_theme.scss | 115 ++++++++++++++ .../static/src/scss/college_theme_dark.scss | 110 +++++++++++++ college/views/about_page_views.xml | 15 +- college/views/chapter_views.xml | 25 ++- college/views/menus.xml | 19 +++ 8 files changed, 417 insertions(+), 17 deletions(-) create mode 100644 college/static/src/img/product_intro.png diff --git a/college/data/about_pages.xml b/college/data/about_pages.xml index 4f6e3a1..7eb4d5d 100644 --- a/college/data/about_pages.xml +++ b/college/data/about_pages.xml @@ -84,6 +84,155 @@
  • 密码:首次登录请修改初始密码;忘记密码请联系管理员。
  • 本手册内容由管理员维护,如需补充或更正请联系管理员。
  • + + ]]> + + + + + + 产品介绍 + product + 30 + True + + +
    +
    +
    +
    + P + python企业实训平台 +
    +

    从 Python 语法到企业级项目实战

    +

    面向高校与职业院校的工程化 Python 实训平台,把企业真实开发场景搬进课堂

    +
    + 语法基础 + Web 开发 + 数据分析 + 自动化运维 + 企业项目 +
    +
    + + +
    +
    +
    6
    +
    阶段化实训体系
    +
    +
    +
    20+
    +
    企业级项目案例
    +
    +
    +
    1:1
    +
    真实企业开发环境
    +
    +
    +
    Odoo 18
    +
    企业级技术底座
    +
    +
    + + +
    +

    平台以 Odoo 18 为底座,围绕 Python 工程化实训重构教学链路:把企业的版本控制、代码评审、持续集成与云端编码环境原样搬进课堂。学员不再孤立地「学语法」,而是以真实项目为主线,在导师带领下走完「需求 → 编码 → 评审 → 部署」的完整闭环,让实训成果直接对接企业岗位能力要求。

    +
    + + +
    +

    核心功能

    +
    +
    +
    + 📚 + 阶段化实训课程 +
    +

    语法基础 → Web 开发 → 数据分析 → 自动化运维,分阶课程搭配视频 / PPT / 案例,循序渐进。

    +
    +
    +
    + ⌨️ + 在线编码沙箱 +
    +

    内置云端 Python 运行环境,免配置即可写代码、跑结果,练习与验证实时完成。

    +
    +
    +
    + 🏗️ + 企业项目库 +
    +

    汇集电商、数据看板、接口服务等 20+ 真实项目案例,学员按岗位方向挑选项目实战。

    +
    +
    +
    + ✅ + 作业评审闭环 +
    +

    学员提交代码 / 结果,导师在线批阅并给反馈,模拟企业 Code Review 流程。

    +
    +
    +
    + 📈 + 学习进展看板 +
    +

    按项目 / 章节统计完成度与代码质量,师生各有视角,实训进度一目了然。

    +
    +
    +
    + 🎯 + 岗位能力画像 +
    +

    沉淀学员项目经历与技能标签,生成能力画像,直接对标企业招聘需求。

    +
    +
    +
    + + +
    +

    实训链路

    +
    +
    +
    导师端
    +
    配置阶段课程 → 派发企业项目 → 批阅代码与结果 → 沉淀项目笔记 → 跟踪班级实训进度
    +
    +
    +
    学员端
    +
    进入项目实战 → 在线编码与运行 → 提交作业等待评审 → 查看能力画像与进阶建议
    +
    +
    +
    + + +
    +

    为什么选我们

    +
    +
    + 真项目真环境 +

    复刻企业 Git / CI / 云编码流程,实训即上岗预演。

    +
    +
    + 成果可量化 +

    代码提交、评审、完成度全程留痕,能力看得见。

    +
    +
    + 岗位对齐 +

    项目方向对标 Python 开发 / 数据分析 / 运维岗位。

    +
    +
    + 开箱即用 +

    基于 Odoo 18,手机 / 平板 / 电脑多端随时实训。

    +
    +
    +
    + + +
    + python企业实训平台 · 基于 Odoo 18 构建 · 让每一次练习都更接近真实开发 +
    ]]>
    diff --git a/college/models/about_page.py b/college/models/about_page.py index 845bfc6..afbe0fa 100644 --- a/college/models/about_page.py +++ b/college/models/about_page.py @@ -16,6 +16,7 @@ class YuthonAboutPage(models.Model): category = fields.Selection([ ('system', '系统说明'), ('operation', '操作手册'), + ('product', '产品介绍'), ], string='分类', default='system', required=True) content = fields.Html(string='内容', sanitize=True, translate=True) sequence = fields.Integer(string='排序', default=10) diff --git a/college/static/src/img/product_intro.png b/college/static/src/img/product_intro.png new file mode 100644 index 0000000000000000000000000000000000000000..3632257516df42550f1945f9accc425f9f53f313 GIT binary patch literal 6975 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 n02dcgB}XO{8w~Pq&r1bp .o_form_field { + padding: 0 !important; + margin: 0 !important; + } +} + +.o_about_full.o_field_html { + // 只读展示时铺满,无编辑器工具栏 + display: block !important; + padding: 0 !important; + margin: 0 !important; + max-width: 100% !important; + background: transparent !important; + border: none !important; + + .o_readonly { + padding: 0 !important; + } +} + +// 系统说明 / 操作手册 仍为普通富文本(保留基础样式) +.o_about_page { + max-width: 900px; + margin: 0 auto; + font-size: 14px; + line-height: 1.8; + color: $o-main-text-color; + + h2 { font-size: 22px; margin: 8px 0 16px; } + h3 { font-size: 17px; margin: 22px 0 10px; } + h4 { font-size: 15px; margin: 16px 0 8px; } + p, li { color: $o-main-text-color; } +} diff --git a/college/static/src/scss/college_theme_dark.scss b/college/static/src/scss/college_theme_dark.scss index 6a10f00..231a017 100644 --- a/college/static/src/scss/college_theme_dark.scss +++ b/college/static/src/scss/college_theme_dark.scss @@ -189,3 +189,113 @@ } } } + +// ============================================================ +// 课程学习:章节列表看板化(深色模式网格卡片墙) +// ============================================================ +.o_college_chapter_kanban { + background: transparent !important; + border: none !important; + + .o_kanban_renderer { + display: grid !important; + grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)) !important; + gap: 16px !important; + align-items: stretch !important; + background: transparent !important; + padding: 0 !important; + } + + .o_kanban_group { + display: contents !important; + } + + .o_kanban_record { + width: 100% !important; + margin: 0 !important; + border: none !important; + padding: 0 !important; + background: transparent !important; + } + + .o_college_chapter_card { + height: 100%; + display: flex !important; + flex-direction: column !important; + gap: 8px !important; + background-color: #1e293b !important; + border: 1px solid #334155 !important; + border-radius: 12px !important; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35) !important; + padding: 16px 18px !important; + transition: transform 0.15s ease, box-shadow 0.15s ease; + + &:hover { + transform: translateY(-2px); + box-shadow: 0 6px 16px rgba(0, 0, 0, 0.45) !important; + } + + .o_college_chapter_head { + display: flex !important; + align-items: center !important; + gap: 8px !important; + + .o_college_chapter_title { + font-size: 15px; + font-weight: 600; + color: #f8fafc !important; + } + } + + .o_college_chapter_video { + font-size: 13px; + color: #94a3b8 !important; + } + + .o_college_chapter_foot { + margin-top: auto !important; + text-align: right !important; + } + } +} + +// ============================================================ +// 关于页(产品介绍等):只读 H5 撑满内容区,去掉四周大留白 +// content 字段内容已为全内联 style 的自包含 H5,这里只做容器铺满。 +// ============================================================ +.o_about_full_form { + padding: 0 !important; + + .o_form_renderer, + .o_form_renderer > .o_form_field { + padding: 0 !important; + margin: 0 !important; + } +} + +.o_about_full.o_field_html { + display: block !important; + padding: 0 !important; + margin: 0 !important; + max-width: 100% !important; + background: transparent !important; + border: none !important; + + .o_readonly { + padding: 0 !important; + } +} + +// 系统说明 / 操作手册 仍为普通富文本(深色下基础样式) +.o_about_page { + max-width: 900px; + margin: 0 auto; + font-size: 14px; + line-height: 1.8; + color: #e2e8f0; + + h2 { font-size: 22px; margin: 8px 0 16px; color: #f8fafc; } + h3 { font-size: 17px; margin: 22px 0 10px; color: #f8fafc; } + h4 { font-size: 15px; margin: 16px 0 8px; color: #f8fafc; } + p, li { color: #cbd5e1; } +} diff --git a/college/views/about_page_views.xml b/college/views/about_page_views.xml index a3cb4c1..fa02122 100644 --- a/college/views/about_page_views.xml +++ b/college/views/about_page_views.xml @@ -1,21 +1,14 @@ + yuthon.about.page.form yuthon.about.page -
    - -
    -

    -
    - - - - - -
    + +
    diff --git a/college/views/chapter_views.xml b/college/views/chapter_views.xml index 0a74d5b..de0dd00 100644 --- a/college/views/chapter_views.xml +++ b/college/views/chapter_views.xml @@ -170,12 +170,25 @@ - - - + + +
    + + diff --git a/college/views/menus.xml b/college/views/menus.xml index fb7113d..3218b8d 100644 --- a/college/views/menus.xml +++ b/college/views/menus.xml @@ -1,4 +1,23 @@ + + + + + + 产品介绍 + yuthon.about.page + form + + current + + +