Files
gzth/yuthon_ai_agent/views/ai_user_profile_views.xml
2026-06-12 18:32:36 +08:00

163 lines
7.5 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- ============================================ -->
<!-- 我的 AI - 用户画像表单 -->
<!-- ============================================ -->
<record id="view_ai_user_profile_form" model="ir.ui.view">
<field name="name">ai.user.profile.form</field>
<field name="model">ai.user.profile</field>
<field name="arch" type="xml">
<form string="我的 AI">
<header>
<button name="action_start_chat" type="object"
string="发起聊天" class="btn-primary" icon="fa-comments"/>
</header>
<sheet>
<!-- Stat Buttons -->
<div class="oe_button_box" name="button_box">
<button name="action_view_conversations" type="object"
class="oe_stat_button" icon="fa-comments">
<div class="o_stat_info">
<field name="conversation_count" class="o_stat_value"/>
<span class="o_stat_text">对话</span>
</div>
</button>
<button name="action_view_token_usage" type="object"
class="oe_stat_button" icon="fa-bar-chart">
<div class="o_stat_info">
<field name="total_tokens_used" class="o_stat_value"/>
<span class="o_stat_text">Token</span>
</div>
</button>
<button name="action_view_token_usage" type="object"
class="oe_stat_button" icon="fa-bolt">
<div class="o_stat_info">
<field name="token_call_count" class="o_stat_value"/>
<span class="o_stat_text">调用</span>
</div>
</button>
</div>
<div class="oe_title">
<h1>
<field name="nickname" placeholder="AI 如何称呼你?"/>
</h1>
<h3 class="text-muted">
<field name="user_id" readonly="1" options="{'no_open': True}"/>
</h3>
</div>
<group string="基础信息">
<group>
<field name="employee_id"
options="{'no_create': True}"
domain="[('user_id', '!=', False)]"/>
<field name="role" placeholder="项目经理 / 开发工程师 ..."/>
<field name="department" placeholder="技术部 / 销售部 ..."/>
</group>
<group>
<field name="style_preference" widget="radio"/>
</group>
</group>
<group string="工作与指令">
<field name="work_scope" placeholder="简述你主要负责的工作,帮助 AI 更好理解你的意图..."
widget="text"/>
<field name="custom_instruction"
placeholder="给 AI 的额外指令,如:回答不超过 200 字、优先用表格展示..."
widget="text"/>
</group>
<notebook>
<page string="AI 记忆" name="memories">
<div class="alert alert-info mb-3" role="alert">
AI 在对话中会自动记住你的偏好和工作习惯。你也可以手动添加或删除记忆条目。
</div>
<field name="memory_ids">
<tree editable="bottom">
<field name="category"/>
<field name="content"/>
<field name="source" readonly="1"/>
<field name="write_date" string="更新时间" readonly="1"/>
<field name="active" widget="boolean_toggle"/>
</tree>
</field>
<div class="text-muted mt-2">
共 <field name="memory_count" class="oe_inline"/> 条记忆
</div>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- 列表视图(管理员看所有人) -->
<record id="view_ai_user_profile_tree" model="ir.ui.view">
<field name="name">ai.user.profile.tree</field>
<field name="model">ai.user.profile</field>
<field name="arch" type="xml">
<tree string="用户列表">
<field name="user_id"/>
<field name="employee_id"/>
<field name="nickname"/>
<field name="role"/>
<field name="department"/>
<field name="style_preference"/>
<field name="memory_count"/>
<field name="total_tokens_used" string="Token 用量"/>
<field name="token_call_count" string="调用次数"/>
</tree>
</field>
</record>
<!-- ============================================ -->
<!-- Actions -->
<!-- ============================================ -->
<!-- 我的 AI(普通用户 → 自动跳转自己的画像表单) -->
<record id="action_my_ai_profile" model="ir.actions.server">
<field name="name">我的 AI</field>
<field name="model_id" ref="model_ai_user_profile"/>
<field name="state">code</field>
<field name="code">
profile = env['ai.user.profile'].get_or_create()
action = {
'type': 'ir.actions.act_window',
'res_model': 'ai.user.profile',
'res_id': profile.id,
'view_mode': 'form',
'views': [(env.ref('yuthon_ai_agent.view_ai_user_profile_form').id, 'form')],
'target': 'current',
}
</field>
</record>
<!-- 管理员:用户列表 -->
<record id="action_all_ai_profiles" model="ir.actions.act_window">
<field name="name">用户列表</field>
<field name="res_model">ai.user.profile</field>
<field name="view_mode">tree,form</field>
</record>
<!-- ============================================ -->
<!-- 菜单项 -->
<!-- ============================================ -->
<!-- 普通用户:我的 AI(唯一入口) -->
<menuitem id="menu_my_ai" name="我的 AI"
parent="menu_ai_root" action="action_my_ai_profile" sequence="5"/>
<!-- 管理员:用户列表 → 基础配置 -->
<menuitem id="menu_ai_profiles" name="用户列表"
parent="menu_sys_base" action="action_all_ai_profiles" sequence="3"
groups="yuthon_ai_agent.group_ai_agent_admin"/>
<!-- 旧 xmlid 保留但隐藏(兼容升级) -->
<menuitem id="menu_user_management" name="用户管理"
parent="menu_ai_root" sequence="99"
groups="yuthon_ai_agent.group_ai_agent_admin" active="0"/>
</odoo>