插件效果图

定义js

odoo.define('auto_widget',function(require){
"use strict"

//通过扩展AbstractField来扩展 field
var AbstractField = require('web.AbstractField');
var fieldRegistry = require('web.field_registry');
var core = require('web.core');
var qweb =core.qweb;

var colorField=AbstractField.extend({

//为widget 设置css样式
className:'o_int_colorpicker',
tagName:'span',
supportedFieldTypes: ['integer'],
//获取一些javascript 事件
events:{
'click .o_color_pill':'clickPill',
},

//继承init 以及进行一些初始化
init:function(){
this.totalColors=10;
this._super.apply(this,arguments);

},
//执行以下步骤对服务器进行Rpc调用,并在工具中提示中显示结果
willStart:function(){
var self=this;
this.colorGroupData={};
var colorDataDef = this._rpc({
model:this.model,
method:'read_group',
domain:[],
fields:['color'],
groupBy:['color'],
}).then(function(result){
_.each(result,function(r){
self.colorGroupData[r.color]=r.color_count;
});
});
return $.when(this._super.apply(this,arguments),colorDataDef);
},

//继承_renderEdit \_renderReadonly来设置DOM
_renderEdit:function () {
this.$el.empty();
var pills=qweb.render('FieldColorPills',{widget:this});
this.$el.append(pills);
//在圆球上设置bootscript 工具提示
this.$el.find('[data-toggle="tooltip"]').tooltip();
// for (var i=0;i<this.totalColors;i++){
// var className='o_color_pill o_color_'+i;
// if(this.value===i){
// className+='active';
// }
// this.$el.append($('<span>',{
// 'class':className,
// 'data-val':i,
// }));
// }

},

_renderReadonly:function(){
var className="o_color_pill active readonly o_color_"+this.value;
this.$el.append($('<sapn>',{
'class':className,
}));
},

//定义之前说的处理程序
clickPill:function(ev){
var $target = $(ev.currentTarget);
var data = $target.data();
this._setValue(data.val.toString());

}
});

//最后注册widget
fieldRegistry.add('int_color',colorField);

//closing 'auto_widget' namespace 关闭 'auto_widget' 命名空间
return {
colorField:colorField,
};

});

定义scss

.o_int_colorpicker {
.o_color_pill {
display: inline-block;
height: 25px;
width: 25px;
margin: 4px;
border-radius: 25px;
position: relative;
@for $size from 1 through length($o-colors) {
&.o_color_#{$size - 1} {
background-color: nth($o-colors, $size);
&:not(.readonly):hover {
transform: scale(1.2);
transition: 0.3s;
cursor: pointer;
}
&.active:after{
content: "\f00c";
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
color: #fff;
position: absolute;
padding: 4px;
font-size: 16px;
}
}
}
}
}

定义template.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="assets_end" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script src="/auto_widget/static/src/js/auto_widget.js" type="text/javascript"/>
<link href="/auto_widget/static/src/scss/field_widget.scss" rel="stylesheet" type="text/scss" />
</xpath>
</template>
</odoo>
"static/src/xml/qweb_template.xml"
<?xml version="1.0" encoding="utf-8" ?>
<templates >
<t t-name="FieldColorPills">
<t t-foreach="widget.totalColors" t-as="pill_no">
<span t-attr-class="o_color_pill o_color_#{pill_no} #{widget.value===pill_no and 'active' or ''}"
t-att-data-val="pill_no"
data-toggle="tooltip"
data-placement="top"
t-attf-title="This color is used in #{widget.colorGroupData[pill_no] or 0} books."
/> </t>
</t>
</templates>

最后模型使用

    color=fields.Integer(u'color')

    <field name="color" widget="int_color"/>

模型布局

最新文章

  1. 使用Setup Factory安装包制作工具制作安装包
  2. CentOS随笔 不断添加
  3. TokuDB的特点验证
  4. select跳转
  5. C#和.NET版本
  6. Java安全编码之用户输入
  7. Rac &amp; DG
  8. BitNami一键安装Redmine(转)
  9. cell的各种使用和赋值 总结
  10. hive j简单邮件过滤
  11. Oracle EBS Web ADI 中的术语
  12. [kuangbin带你飞]专题四 最短路练习 POJ 1797 Heavy Transportation
  13. 【Python之路】第一篇--Linux基础命令
  14. Java文件输入保存,统计某个字符串,统计所有字符串
  15. 小L的试卷
  16. tomcat8.0部署启动
  17. SpringBoot之通过yaml绑定注入数据
  18. error TS2304: Cannot find name &#39;Promise&#39; &amp;&amp; TS2307: Cannot find module &#39;**&#39;
  19. JavaScript 经典笔记
  20. 在TortoiseSVN使用clean up

热门文章

  1. Zabbix 4.0 使用笔记
  2. Task01:初识数据库
  3. Centos8.3、mysql8.0主从复制实战记录
  4. Oracle冷备
  5. 技术解密 |阿里云多媒体 AI 团队拿下 CVPR2021 5 冠 1 亚成绩的技术分享
  6. ClickHouse学习系列之五【系统库system说明】
  7. PL/SQL插入数据报错:Access violation at address 00413A81 in module &#39;plsqldev.exe&#39;. Read of address 00000000
  8. CSS 多行文本溢出省略显示
  9. Linux中curl的用法
  10. Vue 前端权限控制的优化改进版