From ca3015600ac44d0982d452a7219d1b30ee04c22f Mon Sep 17 00:00:00 2001
From: mgw <1392924357@qq.com>
Date: Wed, 15 Jan 2025 10:18:25 +0800
Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=89=AB=E7=A0=81widget?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_manufacturing/static/src/js/qr.js | 118 ++++--------------
sf_manufacturing/views/mrp_workorder_view.xml | 5 +-
2 files changed, 26 insertions(+), 97 deletions(-)
diff --git a/sf_manufacturing/static/src/js/qr.js b/sf_manufacturing/static/src/js/qr.js
index fd501f27..673dc682 100644
--- a/sf_manufacturing/static/src/js/qr.js
+++ b/sf_manufacturing/static/src/js/qr.js
@@ -1,115 +1,41 @@
/** @odoo-module **/
import { registry } from '@web/core/registry';
-import { Component } from '@odoo/owl';
+import { Component, onWillUpdateProps } from '@odoo/owl';
class QRCodeWidget extends Component {
- // 初始化组件
setup() {
- console.log('QRCodeWidget setup');
- this.qrCodeValue = ''; // 初始化为空字符串,用于存储条码
- this.inputBuffer = ''; // 存储临时输入的字符
- this.inputTimer = null; // 定时器
+ super.setup();
+ console.log('===================')
- // 显式绑定上下文
- this.onGlobalKeyDown = this.onGlobalKeyDown.bind(this);
- window.addEventListener('keydown', this.onGlobalKeyDown);
- }
+ // 记录初始值
+ this.lastValue = this.props.value;
- // 清理事件监听器,防止内存泄漏
- willUnmount() {
- window.removeEventListener('keydown', this.onGlobalKeyDown);
- if (this.inputTimer) {
- clearTimeout(this.inputTimer);
- }
- }
-
- // 全局键盘事件监听器
- onGlobalKeyDown(event) {
-
- // 如果是Tab键,表示扫码输入结束
- if (event.key === 'Tab' || event.key === 'Enter') {
- this.qrCodeValue = this.inputBuffer; // 完整条码赋值
- console.log('完整条码:', this.qrCodeValue);
- this.onQRCodeChange(this.qrCodeValue); // 调用父组件的 onQRCodeChange 方法
- this.inputBuffer = ''; // 清空临时缓冲区
- event.preventDefault(); // 阻止Tab键的默认行为
- return;
- }
-
- // 只处理可打印字符
- if (event.key.length === 1) {
- this.inputBuffer += event.key; // 添加到缓冲区
- // console.log('当前缓冲区:', this.inputBuffer);
-
- // 清除之前的定时器,重新开始计时
- if (this.inputTimer) {
- clearTimeout(this.inputTimer);
+ // 使用 onWillUpdateProps 监听 props 变化
+ onWillUpdateProps((nextProps) => {
+ if (nextProps.value && nextProps.value !== this.lastValue) {
+ this.lastValue = nextProps.value;
+ this.handleRfidUpdate();
}
-
- // 启动一个定时器,如果500ms内没有新的输入,则认为条码输入完成
- this.inputTimer = setTimeout(() => {
- this.qrCodeValue = this.inputBuffer;
- // console.log('定时器触发,完整条码:', this.qrCodeValue);
- this.inputBuffer = ''; // 清空缓冲区
- }, 500); // 可以根据需要调整时间
- }
-
+ });
}
- // 处理二维码输入变更
- async onQRCodeChange(qrCodeValue) {
- console.log('onQRCodeChange二维码输入变更', qrCodeValue); // 检查二维码的输入是否被捕获
+ async handleRfidUpdate() {
+ const routingTypeField = document.querySelector('[name="routing_type"]');
+ if (routingTypeField) {
+ let fieldValue = routingTypeField.querySelector('span').getAttribute('raw-value');
+ fieldValue = fieldValue ? fieldValue.replace(/["]+/g, '') : null;
- if (qrCodeValue) {
- // console.log('二维码输入变更');
- try {
- // 发起 RPC 请求
- const result = await this.env.services.rpc('/web/dataset/call_kw', {
- model: 'mrp.workorder',
- method: 'search_read',
- args: [
- [['rfid_code', '=', qrCodeValue]], // 查询条件
- ['id'] // 返回的字段
- ],
- kwargs: {}
- });
-
- if (result.length > 0) {
- console.log('该二维码对应的工单存在!');
- } else {
- console.log('未找到对应的工单。');
-
- const routingTypeField = document.querySelector('[name="routing_type"]');
- if (routingTypeField) {
- let fieldValue = routingTypeField.querySelector('span').getAttribute('raw-value');
- console.log('Routing Type Value:', fieldValue);
- // 清理多余的引号
- fieldValue = fieldValue ? fieldValue.replace(/["]+/g, '') : null;
- console.log(fieldValue);
-
- if (fieldValue && fieldValue === '装夹预调') {
- // console.log('routing_type 为装夹预调');
-
- // 检查 RFID 值
- if (!qrCodeValue || qrCodeValue.length <= 3) return;
-
- // 查找 name="button_start" 按钮并触发点击事件
- const startButton = document.querySelector('[name="button_start"]');
- if (startButton) {
- startButton.click();
- }
- }
- }
+ if (fieldValue === '装夹预调') {
+ console.log('woshiddddddddddddddddd')
+ const startButton = document.querySelector('[name="button_start"]');
+ if (startButton) {
+ startButton.click();
}
- } catch (error) {
- console.error('查询工单时出错:', error);
}
}
}
- // 返回模板名称
static template = 'sf_manufacturing.QRCodeWidgetTemplate';
}
-// 将自定义字段注册到字段注册表
-registry.category('fields').add('qrcode_widget', QRCodeWidget);
+registry.category('fields').add('qrcode_widget', QRCodeWidget);
\ No newline at end of file
diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml
index 205f56cc..3a48170f 100644
--- a/sf_manufacturing/views/mrp_workorder_view.xml
+++ b/sf_manufacturing/views/mrp_workorder_view.xml
@@ -126,6 +126,9 @@
mrp.workorder
+
@@ -308,7 +311,7 @@
-
+