网站首页 > 技术文章 正文
为了方便入库员操作,我们可以使用扫码设备让入库员在移动终端上进行入库操作,在点击入库功能时,入库员即可看见即将需要入库的产品及数量,扫码后通过颜色标记,让入库员能快速辨别哪些产品入库了多少。
准备工作:
1、在白码低代码开发平台上创建产品数据表,并录入若干产品数据
2、创建入库单数据表,并录入若干待数据
3、创建入库记录表
实现步骤:
1、创建入库功能,并添加“集合-获取-入库单”步骤(未入库列表),筛选状态不为“已入库”的数据。
2、添加“集合-新增-入库记录”步骤(入库信息),“$关联”设为“未入库列表”;“产品”设为填写,开启扫码枪,搜索编号属性,绑定“实际入库数量”属性;“拟入库数量”设为“未入库列表”的“待入库数量”,操作员及入库时间设为系统。
3、获取相关id属性
未入库列表步骤id:
入库信息步骤id:
以及两个步骤对应的属性id:
4、添加“交互-预处理”步骤,编写下方代码
function prepare($programStore, $form, vue) {
//扫码枪使用硬件扫码枪而非摄像头
vue.$store.dispatch("view/extend/scanGun/setMode", "hardware");
_.delay(function () {//延迟100ms再执行,避免未渲染就执行了
//监控表单数据
let procedure1 = "60af103e4ba5ab636e2f3c31";//步骤:未入库列表步骤id
let procedure2 = "60af113f4ba5ab636e2f3c4e";//步骤:入库信息步骤id
vue.$watch(() => { return programStore.getters["getFormValue"](procedure2) },//监控入库信息步骤
function (value, oldValue) {
vue.$nextTick(() => {
let list = value.data || [];//当前数据
let oldList = oldValue.data || [];//改变前数据
if (!_.isEqual(list, oldList)) {//数据发生变化时处理
//未入库列表数据
let proList = programStore.getters["getFormValue"](procedure1);
//入库信息步骤移动端删除按钮元素,class名请自行在前端F12切换到移动端查找,一般就叫 item-remove
let remove_list = document.querySelectorAll(".item-remove");
//入库信息步骤移动端的行元素,class名请自行在前端F12切换到移动端查找,一般就是 local-list 下的 item
let itemList = document.querySelectorAll(".local-list .item");
for (let i = 0; i < list.length; i++) {//循环入库信息步骤数据
//隐藏删除按钮
let remove_item = remove_list.item(i);
if (remove_item) { remove_item.hidden = true; }
//给入库信息的产品属性与未入库列表的产品属性一 一对应
list[i]["60af11d2cec155636dbe5dd3"] = proList.data[i]["60af07be01f2e53925cc9f64"];
//是否入库:实际入库数量大于等于拟入库数量
let isSWarehousing = new Number(list[i]["60af11d8b6c7d5637c90586b"]) >= new Number(list[i]["60af12d04ba5ab636e2f3ce8"]);
if (isSWarehousing) {
//将对应的行背景变色
if (itemList[i]) {
itemList[i].style.background = "#efefef";
}
}
}
//将更新后的数据赋给入库信息步骤
value.data = list;
programStore.dispatch("set", { procedure: procedure2, value });
}
})
});
}, 100);
}
5、添加编程步骤,编写以下代码
async function runProcess($model = model, $plugin = plugin, $params = params) {
let orderList = $params.orderList;
let recordList = $params.recordList;
recordList.forEach(item => {
if (item["60af11d8b6c7d5637c90586b"] != "0") {
let order = orderList.find(o => {
//返回入库记录产品等于入库单产品的入库单
return o["60af07be01f2e53925cc9f64"] == item["60af11d2cec155636dbe5dd3"];
});
if (order) {
let orderNeedNum=new Number(order["60af0f2a0cbcf66375d08bca"]);//原待入库数量
let orderNum = new Number(order["60af07ce04d983391fd5b35d"]);//原已入库数量
let recordNum = new Number(item["60af11d8b6c7d5637c90586b"]);//实际入库数量
$plugin.data.updateData("60af07a004d983391fd5b35b", order._id, {
"60af07ce04d983391fd5b35d": orderNum + recordNum,//已入库
"60af0f2a0cbcf66375d08bca": orderNeedNum - recordNum,//待入库
"60af0fb80cbcf66375d08bd1": orderNeedNum - recordNum > 0 ? "待入库" : "已入库",
});
}
} else {
//删除无效入库记录
$plugin.data.removeData("60af11c7b6c7d5637c90586a", item._id);
}
});
}
6、效果(PC上模拟扫码枪焦点输入)
猜你喜欢
- 2024-10-17 vue进阶系列——用typescript玩转vue和vuex
- 2024-10-17 百度Web前端开发实战案例解析(web前端开发案例教程)
- 2024-10-17 vue之vuex状态管理(vuex状态属性)
- 2024-10-17 从身份证号中截取出生日期(从身份证号截取出生年月日)
- 2024-10-17 websocket长连接和公共状态管理方案
- 2024-10-17 带你五步学会Vue SSR(vue sse)
- 2024-10-17 vue-element-admin 登陆(vue elements admin)
- 2024-10-17 Vue实现动态路由(vue动态路由三种方法)
- 2024-10-17 吃透 Vue 项目开发实践|16个方面深入前端工程化开发技巧【中】
- 2024-10-17 vue常见组件有哪些(vue的组件有哪些)
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)