0%

《React后台管理系统实战:五》产品管理(五)提交/修改 商品,及跳转回商品列表页面------商品管理完结

详情请点阅读全文

一、商品提交修改

0.ajax请求src/ajax.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import axios from 'axios'
import {message} from 'antd'
/*
能发送异步ajax请求的函数模块
封装axios库
函数的返回值是promise对象
1. 优化1: 统一处理请求异常?
在外层包一个自己创建的promise对象
在请求出错时, 不reject(error), 而是显示错误提示
2. 优化2: 异步得到不是reponse, 而是response.data
在请求成功resolve时: resolve(response.data)
*/
export default function ajax(url, data={}, type='GET') {
return new Promise((resolve, reject) => {
let promise
// 1. 执行异步ajax请求
if(type==='GET') { // 发GET请求
promise = axios.get(url, { // 配置对象
params: data // 指定请求参数
})
} else { // 发POST请求
promise = axios.post(url, data)
}
// 2. 如果成功了, 调用resolve(value)
promise.then(response => {
resolve(response.data)
// 3. 如果失败了, 不调用reject(reason), 而是提示异常信息
}).catch(error => {
// reject(error)
message.error('请求出错了: ' + error.message)
})
})

}

// 请求登陆接口
// ajax('/login', {username: 'Tom', passsword: '12345'}, 'POST').then()
// 添加用户
// ajax('/manage/user/add', {username: 'Tom', passsword: '12345', phone: '13712341234'}, 'POST').then()

1.添加修改商品请求api接口api/index.js

1
2
3
4
5
// 修改商品
// export const reqUpdateProduct = (product) => ajax(BASE + '/manage/product/update', product, 'POST')

// 添加/修改商品二合一
export const reqAddOrUpdateProduct = (product) => ajax(BASE + '/manage/product/' + ( product._id?'update':'add'), product, 'POST')

2.点提交后运行的函数add-update.jsx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
submit = () => {
// 进行表单验证, 如果通过了, 才发送请求
this.props.form.validateFields(async (error, values) => {
if (!error) {

// 1. 收集数据, 并封装成product对象
const {name, desc, price, categoryIds} = values
let pCategoryId, categoryId
if (categoryIds.length===1) {
pCategoryId = '0'
categoryId = categoryIds[0]
} else {
pCategoryId = categoryIds[0]
categoryId = categoryIds[1]
}
const imgs = this.pw.current.getImgs()
const detail = this.editor.current.getDetail()

const product = {name, desc, price, imgs, detail, pCategoryId, categoryId}

// 如果是更新, 需要添加_id
if(this.isUpdate) {
product._id = this.product._id
}

// 2. 调用接口请求函数去添加/更新
const result = await reqAddOrUpdateProduct(product)

// 3. 根据结果提示
if (result.status===0) {
message.success(`${this.isUpdate ? '更新' : '添加'}商品成功!`)
this.props.history.goBack()
} else {
message.error(`${this.isUpdate ? '更新' : '添加'}商品失败!`)
}
}
})
}

3.效果点提交后自动判断是添加还是修改商品,做出正确动作