163 lines
7.5 KiB
XML
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">
|
|
<list 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"/>
|
|
</list>
|
|
</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_list" model="ir.ui.view">
|
|
<field name="name">ai.user.profile.list</field>
|
|
<field name="model">ai.user.profile</field>
|
|
<field name="arch" type="xml">
|
|
<list 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="调用次数"/>
|
|
</list>
|
|
</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_17.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">list,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_system_config" action="action_all_ai_profiles" sequence="5"
|
|
groups="yuthon_ai_agent_17.group_ai_agent_admin"/>
|
|
|
|
<!-- 旧 xmlid 保留但隐藏(兼容升级) -->
|
|
<menuitem id="menu_user_management" name="用户管理"
|
|
parent="menu_ai_root" sequence="99"
|
|
groups="yuthon_ai_agent_17.group_ai_agent_admin" active="0"/>
|
|
|
|
</odoo>
|