Files
shcool/college/views/chapter_views.xml
T
2026-08-07 16:09:46 +08:00

204 lines
10 KiB
XML

<odoo>
<!-- ===================== 章节:老师编辑表单(默认) ===================== -->
<record id="yuthon_school_course_chapter_form_view" model="ir.ui.view">
<field name="name">yuthon.school.course.chapter.form.view</field>
<field name="model">yuthon.school.course.chapter</field>
<field name="priority">30</field>
<field name="groups_id" eval="[(4, ref('college.group_teacher')), (4, ref('base.group_system'))]"/>
<field name="arch" type="xml">
<form>
<group>
<field name="name"/>
<field name="course_id" readonly="1"/>
<field name="sequence" invisible="1"/>
</group>
<group>
<field name="description" widget="html" string="章节说明"/>
<field name="notes" widget="html" string="随堂笔记"/>
</group>
<group>
<field name="video_file" filename="video_filename"/>
<field name="video_filename" invisible="1"/>
<field name="video_filename_display" invisible="1"/>
</group>
<field name="attachment_ids" string="章节资料">
<list editable="bottom">
<field name="name" string="文件名"/>
<field name="file" filename="name"/>
</list>
</field>
</form>
</field>
</record>
<!-- ===================== 章节:学生学习表单(弹窗播放视频/下载附件) ===================== -->
<record id="yuthon_school_course_chapter_study_form" model="ir.ui.view">
<field name="name">yuthon.school.course.chapter.study.form</field>
<field name="model">yuthon.school.course.chapter</field>
<field name="priority">20</field>
<field name="groups_id" eval="[(4, ref('college.group_student')), (4, ref('base.group_system'))]"/>
<field name="arch" type="xml">
<form>
<header>
<button name="action_toggle_complete" type="object"
string="标记已学完" class="btn-primary"
invisible="is_done_for_me"/>
<button name="action_toggle_complete" type="object"
string="取消完成" class="btn-secondary"
invisible="not is_done_for_me"/>
<field name="is_done_for_me" invisible="1"/>
</header>
<sheet>
<h2><field name="name" readonly="1"/></h2>
<div class="text-muted mb-3">
所属课程:<field name="course_id" readonly="1"/>
</div>
<group>
<field name="description" widget="html" readonly="1"/>
</group>
<!-- 有视频时直接播放 -->
<field name="video_embed_html" widget="html" readonly="1"
invisible="not video_file"/>
<!-- 没有视频但有附件时,只显示附件 -->
<separator string="章节资料" invisible="not attachment_ids"/>
<field name="attachment_ids" readonly="1"
invisible="not attachment_ids">
<list editable="bottom" create="0" delete="0">
<field name="name" string="文件名" readonly="1"/>
<field name="download_link_html" widget="html"
nolabel="1"/>
</list>
</field>
</sheet>
</form>
</field>
</record>
<!-- ===================== 课程学习:学生专用表单(仅学生可见,避免覆盖老师默认表单) ===================== -->
<record id="yuthon_school_course_study_form" model="ir.ui.view">
<field name="name">yuthon.school.course.study.form</field>
<field name="model">yuthon.school.course</field>
<field name="priority">10</field>
<field name="groups_id" eval="[(4, ref('college.group_student'))]"/>
<field name="arch" type="xml">
<form>
<header>
<field name="name" readonly="1"/>
<field name="chapter_count" readonly="1" string="章节数"/>
</header>
<sheet>
<div class="text-muted mb-3">
任课教师:<field name="teacher_id" readonly="1"/>
· 课时:<field name="hours" readonly="1"/>
</div>
<group>
<field name="introduction" widget="html" readonly="1"/>
</group>
<separator string="课程章节(点击「去学习」观看视频与资料)"/>
<field name="chapter_ids" readonly="1">
<list>
<field name="name"/>
<button name="action_open_study" type="object"
string="去学习" class="btn-primary"
icon="fa-play"/>
</list>
</field>
</sheet>
</form>
</field>
</record>
<!-- ===================== 学生「课程学习」入口动作 ===================== -->
<record id="action_yuthon_school_course_study" model="ir.actions.act_window">
<field name="name">课程学习</field>
<field name="res_model">yuthon.school.course</field>
<field name="view_mode">kanban,list,form</field>
<field name="domain">[('student_ids.user_id', '=', uid), ('state', '=', 'published')]</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'kanban', 'view_id': ref('yuthon_school_course_view_kanban_study')}),
(0, 0, {'view_mode': 'list', 'view_id': ref('yuthon_school_course_view_list')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_school_course_study_form')})]"/>
<field name="target">current</field>
</record>
<!-- ===================== 学生「我的课程」入口(用老师完整表单 + 只看自己的课程) ===================== -->
<record id="action_yuthon_school_my_course_student" model="ir.actions.act_window">
<field name="name">我的课程</field>
<field name="res_model">yuthon.school.course</field>
<field name="view_mode">kanban,list,form</field>
<field name="domain">[('student_ids.user_id', '=', uid), ('state', '=', 'published')]</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'kanban', 'view_id': ref('yuthon_school_course_view_kanban_student')}),
(0, 0, {'view_mode': 'list', 'view_id': ref('yuthon_school_course_view_list')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_school_course_view_form_student')})]"/>
<field name="target">current</field>
</record>
<!-- ===================== 随堂笔记:列表(按课程分组) ===================== -->
<record id="yuthon_school_course_chapter_notes_list" model="ir.ui.view">
<field name="name">yuthon.school.course.chapter.notes.list</field>
<field name="model">yuthon.school.course.chapter</field>
<field name="priority">40</field>
<field name="groups_id" eval="[(4, ref('college.group_teacher')), (4, ref('college.group_student')), (4, ref('base.group_system'))]"/>
<field name="arch" type="xml">
<list>
<field name="course_id"/>
<field name="name"/>
<field name="sequence"/>
</list>
</field>
</record>
<!-- ===================== 随堂笔记:编辑表单 ===================== -->
<record id="yuthon_school_course_chapter_notes_form" model="ir.ui.view">
<field name="name">yuthon.school.course.chapter.notes.form</field>
<field name="model">yuthon.school.course.chapter</field>
<field name="priority">40</field>
<field name="groups_id" eval="[(4, ref('college.group_teacher')), (4, ref('college.group_student')), (4, ref('base.group_system'))]"/>
<field name="arch" type="xml">
<form>
<sheet>
<h2><field name="name" readonly="1"/></h2>
<div class="text-muted mb-3">
所属课程:<field name="course_id" readonly="1"/>
</div>
<group>
<field name="notes" widget="html" groups="college.group_teacher,base.group_system"/>
<field name="notes" widget="html" readonly="1" groups="college.group_student"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- ===================== 随堂笔记:搜索视图(按课程分组) ===================== -->
<record id="yuthon_school_course_chapter_notes_search" model="ir.ui.view">
<field name="name">yuthon.school.course.chapter.notes.search</field>
<field name="model">yuthon.school.course.chapter</field>
<field name="priority">40</field>
<field name="groups_id" eval="[(4, ref('college.group_teacher')), (4, ref('college.group_student')), (4, ref('base.group_system'))]"/>
<field name="arch" type="xml">
<search>
<field name="course_id"/>
<field name="name"/>
<filter name="group_by_course" string="按课程分组" context="{'group_by': 'course_id'}"/>
</search>
</field>
</record>
<!-- ===================== 随堂笔记:动作 ===================== -->
<record id="action_yuthon_school_class_notes" model="ir.actions.act_window">
<field name="name">随堂笔记</field>
<field name="res_model">yuthon.school.course.chapter</field>
<field name="view_mode">list,form</field>
<field name="domain">['|', ('course_id.teacher_id', '=', uid), ('course_id.student_ids.user_id', '=', uid)]</field>
<field name="context">{'search_default_group_by_course': 1}</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'list', 'view_id': ref('yuthon_school_course_chapter_notes_list')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_school_course_chapter_notes_form')})]"/>
<field name="search_view_id" ref="yuthon_school_course_chapter_notes_search"/>
<field name="target">current</field>
</record>
</odoo>