198 lines
10 KiB
XML
198 lines
10 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="college-course-kanban college-kanban-progress o_kanban_mobile">
|
|
<field name="course_id"/>
|
|
<field name="student_id"/>
|
|
<field name="teacher_id"/>
|
|
<field name="chapter_done"/>
|
|
<field name="chapter_total"/>
|
|
<field name="progress_rate"/>
|
|
<field name="score"/>
|
|
<field name="status"/>
|
|
<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,#0e7490,#22d3ee); padding:10px 14px; display:flex; align-items:center; justify-content:space-between;">
|
|
<div class="college-kanban-title" style="color:#fff; font-size:14px;">
|
|
<field name="course_id"/>
|
|
</div>
|
|
<span class="college-kanban-badge college-kanban-badge-score">
|
|
<field name="score"/> 分
|
|
</span>
|
|
</div>
|
|
<div class="college-kanban-body" style="padding:10px 14px;">
|
|
<div class="college-kanban-meta small mb-2" groups="college.group_teacher">
|
|
<i class="fa fa-user text-muted"/> <field name="student_id"/>
|
|
</div>
|
|
<div class="mb-2">
|
|
<div style="display:flex; align-items:center; gap:8px;">
|
|
<span class="college-kanban-meta small text-muted">章节 <field name="chapter_done"/>/<field name="chapter_total"/></span>
|
|
<span style="flex:1;"/>
|
|
<span class="college-kanban-progress-rate small"><field name="progress_rate"/>%</span>
|
|
</div>
|
|
</div>
|
|
<div class="college-kanban-meta small text-muted">
|
|
<i class="fa fa-user-circle"/> <field name="teacher_id"/>
|
|
</div>
|
|
</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">['&', ('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>
|