Files
shcool/college/views/course_views.xml
T
2026-09-17 16:28:31 +08:00

412 lines
22 KiB
XML
Raw 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.
<odoo>
<!-- ===================== 课程:列表 ===================== -->
<record id="yuthon_school_course_view_list" model="ir.ui.view">
<field name="name">yuthon.school.course.list</field>
<field name="model">yuthon.school.course</field>
<field name="arch" type="xml">
<list string="课程">
<field name="name"/>
<field name="code"/>
<field name="college"/>
<field name="semester"/>
<field name="course_type"/>
<field name="hours"/>
<field name="teacher_id" column_invisible="1"/>
<field name="student_count"/>
<field name="chapter_count"/>
<field name="state"/>
</list>
</field>
</record>
<!-- ===================== 课程:表单 ===================== -->
<record id="yuthon_school_course_view_form" model="ir.ui.view">
<field name="name">yuthon.school.course.form</field>
<field name="model">yuthon.school.course</field>
<field name="arch" type="xml">
<form>
<header>
<button name="action_publish" type="object" string="发布"
class="btn-primary"
invisible="[('state', '!=', 'draft')]"/>
<button name="action_archive" type="object" string="归档"
invisible="[('state', '!=', 'published')]"/>
<button name="action_to_draft" type="object" string="转为草稿"
invisible="[('state', '=', 'draft')]"/>
<field name="state" widget="statusbar"
statusbar_visible="draft,published,archived"/>
</header>
<sheet>
<group>
<group>
<field name="name"/>
<field name="code"/>
<field name="teacher_id" invisible="1"/>
<field name="college"/>
<field name="semester"/>
</group>
<group>
<field name="course_type"/>
<field name="hours"/>
<field name="start_date"/>
<field name="end_date"/>
<field name="is_public"/>
</group>
</group>
<notebook>
<page string="课程内容">
<group>
<field name="syllabus" string="课程大纲"/>
</group>
<separator string="课程章节(每章含视频与资料)"/>
<field name="chapter_ids">
<list editable="top">
<field name="name"/>
<field name="class_hours" string="课时"/>
<field name="video_filename_display" string="视频"/>
<button name="action_open_edit" type="object"
string="编辑章节" icon="fa-pencil"
class="btn-link"
groups="college.group_teacher,base.group_system"/>
</list>
<form>
<group>
<field name="name"/>
<field name="sequence" invisible="1"/>
</group>
<group>
<field name="description" widget="html"
string="章节说明"/>
</group>
<group>
<field name="video_file" filename="video_filename"/>
<field name="video_filename" invisible="1"/>
</group>
<field name="attachment_ids" string="章节资料">
<list editable="bottom">
<field name="name" string="文件名"/>
<field name="file" filename="name"/>
</list>
</field>
</form>
</field>
</page>
<page string="选课学员" groups="college.group_teacher,base.group_system">
<field name="student_ids" widget="many2many"
context="{'default_name': name}"/>
</page>
<page string="课程介绍">
<field name="introduction"/>
</page>
<page string="课程目标">
<field name="objectives"/>
</page>
<page string="课程特色">
<field name="features"/>
</page>
<page string="业务情景">
<field name="business_scenario"/>
</page>
</notebook>
</sheet>
<chatter/>
</form>
</field>
</record>
<!-- ===================== 课程:我的课程学生只读表单(含 Chatter) ===================== -->
<record id="yuthon_school_course_view_form_student" model="ir.ui.view">
<field name="name">yuthon.school.course.form.student</field>
<field name="model">yuthon.school.course</field>
<field name="priority">15</field>
<field name="groups_id" eval="[(4, ref('college.group_student'))]"/>
<field name="arch" type="xml">
<form edit="0" create="0" delete="0" duplicate="0">
<sheet>
<div class="oe_title">
<h1><field name="name" readonly="1"/></h1>
</div>
<group>
<group>
<field name="code" readonly="1" string="课程编号"/>
<field name="college" readonly="1"/>
<field name="semester" readonly="1"/>
</group>
<group>
<field name="teacher_id" readonly="1"/>
<field name="course_type" readonly="1" string="课程模块"/>
<field name="hours" readonly="1"/>
<field name="start_date" readonly="1"/>
<field name="end_date" readonly="1"/>
<field name="is_public" readonly="1"/>
</group>
</group>
<notebook>
<page string="课程内容">
<field name="syllabus" readonly="1" string="课程大纲"/>
<separator string="课程章节(按顺序学习视频与资料)"/>
<field name="chapter_ids" readonly="1">
<list>
<field name="name"/>
<field name="class_hours" string="课时"/>
</list>
</field>
</page>
<page string="选课学员" groups="college.group_teacher,base.group_system">
<field name="student_ids" readonly="1"/>
</page>
<page string="课程介绍">
<field name="introduction" readonly="1"/>
</page>
<page string="课程目标">
<field name="objectives" readonly="1"/>
</page>
<page string="课程特色">
<field name="features" readonly="1"/>
</page>
<page string="业务情景">
<field name="business_scenario" readonly="1"/>
</page>
</notebook>
</sheet>
<chatter/>
</form>
</field>
</record>
<!-- ===================== 课程:搜索 ===================== -->
<record id="yuthon_school_course_view_search" model="ir.ui.view">
<field name="name">yuthon.school.course.search</field>
<field name="model">yuthon.school.course</field>
<field name="arch" type="xml">
<search>
<field name="name" string="课程名称"
filter_domain="[('name', 'ilike', self)]"/>
<field name="college"/>
<field name="semester"/>
<filter name="theory" string="理论"
domain="[('course_type', '=', 'theory')]"/>
<filter name="practice" string="实践"
domain="[('course_type', '=', 'practice')]"/>
<filter name="my_courses" string="我的课程"
domain="[('teacher_id', '=', uid)]"/>
<filter name="published" string="已发布"
domain="[('state', '=', 'published')]"/>
<group expand="0" string="分组">
<filter name="group_college" string="学院"
context="{'group_by': 'college'}"/>
<filter name="group_semester" string="学期"
context="{'group_by': 'semester'}"/>
<filter name="group_state" string="状态"
context="{'group_by': 'state'}"/>
</group>
</search>
</field>
</record>
<!-- ===================== 课程:看板 ===================== -->
<record id="yuthon_school_course_view_kanban" model="ir.ui.view">
<field name="name">yuthon.school.course.kanban</field>
<field name="model">yuthon.school.course</field>
<field name="arch" type="xml">
<kanban default_order="semester,college,name"
class="college-course-kanban college-kanban-teacher o_kanban_mobile">
<field name="name"/>
<field name="college"/>
<field name="semester"/>
<field name="course_type"/>
<field name="teacher_id"/>
<field name="student_count"/>
<field name="chapter_count"/>
<field name="state"/>
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_click college-kanban-card"
style="padding:0; border-radius:8px; overflow:hidden;">
<!-- 顶帽:蓝调 + 课程编号 -->
<div style="background:linear-gradient(135deg,#3B82F6,#6366F1); padding:10px 14px; display:flex; align-items:center; justify-content:space-between;">
<div style="color:#fff; font-size:11px; opacity:.85; letter-spacing:.5px;">
<field name="code"/>
</div>
<span class="badge text-white"
style="font-size:10px; background:rgba(255,255,255,.25); padding:3px 8px; border-radius:6px;">
<field name="course_type"/>
</span>
<span class="badge text-white"
style="font-size:10px; background:rgba(34,197,94,.9); padding:3px 8px; border-radius:6px;">
<field name="state"/>
</span>
</div>
<!-- 主体 -->
<div class="college-kanban-body" style="padding:10px 14px;">
<div class="college-kanban-title">
<field name="name"/>
</div>
<div class="college-kanban-meta text-muted small mb-1">
<i class="fa fa-building"/> <field name="college"/> · <field name="semester"/>
</div>
<div class="college-kanban-meta small mb-1">
<i class="fa fa-user text-muted"/> <field name="teacher_id"/>
</div>
<div style="display:flex; gap:8px; margin-top:8px;">
<span class="college-kanban-badge college-kanban-badge-hours">
<i class="fa fa-clock-o"/> <field name="hours"/> 课时
</span>
<span class="college-kanban-badge college-kanban-badge-students">
<i class="fa fa-users"/> <field name="student_count"/> 学员
</span>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- ===================== 课程:我的课程学生专属看板(按学期分组,书本风格) ===================== -->
<record id="yuthon_school_course_view_kanban_student" model="ir.ui.view">
<field name="name">yuthon.school.course.kanban.student</field>
<field name="model">yuthon.school.course</field>
<field name="priority">20</field>
<field name="groups_id" eval="[(4, ref('college.group_student'))]"/>
<field name="arch" type="xml">
<kanban default_group_by="semester"
default_order="college,name"
class="college-course-kanban college-kanban-my o_kanban_mobile">
<field name="name"/>
<field name="code"/>
<field name="college"/>
<field name="semester"/>
<field name="course_type"/>
<field name="teacher_id"/>
<field name="hours"/>
<field name="chapter_count"/>
<field name="is_public"/>
<progressbar field="chapter_count" title="章节进度"
colors='{"done": "success", "warning": "warning"}'/>
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_click college-kanban-card"
style="padding:0; border-radius:8px; overflow:hidden;">
<!-- 顶帽:彩色条 + 课程编号 -->
<div style="background:linear-gradient(135deg,#5B86E5,#36D1DC); padding:10px 14px;">
<div style="color:#fff; font-size:11px; opacity:.85; letter-spacing:.5px;">
<field name="code"/>
</div>
<div style="color:#fff; font-size:15px; font-weight:600; margin-top:2px;">
<field name="name"/>
</div>
</div>
<!-- 主体 -->
<div class="college-kanban-body" style="padding:10px 14px;">
<div class="mb-2">
<span class="college-kanban-badge college-kanban-badge-type">
<field name="course_type"/>
</span>
<t t-if="record.is_public.raw_value">
<span class="college-kanban-badge college-kanban-badge-public ml-1">公开</span>
</t>
</div>
<div class="college-kanban-meta text-muted small mb-1">
<field name="college"/>
</div>
<div class="college-kanban-meta small mb-1">
<i class="fa fa-user-circle-o text-muted"/> <field name="teacher_id" widget="many2one_avatar_user"/>
</div>
<div class="college-kanban-meta small text-muted">
<i class="fa fa-clock-o"/> <field name="hours"/> 课时 · 共 <field name="chapter_count"/> 章节
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- ===================== 课程:课程学习学生专属看板(按学院分组,活力橙风格) ===================== -->
<record id="yuthon_school_course_view_kanban_study" model="ir.ui.view">
<field name="name">yuthon.school.course.kanban.study</field>
<field name="model">yuthon.school.course</field>
<field name="priority">25</field>
<field name="groups_id" eval="[(4, ref('college.group_student'))]"/>
<field name="arch" type="xml">
<kanban default_group_by="college"
default_order="semester,name"
class="college-course-kanban college-kanban-study o_kanban_mobile">
<field name="name"/>
<field name="code"/>
<field name="college"/>
<field name="semester"/>
<field name="course_type"/>
<field name="teacher_id"/>
<field name="hours"/>
<field name="chapter_count"/>
<field name="is_public"/>
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_click college-kanban-card"
style="padding:0; border-radius:10px; overflow:hidden;">
<!-- 顶帽:橙色渐变 + 课程类型徽章 -->
<div style="background:linear-gradient(120deg,#FF9966,#FF5E62); padding:8px 14px; display:flex; align-items:center; justify-content:space-between;">
<div style="color:#fff; font-size:11px; opacity:.92;">
<i class="fa fa-book"/> <field name="code"/>
</div>
<span class="college-kanban-badge college-kanban-badge-type">
<field name="course_type"/>
</span>
</div>
<!-- 主体 -->
<div class="college-kanban-body" style="padding:12px 14px;">
<div class="college-kanban-title" style="min-height:36px;">
<field name="name"/>
</div>
<div class="college-kanban-meta text-muted small mb-2">
<i class="fa fa-calendar"/> <field name="semester"/>
</div>
<div class="college-kanban-meta small mb-1">
<i class="fa fa-user text-muted"/> <field name="teacher_id" widget="many2one_avatar_user"/>
</div>
<div style="display:flex; gap:8px; margin-top:8px;">
<span class="college-kanban-badge college-kanban-badge-hours">
<i class="fa fa-clock-o"/> <field name="hours"/> 课时
</span>
<span class="college-kanban-badge college-kanban-badge-chapters">
<i class="fa fa-list"/> <field name="chapter_count"/> 章
</span>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- ===================== 课程:动作(后置定义,显式绑定老师视图,避免学生视图靠优先级抢占) ===================== -->
<record id="action_yuthon_school_course_my" 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">[('teacher_id', '=', uid)]</field>
<field name="context">{'search_default_my_courses': 1}</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'kanban', 'view_id': ref('yuthon_school_course_view_kanban')}),
(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')})]"/>
<field name="target">current</field>
</record>
<record id="action_yuthon_school_course_all" 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="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'kanban', 'view_id': ref('yuthon_school_course_view_kanban')}),
(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')})]"/>
<field name="target">current</field>
</record>
</odoo>