391 lines
19 KiB
XML
391 lines
19 KiB
XML
<odoo>
|
||
<!-- ===================== 产品介绍(顶级菜单,置顶,位于「我的实训」上方) ===================== -->
|
||
<!-- 在当前页面的内容区以表单形式打开预置记录 about_page_product,
|
||
其 content 富文本字段即为 H5 页面内容(介绍本教育产品本身)。 -->
|
||
<record id="action_yuthon_product_intro" model="ir.actions.act_window">
|
||
<field name="name">产品介绍</field>
|
||
<field name="res_model">yuthon.about.page</field>
|
||
<field name="view_mode">form</field>
|
||
<field name="res_id" ref="about_page_product"/>
|
||
<field name="target">current</field>
|
||
</record>
|
||
<menuitem id="menu_yuthon_product_intro"
|
||
name="产品介绍"
|
||
web_icon="college,static/src/img/product_intro.png"
|
||
sequence="0"
|
||
action="action_yuthon_product_intro"
|
||
groups="college.group_teacher,college.group_student,base.group_system"/>
|
||
|
||
<!-- ===================== 我的实训(顶级菜单,置顶) ===================== -->
|
||
<menuitem id="menu_yuthon_training"
|
||
name="我的实训"
|
||
web_icon="college,static/src/img/training.png"
|
||
sequence="1"
|
||
action="action_yuthon_school_training"
|
||
groups="college.group_teacher,college.group_student,base.group_system"/>
|
||
|
||
<!-- ===================== 我的课程(统一入口,按用户角色路由) ===================== -->
|
||
<!-- 老师 / 管理员 → action_yuthon_school_course_my(老师端我的课程) -->
|
||
<!-- 学生 → action_yuthon_school_my_course_student(学生端我的课程) -->
|
||
<!-- 这样管理员只看到一个「我的课程」菜单,避免与学生端重复 -->
|
||
<record id="action_yuthon_school_course_router" model="ir.actions.server">
|
||
<field name="name">我的课程(按角色路由)</field>
|
||
<field name="model_id" search="[('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_course_my').sudo().read()[0]
|
||
else:
|
||
action = env.ref('college.action_yuthon_school_my_course_student').sudo().read()[0]
|
||
]]></field>
|
||
</record>
|
||
|
||
<!-- ===================== 我的课程(学生端父菜单;老师/管理员入口见下方 menu_yuthon_course_my_teacher) ===================== -->
|
||
<menuitem id="menu_yuthon_course_my"
|
||
name="我的课程"
|
||
web_icon="college,static/src/img/my_course.png"
|
||
sequence="3"
|
||
groups="college.group_student"/>
|
||
|
||
<!-- 老师/管理员端的「我的课程」入口(我教的课程),与学生端父菜单分离,避免角色路由歧义 -->
|
||
<menuitem id="menu_yuthon_course_my_teacher"
|
||
name="我的课程"
|
||
web_icon="college,static/src/img/my_course.png"
|
||
action="action_yuthon_school_course_my"
|
||
sequence="4"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
|
||
<!-- ===================== 隐藏 Odoo 默认「讨论」菜单 ===================== -->
|
||
<record id="mail.menu_root_discuss" model="ir.ui.menu">
|
||
<field name="active" eval="False"/>
|
||
</record>
|
||
|
||
<!-- ===================== 「设置」菜单:仅超级管理员可见 ===================== -->
|
||
<record id="base.menu_management" model="ir.ui.menu">
|
||
<field name="active" eval="True"/>
|
||
<field name="groups_id" eval="[(6, 0, [ref('base.group_system')])]"/>
|
||
</record>
|
||
|
||
<!-- ===================== 原生「应用」菜单:师生可见 =====================
|
||
让老师、学生都能在左侧看到 Odoo 默认的「应用」菜单(模块列表)。
|
||
由于「应用」挂在「设置」下,这里单独给 base.menu_apps 追加
|
||
teacher/student 组,菜单会脱离隐藏的父菜单提升到顶层。
|
||
权限区分:
|
||
- 老师:group_teacher 隐含 base.group_erp_manager,可安装/升级/卸载模块
|
||
(模块按钮已放开到 group_erp_manager),但看不到「设置」菜单;
|
||
- 学生:仅 group_user,只读浏览,无法安装/升级/卸载。 -->
|
||
<record id="base.menu_apps" model="ir.ui.menu">
|
||
<field name="groups_id" eval="[
|
||
(6, 0, [
|
||
ref('base.group_system'),
|
||
ref('college.group_teacher'),
|
||
ref('college.group_student'),
|
||
])
|
||
]"/>
|
||
</record>
|
||
|
||
<!-- ===================== 隐藏学生的「请求访问」按钮 =====================
|
||
base_install_request 给所有非系统管理员都加了「Request Access」按钮,
|
||
学生点了会发起安装申请。这里把该按钮限定为仅管理员可见,让学生彻底只读。 -->
|
||
<record id="view_module_kanban_hide_request_access" model="ir.ui.view">
|
||
<field name="name">ir.module.module.kanban.hide.request.access</field>
|
||
<field name="model">ir.module.module</field>
|
||
<field name="inherit_id" ref="base_install_request.ir_module_module_view_kanban"/>
|
||
<field name="arch" type="xml">
|
||
<xpath expr="//button[@name='action_open_install_request']" position="attributes">
|
||
<attribute name="groups">base.group_system</attribute>
|
||
</xpath>
|
||
</field>
|
||
</record>
|
||
|
||
<!-- ===================== 模块按钮放开给「访问权限」组 =====================
|
||
原生模块安装/升级/卸载按钮 groups="base.group_system",导致只有设置组
|
||
(管理员)可见。为了让老师(group_erp_manager)能安装模块、又不用进
|
||
「设置」,把这些按钮的 groups 从 group_system 改为 group_erp_manager。
|
||
老师属于 group_erp_manager,可见可点;学生只属于 group_user,仍不可见。 -->
|
||
<!-- 看板视图(应用列表卡片) -->
|
||
<record id="view_module_kanban_teacher_install" model="ir.ui.view">
|
||
<field name="name">ir.module.module.kanban.teacher.install</field>
|
||
<field name="model">ir.module.module</field>
|
||
<field name="inherit_id" ref="base.module_view_kanban"/>
|
||
<field name="arch" type="xml">
|
||
<xpath expr="//button[@name='button_immediate_install']" position="attributes">
|
||
<attribute name="groups">base.group_erp_manager</attribute>
|
||
</xpath>
|
||
<xpath expr="//a[@name='button_immediate_upgrade']" position="attributes">
|
||
<attribute name="groups">base.group_erp_manager</attribute>
|
||
</xpath>
|
||
<xpath expr="//a[@name='button_uninstall_wizard']" position="attributes">
|
||
<attribute name="groups">base.group_erp_manager</attribute>
|
||
</xpath>
|
||
<xpath expr="//button[@name='button_uninstall_cancel']" position="attributes">
|
||
<attribute name="groups">base.group_erp_manager</attribute>
|
||
</xpath>
|
||
<xpath expr="//button[@name='button_install_cancel']" position="attributes">
|
||
<attribute name="groups">base.group_erp_manager</attribute>
|
||
</xpath>
|
||
</field>
|
||
</record>
|
||
|
||
<!-- 表单视图(模块详情页) -->
|
||
<record id="view_module_form_teacher_install" model="ir.ui.view">
|
||
<field name="name">ir.module.module.form.teacher.install</field>
|
||
<field name="model">ir.module.module</field>
|
||
<field name="inherit_id" ref="base.module_form"/>
|
||
<field name="arch" type="xml">
|
||
<xpath expr="//button[@name='button_immediate_install']" position="attributes">
|
||
<attribute name="groups">base.group_erp_manager</attribute>
|
||
</xpath>
|
||
<xpath expr="//button[@name='button_immediate_upgrade']" position="attributes">
|
||
<attribute name="groups">base.group_erp_manager</attribute>
|
||
</xpath>
|
||
<xpath expr="//button[@name='button_uninstall_wizard']" position="attributes">
|
||
<attribute name="groups">base.group_erp_manager</attribute>
|
||
</xpath>
|
||
<xpath expr="//button[@name='button_uninstall_cancel']" position="attributes">
|
||
<attribute name="groups">base.group_erp_manager</attribute>
|
||
</xpath>
|
||
<xpath expr="//button[@name='button_upgrade_cancel']" position="attributes">
|
||
<attribute name="groups">base.group_erp_manager</attribute>
|
||
</xpath>
|
||
<xpath expr="//button[@name='button_install_cancel']" position="attributes">
|
||
<attribute name="groups">base.group_erp_manager</attribute>
|
||
</xpath>
|
||
</field>
|
||
</record>
|
||
|
||
<!-- ===================== 课程管理(直接指向全部课程的 action,不再有子菜单) ===================== -->
|
||
<menuitem id="menu_yuthon_course_root"
|
||
name="课程管理"
|
||
web_icon="college,static/src/img/Course Management.png"
|
||
action="action_yuthon_school_course_all"
|
||
sequence="10"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
|
||
<!-- ===================== 考试(与课程管理同级,顶级菜单,无 parent 才能带 web_icon) ===================== -->
|
||
<menuitem id="menu_yuthon_exam_root"
|
||
name="考试"
|
||
web_icon="college,static/src/img/exam.png"
|
||
sequence="15"/>
|
||
<menuitem id="menu_yuthon_exam_question"
|
||
name="题库"
|
||
parent="menu_yuthon_exam_root"
|
||
action="action_yuthon_school_exam_question"
|
||
sequence="10"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
<menuitem id="menu_yuthon_exam_manage"
|
||
name="考试管理"
|
||
parent="menu_yuthon_exam_root"
|
||
action="action_yuthon_school_exam"
|
||
sequence="20"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
<menuitem id="menu_yuthon_exam_grade"
|
||
name="评阅试卷"
|
||
parent="menu_yuthon_exam_root"
|
||
action="action_yuthon_school_exam_paper_grade"
|
||
sequence="30"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
<menuitem id="menu_yuthon_exam_result"
|
||
name="考试结果"
|
||
parent="menu_yuthon_exam_root"
|
||
action="action_yuthon_school_exam_result"
|
||
sequence="40"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
<menuitem id="menu_yuthon_exam_my"
|
||
name="我的考试"
|
||
parent="menu_yuthon_exam_root"
|
||
action="action_yuthon_school_exam_paper_student"
|
||
sequence="50"
|
||
groups="college.group_student"/>
|
||
|
||
<!-- 课程学习:原「我的学习」迁移为学生端「我的课程」的子菜单 -->
|
||
<menuitem id="menu_yuthon_course_study"
|
||
name="课程学习"
|
||
parent="menu_yuthon_course_my"
|
||
action="action_yuthon_school_course_study"
|
||
sequence="10"
|
||
groups="college.group_student"/>
|
||
|
||
<!-- 课程管理:原学生端「我的课程」迁移为学生端「我的课程」的子菜单 -->
|
||
<menuitem id="menu_yuthon_course_my_student"
|
||
name="课程管理"
|
||
parent="menu_yuthon_course_my"
|
||
action="action_yuthon_school_my_course_student"
|
||
sequence="20"
|
||
groups="college.group_student"/>
|
||
|
||
<!-- ===================== 班级管理(顶级菜单,仅老师/管理员;下含「师生管理」+「学习管理」两个分组) ===================== -->
|
||
<menuitem id="menu_yuthon_org_root"
|
||
name="班级管理"
|
||
web_icon="college,static/src/img/organization.png"
|
||
sequence="20"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
|
||
<!-- 师生管理(分组容器,承载班级/老师/学生) -->
|
||
<menuitem id="menu_yuthon_org_staff"
|
||
name="师生管理"
|
||
parent="menu_yuthon_org_root"
|
||
sequence="10"/>
|
||
<menuitem id="menu_yuthon_class"
|
||
name="班级"
|
||
parent="menu_yuthon_org_staff"
|
||
action="action_yuthon_school_class"
|
||
sequence="10"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
<menuitem id="menu_yuthon_teacher"
|
||
name="老师"
|
||
parent="menu_yuthon_org_staff"
|
||
action="action_yuthon_school_teacher"
|
||
sequence="20"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
<menuitem id="menu_yuthon_student"
|
||
name="学生"
|
||
parent="menu_yuthon_org_staff"
|
||
action="action_yuthon_school_student"
|
||
sequence="30"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
|
||
<!-- 学习管理(原顶级菜单迁移至此,与「师生管理」并列;父级仅老师/管理员可见) -->
|
||
<menuitem id="menu_yuthon_education_root"
|
||
name="学习管理"
|
||
parent="menu_yuthon_org_root"
|
||
sequence="20"/>
|
||
<!-- 学习进展:仅老师/管理员(学生侧改由顶层「我的作业」承载) -->
|
||
<menuitem id="menu_yuthon_progress"
|
||
name="学习进展"
|
||
parent="menu_yuthon_education_root"
|
||
action="action_yuthon_school_progress_router"
|
||
sequence="20"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
|
||
<!-- 作业习题 -->
|
||
<menuitem id="menu_yuthon_homework"
|
||
name="作业习题"
|
||
parent="menu_yuthon_education_root"
|
||
sequence="30"/>
|
||
<!-- 作业布置:仅老师 -->
|
||
<menuitem id="menu_yuthon_homework_assignment"
|
||
name="作业布置"
|
||
parent="menu_yuthon_homework"
|
||
action="action_yuthon_school_assignment"
|
||
sequence="10"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
<!-- 作业提交:仅老师(原学生入口迁移到顶层「我的作业」) -->
|
||
<menuitem id="menu_yuthon_homework_submit"
|
||
name="作业提交"
|
||
parent="menu_yuthon_homework"
|
||
action="action_yuthon_school_my_submission"
|
||
sequence="20"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
<!-- 作业批改:仅老师(无提交入口) -->
|
||
<menuitem id="menu_yuthon_homework_grade"
|
||
name="作业批改"
|
||
parent="menu_yuthon_homework"
|
||
action="action_yuthon_school_assignment_submission"
|
||
sequence="30"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
|
||
<menuitem id="menu_yuthon_class_notes"
|
||
name="随堂笔记"
|
||
parent="menu_yuthon_homework"
|
||
action="action_yuthon_school_class_notes"
|
||
sequence="40"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
|
||
<!-- ===================== 我的作业(顶级菜单,仅学生可见;承载从「学习管理」迁移出的学生侧入口,保证学生不断流) ===================== -->
|
||
<menuitem id="menu_yuthon_student_homework"
|
||
name="我的作业"
|
||
web_icon="college,static/src/img/education.png"
|
||
sequence="6"
|
||
groups="college.group_student"/>
|
||
<menuitem id="menu_yuthon_student_homework_submit"
|
||
name="作业提交"
|
||
parent="menu_yuthon_student_homework"
|
||
action="action_yuthon_school_my_submission"
|
||
sequence="10"
|
||
groups="college.group_student"/>
|
||
<menuitem id="menu_yuthon_student_class_notes"
|
||
name="随堂笔记"
|
||
parent="menu_yuthon_student_homework"
|
||
action="action_yuthon_school_class_notes"
|
||
sequence="20"
|
||
groups="college.group_student"/>
|
||
<menuitem id="menu_yuthon_student_progress"
|
||
name="学习进展"
|
||
parent="menu_yuthon_student_homework"
|
||
action="action_yuthon_school_progress_router"
|
||
sequence="30"
|
||
groups="college.group_student"/>
|
||
|
||
<!-- ===================== 关于系统说明 ===================== -->
|
||
<!-- 系统说明:打开预置记录 about_page_system -->
|
||
<record id="action_yuthon_about_system" model="ir.actions.act_window">
|
||
<field name="name">系统说明</field>
|
||
<field name="res_model">yuthon.about.page</field>
|
||
<field name="view_mode">form</field>
|
||
<field name="res_id" ref="about_page_system"/>
|
||
<field name="target">current</field>
|
||
</record>
|
||
<!-- 操作手册:打开预置记录 about_page_operation -->
|
||
<record id="action_yuthon_about_operation" model="ir.actions.act_window">
|
||
<field name="name">操作手册</field>
|
||
<field name="res_model">yuthon.about.page</field>
|
||
<field name="view_mode">form</field>
|
||
<field name="res_id" ref="about_page_operation"/>
|
||
<field name="target">current</field>
|
||
</record>
|
||
|
||
<!-- 课程导入动作(关联 yuthon.school.course.import.wizard) -->
|
||
<record id="action_yuthon_school_course_import_wizard" model="ir.actions.act_window">
|
||
<field name="name">课程导入</field>
|
||
<field name="res_model">yuthon.school.course.import.wizard</field>
|
||
<field name="view_mode">form</field>
|
||
<field name="target">new</field>
|
||
</record>
|
||
|
||
<!-- ===================== 关于(顶级菜单,排在最后) ===================== -->
|
||
<menuitem id="menu_yuthon_about"
|
||
name="关于"
|
||
web_icon="college,static/src/img/about.png"
|
||
sequence="99"
|
||
groups="college.group_teacher,college.group_student,base.group_system"/>
|
||
<menuitem id="menu_yuthon_about_system"
|
||
name="系统说明"
|
||
parent="menu_yuthon_about"
|
||
action="action_yuthon_about_system"
|
||
sequence="10"/>
|
||
<menuitem id="menu_yuthon_about_operation"
|
||
name="操作手册"
|
||
parent="menu_yuthon_about"
|
||
action="action_yuthon_about_operation"
|
||
sequence="20"/>
|
||
<menuitem id="menu_yuthon_import_wizard"
|
||
name="导入师生"
|
||
parent="menu_yuthon_about"
|
||
action="action_yuthon_school_import_wizard"
|
||
sequence="30"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
<menuitem id="menu_yuthon_course_import_wizard"
|
||
name="课程导入"
|
||
parent="menu_yuthon_about"
|
||
action="action_yuthon_school_course_import_wizard"
|
||
sequence="40"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
|
||
<!-- 题库导入:打开批量导入向导弹窗(按题型下载模板 → 上传文件 → 写入题库) -->
|
||
<record id="action_yuthon_about_question_import" model="ir.actions.act_window">
|
||
<field name="name">题库导入</field>
|
||
<field name="res_model">yuthon.school.question.import.wizard</field>
|
||
<field name="view_mode">form</field>
|
||
<field name="target">new</field>
|
||
<field name="context">{}</field>
|
||
<field name="res_id" eval="False"/>
|
||
</record>
|
||
<menuitem id="menu_yuthon_about_question_import"
|
||
name="题库导入"
|
||
parent="menu_yuthon_about"
|
||
action="action_yuthon_about_question_import"
|
||
sequence="50"
|
||
groups="college.group_teacher,base.group_system"/>
|
||
</odoo>
|