修改设备table的样式 修改关联品牌根据各不同类别展示

This commit is contained in:
qihao.gong@jikimo.com
2023-10-12 14:10:29 +08:00
parent 6724d0e0c1
commit 53e307cd55
9 changed files with 515 additions and 301 deletions

View File

@@ -305,3 +305,15 @@ div[class="o_content o_component_with_search_panel"] .o_kanban_primary_right > .
.test_model>div .o_field_widget {
width: 40% !important;
}
.o_form_label {
font-weight: 700 !important;
}
.bigger .o_horizontal_separator {
font-size: 1.5rem;
}
.o_horizontal_separator {
font-size: 1.5rem;
}

View File

@@ -30,7 +30,7 @@ class FixtureModel(models.Model):
fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料", )
fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name', store=True)
multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型")
brand_id = fields.Many2one('sf.machine.brand', string="品牌")
brand_id = fields.Many2one('sf.machine.brand', string="品牌", domain="[('tag_ids.name', 'ilike', '夹具')]")
clamping_way = fields.Char(string="装夹方式")
port_type = fields.Char(string="接口类型")
model_file = fields.Binary(string="3D模型图")

View File

@@ -70,7 +70,7 @@ class IntegralCuttingTool(models.Model):
# 整体式刀具类型字段,关联整体式刀具类型对象
integral_model_number = fields.Many2one('sf.integral.cutting.tool.model', '整体式刀具类型')
# 增加品牌、总长度(mm)、柄部长度(mm)、刃部长度(mm)、直径(mm)、刃数、前角(°)、后角(°)、主偏角(°)、材料型号、配对螺母(mm)、适用夹头型号、适用范围、图片、创建人、创建时间等字段
brand = fields.Many2one('sf.machine.brand', '品牌')
brand = fields.Many2one('sf.machine.brand', '品牌', domain="[('tag_ids.name', 'ilike', '刀具')]")
total_length = fields.Float('总长度(mm)')
shank_length = fields.Float('柄部长度(mm)')
blade_length = fields.Float('刃部长度(mm)')

View File

@@ -101,7 +101,7 @@ class CuttingToolModel(models.Model):
cutting_tool_type = fields.Char(string="刀具物料类型", related='cutting_tool_material_id.name', store=True)
cutting_tool_type_id = fields.Many2one('sf.cutting.tool.type', string='刀具类型',
)
brand_id = fields.Many2one('sf.machine.brand', '品牌')
brand_id = fields.Many2one('sf.machine.brand', '品牌', domain="[('tag_ids.name', 'ilike', '刀具')]")
tool_length = fields.Integer('长度(mm)')
tool_width = fields.Integer('宽度(mm)')
tool_height = fields.Integer('高度(mm)')

View File

