刀具标准库page样式问题
This commit is contained in:
125
sf_base/static/js/customTable.js
Normal file
125
sf_base/static/js/customTable.js
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
// 获取表格数据
|
||||||
|
function getDomData() {
|
||||||
|
const dom = $('div[name=cutting_speed_ids]')
|
||||||
|
if (!dom.length) return
|
||||||
|
const table = dom.find('.o_list_table')
|
||||||
|
const thead = table.children('thead')
|
||||||
|
const tbody = table.children('tbody')
|
||||||
|
const tbody_child = tbody.children()
|
||||||
|
const hideTheadDom = thead.find('[data-name=process_capability]')
|
||||||
|
hideTheadDom.hide().next().hide()
|
||||||
|
hideTheadDom.before('<th customTh>精加工</th><th customTh>粗加工</th>')
|
||||||
|
tbody_child.each(function () {
|
||||||
|
const dom = $(this).children('[name=process_capability]')
|
||||||
|
if(!dom.length) return
|
||||||
|
dom.css('cssText', 'display: none!important').next().css('cssText', 'display: none!important')
|
||||||
|
const isCu = dom.text() == '粗加工' // 是否粗加工
|
||||||
|
const v = dom.next().text() // 切削速度
|
||||||
|
dom.after(`<td customSpeed="1" name="process_capability" is="精加工" val="${ v }">${!isCu ? v : ''}</td><td customSpeed="1" name="process_capability" is="粗加工" val="${ v }">${isCu ? v : ''}</td>`)
|
||||||
|
setListenClick()
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
handleTbody(tbody, newTableData, ΦList, table)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 监听点击
|
||||||
|
function setListenClick() {
|
||||||
|
$(document).click(function (e) {
|
||||||
|
if ($(e.target).attr('customSpeed')) {
|
||||||
|
const orginV = $('[customInput=1]').children('input').val()
|
||||||
|
$('[customInput=1]').parent().html(orginV)
|
||||||
|
const v = $(e.target).attr('val')
|
||||||
|
const is = $(e.target).attr('is')
|
||||||
|
$(e.target).html('')
|
||||||
|
const input = $('<div customInput="1" is="' + is + '" class="o_field_widget o_field_char"><input class="o_input" type="text" autocomplete="off" maxlength="20"></div>')
|
||||||
|
input.children('input').val(v)
|
||||||
|
$(e.target).append(input)
|
||||||
|
input.children('input').focus()
|
||||||
|
input.children('input').select()
|
||||||
|
} else if ($(e.target).attr('customInput')) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
const orginV = $('[customInput=1]').children('input').val()
|
||||||
|
$('[customInput=1]').parent().html(orginV)
|
||||||
|
const v = $(e.target).attr('val')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
$(document).off('change') // 防止重复绑定
|
||||||
|
$(document).on('change', '[customInput] input', async function () {
|
||||||
|
$(this).parents('td').attr('val', $(this).val())
|
||||||
|
$(this).parents('td').siblings('[customspeed]').attr('val', $(this).val())
|
||||||
|
var eve1 = new Event('change')
|
||||||
|
var eve2 = new Event('input')
|
||||||
|
var eve3 = new Event('click')
|
||||||
|
let patchSpeedDom = $(this).parents('td').siblings('[name=cutting_speed]')
|
||||||
|
let patchProcessDom = $(this).parents('td').siblings('[name=process_capability]')
|
||||||
|
$(this).parents('td').siblings('[customspeed]').text('') // 清空其他加工类型的数据
|
||||||
|
await timeOut(500)
|
||||||
|
patchProcessDom[0].dispatchEvent(eve3)
|
||||||
|
await timeOut(200)
|
||||||
|
const processVal = $(this).parent().attr('is')
|
||||||
|
patchProcessDom.find('select').val(`"${processVal}"`) // 设置源select的val为“加工类型 is”、
|
||||||
|
patchProcessDom.attr("data-tooltip", `${processVal}`)
|
||||||
|
patchProcessDom.find('select')[0].dispatchEvent(eve1)
|
||||||
|
|
||||||
|
patchSpeedDom[0].dispatchEvent(eve3)
|
||||||
|
await timeOut(200)
|
||||||
|
patchSpeedDom.find('input').val($(this).val())
|
||||||
|
await timeOut(50)
|
||||||
|
patchSpeedDom.find('input')[0].dispatchEvent(eve2)
|
||||||
|
patchSpeedDom.find('input')[0].dispatchEvent(eve1)
|
||||||
|
})
|
||||||
|
$(document).off('blur') // 防止重复绑定
|
||||||
|
$(document).on('blur', '[customInput] input', async function () {
|
||||||
|
if(!$(this).length) return
|
||||||
|
|
||||||
|
$(this).parents('td').siblings('[customspeed]').text('') // 清空其他加工类型的数据
|
||||||
|
let patchProcessDom = $(this).parents('td').siblings('[name=process_capability]')
|
||||||
|
try {
|
||||||
|
patchProcessDom[0].dispatchEvent(new Event('click'))
|
||||||
|
const processVal = $(this).parent().attr('is')
|
||||||
|
patchProcessDom.find('select').val(`"${processVal}"`) // 设置源select的val为“加工类型 is”、
|
||||||
|
patchProcessDom.attr("data-tooltip", `${processVal}`)
|
||||||
|
patchProcessDom.find('select')[0].dispatchEvent(new Event('change'))
|
||||||
|
} catch {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function timeOut(time) {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
setTimeout(() => {
|
||||||
|
resolve()
|
||||||
|
}, time)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function listenAdd() {
|
||||||
|
$('td.o_field_x2many_list_row_add a').click(async function () {
|
||||||
|
await timeOut(500)
|
||||||
|
const tr = $('.o_list_table').children('tbody').children('tr').eq(-2)
|
||||||
|
if(tr.children('td').eq(2).text() == '') {
|
||||||
|
const dom = tr.children('[name=process_capability]')
|
||||||
|
if(!dom.length) return
|
||||||
|
dom.css('cssText', 'display: none!important').next().css('cssText', 'display: none!important')
|
||||||
|
const isCu = dom.text() == '粗加工' // 是否粗加工
|
||||||
|
const v = dom.next().text() // 切削速度
|
||||||
|
dom.after(`<td customSpeed="1" name="process_capability" is="精加工" val="${ v }">${!isCu ? v : ''}</td><td customSpeed="1" name="process_capability" is="粗加工" val="${ v }">${isCu ? v : ''}</td>`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function listenSave() {
|
||||||
|
$('.o_form_button_save').click( async function () {
|
||||||
|
await timeOut(1000)
|
||||||
|
if($(this).parent().next().length) return
|
||||||
|
$('th[customTh],td[cusomSpeed]').remove()
|
||||||
|
getDomData()
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
listenAdd()
|
||||||
|
listenSave()
|
||||||
|
getDomData()
|
||||||
47
sf_base/static/js/setTableWidth.js
Normal file
47
sf_base/static/js/setTableWidth.js
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
// 因为表格可以拖动设置宽度,所以需要用js设置初始宽度
|
||||||
|
function setBasicParamTableWidth() {
|
||||||
|
// const _100px = 'th[data-name="cutting_blade_length"],th[data-name="cutting_blade_length"],th[data-name="name"],th[data-name="tip_handling_size"],th[data-name="cutting_depth_max"],th[data-name="diameter_inner_circle"],th[data-name="diameter_mounting_hole" ],th[data-name="radius_tip_re" ],th[data-name="is_chip_breaker"],th[data-name="chip_breaker_type_code"],th[data-name="blade_profile"]'
|
||||||
|
// const _65px = 'th[data-name="edge_angle"],th[data-name="relief_angle"],[data-name="total_length"],th[data-name="length"],th[data-name="thickness"],th[data-name="blade_number"]'
|
||||||
|
// const _80px = 'th[data-name="arbor_diameter"],th[data-name="head_height"],th[data-name="head_width"],th[data-name="head_length"],th[data-name="blade_diameter"],th[data-name="blade_length"] ,th[data-name="neck_length"] ,th[data-name="neck_diameter"] ,th[data-name="shank_diameter"],th[data-name="shank_length"],th[data-name="tip_diameter"],th[data-name="knife_tip_taper"],th[data-name="blade_helix_angle"] ,th[data-name="blade_width"],th[data-name="blade_depth"]'
|
||||||
|
// const _50px = 'th[data-name="pitch"],th[data-name="width"],th[data-name="height"]'
|
||||||
|
|
||||||
|
const basicParamDom = $('.fixTableCss')
|
||||||
|
// const basicParamDom_100px = basicParamDom.find(_100px) // 四字以上
|
||||||
|
// const basicParamDom_65px = basicParamDom.find(_65px) // 大概三个字加单位
|
||||||
|
// const basicParamDom_80px = basicParamDom.find(_80px) // 大概四个字加单位
|
||||||
|
// const basicParamDom_50px= basicParamDom.find(_50px) // 大概两个字加单位
|
||||||
|
//
|
||||||
|
// basicParamDom_100px.css({'width': '100px', 'max-width': 'auto', ',min-width': 'auto'})
|
||||||
|
// basicParamDom_65px.css({'width': '65px', 'max-width': 'auto', ',min-width': 'auto'})
|
||||||
|
// basicParamDom_80px.css({'width': '80px', 'max-width': 'auto', ',min-width': 'auto'})
|
||||||
|
// basicParamDom_50px.css({'width': '50px', 'max-width': 'auto', ',min-width': 'auto'})
|
||||||
|
let dom = []
|
||||||
|
try {
|
||||||
|
dom = basicParamDom.find('table').find('thead').children().children()
|
||||||
|
|
||||||
|
} catch {
|
||||||
|
dom = []
|
||||||
|
}
|
||||||
|
if (!dom) return
|
||||||
|
dom.each(function () {
|
||||||
|
if ($(this).hasClass('row_no') >= 0) { // 序号列
|
||||||
|
// 不设置 通过css设置
|
||||||
|
}
|
||||||
|
const text = $(this).text().split('(')
|
||||||
|
if ($(this).attr('data-name') == 'name' || text[0].length > 4) {
|
||||||
|
$(this).width('100px')
|
||||||
|
} else if(text[0].length == 4){
|
||||||
|
$(this).width('80px')
|
||||||
|
} else if(text[0].length == 3){
|
||||||
|
$(this).width('65px')
|
||||||
|
} else if(text[0].length == 2){
|
||||||
|
$(this).width('50px')
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
setBasicParamTableWidth()
|
||||||
|
$('.o_field_many2one_selection').on('click', $('#cutting_tool_material_id + ul'), function () {
|
||||||
|
setTimeout(setBasicParamTableWidth, 500)
|
||||||
|
})
|
||||||
159
sf_base/static/js/updateTable.js
Normal file
159
sf_base/static/js/updateTable.js
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
// 获取表格数据
|
||||||
|
function getDomData() {
|
||||||
|
const dom = $('#updateTable').prev()
|
||||||
|
if (!dom.length) return
|
||||||
|
const table = $('#updateTable').prev().find('.o_list_table')
|
||||||
|
const customTable = table.clone()
|
||||||
|
customTable.addClass('customTable')
|
||||||
|
table.parent().append(customTable)
|
||||||
|
table.hide()
|
||||||
|
const thead = customTable.children('thead')
|
||||||
|
const tbody = customTable.children('tbody')
|
||||||
|
const tableData = []
|
||||||
|
const tbody_child = tbody.children()
|
||||||
|
|
||||||
|
const tbody_child_len = tbody_child.length
|
||||||
|
|
||||||
|
for (let v = 0; v < tbody_child_len; v++) { // 将数据取出来到tableData里面
|
||||||
|
const data = tbody_child[v].innerText.split('\t')
|
||||||
|
// console.log('dom data',data)
|
||||||
|
const [index, deep, name, Φ, value] = data
|
||||||
|
tableData.push({index, deep, name, Φ, value})
|
||||||
|
}
|
||||||
|
const ΦList = [...new Set(tableData.map(_ => _.name))] // ΦList去重
|
||||||
|
const newTableData = {}
|
||||||
|
tableData.forEach(_ => {
|
||||||
|
const key = _.deep + '|' + _.Φ
|
||||||
|
!newTableData[key] ? newTableData[key] = {i: _.index} : '';
|
||||||
|
if (_.Φ) { // 去除没有Φ的脏数据
|
||||||
|
newTableData[key]['Φ' + _.Φ] = _.value
|
||||||
|
newTableData[key]['Φ' + _.Φ + 'i'] = _.index
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// console.log('qwdh',tableData, ΦList, newTableData);
|
||||||
|
|
||||||
|
if (ΦList.filter(_ => _).length == 0) return;
|
||||||
|
handleThead(thead, ΦList)
|
||||||
|
|
||||||
|
handleTbody(tbody, newTableData, ΦList, table)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重新设置表头、
|
||||||
|
function handleThead(thead, ΦList) {
|
||||||
|
const dom = thead.children().eq(0).children()
|
||||||
|
const len = dom.length
|
||||||
|
dom.eq(0).attr('rowspan', 2)
|
||||||
|
dom.eq(1).attr('rowspan', 2)
|
||||||
|
len == 5 ? dom.eq(2).attr('rowspan', 2) : ''
|
||||||
|
dom.eq(-2).attr('colspan', ΦList.length)
|
||||||
|
dom.eq(-1).remove()
|
||||||
|
|
||||||
|
const tr = document.createElement('tr')
|
||||||
|
for (let v = 0; v < ΦList.length; v++) {
|
||||||
|
const th = document.createElement('th')
|
||||||
|
th.innerText = 'Φ' + ΦList[v]
|
||||||
|
tr.append(th)
|
||||||
|
}
|
||||||
|
thead.append(tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重新设置表格
|
||||||
|
function handleTbody(tbody, newTableData, ΦList, table) {
|
||||||
|
console.log(newTableData)
|
||||||
|
tbody.html('')
|
||||||
|
let i = 0
|
||||||
|
const data = Object.keys(newTableData)
|
||||||
|
// data.sort((a, b) => {
|
||||||
|
// a = a.split('=')[1].split('%')[0]
|
||||||
|
// b = b.split('=')[1].split('%')[0]
|
||||||
|
// return a - b
|
||||||
|
// })
|
||||||
|
// console.log('wqoqw ',ΦList)
|
||||||
|
data.forEach(_ => {
|
||||||
|
i++
|
||||||
|
const tr = $('<tr class="o_data_row"></tr>')
|
||||||
|
const td0 = $('<td></td>')
|
||||||
|
td0.text(i)
|
||||||
|
tr.append(td0)
|
||||||
|
const lit = _.split('|')
|
||||||
|
//
|
||||||
|
const td1 = $('<td></td>')
|
||||||
|
const td2 = $('<td></td>')
|
||||||
|
td1.text(lit[0])
|
||||||
|
td2.text(lit[1] || '')
|
||||||
|
tr.append(td1)
|
||||||
|
tr.append(td2)
|
||||||
|
ΦList.forEach(Φ => {
|
||||||
|
const td = $('<td class="o_data_cell cursor-pointer o_field_cell o_list_char"></td>')
|
||||||
|
td.text(newTableData[_]['Φ' + Φ])
|
||||||
|
td.attr('col', newTableData[_]['Φ' + Φ + 'i'])
|
||||||
|
td.attr('val', newTableData[_]['Φ' + Φ])
|
||||||
|
td.attr('coustomTd', 1)
|
||||||
|
tr.append(td)
|
||||||
|
})
|
||||||
|
// // for (let j = 0; j < ΦList.length; j++) {
|
||||||
|
// // const td = document.createElement('td')
|
||||||
|
// // td.innerText = newTableData[data[v]][_]
|
||||||
|
// // th.append(td)
|
||||||
|
// // }
|
||||||
|
tbody.append(tr)
|
||||||
|
})
|
||||||
|
// $(document).click(function (e) {
|
||||||
|
// if ($(e.target).attr('coustomTd')) {
|
||||||
|
// const orginV = $('[coustomInput=1]').children('input').val()
|
||||||
|
// $('[coustomInput=1]').parent().html(orginV)
|
||||||
|
// const v = $(e.target).attr('val')
|
||||||
|
// console.log($(e.target));
|
||||||
|
// $(e.target).html('')
|
||||||
|
// const input = $('<div coustomInput="1" name="feed_per_tooth" class="o_field_widget o_field_char"><input class="o_input" type="text" autocomplete="off" maxlength="20"></div>')
|
||||||
|
// input.children('input').val(v)
|
||||||
|
// $(e.target).append(input)
|
||||||
|
// input.children('input').focus()
|
||||||
|
// input.children('input').select()
|
||||||
|
// } else if ($(e.target).attr('coustomInput')) {
|
||||||
|
//
|
||||||
|
// } else {
|
||||||
|
// const orginV = $('[coustomInput=1]').children('input').val()
|
||||||
|
// $('[coustomInput=1]').parent().html(orginV)
|
||||||
|
// const v = $(e.target).attr('val')
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// $(document).off('change') // 防止重复绑定
|
||||||
|
// $(document).on('change', '[coustomInput] input', function () {
|
||||||
|
// $(this).parents('td').attr('val', $(this).val());
|
||||||
|
// var eve1 = new Event('change');
|
||||||
|
// var eve2 = new Event('input');
|
||||||
|
// var eve3 = new Event('click');
|
||||||
|
// const i = $(this).parents('td').attr('col');
|
||||||
|
// let patchDom = table.find('tbody').children('tr').eq(i - 1);
|
||||||
|
//
|
||||||
|
// if (patchDom.length === 0) {
|
||||||
|
// console.error('No such row found');
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// patchDom = patchDom.children().eq(-1);
|
||||||
|
//
|
||||||
|
// setTimeout(() => {
|
||||||
|
// if (patchDom.length === 0) {
|
||||||
|
// console.error('No such cell found');
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// patchDom[0].dispatchEvent(eve3); // Simulate click event
|
||||||
|
//
|
||||||
|
// setTimeout(() => {
|
||||||
|
// patchDom = patchDom.find('input');
|
||||||
|
// if (patchDom.length === 0) {
|
||||||
|
// console.error('No input found in the target cell');
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// patchDom.val($(this).val());
|
||||||
|
// patchDom[0].dispatchEvent(eve2);
|
||||||
|
// patchDom[0].dispatchEvent(eve1);
|
||||||
|
// }, 200);
|
||||||
|
// }, 500);
|
||||||
|
// });
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
getDomData()
|
||||||
52
sf_base/static/src/scss/change.scss
Normal file
52
sf_base/static/src/scss/change.scss
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
.o_list_renderer .o_list_table tbody > tr > td:not(.o_list_record_selector):not(.o_handle_cell):not(.o_list_button):not(.o_list_record_remove) {
|
||||||
|
white-space: nowrap !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-truncate {
|
||||||
|
overflow: unset !important;
|
||||||
|
text-overflow: unset !important;
|
||||||
|
white-space: unset !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 设置表格不超出页面宽度
|
||||||
|
.o_form_view .o_field_widget .o_list_renderer {
|
||||||
|
width: calc(100% - 64px) !important;
|
||||||
|
margin:0 auto;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 表格针对处理
|
||||||
|
.fixTableCss {
|
||||||
|
text-align: center;
|
||||||
|
.o_list_number_th,.o_list_number {
|
||||||
|
text-align: center!important;
|
||||||
|
}
|
||||||
|
.ui-sortable {
|
||||||
|
tr > td:first-child {
|
||||||
|
padding: 0!important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.row_no {
|
||||||
|
padding: 0!important;;
|
||||||
|
width: 35px!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
th[data-name="total_length"],th[data-name="length"],th[data-name="thickness"] {
|
||||||
|
.flex-row-reverse {
|
||||||
|
span {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 其他不能用js处理的表格
|
||||||
|
.otherTableFix {
|
||||||
|
th[data-name="cutting_tool_material_id"] {
|
||||||
|
width: 100px!important;
|
||||||
|
}
|
||||||
|
th[data-name="ramping_angle_max"],th[data-name="ramping_angle_min"] {
|
||||||
|
width: 200px!important;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -360,6 +360,7 @@
|
|||||||
<field name="cooling_jacket"/>
|
<field name="cooling_jacket"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
|
<script src="/sf_base/static/js/setTableWidth.js?time=3"></script>
|
||||||
</page>
|
</page>
|
||||||
<page string="切削速度Vc"
|
<page string="切削速度Vc"
|
||||||
attrs="{'invisible': [('cutting_tool_type', 'not in', ('整体式刀具','刀片'))]}">
|
attrs="{'invisible': [('cutting_tool_type', 'not in', ('整体式刀具','刀片'))]}">
|
||||||
@@ -380,6 +381,9 @@
|
|||||||
<field name="cutting_speed"/>
|
<field name="cutting_speed"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
|
<script src="/sf_base/static/js/customTable.js?time=3"></script>
|
||||||
|
<script src="/sf_base/static/js/setTableWidth.js?time=3"></script>
|
||||||
|
|
||||||
</page>
|
</page>
|
||||||
<page string="每齿走刀量fz"
|
<page string="每齿走刀量fz"
|
||||||
attrs="{'invisible': [('cutting_tool_type', 'not in', ('整体式刀具','刀片'))]}">
|
attrs="{'invisible': [('cutting_tool_type', 'not in', ('整体式刀具','刀片'))]}">
|
||||||
@@ -392,6 +396,8 @@
|
|||||||
<field name="feed_per_tooth"/>
|
<field name="feed_per_tooth"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
|
<div id="updateTable"></div>
|
||||||
|
<script src="/sf_base/static/js/updateTable.js?time=3"></script>
|
||||||
<field name="feed_per_tooth_ids_3"
|
<field name="feed_per_tooth_ids_3"
|
||||||
attrs="{'invisible': [('cutting_tool_type', 'not in', ('刀片'))]}">
|
attrs="{'invisible': [('cutting_tool_type', 'not in', ('刀片'))]}">
|
||||||
<tree editable="bottom" class="center" create="0" delete="0">
|
<tree editable="bottom" class="center" create="0" delete="0">
|
||||||
|
|||||||
Reference in New Issue
Block a user