完善教育 #19
Binary file not shown.
|
After Width: | Height: | Size: 3.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
@@ -104,7 +104,6 @@
|
||||
</list>
|
||||
</field>
|
||||
</sheet>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
@@ -116,12 +115,25 @@
|
||||
<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')}),
|
||||
(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>
|
||||
|
||||
+204
-13
@@ -105,6 +105,63 @@
|
||||
</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"/>
|
||||
</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>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
@@ -157,25 +214,159 @@
|
||||
<field name="state"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_global_click o_kanban_record_has_image_fill"
|
||||
style="padding:12px 14px;">
|
||||
<div class="o_kanban_record_top mb-2">
|
||||
<div class="o_kanban_record_headings">
|
||||
<strong><field name="name"/></strong>
|
||||
<div class="oe_kanban_global_click"
|
||||
style="padding:0; border-radius:8px; overflow:hidden; box-shadow:0 1px 4px rgba(59,130,246,.15); border:1px solid rgba(59,130,246,.1);">
|
||||
<!-- 顶帽:蓝调 + 课程编号 -->
|
||||
<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 bg-primary text-white"
|
||||
style="font-size:11px;">
|
||||
<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>
|
||||
</div>
|
||||
<div class="text-muted small mb-1">
|
||||
<field name="college"/> · <field name="semester"/>
|
||||
<!-- 主体 -->
|
||||
<div style="padding:10px 14px; background:#fff;">
|
||||
<div style="font-size:14px; font-weight:600; color:#1E3A5F; margin-bottom:6px;">
|
||||
<field name="name"/>
|
||||
</div>
|
||||
<div class="text-muted small mb-1">
|
||||
<i class="fa fa-building"/> <field name="college"/> · <field name="semester"/>
|
||||
</div>
|
||||
<div class="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 style="background:#EFF6FF; color:#1D4ED8; padding:3px 10px; border-radius:12px; font-size:11px;">
|
||||
<i class="fa fa-clock-o"/> <field name="hours"/> 课时
|
||||
</span>
|
||||
<span style="background:#F0FDF4; color:#15803D; padding:3px 10px; border-radius:12px; font-size:11px;">
|
||||
<i class="fa fa-users"/> <field name="student_count"/> 学员
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="small mb-1">
|
||||
任课教师:<field name="teacher_id"/>
|
||||
</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="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"
|
||||
style="padding:0; border-radius:8px; overflow:hidden; box-shadow:0 1px 3px rgba(0,0,0,.08);">
|
||||
<!-- 顶帽:彩色条 + 课程编号 -->
|
||||
<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="small mb-1">
|
||||
课时:<field name="hours"/> · 选课学员:<field name="student_count"/> 人
|
||||
<!-- 主体 -->
|
||||
<div style="padding:10px 14px; background:#fff;">
|
||||
<div class="mb-2">
|
||||
<span class="badge text-white"
|
||||
style="background:#36D1DC; font-size:11px;">
|
||||
<field name="course_type"/>
|
||||
</span>
|
||||
<t t-if="record.is_public.raw_value">
|
||||
<span class="badge text-white ml-1"
|
||||
style="background:#43e97b; font-size:11px;">公开</span>
|
||||
</t>
|
||||
</div>
|
||||
<div class="text-muted small mb-1">
|
||||
<field name="college"/>
|
||||
</div>
|
||||
<div class="small mb-1">
|
||||
<i class="fa fa-user-circle-o text-muted"/> <field name="teacher_id" widget="many2one_avatar_user"/>
|
||||
</div>
|
||||
<div class="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="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"
|
||||
style="padding:0; border-radius:10px; overflow:hidden; box-shadow:0 2px 6px rgba(255,140,0,.15); border:1px solid rgba(255,140,0,.12);">
|
||||
<!-- 顶帽:橙色渐变 + 课程类型徽章 -->
|
||||
<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 style="background:rgba(255,255,255,.92); color:#FF5E62; padding:2px 8px; border-radius:10px; font-size:10px; font-weight:600;">
|
||||
<field name="course_type"/>
|
||||
</span>
|
||||
</div>
|
||||
<!-- 主体 -->
|
||||
<div style="padding:12px 14px; background:#fff;">
|
||||
<div style="font-size:14px; font-weight:600; color:#333; margin-bottom:8px; min-height:36px;">
|
||||
<field name="name"/>
|
||||
</div>
|
||||
<div class="text-muted small mb-2">
|
||||
<i class="fa fa-calendar"/> <field name="semester"/>
|
||||
</div>
|
||||
<div class="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 style="background:#FFF3E0; color:#E65100; padding:3px 10px; border-radius:12px; font-size:11px;">
|
||||
<i class="fa fa-clock-o"/> <field name="hours"/> 课时
|
||||
</span>
|
||||
<span style="background:#E3F2FD; color:#1565C0; padding:3px 10px; border-radius:12px; font-size:11px;">
|
||||
<i class="fa fa-list"/> <field name="chapter_count"/> 章
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
@@ -156,25 +156,32 @@
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_global_click"
|
||||
style="padding:12px 14px;">
|
||||
<div class="o_kanban_record_top mb-2">
|
||||
<div class="o_kanban_record_headings">
|
||||
<strong><field name="assignment_id"/></strong>
|
||||
style="padding:0; border-radius:8px; overflow:hidden; box-shadow:0 1px 4px rgba(245,101,101,.15); border:1px solid rgba(245,101,101,.12);">
|
||||
<!-- 顶帽:珊瑚渐变 + 得分 -->
|
||||
<div style="background:linear-gradient(135deg,#F56565,#F6AD55); padding:10px 14px; display:flex; align-items:center; justify-content:space-between;">
|
||||
<div style="color:#fff; font-size:13px; font-weight:600; max-width:70%; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;">
|
||||
<field name="assignment_id"/>
|
||||
</div>
|
||||
<span style="background:rgba(255,255,255,.9); color:#C53030; padding:2px 10px; border-radius:10px; font-size:12px; font-weight:700;">
|
||||
<field name="score"/> 分
|
||||
</span>
|
||||
</div>
|
||||
<div class="small mb-1">
|
||||
作业名:<field name="assignment_id"/>
|
||||
</div>
|
||||
<div class="small mb-1" groups="college.group_teacher">
|
||||
学员:<field name="student_id"/>
|
||||
</div>
|
||||
<div class="small mb-1">
|
||||
状态:<field name="state"/>
|
||||
· 得分:<field name="score"/>
|
||||
</div>
|
||||
<div class="text-muted small mb-1">
|
||||
截止:<field name="due_date"/>
|
||||
· 提交:<field name="submit_time"/>
|
||||
<!-- 主体 -->
|
||||
<div style="padding:10px 14px; background:#fff;">
|
||||
<div class="small mb-2" groups="college.group_teacher">
|
||||
<i class="fa fa-user text-muted"/> <field name="student_id"/>
|
||||
</div>
|
||||
<div class="mb-2" style="display:flex; gap:6px; flex-wrap:wrap;">
|
||||
<span style="background:#FED7D7; color:#C53030; padding:2px 8px; border-radius:8px; font-size:10px; font-weight:600;">
|
||||
<field name="state"/>
|
||||
</span>
|
||||
</div>
|
||||
<div class="small text-muted" style="line-height:1.5;">
|
||||
<div><i class="fa fa-calendar-check-o"/> 截止:<field name="due_date"/></div>
|
||||
<t t-if="record.submit_time.raw_value">
|
||||
<div><i class="fa fa-clock-o"/> 提交:<field name="submit_time"/></div>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
+11
-3
@@ -46,13 +46,21 @@
|
||||
sequence="20"
|
||||
groups="college.group_teacher,base.group_system"/>
|
||||
|
||||
<!-- 课程学习:学生端专用入口(左侧章节目录 + 右侧视频/资料) -->
|
||||
<!-- 我的课程:学生端专用(老师完整表单 + Chatter,只看自己选课) -->
|
||||
<menuitem id="menu_yuthon_my_course"
|
||||
name="我的课程"
|
||||
web_icon="college,static/src/img/my_course.png"
|
||||
action="action_yuthon_school_my_course_student"
|
||||
sequence="18"
|
||||
groups="college.group_student"/>
|
||||
|
||||
<!-- 课程学习:学生端专用(简单表单 + 去学习按钮) -->
|
||||
<menuitem id="menu_yuthon_course_study"
|
||||
name="课程学习"
|
||||
web_icon="college,static/src/img/take courses.png"
|
||||
web_icon="college,static/src/img/course_study.png"
|
||||
action="action_yuthon_school_course_study"
|
||||
sequence="19"
|
||||
groups="college.group_student,base.group_system"/>
|
||||
groups="college.group_student"/>
|
||||
|
||||
<!-- ===================== 师生管理(顶级菜单,与「教育」平级,仅老师/管理员) ===================== -->
|
||||
<menuitem id="menu_yuthon_org_root"
|
||||
|
||||
@@ -143,20 +143,37 @@ else:
|
||||
<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" style="padding:12px 14px;">
|
||||
<div class="o_kanban_record_headings">
|
||||
<strong><field name="course_id"/></strong>
|
||||
<div class="oe_kanban_global_click"
|
||||
style="padding:0; border-radius:8px; overflow:hidden; box-shadow:0 1px 4px rgba(67,233,123,.15); border:1px solid rgba(67,233,123,.12);">
|
||||
<div style="background:linear-gradient(135deg,#2D6A4F,#52B788); padding:10px 14px; display:flex; align-items:center; justify-content:space-between;">
|
||||
<div style="color:#fff; font-size:14px; font-weight:600;">
|
||||
<field name="course_id"/>
|
||||
</div>
|
||||
<span style="background:rgba(255,255,255,.92); color:#1B4332; padding:2px 10px; border-radius:10px; font-size:12px; font-weight:700;">
|
||||
<field name="score"/> 分
|
||||
</span>
|
||||
</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 style="padding:10px 14px; background:#fff;">
|
||||
<div class="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="small text-muted">章节 <field name="chapter_done"/>/<field name="chapter_total"/></span>
|
||||
<span style="flex:1;"/>
|
||||
<span class="small" style="color:#1B4332; font-weight:600;"><field name="progress_rate"/>%</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="small text-muted">
|
||||
<i class="fa fa-user-circle"/> <field name="teacher_id"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
@@ -4,12 +4,33 @@
|
||||
<field name="name">yuthon.school.training.kanban</field>
|
||||
<field name="model">yuthon.school.training</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<kanban default_group_by="name" class="o_kanban_mobile">
|
||||
<field name="name"/>
|
||||
<field name="note"/>
|
||||
<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="name"/></strong>
|
||||
<div class="oe_kanban_global_click"
|
||||
style="padding:0; border-radius:10px; overflow:hidden; box-shadow:0 2px 8px rgba(139,92,246,.18); border:1px solid rgba(139,92,246,.1);">
|
||||
<!-- 顶帽:紫色渐变 -->
|
||||
<div style="background:linear-gradient(135deg,#8B5CF6,#D946EF); padding:14px; text-align:center;">
|
||||
<div style="font-size:28px; opacity:.25; color:#fff; margin-bottom:4px;">🏋️</div>
|
||||
<div style="color:#fff; font-size:16px; font-weight:700;">
|
||||
<field name="name"/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 主体 -->
|
||||
<div style="padding:12px 14px; background:#fff;">
|
||||
<div style="display:flex; gap:6px; flex-wrap:wrap;">
|
||||
<span style="background:#F3E8FF; color:#7C3AED; padding:4px 10px; border-radius:10px; font-size:11px;">
|
||||
<i class="fa fa-graduation-cap"/> 实训中
|
||||
</span>
|
||||
<span style="background:#FDF2F8; color:#BE185D; padding:4px 10px; border-radius:10px; font-size:11px;">
|
||||
<i class="fa fa-clock-o"/> 进行中
|
||||
</span>
|
||||
</div>
|
||||
<div class="text-muted small mt-2" style="line-height:1.4; max-height:40px; overflow:hidden;">
|
||||
<field name="note"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
Reference in New Issue
Block a user