@@ -97,7 +97,7 @@ class SfMaintenanceEquipment(models.Model):
control_system_id = fields.Many2one('sf.machine.control_system',
string="控制系统")
# 多个机床型号对应一个机床
brand_id = fields.Many2one('sf.machine.brand', string='品牌')
brand_id = fields.Many2one('sf.machine.brand', string='品牌', domain="[('tag_ids.name', 'ilike', equipment_type)]")
type_id = fields.Many2one('sf.machine_tool.type', '型号')
state = fields.Selection(
@@ -154,48 +154,48 @@ class SfMaintenanceEquipment(models.Model):
result.append((parameter.id, name))
return result
@api.constrains('rotate_speed')
def _check_rotate_speed(self):
if self.rotate_speed <= 0:
raise UserError("转速不能为0")
@api.constrains('precision')
def _check_precision(self):
if self.precision <= 0.00:
raise UserError("加工精度不能为0")
@api.constrains('number_of_knife_library')
def _check_number_of_knife_library(self):
if self.number_of_knife_library <= 0:
raise UserError("刀库数量不能为0")
@api.constrains('x_axis')
def _check_x_axis(self):
if self.x_axis <= 0:
raise UserError("加工行程里x轴不能为0")
@api.constrains('y_axis')
def _check_y_axis(self):
if self.y_axis <= 0:
raise UserError("加工行程里y轴不能为0")
@api.constrains('z_axis')
def _check_z_axis(self):
if self.z_axis <= 0:
raise UserError("加工行程里z轴不能为0")
@api.constrains('b_axis')
def _check_b_axis(self):
if self.number_of_axles == '四轴':
print(self.number_of_axles)
if self.b_axis <= 0:
raise UserError("加工行程里b轴不能为0")
@api.constrains('c_axis')
def _check_c_axis(self):
if self.number_of_axles == '五轴':
if self.c_axis <= 0:
raise UserError("加工行程里c轴不能为0")
# @api.constrains('rotate_speed')
# def _check_rotate_speed(self):
# if self.rotate_speed <= 0:
# raise UserError("转速不能为0")
#
# @api.constrains('precision')
# def _check_precision(self):
# if self.equipment_type == '机床' and self.precision <= 0.00:
# raise UserError("加工精度不能为0")
#
# @api.constrains('number_of_knife_library')
# def _check_number_of_knife_library(self):
# if self.equipment_type == '机床' and self.number_of_knife_library <= 0:
# raise UserError("刀库数量不能为0")
#
# @api.constrains('x_axis')
# def _check_x_axis(self):
# if self.equipment_type == '机床' and self.x_axis <= 0:
# raise UserError("加工行程里x轴不能为0")
#
# @api.constrains('y_axis')
# def _check_y_axis(self):
# if self.equipment_type == '机床' and self.y_axis <= 0:
# raise UserError("加工行程里y轴不能为0")
#
# @api.constrains('z_axis')
# def _check_z_axis(self):
# if self.equipment_type == '机床' and self.z_axis <= 0:
# raise UserError("加工行程里z轴不能为0")
#
# @api.constrains('b_axis')
# def _check_b_axis(self):
# if self.equipment_type == '机床' and self.number_of_axles == '四轴':
# print(self.number_of_axles)
# if self.b_axis <= 0:
# raise UserError("加工行程里b轴不能为0")
#
# @api.constrains('c_axis')
# def _check_c_axis(self):
# if self.equipment_type == '机床' and self.number_of_axles == '五轴':
# if self.c_axis <= 0:
# raise UserError("加工行程里c轴不能为0")
@api.onchange('type_id')
def get_type_info(self):

View File

@@ -57,9 +57,8 @@
<field name="code"/>
<field name="equipment_type" invisible="1"/>
<field name="brand_id" attrs="{'invisible': [('equipment_type', '!=', '机床')]}"
force_save="1"/>
<field name="type_id" attrs="{'invisible': [('equipment_type', '!=', '机床')]}" required="1"
<field name="brand_id" force_save="1"/>
<field name="type_id" attrs="{'required': [('equipment_type', '=', '机床')]}"
domain="[('brand_id', '=', brand_id)]"/>
<field name="machine_tool_category" readonly="1" attrs="{'invisible': [('type_id', '=', False)]}"
force_save="1"/>
@@ -68,113 +67,174 @@
<page string="设备参数" name="sf_equipment"
attrs="{'invisible': [('equipment_type', '!=', '机床')]}">
<group>
<div class="bigger">
<group string="基本参数">
<field name="control_system_id" required="1" options="{'no_create': True}"/>
<label for="workbench_L" string="工作台尺寸(mm)"/>
<div class="test_model">
<div>
<label for="workbench_L" string="长"/>
<field name="workbench_L" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
<field name="workbench_L" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
</div>
<span>&amp;nbsp;</span>
<div>
<label for="workbench_W" string="宽"/>
<field name="workbench_W" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
<field name="workbench_W" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
</div>
</div>
<label for="machine_tool_L" string="机床尺寸(mm)"/>
<div class="test_model">
<div>
<label for="machine_tool_L" string="长"/>
<field name="machine_tool_L" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
<field name="machine_tool_L" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
</div>
<div>
<label for="machine_tool_W" string="宽"/>
<field name="machine_tool_W" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
<field name="machine_tool_W" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
</div>
<div>
<label for="machine_tool_H" string="高"/>
<field name="machine_tool_H" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
<field name="machine_tool_H" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
</div>
</div>
<field name="feed_speed" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
<label for="precision_min" string="X轴定位精度(mm)"/>
<div class="test_model">
<div>
<label for="precision_min" string="最小(min)"/>
<field name="precision_min" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="precision_max" string="最大(max)"/>
<field name="precision_max" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
<field name="precision_min" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
</div>
<field name="workpiece_load" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
<field name="number_of_knife_library" attrs="{'required': [('equipment_type', '=', '机床')]}" options="{'format': false}"/>
<span>&amp;nbsp;</span>
<div>
<label for="precision_max" string="最大(max)"/>
<field name="precision_max" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
</div>
</div>
<field name="workpiece_load"
attrs="{'required': [('equipment_type', '=', '机床')]}"/>
<field name="number_of_knife_library"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
<field name="lead_screw" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
<field name="number_of_axles" attrs="{'required': [('equipment_type', '=', '机床')]}" widget="radio"
<field name="number_of_axles"
attrs="{'required': [('equipment_type', '=', '机床')]}"
widget="radio"
options="{'horizontal': true}"/>
<label for="x_axis" string="加工行程(mm)"
attrs="{'invisible': [('number_of_axles', '=', False)]}"/>
<div class="test_model"
attrs="{'invisible': [('number_of_axles', '=', False)]}">
<div>
<label for="x_axis" string="x"/>
<field name="x_axis" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
<field name="x_axis" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
</div>
<span>&amp;nbsp;</span>
<div>
<label for="y_axis" string="y"/>
<field name="y_axis" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
<field name="y_axis" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
</div>
<span>&amp;nbsp;</span>
<div>
<label for="z_axis" string="z"/>
<field name="z_axis" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
<field name="z_axis" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
</div>
<br></br>
<div>
<label for="b_axis" string="b"
attrs="{'invisible': [('number_of_axles', '=', '三轴')]}"/>
<field name="b_axis" class="o_address_zip"
attrs="{'invisible': [('number_of_axles', '=', '三轴')]}"
options="{'format': false}"/>
</div>
<span>&amp;nbsp;</span>
<div>
<label for="c_axis" string="c"
attrs="{'invisible': [('number_of_axles', 'in', ['三轴','四轴'])]}"/>
<field name="c_axis" class="o_address_zip"
attrs="{'invisible': [('number_of_axles', 'in', ['三轴','四轴'])]}"
options="{'format': false}"/>
</div>
</div>
</group>
</div>
<div class="bigger">
<group string="主轴">
<field name="taper" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
<field name="rotate_speed" string="主轴转速(r/min)" attrs="{'required': [('equipment_type', '=', '机床')]}"
<field name="rotate_speed" string="主轴转速(r/min)"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
<field name="heightened_way" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
<field name="heightened_way"
attrs="{'required': [('equipment_type', '=', '机床')]}"/>
<field name="torque" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
<field name="motor_power" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
<label for="distance_min" string="主轴端面-工作台距离(mm)"/>
<div class="test_model">
<div>
<label for="distance_min" string="最小min"/>
<field name="distance_min" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
<field name="distance_min" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
</div>
<span>&amp;nbsp;</span>
<div>
<label for="distance_max" string="最大max"/>
<field name="distance_max" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
<field name="distance_max" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
</div>
</div>
<field name="guide_rail" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
</group>
</div>
<group string="刀具">
<field name="knife_type" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
<field name="tool_speed" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
<field name="tool_long_max" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
<field name="tool_long_max"
attrs="{'required': [('equipment_type', '=', '机床')]}"/>
<label for="tool_diameter_min" string="刀具刀径(mm)"/>
<div class="test_model">
<div>
<label for="tool_diameter_min" string="最小(min)"/>
<field name="tool_diameter_min" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="tool_diameter_max" string="最大(max)"/>
<field name="tool_diameter_max" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机床')]}"
<field name="tool_diameter_min" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
</div>
<field name="tool_quality_max" attrs="{'required': [('equipment_type', '=', '机床')]}"/>
</group>
</group>
<span>&amp;nbsp;</span>
<div>
<label for="tool_diameter_max" string="最大(max)"/>
<field name="tool_diameter_max" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机床')]}"
options="{'format': false}"/>
</div>
</div>
<field name="tool_quality_max"
attrs="{'required': [('equipment_type', '=', '机床')]}"/>
</group>
</group>
</page>
@@ -183,55 +243,77 @@
<group string="AGV基础参数">
<label for="AGV_L" string="设备尺寸(mm)"/>
<div class="test_model">
<div>
<label for="AGV_L" string="长"/>
<field name="AGV_L" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_L" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
<span>&amp;nbsp;</span>
<div>
<label for="AGV_W" string="宽"/>
<field name="AGV_W" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_W" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
<span>&amp;nbsp;</span>
<div>
<label for="AGV_H" string="高"/>
<field name="AGV_H" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_H" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
</div>
<label for="AGV_goods_L" string="载货尺寸MAX(mm)"/>
<div class="test_model">
<div>
<label for="AGV_goods_L" string="长"/>
<field name="AGV_goods_L" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_goods_L" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
<span>&amp;nbsp;</span>
<div>
<label for="AGV_goods_W" string="宽"/>
<field name="AGV_goods_W" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_goods_W" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
<span>&amp;nbsp;</span>
<div>
<label for="AGV_goods_H" string="宽"/>
<field name="AGV_goods_H" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_goods_H" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
</div>
<label for="AGV_velocity" string=""/>
<div class="test_model">
<div>
<label for="AGV_velocity" string="标准速度"/>
<field name="AGV_velocity" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_velocity" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>m/S&amp;nbsp;</span>
</div>
<div>
<label for="AGV_velocity_min" string="标准速度(最小)"/>
<field name="AGV_velocity_min" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_velocity_min" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>m/S&amp;nbsp;</span>
</div>
<div>
<label for="AGV_velocity_max" string="标准速度(最大)"/>
<field name="AGV_velocity_max" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_velocity_max" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>m/S&amp;nbsp;</span>
</div>
<div>
<label for="AGV_Lifting_height" string="升降高度(max)"/>
<field name="AGV_Lifting_height" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_Lifting_height" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
@@ -242,26 +324,30 @@
<div>
<label for="AGV_ground_clearance" string="最小离地高度"/>
<field name="AGV_ground_clearance" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_ground_clearance" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
<div>
<label for="AGV_turning_radius" string="最小转弯半径"/>
<field name="AGV_turning_radius" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_turning_radius" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
<div>
<label for="AGV_gradeability_max" string="最大爬坡度"/>
<field name="AGV_gradeability_max" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_gradeability_max" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>°&amp;nbsp;</span>
</div>
<div>
<label for="AGV_parking_accuracy" string="停车精度"/>
<field name="AGV_parking_accuracy" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_parking_accuracy" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
@@ -275,14 +361,16 @@
<div>
<label for="AGV_load_weight_max" string="最大负载重量"/>
<field name="AGV_load_weight_max" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_load_weight_max" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>kg&amp;nbsp;</span>
</div>
<div>
<label for="AGV_weight" string="本体总重量"/>
<field name="AGV_weight" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_weight" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>kg&amp;nbsp;</span>
</div>
@@ -290,7 +378,8 @@
<div>
<label for="AGV_job_duration" string="连续作业时长"/>
<field name="AGV_job_duration" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_job_duration" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>h&amp;nbsp;</span>
</div>
@@ -298,7 +387,8 @@
<div>
<label for="AGV_transfer_mode" string="移载方式"/>
<field name="AGV_transfer_mode" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_transfer_mode" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
@@ -326,7 +416,8 @@
<div>
<label for="AGV_drive_motor_power" string="驱动电机功率"/>
<field name="AGV_drive_motor_power" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_drive_motor_power" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>kw&amp;nbsp;</span>
</div>
@@ -334,7 +425,8 @@
<div>
<label for="AGV_hoist_motor_power" string="提升电机功率"/>
<field name="AGV_hoist_motor_power" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_hoist_motor_power" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>i&amp;nbsp;</span>
</div>
@@ -342,7 +434,8 @@
<div>
<label for="AGV_drive_motor_speed_ratio" string="驱动电机速比"/>
<field name="AGV_drive_motor_speed_ratio" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_drive_motor_speed_ratio" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>kw&amp;nbsp;</span>
</div>
@@ -354,14 +447,16 @@
<div>
<label for="AGV_veer_motor_power" string="转向电机功率"/>
<field name="AGV_veer_motor_power" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_veer_motor_power" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>kw&amp;nbsp;</span>
</div>
<div>
<label for="AGV_veer_motor_speed_ratio" string="转向电机速比"/>
<field name="AGV_veer_motor_speed_ratio" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_veer_motor_speed_ratio" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>i&amp;nbsp;</span>
</div>
@@ -369,7 +464,8 @@
<div>
<label for="AGV_move_motor_power" string="前移电机功率"/>
<field name="AGV_move_motor_power" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_move_motor_power" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>kw&amp;nbsp;</span>
</div>
@@ -377,7 +473,8 @@
<div>
<label for="AGV_move_motor_speed_ratio" string="前移电机速比"/>
<field name="AGV_move_motor_speed_ratio" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_move_motor_speed_ratio" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>i&amp;nbsp;</span>
</div>
@@ -393,27 +490,33 @@
<div>
<label for="AGV_drive_mode" string="驱动方式"/>
<field name="AGV_drive_mode" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_drive_mode" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
<div>
<label for="AGV_navigation_mode" string="导航方式"/>
<field name="AGV_navigation_mode" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_navigation_mode" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
<div>
<label for="AGV_communication_mode" string="通讯方式"/>
<field name="AGV_communication_mode" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_communication_mode" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
<div>
<label for="AGV_direction_travel" string="行走方向"/>
<field name="AGV_direction_travel" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_direction_travel" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
@@ -424,40 +527,57 @@
<div class="test_model">
<div>
<label for="AGV_power_requirements" string="电源要求"/>
<field name="AGV_power_requirements" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_power_requirements" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
<div>
<label for="AGV_charge_mode" string="充电方式"/>
<field name="AGV_charge_mode" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_charge_mode" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
<div>
<label for="AGV_security" string="安全防护"/>
<field name="AGV_security" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_security" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
</div>
</div>
<label for="AGV_operating_temperature" string="工作条件"/>
<div class="test_model">
<div>
<label for="AGV_operating_temperature" string="环境温度"/>
<field name="AGV_operating_temperature" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_operating_temperature" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>°&amp;nbsp;</span>
</div>
<div>
<label for="AGV_operating_humidity" string="环境湿度"/>
<field name="AGV_operating_humidity" class="o_address_zip" attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
<field name="AGV_operating_humidity" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', 'AGV小车')]}"
options="{'format': false}"/>
<span>°&amp;nbsp;</span>
</div>
</div>
@@ -469,43 +589,59 @@
<group string="机器人设备参数">
<label for="robot_gripping_of_workpieces_L" string="抓取工件最大尺寸"/>
<div class="test_model">
<div>
<label for="robot_gripping_of_workpieces_L" string="长"/>
<field name="robot_gripping_of_workpieces_L" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
<field name="robot_gripping_of_workpieces_L" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
<div>
<label for="robot_gripping_of_workpieces_W" string="宽"/>
<field name="robot_gripping_of_workpieces_W" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
<field name="robot_gripping_of_workpieces_W" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
<div>
<label for="robot_gripping_of_workpieces_H" string="高"/>
<field name="robot_gripping_of_workpieces_H" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
<field name="robot_gripping_of_workpieces_H" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
</div>
<label for="robot_radius_of_the_boom" string=""/>
<div class="test_model">
<div>
<label for="robot_radius_of_the_boom" string="展臂半径"/>
<field name="robot_radius_of_the_boom" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
<field name="robot_radius_of_the_boom" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
<div>
<label for="robot_load_weight_max" string="最大负载重量"/>
<field name="robot_load_weight_max" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
<field name="robot_load_weight_max" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>kg&amp;nbsp;</span>
</div>
<div>
<label for="robot_gripping_of_workpieces_H" string="本体总重量"/>
<field name="robot_gripping_of_workpieces_H" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
<field name="robot_gripping_of_workpieces_H" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>kg&amp;nbsp;</span>
</div>
<div>
<label for="robot_repeatable_positioning_accuracy" string="重复定位精度"/>
<field name="robot_repeatable_positioning_accuracy" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
<field name="robot_repeatable_positioning_accuracy" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
@@ -525,44 +661,72 @@
</field>
<label for="robot_track_dimensions_L" string="轨道尺寸"/>
<div class="test_model">
<div>
<label for="robot_track_dimensions_L" string="长"/>
<field name="robot_track_dimensions_L" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
<label for="robot_track_dimensions_W" string="宽"/>
<field name="robot_track_dimensions_W" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
<label for="robot_track_dimensions_H" string="高"/>
<field name="robot_track_dimensions_H" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
<field name="robot_track_dimensions_L" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
<div>
<label for="robot_track_dimensions_W" string="宽"/>
<field name="robot_track_dimensions_W" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
<div>
<label for="robot_track_dimensions_H" string="高"/>
<field name="robot_track_dimensions_H" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
</div>
<label for="control_system_id" string=""/>
<div class="test_model">
<div>
<label for="control_system_id" string="控制系统"/>
<field name="control_system_id" class="o_address_zip" required="1"
options="{'format': false}"/>
</div>
<span>&amp;nbsp;</span>
<div>
<label for="robot_drive_mode" string="驱动方式"/>
<field name="robot_drive_mode" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
<field name="robot_drive_mode" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
</div>
<span>&amp;nbsp;</span>
<div>
<label for="robot_installation_method" string="安装方式"/>
<field name="robot_installation_method" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
<field name="robot_installation_method" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
</div>
<span>&amp;nbsp;</span>
</div>
<label for="robot_operating_temperature" string="工作条件"/>
<div class="test_model">
<div>
<label for="robot_operating_temperature" string="环境温度"/>
<field name="robot_operating_temperature" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
<field name="robot_operating_temperature" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>°&amp;nbsp;</span>
</div>
<div>
<label for="robot_operating_humidity" string="环境湿度"/>
<field name="robot_operating_humidity" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '机器人')]}"
<field name="robot_operating_humidity" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '机器人')]}"
options="{'format': false}"/>
<span>°&amp;nbsp;</span>
</div>
</div>
@@ -574,51 +738,72 @@
<group string="三元检测设备基础参数">
<label for="detect_L" string="设备尺寸(mm)"/>
<div class="test_model">
<div>
<label for="detect_L" string="长"/>
<field name="detect_L" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
<label for="detect_W" string="宽"/>
<field name="detect_W" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
<label for="detect_H" string="高"/>
<field name="detect_H" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_L" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
<div>
<label for="detect_W" string="宽"/>
<field name="detect_W" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
<div>
<label for="detect_H" string="高"/>
<field name="detect_H" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
</div>
<label for="detect_x_axis" string="测量范围(max)"/>
<div class="test_model">
<div>
<label for="detect_x_axis" string="X轴"/>
<field name="detect_x_axis" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_x_axis" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
<div>
<label for="detect_y_axis" string="Y轴"/>
<field name="detect_y_axis" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_y_axis" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
<div>
<label for="detect_z_axis" string="Z轴"/>
<field name="detect_z_axis" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_z_axis" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
</div>
<label for="detect_precision" string=""/>
<div class="test_model">
<div>
<label for="detect_precision" string="测量精度"/>
<field name="detect_precision" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_precision" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>μm&amp;nbsp;</span>
</div>
<div>
<label for="detect_measurement_mode" string="测量方式"/>
<field name="detect_measurement_mode" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_measurement_mode" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
</div>
<div>
<label for="detect_resolution" string="分辨率"/>
<field name="detect_resolution" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_resolution" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
</div>
@@ -627,19 +812,22 @@
<div class="test_model">
<div>
<label for="detect_load_weight_max" string="最大负载重量"/>
<field name="detect_load_weight_max" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_load_weight_max" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>kg&amp;nbsp;</span>
</div>
<div>
<label for="detect_weight" string="本体总重量"/>
<field name="detect_weight" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_weight" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>kg&amp;nbsp;</span>
</div>
<div>
<label for="detect_measurement_length" string="深孔测量长度(max)"/>
<field name="detect_measurement_length" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_measurement_length" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
@@ -656,13 +844,15 @@
</div>
<div>
<label for="detect_control_mode" string="控制方式"/>
<field name="detect_control_mode" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_control_mode" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
</div>
<div>
<label for="detect_balance_mode_for_Z" string="Z轴平衡方式"/>
<field name="detect_balance_mode_for_Z" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_balance_mode_for_Z" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
</div>
@@ -671,19 +861,22 @@
<div class="test_model">
<div>
<label for="detect_zoom_objective_magnification" string="变焦物镜倍率"/>
<field name="detect_zoom_objective_magnification" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_zoom_objective_magnification" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
</div>
<div>
<label for="detect_magnification" string="放大倍率"/>
<field name="detect_magnification" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_magnification" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
</div>
<div>
<label for="detect_working_distance" string="工作距离"/>
<field name="detect_working_distance" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_working_distance" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
@@ -692,23 +885,27 @@
<div class="test_model">
<div>
<label for="detect_locking_mode" string="锁紧方式"/>
<field name="detect_locking_mode" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_locking_mode" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
</div>
<div>
<label for="detect_pressurized_air" string="压缩空气"/>
<field name="detect_pressurized_air" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_pressurized_air" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
</div>
<div>
<label for="detect_object_field_of_view_max" string="物方视场:"/>
<span>最小&amp;nbsp;</span>
<field name="detect_object_field_of_view_max" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_object_field_of_view_max" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>mm~&amp;nbsp;</span>
<field name="detect_object_field_of_view_min" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_object_field_of_view_min" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>mm&amp;nbsp;</span>
</div>
@@ -717,19 +914,22 @@
<div class="test_model">
<div>
<label for="detect_operating_temperature" string="环境温度"/>
<field name="detect_operating_temperature" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_operating_temperature" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>°&amp;nbsp;</span>
</div>
<div>
<label for="detect_operating_humidity" string="环境湿度"/>
<field name="detect_operating_humidity" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_operating_humidity" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>°&amp;nbsp;</span>
</div>
<div>
<label for="detect_power_requirements" string="电源要求"/>
<field name="detect_power_requirements" class="o_address_zip" attrs="{'required': [('equipment_type', '=', '检测设备')]}"
<field name="detect_power_requirements" class="o_address_zip"
attrs="{'required': [('equipment_type', '=', '检测设备')]}"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
</div>

