入库出库

来源: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地址就好。

0
1
慕婉清2449267
好的老师,代码地址https://gitee.com/idosenior/book-mgr/tree/dev/ dev里面是最新的源码
2021-10-28
共1条回复

毕设一课通 高效完成毕业设计(选题/毕设/论文/答辩)

为计算机专业大学生解决“毕业难题”

344 学习 · 606 问题

查看课程