uniapp
后端以ssm框架拟写接口
前端利用uniapp调用接口,实现数据的展示以及基本的增删改查.
1.状态码POJO类
public class DataStatus { private Integer StatusCode; //状态码 private String StatusDescription; //提示信息 public Integer getStatusCode() { return StatusCode; } public void setStatusCode(Integer statusCode) { StatusCode = statusCode; } public String getStatusDescription() { return StatusDescription; } public void setStatusDescription(String statusDescription) { StatusDescription = statusDescription; } }
2.控制类
列举增删改查各一个
service 业务逻辑层 与
dao 数据访问层 省略
自己想办法
@CrossOrigin //解决跨域问题 @Controller public class BillController { @Autowired private BillService billService; @ResponseBody @RequestMapping("/findAllBill") public JSONObject findAllBill() { List<Bill> bill = billService.findAllBill(); JSONObject jo = new JSONObject(); DataStatus ds = new DataStatus(); if (bill != null){ ds.setStatusCode(100); ds.setStatusDescription("查询全部成功"); jo.put("DataStatus",ds); jo.put("Data",bill); return jo; }else{ ds.setStatusCode(104); ds.setStatusDescription("查询全部失败"); jo.put("DataStatus",ds); return jo; } } @ResponseBody @RequestMapping("/findBill") public JSONObject findBill(String search) { List<Bill> bill = billService.findBill(search); JSONObject jo = new JSONObject(); DataStatus ds = new DataStatus(); if (bill != null && bill.size()>0){ ds.setStatusCode(100); ds.setStatusDescription("查询成功"); jo.put("DataStatus",ds); jo.put("Data",bill); return jo; }else{ ds.setStatusCode(104); ds.setStatusDescription("查询不到相关信息"); jo.put("DataStatus",ds); return jo; } } @ResponseBody @RequestMapping("/deleteBill") public DataStatus deleteBill(Integer id){ int row = this.billService.deleteBill(id); DataStatus ds = new DataStatus(); if (row > 0){ ds.setStatusCode(100); ds.setStatusDescription("删除成功"); return ds; }else{ ds.setStatusCode(104); ds.setStatusDescription("删除失败"); return ds; } } @ResponseBody @RequestMapping("/addBill") public DataStatus addBill(@RequestBody Bill bill){ int row = this.billService.addBill(bill); DataStatus ds = new DataStatus(); if (row > 0){ ds.setStatusCode(100); ds.setStatusDescription("新增成功"); return ds; }else{ ds.setStatusCode(104); ds.setStatusDescription("新增失败"); return ds; } } @ResponseBody @RequestMapping("/updateBill") public DataStatus updateBill(@RequestBody Bill bill){ int row = this.billService.updateBill(bill); DataStatus ds = new DataStatus(); if (row>0){ ds.setStatusCode(100); ds.setStatusDescription("数据更新成功"); return ds; }else{ ds.setStatusCode(104); ds.setStatusDescription("数据更新失败"); return ds; } } }
注意一点 Dao层接口@Param
//@Param("search")表示为参数search命名,命名后,在映射文件SQL中才可使用#{search}获取到search的值 public List<Bill> findBill(@Param("search") String search);
3.前端界面展示
onLoad表示进入页面加载getList()函数,然后getList()函数调用后端接口获取数据,res.data.Data为获取到的数据,存储到pls数组对象中。
onLoad() { this.getList(); }, methods: { getList() { uni.request({ url: 'http://localhost:8080/findAllBill', success: (res) => { this.bills = res.data.Data; console.log(this.bills) } }); },
需先定义数据类型
data() { return { bills: [], } },
通过循环渲染,展示在表格中
key 标识主键
<tr v-for="bill in bills" :key="bill.id"> <td>{{bill.id}}</td> <td>{{bill.name}}</td> <td>{{bill.cname}}</td> <td>{{bill.amountb}}</td> <td>{{bill.time}}</td> <td>{{bill.price}}</td> </tr>
**注意:**控制类中的JSONOBJECT对象
jo.put(“DataStatus”,ds);
jo.put(“Data”,bill);
与前端j接收成功返回的参数
res.data.Data
res.data.DataStatus
相互对应
4.查询
输入表单
<view id="search"> <form @submit="Search"> <input type="text" name="search" placeholder="请输入要查询的信息"> <button confirm-type="search" form-type="submit" size="mini">模糊查询</button> </form> </view>
点击调用查询
调用–>Search
参数–>search
相对应
//点击查询 Search: function(e) { uni.request({ url: 'http://localhost:8080/findBill?search=' + e.detail.value.search, success: (res) => { this.bills = res.data.Data; //将查询到的数据输出到表格中 console.log(res.data.DataStatus); if (res.data.DataStatus.statusCode == 100) { uni.showToast({ title: '查询成功', icon: 'success' }) } else { uni.showToast({ title: '查询不到相关信息', icon: 'none' }); this.getList(); } } }); },
5.删除
点击按钮触发点击事件,传递参数id
<button v-on:click="deleteb(bill.id)" type="warn" size="mini">删除</button>
形式参数delid,接收id,调用接口删除数据
success成功返回调用函数
this.getList();
this.tips()
重新加载界面和给出提示信息.
//点击删除 deleteb: function(delid) { uni.request({ url: 'http://localhost:8080/deleteBill?id=' + delid, success: (res) => { console.log(res.data); this.getList(); this.tips() } }); }, //消息提示框 tips() { uni.showToast({ title: '删除成功', icon: 'success' }) }
6.添加
navigator 进行页面跳转,进入到添加表单界面
<navigator url="/pages/add_b/add" hover-class="other-navigator-hover"> <button type="default" size="mini">添加</button> </navigator>
表单
<template> <view> <form @submit="add"> <input type="text" name="id" placeholder="请输入商品编号" /> <input type="text" name="name" placeholder="请输入商品名" /> <input type="text" name="cname" placeholder="请输入客户姓名" /> <input type="number" name="amountb" placeholder="请输入商品数量" /> <input type="text" name="time" placeholder="请输入下单时间" /> <input type="number" name="price" placeholder="请输入订单金额" /> <button type="primary" form-type="submit">确定添加</button> </form> </view> </template>
点击添加调用函数接口
POST方法,使用data属性,将表单填入的是数据,传入接口,而不使用在url后面拼接的方式。
成功调用
uni.navigateBack({
delta: 1
});
退回一级,即–》退回到表单展示界面
但是 此时表单中显示的数据并没有刚刚所添加的,因为退回没有刷新表单,所以不会展示数据,再执行一次查询空或者刷新浏览器,可展示数据。
思考:如何改进?
add: function(e) { uni.request({ url: 'http://localhost:8080/addBill', method: 'POST', header: { 'Content-Type': 'application/json' }, data: { id: e.detail.value.id, name: e.detail.value.name, cname: e.detail.value.cname, amountb: e.detail.value.amountb, time: e.detail.value.time, price: e.detail.value.price }, success: (res) => { console.log(res.data); //返回成功的状态 console.log(e.detail.value); //获取到表单填入的数据 uni.navigateBack({ delta: 1 }); } }); },
7.修改
<navigator :url="'/pages/update_b/update?bill='+ encodeURIComponent(JSON.stringify(bill))" hover-class="other-navigator-hover"> <button type="primary" size="mini">修改</button> </navigator>
一般情况下,修改都是最难搞定的
难点:
按钮点击,带参跳转页面。
:url="’/pages/update_b/update?bill=’+ encodeURIComponent(JSON.stringify(bill))"
加载页面时,将参数填充到表单中,
onLoad: function(option) { const bill = JSON.parse(decodeURIComponent(option.bill)); console.log(bill); //获取的数据 //填充数据 this.id = bill.id; this.name = bill.name; this.cname = bill.cname; this.amountb = bill.amountb; this.time = bill.time; this.price = bill.price; },
表单显示数据,自动获取焦点
focus=“true”
<template> <view> <form @submit="upb"> <input v-model="id" type="text" name="id" disabled /> <input v-model="name" type="text" name="name" placeholder="请输入商品名" focus="true" /> <input v-model="cname" type="text" name="cname" placeholder="请输入客户姓名" /> <input v-model="amountb" type="number" name="amountb" placeholder="请输入商品数量" /> <input v-model="time" type="text" name="time" placeholder="请输入下单时间" /> <input v-model="price" type="number" name="price" placeholder="请输入订单金额" /> <button type="primary" form-type="submit">确定修改</button> </form> </view> </template>
点击调用方法,传递表单数据。
e.detail.value
同样使用data属性传递参数
method: ‘POST’,
data: {
id: e.detail.value.id,
name: e.detail.value.name,
cname: e.detail.value.cname,
amountb: e.detail.value.amountb,
time: e.detail.value.time,
price: e.detail.value.price
},
最后返回页面到表单界面
缺点:
不过也需要再次刷新,才能展示被修改后的数据。
upb: function(e) { uni.request({ url: 'http://localhost:8080/updateBill', method: 'POST', data: { id: e.detail.value.id, name: e.detail.value.name, cname: e.detail.value.cname, amountb: e.detail.value.amountb, time: e.detail.value.time, price: e.detail.value.price }, success: (res) => { console.log(res.data); //返回成功的状态 console.log(e.detail.value); //获取到表单填入的数据 //返回页面 uni.navigateBack({ delta: 1 }); } }) }
8.页面
同微信小程序一样,uniapp中新增的页面也需要注册才能使用。
在pages.json中"pages":属性注册界面,第一个默认为主界面。
{ "path":"pages/add_b/add", "style":{ "navigationBarTitleText":"添加表单" } },