shcool/school/data/demo.xml
2026-08-03 12:03:31 +08:00

511 lines
23 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--
Demo 演示数据
============
安装模块时勾选「加载演示数据」即可自动创建以下种子数据:
- 学习分类树4 个分类)
- 1 所学校(求知中学)
- 3 位老师
- 2 个班级(入门班 / 进阶班)
- 10 个学生(每班 5 人)
- 1 本教材5 个章节)
- 2 门选修课(演示 Many2many
- 若干学习进度记录
教学知识点XML 数据加载、noupdate 标签、外键 ref 引用、
Many2many eval 写法 [(6, 0, [ids])]
-->
<!-- ============ 学习分类树 ============ -->
<record id="demo_category_root" model="yuthon.school.category">
<field name="name">Odoo 18 开发</field>
<field name="level">beginner</field>
</record>
<record id="demo_category_basic" model="yuthon.school.category">
<field name="name">基础入门</field>
<field name="parent_id" ref="demo_category_root"/>
<field name="level">beginner</field>
</record>
<record id="demo_category_model" model="yuthon.school.category">
<field name="name">模型开发</field>
<field name="parent_id" ref="demo_category_root"/>
<field name="level">intermediate</field>
</record>
<record id="demo_category_view" model="yuthon.school.category">
<field name="name">视图开发</field>
<field name="parent_id" ref="demo_category_root"/>
<field name="level">intermediate</field>
</record>
<!-- ============ 学校 ============ -->
<record id="demo_school" model="yuthon.school.school">
<field name="name">求知中学</field>
<field name="address">北京市海淀区中关村南大街 1 号</field>
<field name="phone">010-88888001</field>
<field name="principal">赵校长</field>
</record>
<!-- ============ 老师 ============ -->
<record id="demo_teacher_zhang" model="yuthon.school.teacher">
<field name="name">张老师</field>
<field name="school_id" ref="demo_school"/>
<field name="phone">138-0000-0001</field>
<field name="subject">Odoo 模型开发</field>
</record>
<record id="demo_teacher_li" model="yuthon.school.teacher">
<field name="name">李老师</field>
<field name="school_id" ref="demo_school"/>
<field name="phone">138-0000-0002</field>
<field name="subject">Odoo 视图开发</field>
</record>
<record id="demo_teacher_wang" model="yuthon.school.teacher">
<field name="name">王老师</field>
<field name="school_id" ref="demo_school"/>
<field name="phone">138-0000-0003</field>
<field name="subject">Odoo 部署运维</field>
</record>
<!-- ============ 班级 ============ -->
<record id="demo_class_beginner" model="yuthon.school.class">
<field name="name">Odoo 18 入门班</field>
<field name="school_id" ref="demo_school"/>
<field name="teacher_id" ref="demo_teacher_zhang"/>
<field name="grade">2026 级</field>
</record>
<record id="demo_class_advanced" model="yuthon.school.class">
<field name="name">Odoo 18 进阶班</field>
<field name="school_id" ref="demo_school"/>
<field name="teacher_id" ref="demo_teacher_li"/>
<field name="grade">2026 级</field>
</record>
<!-- ============ 学生(入门班 5 人) ============ -->
<record id="demo_student_01" model="yuthon.school.student">
<field name="name">陈小明</field>
<field name="student_no">S20260001</field>
<field name="class_id" ref="demo_class_beginner"/>
<field name="gender">male</field>
<field name="phone">139-0000-0001</field>
<field name="enrollment_date">2026-03-01</field>
</record>
<record id="demo_student_02" model="yuthon.school.student">
<field name="name">林小芳</field>
<field name="student_no">S20260002</field>
<field name="class_id" ref="demo_class_beginner"/>
<field name="gender">female</field>
<field name="phone">139-0000-0002</field>
<field name="enrollment_date">2026-03-01</field>
</record>
<record id="demo_student_03" model="yuthon.school.student">
<field name="name">黄小杰</field>
<field name="student_no">S20260003</field>
<field name="class_id" ref="demo_class_beginner"/>
<field name="gender">male</field>
<field name="phone">139-0000-0003</field>
<field name="enrollment_date">2026-03-01</field>
</record>
<record id="demo_student_04" model="yuthon.school.student">
<field name="name">刘小婷</field>
<field name="student_no">S20260004</field>
<field name="class_id" ref="demo_class_beginner"/>
<field name="gender">female</field>
<field name="phone">139-0000-0004</field>
<field name="enrollment_date">2026-03-01</field>
</record>
<record id="demo_student_05" model="yuthon.school.student">
<field name="name">周小强</field>
<field name="student_no">S20260005</field>
<field name="class_id" ref="demo_class_beginner"/>
<field name="gender">male</field>
<field name="phone">139-0000-0005</field>
<field name="enrollment_date">2026-03-01</field>
</record>
<!-- ============ 学生(进阶班 5 人) ============ -->
<record id="demo_student_06" model="yuthon.school.student">
<field name="name">吴小燕</field>
<field name="student_no">S20260006</field>
<field name="class_id" ref="demo_class_advanced"/>
<field name="gender">female</field>
<field name="phone">139-0000-0006</field>
<field name="enrollment_date">2026-03-01</field>
</record>
<record id="demo_student_07" model="yuthon.school.student">
<field name="name">郑小伟</field>
<field name="student_no">S20260007</field>
<field name="class_id" ref="demo_class_advanced"/>
<field name="gender">male</field>
<field name="phone">139-0000-0007</field>
<field name="enrollment_date">2026-03-01</field>
</record>
<record id="demo_student_08" model="yuthon.school.student">
<field name="name">孙小丽</field>
<field name="student_no">S20260008</field>
<field name="class_id" ref="demo_class_advanced"/>
<field name="gender">female</field>
<field name="phone">139-0000-0008</field>
<field name="enrollment_date">2026-03-01</field>
</record>
<record id="demo_student_09" model="yuthon.school.student">
<field name="name">胡小军</field>
<field name="student_no">S20260009</field>
<field name="class_id" ref="demo_class_advanced"/>
<field name="gender">male</field>
<field name="phone">139-0000-0009</field>
<field name="enrollment_date">2026-03-01</field>
</record>
<record id="demo_student_10" model="yuthon.school.student">
<field name="name">高小静</field>
<field name="student_no">S20260010</field>
<field name="class_id" ref="demo_class_advanced"/>
<field name="gender">female</field>
<field name="phone">139-0000-0010</field>
<field name="enrollment_date">2026-03-01</field>
</record>
<!-- ============ 教材 + 章节 ============ -->
<record id="demo_textbook" model="yuthon.school.textbook">
<field name="name">Odoo 18 框架开发实战</field>
<field name="category_id" ref="demo_category_root"/>
<field name="difficulty">beginner</field>
<field name="state">published</field>
<field name="description">从零开始学习 Odoo 18 框架开发,涵盖模块结构、模型定义、视图架构、权限机制等核心知识点。</field>
</record>
<record id="demo_chapter_01" model="yuthon.school.chapter">
<field name="name">第一章 模块结构与清单文件</field>
<field name="textbook_id" ref="demo_textbook"/>
<field name="sequence">10</field>
<field name="summary">了解 Odoo 模块的目录结构和 __manifest__.py 清单文件</field>
<field name="key_points">__manifest__.py 字段、data 文件加载顺序、addons_path 配置</field>
<field name="hours">2.0</field>
</record>
<record id="demo_chapter_02" model="yuthon.school.chapter">
<field name="name">第二章 模型定义与字段类型</field>
<field name="textbook_id" ref="demo_textbook"/>
<field name="sequence">20</field>
<field name="summary">掌握 Odoo 模型定义、字段类型和关系字段</field>
<field name="key_points">Char/Integer/Float/Selection、Many2one/One2many/Many2many、compute/store</field>
<field name="hours">4.0</field>
</record>
<record id="demo_chapter_03" model="yuthon.school.chapter">
<field name="name">第三章 视图架构</field>
<field name="textbook_id" ref="demo_textbook"/>
<field name="sequence">30</field>
<field name="summary">学习 list/form/search/kanban 四种核心视图</field>
<field name="key_points">list 视图、form 视图、search 视图、kanban 看板视图</field>
<field name="hours">3.0</field>
</record>
<record id="demo_chapter_04" model="yuthon.school.chapter">
<field name="name">第四章 权限与安全机制</field>
<field name="textbook_id" ref="demo_textbook"/>
<field name="sequence">40</field>
<field name="summary">理解 ir.model.access.csv 和 ir.rule 记录规则</field>
<field name="key_points">模型访问权限、记录规则、用户组</field>
<field name="hours">2.5</field>
</record>
<record id="demo_chapter_05" model="yuthon.school.chapter">
<field name="name">第五章 控制器与路由</field>
<field name="textbook_id" ref="demo_textbook"/>
<field name="sequence">50</field>
<field name="summary">学习 HTTP 控制器和 URL 路由</field>
<field name="key_points">Controller、@http.route、请求处理、模板渲染</field>
<field name="hours">3.0</field>
</record>
<!-- ============ 选修课Many2many 演示) ============ -->
<record id="demo_elective_owl" model="yuthon.school.elective">
<field name="name">OWL 前端框架入门</field>
<field name="teacher_id" ref="demo_teacher_li"/>
<field name="description">学习 Odoo Web Library (OWL) 框架基础,理解组件化前端开发。</field>
<field name="student_ids" eval="[(6, 0, [ref('demo_student_01'), ref('demo_student_02'), ref('demo_student_03')])]"/>
</record>
<record id="demo_elective_workflow" model="yuthon.school.elective">
<field name="name">Odoo 工作流开发</field>
<field name="teacher_id" ref="demo_teacher_zhang"/>
<field name="description">深入学习 Odoo 工作流机制,掌握状态机和业务流程设计。</field>
<field name="student_ids" eval="[(6, 0, [ref('demo_student_06'), ref('demo_student_07'), ref('demo_student_08')])]"/>
</record>
<!-- ============ 学习进度记录 ============ -->
<record id="demo_progress_01" model="yuthon.school.progress">
<field name="student_id" ref="demo_student_01"/>
<field name="textbook_id" ref="demo_textbook"/>
<field name="chapter_id" ref="demo_chapter_01"/>
<field name="progress">100</field>
<field name="completed">True</field>
<field name="last_study_date">2026-07-20 10:00:00</field>
</record>
<record id="demo_progress_02" model="yuthon.school.progress">
<field name="student_id" ref="demo_student_01"/>
<field name="textbook_id" ref="demo_textbook"/>
<field name="chapter_id" ref="demo_chapter_02"/>
<field name="progress">65</field>
<field name="completed">False</field>
<field name="last_study_date">2026-07-25 14:00:00</field>
</record>
<record id="demo_progress_03" model="yuthon.school.progress">
<field name="student_id" ref="demo_student_02"/>
<field name="textbook_id" ref="demo_textbook"/>
<field name="chapter_id" ref="demo_chapter_01"/>
<field name="progress">100</field>
<field name="completed">True</field>
<field name="last_study_date">2026-07-22 09:30:00</field>
</record>
<record id="demo_progress_04" model="yuthon.school.progress">
<field name="student_id" ref="demo_student_06"/>
<field name="textbook_id" ref="demo_textbook"/>
<field name="chapter_id" ref="demo_chapter_03"/>
<field name="progress">40</field>
<field name="completed">False</field>
<field name="last_study_date">2026-07-26 16:00:00</field>
</record>
<record id="demo_progress_05" model="yuthon.school.progress">
<field name="student_id" ref="demo_student_07"/>
<field name="textbook_id" ref="demo_textbook"/>
<field name="chapter_id" ref="demo_chapter_01"/>
<field name="progress">0</field>
<field name="completed">False</field>
<field name="last_study_date">2026-07-28 08:00:00</field>
</record>
<!-- ============ 第二本教材 + 章节 ============ -->
<record id="demo_textbook_owl" model="yuthon.school.textbook">
<field name="name">Odoo 18 前端 OWL 实战</field>
<field name="category_id" ref="demo_category_view"/>
<field name="difficulty">intermediate</field>
<field name="state">published</field>
<field name="description">面向前端开发者的 OWL 组件化开发教程,覆盖组件、事件、状态与渲染。</field>
</record>
<record id="demo_chapter_owl_01" model="yuthon.school.chapter">
<field name="name">OWL 组件基础</field>
<field name="textbook_id" ref="demo_textbook_owl"/>
<field name="sequence">10</field>
<field name="hours">2.5</field>
<field name="summary">组件定义、props、状态</field>
<field name="key_points">Component、useState、props</field>
</record>
<record id="demo_chapter_owl_02" model="yuthon.school.chapter">
<field name="name">事件与渲染</field>
<field name="textbook_id" ref="demo_textbook_owl"/>
<field name="sequence">20</field>
<field name="hours">3.0</field>
<field name="summary">事件绑定、条件渲染、列表渲染</field>
<field name="key_points">t-on、t-if、t-foreach</field>
</record>
<!-- ============ 教学视频(占位文件,仅用于演示视频管理功能) ============ -->
<record id="demo_video_01" model="yuthon.school.video">
<field name="name">模块结构详解</field>
<field name="chapter_id" ref="demo_chapter_01"/>
<field name="category_id" ref="demo_category_basic"/>
<field name="duration">12:30</field>
<field name="difficulty">beginner</field>
<field name="video_filename">demo_lesson_01.mp4</field>
<field name="video_file" type="base64">AAAA</field>
<field name="description">讲解 Odoo 模块的目录结构与清单文件。</field>
<field name="key_points">__manifest__.py、data 加载顺序</field>
</record>
<record id="demo_video_02" model="yuthon.school.video">
<field name="name">模型与字段类型</field>
<field name="chapter_id" ref="demo_chapter_02"/>
<field name="category_id" ref="demo_category_model"/>
<field name="duration">18:05</field>
<field name="difficulty">intermediate</field>
<field name="video_filename">demo_lesson_02.mp4</field>
<field name="video_file" type="base64">AAAA</field>
<field name="description">Char/Integer/Selection 与关系字段。</field>
</record>
<record id="demo_video_03" model="yuthon.school.video">
<field name="name">OWL 组件基础</field>
<field name="chapter_id" ref="demo_chapter_owl_01"/>
<field name="category_id" ref="demo_category_view"/>
<field name="duration">15:40</field>
<field name="difficulty">intermediate</field>
<field name="video_filename">demo_lesson_03.mp4</field>
<field name="video_file" type="base64">AAAA</field>
<field name="description">OWL 组件定义与状态管理。</field>
</record>
<!-- ============ 课程 ============ -->
<record id="demo_course_fullstack" model="yuthon.school.course">
<field name="name">Odoo 18 全栈开发工程师</field>
<field name="code">ODOO-101</field>
<field name="category_id" ref="demo_category_root"/>
<field name="teacher_id" ref="demo_teacher_zhang"/>
<field name="difficulty">beginner</field>
<field name="state">ongoing</field>
<field name="description">零基础到独立开发 Odoo 18 模块,覆盖模型、视图、权限、控制器。</field>
<field name="textbook_ids" eval="[(6, 0, [ref('demo_textbook'), ref('demo_textbook_owl')])]"/>
<field name="student_ids" eval="[(6, 0, [ref('demo_student_01'), ref('demo_student_02'), ref('demo_student_03'), ref('demo_student_06')])]"/>
</record>
<record id="demo_course_frontend" model="yuthon.school.course">
<field name="name">Odoo 前端 OWL 专项</field>
<field name="code">ODOO-201</field>
<field name="category_id" ref="demo_category_view"/>
<field name="teacher_id" ref="demo_teacher_li"/>
<field name="difficulty">intermediate</field>
<field name="state">recruiting</field>
<field name="description">深入 OWL 框架,掌握组件化前端开发。</field>
<field name="textbook_ids" eval="[(6, 0, [ref('demo_textbook_owl')])]"/>
<field name="student_ids" eval="[(6, 0, [ref('demo_student_07'), ref('demo_student_08'), ref('demo_student_09')])]"/>
</record>
<!-- ============ 课程大纲 ============ -->
<record id="demo_syllabus_01" model="yuthon.school.syllabus">
<field name="name">模块开发与权限设计</field>
<field name="week">第 1-2 周</field>
<field name="course_id" ref="demo_course_fullstack"/>
<field name="chapter_ids" eval="[(6, 0, [ref('demo_chapter_01'), ref('demo_chapter_04')])]"/>
<field name="objective">掌握模块清单、模型定义与 ACL 权限机制。</field>
<field name="content"><![CDATA[<p>通过动手实现一个完整模块,理解 Odoo 的开发全流程。</p>]]></field>
</record>
<record id="demo_syllabus_02" model="yuthon.school.syllabus">
<field name="name">视图与前端交互</field>
<field name="week">第 3-4 周</field>
<field name="course_id" ref="demo_course_fullstack"/>
<field name="chapter_ids" eval="[(6, 0, [ref('demo_chapter_03')])]"/>
<field name="objective">熟练使用 list/form/search/kanban 四种视图。</field>
</record>
<record id="demo_syllabus_03" model="yuthon.school.syllabus">
<field name="name">OWL 组件与状态管理</field>
<field name="week">第 1-2 周</field>
<field name="course_id" ref="demo_course_frontend"/>
<field name="chapter_ids" eval="[(6, 0, [ref('demo_chapter_owl_01'), ref('demo_chapter_owl_02')])]"/>
<field name="objective">能用 OWL 编写组件化前端页面。</field>
</record>
<!-- ============ 训练考核 ============ -->
<record id="demo_exam_01" model="yuthon.school.exam">
<field name="name">模块开发单元测验</field>
<field name="course_id" ref="demo_course_fullstack"/>
<field name="student_id" ref="demo_student_01"/>
<field name="exam_type">quiz</field>
<field name="exam_date">2026-07-21</field>
<field name="score">92</field>
<field name="state">done</field>
<field name="note">概念清晰,注意 compute 字段的 store 用法。</field>
</record>
<record id="demo_exam_02" model="yuthon.school.exam">
<field name="name">模块开发单元测验</field>
<field name="course_id" ref="demo_course_fullstack"/>
<field name="student_id" ref="demo_student_02"/>
<field name="exam_type">quiz</field>
<field name="exam_date">2026-07-21</field>
<field name="score">55</field>
<field name="state">done</field>
<field name="note">关系字段部分需要加强。</field>
</record>
<record id="demo_exam_03" model="yuthon.school.exam">
<field name="name">OWL 期中练习</field>
<field name="course_id" ref="demo_course_frontend"/>
<field name="student_id" ref="demo_student_07"/>
<field name="exam_type">practice</field>
<field name="exam_date">2026-07-28</field>
<field name="score">88</field>
<field name="state">done</field>
</record>
<record id="demo_exam_04" model="yuthon.school.exam">
<field name="name">OWL 期中练习</field>
<field name="course_id" ref="demo_course_frontend"/>
<field name="student_id" ref="demo_student_08"/>
<field name="exam_type">practice</field>
<field name="exam_date">2026-07-28</field>
<field name="score">0</field>
<field name="state">pending</field>
</record>
<!-- ============ 学习交流 ============ -->
<record id="demo_post_01" model="yuthon.school.forum_post">
<field name="name">Many2many 的 (6,0,[ids]) 怎么理解?</field>
<field name="post_type">question</field>
<field name="author_name">陈小明</field>
<field name="author_type">student</field>
<field name="course_id" ref="demo_course_fullstack"/>
<field name="content"><![CDATA[<p>在 demo 数据里看到 <code>[(6,0,[ids])]</code>,这个 6 和 0 分别代表什么?</p>]]></field>
<field name="like_count">3</field>
</record>
<record id="demo_post_reply_01" model="yuthon.school.forum_post">
<field name="name">回复Many2many 的 (6,0,[ids])</field>
<field name="parent_id" ref="demo_post_01"/>
<field name="post_type">discuss</field>
<field name="author_name">张老师</field>
<field name="author_type">teacher</field>
<field name="content"><![CDATA[<p>6 表示「替换」0 是保留位,[ids] 是要关联的记录 id 列表。整体含义是把当前记录的 M2M 关系替换为给定列表。</p>]]></field>
<field name="like_count">5</field>
</record>
<record id="demo_post_02" model="yuthon.school.forum_post">
<field name="name">分享compute 字段一定要加 store 吗?</field>
<field name="post_type">share</field>
<field name="author_name">林小芳</field>
<field name="author_type">student</field>
<field name="course_id" ref="demo_course_fullstack"/>
<field name="content"><![CDATA[<p>不是必须。不加 store 每次读取都实时计算;加 store 会落库并随依赖字段变化重算,适合列表排序/搜索场景。</p>]]></field>
<field name="like_count">7</field>
</record>
<record id="demo_post_03" model="yuthon.school.forum_post">
<field name="name">OWL 里 t-on 和原生 onclick 有什么区别?</field>
<field name="post_type">question</field>
<field name="author_name">郑小伟</field>
<field name="author_type">student</field>
<field name="course_id" ref="demo_course_frontend"/>
<field name="content"><![CDATA[<p>用 t-on 绑定事件和直接写 onclick 有什么不同?</p>]]></field>
<field name="like_count">1</field>
</record>
</odoo>