zoukankan      html  css  js  c++  java
  • Odoo 12开发之后台视图 – 设计用户界面 ###

    Odoo 12开发之后台视图 – 设计用户界面

    一·菜单项

    # 菜单项形成一个层级结构,最顶层结构
    #   name 是展示在用户界面中的菜单标题
    # 	action 是点击菜单时运行的窗口
    #   parenter 是父级菜单项XML ID
    #   sequence 设置一个数字来在展示菜单项时进行排序. 如sequence="10"
    #   groups 用来都好分割可访问菜单安全组的xml ID列表
    #   web_icon 菜单项的图标
    
    <menuitem id="menu_library_checkout"
            name="Checkout"
            action="action_library_checkout"
            parent="library_app.menu_library" />
    

    二·窗口操作(Window Actions)

    # 通常用于菜单项或视图中的按钮.
    # 窗口操作存储在ir.actions.act_window模型中.
    # 可通过域过滤器过滤出可用的记录,设置默认值以及从上下文属性中过滤
    
    # name 是视图显示的标题
    # res_model是目标模型的标识符
    # view_mode是一个逗号分割的可用视图类型列表
    # target 是设置对话窗口打开方式,如target="new",默认是current
    # context 是视图设置上下文信息. 可设置默认值或者启用过滤器等.context=”{‘default_user_id’: uid}”
    # domain 是对可在视图种浏览的记录强制过滤,domain="[('user_id','=',uid)]"
    # limit  列表视图每页显示的记录数
    # src_model  设置Action所作用的模型,例如src_model=”library.checkout”
    # 
    
        <act_window id="action_library_checkout"
            name="Checkouts"
            res_model="library.checkout"
            view_mode="tree,form,activity,calendar,graph,pivot" />
    

    三·表单视图结构

    业务文档视图
    # 业务应用中记录的很多数据可以按纸质文档那样展示
    # 视图的基本框架:包含 form , header , sheet 和 mail 
    # 	header 状态栏, 
    	sheet主内容 , 
    	底部交流区 也称作chatter,需要继承mail.thread和mail.activity.mixin
    
    <record id="view_form_checkout" model="ir.ui.view">
        <field name="model">library.checkout</field>
        <field name="arch" type="xml">
            <form>
                <header>
                    <!--以下仅供查看效果使用-->
                    <field name="state" widget="statusbar" clickable="True" />
                </header>
                <sheet>
                    ...
                </sheet>
                <div class="oe_chatter">
                    <field name="message_follower_ids" widget="mail_followers" />
                    <field name="activity_ids" widget="mail_activity" />
                    <field name="message_ids" widget="mail_thread" />
                </div>
            </form>
        </field>
    </record>
    
    头部 Header
    头部header 通常用于文档所走过的生命周期或步骤,还包含相关的操作按钮。这些按钮是普通表单按钮,最重要的下一步可以高亮显示。
    
    头部按钮
    <header>
        <field name="state" invisible="True" />
        <button name="button_done"
                string="Return Books"
                attrs="{'invisible':
                       [('state', 'in', ['new', 'done'])]}"
                class="oe_highlight" />
    </header>
    
    # domain 或 attrs 表达式中使用的字段必须在视图中加载,作用于它们的<field>元素。如果字段不对用户可见,则必须以不可见字段元素对其进行加载。
    
    
    #state字段, 相同的效果可以通过states字段属性实现.虽然没有attrs属性灵活,states更为精简
    <button name="button_done"
            type="object"
            string="Returned"
            states="open,cancel"
            class="oe_highlight" />
    
    # attrs和states元素可见功能也可用于其它视图元素
    
    阶段管道
    # 是statusbar组件的stage_id字段的<field>元素
    # 通常状态或者阶段字段是一个many-to-on字段,允许使用者点击,clickable属性变更状态.
    # 也可将状态隐藏折叠,通常命名为fold,然后statusbar组件使用options属性来将这一字段名提供给fold_field
    
    <header>
        <field name="stage_id"
               widget="statusbar"
               clickable="True"
               options="{'fold_field': 'fold'}" />
    </header>
    
    状态代替阶段
    需要使用statusbar_visible属性来替换fold_field选项
    
    <field name="state"
           widget="statusbar"
           clickable="True"
           statusbar_visible="draft,open,done" />
    
    文档表单
    # 设计类似一张真实的纸质文档,
    # 包含:
        左上角文档标题和副标题
        右上角按钮区
        其它文档头部字段
        底部笔记区,将附加字段组织成选项卡或页面
    
    
    标题和副标题
    # 一般标题放在oe_title类中。以下为扩展后的<sheet>元素,它包含标题以及一些额外字段如副标题
    
    <field name="member_image" widget="image" class="oe_avatar" />
    <div class="oe_title">
        <label for="member_id" class="oe_edit_only" />
        <h1><field name="member_id" /></h1>
        <h3>
            <span class="oe_read_only">By </span>
            <label for="user_id" class="oe_edit_only" />
            <field name="user_id" class="oe_inline" />
        </h3>
    </div>
    <!-- More elements will be added from here... -->
    </sheet>
    
    表单内容分组
    # 表单主内容区应通过<group>标签来进行组织。
    # <group>标签在画布中插入了两列。
    # 默认在这些列中标签会在字段旁显示,因此又占据两列。
    # 字段加标签会占据 一行,下一个字段和标签又会另起一行,垂直排列。
    # Odoo表单的常见布局是带标签的字段并排成两列。达到这一效果,我们只需要添加两个嵌入顶部的<group>标签。
    
    <group name="group_top">
        <group name="group_col1">
            <field name="user_id" />
            <field name="checkout_date" />
        </group>
        <group name="group_col2">
            <field name="state" />
            <field name="closed_date" />
        </group>
    </group>
    
    选项卡笔记本(Tabbed notebooks)
    # 组织内容的方式是 notebook 元素,一个包含多个称为页面(page)的选项卡分区的容器
    # 它们可以让不常用的内容在不使用时隐藏起来,或者用于按话题组织大量字段。
    # page支持以下属性:
        string:选项卡的标题(必填)
        attrs:不可见属性与表达式映射的字典
        accesskey:HTML访问密钥
    
    <notebook>
        <page string="Borrowed Books" name="page_lines">
            <field name="line_ids" />
        </page>
    </notebook>
    

    四·字段

    # 视图字段可用属性
    	name # 标识字段数据库中名称
        string # 用于想要覆盖模型中标签文本的标签文本
        help # 是鼠标悬停在字段上显示的提示文本,它允许我们覆盖模型定义中提供的帮助文本
        placeholder # 是在字段中显示的提示文本
        widget # 让我们可以覆盖字段的默认组件,一会儿我们就会讲到可用的组件
        options # 是一个带有组件附加数据的JSON数据结构,值随各组件的不同支持而不同
        class # 是用于字段 HTML 渲染的CSS类
        nolabel=”True”  #  阻止自动字段标签的展示。仅对<group>元素内的字段有作用,通常与<label for=”…”>元素一起使用。
        invisible=”True” # 让字段不可见,但仍会从服务端获取数据并可在表单中使用
        readonly=”True” # 让表单中该字段不可编辑
        required=”True” # 让表单中该字段为必填
        password=”True” #  用于文本字段。显示为密码项,隐藏所输入文字
    	filename # 用于二进制字段,它是用于存储上传文件名的模型字段的名称
    
    字段标签
    # <label>元素可用于更好地控制字段标签的展示
    # 例子:是仅在表单为编辑模式时展示
    	<label for="name" class="oe_edit_only" />
    # 注意:在group元素内部,通常设置nolabel="True",class='oe_edit_only'的css样式
    
    
    字段组件
    ### 对于文本字段
    	mail # 用于让 email 文本成为可操作的”mail-to”地址
        url # 用于将文本格式化为可点击的URL
        html # 用于将文本渲染为HTML内容;在编辑模式下,它显示为一个WYSIWYG(所见即所得)编辑器,可在不使用 HTML 代码的情况下格式化内容。
    
    ### 对于数字字段,有以下组件:
        handle # 在列表视图中作为一个排序字段,显示一个句柄来让我们可以拖放进行自定义排序
        float_time # 将一个浮点型字段格式化为带有小时和分钟的值
        monetary # 将一个浮点型字段显示为货币金额。它与currency_id字段一起使用,还可以通过options=”{‘currency_field’: ‘currency_id’}”来使用另一个字段名
        progressbar # 将一个浮点值显示为进度条百分比,有助于将字段展示为完成率
        percentage和percentpie # 组件可用于浮点型字段
    
    ### 对于关联和选择项字段,有以下附加组件:
        many2many_tags # 将值显示为按钮标签列表
        many2many_checkboxes # 将选项值显示为一个复选框列表
        selection对many-to-one # 字段使用选择字段组件
        radio # 以单选按钮显示选择字段选项
        priority # 将选项字段显示为一个可点击星形列表。选择项目通常是数值。
        state_selection # 将看板状态选择列表显示为信号灯。普通状态显示为灰色,完成显示为绿色,其它状态显示为红色。
        pdf_viewer # 是一个二进制字段(在 Odoo 12中引入)。
        
        
    # state_selection在 Odoo11中引入来替换掉kanban_state_selection。后者被淘汰,但为保持向后兼容性,还支持使用。    
    
    关联字段
    #  默认用户从这些字段中创建新记录(也称作“快速创建”)并打开关联记录表单。可通过options字段属性来关闭:
    	options="{'no_open': True, 'no_create': True}"
    
    # context和domain也是字段属性并对于关联字段特别有用
    	context可定义关联字记录默认值
        domain 可限制可选记录
        
        
    # 如果想要在列表视图的表单弹出窗口中直接编辑one-to-many路线,应使用<tree editable=”top”>或<tree editable=”bottom”>    
    

    五·按钮

    普通按钮
    # 按钮支持的属性
        string # 是按钮文本标签或使用图标时的 HTML alt 文本
        type # 是执行操作的类型,有以下值:
        object # 用于调用 Python 方法
        action # 用于运行窗口操作
        name # 标识按所选类型要操作的具体的操作,要么是模型方法名,要么是要运行的窗口操作的数据库 ID。可使用%(xmlid)d方程式来将XML ID转换成加载视图时所需的数据库 ID。
        args在类型为 object 时用于向方法传递额外的参数,须是在形成方法调用参数的记录 ID 之后所添加的纯静态 JSON 参数。
        context # 在上下文中添加值,可在窗口操作或 Python 代码方法调用之后产生效果。
        confirm # 在运行相关操作之前显示确认消息框,显示的内容是属性中分配的文本。special=”cancel”用于向导表单。
        icon # 是按钮所显示的图标。可用的按钮来自Font Awesome图标集,版本为4.7.0,应通过对应的 CSS 类来指定,如icon=”fa-question”。更多信息可访问Font Awesome。
    
    智能按钮
    # 智能按钮(smart button) 智能按钮显示为带有数据指示的矩形,在点击时可进入
    #  智能按钮通常是sheet的第一个元素,且带有oe_button_box样式.
    
    
    ### 注意:
    	# 1. 智能按钮必须带有class=”oe_stat_button” CSS样式,
        # 2. 并应使用 icon 属性来带有一个图标。
        # 3. 它有一个type=”action”,表示点击按钮时将运行通过 name 属性标识的窗口操作。%(action_other_checkouts_button)d表达式返回要运行的操作的数据库 ID
    
    ### 智能按钮属性值:
    	class=”oe_stat_button”  # 渲染的不是普通按钮而是一个矩形
    	icon  # 从Font Awesome图标集中选择图标来使用。访问Font Awesome查看有哪些图标。
    	type和name  # 是按钮类型以及触发的操作名。对于智能按钮,类型通常是 action,指定窗口操作,名称为所要执行操作的 ID。应传入真实数据库 ID,因此我们要使用方程式来将XML ID转换为数据库 ID:”%(actionxmlid)d”。这一操作应该会打开带有关联记录的视图。
    	string  # 按钮添加标签文本,这里没有使用因为所包含的字段中已经提供了文本。
    	context  # 应用于为目标视图设置默认值,用于点击按钮后视图上新建的记录。
    	help   # 在鼠标悬停在按钮上显示帮助提示信息
    
    num_other_checkouts = fields.Integer(compute='_compute_num_other_checkouts')
    
    def _compute_num_other_checkouts(self):
    	for rec in self:
            domain = [('member_id', '=', rec.member_id.id),
            ('state', 'in', ['open']),
            ('id', '!=', rec.id)]
    		rec.num_other_checkouts = self.search_count(domain)
    
    <div name="button_box" class="oe_button_box">
        <button class="oe_stat_button"
                icon="fa-tasks"
                help="Other checkouts pending return."
                type="action"
                name="%(action_other_checkouts_button)d"
                context="{'default_member_id': member_id}">
            <field string="To Return"
                   name="num_other_checkouts"
                   widget="statinfo" />
        </button>
    </div>
    

    六·动态视图元素

    onchange 事件
    # 通过@api.onchange('field1',...)装饰器创建模型
    # onchange 机制还可以在用户输入时即时反馈进行计算字段的自动重算
    
    动态属性
    # 属性允许根据记录的值来动态变更视图元素的显示.
    	# groups 可根据当前用户所属安全组,让元素课件. 指定仅该组员成员可看到元素.
    	# states 可以根据记录的状态字段来让元素课件.
    	# 特别属性 attrs ,值为一个映射invisible属性值与表达式结果的字典.
    			例子: 要让closed_date字段在new和open状态时不可见
    			<field name="closed_date" attrs="{'invisible':[('state', 'in', ['new', 'open'])]}"/>
                
    # 注意:
    	invisible不只在字段种可用,任意元素种均可使用.如notebook页面和group元素.attrs属性可以设置两个属性值:readonly和required.
    

    七·列表视图

    # tree元素的相关属性
        # default_order让我们可以覆盖模型中的默认排序,它的值和模型中定义的排序格式相同。
        # create, delete和edit,如果设为 false(字母小写),会禁用列表视图中的相应操作。
        # editable让记录在列表视图中可直接被编辑。可用值有 top 和 bottom,表示新记录添加的位置。
    	# 数值字段可显示为对应列的汇总值。为字段添加一个累加属性(sum, avg, min或max)会为其分配汇总值的标签文本
    <record id="view_tree_checkout" model="ir.ui.view">
        <field name="name">Checkout Tree</field>
        <field name="model">library.checkout</field>
        <field name="arch" type="xml">
            <tree
                  decoration-muted="state in ['done', 'cancel']"
                  decoration-bf="state=='open'">
                <field name="state" invisible="True" />
                <field name="request_date" />
                <field name="member_id" />
                <field name="checkout_date" />
                <field name="stage_id" />
                <field name="num_books" sum="# Books" />
            </tree>
        </field>
    </record>
    
    num_books = fields.Integer(compute='_compute_num_books')
    
    @api.depends('line_ids')
    def _compute_num_books(self):
        for book in self:
        	book.num_books = len(book.line_ids)
    

    八·搜索视图

    # 
    # 这两个过滤器可以分别被启用并以 OR运算符连接。以<separator />元素分隔的整块过滤器以 AND 运算符连接
    # 第三个过滤器仅设置 group by 上下文键,它让视图按照字段来对记录分组
    
    #字段属性:
    	# name 标识字段
    	# string 标签文本,替换默认值
    	# operator 修改默认的预算符
    	# filter_domain 设置搜索使用的特定域表达式,为operator提供灵活的替代方式. 例如:filter_domain=”[(‘name’, ‘ilike’, self)]”
    	# groups 对该字段的搜索仅向安全组内成员开发,值是一个逗号分隔的xmlid列表
    # 过滤元素属性
    	# name 用作后续继承/扩展或通过窗口操作启用的标识符。这不是必填项,但包含该属性是一个不错的编码习惯。
    	# string 是过滤器显示的标签文本,必填
    	# domain 是加入当前域的域表达式
    	# context 是加入当前上下文的上下文字典。通常使用group_id作为键,用于对记录分组的字段名作为值
    	# groups 让该字段的搜索仅对安全组列表(XML IDs)成员开放
    
    <record id="view_filter_checkout" model="ir.ui.view">
        <field name="model">library.checkout</field>
        <field name="arch" type="xml">
            <search>
                <field name="member_id" />
                <field name="user_id" />
                <filter name="filter_not_done"
                        string="To Return"
                        domain="[('state','=','open')]" />
                <filter name="filter_my_checkouts"
                        string="My Checkouts"
                        domain="['user_id', '=', uid]" />
                <filter name="group_user"
                        string="By Member"
                        context="{'group_by': 'member_id'}" />
            </search>
        </field>
    </record>
    

    九·其它视图类型

    # 其他视图类型:
    	activity  # 将计划活动显示为有组织的汇总
    	calendar  # 基于所选日期字段以日历格式展示数据
    	diagram  # 展示记录间的关系,当前不在 Odoo 中使用
    
    # 两种视图类型用于显示累加数据
    	graph  # 用于图表展示
    	pivot  # 用于交互的数据透视表
        
    # Odoo 企业版中可用
        dashboard   #  使用透视表和图表这类子视图展示累加数据
        cohort   #   用于显示在不同时期数据如何变化
        gantt   #  以甘特图显示日期计划信息,常用于项目管理
        grid   #  通过行和列网格组织数据进行展示
    
    活动视图
    #  由mail模块提供. 用于可视化活动任务
    <activity string='Activities' />
    
    日历视图
    # 在日历种展示记录,按照不同的时间区间.
    	# 属性:
    		date_start 开始日期 必填
    		date_end 结束日期  选填
    		date_delay 天数字段,用于替代date_end
    		all_day 传入一个布尔字段名,标识全天活动
    		color 用于日历添加颜色
    		mode 日历视图默认显示模块,
    <record id="view_calendar_checkout" model="ir.ui.view">
        <field name="model">library.checkout</field>
        <field name="arch" type="xml">
            <calendar date_start="request_date"
                      color="user_id">
                <field name="member_id" />
                <field name="stage_id" />
            </calendar>
        </field>
    </record>
    

    Odoo 12开发之后台视图 - 设计用户界面

    透视表视图
    # 透视表 是动态分析矩阵  
    	# 累加数据仅对数据库种存储的字段有效.
    # 比如:
    	num_books = fields.Integer(compute='_compute_num_books',store=True)
        
    
    # name像其它视图一样标识图标种的字段
    # type是指如何使用字段,行分组(默认)、度量(measure)或列(仅针对透视表,用于列分组)
    # interval用于日期字段,是对时间数据的分组间隔:按天、按周、按月、按季度或按年
    <record id="view_pivot_checkout" model="ir.ui.view">
        <field name="model">library.checkout</field>
        <field name="arch" type="xml">
            <pivot>
                <field name="stage_id" type="col" />
                <field name="member_id" />
                <field name="request_date" interval="week" />
                <field name="num_books" type="measure" />
            </pivot>
        </field>
    </record>
    

    Odoo 12开发之后台视图 - 设计用户界面

    图表视图
    # 图表视图将数据累加展示图表. 可以使柱状图,线状图和饼图
        # type属性,值可为 bar(默认), pie或line
    	# type=”row”是默认值,设置累加值的条件
        # type=”measure”用于作为实际累加值的度量字段
    	
    <record id="view_graph_checkout" model="ir.ui.view">
        <field name="model">library.checkout</field>
        <field name="arch" type="xml">
            <graph type="bar">
                <field name="stage_id" />
                <field name="num_books" type="measure" />
            </graph>
        </field>
    </record>
        
    

    Odoo 12开发之后台视图 - 设计用户界面

  • 相关阅读:
    敏捷开发-各个原则的理解
    DWH中增量数据的抽取
    SSIS的部署和配置
    Checkpoint 和Breakpoint
    两种动态SQL
    SQLServer查询计划
    程序员接项目的经验1
    Date.prototype.format
    前端颜色选择器
    Idea快捷键和使用技巧【未完】
  • 原文地址:https://www.cnblogs.com/dengz/p/13091434.html
Copyright © 2011-2022 走看看