入库出库
来源:5-16 完善入库出库接口与交互体验

慕婉清2449267
2021-10-26
入库出库按照视频已经写完,但是在前端操作时入库出库数量没有变化
const updateCount =(type,record) =>{
let word =‘增加’;
if (type==='OUT_COUNT'){
word='减少';
}
Modal.confirm({
title:`要${word}多少库存`,
//React 使用 JSX 来替代常规的
// JavaScript,用来描述模板
//vue-cli中集成了相关的插件
//进而可以识别到jsx文件
// 所以在vue中也能用
content:(
<div>
<Input class="__book_input_count" />
</div>
),
onOK: async() =>{
const el =document.querySelector('.__book_input_count');
console.log(el.value);
let num =el.value;
const res = await book.updateCount({
id:record._id,
num,
type,
});
result(res)
.success((data) =>{
//找到了书
if(type=== type){
//入库操作
num=Math.abs(num);
}else{
//出库操作
num=-Math.abs(num);
}
const one =list.value.find((item) =>{
return item._id ===record._id;
});
if(one){
one.count=one.count +num;
}
});
},
});
};
//代码含义:绑定事件,传递给模板
return{
columns,
show,
list,
formatTimestamp,
curPage,
total,
setPage,
keyword,
onSearch,
backAll,
isSearch,
remove,
updateCount,
};
},
});
<template #count=“data”>
<a href=“javascript:;” @click=“updateCount(‘IN_COUNT’,data.record)”>入库
{{data.record.count}}
<a href=“javascript:;” @click=“updateCount(‘OUT_COUNT’,data.record)”>出库
{
title:'库存',
slots:{
customRender:'count',
}
},
const Router =require(’@koa/router’);
const mongoose =require(‘mongoose’);
const { getBody } =require(’…/…/helpers/utils’);
const BOOK_CONST= {
IN:‘IN_COUNT’, //入库的操作
OUT:‘OUT_COUNT’, //出库的操作
};
const Book =mongoose.model(‘Book’);
const router =new Router({
prefix:’/book’,
});
router.post(’/add’,async(ctx)=>{
const {
name,
price,
author,
publishDate,
classify,
count,
}= getBody(ctx);
const book =new Book({
name,
price,
author,
publishDate,
classify,
count,
});
const res = await book.save();
ctx.body ={
data:res,
code:1,
msg:'添加成功',
};
});
router.get(’/list’,async(ctx) =>{
const{
page=1, //这是页码
keyword =’’,
} =ctx.query;
//从ctx.query解构出来的
let{
size=10, //这是一页中有多少条
} =ctx.query;
//取得的数据都是字符串类型的,手动转化为数字
size=Number(size);
const query ={};
if(keyword){
query.name=keyword;
}
const list= await Book
.find(query) //找数据
.skip((page-1)*size) //表示跳过几条数据,跳过(page-1)*size条
.limit(size) //表示取几条
.exec(); //条件都设置好了,exec执行一下
//countDocuments表示拿到Book集合下一共有几条文档
const total = await Book.countDocuments();
ctx.body={
data:{
total,
list,
page,
size,
},
code:1,
msg:'获取列表成功',
};
});
// /:id代表的是通配符变量
//METHOD DELETE
//PATH /book/:id
router.delete(’/:id’,async(ctx) =>{
const{
id
}=ctx.params;
// mongoose提供的删除接口进行删除操作
// 调用deleteOne方法
const delMsg= await Book.deleteOne({
_id:id,
});
ctx.body={
data:delMsg,
msg:"删除成功",
code:1,
};
});
router.post(’/update/count’, async(ctx) =>{
//const声明的是常量,不可以修改
const {
id,
type, //对应入库还是出库
}=ctx.request.body;
//let声明的是变量,可以修改
//num是出库/入库书的数量
let{
num, //入库出库的数量
} =ctx.request.body;
num =Number(num); //保证拿到的是一个数字
//找到对应的书籍
const book =await Book.findOne({
_id:id,
}).exec();
if(!book){
ctx.body={
code:0,
msg:'没有找到书籍',
};
return;
}
//找到了书
if(type=== BOOK_CONST.IN){
//入库操作
num=Math.abs(num);
}else{
//出库操作
num=-Math.abs(num);
}
book.count=book.count +num;
if(book.count <0){
ctx.body ={
code:0,
msg:'剩下的量不足以出库',
};
return;
}
//res是拿到的返回值
const res= await book.save(); //告诉mongoose数据改完,可以同步到数据库
ctx.body ={
data:res,
code:1,
msg:'操作成功',
};
});
//将router暴露出去
module.exports=router;
1回答
-
然冬
2021-10-28
可以不用贴代码,代码传到git上,贴一下git地址就好。
012021-10-28
相似问题