提交 e05f19dd authored 作者: YunaiV's avatar YunaiV

前端:商品编辑,部分逻辑

上级 788d6c38
...@@ -92,6 +92,11 @@ export default [ ...@@ -92,6 +92,11 @@ export default [
name: 'product-spu-add', name: 'product-spu-add',
component: './Product/ProductSpuAddOrUpdate', component: './Product/ProductSpuAddOrUpdate',
}, },
{
path: '/product/product-spu-update',
name: 'product-spu-update',
component: './Product/ProductSpuAddOrUpdate',
},
{ {
path: '/product/product-category-list', path: '/product/product-category-list',
name: 'product-category-list', name: 'product-category-list',
......
...@@ -6,6 +6,9 @@ import {Icon, Modal, Upload} from "antd"; ...@@ -6,6 +6,9 @@ import {Icon, Modal, Upload} from "antd";
import styles from './PicturesWall.less'; import styles from './PicturesWall.less';
/**
* 照片墙,带有上传图片到七牛。
*/
class PicturesWall extends React.Component { class PicturesWall extends React.Component {
state = { state = {
token: undefined, // 七牛 token token: undefined, // 七牛 token
......
...@@ -48,6 +48,7 @@ export default { ...@@ -48,6 +48,7 @@ export default {
'menu.product': '商品管理', 'menu.product': '商品管理',
'menu.product.product-spu-list': '商品管理', 'menu.product.product-spu-list': '商品管理',
'menu.product.product-spu-add': '商品添加', 'menu.product.product-spu-add': '商品添加',
'menu.product.product-spu-update': '商品编辑',
'menu.product.product-category-list': '商品分类', 'menu.product.product-category-list': '商品分类',
// 订单 // 订单
'menu.order': '订单管理', 'menu.order': '订单管理',
......
import { message } from 'antd'; import { message } from 'antd';
import { productSpuPage, productAttrTree, productCategoryUpdate, productCategoryUpdateStatus, productCategoryDelete } from '../../services/product'; import { productAttrTree } from '../../services/product';
export default { export default {
namespace: 'productAttrList', namespace: 'productAttrList',
...@@ -54,7 +54,7 @@ export default { ...@@ -54,7 +54,7 @@ export default {
*tree({ payload }, { call, put }) { *tree({ payload }, { call, put }) {
const { queryParams } = payload; const { queryParams } = payload;
const response = yield call(productAttrTree, queryParams); const response = yield call(productAttrTree, queryParams);
message.info('查询成功!'); // message.info('查询成功!');
yield put({ yield put({
type: 'treeSuccess', type: 'treeSuccess',
payload: { payload: {
......
import { message } from 'antd'; import { message } from 'antd';
import { productCategoryTree, productSpuAdd, productCategoryUpdate, productCategoryUpdateStatus, productCategoryDelete } from '../../services/product'; import {
productCategoryTree,
productSpuAdd,
productCategoryUpdate,
productCategoryUpdateStatus,
productCategoryDelete,
productSpuInfo
} from '../../services/product';
export default { export default {
namespace: 'productSpuAddOrUpdate', namespace: 'productSpuAddOrUpdate',
state: { state: {
list: [], // list: [],
attrTree: [ loading: false,
spu: { // 商品 SPU
},
attrTree: [ // 商品规格
// { // {
// id: // // id: //
// name: // // name: //
...@@ -16,7 +28,7 @@ export default { ...@@ -16,7 +28,7 @@ export default {
// }] // }]
// } // }
], ],
skus: [ skus: [ // 商品 SKU
// { // {
// attrs: [{ // attrs: [{
// id: // 规格值编号 // id: // 规格值编号
...@@ -29,17 +41,6 @@ export default { ...@@ -29,17 +41,6 @@ export default {
}, },
effects: { effects: {
// *add({ payload }, { call, put }) {
// const { callback, body } = payload;
// const response = yield call(productCategoryAdd, body);
// if (callback) {
// callback(response);
// }
// yield put({
// type: 'tree',
// payload: {},
// });
// },
// *update({ payload }, { call, put }) { // *update({ payload }, { call, put }) {
// const { callback, body } = payload; // const { callback, body } = payload;
// const response = yield call(productCategoryUpdate, body); // const response = yield call(productCategoryUpdate, body);
...@@ -51,25 +52,87 @@ export default { ...@@ -51,25 +52,87 @@ export default {
// payload: {}, // payload: {},
// }); // });
// }, // },
// *updateStatus({ payload }, { call, put }) { *info({ payload }, { call, put }) {
// const { callback, body } = payload; // 显示加载中
// const response = yield call(productCategoryUpdateStatus, body); yield put({
// if (callback) { type: 'changeLoading',
// callback(response); payload: true,
});
// 请求
const response = yield call(productSpuInfo, {
id: payload,
});
// 响应
let skus = [];
let attrTree = [];
// SKU
for (let i in response.data.skus) {
let sku = response.data.skus[i];
// 处理 sku
{
let attrs = [];
for (let j in sku.attrs) {
let attr = sku.attrs[j];
attrs.push({
id: attr.attrValueId,
name: attr.attrValueName,
});
}
let newSku = {
...sku,
attrs,
};
skus.push(newSku);
}
// 处理 attrTree
{
for (let j in sku.attrs) {
// debugger;
let attr = sku.attrs[j];
let attrTreeNode = undefined;
for (let k in attrTree) {
let item = attrTree[k];
if (item.id === attr.attrId) {
attrTreeNode = item;
break;
}
}
if (!attrTreeNode) {
attrTreeNode = {
id: attr.attrId,
name: attr.attrName,
values: [{
id: attr.attrValueId,
name: attr.attrValueName,
}]
};
attrTree.push(attrTreeNode);
} else {
// let values = attrTreeNode.values;
// for (let k in ) {
//
// } // }
// yield put({ }
// type: 'tree', }
// payload: {}, }
// }); }
// }, // debugger;
// *delete({ payload }, { call, put }) { yield put({
// const response = yield call(productCategoryDelete, payload); type: 'setAll',
// message.info('删除成功!'); payload: {
// yield put({ spu: response.data,
// type: 'tree', skus: skus,
// payload: {}, attrTree: attrTree,
// }); },
// }, });
// 隐藏加载中
yield put({
type: 'changeLoading',
payload: false,
});
},
*addAttr({ payload }, { call, put }) { *addAttr({ payload }, { call, put }) {
// const { queryParams } = payload; // const { queryParams } = payload;
// const response = yield call(productCategoryTree, queryParams); // const response = yield call(productCategoryTree, queryParams);
...@@ -212,11 +275,31 @@ export default { ...@@ -212,11 +275,31 @@ export default {
...state ...state
} }
}, },
treeSuccess(state, { payload }) { clear(state, {payload}) {
return { return {
...state, ...state,
...payload, skus: [],
attrTree: [],
}
},
changeLoading(state, { payload }) {
return {
...state,
listLoading: payload,
}; };
}, },
// 设置所有属性
setAll(state, { payload }) {
return {
...state,
...payload,
};
}
// treeSuccess(state, { payload }) {
// return {
// ...state,
// ...payload,
// };
// },
}, },
}; };
...@@ -55,6 +55,11 @@ export default { ...@@ -55,6 +55,11 @@ export default {
// const { callback, body } = payload; // const { callback, body } = payload;
yield put(routerRedux.replace('/product/product-spu-add')); yield put(routerRedux.replace('/product/product-spu-add'));
}, },
*redirectToUpdate({ payload }, { call, put }) {
// const { callback, body } = payload;
debugger;
yield put(routerRedux.replace('/product/product-spu-update?id=' + payload));
},
*page({ payload }, { call, put }) { *page({ payload }, { call, put }) {
// const { queryParams } = payload; // const { queryParams } = payload;
const response = yield call(productSpuPage, payload); const response = yield call(productSpuPage, payload);
......
...@@ -47,6 +47,14 @@ class ProductSpuList extends PureComponent { ...@@ -47,6 +47,14 @@ class ProductSpuList extends PureComponent {
}); });
}; };
redirectToUpdate = (spuId) => {
const { dispatch } = this.props;
dispatch({
type: 'productSpuList/redirectToUpdate',
payload: spuId,
});
};
render() { render() {
// debugger; // debugger;
const { list, data } = this.props; const { list, data } = this.props;
...@@ -103,7 +111,8 @@ class ProductSpuList extends PureComponent { ...@@ -103,7 +111,8 @@ class ProductSpuList extends PureComponent {
width: 200, width: 200,
render: (text, record) => ( render: (text, record) => (
<Fragment> <Fragment>
<a onClick={() => this.handleModalVisible(true, 'update', record)}>更新</a> {/*<a onClick={() => this.handleModalVisible(true, 'update', record)}>更新</a>*/}
<a onClick={() => this.redirectToUpdate(record.id)}>更新</a>
</Fragment> </Fragment>
), ),
}, },
......
...@@ -52,6 +52,12 @@ export async function productSpuAdd(params) { ...@@ -52,6 +52,12 @@ export async function productSpuAdd(params) {
}); });
} }
export async function productSpuInfo(params) {
return request(`/product-api/admins/spu/info?${stringify(params)}`, {
method: 'GET',
});
}
// product attr + attr value // product attr + attr value
export async function productAttrTree(params) { export async function productAttrTree(params) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论