View File

@@ -66,6 +66,8 @@ class ResConfigSettings(models.TransientModel):
self.env['sf.machine_tool.type'].sync_all_machine_tool_type()
_logger.info("同步资源库机床型号完成")
self.env['maintenance.equipment.image'].sync_all_maintenance_equipment_image()
_logger.info("同步能力特征库")
except Exception as e:
_logger.info("捕获错误信息:%s" % e)
raise ValidationError("数据错误导致同步失败,请联系管理员")

View File

@@ -756,7 +756,7 @@ class FunctionalToolAssembly(models.Model):
domain=[('cutting_tool_material_id', '=', '整体式刀具')])
integral_code = fields.Char('整体式刀具序列号', readonly=True)
integral_name = fields.Char('整体式刀具名称', readonly=True)
sf_tool_brand_id_1 = fields.Many2one('sf.machine.brand', '整体式刀具品牌', readonly=True)
sf_tool_brand_id_1 = fields.Many2one('sf.machine.brand', '整体式刀具品牌', readonly=True, domain="[('tag_ids.name', 'ilike', '刀具')]")
# 刀片型号
cutting_tool_blade_model_id = fields.Many2one('product.product', string='刀片型号', readonly=True,
domain=[('cutting_tool_material_id', '=', '刀片')])

View File

@@ -19,7 +19,7 @@ class SfToolMaterialSearch(models.Model):
mrs_cutting_tool_material_name = fields.Char(related='mrs_cutting_tool_material_id.name', string='刀具物料名称',
store=True)
cutting_tool_type = fields.Char(related='mrs_cutting_tool_material_id.name', string='刀具物料类型', store=True)
mrs_machine_brand_id = fields.Many2one('sf.machine.brand', '品牌', required=True)
mrs_machine_brand_id = fields.Many2one('sf.machine.brand', '品牌', required=True, domain="[('tag_ids.name', 'ilike', '刀具')]")
# 关联刀具型号
# mrs_cutting_tool_model_id = fields.Many2one('sf.cutting.tool.model', '刀具型号')