Files
shcool/college/views/progress_views.xml
T
2026-08-07 15:22:04 +08:00

181 lines
8.7 KiB
XML

<odoo>
<!-- ===================== 学习进展:动作(老师用,无限制) ===================== -->
<record id="action_yuthon_school_progress" model="ir.actions.act_window">
<field name="name">学习进展</field>
<field name="res_model">yuthon.school.progress</field>
<field name="view_mode">kanban,list,form</field>
</record>
<!-- ===================== 学习进展:统一入口(按角色动态路由) ===================== -->
<record id="action_yuthon_school_progress_router" model="ir.actions.server">
<field name="name">学习进展</field>
<field name="model_id" ref="model_yuthon_school_progress"/>
<field name="state">code</field>
<field name="code"><![CDATA[
# 老师 / 管理员 -> 查看全部学习进展
# 学生 -> 仅查看自己已发布课程的学习进展
if env.user.has_group('college.group_teacher') or env.user.has_group('base.group_system'):
action = env.ref('college.action_yuthon_school_progress').sudo().read()[0]
else:
action = env.ref('college.action_yuthon_school_progress_student').sudo().read()[0]
]]></field>
</record>
<!-- ===================== 学习进展:列表 ===================== -->
<record id="yuthon_school_progress_view_list" model="ir.ui.view">
<field name="name">yuthon.school.progress.list</field>
<field name="model">yuthon.school.progress</field>
<field name="arch" type="xml">
<list string="学习进展">
<field name="course_id"/>
<field name="student_id" groups="college.group_teacher"/>
<field name="teacher_id"/>
<field name="chapter_done"/>
<field name="chapter_total"/>
<field name="progress_rate"/>
<field name="status"/>
<field name="last_study_date"/>
<field name="score"/>
</list>
</field>
</record>
<!-- ===================== 学习进展:表单(老师/管理员可编辑) ===================== -->
<record id="yuthon_school_progress_view_form" model="ir.ui.view">
<field name="name">yuthon.school.progress.form</field>
<field name="model">yuthon.school.progress</field>
<field name="groups_id" eval="[(4, ref('college.group_teacher')), (4, ref('base.group_system'))]"/>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="course_id"/>
<field name="student_id"/>
<field name="teacher_id"/>
</group>
<group>
<field name="chapter_done"/>
<field name="chapter_total"/>
<field name="progress_rate"/>
<field name="status"/>
<field name="last_study_date"/>
<field name="score"/>
</group>
<group>
<field name="note"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- ===================== 学习进展:表单(学生只读) ===================== -->
<record id="yuthon_school_progress_view_form_student" model="ir.ui.view">
<field name="name">yuthon.school.progress.form.student</field>
<field name="model">yuthon.school.progress</field>
<field name="priority">5</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 string="课程信息">
<field name="course_id" readonly="1"/>
<field name="teacher_id" readonly="1"/>
</group>
<group string="学习进度">
<field name="chapter_done" readonly="1"/>
<field name="chapter_total" readonly="1"/>
<field name="progress_rate" readonly="1"/>
<field name="status" readonly="1"/>
</group>
</group>
<group>
<group>
<field name="last_study_date" readonly="1"/>
<field name="score" readonly="1"/>
</group>
</group>
<group string="备注">
<field name="note" readonly="1" nolabel="1"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- ===================== 学习进展:搜索 ===================== -->
<record id="yuthon_school_progress_view_search" model="ir.ui.view">
<field name="name">yuthon.school.progress.search</field>
<field name="model">yuthon.school.progress</field>
<field name="arch" type="xml">
<search>
<field name="course_id" string="课程"/>
<field name="student_id" string="学员"/>
<field name="teacher_id" string="任课教师"/>
<filter name="not_started" string="未开始"
domain="[('status', '=', 'not_started')]"/>
<filter name="in_progress" string="进行中"
domain="[('status', '=', 'in_progress')]"/>
<filter name="completed" string="已完成"
domain="[('status', '=', 'completed')]"/>
<group expand="0" string="分组">
<filter name="group_course" string="课程"
context="{'group_by': 'course_id'}"/>
<filter name="group_status" string="状态"
context="{'group_by': 'status'}"/>
</group>
</search>
</field>
</record>
<!-- ===================== 学习进展:看板 ===================== -->
<record id="yuthon_school_progress_view_kanban" model="ir.ui.view">
<field name="name">yuthon.school.progress.kanban</field>
<field name="model">yuthon.school.progress</field>
<field name="arch" type="xml">
<kanban default_group_by="status" class="o_kanban_mobile">
<field name="course_id"/>
<field name="student_id"/>
<field name="teacher_id"/>
<field name="progress_rate"/>
<field name="status"/>
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_click" style="padding:12px 14px;">
<div class="o_kanban_record_headings">
<strong><field name="course_id"/></strong>
</div>
<div class="text-muted small mb-1" groups="college.group_teacher">
学员:<field name="student_id"/>
</div>
<div class="small mb-1">
章节:<field name="chapter_done"/> / <field name="chapter_total"/>
· 进度:<field name="progress_rate"/>% · 得分:<field name="score"/>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- ===================== 学习进展:学生专用(仅看自己选课且已发布课程) ===================== -->
<!-- 注意:必须放在上方所有视图定义之后,否则加载时 ref() 找不到尚未注册的视图 xml_id -->
<record id="action_yuthon_school_progress_student" model="ir.actions.act_window">
<field name="name">学习进展</field>
<field name="res_model">yuthon.school.progress</field>
<field name="view_mode">kanban,list,form</field>
<field name="domain">['&amp;', ('student_id.user_id', '=', uid), ('course_id.state', '=', 'published')]</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'kanban', 'view_id': ref('yuthon_school_progress_view_kanban')}),
(0, 0, {'view_mode': 'list', 'view_id': ref('yuthon_school_progress_view_list')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_school_progress_view_form_student')})]"/>
</record>
</odoo>