import React, { PureComponent } from 'react';
import { routerRedux } from 'dva/router';
import PropTypes from 'prop-types';
import queryString from 'query-string';
import { connect } from 'dva';
import { Spin, Popover, Badge, Table, Radio, Card, Form, Input, Icon, Button, Select } from 'antd';
import PageHeaderLayout from '../../../layouts/PageHeaderLayout';
import ResourceSelectSortModal from './modal';
import { Codes, resourceType } from '../../../utils/config';
const FormItem = Form.Item;
const Option = Select.Option;
const { TextArea } = Input;
@Form.create()
@connect(state => ({
wareDetail: state.wareDetail,
resource: state.resource,
}))
export default class WareDetail extends PureComponent {
static propTypes = {
wareDetail: PropTypes.object,
};
// 展示模态框 - 加载第一页数据
handleModalShow = () => {
const { dispatch } = this.props;
dispatch({ type: 'wareDetail/showModal' });
dispatch({
type: 'resource/query',
payload: {
pageNo: 1,
pageSize: 10,
}
});
}
// 取消/关闭 - 隐藏模态框
handleModalCancel = () => {
const { dispatch } = this.props;
dispatch({ type: 'wareDetail/hideModal' });
}
// 提交 - 保存选择和排序完的数据到model中
handleModalOk = (data) => {
const { dispatch } = this.props;
dispatch({
type: 'wareDetail/saveSortResult',
payload: { resourceList: data }
});
}
// 搜索
handleModalSearch = (data) => {
const { dispatch } = this.props;
const newData = { ...data };
if (newData.keyword) {
newData[newData.field] = newData.keyword;
delete newData.field;
delete newData.keyword;
} else {
delete newData.field;
delete newData.keyword;
}
dispatch({
type: 'resource/query',
payload: { ...newData, pageNo: 1, pageSize: 10 },
});
}
// 翻页 - 资源列表
handleModalTableOnChange = (pagination, filterArgs, filters) => {
const { dispatch } = this.props;
const newFilters = { ...filters };
if (newFilters.keyword) {
newFilters[newFilters.field] = newFilters.keyword;
delete newFilters.field;
delete newFilters.keyword;
} else {
delete newFilters.field;
delete newFilters.keyword;
}
const getValue = obj => Object.keys(obj).map(key => obj[key]).join(',');
const tableFilters = Object.keys(filterArgs).reduce((obj, key) => {
const newObj = { ...obj };
newObj[key] = getValue(filterArgs[key]);
return newObj;
}, {});
const data = { ...newFilters, ...tableFilters, pageNo: pagination.current, pageSize: pagination.pageSize };
Object.keys(data).map(key => data[key] ? null : delete data[key]);
dispatch({ type: 'resource/query', payload: data });
}
handlePageSubmit = (e) => {
e.preventDefault()
const {
dispatch,
form: {
validateFields,
getFieldsValue,
resetFields
},
wareDetail: {
operType,
currentItem,
filters,
}
} = this.props;
validateFields((errors) => {
if (errors) { return; }
const data = {
...currentItem,
...getFieldsValue(),
};
dispatch({
type: `wareDetail/${operType}`,
payload: data,
callback: () => {
dispatch(
routerRedux.push({
pathname: '/product/ware',
search: queryString.stringify(filters),
})
);
}
})
resetFields();
});
}
handlePageCancel = () => {
const { dispatch, wareDetail: { filters } } = this.props;
dispatch({ type: 'wareDetail/clearPage' });
dispatch(
routerRedux.push({
pathname: '/product/ware',
search: queryString.stringify(filters),
})
);
}
render() {
const { dispatch, form: { getFieldDecorator }, wareDetail, resource } = this.props;
const { itemLoading, currentItem, filters, modalVisible } = wareDetail;
const { resourceList, name, code, digest } = currentItem;
const { list, listLoading, pagination } = resource;
// 待选表格去掉分页的跳转及变换页码
if (pagination) {
delete pagination.showQuickJumper;
delete pagination.showSizeChanger;
}
const subTableColumns = [{
title: '缩略图',
dataIndex: 'url',
key: 'url',
render: (text, record) => (
record.type !== Codes.CODE_IMAGE ? :
}
title={record.name}
>
),
},{
title: '资源编号',
dataIndex: 'code',
key: 'code',
},{
title: '资源名称',
dataIndex: 'name',
key: 'name',
},{
title: '资源类型',
dataIndex: 'type',
key: 'type',
render: (text, record) => (resourceType[record.type]),
}];
const formItemLayout = {
labelCol: {
span: 7,
},
wrapperCol: {
span: 12,
},
};
const submitFormLayout = {
wrapperCol: {
xs: { span: 24, offset: 0 },
sm: { span: 10, offset: 7 },
},
};
return (