diff --git a/apps/hand-factory/components/klp-material-picker/klp-material-picker.vue b/apps/hand-factory/components/klp-material-picker/klp-material-picker.vue
index fbf4582..f9601f6 100644
--- a/apps/hand-factory/components/klp-material-picker/klp-material-picker.vue
+++ b/apps/hand-factory/components/klp-material-picker/klp-material-picker.vue
@@ -49,7 +49,7 @@
- {{ product.productName }}【{{ product.specification || '暂无规格' }}】
+ {{ product.productName }}【{{ product.specification || '暂无规格' }}】({{ product.material }})
✓
@@ -75,7 +75,7 @@
- {{ material.rawMaterialName }}【{{ material.specification || '暂无规格' }}】
+ {{ material.rawMaterialName }}【{{ material.specification || '暂无规格' }}】({{ material.material }})
✓
@@ -122,6 +122,10 @@
type: [String, Number],
default: undefined
},
+ materialType: {
+ type: String,
+ default: undefined
+ },
disabled: {
type: Boolean,
default: false
@@ -270,6 +274,7 @@
this.$emit('update:itemId', product.productId);
this.$emit('update:itemType', 'product');
+ this.$emit('update:materialType', '成品')
this.selectedName = product.productName;
uni.showToast({ title: `已选择产品:${product.productName}`, icon: 'success' });
this.closeProductPicker();
@@ -282,6 +287,7 @@
this.$emit('update:itemId', material.rawMaterialId);
this.$emit('update:itemType', 'raw_material');
+ this.$emit('update:materialType', '原料')
this.selectedName = material.rawMaterialName;
uni.showToast({ title: `已选择原材料:${material.rawMaterialName}`, icon: 'success' });
this.closeRawMaterialPicker();
diff --git a/apps/hand-factory/config.js b/apps/hand-factory/config.js
index d9f1751..cc41aeb 100644
--- a/apps/hand-factory/config.js
+++ b/apps/hand-factory/config.js
@@ -1,7 +1,7 @@
// 应用全局配置
module.exports = {
- baseUrl: 'http://192.168.31.116:8080',
- // baseUrl: 'http://140.143.206.120:8080',
+ // baseUrl: 'http://192.168.31.116:8080',
+ baseUrl: 'http://140.143.206.120:8080',
// baseUrl: 'http://localhost:8080',
// 应用信息
appInfo: {
diff --git a/apps/hand-factory/manifest.json b/apps/hand-factory/manifest.json
index 5133b46..13a5c13 100644
--- a/apps/hand-factory/manifest.json
+++ b/apps/hand-factory/manifest.json
@@ -2,7 +2,7 @@
"name" : "科伦普",
"appid" : "__UNI__E781B49",
"description" : "",
- "versionName" : "1.3.12",
+ "versionName" : "1.3.13",
"versionCode" : 1,
"transformPx" : false,
"app-plus" : {
diff --git a/apps/hand-factory/pages.json b/apps/hand-factory/pages.json
index de46b11..109fb1a 100644
--- a/apps/hand-factory/pages.json
+++ b/apps/hand-factory/pages.json
@@ -55,6 +55,20 @@
{
"navigationBarTitleText" : "扫码结果"
}
+ },
+ {
+ "path" : "pages/easycode/tranfer",
+ "style" :
+ {
+ "navigationBarTitleText" : "移库操作"
+ }
+ },
+ {
+ "path" : "pages/easycode/editby",
+ "style" :
+ {
+ "navigationBarTitleText" : "查看钢卷"
+ }
}
// {
// "path": "pages/register",
diff --git a/apps/hand-factory/pages/easycode/easycode.vue b/apps/hand-factory/pages/easycode/easycode.vue
index d7e3413..dc2996d 100644
--- a/apps/hand-factory/pages/easycode/easycode.vue
+++ b/apps/hand-factory/pages/easycode/easycode.vue
@@ -7,10 +7,7 @@
分条操作
-
@@ -24,10 +21,7 @@
其他操作
-
@@ -41,13 +35,14 @@
快捷操作
-
+
+
-
+
@@ -70,21 +65,40 @@
当前库区
- {{ coilDetail.actualWarehouseName }}
+ {{ coilDetail.actualWarehouseName || '-' }}
+
+
- 真实库区
-
+ 目标库区
+
+
+
+
+ 📷
+
+ 扫描库区码
+ 请扫描目标库区的二维码
+
+
+
+
+
+ 已选中:
+ {{ targetWarehouse.actualWarehouseName }}
+
+
+
-
-
@@ -109,11 +123,17 @@
} from '@/api/wms/code.js'
import {
getMaterialCoil,
- updateMaterialCoilSimple
+ updateMaterialCoilSimple,
+ listMaterialCoil,
+ updateMaterialCoil
} from '@/api/wms/coil.js'
import {
addPendingAction
} from '@/api/wms/pendingAction.js'
+ // 导入获取库区详情的接口(需确保接口存在,若接口名不同请调整)
+ import {
+ getActualWarehouse
+ } from '@/api/wms/actualWarehouse.js'
export default {
data() {
@@ -121,7 +141,9 @@
types: [],
loading: false,
coilDetail: {},
- form: {}
+ form: {},
+ targetWarehouse: null, // 存储选中的目标库区信息
+ bomDialogShow: false // BOM参数弹窗控制(原有功能补充)
}
},
computed: {
@@ -148,413 +170,450 @@
})
})
},
-
- // 扫码并创建待操作
- handleScan(actionType) {
+
+ handleSee() {
uni.scanCode({
- success: async (res) => {
- console.log('=== 开始扫码流程 ===');
- console.log('扫码结果:', res.result);
- console.log('操作类型:', actionType);
- uni.showLoading({
- title: '处理中...'
- });
-
- try {
- const qrcodeId = res.result;
- // 1. 通过二维码ID获取二维码详情
- console.log('1. 获取二维码详情,ID:', qrcodeId);
- const qrcodeRes = await getGenerateRecord(qrcodeId);
- console.log('二维码响应:', qrcodeRes);
-
- if (qrcodeRes.code !== 200) {
- throw new Error('未找到二维码记录');
- }
-
- // 2. 解析二维码的content,获取coil_id
- const qrcodeRecord = qrcodeRes.data;
- console.log('2. 二维码记录:', qrcodeRecord);
-
- // 检查二维码状态(0=失效,1=有效)
- if (qrcodeRecord.status === 0) {
- uni.hideLoading();
- uni.showModal({
- title: '提示',
- content: '该二维码已失效,无法创建待操作任务',
- showCancel: false
- });
- return;
- }
-
- const content = JSON.parse(qrcodeRecord.content);
- console.log('解析后的内容:', content);
-
- // 优先使用current_coil_id(当前有效的钢卷ID),如果没有则使用coil_id(兼容旧数据)
- let coilId = content.current_coil_id && content.current_coil_id !== 'null' ? content
- .current_coil_id : null;
- if (!coilId) {
- coilId = content.coil_id && content.coil_id !== 'null' ? content.coil_id : null;
- }
-
- console.log('提取钢卷ID - current_coil_id:', content.current_coil_id, 'coil_id:', content.coil_id,
- '最终使用:', coilId);
-
- if (!coilId) {
- throw new Error('二维码中未包含有效的钢卷ID');
- }
-
- // 3. 直接通过钢卷ID获取钢卷详情
- console.log('3. 获取钢卷详情,钢卷ID:', coilId);
- const coilRes = await getMaterialCoil(coilId);
- console.log('钢卷详情响应:', coilRes);
-
- if (coilRes.code !== 200) {
- throw new Error(coilRes.msg || '查询钢卷信息失败');
- }
-
- if (!coilRes.data) {
- throw new Error('未找到钢卷信息');
- }
-
- const coilData = coilRes.data;
- console.log('4. 钢卷数据:', coilData);
-
- // 4. 创建待操作记录
- const pendingData = {
- coilId: coilData.coilId,
- currentCoilNo: coilData.currentCoilNo,
- actionType: parseInt(actionType),
- actionStatus: 0, // 待处理
- sourceType: 'scan', // 扫码来源
- scanTime: new Date().toISOString(),
- scanDevice: this.getDeviceInfo(),
- warehouseId: coilData.warehouseId,
- priority: 0, // 默认普通优先级
- remark: `移动端扫码创建-${this.getActionTypeName(actionType)}`
- };
-
- console.log('5. 创建待操作记录,数据:', pendingData);
-
- const addRes = await addPendingAction(pendingData);
- console.log('创建待操作响应:', addRes);
-
- if (addRes.code !== 200) {
- throw new Error(addRes.msg || '创建待操作失败');
- }
-
- uni.hideLoading();
- console.log('=== 扫码流程完成 ===');
- uni.navigateTo({
- url: '/pages/scansuccess/scansuccess'
- })
- // uni.showToast({
- // title: '创建成功',
- // icon: 'success',
- // duration: 2000
- // });
-
- // // 延迟后返回或跳转
- // setTimeout(() => {
- // // 可以跳转到待操作列表或返回上一页
- // uni.navigateBack();
- // }, 2000);
-
- } catch (err) {
- console.error('=== 扫码处理失败 ===');
- console.error('错误信息:', err);
- console.error('错误堆栈:', err.stack);
- uni.hideLoading();
- uni.showToast({
- title: err.message || '处理失败',
- icon: 'none',
- duration: 3000
- });
- }
- },
- fail: (err) => {
- console.error('扫码失败:', err);
- uni.showToast({
- title: '扫码失败,请重试',
- icon: 'none'
- });
- }
- });
- },
-
- handleShip() {
- uni.scanCode({
- success: async (res) => {
- console.log('=== 开始扫码流程 ===');
- console.log('扫码结果:', res.result);
- // console.log('操作类型:', actionType);
- uni.showLoading({
- title: '处理中...'
- });
-
- try {
- const qrcodeId = res.result;
- // 1. 通过二维码ID获取二维码详情
- console.log('1. 获取二维码详情,ID:', qrcodeId);
- const qrcodeRes = await getGenerateRecord(qrcodeId);
- console.log('二维码响应:', qrcodeRes);
-
- if (qrcodeRes.code !== 200) {
- throw new Error('未找到二维码记录');
- }
-
- // 2. 解析二维码的content,获取coil_id
- const qrcodeRecord = qrcodeRes.data;
- console.log('2. 二维码记录:', qrcodeRecord);
-
- // 检查二维码状态(0=失效,1=有效)
- if (qrcodeRecord.status === 0) {
- uni.hideLoading();
- uni.showModal({
- title: '提示',
- content: '该二维码已失效,无法创建待操作任务',
- showCancel: false
- });
- return;
- }
-
- const content = JSON.parse(qrcodeRecord.content);
- console.log('解析后的内容:', content);
-
- // 优先使用current_coil_id(当前有效的钢卷ID),如果没有则使用coil_id(兼容旧数据)
- let coilId = content.current_coil_id && content.current_coil_id !== 'null' ? content
- .current_coil_id : null;
- if (!coilId) {
- coilId = content.coil_id && content.coil_id !== 'null' ? content.coil_id : null;
- }
-
- console.log('提取钢卷ID - current_coil_id:', content.current_coil_id, 'coil_id:', content.coil_id,
- '最终使用:', coilId);
-
- if (!coilId) {
- throw new Error('二维码中未包含有效的钢卷ID');
- }
-
-
- // 3. 直接通过钢卷ID获取钢卷详情
- console.log('3. 获取钢卷详情,钢卷ID:', coilId);
- const coilRes = await getMaterialCoil(coilId);
- console.log('钢卷详情响应:', coilRes);
-
- if (coilRes.code !== 200) {
- throw new Error(coilRes.msg || '查询钢卷信息失败');
- }
-
- if (!coilRes.data) {
- throw new Error('未找到钢卷信息');
- }
-
- const coilData = coilRes.data;
-
- if (coilRes.data.status == 1) {
+ success(scanRes) {
+ // 查询真实库区在此处的钢卷
+ listMaterialCoil({ actualWarehouseId: scanRes.result, dataType: 1 }).then(res => {
+ if (res.total == 0) {
uni.showToast({
- title: '钢卷已经发货,无需再次发货'
- })
- return;
- }
-
- uni.showModal({
- cancelText: '取消',
- confirmText: '确认',
- title: '确定要将钢卷号为:' + coilRes.data.currentCoilNo + '发货吗?',
- showCancel: true,
- success: async () => {
- try {
- // 1. 更新钢卷状态为已发货
- await updateMaterialCoilSimple({
- ...coilRes.data,
- status: 1,
- });
-
- // 2. 插入一条已完成的待操作记录
- await addPendingAction({
- coilId: coilRes.data.coilId,
- currentCoilNo: coilRes.data.currentCoilNo,
- actionType: 4, // 4=发货
- actionStatus: 2, // 2=已完成
- scanTime: new Date(),
- scanDevice: this.getDeviceInfo(),
- priority: 0, // 0=普通
- sourceType: 'scan',
- warehouseId: coilRes.data.warehouseId,
- processTime: new Date(),
- completeTime: new Date()
- });
-
- uni.showToast({
- title: '发货成功',
- icon: 'none'
- });
- } catch (error) {
- console.error('发货失败:', error);
- uni.showToast({
- title: error.message || '发货失败',
- icon: 'none'
- });
- }
- },
- fail() {
- uni.showToast({
- title: '已取消发货',
- icon: 'none'
- })
- }
- });
- uni.hideLoading();
- } catch (err) {
- console.error('=== 扫码处理失败 ===');
- console.error('错误信息:', err);
- console.error('错误堆栈:', err.stack);
- uni.hideLoading();
- uni.showToast({
- title: err.message || '处理失败',
- icon: 'none',
- duration: 3000
- });
- }
- },
- fail: (err) => {
- console.error('扫码失败:', err);
- uni.showToast({
- title: '扫码失败,请重试',
- icon: 'none'
- });
- }
- });
- },
-
- handleTranfer() {
- uni.scanCode({
- success: async (res) => {
- console.log('=== 开始扫码流程 ===');
- console.log('扫码结果:', res.result);
- // console.log('操作类型:', actionType);
- uni.showLoading({
- title: '处理中...'
- });
-
- try {
- const qrcodeId = res.result;
- // 1. 通过二维码ID获取二维码详情
- console.log('1. 获取二维码详情,ID:', qrcodeId);
- const qrcodeRes = await getGenerateRecord(qrcodeId);
- console.log('二维码响应:', qrcodeRes);
-
- if (qrcodeRes.code !== 200) {
- throw new Error('未找到二维码记录');
- }
-
- // 2. 解析二维码的content,获取coil_id
- const qrcodeRecord = qrcodeRes.data;
- console.log('2. 二维码记录:', qrcodeRecord);
-
- // 检查二维码状态(0=失效,1=有效)
- if (qrcodeRecord.status === 0) {
- uni.hideLoading();
- uni.showModal({
- title: '提示',
- content: '该二维码已失效,无法创建待操作任务',
- showCancel: false
+ title: '该库区未发现钢卷',
+ icon: 'none'
});
return;
}
-
- const content = JSON.parse(qrcodeRecord.content);
- console.log('解析后的内容:', content);
-
- // 优先使用current_coil_id(当前有效的钢卷ID),如果没有则使用coil_id(兼容旧数据)
- let coilId = content.current_coil_id && content.current_coil_id !== 'null' ? content
- .current_coil_id : null;
- if (!coilId) {
- coilId = content.coil_id && content.coil_id !== 'null' ? content.coil_id : null;
+ if (res.rows.length == 1) {
+ const coilId = res.rows[0].coilId;
+ uni.navigateTo({
+ url: '/pages/easycode/editby?coilId=' + coilId
+ })
+ } else {
+ uni.showToast({
+ title: '数据异常',
+ icon: 'none'
+ })
}
+ })
+ }
+ })
+ },
- console.log('提取钢卷ID - current_coil_id:', content.current_coil_id, 'coil_id:', content.coil_id,
- '最终使用:', coilId);
+ // 扫码并创建待操作(原有方法不变)
+ async handleScan(actionType) {
+ const content = await this.getQRCodeContent()
- if (!coilId) {
- throw new Error('二维码中未包含有效的钢卷ID');
+ // 优先使用current_coil_id(当前有效的钢卷ID),如果没有则使用coil_id(兼容旧数据)
+ let coilId = content.current_coil_id && content.current_coil_id !== 'null' ? content
+ .current_coil_id : null;
+ if (!coilId) {
+ coilId = content.coil_id && content.coil_id !== 'null' ? content.coil_id : null;
+ }
+
+ console.log('提取钢卷ID - current_coil_id:', content.current_coil_id, 'coil_id:', content.coil_id,
+ '最终使用:', coilId);
+
+ if (!coilId) {
+ throw new Error('二维码中未包含有效的钢卷ID');
+ }
+
+ // 3. 直接通过钢卷ID获取钢卷详情
+ console.log('3. 获取钢卷详情,钢卷ID:', coilId);
+ const coilRes = await getMaterialCoil(coilId);
+ console.log('钢卷详情响应:', coilRes);
+
+ if (coilRes.code !== 200) {
+ throw new Error(coilRes.msg || '查询钢卷信息失败');
+ }
+
+ if (!coilRes.data) {
+ throw new Error('未找到钢卷信息');
+ }
+
+ const coilData = coilRes.data;
+ console.log('4. 钢卷数据:', coilData);
+
+ // 4. 创建待操作记录
+ const pendingData = {
+ coilId: coilData.coilId,
+ currentCoilNo: coilData.currentCoilNo,
+ actionType: parseInt(actionType),
+ actionStatus: 0, // 待处理
+ sourceType: 'scan', // 扫码来源
+ scanTime: new Date().toISOString(),
+ scanDevice: this.getDeviceInfo(),
+ warehouseId: coilData.warehouseId,
+ priority: 0, // 默认普通优先级
+ remark: `移动端扫码创建-${this.getActionTypeName(actionType)}`
+ };
+
+ console.log('5. 创建待操作记录,数据:', pendingData);
+
+ const addRes = await addPendingAction(pendingData);
+ console.log('创建待操作响应:', addRes);
+
+ if (addRes.code !== 200) {
+ throw new Error(addRes.msg || '创建待操作失败');
+ }
+
+ uni.hideLoading();
+ console.log('=== 扫码流程完成 ===');
+ uni.navigateTo({
+ url: '/pages/scansuccess/scansuccess'
+ })
+ },
+
+ // 通用扫码获取二维码内容(原有方法不变)
+ async getQRCodeContent() {
+ return new Promise((resolve, reject) => {
+ uni.scanCode({
+ success: async (res) => {
+ console.log('=== 开始扫码流程 ===');
+ console.log('扫码结果:', res.result);
+ uni.showLoading({
+ title: '处理中...'
+ });
+
+ try {
+ const qrcodeId = res.result;
+ // 1. 通过二维码ID获取二维码详情
+ console.log('1. 获取二维码详情,ID:', qrcodeId);
+ const qrcodeRes = await getGenerateRecord(qrcodeId);
+ console.log('二维码响应:', qrcodeRes);
+
+ if (qrcodeRes.code !== 200) {
+ throw new Error('未找到二维码记录');
+ }
+
+ // 2. 解析二维码的content,获取coil_id
+ const qrcodeRecord = qrcodeRes.data;
+ console.log('2. 二维码记录:', qrcodeRecord);
+
+ // 检查二维码状态(0=失效,1=有效)
+ if (qrcodeRecord.status === 0) {
+ uni.hideLoading();
+ uni.showModal({
+ title: '提示',
+ content: '该二维码已失效,无法创建待操作任务',
+ showCancel: false
+ });
+ return;
+ }
+
+ const content = JSON.parse(qrcodeRecord.content);
+ console.log('解析后的内容:', content);
+ resolve(content)
+ } catch (err) {
+ console.error('=== 扫码处理失败 ===');
+ console.error('错误信息:', err);
+ console.error('错误堆栈:', err.stack);
+ uni.hideLoading();
+ uni.showToast({
+ title: err.message || '处理失败',
+ icon: 'none',
+ duration: 3000
+ });
+ reject()
}
-
-
- // 3. 直接通过钢卷ID获取钢卷详情
- console.log('3. 获取钢卷详情,钢卷ID:', coilId);
- const coilRes = await getMaterialCoil(coilId);
- console.log('钢卷详情响应:', coilRes);
-
- if (coilRes.code !== 200) {
- throw new Error(coilRes.msg || '查询钢卷信息失败');
- }
-
- if (!coilRes.data) {
- throw new Error('未找到钢卷信息');
- }
-
- this.coilDetail = coilRes.data;
- this.form = coilRes.data;
-
- this.$refs.tranferPopup.open();
- uni.hideLoading()
- } catch (err) {
- console.error('=== 扫码处理失败 ===');
- console.error('错误信息:', err);
- console.error('错误堆栈:', err.stack);
- uni.hideLoading();
+ },
+ fail: (err) => {
uni.showToast({
- title: err.message || '处理失败',
- icon: 'none',
- duration: 3000
+ title: '扫码失败,请重试',
+ icon: 'none'
+ });
+ reject();
+ }
+ });
+ })
+ },
+
+ // 发货操作(原有方法不变)
+ async handleShip() {
+ const content = await this.getQRCodeContent();
+
+ // 优先使用current_coil_id(当前有效的钢卷ID),如果没有则使用coil_id(兼容旧数据)
+ let coilId = content.current_coil_id && content.current_coil_id !== 'null' ? content
+ .current_coil_id : null;
+ if (!coilId) {
+ coilId = content.coil_id && content.coil_id !== 'null' ? content.coil_id : null;
+ }
+
+ console.log('提取钢卷ID - current_coil_id:', content.current_coil_id, 'coil_id:', content.coil_id,
+ '最终使用:', coilId);
+
+ if (!coilId) {
+ throw new Error('二维码中未包含有效的钢卷ID');
+ }
+
+ // 3. 直接通过钢卷ID获取钢卷详情
+ console.log('3. 获取钢卷详情,钢卷ID:', coilId);
+ const coilRes = await getMaterialCoil(coilId);
+ console.log('钢卷详情响应:', coilRes);
+
+ if (coilRes.code !== 200) {
+ throw new Error(coilRes.msg || '查询钢卷信息失败');
+ }
+
+ if (!coilRes.data) {
+ throw new Error('未找到钢卷信息');
+ }
+
+ const coilData = coilRes.data;
+
+ if (coilRes.data.status == 1) {
+ uni.showToast({
+ title: '钢卷已经发货,无需再次发货'
+ })
+ return;
+ }
+
+ uni.showModal({
+ cancelText: '取消',
+ confirmText: '确认',
+ title: '确定要将钢卷号为:' + coilRes.data.currentCoilNo + '发货吗?',
+ showCancel: true,
+ success: async () => {
+ try {
+ // 1. 更新钢卷状态为已发货
+ await updateMaterialCoilSimple({
+ ...coilRes.data,
+ status: 1,
+ });
+
+ // 2. 插入一条已完成的待操作记录
+ await addPendingAction({
+ coilId: coilRes.data.coilId,
+ currentCoilNo: coilRes.data.currentCoilNo,
+ actionType: 402, // 402=发货
+ actionStatus: 2, // 直接标记为完成状态
+ scanTime: new Date(),
+ scanDevice: this.getDeviceInfo(),
+ priority: 0, // 0=普通
+ sourceType: 'scan',
+ warehouseId: coilRes.data.warehouseId,
+ processTime: new Date(),
+ completeTime: new Date()
+ });
+
+ uni.showToast({
+ title: '发货成功',
+ icon: 'none'
+ });
+ } catch (error) {
+ console.error('发货失败:', error);
+ uni.showToast({
+ title: error.message || '发货失败',
+ icon: 'none'
});
}
},
- fail: (err) => {
- console.error('扫码失败:', err);
+ fail() {
uni.showToast({
- title: '扫码失败,请重试',
+ title: '已取消发货',
icon: 'none'
- });
+ })
}
});
+ uni.hideLoading();
},
- async handleConfirm() {
+ // 移库操作:第一步 - 扫描钢卷,打开移库弹窗(原有方法优化)
+ async handleTranfer() {
try {
- // 1. 更新钢卷信息(移库)
- await updateMaterialCoilSimple(this.form);
-
- // 2. 插入一条已完成的待操作记录
- await addPendingAction({
- coilId: this.form.coilId,
- currentCoilNo: this.form.currentCoilNo,
- actionType: 5, // 5=移库
- actionStatus: 2, // 2=已完成
- scanTime: new Date(),
- scanDevice: this.getDeviceInfo(),
- priority: 0, // 0=普通
- sourceType: 'scan',
- warehouseId: this.form.warehouseId,
- processTime: new Date(),
- completeTime: new Date()
- });
-
- uni.showToast({
- title: '移库成功',
- icon: 'none'
- });
- this.$refs.tranferPopup.close();
+ const content = await this.getQRCodeContent()
+ // 优先使用current_coil_id(当前有效的钢卷ID),如果没有则使用coil_id(兼容旧数据)
+ let coilId = content.current_coil_id && content.current_coil_id !== 'null' ? content
+ .current_coil_id : null;
+ if (!coilId) {
+ coilId = content.coil_id && content.coil_id !== 'null' ? content.coil_id : null;
+ }
+
+ console.log('提取钢卷ID - current_coil_id:', content.current_coil_id, 'coil_id:', content.coil_id,
+ '最终使用:', coilId);
+
+ if (!coilId) {
+ throw new Error('二维码中未包含有效的钢卷ID');
+ }
+
+ // 3. 直接通过钢卷ID获取钢卷详情
+ console.log('3. 获取钢卷详情,钢卷ID:', coilId);
+ const coilRes = await getMaterialCoil(coilId);
+ console.log('钢卷详情响应:', coilRes);
+
+ if (coilRes.code !== 200) {
+ throw new Error(coilRes.msg || '查询钢卷信息失败');
+ }
+
+ if (!coilRes.data) {
+ throw new Error('未找到钢卷信息');
+ }
+
+ // 重置移库状态
+ this.targetWarehouse = null;
+ this.coilDetail = coilRes.data;
+ this.form = { ...coilRes.data };
+
+ // 打开移库弹窗
+ this.$refs.tranferPopup.open();
+ uni.hideLoading()
} catch (error) {
- console.error('移库失败:', error);
+ uni.hideLoading();
uni.showToast({
- title: error.message || '移库失败',
- icon: 'none'
+ title: error.message || '打开移库失败',
+ icon: 'none',
+ duration: 2000
});
}
},
- // 获取设备信息
+
+ // 移库操作:第二步 - 扫描目标库区码(核心补充)
+ async handleScanWarehouseCode() {
+ try {
+ uni.showLoading({ title: '扫码中...' });
+ // 扫描库区二维码
+ const scanRes = await new Promise((resolve, reject) => {
+ uni.scanCode({
+ success: resolve,
+ fail: (err) => {
+ reject(new Error('扫码取消或失败'));
+ }
+ });
+ });
+ uni.hideLoading();
+
+ const warehouseQrCode = scanRes.result;
+ if (!warehouseQrCode) {
+ throw new Error('未识别到库区信息');
+ }
+
+ // 解析库区二维码(假设二维码内容是库区ID,若为JSON格式需调整解析逻辑)
+ const targetWarehouseId = warehouseQrCode;
+ console.log('扫描到的目标库区ID:', targetWarehouseId);
+
+ // 调用接口获取库区详情(关键:通过库区ID查询名称等信息)
+ uni.showLoading({ title: '验证库区...' });
+ const warehouseRes = await getActualWarehouse(targetWarehouseId);
+ uni.hideLoading();
+
+ if (warehouseRes.code !== 200 || !warehouseRes.data) {
+ throw new Error('获取库区信息失败,请确认库区码有效');
+ }
+
+ const targetWarehouse = warehouseRes.data;
+ // 校验:目标库区不能与原库区相同
+ if (targetWarehouse.actualWarehouseId === this.coilDetail.actualWarehouseId) {
+ throw new Error('目标库区不能与当前库区相同');
+ }
+
+ // 存储目标库区信息(用于回显和提交)
+ this.targetWarehouse = targetWarehouse;
+ // 更新表单中的目标库区ID(提交时需要)
+ this.form.actualWarehouseId = targetWarehouse.actualWarehouseId;
+ this.form.actualWarehouseName = targetWarehouse.actualWarehouseName;
+
+ uni.showToast({
+ title: `已选中库区:${targetWarehouse.actualWarehouseName}`,
+ icon: 'none',
+ duration: 1500
+ });
+ } catch (error) {
+ uni.hideLoading();
+ uni.showToast({
+ title: error.message || '扫描库区失败',
+ icon: 'none',
+ duration: 2500
+ });
+ }
+ },
+
+ // 移库操作:重新扫描目标库区
+ handleReScan() {
+ this.targetWarehouse = null;
+ this.form.warehouseId = this.coilDetail.warehouseId; // 重置为原库区ID
+ this.form.actualWarehouseName = this.coilDetail.actualWarehouseName;
+ },
+
+ // 移库操作:关闭弹窗
+ handleClosePopup() {
+ this.$refs.tranferPopup.close();
+ // 重置状态
+ this.targetWarehouse = null;
+ this.form = {};
+ this.coilDetail = {};
+ },
+
+ // 移库操作:第三步 - 确认移库(核心补充)
+ async handleConfirm() {
+ try {
+ // 再次校验:防止异常场景
+ if (!this.targetWarehouse || !this.form.warehouseId) {
+ uni.showToast({ title: '请先选择目标库区', icon: 'none' });
+ return;
+ }
+ if (this.targetWarehouse.actualWarehouseId === this.coilDetail.warehouseId) {
+ uni.showToast({ title: '目标库区不能与当前库区相同', icon: 'none' });
+ return;
+ }
+
+ this.loading = true;
+ uni.showLoading({ title: '移库中...' });
+
+ // 1. 核心:更新钢卷的库区信息
+ const updateRes = await updateMaterialCoilSimple(this.form);
+
+ if (updateRes.code !== 200) {
+ throw new Error(updateRes.msg || '更新钢卷库区失败');
+ }
+
+ // 2. 创建移库操作记录(标记为已完成)
+ const pendingData = {
+ coilId: this.form.coilId,
+ currentCoilNo: this.form.currentCoilNo,
+ actionType: 403, // 403=移库(需与字典表action_type的移库编码一致)
+ actionStatus: 2, // 2=已完成
+ scanTime: new Date().toISOString(),
+ scanDevice: this.getDeviceInfo(),
+ priority: 0, // 普通优先级
+ sourceType: 'scan', // 扫码来源
+ processTime: new Date().toISOString(),
+ completeTime: new Date().toISOString(),
+ remark: `移库操作:${this.coilDetail.actualWarehouseName} → ${this.form.actualWarehouseName}`
+ };
+
+ const addRes = await addPendingAction(pendingData);
+ if (addRes.code !== 200) {
+ throw new Error(addRes.msg || '创建移库记录失败');
+ }
+
+ // 操作成功
+ uni.hideLoading();
+ uni.showToast({ title: '移库成功', icon: 'success', duration: 1500 });
+
+ // 关闭弹窗并重置状态
+ setTimeout(() => {
+ this.handleClosePopup();
+ }, 1500);
+ } catch (error) {
+ this.loading = false;
+ uni.hideLoading();
+ console.error('移库失败详情:', error);
+ uni.showToast({
+ title: error.message || '移库失败,请重试',
+ icon: 'none',
+ duration: 3000
+ });
+ } finally {
+ this.loading = false;
+ }
+ },
+
+ // 显示BOM参数弹窗(原有功能补充实现)
+ showBomDialog() {
+ this.bomDialogShow = true;
+ // 可扩展BOM参数弹窗内容,此处省略弹窗组件实现
+ },
+
+ // 获取设备信息(原有方法不变)
getDeviceInfo() {
try {
const systemInfo = uni.getSystemInfoSync();
@@ -564,7 +623,7 @@
}
},
- // 获取操作类型名称
+ // 获取操作类型名称(原有方法不变)
getActionTypeName(actionType) {
const type = this.types.find(t => t.dictValue === String(actionType));
return type ? type.dictLabel : '未知操作';
@@ -658,7 +717,7 @@
/* 按钮网格布局 */
.btn-grid {
- display: grid;
+ display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 15rpx;
}
@@ -673,7 +732,7 @@
height: 120rpx;
font-size: 28rpx;
}
-
+
/* 操作类型按钮样式 - 工业化简洁风格 */
.type-btn {
width: 100%;
@@ -723,6 +782,12 @@
color: #e6a23c;
border-color: #e6a23c;
}
+
+ .see-btn {
+ background-color: #6fd2ff;
+ color: #0777ff;
+ border-color: #0777ff;
+ }
.move-btn:active {
background-color: #fff3cc;
@@ -836,4 +901,168 @@
}
}
}
+
+ /* 扫码按钮样式 */
+ .scan-btn-wrapper {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 20rpx;
+
+ .scan-icon {
+ width: 160rpx;
+ height: 160rpx;
+ border-radius: 50%;
+ background: linear-gradient(135deg, #34c759 0%, #30b350 100%);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ box-shadow: 0 8rpx 24rpx rgba(52, 199, 89, 0.3);
+
+ &:active {
+ transform: scale(0.95);
+ }
+ }
+
+ .icon-camera {
+ font-size: 70rpx;
+ color: #fff;
+ }
+
+ .scan-tip {
+ font-size: 28rpx;
+ color: #666;
+ }
+
+ .scan-hint {
+ font-size: 24rpx;
+ color: #999;
+ }
+ }
+
+ /* 已选中库区样式 */
+ .selected-warehouse {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 15rpx;
+ padding: 20rpx;
+ background-color: #f0f9ff;
+ border-radius: 12rpx;
+ width: 100%;
+ box-sizing: border-box;
+ }
+
+ .warehouse-info {
+ display: flex;
+ align-items: center;
+ gap: 10rpx;
+ font-size: 28rpx;
+ }
+
+ .warehouse-label {
+ color: #666;
+ }
+
+ .warehouse-value {
+ color: #1976d2;
+ font-weight: 600;
+ }
+
+ .re-scan-btn {
+ padding: 10rpx 30rpx;
+ font-size: 24rpx;
+ color: #409eff;
+ background-color: transparent;
+ border: 2rpx solid #409eff;
+ border-radius: 8rpx;
+ }
+
+ /* 操作按钮组样式 */
+ .action-buttons {
+ display: flex;
+ gap: 20rpx;
+ margin-top: 40rpx;
+ }
+
+ .btn {
+ flex: 1;
+ height: 80rpx;
+ line-height: 80rpx;
+ font-size: 28rpx;
+ border-radius: 12rpx;
+ border: none;
+ }
+
+ .btn-secondary {
+ background-color: #f5f5f5;
+ color: #666;
+ }
+
+ .btn-primary {
+ background-color: #409eff;
+ color: #fff;
+ }
+
+ .btn:disabled {
+ opacity: 0.6;
+ }
+
+ /* 信息网格样式 */
+ .info-grid {
+ display: flex;
+ flex-direction: column;
+ gap: 20rpx;
+ margin-top: 20rpx;
+ }
+
+ .info-item {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 10rpx 0;
+ border-bottom: 2rpx solid #f5f5f5;
+ }
+
+ .item-label {
+ font-size: 26rpx;
+ color: #666;
+ width: 30%;
+ }
+
+ .item-value {
+ font-size: 26rpx;
+ color: #333;
+ width: 70%;
+ text-align: right;
+ word-break: break-all;
+ }
+
+ /* 卡片标题样式 */
+ .card-title {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+
+ .title-dot {
+ display: inline-block;
+ width: 12rpx;
+ height: 12rpx;
+ background-color: #409eff;
+ border-radius: 50%;
+ margin-right: 10rpx;
+ }
+
+ .more-btn {
+ display: flex;
+ align-items: center;
+ gap: 5rpx;
+ color: #409eff;
+ font-size: 24rpx;
+ }
+
+ .icon-more {
+ font-size: 26rpx;
+ }
\ No newline at end of file
diff --git a/apps/hand-factory/pages/easycode/editby.vue b/apps/hand-factory/pages/easycode/editby.vue
new file mode 100644
index 0000000..1eb2921
--- /dev/null
+++ b/apps/hand-factory/pages/easycode/editby.vue
@@ -0,0 +1,556 @@
+
+
+
+
+ 入场钢卷号
+ {{ coilDetail.enterCoilNo || '-' }}
+
+
+
+
+
+
+ 钢卷信息
+
+
+
+
+ 当前钢卷号
+
+
+
+
+
+ 班组
+
+
+
+
+
+ 目标库位
+
+
+
+
+
+
+
+
+
+
+ 毛重 (吨)
+
+
+
+
+
+ 净重 (吨)
+
+
+
+
+
+ 操作人:
+ {{ operatorName }}
+
+
+
+
+
+ {{ loading ? '提交中...' : '更新钢卷信息' }}
+
+
+
+
+
+
+
+
+
diff --git a/apps/hand-factory/pages/easycode/tranfer.vue b/apps/hand-factory/pages/easycode/tranfer.vue
new file mode 100644
index 0000000..fb7d03b
--- /dev/null
+++ b/apps/hand-factory/pages/easycode/tranfer.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
diff --git a/apps/hand-factory/utils/update.js b/apps/hand-factory/utils/update.js
index b8a4b07..1b98d04 100644
--- a/apps/hand-factory/utils/update.js
+++ b/apps/hand-factory/utils/update.js
@@ -155,13 +155,15 @@ function checkUpdate(forceCheck = false) {
title: '发现新版本',
content: `检测到新版本(${remoteVersion}),是否立即下载并更新?`,
confirmText: '立即更新',
- cancelText: '暂不更新',
+ cancelText: '退出',
showCancel: true,
success: (modalRes) => {
if (modalRes.confirm) {
// 用户确认更新:检查存储空间 -> 下载 -> 安装
handleConfirmUpdate(wgtUrl, remoteVersion);
} else {
+ // 直接退出
+
// 用户取消更新:询问是否忽略该版本
handleCancelUpdate(remoteVersion);
}
diff --git a/apps/hand-factory/version.json b/apps/hand-factory/version.json
index d5e8568..63301f0 100644
--- a/apps/hand-factory/version.json
+++ b/apps/hand-factory/version.json
@@ -1,5 +1,5 @@
{
- "version": "klp 1.3.11",
+ "version": "klp 1.3.13",
"wgtUrl": "http://49.232.154.205:10900/fadapp-update/klp/klp.wgt",
"apkUrl": "http://49.232.154.205:10900/fadapp-update/klp/klp.apk"
}
\ No newline at end of file