Commit f649e4b9 authored by ddcat1115's avatar ddcat1115

add BasicProfile

parent de9a38ed
...@@ -3,7 +3,8 @@ import { getRule, postRule } from './mock/rule'; ...@@ -3,7 +3,8 @@ import { getRule, postRule } from './mock/rule';
import { getActivities, getNotice, getFakeList } from './mock/api'; import { getActivities, getNotice, getFakeList } from './mock/api';
import { getFakeChartData } from './mock/chart'; import { getFakeChartData } from './mock/chart';
import { imgMap } from './mock/utils'; import { imgMap } from './mock/utils';
import { getProfileData } from './mock/profile'; import { getProfileBasicData } from './mock/profile';
import { getProfileAdvancedData } from './mock/profile';
import { getNotices } from './mock/notices'; import { getNotices } from './mock/notices';
import { format, delay } from 'roadhog-api-doc'; import { format, delay } from 'roadhog-api-doc';
...@@ -63,7 +64,8 @@ const proxy = { ...@@ -63,7 +64,8 @@ const proxy = {
}), }),
'GET /api/fake_list': getFakeList, 'GET /api/fake_list': getFakeList,
'GET /api/fake_chart_data': getFakeChartData, 'GET /api/fake_chart_data': getFakeChartData,
'GET /api/profile': getProfileData, 'GET /api/profile/basic': getProfileBasicData,
'GET /api/profile/advanced': getProfileAdvancedData,
'POST /api/login/account': (req, res) => { 'POST /api/login/account': (req, res) => {
const { password, userName } = req.body; const { password, userName } = req.body;
res.send({ status: password === '888888' && userName === 'admin' ? 'ok' : 'error', type: 'account' }); res.send({ status: password === '888888' && userName === 'admin' ? 'ok' : 'error', type: 'account' });
......
const operation1 = [ const basicGoods = [
{
id: '1234561',
name: '矿泉水 550ml',
barcode: '12421432143214321',
price: '2.00',
num: '1',
amount: '2.00',
},
{
id: '1234562',
name: '凉茶 300ml',
barcode: '12421432143214322',
price: '3.00',
num: '2',
amount: '6.00',
},
{
id: '1234563',
name: '好吃的薯片',
barcode: '12421432143214323',
price: '7.00',
num: '4',
amount: '28.00',
},
{
id: '1234564',
name: '特别好吃的蛋卷',
barcode: '12421432143214324',
price: '8.50',
num: '3',
amount: '25.50',
},
];
const basicProgress = [
{
key: '1',
time: '2017-10-01 14:10',
rate: '联系客户',
status: 'processing',
operator: '取货员 ID1234',
cost: '5mins',
},
{
key: '2',
time: '2017-10-01 14:05',
rate: '取货员出发',
status: 'success',
operator: '取货员 ID1234',
cost: '1h',
},
{
key: '3',
time: '2017-10-01 13:05',
rate: '取货员接单',
status: 'success',
operator: '取货员 ID1234',
cost: '5mins',
},
{
key: '4',
time: '2017-10-01 13:00',
rate: '申请审批通过',
status: 'success',
operator: '系统',
cost: '1h',
},
{
key: '5',
time: '2017-10-01 12:00',
rate: '发起退货申请',
status: 'success',
operator: '用户',
cost: '5mins',
},
];
const advancedOperation1 = [
{ {
key: 'op1', key: 'op1',
type: '订购关系生效', type: '订购关系生效',
...@@ -41,7 +119,7 @@ const operation1 = [ ...@@ -41,7 +119,7 @@ const operation1 = [
}, },
]; ];
const operation2 = [ const advancedOperation2 = [
{ {
key: 'op1', key: 'op1',
type: '订购关系生效', type: '订购关系生效',
...@@ -52,7 +130,7 @@ const operation2 = [ ...@@ -52,7 +130,7 @@ const operation2 = [
}, },
]; ];
const operation3 = [ const advancedOperation3 = [
{ {
key: 'op1', key: 'op1',
type: '创建订单', type: '创建订单',
...@@ -63,12 +141,18 @@ const operation3 = [ ...@@ -63,12 +141,18 @@ const operation3 = [
}, },
]; ];
export const getProfileData = { export const getProfileBasicData = {
operation1, basicGoods,
operation2, basicProgress,
operation3, };
export const getProfileAdvancedData = {
advancedOperation1,
advancedOperation2,
advancedOperation3,
}; };
export default { export default {
getProfileData, getProfileBasicData,
getProfileAdvancedData,
}; };
...@@ -12,7 +12,9 @@ import FilterCardList from '../routes/List/FilterCardList'; ...@@ -12,7 +12,9 @@ import FilterCardList from '../routes/List/FilterCardList';
import SearchList from '../routes/List/SearchList'; import SearchList from '../routes/List/SearchList';
import BasicList from '../routes/List/BasicList'; import BasicList from '../routes/List/BasicList';
import Profile from '../routes/Profile'; import BasicProfile from '../routes/Profile/BasicProfile';
import AdvancedProfile from '../routes/Profile/AdvancedProfile';
import BasicForm from '../routes/Forms/BasicForm'; import BasicForm from '../routes/Forms/BasicForm';
import AdvancedForm from '../routes/Forms/AdvancedForm'; import AdvancedForm from '../routes/Forms/AdvancedForm';
import StepForm from '../routes/Forms/StepForm'; import StepForm from '../routes/Forms/StepForm';
...@@ -107,8 +109,16 @@ const data = [{ ...@@ -107,8 +109,16 @@ const data = [{
}, { }, {
name: '详情页', name: '详情页',
path: 'profile', path: 'profile',
component: Profile,
icon: 'profile', icon: 'profile',
children: [{
name: '基础详情页',
path: 'basic',
component: BasicProfile,
}, {
name: '高级详情页',
path: 'advanced',
component: AdvancedProfile,
}],
}, { }, {
name: '结果', name: '结果',
path: 'result', path: 'result',
......
import { queryProfile } from '../services/api'; import { queryBasicProfile, queryAdvancedProfile } from '../services/api';
export default { export default {
namespace: 'profile', namespace: 'profile',
state: { state: {
operation1: [], basicGoods: [],
operation2: [], basicLoading: true,
operation3: [], advancedOperation1: [],
loading: true, advancedOperation2: [],
advancedOperation3: [],
advancedLoading: true,
}, },
effects: { effects: {
*fetch({ payload }, { call, put }) { *fetchBasic({ payload }, { call, put }) {
yield put({ yield put({
type: 'changeLoading', type: 'changeLoading',
payload: true, payload: { basicLoading: true },
}); });
const response = yield call(queryProfile); const response = yield call(queryBasicProfile);
yield put({ yield put({
type: 'show', type: 'show',
payload: response, payload: response,
}); });
yield put({ yield put({
type: 'changeLoading', type: 'changeLoading',
payload: false, payload: { basicLoading: false },
});
},
*fetchAdvanced({ payload }, { call, put }) {
yield put({
type: 'changeLoading',
payload: { advancedLoading: true },
});
const response = yield call(queryAdvancedProfile);
yield put({
type: 'show',
payload: response,
});
yield put({
type: 'changeLoading',
payload: { advancedLoading: false },
}); });
}, },
}, },
...@@ -38,7 +55,7 @@ export default { ...@@ -38,7 +55,7 @@ export default {
changeLoading(state, { payload }) { changeLoading(state, { payload }) {
return { return {
...state, ...state,
loading: payload, ...payload,
}; };
}, },
}, },
......
import React, { Component } from 'react'; import React, { Component } from 'react';
import { connect } from 'dva'; import { connect } from 'dva';
import { Button, Menu, Dropdown, Icon, Row, Col, Steps, Card, Popover, Badge, Table, Tooltip } from 'antd'; import { Button, Menu, Dropdown, Icon, Row, Col, Steps, Card, Popover, Badge, Table, Tooltip } from 'antd';
import PageHeaderLayout from '../layouts/PageHeaderLayout'; import PageHeaderLayout from '../../layouts/PageHeaderLayout';
import DescriptionList from '../components/DescriptionList'; import DescriptionList from '../../components/DescriptionList';
import styles from './Profile.less'; import styles from './AdvancedProfile.less';
const { Step } = Steps; const { Step } = Steps;
const { Description } = DescriptionList; const { Description } = DescriptionList;
...@@ -133,7 +133,7 @@ const columns = [{ ...@@ -133,7 +133,7 @@ const columns = [{
@connect(state => ({ @connect(state => ({
profile: state.profile, profile: state.profile,
})) }))
export default class Profile extends Component { export default class AdvancedProfile extends Component {
state = { state = {
operationkey: 'tab1', operationkey: 'tab1',
} }
...@@ -141,7 +141,7 @@ export default class Profile extends Component { ...@@ -141,7 +141,7 @@ export default class Profile extends Component {
componentDidMount() { componentDidMount() {
const { dispatch } = this.props; const { dispatch } = this.props;
dispatch({ dispatch({
type: 'profile/fetch', type: 'profile/fetchAdvanced',
}); });
} }
...@@ -151,24 +151,24 @@ export default class Profile extends Component { ...@@ -151,24 +151,24 @@ export default class Profile extends Component {
render() { render() {
const { profile } = this.props; const { profile } = this.props;
const { loading, operation1, operation2, operation3 } = profile; const { advancedLoading, advancedOperation1, advancedOperation2, advancedOperation3 } = profile;
const contentList = { const contentList = {
tab1: <Table tab1: <Table
pagination={false} pagination={false}
loading={loading} loading={advancedLoading}
dataSource={operation1} dataSource={advancedOperation1}
columns={columns} columns={columns}
/>, />,
tab2: <Table tab2: <Table
pagination={false} pagination={false}
loading={loading} loading={advancedLoading}
dataSource={operation2} dataSource={advancedOperation2}
columns={columns} columns={columns}
/>, />,
tab3: <Table tab3: <Table
pagination={false} pagination={false}
loading={loading} loading={advancedLoading}
dataSource={operation3} dataSource={advancedOperation3}
columns={columns} columns={columns}
/>, />,
}; };
......
import React, { Component } from 'react';
import { connect } from 'dva';
import { Card, Badge, Table } from 'antd';
import PageHeaderLayout from '../../layouts/PageHeaderLayout';
import DescriptionList from '../../components/DescriptionList';
import styles from './BasicProfile.less';
const { Description } = DescriptionList;
const progressColumns = [{
title: '时间',
dataIndex: 'time',
key: 'time',
}, {
title: '当前进度',
dataIndex: 'rate',
key: 'rate',
}, {
title: '状态',
dataIndex: 'status',
key: 'status',
render: text => (
text === 'success' ? <Badge status="success" text="成功" /> : <Badge status="processing" text="进行中" />
),
}, {
title: '操作员ID',
dataIndex: 'operator',
key: 'operator',
}, {
title: '耗时',
dataIndex: 'cost',
key: 'cost',
}];
@connect(state => ({
profile: state.profile,
}))
export default class BasicProfile extends Component {
componentDidMount() {
const { dispatch } = this.props;
dispatch({
type: 'profile/fetchBasic',
});
}
render() {
const { profile } = this.props;
const { basicGoods, basicProgress, basicLoading } = profile;
let goodsData = [];
if (basicGoods.length) {
let num = 0;
let amount = 0;
basicGoods.forEach((item) => {
num += Number(item.num);
amount += Number(item.amount);
});
goodsData = basicGoods.concat({
id: '总计',
num,
amount,
});
}
const renderContent = (value, row, index) => {
const obj = {
children: value,
props: {},
};
if (index === basicGoods.length) {
obj.props.colSpan = 0;
}
return obj;
};
const goodsColumns = [{
title: '商品编号',
dataIndex: 'id',
key: 'id',
render: (text, row, index) => {
if (index < basicGoods.length) {
return <a href="">{text}</a>;
}
return {
children: <span style={{ fontWeight: 600 }}>总计</span>,
props: {
colSpan: 4,
},
};
},
}, {
title: '商品名称',
dataIndex: 'name',
key: 'name',
render: renderContent,
}, {
title: '商品条码',
dataIndex: 'barcode',
key: 'barcode',
render: renderContent,
}, {
title: '单价',
dataIndex: 'price',
key: 'price',
render: renderContent,
}, {
title: '数量(件)',
dataIndex: 'num',
key: 'num',
render: (text, row, index) => {
if (index < basicGoods.length) {
return text;
}
return <span style={{ fontWeight: 600 }}>{text}</span>;
},
}, {
title: '金额',
dataIndex: 'amount',
key: 'amount',
render: (text, row, index) => {
if (index < basicGoods.length) {
return text;
}
return <span style={{ fontWeight: 600 }}>{text}</span>;
},
}];
return (
<PageHeaderLayout title="基础详情页">
<Card bordered={false}>
<DescriptionList title="退款申请" style={{ marginBottom: 24 }}>
<Description term="取货单号">1000000000</Description>
<Description term="状态">已取货</Description>
<Description term="销售单号">1234123421</Description>
<Description term="子订单">3214321432</Description>
</DescriptionList>
<div className={styles.divider} />
<DescriptionList title="用户信息" style={{ marginBottom: 24 }}>
<Description term="用户姓名">付小小</Description>
<Description term="联系电话">18100000000</Description>
<Description term="常用快递">菜鸟仓储</Description>
<Description term="取货地址">浙江省杭州市西湖区万塘路18号</Description>
<Description term="备注">没啥</Description>
</DescriptionList>
<div className={styles.divider} />
<div className={styles.title}>退货商品</div>
<Table
style={{ marginBottom: 24 }}
pagination={false}
loading={basicLoading}
dataSource={goodsData}
columns={goodsColumns}
rowKey="id"
/>
<div className={styles.title}>退货进度</div>
<Table
style={{ marginBottom: 24 }}
pagination={false}
loading={basicLoading}
dataSource={basicProgress}
columns={progressColumns}
/>
</Card>
</PageHeaderLayout>
);
}
}
@import "~antd/lib/style/themes/default.less";
.divider {
border: 0;
border-top: 1px solid @border-color-split;
height: 1px;
margin: 0 0 24px 0;
}
.title {
color: rgba(0, 0, 0, 0.85);
font-weight: 600;
margin-bottom: 16px;
}
...@@ -48,8 +48,12 @@ export async function queryTags() { ...@@ -48,8 +48,12 @@ export async function queryTags() {
return request('/api/tags'); return request('/api/tags');
} }
export async function queryProfile() { export async function queryBasicProfile() {
return request('/api/profile'); return request('/api/profile/basic');
}
export async function queryAdvancedProfile() {
return request('/api/profile/advanced');
} }
export async function queryFakeList(params) { export async function queryFakeList(params) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment