检查套餐
项目需求
完成检查套餐的新增、分页
新增时完成图片的上传,上传至七牛云
1、新增检查套餐之图片上传
图片/文件上传的3种方式:
- 使用nginx搭建 单机的文件存储 企业内部使用(很少见)
- 使用开源分布式文件存储系统,如Fastdfs、HDFS等 集群机器,安全
- 使用云存储,如阿里云,七牛云 互联网公司,小型服务企业,数据不敏感
本次方案使用七牛云
- 前端上传图片,elementUI组件具有自动上传的方法,在上传发送之前,对图片进行校验是否为以jpg结尾,图片的大小是否超过2mb,成功后执行上传方法(自动执行,不需要写ajax)
- 后端接收到图片的文件数据,使用封装的utils上传到七牛云,注意文件名的重复问题,使用UUID 产生新的名字,再将图片名称返回至前端
- 前端提示上上传成功或者上传失败
2、新增检查套餐
- 点击新建按钮,弹出添加框,同时触发查询所有的检查组的ajax,进入后端获取数据回显
- 填写数据,点击确认,发送ajax至后端,将检查套餐数据填入检查套餐表,检查组数据填入与检查套餐关联的检查组表,注意点:通过插入检查套餐时使用mybatis的selectKey语句获取检查套餐的id
3、查询所有及分页
- 前端进行页面加载,查询,页码修改时,触发查询所有检查套餐的方法
- 异步发送请求至后端,后端获取所有检查套餐数据后返回至前端
1 <script> 2 var vue = new Vue({ 3 el: '#app', 4 data: { 5 autoUpload: true,//自动上传 6 imageUrl: null,//模型数据,用于上传图片完成后图片预览 7 activeName: 'first',//添加/编辑窗口Tab标签名称 8 pagination: {//分页相关属性 9 currentPage: 1, 10 pageSize: 10, 11 total: 100, 12 queryString: null, 13 }, 14 dataList: [],//列表数据 15 formData: {},//表单数据 16 tableData: [],//添加表单窗口中检查组列表数据 17 checkgroupIds: [],//添加表单窗口中检查组复选框对应id 18 dialogFormVisible: false//控制添加窗口显示/隐藏 19 }, 20 created() { 21 this.findPage(); 22 }, 23 methods: { 24 //文件上传成功后的钩子,response为服务端返回的值,file为当前上传的文件封装成的js对象 25 //这个函数中response返回的就是result对象,所以直接可以。data等等 26 handleAvatarSuccess(response, file) { 27 this.imageUrl = "http://qgi57u0d4.hd-bkt.clouddn.com/" + response.data; 28 this.$message({ 29 type: response.flag ? 'success' : 'error', 30 message: response.message 31 }); 32 33 this.formData.img = response.data; 34 }, 35 //上传图片之前执行 36 beforeAvatarUpload(file) { 37 //判断图片是否以jpg为结尾 38 const isJPG = file.type === 'image/jpeg'; 39 if (!isJPG) { 40 this.$message.error('上传套餐图片只能是 JPG 格式!'); 41 } 42 //判断图片大小不超过2m 43 const isLt2M = file.size / 1024 / 1024 < 2; 44 if (!isLt2M) { 45 this.$message.error('上传套餐图片大小不能超过 2MB!'); 46 } 47 return isJPG && isLt2M; 48 }, 49 //添加 50 handleAdd() { 51 this.dialogFormVisible = false; 52 //点击确认,发送ajax请求 53 axios.post("/setmeal/add.do?checkgroupIds=" + this.checkgroupIds, this.formData).then((res) => { 54 if (res.data.flag) { 55 //将正确查询的到的数据回显 56 this.$message.success(res.data.message); 57 } else { 58 this.$message.error(res.data.message); 59 } 60 }).finally(() => { 61 this.checkgroupIds = []; 62 this.formData = {}; 63 this.findPage(); 64 }) 65 }, 66 //分页查询 67 findPage() { 68 let param = { 69 pageSize: this.pagination.pageSize, 70 currentPage: this.pagination.currentPage, 71 queryString: this.pagination.queryString 72 } 73 //异步发送信息 74 axios.post("/setmeal/findPage.do", param).then((res) => { 75 this.dataList = res.data.rows; 76 this.pagination.total = res.data.total; 77 }) 78 }, 79 // 重置表单 80 resetForm() { 81 this.formData = {}; 82 this.checkgroupIds = []; 83 }, 84 // 弹出添加窗口 85 handleCreate() { 86 this.dialogFormVisible = true;//弹出添加窗口 87 this.resetForm(); 88 this.imageUrl = null;//点击新建每次都是空的,没有加载图片 89 this.activeName = 'first';//设置检查套餐为默认选中 90 //发送ajax回显检查组的数据 91 axios.get("/checkgroup/findAll.do").then((res) => { 92 if (res.data.flag) { 93 this.tableData = res.data.data; 94 } else { 95 this.$message.error(res.data.message) 96 } 97 }) 98 }, 99 //切换页码 100 handleCurrentChange(currentPage) { 101 this.pagination.currentPage = currentPage; 102 this.findPage(); 103 } 104 } 105 }) 106 </script>
mybatis中获取插入前的数据id的SQL语句
1 select * from t_setmeal 2 <if test="value != null and value.length > 0"> 3 where code = #{value} or name = #{value} or helpCode = #{value} 4 </if>
七牛云上传的自定义工具
1 /** 2 * 七牛云工具类 3 */ 4 public class QiniuUtils { 5 public static String accessKey = "ZY1m8Cq8qhmuciSmVPSZJf2FqI6HqPJi9zbynHQx"; 6 public static String secretKey = "j9cxpaEbR-ksDCK0oDYHybqRgfR_K-xZY-UjCbJp"; 7 public static String bucket = "babymyfree"; 8 9 public static void upload2Qiniu(String filePath,String fileName){ 10 //构造一个带指定Zone对象的配置类 11 Configuration cfg = new Configuration(Zone.zone0()); 12 UploadManager uploadManager = new UploadManager(cfg); 13 Auth auth = Auth.create(accessKey, secretKey); 14 String upToken = auth.uploadToken(bucket); 15 try { 16 Response response = uploadManager.put(filePath, fileName, upToken); 17 //解析上传成功的结果 18 DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); 19 } catch (QiniuException ex) { 20 Response r = ex.response; 21 try { 22 System.err.println(r.bodyString()); 23 } catch (QiniuException ex2) { 24 //ignore 25 } 26 } 27 } 28 29 //上传文件 30 public static void upload2Qiniu(byte[] bytes, String fileName){ 31 //构造一个带指定Zone对象的配置类 32 Configuration cfg = new Configuration(Zone.zone0()); 33 //...其他参数参考类注释 34 UploadManager uploadManager = new UploadManager(cfg); 35 36 //默认不指定key的情况下,以文件内容的hash值作为文件名 37 String key = fileName; 38 Auth auth = Auth.create(accessKey, secretKey); 39 String upToken = auth.uploadToken(bucket); 40 try { 41 Response response = uploadManager.put(bytes, key, upToken); 42 //解析上传成功的结果 43 DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); 44 System.out.println(putRet.key); 45 System.out.println(putRet.hash); 46 } catch (QiniuException ex) { 47 Response r = ex.response; 48 System.err.println(r.toString()); 49 try { 50 System.err.println(r.bodyString()); 51 } catch (QiniuException ex2) { 52 //ignore 53 } 54 } 55 } 56 57 //删除文件 58 public static void deleteFileFromQiniu(String fileName){ 59 //构造一个带指定Zone对象的配置类 60 Configuration cfg = new Configuration(Zone.zone0()); 61 String key = fileName; 62 Auth auth = Auth.create(accessKey, secretKey); 63 BucketManager bucketManager = new BucketManager(auth, cfg); 64 try { 65 bucketManager.delete(bucket, key); 66 } catch (QiniuException ex) { 67 //如果遇到异常,说明删除失败 68 System.err.println(ex.code()); 69 System.err.println(ex.response.toString()); 70 } 71 } 72 }