256 lines
10 KiB
JavaScript
256 lines
10 KiB
JavaScript
odoo.define('sf_demand.print_demand', function (require) {
|
|
"use strict";
|
|
|
|
var ListController = require('web.ListController');
|
|
var ListRenderer = require('web.ListRenderer');
|
|
var ListView = require('web.ListView');
|
|
var viewRegistry = require('web.view_registry');
|
|
var { url } = require("@web/core/utils/urls")
|
|
|
|
var CustomListRenderer = ListRenderer.extend({
|
|
_render: function () {
|
|
var self = this;
|
|
this.getParent()?.$buttons.hide();
|
|
|
|
return this._super.apply(this, arguments).then(function () {
|
|
if(!self.state.data || !self.state.data.length) return
|
|
// 添加图片预览容器到页面左侧
|
|
if (!$('.table-image-preview-container').length) {
|
|
self.$el.parent().addClass('custom-table-image-container')
|
|
self.$el.before(
|
|
`<div class="custom-preview-container">
|
|
<img class="table-image-preview-container" src="" />
|
|
<iframe class="table-image-preview-container" src=""/>
|
|
</div>`
|
|
);
|
|
|
|
}
|
|
|
|
if(!$('.denmand_set').length) {
|
|
|
|
const checked = self.getParent().radioCheck || 'all'
|
|
|
|
self.$el.prepend(`
|
|
<form class="denmand_set">
|
|
<span>更多设置:</span>
|
|
<input type="radio" id="male" name="set" value="图纸">
|
|
<label for="male">图纸</label>
|
|
<input type="radio" id="female" name="set" value="程序单">
|
|
<label for="female">程序单</label>
|
|
<input type="radio" id="other" name="set" value="all" >
|
|
<label for="other">图纸/程序单</label>
|
|
</form>
|
|
`)
|
|
setTimeout(() => {
|
|
$(`input[name=set][value=${checked}]`).prop('checked', true)
|
|
$('.denmand_set').trigger('click')
|
|
}, 100);
|
|
self.$el.prepend(`
|
|
<div class="print-button-container" style="margin-bottom:10px;">
|
|
<button class="btn btn-primary o_print_custom">
|
|
<i class="fa fa-print"></i> 打印
|
|
</button>
|
|
<button class="btn btn-secondary o_cancel_custom">
|
|
取消
|
|
</button>
|
|
</div>
|
|
`);
|
|
}
|
|
});
|
|
},
|
|
start: function() {
|
|
setTimeout(() => {
|
|
this.$el.find('.o_data_row').eq(0).trigger('click')
|
|
this.getParent().$el?.find('.o_cp_top_right,.o_cp_bottom').hide()
|
|
}, 500);
|
|
return this._super();
|
|
},
|
|
events: _.extend({}, ListRenderer.prototype.events, {
|
|
'click .o_data_row': '_onCustomRowClick',
|
|
'click .o_print_custom': '_onPrintClick',
|
|
'click .o_cancel_custom': '_onCancelClick',
|
|
'click .denmand_set': '_onDenmandChange',
|
|
}),
|
|
_onCancelClick() {
|
|
this.getParent()?.getParent()?.dialogs.closeAll()
|
|
},
|
|
_onCustomRowClick: async function (ev) {
|
|
var self = this;
|
|
var $row = $(ev.currentTarget);
|
|
var index = $row.index();
|
|
var data = this.state.data[index];
|
|
if(data.fileData?.fileUrl) {
|
|
|
|
} else {
|
|
data.fileData = { }
|
|
if(data.res_id) {
|
|
// 正确获取 ORM 服务的方式
|
|
// var orm = this.getParent().getParent().env.services
|
|
const key = data.data.type == 1 ? 'machining_drawings' : 'cnc_worksheet'
|
|
const attachment = await this._rpc({
|
|
model: 'ir.binary',
|
|
method: 'attachment_info',
|
|
args: [
|
|
data.model,
|
|
data.res_id,
|
|
key
|
|
],
|
|
})
|
|
|
|
if (attachment) {
|
|
Object.assign(data.fileData, attachment)
|
|
this._getTypeInfo(attachment.mimetype, data.fileData)
|
|
}
|
|
const fileUrl = this.getFileUrl(data.fileData.attachment_type, data, key)
|
|
data.fileData.fileUrl = fileUrl
|
|
}
|
|
}
|
|
$('.table-image-preview-container').hide()
|
|
if(data.fileData.attachment_type == 'iframe') {
|
|
|
|
$('iframe.table-image-preview-container').attr('src', decodeURIComponent(data.fileData.fileUrl) ).show()
|
|
} else {
|
|
$('img.table-image-preview-container').attr('src', data.fileData.fileUrl).show()
|
|
}
|
|
},
|
|
getSelectedIds: function() {
|
|
return this.state.data.filter(_ => !_.hide).map(_ => {
|
|
return _.data.id
|
|
})
|
|
},
|
|
_onPrintClick(e) {
|
|
var print_ids = this.getSelectedIds();
|
|
this._rpc({
|
|
model: 'sf.demand.plan.print.wizard',
|
|
method: 'demand_plan_print',
|
|
args: [ print_ids ] ,
|
|
// context: this.state.getContext()
|
|
}).then((e) => {
|
|
|
|
this.getParent()?.getParent()?.env.services?.notification.notify( {
|
|
type: 'info',
|
|
message: e.message,
|
|
})
|
|
// self.do_notify("成功", "打印任务已发送到打印机");
|
|
}).catch(function(error) {
|
|
console.error("打印错误:", error);
|
|
// self.do_warn("打印失败", error.data.message || "未知错误");
|
|
}).finally(e => {
|
|
this.getParent().reload()
|
|
})
|
|
|
|
},
|
|
_onDenmandChange(e) {
|
|
const isChecked = $(e.currentTarget).find('input:checked').val()
|
|
this.getParent().radioCheck = isChecked
|
|
this.$el.find('tbody').find('.o_data_row').show()
|
|
|
|
this.state.data.forEach(_ => {
|
|
_.hide = false
|
|
})
|
|
const self = this
|
|
if(!isChecked || isChecked == 'all') return
|
|
this.$el.find('tbody').children('.o_data_row').each(function() {
|
|
if($(this).find('td[name=type]').text() != isChecked) {
|
|
const i = $(this).index()
|
|
|
|
self.state.data[i].hide = true
|
|
$(this).hide()
|
|
}
|
|
})
|
|
},
|
|
getFileUrl(attachment_type, data, key) {
|
|
let fileUrl
|
|
switch (attachment_type) {
|
|
case 'image':
|
|
const timer = +new Date()
|
|
fileUrl = url("/web/image", {
|
|
model: data.model,
|
|
id: data.res_id,
|
|
field: key,
|
|
unique: '',
|
|
timer
|
|
});
|
|
|
|
break;
|
|
case 'iframe':
|
|
|
|
const iframe_file_url = encodeURIComponent(
|
|
url("/web/content", {
|
|
model: data.model,
|
|
id: data.res_id,
|
|
field: key,
|
|
})
|
|
);
|
|
fileUrl = `${this.state.attachment_base}?file=${iframe_file_url}`;
|
|
case 'unknown':
|
|
fileUrl = encodeURIComponent(
|
|
url("/web/content", {
|
|
model: data.model,
|
|
id: data.res_id,
|
|
field: key,
|
|
})
|
|
);
|
|
}
|
|
|
|
return fileUrl
|
|
},
|
|
_getTypeInfo(type, data) {
|
|
switch (type) {
|
|
case 'application/pdf':
|
|
data.attachment_base = `/web/static/lib/pdfjs/web/viewer.html`;
|
|
data.attachment_type = 'iframe'
|
|
break;
|
|
case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
|
|
data.attachment_base = `/jikimo_attachment_viewer/static/lib/docxjs/viewer.html`;
|
|
data.attachment_type = 'iframe'
|
|
break;
|
|
case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
|
|
data.attachment_base = `/jikimo_attachment_viewer/static/lib/exceljs/viewer.html`;
|
|
data.attachment_type = 'iframe'
|
|
break;
|
|
case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':
|
|
data.attachment_base = '';
|
|
data.attachment_type = 'unknown'
|
|
break;
|
|
case 'image/png':
|
|
case 'image/jpeg':
|
|
case 'image/jpg':
|
|
data.attachment_base = ''
|
|
data.attachment_type = 'image'
|
|
break;
|
|
default:
|
|
data.attachment_base = ''
|
|
data.attachment_type = 'unknown'
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
|
|
var CustomListController = ListController.extend({
|
|
// 可以保留或移除,根据是否需要处理自定义事件
|
|
// 处理打印操作
|
|
// rpc.query({
|
|
// model: 'sf.demand.plan.print.wizard',
|
|
// method: 'demand_plan_print',
|
|
// args: [recordIds]
|
|
// }).then(function(result) {
|
|
// self.do_notify("成功", "打印任务已发送到打印机");
|
|
// // 刷新视图显示最新状态
|
|
// self.reload();
|
|
// }).catch(function(error) {
|
|
// self.do_warn("打印失败", error.data.message || "发生未知错误");
|
|
// });
|
|
});
|
|
|
|
var PrintDemand = ListView.extend({
|
|
config: _.extend({}, ListView.prototype.config, {
|
|
Renderer: CustomListRenderer,
|
|
Controller: CustomListController,
|
|
}),
|
|
});
|
|
|
|
viewRegistry.add('print_demand', PrintDemand);
|
|
|
|
return PrintDemand;
|
|
}); |